summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2021-08-23 16:46:06 -0300
committerSebastian <sebasjm@gmail.com>2021-08-23 16:48:30 -0300
commit38acabfa6089ab8ac469c12b5f55022fb96935e5 (patch)
tree453dbf70000cc5e338b06201af1eaca8343f8f73
parentf26125e039143b92dc0d84e7775f508ab0cdcaa8 (diff)
downloadnode-vendor-38acabfa6089ab8ac469c12b5f55022fb96935e5.tar.gz
node-vendor-38acabfa6089ab8ac469c12b5f55022fb96935e5.tar.bz2
node-vendor-38acabfa6089ab8ac469c12b5f55022fb96935e5.zip
added web vendorsHEADmaster
-rw-r--r--@emotion/is-prop-valid/index.js23
-rw-r--r--@linaria/.all-contributorsrc271
-rw-r--r--@linaria/.circleci/comment-artifacts.sh22
-rw-r--r--@linaria/.circleci/config.yml110
-rw-r--r--@linaria/.codecov.yml11
-rw-r--r--@linaria/.editorconfig21
-rw-r--r--@linaria/.eslintignore10
-rw-r--r--@linaria/.eslintrc29
-rw-r--r--@linaria/.flowconfig14
-rw-r--r--@linaria/.github/ISSUE_TEMPLATE/bug_report.md38
-rw-r--r--@linaria/.github/ISSUE_TEMPLATE/config.yml5
-rw-r--r--@linaria/.github/ISSUE_TEMPLATE/enhancement_request.md21
-rw-r--r--@linaria/.github/ISSUE_TEMPLATE/feature_request.md21
-rw-r--r--@linaria/.github/PULL_REQUEST_TEMPLATE.md31
-rw-r--r--@linaria/.github/labels.json421
-rw-r--r--@linaria/.github/workflows/main.yml21
-rw-r--r--@linaria/.github/workflows/site-deploy.yml25
-rw-r--r--@linaria/.gitignore70
-rw-r--r--@linaria/.prettierrc4
-rw-r--r--@linaria/.release-it.json17
-rw-r--r--@linaria/.vscode/settings.json3
-rw-r--r--@linaria/CHANGELOG.md131
-rw-r--r--@linaria/CODE_OF_CONDUCT.md73
-rw-r--r--@linaria/CONTRIBUTING.md133
-rw-r--r--@linaria/LICENSE21
-rw-r--r--@linaria/README.md268
-rw-r--r--@linaria/babel.config.js93
-rw-r--r--@linaria/commitlint.config.js3
-rw-r--r--@linaria/docs/API.md152
-rw-r--r--@linaria/docs/BASICS.md464
-rw-r--r--@linaria/docs/BENEFITS.md142
-rw-r--r--@linaria/docs/BUNDLERS_INTEGRATION.md396
-rw-r--r--@linaria/docs/CLI.md37
-rw-r--r--@linaria/docs/CONFIGURATION.md293
-rw-r--r--@linaria/docs/CRITICAL_CSS.md61
-rw-r--r--@linaria/docs/DYNAMIC_STYLES.md108
-rw-r--r--@linaria/docs/HOW_IT_WORKS.md188
-rw-r--r--@linaria/docs/LINTING.md44
-rw-r--r--@linaria/docs/MIGRATION_GUIDE.md55
-rw-r--r--@linaria/docs/THEMING.md102
-rw-r--r--@linaria/examples/Preact/preact-example/.gitignore6
-rw-r--r--@linaria/examples/Preact/preact-example/README.md22
-rw-r--r--@linaria/examples/Preact/preact-example/package.json45
-rw-r--r--@linaria/examples/Preact/preact-example/preact.config.js20
-rw-r--r--@linaria/examples/Preact/preact-example/size-plugin.json1
-rw-r--r--@linaria/examples/Preact/preact-example/src/assets/favicon.icobin0 -> 15086 bytes
-rw-r--r--@linaria/examples/Preact/preact-example/src/assets/icons/android-chrome-192x192.pngbin0 -> 14058 bytes
-rw-r--r--@linaria/examples/Preact/preact-example/src/assets/icons/android-chrome-512x512.pngbin0 -> 51484 bytes
-rw-r--r--@linaria/examples/Preact/preact-example/src/assets/icons/apple-touch-icon.pngbin0 -> 12746 bytes
-rw-r--r--@linaria/examples/Preact/preact-example/src/assets/icons/favicon-16x16.pngbin0 -> 626 bytes
-rw-r--r--@linaria/examples/Preact/preact-example/src/assets/icons/favicon-32x32.pngbin0 -> 1487 bytes
-rw-r--r--@linaria/examples/Preact/preact-example/src/assets/icons/mstile-150x150.pngbin0 -> 9050 bytes
-rw-r--r--@linaria/examples/Preact/preact-example/src/components/app.js43
-rw-r--r--@linaria/examples/Preact/preact-example/src/components/header/index.js34
-rw-r--r--@linaria/examples/Preact/preact-example/src/components/header/style.css38
-rw-r--r--@linaria/examples/Preact/preact-example/src/index.js4
-rw-r--r--@linaria/examples/Preact/preact-example/src/manifest.json21
-rw-r--r--@linaria/examples/Preact/preact-example/src/routes/home/index.js11
-rw-r--r--@linaria/examples/Preact/preact-example/src/routes/home/style.css5
-rw-r--r--@linaria/examples/Preact/preact-example/src/routes/profile/index.js47
-rw-r--r--@linaria/examples/Preact/preact-example/src/routes/profile/style.css5
-rw-r--r--@linaria/examples/Preact/preact-example/src/style/index.css20
-rw-r--r--@linaria/examples/Preact/preact-example/tests/__mocks__/browserMocks.js21
-rw-r--r--@linaria/examples/Preact/preact-example/tests/__mocks__/fileMocks.js3
-rw-r--r--@linaria/examples/Preact/preact-example/tests/__mocks__/setupTests.js6
-rw-r--r--@linaria/examples/Preact/preact-example/tests/header.test.js12
-rw-r--r--@linaria/examples/gatsby/custom-config/.gitignore69
-rw-r--r--@linaria/examples/gatsby/custom-config/.prettierignore4
-rw-r--r--@linaria/examples/gatsby/custom-config/.prettierrc4
-rw-r--r--@linaria/examples/gatsby/custom-config/LICENSE22
-rw-r--r--@linaria/examples/gatsby/custom-config/README.md99
-rw-r--r--@linaria/examples/gatsby/custom-config/babel.config.js12
-rw-r--r--@linaria/examples/gatsby/custom-config/gatsby-browser.js7
-rw-r--r--@linaria/examples/gatsby/custom-config/gatsby-config.js34
-rw-r--r--@linaria/examples/gatsby/custom-config/gatsby-node.js26
-rw-r--r--@linaria/examples/gatsby/custom-config/gatsby-ssr.js7
-rw-r--r--@linaria/examples/gatsby/custom-config/package.json46
-rw-r--r--@linaria/examples/gatsby/custom-config/src/components/header.js42
-rw-r--r--@linaria/examples/gatsby/custom-config/src/components/image.js32
-rw-r--r--@linaria/examples/gatsby/custom-config/src/components/layout.css622
-rw-r--r--@linaria/examples/gatsby/custom-config/src/components/layout.js51
-rw-r--r--@linaria/examples/gatsby/custom-config/src/components/seo.js88
-rw-r--r--@linaria/examples/gatsby/custom-config/src/images/gatsby-astronaut.pngbin0 -> 167273 bytes
-rw-r--r--@linaria/examples/gatsby/custom-config/src/images/gatsby-icon.pngbin0 -> 21212 bytes
-rw-r--r--@linaria/examples/gatsby/custom-config/src/pages/404.js14
-rw-r--r--@linaria/examples/gatsby/custom-config/src/pages/index.js28
-rw-r--r--@linaria/examples/gatsby/custom-config/src/pages/page-2.js16
-rw-r--r--@linaria/examples/gatsby/custom-config/src/pages/using-typescript.tsx34
-rw-r--r--@linaria/examples/gatsby/custom-config/yarn.lock15445
-rw-r--r--@linaria/examples/gatsby/plugin/.gitignore72
-rw-r--r--@linaria/examples/gatsby/plugin/.prettierignore4
-rw-r--r--@linaria/examples/gatsby/plugin/.prettierrc4
-rw-r--r--@linaria/examples/gatsby/plugin/LICENSE22
-rw-r--r--@linaria/examples/gatsby/plugin/README.md99
-rw-r--r--@linaria/examples/gatsby/plugin/gatsby-browser.js7
-rw-r--r--@linaria/examples/gatsby/plugin/gatsby-config.js35
-rw-r--r--@linaria/examples/gatsby/plugin/gatsby-node.js7
-rw-r--r--@linaria/examples/gatsby/plugin/gatsby-ssr.js7
-rw-r--r--@linaria/examples/gatsby/plugin/package.json46
-rw-r--r--@linaria/examples/gatsby/plugin/src/components/header.js42
-rw-r--r--@linaria/examples/gatsby/plugin/src/components/image.js32
-rw-r--r--@linaria/examples/gatsby/plugin/src/components/layout.css622
-rw-r--r--@linaria/examples/gatsby/plugin/src/components/layout.js51
-rw-r--r--@linaria/examples/gatsby/plugin/src/components/seo.js88
-rw-r--r--@linaria/examples/gatsby/plugin/src/images/gatsby-astronaut.pngbin0 -> 167273 bytes
-rw-r--r--@linaria/examples/gatsby/plugin/src/images/gatsby-icon.pngbin0 -> 21212 bytes
-rw-r--r--@linaria/examples/gatsby/plugin/src/pages/404.js14
-rw-r--r--@linaria/examples/gatsby/plugin/src/pages/index.js28
-rw-r--r--@linaria/examples/gatsby/plugin/src/pages/page-2.js16
-rw-r--r--@linaria/examples/gatsby/plugin/src/pages/using-typescript.tsx34
-rw-r--r--@linaria/examples/gatsby/plugin/yarn.lock15409
-rw-r--r--@linaria/greenkeeper.json10
-rw-r--r--@linaria/jest.config.js5
-rw-r--r--@linaria/lerna.json23
-rw-r--r--@linaria/package.json76
-rw-r--r--@linaria/packages/babel/CHANGELOG.md55
-rw-r--r--@linaria/packages/babel/README.md35
-rw-r--r--@linaria/packages/babel/__fixtures__/complex-component.js21
-rw-r--r--@linaria/packages/babel/__fixtures__/components-library.js16
-rw-r--r--@linaria/packages/babel/__fixtures__/enums.ts3
-rw-r--r--@linaria/packages/babel/__fixtures__/escape-character.js7
-rw-r--r--@linaria/packages/babel/__fixtures__/sample-asset.png0
-rw-r--r--@linaria/packages/babel/__fixtures__/sample-data.json10
-rw-r--r--@linaria/packages/babel/__fixtures__/sample-script.js1
-rw-r--r--@linaria/packages/babel/__fixtures__/sample-typescript.tsx1
-rw-r--r--@linaria/packages/babel/__fixtures__/slugify.ts3
-rw-r--r--@linaria/packages/babel/__fixtures__/ts-data.ts4
-rw-r--r--@linaria/packages/babel/__tests__/__snapshots__/babel.test.ts.snap617
-rw-r--r--@linaria/packages/babel/__tests__/__snapshots__/dynamic-import-noop.test.js.snap8
-rw-r--r--@linaria/packages/babel/__tests__/__snapshots__/transform.test.ts.snap16
-rw-r--r--@linaria/packages/babel/__tests__/babel.test.ts524
-rw-r--r--@linaria/packages/babel/__tests__/depsGraph.test.ts356
-rw-r--r--@linaria/packages/babel/__tests__/dynamic-import-noop.test.js15
-rw-r--r--@linaria/packages/babel/__tests__/evaluators/__snapshots__/extractor.test.ts.snap237
-rw-r--r--@linaria/packages/babel/__tests__/evaluators/__snapshots__/preeval.test.ts.snap60
-rw-r--r--@linaria/packages/babel/__tests__/evaluators/__snapshots__/shaker.test.ts.snap213
-rw-r--r--@linaria/packages/babel/__tests__/evaluators/extractor.test.ts214
-rw-r--r--@linaria/packages/babel/__tests__/evaluators/preeval.test.ts121
-rw-r--r--@linaria/packages/babel/__tests__/evaluators/shaker.test.ts259
-rw-r--r--@linaria/packages/babel/__tests__/module.test.ts320
-rw-r--r--@linaria/packages/babel/__tests__/transform.test.ts237
-rw-r--r--@linaria/packages/babel/__utils__/linaria-snapshot-serializer.ts26
-rw-r--r--@linaria/packages/babel/__utils__/strategy-tester.ts976
-rw-r--r--@linaria/packages/babel/babel.config.js3
-rw-r--r--@linaria/packages/babel/package.json60
-rw-r--r--@linaria/packages/babel/src/babel.ts3
-rw-r--r--@linaria/packages/babel/src/dynamic-import-noop.ts26
-rw-r--r--@linaria/packages/babel/src/eval-cache.ts87
-rw-r--r--@linaria/packages/babel/src/evaluators/buildOptions.ts104
-rw-r--r--@linaria/packages/babel/src/evaluators/index.ts22
-rw-r--r--@linaria/packages/babel/src/evaluators/templateProcessor.ts313
-rw-r--r--@linaria/packages/babel/src/evaluators/visitors/JSXElement.ts56
-rw-r--r--@linaria/packages/babel/src/evaluators/visitors/ProcessCSS.ts20
-rw-r--r--@linaria/packages/babel/src/evaluators/visitors/ProcessStyled.ts46
-rw-r--r--@linaria/packages/babel/src/extract.ts222
-rw-r--r--@linaria/packages/babel/src/index.ts45
-rw-r--r--@linaria/packages/babel/src/module.ts373
-rw-r--r--@linaria/packages/babel/src/plugin-syntax-dynamic-import.d.ts4
-rw-r--r--@linaria/packages/babel/src/process.ts31
-rw-r--r--@linaria/packages/babel/src/transform.ts187
-rw-r--r--@linaria/packages/babel/src/types.ts180
-rw-r--r--@linaria/packages/babel/src/units.ts101
-rw-r--r--@linaria/packages/babel/src/utils/getLinariaComment.ts31
-rw-r--r--@linaria/packages/babel/src/utils/getVisitorKeys.ts10
-rw-r--r--@linaria/packages/babel/src/utils/hasImport.ts83
-rw-r--r--@linaria/packages/babel/src/utils/isBoxedPrimitive.ts10
-rw-r--r--@linaria/packages/babel/src/utils/isNode.ts5
-rw-r--r--@linaria/packages/babel/src/utils/isSerializable.ts11
-rw-r--r--@linaria/packages/babel/src/utils/isStyledOrCss.ts67
-rw-r--r--@linaria/packages/babel/src/utils/loadOptions.ts38
-rw-r--r--@linaria/packages/babel/src/utils/peek.ts3
-rw-r--r--@linaria/packages/babel/src/utils/slugify.ts83
-rw-r--r--@linaria/packages/babel/src/utils/stripLines.ts23
-rw-r--r--@linaria/packages/babel/src/utils/throwIfInvalid.ts49
-rw-r--r--@linaria/packages/babel/src/utils/toCSS.ts57
-rw-r--r--@linaria/packages/babel/src/utils/toValidCSSIdentifier.ts3
-rw-r--r--@linaria/packages/babel/src/visitors/CollectDependencies.ts132
-rw-r--r--@linaria/packages/babel/src/visitors/DetectStyledImportName.ts33
-rw-r--r--@linaria/packages/babel/src/visitors/GenerateClassNames.ts161
-rw-r--r--@linaria/packages/babel/tsconfig.json8
-rw-r--r--@linaria/packages/cli/CHANGELOG.md46
-rw-r--r--@linaria/packages/cli/README.md35
-rw-r--r--@linaria/packages/cli/babel.config.js3
-rwxr-xr-x@linaria/packages/cli/bin/linaria.js5
-rw-r--r--@linaria/packages/cli/package.json57
-rw-r--r--@linaria/packages/cli/src/linaria.ts174
-rw-r--r--@linaria/packages/cli/tsconfig.json5
-rw-r--r--@linaria/packages/core/CHANGELOG.md27
-rw-r--r--@linaria/packages/core/README.md35
-rw-r--r--@linaria/packages/core/__tests__/cx.test.ts7
-rw-r--r--@linaria/packages/core/__tests__/detect-core-js.test.js35
-rw-r--r--@linaria/packages/core/babel.config.js3
-rw-r--r--@linaria/packages/core/package.json40
-rw-r--r--@linaria/packages/core/src/CSSProperties.ts3
-rw-r--r--@linaria/packages/core/src/StyledMeta.ts6
-rw-r--r--@linaria/packages/core/src/css.ts15
-rw-r--r--@linaria/packages/core/src/cx.ts9
-rw-r--r--@linaria/packages/core/src/index.ts4
-rw-r--r--@linaria/packages/core/tsconfig.json7
-rw-r--r--@linaria/packages/esbuild/CHANGELOG.md34
-rw-r--r--@linaria/packages/esbuild/README.md35
-rw-r--r--@linaria/packages/esbuild/babel.config.js3
-rw-r--r--@linaria/packages/esbuild/package.json48
-rw-r--r--@linaria/packages/esbuild/src/index.ts106
-rw-r--r--@linaria/packages/esbuild/tsconfig.json12
-rw-r--r--@linaria/packages/extractor/CHANGELOG.md51
-rw-r--r--@linaria/packages/extractor/README.md35
-rw-r--r--@linaria/packages/extractor/__tests__/__snapshots__/extractor.test.ts.snap1126
-rw-r--r--@linaria/packages/extractor/__tests__/extractor.test.ts5
-rw-r--r--@linaria/packages/extractor/babel.config.js3
-rw-r--r--@linaria/packages/extractor/package.json51
-rw-r--r--@linaria/packages/extractor/src/RequirementsResolver.ts212
-rw-r--r--@linaria/packages/extractor/src/index.ts144
-rw-r--r--@linaria/packages/extractor/tsconfig.json5
-rw-r--r--@linaria/packages/interop/CHANGELOG.md19
-rw-r--r--@linaria/packages/interop/README.md45
-rw-r--r--@linaria/packages/interop/__tests__/__snapshots__/index.test.js.snap73
-rw-r--r--@linaria/packages/interop/__tests__/index.test.js117
-rw-r--r--@linaria/packages/interop/index.js54
-rw-r--r--@linaria/packages/interop/package.json22
-rw-r--r--@linaria/packages/linaria/CHANGELOG.md80
-rw-r--r--@linaria/packages/linaria/README.md35
-rw-r--r--@linaria/packages/linaria/babel.config.js3
-rw-r--r--@linaria/packages/linaria/babel/package.json5
-rw-r--r--@linaria/packages/linaria/evaluators/package.json5
-rw-r--r--@linaria/packages/linaria/loader/package.json5
-rw-r--r--@linaria/packages/linaria/package.json58
-rw-r--r--@linaria/packages/linaria/react/package.json5
-rw-r--r--@linaria/packages/linaria/rollup/package.json5
-rw-r--r--@linaria/packages/linaria/server/package.json5
-rw-r--r--@linaria/packages/linaria/src/babel.ts4
-rw-r--r--@linaria/packages/linaria/src/core.ts1
-rw-r--r--@linaria/packages/linaria/src/evaluators.ts4
-rw-r--r--@linaria/packages/linaria/src/react.ts1
-rw-r--r--@linaria/packages/linaria/src/rollup.ts4
-rw-r--r--@linaria/packages/linaria/src/server.ts1
-rw-r--r--@linaria/packages/linaria/src/stylelint.ts1
-rw-r--r--@linaria/packages/linaria/src/webpack4-loader.ts4
-rw-r--r--@linaria/packages/linaria/stylelint-config/package.json5
-rw-r--r--@linaria/packages/linaria/tsconfig.json15
-rw-r--r--@linaria/packages/logger/CHANGELOG.md8
-rw-r--r--@linaria/packages/logger/README.md35
-rw-r--r--@linaria/packages/logger/babel.config.js3
-rw-r--r--@linaria/packages/logger/package.json44
-rw-r--r--@linaria/packages/logger/src/index.ts63
-rw-r--r--@linaria/packages/logger/tsconfig.json7
-rw-r--r--@linaria/packages/preeval/CHANGELOG.md51
-rw-r--r--@linaria/packages/preeval/README.md35
-rw-r--r--@linaria/packages/preeval/babel.config.js3
-rw-r--r--@linaria/packages/preeval/package.json46
-rw-r--r--@linaria/packages/preeval/src/babel.ts3
-rw-r--r--@linaria/packages/preeval/src/index.ts88
-rw-r--r--@linaria/packages/preeval/tsconfig.json5
-rw-r--r--@linaria/packages/react/CHANGELOG.md46
-rw-r--r--@linaria/packages/react/README.md35
-rw-r--r--@linaria/packages/react/__dtslint__/index.d.ts2
-rw-r--r--@linaria/packages/react/__dtslint__/styled.ts135
-rw-r--r--@linaria/packages/react/__dtslint__/tsconfig.json14
-rw-r--r--@linaria/packages/react/__tests__/__snapshots__/styled.test.js.snap143
-rw-r--r--@linaria/packages/react/__tests__/detect-core-js.test.js35
-rw-r--r--@linaria/packages/react/__tests__/styled.test.js256
-rw-r--r--@linaria/packages/react/babel.config.js3
-rw-r--r--@linaria/packages/react/package.json53
-rw-r--r--@linaria/packages/react/src/index.ts2
-rw-r--r--@linaria/packages/react/src/styled.ts224
-rw-r--r--@linaria/packages/react/tsconfig.json8
-rw-r--r--@linaria/packages/rollup/CHANGELOG.md51
-rw-r--r--@linaria/packages/rollup/README.md35
-rw-r--r--@linaria/packages/rollup/babel.config.js3
-rw-r--r--@linaria/packages/rollup/package.json52
-rw-r--r--@linaria/packages/rollup/src/index.ts70
-rw-r--r--@linaria/packages/rollup/tsconfig.json5
-rw-r--r--@linaria/packages/server/CHANGELOG.md8
-rw-r--r--@linaria/packages/server/README.md35
-rw-r--r--@linaria/packages/server/__tests__/__snapshots__/collect.test.ts.snap300
-rw-r--r--@linaria/packages/server/__tests__/collect.test.ts235
-rw-r--r--@linaria/packages/server/babel.config.js3
-rw-r--r--@linaria/packages/server/package.json46
-rw-r--r--@linaria/packages/server/src/collect.ts115
-rw-r--r--@linaria/packages/server/src/index.ts1
-rw-r--r--@linaria/packages/server/tsconfig.json7
-rw-r--r--@linaria/packages/shaker/CHANGELOG.md88
-rw-r--r--@linaria/packages/shaker/README.md35
-rw-r--r--@linaria/packages/shaker/__fixtures__/bar.js2
-rw-r--r--@linaria/packages/shaker/__fixtures__/foo.js2
-rw-r--r--@linaria/packages/shaker/__fixtures__/reexports.js2
-rw-r--r--@linaria/packages/shaker/__tests__/__snapshots__/shaker.test.ts.snap1229
-rw-r--r--@linaria/packages/shaker/__tests__/shaker.test.ts100
-rw-r--r--@linaria/packages/shaker/babel.config.js3
-rw-r--r--@linaria/packages/shaker/package.json59
-rw-r--r--@linaria/packages/shaker/src/DepsGraph.ts149
-rw-r--r--@linaria/packages/shaker/src/GraphBuilderState.ts45
-rw-r--r--@linaria/packages/shaker/src/Visitors.ts87
-rw-r--r--@linaria/packages/shaker/src/dumpNode.ts63
-rw-r--r--@linaria/packages/shaker/src/graphBuilder.ts192
-rw-r--r--@linaria/packages/shaker/src/identifierHandlers.ts130
-rw-r--r--@linaria/packages/shaker/src/index.ts65
-rw-r--r--@linaria/packages/shaker/src/langs/core.ts653
-rw-r--r--@linaria/packages/shaker/src/scope.ts210
-rw-r--r--@linaria/packages/shaker/src/shaker.ts127
-rw-r--r--@linaria/packages/shaker/src/types.ts22
-rw-r--r--@linaria/packages/shaker/tsconfig.json9
-rw-r--r--@linaria/packages/stylelint/CHANGELOG.md40
-rw-r--r--@linaria/packages/stylelint/README.md35
-rw-r--r--@linaria/packages/stylelint/babel.config.js3
-rw-r--r--@linaria/packages/stylelint/package.json42
-rw-r--r--@linaria/packages/stylelint/src/index.ts12
-rw-r--r--@linaria/packages/stylelint/src/preprocessor.ts185
-rw-r--r--@linaria/packages/stylelint/tsconfig.json5
-rw-r--r--@linaria/packages/webpack-loader/CHANGELOG.md48
-rw-r--r--@linaria/packages/webpack-loader/README.md35
-rw-r--r--@linaria/packages/webpack-loader/babel.config.js3
-rw-r--r--@linaria/packages/webpack-loader/package.json47
-rw-r--r--@linaria/packages/webpack-loader/src/index.ts21
-rw-r--r--@linaria/packages/webpack-loader/tsconfig.json8
-rw-r--r--@linaria/packages/webpack4-loader/CHANGELOG.md54
-rw-r--r--@linaria/packages/webpack4-loader/README.md35
-rw-r--r--@linaria/packages/webpack4-loader/babel.config.js3
-rw-r--r--@linaria/packages/webpack4-loader/package.json61
-rw-r--r--@linaria/packages/webpack4-loader/src/index.ts167
-rw-r--r--@linaria/packages/webpack4-loader/tsconfig.json5
-rw-r--r--@linaria/packages/webpack5-loader/CHANGELOG.md54
-rw-r--r--@linaria/packages/webpack5-loader/README.md35
-rw-r--r--@linaria/packages/webpack5-loader/babel.config.js3
-rw-r--r--@linaria/packages/webpack5-loader/package.json63
-rw-r--r--@linaria/packages/webpack5-loader/src/index.ts162
-rw-r--r--@linaria/packages/webpack5-loader/tsconfig.json5
-rw-r--r--@linaria/react/package.json5
-rw-r--r--@linaria/tsconfig.json28
-rw-r--r--@linaria/tsconfig.prod.json4
-rw-r--r--@linaria/tslint.json11
-rw-r--r--@linaria/website/.eslintrc5
-rw-r--r--@linaria/website/CHANGELOG.md56
-rw-r--r--@linaria/website/assets/code-sample.pngbin0 -> 80713 bytes
-rw-r--r--@linaria/website/assets/linaria-logo.svg14
-rw-r--r--@linaria/website/assets/linaria-logo@2x.pngbin0 -> 15474 bytes
-rw-r--r--@linaria/website/assets/linaria-logomark.svg9
-rw-r--r--@linaria/website/babel.config.js20
-rw-r--r--@linaria/website/index.html19
-rw-r--r--@linaria/website/linaria.config.js3
-rw-r--r--@linaria/website/package.json55
-rw-r--r--@linaria/website/serve.config.js9
-rw-r--r--@linaria/website/src/.eslintrc5
-rw-r--r--@linaria/website/src/components/App.js22
-rw-r--r--@linaria/website/src/components/Container.js11
-rw-r--r--@linaria/website/src/components/Header.js101
-rw-r--r--@linaria/website/src/components/Hero.js122
-rw-r--r--@linaria/website/src/index.js36
-rw-r--r--@linaria/website/src/server.js73
-rw-r--r--@linaria/website/src/styles/constants.js8
-rw-r--r--@linaria/website/src/styles/utils.js11
-rw-r--r--@linaria/website/stylelint.config.js6
-rw-r--r--@linaria/website/webpack.config.js57
-rw-r--r--@linaria/website/yarn.lock6175
-rw-r--r--@linaria/yarn.lock14864
-rw-r--r--README16
-rw-r--r--big-integer/.travis.yml9
-rw-r--r--big-integer/BigInteger.d.ts13
-rw-r--r--big-integer/BigInteger.js57
-rw-r--r--big-integer/BigInteger.min.js2
-rw-r--r--big-integer/README.md58
-rw-r--r--big-integer/benchmark/tests.js25
-rw-r--r--big-integer/package.json18
-rw-r--r--big-integer/spec/spec.js31
-rw-r--r--big-integer/spec/tsDefinitions.ts53
-rw-r--r--big-integer/tsconfig.json3
-rw-r--r--date-fns/.babelrc.js32
-rw-r--r--date-fns/.editorconfig11
-rw-r--r--date-fns/.eslintignore3
-rw-r--r--date-fns/.eslintrc.js12
-rw-r--r--date-fns/.flowconfig4
-rw-r--r--date-fns/.github/FUNDING.yml9
-rw-r--r--date-fns/.github/workflows/coverage.yaml21
-rw-r--r--date-fns/.github/workflows/deploy.yaml21
-rw-r--r--date-fns/.github/workflows/main_tests.yaml31
-rw-r--r--date-fns/.github/workflows/node_tests.yaml31
-rw-r--r--date-fns/.github/workflows/timezone_step_1.yaml33
-rw-r--r--date-fns/.github/workflows/timezone_step_2.yaml33
-rw-r--r--date-fns/.gitignore11
-rw-r--r--date-fns/.prettierrc.js4
-rw-r--r--date-fns/.tool-versions1
-rw-r--r--date-fns/.ts-eslintrc.js32
-rw-r--r--date-fns/CHANGELOG.md2359
-rw-r--r--date-fns/CONTRIBUTING.md139
-rw-r--r--date-fns/LICENSE.md6
-rw-r--r--date-fns/README.md69
-rw-r--r--date-fns/benchmark.js2
-rw-r--r--date-fns/config/.eslintrc.js5
-rw-r--r--date-fns/config/_lib/benchmarkJSONReporter.js48
-rw-r--r--date-fns/config/_lib/countReporter.js34
-rw-r--r--date-fns/config/karma.js220
-rw-r--r--date-fns/config/webpack.js79
-rw-r--r--date-fns/docs/.eslintrc.js5
-rw-r--r--date-fns/docs/Day.js15
-rw-r--r--date-fns/docs/Duration.js19
-rw-r--r--date-fns/docs/Interval.js16
-rw-r--r--date-fns/docs/Locale.js64
-rw-r--r--date-fns/docs/constants.md47
-rw-r--r--date-fns/docs/esm.md24
-rw-r--r--date-fns/docs/fp.md70
-rw-r--r--date-fns/docs/gettingStarted.md87
-rw-r--r--date-fns/docs/i18n.md92
-rw-r--r--date-fns/docs/i18nContributionGuide.md921
-rw-r--r--date-fns/docs/index.js147
-rw-r--r--date-fns/docs/logo.svg26
-rw-r--r--date-fns/docs/logotype.svg1
-rw-r--r--date-fns/docs/timeZones.md63
-rw-r--r--date-fns/docs/unicodeTokens.md54
-rw-r--r--date-fns/docs/upgradeGuide.md118
-rw-r--r--date-fns/docs/webpack.md48
-rw-r--r--date-fns/examples/.eslintrc.js5
-rw-r--r--date-fns/examples/babel/.babelrc4
-rw-r--r--date-fns/examples/babel/README.md23
-rw-r--r--date-fns/examples/babel/example.js4
-rw-r--r--date-fns/examples/babel/package.json27
-rw-r--r--date-fns/examples/babel/webpack.config.js14
-rw-r--r--date-fns/examples/babel/yarn.lock2791
-rw-r--r--date-fns/examples/browserify/README.md23
-rw-r--r--date-fns/examples/browserify/example.js4
-rw-r--r--date-fns/examples/browserify/fp.js19
-rw-r--r--date-fns/examples/browserify/misc.js10
-rw-r--r--date-fns/examples/browserify/package.json31
-rw-r--r--date-fns/examples/browserify/yarn.lock2454
-rw-r--r--date-fns/examples/flow/.babelrc3
-rw-r--r--date-fns/examples/flow/.flowconfig2
-rw-r--r--date-fns/examples/flow/README.md12
-rw-r--r--date-fns/examples/flow/constants.js.flow11
-rw-r--r--date-fns/examples/flow/example.js.flow8
-rw-r--r--date-fns/examples/flow/fp.js.flow19
-rw-r--r--date-fns/examples/flow/misc.js.flow9
-rw-r--r--date-fns/examples/flow/package.json28
-rw-r--r--date-fns/examples/flow/yarn.lock1432
-rw-r--r--date-fns/examples/lodash-fp/.babelrc3
-rw-r--r--date-fns/examples/lodash-fp/README.md23
-rw-r--r--date-fns/examples/lodash-fp/example.js30
-rw-r--r--date-fns/examples/lodash-fp/package.json27
-rw-r--r--date-fns/examples/lodash-fp/webpack.config.js14
-rw-r--r--date-fns/examples/lodash-fp/yarn.lock2779
-rw-r--r--date-fns/examples/rollup/README.md23
-rw-r--r--date-fns/examples/rollup/example.js4
-rw-r--r--date-fns/examples/rollup/fp.js18
-rw-r--r--date-fns/examples/rollup/misc.js9
-rw-r--r--date-fns/examples/rollup/package.json33
-rw-r--r--date-fns/examples/rollup/rollup.config.example.js12
-rw-r--r--date-fns/examples/rollup/rollup.config.fp.js12
-rw-r--r--date-fns/examples/rollup/rollup.config.misc.js12
-rw-r--r--date-fns/examples/rollup/yarn.lock1932
-rw-r--r--date-fns/examples/typescript/README.md14
-rw-r--r--date-fns/examples/typescript/constants.ts9
-rw-r--r--date-fns/examples/typescript/example.ts7
-rw-r--r--date-fns/examples/typescript/fp.ts17
-rw-r--r--date-fns/examples/typescript/misc.ts7
-rw-r--r--date-fns/examples/typescript/package.json23
-rw-r--r--date-fns/examples/typescript/yarn.lock2634
-rw-r--r--date-fns/examples/webpack-1.x/README.md23
-rw-r--r--date-fns/examples/webpack-1.x/constants.js9
-rw-r--r--date-fns/examples/webpack-1.x/example.js4
-rw-r--r--date-fns/examples/webpack-1.x/fp.js19
-rw-r--r--date-fns/examples/webpack-1.x/misc.js10
-rw-r--r--date-fns/examples/webpack-1.x/package.json30
-rw-r--r--date-fns/examples/webpack-1.x/yarn.lock2344
-rw-r--r--date-fns/examples/webpack-2.x/README.md26
-rw-r--r--date-fns/examples/webpack-2.x/example.js4
-rw-r--r--date-fns/examples/webpack-2.x/fp.js18
-rw-r--r--date-fns/examples/webpack-2.x/misc.js9
-rw-r--r--date-fns/examples/webpack-2.x/package.json28
-rw-r--r--date-fns/examples/webpack-2.x/yarn.lock2642
-rw-r--r--date-fns/examples/webpack-4.x/README.md29
-rw-r--r--date-fns/examples/webpack-4.x/constants.js9
-rw-r--r--date-fns/examples/webpack-4.x/example.js4
-rw-r--r--date-fns/examples/webpack-4.x/fp.js17
-rw-r--r--date-fns/examples/webpack-4.x/minimal.js3
-rw-r--r--date-fns/examples/webpack-4.x/misc.js11
-rw-r--r--date-fns/examples/webpack-4.x/package.json31
-rw-r--r--date-fns/examples/webpack-4.x/yarn.lock3163
-rw-r--r--date-fns/flow-typed/benchmark.js.flow6
-rw-r--r--date-fns/flow-typed/mocha.js.flow7
-rw-r--r--date-fns/flow-typed/power-assert.js.flow3
-rw-r--r--date-fns/flow-typed/sinon.js.flow2
-rw-r--r--date-fns/jest.config.js4
-rw-r--r--date-fns/jsdoc2md.json20
-rw-r--r--date-fns/outdatedLocales.json1
-rw-r--r--date-fns/package.json122
-rw-r--r--date-fns/scripts/.eslintrc.js5
-rw-r--r--date-fns/scripts/_lib/getConstants.js14
-rw-r--r--date-fns/scripts/_lib/listFPFns.js17
-rw-r--r--date-fns/scripts/_lib/listFns.js38
-rw-r--r--date-fns/scripts/_lib/listLocales.js24
-rw-r--r--date-fns/scripts/build/_lib/addDenoExtensions.ts79
-rw-r--r--date-fns/scripts/build/_lib/prettier.js6
-rw-r--r--date-fns/scripts/build/_lib/typings/common.js92
-rw-r--r--date-fns/scripts/build/_lib/typings/flow.js190
-rw-r--r--date-fns/scripts/build/_lib/typings/formatBlock.js149
-rw-r--r--date-fns/scripts/build/_lib/typings/typeScript.js460
-rwxr-xr-xdate-fns/scripts/build/build.sh12
-rwxr-xr-xdate-fns/scripts/build/deno.sh7
-rwxr-xr-xdate-fns/scripts/build/docs.js380
-rwxr-xr-xdate-fns/scripts/build/fp.js51
-rwxr-xr-xdate-fns/scripts/build/indices.js61
-rw-r--r--date-fns/scripts/build/localeSnapshots/_lib/distanceDates.js59
-rwxr-xr-xdate-fns/scripts/build/localeSnapshots/index.js69
-rw-r--r--date-fns/scripts/build/localeSnapshots/renderFormatDistance/index.js26
-rw-r--r--date-fns/scripts/build/localeSnapshots/renderFormatDistanceStrict/index.js26
-rw-r--r--date-fns/scripts/build/localeSnapshots/renderFormatParse/formatParseTokens.js218
-rw-r--r--date-fns/scripts/build/localeSnapshots/renderFormatParse/index.js59
-rw-r--r--date-fns/scripts/build/localeSnapshots/renderFormatRelative/index.js23
-rwxr-xr-xdate-fns/scripts/build/package.sh51
-rwxr-xr-xdate-fns/scripts/build/packages.js92
-rwxr-xr-xdate-fns/scripts/build/removeOutdatedLocales.js20
-rwxr-xr-xdate-fns/scripts/build/typings.js31
-rw-r--r--date-fns/scripts/release/buildChangelog.ts289
-rwxr-xr-xdate-fns/scripts/release/release.sh45
-rwxr-xr-xdate-fns/scripts/release/tweet.js36
-rwxr-xr-xdate-fns/scripts/release/updateFirebase.js116
-rwxr-xr-xdate-fns/scripts/release/writeVersion.js35
-rwxr-xr-xdate-fns/scripts/test/ci.sh50
-rwxr-xr-xdate-fns/scripts/test/countTests.sh14
-rwxr-xr-xdate-fns/scripts/test/coverageReport.sh12
-rwxr-xr-xdate-fns/scripts/test/dst.sh18
-rwxr-xr-xdate-fns/scripts/test/formatISO.sh12
-rwxr-xr-xdate-fns/scripts/test/formatRFC3339.sh17
-rwxr-xr-xdate-fns/scripts/test/node.sh19
-rwxr-xr-xdate-fns/scripts/test/smoke.sh23
-rwxr-xr-xdate-fns/scripts/test/tz.sh20
-rwxr-xr-xdate-fns/scripts/test/tzExtended.sh368
-rw-r--r--date-fns/src/_lib/addLeadingZeros/index.js8
-rw-r--r--date-fns/src/_lib/assign/index.js17
-rw-r--r--date-fns/src/_lib/assign/test.js30
-rw-r--r--date-fns/src/_lib/cloneObject/index.js5
-rw-r--r--date-fns/src/_lib/cloneObject/test.js31
-rw-r--r--date-fns/src/_lib/format/formatters/index.js768
-rw-r--r--date-fns/src/_lib/format/lightFormatters/index.ts94
-rw-r--r--date-fns/src/_lib/format/longFormatters/index.js66
-rw-r--r--date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js26
-rw-r--r--date-fns/src/_lib/getTimezoneOffsetInMilliseconds/test.js28
-rw-r--r--date-fns/src/_lib/getUTCDayOfYear/index.js18
-rw-r--r--date-fns/src/_lib/getUTCDayOfYear/test.js36
-rw-r--r--date-fns/src/_lib/getUTCISOWeek/index.js21
-rw-r--r--date-fns/src/_lib/getUTCISOWeek/test.js58
-rw-r--r--date-fns/src/_lib/getUTCISOWeekYear/index.js30
-rw-r--r--date-fns/src/_lib/getUTCISOWeekYear/test.js36
-rw-r--r--date-fns/src/_lib/getUTCWeek/index.js22
-rw-r--r--date-fns/src/_lib/getUTCWeek/test.js70
-rw-r--r--date-fns/src/_lib/getUTCWeekYear/index.js51
-rw-r--r--date-fns/src/_lib/getUTCWeekYear/test.js70
-rw-r--r--date-fns/src/_lib/isSameUTCWeek/index.js13
-rw-r--r--date-fns/src/_lib/isSameUTCWeek/test.js111
-rw-r--r--date-fns/src/_lib/protectedTokens/index.js30
-rw-r--r--date-fns/src/_lib/requiredArgs/index.ts12
-rw-r--r--date-fns/src/_lib/requiredArgs/test.js37
-rw-r--r--date-fns/src/_lib/setUTCDay/index.js38
-rw-r--r--date-fns/src/_lib/setUTCDay/test.js132
-rw-r--r--date-fns/src/_lib/setUTCISODay/index.js27
-rw-r--r--date-fns/src/_lib/setUTCISODay/test.js79
-rw-r--r--date-fns/src/_lib/setUTCISOWeek/index.js16
-rw-r--r--date-fns/src/_lib/setUTCISOWeek/test.js61
-rw-r--r--date-fns/src/_lib/setUTCWeek/index.js16
-rw-r--r--date-fns/src/_lib/setUTCWeek/test.js95
-rw-r--r--date-fns/src/_lib/startOfUTCISOWeek/index.js18
-rw-r--r--date-fns/src/_lib/startOfUTCISOWeek/test.js34
-rw-r--r--date-fns/src/_lib/startOfUTCISOWeekYear/index.js16
-rw-r--r--date-fns/src/_lib/startOfUTCISOWeekYear/test.js58
-rw-r--r--date-fns/src/_lib/startOfUTCWeek/index.js33
-rw-r--r--date-fns/src/_lib/startOfUTCWeek/test.js108
-rw-r--r--date-fns/src/_lib/startOfUTCWeekYear/index.js30
-rw-r--r--date-fns/src/_lib/startOfUTCWeekYear/test.js95
-rw-r--r--date-fns/src/_lib/test/index.ts1
-rw-r--r--date-fns/src/_lib/toInteger/index.ts13
-rw-r--r--date-fns/src/_lib/toInteger/test.js64
-rw-r--r--date-fns/src/add/benchmark.js25
-rw-r--r--date-fns/src/add/index.d.ts4
-rw-r--r--date-fns/src/add/index.js.flow52
-rw-r--r--date-fns/src/add/index.ts79
-rw-r--r--date-fns/src/add/test.ts99
-rw-r--r--date-fns/src/addBusinessDays/index.d.ts4
-rw-r--r--date-fns/src/addBusinessDays/index.js.flow52
-rw-r--r--date-fns/src/addBusinessDays/index.ts67
-rw-r--r--date-fns/src/addBusinessDays/test.ts95
-rw-r--r--date-fns/src/addDays/benchmark.js21
-rw-r--r--date-fns/src/addDays/index.d.ts4
-rw-r--r--date-fns/src/addDays/index.js.flow52
-rw-r--r--date-fns/src/addDays/index.ts44
-rw-r--r--date-fns/src/addDays/test.ts129
-rw-r--r--date-fns/src/addHours/benchmark.js21
-rw-r--r--date-fns/src/addHours/index.d.ts4
-rw-r--r--date-fns/src/addHours/index.js.flow52
-rw-r--r--date-fns/src/addHours/index.ts37
-rw-r--r--date-fns/src/addHours/test.ts54
-rw-r--r--date-fns/src/addISOWeekYears/benchmark.js15
-rw-r--r--date-fns/src/addISOWeekYears/index.d.ts4
-rw-r--r--date-fns/src/addISOWeekYears/index.js.flow52
-rw-r--r--date-fns/src/addISOWeekYears/index.ts43
-rw-r--r--date-fns/src/addISOWeekYears/test.ts64
-rw-r--r--date-fns/src/addMilliseconds/benchmark.js21
-rw-r--r--date-fns/src/addMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/addMilliseconds/index.js.flow52
-rw-r--r--date-fns/src/addMilliseconds/index.ts36
-rw-r--r--date-fns/src/addMilliseconds/test.ts80
-rw-r--r--date-fns/src/addMinutes/benchmark.js21
-rw-r--r--date-fns/src/addMinutes/index.d.ts4
-rw-r--r--date-fns/src/addMinutes/index.js.flow52
-rw-r--r--date-fns/src/addMinutes/index.ts37
-rw-r--r--date-fns/src/addMinutes/test.ts57
-rw-r--r--date-fns/src/addMonths/benchmark.js21
-rw-r--r--date-fns/src/addMonths/index.d.ts4
-rw-r--r--date-fns/src/addMonths/index.js.flow52
-rw-r--r--date-fns/src/addMonths/index.ts74
-rw-r--r--date-fns/src/addMonths/test.ts173
-rw-r--r--date-fns/src/addQuarters/benchmark.js21
-rw-r--r--date-fns/src/addQuarters/index.d.ts4
-rw-r--r--date-fns/src/addQuarters/index.js.flow52
-rw-r--r--date-fns/src/addQuarters/index.ts36
-rw-r--r--date-fns/src/addQuarters/test.ts70
-rw-r--r--date-fns/src/addSeconds/benchmark.js21
-rw-r--r--date-fns/src/addSeconds/index.d.ts4
-rw-r--r--date-fns/src/addSeconds/index.js.flow52
-rw-r--r--date-fns/src/addSeconds/index.ts35
-rw-r--r--date-fns/src/addSeconds/test.ts59
-rw-r--r--date-fns/src/addWeeks/benchmark.js21
-rw-r--r--date-fns/src/addWeeks/index.d.ts4
-rw-r--r--date-fns/src/addWeeks/index.js.flow52
-rw-r--r--date-fns/src/addWeeks/index.ts36
-rw-r--r--date-fns/src/addWeeks/test.ts53
-rw-r--r--date-fns/src/addYears/benchmark.js21
-rw-r--r--date-fns/src/addYears/index.d.ts4
-rw-r--r--date-fns/src/addYears/index.js.flow52
-rw-r--r--date-fns/src/addYears/index.ts35
-rw-r--r--date-fns/src/addYears/test.ts69
-rw-r--r--date-fns/src/areIntervalsOverlapping/index.d.ts4
-rw-r--r--date-fns/src/areIntervalsOverlapping/index.js.flow58
-rw-r--r--date-fns/src/areIntervalsOverlapping/index.ts117
-rw-r--r--date-fns/src/areIntervalsOverlapping/test.ts253
-rw-r--r--date-fns/src/closestIndexTo/benchmark.js19
-rw-r--r--date-fns/src/closestIndexTo/index.d.ts4
-rw-r--r--date-fns/src/closestIndexTo/index.js79
-rw-r--r--date-fns/src/closestIndexTo/index.js.flow55
-rw-r--r--date-fns/src/closestIndexTo/test.js102
-rw-r--r--date-fns/src/closestTo/benchmark.js19
-rw-r--r--date-fns/src/closestTo/index.d.ts4
-rw-r--r--date-fns/src/closestTo/index.js77
-rw-r--r--date-fns/src/closestTo/index.js.flow55
-rw-r--r--date-fns/src/closestTo/test.js112
-rw-r--r--date-fns/src/compareAsc/benchmark.js16
-rw-r--r--date-fns/src/compareAsc/index.d.ts4
-rw-r--r--date-fns/src/compareAsc/index.js.flow55
-rw-r--r--date-fns/src/compareAsc/index.ts59
-rw-r--r--date-fns/src/compareAsc/test.ts81
-rw-r--r--date-fns/src/compareDesc/benchmark.js16
-rw-r--r--date-fns/src/compareDesc/index.d.ts4
-rw-r--r--date-fns/src/compareDesc/index.js.flow55
-rw-r--r--date-fns/src/compareDesc/index.ts59
-rw-r--r--date-fns/src/compareDesc/test.ts80
-rw-r--r--date-fns/src/constants/index.d.ts2
-rw-r--r--date-fns/src/constants/index.js.flow4
-rw-r--r--date-fns/src/constants/index.ts119
-rw-r--r--date-fns/src/daysToWeeks/index.d.ts4
-rw-r--r--date-fns/src/daysToWeeks/index.js.flow52
-rw-r--r--date-fns/src/daysToWeeks/index.ts31
-rw-r--r--date-fns/src/daysToWeeks/test.ts21
-rw-r--r--date-fns/src/differenceInBusinessDays/index.d.ts4
-rw-r--r--date-fns/src/differenceInBusinessDays/index.js.flow55
-rw-r--r--date-fns/src/differenceInBusinessDays/index.ts62
-rw-r--r--date-fns/src/differenceInBusinessDays/test.ts141
-rw-r--r--date-fns/src/differenceInCalendarDays/benchmark.js16
-rw-r--r--date-fns/src/differenceInCalendarDays/index.d.ts4
-rw-r--r--date-fns/src/differenceInCalendarDays/index.js.flow55
-rw-r--r--date-fns/src/differenceInCalendarDays/index.ts59
-rw-r--r--date-fns/src/differenceInCalendarDays/test.ts215
-rw-r--r--date-fns/src/differenceInCalendarISOWeekYears/benchmark.js16
-rw-r--r--date-fns/src/differenceInCalendarISOWeekYears/index.d.ts4
-rw-r--r--date-fns/src/differenceInCalendarISOWeekYears/index.js.flow55
-rw-r--r--date-fns/src/differenceInCalendarISOWeekYears/index.ts43
-rw-r--r--date-fns/src/differenceInCalendarISOWeekYears/test.ts118
-rw-r--r--date-fns/src/differenceInCalendarISOWeeks/benchmark.js16
-rw-r--r--date-fns/src/differenceInCalendarISOWeeks/index.d.ts4
-rw-r--r--date-fns/src/differenceInCalendarISOWeeks/index.js.flow55
-rw-r--r--date-fns/src/differenceInCalendarISOWeeks/index.ts54
-rw-r--r--date-fns/src/differenceInCalendarISOWeeks/test.ts104
-rw-r--r--date-fns/src/differenceInCalendarMonths/benchmark.js16
-rw-r--r--date-fns/src/differenceInCalendarMonths/index.d.ts4
-rw-r--r--date-fns/src/differenceInCalendarMonths/index.js.flow55
-rw-r--r--date-fns/src/differenceInCalendarMonths/index.ts42
-rw-r--r--date-fns/src/differenceInCalendarMonths/test.ts104
-rw-r--r--date-fns/src/differenceInCalendarQuarters/benchmark.js16
-rw-r--r--date-fns/src/differenceInCalendarQuarters/index.d.ts4
-rw-r--r--date-fns/src/differenceInCalendarQuarters/index.js.flow55
-rw-r--r--date-fns/src/differenceInCalendarQuarters/index.ts43
-rw-r--r--date-fns/src/differenceInCalendarQuarters/test.ts104
-rw-r--r--date-fns/src/differenceInCalendarWeeks/benchmark.js16
-rw-r--r--date-fns/src/differenceInCalendarWeeks/index.d.ts4
-rw-r--r--date-fns/src/differenceInCalendarWeeks/index.js.flow59
-rw-r--r--date-fns/src/differenceInCalendarWeeks/index.ts67
-rw-r--r--date-fns/src/differenceInCalendarWeeks/test.ts164
-rw-r--r--date-fns/src/differenceInCalendarYears/benchmark.js16
-rw-r--r--date-fns/src/differenceInCalendarYears/index.d.ts4
-rw-r--r--date-fns/src/differenceInCalendarYears/index.js.flow55
-rw-r--r--date-fns/src/differenceInCalendarYears/index.ts39
-rw-r--r--date-fns/src/differenceInCalendarYears/test.ts105
-rw-r--r--date-fns/src/differenceInDays/benchmark.js23
-rw-r--r--date-fns/src/differenceInDays/index.d.ts4
-rw-r--r--date-fns/src/differenceInDays/index.js.flow55
-rw-r--r--date-fns/src/differenceInDays/index.ts104
-rw-r--r--date-fns/src/differenceInDays/test.ts214
-rw-r--r--date-fns/src/differenceInHours/benchmark.js23
-rw-r--r--date-fns/src/differenceInHours/index.d.ts4
-rw-r--r--date-fns/src/differenceInHours/index.js.flow55
-rw-r--r--date-fns/src/differenceInHours/index.ts38
-rw-r--r--date-fns/src/differenceInHours/test.ts107
-rw-r--r--date-fns/src/differenceInISOWeekYears/benchmark.js16
-rw-r--r--date-fns/src/differenceInISOWeekYears/index.d.ts4
-rw-r--r--date-fns/src/differenceInISOWeekYears/index.js.flow55
-rw-r--r--date-fns/src/differenceInISOWeekYears/index.ts63
-rw-r--r--date-fns/src/differenceInISOWeekYears/test.ts115
-rw-r--r--date-fns/src/differenceInMilliseconds/benchmark.js23
-rw-r--r--date-fns/src/differenceInMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/differenceInMilliseconds/index.js.flow55
-rw-r--r--date-fns/src/differenceInMilliseconds/index.ts39
-rw-r--r--date-fns/src/differenceInMilliseconds/test.ts70
-rw-r--r--date-fns/src/differenceInMinutes/benchmark.js23
-rw-r--r--date-fns/src/differenceInMinutes/index.d.ts4
-rw-r--r--date-fns/src/differenceInMinutes/index.js46
-rw-r--r--date-fns/src/differenceInMinutes/index.js.flow55
-rw-r--r--date-fns/src/differenceInMinutes/test.js105
-rw-r--r--date-fns/src/differenceInMonths/benchmark.js23
-rw-r--r--date-fns/src/differenceInMonths/index.d.ts4
-rw-r--r--date-fns/src/differenceInMonths/index.js.flow55
-rw-r--r--date-fns/src/differenceInMonths/index.ts72
-rw-r--r--date-fns/src/differenceInMonths/test.ts188
-rw-r--r--date-fns/src/differenceInQuarters/benchmark.js23
-rw-r--r--date-fns/src/differenceInQuarters/index.d.ts4
-rw-r--r--date-fns/src/differenceInQuarters/index.js.flow55
-rw-r--r--date-fns/src/differenceInQuarters/index.ts34
-rw-r--r--date-fns/src/differenceInQuarters/test.ts104
-rw-r--r--date-fns/src/differenceInSeconds/benchmark.js23
-rw-r--r--date-fns/src/differenceInSeconds/index.d.ts4
-rw-r--r--date-fns/src/differenceInSeconds/index.js.flow55
-rw-r--r--date-fns/src/differenceInSeconds/index.ts38
-rw-r--r--date-fns/src/differenceInSeconds/test.ts104
-rw-r--r--date-fns/src/differenceInWeeks/benchmark.js23
-rw-r--r--date-fns/src/differenceInWeeks/index.d.ts4
-rw-r--r--date-fns/src/differenceInWeeks/index.js.flow55
-rw-r--r--date-fns/src/differenceInWeeks/index.ts55
-rw-r--r--date-fns/src/differenceInWeeks/test.ts104
-rw-r--r--date-fns/src/differenceInYears/benchmark.js23
-rw-r--r--date-fns/src/differenceInYears/index.d.ts4
-rw-r--r--date-fns/src/differenceInYears/index.js.flow55
-rw-r--r--date-fns/src/differenceInYears/index.ts51
-rw-r--r--date-fns/src/differenceInYears/test.ts146
-rw-r--r--date-fns/src/eachDayOfInterval/benchmark.js16
-rw-r--r--date-fns/src/eachDayOfInterval/index.d.ts4
-rw-r--r--date-fns/src/eachDayOfInterval/index.js.flow57
-rw-r--r--date-fns/src/eachDayOfInterval/index.ts98
-rw-r--r--date-fns/src/eachDayOfInterval/test.ts137
-rw-r--r--date-fns/src/eachHourOfInterval/benchmark.js20
-rw-r--r--date-fns/src/eachHourOfInterval/index.d.ts4
-rw-r--r--date-fns/src/eachHourOfInterval/index.js.flow57
-rw-r--r--date-fns/src/eachHourOfInterval/index.ts69
-rw-r--r--date-fns/src/eachHourOfInterval/test.ts134
-rw-r--r--date-fns/src/eachMinuteOfInterval/benchmark.js20
-rw-r--r--date-fns/src/eachMinuteOfInterval/index.d.ts4
-rw-r--r--date-fns/src/eachMinuteOfInterval/index.js.flow57
-rw-r--r--date-fns/src/eachMinuteOfInterval/index.ts70
-rw-r--r--date-fns/src/eachMinuteOfInterval/test.ts99
-rw-r--r--date-fns/src/eachMonthOfInterval/index.d.ts4
-rw-r--r--date-fns/src/eachMonthOfInterval/index.js.flow52
-rw-r--r--date-fns/src/eachMonthOfInterval/index.ts59
-rw-r--r--date-fns/src/eachMonthOfInterval/test.ts120
-rw-r--r--date-fns/src/eachQuarterOfInterval/index.d.ts4
-rw-r--r--date-fns/src/eachQuarterOfInterval/index.js.flow52
-rw-r--r--date-fns/src/eachQuarterOfInterval/index.ts61
-rw-r--r--date-fns/src/eachQuarterOfInterval/test.ts108
-rw-r--r--date-fns/src/eachWeekOfInterval/benchmark.js16
-rw-r--r--date-fns/src/eachWeekOfInterval/index.d.ts4
-rw-r--r--date-fns/src/eachWeekOfInterval/index.js.flow58
-rw-r--r--date-fns/src/eachWeekOfInterval/index.ts84
-rw-r--r--date-fns/src/eachWeekOfInterval/test.ts145
-rwxr-xr-xdate-fns/src/eachWeekendOfInterval/benchmark.js16
-rw-r--r--date-fns/src/eachWeekendOfInterval/index.d.ts4
-rwxr-xr-xdate-fns/src/eachWeekendOfInterval/index.js.flow52
-rw-r--r--date-fns/src/eachWeekendOfInterval/index.ts47
-rw-r--r--date-fns/src/eachWeekendOfInterval/test.ts67
-rw-r--r--date-fns/src/eachWeekendOfMonth/benchmark.js15
-rw-r--r--date-fns/src/eachWeekendOfMonth/index.d.ts4
-rw-r--r--date-fns/src/eachWeekendOfMonth/index.js.flow52
-rw-r--r--date-fns/src/eachWeekendOfMonth/index.ts42
-rw-r--r--date-fns/src/eachWeekendOfMonth/test.ts31
-rw-r--r--date-fns/src/eachWeekendOfYear/benchmark.js14
-rw-r--r--date-fns/src/eachWeekendOfYear/index.d.ts4
-rw-r--r--date-fns/src/eachWeekendOfYear/index.js38
-rw-r--r--date-fns/src/eachWeekendOfYear/index.js.flow52
-rw-r--r--date-fns/src/eachWeekendOfYear/test.js24
-rw-r--r--date-fns/src/eachYearOfInterval/index.d.ts4
-rw-r--r--date-fns/src/eachYearOfInterval/index.js57
-rw-r--r--date-fns/src/eachYearOfInterval/index.js.flow52
-rw-r--r--date-fns/src/eachYearOfInterval/test.js105
-rw-r--r--date-fns/src/endOfDay/benchmark.js21
-rw-r--r--date-fns/src/endOfDay/index.d.ts4
-rw-r--r--date-fns/src/endOfDay/index.js.flow52
-rw-r--r--date-fns/src/endOfDay/index.ts32
-rw-r--r--date-fns/src/endOfDay/test.ts35
-rw-r--r--date-fns/src/endOfDecade/benchmark.js15
-rw-r--r--date-fns/src/endOfDecade/index.d.ts4
-rw-r--r--date-fns/src/endOfDecade/index.js.flow57
-rw-r--r--date-fns/src/endOfDecade/index.ts37
-rw-r--r--date-fns/src/endOfDecade/test.ts35
-rw-r--r--date-fns/src/endOfHour/benchmark.js21
-rw-r--r--date-fns/src/endOfHour/index.d.ts4
-rw-r--r--date-fns/src/endOfHour/index.js.flow52
-rw-r--r--date-fns/src/endOfHour/index.ts32
-rw-r--r--date-fns/src/endOfHour/test.ts34
-rw-r--r--date-fns/src/endOfISOWeek/benchmark.js21
-rw-r--r--date-fns/src/endOfISOWeek/index.d.ts4
-rw-r--r--date-fns/src/endOfISOWeek/index.js.flow52
-rw-r--r--date-fns/src/endOfISOWeek/index.ts32
-rw-r--r--date-fns/src/endOfISOWeek/test.ts35
-rw-r--r--date-fns/src/endOfISOWeekYear/benchmark.js15
-rw-r--r--date-fns/src/endOfISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/endOfISOWeekYear/index.js.flow52
-rw-r--r--date-fns/src/endOfISOWeekYear/index.ts45
-rw-r--r--date-fns/src/endOfISOWeekYear/test.ts46
-rw-r--r--date-fns/src/endOfMinute/benchmark.js21
-rw-r--r--date-fns/src/endOfMinute/index.d.ts4
-rw-r--r--date-fns/src/endOfMinute/index.js.flow52
-rw-r--r--date-fns/src/endOfMinute/index.ts32
-rw-r--r--date-fns/src/endOfMinute/test.ts34
-rw-r--r--date-fns/src/endOfMonth/benchmark.js21
-rw-r--r--date-fns/src/endOfMonth/index.d.ts4
-rw-r--r--date-fns/src/endOfMonth/index.js.flow52
-rw-r--r--date-fns/src/endOfMonth/index.ts34
-rw-r--r--date-fns/src/endOfMonth/test.ts52
-rw-r--r--date-fns/src/endOfQuarter/benchmark.js21
-rw-r--r--date-fns/src/endOfQuarter/index.d.ts4
-rw-r--r--date-fns/src/endOfQuarter/index.js.flow52
-rw-r--r--date-fns/src/endOfQuarter/index.ts35
-rw-r--r--date-fns/src/endOfQuarter/test.ts35
-rw-r--r--date-fns/src/endOfSecond/benchmark.js21
-rw-r--r--date-fns/src/endOfSecond/index.d.ts4
-rw-r--r--date-fns/src/endOfSecond/index.js.flow52
-rw-r--r--date-fns/src/endOfSecond/index.ts32
-rw-r--r--date-fns/src/endOfSecond/test.ts34
-rw-r--r--date-fns/src/endOfToday/benchmark.js9
-rw-r--r--date-fns/src/endOfToday/index.d.ts4
-rw-r--r--date-fns/src/endOfToday/index.js.flow52
-rw-r--r--date-fns/src/endOfToday/index.ts28
-rw-r--r--date-fns/src/endOfToday/test.ts24
-rw-r--r--date-fns/src/endOfTomorrow/benchmark.js9
-rw-r--r--date-fns/src/endOfTomorrow/index.d.ts4
-rw-r--r--date-fns/src/endOfTomorrow/index.js.flow52
-rw-r--r--date-fns/src/endOfTomorrow/index.ts34
-rw-r--r--date-fns/src/endOfTomorrow/test.ts34
-rw-r--r--date-fns/src/endOfWeek/benchmark.js21
-rw-r--r--date-fns/src/endOfWeek/index.d.ts4
-rw-r--r--date-fns/src/endOfWeek/index.js.flow58
-rw-r--r--date-fns/src/endOfWeek/index.ts67
-rw-r--r--date-fns/src/endOfWeek/test.ts144
-rw-r--r--date-fns/src/endOfYear/benchmark.js21
-rw-r--r--date-fns/src/endOfYear/index.d.ts4
-rw-r--r--date-fns/src/endOfYear/index.js.flow52
-rw-r--r--date-fns/src/endOfYear/index.ts34
-rw-r--r--date-fns/src/endOfYear/test.ts35
-rw-r--r--date-fns/src/endOfYesterday/benchmark.js9
-rw-r--r--date-fns/src/endOfYesterday/index.d.ts4
-rw-r--r--date-fns/src/endOfYesterday/index.js.flow52
-rw-r--r--date-fns/src/endOfYesterday/index.ts34
-rw-r--r--date-fns/src/endOfYesterday/test.ts34
-rw-r--r--date-fns/src/format/benchmark.js21
-rw-r--r--date-fns/src/format/index.d.ts4
-rw-r--r--date-fns/src/format/index.js471
-rw-r--r--date-fns/src/format/index.js.flow62
-rw-r--r--date-fns/src/format/test.js813
-rw-r--r--date-fns/src/formatDistance/benchmark.js23
-rw-r--r--date-fns/src/formatDistance/index.d.ts4
-rw-r--r--date-fns/src/formatDistance/index.js.flow60
-rw-r--r--date-fns/src/formatDistance/index.ts240
-rw-r--r--date-fns/src/formatDistance/test.ts299
-rw-r--r--date-fns/src/formatDistanceStrict/benchmark.js23
-rw-r--r--date-fns/src/formatDistanceStrict/index.d.ts4
-rw-r--r--date-fns/src/formatDistanceStrict/index.js.flow61
-rw-r--r--date-fns/src/formatDistanceStrict/index.ts283
-rw-r--r--date-fns/src/formatDistanceStrict/test.ts524
-rw-r--r--date-fns/src/formatDistanceToNow/benchmark.js25
-rw-r--r--date-fns/src/formatDistanceToNow/index.d.ts4
-rw-r--r--date-fns/src/formatDistanceToNow/index.js113
-rw-r--r--date-fns/src/formatDistanceToNow/index.js.flow59
-rw-r--r--date-fns/src/formatDistanceToNow/test.js232
-rw-r--r--date-fns/src/formatDistanceToNowStrict/benchmark.js25
-rw-r--r--date-fns/src/formatDistanceToNowStrict/index.d.ts4
-rw-r--r--date-fns/src/formatDistanceToNowStrict/index.js82
-rw-r--r--date-fns/src/formatDistanceToNowStrict/index.js.flow60
-rw-r--r--date-fns/src/formatDistanceToNowStrict/test.js422
-rw-r--r--date-fns/src/formatDuration/index.d.ts4
-rw-r--r--date-fns/src/formatDuration/index.js100
-rw-r--r--date-fns/src/formatDuration/index.js.flow60
-rw-r--r--date-fns/src/formatDuration/test.js80
-rw-r--r--date-fns/src/formatISO/index.d.ts4
-rw-r--r--date-fns/src/formatISO/index.js121
-rw-r--r--date-fns/src/formatISO/index.js.flow58
-rw-r--r--date-fns/src/formatISO/test.js122
-rw-r--r--date-fns/src/formatISO9075/index.d.ts4
-rw-r--r--date-fns/src/formatISO9075/index.js102
-rw-r--r--date-fns/src/formatISO9075/index.js.flow58
-rw-r--r--date-fns/src/formatISO9075/test.js90
-rw-r--r--date-fns/src/formatISODuration/index.d.ts4
-rw-r--r--date-fns/src/formatISODuration/index.js46
-rw-r--r--date-fns/src/formatISODuration/index.js.flow52
-rw-r--r--date-fns/src/formatISODuration/test.js78
-rw-r--r--date-fns/src/formatRFC3339/index.d.ts4
-rw-r--r--date-fns/src/formatRFC3339/index.js92
-rw-r--r--date-fns/src/formatRFC3339/index.js.flow57
-rw-r--r--date-fns/src/formatRFC3339/test.js81
-rw-r--r--date-fns/src/formatRFC7231/index.d.ts4
-rw-r--r--date-fns/src/formatRFC7231/index.js64
-rw-r--r--date-fns/src/formatRFC7231/index.js.flow52
-rw-r--r--date-fns/src/formatRFC7231/test.js25
-rw-r--r--date-fns/src/formatRelative/benchmark.js23
-rw-r--r--date-fns/src/formatRelative/index.d.ts4
-rw-r--r--date-fns/src/formatRelative/index.js.flow59
-rw-r--r--date-fns/src/formatRelative/index.ts98
-rw-r--r--date-fns/src/formatRelative/test.ts168
-rw-r--r--date-fns/src/fp/_lib/convertToFP/index.js12
-rw-r--r--date-fns/src/fp/_lib/convertToFP/test.js69
-rw-r--r--date-fns/src/fp/add/index.d.ts4
-rw-r--r--date-fns/src/fp/add/index.js8
-rw-r--r--date-fns/src/fp/add/index.js.flow58
-rw-r--r--date-fns/src/fp/addBusinessDays/index.d.ts4
-rw-r--r--date-fns/src/fp/addBusinessDays/index.js8
-rw-r--r--date-fns/src/fp/addBusinessDays/index.js.flow58
-rw-r--r--date-fns/src/fp/addDays/index.d.ts4
-rw-r--r--date-fns/src/fp/addDays/index.js8
-rw-r--r--date-fns/src/fp/addDays/index.js.flow58
-rw-r--r--date-fns/src/fp/addHours/index.d.ts4
-rw-r--r--date-fns/src/fp/addHours/index.js8
-rw-r--r--date-fns/src/fp/addHours/index.js.flow58
-rw-r--r--date-fns/src/fp/addISOWeekYears/index.d.ts4
-rw-r--r--date-fns/src/fp/addISOWeekYears/index.js8
-rw-r--r--date-fns/src/fp/addISOWeekYears/index.js.flow58
-rw-r--r--date-fns/src/fp/addMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/fp/addMilliseconds/index.js8
-rw-r--r--date-fns/src/fp/addMilliseconds/index.js.flow58
-rw-r--r--date-fns/src/fp/addMinutes/index.d.ts4
-rw-r--r--date-fns/src/fp/addMinutes/index.js8
-rw-r--r--date-fns/src/fp/addMinutes/index.js.flow58
-rw-r--r--date-fns/src/fp/addMonths/index.d.ts4
-rw-r--r--date-fns/src/fp/addMonths/index.js8
-rw-r--r--date-fns/src/fp/addMonths/index.js.flow58
-rw-r--r--date-fns/src/fp/addQuarters/index.d.ts4
-rw-r--r--date-fns/src/fp/addQuarters/index.js8
-rw-r--r--date-fns/src/fp/addQuarters/index.js.flow58
-rw-r--r--date-fns/src/fp/addSeconds/index.d.ts4
-rw-r--r--date-fns/src/fp/addSeconds/index.js8
-rw-r--r--date-fns/src/fp/addSeconds/index.js.flow58
-rw-r--r--date-fns/src/fp/addWeeks/index.d.ts4
-rw-r--r--date-fns/src/fp/addWeeks/index.js8
-rw-r--r--date-fns/src/fp/addWeeks/index.js.flow58
-rw-r--r--date-fns/src/fp/addYears/index.d.ts4
-rw-r--r--date-fns/src/fp/addYears/index.js8
-rw-r--r--date-fns/src/fp/addYears/index.js.flow58
-rw-r--r--date-fns/src/fp/areIntervalsOverlapping/index.d.ts4
-rw-r--r--date-fns/src/fp/areIntervalsOverlapping/index.js8
-rw-r--r--date-fns/src/fp/areIntervalsOverlapping/index.js.flow58
-rw-r--r--date-fns/src/fp/areIntervalsOverlappingWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/areIntervalsOverlappingWithOptions/index.js8
-rw-r--r--date-fns/src/fp/areIntervalsOverlappingWithOptions/index.js.flow74
-rw-r--r--date-fns/src/fp/closestIndexTo/index.d.ts4
-rw-r--r--date-fns/src/fp/closestIndexTo/index.js8
-rw-r--r--date-fns/src/fp/closestIndexTo/index.js.flow58
-rw-r--r--date-fns/src/fp/closestTo/index.d.ts4
-rw-r--r--date-fns/src/fp/closestTo/index.js8
-rw-r--r--date-fns/src/fp/closestTo/index.js.flow58
-rw-r--r--date-fns/src/fp/compareAsc/index.d.ts4
-rw-r--r--date-fns/src/fp/compareAsc/index.js8
-rw-r--r--date-fns/src/fp/compareAsc/index.js.flow58
-rw-r--r--date-fns/src/fp/compareDesc/index.d.ts4
-rw-r--r--date-fns/src/fp/compareDesc/index.js8
-rw-r--r--date-fns/src/fp/compareDesc/index.js.flow58
-rw-r--r--date-fns/src/fp/daysToWeeks/index.d.ts4
-rw-r--r--date-fns/src/fp/daysToWeeks/index.js8
-rw-r--r--date-fns/src/fp/daysToWeeks/index.js.flow54
-rw-r--r--date-fns/src/fp/differenceInBusinessDays/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInBusinessDays/index.js8
-rw-r--r--date-fns/src/fp/differenceInBusinessDays/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInCalendarDays/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInCalendarDays/index.js8
-rw-r--r--date-fns/src/fp/differenceInCalendarDays/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInCalendarISOWeekYears/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInCalendarISOWeekYears/index.js8
-rw-r--r--date-fns/src/fp/differenceInCalendarISOWeekYears/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInCalendarISOWeeks/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInCalendarISOWeeks/index.js8
-rw-r--r--date-fns/src/fp/differenceInCalendarISOWeeks/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInCalendarMonths/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInCalendarMonths/index.js8
-rw-r--r--date-fns/src/fp/differenceInCalendarMonths/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInCalendarQuarters/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInCalendarQuarters/index.js8
-rw-r--r--date-fns/src/fp/differenceInCalendarQuarters/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInCalendarWeeks/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInCalendarWeeks/index.js8
-rw-r--r--date-fns/src/fp/differenceInCalendarWeeks/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.js8
-rw-r--r--date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.js.flow75
-rw-r--r--date-fns/src/fp/differenceInCalendarYears/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInCalendarYears/index.js8
-rw-r--r--date-fns/src/fp/differenceInCalendarYears/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInDays/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInDays/index.js8
-rw-r--r--date-fns/src/fp/differenceInDays/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInHours/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInHours/index.js8
-rw-r--r--date-fns/src/fp/differenceInHours/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInISOWeekYears/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInISOWeekYears/index.js8
-rw-r--r--date-fns/src/fp/differenceInISOWeekYears/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInMilliseconds/index.js8
-rw-r--r--date-fns/src/fp/differenceInMilliseconds/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInMinutes/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInMinutes/index.js8
-rw-r--r--date-fns/src/fp/differenceInMinutes/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInMonths/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInMonths/index.js8
-rw-r--r--date-fns/src/fp/differenceInMonths/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInQuarters/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInQuarters/index.js8
-rw-r--r--date-fns/src/fp/differenceInQuarters/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInSeconds/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInSeconds/index.js8
-rw-r--r--date-fns/src/fp/differenceInSeconds/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInWeeks/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInWeeks/index.js8
-rw-r--r--date-fns/src/fp/differenceInWeeks/index.js.flow58
-rw-r--r--date-fns/src/fp/differenceInYears/index.d.ts4
-rw-r--r--date-fns/src/fp/differenceInYears/index.js8
-rw-r--r--date-fns/src/fp/differenceInYears/index.js.flow58
-rw-r--r--date-fns/src/fp/eachDayOfInterval/index.d.ts4
-rw-r--r--date-fns/src/fp/eachDayOfInterval/index.js8
-rw-r--r--date-fns/src/fp/eachDayOfInterval/index.js.flow54
-rw-r--r--date-fns/src/fp/eachDayOfIntervalWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/eachDayOfIntervalWithOptions/index.js8
-rw-r--r--date-fns/src/fp/eachDayOfIntervalWithOptions/index.js.flow64
-rw-r--r--date-fns/src/fp/eachHourOfInterval/index.d.ts4
-rw-r--r--date-fns/src/fp/eachHourOfInterval/index.js8
-rw-r--r--date-fns/src/fp/eachHourOfInterval/index.js.flow54
-rw-r--r--date-fns/src/fp/eachHourOfIntervalWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/eachHourOfIntervalWithOptions/index.js8
-rw-r--r--date-fns/src/fp/eachHourOfIntervalWithOptions/index.js.flow64
-rw-r--r--date-fns/src/fp/eachMinuteOfInterval/index.d.ts4
-rw-r--r--date-fns/src/fp/eachMinuteOfInterval/index.js8
-rw-r--r--date-fns/src/fp/eachMinuteOfInterval/index.js.flow54
-rw-r--r--date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.js8
-rw-r--r--date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.js.flow64
-rw-r--r--date-fns/src/fp/eachMonthOfInterval/index.d.ts4
-rw-r--r--date-fns/src/fp/eachMonthOfInterval/index.js8
-rw-r--r--date-fns/src/fp/eachMonthOfInterval/index.js.flow54
-rw-r--r--date-fns/src/fp/eachQuarterOfInterval/index.d.ts4
-rw-r--r--date-fns/src/fp/eachQuarterOfInterval/index.js8
-rw-r--r--date-fns/src/fp/eachQuarterOfInterval/index.js.flow54
-rw-r--r--date-fns/src/fp/eachWeekOfInterval/index.d.ts4
-rw-r--r--date-fns/src/fp/eachWeekOfInterval/index.js8
-rw-r--r--date-fns/src/fp/eachWeekOfInterval/index.js.flow54
-rw-r--r--date-fns/src/fp/eachWeekOfIntervalWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/eachWeekOfIntervalWithOptions/index.js8
-rw-r--r--date-fns/src/fp/eachWeekOfIntervalWithOptions/index.js.flow65
-rw-r--r--date-fns/src/fp/eachWeekendOfInterval/index.d.ts4
-rw-r--r--date-fns/src/fp/eachWeekendOfInterval/index.js8
-rw-r--r--date-fns/src/fp/eachWeekendOfInterval/index.js.flow54
-rw-r--r--date-fns/src/fp/eachWeekendOfMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/eachWeekendOfMonth/index.js8
-rw-r--r--date-fns/src/fp/eachWeekendOfMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/eachWeekendOfYear/index.d.ts4
-rw-r--r--date-fns/src/fp/eachWeekendOfYear/index.js8
-rw-r--r--date-fns/src/fp/eachWeekendOfYear/index.js.flow54
-rw-r--r--date-fns/src/fp/eachYearOfInterval/index.d.ts4
-rw-r--r--date-fns/src/fp/eachYearOfInterval/index.js8
-rw-r--r--date-fns/src/fp/eachYearOfInterval/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfDay/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfDay/index.js8
-rw-r--r--date-fns/src/fp/endOfDay/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfDecade/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfDecade/index.js8
-rw-r--r--date-fns/src/fp/endOfDecade/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfDecadeWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfDecadeWithOptions/index.js8
-rw-r--r--date-fns/src/fp/endOfDecadeWithOptions/index.js.flow64
-rw-r--r--date-fns/src/fp/endOfHour/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfHour/index.js8
-rw-r--r--date-fns/src/fp/endOfHour/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfISOWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfISOWeek/index.js8
-rw-r--r--date-fns/src/fp/endOfISOWeek/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfISOWeekYear/index.js8
-rw-r--r--date-fns/src/fp/endOfISOWeekYear/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfMinute/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfMinute/index.js8
-rw-r--r--date-fns/src/fp/endOfMinute/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfMonth/index.js8
-rw-r--r--date-fns/src/fp/endOfMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfQuarter/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfQuarter/index.js8
-rw-r--r--date-fns/src/fp/endOfQuarter/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfSecond/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfSecond/index.js8
-rw-r--r--date-fns/src/fp/endOfSecond/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfWeek/index.js8
-rw-r--r--date-fns/src/fp/endOfWeek/index.js.flow54
-rw-r--r--date-fns/src/fp/endOfWeekWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfWeekWithOptions/index.js8
-rw-r--r--date-fns/src/fp/endOfWeekWithOptions/index.js.flow65
-rw-r--r--date-fns/src/fp/endOfYear/index.d.ts4
-rw-r--r--date-fns/src/fp/endOfYear/index.js8
-rw-r--r--date-fns/src/fp/endOfYear/index.js.flow54
-rw-r--r--date-fns/src/fp/format/index.d.ts4
-rw-r--r--date-fns/src/fp/format/index.js8
-rw-r--r--date-fns/src/fp/format/index.js.flow58
-rw-r--r--date-fns/src/fp/formatDistance/index.d.ts4
-rw-r--r--date-fns/src/fp/formatDistance/index.js8
-rw-r--r--date-fns/src/fp/formatDistance/index.js.flow58
-rw-r--r--date-fns/src/fp/formatDistanceStrict/index.d.ts4
-rw-r--r--date-fns/src/fp/formatDistanceStrict/index.js8
-rw-r--r--date-fns/src/fp/formatDistanceStrict/index.js.flow58
-rw-r--r--date-fns/src/fp/formatDistanceStrictWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/formatDistanceStrictWithOptions/index.js8
-rw-r--r--date-fns/src/fp/formatDistanceStrictWithOptions/index.js.flow77
-rw-r--r--date-fns/src/fp/formatDistanceWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/formatDistanceWithOptions/index.js8
-rw-r--r--date-fns/src/fp/formatDistanceWithOptions/index.js.flow76
-rw-r--r--date-fns/src/fp/formatDuration/index.d.ts4
-rw-r--r--date-fns/src/fp/formatDuration/index.js8
-rw-r--r--date-fns/src/fp/formatDuration/index.js.flow54
-rw-r--r--date-fns/src/fp/formatDurationWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/formatDurationWithOptions/index.js8
-rw-r--r--date-fns/src/fp/formatDurationWithOptions/index.js.flow67
-rw-r--r--date-fns/src/fp/formatISO/index.d.ts4
-rw-r--r--date-fns/src/fp/formatISO/index.js8
-rw-r--r--date-fns/src/fp/formatISO/index.js.flow54
-rw-r--r--date-fns/src/fp/formatISO9075/index.d.ts4
-rw-r--r--date-fns/src/fp/formatISO9075/index.js8
-rw-r--r--date-fns/src/fp/formatISO9075/index.js.flow54
-rw-r--r--date-fns/src/fp/formatISO9075WithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/formatISO9075WithOptions/index.js8
-rw-r--r--date-fns/src/fp/formatISO9075WithOptions/index.js.flow65
-rw-r--r--date-fns/src/fp/formatISODuration/index.d.ts4
-rw-r--r--date-fns/src/fp/formatISODuration/index.js8
-rw-r--r--date-fns/src/fp/formatISODuration/index.js.flow54
-rw-r--r--date-fns/src/fp/formatISOWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/formatISOWithOptions/index.js8
-rw-r--r--date-fns/src/fp/formatISOWithOptions/index.js.flow65
-rw-r--r--date-fns/src/fp/formatRFC3339/index.d.ts4
-rw-r--r--date-fns/src/fp/formatRFC3339/index.js8
-rw-r--r--date-fns/src/fp/formatRFC3339/index.js.flow54
-rw-r--r--date-fns/src/fp/formatRFC3339WithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/formatRFC3339WithOptions/index.js8
-rw-r--r--date-fns/src/fp/formatRFC3339WithOptions/index.js.flow64
-rw-r--r--date-fns/src/fp/formatRFC7231/index.d.ts4
-rw-r--r--date-fns/src/fp/formatRFC7231/index.js8
-rw-r--r--date-fns/src/fp/formatRFC7231/index.js.flow54
-rw-r--r--date-fns/src/fp/formatRelative/index.d.ts4
-rw-r--r--date-fns/src/fp/formatRelative/index.js8
-rw-r--r--date-fns/src/fp/formatRelative/index.js.flow58
-rw-r--r--date-fns/src/fp/formatRelativeWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/formatRelativeWithOptions/index.js8
-rw-r--r--date-fns/src/fp/formatRelativeWithOptions/index.js.flow75
-rw-r--r--date-fns/src/fp/formatWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/formatWithOptions/index.js8
-rw-r--r--date-fns/src/fp/formatWithOptions/index.js.flow78
-rw-r--r--date-fns/src/fp/fromUnixTime/index.d.ts4
-rw-r--r--date-fns/src/fp/fromUnixTime/index.js8
-rw-r--r--date-fns/src/fp/fromUnixTime/index.js.flow54
-rw-r--r--date-fns/src/fp/getDate/index.d.ts4
-rw-r--r--date-fns/src/fp/getDate/index.js8
-rw-r--r--date-fns/src/fp/getDate/index.js.flow54
-rw-r--r--date-fns/src/fp/getDay/index.d.ts4
-rw-r--r--date-fns/src/fp/getDay/index.js8
-rw-r--r--date-fns/src/fp/getDay/index.js.flow54
-rw-r--r--date-fns/src/fp/getDayOfYear/index.d.ts4
-rw-r--r--date-fns/src/fp/getDayOfYear/index.js8
-rw-r--r--date-fns/src/fp/getDayOfYear/index.js.flow54
-rw-r--r--date-fns/src/fp/getDaysInMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/getDaysInMonth/index.js8
-rw-r--r--date-fns/src/fp/getDaysInMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/getDaysInYear/index.d.ts4
-rw-r--r--date-fns/src/fp/getDaysInYear/index.js8
-rw-r--r--date-fns/src/fp/getDaysInYear/index.js.flow54
-rw-r--r--date-fns/src/fp/getDecade/index.d.ts4
-rw-r--r--date-fns/src/fp/getDecade/index.js8
-rw-r--r--date-fns/src/fp/getDecade/index.js.flow54
-rw-r--r--date-fns/src/fp/getHours/index.d.ts4
-rw-r--r--date-fns/src/fp/getHours/index.js8
-rw-r--r--date-fns/src/fp/getHours/index.js.flow54
-rw-r--r--date-fns/src/fp/getISODay/index.d.ts4
-rw-r--r--date-fns/src/fp/getISODay/index.js8
-rw-r--r--date-fns/src/fp/getISODay/index.js.flow54
-rw-r--r--date-fns/src/fp/getISOWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/getISOWeek/index.js8
-rw-r--r--date-fns/src/fp/getISOWeek/index.js.flow54
-rw-r--r--date-fns/src/fp/getISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/fp/getISOWeekYear/index.js8
-rw-r--r--date-fns/src/fp/getISOWeekYear/index.js.flow54
-rw-r--r--date-fns/src/fp/getISOWeeksInYear/index.d.ts4
-rw-r--r--date-fns/src/fp/getISOWeeksInYear/index.js8
-rw-r--r--date-fns/src/fp/getISOWeeksInYear/index.js.flow54
-rw-r--r--date-fns/src/fp/getMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/fp/getMilliseconds/index.js8
-rw-r--r--date-fns/src/fp/getMilliseconds/index.js.flow54
-rw-r--r--date-fns/src/fp/getMinutes/index.d.ts4
-rw-r--r--date-fns/src/fp/getMinutes/index.js8
-rw-r--r--date-fns/src/fp/getMinutes/index.js.flow54
-rw-r--r--date-fns/src/fp/getMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/getMonth/index.js8
-rw-r--r--date-fns/src/fp/getMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/getOverlappingDaysInIntervals/index.d.ts4
-rw-r--r--date-fns/src/fp/getOverlappingDaysInIntervals/index.js8
-rw-r--r--date-fns/src/fp/getOverlappingDaysInIntervals/index.js.flow58
-rw-r--r--date-fns/src/fp/getQuarter/index.d.ts4
-rw-r--r--date-fns/src/fp/getQuarter/index.js8
-rw-r--r--date-fns/src/fp/getQuarter/index.js.flow54
-rw-r--r--date-fns/src/fp/getSeconds/index.d.ts4
-rw-r--r--date-fns/src/fp/getSeconds/index.js8
-rw-r--r--date-fns/src/fp/getSeconds/index.js.flow54
-rw-r--r--date-fns/src/fp/getTime/index.d.ts4
-rw-r--r--date-fns/src/fp/getTime/index.js8
-rw-r--r--date-fns/src/fp/getTime/index.js.flow54
-rw-r--r--date-fns/src/fp/getUnixTime/index.d.ts4
-rw-r--r--date-fns/src/fp/getUnixTime/index.js8
-rw-r--r--date-fns/src/fp/getUnixTime/index.js.flow54
-rw-r--r--date-fns/src/fp/getWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/getWeek/index.js8
-rw-r--r--date-fns/src/fp/getWeek/index.js.flow54
-rw-r--r--date-fns/src/fp/getWeekOfMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/getWeekOfMonth/index.js8
-rw-r--r--date-fns/src/fp/getWeekOfMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/getWeekOfMonthWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/getWeekOfMonthWithOptions/index.js8
-rw-r--r--date-fns/src/fp/getWeekOfMonthWithOptions/index.js.flow65
-rw-r--r--date-fns/src/fp/getWeekWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/getWeekWithOptions/index.js8
-rw-r--r--date-fns/src/fp/getWeekWithOptions/index.js.flow66
-rw-r--r--date-fns/src/fp/getWeekYear/index.d.ts4
-rw-r--r--date-fns/src/fp/getWeekYear/index.js8
-rw-r--r--date-fns/src/fp/getWeekYear/index.js.flow54
-rw-r--r--date-fns/src/fp/getWeekYearWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/getWeekYearWithOptions/index.js8
-rw-r--r--date-fns/src/fp/getWeekYearWithOptions/index.js.flow66
-rw-r--r--date-fns/src/fp/getWeeksInMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/getWeeksInMonth/index.js8
-rw-r--r--date-fns/src/fp/getWeeksInMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/getWeeksInMonthWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/getWeeksInMonthWithOptions/index.js8
-rw-r--r--date-fns/src/fp/getWeeksInMonthWithOptions/index.js.flow65
-rw-r--r--date-fns/src/fp/getYear/index.d.ts4
-rw-r--r--date-fns/src/fp/getYear/index.js8
-rw-r--r--date-fns/src/fp/getYear/index.js.flow54
-rw-r--r--date-fns/src/fp/hoursToMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/fp/hoursToMilliseconds/index.js8
-rw-r--r--date-fns/src/fp/hoursToMilliseconds/index.js.flow54
-rw-r--r--date-fns/src/fp/hoursToMinutes/index.d.ts4
-rw-r--r--date-fns/src/fp/hoursToMinutes/index.js8
-rw-r--r--date-fns/src/fp/hoursToMinutes/index.js.flow54
-rw-r--r--date-fns/src/fp/hoursToSeconds/index.d.ts4
-rw-r--r--date-fns/src/fp/hoursToSeconds/index.js8
-rw-r--r--date-fns/src/fp/hoursToSeconds/index.js.flow54
-rw-r--r--date-fns/src/fp/index.js241
-rw-r--r--date-fns/src/fp/index.js.flow625
-rw-r--r--date-fns/src/fp/intervalToDuration/index.d.ts4
-rw-r--r--date-fns/src/fp/intervalToDuration/index.js8
-rw-r--r--date-fns/src/fp/intervalToDuration/index.js.flow54
-rw-r--r--date-fns/src/fp/intlFormat/index.d.ts4
-rw-r--r--date-fns/src/fp/intlFormat/index.js8
-rw-r--r--date-fns/src/fp/intlFormat/index.js.flow88
-rw-r--r--date-fns/src/fp/isAfter/index.d.ts4
-rw-r--r--date-fns/src/fp/isAfter/index.js8
-rw-r--r--date-fns/src/fp/isAfter/index.js.flow58
-rw-r--r--date-fns/src/fp/isBefore/index.d.ts4
-rw-r--r--date-fns/src/fp/isBefore/index.js8
-rw-r--r--date-fns/src/fp/isBefore/index.js.flow58
-rw-r--r--date-fns/src/fp/isDate/index.d.ts4
-rw-r--r--date-fns/src/fp/isDate/index.js8
-rw-r--r--date-fns/src/fp/isDate/index.js.flow54
-rw-r--r--date-fns/src/fp/isEqual/index.d.ts4
-rw-r--r--date-fns/src/fp/isEqual/index.js8
-rw-r--r--date-fns/src/fp/isEqual/index.js.flow58
-rw-r--r--date-fns/src/fp/isExists/index.d.ts4
-rw-r--r--date-fns/src/fp/isExists/index.js8
-rw-r--r--date-fns/src/fp/isExists/index.js.flow67
-rw-r--r--date-fns/src/fp/isFirstDayOfMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/isFirstDayOfMonth/index.js8
-rw-r--r--date-fns/src/fp/isFirstDayOfMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/isFriday/index.d.ts4
-rw-r--r--date-fns/src/fp/isFriday/index.js8
-rw-r--r--date-fns/src/fp/isFriday/index.js.flow54
-rw-r--r--date-fns/src/fp/isLastDayOfMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/isLastDayOfMonth/index.js8
-rw-r--r--date-fns/src/fp/isLastDayOfMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/isLeapYear/index.d.ts4
-rw-r--r--date-fns/src/fp/isLeapYear/index.js8
-rw-r--r--date-fns/src/fp/isLeapYear/index.js.flow54
-rw-r--r--date-fns/src/fp/isMatch/index.d.ts4
-rw-r--r--date-fns/src/fp/isMatch/index.js8
-rw-r--r--date-fns/src/fp/isMatch/index.js.flow58
-rw-r--r--date-fns/src/fp/isMatchWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/isMatchWithOptions/index.js8
-rw-r--r--date-fns/src/fp/isMatchWithOptions/index.js.flow78
-rw-r--r--date-fns/src/fp/isMonday/index.d.ts4
-rw-r--r--date-fns/src/fp/isMonday/index.js8
-rw-r--r--date-fns/src/fp/isMonday/index.js.flow54
-rw-r--r--date-fns/src/fp/isSameDay/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameDay/index.js8
-rw-r--r--date-fns/src/fp/isSameDay/index.js.flow58
-rw-r--r--date-fns/src/fp/isSameHour/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameHour/index.js8
-rw-r--r--date-fns/src/fp/isSameHour/index.js.flow58
-rw-r--r--date-fns/src/fp/isSameISOWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameISOWeek/index.js8
-rw-r--r--date-fns/src/fp/isSameISOWeek/index.js.flow58
-rw-r--r--date-fns/src/fp/isSameISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameISOWeekYear/index.js8
-rw-r--r--date-fns/src/fp/isSameISOWeekYear/index.js.flow58
-rw-r--r--date-fns/src/fp/isSameMinute/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameMinute/index.js8
-rw-r--r--date-fns/src/fp/isSameMinute/index.js.flow58
-rw-r--r--date-fns/src/fp/isSameMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameMonth/index.js8
-rw-r--r--date-fns/src/fp/isSameMonth/index.js.flow58
-rw-r--r--date-fns/src/fp/isSameQuarter/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameQuarter/index.js8
-rw-r--r--date-fns/src/fp/isSameQuarter/index.js.flow58
-rw-r--r--date-fns/src/fp/isSameSecond/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameSecond/index.js8
-rw-r--r--date-fns/src/fp/isSameSecond/index.js.flow58
-rw-r--r--date-fns/src/fp/isSameWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameWeek/index.js8
-rw-r--r--date-fns/src/fp/isSameWeek/index.js.flow58
-rw-r--r--date-fns/src/fp/isSameWeekWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameWeekWithOptions/index.js8
-rw-r--r--date-fns/src/fp/isSameWeekWithOptions/index.js.flow75
-rw-r--r--date-fns/src/fp/isSameYear/index.d.ts4
-rw-r--r--date-fns/src/fp/isSameYear/index.js8
-rw-r--r--date-fns/src/fp/isSameYear/index.js.flow58
-rw-r--r--date-fns/src/fp/isSaturday/index.d.ts4
-rw-r--r--date-fns/src/fp/isSaturday/index.js8
-rw-r--r--date-fns/src/fp/isSaturday/index.js.flow54
-rw-r--r--date-fns/src/fp/isSunday/index.d.ts4
-rw-r--r--date-fns/src/fp/isSunday/index.js8
-rw-r--r--date-fns/src/fp/isSunday/index.js.flow54
-rw-r--r--date-fns/src/fp/isThursday/index.d.ts4
-rw-r--r--date-fns/src/fp/isThursday/index.js8
-rw-r--r--date-fns/src/fp/isThursday/index.js.flow54
-rw-r--r--date-fns/src/fp/isTuesday/index.d.ts4
-rw-r--r--date-fns/src/fp/isTuesday/index.js8
-rw-r--r--date-fns/src/fp/isTuesday/index.js.flow54
-rw-r--r--date-fns/src/fp/isValid/index.d.ts4
-rw-r--r--date-fns/src/fp/isValid/index.js8
-rw-r--r--date-fns/src/fp/isValid/index.js.flow54
-rw-r--r--date-fns/src/fp/isWednesday/index.d.ts4
-rw-r--r--date-fns/src/fp/isWednesday/index.js8
-rw-r--r--date-fns/src/fp/isWednesday/index.js.flow54
-rw-r--r--date-fns/src/fp/isWeekend/index.d.ts4
-rw-r--r--date-fns/src/fp/isWeekend/index.js8
-rw-r--r--date-fns/src/fp/isWeekend/index.js.flow54
-rw-r--r--date-fns/src/fp/isWithinInterval/index.d.ts4
-rw-r--r--date-fns/src/fp/isWithinInterval/index.js8
-rw-r--r--date-fns/src/fp/isWithinInterval/index.js.flow58
-rw-r--r--date-fns/src/fp/lastDayOfDecade/index.d.ts4
-rw-r--r--date-fns/src/fp/lastDayOfDecade/index.js8
-rw-r--r--date-fns/src/fp/lastDayOfDecade/index.js.flow54
-rw-r--r--date-fns/src/fp/lastDayOfISOWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/lastDayOfISOWeek/index.js8
-rw-r--r--date-fns/src/fp/lastDayOfISOWeek/index.js.flow54
-rw-r--r--date-fns/src/fp/lastDayOfISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/fp/lastDayOfISOWeekYear/index.js8
-rw-r--r--date-fns/src/fp/lastDayOfISOWeekYear/index.js.flow54
-rw-r--r--date-fns/src/fp/lastDayOfMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/lastDayOfMonth/index.js8
-rw-r--r--date-fns/src/fp/lastDayOfMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/lastDayOfQuarter/index.d.ts4
-rw-r--r--date-fns/src/fp/lastDayOfQuarter/index.js8
-rw-r--r--date-fns/src/fp/lastDayOfQuarter/index.js.flow54
-rw-r--r--date-fns/src/fp/lastDayOfQuarterWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/lastDayOfQuarterWithOptions/index.js8
-rw-r--r--date-fns/src/fp/lastDayOfQuarterWithOptions/index.js.flow64
-rw-r--r--date-fns/src/fp/lastDayOfWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/lastDayOfWeek/index.js8
-rw-r--r--date-fns/src/fp/lastDayOfWeek/index.js.flow54
-rw-r--r--date-fns/src/fp/lastDayOfWeekWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/lastDayOfWeekWithOptions/index.js8
-rw-r--r--date-fns/src/fp/lastDayOfWeekWithOptions/index.js.flow65
-rw-r--r--date-fns/src/fp/lastDayOfYear/index.d.ts4
-rw-r--r--date-fns/src/fp/lastDayOfYear/index.js8
-rw-r--r--date-fns/src/fp/lastDayOfYear/index.js.flow54
-rw-r--r--date-fns/src/fp/lightFormat/index.d.ts4
-rw-r--r--date-fns/src/fp/lightFormat/index.js8
-rw-r--r--date-fns/src/fp/lightFormat/index.js.flow58
-rw-r--r--date-fns/src/fp/max/index.d.ts4
-rw-r--r--date-fns/src/fp/max/index.js8
-rw-r--r--date-fns/src/fp/max/index.js.flow54
-rw-r--r--date-fns/src/fp/milliseconds/index.d.ts4
-rw-r--r--date-fns/src/fp/milliseconds/index.js8
-rw-r--r--date-fns/src/fp/milliseconds/index.js.flow54
-rw-r--r--date-fns/src/fp/millisecondsToHours/index.d.ts4
-rw-r--r--date-fns/src/fp/millisecondsToHours/index.js8
-rw-r--r--date-fns/src/fp/millisecondsToHours/index.js.flow54
-rw-r--r--date-fns/src/fp/millisecondsToMinutes/index.d.ts4
-rw-r--r--date-fns/src/fp/millisecondsToMinutes/index.js8
-rw-r--r--date-fns/src/fp/millisecondsToMinutes/index.js.flow54
-rw-r--r--date-fns/src/fp/millisecondsToSeconds/index.d.ts4
-rw-r--r--date-fns/src/fp/millisecondsToSeconds/index.js8
-rw-r--r--date-fns/src/fp/millisecondsToSeconds/index.js.flow54
-rw-r--r--date-fns/src/fp/min/index.d.ts4
-rw-r--r--date-fns/src/fp/min/index.js8
-rw-r--r--date-fns/src/fp/min/index.js.flow54
-rw-r--r--date-fns/src/fp/minutesToHours/index.d.ts4
-rw-r--r--date-fns/src/fp/minutesToHours/index.js8
-rw-r--r--date-fns/src/fp/minutesToHours/index.js.flow54
-rw-r--r--date-fns/src/fp/minutesToMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/fp/minutesToMilliseconds/index.js8
-rw-r--r--date-fns/src/fp/minutesToMilliseconds/index.js.flow54
-rw-r--r--date-fns/src/fp/minutesToSeconds/index.d.ts4
-rw-r--r--date-fns/src/fp/minutesToSeconds/index.js8
-rw-r--r--date-fns/src/fp/minutesToSeconds/index.js.flow54
-rw-r--r--date-fns/src/fp/monthsToQuarters/index.d.ts4
-rw-r--r--date-fns/src/fp/monthsToQuarters/index.js8
-rw-r--r--date-fns/src/fp/monthsToQuarters/index.js.flow54
-rw-r--r--date-fns/src/fp/monthsToYears/index.d.ts4
-rw-r--r--date-fns/src/fp/monthsToYears/index.js8
-rw-r--r--date-fns/src/fp/monthsToYears/index.js.flow54
-rw-r--r--date-fns/src/fp/nextDay/index.d.ts4
-rw-r--r--date-fns/src/fp/nextDay/index.js8
-rw-r--r--date-fns/src/fp/nextDay/index.js.flow58
-rw-r--r--date-fns/src/fp/nextFriday/index.d.ts4
-rw-r--r--date-fns/src/fp/nextFriday/index.js8
-rw-r--r--date-fns/src/fp/nextFriday/index.js.flow54
-rw-r--r--date-fns/src/fp/nextMonday/index.d.ts4
-rw-r--r--date-fns/src/fp/nextMonday/index.js8
-rw-r--r--date-fns/src/fp/nextMonday/index.js.flow54
-rw-r--r--date-fns/src/fp/nextSaturday/index.d.ts4
-rw-r--r--date-fns/src/fp/nextSaturday/index.js8
-rw-r--r--date-fns/src/fp/nextSaturday/index.js.flow54
-rw-r--r--date-fns/src/fp/nextSunday/index.d.ts4
-rw-r--r--date-fns/src/fp/nextSunday/index.js8
-rw-r--r--date-fns/src/fp/nextSunday/index.js.flow54
-rw-r--r--date-fns/src/fp/nextThursday/index.d.ts4
-rw-r--r--date-fns/src/fp/nextThursday/index.js8
-rw-r--r--date-fns/src/fp/nextThursday/index.js.flow54
-rw-r--r--date-fns/src/fp/nextTuesday/index.d.ts4
-rw-r--r--date-fns/src/fp/nextTuesday/index.js8
-rw-r--r--date-fns/src/fp/nextTuesday/index.js.flow54
-rw-r--r--date-fns/src/fp/nextWednesday/index.d.ts4
-rw-r--r--date-fns/src/fp/nextWednesday/index.js8
-rw-r--r--date-fns/src/fp/nextWednesday/index.js.flow54
-rw-r--r--date-fns/src/fp/parse/index.d.ts4
-rw-r--r--date-fns/src/fp/parse/index.js8
-rw-r--r--date-fns/src/fp/parse/index.js.flow67
-rw-r--r--date-fns/src/fp/parseISO/index.d.ts4
-rw-r--r--date-fns/src/fp/parseISO/index.js8
-rw-r--r--date-fns/src/fp/parseISO/index.js.flow54
-rw-r--r--date-fns/src/fp/parseISOWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/parseISOWithOptions/index.js8
-rw-r--r--date-fns/src/fp/parseISOWithOptions/index.js.flow64
-rw-r--r--date-fns/src/fp/parseJSON/index.d.ts4
-rw-r--r--date-fns/src/fp/parseJSON/index.js8
-rw-r--r--date-fns/src/fp/parseJSON/index.js.flow54
-rw-r--r--date-fns/src/fp/parseWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/parseWithOptions/index.js8
-rw-r--r--date-fns/src/fp/parseWithOptions/index.js.flow94
-rw-r--r--date-fns/src/fp/quartersToMonths/index.d.ts4
-rw-r--r--date-fns/src/fp/quartersToMonths/index.js8
-rw-r--r--date-fns/src/fp/quartersToMonths/index.js.flow54
-rw-r--r--date-fns/src/fp/quartersToYears/index.d.ts4
-rw-r--r--date-fns/src/fp/quartersToYears/index.js8
-rw-r--r--date-fns/src/fp/quartersToYears/index.js.flow54
-rw-r--r--date-fns/src/fp/roundToNearestMinutes/index.d.ts4
-rw-r--r--date-fns/src/fp/roundToNearestMinutes/index.js8
-rw-r--r--date-fns/src/fp/roundToNearestMinutes/index.js.flow54
-rw-r--r--date-fns/src/fp/roundToNearestMinutesWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/roundToNearestMinutesWithOptions/index.js8
-rw-r--r--date-fns/src/fp/roundToNearestMinutesWithOptions/index.js.flow64
-rw-r--r--date-fns/src/fp/secondsToHours/index.d.ts4
-rw-r--r--date-fns/src/fp/secondsToHours/index.js8
-rw-r--r--date-fns/src/fp/secondsToHours/index.js.flow54
-rw-r--r--date-fns/src/fp/secondsToMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/fp/secondsToMilliseconds/index.js8
-rw-r--r--date-fns/src/fp/secondsToMilliseconds/index.js.flow54
-rw-r--r--date-fns/src/fp/secondsToMinutes/index.d.ts4
-rw-r--r--date-fns/src/fp/secondsToMinutes/index.js8
-rw-r--r--date-fns/src/fp/secondsToMinutes/index.js.flow54
-rw-r--r--date-fns/src/fp/set/index.d.ts4
-rw-r--r--date-fns/src/fp/set/index.js8
-rw-r--r--date-fns/src/fp/set/index.js.flow70
-rw-r--r--date-fns/src/fp/setDate/index.d.ts4
-rw-r--r--date-fns/src/fp/setDate/index.js8
-rw-r--r--date-fns/src/fp/setDate/index.js.flow58
-rw-r--r--date-fns/src/fp/setDay/index.d.ts4
-rw-r--r--date-fns/src/fp/setDay/index.js8
-rw-r--r--date-fns/src/fp/setDay/index.js.flow58
-rw-r--r--date-fns/src/fp/setDayOfYear/index.d.ts4
-rw-r--r--date-fns/src/fp/setDayOfYear/index.js8
-rw-r--r--date-fns/src/fp/setDayOfYear/index.js.flow58
-rw-r--r--date-fns/src/fp/setDayWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/setDayWithOptions/index.js8
-rw-r--r--date-fns/src/fp/setDayWithOptions/index.js.flow75
-rw-r--r--date-fns/src/fp/setHours/index.d.ts4
-rw-r--r--date-fns/src/fp/setHours/index.js8
-rw-r--r--date-fns/src/fp/setHours/index.js.flow58
-rw-r--r--date-fns/src/fp/setISODay/index.d.ts4
-rw-r--r--date-fns/src/fp/setISODay/index.js8
-rw-r--r--date-fns/src/fp/setISODay/index.js.flow58
-rw-r--r--date-fns/src/fp/setISOWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/setISOWeek/index.js8
-rw-r--r--date-fns/src/fp/setISOWeek/index.js.flow58
-rw-r--r--date-fns/src/fp/setISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/fp/setISOWeekYear/index.js8
-rw-r--r--date-fns/src/fp/setISOWeekYear/index.js.flow58
-rw-r--r--date-fns/src/fp/setMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/fp/setMilliseconds/index.js8
-rw-r--r--date-fns/src/fp/setMilliseconds/index.js.flow58
-rw-r--r--date-fns/src/fp/setMinutes/index.d.ts4
-rw-r--r--date-fns/src/fp/setMinutes/index.js8
-rw-r--r--date-fns/src/fp/setMinutes/index.js.flow58
-rw-r--r--date-fns/src/fp/setMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/setMonth/index.js8
-rw-r--r--date-fns/src/fp/setMonth/index.js.flow58
-rw-r--r--date-fns/src/fp/setQuarter/index.d.ts4
-rw-r--r--date-fns/src/fp/setQuarter/index.js8
-rw-r--r--date-fns/src/fp/setQuarter/index.js.flow58
-rw-r--r--date-fns/src/fp/setSeconds/index.d.ts4
-rw-r--r--date-fns/src/fp/setSeconds/index.js8
-rw-r--r--date-fns/src/fp/setSeconds/index.js.flow58
-rw-r--r--date-fns/src/fp/setWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/setWeek/index.js8
-rw-r--r--date-fns/src/fp/setWeek/index.js.flow58
-rw-r--r--date-fns/src/fp/setWeekWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/setWeekWithOptions/index.js8
-rw-r--r--date-fns/src/fp/setWeekWithOptions/index.js.flow76
-rw-r--r--date-fns/src/fp/setWeekYear/index.d.ts4
-rw-r--r--date-fns/src/fp/setWeekYear/index.js8
-rw-r--r--date-fns/src/fp/setWeekYear/index.js.flow58
-rw-r--r--date-fns/src/fp/setWeekYearWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/setWeekYearWithOptions/index.js8
-rw-r--r--date-fns/src/fp/setWeekYearWithOptions/index.js.flow76
-rw-r--r--date-fns/src/fp/setYear/index.d.ts4
-rw-r--r--date-fns/src/fp/setYear/index.js8
-rw-r--r--date-fns/src/fp/setYear/index.js.flow58
-rw-r--r--date-fns/src/fp/startOfDay/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfDay/index.js8
-rw-r--r--date-fns/src/fp/startOfDay/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfDecade/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfDecade/index.js8
-rw-r--r--date-fns/src/fp/startOfDecade/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfHour/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfHour/index.js8
-rw-r--r--date-fns/src/fp/startOfHour/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfISOWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfISOWeek/index.js8
-rw-r--r--date-fns/src/fp/startOfISOWeek/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfISOWeekYear/index.js8
-rw-r--r--date-fns/src/fp/startOfISOWeekYear/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfMinute/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfMinute/index.js8
-rw-r--r--date-fns/src/fp/startOfMinute/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfMonth/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfMonth/index.js8
-rw-r--r--date-fns/src/fp/startOfMonth/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfQuarter/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfQuarter/index.js8
-rw-r--r--date-fns/src/fp/startOfQuarter/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfSecond/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfSecond/index.js8
-rw-r--r--date-fns/src/fp/startOfSecond/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfWeek/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfWeek/index.js8
-rw-r--r--date-fns/src/fp/startOfWeek/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfWeekWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfWeekWithOptions/index.js8
-rw-r--r--date-fns/src/fp/startOfWeekWithOptions/index.js.flow65
-rw-r--r--date-fns/src/fp/startOfWeekYear/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfWeekYear/index.js8
-rw-r--r--date-fns/src/fp/startOfWeekYear/index.js.flow54
-rw-r--r--date-fns/src/fp/startOfWeekYearWithOptions/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfWeekYearWithOptions/index.js8
-rw-r--r--date-fns/src/fp/startOfWeekYearWithOptions/index.js.flow66
-rw-r--r--date-fns/src/fp/startOfYear/index.d.ts4
-rw-r--r--date-fns/src/fp/startOfYear/index.js8
-rw-r--r--date-fns/src/fp/startOfYear/index.js.flow54
-rw-r--r--date-fns/src/fp/sub/index.d.ts4
-rw-r--r--date-fns/src/fp/sub/index.js8
-rw-r--r--date-fns/src/fp/sub/index.js.flow58
-rw-r--r--date-fns/src/fp/subBusinessDays/index.d.ts4
-rw-r--r--date-fns/src/fp/subBusinessDays/index.js8
-rw-r--r--date-fns/src/fp/subBusinessDays/index.js.flow58
-rw-r--r--date-fns/src/fp/subDays/index.d.ts4
-rw-r--r--date-fns/src/fp/subDays/index.js8
-rw-r--r--date-fns/src/fp/subDays/index.js.flow58
-rw-r--r--date-fns/src/fp/subHours/index.d.ts4
-rw-r--r--date-fns/src/fp/subHours/index.js8
-rw-r--r--date-fns/src/fp/subHours/index.js.flow58
-rw-r--r--date-fns/src/fp/subISOWeekYears/index.d.ts4
-rw-r--r--date-fns/src/fp/subISOWeekYears/index.js8
-rw-r--r--date-fns/src/fp/subISOWeekYears/index.js.flow58
-rw-r--r--date-fns/src/fp/subMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/fp/subMilliseconds/index.js8
-rw-r--r--date-fns/src/fp/subMilliseconds/index.js.flow58
-rw-r--r--date-fns/src/fp/subMinutes/index.d.ts4
-rw-r--r--date-fns/src/fp/subMinutes/index.js8
-rw-r--r--date-fns/src/fp/subMinutes/index.js.flow58
-rw-r--r--date-fns/src/fp/subMonths/index.d.ts4
-rw-r--r--date-fns/src/fp/subMonths/index.js8
-rw-r--r--date-fns/src/fp/subMonths/index.js.flow58
-rw-r--r--date-fns/src/fp/subQuarters/index.d.ts4
-rw-r--r--date-fns/src/fp/subQuarters/index.js8
-rw-r--r--date-fns/src/fp/subQuarters/index.js.flow58
-rw-r--r--date-fns/src/fp/subSeconds/index.d.ts4
-rw-r--r--date-fns/src/fp/subSeconds/index.js8
-rw-r--r--date-fns/src/fp/subSeconds/index.js.flow58
-rw-r--r--date-fns/src/fp/subWeeks/index.d.ts4
-rw-r--r--date-fns/src/fp/subWeeks/index.js8
-rw-r--r--date-fns/src/fp/subWeeks/index.js.flow58
-rw-r--r--date-fns/src/fp/subYears/index.d.ts4
-rw-r--r--date-fns/src/fp/subYears/index.js8
-rw-r--r--date-fns/src/fp/subYears/index.js.flow58
-rw-r--r--date-fns/src/fp/test.js1045
-rw-r--r--date-fns/src/fp/toDate/index.d.ts4
-rw-r--r--date-fns/src/fp/toDate/index.js8
-rw-r--r--date-fns/src/fp/toDate/index.js.flow54
-rw-r--r--date-fns/src/fp/weeksToDays/index.d.ts4
-rw-r--r--date-fns/src/fp/weeksToDays/index.js8
-rw-r--r--date-fns/src/fp/weeksToDays/index.js.flow54
-rw-r--r--date-fns/src/fp/yearsToMonths/index.d.ts4
-rw-r--r--date-fns/src/fp/yearsToMonths/index.js8
-rw-r--r--date-fns/src/fp/yearsToMonths/index.js.flow54
-rw-r--r--date-fns/src/fp/yearsToQuarters/index.d.ts4
-rw-r--r--date-fns/src/fp/yearsToQuarters/index.js8
-rw-r--r--date-fns/src/fp/yearsToQuarters/index.js.flow54
-rw-r--r--date-fns/src/fromUnixTime/index.d.ts4
-rw-r--r--date-fns/src/fromUnixTime/index.js32
-rw-r--r--date-fns/src/fromUnixTime/index.js.flow52
-rw-r--r--date-fns/src/fromUnixTime/test.js21
-rw-r--r--date-fns/src/getDate/benchmark.js21
-rw-r--r--date-fns/src/getDate/index.d.ts4
-rw-r--r--date-fns/src/getDate/index.js.flow52
-rw-r--r--date-fns/src/getDate/index.ts31
-rw-r--r--date-fns/src/getDate/test.ts26
-rw-r--r--date-fns/src/getDay/benchmark.js21
-rw-r--r--date-fns/src/getDay/index.d.ts4
-rw-r--r--date-fns/src/getDay/index.js.flow52
-rw-r--r--date-fns/src/getDay/index.ts31
-rw-r--r--date-fns/src/getDay/test.ts26
-rw-r--r--date-fns/src/getDayOfYear/benchmark.js21
-rw-r--r--date-fns/src/getDayOfYear/index.d.ts4
-rw-r--r--date-fns/src/getDayOfYear/index.js.flow52
-rw-r--r--date-fns/src/getDayOfYear/index.ts34
-rw-r--r--date-fns/src/getDayOfYear/test.ts34
-rw-r--r--date-fns/src/getDaysInMonth/benchmark.js21
-rw-r--r--date-fns/src/getDaysInMonth/index.d.ts4
-rw-r--r--date-fns/src/getDaysInMonth/index.js.flow52
-rw-r--r--date-fns/src/getDaysInMonth/index.ts35
-rw-r--r--date-fns/src/getDaysInMonth/test.ts40
-rw-r--r--date-fns/src/getDaysInYear/benchmark.js15
-rw-r--r--date-fns/src/getDaysInYear/index.d.ts4
-rw-r--r--date-fns/src/getDaysInYear/index.js.flow52
-rw-r--r--date-fns/src/getDaysInYear/index.ts36
-rw-r--r--date-fns/src/getDaysInYear/test.ts42
-rw-r--r--date-fns/src/getDecade/benchmark.js21
-rw-r--r--date-fns/src/getDecade/index.d.ts4
-rw-r--r--date-fns/src/getDecade/index.js.flow52
-rw-r--r--date-fns/src/getDecade/index.ts32
-rw-r--r--date-fns/src/getDecade/test.ts26
-rw-r--r--date-fns/src/getHours/benchmark.js21
-rw-r--r--date-fns/src/getHours/index.d.ts4
-rw-r--r--date-fns/src/getHours/index.js.flow52
-rw-r--r--date-fns/src/getHours/index.ts31
-rw-r--r--date-fns/src/getHours/test.ts26
-rw-r--r--date-fns/src/getISODay/benchmark.js21
-rw-r--r--date-fns/src/getISODay/index.d.ts4
-rw-r--r--date-fns/src/getISODay/index.js.flow52
-rw-r--r--date-fns/src/getISODay/index.ts39
-rw-r--r--date-fns/src/getISODay/test.ts31
-rw-r--r--date-fns/src/getISOWeek/benchmark.js21
-rw-r--r--date-fns/src/getISOWeek/index.d.ts4
-rw-r--r--date-fns/src/getISOWeek/index.js.flow52
-rw-r--r--date-fns/src/getISOWeek/index.ts41
-rw-r--r--date-fns/src/getISOWeek/test.ts56
-rw-r--r--date-fns/src/getISOWeekYear/benchmark.js21
-rw-r--r--date-fns/src/getISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/getISOWeekYear/index.js.flow52
-rw-r--r--date-fns/src/getISOWeekYear/index.ts57
-rw-r--r--date-fns/src/getISOWeekYear/test.ts34
-rw-r--r--date-fns/src/getISOWeeksInYear/benchmark.js21
-rw-r--r--date-fns/src/getISOWeeksInYear/index.d.ts4
-rw-r--r--date-fns/src/getISOWeeksInYear/index.js.flow52
-rw-r--r--date-fns/src/getISOWeeksInYear/index.ts40
-rw-r--r--date-fns/src/getISOWeeksInYear/test.ts35
-rw-r--r--date-fns/src/getMilliseconds/benchmark.js21
-rw-r--r--date-fns/src/getMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/getMilliseconds/index.js.flow52
-rw-r--r--date-fns/src/getMilliseconds/index.ts31
-rw-r--r--date-fns/src/getMilliseconds/test.ts30
-rw-r--r--date-fns/src/getMinutes/benchmark.js21
-rw-r--r--date-fns/src/getMinutes/index.d.ts4
-rw-r--r--date-fns/src/getMinutes/index.js.flow52
-rw-r--r--date-fns/src/getMinutes/index.ts31
-rw-r--r--date-fns/src/getMinutes/test.ts26
-rw-r--r--date-fns/src/getMonth/benchmark.js21
-rw-r--r--date-fns/src/getMonth/index.d.ts4
-rw-r--r--date-fns/src/getMonth/index.js.flow52
-rw-r--r--date-fns/src/getMonth/index.ts31
-rw-r--r--date-fns/src/getMonth/test.ts26
-rw-r--r--date-fns/src/getOverlappingDaysInIntervals/index.d.ts4
-rw-r--r--date-fns/src/getOverlappingDaysInIntervals/index.js.flow55
-rw-r--r--date-fns/src/getOverlappingDaysInIntervals/index.ts106
-rw-r--r--date-fns/src/getOverlappingDaysInIntervals/test.ts240
-rw-r--r--date-fns/src/getQuarter/benchmark.js21
-rw-r--r--date-fns/src/getQuarter/index.d.ts4
-rw-r--r--date-fns/src/getQuarter/index.js.flow52
-rw-r--r--date-fns/src/getQuarter/index.ts31
-rw-r--r--date-fns/src/getQuarter/test.ts26
-rw-r--r--date-fns/src/getSeconds/benchmark.js21
-rw-r--r--date-fns/src/getSeconds/index.d.ts4
-rw-r--r--date-fns/src/getSeconds/index.js.flow52
-rw-r--r--date-fns/src/getSeconds/index.ts31
-rw-r--r--date-fns/src/getSeconds/test.ts28
-rw-r--r--date-fns/src/getTime/benchmark.js21
-rw-r--r--date-fns/src/getTime/index.d.ts4
-rw-r--r--date-fns/src/getTime/index.js.flow52
-rw-r--r--date-fns/src/getTime/index.ts31
-rw-r--r--date-fns/src/getTime/test.ts28
-rw-r--r--date-fns/src/getUnixTime/benchmark.js21
-rw-r--r--date-fns/src/getUnixTime/index.d.ts4
-rw-r--r--date-fns/src/getUnixTime/index.js.flow52
-rw-r--r--date-fns/src/getUnixTime/index.ts29
-rw-r--r--date-fns/src/getUnixTime/test.ts28
-rw-r--r--date-fns/src/getWeek/index.d.ts4
-rw-r--r--date-fns/src/getWeek/index.js.flow59
-rw-r--r--date-fns/src/getWeek/index.ts64
-rw-r--r--date-fns/src/getWeek/test.ts73
-rw-r--r--date-fns/src/getWeekOfMonth/benchmark.js15
-rw-r--r--date-fns/src/getWeekOfMonth/index.d.ts4
-rw-r--r--date-fns/src/getWeekOfMonth/index.js72
-rw-r--r--date-fns/src/getWeekOfMonth/index.js.flow58
-rw-r--r--date-fns/src/getWeekOfMonth/test.js84
-rw-r--r--date-fns/src/getWeekYear/index.d.ts4
-rw-r--r--date-fns/src/getWeekYear/index.js.flow59
-rw-r--r--date-fns/src/getWeekYear/index.ts98
-rw-r--r--date-fns/src/getWeekYear/test.ts75
-rw-r--r--date-fns/src/getWeeksInMonth/index.d.ts4
-rw-r--r--date-fns/src/getWeeksInMonth/index.js.flow58
-rw-r--r--date-fns/src/getWeeksInMonth/index.ts51
-rw-r--r--date-fns/src/getWeeksInMonth/test.ts71
-rw-r--r--date-fns/src/getYear/benchmark.js21
-rw-r--r--date-fns/src/getYear/index.d.ts4
-rw-r--r--date-fns/src/getYear/index.js.flow52
-rw-r--r--date-fns/src/getYear/index.ts31
-rw-r--r--date-fns/src/getYear/test.ts26
-rw-r--r--date-fns/src/hoursToMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/hoursToMilliseconds/index.js.flow52
-rw-r--r--date-fns/src/hoursToMilliseconds/index.ts25
-rw-r--r--date-fns/src/hoursToMilliseconds/test.ts20
-rw-r--r--date-fns/src/hoursToMinutes/index.d.ts4
-rw-r--r--date-fns/src/hoursToMinutes/index.js.flow52
-rw-r--r--date-fns/src/hoursToMinutes/index.ts25
-rw-r--r--date-fns/src/hoursToMinutes/test.ts20
-rw-r--r--date-fns/src/hoursToSeconds/index.d.ts4
-rw-r--r--date-fns/src/hoursToSeconds/index.js.flow52
-rw-r--r--date-fns/src/hoursToSeconds/index.ts25
-rw-r--r--date-fns/src/hoursToSeconds/test.ts20
-rw-r--r--date-fns/src/index.js230
-rw-r--r--date-fns/src/index.js.flow860
-rw-r--r--date-fns/src/intervalToDuration/index.d.ts4
-rw-r--r--date-fns/src/intervalToDuration/index.js.flow52
-rw-r--r--date-fns/src/intervalToDuration/index.ts81
-rw-r--r--date-fns/src/intervalToDuration/test.ts116
-rw-r--r--date-fns/src/intlFormat/index.d.ts4
-rw-r--r--date-fns/src/intlFormat/index.js.flow72
-rw-r--r--date-fns/src/intlFormat/index.ts116
-rw-r--r--date-fns/src/intlFormat/test.ts111
-rw-r--r--date-fns/src/isAfter/benchmark.js23
-rw-r--r--date-fns/src/isAfter/index.d.ts4
-rw-r--r--date-fns/src/isAfter/index.js.flow55
-rw-r--r--date-fns/src/isAfter/index.ts32
-rw-r--r--date-fns/src/isAfter/test.ts59
-rw-r--r--date-fns/src/isBefore/benchmark.js23
-rw-r--r--date-fns/src/isBefore/index.d.ts4
-rw-r--r--date-fns/src/isBefore/index.js.flow55
-rw-r--r--date-fns/src/isBefore/index.ts32
-rw-r--r--date-fns/src/isBefore/test.ts59
-rw-r--r--date-fns/src/isDate/index.d.ts4
-rw-r--r--date-fns/src/isDate/index.js.flow52
-rw-r--r--date-fns/src/isDate/index.ts47
-rw-r--r--date-fns/src/isDate/test.ts81
-rw-r--r--date-fns/src/isEqual/benchmark.js23
-rw-r--r--date-fns/src/isEqual/index.d.ts4
-rw-r--r--date-fns/src/isEqual/index.js.flow55
-rw-r--r--date-fns/src/isEqual/index.ts35
-rw-r--r--date-fns/src/isEqual/test.ts51
-rw-r--r--date-fns/src/isExists/benchmark.js21
-rw-r--r--date-fns/src/isExists/index.d.ts4
-rw-r--r--date-fns/src/isExists/index.js.flow52
-rw-r--r--date-fns/src/isExists/index.ts38
-rw-r--r--date-fns/src/isExists/test.ts21
-rw-r--r--date-fns/src/isFirstDayOfMonth/benchmark.js15
-rw-r--r--date-fns/src/isFirstDayOfMonth/index.d.ts4
-rw-r--r--date-fns/src/isFirstDayOfMonth/index.js.flow52
-rw-r--r--date-fns/src/isFirstDayOfMonth/index.ts29
-rw-r--r--date-fns/src/isFirstDayOfMonth/test.ts32
-rw-r--r--date-fns/src/isFriday/benchmark.js15
-rw-r--r--date-fns/src/isFriday/index.d.ts4
-rw-r--r--date-fns/src/isFriday/index.js.flow52
-rw-r--r--date-fns/src/isFriday/index.ts29
-rw-r--r--date-fns/src/isFriday/test.ts31
-rw-r--r--date-fns/src/isFuture/benchmark.js19
-rw-r--r--date-fns/src/isFuture/index.d.ts4
-rw-r--r--date-fns/src/isFuture/index.js.flow52
-rw-r--r--date-fns/src/isFuture/index.ts33
-rw-r--r--date-fns/src/isFuture/test.ts41
-rw-r--r--date-fns/src/isLastDayOfMonth/benchmark.js15
-rw-r--r--date-fns/src/isLastDayOfMonth/index.d.ts4
-rw-r--r--date-fns/src/isLastDayOfMonth/index.js.flow52
-rw-r--r--date-fns/src/isLastDayOfMonth/index.ts32
-rw-r--r--date-fns/src/isLastDayOfMonth/test.ts32
-rw-r--r--date-fns/src/isLeapYear/benchmark.js21
-rw-r--r--date-fns/src/isLeapYear/index.d.ts4
-rw-r--r--date-fns/src/isLeapYear/index.js.flow52
-rw-r--r--date-fns/src/isLeapYear/index.ts31
-rw-r--r--date-fns/src/isLeapYear/test.ts42
-rw-r--r--date-fns/src/isMatch/index.d.ts4
-rw-r--r--date-fns/src/isMatch/index.js300
-rw-r--r--date-fns/src/isMatch/index.js.flow62
-rw-r--r--date-fns/src/isMatch/test.js24
-rw-r--r--date-fns/src/isMonday/benchmark.js15
-rw-r--r--date-fns/src/isMonday/index.d.ts4
-rw-r--r--date-fns/src/isMonday/index.js.flow52
-rw-r--r--date-fns/src/isMonday/index.ts29
-rw-r--r--date-fns/src/isMonday/test.ts31
-rw-r--r--date-fns/src/isPast/benchmark.js19
-rw-r--r--date-fns/src/isPast/index.d.ts4
-rw-r--r--date-fns/src/isPast/index.js.flow52
-rw-r--r--date-fns/src/isPast/index.ts33
-rw-r--r--date-fns/src/isPast/test.ts42
-rw-r--r--date-fns/src/isSameDay/benchmark.js23
-rw-r--r--date-fns/src/isSameDay/index.d.ts4
-rw-r--r--date-fns/src/isSameDay/index.js.flow55
-rw-r--r--date-fns/src/isSameDay/index.ts33
-rw-r--r--date-fns/src/isSameDay/test.ts51
-rw-r--r--date-fns/src/isSameHour/benchmark.js23
-rw-r--r--date-fns/src/isSameHour/index.d.ts4
-rw-r--r--date-fns/src/isSameHour/index.js.flow55
-rw-r--r--date-fns/src/isSameHour/index.ts33
-rw-r--r--date-fns/src/isSameHour/test.ts51
-rw-r--r--date-fns/src/isSameISOWeek/benchmark.js16
-rw-r--r--date-fns/src/isSameISOWeek/index.d.ts4
-rw-r--r--date-fns/src/isSameISOWeek/index.js.flow55
-rw-r--r--date-fns/src/isSameISOWeek/index.ts32
-rw-r--r--date-fns/src/isSameISOWeek/test.ts51
-rw-r--r--date-fns/src/isSameISOWeekYear/benchmark.js16
-rw-r--r--date-fns/src/isSameISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/isSameISOWeekYear/index.js.flow55
-rw-r--r--date-fns/src/isSameISOWeekYear/index.ts40
-rw-r--r--date-fns/src/isSameISOWeekYear/test.ts68
-rw-r--r--date-fns/src/isSameMinute/benchmark.js23
-rw-r--r--date-fns/src/isSameMinute/index.d.ts4
-rw-r--r--date-fns/src/isSameMinute/index.js.flow55
-rw-r--r--date-fns/src/isSameMinute/index.ts37
-rw-r--r--date-fns/src/isSameMinute/test.ts51
-rw-r--r--date-fns/src/isSameMonth/benchmark.js23
-rw-r--r--date-fns/src/isSameMonth/index.d.ts4
-rw-r--r--date-fns/src/isSameMonth/index.js.flow55
-rw-r--r--date-fns/src/isSameMonth/index.ts35
-rw-r--r--date-fns/src/isSameMonth/test.ts51
-rw-r--r--date-fns/src/isSameQuarter/benchmark.js23
-rw-r--r--date-fns/src/isSameQuarter/index.d.ts4
-rw-r--r--date-fns/src/isSameQuarter/index.js.flow55
-rw-r--r--date-fns/src/isSameQuarter/index.ts33
-rw-r--r--date-fns/src/isSameQuarter/test.ts51
-rw-r--r--date-fns/src/isSameSecond/benchmark.js23
-rw-r--r--date-fns/src/isSameSecond/index.d.ts4
-rw-r--r--date-fns/src/isSameSecond/index.js.flow55
-rw-r--r--date-fns/src/isSameSecond/index.ts37
-rw-r--r--date-fns/src/isSameSecond/test.ts51
-rw-r--r--date-fns/src/isSameWeek/benchmark.js23
-rw-r--r--date-fns/src/isSameWeek/index.d.ts4
-rw-r--r--date-fns/src/isSameWeek/index.js.flow59
-rw-r--r--date-fns/src/isSameWeek/index.ts50
-rw-r--r--date-fns/src/isSameWeek/test.ts109
-rw-r--r--date-fns/src/isSameYear/benchmark.js23
-rw-r--r--date-fns/src/isSameYear/index.d.ts4
-rw-r--r--date-fns/src/isSameYear/index.js.flow55
-rw-r--r--date-fns/src/isSameYear/index.ts35
-rw-r--r--date-fns/src/isSameYear/test.ts51
-rw-r--r--date-fns/src/isSaturday/benchmark.js15
-rw-r--r--date-fns/src/isSaturday/index.d.ts4
-rw-r--r--date-fns/src/isSaturday/index.js.flow52
-rw-r--r--date-fns/src/isSaturday/index.ts29
-rw-r--r--date-fns/src/isSaturday/test.ts31
-rw-r--r--date-fns/src/isSunday/benchmark.js15
-rw-r--r--date-fns/src/isSunday/index.d.ts4
-rw-r--r--date-fns/src/isSunday/index.js.flow52
-rw-r--r--date-fns/src/isSunday/index.ts29
-rw-r--r--date-fns/src/isSunday/test.ts31
-rw-r--r--date-fns/src/isThisHour/benchmark.js20
-rw-r--r--date-fns/src/isThisHour/index.d.ts4
-rw-r--r--date-fns/src/isThisHour/index.js.flow52
-rw-r--r--date-fns/src/isThisHour/index.ts34
-rw-r--r--date-fns/src/isThisHour/test.ts39
-rw-r--r--date-fns/src/isThisISOWeek/benchmark.js20
-rw-r--r--date-fns/src/isThisISOWeek/index.d.ts4
-rw-r--r--date-fns/src/isThisISOWeek/index.js.flow52
-rw-r--r--date-fns/src/isThisISOWeek/index.ts36
-rw-r--r--date-fns/src/isThisISOWeek/test.ts36
-rw-r--r--date-fns/src/isThisMinute/benchmark.js20
-rw-r--r--date-fns/src/isThisMinute/index.d.ts4
-rw-r--r--date-fns/src/isThisMinute/index.js.flow52
-rw-r--r--date-fns/src/isThisMinute/index.ts35
-rw-r--r--date-fns/src/isThisMinute/test.ts39
-rw-r--r--date-fns/src/isThisMonth/benchmark.js20
-rw-r--r--date-fns/src/isThisMonth/index.d.ts4
-rw-r--r--date-fns/src/isThisMonth/index.js.flow52
-rw-r--r--date-fns/src/isThisMonth/index.ts34
-rw-r--r--date-fns/src/isThisMonth/test.ts37
-rw-r--r--date-fns/src/isThisQuarter/benchmark.js20
-rw-r--r--date-fns/src/isThisQuarter/index.d.ts4
-rw-r--r--date-fns/src/isThisQuarter/index.js.flow52
-rw-r--r--date-fns/src/isThisQuarter/index.ts33
-rw-r--r--date-fns/src/isThisQuarter/test.ts37
-rw-r--r--date-fns/src/isThisSecond/benchmark.js20
-rw-r--r--date-fns/src/isThisSecond/index.d.ts4
-rw-r--r--date-fns/src/isThisSecond/index.js.flow52
-rw-r--r--date-fns/src/isThisSecond/index.ts34
-rw-r--r--date-fns/src/isThisSecond/test.ts39
-rw-r--r--date-fns/src/isThisWeek/benchmark.js20
-rw-r--r--date-fns/src/isThisWeek/index.d.ts4
-rw-r--r--date-fns/src/isThisWeek/index.js.flow58
-rw-r--r--date-fns/src/isThisWeek/index.ts48
-rw-r--r--date-fns/src/isThisWeek/test.ts42
-rw-r--r--date-fns/src/isThisYear/benchmark.js19
-rw-r--r--date-fns/src/isThisYear/index.d.ts4
-rw-r--r--date-fns/src/isThisYear/index.js.flow52
-rw-r--r--date-fns/src/isThisYear/index.ts33
-rw-r--r--date-fns/src/isThisYear/test.ts37
-rw-r--r--date-fns/src/isThursday/benchmark.js15
-rw-r--r--date-fns/src/isThursday/index.d.ts4
-rw-r--r--date-fns/src/isThursday/index.js.flow52
-rw-r--r--date-fns/src/isThursday/index.ts29
-rw-r--r--date-fns/src/isThursday/test.ts31
-rw-r--r--date-fns/src/isToday/benchmark.js19
-rw-r--r--date-fns/src/isToday/index.d.ts4
-rw-r--r--date-fns/src/isToday/index.js.flow52
-rw-r--r--date-fns/src/isToday/index.ts33
-rw-r--r--date-fns/src/isToday/test.ts37
-rw-r--r--date-fns/src/isTomorrow/benchmark.js19
-rw-r--r--date-fns/src/isTomorrow/index.d.ts4
-rw-r--r--date-fns/src/isTomorrow/index.js.flow52
-rw-r--r--date-fns/src/isTomorrow/index.ts34
-rw-r--r--date-fns/src/isTomorrow/test.ts37
-rw-r--r--date-fns/src/isTuesday/benchmark.js15
-rw-r--r--date-fns/src/isTuesday/index.d.ts4
-rw-r--r--date-fns/src/isTuesday/index.js.flow52
-rw-r--r--date-fns/src/isTuesday/index.ts29
-rw-r--r--date-fns/src/isTuesday/test.ts31
-rw-r--r--date-fns/src/isValid/benchmark.js21
-rw-r--r--date-fns/src/isValid/index.d.ts4
-rw-r--r--date-fns/src/isValid/index.js66
-rw-r--r--date-fns/src/isValid/index.js.flow52
-rw-r--r--date-fns/src/isValid/test.js31
-rw-r--r--date-fns/src/isWednesday/benchmark.js15
-rw-r--r--date-fns/src/isWednesday/index.d.ts4
-rw-r--r--date-fns/src/isWednesday/index.js.flow52
-rw-r--r--date-fns/src/isWednesday/index.ts29
-rw-r--r--date-fns/src/isWednesday/test.ts31
-rw-r--r--date-fns/src/isWeekend/benchmark.js15
-rw-r--r--date-fns/src/isWeekend/index.d.ts4
-rw-r--r--date-fns/src/isWeekend/index.js.flow52
-rw-r--r--date-fns/src/isWeekend/index.ts31
-rw-r--r--date-fns/src/isWeekend/test.ts31
-rw-r--r--date-fns/src/isWithinInterval/benchmark.js25
-rw-r--r--date-fns/src/isWithinInterval/index.d.ts4
-rw-r--r--date-fns/src/isWithinInterval/index.js.flow52
-rw-r--r--date-fns/src/isWithinInterval/index.ts91
-rw-r--r--date-fns/src/isWithinInterval/test.ts104
-rw-r--r--date-fns/src/isYesterday/benchmark.js19
-rw-r--r--date-fns/src/isYesterday/index.d.ts4
-rw-r--r--date-fns/src/isYesterday/index.js.flow52
-rw-r--r--date-fns/src/isYesterday/index.ts34
-rw-r--r--date-fns/src/isYesterday/test.ts38
-rw-r--r--date-fns/src/lastDayOfDecade/benchmark.js15
-rw-r--r--date-fns/src/lastDayOfDecade/index.d.ts4
-rw-r--r--date-fns/src/lastDayOfDecade/index.js.flow52
-rw-r--r--date-fns/src/lastDayOfDecade/index.ts34
-rw-r--r--date-fns/src/lastDayOfDecade/test.ts34
-rw-r--r--date-fns/src/lastDayOfISOWeek/benchmark.js15
-rw-r--r--date-fns/src/lastDayOfISOWeek/index.d.ts4
-rw-r--r--date-fns/src/lastDayOfISOWeek/index.js.flow52
-rw-r--r--date-fns/src/lastDayOfISOWeek/index.ts32
-rw-r--r--date-fns/src/lastDayOfISOWeek/test.ts34
-rw-r--r--date-fns/src/lastDayOfISOWeekYear/benchmark.js15
-rw-r--r--date-fns/src/lastDayOfISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/lastDayOfISOWeekYear/index.js.flow52
-rw-r--r--date-fns/src/lastDayOfISOWeekYear/index.ts45
-rw-r--r--date-fns/src/lastDayOfISOWeekYear/test.ts45
-rw-r--r--date-fns/src/lastDayOfMonth/benchmark.js15
-rw-r--r--date-fns/src/lastDayOfMonth/index.d.ts4
-rw-r--r--date-fns/src/lastDayOfMonth/index.js.flow52
-rw-r--r--date-fns/src/lastDayOfMonth/index.ts34
-rw-r--r--date-fns/src/lastDayOfMonth/test.ts48
-rw-r--r--date-fns/src/lastDayOfQuarter/benchmark.js15
-rw-r--r--date-fns/src/lastDayOfQuarter/index.d.ts4
-rw-r--r--date-fns/src/lastDayOfQuarter/index.js.flow57
-rw-r--r--date-fns/src/lastDayOfQuarter/index.ts38
-rw-r--r--date-fns/src/lastDayOfQuarter/test.ts34
-rw-r--r--date-fns/src/lastDayOfWeek/benchmark.js15
-rw-r--r--date-fns/src/lastDayOfWeek/index.d.ts4
-rw-r--r--date-fns/src/lastDayOfWeek/index.js.flow58
-rw-r--r--date-fns/src/lastDayOfWeek/index.ts66
-rw-r--r--date-fns/src/lastDayOfWeek/test.ts111
-rw-r--r--date-fns/src/lastDayOfYear/benchmark.js15
-rw-r--r--date-fns/src/lastDayOfYear/index.d.ts4
-rw-r--r--date-fns/src/lastDayOfYear/index.js.flow52
-rw-r--r--date-fns/src/lastDayOfYear/index.ts34
-rw-r--r--date-fns/src/lastDayOfYear/test.ts34
-rw-r--r--date-fns/src/lightFormat/index.d.ts4
-rw-r--r--date-fns/src/lightFormat/index.js.flow52
-rw-r--r--date-fns/src/lightFormat/index.ts144
-rw-r--r--date-fns/src/lightFormat/test.ts158
-rw-r--r--date-fns/src/locale/_lib/buildFormatLongFn/index.js8
-rw-r--r--date-fns/src/locale/_lib/buildLocalizeFn/index.js23
-rw-r--r--date-fns/src/locale/_lib/buildMatchFn/index.js56
-rw-r--r--date-fns/src/locale/_lib/buildMatchPatternFn/index.js24
-rw-r--r--date-fns/src/locale/af/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/af/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/af/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/af/_lib/localize/index.js176
-rw-r--r--date-fns/src/locale/af/_lib/match/index.js136
-rw-r--r--date-fns/src/locale/af/index.d.ts4
-rw-r--r--date-fns/src/locale/af/index.js28
-rw-r--r--date-fns/src/locale/af/index.js.flow35
-rw-r--r--date-fns/src/locale/af/snapshot.md304
-rw-r--r--date-fns/src/locale/ar-DZ/_lib/formatDistance/index.js135
-rw-r--r--date-fns/src/locale/ar-DZ/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ar-DZ/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ar-DZ/_lib/localize/index.js163
-rw-r--r--date-fns/src/locale/ar-DZ/_lib/match/index.js147
-rw-r--r--date-fns/src/locale/ar-DZ/index.d.ts4
-rw-r--r--date-fns/src/locale/ar-DZ/index.js29
-rw-r--r--date-fns/src/locale/ar-DZ/index.js.flow35
-rw-r--r--date-fns/src/locale/ar-DZ/snapshot.md304
-rw-r--r--date-fns/src/locale/ar-MA/_lib/formatDistance/index.js135
-rw-r--r--date-fns/src/locale/ar-MA/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ar-MA/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ar-MA/_lib/localize/index.js163
-rw-r--r--date-fns/src/locale/ar-MA/_lib/match/index.js146
-rw-r--r--date-fns/src/locale/ar-MA/index.d.ts4
-rw-r--r--date-fns/src/locale/ar-MA/index.js29
-rw-r--r--date-fns/src/locale/ar-MA/index.js.flow35
-rw-r--r--date-fns/src/locale/ar-MA/snapshot.md304
-rw-r--r--date-fns/src/locale/ar-SA/_lib/formatDistance/index.js135
-rw-r--r--date-fns/src/locale/ar-SA/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ar-SA/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ar-SA/_lib/localize/index.js163
-rw-r--r--date-fns/src/locale/ar-SA/_lib/match/index.js146
-rw-r--r--date-fns/src/locale/ar-SA/index.d.ts4
-rw-r--r--date-fns/src/locale/ar-SA/index.js28
-rw-r--r--date-fns/src/locale/ar-SA/index.js.flow35
-rw-r--r--date-fns/src/locale/ar-SA/snapshot.md304
-rw-r--r--date-fns/src/locale/ar/_lib/formatDistance/index.js91
-rw-r--r--date-fns/src/locale/ar/_lib/formatLong/index.js12
-rw-r--r--date-fns/src/locale/ar/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ar/_lib/localize/index.js71
-rw-r--r--date-fns/src/locale/ar/_lib/match/index.js60
-rw-r--r--date-fns/src/locale/ar/index.d.ts4
-rw-r--r--date-fns/src/locale/ar/index.js32
-rw-r--r--date-fns/src/locale/ar/index.js.flow35
-rw-r--r--date-fns/src/locale/az/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/az/_lib/formatLong/index.js39
-rw-r--r--date-fns/src/locale/az/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/az/_lib/localize/index.js194
-rw-r--r--date-fns/src/locale/az/_lib/match/index.js166
-rw-r--r--date-fns/src/locale/az/index.d.ts4
-rw-r--r--date-fns/src/locale/az/index.js28
-rw-r--r--date-fns/src/locale/az/index.js.flow35
-rw-r--r--date-fns/src/locale/az/snapshot.md304
-rw-r--r--date-fns/src/locale/be/_lib/formatDistance/index.js257
-rw-r--r--date-fns/src/locale/be/_lib/formatLong/index.js38
-rw-r--r--date-fns/src/locale/be/_lib/formatRelative/index.js82
-rw-r--r--date-fns/src/locale/be/_lib/localize/index.js227
-rw-r--r--date-fns/src/locale/be/_lib/match/index.js138
-rw-r--r--date-fns/src/locale/be/index.d.ts4
-rw-r--r--date-fns/src/locale/be/index.js29
-rw-r--r--date-fns/src/locale/be/index.js.flow35
-rw-r--r--date-fns/src/locale/be/snapshot.md304
-rw-r--r--date-fns/src/locale/bg/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/bg/_lib/formatLong/index.js38
-rw-r--r--date-fns/src/locale/bg/_lib/formatRelative/index.js88
-rw-r--r--date-fns/src/locale/bg/_lib/localize/index.js155
-rw-r--r--date-fns/src/locale/bg/_lib/match/index.js123
-rw-r--r--date-fns/src/locale/bg/index.d.ts4
-rw-r--r--date-fns/src/locale/bg/index.js29
-rw-r--r--date-fns/src/locale/bg/index.js.flow35
-rw-r--r--date-fns/src/locale/bg/snapshot.md304
-rw-r--r--date-fns/src/locale/bn/_lib/formatDistance/index.js106
-rw-r--r--date-fns/src/locale/bn/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/bn/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/bn/_lib/localize/index.js265
-rw-r--r--date-fns/src/locale/bn/_lib/match/index.js144
-rw-r--r--date-fns/src/locale/bn/index.d.ts4
-rw-r--r--date-fns/src/locale/bn/index.js29
-rw-r--r--date-fns/src/locale/bn/index.js.flow35
-rw-r--r--date-fns/src/locale/bn/snapshot.md304
-rw-r--r--date-fns/src/locale/ca/_lib/formatDistance/index.js116
-rw-r--r--date-fns/src/locale/ca/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ca/_lib/formatRelative/index.js24
-rw-r--r--date-fns/src/locale/ca/_lib/localize/index.js236
-rw-r--r--date-fns/src/locale/ca/_lib/match/index.js163
-rw-r--r--date-fns/src/locale/ca/index.d.ts4
-rw-r--r--date-fns/src/locale/ca/index.js31
-rw-r--r--date-fns/src/locale/ca/index.js.flow35
-rw-r--r--date-fns/src/locale/ca/snapshot.md304
-rw-r--r--date-fns/src/locale/cs/_lib/formatDistance/index.js318
-rw-r--r--date-fns/src/locale/cs/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/cs/_lib/formatRelative/index.js31
-rw-r--r--date-fns/src/locale/cs/_lib/localize/index.js192
-rw-r--r--date-fns/src/locale/cs/_lib/match/index.js139
-rw-r--r--date-fns/src/locale/cs/index.d.ts4
-rw-r--r--date-fns/src/locale/cs/index.js30
-rw-r--r--date-fns/src/locale/cs/index.js.flow35
-rw-r--r--date-fns/src/locale/cs/snapshot.md304
-rw-r--r--date-fns/src/locale/cy/_lib/formatDistance/index.js114
-rw-r--r--date-fns/src/locale/cy/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/cy/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/cy/_lib/localize/index.js204
-rw-r--r--date-fns/src/locale/cy/_lib/match/index.js147
-rw-r--r--date-fns/src/locale/cy/index.d.ts4
-rw-r--r--date-fns/src/locale/cy/index.js28
-rw-r--r--date-fns/src/locale/cy/index.js.flow35
-rw-r--r--date-fns/src/locale/cy/snapshot.md304
-rw-r--r--date-fns/src/locale/da/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/da/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/da/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/da/_lib/localize/index.js162
-rw-r--r--date-fns/src/locale/da/_lib/match/index.js136
-rw-r--r--date-fns/src/locale/da/index.d.ts4
-rw-r--r--date-fns/src/locale/da/index.js31
-rw-r--r--date-fns/src/locale/da/index.js.flow35
-rw-r--r--date-fns/src/locale/da/snapshot.md304
-rw-r--r--date-fns/src/locale/de-AT/_lib/localize/index.js172
-rw-r--r--date-fns/src/locale/de-AT/index.d.ts4
-rw-r--r--date-fns/src/locale/de-AT/index.js29
-rw-r--r--date-fns/src/locale/de-AT/index.js.flow35
-rw-r--r--date-fns/src/locale/de-AT/snapshot.md304
-rw-r--r--date-fns/src/locale/de/_lib/formatDistance/index.js198
-rw-r--r--date-fns/src/locale/de/_lib/formatLong/index.js42
-rw-r--r--date-fns/src/locale/de/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/de/_lib/localize/index.js172
-rw-r--r--date-fns/src/locale/de/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/de/index.d.ts4
-rw-r--r--date-fns/src/locale/de/index.js32
-rw-r--r--date-fns/src/locale/de/index.js.flow35
-rw-r--r--date-fns/src/locale/de/snapshot.md304
-rw-r--r--date-fns/src/locale/el/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/el/_lib/formatLong/index.js39
-rw-r--r--date-fns/src/locale/el/_lib/formatRelative/index.js23
-rw-r--r--date-fns/src/locale/el/_lib/localize/index.js178
-rw-r--r--date-fns/src/locale/el/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/el/index.d.ts4
-rw-r--r--date-fns/src/locale/el/index.js29
-rw-r--r--date-fns/src/locale/el/index.js.flow35
-rw-r--r--date-fns/src/locale/el/snapshot.md304
-rw-r--r--date-fns/src/locale/en-AU/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/en-AU/index.d.ts4
-rw-r--r--date-fns/src/locale/en-AU/index.js28
-rw-r--r--date-fns/src/locale/en-AU/index.js.flow35
-rw-r--r--date-fns/src/locale/en-AU/snapshot.md304
-rw-r--r--date-fns/src/locale/en-CA/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/en-CA/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/en-CA/index.d.ts4
-rw-r--r--date-fns/src/locale/en-CA/index.js29
-rw-r--r--date-fns/src/locale/en-CA/index.js.flow35
-rw-r--r--date-fns/src/locale/en-CA/snapshot.md304
-rw-r--r--date-fns/src/locale/en-GB/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/en-GB/index.d.ts4
-rw-r--r--date-fns/src/locale/en-GB/index.js28
-rw-r--r--date-fns/src/locale/en-GB/index.js.flow35
-rw-r--r--date-fns/src/locale/en-GB/snapshot.md304
-rw-r--r--date-fns/src/locale/en-IN/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/en-IN/index.d.ts4
-rw-r--r--date-fns/src/locale/en-IN/index.js28
-rw-r--r--date-fns/src/locale/en-IN/index.js.flow35
-rw-r--r--date-fns/src/locale/en-IN/snapshot.md304
-rw-r--r--date-fns/src/locale/en-NZ/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/en-NZ/index.d.ts4
-rw-r--r--date-fns/src/locale/en-NZ/index.js28
-rw-r--r--date-fns/src/locale/en-NZ/index.js.flow35
-rw-r--r--date-fns/src/locale/en-NZ/snapshot.md304
-rw-r--r--date-fns/src/locale/en-US/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/en-US/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/en-US/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/en-US/_lib/localize/index.js192
-rw-r--r--date-fns/src/locale/en-US/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/en-US/index.d.ts4
-rw-r--r--date-fns/src/locale/en-US/index.js29
-rw-r--r--date-fns/src/locale/en-US/index.js.flow35
-rw-r--r--date-fns/src/locale/en-US/snapshot.md304
-rw-r--r--date-fns/src/locale/en-ZA/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/en-ZA/index.d.ts4
-rw-r--r--date-fns/src/locale/en-ZA/index.js28
-rw-r--r--date-fns/src/locale/en-ZA/index.js.flow35
-rw-r--r--date-fns/src/locale/en-ZA/snapshot.md304
-rw-r--r--date-fns/src/locale/eo/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/eo/_lib/formatLong/index.js38
-rw-r--r--date-fns/src/locale/eo/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/eo/_lib/localize/index.js124
-rw-r--r--date-fns/src/locale/eo/_lib/match/index.js138
-rw-r--r--date-fns/src/locale/eo/index.d.ts4
-rw-r--r--date-fns/src/locale/eo/index.js28
-rw-r--r--date-fns/src/locale/eo/index.js.flow35
-rw-r--r--date-fns/src/locale/eo/snapshot.md304
-rw-r--r--date-fns/src/locale/es/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/es/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/es/_lib/formatRelative/index.js24
-rw-r--r--date-fns/src/locale/es/_lib/localize/index.js166
-rw-r--r--date-fns/src/locale/es/_lib/match/index.js141
-rw-r--r--date-fns/src/locale/es/index.d.ts4
-rw-r--r--date-fns/src/locale/es/index.js32
-rw-r--r--date-fns/src/locale/es/index.js.flow35
-rw-r--r--date-fns/src/locale/es/snapshot.md304
-rw-r--r--date-fns/src/locale/et/_lib/formatDistance/index.js198
-rw-r--r--date-fns/src/locale/et/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/et/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/et/_lib/localize/index.js176
-rw-r--r--date-fns/src/locale/et/_lib/match/index.js139
-rw-r--r--date-fns/src/locale/et/index.d.ts4
-rw-r--r--date-fns/src/locale/et/index.js28
-rw-r--r--date-fns/src/locale/et/index.js.flow35
-rw-r--r--date-fns/src/locale/et/snapshot.md304
-rw-r--r--date-fns/src/locale/eu/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/eu/_lib/formatLong/index.js40
-rw-r--r--date-fns/src/locale/eu/_lib/formatRelative/index.js24
-rw-r--r--date-fns/src/locale/eu/_lib/localize/index.js167
-rw-r--r--date-fns/src/locale/eu/_lib/match/index.js159
-rw-r--r--date-fns/src/locale/eu/index.d.ts4
-rw-r--r--date-fns/src/locale/eu/index.js28
-rw-r--r--date-fns/src/locale/eu/index.js.flow35
-rw-r--r--date-fns/src/locale/eu/snapshot.md304
-rw-r--r--date-fns/src/locale/fa-IR/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/fa-IR/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/fa-IR/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/fa-IR/_lib/localize/index.js169
-rw-r--r--date-fns/src/locale/fa-IR/_lib/match/index.js146
-rw-r--r--date-fns/src/locale/fa-IR/index.d.ts4
-rw-r--r--date-fns/src/locale/fa-IR/index.js28
-rw-r--r--date-fns/src/locale/fa-IR/index.js.flow35
-rw-r--r--date-fns/src/locale/fa-IR/snapshot.md304
-rw-r--r--date-fns/src/locale/fi/_lib/formatDistance/index.js145
-rw-r--r--date-fns/src/locale/fi/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/fi/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/fi/_lib/localize/index.js147
-rw-r--r--date-fns/src/locale/fi/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/fi/index.d.ts4
-rw-r--r--date-fns/src/locale/fi/index.js30
-rw-r--r--date-fns/src/locale/fi/index.js.flow35
-rw-r--r--date-fns/src/locale/fi/snapshot.md304
-rw-r--r--date-fns/src/locale/fil/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/fil/_lib/formatLong/index.js12
-rw-r--r--date-fns/src/locale/fil/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/fil/_lib/localize/index.js83
-rw-r--r--date-fns/src/locale/fil/_lib/match/index.js60
-rw-r--r--date-fns/src/locale/fil/index.d.ts4
-rw-r--r--date-fns/src/locale/fil/index.js32
-rw-r--r--date-fns/src/locale/fil/index.js.flow35
-rw-r--r--date-fns/src/locale/fr-CA/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/fr-CA/index.d.ts4
-rw-r--r--date-fns/src/locale/fr-CA/index.js35
-rw-r--r--date-fns/src/locale/fr-CA/index.js.flow35
-rw-r--r--date-fns/src/locale/fr-CA/snapshot.md304
-rw-r--r--date-fns/src/locale/fr-CH/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/fr-CH/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/fr-CH/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/fr-CH/_lib/formatters/index.js17
-rw-r--r--date-fns/src/locale/fr-CH/_lib/localize/index.js155
-rw-r--r--date-fns/src/locale/fr-CH/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/fr-CH/index.d.ts4
-rw-r--r--date-fns/src/locale/fr-CH/index.js32
-rw-r--r--date-fns/src/locale/fr-CH/index.js.flow35
-rw-r--r--date-fns/src/locale/fr-CH/snapshot.md304
-rw-r--r--date-fns/src/locale/fr/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/fr/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/fr/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/fr/_lib/formatters/index.js17
-rw-r--r--date-fns/src/locale/fr/_lib/localize/index.js155
-rw-r--r--date-fns/src/locale/fr/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/fr/index.d.ts4
-rw-r--r--date-fns/src/locale/fr/index.js30
-rw-r--r--date-fns/src/locale/fr/index.js.flow35
-rw-r--r--date-fns/src/locale/fr/snapshot.md304
-rw-r--r--date-fns/src/locale/gd/_lib/formatDistance/index.js115
-rw-r--r--date-fns/src/locale/gd/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/gd/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/gd/_lib/localize/index.js200
-rw-r--r--date-fns/src/locale/gd/_lib/match/index.js138
-rw-r--r--date-fns/src/locale/gd/index.d.ts4
-rw-r--r--date-fns/src/locale/gd/index.js28
-rw-r--r--date-fns/src/locale/gd/index.js.flow35
-rw-r--r--date-fns/src/locale/gd/snapshot.md304
-rw-r--r--date-fns/src/locale/gl/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/gl/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/gl/_lib/formatRelative/index.js24
-rw-r--r--date-fns/src/locale/gl/_lib/localize/index.js158
-rw-r--r--date-fns/src/locale/gl/_lib/match/index.js141
-rw-r--r--date-fns/src/locale/gl/index.d.ts4
-rw-r--r--date-fns/src/locale/gl/index.js29
-rw-r--r--date-fns/src/locale/gl/index.js.flow35
-rw-r--r--date-fns/src/locale/gl/snapshot.md304
-rw-r--r--date-fns/src/locale/gu/_lib/formatDistance/index.js102
-rw-r--r--date-fns/src/locale/gu/_lib/formatLong/index.js42
-rw-r--r--date-fns/src/locale/gu/_lib/formatRelative/index.js14
-rw-r--r--date-fns/src/locale/gu/_lib/localize/index.js181
-rw-r--r--date-fns/src/locale/gu/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/gu/index.d.ts4
-rw-r--r--date-fns/src/locale/gu/index.js28
-rw-r--r--date-fns/src/locale/gu/index.js.flow35
-rw-r--r--date-fns/src/locale/gu/snapshot.md304
-rw-r--r--date-fns/src/locale/he/_lib/formatDistance/index.js131
-rw-r--r--date-fns/src/locale/he/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/he/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/he/_lib/localize/index.js209
-rw-r--r--date-fns/src/locale/he/_lib/match/index.js140
-rw-r--r--date-fns/src/locale/he/index.d.ts4
-rw-r--r--date-fns/src/locale/he/index.js28
-rw-r--r--date-fns/src/locale/he/index.js.flow35
-rw-r--r--date-fns/src/locale/he/snapshot.md304
-rw-r--r--date-fns/src/locale/hi/_lib/formatDistance/index.js106
-rw-r--r--date-fns/src/locale/hi/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/hi/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/hi/_lib/localize/index.js244
-rw-r--r--date-fns/src/locale/hi/_lib/match/index.js136
-rw-r--r--date-fns/src/locale/hi/index.d.ts4
-rw-r--r--date-fns/src/locale/hi/index.js28
-rw-r--r--date-fns/src/locale/hi/index.js.flow35
-rw-r--r--date-fns/src/locale/hi/snapshot.md304
-rw-r--r--date-fns/src/locale/hr/_lib/formatDistance/index.js191
-rw-r--r--date-fns/src/locale/hr/_lib/formatLong/index.js39
-rw-r--r--date-fns/src/locale/hr/_lib/formatRelative/index.js44
-rw-r--r--date-fns/src/locale/hr/_lib/localize/index.js222
-rw-r--r--date-fns/src/locale/hr/_lib/match/index.js132
-rw-r--r--date-fns/src/locale/hr/index.d.ts4
-rw-r--r--date-fns/src/locale/hr/index.js30
-rw-r--r--date-fns/src/locale/hr/index.js.flow35
-rw-r--r--date-fns/src/locale/hr/snapshot.md304
-rw-r--r--date-fns/src/locale/ht/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/ht/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ht/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ht/_lib/formatters/index.js19
-rw-r--r--date-fns/src/locale/ht/_lib/localize/index.js147
-rw-r--r--date-fns/src/locale/ht/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/ht/index.d.ts4
-rw-r--r--date-fns/src/locale/ht/index.js30
-rw-r--r--date-fns/src/locale/ht/index.js.flow35
-rw-r--r--date-fns/src/locale/ht/snapshot.md304
-rw-r--r--date-fns/src/locale/hu/_lib/formatDistance/index.js92
-rw-r--r--date-fns/src/locale/hu/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/hu/_lib/formatRelative/index.js40
-rw-r--r--date-fns/src/locale/hu/_lib/localize/index.js140
-rw-r--r--date-fns/src/locale/hu/_lib/match/index.js138
-rw-r--r--date-fns/src/locale/hu/index.d.ts4
-rw-r--r--date-fns/src/locale/hu/index.js33
-rw-r--r--date-fns/src/locale/hu/index.js.flow35
-rw-r--r--date-fns/src/locale/hu/snapshot.md304
-rw-r--r--date-fns/src/locale/hy/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/hy/_lib/formatLong/index.js36
-rw-r--r--date-fns/src/locale/hy/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/hy/_lib/localize/index.js179
-rw-r--r--date-fns/src/locale/hy/_lib/match/index.js139
-rw-r--r--date-fns/src/locale/hy/index.d.ts4
-rw-r--r--date-fns/src/locale/hy/index.js29
-rw-r--r--date-fns/src/locale/hy/index.js.flow35
-rw-r--r--date-fns/src/locale/hy/snapshot.md304
-rw-r--r--date-fns/src/locale/id/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/id/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/id/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/id/_lib/localize/index.js169
-rw-r--r--date-fns/src/locale/id/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/id/index.d.ts4
-rw-r--r--date-fns/src/locale/id/index.js31
-rw-r--r--date-fns/src/locale/id/index.js.flow35
-rw-r--r--date-fns/src/locale/id/snapshot.md304
-rw-r--r--date-fns/src/locale/index.js82
-rw-r--r--date-fns/src/locale/index.js.flow118
-rw-r--r--date-fns/src/locale/is/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/is/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/is/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/is/_lib/localize/index.js167
-rw-r--r--date-fns/src/locale/is/_lib/match/index.js141
-rw-r--r--date-fns/src/locale/is/index.d.ts4
-rw-r--r--date-fns/src/locale/is/index.js29
-rw-r--r--date-fns/src/locale/is/index.js.flow35
-rw-r--r--date-fns/src/locale/is/snapshot.md304
-rw-r--r--date-fns/src/locale/it/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/it/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/it/_lib/formatRelative/index.js66
-rw-r--r--date-fns/src/locale/it/_lib/localize/index.js166
-rw-r--r--date-fns/src/locale/it/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/it/index.d.ts4
-rw-r--r--date-fns/src/locale/it/index.js30
-rw-r--r--date-fns/src/locale/it/index.js.flow35
-rw-r--r--date-fns/src/locale/it/snapshot.md304
-rw-r--r--date-fns/src/locale/ja/_lib/formatDistance/index.js116
-rw-r--r--date-fns/src/locale/ja/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ja/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ja/_lib/localize/index.js180
-rw-r--r--date-fns/src/locale/ja/_lib/match/index.js122
-rw-r--r--date-fns/src/locale/ja/index.d.ts4
-rw-r--r--date-fns/src/locale/ja/index.js32
-rw-r--r--date-fns/src/locale/ja/index.js.flow35
-rw-r--r--date-fns/src/locale/ja/snapshot.md304
-rw-r--r--date-fns/src/locale/ka/_lib/formatDistance/index.js114
-rw-r--r--date-fns/src/locale/ka/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ka/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ka/_lib/localize/index.js198
-rw-r--r--date-fns/src/locale/ka/_lib/match/index.js121
-rw-r--r--date-fns/src/locale/ka/index.d.ts4
-rw-r--r--date-fns/src/locale/ka/index.js29
-rw-r--r--date-fns/src/locale/ka/index.js.flow35
-rw-r--r--date-fns/src/locale/ka/snapshot.md304
-rw-r--r--date-fns/src/locale/kk/_lib/formatDistance/index.js246
-rw-r--r--date-fns/src/locale/kk/_lib/formatLong/index.js38
-rw-r--r--date-fns/src/locale/kk/_lib/formatRelative/index.js62
-rw-r--r--date-fns/src/locale/kk/_lib/localize/index.js203
-rw-r--r--date-fns/src/locale/kk/_lib/match/index.js160
-rw-r--r--date-fns/src/locale/kk/index.d.ts4
-rw-r--r--date-fns/src/locale/kk/index.js28
-rw-r--r--date-fns/src/locale/kk/index.js.flow35
-rw-r--r--date-fns/src/locale/kk/snapshot.md304
-rw-r--r--date-fns/src/locale/kn/_lib/formatDistance/index.js203
-rw-r--r--date-fns/src/locale/kn/_lib/formatLong/index.js42
-rw-r--r--date-fns/src/locale/kn/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/kn/_lib/localize/index.js171
-rw-r--r--date-fns/src/locale/kn/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/kn/index.d.ts4
-rw-r--r--date-fns/src/locale/kn/index.js28
-rw-r--r--date-fns/src/locale/kn/index.js.flow35
-rw-r--r--date-fns/src/locale/kn/snapshot.md304
-rw-r--r--date-fns/src/locale/ko/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/ko/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ko/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ko/_lib/localize/index.js171
-rw-r--r--date-fns/src/locale/ko/_lib/match/index.js126
-rw-r--r--date-fns/src/locale/ko/index.d.ts4
-rw-r--r--date-fns/src/locale/ko/index.js30
-rw-r--r--date-fns/src/locale/ko/index.js.flow35
-rw-r--r--date-fns/src/locale/ko/snapshot.md304
-rw-r--r--date-fns/src/locale/lb/_lib/formatDistance/index.js231
-rw-r--r--date-fns/src/locale/lb/_lib/formatLong/index.js42
-rw-r--r--date-fns/src/locale/lb/_lib/formatRelative/index.js27
-rw-r--r--date-fns/src/locale/lb/_lib/localize/index.js167
-rw-r--r--date-fns/src/locale/lb/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/lb/index.d.ts4
-rw-r--r--date-fns/src/locale/lb/index.js28
-rw-r--r--date-fns/src/locale/lb/index.js.flow35
-rw-r--r--date-fns/src/locale/lb/snapshot.md304
-rw-r--r--date-fns/src/locale/lt/_lib/formatDistance/index.js165
-rw-r--r--date-fns/src/locale/lt/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/lt/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/lt/_lib/localize/index.js225
-rw-r--r--date-fns/src/locale/lt/_lib/match/index.js150
-rw-r--r--date-fns/src/locale/lt/index.d.ts4
-rw-r--r--date-fns/src/locale/lt/index.js32
-rw-r--r--date-fns/src/locale/lt/index.js.flow35
-rw-r--r--date-fns/src/locale/lt/snapshot.md304
-rw-r--r--date-fns/src/locale/lv/_lib/formatDistance/index.js158
-rw-r--r--date-fns/src/locale/lv/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/lv/_lib/formatRelative/index.js43
-rw-r--r--date-fns/src/locale/lv/_lib/localize/index.js250
-rw-r--r--date-fns/src/locale/lv/_lib/match/index.js140
-rw-r--r--date-fns/src/locale/lv/index.d.ts4
-rw-r--r--date-fns/src/locale/lv/index.js28
-rw-r--r--date-fns/src/locale/lv/index.js.flow35
-rw-r--r--date-fns/src/locale/lv/snapshot.md304
-rw-r--r--date-fns/src/locale/mk/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/mk/_lib/formatLong/index.js38
-rw-r--r--date-fns/src/locale/mk/_lib/formatRelative/index.js92
-rw-r--r--date-fns/src/locale/mk/_lib/localize/index.js124
-rw-r--r--date-fns/src/locale/mk/_lib/match/index.js124
-rw-r--r--date-fns/src/locale/mk/index.d.ts4
-rw-r--r--date-fns/src/locale/mk/index.js29
-rw-r--r--date-fns/src/locale/mk/index.js.flow35
-rw-r--r--date-fns/src/locale/mk/snapshot.md304
-rw-r--r--date-fns/src/locale/mn/_lib/formatDistance/index.js138
-rw-r--r--date-fns/src/locale/mn/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/mn/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/mn/_lib/localize/index.js208
-rw-r--r--date-fns/src/locale/mn/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/mn/index.d.ts4
-rw-r--r--date-fns/src/locale/mn/index.js28
-rw-r--r--date-fns/src/locale/mn/index.js.flow35
-rw-r--r--date-fns/src/locale/mn/snapshot.md304
-rw-r--r--date-fns/src/locale/ms/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/ms/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ms/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ms/_lib/localize/index.js169
-rw-r--r--date-fns/src/locale/ms/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/ms/index.d.ts4
-rw-r--r--date-fns/src/locale/ms/index.js28
-rw-r--r--date-fns/src/locale/ms/index.js.flow35
-rw-r--r--date-fns/src/locale/ms/snapshot.md304
-rw-r--r--date-fns/src/locale/mt/_lib/formatDistance/index.js108
-rw-r--r--date-fns/src/locale/mt/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/mt/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/mt/_lib/localize/index.js167
-rw-r--r--date-fns/src/locale/mt/_lib/match/index.js145
-rw-r--r--date-fns/src/locale/mt/index.d.ts4
-rw-r--r--date-fns/src/locale/mt/index.js29
-rw-r--r--date-fns/src/locale/mt/index.js.flow35
-rw-r--r--date-fns/src/locale/mt/snapshot.md304
-rw-r--r--date-fns/src/locale/nb/_lib/formatDistance/index.js127
-rw-r--r--date-fns/src/locale/nb/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/nb/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/nb/_lib/localize/index.js124
-rw-r--r--date-fns/src/locale/nb/_lib/match/index.js136
-rw-r--r--date-fns/src/locale/nb/index.d.ts4
-rw-r--r--date-fns/src/locale/nb/index.js30
-rw-r--r--date-fns/src/locale/nb/index.js.flow35
-rw-r--r--date-fns/src/locale/nb/snapshot.md304
-rw-r--r--date-fns/src/locale/nl-BE/_lib/formatDistance/index.js86
-rw-r--r--date-fns/src/locale/nl-BE/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/nl-BE/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/nl-BE/_lib/localize/index.js132
-rw-r--r--date-fns/src/locale/nl-BE/_lib/match/index.js136
-rw-r--r--date-fns/src/locale/nl-BE/index.d.ts4
-rw-r--r--date-fns/src/locale/nl-BE/index.js31
-rw-r--r--date-fns/src/locale/nl-BE/index.js.flow35
-rw-r--r--date-fns/src/locale/nl-BE/snapshot.md304
-rw-r--r--date-fns/src/locale/nl/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/nl/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/nl/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/nl/_lib/localize/index.js132
-rw-r--r--date-fns/src/locale/nl/_lib/match/index.js136
-rw-r--r--date-fns/src/locale/nl/index.d.ts4
-rw-r--r--date-fns/src/locale/nl/index.js33
-rw-r--r--date-fns/src/locale/nl/index.js.flow35
-rw-r--r--date-fns/src/locale/nl/snapshot.md304
-rw-r--r--date-fns/src/locale/nn/_lib/formatDistance/index.js127
-rw-r--r--date-fns/src/locale/nn/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/nn/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/nn/_lib/localize/index.js124
-rw-r--r--date-fns/src/locale/nn/_lib/match/index.js136
-rw-r--r--date-fns/src/locale/nn/index.d.ts4
-rw-r--r--date-fns/src/locale/nn/index.js28
-rw-r--r--date-fns/src/locale/nn/index.js.flow35
-rw-r--r--date-fns/src/locale/nn/snapshot.md304
-rw-r--r--date-fns/src/locale/pl/_lib/formatDistance/index.js169
-rw-r--r--date-fns/src/locale/pl/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/pl/_lib/formatRelative/index.js69
-rw-r--r--date-fns/src/locale/pl/_lib/localize/index.js215
-rw-r--r--date-fns/src/locale/pl/_lib/match/index.js149
-rw-r--r--date-fns/src/locale/pl/index.d.ts4
-rw-r--r--date-fns/src/locale/pl/index.js31
-rw-r--r--date-fns/src/locale/pl/index.js.flow35
-rw-r--r--date-fns/src/locale/pl/snapshot.md304
-rw-r--r--date-fns/src/locale/pt-BR/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/pt-BR/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/pt-BR/_lib/formatRelative/index.js22
-rw-r--r--date-fns/src/locale/pt-BR/_lib/localize/index.js164
-rw-r--r--date-fns/src/locale/pt-BR/_lib/match/index.js139
-rw-r--r--date-fns/src/locale/pt-BR/index.d.ts4
-rw-r--r--date-fns/src/locale/pt-BR/index.js29
-rw-r--r--date-fns/src/locale/pt-BR/index.js.flow35
-rw-r--r--date-fns/src/locale/pt-BR/snapshot.md304
-rw-r--r--date-fns/src/locale/pt/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/pt/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/pt/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/pt/_lib/localize/index.js166
-rw-r--r--date-fns/src/locale/pt/_lib/match/index.js141
-rw-r--r--date-fns/src/locale/pt/index.d.ts4
-rw-r--r--date-fns/src/locale/pt/index.js29
-rw-r--r--date-fns/src/locale/pt/index.js.flow35
-rw-r--r--date-fns/src/locale/pt/snapshot.md304
-rw-r--r--date-fns/src/locale/ro/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/ro/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ro/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ro/_lib/localize/index.js164
-rw-r--r--date-fns/src/locale/ro/_lib/match/index.js146
-rw-r--r--date-fns/src/locale/ro/index.d.ts4
-rw-r--r--date-fns/src/locale/ro/index.js30
-rw-r--r--date-fns/src/locale/ro/index.js.flow35
-rw-r--r--date-fns/src/locale/ro/snapshot.md304
-rw-r--r--date-fns/src/locale/ru/_lib/formatDistance/index.js247
-rw-r--r--date-fns/src/locale/ru/_lib/formatLong/index.js38
-rw-r--r--date-fns/src/locale/ru/_lib/formatRelative/index.js88
-rw-r--r--date-fns/src/locale/ru/_lib/localize/index.js210
-rw-r--r--date-fns/src/locale/ru/_lib/match/index.js138
-rw-r--r--date-fns/src/locale/ru/index.d.ts4
-rw-r--r--date-fns/src/locale/ru/index.js29
-rw-r--r--date-fns/src/locale/ru/index.js.flow35
-rw-r--r--date-fns/src/locale/ru/snapshot.md304
-rw-r--r--date-fns/src/locale/sk/_lib/formatDistance/index.js231
-rw-r--r--date-fns/src/locale/sk/_lib/formatLong/index.js44
-rw-r--r--date-fns/src/locale/sk/_lib/formatRelative/index.js81
-rw-r--r--date-fns/src/locale/sk/_lib/localize/index.js204
-rw-r--r--date-fns/src/locale/sk/_lib/match/index.js138
-rw-r--r--date-fns/src/locale/sk/index.d.ts4
-rw-r--r--date-fns/src/locale/sk/index.js28
-rw-r--r--date-fns/src/locale/sk/index.js.flow35
-rw-r--r--date-fns/src/locale/sk/snapshot.md304
-rw-r--r--date-fns/src/locale/sl/_lib/formatDistance/index.js338
-rw-r--r--date-fns/src/locale/sl/_lib/formatLong/index.js39
-rw-r--r--date-fns/src/locale/sl/_lib/formatRelative/index.js44
-rw-r--r--date-fns/src/locale/sl/_lib/localize/index.js162
-rw-r--r--date-fns/src/locale/sl/_lib/match/index.js155
-rw-r--r--date-fns/src/locale/sl/index.d.ts4
-rw-r--r--date-fns/src/locale/sl/index.js29
-rw-r--r--date-fns/src/locale/sl/index.js.flow35
-rw-r--r--date-fns/src/locale/sl/snapshot.md304
-rw-r--r--date-fns/src/locale/sq/_lib/formatDistance/index.js86
-rw-r--r--date-fns/src/locale/sq/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/sq/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/sq/_lib/localize/index.js181
-rw-r--r--date-fns/src/locale/sq/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/sq/index.d.ts4
-rw-r--r--date-fns/src/locale/sq/index.js28
-rw-r--r--date-fns/src/locale/sq/index.js.flow35
-rw-r--r--date-fns/src/locale/sq/snapshot.md304
-rw-r--r--date-fns/src/locale/sr-Latn/_lib/formatDistance/index.js191
-rw-r--r--date-fns/src/locale/sr-Latn/_lib/formatLong/index.js39
-rw-r--r--date-fns/src/locale/sr-Latn/_lib/formatRelative/index.js44
-rw-r--r--date-fns/src/locale/sr-Latn/_lib/localize/index.js222
-rw-r--r--date-fns/src/locale/sr-Latn/_lib/match/index.js118
-rw-r--r--date-fns/src/locale/sr-Latn/index.d.ts4
-rw-r--r--date-fns/src/locale/sr-Latn/index.js28
-rw-r--r--date-fns/src/locale/sr-Latn/index.js.flow35
-rw-r--r--date-fns/src/locale/sr-Latn/snapshot.md304
-rw-r--r--date-fns/src/locale/sr/_lib/formatDistance/index.js191
-rw-r--r--date-fns/src/locale/sr/_lib/formatLong/index.js39
-rw-r--r--date-fns/src/locale/sr/_lib/formatRelative/index.js44
-rw-r--r--date-fns/src/locale/sr/_lib/localize/index.js222
-rw-r--r--date-fns/src/locale/sr/_lib/match/index.js118
-rw-r--r--date-fns/src/locale/sr/index.d.ts4
-rw-r--r--date-fns/src/locale/sr/index.js28
-rw-r--r--date-fns/src/locale/sr/index.js.flow35
-rw-r--r--date-fns/src/locale/sr/snapshot.md304
-rw-r--r--date-fns/src/locale/sv/_lib/formatDistance/index.js127
-rw-r--r--date-fns/src/locale/sv/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/sv/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/sv/_lib/localize/index.js168
-rw-r--r--date-fns/src/locale/sv/_lib/match/index.js135
-rw-r--r--date-fns/src/locale/sv/index.d.ts4
-rw-r--r--date-fns/src/locale/sv/index.js30
-rw-r--r--date-fns/src/locale/sv/index.js.flow35
-rw-r--r--date-fns/src/locale/sv/snapshot.md304
-rw-r--r--date-fns/src/locale/ta/_lib/formatDistance/index.js236
-rw-r--r--date-fns/src/locale/ta/_lib/formatLong/index.js45
-rw-r--r--date-fns/src/locale/ta/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ta/_lib/localize/index.js209
-rw-r--r--date-fns/src/locale/ta/_lib/match/index.js148
-rw-r--r--date-fns/src/locale/ta/index.d.ts4
-rw-r--r--date-fns/src/locale/ta/index.js28
-rw-r--r--date-fns/src/locale/ta/index.js.flow35
-rw-r--r--date-fns/src/locale/ta/snapshot.md304
-rw-r--r--date-fns/src/locale/te/_lib/formatDistance/index.js199
-rw-r--r--date-fns/src/locale/te/_lib/formatLong/index.js45
-rw-r--r--date-fns/src/locale/te/_lib/formatRelative/index.js14
-rw-r--r--date-fns/src/locale/te/_lib/localize/index.js173
-rw-r--r--date-fns/src/locale/te/_lib/match/index.js140
-rw-r--r--date-fns/src/locale/te/index.d.ts4
-rw-r--r--date-fns/src/locale/te/index.js28
-rw-r--r--date-fns/src/locale/te/index.js.flow35
-rw-r--r--date-fns/src/locale/te/snapshot.md304
-rw-r--r--date-fns/src/locale/th/_lib/formatDistance/index.js105
-rw-r--r--date-fns/src/locale/th/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/th/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/th/_lib/localize/index.js172
-rw-r--r--date-fns/src/locale/th/_lib/match/index.js136
-rw-r--r--date-fns/src/locale/th/index.d.ts4
-rw-r--r--date-fns/src/locale/th/index.js30
-rw-r--r--date-fns/src/locale/th/index.js.flow35
-rw-r--r--date-fns/src/locale/th/snapshot.md304
-rw-r--r--date-fns/src/locale/tr/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/tr/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/tr/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/tr/_lib/localize/index.js167
-rw-r--r--date-fns/src/locale/tr/_lib/match/index.js153
-rw-r--r--date-fns/src/locale/tr/index.d.ts4
-rw-r--r--date-fns/src/locale/tr/index.js33
-rw-r--r--date-fns/src/locale/tr/index.js.flow35
-rw-r--r--date-fns/src/locale/tr/snapshot.md304
-rw-r--r--date-fns/src/locale/types.ts105
-rw-r--r--date-fns/src/locale/ug/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/ug/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/ug/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/ug/_lib/localize/index.js177
-rw-r--r--date-fns/src/locale/ug/_lib/match/index.js136
-rw-r--r--date-fns/src/locale/ug/index.d.ts4
-rw-r--r--date-fns/src/locale/ug/index.js28
-rw-r--r--date-fns/src/locale/ug/index.js.flow35
-rw-r--r--date-fns/src/locale/ug/snapshot.md304
-rw-r--r--date-fns/src/locale/uk/_lib/formatDistance/index.js247
-rw-r--r--date-fns/src/locale/uk/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/uk/_lib/formatRelative/index.js82
-rw-r--r--date-fns/src/locale/uk/_lib/localize/index.js217
-rw-r--r--date-fns/src/locale/uk/_lib/match/index.js142
-rw-r--r--date-fns/src/locale/uk/index.d.ts4
-rw-r--r--date-fns/src/locale/uk/index.js29
-rw-r--r--date-fns/src/locale/uk/index.js.flow35
-rw-r--r--date-fns/src/locale/uk/snapshot.md304
-rw-r--r--date-fns/src/locale/uz/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/uz/_lib/formatLong/index.js38
-rw-r--r--date-fns/src/locale/uz/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/uz/_lib/localize/index.js181
-rw-r--r--date-fns/src/locale/uz/_lib/match/index.js137
-rw-r--r--date-fns/src/locale/uz/index.d.ts4
-rw-r--r--date-fns/src/locale/uz/index.js28
-rw-r--r--date-fns/src/locale/uz/index.js.flow35
-rw-r--r--date-fns/src/locale/uz/snapshot.md304
-rw-r--r--date-fns/src/locale/vi/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/vi/_lib/formatLong/index.js47
-rw-r--r--date-fns/src/locale/vi/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/vi/_lib/localize/index.js295
-rw-r--r--date-fns/src/locale/vi/_lib/match/index.js158
-rw-r--r--date-fns/src/locale/vi/index.d.ts4
-rw-r--r--date-fns/src/locale/vi/index.js29
-rw-r--r--date-fns/src/locale/vi/index.js.flow35
-rw-r--r--date-fns/src/locale/vi/snapshot.md304
-rw-r--r--date-fns/src/locale/zh-CN/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/zh-CN/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/zh-CN/_lib/formatRelative/index.js29
-rw-r--r--date-fns/src/locale/zh-CN/_lib/localize/index.js194
-rw-r--r--date-fns/src/locale/zh-CN/_lib/match/index.js135
-rw-r--r--date-fns/src/locale/zh-CN/index.d.ts4
-rw-r--r--date-fns/src/locale/zh-CN/index.js32
-rw-r--r--date-fns/src/locale/zh-CN/index.js.flow35
-rw-r--r--date-fns/src/locale/zh-CN/snapshot.md304
-rw-r--r--date-fns/src/locale/zh-TW/_lib/formatDistance/index.js101
-rw-r--r--date-fns/src/locale/zh-TW/_lib/formatLong/index.js41
-rw-r--r--date-fns/src/locale/zh-TW/_lib/formatRelative/index.js12
-rw-r--r--date-fns/src/locale/zh-TW/_lib/localize/index.js196
-rw-r--r--date-fns/src/locale/zh-TW/_lib/match/index.js135
-rw-r--r--date-fns/src/locale/zh-TW/index.d.ts4
-rw-r--r--date-fns/src/locale/zh-TW/index.js30
-rw-r--r--date-fns/src/locale/zh-TW/index.js.flow35
-rw-r--r--date-fns/src/locale/zh-TW/snapshot.md304
-rw-r--r--date-fns/src/max/benchmark.js27
-rw-r--r--date-fns/src/max/index.d.ts4
-rw-r--r--date-fns/src/max/index.js.flow52
-rw-r--r--date-fns/src/max/index.ts69
-rw-r--r--date-fns/src/max/test.ts92
-rw-r--r--date-fns/src/milliseconds/index.d.ts4
-rw-r--r--date-fns/src/milliseconds/index.js.flow52
-rw-r--r--date-fns/src/milliseconds/index.ts62
-rw-r--r--date-fns/src/milliseconds/test.ts65
-rw-r--r--date-fns/src/millisecondsToHours/index.d.ts4
-rw-r--r--date-fns/src/millisecondsToHours/index.js.flow52
-rw-r--r--date-fns/src/millisecondsToHours/index.ts31
-rw-r--r--date-fns/src/millisecondsToHours/test.ts22
-rw-r--r--date-fns/src/millisecondsToMinutes/index.d.ts4
-rw-r--r--date-fns/src/millisecondsToMinutes/index.js.flow52
-rw-r--r--date-fns/src/millisecondsToMinutes/index.ts31
-rw-r--r--date-fns/src/millisecondsToMinutes/test.ts21
-rw-r--r--date-fns/src/millisecondsToSeconds/index.d.ts4
-rw-r--r--date-fns/src/millisecondsToSeconds/index.js.flow52
-rw-r--r--date-fns/src/millisecondsToSeconds/index.ts31
-rw-r--r--date-fns/src/millisecondsToSeconds/test.ts22
-rw-r--r--date-fns/src/min/benchmark.js27
-rw-r--r--date-fns/src/min/index.d.ts4
-rw-r--r--date-fns/src/min/index.js.flow52
-rw-r--r--date-fns/src/min/index.ts73
-rw-r--r--date-fns/src/min/test.ts93
-rw-r--r--date-fns/src/minutesToHours/index.d.ts4
-rw-r--r--date-fns/src/minutesToHours/index.js.flow52
-rw-r--r--date-fns/src/minutesToHours/index.ts31
-rw-r--r--date-fns/src/minutesToHours/test.ts21
-rw-r--r--date-fns/src/minutesToMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/minutesToMilliseconds/index.js.flow52
-rw-r--r--date-fns/src/minutesToMilliseconds/index.ts25
-rw-r--r--date-fns/src/minutesToMilliseconds/test.ts20
-rw-r--r--date-fns/src/minutesToSeconds/index.d.ts4
-rw-r--r--date-fns/src/minutesToSeconds/index.js.flow52
-rw-r--r--date-fns/src/minutesToSeconds/index.ts25
-rw-r--r--date-fns/src/minutesToSeconds/test.ts20
-rw-r--r--date-fns/src/monthsToQuarters/index.d.ts4
-rw-r--r--date-fns/src/monthsToQuarters/index.js.flow52
-rw-r--r--date-fns/src/monthsToQuarters/index.ts31
-rw-r--r--date-fns/src/monthsToQuarters/test.ts21
-rw-r--r--date-fns/src/monthsToYears/index.d.ts4
-rw-r--r--date-fns/src/monthsToYears/index.js.flow52
-rw-r--r--date-fns/src/monthsToYears/index.ts30
-rw-r--r--date-fns/src/monthsToYears/test.ts21
-rw-r--r--date-fns/src/nextDay/index.d.ts4
-rw-r--r--date-fns/src/nextDay/index.js.flow52
-rw-r--r--date-fns/src/nextDay/index.ts46
-rw-r--r--date-fns/src/nextDay/test.ts86
-rw-r--r--date-fns/src/nextFriday/index.d.ts4
-rw-r--r--date-fns/src/nextFriday/index.js.flow52
-rw-r--r--date-fns/src/nextFriday/index.ts25
-rw-r--r--date-fns/src/nextFriday/test.ts48
-rw-r--r--date-fns/src/nextMonday/index.d.ts4
-rw-r--r--date-fns/src/nextMonday/index.js.flow52
-rw-r--r--date-fns/src/nextMonday/index.ts25
-rw-r--r--date-fns/src/nextMonday/test.ts48
-rw-r--r--date-fns/src/nextSaturday/index.d.ts4
-rw-r--r--date-fns/src/nextSaturday/index.js.flow52
-rw-r--r--date-fns/src/nextSaturday/index.ts25
-rw-r--r--date-fns/src/nextSaturday/test.ts48
-rw-r--r--date-fns/src/nextSunday/index.d.ts4
-rw-r--r--date-fns/src/nextSunday/index.js.flow52
-rw-r--r--date-fns/src/nextSunday/index.ts25
-rw-r--r--date-fns/src/nextSunday/test.ts48
-rw-r--r--date-fns/src/nextThursday/index.d.ts4
-rw-r--r--date-fns/src/nextThursday/index.js.flow52
-rw-r--r--date-fns/src/nextThursday/index.ts25
-rw-r--r--date-fns/src/nextThursday/test.ts48
-rw-r--r--date-fns/src/nextTuesday/index.d.ts4
-rw-r--r--date-fns/src/nextTuesday/index.js.flow52
-rw-r--r--date-fns/src/nextTuesday/index.ts25
-rw-r--r--date-fns/src/nextTuesday/test.ts47
-rw-r--r--date-fns/src/nextWednesday/index.d.ts4
-rw-r--r--date-fns/src/nextWednesday/index.js.flow52
-rw-r--r--date-fns/src/nextWednesday/index.ts25
-rw-r--r--date-fns/src/nextWednesday/test.ts48
-rw-r--r--date-fns/src/parse/_lib/parsers/index.js1735
-rw-r--r--date-fns/src/parse/benchmark.js20
-rw-r--r--date-fns/src/parse/index.d.ts4
-rw-r--r--date-fns/src/parse/index.js626
-rw-r--r--date-fns/src/parse/index.js.flow63
-rw-r--r--date-fns/src/parse/test.js2665
-rw-r--r--date-fns/src/parseISO/benchmark.js16
-rw-r--r--date-fns/src/parseISO/index.d.ts4
-rw-r--r--date-fns/src/parseISO/index.js343
-rw-r--r--date-fns/src/parseISO/index.js.flow57
-rw-r--r--date-fns/src/parseISO/test.js452
-rw-r--r--date-fns/src/parseJSON/benchmark.js16
-rw-r--r--date-fns/src/parseJSON/index.d.ts4
-rw-r--r--date-fns/src/parseJSON/index.js.flow52
-rw-r--r--date-fns/src/parseJSON/index.ts62
-rw-r--r--date-fns/src/parseJSON/test.ts132
-rw-r--r--date-fns/src/quartersToMonths/index.d.ts4
-rw-r--r--date-fns/src/quartersToMonths/index.js.flow52
-rw-r--r--date-fns/src/quartersToMonths/index.ts25
-rw-r--r--date-fns/src/quartersToMonths/test.ts21
-rw-r--r--date-fns/src/quartersToYears/index.d.ts4
-rw-r--r--date-fns/src/quartersToYears/index.js.flow52
-rw-r--r--date-fns/src/quartersToYears/index.ts31
-rw-r--r--date-fns/src/quartersToYears/test.ts21
-rw-r--r--date-fns/src/roundToNearestMinutes/index.d.ts4
-rw-r--r--date-fns/src/roundToNearestMinutes/index.js61
-rw-r--r--date-fns/src/roundToNearestMinutes/index.js.flow57
-rw-r--r--date-fns/src/roundToNearestMinutes/test.js70
-rw-r--r--date-fns/src/secondsToHours/index.d.ts4
-rw-r--r--date-fns/src/secondsToHours/index.js.flow52
-rw-r--r--date-fns/src/secondsToHours/index.ts31
-rw-r--r--date-fns/src/secondsToHours/test.ts21
-rw-r--r--date-fns/src/secondsToMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/secondsToMilliseconds/index.js.flow52
-rw-r--r--date-fns/src/secondsToMilliseconds/index.ts25
-rw-r--r--date-fns/src/secondsToMilliseconds/test.ts16
-rw-r--r--date-fns/src/secondsToMinutes/index.d.ts4
-rw-r--r--date-fns/src/secondsToMinutes/index.js.flow52
-rw-r--r--date-fns/src/secondsToMinutes/index.ts31
-rw-r--r--date-fns/src/secondsToMinutes/test.ts21
-rw-r--r--date-fns/src/set/benchmark.js25
-rw-r--r--date-fns/src/set/index.d.ts4
-rw-r--r--date-fns/src/set/index.js.flow63
-rw-r--r--date-fns/src/set/index.ts89
-rw-r--r--date-fns/src/set/test.ts143
-rw-r--r--date-fns/src/setDate/benchmark.js21
-rw-r--r--date-fns/src/setDate/index.d.ts4
-rw-r--r--date-fns/src/setDate/index.js.flow52
-rw-r--r--date-fns/src/setDate/index.ts34
-rw-r--r--date-fns/src/setDate/test.ts49
-rw-r--r--date-fns/src/setDay/benchmark.js21
-rw-r--r--date-fns/src/setDay/index.d.ts4
-rw-r--r--date-fns/src/setDay/index.js69
-rw-r--r--date-fns/src/setDay/index.js.flow59
-rw-r--r--date-fns/src/setDay/test.js147
-rw-r--r--date-fns/src/setDayOfYear/benchmark.js21
-rw-r--r--date-fns/src/setDayOfYear/index.d.ts4
-rw-r--r--date-fns/src/setDayOfYear/index.js.flow52
-rw-r--r--date-fns/src/setDayOfYear/index.ts38
-rw-r--r--date-fns/src/setDayOfYear/test.ts50
-rw-r--r--date-fns/src/setHours/benchmark.js21
-rw-r--r--date-fns/src/setHours/index.d.ts4
-rw-r--r--date-fns/src/setHours/index.js34
-rw-r--r--date-fns/src/setHours/index.js.flow52
-rw-r--r--date-fns/src/setHours/test.js49
-rw-r--r--date-fns/src/setISODay/benchmark.js21
-rw-r--r--date-fns/src/setISODay/index.d.ts4
-rw-r--r--date-fns/src/setISODay/index.js.flow52
-rw-r--r--date-fns/src/setISODay/index.ts39
-rw-r--r--date-fns/src/setISODay/test.ts78
-rw-r--r--date-fns/src/setISOWeek/benchmark.js21
-rw-r--r--date-fns/src/setISOWeek/index.d.ts4
-rw-r--r--date-fns/src/setISOWeek/index.js.flow52
-rw-r--r--date-fns/src/setISOWeek/index.ts38
-rw-r--r--date-fns/src/setISOWeek/test.ts60
-rw-r--r--date-fns/src/setISOWeekYear/benchmark.js21
-rw-r--r--date-fns/src/setISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/setISOWeekYear/index.js.flow52
-rw-r--r--date-fns/src/setISOWeekYear/index.ts49
-rw-r--r--date-fns/src/setISOWeekYear/test.ts69
-rw-r--r--date-fns/src/setMilliseconds/benchmark.js21
-rw-r--r--date-fns/src/setMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/setMilliseconds/index.js.flow52
-rw-r--r--date-fns/src/setMilliseconds/index.ts34
-rw-r--r--date-fns/src/setMilliseconds/test.ts64
-rw-r--r--date-fns/src/setMinutes/benchmark.js21
-rw-r--r--date-fns/src/setMinutes/index.d.ts4
-rw-r--r--date-fns/src/setMinutes/index.js34
-rw-r--r--date-fns/src/setMinutes/index.js.flow52
-rw-r--r--date-fns/src/setMinutes/test.js49
-rw-r--r--date-fns/src/setMonth/benchmark.js21
-rw-r--r--date-fns/src/setMonth/index.d.ts4
-rw-r--r--date-fns/src/setMonth/index.js.flow52
-rw-r--r--date-fns/src/setMonth/index.ts44
-rw-r--r--date-fns/src/setMonth/test.ts65
-rw-r--r--date-fns/src/setQuarter/benchmark.js21
-rw-r--r--date-fns/src/setQuarter/index.d.ts4
-rw-r--r--date-fns/src/setQuarter/index.js.flow52
-rw-r--r--date-fns/src/setQuarter/index.ts36
-rw-r--r--date-fns/src/setQuarter/test.ts65
-rw-r--r--date-fns/src/setSeconds/benchmark.js21
-rw-r--r--date-fns/src/setSeconds/index.d.ts4
-rw-r--r--date-fns/src/setSeconds/index.js.flow52
-rw-r--r--date-fns/src/setSeconds/index.ts34
-rw-r--r--date-fns/src/setSeconds/test.ts61
-rw-r--r--date-fns/src/setWeek/index.d.ts4
-rw-r--r--date-fns/src/setWeek/index.js58
-rw-r--r--date-fns/src/setWeek/index.js.flow60
-rw-r--r--date-fns/src/setWeek/test.js100
-rw-r--r--date-fns/src/setWeekYear/index.d.ts4
-rw-r--r--date-fns/src/setWeekYear/index.js77
-rw-r--r--date-fns/src/setWeekYear/index.js.flow60
-rw-r--r--date-fns/src/setWeekYear/test.js109
-rw-r--r--date-fns/src/setYear/benchmark.js21
-rw-r--r--date-fns/src/setYear/index.d.ts4
-rw-r--r--date-fns/src/setYear/index.js.flow52
-rw-r--r--date-fns/src/setYear/index.ts40
-rw-r--r--date-fns/src/setYear/test.ts49
-rw-r--r--date-fns/src/startOfDay/benchmark.js21
-rw-r--r--date-fns/src/startOfDay/index.d.ts4
-rw-r--r--date-fns/src/startOfDay/index.js.flow52
-rw-r--r--date-fns/src/startOfDay/index.ts32
-rw-r--r--date-fns/src/startOfDay/test.ts35
-rw-r--r--date-fns/src/startOfDecade/benchmark.js15
-rw-r--r--date-fns/src/startOfDecade/index.d.ts4
-rw-r--r--date-fns/src/startOfDecade/index.js.flow52
-rw-r--r--date-fns/src/startOfDecade/index.ts34
-rw-r--r--date-fns/src/startOfDecade/test.ts35
-rw-r--r--date-fns/src/startOfHour/benchmark.js21
-rw-r--r--date-fns/src/startOfHour/index.d.ts4
-rw-r--r--date-fns/src/startOfHour/index.js.flow52
-rw-r--r--date-fns/src/startOfHour/index.ts32
-rw-r--r--date-fns/src/startOfHour/test.ts35
-rw-r--r--date-fns/src/startOfISOWeek/benchmark.js21
-rw-r--r--date-fns/src/startOfISOWeek/index.d.ts4
-rw-r--r--date-fns/src/startOfISOWeek/index.js.flow52
-rw-r--r--date-fns/src/startOfISOWeek/index.ts32
-rw-r--r--date-fns/src/startOfISOWeek/test.ts35
-rw-r--r--date-fns/src/startOfISOWeekYear/benchmark.js15
-rw-r--r--date-fns/src/startOfISOWeekYear/index.d.ts4
-rw-r--r--date-fns/src/startOfISOWeekYear/index.js.flow52
-rw-r--r--date-fns/src/startOfISOWeekYear/index.ts39
-rw-r--r--date-fns/src/startOfISOWeekYear/test.ts51
-rw-r--r--date-fns/src/startOfMinute/benchmark.js21
-rw-r--r--date-fns/src/startOfMinute/index.d.ts4
-rw-r--r--date-fns/src/startOfMinute/index.js.flow52
-rw-r--r--date-fns/src/startOfMinute/index.ts32
-rw-r--r--date-fns/src/startOfMinute/test.ts35
-rw-r--r--date-fns/src/startOfMonth/benchmark.js21
-rw-r--r--date-fns/src/startOfMonth/index.d.ts4
-rw-r--r--date-fns/src/startOfMonth/index.js.flow52
-rw-r--r--date-fns/src/startOfMonth/index.ts33
-rw-r--r--date-fns/src/startOfMonth/test.ts35
-rw-r--r--date-fns/src/startOfQuarter/benchmark.js21
-rw-r--r--date-fns/src/startOfQuarter/index.d.ts4
-rw-r--r--date-fns/src/startOfQuarter/index.js.flow52
-rw-r--r--date-fns/src/startOfQuarter/index.ts35
-rw-r--r--date-fns/src/startOfQuarter/test.ts35
-rw-r--r--date-fns/src/startOfSecond/benchmark.js21
-rw-r--r--date-fns/src/startOfSecond/index.d.ts4
-rw-r--r--date-fns/src/startOfSecond/index.js.flow52
-rw-r--r--date-fns/src/startOfSecond/index.ts32
-rw-r--r--date-fns/src/startOfSecond/test.ts35
-rw-r--r--date-fns/src/startOfToday/benchmark.js9
-rw-r--r--date-fns/src/startOfToday/index.d.ts4
-rw-r--r--date-fns/src/startOfToday/index.js.flow52
-rw-r--r--date-fns/src/startOfToday/index.ts28
-rw-r--r--date-fns/src/startOfToday/test.ts24
-rw-r--r--date-fns/src/startOfTomorrow/benchmark.js9
-rw-r--r--date-fns/src/startOfTomorrow/index.d.ts4
-rw-r--r--date-fns/src/startOfTomorrow/index.js.flow52
-rw-r--r--date-fns/src/startOfTomorrow/index.ts34
-rw-r--r--date-fns/src/startOfTomorrow/test.ts34
-rw-r--r--date-fns/src/startOfWeek/benchmark.js21
-rw-r--r--date-fns/src/startOfWeek/index.d.ts4
-rw-r--r--date-fns/src/startOfWeek/index.js.flow58
-rw-r--r--date-fns/src/startOfWeek/index.ts66
-rw-r--r--date-fns/src/startOfWeek/test.ts113
-rw-r--r--date-fns/src/startOfWeekYear/index.d.ts4
-rw-r--r--date-fns/src/startOfWeekYear/index.js71
-rw-r--r--date-fns/src/startOfWeekYear/index.js.flow59
-rw-r--r--date-fns/src/startOfWeekYear/test.js83
-rw-r--r--date-fns/src/startOfYear/benchmark.js21
-rw-r--r--date-fns/src/startOfYear/index.d.ts4
-rw-r--r--date-fns/src/startOfYear/index.js.flow52
-rw-r--r--date-fns/src/startOfYear/index.ts34
-rw-r--r--date-fns/src/startOfYear/test.ts46
-rw-r--r--date-fns/src/startOfYesterday/benchmark.js9
-rw-r--r--date-fns/src/startOfYesterday/index.d.ts4
-rw-r--r--date-fns/src/startOfYesterday/index.js.flow52
-rw-r--r--date-fns/src/startOfYesterday/index.ts34
-rw-r--r--date-fns/src/startOfYesterday/test.ts34
-rw-r--r--date-fns/src/sub/benchmark.js25
-rw-r--r--date-fns/src/sub/index.d.ts4
-rw-r--r--date-fns/src/sub/index.js72
-rw-r--r--date-fns/src/sub/index.js.flow52
-rw-r--r--date-fns/src/sub/test.js82
-rw-r--r--date-fns/src/subBusinessDays/index.d.ts4
-rw-r--r--date-fns/src/subBusinessDays/index.js28
-rw-r--r--date-fns/src/subBusinessDays/index.js.flow52
-rw-r--r--date-fns/src/subBusinessDays/test.js63
-rw-r--r--date-fns/src/subDays/benchmark.js21
-rw-r--r--date-fns/src/subDays/index.d.ts4
-rw-r--r--date-fns/src/subDays/index.js.flow52
-rw-r--r--date-fns/src/subDays/index.ts32
-rw-r--r--date-fns/src/subDays/test.ts52
-rw-r--r--date-fns/src/subHours/benchmark.js21
-rw-r--r--date-fns/src/subHours/index.d.ts4
-rw-r--r--date-fns/src/subHours/index.js.flow52
-rw-r--r--date-fns/src/subHours/index.ts32
-rw-r--r--date-fns/src/subHours/test.ts52
-rw-r--r--date-fns/src/subISOWeekYears/benchmark.js15
-rw-r--r--date-fns/src/subISOWeekYears/index.d.ts4
-rw-r--r--date-fns/src/subISOWeekYears/index.js.flow52
-rw-r--r--date-fns/src/subISOWeekYears/index.ts39
-rw-r--r--date-fns/src/subISOWeekYears/test.ts62
-rw-r--r--date-fns/src/subMilliseconds/benchmark.js21
-rw-r--r--date-fns/src/subMilliseconds/index.d.ts4
-rw-r--r--date-fns/src/subMilliseconds/index.js.flow52
-rw-r--r--date-fns/src/subMilliseconds/index.ts32
-rw-r--r--date-fns/src/subMilliseconds/test.ts67
-rw-r--r--date-fns/src/subMinutes/benchmark.js21
-rw-r--r--date-fns/src/subMinutes/index.d.ts4
-rw-r--r--date-fns/src/subMinutes/index.js.flow52
-rw-r--r--date-fns/src/subMinutes/index.ts32
-rw-r--r--date-fns/src/subMinutes/test.ts54
-rw-r--r--date-fns/src/subMonths/benchmark.js21
-rw-r--r--date-fns/src/subMonths/index.d.ts4
-rw-r--r--date-fns/src/subMonths/index.js.flow52
-rw-r--r--date-fns/src/subMonths/index.ts32
-rw-r--r--date-fns/src/subMonths/test.ts69
-rw-r--r--date-fns/src/subQuarters/benchmark.js21
-rw-r--r--date-fns/src/subQuarters/index.d.ts4
-rw-r--r--date-fns/src/subQuarters/index.js.flow52
-rw-r--r--date-fns/src/subQuarters/index.ts32
-rw-r--r--date-fns/src/subQuarters/test.ts69
-rw-r--r--date-fns/src/subSeconds/benchmark.js21
-rw-r--r--date-fns/src/subSeconds/index.d.ts4
-rw-r--r--date-fns/src/subSeconds/index.js.flow52
-rw-r--r--date-fns/src/subSeconds/index.ts32
-rw-r--r--date-fns/src/subSeconds/test.ts55
-rw-r--r--date-fns/src/subWeeks/benchmark.js21
-rw-r--r--date-fns/src/subWeeks/index.d.ts4
-rw-r--r--date-fns/src/subWeeks/index.js.flow52
-rw-r--r--date-fns/src/subWeeks/index.ts32
-rw-r--r--date-fns/src/subWeeks/test.ts52
-rw-r--r--date-fns/src/subYears/benchmark.js21
-rw-r--r--date-fns/src/subYears/index.d.ts4
-rw-r--r--date-fns/src/subYears/index.js.flow52
-rw-r--r--date-fns/src/subYears/index.ts32
-rw-r--r--date-fns/src/subYears/test.ts68
-rw-r--r--date-fns/src/toDate/benchmark.js16
-rw-r--r--date-fns/src/toDate/index.d.ts4
-rw-r--r--date-fns/src/toDate/index.js.flow52
-rw-r--r--date-fns/src/toDate/index.ts61
-rw-r--r--date-fns/src/toDate/test.ts136
-rw-r--r--date-fns/src/types.ts53
-rw-r--r--date-fns/src/weeksToDays/index.d.ts4
-rw-r--r--date-fns/src/weeksToDays/index.js.flow52
-rw-r--r--date-fns/src/weeksToDays/index.ts25
-rw-r--r--date-fns/src/weeksToDays/test.ts21
-rw-r--r--date-fns/src/yearsToMonths/index.d.ts4
-rw-r--r--date-fns/src/yearsToMonths/index.js.flow52
-rw-r--r--date-fns/src/yearsToMonths/index.ts25
-rw-r--r--date-fns/src/yearsToMonths/test.ts21
-rw-r--r--date-fns/src/yearsToQuarters/index.d.ts4
-rw-r--r--date-fns/src/yearsToQuarters/index.js.flow52
-rw-r--r--date-fns/src/yearsToQuarters/index.ts25
-rw-r--r--date-fns/src/yearsToQuarters/test.ts21
-rw-r--r--date-fns/test.js2
-rw-r--r--date-fns/test/.eslintrc.js5
-rw-r--r--date-fns/test/dst/addBusinessDays/basic.js18
-rw-r--r--date-fns/test/dst/eachDayOfInterval/basic.js22
-rw-r--r--date-fns/test/dst/formatDistanceStrict/cairo.ts15
-rw-r--r--date-fns/test/dst/formatDistanceStrict/melbourne.ts16
-rw-r--r--date-fns/test/dst/parseISO/basic.js30
-rw-r--r--date-fns/test/dst/parseISO/samoa.js16
-rw-r--r--date-fns/test/dst/parseISO/sydney.js58
-rw-r--r--date-fns/test/dst/tzOffsetTransitions.ts143
-rw-r--r--date-fns/test/formatISO/india.js13
-rw-r--r--date-fns/test/formatRFC3339/australia.js30
-rw-r--r--date-fns/test/formatRFC3339/india.js30
-rw-r--r--date-fns/test/formatRFC3339/newfoundland.js32
-rw-r--r--date-fns/test/formatRFC3339/newzealand.js32
-rw-r--r--date-fns/test/formatRFC3339/poland.js31
-rw-r--r--date-fns/testWithoutLocales.js7
-rw-r--r--date-fns/tsconfig.json21
-rw-r--r--date-fns/typings.d.ts22036
-rw-r--r--date-fns/yarn.lock12767
-rw-r--r--history/.browserslistrc9
-rw-r--r--history/.github/lock.yml25
-rw-r--r--history/.gitignore5
-rw-r--r--history/.prettierignore3
-rw-r--r--history/.prettierrc3
-rw-r--r--history/.size-snapshot.json26
-rw-r--r--history/.travis.yml26
-rw-r--r--history/CONTRIBUTING.md9
-rw-r--r--history/DOMUtils.js3
-rw-r--r--history/ExecutionEnvironment.js3
-rw-r--r--history/LICENSE21
-rw-r--r--history/LocationUtils.js3
-rw-r--r--history/PathUtils.js3
-rw-r--r--history/README.md38
-rw-r--r--history/createBrowserHistory.js3
-rw-r--r--history/createHashHistory.js3
-rw-r--r--history/createMemoryHistory.js3
-rw-r--r--history/createTransitionManager.js3
-rw-r--r--history/docs/Blocking.md38
-rw-r--r--history/docs/GettingStarted.md110
-rw-r--r--history/docs/Installation.md25
-rw-r--r--history/docs/Misc.md51
-rw-r--r--history/docs/Navigation.md39
-rw-r--r--history/docs/README.md11
-rw-r--r--history/es/DOMUtils.js7
-rw-r--r--history/es/ExecutionEnvironment.js7
-rw-r--r--history/es/LocationUtils.js7
-rw-r--r--history/es/PathUtils.js7
-rw-r--r--history/es/createBrowserHistory.js7
-rw-r--r--history/es/createHashHistory.js7
-rw-r--r--history/es/createMemoryHistory.js7
-rw-r--r--history/es/createTransitionManager.js7
-rw-r--r--history/es/warnAboutDeprecatedESMImport.js35
-rw-r--r--history/index.js7
-rw-r--r--history/karma.conf.js131
-rw-r--r--history/modules/.babelrc4
-rw-r--r--history/modules/.eslintrc15
-rw-r--r--history/modules/DOMUtils.js54
-rw-r--r--history/modules/LocationUtils.js80
-rw-r--r--history/modules/PathUtils.js59
-rw-r--r--history/modules/__tests__/.eslintrc8
-rw-r--r--history/modules/__tests__/BrowserHistory-basename-test.js88
-rw-r--r--history/modules/__tests__/BrowserHistory-test.js214
-rw-r--r--history/modules/__tests__/HashHistory-base-test.js34
-rw-r--r--history/modules/__tests__/HashHistory-basename-test.js92
-rw-r--r--history/modules/__tests__/HashHistory-coding-test.js76
-rw-r--r--history/modules/__tests__/HashHistory-test.js215
-rw-r--r--history/modules/__tests__/MemoryHistory-test.js203
-rw-r--r--history/modules/__tests__/TestSequences/BackButtonTransitionHook.js41
-rw-r--r--history/modules/__tests__/TestSequences/BlockEverything.js25
-rw-r--r--history/modules/__tests__/TestSequences/BlockPopWithoutListening.js33
-rw-r--r--history/modules/__tests__/TestSequences/DenyGoBack.js42
-rw-r--r--history/modules/__tests__/TestSequences/DenyGoForward.js50
-rw-r--r--history/modules/__tests__/TestSequences/DenyPush.js31
-rw-r--r--history/modules/__tests__/TestSequences/EncodedReservedCharacters.js38
-rw-r--r--history/modules/__tests__/TestSequences/GoBack.js31
-rw-r--r--history/modules/__tests__/TestSequences/GoForward.js39
-rw-r--r--history/modules/__tests__/TestSequences/HashChangeTransitionHook.js33
-rw-r--r--history/modules/__tests__/TestSequences/HashbangHashPathCoding.js48
-rw-r--r--history/modules/__tests__/TestSequences/InitialLocationHasKey.js13
-rw-r--r--history/modules/__tests__/TestSequences/InitialLocationNoKey.js13
-rw-r--r--history/modules/__tests__/TestSequences/Listen.js12
-rw-r--r--history/modules/__tests__/TestSequences/LocationPathnameAlwaysSame.js44
-rw-r--r--history/modules/__tests__/TestSequences/NoslashHashPathCoding.js50
-rw-r--r--history/modules/__tests__/TestSequences/PushEncodedLocation.js28
-rw-r--r--history/modules/__tests__/TestSequences/PushInvalidPathname.js17
-rw-r--r--history/modules/__tests__/TestSequences/PushMissingPathname.js35
-rw-r--r--history/modules/__tests__/TestSequences/PushNewLocation.js25
-rw-r--r--history/modules/__tests__/TestSequences/PushRelativePathname.js35
-rw-r--r--history/modules/__tests__/TestSequences/PushSamePath.js39
-rw-r--r--history/modules/__tests__/TestSequences/PushSamePathWarning.js55
-rw-r--r--history/modules/__tests__/TestSequences/PushState.js26
-rw-r--r--history/modules/__tests__/TestSequences/PushStateWarning.js40
-rw-r--r--history/modules/__tests__/TestSequences/PushUnicodeLocation.js28
-rw-r--r--history/modules/__tests__/TestSequences/ReplaceInvalidPathname.js17
-rw-r--r--history/modules/__tests__/TestSequences/ReplaceNewLocation.js25
-rw-r--r--history/modules/__tests__/TestSequences/ReplaceSamePath.js37
-rw-r--r--history/modules/__tests__/TestSequences/ReplaceState.js26
-rw-r--r--history/modules/__tests__/TestSequences/ReplaceStateWarning.js40
-rw-r--r--history/modules/__tests__/TestSequences/ReturnFalseTransitionHook.js32
-rw-r--r--history/modules/__tests__/TestSequences/SlashHashPathCoding.js48
-rw-r--r--history/modules/__tests__/TestSequences/TransitionHookArgs.js32
-rw-r--r--history/modules/__tests__/TestSequences/execSteps.js34
-rw-r--r--history/modules/__tests__/TestSequences/index.js46
-rw-r--r--history/modules/__tests__/createLocation-test.js144
-rw-r--r--history/modules/createBrowserHistory.js329
-rw-r--r--history/modules/createHashHistory.js361
-rw-r--r--history/modules/createMemoryHistory.js186
-rw-r--r--history/modules/createTransitionManager.js78
-rw-r--r--history/modules/index.js5
-rw-r--r--history/modules/invariant.js1
-rw-r--r--history/modules/warning.js1
-rw-r--r--history/package.json82
-rw-r--r--history/rollup.config.js104
-rw-r--r--history/tests.webpack.js2
-rw-r--r--history/warnAboutDeprecatedCJSRequire.js35
-rw-r--r--history/yarn.lock6268
-rw-r--r--preact-router/.babelrc9
-rw-r--r--preact-router/.eslintrc66
-rw-r--r--preact-router/.gitignore6
-rw-r--r--preact-router/.travis.yml3
-rw-r--r--preact-router/LICENSE21
-rw-r--r--preact-router/README.md254
-rw-r--r--preact-router/karma.conf.js37
-rw-r--r--preact-router/package-lock.json8412
-rw-r--r--preact-router/package.json94
-rw-r--r--preact-router/rollup.config.js56
-rw-r--r--preact-router/src/index.d.ts71
-rw-r--r--preact-router/src/index.js264
-rw-r--r--preact-router/src/match.d.ts16
-rw-r--r--preact-router/src/match.js36
-rw-r--r--preact-router/src/util.js82
-rw-r--r--preact-router/test/dist.js39
-rw-r--r--preact-router/test/dom.js293
-rw-r--r--preact-router/test/index.js249
-rw-r--r--preact-router/test/match.tsx26
-rw-r--r--preact-router/test/router.tsx36
-rw-r--r--preact-router/test/tsconfig.json13
-rw-r--r--preact-router/test/util.js110
-rw-r--r--preact-router/test_helpers/assert-clone-of.js12
-rw-r--r--preact/.codesandbox/ci.json4
-rw-r--r--preact/.editorconfig16
-rw-r--r--preact/.github/CODE_OF_CONDUCT.md46
-rw-r--r--preact/.github/FUNDING.yml2
-rw-r--r--preact/.github/ISSUE_TEMPLATE/bug_report.md25
-rw-r--r--preact/.github/ISSUE_TEMPLATE/feature_request.md14
-rw-r--r--preact/.github/workflows/benchmarks.yml256
-rw-r--r--preact/.github/workflows/ci.yml57
-rw-r--r--preact/.github/workflows/pr-reporter.yml51
-rw-r--r--preact/.github/workflows/saucelabs.yml42
-rw-r--r--preact/.github/workflows/size.yml17
-rw-r--r--preact/.gitignore16
-rw-r--r--preact/CODE_OF_CONDUCT.md46
-rw-r--r--preact/CONTRIBUTING.md237
-rw-r--r--preact/LICENSE21
-rw-r--r--preact/README.md187
-rw-r--r--preact/babel.config.js47
-rw-r--r--preact/benches/.gitignore6
-rw-r--r--preact/benches/LICENSE21
-rw-r--r--preact/benches/README.md72
-rw-r--r--preact/benches/TODO.md10
-rw-r--r--preact/benches/jsconfig.json8
-rw-r--r--preact/benches/package.json30
-rw-r--r--preact/benches/proxy-packages/preact-local-proxy/index.js18
-rw-r--r--preact/benches/proxy-packages/preact-local-proxy/package.json10
-rw-r--r--preact/benches/proxy-packages/preact-master-proxy/index.js18
-rw-r--r--preact/benches/proxy-packages/preact-master-proxy/package.json10
-rw-r--r--preact/benches/proxy-packages/preact-v8-proxy/index.js23
-rw-r--r--preact/benches/proxy-packages/preact-v8-proxy/package.json10
-rw-r--r--preact/benches/scripts/analyze.js363
-rw-r--r--preact/benches/scripts/bench.js70
-rw-r--r--preact/benches/scripts/config.js317
-rw-r--r--preact/benches/scripts/deopts.js253
-rw-r--r--preact/benches/scripts/global.d.ts15
-rw-r--r--preact/benches/scripts/index.js110
-rw-r--r--preact/benches/scripts/prepare.js44
-rw-r--r--preact/benches/scripts/tracing.d.ts224
-rw-r--r--preact/benches/scripts/utils.js65
-rw-r--r--preact/benches/src/02_replace1k.html67
-rw-r--r--preact/benches/src/03_update10th1k_x16.html78
-rw-r--r--preact/benches/src/07_create10k.html49
-rw-r--r--preact/benches/src/filter_list.html92
-rw-r--r--preact/benches/src/hydrate1k.html145
-rw-r--r--preact/benches/src/keyed-children/components.js152
-rw-r--r--preact/benches/src/keyed-children/index.js29
-rw-r--r--preact/benches/src/keyed-children/store.js119
-rw-r--r--preact/benches/src/many_updates.html112
-rw-r--r--preact/benches/src/text_update.html34
-rw-r--r--preact/benches/src/util.js98
-rw-r--r--preact/compat/LICENSE21
-rw-r--r--preact/compat/jsx-dev-runtime.js1
-rw-r--r--preact/compat/jsx-dev-runtime.mjs1
-rw-r--r--preact/compat/jsx-runtime.js1
-rw-r--r--preact/compat/jsx-runtime.mjs1
-rw-r--r--preact/compat/mangle.json21
-rw-r--r--preact/compat/package.json19
-rw-r--r--preact/compat/scheduler.js15
-rw-r--r--preact/compat/scheduler.mjs23
-rw-r--r--preact/compat/server.js15
-rw-r--r--preact/compat/server.mjs4
-rw-r--r--preact/compat/src/Children.js21
-rw-r--r--preact/compat/src/PureComponent.js15
-rw-r--r--preact/compat/src/forwardRef.js51
-rw-r--r--preact/compat/src/index.d.ts140
-rw-r--r--preact/compat/src/index.js187
-rw-r--r--preact/compat/src/internal.d.ts47
-rw-r--r--preact/compat/src/memo.js34
-rw-r--r--preact/compat/src/portals.js80
-rw-r--r--preact/compat/src/render.js219
-rw-r--r--preact/compat/src/suspense-list.d.ts14
-rw-r--r--preact/compat/src/suspense-list.js126
-rw-r--r--preact/compat/src/suspense.d.ts15
-rw-r--r--preact/compat/src/suspense.js270
-rw-r--r--preact/compat/src/util.js28
-rw-r--r--preact/compat/test-utils.js1
-rw-r--r--preact/compat/test/browser/Children.test.js185
-rw-r--r--preact/compat/test/browser/PureComponent.test.js125
-rw-r--r--preact/compat/test/browser/cloneElement.test.js96
-rw-r--r--preact/compat/test/browser/compat.options.test.js85
-rw-r--r--preact/compat/test/browser/component.test.js243
-rw-r--r--preact/compat/test/browser/createElement.test.js49
-rw-r--r--preact/compat/test/browser/createFactory.test.js26
-rw-r--r--preact/compat/test/browser/events.test.js278
-rw-r--r--preact/compat/test/browser/exports.test.js85
-rw-r--r--preact/compat/test/browser/findDOMNode.test.js51
-rw-r--r--preact/compat/test/browser/forwardRef.test.js460
-rw-r--r--preact/compat/test/browser/hydrate.test.js34
-rw-r--r--preact/compat/test/browser/isValidElement.test.js22
-rw-r--r--preact/compat/test/browser/memo.test.js234
-rw-r--r--preact/compat/test/browser/portals.test.js627
-rw-r--r--preact/compat/test/browser/render.test.js454
-rw-r--r--preact/compat/test/browser/scheduler.test.js39
-rw-r--r--preact/compat/test/browser/select.test.js33
-rw-r--r--preact/compat/test/browser/suspense-hydration.test.js778
-rw-r--r--preact/compat/test/browser/suspense-list.test.js588
-rw-r--r--preact/compat/test/browser/suspense-utils.js116
-rw-r--r--preact/compat/test/browser/suspense.test.js2091
-rw-r--r--preact/compat/test/browser/svg.test.js94
-rw-r--r--preact/compat/test/browser/testUtils.js24
-rw-r--r--preact/compat/test/browser/textarea.test.js64
-rw-r--r--preact/compat/test/browser/unmountComponentAtNode.test.js28
-rw-r--r--preact/compat/test/browser/unstable_batchedUpdates.test.js15
-rw-r--r--preact/compat/test/ts/forward-ref.tsx26
-rw-r--r--preact/compat/test/ts/lazy.tsx17
-rw-r--r--preact/compat/test/ts/memo.tsx56
-rw-r--r--preact/compat/test/ts/react-default.tsx6
-rw-r--r--preact/compat/test/ts/react-star.tsx7
-rw-r--r--preact/compat/test/ts/scheduler.ts19
-rw-r--r--preact/compat/test/ts/suspense.tsx52
-rw-r--r--preact/compat/test/ts/tsconfig.json20
-rw-r--r--preact/compat/test/ts/utils.ts4
-rw-r--r--preact/config/codemod-const.js43
-rw-r--r--preact/config/codemod-let-name.js16
-rw-r--r--preact/config/codemod-strip-tdz.js60
-rw-r--r--preact/config/compat-entries.js25
-rw-r--r--preact/config/node-13-exports.js32
-rw-r--r--preact/debug/LICENSE21
-rw-r--r--preact/debug/mangle.json21
-rw-r--r--preact/debug/package.json18
-rw-r--r--preact/debug/src/check-props.js54
-rw-r--r--preact/debug/src/component-stack.js146
-rw-r--r--preact/debug/src/constants.js3
-rw-r--r--preact/debug/src/debug.js442
-rw-r--r--preact/debug/src/index.js6
-rw-r--r--preact/debug/src/internal.d.ts82
-rw-r--r--preact/debug/src/util.js11
-rw-r--r--preact/debug/test/browser/component-stack-2.test.js54
-rw-r--r--preact/debug/test/browser/component-stack.test.js86
-rw-r--r--preact/debug/test/browser/debug-compat.test.js81
-rw-r--r--preact/debug/test/browser/debug-hooks.test.js111
-rw-r--r--preact/debug/test/browser/debug-suspense.test.js190
-rw-r--r--preact/debug/test/browser/debug.options.test.js135
-rw-r--r--preact/debug/test/browser/debug.test.js624
-rw-r--r--preact/debug/test/browser/fakeDevTools.js1
-rw-r--r--preact/debug/test/browser/serializeVNode.test.js66
-rw-r--r--preact/demo/contenteditable.js25
-rw-r--r--preact/demo/context.js69
-rw-r--r--preact/demo/devtools.js42
-rw-r--r--preact/demo/fragments.js26
-rw-r--r--preact/demo/index.js187
-rw-r--r--preact/demo/key_bug.js32
-rw-r--r--preact/demo/list.js63
-rw-r--r--preact/demo/logger.js170
-rw-r--r--preact/demo/mobx.js75
-rw-r--r--preact/demo/nested-suspense/addnewcomponent.js5
-rw-r--r--preact/demo/nested-suspense/component-container.js17
-rw-r--r--preact/demo/nested-suspense/dropzone.js5
-rw-r--r--preact/demo/nested-suspense/editor.js5
-rw-r--r--preact/demo/nested-suspense/index.js69
-rw-r--r--preact/demo/nested-suspense/subcomponent.js5
-rw-r--r--preact/demo/old.js.bak103
-rw-r--r--preact/demo/package.json44
-rw-r--r--preact/demo/people/Readme.md3
-rw-r--r--preact/demo/people/index.tsx59
-rw-r--r--preact/demo/people/profile.tsx59
-rw-r--r--preact/demo/people/router.tsx153
-rw-r--r--preact/demo/people/store.ts83
-rw-r--r--preact/demo/people/styles/animations.scss34
-rw-r--r--preact/demo/people/styles/app.scss100
-rw-r--r--preact/demo/people/styles/avatar.scss16
-rw-r--r--preact/demo/people/styles/button.scss115
-rw-r--r--preact/demo/people/styles/index.scss168
-rw-r--r--preact/demo/people/styles/profile.scss26
-rw-r--r--preact/demo/preact.js39
-rw-r--r--preact/demo/profiler.js88
-rw-r--r--preact/demo/pythagoras/index.js86
-rw-r--r--preact/demo/pythagoras/pythagoras.js97
-rw-r--r--preact/demo/redux.js48
-rw-r--r--preact/demo/reduxUpdate.js61
-rw-r--r--preact/demo/reorder.js104
-rw-r--r--preact/demo/spiral.js140
-rw-r--r--preact/demo/stateOrderBug.js80
-rw-r--r--preact/demo/style.css24
-rw-r--r--preact/demo/style.scss149
-rw-r--r--preact/demo/styled-components.js31
-rw-r--r--preact/demo/suspense-router/bye.js12
-rw-r--r--preact/demo/suspense-router/hello.js12
-rw-r--r--preact/demo/suspense-router/index.js30
-rw-r--r--preact/demo/suspense-router/simple-router.js87
-rw-r--r--preact/demo/suspense.js97
-rw-r--r--preact/demo/textFields.js37
-rw-r--r--preact/demo/todo.js47
-rw-r--r--preact/demo/tsconfig.json15
-rw-r--r--preact/demo/webpack.config.js112
-rw-r--r--preact/devtools/LICENSE21
-rw-r--r--preact/devtools/mangle.json21
-rw-r--r--preact/devtools/package.json16
-rw-r--r--preact/devtools/src/devtools.js10
-rw-r--r--preact/devtools/src/index.d.ts8
-rw-r--r--preact/devtools/src/index.js15
-rw-r--r--preact/devtools/test/browser/addHookName.test.js51
-rw-r--r--preact/hooks/LICENSE21
-rw-r--r--preact/hooks/mangle.json21
-rw-r--r--preact/hooks/package.json26
-rw-r--r--preact/hooks/src/index.d.ts133
-rw-r--r--preact/hooks/src/index.js386
-rw-r--r--preact/hooks/src/internal.d.ts75
-rw-r--r--preact/hooks/test/_util/useEffectUtil.js10
-rw-r--r--preact/hooks/test/browser/combinations.test.js301
-rw-r--r--preact/hooks/test/browser/errorBoundary.test.js92
-rw-r--r--preact/hooks/test/browser/hooks.options.test.js154
-rw-r--r--preact/hooks/test/browser/useCallback.test.js41
-rw-r--r--preact/hooks/test/browser/useContext.test.js351
-rw-r--r--preact/hooks/test/browser/useDebugValue.test.js71
-rw-r--r--preact/hooks/test/browser/useEffect.test.js373
-rw-r--r--preact/hooks/test/browser/useEffectAssertions.test.js142
-rw-r--r--preact/hooks/test/browser/useImperativeHandle.test.js182
-rw-r--r--preact/hooks/test/browser/useLayoutEffect.test.js326
-rw-r--r--preact/hooks/test/browser/useMemo.test.js125
-rw-r--r--preact/hooks/test/browser/useReducer.test.js214
-rw-r--r--preact/hooks/test/browser/useRef.test.js50
-rw-r--r--preact/hooks/test/browser/useState.test.js214
-rw-r--r--preact/jsconfig.json16
-rw-r--r--preact/jsx-runtime/LICENSE21
-rw-r--r--preact/jsx-runtime/mangle.json21
-rw-r--r--preact/jsx-runtime/package.json19
-rw-r--r--preact/jsx-runtime/src/index.d.ts50
-rw-r--r--preact/jsx-runtime/src/index.js77
-rw-r--r--preact/jsx-runtime/test/browser/jsx-runtime.test.js94
-rw-r--r--preact/karma.conf.js338
-rw-r--r--preact/mangle.json80
-rw-r--r--preact/package-lock.json32470
-rw-r--r--preact/package.json270
-rw-r--r--preact/sizereport.config.js5
-rw-r--r--preact/src/cjs.js3
-rw-r--r--preact/src/clone-element.js34
-rw-r--r--preact/src/component.js225
-rw-r--r--preact/src/constants.js3
-rw-r--r--preact/src/create-context.js68
-rw-r--r--preact/src/create-element.js97
-rw-r--r--preact/src/diff/catch-error.js38
-rw-r--r--preact/src/diff/children.js347
-rw-r--r--preact/src/diff/index.js514
-rw-r--r--preact/src/diff/props.js158
-rw-r--r--preact/src/index.d.ts310
-rw-r--r--preact/src/index.js13
-rw-r--r--preact/src/internal.d.ts146
-rw-r--r--preact/src/jsx.d.ts974
-rw-r--r--preact/src/options.js16
-rw-r--r--preact/src/render.js75
-rw-r--r--preact/src/util.js27
-rw-r--r--preact/test-utils/package.json19
-rw-r--r--preact/test-utils/src/index.d.ts3
-rw-r--r--preact/test-utils/src/index.js117
-rw-r--r--preact/test-utils/test/shared/act.test.js479
-rw-r--r--preact/test-utils/test/shared/rerender.test.js59
-rw-r--r--preact/test/TODO.md13
-rw-r--r--preact/test/_util/bench.js46
-rw-r--r--preact/test/_util/dom.js66
-rw-r--r--preact/test/_util/helpers.js292
-rw-r--r--preact/test/_util/logCall.js66
-rw-r--r--preact/test/_util/optionSpies.js39
-rw-r--r--preact/test/benchmarks/performance.test.js470
-rw-r--r--preact/test/benchmarks/text.test.js101
-rw-r--r--preact/test/browser/cloneElement.test.js87
-rw-r--r--preact/test/browser/components.test.js2664
-rw-r--r--preact/test/browser/context.test.js237
-rw-r--r--preact/test/browser/createContext.test.js931
-rw-r--r--preact/test/browser/customBuiltInElements.test.js40
-rw-r--r--preact/test/browser/events.test.js202
-rw-r--r--preact/test/browser/focus.test.js548
-rw-r--r--preact/test/browser/fragments.test.js2805
-rw-r--r--preact/test/browser/getDomSibling.test.js362
-rw-r--r--preact/test/browser/hydrate.test.js454
-rw-r--r--preact/test/browser/isValidElement.test.js4
-rw-r--r--preact/test/browser/keys.test.js627
-rw-r--r--preact/test/browser/lifecycles/componentDidCatch.test.js672
-rw-r--r--preact/test/browser/lifecycles/componentDidMount.test.js36
-rw-r--r--preact/test/browser/lifecycles/componentDidUpdate.test.js385
-rw-r--r--preact/test/browser/lifecycles/componentWillMount.test.js43
-rw-r--r--preact/test/browser/lifecycles/componentWillReceiveProps.test.js296
-rw-r--r--preact/test/browser/lifecycles/componentWillUnmount.test.js72
-rw-r--r--preact/test/browser/lifecycles/componentWillUpdate.test.js95
-rw-r--r--preact/test/browser/lifecycles/getDerivedStateFromError.test.js659
-rw-r--r--preact/test/browser/lifecycles/getDerivedStateFromProps.test.js419
-rw-r--r--preact/test/browser/lifecycles/getSnapshotBeforeUpdate.test.js211
-rw-r--r--preact/test/browser/lifecycles/lifecycle.test.js672
-rw-r--r--preact/test/browser/lifecycles/shouldComponentUpdate.test.js916
-rw-r--r--preact/test/browser/placeholders.test.js308
-rw-r--r--preact/test/browser/refs.test.js481
-rw-r--r--preact/test/browser/render.test.js1164
-rw-r--r--preact/test/browser/replaceNode.test.js239
-rw-r--r--preact/test/browser/select.test.js72
-rw-r--r--preact/test/browser/spec.test.js151
-rw-r--r--preact/test/browser/style.test.js225
-rw-r--r--preact/test/browser/svg.test.js226
-rw-r--r--preact/test/browser/toChildArray.test.js207
-rw-r--r--preact/test/extensions.d.ts5
-rw-r--r--preact/test/fixtures/preact.js626
-rw-r--r--preact/test/node/index.test.js15
-rw-r--r--preact/test/polyfills.js260
-rw-r--r--preact/test/shared/createContext.test.js24
-rw-r--r--preact/test/shared/createElement.test.js299
-rw-r--r--preact/test/shared/exports.test.js32
-rw-r--r--preact/test/shared/isValidElement.test.js5
-rw-r--r--preact/test/shared/isValidElementTests.js37
-rw-r--r--preact/test/ts/Component-test.tsx183
-rw-r--r--preact/test/ts/VNode-test.tsx197
-rw-r--r--preact/test/ts/custom-elements.tsx85
-rw-r--r--preact/test/ts/hoc-test.tsx50
-rw-r--r--preact/test/ts/jsx-namespacce-test.tsx16
-rw-r--r--preact/test/ts/preact-global-test.tsx6
-rw-r--r--preact/test/ts/preact.tsx297
-rw-r--r--preact/test/ts/refs.tsx76
-rw-r--r--preact/test/ts/tsconfig.json15
-rw-r--r--resolve-pathname/.eslintrc7
-rw-r--r--resolve-pathname/.gitignore5
-rw-r--r--resolve-pathname/.prettierignore1
-rw-r--r--resolve-pathname/.size-snapshot.json26
-rw-r--r--resolve-pathname/.travis.yml27
-rw-r--r--resolve-pathname/LICENSE21
-rw-r--r--resolve-pathname/README.md64
-rw-r--r--resolve-pathname/index.js7
-rw-r--r--resolve-pathname/jest.config.js19
-rw-r--r--resolve-pathname/modules/.babelrc3
-rw-r--r--resolve-pathname/modules/__tests__/.eslintrc5
-rw-r--r--resolve-pathname/modules/__tests__/resolvePathname-test.js89
-rw-r--r--resolve-pathname/modules/index.js75
-rw-r--r--resolve-pathname/package-lock.json9342
-rw-r--r--resolve-pathname/package.json37
-rw-r--r--resolve-pathname/rollup.config.js71
-rw-r--r--stylis.js/.github/workflows/main.yaml24
-rw-r--r--stylis.js/.gitignore18
-rw-r--r--stylis.js/LICENSE21
-rw-r--r--stylis.js/README.md138
-rw-r--r--stylis.js/docs/CNAME1
-rw-r--r--stylis.js/docs/assets/logo.svg1
-rw-r--r--stylis.js/docs/assets/stylesheet.css22
-rw-r--r--stylis.js/docs/index.html90
-rw-r--r--stylis.js/index.js7
-rw-r--r--stylis.js/package.json161
-rw-r--r--stylis.js/script/build.js34
-rw-r--r--stylis.js/script/setup.js10
-rw-r--r--stylis.js/src/Enum.js20
-rw-r--r--stylis.js/src/Middleware.js107
-rw-r--r--stylis.js/src/Parser.js174
-rw-r--r--stylis.js/src/Prefixer.js114
-rw-r--r--stylis.js/src/Serializer.js34
-rw-r--r--stylis.js/src/Tokenizer.js218
-rw-r--r--stylis.js/src/Utility.js109
-rw-r--r--stylis.js/test/Middleware.js82
-rw-r--r--stylis.js/test/Parser.js930
-rw-r--r--stylis.js/test/Prefixer.js178
-rw-r--r--stylis.js/test/Tokenizer.js9
-rw-r--r--tiny-invariant/.babelrc12
-rw-r--r--tiny-invariant/.flowconfig11
-rw-r--r--tiny-invariant/.gitignore17
-rw-r--r--tiny-invariant/.prettierrc7
-rw-r--r--tiny-invariant/.travis.yml13
-rw-r--r--tiny-invariant/README.md88
-rw-r--r--tiny-invariant/flow-typed/npm/@babel/core_vx.x.x.js305
-rw-r--r--tiny-invariant/flow-typed/npm/@babel/preset-env_vx.x.x.js144
-rw-r--r--tiny-invariant/flow-typed/npm/@babel/preset-flow_vx.x.x.js32
-rw-r--r--tiny-invariant/flow-typed/npm/babel-cli_vx.x.x.js108
-rw-r--r--tiny-invariant/flow-typed/npm/babel-core_vx.x.x.js33
-rw-r--r--tiny-invariant/flow-typed/npm/babel-jest_vx.x.x.js32
-rw-r--r--tiny-invariant/flow-typed/npm/babel-plugin-transform-es2015-modules-commonjs_vx.x.x.js32
-rw-r--r--tiny-invariant/flow-typed/npm/babel-preset-env_vx.x.x.js88
-rw-r--r--tiny-invariant/flow-typed/npm/babel-preset-flow_vx.x.x.js32
-rw-r--r--tiny-invariant/flow-typed/npm/flow-bin_v0.x.x.js6
-rw-r--r--tiny-invariant/flow-typed/npm/jest_v23.x.x.js1146
-rw-r--r--tiny-invariant/flow-typed/npm/prettier_v1.x.x.js178
-rw-r--r--tiny-invariant/flow-typed/npm/rimraf_v2.x.x.js18
-rw-r--r--tiny-invariant/flow-typed/npm/rollup-plugin-babel_vx.x.x.js74
-rw-r--r--tiny-invariant/flow-typed/npm/rollup-plugin-replace_vx.x.x.js46
-rw-r--r--tiny-invariant/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js38
-rw-r--r--tiny-invariant/flow-typed/npm/rollup_vx.x.x.js46
-rw-r--r--tiny-invariant/package.json44
-rw-r--r--tiny-invariant/rollup.config.js55
-rw-r--r--tiny-invariant/src/index.js22
-rw-r--r--tiny-invariant/test/bundle-size.spec.js49
-rw-r--r--tiny-invariant/test/index.spec.js15
-rw-r--r--tiny-invariant/yarn.lock4662
-rw-r--r--tiny-warning/.babelrc12
-rw-r--r--tiny-warning/.flowconfig11
-rw-r--r--tiny-warning/.gitignore17
-rw-r--r--tiny-warning/.prettierrc7
-rw-r--r--tiny-warning/.travis.yml13
-rw-r--r--tiny-warning/README.md68
-rw-r--r--tiny-warning/flow-typed/npm/@babel/core_vx.x.x.js305
-rw-r--r--tiny-warning/flow-typed/npm/@babel/preset-env_vx.x.x.js144
-rw-r--r--tiny-warning/flow-typed/npm/@babel/preset-flow_vx.x.x.js32
-rw-r--r--tiny-warning/flow-typed/npm/flow-bin_v0.x.x.js6
-rw-r--r--tiny-warning/flow-typed/npm/jest_v23.x.x.js1146
-rw-r--r--tiny-warning/flow-typed/npm/prettier_v1.x.x.js178
-rw-r--r--tiny-warning/flow-typed/npm/rimraf_v2.x.x.js18
-rw-r--r--tiny-warning/flow-typed/npm/rollup-plugin-babel_vx.x.x.js74
-rw-r--r--tiny-warning/flow-typed/npm/rollup-plugin-replace_vx.x.x.js46
-rw-r--r--tiny-warning/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js38
-rw-r--r--tiny-warning/flow-typed/npm/rollup_vx.x.x.js46
-rw-r--r--tiny-warning/package.json44
-rw-r--r--tiny-warning/rollup.config.js55
-rw-r--r--tiny-warning/src/index.js15
-rw-r--r--tiny-warning/test/bundle-size.spec.js45
-rw-r--r--tiny-warning/test/index.spec.js30
-rw-r--r--tiny-warning/yarn.lock4414
-rw-r--r--value-equal/.eslintrc7
-rw-r--r--value-equal/.gitignore5
-rw-r--r--value-equal/.prettierignore1
-rw-r--r--value-equal/.size-snapshot.json26
-rw-r--r--value-equal/.travis.yml27
-rw-r--r--value-equal/LICENSE21
-rw-r--r--value-equal/README.md54
-rw-r--r--value-equal/index.js7
-rw-r--r--value-equal/jest.config.js19
-rw-r--r--value-equal/modules/.babelrc3
-rw-r--r--value-equal/modules/__tests__/.eslintrc5
-rw-r--r--value-equal/modules/__tests__/array-test.js15
-rw-r--r--value-equal/modules/__tests__/boolean-test.js29
-rw-r--r--value-equal/modules/__tests__/date-test.js17
-rw-r--r--value-equal/modules/__tests__/number-test.js29
-rw-r--r--value-equal/modules/__tests__/object-test.js31
-rw-r--r--value-equal/modules/__tests__/string-test.js31
-rw-r--r--value-equal/modules/__tests__/undefined-and-null-test.js28
-rw-r--r--value-equal/modules/index.js36
-rw-r--r--value-equal/package-lock.json9322
-rw-r--r--value-equal/package.json37
-rw-r--r--value-equal/rollup.config.js71
3647 files changed, 420038 insertions, 90 deletions
diff --git a/@emotion/is-prop-valid/index.js b/@emotion/is-prop-valid/index.js
new file mode 100644
index 0000000..46896ae
--- /dev/null
+++ b/@emotion/is-prop-valid/index.js
@@ -0,0 +1,23 @@
+/**
+ * too short code to add a new project as a dependency
+ * instead we are taken from the compiled version of
+ * https://github.com/emotion-js/emotion/tree/23f43ab9f24d44219b0b007a00f4ac681fe8712e/packages/is-prop-valid
+ */
+
+function memoize(fn) {
+ var cache = Object.create(null);
+ return function (arg) {
+ if (cache[arg] === undefined) cache[arg] = fn(arg);
+ return cache[arg];
+ };
+}
+
+var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/;
+
+var isPropValid = /* #__PURE__ */ memoize(function (prop) {
+ return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111
+ && prop.charCodeAt(1) === 110
+ && prop.charCodeAt(2) < 91;
+});
+
+export default isPropValid;
diff --git a/@linaria/.all-contributorsrc b/@linaria/.all-contributorsrc
new file mode 100644
index 0000000..a40c293
--- /dev/null
+++ b/@linaria/.all-contributorsrc
@@ -0,0 +1,271 @@
+{
+ "projectName": "linaria",
+ "projectOwner": "callstack",
+ "files": [
+ "README.md"
+ ],
+ "imageSize": 100,
+ "commit": false,
+ "contributors": [
+ {
+ "login": "zamotany",
+ "name": "Paweł Trysła",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/17573635?v=4",
+ "profile": "https://twitter.com/_zamotany",
+ "contributions": [
+ "code",
+ "doc",
+ "ideas"
+ ]
+ },
+ {
+ "login": "satya164",
+ "name": "Satyajit Sahoo",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/1174278?v=4",
+ "profile": "https://medium.com/@satya164",
+ "contributions": [
+ "code",
+ "doc",
+ "ideas"
+ ]
+ },
+ {
+ "login": "thymikee",
+ "name": "Michał Pierzchała",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/5106466?v=4",
+ "profile": "https://github.com/thymikee",
+ "contributions": [
+ "code",
+ "doc",
+ "ideas"
+ ]
+ },
+ {
+ "login": "AgtLucas",
+ "name": "Lucas",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/1909761?v=4",
+ "profile": "https://lcs.sh",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "pronevich",
+ "name": "Alexey Pronevich",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/680439?v=4",
+ "profile": "https://github.com/pronevich",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "wojteg1337",
+ "name": "Wojtek Szafraniec",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/18573330?v=4",
+ "profile": "https://github.com/wojteg1337",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Tushkiz",
+ "name": "Tushar Sonawane",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/1854763?v=4",
+ "profile": "https://twitter.com/tushkiz",
+ "contributions": [
+ "doc",
+ "example"
+ ]
+ },
+ {
+ "login": "ferrannp",
+ "name": "Ferran Negre",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/774577?v=4",
+ "profile": "http://twitter.com/ferrannp",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "jukben",
+ "name": "Jakub Beneš",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/8135252?v=4",
+ "profile": "https://jukben.cz",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "oBusk",
+ "name": "Oscar Busk",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/13413409?v=4",
+ "profile": "https://github.com/oBusk",
+ "contributions": [
+ "bug",
+ "code"
+ ]
+ },
+ {
+ "login": "Trancever",
+ "name": "Dawid",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/18584155?v=4",
+ "profile": "https://github.com/Trancever",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "Esemesek",
+ "name": "Kacper Wiszczuk",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/9092510?v=4",
+ "profile": "https://twitter.com/esemesek",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "que-etc",
+ "name": "Denis Rul",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/2401842?v=4",
+ "profile": "https://github.com/que-etc",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "johanholmerin",
+ "name": "Johan Holmerin",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/7433263?v=4",
+ "profile": "https://github.com/johanholmerin",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "pgilad",
+ "name": "Gilad Peleg",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/4533329?v=4",
+ "profile": "https://www.giladpeleg.com/",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "giuseppeg",
+ "name": "Giuseppe",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/711311?v=4",
+ "profile": "http://giuseppe.pizza",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "silvenon",
+ "name": "Matija Marohnić",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/471278?v=4",
+ "profile": "https://silvenon.com",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "Schubidu",
+ "name": "Stefan Schult",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/120432?v=4",
+ "profile": "http://schultstefan.de",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "wardpeet",
+ "name": "Ward Peeters",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/1120926?v=4",
+ "profile": "http://www.coding-tech.be",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "radoslaw-medryk",
+ "name": "radoslaw-medryk",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/43260833?v=4",
+ "profile": "https://github.com/radoslaw-medryk",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "dr2009",
+ "name": "杨兴洲",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/8262650?v=4",
+ "profile": "http://dr2009.com",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "hinok",
+ "name": "Dawid Karabin",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/1313605?v=4",
+ "profile": "https://github.com/hinok",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "Anber",
+ "name": "Anton Evzhakov",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/148258?v=4",
+ "profile": "http://twitter.com/anber_ru",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "chrisabrams",
+ "name": "Chris Abrams",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/527740?s=460&v=4",
+ "profile": "https://github.com/chrisabrams",
+ "contributions": [
+ "code",
+ "doc",
+ "ideas"
+ ]
+ },
+ {
+ "login": "Jayphen",
+ "name": "Jayphen",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/329184?v=4",
+ "profile": "http://hyperlab.se",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "bolasblack",
+ "name": "c4605",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/382011?v=4",
+ "profile": "https://github.com/bolasblack",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "koba04",
+ "name": "Toru Kobayashi",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/250407?v=4",
+ "profile": "https://koba04.com/",
+ "contributions": [
+ "code"
+ ]
+ }
+ ],
+ "repoType": "github",
+ "contributorsPerLine": 7
+}
diff --git a/@linaria/.circleci/comment-artifacts.sh b/@linaria/.circleci/comment-artifacts.sh
new file mode 100644
index 0000000..82f2098
--- /dev/null
+++ b/@linaria/.circleci/comment-artifacts.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+URL="https://callstack-github-bot.herokuapp.com/comment"
+LINK="https://$CIRCLE_BUILD_NUM-92112844-gh.circle-artifacts.com/$CIRCLE_NODE_INDEX/coverage/lcov-report/index.html"
+TEMPLATE="Hey @{{user.login}}, thank you for your pull request 🤗.\nThe coverage report for this branch can be viewed [here]($LINK)."
+
+read -r -d '' DATA << EOM
+{
+ "pull_request": "$CIRCLE_PULL_REQUEST",
+ "template": "$TEMPLATE",
+ "test": {
+ "type": "string",
+ "data": "The coverage report for this branch can be viewed"
+ },
+ "update": true
+}
+EOM
+
+curl \
+ -H "Content-Type: application/json" \
+ -d "$DATA" \
+ -X POST $URL
diff --git a/@linaria/.circleci/config.yml b/@linaria/.circleci/config.yml
new file mode 100644
index 0000000..804af9a
--- /dev/null
+++ b/@linaria/.circleci/config.yml
@@ -0,0 +1,110 @@
+version: 2.1
+
+executors:
+ node-v14:
+ docker:
+ - image: circleci/node:14
+ working_directory: ~/linaria
+ node-v10:
+ docker:
+ - image: circleci/node:10
+ working_directory: ~/linaria
+commands:
+ install-dependencies:
+ steps:
+ - checkout
+ - attach_workspace:
+ at: ~/linaria
+ - restore_cache:
+ keys:
+ - dependencies-{{ checksum "package.json" }}
+ - dependencies-
+ - restore_cache:
+ keys:
+ - dependencies-website-{{ checksum "website/package.json" }}
+ - dependencies-website-
+ - run: |
+ yarn install --frozen-lockfile
+ - save_cache:
+ key: dependencies-{{ checksum "package.json" }}
+ paths: node_modules
+ - save_cache:
+ key: dependencies-website-{{ checksum "website/package.json" }}
+ paths: website/node_modules
+ - persist_to_workspace:
+ root: .
+ paths: .
+ lint-and-typecheck:
+ steps:
+ - attach_workspace:
+ at: ~/linaria
+ - run: |
+ yarn test:dts
+ yarn typecheck
+ yarn lint
+ unit-tests:
+ steps:
+ - attach_workspace:
+ at: ~/linaria
+ - run: |
+ yarn test
+ unit-tests-and-coverage:
+ steps:
+ - attach_workspace:
+ at: ~/linaria
+ - run: |
+ yarn test:coverage
+ cat ./packages/*/coverage/lcov.info | ./node_modules/.bin/codecov
+ bash .circleci/comment-artifacts.sh
+ - store_artifacts:
+ path: coverage
+ destination: coverage
+ lint-website:
+ steps:
+ - attach_workspace:
+ at: ~/linaria
+ - run: |
+ yarn prepare
+ yarn --cwd website lint:css
+jobs:
+ install-dependencies:
+ executor: node-v14
+ steps:
+ - install-dependencies
+ install-dependencies-v10:
+ executor: node-v10
+ steps:
+ - install-dependencies
+ lint-and-typecheck:
+ executor: node-v14
+ steps:
+ - lint-and-typecheck
+ lint-website:
+ executor: node-v14
+ steps:
+ - lint-website
+ unit-tests-and-coverage:
+ executor: node-v14
+ steps:
+ - unit-tests-and-coverage
+ unit-tests-node-v10:
+ executor: node-v10
+ steps:
+ - unit-tests
+workflows:
+ multiple_builds:
+ jobs:
+ - install-dependencies-v10
+ - install-dependencies
+ - lint-and-typecheck:
+ requires:
+ - install-dependencies
+ - lint-website:
+ requires:
+ - install-dependencies
+ - unit-tests-and-coverage:
+ requires:
+ - install-dependencies
+ - unit-tests-node-v10:
+ requires:
+ - install-dependencies-v10
diff --git a/@linaria/.codecov.yml b/@linaria/.codecov.yml
new file mode 100644
index 0000000..7745481
--- /dev/null
+++ b/@linaria/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+ precision: 2
+ round: down
+ range: 70...100
+
+ status:
+ project: true
+ patch: true
+ changes: false
+
+comment: false
diff --git a/@linaria/.editorconfig b/@linaria/.editorconfig
new file mode 100644
index 0000000..1f22710
--- /dev/null
+++ b/@linaria/.editorconfig
@@ -0,0 +1,21 @@
+# EditorConfig helps developers define and maintain consistent
+# coding styles between different editors and IDEs
+# editorconfig.org
+
+root = true
+
+
+[*]
+
+# change these settings to your own preference
+indent_style = space
+indent_size = 2
+
+# we recommend you to keep these unchanged
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/@linaria/.eslintignore b/@linaria/.eslintignore
new file mode 100644
index 0000000..3810940
--- /dev/null
+++ b/@linaria/.eslintignore
@@ -0,0 +1,10 @@
+__fixtures__/
+coverage/
+lib/
+esm/
+packages/*/types/
+dist/
+build/
+node_modules/
+vendor/
+examples/
diff --git a/@linaria/.eslintrc b/@linaria/.eslintrc
new file mode 100644
index 0000000..14e1df2
--- /dev/null
+++ b/@linaria/.eslintrc
@@ -0,0 +1,29 @@
+{
+ "extends": "@callstack",
+ "rules": {
+ "no-redeclare": "off",
+ "jest/no-try-expect": "off",
+ "global-require": "off",
+ "react-native/no-raw-text": "off",
+ "react-native/no-inline-styles": "off",
+ "import/no-extraneous-dependencies": [
+ "error",
+ {
+ "devDependencies": [
+ "**/*.test.{js,ts,jsx,tsx}",
+ "src/{babel,server}/**/*.{js,ts,jsx,tsx}"
+ ]
+ }
+ ]
+ },
+ "globals": {
+ "JSX": "readonly"
+ },
+ "settings": {
+ "import/resolver": {
+ "node": {
+ "extensions": [".js", ".jsx", ".ts", ".tsx"]
+ }
+ }
+ }
+}
diff --git a/@linaria/.flowconfig b/@linaria/.flowconfig
new file mode 100644
index 0000000..78d189a
--- /dev/null
+++ b/@linaria/.flowconfig
@@ -0,0 +1,14 @@
+[ignore]
+
+[include]
+
+[libs]
+
+[lints]
+
+[options]
+emoji=true
+
+module.name_mapper='^linaria' -> '<PROJECT_ROOT>/src'
+
+[strict]
diff --git a/@linaria/.github/ISSUE_TEMPLATE/bug_report.md b/@linaria/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..90f5efc
--- /dev/null
+++ b/@linaria/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,38 @@
+---
+name: '🐛 Report a bug'
+about: 'Report a reproducible bug or reproducible regression.'
+labels: 'bug report 🦗, needs: triage 🏷, needs: complete repro 🖥️'
+
+---
+
+## Environment
+
+<!--
+All necessary environmental info that will help triage this
+-->
+
+<!--
+Especially include:
+-->
+
+- Linaria version:
+- Bundler (+ version):
+- Node.js version:
+- OS:
+
+## Description
+
+<!--
+Describe your issue in detail.
+Include screenshots if needed.
+If this is a regression, let us know.
+-->
+
+## Reproducible Demo
+
+<!--
+ Let us know how to reproduce the issue.
+ Include a code sample or share a project that reproduces the issue.
+ Please include you tooling setup eg. webpack config for webpack
+ Please follow the guidelines for providing a minimal example: https://stackoverflow.com/help/mcve.
+-->
diff --git a/@linaria/.github/ISSUE_TEMPLATE/config.yml b/@linaria/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..9748b3d
--- /dev/null
+++ b/@linaria/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: 🤔 Questions and Help
+ url: https://discord.gg/fAbHe67
+ about: Reach the community on discord if you need help or have a question.
diff --git a/@linaria/.github/ISSUE_TEMPLATE/enhancement_request.md b/@linaria/.github/ISSUE_TEMPLATE/enhancement_request.md
new file mode 100644
index 0000000..b85bfa0
--- /dev/null
+++ b/@linaria/.github/ISSUE_TEMPLATE/enhancement_request.md
@@ -0,0 +1,21 @@
+---
+name: '💬 Enhancement proposal'
+about: Suggest an possible improvement of existing features.
+labels: 'enhancement: proposal 💬'
+---
+
+## Describe the enhancement
+
+<!-- Describe what you would like to improve -->
+
+## Motivation
+
+<!-- Describe what problem the improvement solves -->
+
+## Possible implementations
+
+<!-- Describe how the improvement could be implemented -->
+
+## Related Issues
+
+<!-- Link related issues here -->
diff --git a/@linaria/.github/ISSUE_TEMPLATE/feature_request.md b/@linaria/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..5dd29de
--- /dev/null
+++ b/@linaria/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,21 @@
+---
+name: '💬 Feature proposal'
+about: Suggest introduction of a new feature.
+labels: 'feature: proposal 💬'
+---
+
+## Describe the feature
+
+<!-- Describe what you would like to introduce -->
+
+## Motivation
+
+<!-- Describe what problem the feature solves -->
+
+## Possible implementations
+
+<!-- Describe how the feature could be implemented -->
+
+## Related Issues
+
+<!-- Link related issues here -->
diff --git a/@linaria/.github/PULL_REQUEST_TEMPLATE.md b/@linaria/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..1ecdf9b
--- /dev/null
+++ b/@linaria/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,31 @@
+<!--
+Thanks for submitting a pull request!
+Please provide enough information so that others can review your pull request.
+Motivation and Test plan are mandatory.
+-->
+
+## Motivation
+
+<!--
+If pull request address existing issues, link the issues, thats all.
+
+If issue for this soled problem does not exist,
+please share your motivation and describe the problem.
+We may ask you to open issue to discuss the problem first.
+-->
+
+## Summary
+
+<!--
+Explain how your implementation works and your thoughts behind the solution.
+It will help maintainers to review your PR.
+You can skip it if PR is trivial.
+-->
+
+## Test plan
+
+<!--
+Demonstrate the code is solid.
+Example: The exact commands you ran and their output.
+Write down steps on how maintainers can test your PR.
+-->
diff --git a/@linaria/.github/labels.json b/@linaria/.github/labels.json
new file mode 100644
index 0000000..222da39
--- /dev/null
+++ b/@linaria/.github/labels.json
@@ -0,0 +1,421 @@
+{
+ "labels": {
+ "babel-plugin": {
+ "name": "babel-plugin",
+ "description": "",
+ "colour": "006b75"
+ },
+ "bug-report": {
+ "name": "bug report 🦗",
+ "description": "Issue is probably a bug, but it needs to be checked",
+ "colour": "f8c4c4"
+ },
+ "bug": {
+ "name": "bug 🐛",
+ "description": "Issue is a confirmed bug",
+ "colour": "ee0701"
+ },
+ "bundler-parcel": {
+ "name": "bundler: parcel 🎁",
+ "description": "Issue is related to parcel bundler",
+ "colour": "e5e5e5"
+ },
+ "bundler-rollup": {
+ "name": "bundler: rollup 🗞️",
+ "description": "Issue is related to rollup bundler",
+ "colour": "e5e5e5"
+ },
+ "bundler-webpack": {
+ "name": "bundler: webpack 📦",
+ "description": "Issue is related to webpack bundler",
+ "colour": "e5e5e5"
+ },
+ "cat-documentation": {
+ "name": "cat: documentation 📖",
+ "description": "Work focused on writing documentation",
+ "colour": "f9acca"
+ },
+ "cat-extend-support": {
+ "name": "cat: extend support 🤝",
+ "description": "Support for a new bundler/platform",
+ "colour": "f9acca"
+ },
+ "cat-extend-syntax": {
+ "name": "cat: extend syntax ✍",
+ "description": "Support for a new syntax",
+ "colour": "f9acca"
+ },
+ "cat-improve-publishing": {
+ "name": "cat: improve publishing 🚢",
+ "description": "Issues about improvement of publishing libs with Linaria",
+ "colour": "f9acca"
+ },
+ "cat-modules-aliasing": {
+ "name": "cat: modules aliasing 🔗",
+ "description": "Issue related to modules aliasing",
+ "colour": "f9acca"
+ },
+ "cat-monorepo": {
+ "name": "cat: monorepo 🔱",
+ "description": "Issues related to usage of linaria in monorepo",
+ "colour": "f9acca"
+ },
+ "cat-performance": {
+ "name": "cat: performance 🚀",
+ "description": "Issue is related to performance",
+ "colour": "f9acca"
+ },
+ "cat-testing": {
+ "name": "cat: testing 🛡",
+ "description": "Issue related to testing components",
+ "colour": "f9acca"
+ },
+ "cat-typings": {
+ "name": "cat: typings 👮",
+ "description": "Typescript types related issues",
+ "colour": "f9acca"
+ },
+ "core-team": {
+ "name": "core team 🧬",
+ "description": "Issues reserved for the core team",
+ "colour": "fef2c0"
+ },
+ "duplicate": {
+ "name": "duplicate",
+ "description": "Issue is a duplicate of another issue",
+ "colour": "cccccc"
+ },
+ "enhancement-approved": {
+ "name": "enhancement: approved ✅",
+ "description": "Improvement of the current behaviour that has been approved",
+ "colour": "1d76db"
+ },
+ "enhancement-proposal": {
+ "name": "enhancement: proposal 💬",
+ "description": "Improvement of current behaviour that needs to be discussed",
+ "colour": "1d76db"
+ },
+ "enhancement-rejected": {
+ "name": "enhancement: rejected ❌",
+ "description": "Improvement of the current behaviour that has been rejected",
+ "colour": "1d76db"
+ },
+ "feature-approved": {
+ "name": "feature: approved ✅",
+ "description": "New feature that has been approved",
+ "colour": "1d3082"
+ },
+ "feature-proposal": {
+ "name": "feature: proposal 💬",
+ "description": "New feature proposal that needs to be discussed",
+ "colour": "1d3082"
+ },
+ "feature-rejected": {
+ "name": "feature: rejected ❌",
+ "description": "New feature that has been rejected",
+ "colour": "1d3082"
+ },
+ "good-first-issue": {
+ "name": "good first issue 😊",
+ "description": "It is a good issue for new comers",
+ "colour": "5319e7"
+ },
+ "greenkeeper": {
+ "name": "greenkeeper",
+ "description": "",
+ "colour": "00c775"
+ },
+ "hacktoberfest": {
+ "name": "hacktoberfest 🍺",
+ "description": "https://hacktoberfest.digitalocean.com/",
+ "colour": "FF8C00"
+ },
+ "needs-complete-repro": {
+ "name": "needs: complete repro 🖥️",
+ "description": "Issue need to have complete repro provided",
+ "colour": "b2ffbb"
+ },
+ "needs-help": {
+ "name": "needs: help 🆘",
+ "description": "Help is needed",
+ "colour": "b2ffbb"
+ },
+ "needs-investigation": {
+ "name": "needs: investigation 🔎",
+ "description": "Issue has to be investigated for reason or solution",
+ "colour": "b2ffbb"
+ },
+ "needs-more-info": {
+ "name": "needs: more info ℹ",
+ "description": "Not enough information was provided to work on issue",
+ "colour": "b2ffbb"
+ },
+ "needs-response": {
+ "name": "needs: response 📩",
+ "description": "Response from author/commenters is requested",
+ "colour": "b2ffbb"
+ },
+ "needs-to-be-grouped": {
+ "name": "needs: to be grouped",
+ "description": "Issue needs to be grouped with other similar issues",
+ "colour": "b2ffbb"
+ },
+ "needs-triage": {
+ "name": "needs: triage 🏷",
+ "description": "Issue needs to be checked and prioritized",
+ "colour": "b2ffbb"
+ },
+ "platform-electron": {
+ "name": "platform: electron 🛠️",
+ "description": "Issue related to electron platform",
+ "colour": "00e5e5"
+ },
+ "platform-next.js": {
+ "name": "platform: next.js 🛠️",
+ "description": "Issue related to next.js",
+ "colour": "00e5e5"
+ },
+ "platform-react": {
+ "name": "platform: react 🛠️",
+ "description": "Issue related to react",
+ "colour": "00e5e5"
+ },
+ "platform-ssr": {
+ "name": "platform: ssr 🛠️",
+ "description": "Issue related to SSR",
+ "colour": "00e5e5"
+ },
+ "platform-vanilla": {
+ "name": "platform: vanilla 🛠️",
+ "description": "Issue related to vanilla css tags",
+ "colour": "00e5e5"
+ },
+ "platform-svelte": {
+ "name": "platform: svelte 🛠️",
+ "description": "Issue related to svelte",
+ "colour": "00e5e5"
+ },
+ "priority-critical": {
+ "name": "priority: critical ☢️",
+ "description": "Issue is a critical bug that affects most of the users",
+ "colour": "000000"
+ },
+ "priority-high": {
+ "name": "priority: high ⚠️",
+ "description": "Issue is important and should be prioritized among others",
+ "colour": "e093f7"
+ },
+ "priority-low": {
+ "name": "priority: low 📉",
+ "description": "Something nice to have",
+ "colour": "ebebeb"
+ },
+ "priority-medium": {
+ "name": "priority: medium 💻",
+ "description": "Issue is important but not the most important",
+ "colour": "ffb732"
+ },
+ "question": {
+ "name": "question ❔",
+ "description": "Question related to the library",
+ "colour": "f9acca"
+ },
+ "status-has-PR": {
+ "name": "status: has PR 😍",
+ "description": "Issue has opened PR",
+ "colour": "feffa5"
+ },
+ "status-in-progress": {
+ "name": "status: in progress 🚧",
+ "description": "Someone is working on the issue",
+ "colour": "feffa5"
+ },
+ "status-merged": {
+ "name": "status: merged 🎉",
+ "description": "Solution was merged",
+ "colour": "feffa5"
+ },
+ "status-up-for-grabs": {
+ "name": "status: up for grabs 🙏",
+ "description": "research is done and issue is ready to be grabbed",
+ "colour": "feffa5"
+ },
+ "status-wontfix": {
+ "name": "status: wontfix ⚰",
+ "description": "Issue will not be fixed",
+ "colour": "feffa5"
+ },
+ "workaround-exist": {
+ "name": "workaround exist",
+ "description": "Workaround for the issue exist",
+ "colour": "70f488"
+ },
+ "skip-labeling": {
+ "name": "skip autolabeling",
+ "description": "Use it to disable auto laberer bot for an issue/pr",
+ "colour": "D9BBF9"
+ }
+ },
+ "issue": {
+ "bundler-rollup": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/rollup/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/rollup/i"
+ }
+ ]
+ },
+ "bundler-webpack": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/webpack/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/webpack/i"
+ }
+ ]
+ },
+ "bundler-parcel": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/parcel/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/parcel/i"
+ }
+ ]
+ },
+ "platform-svelte": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/svelte/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/svelte/i"
+ }
+ ]
+ },
+ "platform-next.js": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/next(\\.){0,1}js/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/next(\\.){0,1}js/i"
+ }
+ ]
+ },
+ "platform-ssr": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/(ssr)|(server)/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/(ssr)|(server)/i"
+ }
+ ]
+ },
+ "platform-electron": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/electron/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/electron/i"
+ }
+ ]
+ },
+ "cat-performance": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/(slow)|(build[\\s\\S]*time)|(time[\\s\\S]*build)(performance)/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/(slow)|(build[\\s\\S]*time)|(time[\\s\\S]*build)(performance)/i"
+ }
+ ]
+ },
+ "cat-testing": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/(test)|(jest)/i"
+ }
+ ]
+ },
+ "cat-monorepo": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/(monorepo)|(workspace)|(lerna)/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/(monorepo)|(workspace)|(lerna)/i"
+ }
+ ]
+ },
+ "cat-modules-aliasing": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/(alias)|(namemapper)/i"
+ },
+ {
+ "type": "descriptionMatches",
+ "pattern": "/(alias)|(namemapper)/i"
+ }
+ ]
+ },
+ "cat-typings": {
+ "requires": 1,
+ "conditions": [
+ {
+ "type": "titleMatches",
+ "pattern": "/typescript/i"
+ },
+ {
+ "type": "titleMatches",
+ "pattern": "/TS/"
+ }
+ ]
+ }
+ },
+ "issue_fallback": {
+ "fallbackActivationValue": 2,
+ "labels": [
+ "needs-triage"
+ ]
+ },
+ "pr": {},
+ "skip_labeling": "skip-labeling"
+} \ No newline at end of file
diff --git a/@linaria/.github/workflows/main.yml b/@linaria/.github/workflows/main.yml
new file mode 100644
index 0000000..b2b11fd
--- /dev/null
+++ b/@linaria/.github/workflows/main.yml
@@ -0,0 +1,21 @@
+name: labeler
+on:
+ issues:
+ types: [opened, edited, reopened]
+ pull_request:
+ types: [opened, edited, reopened, ready_for_review, synchronize]
+
+jobs:
+ labeler:
+ runs-on: ubuntu-latest
+ name: label issues and pull requests
+ steps:
+ - name: check-out-repository
+ uses: actions/checkout@v2
+
+ - name: labeler
+ uses: jayu/super-labeler-action@develop
+ env:
+ ACTIONS_STEP_DEBUG: ${{ secrets.ACTIONS_STEP_DEBUG }}
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/@linaria/.github/workflows/site-deploy.yml b/@linaria/.github/workflows/site-deploy.yml
new file mode 100644
index 0000000..c84bddd
--- /dev/null
+++ b/@linaria/.github/workflows/site-deploy.yml
@@ -0,0 +1,25 @@
+name: Build and Deploy
+on:
+ push:
+ branches:
+ - master
+jobs:
+ build-and-deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout 🛎️
+ uses: actions/checkout@v2.3.1
+ with:
+ persist-credentials: false
+
+ - name: Install and Build 🔧
+ run: |
+ yarn install --frozen-lockfile
+
+ - name: Deploy 🚀
+ uses: JamesIves/github-pages-deploy-action@3.7.1
+ with:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ BRANCH: gh-pages
+ FOLDER: website
+ CLEAN: true
diff --git a/@linaria/.gitignore b/@linaria/.gitignore
new file mode 100644
index 0000000..1192201
--- /dev/null
+++ b/@linaria/.gitignore
@@ -0,0 +1,70 @@
+### OS Junk ###
+.DS_Store
+*~
+
+### Node ###
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# generated files
+lib/
+esm/
+types/
+dist/
+build/
+tsconfig.tsbuildinfo
+
+.linaria-cache
diff --git a/@linaria/.prettierrc b/@linaria/.prettierrc
new file mode 100644
index 0000000..c6a1376
--- /dev/null
+++ b/@linaria/.prettierrc
@@ -0,0 +1,4 @@
+{
+ "trailingComma": "es5",
+ "singleQuote": true
+}
diff --git a/@linaria/.release-it.json b/@linaria/.release-it.json
new file mode 100644
index 0000000..80d9253
--- /dev/null
+++ b/@linaria/.release-it.json
@@ -0,0 +1,17 @@
+{
+ "git": {
+ "commitMessage": "chore: release %s",
+ "tagName": "v%s"
+ },
+ "github": {
+ "release": true
+ },
+ "plugins": {
+ "@release-it/conventional-changelog": {
+ "preset": "angular"
+ },
+ "release-it-lerna-changelog": {
+ "infile": "CHANGELOG.md"
+ }
+ }
+}
diff --git a/@linaria/.vscode/settings.json b/@linaria/.vscode/settings.json
new file mode 100644
index 0000000..9419f6c
--- /dev/null
+++ b/@linaria/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "typescript.tsdk": "website/node_modules/typescript/lib"
+}
diff --git a/@linaria/CHANGELOG.md b/@linaria/CHANGELOG.md
new file mode 100644
index 0000000..254e0c1
--- /dev/null
+++ b/@linaria/CHANGELOG.md
@@ -0,0 +1,131 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.11](https://github.com/callstack/linaria/compare/v3.0.0-beta.10...v3.0.0-beta.11) (2021-08-08)
+
+
+### Bug Fixes
+
+* **shaker:** string literals for addressing values in imported NS ([#815](https://github.com/callstack/linaria/issues/815)) ([8adf43e](https://github.com/callstack/linaria/commit/8adf43ec56b107c8017608ccc460d0ba8794c8ef))
+* **styled:** remove unnecessary core-js polyfills (fixes [#799](https://github.com/callstack/linaria/issues/799)) ([#814](https://github.com/callstack/linaria/issues/814)) ([6c3070a](https://github.com/callstack/linaria/commit/6c3070a47715022eb761567b8795f6918784ae4c))
+
+
+
+
+
+# [3.0.0-beta.10](https://github.com/callstack/linaria/compare/v3.0.0-beta.9...v3.0.0-beta.10) (2021-07-24)
+
+
+### Bug Fixes
+
+* **shaker:** use the last export statement instead of the 1st ([#804](https://github.com/callstack/linaria/issues/804)) ([b79584c](https://github.com/callstack/linaria/commit/b79584c292aaa50eb2a420b73434341419b01ff9))
+
+
+
+
+
+# [3.0.0-beta.9](https://github.com/callstack/linaria/compare/v3.0.0-beta.8...v3.0.0-beta.9) (2021-07-23)
+
+
+### Bug Fixes
+
+* **shaker:** keep exports if there are dependent code (fixes [#804](https://github.com/callstack/linaria/issues/804)) ([#807](https://github.com/callstack/linaria/issues/807)) ([4bb7744](https://github.com/callstack/linaria/commit/4bb77444a604581877a64d6f88dfac0bc04583f0))
+* **shaker:** support for "export * from …" ([#809](https://github.com/callstack/linaria/issues/809)) ([b06c1ba](https://github.com/callstack/linaria/commit/b06c1ba5f44ae7af23cf7793c13a2acfee1bf706))
+
+
+
+
+
+# [3.0.0-beta.8](https://github.com/callstack/linaria/compare/v3.0.0-beta.7...v3.0.0-beta.8) (2021-07-18)
+
+
+### Bug Fixes
+
+* **esbuild:** add missing resolveDir to support webfont bundling ([#789](https://github.com/callstack/linaria/issues/789)) ([45e5de0](https://github.com/callstack/linaria/commit/45e5de06cef880a3b3524e2fed5cec313903cc43))
+* **shaker:** named exports are removed (fixes [#800](https://github.com/callstack/linaria/issues/800)) ([#801](https://github.com/callstack/linaria/issues/801)) ([3421930](https://github.com/callstack/linaria/commit/3421930b26608b41a02f8b776562655d755a23b4))
+
+
+
+
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+
+### Bug Fixes
+
+* **shaker:** fix undefined imports in some cases ([#333](https://github.com/callstack/linaria/issues/333), [#761](https://github.com/callstack/linaria/issues/761)) ([#787](https://github.com/callstack/linaria/issues/787)) ([e374072](https://github.com/callstack/linaria/commit/e3740727447b2867a2cfe40f763bc88e72eb2503))
+* webpack resolve options ([#785](https://github.com/callstack/linaria/issues/785)) ([64b2b06](https://github.com/callstack/linaria/commit/64b2b06edd873d7db0f36ef25a4b9d8389808eb2))
+* **esbuild:** import esbuild correctly ([#783](https://github.com/callstack/linaria/issues/783)) ([a22522b](https://github.com/callstack/linaria/commit/a22522b0c91eefa12a10f67caf27ecb2954d8d1d))
+* **esbuild:** workaround to for esbuild compile options ([#784](https://github.com/callstack/linaria/issues/784)) ([ac47f43](https://github.com/callstack/linaria/commit/ac47f43d7d2f692ef57b12573fdacdde72c25e19))
+
+
+
+
+
+# [3.0.0-beta.6](https://github.com/callstack/linaria/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-06)
+
+
+### Bug Fixes
+
+* **rollup:** compliant vite ([#763](https://github.com/callstack/linaria/issues/763)) ([3966dcf](https://github.com/callstack/linaria/commit/3966dcf03919430a7054ee7d6cf54aeaa715413c))
+* **webpack:** hot reload fails after compile error (fixes [#762](https://github.com/callstack/linaria/issues/762)) ([#775](https://github.com/callstack/linaria/issues/775)) ([67fcd81](https://github.com/callstack/linaria/commit/67fcd8108f283f8ade23c68ad3fece8aee335bf1))
+
+
+### Features
+
+* **interop:** interop between Linaria and traditional CSS-in-JS libraries ([#776](https://github.com/callstack/linaria/issues/776)) ([0a5f5b4](https://github.com/callstack/linaria/commit/0a5f5b440506bfa24724d4a91e519c48d6f6c69b))
+* add esbuild integration ([#765](https://github.com/callstack/linaria/issues/765)) ([511a717](https://github.com/callstack/linaria/commit/511a7178fd9c77fb971d392067b0f7ea8fcd30a4))
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+
+### Bug Fixes
+
+* **shaker:** typescript enums support ([#761](https://github.com/callstack/linaria/issues/761)) ([#764](https://github.com/callstack/linaria/issues/764)) ([6907e22](https://github.com/callstack/linaria/commit/6907e2280a2ab8ee014b5d02b1169714ccac9d66))
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+
+### Bug Fixes
+
+* **cli:** cannot find module '../lib/cli' ([#753](https://github.com/callstack/linaria/issues/753)) ([#754](https://github.com/callstack/linaria/issues/754)) ([fd7a09b](https://github.com/callstack/linaria/commit/fd7a09b4d4c7265e631b1d9c153362c87ed4132c))
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+
+### Bug Fixes
+
+* **core,react:** make IE 11 compatible (fixes [#746](https://github.com/callstack/linaria/issues/746)) ([#750](https://github.com/callstack/linaria/issues/750)) ([922df95](https://github.com/callstack/linaria/commit/922df9576a430cdfe9b27aed5dc45c4f75917607))
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+
+### Bug Fixes
+
+* **core:** remove unnecessary spread operators from css and cx ([#746](https://github.com/callstack/linaria/issues/746)) ([#749](https://github.com/callstack/linaria/issues/749)) ([de23a09](https://github.com/callstack/linaria/commit/de23a0926c2583db01e7df5ea9a134f5910f96a1))
+* Import custom identifier called css with error "Cannot find module 'linaria'" [#739](https://github.com/callstack/linaria/issues/739) ([#740](https://github.com/callstack/linaria/issues/740)) ([07fb381](https://github.com/callstack/linaria/commit/07fb38131c9dec406dcca72f45638561c815e824))
+* loadOptions text regex ([#728](https://github.com/callstack/linaria/issues/728)) ([34ca3e5](https://github.com/callstack/linaria/commit/34ca3e5f211b65c14c2bf4efabb7065f7109da23))
+* resolve output filename relative to source root ([#733](https://github.com/callstack/linaria/issues/733)) ([c606b3f](https://github.com/callstack/linaria/commit/c606b3f9340f498e104905a954393df6fd48cb73))
+
+
+### Features
+
+* **babel:** expose CSS extraction from AST logic ([#737](https://github.com/callstack/linaria/issues/737)) ([f049a11](https://github.com/callstack/linaria/commit/f049a119ef70346340676ab6a397ad6358e5f39b))
diff --git a/@linaria/CODE_OF_CONDUCT.md b/@linaria/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..8887707
--- /dev/null
+++ b/@linaria/CODE_OF_CONDUCT.md
@@ -0,0 +1,73 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, gender identity and expression, level of experience,
+nationality, personal appearance, race, religion, or sexual identity and
+orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+ advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at [oss@callstack.io](mailto:oss@callstack.io). All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct/
+
+[homepage]: https://www.contributor-covenant.org
diff --git a/@linaria/CONTRIBUTING.md b/@linaria/CONTRIBUTING.md
new file mode 100644
index 0000000..4679bd1
--- /dev/null
+++ b/@linaria/CONTRIBUTING.md
@@ -0,0 +1,133 @@
+# Contributing to Linaria
+
+## [Code of Conduct](/CODE_OF_CONDUCT.md)
+
+We want this community to be friendly and respectful to each other. Please read [the full text](/CODE_OF_CONDUCT.md) so that you can understand what actions will and will not be tolerated.
+
+## Our Development Process
+
+The core team works directly on GitHub and all work is public.
+
+### Development workflow
+
+> **Working on your first pull request?** You can learn how from this *free* series: [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
+
+1. Fork the repo and create your branch from `master` (a guide on [how to fork a repository](https://help.github.com/articles/fork-a-repo/)).
+
+1. Linaria uses [Yarn](https://yarnpkg.com/en/) for running development scripts. If you haven't already done so, please [install yarn](https://yarnpkg.com/en/docs/install).
+
+1. Run `yarn bootstrap` to setup the development environment.
+
+1. When working on the code, you can use the watch mode to watch and compiles changed files:
+
+ ```sh
+ yarn watch
+ ```
+
+1. If you've added code that should be tested, add tests.
+
+1. You can test the changes you are making in our website located under the `website/` folder in the repo.
+
+1. If you've changed APIs, remember to update the documentation under `docs/`.
+
+### Working on the website
+
+If you are making changes to the website, test the website folder and run the server to check if your changes are being displayed accurately. To run the development server with live reloading, run:
+
+```sh
+yarn website start
+```
+
+### Commit message convention
+
+We follow the [conventional commits specification](https://www.conventionalcommits.org/en) for our commit messages:
+
+* `fix`: bug fixes, e.g. fix wrong classname generated by babel plugin.
+* `feat`: new features, e.g. add support for a config file.
+* `refactor`: code refactor, e.g. split the babel plugin into multiple visitors.
+* `docs`: changes into documentation, e.g. add usage example for styled tag.
+* `test`: adding or updating tests, eg unit, snapshot testing.
+* `chore`: tooling changes, e.g. change the eslint config.
+* `BREAKING CHANGE`: for changes that break existing usage, e.g. change the API or behaviour.
+
+Our pre-commit hooks verify that your commit message matches this format when committing. If you are working on some in progress commits and don't care about the pre-commit hook, pass the `--no-verify` (`-n`) flag to git when committing (e.g. `git commit -n -m "wip"`).
+
+### Linting and tests
+
+We use `flow` for type checking, `eslint` with `prettier` for linting and formatting the code, and `jest` for testing. Our pre-commit hooks verify that the linter and tests pass when commiting. You can also run the following commands manually:
+
+* `yarn flow`: run flow on all files.
+* `yarn typescript`: run tests for typescript definitions.
+* `yarn lint`: lint files with eslint and prettier.
+* `yarn test`: run unit tests with jest.
+* `yarn test:integration`: run integration tests with jest and puppeteer.
+
+### Sending a pull request
+
+When you're sending a pull request:
+
+* Prefer small pull requests focused on one change.
+* Verify that `flow`, `eslint` and all tests are passing.
+* Preview the documentation to make sure it looks good.
+* Follow the pull request template when opening a pull request.
+
+## How to try a development build of Linaria in a project
+
+To link `linaria` on the command line to local copy in a development build:
+
+```sh
+cd /path/to/your/linaria_clone/
+yarn
+yarn link
+cd /path/to/test_project/
+yarn link linaria
+```
+
+To unlink it:
+
+```sh
+yarn unlink linaria
+```
+
+### Debugging and deep dive into babel plugin
+
+To understand what is actually going in under the hood of Linaria we recommend to first read the top-level [How it works](/docs/HOW_IT_WORKS.md).
+Then you can run Linaria in debug mode for a specific file from you project and see step-by-step logs informing what is happening.
+
+```sh
+DEBUG=linaria* LINARIA_LOG=debug npx babel -d dist PATH_TO_COMPONENT
+```
+
+> In example we use `npx` to run babel, but you can also put this script into package.json with removed `npx` to run it.
+
+You will see how the babel part of Linaria work, result JS file will be stored in `dist` directory. You will not see the resulting CSS file, because this is the role of next layer - bundlers (CSS content is stored in babel metadata to be consumed by bundler).
+
+### Publishing a release
+
+We use [release-it](https://github.com/webpro/release-it) to automate our release. If you have publish access to the NPM package, run the following from the master branch to publish a new release:
+
+```sh
+yarn release
+```
+
+NOTE: You must have a `GITHUB_TOKEN` environment variable available. You can create a GitHub access token with the "repo" access [here](https://github.com/settings/tokens).
+
+## Reporting New Issues
+
+The best way to get your bug fixed is to provide a reduced test case. Please provide a public repository with a runnable example.
+
+## How to Get in Touch
+
+* Callstack Open Source Discord - [#linaria](https://discord.gg/zwR2Cdh).
+
+## Code Conventions
+
+We use Prettier with ESLint integration for linting and formatting. To fix any auto-fixable lint or matting errors, run:
+
+```sh
+yarn lint --fix
+```
+
+## License
+
+By contributing to Linaria, you agree that your contributions will be licensed under its MIT license.
diff --git a/@linaria/LICENSE b/@linaria/LICENSE
new file mode 100644
index 0000000..5509346
--- /dev/null
+++ b/@linaria/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Callstack
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/@linaria/README.md b/@linaria/README.md
new file mode 100644
index 0000000..04ad8c1
--- /dev/null
+++ b/@linaria/README.md
@@ -0,0 +1,268 @@
+<p align="center">
+ <img alt="Linaria" src="website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+[![Build Status][build-badge]][build]
+[![Code Coverage][coverage-badge]][coverage]
+[![Version][version-badge]][package]
+[![MIT License][license-badge]][license]
+
+[![All Contributors][all-contributors-badge]](#contributors)
+[![PRs Welcome][prs-welcome-badge]][prs-welcome]
+[![Chat][chat-badge]][chat]
+[![Code of Conduct][coc-badge]][coc]
+[![Greenkeeper][greenkeeper-badge]][greenkeeper]
+[![Sponsored by Callstack][callstack-badge]][callstack]
+
+[![tweet][tweet-badge]][tweet]
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](/docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+## Setup
+
+Linaria currently supports webpack and Rollup to extract the CSS at build time. To configure your bundler, check the following guides:
+
+- [webpack](/docs/BUNDLERS_INTEGRATION.md#webpack)
+- [Rollup](/docs/BUNDLERS_INTEGRATION.md#rollup)
+- [Svelte](/docs/BUNDLERS_INTEGRATION.md#svelte)
+
+Or configure Linaria with one of the following integrations:
+
+- [Preact](/docs/CONFIGURATION.md#preact)
+- [Gatsby](/docs/CONFIGURATION.md#gatsby)
+
+Optionally, add the `@linaria` preset to your Babel configuration at the end of the presets list to avoid errors when importing the components in your server code or tests:
+
+```json
+{
+ "presets": [
+ "@babel/preset-env",
+ "@babel/preset-react",
+ "@linaria"
+ ]
+}
+```
+
+See [Configuration](/docs/CONFIGURATION.md) to customize how Linaria processes your files.
+
+## Syntax
+
+Linaria can be used with any framework, with additional helpers for React. The basic syntax looks like this:
+
+```js
+import { css } from '@linaria/core';
+import { modularScale, hiDPI } from 'polished';
+import fonts from './fonts';
+
+// Write your styles in `css` tag
+const header = css`
+ text-transform: uppercase;
+ font-family: ${fonts.heading};
+ font-size: ${modularScale(2)};
+
+ ${hiDPI(1.5)} {
+ font-size: ${modularScale(2.5)};
+ }
+`;
+
+// Then use it as a class name
+<h1 className={header}>Hello world</h1>;
+```
+
+You can use imported variables and functions for logic inside the CSS code. They will be evaluated at build time.
+
+If you're using [React](https://reactjs.org/), you can use the `styled` helper, which makes it easy to write React components with dynamic styles with a styled-component like syntax:
+
+```js
+import { styled } from '@linaria/react';
+import { families, sizes } from './fonts';
+
+// Write your styles in `styled` tag
+const Title = styled.h1`
+ font-family: ${families.serif};
+`;
+
+const Container = styled.div`
+ font-size: ${sizes.medium}px;
+ color: ${props => props.color};
+ border: 1px solid red;
+
+ &:hover {
+ border-color: blue;
+ }
+
+ ${Title} {
+ margin-bottom: 24px;
+ }
+`;
+
+// Then use the resulting component
+<Container color="#333">
+ <Title>Hello world</Title>
+</Container>;
+```
+
+Dynamic styles will be applied using CSS custom properties (aka CSS variables) and don't require any runtime.
+
+See [Basics](/docs/BASICS.md) for a detailed information about the syntax.
+
+## Demo
+
+[![Edit Linaria Demo](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/2x93v25p3j)
+
+## Documentation
+
+- [Basics](/docs/BASICS.md)
+- [API and usage](/docs/API.md)
+ - [Client APIs](/docs/API.md#client-apis)
+ - [Server APIs](/docs/API.md#server-apis)
+- [Configuration](/docs/CONFIGURATION.md)
+- [Dynamic styles with `css` tag](/docs/DYNAMIC_STYLES.md)
+- [Theming](/docs/THEMING.md)
+- [Critical CSS extraction](/docs/CRITICAL_CSS.md)
+- [Bundlers integration](/docs/BUNDLERS_INTEGRATION.md)
+ - [webpack](/docs/BUNDLERS_INTEGRATION.md#webpack)
+ - [Rollup](/docs/BUNDLERS_INTEGRATION.md#rollup)
+- [CLI](/docs/CLI.md)
+- [Linting](/docs/LINTING.md)
+- [How it works](/docs/HOW_IT_WORKS.md)
+- [Example](/website)
+
+## Contributing
+
+We appreciate any support in library development!
+
+Take a look on [Contributing](CONTRIBUTING.md) docs to check how you can run Linaria in development mode.
+
+## Trade-offs
+
+- No IE11 support when using dynamic styles in components with `styled`, since it uses CSS custom properties
+- Dynamic styles are not supported with `css` tag. See [Dynamic styles with `css` tag](/docs/DYNAMIC_STYLES.md) for alternative approaches.
+- Modules used in the CSS rules cannot have side-effects.
+ For example:
+
+ ```js
+ import { css } from '@linaria/core';
+ import colors from './colors';
+
+ const title = css`
+ color: ${colors.text};
+ `;
+ ```
+
+ Here, there should be no side-effects in the `colors.js` file, or any file it imports. We recommend to move helpers and shared configuration to files without any side-effects.
+
+## Interoperability with other CSS-in-JS libraries
+
+Linaria can work together with other CSS-in-JS libraries out-of-the-box. However, if you want to use styled components from Linaria as selectors in `styled-components`/`emotion`, you need to use [@linaria/interop](/packages/interop/README.md)
+
+## Editor Plugins
+
+### VSCode
+
+- Syntax Highlighting - [language-babel](https://marketplace.visualstudio.com/items?itemName=mgmcdermott.vscode-language-babel)
+- Autocompletion - [vscode-styled-components](https://marketplace.visualstudio.com/items?itemName=jpoissonnier.vscode-styled-components)
+- Linting - [stylelint](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint)
+
+### Atom
+
+- Syntax Highlighting and Autocompletion - [language-babel](https://atom.io/packages/language-babel)
+
+### Webstorm
+
+- Syntax Highlighting & Autocompletion - [webstorm-styled-components](https://github.com/styled-components/webstorm-styled-components)
+
+### Sublime Text
+
+- Syntax Highlighting & Autocompletion - [Naomi](https://packagecontrol.io/packages/Naomi), [JSCustom](https://packagecontrol.io/packages/JSCustom) (refer to document on how to turn on Styled Component syntax)
+- Linting - [SublimeLinter-stylelint](https://packagecontrol.io/packages/SublimeLinter-stylelint), [LSP Stylelint](https://packagecontrol.io/packages/LSP-stylelint)
+
+## Recommended Libraries
+
+- [gatsby-plugin-linaria](https://github.com/silvenon/gatsby-plugin-linaria) – Gatsby plugin that sets up Babel and webpack configuration for Linaria.
+- [polished.js](https://polished.js.org/) - A lightweight toolset for writing styles in JavaScript.
+- [craco-linaria](https://github.com/jedmao/craco-linaria) - A [Craco](https://www.npmjs.com/package/@craco/craco) plugin that allows you to use Linaria [without ejecting](https://create-react-app.dev/docs/alternatives-to-ejecting) from a [CRA](https://create-react-app.dev/).
+
+## Inspiration
+
+- [glam](https://github.com/threepointone/glam)
+- [styled-components](https://github.com/styled-components/styled-components)
+- [css-literal-loader](https://github.com/4Catalyzer/css-literal-loader)
+
+## Acknowledgements
+
+This project wouldn't have been possible without the following libraries or the people behind them.
+
+- [babel](https://babeljs.io/)
+- [stylis.js](https://github.com/thysultan/stylis.js)
+
+Special thanks to [@kentcdodds](https://github.com/kentcdodds) for his babel plugin and [@threepointone](https://github.com/threepointone) for his suggestions and encouragement.
+
+## Made with ❤️ at Callstack
+
+Linaria is an open source project and will always remain free to use. If you think it's cool, please star it 🌟. [Callstack](https://callstack.com) is a group of React and React Native geeks, contact us at [hello@callstack.com](mailto:hello@callstack.com) if you need any help with these or just want to say hi!
+
+Like the project? ⚛️ [Join the team](https://callstack.com/careers/?utm_campaign=Senior_RN&utm_source=github&utm_medium=readme) who does amazing stuff for clients and drives React Native Open Source! 🔥
+
+## Contributors
+
+Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
+
+<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
+<!-- prettier-ignore -->
+<table><tr><td align="center"><a href="https://twitter.com/_zamotany"><img src="https://avatars2.githubusercontent.com/u/17573635?v=4" width="100px;" alt="Paweł Trysła"/><br /><sub><b>Paweł Trysła</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=zamotany" title="Code">💻</a> <a href="https://github.com/callstack/linaria/commits?author=zamotany" title="Documentation">📖</a> <a href="#ideas-zamotany" title="Ideas, Planning, & Feedback">🤔</a></td><td align="center"><a href="https://medium.com/@satya164"><img src="https://avatars2.githubusercontent.com/u/1174278?v=4" width="100px;" alt="Satyajit Sahoo"/><br /><sub><b>Satyajit Sahoo</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=satya164" title="Code">💻</a> <a href="https://github.com/callstack/linaria/commits?author=satya164" title="Documentation">📖</a> <a href="#ideas-satya164" title="Ideas, Planning, & Feedback">🤔</a></td><td align="center"><a href="https://github.com/thymikee"><img src="https://avatars2.githubusercontent.com/u/5106466?v=4" width="100px;" alt="Michał Pierzchała"/><br /><sub><b>Michał Pierzchała</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=thymikee" title="Code">💻</a> <a href="https://github.com/callstack/linaria/commits?author=thymikee" title="Documentation">📖</a> <a href="#ideas-thymikee" title="Ideas, Planning, & Feedback">🤔</a></td><td align="center"><a href="https://lcs.sh"><img src="https://avatars1.githubusercontent.com/u/1909761?v=4" width="100px;" alt="Lucas"/><br /><sub><b>Lucas</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=AgtLucas" title="Documentation">📖</a></td><td align="center"><a href="https://github.com/pronevich"><img src="https://avatars0.githubusercontent.com/u/680439?v=4" width="100px;" alt="Alexey Pronevich"/><br /><sub><b>Alexey Pronevich</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=pronevich" title="Documentation">📖</a></td><td align="center"><a href="https://github.com/wojteg1337"><img src="https://avatars3.githubusercontent.com/u/18573330?v=4" width="100px;" alt="Wojtek Szafraniec"/><br /><sub><b>Wojtek Szafraniec</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=wojteg1337" title="Code">💻</a></td><td align="center"><a href="https://twitter.com/tushkiz"><img src="https://avatars1.githubusercontent.com/u/1854763?v=4" width="100px;" alt="Tushar Sonawane"/><br /><sub><b>Tushar Sonawane</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=Tushkiz" title="Documentation">📖</a> <a href="#example-Tushkiz" title="Examples">💡</a></td></tr><tr><td align="center"><a href="http://twitter.com/ferrannp"><img src="https://avatars2.githubusercontent.com/u/774577?v=4" width="100px;" alt="Ferran Negre"/><br /><sub><b>Ferran Negre</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=ferrannp" title="Documentation">📖</a></td><td align="center"><a href="https://jukben.cz"><img src="https://avatars3.githubusercontent.com/u/8135252?v=4" width="100px;" alt="Jakub Beneš"/><br /><sub><b>Jakub Beneš</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=jukben" title="Code">💻</a> <a href="https://github.com/callstack/linaria/commits?author=jukben" title="Documentation">📖</a></td><td align="center"><a href="https://github.com/oBusk"><img src="https://avatars2.githubusercontent.com/u/13413409?v=4" width="100px;" alt="Oscar Busk"/><br /><sub><b>Oscar Busk</b></sub></a><br /><a href="https://github.com/callstack/linaria/issues?q=author%3AoBusk" title="Bug reports">🐛</a> <a href="https://github.com/callstack/linaria/commits?author=oBusk" title="Code">💻</a></td><td align="center"><a href="https://github.com/Trancever"><img src="https://avatars3.githubusercontent.com/u/18584155?v=4" width="100px;" alt="Dawid"/><br /><sub><b>Dawid</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=Trancever" title="Code">💻</a> <a href="https://github.com/callstack/linaria/commits?author=Trancever" title="Documentation">📖</a></td><td align="center"><a href="https://twitter.com/esemesek"><img src="https://avatars2.githubusercontent.com/u/9092510?v=4" width="100px;" alt="Kacper Wiszczuk"/><br /><sub><b>Kacper Wiszczuk</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=Esemesek" title="Code">💻</a> <a href="https://github.com/callstack/linaria/commits?author=Esemesek" title="Documentation">📖</a></td><td align="center"><a href="https://github.com/que-etc"><img src="https://avatars3.githubusercontent.com/u/2401842?v=4" width="100px;" alt="Denis Rul"/><br /><sub><b>Denis Rul</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=que-etc" title="Code">💻</a></td><td align="center"><a href="https://github.com/johanholmerin"><img src="https://avatars0.githubusercontent.com/u/7433263?v=4" width="100px;" alt="Johan Holmerin"/><br /><sub><b>Johan Holmerin</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=johanholmerin" title="Code">💻</a> <a href="https://github.com/callstack/linaria/commits?author=johanholmerin" title="Documentation">📖</a></td></tr><tr><td align="center"><a href="https://www.giladpeleg.com/"><img src="https://avatars0.githubusercontent.com/u/4533329?v=4" width="100px;" alt="Gilad Peleg"/><br /><sub><b>Gilad Peleg</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=pgilad" title="Documentation">📖</a></td><td align="center"><a href="http://giuseppe.pizza"><img src="https://avatars3.githubusercontent.com/u/711311?v=4" width="100px;" alt="Giuseppe"/><br /><sub><b>Giuseppe</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=giuseppeg" title="Code">💻</a></td><td align="center"><a href="https://silvenon.com"><img src="https://avatars2.githubusercontent.com/u/471278?v=4" width="100px;" alt="Matija Marohnić"/><br /><sub><b>Matija Marohnić</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=silvenon" title="Code">💻</a> <a href="https://github.com/callstack/linaria/commits?author=silvenon" title="Documentation">📖</a></td><td align="center"><a href="http://schultstefan.de"><img src="https://avatars2.githubusercontent.com/u/120432?v=4" width="100px;" alt="Stefan Schult"/><br /><sub><b>Stefan Schult</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=Schubidu" title="Code">💻</a></td><td align="center"><a href="http://www.coding-tech.be"><img src="https://avatars3.githubusercontent.com/u/1120926?v=4" width="100px;" alt="Ward Peeters"/><br /><sub><b>Ward Peeters</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=wardpeet" title="Code">💻</a></td><td align="center"><a href="https://github.com/radoslaw-medryk"><img src="https://avatars0.githubusercontent.com/u/43260833?v=4" width="100px;" alt="radoslaw-medryk"/><br /><sub><b>radoslaw-medryk</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=radoslaw-medryk" title="Code">💻</a></td><td align="center"><a href="http://dr2009.com"><img src="https://avatars1.githubusercontent.com/u/8262650?v=4" width="100px;" alt="杨兴洲"/><br /><sub><b>杨兴洲</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=dr2009" title="Code">💻</a></td></tr><tr><td align="center"><a href="https://github.com/hinok"><img src="https://avatars2.githubusercontent.com/u/1313605?v=4" width="100px;" alt="Dawid Karabin"/><br /><sub><b>Dawid Karabin</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=hinok" title="Documentation">📖</a></td><td align="center"><a href="http://twitter.com/anber_ru"><img src="https://avatars3.githubusercontent.com/u/148258?v=4" width="100px;" alt="Anton Evzhakov"/><br /><sub><b>Anton Evzhakov</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=Anber" title="Code">💻</a></td><td align="center"><a href="https://github.com/chrisabrams"><img src="https://avatars1.githubusercontent.com/u/527740?s=460&v=4" width="100px;" alt="Chris Abrams"/><br /><sub><b>Chris Abrams</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=chrisabrams" title="Code">💻</a> <a href="https://github.com/callstack/linaria/commits?author=chrisabrams" title="Documentation">📖</a> <a href="#ideas-chrisabrams" title="Ideas, Planning, & Feedback">🤔</a></td><td align="center"><a href="http://hyperlab.se"><img src="https://avatars0.githubusercontent.com/u/329184?v=4" width="100px;" alt="Jayphen"/><br /><sub><b>Jayphen</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=Jayphen" title="Code">💻</a></td><td align="center"><a href="https://github.com/bolasblack"><img src="https://avatars0.githubusercontent.com/u/382011?v=4" width="100px;" alt="c4605"/><br /><sub><b>c4605</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=bolasblack" title="Code">💻</a></td><td align="center"><a href="https://koba04.com/"><img src="https://avatars2.githubusercontent.com/u/250407?v=4" width="100px;" alt="Toru Kobayashi"/><br /><sub><b>Toru Kobayashi</b></sub></a><br /><a href="https://github.com/callstack/linaria/commits?author=koba04" title="Code">💻</a></td></tr></table>
+<!-- ALL-CONTRIBUTORS-LIST:END -->
+
+This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
+
+<!-- badges -->
+
+[build-badge]: https://img.shields.io/circleci/project/github/callstack/linaria/master.svg?style=flat-square
+[build]: https://circleci.com/gh/callstack/linaria
+[coverage-badge]: https://img.shields.io/codecov/c/github/callstack/linaria.svg?style=flat-square
+[coverage]: https://codecov.io/github/callstack/linaria
+[version-badge]: https://img.shields.io/npm/v/linaria.svg?style=flat-square
+[package]: https://www.npmjs.com/package/linaria
+[license-badge]: https://img.shields.io/npm/l/linaria.svg?style=flat-square
+[license]: https://opensource.org/licenses/MIT
+[prs-welcome-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square
+[prs-welcome]: https://github.com/callstack/linaria/blob/master/CONTRIBUTING.md
+[coc-badge]: https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square
+[coc]: https://github.com/callstack/linaria/blob/master/CODE_OF_CONDUCT.md
+[all-contributors-badge]: https://img.shields.io/badge/all_contributors-23-orange.svg?style=flat-square
+[chat-badge]: https://img.shields.io/discord/426714625279524876.svg?style=flat-square&colorB=758ED3
+[chat]: https://discord.gg/zwR2Cdh
+[tweet-badge]: https://img.shields.io/badge/tweet-%23linaria-blue.svg?style=flat-square&colorB=1DA1F2&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAUCAYAAACXtf2DAAAAAXNSR0IArs4c6QAAAaRJREFUOBGtlM8rBGEYx3cWtRHJRaKcuMtBSitxkCQ3LtzkP9iUUu5ODspRHLhRLtq0FxeicEBC2cOivcge%2FMgan3fNM8bbzL4zm6c%2BPT%2Fe7%2FO8887svrFYBWbbtgWzsAt3sAcpqJFxxF1QV8oJFqFPFst5dLWQAT87oTgPB7DtziFRT1EA4yZolsFkhwjGYFRO8Op0KD8HVe7unoB6PRTBZG8IctAmG1xrHcfkQ2B55sfI%2ByGMXSBqV71xZ8CWdxBxN6ThFuECDEAL%2Bc9HIzDYumVZ966GZnX0SzCZvEqTbkaGywkyFE6hKAsBPhFQ18uPUqh2ggJ%2BUor%2F4M%2F%2FzOC8g6YzR1i%2F8g4vvSI%2ByD7FFNjexQrjHd8%2BnjABI3AU4Wl16TuF1qANGll81jsi5qu%2Bw6XIsCn4ijhU5FmCJpkV6BGNw410hfSf6JKBQ%2FUFxHGYBnWnmOwDwYQ%2BwzdHqO75HtiAMJfaC7ph32FSRJCENUhDHsLaJkL%2FX4wMF4%2BwA5bgAcrZE4sr0Cu9Jq9fxyrvBHWbNkMD5CEHWTjjT2m6r5D92jfmbbKJEWuMMAAAAABJRU5ErkJggg%3D%3D
+[tweet]: https://twitter.com/intent/tweet?text=Check%20out%20linaria!%20https://github.com/callstack/linaria%20%F0%9F%91%8D
+[greenkeeper-badge]: https://badges.greenkeeper.io/callstack/linaria.svg
+[greenkeeper]: https://greenkeeper.io/
+[callstack-badge]: https://callstack.com/images/callstack-badge.svg
+[callstack]: https://callstack.com/open-source/?utm_source=github.com&utm_medium=referral&utm_campaign=linaria&utm_term=readme
diff --git a/@linaria/babel.config.js b/@linaria/babel.config.js
new file mode 100644
index 0000000..bd6956b
--- /dev/null
+++ b/@linaria/babel.config.js
@@ -0,0 +1,93 @@
+/*
+ * The following environments are supported:
+ *
+ * (unspecified): Produces ES module output, no language features
+ * (except non-standard ones) are transpiled.
+ * "legacy": Produces CommonJS output, uses @babel/preset-env to target
+ * Node.js 10 and specific browsers.
+ * "test": Used by Jest, produces CommonJS output, targetting
+ * the current Node.js version.
+ */
+
+/*
+ * Configuration for the legacy build
+ */
+
+const commonJSTargets = {
+ browsers: ['last 2 versions', 'not op_mini all', 'not dead'],
+ node: '10',
+};
+
+module.exports = {
+ presets: ['@babel/preset-typescript'],
+ plugins: ['@babel/plugin-proposal-class-properties'],
+ env: {
+ legacy: {
+ presets: [
+ [
+ '@babel/preset-env',
+ {
+ targets: {
+ node: commonJSTargets.node,
+ },
+ },
+ ],
+ ],
+ },
+ test: {
+ presets: [
+ [
+ '@babel/preset-env',
+ {
+ targets: {
+ node: '10',
+ },
+ },
+ ],
+ ],
+ },
+ },
+ overrides: [
+ {
+ /**
+ * only react and core packages are targeted to be run in the browser
+ */
+ test: /\/packages\/((react)|(core))\//,
+ presets: ['@babel/preset-react'],
+ env: {
+ legacy: {
+ presets: [
+ [
+ '@babel/preset-env',
+ {
+ targets: {
+ browsers: commonJSTargets.browsers,
+ },
+ loose: true,
+ // our styled component should not need to use any polyfill. We do not include core-js in dependencies. However, we leave this to detect if future changes would not introduce any need for polyfill
+ useBuiltIns: 'usage',
+ // Even core-js doesn't remember IE11
+ exclude: [
+ /es\.array\.(?:filter|for-each|index-of|join|reduce|slice)/,
+ 'es.function.name',
+ 'es.object.keys',
+ 'web.dom-collections.for-each',
+ ],
+ corejs: 3,
+ // this is used to test if we do not introduced core-js polyfill
+ debug: process.env.DEBUG_CORE_JS === 'true',
+ },
+ ],
+ ],
+ },
+ },
+ },
+ {
+ /**
+ * we have to transpile JSX in tests
+ */
+ test: /\/((__tests__)|(__fixtures__))\//,
+ presets: ['@babel/preset-react'],
+ },
+ ],
+};
diff --git a/@linaria/commitlint.config.js b/@linaria/commitlint.config.js
new file mode 100644
index 0000000..84dcb12
--- /dev/null
+++ b/@linaria/commitlint.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ extends: ['@commitlint/config-conventional'],
+};
diff --git a/@linaria/docs/API.md b/@linaria/docs/API.md
new file mode 100644
index 0000000..096c227
--- /dev/null
+++ b/@linaria/docs/API.md
@@ -0,0 +1,152 @@
+# API
+
+Linaria exposes a core `css` method alongside with small, but just enough amount of helpers. Inside `@linaria/core` module you can find following methods:
+
+## Client APIs
+
+### `css`
+
+String tag for tagged template literals consisting CSS code. The tagged template literal is evaluated to a unique class name by the Babel plugin:
+
+```js
+import { css } from '@linaria/core';
+
+const flower = css`
+ display: inline;
+ color: violet;
+`;
+
+// flower === flower__9o5awv –> with babel plugin
+```
+
+All rules inside the template literal are scoped to the class name, including media queries and animations. For example, we can declare CSS animation like so:
+
+```js
+import { css } from '@linaria/core';
+
+const box = css`
+ animation: rotate 1s linear infinite;
+
+ @keyframes rotate {
+ { from: 0deg; }
+ { to: 360deg; }
+ }
+`;
+```
+
+### `cx(...classNames: Array<string | false | void | null | 0>) => string`
+
+Takes a list of class names and returns a concatenated string with the class names. Falsy values are ignored.
+
+```js
+import { css, cx } from '@linaria/core';
+
+const cat = css`
+ font-weight: bold;
+`;
+
+const yarn = css`
+ color: violet;
+`;
+
+const fun = css`
+ display: flex;
+`;
+
+function App({ isPlaying }) {
+ return <Playground className={cx(cat, yarn, isPlaying && fun)} />;
+}
+```
+
+Unlike the [`classnames`](https://www.npmjs.com/package/classnames) library, this doesn't handle objects. If you want need the features of the `classnames` library, you can use it instead.
+
+### `styled`
+
+Helper to build React components. It allows you to write your components in a similar syntax as [`styled-components`](https://www.styled-components.com/):
+
+The syntax is similar to the `css` tag. Additionally, you can use function interpolations that receive the component's props:
+
+```js
+import { styled } from '@linaria/react';
+import colors from './colors.json';
+
+const Container = styled.div`
+ background-color: ${colors.background};
+ color: ${props => props.color};
+ width: ${100 / 3}%;
+ border: 1px solid red;
+
+ &:hover {
+ border-color: blue;
+ }
+`;
+```
+
+All rules inside the template literal are scoped to the component, similar to the `css` tag.
+
+Dynamic function interpolations are replaced with CSS custom properties. A dynamic function interpolation will receive the `props` of the component as it's arguments and the returned result will be used as the value for the variable. When using this, a tiny helper is imported so that we don't duplicate the code for creating the component in all files.
+
+You can also interpolate a component to refer to it:
+
+```js
+const Title = styled.h1`
+ font-size: 36px;
+`;
+
+const Article = styled.article`
+ font-size: 16px;
+
+ /* this will evaluate to the selector that refers to `Title` */
+ ${Title} {
+ margin-bottom: 24px;
+ }
+`;
+```
+
+If you want to swap out the tag that's rendered, you can use the `as` prop:
+
+```js
+// Here `Button` is defined as a `button` tag
+const Button = styled.button`
+ background-color: rebeccapurple;
+`;
+
+// You can switch it to use an `a` tag with the `as` prop
+<Button as="a" href="/get-started">
+ Click me
+</Button>;
+```
+
+You can also decorate another styled component with `styled`:
+
+```js
+const Button = styled.button`
+ background-color: rebeccapurple;
+`;
+
+// The background-color in FancyButton will take precedence
+const FancyButton = styled(Button)`
+ background-color: black;
+`;
+```
+
+## Server APIs (`@linaria/server`)
+
+### `collect(html: string, css: string) => string`
+
+Takes HTML and CSS strings and returns the critical CSS used in the page by analyzing the class names. It can be used to determine critical CSS for server side rendering.
+
+```js
+import { collect } from '@linaria/server';
+
+const css = fs.readFileSync('./dist/styles.css', 'utf8');
+const html = ReactDOMServer.renderToString(<App />);
+const { critical, other } = collect(html, css);
+
+// critical – returns critical CSS for given html
+// other – returns the rest of styles
+```
+
+This will only detect critical CSS based on class names, so if you have any other type of selectors, they'll get added to the critical CSS.
+
+Also note that extracting critical CSS this way will change the order of class names. It's not a problem if you're primarily using Linaria for styling. However if you're using a third party framework which imports its own CSS, then it's not recommended to use this helper on the extracted CSS.
diff --git a/@linaria/docs/BASICS.md b/@linaria/docs/BASICS.md
new file mode 100644
index 0000000..bbc5c59
--- /dev/null
+++ b/@linaria/docs/BASICS.md
@@ -0,0 +1,464 @@
+# Basics
+
+## Basic syntax
+
+Linaria uses the [tagged template literal syntax](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates) for defining styles. This is a new syntax introduced in the recent versions of JavaScript.
+
+A template literal is a string wrapped between backticks (`` ` ``) instead of quotes. You can use multi-line strings and string interpolation with them.
+
+```js
+const message = `
+This is a template literal.
+This is an interpolation: ${answer}.
+`;
+```
+
+A tagged template literal is a tag attached to a template literal:
+
+```js
+const message = someTag`This is a tagged template literal`;
+```
+
+Tags are normal JavaScript function that receive the template literal and its interpolations, and can perform operations before returning a value.
+
+Linaria exposes 2 tags for styling, `css` and `styled`. They both support the same set of features, except prop based styles, which is only supported by the `styled` tag.
+
+These tags let you write styles in CSS syntax inside the template literals.
+
+### The `css` tag
+
+The `css` tag allows you to create simple class names:
+
+```js
+import { css } from '@linaria/core';
+
+// Create a class name
+const title = css`
+ font-size: 24px;
+ font-weight: bold;
+`;
+
+function Heading() {
+ // Pass it to a component
+ return <h1 className={title}>This is a title</h1>;
+}
+```
+
+Here the value of the `title` variable will be a unique class name which you can pass in the `className` prop. This code is equivalent to the following CSS and JavaScript.
+
+CSS:
+
+```css
+.title {
+ font-size: 24px;
+ font-weight: bold;
+}
+```
+
+JavaScript:
+
+```js
+function Heading() {
+ return <h1 className="title">This is a title</h1>;
+}
+```
+
+### The `styled` tag
+
+The `styled` tag allows you to create a React component with some styles already applied.
+
+You write `styled` followed by the name of the HTML tag you want to use, e.g. `styled.div`, `styled.a`, `styled.button`, `styled.h3` etc.
+
+```js
+import { styled } from '@linaria/react';
+
+// Create a styled component
+const Title = styled.h1`
+ font-size: 24px;
+ font-weight: bold;
+`;
+
+function Heading() {
+ // Use the styled component
+ return <Title>This is a title</Title>;
+}
+```
+
+This reduces quite a bit of boilerplate code you had to write when you manually created the class name and applied it to a tag. This code is equivalent to the following CSS and JavaScript.
+
+CSS:
+
+```css
+.title {
+ font-size: 24px;
+ font-weight: bold;
+}
+```
+
+JavaScript:
+
+```js
+function Title(props) {
+ return <h1 {...props} className="title" />;
+}
+
+function Heading() {
+ return <Title>This is a title</Title>;
+}
+```
+
+Apart from the reduced boilerplate code, this also makes it easier to do prop based styling which you'll cover later in the guide.
+
+### Nesting, pseudo-elements and pseudo-selectors
+
+You can nest selectors, pseudo-elements and pseudo-selectors similar to Sass, thanks to [stylis](https://github.com/thysultan/stylis.js).
+
+For example, to change the color of a button on hover, you'll write something like this:
+
+```js
+const Button = styled.button`
+ color: black;
+
+ &:hover {
+ color: blue;
+ }
+`;
+```
+
+The value of `&` refers to the class name. This code is equivalent to the following CSS:
+
+```css
+.button {
+ color: black;
+}
+
+.button:hover {
+ color: blue;
+}
+```
+
+You can nest pseudo-elements as well as other selectors:
+
+```js
+const Thing = styled.div`
+ color: black;
+
+ &::after {
+ /* .thing::after */
+ content: '🌟';
+ }
+
+ h3 {
+ /* .thing h3 */
+ color: tomato;
+ }
+
+ .code {
+ /* .thing .code */
+ color: #555;
+ }
+
+ & + & {
+ /* .thing + .thing */
+ background: yellow;
+ }
+
+ &.bordered {
+ /* .thing.bordered */
+ border: 1px solid black;
+ }
+
+ .parent & {
+ /* .parent .thing */
+ color: blue;
+ }
+`;
+```
+
+You can also nest media queries:
+
+```js
+const Thing = styled.div`
+ color: black;
+
+ @media (min-width: 200px) {
+ color: blue;
+ }
+`;
+```
+
+This is equivalent to the following CSS:
+
+```css
+.thing {
+ color: black;
+}
+
+@media (min-width: 200px) {
+ .thing {
+ color: blue;
+ }
+}
+```
+
+### Keyframe animations
+
+You can write keyframe declarations right inside the template literal:
+
+```js
+const Box = styled.div`
+ height: 200px;
+ width: 200px;
+ background-color: tomato;
+ animation: spin 2s linear infinite;
+
+ @keyframes spin {
+ from {
+ transform: rotate(0deg);
+ }
+
+ to {
+ transform: rotate(360deg);
+ }
+ }
+`;
+```
+
+Here `spin` will be replaced with a unique string to scope the animation to the class name.
+
+## Interpolations
+
+Like normal template literals, you can interpolate other expressions inside a template literal tagged with `css` or `styled`.
+
+If you try to interpolate an invalid value, you'll get an error at build-time.
+
+### Basic interpolations
+
+You can interpolate variables declared in the same file as well as imported variables:
+
+```js
+const fontSize = 16;
+
+const Title = styled.h1`
+ font-size: ${fontSize}px;
+`;
+```
+
+Here, the `fontSize` variable will be evaluated at build time and inserted into the generated CSS.
+
+You can also call functions while interpolating:
+
+```js
+const Button = styled.button`
+ background-color: ${colors.primary};
+
+ &:hover {
+ background-color: ${darken(0.2, colors.primary)};
+ }
+`;
+```
+
+### Object interpolations
+
+You can also interpolate object styles. It's converted to a CSS string before inserting to the stylesheet:
+
+```js
+const cover = {
+ position: 'absolute',
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0,
+ opacity: 1,
+ minHeight: 360,
+
+ '@media (min-width: 200px)': {
+ minHeight: 480,
+ },
+};
+
+const Title = styled.h1`
+ font-size: 24px;
+
+ ${cover};
+`;
+```
+
+This is equivalent to the following CSS:
+
+```js
+const Title = styled.h1`
+ font-size: 24px;
+
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ opacity: 1;
+ min-height: 360px;
+
+ '@media (min-width: 200px)': {
+ min-height: 480px;
+ }
+`;
+```
+
+The interpolated object can have nested selectors, media queries, pseudo-selectors and pseudo-elements. Numeric values which require a unit (e.g. `minHeight` in the above example) will be appended with `px` unless specified.
+
+### Prop based styles
+
+When writing React components using the `styled` syntax, you can write styles based on the component's props. These values will use [CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables) under the hood and can change dynamically in runtime.
+
+For dynamic prop based styles, pass a function to the interpolation:
+
+```js
+const Title = styled.h1`
+ color: ${props => (props.primary ? 'tomato' : 'black')};
+`;
+```
+
+The function will be called with the component's props as an argument when it is rendered. Here, the color of the title will be automatically updated whenever the value of the `primary` prop changes.
+
+### Referring to another component or class name
+
+You can interpolate a styled component or a class name to refer to it. For example:
+
+```js
+const title = css`
+ font-size: 24px;
+ color: black;
+`;
+
+const Paragraph = styled.p`
+ font-size: 16px;
+ color: #555;
+`;
+
+const Article = styled.article`
+ /* when referring to class names, prepend a dot (.) */
+ .${title} {
+ font-size: 36px;
+ }
+
+ /* when referring to a component, interpolate it as a selector */
+ ${Paragraph} {
+ font-size: 14px;
+ margin: 16px;
+ }
+`;
+```
+
+## Overriding styles
+
+If you want to override few styles on a styled component you defined earlier, you can do so by wrapping it in the `styled(..)` tag:
+
+```js
+const Button = styled.button`
+ font-size: 14px;
+ background-color: tomato;
+ padding: 8px;
+ box-shadow: 0 0.5px 0.3px rgba(0, 0, 0, 0.1);
+`;
+
+const LargeButton = styled(Button)`
+ font-size: 18px;
+ padding: 16px;
+`;
+```
+
+Here, when you use `LargeButton`, it'll have all the same styles as `Button` except the `font-size` and `padding` which we overrode.
+
+## Styling custom components
+
+You can use the `styled(..)` tag to style any component as long as they accept a `className` and a `style` prop:
+
+```js
+function CoolComponent({ className, style, ...rest }) {
+ return (
+ <div className={className} style={style}>
+ {...}
+ </div>
+ );
+}
+
+const StyledCoolComponent = styled(CoolComponent)`
+ background-color: tomato;
+`;
+```
+
+The `style` prop is necessary to apply CSS variables. If you're using a component library that doesn't support passing a `style` prop, you can wrap it in a `div` (or any other tag that makes sense) to apply it:
+
+```js
+import { Card } from 'some-library';
+
+function CustomCard({ className, style, ...rest }) {
+ return (
+ <div style={style}>
+ <Card className={className} {...rest} />
+ </div>
+ );
+}
+
+const StyledCustomCard = styled(CustomCard)`
+ margin: 16px;
+ height: ${props => props.height}px;
+`;
+```
+
+If you want to use linaria classname, which is generated for component, you can get it as last item from `className` prop:
+
+```js
+function CoolComponent({ className, style, variant, ...rest }) {
+ const allClasses = className.split(' ');
+ const linariaClassName = allClasses[allClasses.length - 1];
+
+ const classes = cx(
+ className,
+ variant === 'primary' && `${linariaClassName}--primary`
+ );
+
+ return (
+ <div className={classes} style={style}>
+ {...}
+ </div>
+ );
+}
+
+const StyledCoolComponent = styled(CoolComponent)`
+ background-color: tomato;
+
+ &--primary {
+ background-color: yellow;
+ }
+`;
+```
+
+## Adding global styles
+
+Normally, the styles are scoped to specific components. But sometimes you may need to write some global styles, for example, to normalize browser inconsistencies, define a font-family etc.
+
+You can do the following to generate unscoped global styles:
+
+```js
+export const globals = css`
+ :global() {
+ html {
+ box-sizing: border-box;
+ }
+
+ *,
+ *:before,
+ *:after {
+ box-sizing: inherit;
+ }
+
+ @font-face {
+ font-family: 'MaterialIcons';
+ src: url(../assets/fonts/MaterialIcons.ttf) format('truetype');
+ }
+ }
+`;
+```
+
+It's not possible to use dynamic prop based styles inside global styles.
diff --git a/@linaria/docs/BENEFITS.md b/@linaria/docs/BENEFITS.md
new file mode 100644
index 0000000..2db4b17
--- /dev/null
+++ b/@linaria/docs/BENEFITS.md
@@ -0,0 +1,142 @@
+# Why use Linaria
+
+## Advantages over regular CSS
+
+### 1. Selectors are scoped
+
+Unlike regular CSS, Linaria will generate scoped class names so that there's no collision between multiple styles in a large application. It's automatic, unlike conventions such as BEM.
+
+For example, consider the following:
+
+```js
+const title = css`
+ font-size: 18px;
+`;
+```
+
+The resulting CSS will look something like:
+
+```css
+.k4yi6fg {
+ font-size: 18px;
+}
+```
+
+Here the generated class name is unique and based on the hash of the file path.
+
+### 2. Styles are in same file as the component
+
+With regular CSS, you'll need to create a separate file to write the CSS. This can be annoying when working with components because you'll need to do constant switching between the JS and CSS files while you're tweaking the styles. With Linaria, you can have the styles in the same file as rest of the JS.
+
+You can also keep the styles in a separate JS file if you want, of course.
+
+### 3. Refactor with confidence
+
+You don't have to worry about breaking an unrelated component when changing and removing styles. Since Linaria's styles are like regular JavaScript variables, it's easy to track their usage and refactor.
+
+### 4. No pre-processor needed
+
+Linaria supports JavaScript expressions, which enables you to generate style rules inside a declaration programmatically with JavaScript. You can share constants and helper functions between your CSS and JavaScript freely.
+
+For example, here we are using a `lighten` helper from a third-party library:
+
+```js
+import { lighten } from 'polished';
+
+const PRIMARY_COLOR = '#de2d68';
+
+const button = css`
+ background-color: ${PRIMARY_COLOR};
+
+ &:hover {
+ background-color: ${lighten(0.2, PRIMARY_COLOR)};
+ }
+`;
+```
+
+### 5. Automatic unused styles removal
+
+Linaria automatically drops unused styles in a file unless it is exported. Linters like [ESLint](https://eslint.org/) can also warn you about when you have unused styles since they are just normal JS variables.
+
+### 6. Automatic vendor prefixing
+
+Linaria will automatically vendor prefix your CSS, so you don't have to worry about supporting older browsers. You write modern CSS, and Linaria takes care of the rest.
+
+You can still use tools like [PostCSS](https://postcss.org/) to further optimize the CSS.
+
+### 7. Declarative dynamic styling with React
+
+When using the `styled` helper, Linaria will generate dynamic CSS variables which automatically update when props change. When writing regular CSS, you'll have to manage it manually.
+
+For example, here the `height` and `width` will automatically update based on the `size` prop of `Box`:
+
+```js
+const Box = styled.div`
+ background-color: orange;
+ height: ${props => props.size}px;
+ width: ${props => props.size}px;
+`;
+
+<Box size={48}>
+```
+
+## Advantages over CSS preprocessors
+
+### 1. No new syntax to learn
+
+Linaria's syntax is just like regular CSS, plus ability to nest selectors for convenience. There's no new syntax for variables, mixins or functions. It's just JavaScript.
+
+### 2. Same advantages as regular CSS
+
+Linaria has all the same advantages mentioned in "Advantages over regular CSS" even when you are using a CSS pre-processor.
+
+## Advantages over inline styles
+
+### 1. Full power of CSS
+
+Unlike inline styles, you have the full power of CSS with Linaria, such as:
+
+- Media queries
+- Animation keyframes
+- Hover, focus states etc.
+- Pseudo-selectors
+
+### 2. Performance
+
+Class names perform much faster than inline styles.
+
+## Advantages over other CSS-in-JS solutions
+
+### 1. CSS is downloaded and parsed separately from JS
+
+Since the styles are extracted to separate CSS files, the CSS and JavaScript can be downloaded and parsed by the browser in parallel and can improve the load time.
+
+### 2. No extra parsing needed for CSS
+
+Many CSS-in-JS libraries parse the CSS string using a custom parser on the client. This increases the bundle size (albeit slightly) due to the inclusion of the parser. In addition, the CSS cannot be parsed until the JavaScript code is parsed and executed, which can be noticable, especially on low-end devices and bigger JS bundles.
+
+Linaria is unique in the sense that it doesn't need a runtime to work. Styles are parsed, evaluated and generated at build time and no extra parsing is needed on the client.
+
+### 3. No style duplication on SSR
+
+For component based CSS in JS libraries, rendering same component with different props can lead to duplicating the same set of styles multiple times. It doesn't matter on client side, but may increase the size of the rendered CSS when doing SSR. It may not matter in most cases, but in cases where you are rendering a large list of elements with tiny differences in styles, it can quickly add up.
+
+In addition, when you do SSR, the rendered CSS is downloaded in addition to the CSS you wrote in JS files, further increasing the size.
+
+Linaria produces only one rule set per declaration, and the differences are taken care of using CSS variables, so there's no duplication, which is great for reducing bundle size.
+
+### 4. Catch errors early due to build-time evaluation
+
+When you interpolate invalid values in Linaria (for example NaN in styles), you'll get a build time error. So you don't accidentally ship bugs into production and realize it later.
+
+Linaria's stylelint processor is also more robust and can lint styles much better, like you're writing vanilla CSS files.
+
+### 5. Familiar CSS syntax
+
+Unlike some CSS in JS libraries, Linaria lets you write normal CSS syntax, which means you can copy paste styles from the browser's dev tools (or StackOverflow), and avoid unnecessary noise in the styles.
+
+You can also use a pre-processor such as Sass if you prefer.
+
+### 6. Works without JavaScript
+
+If your website needs to work without JavaScript, or you generate the HTML in advance at build time, Linaria is a great fit for styling such websites.
diff --git a/@linaria/docs/BUNDLERS_INTEGRATION.md b/@linaria/docs/BUNDLERS_INTEGRATION.md
new file mode 100644
index 0000000..9c1614d
--- /dev/null
+++ b/@linaria/docs/BUNDLERS_INTEGRATION.md
@@ -0,0 +1,396 @@
+# Bundlers Integration
+
+## Jump To
+- [webpack](#webpack)
+- [Rollup](#Rollup)
+- [Svelte](#Svelte)
+
+## Pre-requisites
+
+If you use Babel in your project, make sure to have a [config file for Babel](https://babeljs.io/docs/en/config-files) in your project root with the plugins and presets you use. Otherwise Linaria won't be able to parse the code.
+
+## Bundlers
+
+Please note, that `@babel/core` is a peer dependency of all loaders. Do not forget to add it to `devDependencies` list in your project.
+
+### webpack
+
+To use Linaria with webpack, in your webpack config, add `@linaria/webpack-loader` under `module.rules`:
+
+```js
+{
+ test: /\.js$/,
+ use: [
+ { loader: 'babel-loader' },
+ {
+ loader: '@linaria/webpack-loader',
+ options: {
+ sourceMap: process.env.NODE_ENV !== 'production',
+ },
+ }
+ ],
+}
+```
+
+Make sure that `@linaria/webpack-loader` is included after `babel-loader`.
+
+In order to have your styles extracted, you'll also need to use **css-loader** and **MiniCssExtractPlugin**. First, install them:
+
+```sh
+yarn add --dev css-loader mini-css-extract-plugin
+```
+
+Import `mini-css-extract-plugin` at the top of your webpack config:
+
+```js
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+```
+
+Now add the following snippet in under `module.rules`:
+
+```js
+{
+ test: /\.css$/,
+ use: [
+ {
+ loader: MiniCssExtractPlugin.loader,
+ options: {
+ hmr: process.env.NODE_ENV !== 'production',
+ },
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ sourceMap: process.env.NODE_ENV !== 'production',
+ },
+ },
+ ],
+},
+```
+
+Then add the following under `plugins`:
+
+```js
+new MiniCssExtractPlugin({
+ filename: 'styles.css',
+});
+```
+
+This will extract the CSS from all files into a single `styles.css`. Then you can link to this file in your HTML file manually or use something like [`HTMLWebpackPlugin`](https://github.com/jantimon/html-webpack-plugin).
+
+It will also hot reload your styles when in a development environment.
+
+For production usage, you should include a hash in the filename:
+
+```js
+new MiniCssExtractPlugin({
+ filename: 'styles-[contenthash].css',
+});
+```
+
+Using a hash like this allows for a far future `Expires` header to be used, to improve cache efficiency. To link to the correct filename, you can either use [`HTMLWebpackPlugin`](https://github.com/jantimon/html-webpack-plugin) for a static HTML file, or [`assets-webpack-plugin`](https://yarn.pm/assets-webpack-plugin) to save the filename to a JSON file which you can then read in your server-side code.
+
+Linaria integrates with your CSS pipeline, so you can always perform additional operations on the CSS, for example, using [postcss](https://postcss.org/) plugins such as [clean-css](https://github.com/jakubpawlowicz/clean-css) to further minify your CSS.
+
+#### Full example
+
+Here is an example webpack config with Linaria:
+
+```js
+const webpack = require('webpack');
+const path = require('path');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+
+const dev = process.env.NODE_ENV !== 'production';
+
+module.exports = {
+ mode: dev ? 'development' : 'production',
+ devtool: 'source-map',
+ entry: {
+ app: './src/index',
+ },
+ output: {
+ path: path.resolve(__dirname, 'dist'),
+ publicPath: '/dist/',
+ filename: '[name].bundle.js',
+ },
+ optimization: {
+ noEmitOnErrors: true,
+ },
+ plugins: [
+ new webpack.DefinePlugin({
+ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV) },
+ }),
+ new MiniCssExtractPlugin({ filename: 'styles.css' }),
+ ],
+ module: {
+ rules: [
+ {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ use: [
+ { loader: 'babel-loader' },
+ {
+ loader: '@linaria/webpack-loader',
+ options: { sourceMap: dev },
+ },
+ ],
+ },
+ {
+ test: /\.css$/,
+ use: [
+ {
+ loader: MiniCssExtractPlugin.loader,
+ options: {
+ hmr: process.env.NODE_ENV !== 'production',
+ },
+ },
+ {
+ loader: 'css-loader',
+ options: { sourceMap: dev },
+ },
+ ],
+ },
+ {
+ test: /\.(jpg|png|gif|woff|woff2|eot|ttf|svg)$/,
+ use: [{ loader: 'file-loader' }],
+ },
+ ],
+ },
+ devServer: {
+ contentBase: [path.join(__dirname, 'public')],
+ historyApiFallback: true,
+ },
+};
+```
+
+You can copy this file to your project if you are starting from scratch.
+
+To install the dependencies used in the example config, run:
+
+```sh
+yarn add --dev webpack webpack-cli webpack-dev-server mini-css-extract-plugin css-loader file-loader babel-loader @linaria/webpack-loader
+```
+
+You can now run the dev server by running `webpack-dev-server` and build the files by running `webpack`.
+
+#### Options
+
+The loader accepts the following options:
+
+- `sourceMap: boolean` (default: `false`):
+
+ Setting this option to `true` will include source maps for the generated CSS so that you can see where source of the class name in devtools. We recommend to enable this only in development mode because the sourcemap is inlined into the CSS files.
+
+- `cacheDirectory: string` (default: `'.linaria-cache'`):
+
+ Path to the directory where the loader will output the intermediate CSS files. You can pass a relative or absolute directory path. Make sure the directory is inside the working directory for things to work properly. **You should add this directory to `.gitignore` so you don't accidentally commit them.**
+
+- `extension: string` (default: `'.linaria.css'`):
+
+ An extension of the intermediate CSS files.
+
+- `preprocessor: 'none' | 'stylis' | Function` (default: `'stylis'`)
+
+ You can override the pre-processor if you want to override how the loader processes the CSS.
+
+ - `'none'`: This will disable pre-processing entirely and the CSS will be left as you wrote it.
+
+ You might want to do it if you want to use non-standard syntax such as Sass or custom [postcss](https://postcss.org/) syntax Features such as nesting will no longer work with this option. You need to specify a loader such as [`sass-loader`](https://github.com/webpack-contrib/sass-loader) for `.linaria.css` files which handles the syntax you wrote.
+
+ - `'stylis'`: This is the default pre-processor using [stylis.js](https://github.com/thysultan/stylis.js).
+
+ This option also applies a custom `stylis` plugin to correct the relative paths inside `url(...)` expressions so that `css-loader` can resolve them properly.
+
+ - `Function`: You can pass a custom function which receives the `selector` and `cssText` strings. It should return the resulting CSS code.
+
+ A very basic implementation may look like this: `` (selector, cssText) => `${selector} { ${cssText} }`; ``.
+
+ Changing the `preprocessor` doesn't affect the following operations:
+
+ - The class names are always generated by the library and the pre-processor cannot change it.
+ - Dynamic interpolations are always replaced with CSS variables.
+ - Interpolations for JS objects always generate syntax used by default.
+
+ Note that if you use a custom syntax, you also need to specify the `syntax` in your `stylelint.config.js` to properly lint the CSS.
+
+In addition to the above options, the loader also accepts all the options supported in the [configuration file](/docs/CONFIGURATION.md).
+
+You can pass options to the loader like so:
+
+```js
+{
+ loader: '@linaria/webpack-loader',
+ options: {
+ sourceMap: false,
+ cacheDirectory: '.linaria-cache',
+ },
+}
+```
+
+### esbuild
+
+To use Linaria with esbuild, you don't need to install any external package since esbuild handles CSS by itself:
+
+```sh
+yarn add --dev @linaria/esbuild
+```
+
+Then add it to your esbuild config:
+
+```js
+import linaria from '@linaria/esbuild';
+import esbuild from 'esbuild';
+
+const prod = process.env.NODE_ENV === 'production';
+
+esbuild
+ .build({
+ entryPoints: ['src/index.ts'],
+ outdir: 'dist',
+ bundle: true,
+ minify: prod,
+ plugins: [
+ linaria({
+ sourceMap: prod,
+ }),
+ ],
+ })
+ .catch(() => process.exit(1));
+```
+
+### Rollup
+
+To use Linaria with Rollup, you need to use it together with a plugin which handles CSS files, such as `rollup-plugin-css-only`:
+
+```sh
+yarn add --dev rollup-plugin-css-only @linaria/rollup
+```
+
+Then add them to your `rollup.config.js`:
+
+```js
+import linaria from '@linaria/rollup';
+import css from 'rollup-plugin-css-only';
+
+export default {
+ /* rest of your config */
+ plugins: [
+ /* rest of your plugins */
+ linaria({
+ sourceMap: process.env.NODE_ENV !== 'production',
+ }),
+ css({
+ output: 'styles.css',
+ }),
+ ],
+};
+```
+
+
+If you are using [@rollup/plugin-babel](https://github.com/rollup/plugins/tree/master/packages/babel) as well, ensure the linaria plugin is declared earlier in the `plugins` array than your babel plugin.
+
+```js
+import linaria from '@linaria/rollup';
+import css from 'rollup-plugin-css-only';
+import babel from "@rollup/plugin-babel";
+
+export default {
+ /* rest of your config */
+ plugins: [
+ linaria({
+ sourceMap: process.env.NODE_ENV !== 'production',
+ }),
+ css({
+ output: 'styles.css',
+ }),
+ babel({/**/}),
+ /* rest of your plugins */
+ ],
+};
+```
+
+### Svelte
+
+#### Contents
+- [Svelte with Rollup](#Rollup-1)
+- [Svelte with Webpack](#Webpack-1)
+
+#### Rollup
+
+Take a look: [d964432](https://github.com/madhavarshney/svelte-linaria-sample/commit/d96443218694c0c8d80edf7c40a8fbf7c1f6997f)
+
+Install `rollup-plugin-css-only` and update `rollup.config.js`
+
+```js
+import svelte from 'rollup-plugin-svelte';
+import css from 'rollup-plugin-css-only'; // for CSS bundling
+import linaria from '@linaria/rollup';
+
+const dev = process.env.NODE_ENV !== 'production';
+
+export default {
+ ...
+ plugins: [
+ svelte({
+ dev,
+ // allow `plugin-css-only` to bundle with CSS generated by linaria
+ emitCss: true,
+ }),
+ linaria({
+ sourceMap: dev,
+ }),
+ css({
+ output: '<OUT_FOLDER>/bundle.css',
+ }),
+ ],
+};
+```
+
+**IMPORTANT**: `rollup-plugin-css-only` generates incorrect sourcemaps (see [thgh/rollup-plugin-css-only#10](https://github.com/thgh/rollup-plugin-css-only/issues/10)). Use an alternative CSS plugin such as [`rollup-plugin-postcss`](https://github.com/egoist/rollup-plugin-postcss) instead in the same way as above.
+
+#### Webpack
+
+Take a look: [5ffd69d](https://github.com/madhavarshney/svelte-linaria-sample/commit/5ffd69dc9f9584e3eec4127e798d7a4c1552ec19)
+
+Update `webpack.config.js` with the following:
+
+```js
+const prod = process.env.NODE_ENV === 'production';
+
+const linariaLoader = {
+ loader: '@linaria/webpack-loader',
+ options: {
+ sourceMap: !prod,
+ },
+};
+
+module.exports = {
+ ...
+ module: {
+ rules: [
+ {
+ test: /\.m?js$/,
+ exclude: /node_modules/,
+ use: [linariaLoader],
+ },
+ {
+ test: /\.svelte$/,
+ use: [
+ linariaLoader,
+ {
+ loader: 'svelte-loader',
+ options: {
+ dev: !prod,
+ emitCss: true,
+ hotReload: true,
+ },
+ },
+ ],
+ },
+ ...(CSS rules)
+ ],
+ },
+};
+```
+
diff --git a/@linaria/docs/CLI.md b/@linaria/docs/CLI.md
new file mode 100644
index 0000000..710f06a
--- /dev/null
+++ b/@linaria/docs/CLI.md
@@ -0,0 +1,37 @@
+# CLI
+
+Linaria CLI (`@linaria/cli`) allows you to extract CSS from your source files using a command line.
+
+### Usage
+
+```bash
+yarn linaria [options] <file1> [<fileN>...]
+```
+
+Option `-o, --out-dir <dir>` __is always required__.
+
+You can also use glob for specifying files to process:
+
+```bash
+yarn linaria -o styles src/component/**/*.js
+# or multiple globs
+yarn linaria -o styles src/component/**/*.js src/screens/**/*.js
+```
+
+CLI supports adding a require statement for generated CSS file automatically:
+
+```bash
+yarn linaria -o out-dir --source-root src --insert-css-requires dist src/**/*.js
+```
+
+where `source-root` is directory with source JS files and `insert-css-requires` has directory with transpiled/compiled JS files.
+
+### Options
+
+* `-o, --out-dir <dir>` (__required__) - Output directory for the extracted CSS files
+* `-s, --source-maps` - Generate source maps for the CSS files
+* `-r, --source-root <dir>` - Directory containing the source JS files
+* `-i, --insert-css-requires <dir>` - Directory containing JS files to insert require statements for the CSS files (__works only if `-r, --source-root` is provided__)
+* `-c, --config-file <filepath>` - Path to the configuration file. If a relative path is given, it'll be resolved relative to the current working directory.
+* `-x, --ignore "<pattern>"` - Pattern of files to ignore. Be sure to wrap with quotes.
+
diff --git a/@linaria/docs/CONFIGURATION.md b/@linaria/docs/CONFIGURATION.md
new file mode 100644
index 0000000..c5a5528
--- /dev/null
+++ b/@linaria/docs/CONFIGURATION.md
@@ -0,0 +1,293 @@
+# Configuration
+
+Linaria can be customized using a JavaScript, JSON or YAML file. This can be in form of:
+
+- `linaria.config.js` JS file exporting the object (recommended).
+- `linaria` property in a `package.json` file.
+- `.linariarc` file with JSON or YAML syntax.
+- `.linariarc.json`, `.linariarc.yaml`, `.linariarc.yml`, or `.linariarc.js` file.
+
+Example `linaria.config.js`:
+
+```js
+module.exports = {
+ evaluate: true,
+ displayName: false,
+};
+```
+
+## Options
+
+- `evaluate: boolean` (default: `true`):
+
+ Enabling this will evaluate dynamic expressions in the CSS. You need to enable this if you want to use imported variables in the CSS or interpolate other components. Enabling this also ensures that your styled components wrapping other styled components will have the correct specificity and override styles properly.
+
+- `displayName: boolean` (default: `false`):
+
+ Enabling this will add a display name to generated class names, e.g. `.Title_abcdef` instead of `.abcdef'. It is disabled by default to generate smaller CSS files.
+
+- `classNameSlug: string | (hash: string, title: string) => string` (default: `default`):
+
+ Using this will provide an interface to customize the output of the CSS class name. Example:
+
+ classNameSlug: '[title]',
+
+ Would generate a class name such as `.header` instead of the default `.header_absdjfsdf` which includes a hash.
+
+ You may also use a function to define the slug. The function will be evaluated at build time and must return a string:
+
+ classNameSlug: (hash, title) => `${hash}__${7 * 6}__${title}`,
+
+ Would generate the class name `.absdjfsdf__42__header`.
+
+ **note** invalid characters will be replaced with an underscore (`_`).
+
+ ### Variables
+
+ - `hash`: The hash of the content.
+ - `title`: The name of the class.
+
+- `rules: EvalRule[]`
+
+ The set of rules that defines how the matched files will be transformed during the evaluation.
+ `EvalRule` is an object with two fields:
+
+ - `test` is a regular expression or a function `(path: string) => boolean`;
+ - `action` is an `Evaluator` function, `"ignore"` or a name of the module that exports `Evaluator` function as a default export.
+
+ If `test` is omitted, the rule is applicable for all the files.
+
+ The last matched rule is used for transformation. If the last matched action for a file is `"ignore"` the file will be evaluated as is, so that file must not contain any js code that cannot be executed in nodejs environment (it's usually true for any lib in `node_modules`).
+
+ If you need to compile certain modules under `/node_modules/` (which can be the case in monorepo projects), it's recommended to do it on a module by module basis for faster transforms, e.g. `ignore: /node_modules[\/\\](?!some-module|other-module)/`. Example is using Regular Expressions negative lookahead.
+
+ The Information about `Evaluator`, its default setting and custom implementations can be founded it [evaluators section of How it works docs](./HOW_IT_WORKS.md#evaluators)
+
+ The default setup is:
+
+ ```js
+ [
+ {
+ action: require('@linaria/shaker').default,
+ },
+ {
+ test: /\/node_modules\//,
+ action: 'ignore',
+ },
+ ];
+ ```
+
+- `babelOptions: Object`
+
+ If you need to specify custom babel configuration, you can pass them here. These babel options will be used by Linaria when parsing and evaluating modules.
+
+- `resolveOptions: Object`
+
+ By default, the loader will resolve modules using the `alias` and `modules`
+ settings from your Webpack configuration. If you need additional custom
+ configuration for resolving modules, use this property to add or customize the
+ [enhanced-resolve options](https://www.npmjs.com/package/enhanced-resolve#user-content-resolver-options).
+
+## `@linaria/babel-preset`
+
+The preset pre-processes and evaluates the CSS. The bundler plugins use this preset under the hood. You also might want to use this preset if you import the components outside of the files handled by your bundler, such as on your server or in unit tests.
+
+To use this preset, add `@linaria/babel-preset` to your Babel configuration at the end of the presets list:
+
+`.babelrc`:
+
+```diff
+{
+ "presets": [
+ "@babel/preset-env",
+ "@babel/preset-react",
++ "@linaria"
+ ]
+}
+```
+
+The babel preset can accept the same options supported by the configuration file, however it's recommended to use the configuration file directly.
+
+## Preact
+
+If you wish you use Preact, we recommend you to use the `preact-cli` and start from there. The following configuration assumes you are using the default template provided by preact-cli. Start by creating your project using;
+
+```
+npx preact-cli create default my-project
+```
+
+On top of the default template, you will need to install `@babel/preset-react`. This is because Linaria works with JSX syntax. Otherwise, preact will throw an error saying that `@linaria/webpack-loader` can't parse JSX. Don't forget to install all required `@linaria`-packages!.
+
+After that, your `package.json` should look like the following:
+
+```diff
+"devDependencies": {
++ "@babel/preset-react": "^7.8.3",
+ "enzyme": "^3.10.0",
+ "enzyme-adapter-preact-pure": "^2.0.0",
+ "eslint": "^6.0.1",
+ "eslint-config-preact": "^1.1.0",
+ "identity-obj-proxy": "^3.0.0",
+ "jest": "^24.9.0",
+ "jest-preset-preact": "^1.0.0",
+ "per-env": "^1.0.2",
+ "preact-cli": "^3.0.0-rc.6",
+ "preact-render-spy": "^1.2.1",
+ "sirv-cli": "^0.4.5"
+ },
+ "dependencies": {
++ "@linaria/babel-preset": "^3.0.0",
++ "@linaria/core": "^3.0.0",
++ "@linaria/react": "^3.0.0",
++ "@linaria/webpack-loader": "^3.0.0",
+ "preact": "^10.3.2",
+ "preact-render-to-string": "^5.1.4",
+ "preact-router": "^3.2.1"
+ },
+```
+
+> If you wish to work with TypeScript, you will also need to install `@babel/preset-typescript`
+
+Now in your `preact.config.js`, we will modify the babel rule to use the necessary loaders and presets. Add the following:
+
+```js
+export default config => {
+ const { options, ...babelLoaderRule } = config.module.rules[0]; // Get the babel rule and options
+ options.presets.push('@babel/preset-react', '@linaria'); // Push the necessary presets
+ config.module.rules[0] = {
+ ...babelLoaderRule,
+ loader: undefined, // Disable the predefined babel-loader on the rule
+ use: [
+ {
+ loader: 'babel-loader',
+ options
+ },
+ {
+ loader: '@linaria/webpack-loader',
+ options: {
+ babelOptions: options // Pass the current babel options to linaria's babel instance
+ }
+ }
+ ]
+ };
+};
+```
+
+> If you wish to work with TypeScript, add the `@babel/preset-typescript` preset before `@babel/preset-react`.
+
+After all of that, you should be able to run `npm build`, and it should have no errors.
+
+To test that everthing is working, go to a file, for example `components/Header/index.js`, and create a class name.
+
+```js
+import { h } from 'preact';
+import { Link } from 'preact-router/match';
+import style from './style.css';
+
+import { css } from '@linaria/core';
+
+const className = css`
+ color: red;
+ font-weight: 800;
+`;
+
+const Header = () => (
+ <header class={style.header}>
+ <h1>Preact App</h1>
+ <nav>
+ <Link activeClassName={style.active} href="/">
+ Home
+ </Link>
+ <Link activeClassName={style.active} href="/profile">
+ Me
+ </Link>
+ <Link activeClassName={style.active} href="/profile/john">
+ John
+ </Link>
+ </nav>
+ <button class={className}>Hello</button> //here I use it
+ </header>
+);
+
+export default Header;
+```
+
+> You can also use the `styled` variant, importing from `@linaria/react`.
+
+If you run `npm run dev`, you should be able to see a button next to the nav title, with red bold text.
+
+You can take a look at this example [here](../examples/Preact)
+
+## Gatsby
+
+If you wish you use Gatsby, we recommend you to use the `gatsby-cli` and start from there. The following configuration assumes you are using the default template provided by gatsby-cli. Start by creating your project using:
+
+```
+npx gatsby new my-project
+```
+
+Now, you have two options. You can use `gatsby-plugin-linaria` or create a custom config.
+
+### gatsby-plugin-linaria
+
+This is an easier and more straightforward way of integrating Linaria with Gatsby. Check [plugin docs](https://github.com/silvenon/gatsby-plugin-linaria) for instructions.
+
+You can also take a look at the example [here](../examples/gatsby/plugin)
+
+### Custom config
+
+This is a bit more advanced way of integrating Linaria into your Gatsby project.
+
+First, you will need to install `@linaria/babel-preset` and `babel-preset-gatsby`. Then, create `babel.config.js` in the root of your project with the following contents:
+
+```js
+module.exports = {
+ presets: [
+ 'babel-preset-gatsby',
+ [
+ '@linaria',
+ {
+ evaluate: true,
+ displayName: process.env.NODE_ENV !== 'production',
+ },
+ ],
+ ],
+};
+```
+
+You can read more about configuring Babel in Gatsby projects in [their docs](https://www.gatsbyjs.org/docs/babel/).
+
+Besides that, you will need to alter Gatsby's Webpack config to modify the Babel loader. This can be done in `gatsby-node.js` file. Consider the following snippet:
+
+```js
+exports.onCreateWebpackConfig = ({ actions, loaders, getConfig, stage }) => {
+ const config = getConfig();
+
+ config.module.rules = [
+ ...config.module.rules.filter(
+ rule => String(rule.test) !== String(/\.js?$/)
+ ),
+
+ {
+ ...loaders.js(),
+
+ test: /\.js?$/,
+ loader: '@linaria/webpack-loader',
+ options: {
+ sourceMap: stage.includes('develop'),
+ displayName: stage.includes('develop'),
+ babelOptions: {
+ presets: ['babel-preset-gatsby'],
+ },
+ },
+ exclude: /node_modules/,
+ },
+ ];
+
+ actions.replaceWebpackConfig(config);
+};
+```
+
+If you want to know more about extending Webpack config in Gatsby projects, check out [relevant Gatsby docs](https://www.gatsbyjs.org/docs/add-custom-webpack-config/).
+
+With that done, you should be all set! You can take a look at the minimal example using the above configuration [here](../examples/gatsby/custom-config).
diff --git a/@linaria/docs/CRITICAL_CSS.md b/@linaria/docs/CRITICAL_CSS.md
new file mode 100644
index 0000000..2cc958c
--- /dev/null
+++ b/@linaria/docs/CRITICAL_CSS.md
@@ -0,0 +1,61 @@
+# Critical CSS extraction
+
+Since Linaria extracts the CSS statically at build time, you don't need to setup a server rendering. Usually, critical CSS extraction will be automatic if you are code splitting your code and using something like [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) for webpack to generate your CSS files.
+
+If you're not code splitting, or the initial CSS chunk is not representative of initially rendered content, you might want to extract critical CSS using the `collect` helper we provide to ship the minimal amount of CSS used in the page to the browser. To be able to use the `collect` helper, you need to provide the initial HTML, which usually means that you need to have SSR setup for your web app.
+
+The `collect` method takes some HTML and CSS and gives you the critical CSS:
+
+```js
+import { collect } from '@linaria/server';
+
+const { critical, other } = collect(html, css);
+```
+
+For example, in an express app with React, you could do something like the following:
+
+```js
+import fs from 'fs';
+import express from 'express';
+import crypto from 'crypto';
+import React from 'react';
+import ReactDOMServer from 'react-dom/server';
+import { collect } from '@linaria/server';
+import App from './App';
+
+const cache = {};
+const css = fs.readFileSync('./dist/styles.css', 'utf8');
+const app = express();
+
+app.get('/', (req, res) => {
+ const html = ReactDOMServer.renderToString(<App />);
+ const { critical, other } = collect(html, css);
+ const slug = crypto.createHash('md5').update(other).digest('hex');
+
+ cache[slug] = other;
+
+ res.end(`
+ <html lang="en">
+ <head>
+ <title>App</title>
+ <style type="text/css">${critical}</style>
+ </head>
+ <body>
+ <div id="root">
+ ${html}
+ </div>
+ <link rel="css" href="/styles/${slug}" />
+ </body>
+ </html>
+ `);
+});
+
+app.get('/styles/:slug', (req, res) => {
+ res.type('text/css');
+ res.end(cache[req.params.slug])
+});
+
+app.listen(3242);
+```
+
+By placing the non-critical CSS at the end of `body`, you can make sure that page rendering is not blocked until the CSS is loaded. You can also load the non-critical CSS lazily with JavaScript once the page has loaded for a more efficient strategy. However, it's highly recommended that you take advantage of code splitting in webpack which gives you automatic CSS chunks in addition to critical CSS.
diff --git a/@linaria/docs/DYNAMIC_STYLES.md b/@linaria/docs/DYNAMIC_STYLES.md
new file mode 100644
index 0000000..e8b18e8
--- /dev/null
+++ b/@linaria/docs/DYNAMIC_STYLES.md
@@ -0,0 +1,108 @@
+# Dynamic styles with `css` tag
+
+Sometimes we have some styles based on component's props or state, or dynamic in some way. If you use the `styled` helper with React, this is automatically handled using CSS custom properties. But we cannot do the same for `css` tags since they aren't linked to any component, and so we don't have access to state and props. However, there are some approaches to tackle this, each with their own limitations.
+
+## Inline styles
+
+Inline styles are the most straightforward way to use dynamic styles. Pass a `style` object with the dynamic styles, and you're done.
+
+```js
+import React from 'react';
+
+export function Pager({ index, children }) {
+ return (
+ <div style={{ transform: `translateX(${index * 100}%)` }}>
+ {children}
+ </div>
+ );
+}
+```
+
+However, it's not possible to use inline styles with pseudo-selectors or media queries.
+
+## CSS custom properties
+
+[CSS custom properties](https://developer.mozilla.org/en-US/docs/Web/CSS/--*) can be used to expose dynamic properties to the CSS.
+
+```js
+import React from 'react';
+import { css } from '@linaria/core';
+
+const box = css`
+ height: var(--box-size);
+ width: var(--box-size);
+`;
+
+export function Box({ size }) {
+ return (
+ <div
+ className={box}
+ style={{ '--box-size': size }}
+ />
+ );
+}
+```
+
+The [browser support for CSS custom properties](http://caniuse.com/#feat=css-variables) is limited, and it's not polyfilled. Therefore it's not a viable approach if you need to support older browsers. Worth noting that custom properties cascade, so if you don't override the value for the current element, and a custom property with the same name exists for a parent element, it'll be used instead.
+
+## Data attributes
+
+In cases where you know the values ahead of time, you can use [data attributes](https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes) to dynamically switch the styles that are applied.
+
+```js
+import React from 'react';
+import { css } from '@linaria/core';
+
+const box = css`
+ &[data-valid] {
+ color: yellow;
+ }
+ &[data-valid="invalid"] {
+ color: red;
+ }
+ &[data-valid="valid"] {
+ color: green;
+ }
+`
+
+export function Box({ color, valid }) {
+ return (
+ <div
+ className={box}
+ data-valid={valid ? 'valid' : 'invalid'}
+ />
+ );
+}
+```
+
+## `currentColor`
+
+For color values, browsers support a `currentColor` property which points to the text color of the element. It is well supported in all browsers.
+
+```js
+import React from 'react';
+import { css } from '@linaria/core';
+
+const box = css`
+ background-color: currentColor;
+`;
+
+const content = css`
+ color: white;
+`;
+
+export function Box({ color }) {
+ return (
+ <div
+ className={box}
+ style={{ color }}
+ >
+ <span className={content}>
+ ¯\_(ツ)_/¯
+ </span>
+ </div>
+ );
+}
+```
+
+You cannot use this approach if the dynamic value is not a color, or the element contains some text which needs to be styled with a different color. If the element has children, you will need to reset the `color` property for the text.
diff --git a/@linaria/docs/HOW_IT_WORKS.md b/@linaria/docs/HOW_IT_WORKS.md
new file mode 100644
index 0000000..bfe9f9f
--- /dev/null
+++ b/@linaria/docs/HOW_IT_WORKS.md
@@ -0,0 +1,188 @@
+# How it works
+
+Linaria consists of 2 parts:
+
+1. Babel plugin
+2. Bundler integration
+
+## Babel plugin
+
+The Babel plugin will look for `css` and `styled` tags in your code, extract the CSS out and return it in the file's metadata. It will also generate unique class names based on the hash of the filename.
+
+> To get a deep dive into Linaria babel plugin internals, check [debugging section of Contributing docs](../CONTRIBUTING.md#debugging-and-deep-dive-into-babel-plugin)
+
+When using the `styled` tag, dynamic interpolations will be replaced with CSS custom properties. References to constants in the scope will also be inlined. If the same expression is used multiple times, the plugin will create a single CSS custom property for those.
+
+The interpolations used for the CSS custom properties are left in the file, and are passed to the helper which creates the React components. Function interpolations receive the component's props and their return value will be used as the value for the CSS custom property. For other expressions, their result is used as is. If the resulting values aren't strings, they'll be converted to a string before setting the property. Inline styles are used to set the custom properties.
+
+For example, the plugin will transpile this:
+
+```js
+import { styled } from '@linaria/react';
+import { families, sizes } from './fonts';
+
+const background = 'yellow';
+
+const Title = styled.h1`
+ font-family: ${families.serif};
+`;
+
+const Container = styled.div`
+ font-size: ${sizes.medium}px;
+ background-color: ${background};
+ color: ${props => props.color};
+ width: ${100 / 3}%;
+ border: 1px solid red;
+
+ &:hover {
+ border-color: blue;
+ }
+`;
+```
+
+To this:
+
+```js
+import { styled } from '@linaria/react';
+import { families, sizes } from './fonts';
+
+const background = 'yellow';
+
+const Title = styled('h1')({
+ name: 'Title',
+ class: 'Title_t1ugh8t',
+ vars: {
+ 't1ugh8t9-0': [families.serif],
+ },
+});
+
+const Container = styled('div')({
+ name: 'Container',
+ class: 'Container_c1ugh8t',
+ vars: {
+ 'c1ugh8t9-0': [sizes.medium, 'px'],
+ 'c1ugh8t9-2': [props => props.color],
+ },
+});
+```
+
+The extracted CSS will look something like this:
+
+```css
+.Title_t1ugh8t9 {
+ font-family: var(--t1ugh8t-0);
+}
+
+.Container_c1ugh8t9 {
+ font-size: var(--c1ugh8t-0);
+ background-color: yellow;
+ color: var(--c1ugh8t-2);
+ width: 33.333333333333336%;
+ border: 1px solid red;
+}
+
+.Container_c1ugh8t9:hover {
+ border-color: blue;
+}
+```
+
+If we encounter a valid unit directly after the interpolation, it'll be passed to the helper so that the correct unit is used when setting the property. This allows you to write this:
+
+```js
+const Title = styled.h1`
+ font-size: ${large}px;
+`;
+```
+
+Instead of having to write this:
+
+```js
+const Title = styled.h1`
+ font-size: ${large + 'px'};
+`;
+```
+
+It's necessary since if we just replaced the interpolation as is, it wouldn't be a valid syntax:
+
+```css
+.Title_t1ugh8t9 {
+ font-size: var(--t1ugh8t9-0-0)px; /* you can't have 'px' after the `var(..)` */
+}
+```
+
+If we encounter a JS object when inlining, the JS object is assumed to be a style rule and converted to a CSS string before inlining it. For example, if you write this:
+
+```js
+const absoluteFill = {
+ position: 'absolute',
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0,
+};
+
+const Container = styled.h1`
+ background-color: papayawhip;
+
+ ${Box} {
+ ${absoluteFill}
+ }
+`;
+```
+
+It is equivalent to writing this:
+
+```js
+const Container = styled.h1`
+ background-color: papayawhip;
+
+ ${Box} {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ }
+`;
+```
+
+We support this usage because it allows you to use a library such as [polished.js](https://polished.js.org) which outputs object based styles along with Linaria.
+
+If you've configured the plugin to evaluate expressions with `evaluate: true` (default), any dynamic expressions we encounter will be evaluated during the build-time in a sandbox, and the result will be included in the CSS. Since these expressions are evaluated at build time in Node, you cannot use any browser specific APIs or any API which is only available in runtime. Access to Node native modules such as `fs` is also not allowed inside the sandbox to prevent malicious scripts. In addition, to achieve consistent build output, you should also avoid doing any side effects in these expressions and keep them pure.
+
+You might want to skip evaluating a certain interpolation if you're using a browser API, a global variable which is only available at runtime, or a module which breaks when evaluating in the sandbox for some reason. To skip evaluating an interpolation, you can always wrap it in a function, like so:
+
+```js
+const Box = styled.h1`
+ height: ${() => window.innerHeight * 2};
+`;
+```
+
+But keep in mind that if you're doing SSR for your app, this won't work with SSR. In this particular case, better option will be to use the `calc` function along with the `vh` unit for the viewport height (e.g. `calc(100vh * 2)`).
+
+### Evaluators
+
+Linaria can use different strategies for evaluating the interpolated values.
+Currently, we have two built-in strategies:
+
+- `extractor` was the default strategy in `1.x` version. It takes an interpolated expression, finds all the referenced identifiers, gets all its declarations, repeats cycle for all identifiers in found declarations, and then constructs a new tree of statements from all found declarations. It's a pretty simple strategy, but it significantly changes an evaluated code and doesn't work for non-primitive js-constructions.
+- `shaker` was introduced as an option in `1.4` and became the default in `2.0` version. In contrast to `extractor`, `shaker` tries to find all irrelevant code and cuts it out of the file. As a result, interpolated values can be defined without any restrictions.
+
+If an interpolated value or one of its dependencies is imported from another module, that module will be also processed with an evaluator (the implementation of evaluator will be chosen by matching `rules` from [the Linaria config](./CONFIGURATION.md#options)).
+
+Sometimes it can be useful to implement your own strategy (it can be just a mocked version of some heavy or browser-only library). You can do it by implementing `Evaluator` function:
+
+```typescript
+type Evaluator = (
+ filename: string, // the name of processed file
+ options: StrictOptions, // Linaria config
+ text: string, // source code
+ only: string[] | null // list of exported values or `null` for everything
+) => [string, Map<string, string[]> | null];
+```
+
+The function should return an array with two elements: source code prepared for evaluation and `Map` with imported files in keys and list of the identifiers in values.
+
+## Bundler integration
+
+Plugins for bundlers such as webpack and Rollup use the Babel plugin internally and write the CSS text along with the sourcemap to a CSS file. The CSS file is then picked up and processed by the bundler (e.g. - `css-loader` in case of webpack) to generate the final CSS.
diff --git a/@linaria/docs/LINTING.md b/@linaria/docs/LINTING.md
new file mode 100644
index 0000000..542d93e
--- /dev/null
+++ b/@linaria/docs/LINTING.md
@@ -0,0 +1,44 @@
+# Linting
+
+## stylelint
+
+For linting styles with [stylelint](https://stylelint.io/), we provide our custom config tailored for linaria - `@linaria/stylelint`.
+
+### Installation
+
+You need to install `stylelint` and optionally your favorite config (such as `stylelint-config-recommended`) in your project:
+
+```bash
+yarn add --dev stylelint stylelint-config-recommended
+```
+
+### Configuring stylelint
+
+All you need to do is to set your config to extend from `@linaria/stylelint`.
+
+Here's the example `.stylelintrc` configuration file:
+
+```json
+{
+ "extends": [
+ "stylelint-config-recommended",
+ "@linaria/stylelint"
+ ]
+}
+```
+
+Please refer to the [official stylelint documentation](https://stylelint.io/user-guide/configuration/) for more info about configuration.
+
+The preprocessor will use the [options from the configuration file](/docs/CONFIGURATION.md) for processing your files.
+
+### Linting your files
+
+Add the following to your `package.json` scripts:
+
+```json
+"lint:css": "stylelint src/**/*.js"
+```
+
+Now, you can run `yarn lint:css` to lint the CSS in your JS files with stylelint.
+
+For more information refer to [stylelint documentation](https://stylelint.io/user-guide/cli/).
diff --git a/@linaria/docs/MIGRATION_GUIDE.md b/@linaria/docs/MIGRATION_GUIDE.md
new file mode 100644
index 0000000..b9bb8da
--- /dev/null
+++ b/@linaria/docs/MIGRATION_GUIDE.md
@@ -0,0 +1,55 @@
+# Migration Guide
+
+# 3.x from 2.x
+
+This release was mostly a refactor to [split into more packages](https://github.com/callstack/linaria/pull/687/).
+
+## Breaking changes
+
+All these package imports in code need to be updated:
+
+| Old | New
+| --- | ---
+|linaria | @linaria/core
+|linaria/loader | @linaria/webpack-loader
+|linaria/react | @linaria/react
+|linaria/rollup | @linaria/rollup
+|linaria/server | @linaria/server
+|linaria/stylelint-config | @linaria/stylelint
+
+
+The `shaker` evaluator has moved from `linaria/evaluators` into its own package. You'll need to add `@linaria/shaker` to your package.json even if you never import it.
+
+The Babel preset moved from `linaria/babel` to `@linaria/babel-preset` but has to be referenced as `@linaria` in a Babel config. See https://github.com/callstack/linaria/issues/704
+
+
+In package.json import all the new packages you use.
+
+# 2.x from 1.x
+
+## Breaking changes
+
+### `Core-js` dependency removal and _theoretical_ drop compatibility for `node` below `10`
+
+In [#569](https://github.com/callstack/linaria/pull/569) We removed `core-js` dependency.
+
+It should not effectively affect your users or build pipelines. But it was technically a breaking change.
+
+We set babel preset that makes all non-browser dependencies compatible with `node` from version `10`. But previous setup was using `browser` env so If you was able to build Linaria with previous versions of node, it should work also now. Support for browsers environment didn't change.
+
+After that you should be able to solve issues with `core-js` dependency in your project, because it will no longer collide with version used by Linaria.
+
+### The default [evaluation strategy](./HOW_IT_WORKS.md#evaluators) has been changed to `shaker`
+
+It should not affect existed code since the new strategy is more powerful, but you can always switch to the old one by adding the next `rules` section to your Linaria-config:
+```js
+ [
+ {
+ action: require('linaria/evaluators').extractor,
+ },
+ {
+ test: /\/node_modules\//,
+ action: 'ignore',
+ },
+ ]
+```
diff --git a/@linaria/docs/THEMING.md b/@linaria/docs/THEMING.md
new file mode 100644
index 0000000..e797272
--- /dev/null
+++ b/@linaria/docs/THEMING.md
@@ -0,0 +1,102 @@
+# Theming
+
+There are several approaches you can use for theming. Depending on the browser support and requirements, you can pick the approach that suits you the best.
+
+## CSS custom properties
+
+CSS custom properties aka CSS variables are one of the best ways to apply a theme to your web app. The basic concept is that we add a class name to represent the theme to our root element, and use different values for our CSS variables based on the theme:
+
+```js
+// Create class names for different themes
+const a = css`
+ --color-primary: #6200ee;
+ --color-accent: #03dac4;
+`;
+
+const b = css`
+ --color-primary: #03a9f4;
+ --color-accent: #e91e63;
+`;
+
+// Apply a theme to the root element
+<Container className={a} />;
+```
+
+Now, we can use these variables in any of the child elements:
+
+```js
+const Button = styled.button`
+ background-color: var(--color-accent);
+`;
+```
+
+CSS custom properties are [not supported in some browsers such as IE](http://caniuse.com/#feat=css-variables), so if you need to support those browsers, this is not a viable approach.
+
+## Class names
+
+Another approach is to add a class name representing the theme (e.g. - `theme-dark`) in the root element, and take advantage of CSS child selectors to theme the elements based on this parent class name.
+
+For example, let's add the theme to the root component:
+
+```js
+<Container className="theme-dark" />
+```
+
+Now, we can conditionally style any child element according to the theme:
+
+```js
+const Header = styled.h1`
+ text-transform: uppercase;
+
+ .theme-dark & {
+ color: white;
+ }
+
+ .theme-light & {
+ color: black;
+ }
+`;
+```
+
+You could even make some helpers to make writing this easier:
+
+```js
+// Put your colors in an object grouped by the theme names
+const colors = {
+ light: {
+ text: 'black',
+ },
+ dark: {
+ text: 'white',
+ },
+};
+
+// Create a small helper function to loop over the themes and create CSS rule sets
+const theming = cb =>
+ Object.keys(colors).reduce((acc, name) => Object.assign(acc, {
+ [`.theme-${name} &`]: cb(colors[name]),
+ }), {});
+
+// Use the helper in your styles
+const Header = styled.h1`
+ text-transform: uppercase;
+
+ ${theming(c => ({
+ color: c.text,
+ }))};
+`;
+```
+
+This approach works in all browsers, and is the best approach if you want to support older browsers without support for CSS custom properties.
+
+## React Context
+
+Another approach is to use React Context to pass down colors, and then use function interpolations with the `styled` tag to use the colors in your component. You could use something like [`@callstack/react-theme-provider`](https://github.com/callstack/react-theme-provider) or write your own HOC. Then use it like:
+
+```js
+const Button = withTheme(styled.button`
+ background-color: ${props => props.theme.accent};
+`);
+```
+
+Note that this approach also uses CSS custom properties under the hood since function interpolations compile down to CSS custom properties. So the browser support is limited.
diff --git a/@linaria/examples/Preact/preact-example/.gitignore b/@linaria/examples/Preact/preact-example/.gitignore
new file mode 100644
index 0000000..3fb8754
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/.gitignore
@@ -0,0 +1,6 @@
+node_modules
+/build
+/*.log
+*.lock
+
+package-lock.json \ No newline at end of file
diff --git a/@linaria/examples/Preact/preact-example/README.md b/@linaria/examples/Preact/preact-example/README.md
new file mode 100644
index 0000000..8569ba2
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/README.md
@@ -0,0 +1,22 @@
+# my-project
+
+## CLI Commands
+
+``` bash
+# install dependencies
+npm install
+
+# serve with hot reload at localhost:8080
+npm run dev
+
+# build for production with minification
+npm run build
+
+# test the production build locally
+npm run serve
+
+# run tests with jest and preact-render-spy
+npm run test
+```
+
+For detailed explanation on how things work, checkout the [CLI Readme](https://github.com/developit/preact-cli/blob/master/README.md).
diff --git a/@linaria/examples/Preact/preact-example/package.json b/@linaria/examples/Preact/preact-example/package.json
new file mode 100644
index 0000000..b2fd234
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/package.json
@@ -0,0 +1,45 @@
+{
+ "private": true,
+ "name": "preact-example",
+ "version": "0.0.0",
+ "license": "MIT",
+ "scripts": {
+ "build": "preact build",
+ "serve": "sirv build --cors --single",
+ "dev": "preact watch",
+ "lint": "eslint src",
+ "test": "jest"
+ },
+ "eslintConfig": {
+ "extends": "preact",
+ "ignorePatterns": [
+ "build/"
+ ]
+ },
+ "devDependencies": {
+ "@babel/preset-react": "^7.9.4",
+ "enzyme": "^3.10.0",
+ "enzyme-adapter-preact-pure": "^2.0.0",
+ "eslint": "^6.0.1",
+ "eslint-config-preact": "^1.1.0",
+ "identity-obj-proxy": "^3.0.0",
+ "jest": "^24.9.0",
+ "jest-preset-preact": "^1.0.0",
+ "preact-cli": "^3.0.0-rc.6",
+ "preact-render-spy": "^1.2.1",
+ "sirv-cli": "^0.4.5"
+ },
+ "dependencies": {
+ "linaria": "^1.3.3",
+ "preact": "^10.3.2",
+ "preact-render-to-string": "^5.1.4",
+ "preact-router": "^3.2.1"
+ },
+ "jest": {
+ "preset": "jest-preset-preact",
+ "setupFiles": [
+ "<rootDir>/tests/__mocks__/browserMocks.js",
+ "<rootDir>/tests/__mocks__/setupTests.js"
+ ]
+ }
+}
diff --git a/@linaria/examples/Preact/preact-example/preact.config.js b/@linaria/examples/Preact/preact-example/preact.config.js
new file mode 100644
index 0000000..542ff99
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/preact.config.js
@@ -0,0 +1,20 @@
+export default config => {
+ const { options, ...babelLoaderRule } = config.module.rules[0];
+ options.presets.push('@babel/preset-react', 'linaria/babel');
+ config.module.rules[0] = {
+ ...babelLoaderRule,
+ loader: undefined,
+ use: [
+ {
+ loader: 'babel-loader',
+ options,
+ },
+ {
+ loader: 'linaria/loader',
+ options: {
+ babelOptions: options,
+ },
+ },
+ ],
+ };
+};
diff --git a/@linaria/examples/Preact/preact-example/size-plugin.json b/@linaria/examples/Preact/preact-example/size-plugin.json
new file mode 100644
index 0000000..7641ffa
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/size-plugin.json
@@ -0,0 +1 @@
+[{"timestamp":1588427575969,"files":[{"filename":"ssr-bundle.8df3e.css","previous":560,"size":0,"diff":-560},{"filename":"ssr-bundle.js","previous":4323,"size":0,"diff":-4323},{"filename":"sw-esm.js","previous":0,"size":741,"diff":741},{"filename":"sw.js","previous":0,"size":738,"diff":738},{"filename":"bundle.c769a.css","previous":0,"size":439,"diff":439},{"filename":"bundle.f9a38.esm.js","previous":0,"size":8723,"diff":8723},{"filename":"polyfills.76e71.esm.js","previous":0,"size":2012,"diff":2012},{"filename":"route-home.chunk.e6c71.css","previous":0,"size":74,"diff":74},{"filename":"route-home.chunk.6fec9.esm.js","previous":0,"size":291,"diff":291},{"filename":"route-profile.chunk.62c75.css","previous":0,"size":77,"diff":77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":0,"size":1220,"diff":1220},{"filename":"bundle.02f7e.js","previous":0,"size":8734,"diff":8734},{"filename":"polyfills.399df.js","previous":0,"size":2014,"diff":2014},{"filename":"route-home.chunk.6fec9.js","previous":0,"size":288,"diff":288},{"filename":"route-profile.chunk.b43ef.js","previous":0,"size":1223,"diff":1223}]},{"timestamp":1588427571799,"files":[{"filename":"sw-esm.js","previous":741,"size":0,"diff":-741},{"filename":"sw.js","previous":738,"size":0,"diff":-738},{"filename":"bundle.2cf9c.css","previous":463,"size":0,"diff":-463},{"filename":"bundle.e6c52.esm.js","previous":8723,"size":0,"diff":-8723},{"filename":"polyfills.76e71.esm.js","previous":2012,"size":0,"diff":-2012},{"filename":"route-home.chunk.e6c71.css","previous":74,"size":0,"diff":-74},{"filename":"route-home.chunk.6fec9.esm.js","previous":291,"size":0,"diff":-291},{"filename":"route-profile.chunk.62c75.css","previous":77,"size":0,"diff":-77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":1220,"size":0,"diff":-1220},{"filename":"bundle.1d180.js","previous":8731,"size":0,"diff":-8731},{"filename":"polyfills.399df.js","previous":2014,"size":0,"diff":-2014},{"filename":"route-home.chunk.6fec9.js","previous":288,"size":0,"diff":-288},{"filename":"route-profile.chunk.b43ef.js","previous":1223,"size":0,"diff":-1223},{"filename":"ssr-bundle.8df3e.css","previous":0,"size":560,"diff":560},{"filename":"ssr-bundle.js","previous":0,"size":4323,"diff":4323}]},{"timestamp":1588427459581,"files":[{"filename":"ssr-bundle.026e0.css","previous":585,"size":0,"diff":-585},{"filename":"ssr-bundle.js","previous":4323,"size":0,"diff":-4323},{"filename":"sw-esm.js","previous":0,"size":741,"diff":741},{"filename":"sw.js","previous":0,"size":738,"diff":738},{"filename":"bundle.2cf9c.css","previous":0,"size":463,"diff":463},{"filename":"bundle.e6c52.esm.js","previous":0,"size":8723,"diff":8723},{"filename":"polyfills.76e71.esm.js","previous":0,"size":2012,"diff":2012},{"filename":"route-home.chunk.e6c71.css","previous":0,"size":74,"diff":74},{"filename":"route-home.chunk.6fec9.esm.js","previous":0,"size":291,"diff":291},{"filename":"route-profile.chunk.62c75.css","previous":0,"size":77,"diff":77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":0,"size":1220,"diff":1220},{"filename":"bundle.1d180.js","previous":0,"size":8731,"diff":8731},{"filename":"polyfills.399df.js","previous":0,"size":2014,"diff":2014},{"filename":"route-home.chunk.6fec9.js","previous":0,"size":288,"diff":288},{"filename":"route-profile.chunk.b43ef.js","previous":0,"size":1223,"diff":1223}]},{"timestamp":1588427455351,"files":[{"filename":"sw-esm.js","previous":741,"size":0,"diff":-741},{"filename":"sw.js","previous":738,"size":0,"diff":-738},{"filename":"bundle.bad1e.css","previous":463,"size":0,"diff":-463},{"filename":"bundle.e423d.esm.js","previous":8597,"size":0,"diff":-8597},{"filename":"polyfills.76e71.esm.js","previous":2012,"size":0,"diff":-2012},{"filename":"route-home.chunk.e6c71.css","previous":74,"size":0,"diff":-74},{"filename":"route-home.chunk.6fec9.esm.js","previous":291,"size":0,"diff":-291},{"filename":"route-profile.chunk.62c75.css","previous":77,"size":0,"diff":-77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":1220,"size":0,"diff":-1220},{"filename":"bundle.d6709.js","previous":8609,"size":0,"diff":-8609},{"filename":"polyfills.399df.js","previous":2014,"size":0,"diff":-2014},{"filename":"route-home.chunk.6fec9.js","previous":288,"size":0,"diff":-288},{"filename":"route-profile.chunk.b43ef.js","previous":1223,"size":0,"diff":-1223},{"filename":"ssr-bundle.026e0.css","previous":0,"size":585,"diff":585},{"filename":"ssr-bundle.js","previous":0,"size":4323,"diff":4323}]},{"timestamp":1588427051068,"files":[{"filename":"ssr-bundle.2807e.css","previous":587,"size":0,"diff":-587},{"filename":"ssr-bundle.js","previous":4190,"size":0,"diff":-4190},{"filename":"sw-esm.js","previous":0,"size":741,"diff":741},{"filename":"sw.js","previous":0,"size":738,"diff":738},{"filename":"bundle.bad1e.css","previous":0,"size":463,"diff":463},{"filename":"bundle.e423d.esm.js","previous":0,"size":8597,"diff":8597},{"filename":"polyfills.76e71.esm.js","previous":0,"size":2012,"diff":2012},{"filename":"route-home.chunk.e6c71.css","previous":0,"size":74,"diff":74},{"filename":"route-home.chunk.6fec9.esm.js","previous":0,"size":291,"diff":291},{"filename":"route-profile.chunk.62c75.css","previous":0,"size":77,"diff":77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":0,"size":1220,"diff":1220},{"filename":"bundle.d6709.js","previous":0,"size":8609,"diff":8609},{"filename":"polyfills.399df.js","previous":0,"size":2014,"diff":2014},{"filename":"route-home.chunk.6fec9.js","previous":0,"size":288,"diff":288},{"filename":"route-profile.chunk.b43ef.js","previous":0,"size":1223,"diff":1223}]},{"timestamp":1588427046829,"files":[{"filename":"sw-esm.js","previous":741,"size":0,"diff":-741},{"filename":"sw.js","previous":738,"size":0,"diff":-738},{"filename":"bundle.7e56a.css","previous":445,"size":0,"diff":-445},{"filename":"bundle.824b0.esm.js","previous":8578,"size":0,"diff":-8578},{"filename":"polyfills.76e71.esm.js","previous":2012,"size":0,"diff":-2012},{"filename":"route-home.chunk.e6c71.css","previous":74,"size":0,"diff":-74},{"filename":"route-home.chunk.6fec9.esm.js","previous":291,"size":0,"diff":-291},{"filename":"route-profile.chunk.62c75.css","previous":77,"size":0,"diff":-77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":1220,"size":0,"diff":-1220},{"filename":"bundle.7dc58.js","previous":8587,"size":0,"diff":-8587},{"filename":"polyfills.399df.js","previous":2014,"size":0,"diff":-2014},{"filename":"route-home.chunk.6fec9.js","previous":288,"size":0,"diff":-288},{"filename":"route-profile.chunk.b43ef.js","previous":1223,"size":0,"diff":-1223},{"filename":"ssr-bundle.2807e.css","previous":0,"size":587,"diff":587},{"filename":"ssr-bundle.js","previous":0,"size":4190,"diff":4190}]},{"timestamp":1588426894643,"files":[{"filename":"ssr-bundle.6e806.css","previous":566,"size":0,"diff":-566},{"filename":"ssr-bundle.js","previous":4166,"size":0,"diff":-4166},{"filename":"sw-esm.js","previous":0,"size":741,"diff":741},{"filename":"sw.js","previous":0,"size":738,"diff":738},{"filename":"bundle.7e56a.css","previous":0,"size":445,"diff":445},{"filename":"bundle.824b0.esm.js","previous":0,"size":8578,"diff":8578},{"filename":"polyfills.76e71.esm.js","previous":0,"size":2012,"diff":2012},{"filename":"route-home.chunk.e6c71.css","previous":0,"size":74,"diff":74},{"filename":"route-home.chunk.6fec9.esm.js","previous":0,"size":291,"diff":291},{"filename":"route-profile.chunk.62c75.css","previous":0,"size":77,"diff":77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":0,"size":1220,"diff":1220},{"filename":"bundle.7dc58.js","previous":0,"size":8587,"diff":8587},{"filename":"polyfills.399df.js","previous":0,"size":2014,"diff":2014},{"filename":"route-home.chunk.6fec9.js","previous":0,"size":288,"diff":288},{"filename":"route-profile.chunk.b43ef.js","previous":0,"size":1223,"diff":1223}]},{"timestamp":1588426890479,"files":[{"filename":"sw-esm.js","previous":741,"size":0,"diff":-741},{"filename":"sw.js","previous":738,"size":0,"diff":-738},{"filename":"bundle.7e56a.css","previous":445,"size":0,"diff":-445},{"filename":"bundle.8e3a8.esm.js","previous":8576,"size":0,"diff":-8576},{"filename":"polyfills.76e71.esm.js","previous":2012,"size":0,"diff":-2012},{"filename":"route-home.chunk.e6c71.css","previous":74,"size":0,"diff":-74},{"filename":"route-home.chunk.6fec9.esm.js","previous":291,"size":0,"diff":-291},{"filename":"route-profile.chunk.62c75.css","previous":77,"size":0,"diff":-77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":1220,"size":0,"diff":-1220},{"filename":"bundle.786b5.js","previous":8587,"size":0,"diff":-8587},{"filename":"polyfills.399df.js","previous":2014,"size":0,"diff":-2014},{"filename":"route-home.chunk.6fec9.js","previous":288,"size":0,"diff":-288},{"filename":"route-profile.chunk.b43ef.js","previous":1223,"size":0,"diff":-1223},{"filename":"ssr-bundle.6e806.css","previous":0,"size":566,"diff":566},{"filename":"ssr-bundle.js","previous":0,"size":4166,"diff":4166}]},{"timestamp":1588426846055,"files":[{"filename":"ssr-bundle.6e806.css","previous":566,"size":0,"diff":-566},{"filename":"ssr-bundle.js","previous":4165,"size":0,"diff":-4165},{"filename":"sw-esm.js","previous":0,"size":741,"diff":741},{"filename":"sw.js","previous":0,"size":738,"diff":738},{"filename":"bundle.7e56a.css","previous":0,"size":445,"diff":445},{"filename":"bundle.8e3a8.esm.js","previous":0,"size":8576,"diff":8576},{"filename":"polyfills.76e71.esm.js","previous":0,"size":2012,"diff":2012},{"filename":"route-home.chunk.e6c71.css","previous":0,"size":74,"diff":74},{"filename":"route-home.chunk.6fec9.esm.js","previous":0,"size":291,"diff":291},{"filename":"route-profile.chunk.62c75.css","previous":0,"size":77,"diff":77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":0,"size":1220,"diff":1220},{"filename":"bundle.786b5.js","previous":0,"size":8587,"diff":8587},{"filename":"polyfills.399df.js","previous":0,"size":2014,"diff":2014},{"filename":"route-home.chunk.6fec9.js","previous":0,"size":288,"diff":288},{"filename":"route-profile.chunk.b43ef.js","previous":0,"size":1223,"diff":1223}]},{"timestamp":1588426841894,"files":[{"filename":"sw-esm.js","previous":741,"size":0,"diff":-741},{"filename":"sw.js","previous":738,"size":0,"diff":-738},{"filename":"bundle.7e56a.css","previous":445,"size":0,"diff":-445},{"filename":"bundle.eb4e9.esm.js","previous":8544,"size":0,"diff":-8544},{"filename":"polyfills.76e71.esm.js","previous":2012,"size":0,"diff":-2012},{"filename":"route-home.chunk.e6c71.css","previous":74,"size":0,"diff":-74},{"filename":"route-home.chunk.6fec9.esm.js","previous":291,"size":0,"diff":-291},{"filename":"route-profile.chunk.62c75.css","previous":77,"size":0,"diff":-77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":1220,"size":0,"diff":-1220},{"filename":"bundle.1e725.js","previous":8552,"size":0,"diff":-8552},{"filename":"polyfills.399df.js","previous":2014,"size":0,"diff":-2014},{"filename":"route-home.chunk.6fec9.js","previous":288,"size":0,"diff":-288},{"filename":"route-profile.chunk.b43ef.js","previous":1223,"size":0,"diff":-1223},{"filename":"ssr-bundle.6e806.css","previous":0,"size":566,"diff":566},{"filename":"ssr-bundle.js","previous":0,"size":4165,"diff":4165}]},{"timestamp":1588426557239,"files":[{"filename":"ssr-bundle.6e806.css","previous":566,"size":0,"diff":-566},{"filename":"ssr-bundle.js","previous":4139,"size":0,"diff":-4139},{"filename":"sw-esm.js","previous":0,"size":741,"diff":741},{"filename":"sw.js","previous":0,"size":738,"diff":738},{"filename":"bundle.7e56a.css","previous":0,"size":445,"diff":445},{"filename":"bundle.eb4e9.esm.js","previous":0,"size":8544,"diff":8544},{"filename":"polyfills.76e71.esm.js","previous":0,"size":2012,"diff":2012},{"filename":"route-home.chunk.e6c71.css","previous":0,"size":74,"diff":74},{"filename":"route-home.chunk.6fec9.esm.js","previous":0,"size":291,"diff":291},{"filename":"route-profile.chunk.62c75.css","previous":0,"size":77,"diff":77},{"filename":"route-profile.chunk.b43ef.esm.js","previous":0,"size":1220,"diff":1220},{"filename":"bundle.1e725.js","previous":0,"size":8552,"diff":8552},{"filename":"polyfills.399df.js","previous":0,"size":2014,"diff":2014},{"filename":"route-home.chunk.6fec9.js","previous":0,"size":288,"diff":288},{"filename":"route-profile.chunk.b43ef.js","previous":0,"size":1223,"diff":1223}]},{"timestamp":1588426552724,"files":[{"filename":"ssr-bundle.6e806.css","previous":0,"size":566,"diff":566},{"filename":"ssr-bundle.js","previous":0,"size":4139,"diff":4139}]}]
diff --git a/@linaria/examples/Preact/preact-example/src/assets/favicon.ico b/@linaria/examples/Preact/preact-example/src/assets/favicon.ico
new file mode 100644
index 0000000..0741914
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/assets/favicon.ico
Binary files differ
diff --git a/@linaria/examples/Preact/preact-example/src/assets/icons/android-chrome-192x192.png b/@linaria/examples/Preact/preact-example/src/assets/icons/android-chrome-192x192.png
new file mode 100644
index 0000000..93ebe2e
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/assets/icons/android-chrome-192x192.png
Binary files differ
diff --git a/@linaria/examples/Preact/preact-example/src/assets/icons/android-chrome-512x512.png b/@linaria/examples/Preact/preact-example/src/assets/icons/android-chrome-512x512.png
new file mode 100644
index 0000000..52d1623
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/assets/icons/android-chrome-512x512.png
Binary files differ
diff --git a/@linaria/examples/Preact/preact-example/src/assets/icons/apple-touch-icon.png b/@linaria/examples/Preact/preact-example/src/assets/icons/apple-touch-icon.png
new file mode 100644
index 0000000..254e4bb
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/assets/icons/apple-touch-icon.png
Binary files differ
diff --git a/@linaria/examples/Preact/preact-example/src/assets/icons/favicon-16x16.png b/@linaria/examples/Preact/preact-example/src/assets/icons/favicon-16x16.png
new file mode 100644
index 0000000..e81177d
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/assets/icons/favicon-16x16.png
Binary files differ
diff --git a/@linaria/examples/Preact/preact-example/src/assets/icons/favicon-32x32.png b/@linaria/examples/Preact/preact-example/src/assets/icons/favicon-32x32.png
new file mode 100644
index 0000000..40e9b5b
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/assets/icons/favicon-32x32.png
Binary files differ
diff --git a/@linaria/examples/Preact/preact-example/src/assets/icons/mstile-150x150.png b/@linaria/examples/Preact/preact-example/src/assets/icons/mstile-150x150.png
new file mode 100644
index 0000000..9cfb889
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/assets/icons/mstile-150x150.png
Binary files differ
diff --git a/@linaria/examples/Preact/preact-example/src/components/app.js b/@linaria/examples/Preact/preact-example/src/components/app.js
new file mode 100644
index 0000000..03b0292
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/components/app.js
@@ -0,0 +1,43 @@
+import { h, Component } from 'preact';
+import { Router } from 'preact-router';
+
+import Header from './header';
+
+import { css } from 'linaria';
+import { styled } from 'linaria/react';
+
+// Code-splitting is automated for routes
+import Home from '../routes/home';
+import Profile from '../routes/profile';
+
+const Background = styled.div`
+ background-color: aliceblue;
+`;
+
+const bluishText = css`
+ color: cornflowerblue;
+`
+
+export default class App extends Component {
+
+ /** Gets fired when the route changes.
+ * @param {Object} event "change" event from [preact-router](http://git.io/preact-router)
+ * @param {string} event.url The newly routed URL
+ */
+ handleRoute = e => {
+ this.currentUrl = e.url;
+ };
+
+ render() {
+ return (
+ <Background class={bluishText} id="app">
+ <Header />
+ <Router onChange={this.handleRoute}>
+ <Home path="/" />
+ <Profile path="/profile/" user="me" />
+ <Profile path="/profile/:user" />
+ </Router>
+ </Background>
+ );
+ }
+}
diff --git a/@linaria/examples/Preact/preact-example/src/components/header/index.js b/@linaria/examples/Preact/preact-example/src/components/header/index.js
new file mode 100644
index 0000000..88ae55d
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/components/header/index.js
@@ -0,0 +1,34 @@
+import { h } from 'preact';
+import { Link } from 'preact-router/match';
+import style from './style.css';
+
+import { css } from 'linaria';
+import { styled } from 'linaria/react';
+
+const header = css`
+ color: aliceblue;
+ font-weight: 800;
+ display: inline-block;
+ margin-right: 10px;
+`;
+
+const WithLinaria = styled.h1`
+ color: ${props => props.color};
+ display: inline-block;
+`
+
+const Header = () => (
+ <header class={style.header}>
+ <h1 class={header}>Preact App</h1>
+ <WithLinaria color="aliceblue">
+ with Linaria!
+ </WithLinaria>
+ <nav>
+ <Link activeClassName={style.active} href="/">Home</Link>
+ <Link activeClassName={style.active} href="/profile">Me</Link>
+ <Link activeClassName={style.active} href="/profile/john">John</Link>
+ </nav>
+ </header>
+);
+
+export default Header;
diff --git a/@linaria/examples/Preact/preact-example/src/components/header/style.css b/@linaria/examples/Preact/preact-example/src/components/header/style.css
new file mode 100644
index 0000000..9d3db38
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/components/header/style.css
@@ -0,0 +1,38 @@
+.header {
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 56px;
+ padding: 0;
+ background: #673AB7;
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
+ z-index: 50;
+}
+
+.header nav {
+ float: right;
+ font-size: 100%;
+}
+
+.header nav a {
+ display: inline-block;
+ height: 56px;
+ line-height: 56px;
+ padding: 0 15px;
+ min-width: 50px;
+ text-align: center;
+ background: rgba(255,255,255,0);
+ text-decoration: none;
+ color: #FFF;
+ will-change: background-color;
+}
+
+.header nav a:hover,
+.header nav a:active {
+ background: rgba(0,0,0,0.2);
+}
+
+.header nav a.active {
+ background: rgba(0,0,0,0.4);
+}
diff --git a/@linaria/examples/Preact/preact-example/src/index.js b/@linaria/examples/Preact/preact-example/src/index.js
new file mode 100644
index 0000000..009d937
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/index.js
@@ -0,0 +1,4 @@
+import './style';
+import App from './components/app';
+
+export default App;
diff --git a/@linaria/examples/Preact/preact-example/src/manifest.json b/@linaria/examples/Preact/preact-example/src/manifest.json
new file mode 100644
index 0000000..efd2035
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/manifest.json
@@ -0,0 +1,21 @@
+{
+ "name": "my-project",
+ "short_name": "my-project",
+ "start_url": "/",
+ "display": "standalone",
+ "orientation": "portrait",
+ "background_color": "#fff",
+ "theme_color": "#673ab8",
+ "icons": [
+ {
+ "src": "/assets/icons/android-chrome-192x192.png",
+ "type": "image/png",
+ "sizes": "192x192"
+ },
+ {
+ "src": "/assets/icons/android-chrome-512x512.png",
+ "type": "image/png",
+ "sizes": "512x512"
+ }
+ ]
+} \ No newline at end of file
diff --git a/@linaria/examples/Preact/preact-example/src/routes/home/index.js b/@linaria/examples/Preact/preact-example/src/routes/home/index.js
new file mode 100644
index 0000000..d9a8536
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/routes/home/index.js
@@ -0,0 +1,11 @@
+import { h } from 'preact';
+import style from './style';
+
+const Home = () => (
+ <div class={style.home}>
+ <h1>Home</h1>
+ <p>This is the Home component.</p>
+ </div>
+);
+
+export default Home;
diff --git a/@linaria/examples/Preact/preact-example/src/routes/home/style.css b/@linaria/examples/Preact/preact-example/src/routes/home/style.css
new file mode 100644
index 0000000..f052d25
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/routes/home/style.css
@@ -0,0 +1,5 @@
+.home {
+ padding: 56px 20px;
+ min-height: 100%;
+ width: 100%;
+}
diff --git a/@linaria/examples/Preact/preact-example/src/routes/profile/index.js b/@linaria/examples/Preact/preact-example/src/routes/profile/index.js
new file mode 100644
index 0000000..cfc93d2
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/routes/profile/index.js
@@ -0,0 +1,47 @@
+import { h, Component } from 'preact';
+import style from './style';
+
+export default class Profile extends Component {
+ state = {
+ time: Date.now(),
+ count: 10
+ };
+
+ // update the current time
+ updateTime = () => {
+ this.setState({ time: Date.now() });
+ };
+
+ increment = () => {
+ this.setState({ count: this.state.count+1 });
+ };
+
+ // gets called when this route is navigated to
+ componentDidMount() {
+ // start a timer for the clock:
+ this.timer = setInterval(this.updateTime, 1000);
+ }
+
+ // gets called just before navigating away from the route
+ componentWillUnmount() {
+ clearInterval(this.timer);
+ }
+
+ // Note: `user` comes from the URL, courtesy of our router
+ render({ user }, { time, count }) {
+ return (
+ <div class={style.profile}>
+ <h1>Profile: {user}</h1>
+ <p>This is the user profile for a user named { user }.</p>
+
+ <div>Current time: {new Date(time).toLocaleString()}</div>
+
+ <p>
+ <button onClick={this.increment}>Click Me</button>
+ {' '}
+ Clicked {count} times.
+ </p>
+ </div>
+ );
+ }
+}
diff --git a/@linaria/examples/Preact/preact-example/src/routes/profile/style.css b/@linaria/examples/Preact/preact-example/src/routes/profile/style.css
new file mode 100644
index 0000000..fcb1296
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/routes/profile/style.css
@@ -0,0 +1,5 @@
+.profile {
+ padding: 56px 20px;
+ min-height: 100%;
+ width: 100%;
+}
diff --git a/@linaria/examples/Preact/preact-example/src/style/index.css b/@linaria/examples/Preact/preact-example/src/style/index.css
new file mode 100644
index 0000000..5fe95de
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/src/style/index.css
@@ -0,0 +1,20 @@
+html, body {
+ height: 100%;
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ background: #FAFAFA;
+ font-family: 'Helvetica Neue', arial, sans-serif;
+ font-weight: 400;
+ color: #444;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+#app {
+ height: 100%;
+}
diff --git a/@linaria/examples/Preact/preact-example/tests/__mocks__/browserMocks.js b/@linaria/examples/Preact/preact-example/tests/__mocks__/browserMocks.js
new file mode 100644
index 0000000..0f6744e
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/tests/__mocks__/browserMocks.js
@@ -0,0 +1,21 @@
+// Mock Browser API's which are not supported by JSDOM, e.g. ServiceWorker, LocalStorage
+/**
+ * An example how to mock localStorage is given below 👇
+ */
+
+/*
+// Mocks localStorage
+const localStorageMock = (function() {
+ let store = {};
+
+ return {
+ getItem: (key) => store[key] || null,
+ setItem: (key, value) => store[key] = value.toString(),
+ clear: () => store = {}
+ };
+
+})();
+
+Object.defineProperty(window, 'localStorage', {
+ value: localStorageMock
+}); */
diff --git a/@linaria/examples/Preact/preact-example/tests/__mocks__/fileMocks.js b/@linaria/examples/Preact/preact-example/tests/__mocks__/fileMocks.js
new file mode 100644
index 0000000..7b27556
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/tests/__mocks__/fileMocks.js
@@ -0,0 +1,3 @@
+// This fixed an error related to the CSS and loading gif breaking my Jest test
+// See https://facebook.github.io/jest/docs/en/webpack.html#handling-static-assets
+module.exports = 'test-file-stub'; \ No newline at end of file
diff --git a/@linaria/examples/Preact/preact-example/tests/__mocks__/setupTests.js b/@linaria/examples/Preact/preact-example/tests/__mocks__/setupTests.js
new file mode 100644
index 0000000..4bd4ae4
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/tests/__mocks__/setupTests.js
@@ -0,0 +1,6 @@
+import { configure } from 'enzyme';
+import Adapter from 'enzyme-adapter-preact-pure';
+
+configure({
+ adapter: new Adapter()
+});
diff --git a/@linaria/examples/Preact/preact-example/tests/header.test.js b/@linaria/examples/Preact/preact-example/tests/header.test.js
new file mode 100644
index 0000000..f116ef4
--- /dev/null
+++ b/@linaria/examples/Preact/preact-example/tests/header.test.js
@@ -0,0 +1,12 @@
+import { h } from 'preact';
+import Header from '../src/components/header';
+// See: https://github.com/preactjs/enzyme-adapter-preact-pure
+import { shallow } from 'enzyme';
+
+describe('Initial Test of the Header', () => {
+ test('Header renders 3 nav items', () => {
+ const context = shallow(<Header />);
+ expect(context.find('h1').text()).toBe('Preact App');
+ expect(context.find('Link').length).toBe(3);
+ });
+});
diff --git a/@linaria/examples/gatsby/custom-config/.gitignore b/@linaria/examples/gatsby/custom-config/.gitignore
new file mode 100644
index 0000000..f813275
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/.gitignore
@@ -0,0 +1,69 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Typescript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# dotenv environment variable files
+.env*
+
+# gatsby files
+.cache/
+public
+
+# Mac files
+.DS_Store
+
+# Yarn
+yarn-error.log
+.pnp/
+.pnp.js
+# Yarn Integrity file
+.yarn-integrity
diff --git a/@linaria/examples/gatsby/custom-config/.prettierignore b/@linaria/examples/gatsby/custom-config/.prettierignore
new file mode 100644
index 0000000..58d06c3
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/.prettierignore
@@ -0,0 +1,4 @@
+.cache
+package.json
+package-lock.json
+public
diff --git a/@linaria/examples/gatsby/custom-config/.prettierrc b/@linaria/examples/gatsby/custom-config/.prettierrc
new file mode 100644
index 0000000..33d2cfa
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/.prettierrc
@@ -0,0 +1,4 @@
+{
+ "arrowParens": "avoid",
+ "semi": false
+}
diff --git a/@linaria/examples/gatsby/custom-config/LICENSE b/@linaria/examples/gatsby/custom-config/LICENSE
new file mode 100644
index 0000000..5169a5e
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 gatsbyjs
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/@linaria/examples/gatsby/custom-config/README.md b/@linaria/examples/gatsby/custom-config/README.md
new file mode 100644
index 0000000..afbb4aa
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/README.md
@@ -0,0 +1,99 @@
+<!-- AUTO-GENERATED-CONTENT:START (STARTER) -->
+<p align="center">
+ <a href="https://www.gatsbyjs.org">
+ <img alt="Gatsby" src="https://www.gatsbyjs.org/monogram.svg" width="60" />
+ </a>
+</p>
+<h1 align="center">
+ Gatsby's default starter
+</h1>
+
+Kick off your project with this default boilerplate. This starter ships with the main Gatsby configuration files you might need to get up and running blazing fast with the blazing fast app generator for React.
+
+_Have another more specific idea? You may want to check out our vibrant collection of [official and community-created starters](https://www.gatsbyjs.org/docs/gatsby-starters/)._
+
+## 🚀 Quick start
+
+1. **Create a Gatsby site.**
+
+ Use the Gatsby CLI to create a new site, specifying the default starter.
+
+ ```shell
+ # create a new Gatsby site using the default starter
+ gatsby new my-default-starter https://github.com/gatsbyjs/gatsby-starter-default
+ ```
+
+1. **Start developing.**
+
+ Navigate into your new site’s directory and start it up.
+
+ ```shell
+ cd my-default-starter/
+ gatsby develop
+ ```
+
+1. **Open the source code and start editing!**
+
+ Your site is now running at `http://localhost:8000`!
+
+ _Note: You'll also see a second link: _`http://localhost:8000/___graphql`_. This is a tool you can use to experiment with querying your data. Learn more about using this tool in the [Gatsby tutorial](https://www.gatsbyjs.org/tutorial/part-five/#introducing-graphiql)._
+
+ Open the `my-default-starter` directory in your code editor of choice and edit `src/pages/index.js`. Save your changes and the browser will update in real time!
+
+## 🧐 What's inside?
+
+A quick look at the top-level files and directories you'll see in a Gatsby project.
+
+ .
+ ├── node_modules
+ ├── src
+ ├── .gitignore
+ ├── .prettierrc
+ ├── gatsby-browser.js
+ ├── gatsby-config.js
+ ├── gatsby-node.js
+ ├── gatsby-ssr.js
+ ├── LICENSE
+ ├── package-lock.json
+ ├── package.json
+ └── README.md
+
+1. **`/node_modules`**: This directory contains all of the modules of code that your project depends on (npm packages) are automatically installed.
+
+2. **`/src`**: This directory will contain all of the code related to what you will see on the front-end of your site (what you see in the browser) such as your site header or a page template. `src` is a convention for “source code”.
+
+3. **`.gitignore`**: This file tells git which files it should not track / not maintain a version history for.
+
+4. **`.prettierrc`**: This is a configuration file for [Prettier](https://prettier.io/). Prettier is a tool to help keep the formatting of your code consistent.
+
+5. **`gatsby-browser.js`**: This file is where Gatsby expects to find any usage of the [Gatsby browser APIs](https://www.gatsbyjs.org/docs/browser-apis/) (if any). These allow customization/extension of default Gatsby settings affecting the browser.
+
+6. **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you’d like to include, etc. (Check out the [config docs](https://www.gatsbyjs.org/docs/gatsby-config/) for more detail).
+
+7. **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby Node APIs](https://www.gatsbyjs.org/docs/node-apis/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process.
+
+8. **`gatsby-ssr.js`**: This file is where Gatsby expects to find any usage of the [Gatsby server-side rendering APIs](https://www.gatsbyjs.org/docs/ssr-apis/) (if any). These allow customization of default Gatsby settings affecting server-side rendering.
+
+9. **`LICENSE`**: Gatsby is licensed under the MIT license.
+
+10. **`package-lock.json`** (See `package.json` below, first). This is an automatically generated file based on the exact versions of your npm dependencies that were installed for your project. **(You won’t change this file directly).**
+
+11. **`package.json`**: A manifest file for Node.js projects, which includes things like metadata (the project’s name, author, etc). This manifest is how npm knows which packages to install for your project.
+
+12. **`README.md`**: A text file containing useful reference information about your project.
+
+## 🎓 Learning Gatsby
+
+Looking for more guidance? Full documentation for Gatsby lives [on the website](https://www.gatsbyjs.org/). Here are some places to start:
+
+- **For most developers, we recommend starting with our [in-depth tutorial for creating a site with Gatsby](https://www.gatsbyjs.org/tutorial/).** It starts with zero assumptions about your level of ability and walks through every step of the process.
+
+- **To dive straight into code samples, head [to our documentation](https://www.gatsbyjs.org/docs/).** In particular, check out the _Guides_, _API Reference_, and _Advanced Tutorials_ sections in the sidebar.
+
+## 💫 Deploy
+
+[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/gatsbyjs/gatsby-starter-default)
+
+[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/import/project?template=https://github.com/gatsbyjs/gatsby-starter-default)
+
+<!-- AUTO-GENERATED-CONTENT:END -->
diff --git a/@linaria/examples/gatsby/custom-config/babel.config.js b/@linaria/examples/gatsby/custom-config/babel.config.js
new file mode 100644
index 0000000..6404eaf
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/babel.config.js
@@ -0,0 +1,12 @@
+module.exports = {
+ presets: [
+ "babel-preset-gatsby",
+ [
+ "linaria/babel",
+ {
+ evaluate: true,
+ displayName: process.env.NODE_ENV !== "production",
+ },
+ ],
+ ],
+}
diff --git a/@linaria/examples/gatsby/custom-config/gatsby-browser.js b/@linaria/examples/gatsby/custom-config/gatsby-browser.js
new file mode 100644
index 0000000..b1e5c31
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/gatsby-browser.js
@@ -0,0 +1,7 @@
+/**
+ * Implement Gatsby's Browser APIs in this file.
+ *
+ * See: https://www.gatsbyjs.org/docs/browser-apis/
+ */
+
+// You can delete this file if you're not using it
diff --git a/@linaria/examples/gatsby/custom-config/gatsby-config.js b/@linaria/examples/gatsby/custom-config/gatsby-config.js
new file mode 100644
index 0000000..999bd3d
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/gatsby-config.js
@@ -0,0 +1,34 @@
+module.exports = {
+ siteMetadata: {
+ title: `Gatsby Default Starter`,
+ description: `Kick off your next, great Gatsby project with this default starter. This barebones starter ships with the main Gatsby configuration files you might need.`,
+ author: `@gatsbyjs`,
+ },
+ plugins: [
+ `gatsby-plugin-react-helmet`,
+ {
+ resolve: `gatsby-source-filesystem`,
+ options: {
+ name: `images`,
+ path: `${__dirname}/src/images`,
+ },
+ },
+ `gatsby-transformer-sharp`,
+ `gatsby-plugin-sharp`,
+ {
+ resolve: `gatsby-plugin-manifest`,
+ options: {
+ name: `gatsby-starter-default`,
+ short_name: `starter`,
+ start_url: `/`,
+ background_color: `#663399`,
+ theme_color: `#663399`,
+ display: `minimal-ui`,
+ icon: `src/images/gatsby-icon.png`, // This path is relative to the root of the site.
+ },
+ },
+ // this (optional) plugin enables Progressive Web App + Offline functionality
+ // To learn more, visit: https://gatsby.dev/offline
+ // `gatsby-plugin-offline`,
+ ],
+}
diff --git a/@linaria/examples/gatsby/custom-config/gatsby-node.js b/@linaria/examples/gatsby/custom-config/gatsby-node.js
new file mode 100644
index 0000000..bb65b70
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/gatsby-node.js
@@ -0,0 +1,26 @@
+exports.onCreateWebpackConfig = ({ actions, loaders, getConfig, stage }) => {
+ const config = getConfig()
+
+ config.module.rules = [
+ ...config.module.rules.filter(
+ rule => String(rule.test) !== String(/\.js?$/)
+ ),
+
+ {
+ ...loaders.js(),
+
+ test: /\.js?$/,
+ loader: "linaria/loader",
+ options: {
+ sourceMap: stage.includes("develop"),
+ displayName: stage.includes("develop"),
+ babelOptions: {
+ presets: ["babel-preset-gatsby"],
+ },
+ },
+ exclude: /node_modules/,
+ },
+ ]
+
+ actions.replaceWebpackConfig(config)
+}
diff --git a/@linaria/examples/gatsby/custom-config/gatsby-ssr.js b/@linaria/examples/gatsby/custom-config/gatsby-ssr.js
new file mode 100644
index 0000000..b17b8fc
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/gatsby-ssr.js
@@ -0,0 +1,7 @@
+/**
+ * Implement Gatsby's SSR (Server Side Rendering) APIs in this file.
+ *
+ * See: https://www.gatsbyjs.org/docs/ssr-apis/
+ */
+
+// You can delete this file if you're not using it
diff --git a/@linaria/examples/gatsby/custom-config/package.json b/@linaria/examples/gatsby/custom-config/package.json
new file mode 100644
index 0000000..a42a603
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "gatsby-starter-default",
+ "private": true,
+ "description": "A simple starter to get up and developing quickly with Gatsby",
+ "version": "0.1.0",
+ "author": "Kyle Mathews <mathews.kyle@gmail.com>",
+ "dependencies": {
+ "gatsby": "^2.22.15",
+ "gatsby-image": "^2.4.5",
+ "gatsby-plugin-manifest": "^2.4.9",
+ "gatsby-plugin-offline": "^3.2.7",
+ "gatsby-plugin-react-helmet": "^3.3.2",
+ "gatsby-plugin-sharp": "^2.6.9",
+ "gatsby-source-filesystem": "^2.3.8",
+ "gatsby-transformer-sharp": "^2.5.3",
+ "linaria": "^1.3.3",
+ "prop-types": "^15.7.2",
+ "react": "^16.12.0",
+ "react-dom": "^16.12.0",
+ "react-helmet": "^6.0.0"
+ },
+ "devDependencies": {
+ "babel-preset-gatsby": "^0.4.9",
+ "prettier": "2.0.5"
+ },
+ "keywords": [
+ "gatsby"
+ ],
+ "license": "MIT",
+ "scripts": {
+ "build": "gatsby build",
+ "develop": "gatsby develop",
+ "format": "prettier --write \"**/*.{js,jsx,json,md}\"",
+ "start": "npm run develop",
+ "serve": "gatsby serve",
+ "clean": "gatsby clean",
+ "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/gatsbyjs/gatsby-starter-default"
+ },
+ "bugs": {
+ "url": "https://github.com/gatsbyjs/gatsby/issues"
+ }
+}
diff --git a/@linaria/examples/gatsby/custom-config/src/components/header.js b/@linaria/examples/gatsby/custom-config/src/components/header.js
new file mode 100644
index 0000000..8990b7e
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/components/header.js
@@ -0,0 +1,42 @@
+import { Link } from "gatsby"
+import PropTypes from "prop-types"
+import React from "react"
+
+const Header = ({ siteTitle }) => (
+ <header
+ style={{
+ background: `rebeccapurple`,
+ marginBottom: `1.45rem`,
+ }}
+ >
+ <div
+ style={{
+ margin: `0 auto`,
+ maxWidth: 960,
+ padding: `1.45rem 1.0875rem`,
+ }}
+ >
+ <h1 style={{ margin: 0 }}>
+ <Link
+ to="/"
+ style={{
+ color: `white`,
+ textDecoration: `none`,
+ }}
+ >
+ {siteTitle}
+ </Link>
+ </h1>
+ </div>
+ </header>
+)
+
+Header.propTypes = {
+ siteTitle: PropTypes.string,
+}
+
+Header.defaultProps = {
+ siteTitle: ``,
+}
+
+export default Header
diff --git a/@linaria/examples/gatsby/custom-config/src/components/image.js b/@linaria/examples/gatsby/custom-config/src/components/image.js
new file mode 100644
index 0000000..e61edb6
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/components/image.js
@@ -0,0 +1,32 @@
+import React from "react"
+import { useStaticQuery, graphql } from "gatsby"
+import Img from "gatsby-image"
+
+/*
+ * This component is built using `gatsby-image` to automatically serve optimized
+ * images with lazy loading and reduced file sizes. The image is loaded using a
+ * `useStaticQuery`, which allows us to load the image from directly within this
+ * component, rather than having to pass the image data down from pages.
+ *
+ * For more information, see the docs:
+ * - `gatsby-image`: https://gatsby.dev/gatsby-image
+ * - `useStaticQuery`: https://www.gatsbyjs.org/docs/use-static-query/
+ */
+
+const Image = () => {
+ const data = useStaticQuery(graphql`
+ query {
+ placeholderImage: file(relativePath: { eq: "gatsby-astronaut.png" }) {
+ childImageSharp {
+ fluid(maxWidth: 300) {
+ ...GatsbyImageSharpFluid
+ }
+ }
+ }
+ }
+ `)
+
+ return <Img fluid={data.placeholderImage.childImageSharp.fluid} />
+}
+
+export default Image
diff --git a/@linaria/examples/gatsby/custom-config/src/components/layout.css b/@linaria/examples/gatsby/custom-config/src/components/layout.css
new file mode 100644
index 0000000..b6f6332
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/components/layout.css
@@ -0,0 +1,622 @@
+html {
+ font-family: sans-serif;
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+progress {
+ vertical-align: baseline;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background-color: transparent;
+ -webkit-text-decoration-skip: objects;
+}
+a:active,
+a:hover {
+ outline-width: 0;
+}
+abbr[title] {
+ border-bottom: none;
+ text-decoration: underline;
+ text-decoration: underline dotted;
+}
+b,
+strong {
+ font-weight: inherit;
+ font-weight: bolder;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+mark {
+ background-color: #ff0;
+ color: #000;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+sub {
+ bottom: -0.25em;
+}
+sup {
+ top: -0.5em;
+}
+img {
+ border-style: none;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ font: inherit;
+ margin: 0;
+}
+optgroup {
+ font-weight: 700;
+}
+button,
+input {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+[type="reset"],
+[type="submit"],
+button,
+html [type="button"] {
+ -webkit-appearance: button;
+}
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner,
+button::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring,
+button:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+fieldset {
+ border: 1px solid silver;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+legend {
+ box-sizing: border-box;
+ color: inherit;
+ display: table;
+ max-width: 100%;
+ padding: 0;
+ white-space: normal;
+}
+textarea {
+ overflow: auto;
+}
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+[type="search"] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px;
+}
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+::-webkit-input-placeholder {
+ color: inherit;
+ opacity: 0.54;
+}
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit;
+}
+html {
+ font: 112.5%/1.45em georgia, serif;
+ box-sizing: border-box;
+ overflow-y: scroll;
+}
+* {
+ box-sizing: inherit;
+}
+*:before {
+ box-sizing: inherit;
+}
+*:after {
+ box-sizing: inherit;
+}
+body {
+ color: hsla(0, 0%, 0%, 0.8);
+ font-family: georgia, serif;
+ font-weight: normal;
+ word-wrap: break-word;
+ font-kerning: normal;
+ -moz-font-feature-settings: "kern", "liga", "clig", "calt";
+ -ms-font-feature-settings: "kern", "liga", "clig", "calt";
+ -webkit-font-feature-settings: "kern", "liga", "clig", "calt";
+ font-feature-settings: "kern", "liga", "clig", "calt";
+}
+img {
+ max-width: 100%;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+h1 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 2.25rem;
+ line-height: 1.1;
+}
+h2 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 1.62671rem;
+ line-height: 1.1;
+}
+h3 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 1.38316rem;
+ line-height: 1.1;
+}
+h4 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 1rem;
+ line-height: 1.1;
+}
+h5 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 0.85028rem;
+ line-height: 1.1;
+}
+h6 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 0.78405rem;
+ line-height: 1.1;
+}
+hgroup {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+ul {
+ margin-left: 1.45rem;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ list-style-position: outside;
+ list-style-image: none;
+}
+ol {
+ margin-left: 1.45rem;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ list-style-position: outside;
+ list-style-image: none;
+}
+dl {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+dd {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+p {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+figure {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+pre {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 1.45rem;
+ font-size: 0.85rem;
+ line-height: 1.42;
+ background: hsla(0, 0%, 0%, 0.04);
+ border-radius: 3px;
+ overflow: auto;
+ word-wrap: normal;
+ padding: 1.45rem;
+}
+table {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ font-size: 1rem;
+ line-height: 1.45rem;
+ border-collapse: collapse;
+ width: 100%;
+}
+fieldset {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+blockquote {
+ margin-left: 1.45rem;
+ margin-right: 1.45rem;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+form {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+noscript {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+iframe {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+hr {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: calc(1.45rem - 1px);
+ background: hsla(0, 0%, 0%, 0.2);
+ border: none;
+ height: 1px;
+}
+address {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+b {
+ font-weight: bold;
+}
+strong {
+ font-weight: bold;
+}
+dt {
+ font-weight: bold;
+}
+th {
+ font-weight: bold;
+}
+li {
+ margin-bottom: calc(1.45rem / 2);
+}
+ol li {
+ padding-left: 0;
+}
+ul li {
+ padding-left: 0;
+}
+li > ol {
+ margin-left: 1.45rem;
+ margin-bottom: calc(1.45rem / 2);
+ margin-top: calc(1.45rem / 2);
+}
+li > ul {
+ margin-left: 1.45rem;
+ margin-bottom: calc(1.45rem / 2);
+ margin-top: calc(1.45rem / 2);
+}
+blockquote *:last-child {
+ margin-bottom: 0;
+}
+li *:last-child {
+ margin-bottom: 0;
+}
+p *:last-child {
+ margin-bottom: 0;
+}
+li > p {
+ margin-bottom: calc(1.45rem / 2);
+}
+code {
+ font-size: 0.85rem;
+ line-height: 1.45rem;
+}
+kbd {
+ font-size: 0.85rem;
+ line-height: 1.45rem;
+}
+samp {
+ font-size: 0.85rem;
+ line-height: 1.45rem;
+}
+abbr {
+ border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
+ cursor: help;
+}
+acronym {
+ border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
+ cursor: help;
+}
+abbr[title] {
+ border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
+ cursor: help;
+ text-decoration: none;
+}
+thead {
+ text-align: left;
+}
+td,
+th {
+ text-align: left;
+ border-bottom: 1px solid hsla(0, 0%, 0%, 0.12);
+ font-feature-settings: "tnum";
+ -moz-font-feature-settings: "tnum";
+ -ms-font-feature-settings: "tnum";
+ -webkit-font-feature-settings: "tnum";
+ padding-left: 0.96667rem;
+ padding-right: 0.96667rem;
+ padding-top: 0.725rem;
+ padding-bottom: calc(0.725rem - 1px);
+}
+th:first-child,
+td:first-child {
+ padding-left: 0;
+}
+th:last-child,
+td:last-child {
+ padding-right: 0;
+}
+tt,
+code {
+ background-color: hsla(0, 0%, 0%, 0.04);
+ border-radius: 3px;
+ font-family: "SFMono-Regular", Consolas, "Roboto Mono", "Droid Sans Mono",
+ "Liberation Mono", Menlo, Courier, monospace;
+ padding: 0;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+}
+pre code {
+ background: none;
+ line-height: 1.42;
+}
+code:before,
+code:after,
+tt:before,
+tt:after {
+ letter-spacing: -0.2em;
+ content: " ";
+}
+pre code:before,
+pre code:after,
+pre tt:before,
+pre tt:after {
+ content: "";
+}
+@media only screen and (max-width: 480px) {
+ html {
+ font-size: 100%;
+ }
+}
diff --git a/@linaria/examples/gatsby/custom-config/src/components/layout.js b/@linaria/examples/gatsby/custom-config/src/components/layout.js
new file mode 100644
index 0000000..0359ea6
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/components/layout.js
@@ -0,0 +1,51 @@
+/**
+ * Layout component that queries for data
+ * with Gatsby's useStaticQuery component
+ *
+ * See: https://www.gatsbyjs.org/docs/use-static-query/
+ */
+
+import React from "react"
+import PropTypes from "prop-types"
+import { useStaticQuery, graphql } from "gatsby"
+
+import Header from "./header"
+import "./layout.css"
+
+const Layout = ({ children }) => {
+ const data = useStaticQuery(graphql`
+ query SiteTitleQuery {
+ site {
+ siteMetadata {
+ title
+ }
+ }
+ }
+ `)
+
+ return (
+ <>
+ <Header siteTitle={data.site.siteMetadata.title} />
+ <div
+ style={{
+ margin: `0 auto`,
+ maxWidth: 960,
+ padding: `0 1.0875rem 1.45rem`,
+ }}
+ >
+ <main>{children}</main>
+ <footer>
+ © {new Date().getFullYear()}, Built with
+ {` `}
+ <a href="https://www.gatsbyjs.org">Gatsby</a>
+ </footer>
+ </div>
+ </>
+ )
+}
+
+Layout.propTypes = {
+ children: PropTypes.node.isRequired,
+}
+
+export default Layout
diff --git a/@linaria/examples/gatsby/custom-config/src/components/seo.js b/@linaria/examples/gatsby/custom-config/src/components/seo.js
new file mode 100644
index 0000000..aee4d45
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/components/seo.js
@@ -0,0 +1,88 @@
+/**
+ * SEO component that queries for data with
+ * Gatsby's useStaticQuery React hook
+ *
+ * See: https://www.gatsbyjs.org/docs/use-static-query/
+ */
+
+import React from "react"
+import PropTypes from "prop-types"
+import { Helmet } from "react-helmet"
+import { useStaticQuery, graphql } from "gatsby"
+
+function SEO({ description, lang, meta, title }) {
+ const { site } = useStaticQuery(
+ graphql`
+ query {
+ site {
+ siteMetadata {
+ title
+ description
+ author
+ }
+ }
+ }
+ `
+ )
+
+ const metaDescription = description || site.siteMetadata.description
+
+ return (
+ <Helmet
+ htmlAttributes={{
+ lang,
+ }}
+ title={title}
+ titleTemplate={`%s | ${site.siteMetadata.title}`}
+ meta={[
+ {
+ name: `description`,
+ content: metaDescription,
+ },
+ {
+ property: `og:title`,
+ content: title,
+ },
+ {
+ property: `og:description`,
+ content: metaDescription,
+ },
+ {
+ property: `og:type`,
+ content: `website`,
+ },
+ {
+ name: `twitter:card`,
+ content: `summary`,
+ },
+ {
+ name: `twitter:creator`,
+ content: site.siteMetadata.author,
+ },
+ {
+ name: `twitter:title`,
+ content: title,
+ },
+ {
+ name: `twitter:description`,
+ content: metaDescription,
+ },
+ ].concat(meta)}
+ />
+ )
+}
+
+SEO.defaultProps = {
+ lang: `en`,
+ meta: [],
+ description: ``,
+}
+
+SEO.propTypes = {
+ description: PropTypes.string,
+ lang: PropTypes.string,
+ meta: PropTypes.arrayOf(PropTypes.object),
+ title: PropTypes.string.isRequired,
+}
+
+export default SEO
diff --git a/@linaria/examples/gatsby/custom-config/src/images/gatsby-astronaut.png b/@linaria/examples/gatsby/custom-config/src/images/gatsby-astronaut.png
new file mode 100644
index 0000000..da58ece
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/images/gatsby-astronaut.png
Binary files differ
diff --git a/@linaria/examples/gatsby/custom-config/src/images/gatsby-icon.png b/@linaria/examples/gatsby/custom-config/src/images/gatsby-icon.png
new file mode 100644
index 0000000..908bc78
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/images/gatsby-icon.png
Binary files differ
diff --git a/@linaria/examples/gatsby/custom-config/src/pages/404.js b/@linaria/examples/gatsby/custom-config/src/pages/404.js
new file mode 100644
index 0000000..bc4c31d
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/pages/404.js
@@ -0,0 +1,14 @@
+import React from "react"
+
+import Layout from "../components/layout"
+import SEO from "../components/seo"
+
+const NotFoundPage = () => (
+ <Layout>
+ <SEO title="404: Not found" />
+ <h1>NOT FOUND</h1>
+ <p>You just hit a route that doesn&#39;t exist... the sadness.</p>
+ </Layout>
+)
+
+export default NotFoundPage
diff --git a/@linaria/examples/gatsby/custom-config/src/pages/index.js b/@linaria/examples/gatsby/custom-config/src/pages/index.js
new file mode 100644
index 0000000..e7cc99f
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/pages/index.js
@@ -0,0 +1,28 @@
+import React from "react"
+import { Link } from "gatsby"
+import { css } from "linaria"
+
+import Layout from "../components/layout"
+import Image from "../components/image"
+import SEO from "../components/seo"
+
+const imageWrapper = css`
+ max-width: 300px;
+ margin-bottom: 1.45rem;
+`
+
+const IndexPage = () => (
+ <Layout>
+ <SEO title="Home" />
+ <h1>Hi people</h1>
+ <p>Welcome to your new Gatsby site.</p>
+ <p>Now go build something great.</p>
+ <div className={imageWrapper}>
+ <Image />
+ </div>
+ <Link to="/page-2/">Go to page 2</Link> <br />
+ <Link to="/using-typescript/">Go to "Using TypeScript"</Link>
+ </Layout>
+)
+
+export default IndexPage
diff --git a/@linaria/examples/gatsby/custom-config/src/pages/page-2.js b/@linaria/examples/gatsby/custom-config/src/pages/page-2.js
new file mode 100644
index 0000000..666c23e
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/pages/page-2.js
@@ -0,0 +1,16 @@
+import React from "react"
+import { Link } from "gatsby"
+
+import Layout from "../components/layout"
+import SEO from "../components/seo"
+
+const SecondPage = () => (
+ <Layout>
+ <SEO title="Page two" />
+ <h1>Hi from the second page</h1>
+ <p>Welcome to page 2</p>
+ <Link to="/">Go back to the homepage</Link>
+ </Layout>
+)
+
+export default SecondPage
diff --git a/@linaria/examples/gatsby/custom-config/src/pages/using-typescript.tsx b/@linaria/examples/gatsby/custom-config/src/pages/using-typescript.tsx
new file mode 100644
index 0000000..f9212ca
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/src/pages/using-typescript.tsx
@@ -0,0 +1,34 @@
+// If you don't want to use TypeScript you can delete this file!
+import React from "react"
+import { PageProps, Link, graphql } from "gatsby"
+
+import Layout from "../components/layout"
+import SEO from "../components/seo"
+
+type DataProps = {
+ site: {
+ buildTime: string
+ }
+}
+
+const UsingTypescript: React.FC<PageProps<DataProps>> = ({ data, path }) => (
+ <Layout>
+ <SEO title="Using TypeScript" />
+ <h1>Gatsby supports TypeScript by default!</h1>
+ <p>This means that you can create and write <em>.ts/.tsx</em> files for your pages, components etc. Please note that the <em>gatsby-*.js</em> files (like gatsby-node.js) currently don't support TypeScript yet.</p>
+ <p>For type checking you'll want to install <em>typescript</em> via npm and run <em>tsc --init</em> to create a <em>.tsconfig</em> file.</p>
+ <p>You're currently on the page "{path}" which was built on {data.site.buildTime}.</p>
+ <p>To learn more, head over to our <a href="https://www.gatsbyjs.org/docs/typescript/">documentation about TypeScript</a>.</p>
+ <Link to="/">Go back to the homepage</Link>
+ </Layout>
+)
+
+export default UsingTypescript
+
+export const query = graphql`
+ {
+ site {
+ buildTime(formatString: "YYYY-MM-DD hh:mm a z")
+ }
+ }
+`
diff --git a/@linaria/examples/gatsby/custom-config/yarn.lock b/@linaria/examples/gatsby/custom-config/yarn.lock
new file mode 100644
index 0000000..0ea8bd9
--- /dev/null
+++ b/@linaria/examples/gatsby/custom-config/yarn.lock
@@ -0,0 +1,15445 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1", "@babel/code-frame@^7.8.3":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff"
+ integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==
+ dependencies:
+ "@babel/highlight" "^7.10.1"
+
+"@babel/compat-data@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db"
+ integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw==
+ dependencies:
+ browserslist "^4.12.0"
+ invariant "^2.2.4"
+ semver "^5.5.0"
+
+"@babel/core@7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376"
+ integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/generator" "^7.9.6"
+ "@babel/helper-module-transforms" "^7.9.0"
+ "@babel/helpers" "^7.9.6"
+ "@babel/parser" "^7.9.6"
+ "@babel/template" "^7.8.6"
+ "@babel/traverse" "^7.9.6"
+ "@babel/types" "^7.9.6"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/core@^7.0.0", "@babel/core@^7.10.2", "@babel/core@^7.3.3":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a"
+ integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.1"
+ "@babel/generator" "^7.10.2"
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helpers" "^7.10.1"
+ "@babel/parser" "^7.10.2"
+ "@babel/template" "^7.10.1"
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.2"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.10.1", "@babel/generator@^7.10.2", "@babel/generator@^7.3.3", "@babel/generator@^7.5.0", "@babel/generator@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9"
+ integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==
+ dependencies:
+ "@babel/types" "^7.10.2"
+ jsesc "^2.5.1"
+ lodash "^4.17.13"
+ source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268"
+ integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059"
+ integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-builder-react-jsx-experimental@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.1.tgz#9a7d58ad184d3ac3bafb1a452cec2bad7e4a0bc8"
+ integrity sha512-irQJ8kpQUV3JasXPSFQ+LCCtJSc5ceZrPFVj6TElR6XCHssi3jV8ch3odIrNtjJFRZZVbrOEfJMI79TPU/h1pQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-module-imports" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-builder-react-jsx@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.1.tgz#a327f0cf983af5554701b1215de54a019f09b532"
+ integrity sha512-KXzzpyWhXgzjXIlJU1ZjIXzUPdej1suE6vzqgImZ/cpAsR/CC8gUcX4EWRmDfWz/cs6HOCPMBIJ3nKoXt3BFuw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-compilation-targets@^7.10.2":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285"
+ integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==
+ dependencies:
+ "@babel/compat-data" "^7.10.1"
+ browserslist "^4.12.0"
+ invariant "^2.2.4"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/helper-create-class-features-plugin@^7.10.1":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz#7474295770f217dbcf288bf7572eb213db46ee67"
+ integrity sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/helper-member-expression-to-functions" "^7.10.1"
+ "@babel/helper-optimise-call-expression" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-replace-supers" "^7.10.1"
+ "@babel/helper-split-export-declaration" "^7.10.1"
+
+"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd"
+ integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-regex" "^7.10.1"
+ regexpu-core "^4.7.0"
+
+"@babel/helper-define-map@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d"
+ integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/types" "^7.10.1"
+ lodash "^4.17.13"
+
+"@babel/helper-explode-assignable-expression@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e"
+ integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg==
+ dependencies:
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-function-name@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4"
+ integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.10.1"
+ "@babel/template" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-get-function-arity@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d"
+ integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-hoist-variables@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077"
+ integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-member-expression-to-functions@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15"
+ integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876"
+ integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-module-transforms@^7.10.1", "@babel/helper-module-transforms@^7.9.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622"
+ integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==
+ dependencies:
+ "@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-optimise-call-expression@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543"
+ integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-plugin-utils@7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
+ integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127"
+ integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==
+
+"@babel/helper-regex@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96"
+ integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==
+ dependencies:
+ lodash "^4.17.13"
+
+"@babel/helper-remap-async-to-generator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432"
+ integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-wrap-function" "^7.10.1"
+ "@babel/template" "^7.10.1"
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-replace-supers@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d"
+ integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==
+ dependencies:
+ "@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-simple-access@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e"
+ integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==
+ dependencies:
+ "@babel/template" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-split-export-declaration@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f"
+ integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-validator-identifier@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5"
+ integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==
+
+"@babel/helper-wrap-function@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9"
+ integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/template" "^7.10.1"
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helpers@^7.10.1", "@babel/helpers@^7.9.6":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973"
+ integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==
+ dependencies:
+ "@babel/template" "^7.10.1"
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/highlight@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0"
+ integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.1"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@7.10.2", "@babel/parser@^7.0.0", "@babel/parser@^7.10.1", "@babel/parser@^7.10.2", "@babel/parser@^7.7.0", "@babel/parser@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0"
+ integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==
+
+"@babel/plugin-proposal-async-generator-functions@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55"
+ integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-remap-async-to-generator" "^7.10.1"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+
+"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01"
+ integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-proposal-dynamic-import@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0"
+ integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+
+"@babel/plugin-proposal-export-namespace-from@^7.2.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.1.tgz#512ee069cd866256600bdf89639cf7e1b51fbfe9"
+ integrity sha512-eR4CoYb6mh5y9LWjnb4CyUatuhtZ8pNLXLDi46GkqtF7WPafFqXycHdvF5qWviozZVGRSAmHzdayc8wUReCdjA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09"
+ integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78"
+ integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+
+"@babel/plugin-proposal-numeric-separator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123"
+ integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.1"
+
+"@babel/plugin-proposal-object-rest-spread@7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63"
+ integrity sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-transform-parameters" "^7.9.5"
+
+"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6"
+ integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-transform-parameters" "^7.10.1"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2"
+ integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+
+"@babel/plugin-proposal-optional-chaining@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c"
+ integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+
+"@babel/plugin-proposal-private-methods@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598"
+ integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f"
+ integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-async-generators@^7.8.0":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5"
+ integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+ integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.1.tgz#cd4bbca62fb402babacb174f64f8734310d742f0"
+ integrity sha512-b3pWVncLBYoPP60UOTc7NMlbtsHQ6ITim78KQejNHK6WJ2mzV5kCcg4mIWpasAfJEgwVTibwo2e+FU7UEIKQUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-json-strings@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94"
+ integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz#0ae371134a42b91d5418feb3c8c8d43e1565d2da"
+ integrity sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99"
+ integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-top-level-await@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362"
+ integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-typescript@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.1.tgz#5e82bc27bb4202b93b949b029e699db536733810"
+ integrity sha512-X/d8glkrAtra7CaQGMiGs/OGa6XgUzqPcBXCIGFCpCqnfGlT0Wfbzo/B89xHhnInTaItPK8LALblVXcUOEh95Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b"
+ integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-async-to-generator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062"
+ integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-remap-async-to-generator" "^7.10.1"
+
+"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d"
+ integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e"
+ integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ lodash "^4.17.13"
+
+"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f"
+ integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-define-map" "^7.10.1"
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/helper-optimise-call-expression" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-replace-supers" "^7.10.1"
+ "@babel/helper-split-export-declaration" "^7.10.1"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07"
+ integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907"
+ integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee"
+ integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-duplicate-keys@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9"
+ integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-exponentiation-operator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3"
+ integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-flow-strip-types@^7.0.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.1.tgz#59eafbff9ae85ec8932d4c16c068654be814ec5e"
+ integrity sha512-i4o0YwiJBIsIx7/liVCZ3Q2WkWr1/Yu39PksBOnh/khW2SwIFsGa5Ze+MSon5KbDfrEHP9NeyefAgvUSXzaEkw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-flow" "^7.10.1"
+
+"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5"
+ integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d"
+ integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a"
+ integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39"
+ integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-modules-amd@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a"
+ integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.10.1", "@babel/plugin-transform-modules-commonjs@^7.2.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301"
+ integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-simple-access" "^7.10.1"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6"
+ integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.10.1"
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595"
+ integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c"
+ integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+
+"@babel/plugin-transform-new-target@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324"
+ integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde"
+ integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-replace-supers" "^7.10.1"
+
+"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.10.1", "@babel/plugin-transform-parameters@^7.9.5":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd"
+ integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d"
+ integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.1.tgz#e6a33f6d48dfb213dda5e007d0c7ff82b6a3d8ef"
+ integrity sha512-rBjKcVwjk26H3VX8pavMxGf33LNlbocMHdSeldIEswtQ/hrjyTG8fKKILW1cSkODyRovckN/uZlGb2+sAV9JUQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-react-jsx-development@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.1.tgz#1ac6300d8b28ef381ee48e6fec430cc38047b7f3"
+ integrity sha512-XwDy/FFoCfw9wGFtdn5Z+dHh6HXKHkC6DwKNWpN74VWinUagZfDcEJc3Y8Dn5B3WMVnAllX8Kviaw7MtC5Epwg==
+ dependencies:
+ "@babel/helper-builder-react-jsx-experimental" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-jsx" "^7.10.1"
+
+"@babel/plugin-transform-react-jsx-self@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.1.tgz#22143e14388d72eb88649606bb9e46f421bc3821"
+ integrity sha512-4p+RBw9d1qV4S749J42ZooeQaBomFPrSxa9JONLHJ1TxCBo3TzJ79vtmG2S2erUT8PDDrPdw4ZbXGr2/1+dILA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-jsx" "^7.10.1"
+
+"@babel/plugin-transform-react-jsx-source@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.1.tgz#30db3d4ee3cdebbb26a82a9703673714777a4273"
+ integrity sha512-neAbaKkoiL+LXYbGDvh6PjPG+YeA67OsZlE78u50xbWh2L1/C81uHiNP5d1fw+uqUIoiNdCC8ZB+G4Zh3hShJA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-jsx" "^7.10.1"
+
+"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.1.tgz#91f544248ba131486decb5d9806da6a6e19a2896"
+ integrity sha512-MBVworWiSRBap3Vs39eHt+6pJuLUAaK4oxGc8g+wY+vuSJvLiEQjW1LSTqKb8OUPtDvHCkdPhk7d6sjC19xyFw==
+ dependencies:
+ "@babel/helper-builder-react-jsx" "^7.10.1"
+ "@babel/helper-builder-react-jsx-experimental" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-jsx" "^7.10.1"
+
+"@babel/plugin-transform-react-pure-annotations@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.1.tgz#f5e7c755d3e7614d4c926e144f501648a5277b70"
+ integrity sha512-mfhoiai083AkeewsBHUpaS/FM1dmUENHBMpS/tugSJ7VXqXO5dCN1Gkint2YvM1Cdv1uhmAKt1ZOuAjceKmlLA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-regenerator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490"
+ integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw==
+ dependencies:
+ regenerator-transform "^0.14.2"
+
+"@babel/plugin-transform-reserved-words@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86"
+ integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-runtime@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz#fd1887f749637fb2ed86dc278e79eb41df37f4b1"
+ integrity sha512-4w2tcglDVEwXJ5qxsY++DgWQdNJcCCsPxfT34wCUwIf2E7dI7pMpH8JczkMBbgBTNzBX62SZlNJ9H+De6Zebaw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ resolve "^1.8.1"
+ semver "^5.5.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3"
+ integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8"
+ integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-sticky-regex@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00"
+ integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-regex" "^7.10.1"
+
+"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628"
+ integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-typeof-symbol@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e"
+ integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-typescript@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.1.tgz#2c54daea231f602468686d9faa76f182a94507a6"
+ integrity sha512-v+QWKlmCnsaimLeqq9vyCsVRMViZG1k2SZTlcZvB+TqyH570Zsij8nvVUZzOASCRiQFUxkLrn9Wg/kH0zgy5OQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-typescript" "^7.10.1"
+
+"@babel/plugin-transform-unicode-escapes@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940"
+ integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-unicode-regex@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f"
+ integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/polyfill@^7.8.7":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.10.1.tgz#d56d4c8be8dd6ec4dce2649474e9b707089f739f"
+ integrity sha512-TviueJ4PBW5p48ra8IMtLXVkDucrlOZAIZ+EXqS3Ot4eukHbWiqcn7DcqpA1k5PcKtmJ4Xl9xwdv6yQvvcA+3g==
+ dependencies:
+ core-js "^2.6.5"
+ regenerator-runtime "^0.13.4"
+
+"@babel/preset-env@^7.10.2":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb"
+ integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA==
+ dependencies:
+ "@babel/compat-data" "^7.10.1"
+ "@babel/helper-compilation-targets" "^7.10.2"
+ "@babel/helper-module-imports" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-proposal-async-generator-functions" "^7.10.1"
+ "@babel/plugin-proposal-class-properties" "^7.10.1"
+ "@babel/plugin-proposal-dynamic-import" "^7.10.1"
+ "@babel/plugin-proposal-json-strings" "^7.10.1"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1"
+ "@babel/plugin-proposal-numeric-separator" "^7.10.1"
+ "@babel/plugin-proposal-object-rest-spread" "^7.10.1"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.10.1"
+ "@babel/plugin-proposal-optional-chaining" "^7.10.1"
+ "@babel/plugin-proposal-private-methods" "^7.10.1"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.10.1"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+ "@babel/plugin-syntax-class-properties" "^7.10.1"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.1"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+ "@babel/plugin-syntax-top-level-await" "^7.10.1"
+ "@babel/plugin-transform-arrow-functions" "^7.10.1"
+ "@babel/plugin-transform-async-to-generator" "^7.10.1"
+ "@babel/plugin-transform-block-scoped-functions" "^7.10.1"
+ "@babel/plugin-transform-block-scoping" "^7.10.1"
+ "@babel/plugin-transform-classes" "^7.10.1"
+ "@babel/plugin-transform-computed-properties" "^7.10.1"
+ "@babel/plugin-transform-destructuring" "^7.10.1"
+ "@babel/plugin-transform-dotall-regex" "^7.10.1"
+ "@babel/plugin-transform-duplicate-keys" "^7.10.1"
+ "@babel/plugin-transform-exponentiation-operator" "^7.10.1"
+ "@babel/plugin-transform-for-of" "^7.10.1"
+ "@babel/plugin-transform-function-name" "^7.10.1"
+ "@babel/plugin-transform-literals" "^7.10.1"
+ "@babel/plugin-transform-member-expression-literals" "^7.10.1"
+ "@babel/plugin-transform-modules-amd" "^7.10.1"
+ "@babel/plugin-transform-modules-commonjs" "^7.10.1"
+ "@babel/plugin-transform-modules-systemjs" "^7.10.1"
+ "@babel/plugin-transform-modules-umd" "^7.10.1"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3"
+ "@babel/plugin-transform-new-target" "^7.10.1"
+ "@babel/plugin-transform-object-super" "^7.10.1"
+ "@babel/plugin-transform-parameters" "^7.10.1"
+ "@babel/plugin-transform-property-literals" "^7.10.1"
+ "@babel/plugin-transform-regenerator" "^7.10.1"
+ "@babel/plugin-transform-reserved-words" "^7.10.1"
+ "@babel/plugin-transform-shorthand-properties" "^7.10.1"
+ "@babel/plugin-transform-spread" "^7.10.1"
+ "@babel/plugin-transform-sticky-regex" "^7.10.1"
+ "@babel/plugin-transform-template-literals" "^7.10.1"
+ "@babel/plugin-transform-typeof-symbol" "^7.10.1"
+ "@babel/plugin-transform-unicode-escapes" "^7.10.1"
+ "@babel/plugin-transform-unicode-regex" "^7.10.1"
+ "@babel/preset-modules" "^0.1.3"
+ "@babel/types" "^7.10.2"
+ browserslist "^4.12.0"
+ core-js-compat "^3.6.2"
+ invariant "^2.2.2"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/preset-modules@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72"
+ integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/preset-react@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.1.tgz#e2ab8ae9a363ec307b936589f07ed753192de041"
+ integrity sha512-Rw0SxQ7VKhObmFjD/cUcKhPTtzpeviEFX1E6PgP+cYOhQ98icNqtINNFANlsdbQHrmeWnqdxA4Tmnl1jy5tp3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-transform-react-display-name" "^7.10.1"
+ "@babel/plugin-transform-react-jsx" "^7.10.1"
+ "@babel/plugin-transform-react-jsx-development" "^7.10.1"
+ "@babel/plugin-transform-react-jsx-self" "^7.10.1"
+ "@babel/plugin-transform-react-jsx-source" "^7.10.1"
+ "@babel/plugin-transform-react-pure-annotations" "^7.10.1"
+
+"@babel/preset-typescript@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.1.tgz#a8d8d9035f55b7d99a2461a0bdc506582914d07e"
+ integrity sha512-m6GV3y1ShiqxnyQj10600ZVOFrSSAa8HQ3qIUk2r+gcGtHTIRw0dJnFLt1WNXpKjtVw7yw1DAPU/6ma2ZvgJuA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-transform-typescript" "^7.10.1"
+
+"@babel/register@^7.0.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.1.tgz#b6567c5cb5049f44bbf8c35d6ff68ca3c43238ed"
+ integrity sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg==
+ dependencies:
+ find-cache-dir "^2.0.0"
+ lodash "^4.17.13"
+ make-dir "^2.1.0"
+ pirates "^4.0.0"
+ source-map-support "^0.5.16"
+
+"@babel/runtime-corejs3@^7.8.3":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.2.tgz#3511797ddf9a3d6f3ce46b99cc835184817eaa4e"
+ integrity sha512-+a2M/u7r15o3dV1NEizr9bRi+KUVnrs/qYxF0Z06DAPx/4VCWaz1WA7EcbE+uqGgt39lp5akWGmHsTseIkHkHg==
+ dependencies:
+ core-js-pure "^3.0.0"
+ regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839"
+ integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
+"@babel/standalone@^7.10.2":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.10.2.tgz#49dbbadcbc4b199df064d7d8b3e21c915b84abdb"
+ integrity sha512-PNQuj9oQH6BL/3l9iiL8hJLQwX14woA2/FHcPtNIZAc7IgFZYJdtMBMXiy4xcefADHTSvoBnmc2AybrHRW1IKQ==
+
+"@babel/template@^7.10.1", "@babel/template@^7.8.6":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811"
+ integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==
+ dependencies:
+ "@babel/code-frame" "^7.10.1"
+ "@babel/parser" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/traverse@7.10.1", "@babel/traverse@^7.0.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.6":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27"
+ integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.1"
+ "@babel/generator" "^7.10.1"
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/helper-split-export-declaration" "^7.10.1"
+ "@babel/parser" "^7.10.1"
+ "@babel/types" "^7.10.1"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.13"
+
+"@babel/types@7.10.2", "@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d"
+ integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.1"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
+"@emotion/cache@^10.0.27":
+ version "10.0.29"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0"
+ integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==
+ dependencies:
+ "@emotion/sheet" "0.9.4"
+ "@emotion/stylis" "0.8.5"
+ "@emotion/utils" "0.11.3"
+ "@emotion/weak-memoize" "0.2.5"
+
+"@emotion/core@^10.0.0", "@emotion/core@^10.0.28":
+ version "10.0.28"
+ resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.28.tgz#bb65af7262a234593a9e952c041d0f1c9b9bef3d"
+ integrity sha512-pH8UueKYO5jgg0Iq+AmCLxBsvuGtvlmiDCOuv8fGNYn3cowFpLN98L8zO56U0H1PjDIyAlXymgL3Wu7u7v6hbA==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ "@emotion/cache" "^10.0.27"
+ "@emotion/css" "^10.0.27"
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/sheet" "0.9.4"
+ "@emotion/utils" "0.11.3"
+
+"@emotion/css@^10.0.27":
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c"
+ integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==
+ dependencies:
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/utils" "0.11.3"
+ babel-plugin-emotion "^10.0.27"
+
+"@emotion/hash@0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+ integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
+"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.1":
+ version "0.8.8"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
+ integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==
+ dependencies:
+ "@emotion/memoize" "0.7.4"
+
+"@emotion/is-prop-valid@^0.7.3":
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc"
+ integrity sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==
+ dependencies:
+ "@emotion/memoize" "0.7.1"
+
+"@emotion/memoize@0.7.1":
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f"
+ integrity sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg==
+
+"@emotion/memoize@0.7.4", "@emotion/memoize@^0.7.1":
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
+ integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
+
+"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16":
+ version "0.11.16"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
+ integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==
+ dependencies:
+ "@emotion/hash" "0.8.0"
+ "@emotion/memoize" "0.7.4"
+ "@emotion/unitless" "0.7.5"
+ "@emotion/utils" "0.11.3"
+ csstype "^2.5.7"
+
+"@emotion/sheet@0.9.4":
+ version "0.9.4"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
+ integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
+
+"@emotion/styled-base@^10.0.27":
+ version "10.0.31"
+ resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a"
+ integrity sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ "@emotion/is-prop-valid" "0.8.8"
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/utils" "0.11.3"
+
+"@emotion/styled@*", "@emotion/styled@^10.0.0", "@emotion/styled@^10.0.27":
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf"
+ integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==
+ dependencies:
+ "@emotion/styled-base" "^10.0.27"
+ babel-plugin-emotion "^10.0.27"
+
+"@emotion/stylis@0.8.5":
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
+ integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
+
+"@emotion/unitless@0.7.5":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+ integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
+"@emotion/utils@0.11.3":
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
+ integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
+
+"@emotion/weak-memoize@0.2.5":
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
+ integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+
+"@graphql-tools/code-file-loader@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-6.0.9.tgz#3808b0d351bf698de438a7a2ac0c89aa2e73b56d"
+ integrity sha512-hYWns2FjemfNDwv/mLs650zrL6Kh1RLdcNFWSMT4/A/+3WgsW2CcOJL+2PB3+GBy8FwMbJO9P3nBz3bKRkhJaw==
+ dependencies:
+ "@graphql-tools/graphql-tag-pluck" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ fs-extra "9.0.1"
+ tslib "~2.0.0"
+
+"@graphql-tools/delegate@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-6.0.9.tgz#f3cd06837c502c596d1a3e1d625d9c95168825fc"
+ integrity sha512-v3qiQspXCr0/UGu0V8nEBS1Qwkb/zscgD321PgxgYFDljvBsAuysz7Q0DXl9OYkPqwS2RTPeYZZqsgahEpfpeg==
+ dependencies:
+ "@graphql-tools/schema" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ tslib "~2.0.0"
+
+"@graphql-tools/git-loader@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-6.0.9.tgz#be91e6368ee0282e7388337808a78e2a9f72b2ec"
+ integrity sha512-PhVWMVuFAWsi2NSBQDgykmLknN0lhysHi0SZBz+1z6RfJnHNGXhwG05T+7Mv77+kJ2Om4q3H6uBdKiqzAbLcrQ==
+ dependencies:
+ "@graphql-tools/graphql-tag-pluck" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ simple-git "2.6.0"
+
+"@graphql-tools/github-loader@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-6.0.9.tgz#15da96ffc86086c7ca74f064b8bd1b9eb4311775"
+ integrity sha512-2NC50j2gFV14k5Y0dOaviwWv+y+Ce0p3of6dDUp4fY3ebAZAFcvLnsvCQqRzAfWvZAwORWXRMtPlKq/t5N7mAA==
+ dependencies:
+ "@graphql-tools/graphql-tag-pluck" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ cross-fetch "3.0.4"
+
+"@graphql-tools/graphql-file-loader@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.0.9.tgz#b1bdf2dc6d6c6993eafc976b779a005e86a39479"
+ integrity sha512-Z+YIypr2SGcUwzhph3AZOnR2Mkb6Mg/Tk9neGAyYx/zvEHJMdUk21Q64B89mwBC1tPdgeEPHf4pDTVRLDk5wUg==
+ dependencies:
+ "@graphql-tools/import" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ fs-extra "9.0.1"
+ tslib "~2.0.0"
+
+"@graphql-tools/graphql-tag-pluck@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.0.9.tgz#dde8f2d1d7b1586fb37f666fc9ff81c9db31ea37"
+ integrity sha512-LvhIJ/pGXUAznB2WtcUNKhhkZHRD7ITZGsqOCFWoa/9c+MK7kt+sYj6D0Ve1rWOYGHnd5NyocHAnhYoIzipWng==
+ dependencies:
+ "@babel/parser" "7.10.2"
+ "@babel/traverse" "7.10.1"
+ "@babel/types" "7.10.2"
+ "@graphql-tools/utils" "6.0.9"
+ optionalDependencies:
+ vue-template-compiler "^2.6.11"
+
+"@graphql-tools/import@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.0.9.tgz#20d1ffc480e895de87a69eb94631332126751c29"
+ integrity sha512-e/t5sa29PCOnOdLaoPVWHV7fxag4HX/E1V4cWqvKHs01zei8jsG76SCN6w1PJ9IouJ7YZYhN295DQihCSpuSlQ==
+ dependencies:
+ fs-extra "9.0.1"
+ resolve-from "5.0.0"
+
+"@graphql-tools/json-file-loader@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-6.0.9.tgz#a91c834bef9cde4d6945b623e415e556314f43ff"
+ integrity sha512-M1/nymxnf980aKNQ2ZX8aEUb80eq/H4QrcUA4/h2iSDf3A+f52ai8FTgqmbxbosD5ApWvyVpRpeODSd9oryRXg==
+ dependencies:
+ "@graphql-tools/utils" "6.0.9"
+ fs-extra "9.0.1"
+ tslib "~2.0.0"
+
+"@graphql-tools/links@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/links/-/links-6.0.9.tgz#4dd0e7ffc96bc1a22bb9f3a2817e21ec16b52992"
+ integrity sha512-bw++CJ7Txr49ISPHEvnw4UUE+a/2lxsGFrF99ioXJUqeiluukdjVdszgxOr+SOrW/BdJYwMh7094dRkXc07mfg==
+ dependencies:
+ "@graphql-tools/utils" "6.0.9"
+ apollo-link "1.2.14"
+ apollo-upload-client "13.0.0"
+ cross-fetch "3.0.4"
+ form-data "3.0.0"
+ tslib "~2.0.0"
+
+"@graphql-tools/load-files@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/load-files/-/load-files-6.0.9.tgz#1f93590e84a1c5df23aa03b085d98223e38f153f"
+ integrity sha512-KNiAM/X5ldfJcuHOthcGoosiwQgBW2tqjs8WnjDORCDdA5ZJ1XGxYGy04R30740LxxBQhCBZ1joQNJ5biFPWzA==
+ dependencies:
+ fs-extra "9.0.1"
+ globby "11.0.1"
+ unixify "1.0.0"
+
+"@graphql-tools/load@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-6.0.9.tgz#53aaac36485556abd5ce4cffeb290ecf68549825"
+ integrity sha512-JDlLbkLlxjFF/of+HF3c+UnoK2AEgqeVS5xH6re60Khp2DiBvWOivACvPx4VxF49NLnvu1BYsGxxH0BGPbAA3A==
+ dependencies:
+ "@graphql-tools/merge" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ globby "11.0.1"
+ import-from "3.0.0"
+ is-glob "4.0.1"
+ p-limit "3.0.1"
+ tslib "~2.0.0"
+ unixify "1.0.0"
+ valid-url "1.0.9"
+
+"@graphql-tools/merge@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-6.0.9.tgz#2432352512825b0639d55d379acd172055e30d32"
+ integrity sha512-aOYgziSQnlubdaCFuPS5MNu9hmhMMfl65xvkZN1k5L/kP6rGN6SyjfeUEEzveOFgIYJbYxQEoxySD9gBAm8PiQ==
+ dependencies:
+ "@graphql-tools/schema" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ tslib "~2.0.0"
+
+"@graphql-tools/mock@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/mock/-/mock-6.0.9.tgz#f8aeaf0b2b81acc0873ae8aa8331c1d4c52d6591"
+ integrity sha512-ArnjFrHoTptsA1ZZIn5f88uUC97RM+VODaPqanfUYQ2uE/POZKBcb7wGPxcAx9mXesRKWJB3zD71LrBlF/xLpQ==
+ dependencies:
+ "@graphql-tools/schema" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ tslib "~2.0.0"
+
+"@graphql-tools/module-loader@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/module-loader/-/module-loader-6.0.9.tgz#695fca3eff24bdc8af2836e201988c490080fbd8"
+ integrity sha512-iyTAqGub8+SM0X6cFhqeEmRq7TAukGi1U2T6PbVDRmBThqZ7UYL9TsYKFaapSmHIEtVdFwMINDtGwJw/tOgMxw==
+ dependencies:
+ "@graphql-tools/utils" "6.0.9"
+ tslib "~2.0.0"
+
+"@graphql-tools/relay-operation-optimizer@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.0.9.tgz#ec808f00e117a0014410e0091b614072febce5bc"
+ integrity sha512-8TysXdOKOKVsRZNy80X+lzzuumwqtc23FaWDxpoBDidFq408QxJaA8NMrThiOxz/TjesVI/MDESfjizMcvwJUg==
+ dependencies:
+ "@graphql-tools/utils" "6.0.9"
+ relay-compiler "9.1.0"
+
+"@graphql-tools/resolvers-composition@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/resolvers-composition/-/resolvers-composition-6.0.9.tgz#f28b7092e09de99b31d93d5e34dfa65dfa410a4f"
+ integrity sha512-HFLSkSMRbLpVYKpRMhSj7NnLP9oDUyFvVm1drj7a/0oqxiih5KJ6UhiuuJnudIpHuVG+J7yNbhL4q2Ivp0t/lg==
+ dependencies:
+ "@graphql-tools/utils" "6.0.9"
+ lodash "4.17.15"
+
+"@graphql-tools/schema@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.0.9.tgz#1b9d7a465c0459cdfbce5860fa8c7ef89f0d96b5"
+ integrity sha512-lemY+UeZRVmMYPvszCKvPfaR+R0dR2FgqjhESzlNWBbLhHuCewilTzYuQ+A+o8hQxdtPGIHfNPGf6A0ZZ70jWw==
+ dependencies:
+ "@graphql-tools/utils" "6.0.9"
+ tslib "~2.0.0"
+
+"@graphql-tools/stitch@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/stitch/-/stitch-6.0.9.tgz#b0895d3566da9d1f29bdff71bcffe48e789eb777"
+ integrity sha512-jhh+gXQ0fy+SkC3ahIFeRfCZzug3+vWxXnajflSdmak8J4u0wLF2Wg/aCn1Kynv66Xi+Sf/0k5EcrkBOWP0bng==
+ dependencies:
+ "@graphql-tools/delegate" "6.0.9"
+ "@graphql-tools/schema" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ "@graphql-tools/wrap" "6.0.9"
+ tslib "~2.0.0"
+
+"@graphql-tools/url-loader@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-6.0.9.tgz#5a321ad545a037d81ddec423fcb6a337c3ae9e0d"
+ integrity sha512-Iaw8ntJYAI/ARNL6ngEXbjrKxzJzimnsM9afvSf6gamD776lkCn/3ULz8Ob+3lvQbMliEdiit3jLCopSbKJ8vQ==
+ dependencies:
+ "@graphql-tools/delegate" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ "@graphql-tools/wrap" "6.0.9"
+ "@types/websocket" "1.0.0"
+ cross-fetch "3.0.4"
+ subscriptions-transport-ws "0.9.16"
+ tslib "~2.0.0"
+ valid-url "1.0.9"
+ websocket "1.0.31"
+
+"@graphql-tools/utils@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.0.9.tgz#135a56f6520a99a2bbbfaf7d76bd5f681d1ce457"
+ integrity sha512-WtX+t64SCN9VejKA/gdtm2sHPOX8D1G1tAyrrKH7hnh6RaCmQwYkhs/f6tBnTTYOIBy7yVYNoXzqiv/tmOkAOQ==
+ dependencies:
+ camel-case "4.1.1"
+
+"@graphql-tools/wrap@6.0.9":
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-6.0.9.tgz#c8f447513ca9d10c31e695ad09992fb0c4ae0518"
+ integrity sha512-tvygPTfI8DcbT1rJ45dqkpbF6xYxy3/54yvrzgHJc674clAI9q98i16mql9iso3Rc9oSEt1CWUugmrNqgcgWrA==
+ dependencies:
+ "@graphql-tools/delegate" "6.0.9"
+ "@graphql-tools/schema" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ tslib "~2.0.0"
+
+"@hapi/address@2.x.x":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
+ integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
+
+"@hapi/bourne@1.x.x":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a"
+ integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
+
+"@hapi/hoek@8.x", "@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06"
+ integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==
+
+"@hapi/joi@^15.0.0", "@hapi/joi@^15.1.1":
+ version "15.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7"
+ integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==
+ dependencies:
+ "@hapi/address" "2.x.x"
+ "@hapi/bourne" "1.x.x"
+ "@hapi/hoek" "8.x.x"
+ "@hapi/topo" "3.x.x"
+
+"@hapi/topo@3.x.x":
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+ integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
+ dependencies:
+ "@hapi/hoek" "^8.3.0"
+
+"@jest/types@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
+ integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^15.0.0"
+ chalk "^3.0.0"
+
+"@jimp/bmp@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.10.3.tgz#79a23678e8389865c62e77b0dccc3e069dfc27f0"
+ integrity sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ bmp-js "^0.1.0"
+ core-js "^3.4.1"
+
+"@jimp/core@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.10.3.tgz#4095f3bef43837c85d8f8373b912bc431cfe6d1f"
+ integrity sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ any-base "^1.1.0"
+ buffer "^5.2.0"
+ core-js "^3.4.1"
+ exif-parser "^0.1.12"
+ file-type "^9.0.0"
+ load-bmfont "^1.3.1"
+ mkdirp "^0.5.1"
+ phin "^2.9.1"
+ pixelmatch "^4.0.2"
+ tinycolor2 "^1.4.1"
+
+"@jimp/custom@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.10.3.tgz#eb6201b2e8fdd83afc3d8b514538e5faa1d30980"
+ integrity sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/core" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/gif@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.10.3.tgz#7661280fd2b9cb70175b20e80f4e2b3e3ecf614e"
+ integrity sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ omggif "^1.0.9"
+
+"@jimp/jpeg@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.10.3.tgz#56f66874f204826291747ae12ff9eb337ab5cb8d"
+ integrity sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ jpeg-js "^0.3.4"
+
+"@jimp/plugin-blit@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz#095bafbb2d82c300159334a49a094f0b7d362ae6"
+ integrity sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-blur@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz#1bb91f730fda02b3c99d913e0191111327654766"
+ integrity sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-circle@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz#c5a6ec275cf1e86b1356824637910a299c9fd662"
+ integrity sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-color@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.10.3.tgz#810c0f7cb4ceb21da1aecfbdb6ae09f00c1c0bfa"
+ integrity sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ tinycolor2 "^1.4.1"
+
+"@jimp/plugin-contain@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz#cf62126a60260359061be456b2193818c5eb1df5"
+ integrity sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-cover@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz#7cdf56ce878c24adc35c583735015118c6de38b4"
+ integrity sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-crop@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz#03785181f62ddae9558ae73206f8d6217d7fa703"
+ integrity sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-displace@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz#cb5b225e6cf3cf44062b08cd2cf2115b3150d8c3"
+ integrity sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-dither@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz#c5c1cbbf157a771ba72b947dd9921a7bff3cf41a"
+ integrity sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-fisheye@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz#dee46d704df5c681556dc9ea9e87e8c77ac4fdda"
+ integrity sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-flip@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz#12f894f85b283ad4f43b492e0755f8ec9459bc60"
+ integrity sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-gaussian@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz#279222fc5d3aec24fab6162df2a1190309c71874"
+ integrity sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-invert@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz#6b7beacbe507fa03eec87b1d6343feba80e342eb"
+ integrity sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-mask@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz#72d994c3bb56c050a4edd6515f74b5b6d92dee69"
+ integrity sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-normalize@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz#f3cbb8a0fcc8e696619d5d46403b0620ee5240d6"
+ integrity sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-print@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.10.3.tgz#565d57a3a87dd59b4ede9cba7a6e34f8d01ed1b1"
+ integrity sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ load-bmfont "^1.4.0"
+
+"@jimp/plugin-resize@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz#616fab55a1996a12e9583e7c1fb76815388fc14b"
+ integrity sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-rotate@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz#cfcbdad664e13c84ce9b008ddbc157e03d7baa31"
+ integrity sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-scale@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz#b593081ff35b0e9e11d5e0a3188c590eaa838434"
+ integrity sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-shadow@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz#a9d54c8081a55152e5cc830cf5c898ab882b519a"
+ integrity sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-threshold@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz#8dd289c81de4bfbdb496f9c24496f9ee3b751ab5"
+ integrity sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugins@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.10.3.tgz#e15d7ba3f9e2a6b479efad5c344c8b61e01b7cb2"
+ integrity sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/plugin-blit" "^0.10.3"
+ "@jimp/plugin-blur" "^0.10.3"
+ "@jimp/plugin-circle" "^0.10.3"
+ "@jimp/plugin-color" "^0.10.3"
+ "@jimp/plugin-contain" "^0.10.3"
+ "@jimp/plugin-cover" "^0.10.3"
+ "@jimp/plugin-crop" "^0.10.3"
+ "@jimp/plugin-displace" "^0.10.3"
+ "@jimp/plugin-dither" "^0.10.3"
+ "@jimp/plugin-fisheye" "^0.10.3"
+ "@jimp/plugin-flip" "^0.10.3"
+ "@jimp/plugin-gaussian" "^0.10.3"
+ "@jimp/plugin-invert" "^0.10.3"
+ "@jimp/plugin-mask" "^0.10.3"
+ "@jimp/plugin-normalize" "^0.10.3"
+ "@jimp/plugin-print" "^0.10.3"
+ "@jimp/plugin-resize" "^0.10.3"
+ "@jimp/plugin-rotate" "^0.10.3"
+ "@jimp/plugin-scale" "^0.10.3"
+ "@jimp/plugin-shadow" "^0.10.3"
+ "@jimp/plugin-threshold" "^0.10.3"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
+"@jimp/png@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.10.3.tgz#5282cad239d02743137d88239e4cb1804ed877dd"
+ integrity sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ pngjs "^3.3.3"
+
+"@jimp/tiff@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.10.3.tgz#6d143bbc42b40c9f618686a596311b35f7ff8502"
+ integrity sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+ utif "^2.0.1"
+
+"@jimp/types@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.10.3.tgz#9122e0a3c70129c7f26c05bbeae5030ed3a6fd5d"
+ integrity sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/bmp" "^0.10.3"
+ "@jimp/gif" "^0.10.3"
+ "@jimp/jpeg" "^0.10.3"
+ "@jimp/png" "^0.10.3"
+ "@jimp/tiff" "^0.10.3"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
+"@jimp/utils@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.10.3.tgz#69209dd6c2d6fd956a0beb67a47c26cb6f52f3fe"
+ integrity sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+ regenerator-runtime "^0.13.3"
+
+"@mdx-js/mdx@^1.6.5":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.5.tgz#4e00ca5d38d678c6070d73819bb696e4030e2662"
+ integrity sha512-DC13eeEM0Dv9OD+UVhyB69BlV29d2eoAmfiR/XdgNl4R7YmRNEPGRD3QvGUdRUDxYdJBHauMz5ZIV507cNXXaA==
+ dependencies:
+ "@babel/core" "7.9.6"
+ "@babel/plugin-syntax-jsx" "7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "7.8.3"
+ "@mdx-js/util" "^1.6.5"
+ babel-plugin-apply-mdx-type-prop "^1.6.5"
+ babel-plugin-extract-import-names "^1.6.5"
+ camelcase-css "2.0.1"
+ detab "2.0.3"
+ hast-util-raw "5.0.2"
+ lodash.uniq "4.5.0"
+ mdast-util-to-hast "9.1.0"
+ remark-footnotes "1.0.0"
+ remark-mdx "^1.6.5"
+ remark-parse "8.0.2"
+ remark-squeeze-paragraphs "4.0.0"
+ style-to-object "0.3.0"
+ unified "9.0.0"
+ unist-builder "2.0.3"
+ unist-util-visit "2.0.2"
+
+"@mdx-js/react@^1.0.0", "@mdx-js/react@^1.5.2", "@mdx-js/react@^1.6.5":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.5.tgz#70380f25209b62ef69349b7eef09fad7e1103824"
+ integrity sha512-y1Yu9baw3KokFrs7g5RxHpJNSU4e1zk/5bAJX94yVATglG5HyAL0lYMySU8YzebXNE+fJJMCx9CuiQHy2ezoew==
+
+"@mdx-js/runtime@^1.6.5":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@mdx-js/runtime/-/runtime-1.6.5.tgz#d0f26ccf74ccab4a2e7a16f5fbb2106697df645a"
+ integrity sha512-JxyskuQaQwJBAjdClY7Un7wD+RWLkzPuox0Tfs72c4OQ5it1TzxCeQTL3Zv6ZsWzNCUgVt9o+h31+pbvYtsFsA==
+ dependencies:
+ "@mdx-js/mdx" "^1.6.5"
+ "@mdx-js/react" "^1.6.5"
+ buble-jsx-only "^0.19.8"
+
+"@mdx-js/util@^1.6.5":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.5.tgz#d3bf891748dcf49a148a4591ef6c16caae4b32ed"
+ integrity sha512-ljr9hGQYW3kZY1NmQbmSe4yXvgq3KDRt0FMBOB5OaDWqi4X2WzEsp6SZ02KmVrieNW1cjWlj13pgvcf0towZPw==
+
+"@mikaelkristiansson/domready@^1.0.10":
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/@mikaelkristiansson/domready/-/domready-1.0.10.tgz#f6d69866c0857664e70690d7a0bfedb72143adb5"
+ integrity sha512-6cDuZeKSCSJ1KvfEQ25Y8OXUjqDJZ+HgUs6dhASWbAX8fxVraTfPsSeRe2bN+4QJDsgUaXaMWBYfRomCr04GGg==
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+ integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ glob-to-regexp "^0.3.0"
+
+"@nodelib/fs.scandir@2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b"
+ integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.3"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
+ integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
+
+"@nodelib/fs.stat@^1.1.2":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
+ integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.3"
+ fastq "^1.6.0"
+
+"@pieh/friendly-errors-webpack-plugin@1.7.0-chalk-2":
+ version "1.7.0-chalk-2"
+ resolved "https://registry.yarnpkg.com/@pieh/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0-chalk-2.tgz#2e9da9d3ade9d18d013333eb408c457d04eabac0"
+ integrity sha512-65+vYGuDkHBCWWjqzzR/Ck318+d6yTI00EqII9qe3aPD1J3Olhvw0X38uM5moQb1PK/ksDXwSoPGt/5QhCiotw==
+ dependencies:
+ chalk "^2.4.2"
+ error-stack-parser "^2.0.0"
+ string-width "^2.0.0"
+ strip-ansi "^3"
+
+"@pmmmwh/react-refresh-webpack-plugin@^0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.3.3.tgz#40a3d674f42a011b7f30a9609aa8fb68ec3c39c9"
+ integrity sha512-uc6FmPEegAZawSHjUMFQwU7EjaDn7zy1iD/KD/wBROL9F4378OES8MKMYHoRAKT61Fk7LxVKZSDR5VespMQiqw==
+ dependencies:
+ ansi-html "^0.0.7"
+ error-stack-parser "^2.0.6"
+ html-entities "^1.2.1"
+ lodash.debounce "^4.0.8"
+ native-url "^0.2.6"
+ schema-utils "^2.6.5"
+
+"@reach/alert@0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/alert/-/alert-0.10.3.tgz#9e4278edf8e6cfbe94df9a105faaa1c049a84517"
+ integrity sha512-Nu0XRKsHdM4gblgIgfTyJSl2KV1vrRTVVCVpol/f/ZVckTXAM/qN0C+JCCZSMfdjtt3u29CX6pRNkVu3PLfYsQ==
+ dependencies:
+ "@reach/utils" "^0.10.3"
+ "@reach/visually-hidden" "^0.10.2"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/auto-id@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/auto-id/-/auto-id-0.10.3.tgz#d2b6fe3ccb81b0fb44dc8bd3aca567c94ac11f5e"
+ integrity sha512-LK3qIsurXnga+gUbjl6t6msrZ+F3aZMY+k2go5Xcns9b85bNRyF/LwlUtcGSqmhgqbVYvMcnLeEdSQLZRxCGnQ==
+ dependencies:
+ "@reach/utils" "^0.10.3"
+ tslib "^1.11.2"
+
+"@reach/combobox@0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/combobox/-/combobox-0.10.3.tgz#a5c2b76fdaf28a8872e5a49200570970da20e7e7"
+ integrity sha512-Z9Xl+j4Tm9JNC6ouHhzL0lv2Y+Of5/tD7CnpxaVudeIeXQKjeg5YSUCnIBU/OTUtRsIllkgACk70SGHqvntQAw==
+ dependencies:
+ "@reach/auto-id" "^0.10.3"
+ "@reach/descendants" "^0.10.3"
+ "@reach/popover" "^0.10.3"
+ "@reach/portal" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ highlight-words-core "1.2.2"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/descendants@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/descendants/-/descendants-0.10.3.tgz#c2cbd14c172cb82189bf6f290b09577193926a1a"
+ integrity sha512-1uwe2w49xSMF0ei1KedydB30sEWfyksk5axI3nEanwUDO7Sd1kCyt2GHZHoP2ESr6VQx2a9ETzMw8gKHsoy79g==
+ dependencies:
+ "@reach/utils" "^0.10.3"
+ tslib "^1.11.2"
+
+"@reach/dialog@0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/dialog/-/dialog-0.10.3.tgz#ba789809c3b194fff79d3bcb4a583c58e03edb83"
+ integrity sha512-RMpUHNjRQhkjGzKt9/oLmDhwUBikW3JbEzgzZngq5MGY5kWRPwYInLDkEA8We4E43AbBsl5J/PRzQha9V+EEXw==
+ dependencies:
+ "@reach/portal" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ prop-types "^15.7.2"
+ react-focus-lock "^2.3.1"
+ react-remove-scroll "^2.3.0"
+ tslib "^1.11.2"
+
+"@reach/menu-button@0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/menu-button/-/menu-button-0.10.3.tgz#6e72cd122e16f28c4b15a140f329be256adc72c8"
+ integrity sha512-50C5nl7JJG9YcKqngmwTLVft+ZF2MMieto1GSCC7qEU8ykUNz0p69Ipup+Eqjk7KRHpSIYPlYIfAOS75dDuiZQ==
+ dependencies:
+ "@reach/auto-id" "^0.10.3"
+ "@reach/descendants" "^0.10.3"
+ "@reach/popover" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/observe-rect@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@reach/observe-rect/-/observe-rect-1.1.0.tgz#4e967a93852b6004c3895d9ed8d4e5b41895afde"
+ integrity sha512-kE+jvoj/OyJV24C03VvLt5zclb9ArJi04wWXMMFwQvdZjdHoBlN4g0ZQFjyy/ejPF1Z/dpUD5dhRdBiUmIGZTA==
+
+"@reach/popover@0.10.3", "@reach/popover@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/popover/-/popover-0.10.3.tgz#82e29b91748869923756a165758a29c8269b93e3"
+ integrity sha512-41iNfdjd9/5HtYuhezTc9z9WGkloYFVB8wBmPX3QOTuBP4qYd0La5sXClrfyiVqPn/uj1gGzehrZKuh8oSkorw==
+ dependencies:
+ "@reach/portal" "^0.10.3"
+ "@reach/rect" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ tabbable "^4.0.0"
+ tslib "^1.11.2"
+
+"@reach/portal@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/portal/-/portal-0.10.3.tgz#2eb408cc246d3eabbbf3b47ca4dc9c381cdb1d88"
+ integrity sha512-t8c+jtDxMLSPRGg93sQd2s6dDNilh5/qdrwmx88ki7l9h8oIXqMxPP3kSkOqZ9cbVR0b2A68PfMhCDOwMGvkoQ==
+ dependencies:
+ "@reach/utils" "^0.10.3"
+ tslib "^1.11.2"
+
+"@reach/rect@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/rect/-/rect-0.10.3.tgz#b4fd7c730d27eaf5fdf04c9a65227cc805787803"
+ integrity sha512-OmnGfG+MdumviJXK5oPcrw2Nd4EgMPKLMCs03GrbkmZJwtXIQJNhQrVg60PQT6HKAKI0+0LobHKxHFT+7Ri7kw==
+ dependencies:
+ "@reach/observe-rect" "^1.1.0"
+ "@reach/utils" "^0.10.3"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/router@^1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.3.tgz#58162860dce6c9449d49be86b0561b5ef46d80db"
+ integrity sha512-gOIAiFhWdiVGSVjukKeNKkCRBLmnORoTPyBihI/jLunICPgxdP30DroAvPQuf1eVfQbfGJQDJkwhJXsNPMnVWw==
+ dependencies:
+ create-react-context "0.3.0"
+ invariant "^2.2.3"
+ prop-types "^15.6.1"
+ react-lifecycles-compat "^3.0.4"
+
+"@reach/tabs@0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/tabs/-/tabs-0.10.3.tgz#392461762b33af2476d26b3018e1489260532b85"
+ integrity sha512-yKHyb4NRah9+V8kjkgzIXnj+FPG9aNfHX9uBs32A4MAG4RQLsZr9jBVSoWV1jxMUcYDe4CLtQj8qVphaW/GB2A==
+ dependencies:
+ "@reach/auto-id" "^0.10.3"
+ "@reach/descendants" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/tooltip@0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/tooltip/-/tooltip-0.10.3.tgz#0f34630aceaba7da7ad2dd23f92cc0d484e7113f"
+ integrity sha512-tbj569uSJ+O86fAvR62lK8Tb00aTQxah6dFKgf06lskCGUoYzeFxkZTds9b+TRjzz9G1v68McQHwuAZUH0XrGA==
+ dependencies:
+ "@reach/auto-id" "^0.10.3"
+ "@reach/portal" "^0.10.3"
+ "@reach/rect" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ "@reach/visually-hidden" "^0.10.2"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/utils@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/utils/-/utils-0.10.3.tgz#e30f9b172d131161953df7dd01553c57ca4e78f8"
+ integrity sha512-LoIZSfVAJMA+DnzAMCMfc/wAM39iKT8BQQ9gI1FODpxd8nPFP4cKisMuRXImh2/iVtG2Z6NzzCNgceJSrywqFQ==
+ dependencies:
+ "@types/warning" "^3.0.0"
+ tslib "^1.11.2"
+ warning "^4.0.3"
+
+"@reach/visually-hidden@^0.10.2":
+ version "0.10.2"
+ resolved "https://registry.yarnpkg.com/@reach/visually-hidden/-/visually-hidden-0.10.2.tgz#cbe391c78be2139be9583bae5666ab58eb82f682"
+ integrity sha512-RWC2CZsEB6sUOMnBCiuemyesMVNOOKJP53j4RgbdaJ2zGFL6N+bh/E5bfZnAiVhjJ0G0laViE9s7iROaRWNFew==
+ dependencies:
+ tslib "^1.11.2"
+
+"@sindresorhus/is@^0.14.0":
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
+ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+
+"@sindresorhus/is@^0.7.0":
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
+ integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==
+
+"@styled-system/background@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba"
+ integrity sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/border@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/border/-/border-5.1.5.tgz#0493d4332d2b59b74bb0d57d08c73eb555761ba6"
+ integrity sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/color@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/color/-/color-5.1.2.tgz#b8d6b4af481faabe4abca1a60f8daa4ccc2d9f43"
+ integrity sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/core@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/core/-/core-5.1.2.tgz#b8b7b86455d5a0514f071c4fa8e434b987f6a772"
+ integrity sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==
+ dependencies:
+ object-assign "^4.1.1"
+
+"@styled-system/css@^5.0.0", "@styled-system/css@^5.0.16", "@styled-system/css@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/css/-/css-5.1.5.tgz#0460d5f3ff962fa649ea128ef58d9584f403bbbc"
+ integrity sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==
+
+"@styled-system/flexbox@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/flexbox/-/flexbox-5.1.2.tgz#077090f43f61c3852df63da24e4108087a8beecf"
+ integrity sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/grid@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/grid/-/grid-5.1.2.tgz#7165049877732900b99cd00759679fbe45c6c573"
+ integrity sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/layout@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/layout/-/layout-5.1.2.tgz#12d73e79887e10062f4dbbbc2067462eace42339"
+ integrity sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/position@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/position/-/position-5.1.2.tgz#56961266566836f57a24d8e8e33ce0c1adb59dd3"
+ integrity sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/shadow@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/shadow/-/shadow-5.1.2.tgz#beddab28d7de03cd0177a87ac4ed3b3b6d9831fd"
+ integrity sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/should-forward-prop@^5.0.0", "@styled-system/should-forward-prop@^5.1.2":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/should-forward-prop/-/should-forward-prop-5.1.5.tgz#c392008c6ae14a6eb78bf1932733594f7f7e5c76"
+ integrity sha512-+rPRomgCGYnUIaFabDoOgpSDc4UUJ1KsmlnzcEp0tu5lFrBQKgZclSo18Z1URhaZm7a6agGtS5Xif7tuC2s52Q==
+ dependencies:
+ "@emotion/is-prop-valid" "^0.8.1"
+ "@emotion/memoize" "^0.7.1"
+ styled-system "^5.1.5"
+
+"@styled-system/space@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/space/-/space-5.1.2.tgz#38925d2fa29a41c0eb20e65b7c3efb6e8efce953"
+ integrity sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/typography@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7"
+ integrity sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/variant@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/variant/-/variant-5.1.5.tgz#8446d8aad06af3a4c723d717841df2dbe4ddeafd"
+ integrity sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+ "@styled-system/css" "^5.1.5"
+
+"@szmarczak/http-timer@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
+ integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+ dependencies:
+ defer-to-connect "^1.0.1"
+
+"@theme-ui/color-modes@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/color-modes/-/color-modes-0.4.0-highlight.0.tgz#333400c5d30ac65b71ff1b23a7d7ebee72f3c477"
+ integrity sha512-xdcAgfkL0gs0Z832lojtNGiTNtnQKoCu85t3Cxvqg2r1hVHar0SOJAyx+ljdV6tIHsBTxgVwUvdcby+QYCghRg==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@theme-ui/core" "^0.4.0-highlight.0"
+ "@theme-ui/css" "^0.4.0-highlight.0"
+ deepmerge "^4.2.2"
+
+"@theme-ui/components@>= 0.4.0-alpha.0", "@theme-ui/components@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/components/-/components-0.4.0-highlight.0.tgz#e4eafd517e347b3c8f380906f504103e215ca222"
+ integrity sha512-dwVKGcXf29m4nehEKwaX/Vbl5fi/xhMNqHIYo1hnYmInKdUOnKDJOyxiiu4iNdmjTuXmpjj9WxBap1WHM07hkQ==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@emotion/styled" "^10.0.0"
+ "@styled-system/color" "^5.1.2"
+ "@styled-system/should-forward-prop" "^5.1.2"
+ "@styled-system/space" "^5.1.2"
+ "@theme-ui/css" "^0.4.0-highlight.0"
+
+"@theme-ui/core@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/core/-/core-0.4.0-highlight.0.tgz#8989fc45347ad750ab9b1ab10c896387582dd48f"
+ integrity sha512-r5S0tiO51sBrFPXWOnotWfhA+L+s60JI5ewLJU+P6wE2ZOKdnn3HorphRgZWusxjTrzjNfBfgwhwXK+GkQFycw==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@theme-ui/css" "^0.4.0-highlight.0"
+ deepmerge "^4.2.2"
+
+"@theme-ui/css@>= 0.4.0-alpha.0", "@theme-ui/css@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/css/-/css-0.4.0-highlight.0.tgz#ee239d61ce7c7e076ffb49a7c5fcd5b9f1bbfb48"
+ integrity sha512-0O9ERm3l4arXip9EmaVl83I84l0ZhEj1ZUrKHrNbjiW2/rhIdEWUQOdYcWdBCb8/nr5NwRMOJQ4rdqiUj7S5IQ==
+ dependencies:
+ csstype "^2.5.7"
+
+"@theme-ui/mdx@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/mdx/-/mdx-0.4.0-highlight.0.tgz#e7c9bfea7d2c9ab8cbd8318726d8e14661a2b373"
+ integrity sha512-kyEU0+AGaE3EoIe5Sip2PvEYx0w6CnkaryxEtqi6XH2A0Vu4jlRTVeDS0/ZrKVcsbqOWGdyc0Kpti3DN/JBhIg==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@emotion/styled" "^10.0.0"
+ "@mdx-js/react" "^1.0.0"
+
+"@theme-ui/theme-provider@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/theme-provider/-/theme-provider-0.4.0-highlight.0.tgz#88e8cb28bc5f7d9629573e1bdbec4369fdacd044"
+ integrity sha512-QBpTmyyQenyc6fZd/4ereXdMGZiaJ8IVN+FmoRXo9UnV3EJDBrAAt708lMRaVw7ccWpa4KQb7HQnN3FpxXlnTg==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@theme-ui/color-modes" "^0.4.0-highlight.0"
+ "@theme-ui/core" "^0.4.0-highlight.0"
+ "@theme-ui/mdx" "^0.4.0-highlight.0"
+
+"@types/color-name@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
+ integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
+
+"@types/configstore@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@types/configstore/-/configstore-2.1.1.tgz#cd1e8553633ad3185c3f2f239ecff5d2643e92b6"
+ integrity sha1-zR6FU2M60xhcPy8jns/10mQ+krY=
+
+"@types/debug@^0.0.30":
+ version "0.0.30"
+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-0.0.30.tgz#dc1e40f7af3b9c815013a7860e6252f6352a84df"
+ integrity sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ==
+
+"@types/eslint-visitor-keys@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
+ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+
+"@types/events@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
+ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
+
+"@types/get-port@^3.2.0":
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/@types/get-port/-/get-port-3.2.0.tgz#f9e0a11443cc21336470185eae3dfba4495d29bc"
+ integrity sha512-TiNg8R1kjDde5Pub9F9vCwZA/BNW9HeXP5b9j7Qucqncy/McfPZ6xze/EyBdXS5FhMIGN6Fx3vg75l5KHy3V1Q==
+
+"@types/glob@*", "@types/glob@^7.1.1":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz#06ca26521353a545d94a0adc74f38a59d232c987"
+ integrity sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==
+ dependencies:
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/glob@^5.0.34":
+ version "5.0.36"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.36.tgz#0c80a9c8664fc7d19781de229f287077fd622cb2"
+ integrity sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg==
+ dependencies:
+ "@types/events" "*"
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/history@*":
+ version "4.7.6"
+ resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.6.tgz#ed8fc802c45b8e8f54419c2d054e55c9ea344356"
+ integrity sha512-GRTZLeLJ8ia00ZH8mxMO8t0aC9M1N9bN461Z2eaRurJo6Fpa+utgCwLzI4jQHcrdzuzp5WPN9jRwpsCQ1VhJ5w==
+
+"@types/http-proxy@^1.17.4":
+ version "1.17.4"
+ resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.4.tgz#e7c92e3dbe3e13aa799440ff42e6d3a17a9d045b"
+ integrity sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q==
+ dependencies:
+ "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
+ integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^1.1.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
+ integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+ "@types/istanbul-lib-report" "*"
+
+"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4":
+ version "7.0.5"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
+ integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+
+"@types/lodash.sample@^4.2.6":
+ version "4.2.6"
+ resolved "https://registry.yarnpkg.com/@types/lodash.sample/-/lodash.sample-4.2.6.tgz#ec7f6a6dbd0401c4a1e5f5b3c85fa5a85a42a84a"
+ integrity sha512-hxBvsUjPcW1O8mC9TiBE4m8TwvLuUU+zW8J6GI1M6WmPg8J87mXGt7zavpJ/9Znb+0rVsSB3VNAjCFaJ9YUJKg==
+ dependencies:
+ "@types/lodash" "*"
+
+"@types/lodash@*", "@types/lodash@^4.14.92":
+ version "4.14.155"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.155.tgz#e2b4514f46a261fd11542e47519c20ebce7bc23a"
+ integrity sha512-vEcX7S7aPhsBCivxMwAANQburHBtfN9RdyXFk84IJmu2Z4Hkg1tOFgaslRiEqqvoLtbCBi6ika1EMspE+NZ9Lg==
+
+"@types/mdast@^3.0.0":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
+ integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/minimatch@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
+"@types/mkdirp@^0.5.2":
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f"
+ integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/node@*":
+ version "14.0.13"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9"
+ integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==
+
+"@types/node@^8.5.7":
+ version "8.10.61"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.61.tgz#d299136ce54bcaf1abaa4a487f9e4bedf6b0d393"
+ integrity sha512-l+zSbvT8TPRaCxL1l9cwHCb0tSqGAGcjPJFItGGYat5oCTiq1uQQKYg5m7AF1mgnEBzFXGLJ2LRmNjtreRX76Q==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/prop-types@*":
+ version "15.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
+ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
+
+"@types/q@^1.5.1":
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
+ integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
+
+"@types/reach__router@^1.3.3":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.5.tgz#14e1e981cccd3a5e50dc9e969a72de0b9d472f6d"
+ integrity sha512-h0NbqXN/tJuBY/xggZSej1SKQEstbHO7J/omt1tYoFGmj3YXOodZKbbqD4mNDh7zvEGYd7YFrac1LTtAr3xsYQ==
+ dependencies:
+ "@types/history" "*"
+ "@types/react" "*"
+
+"@types/react@*":
+ version "16.9.36"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.36.tgz#ade589ff51e2a903e34ee4669e05dbfa0c1ce849"
+ integrity sha512-mGgUb/Rk/vGx4NCvquRuSH0GHBQKb1OqpGS9cT9lFxlTLHZgkksgI60TuIxubmn7JuCb+sENHhQciqa0npm0AQ==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^2.2.0"
+
+"@types/reflexbox@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/reflexbox/-/reflexbox-4.0.1.tgz#dfe91aace3c931766507cfd1cce65498a4d052a0"
+ integrity sha512-Ucw4Fh13EYJdWS8zsyP6HJz8ooDL3LFwGT63J9Pu9hMqNRTO21yFaXH6BDUtNjD1zNyOxpv6Oe1+7Z90iiLFtQ==
+ dependencies:
+ "@emotion/styled" "*"
+ "@types/react" "*"
+ "@types/styled-system" "*"
+
+"@types/rimraf@^2.0.2":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.4.tgz#403887b0b53c6100a6c35d2ab24f6ccc042fec46"
+ integrity sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==
+ dependencies:
+ "@types/glob" "*"
+ "@types/node" "*"
+
+"@types/styled-system@*":
+ version "5.1.9"
+ resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.9.tgz#8baac8f6eca9e0bd5768c175ca5ce1f2d6f61ade"
+ integrity sha512-QlWv6tmQV8dqk8s+LSLb9QAtmuQEnfv4f8lKKZkMgDqRFVmxJDBwEw0u4zhpxp56u0hdR+TCIk9dGfOw3TkCoQ==
+ dependencies:
+ csstype "^2.6.9"
+
+"@types/styled-system__css@*":
+ version "5.0.11"
+ resolved "https://registry.yarnpkg.com/@types/styled-system__css/-/styled-system__css-5.0.11.tgz#a9ff7e5d75e69a0d5ccff36acb4bbd491f1a9da9"
+ integrity sha512-hUieAt4sFS7zwbdU9Vlnn/c3vkfhTMhyiccYGpUSX96nJ4BF3NjLIjMu3cQOYS5EX4gPkHJZhkfdw41ov1NjhQ==
+ dependencies:
+ csstype "^2.6.6"
+
+"@types/theme-ui@*":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@types/theme-ui/-/theme-ui-0.3.4.tgz#e2b313017243db7432f2ad2265b5b4214aa78645"
+ integrity sha512-68V4OR5fcS/IvAYJFilMa1g2SXC8/2D7+0jKp46PJO9OUz5PO/+l0zYAFVRh4IrVWfzXpEzjRp5H2Z8QPGVxOg==
+ dependencies:
+ "@emotion/serialize" "^0.11.15"
+ "@types/react" "*"
+ "@types/styled-system" "*"
+ "@types/styled-system__css" "*"
+ "@types/theme-ui__components" "*"
+ csstype "^2.6.6"
+
+"@types/theme-ui__components@*", "@types/theme-ui__components@^0.2.3":
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/@types/theme-ui__components/-/theme-ui__components-0.2.5.tgz#65ef4e160e2e0cf7c52ae220f6579a707d33667d"
+ integrity sha512-qqhIJboXzGXE0ZpKRHrwQvRbuOAcGNyAWMPXXP2jGs65XcaTuDJJpz1Rx5JCaQ1h+Tt99uIriRzZRthWarh1wg==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@emotion/styled" "^10.0.0"
+ "@types/react" "*"
+ "@types/styled-system" "*"
+ "@types/theme-ui" "*"
+
+"@types/tmp@^0.0.33":
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.0.33.tgz#1073c4bc824754ae3d10cfab88ab0237ba964e4d"
+ integrity sha1-EHPEvIJHVK49EM+riKsCN7qWTk0=
+
+"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+ integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+
+"@types/warning@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52"
+ integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=
+
+"@types/websocket@1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.0.tgz#828c794b0a50949ad061aa311af1009934197e4b"
+ integrity sha512-MLr8hDM8y7vvdAdnoDEP5LotRoYJj7wgT6mWzCUQH/gHqzS4qcnOT/K4dhC0WimWIUiA3Arj9QAJGGKNRiRZKA==
+ dependencies:
+ "@types/node" "*"
+
+"@types/yargs-parser@*":
+ version "15.0.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
+ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
+
+"@types/yargs@^15.0.0":
+ version "15.0.5"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79"
+ integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@types/yoga-layout@1.9.2":
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/@types/yoga-layout/-/yoga-layout-1.9.2.tgz#efaf9e991a7390dc081a0b679185979a83a9639a"
+ integrity sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==
+
+"@typescript-eslint/eslint-plugin@^2.24.0", "@typescript-eslint/eslint-plugin@^2.28.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9"
+ integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "2.34.0"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^3.0.0"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/experimental-utils@2.34.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
+ integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/typescript-estree" "2.34.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
+"@typescript-eslint/parser@^2.24.0", "@typescript-eslint/parser@^2.28.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8"
+ integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==
+ dependencies:
+ "@types/eslint-visitor-keys" "^1.0.0"
+ "@typescript-eslint/experimental-utils" "2.34.0"
+ "@typescript-eslint/typescript-estree" "2.34.0"
+ eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/typescript-estree@2.34.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
+ integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==
+ dependencies:
+ 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"
+
+"@urql/core@^1.12.0":
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/@urql/core/-/core-1.12.0.tgz#8a41de01a1a1145e8bea736dfb0ba8574daad8ff"
+ integrity sha512-OyE1FClMz+r3j3v5MxNGzlpvFZya7PQxbSya5qa2lIJdyf9AtExJwjxpjmOf3crQGUvxatRVso4F9SNLT5MDjQ==
+ dependencies:
+ wonka "^4.0.14"
+
+"@webassemblyjs/ast@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+ integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+ integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
+"@webassemblyjs/helper-api-error@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+ integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
+"@webassemblyjs/helper-buffer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+ integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+ integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+ integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+ integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+ integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+ integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+ integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+ integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+ integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
+"@webassemblyjs/wasm-edit@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+ integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/helper-wasm-section" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-opt" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+ integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+ integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+ integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+ integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-code-frame" "1.9.0"
+ "@webassemblyjs/helper-fsm" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+ integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@wry/equality@^0.1.2":
+ version "0.1.11"
+ resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790"
+ integrity sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==
+ dependencies:
+ tslib "^1.9.3"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn-dynamic-import@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
+ integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
+
+acorn-jsx@^5.0.1, acorn-jsx@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
+ integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
+
+acorn@^6.1.1, acorn@^6.4.1:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
+ integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
+
+acorn@^7.1.1, acorn@^7.2.0:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd"
+ integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
+
+address@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
+ integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==
+
+address@1.1.2, address@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
+ integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
+
+after@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+ integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
+
+aggregate-error@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0"
+ integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5:
+ version "6.12.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
+ integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+alphanum-sort@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+ integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+
+ansi-align@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
+ integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
+ dependencies:
+ string-width "^3.0.0"
+
+ansi-colors@^3.0.0:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+ integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
+ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-escapes@^4.2.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
+ integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
+ dependencies:
+ type-fest "^0.11.0"
+
+ansi-html@0.0.7, ansi-html@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+ integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
+ integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
+ dependencies:
+ "@types/color-name" "^1.1.1"
+ color-convert "^2.0.1"
+
+any-base@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
+ integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==
+
+any-promise@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
+ integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+apollo-link-http-common@^0.2.14, apollo-link-http-common@^0.2.16:
+ version "0.2.16"
+ resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz#756749dafc732792c8ca0923f9a40564b7c59ecc"
+ integrity sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg==
+ dependencies:
+ apollo-link "^1.2.14"
+ ts-invariant "^0.4.0"
+ tslib "^1.9.3"
+
+apollo-link-http@^1.5.17:
+ version "1.5.17"
+ resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.17.tgz#499e9f1711bf694497f02c51af12d82de5d8d8ba"
+ integrity sha512-uWcqAotbwDEU/9+Dm9e1/clO7hTB2kQ/94JYcGouBVLjoKmTeJTUPQKcJGpPwUjZcSqgYicbFqQSoJIW0yrFvg==
+ dependencies:
+ apollo-link "^1.2.14"
+ apollo-link-http-common "^0.2.16"
+ tslib "^1.9.3"
+
+apollo-link@1.2.14, apollo-link@^1.2.12, apollo-link@^1.2.14:
+ version "1.2.14"
+ resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9"
+ integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==
+ dependencies:
+ apollo-utilities "^1.3.0"
+ ts-invariant "^0.4.0"
+ tslib "^1.9.3"
+ zen-observable-ts "^0.8.21"
+
+apollo-upload-client@13.0.0, apollo-upload-client@^13.0.0:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-13.0.0.tgz#146d1ddd85d711fcac8ca97a72d3ca6787f2b71b"
+ integrity sha512-lJ9/bk1BH1lD15WhWRha2J3+LrXrPIX5LP5EwiOUHv8PCORp4EUrcujrA3rI5hZeZygrTX8bshcuMdpqpSrvtA==
+ dependencies:
+ "@babel/runtime" "^7.9.2"
+ apollo-link "^1.2.12"
+ apollo-link-http-common "^0.2.14"
+ extract-files "^8.0.0"
+
+apollo-utilities@^1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf"
+ integrity sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==
+ dependencies:
+ "@wry/equality" "^0.1.2"
+ fast-json-stable-stringify "^2.0.0"
+ ts-invariant "^0.4.0"
+ tslib "^1.10.0"
+
+application-config-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.0.tgz#193c5f0a86541a4c66fba1e2dc38583362ea5e8f"
+ integrity sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+arch@^2.1.0, arch@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf"
+ integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==
+
+archive-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70"
+ integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=
+ dependencies:
+ file-type "^4.2.0"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+aria-query@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
+ integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=
+ dependencies:
+ ast-types-flow "0.0.7"
+ commander "^2.11.0"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-rotate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/arr-rotate/-/arr-rotate-1.0.0.tgz#c11877d06a0a42beb39ab8956a06779d9b71d248"
+ integrity sha512-yOzOZcR9Tn7enTF66bqKorGGH0F36vcPaSWg8fO0c0UYb3LX3VMXj5ZxEqQLNOecAhlRJ7wYZja5i4jTlnbIfQ==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-filter@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+ integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-flatten@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+ integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+array-includes@^3.0.3, array-includes@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
+ integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0"
+ is-string "^1.0.5"
+
+array-map@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+ integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=
+
+array-reduce@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
+ integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
+ integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+arraybuffer.slice@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
+ integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+arrify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+ integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
+asap@~2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-types-flow@0.0.7, ast-types-flow@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-cache@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/async-cache/-/async-cache-1.1.0.tgz#4a9a5a89d065ec5d8e5254bd9ee96ba76c532b5a"
+ integrity sha1-SppaidBl7F2OUlS9nulrp2xTK1o=
+ dependencies:
+ lru-cache "^4.0.0"
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async@1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+
+async@^2.6.2, async@^2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+auto-bind@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb"
+ integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==
+
+autoprefixer@^9.8.0:
+ version "9.8.0"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz#68e2d2bef7ba4c3a65436f662d0a56a741e56511"
+ integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A==
+ dependencies:
+ browserslist "^4.12.0"
+ caniuse-lite "^1.0.30001061"
+ chalk "^2.4.2"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^7.0.30"
+ postcss-value-parser "^4.1.0"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2"
+ integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==
+
+axios@^0.19.2:
+ version "0.19.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
+ integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
+ dependencies:
+ follow-redirects "1.5.10"
+
+axobject-query@^2.0.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799"
+ integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==
+
+babel-code-frame@6.26.0, babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+babel-core@7.0.0-bridge.0:
+ version "7.0.0-bridge.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
+ integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
+
+babel-eslint@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
+ integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.7.0"
+ "@babel/traverse" "^7.7.0"
+ "@babel/types" "^7.7.0"
+ eslint-visitor-keys "^1.0.0"
+ resolve "^1.12.0"
+
+babel-extract-comments@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21"
+ integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==
+ dependencies:
+ babylon "^6.18.0"
+
+babel-loader@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3"
+ integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==
+ dependencies:
+ find-cache-dir "^2.1.0"
+ loader-utils "^1.4.0"
+ mkdirp "^0.5.3"
+ pify "^4.0.1"
+ schema-utils "^2.6.5"
+
+babel-plugin-add-module-exports@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.3.3.tgz#b9f7c0a93b989170dce07c3e97071a905a13fc29"
+ integrity sha512-hC37mm7aAdEb1n8SgggG8a1QuhZapsY/XLCi4ETSH6AVjXBCWEa50CXlOsAMPPWLnSx5Ns6mzz39uvuseh0Xjg==
+ optionalDependencies:
+ chokidar "^2.0.4"
+
+babel-plugin-apply-mdx-type-prop@^1.6.5:
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.5.tgz#61f6e16e3ee9d09660d510723199de743cd516f4"
+ integrity sha512-Bs2hv/bYFTJyhBqvsWOsceFyPXAhVM1gvwF8fIm6GeXYTQV+sY+qRR5TClamgr3OEsD8ZApmw+kxJSHgJggVyw==
+ dependencies:
+ "@babel/helper-plugin-utils" "7.8.3"
+ "@mdx-js/util" "^1.6.5"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+ integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-emotion@^10.0.27:
+ version "10.0.33"
+ resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03"
+ integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@emotion/hash" "0.8.0"
+ "@emotion/memoize" "0.7.4"
+ "@emotion/serialize" "^0.11.16"
+ babel-plugin-macros "^2.0.0"
+ babel-plugin-syntax-jsx "^6.18.0"
+ convert-source-map "^1.5.0"
+ escape-string-regexp "^1.0.5"
+ find-root "^1.1.0"
+ source-map "^0.5.7"
+
+babel-plugin-extract-import-names@^1.6.5:
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.5.tgz#b5b2639a9bbe880f2433736f1ca35c0a08d8518a"
+ integrity sha512-rrNoCZ1DHMdy3vuihvkuO2AjE2DVFrI78e61W7eVsgpNTbG0KO1UESQwXMTlS3v1PMnlEJjdvoteRAkatEkWFQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "7.8.3"
+
+babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
+ integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ cosmiconfig "^6.0.0"
+ resolve "^1.12.0"
+
+babel-plugin-remove-graphql-queries@^2.9.5:
+ version "2.9.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.9.5.tgz#b094d01e39d911e92317d38bee04bf4b2bf7c156"
+ integrity sha512-z0T2dMz6V8a8hC11NFDwnuT5xR0k4Vu4Zie4A5BPchQOe59uHpbaM54mMl66FUA/iLTfYC11xez1N3Wc1gV20w==
+
+babel-plugin-syntax-jsx@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+ integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
+
+babel-plugin-syntax-object-rest-spread@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+ integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
+
+babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0:
+ version "7.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf"
+ integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==
+
+babel-plugin-transform-object-rest-spread@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
+ integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=
+ dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.8.0"
+ babel-runtime "^6.26.0"
+
+babel-plugin-transform-react-remove-prop-types@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+ integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+
+babel-preset-fbjs@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541"
+ integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==
+ dependencies:
+ "@babel/plugin-proposal-class-properties" "^7.0.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/plugin-syntax-class-properties" "^7.0.0"
+ "@babel/plugin-syntax-flow" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ "@babel/plugin-transform-arrow-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoped-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoping" "^7.0.0"
+ "@babel/plugin-transform-classes" "^7.0.0"
+ "@babel/plugin-transform-computed-properties" "^7.0.0"
+ "@babel/plugin-transform-destructuring" "^7.0.0"
+ "@babel/plugin-transform-flow-strip-types" "^7.0.0"
+ "@babel/plugin-transform-for-of" "^7.0.0"
+ "@babel/plugin-transform-function-name" "^7.0.0"
+ "@babel/plugin-transform-literals" "^7.0.0"
+ "@babel/plugin-transform-member-expression-literals" "^7.0.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.0.0"
+ "@babel/plugin-transform-object-super" "^7.0.0"
+ "@babel/plugin-transform-parameters" "^7.0.0"
+ "@babel/plugin-transform-property-literals" "^7.0.0"
+ "@babel/plugin-transform-react-display-name" "^7.0.0"
+ "@babel/plugin-transform-react-jsx" "^7.0.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0"
+ "@babel/plugin-transform-spread" "^7.0.0"
+ "@babel/plugin-transform-template-literals" "^7.0.0"
+ babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0"
+
+babel-preset-gatsby@^0.4.9:
+ version "0.4.9"
+ resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-0.4.9.tgz#738460c86a172c9fc649c66e12db9b137c50a71a"
+ integrity sha512-Jh8d7d36O2G/bTofQohOuEPBbGwDY6JftiC2U4LCtnZ4WILCvMSnf1DvIP6Y9ZDNuVy8ETb2AzmAfW1Ys6jA1Q==
+ dependencies:
+ "@babel/plugin-proposal-class-properties" "^7.10.1"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1"
+ "@babel/plugin-proposal-optional-chaining" "^7.10.1"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+ "@babel/plugin-transform-runtime" "^7.10.1"
+ "@babel/plugin-transform-spread" "^7.10.1"
+ "@babel/preset-env" "^7.10.2"
+ "@babel/preset-react" "^7.10.1"
+ "@babel/runtime" "^7.10.2"
+ babel-plugin-dynamic-import-node "^2.3.3"
+ babel-plugin-macros "^2.8.0"
+ babel-plugin-transform-react-remove-prop-types "^0.4.24"
+ gatsby-core-utils "^1.3.5"
+
+babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+ integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+backo2@1.0.2, backo2@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+ integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
+
+bail@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
+ integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-arraybuffer@0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+ integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
+
+base64-js@^1.0.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
+base64id@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6"
+ integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+batch@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+ integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+better-assert@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+ integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
+ dependencies:
+ callsite "1.0.0"
+
+better-opn@1.0.0, better-opn@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-1.0.0.tgz#0454e4bb9115c6a9e4e5744417dd9c97fb9fce41"
+ integrity sha512-q3eO2se4sFbTERB1dFBDdjTiIIpRohMErpwBX21lhPvmgmQNNrcQj0zbWRhMREDesJvyod9kxBS3kOtdAvkB/A==
+ dependencies:
+ open "^6.4.0"
+
+better-queue-memory@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/better-queue-memory/-/better-queue-memory-1.0.4.tgz#f390d6b30bb3b36aaf2ce52b37a483e8a7a81a22"
+ integrity sha512-SWg5wFIShYffEmJpI6LgbL8/3Dqhku7xI1oEiy6FroP9DbcZlG0ZDjxvPdP9t7hTGW40IpIcC6zVoGT1oxjOuA==
+
+better-queue@^3.8.10:
+ version "3.8.10"
+ resolved "https://registry.yarnpkg.com/better-queue/-/better-queue-3.8.10.tgz#1c93b9ec4cb3d1b72eb91d0efcb84fc80e8c6835"
+ integrity sha512-e3gwNZgDCnNWl0An0Tz6sUjKDV9m6aB+K9Xg//vYeo8+KiH8pWhLFxkawcXhm6FpM//GfD9IQv/kmvWCAVVpKA==
+ dependencies:
+ better-queue-memory "^1.0.1"
+ node-eta "^0.9.0"
+ uuid "^3.0.0"
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+bin-build@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bin-build/-/bin-build-3.0.0.tgz#c5780a25a8a9f966d8244217e6c1f5082a143861"
+ integrity sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==
+ dependencies:
+ decompress "^4.0.0"
+ download "^6.2.2"
+ execa "^0.7.0"
+ p-map-series "^1.0.0"
+ tempfile "^2.0.0"
+
+bin-check@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bin-check/-/bin-check-4.1.0.tgz#fc495970bdc88bb1d5a35fc17e65c4a149fc4a49"
+ integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==
+ dependencies:
+ execa "^0.7.0"
+ executable "^4.1.0"
+
+bin-version-check@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-4.0.0.tgz#7d819c62496991f80d893e6e02a3032361608f71"
+ integrity sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==
+ dependencies:
+ bin-version "^3.0.0"
+ semver "^5.6.0"
+ semver-truncate "^1.1.2"
+
+bin-version@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-3.1.0.tgz#5b09eb280752b1bd28f0c9db3f96f2f43b6c0839"
+ integrity sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==
+ dependencies:
+ execa "^1.0.0"
+ find-versions "^3.0.0"
+
+bin-wrapper@^4.0.0, bin-wrapper@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz#99348f2cf85031e3ef7efce7e5300aeaae960605"
+ integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==
+ dependencies:
+ bin-check "^4.1.0"
+ bin-version-check "^4.0.0"
+ download "^7.1.0"
+ import-lazy "^3.1.0"
+ os-filter-obj "^2.0.0"
+ pify "^4.0.1"
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-extensions@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c"
+ integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bl@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
+ integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
+bl@^4.0.0, bl@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a"
+ integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
+blob@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
+ integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==
+
+bluebird@^3.5.5, bluebird@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bmp-js@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233"
+ integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM=
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
+ version "4.11.9"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
+ integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
+
+bn.js@^5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0"
+ integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==
+
+body-parser@1.19.0:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+ integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+ dependencies:
+ bytes "3.1.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ on-finished "~2.3.0"
+ qs "6.7.0"
+ raw-body "2.4.0"
+ type-is "~1.6.17"
+
+bonjour@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+ integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
+ dependencies:
+ array-flatten "^2.1.0"
+ deep-equal "^1.0.1"
+ dns-equal "^1.0.0"
+ dns-txt "^2.0.2"
+ multicast-dns "^6.0.1"
+ multicast-dns-service-types "^1.1.0"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+boxen@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-3.2.0.tgz#fbdff0de93636ab4450886b6ff45b92d098f45eb"
+ integrity sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^5.3.1"
+ chalk "^2.4.2"
+ cli-boxes "^2.2.0"
+ string-width "^3.0.0"
+ term-size "^1.2.0"
+ type-fest "^0.3.0"
+ widest-line "^2.0.0"
+
+boxen@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64"
+ integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^5.3.1"
+ chalk "^3.0.0"
+ cli-boxes "^2.2.0"
+ string-width "^4.1.0"
+ term-size "^2.1.0"
+ type-fest "^0.8.1"
+ widest-line "^3.1.0"
+
+brace-expansion@^1.0.0, brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.1, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11"
+ integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==
+ dependencies:
+ bn.js "^5.1.1"
+ browserify-rsa "^4.0.1"
+ create-hash "^1.2.0"
+ create-hmac "^1.1.7"
+ elliptic "^6.5.2"
+ inherits "^2.0.4"
+ parse-asn1 "^5.1.5"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d"
+ integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==
+ dependencies:
+ caniuse-lite "^1.0.30001043"
+ electron-to-chromium "^1.3.413"
+ node-releases "^1.1.53"
+ pkg-up "^2.0.0"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buble-jsx-only@^0.19.8:
+ version "0.19.8"
+ resolved "https://registry.yarnpkg.com/buble-jsx-only/-/buble-jsx-only-0.19.8.tgz#6e3524aa0f1c523de32496ac9aceb9cc2b493867"
+ integrity sha512-7AW19pf7PrKFnGTEDzs6u9+JZqQwM1VnLS19OlqYDhXomtFFknnoQJAPHeg84RMFWAvOhYrG7harizJNwUKJsA==
+ dependencies:
+ acorn "^6.1.1"
+ acorn-dynamic-import "^4.0.0"
+ acorn-jsx "^5.0.1"
+ chalk "^2.4.2"
+ magic-string "^0.25.3"
+ minimist "^1.2.0"
+ regexpu-core "^4.5.4"
+
+buffer-alloc-unsafe@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+ integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.1.0, buffer-alloc@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+ integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+ dependencies:
+ buffer-alloc-unsafe "^1.1.0"
+ buffer-fill "^1.0.0"
+
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+
+buffer-equal@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
+ integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=
+
+buffer-fill@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+ integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-indexof@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+ integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
+ integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+
+builtin-modules@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484"
+ integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+ integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+
+bytes@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^12.0.2:
+ version "12.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+ integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cache-manager-fs-hash@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/cache-manager-fs-hash/-/cache-manager-fs-hash-0.0.8.tgz#55484c4bd03c7bc4ef43008292dd32b6f7f8d9bc"
+ integrity sha512-U4N81RiwyUVSAutgfWxW1sV6YJRk9QgizCRXOqdEevMDNA+0uiXtnZTHYfg11RKyJnX+yXsaPsJHloIylk4ZhQ==
+ dependencies:
+ lockfile "^1.0.4"
+
+cache-manager@^2.11.1:
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/cache-manager/-/cache-manager-2.11.1.tgz#212e8c3db15288af653b029a1d9fe12f1fd9df61"
+ integrity sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==
+ dependencies:
+ async "1.5.2"
+ lodash.clonedeep "4.5.0"
+ lru-cache "4.0.0"
+
+cacheable-request@^2.1.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d"
+ integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=
+ dependencies:
+ clone-response "1.0.2"
+ get-stream "3.0.0"
+ http-cache-semantics "3.8.1"
+ keyv "3.0.0"
+ lowercase-keys "1.0.0"
+ normalize-url "2.0.1"
+ responselike "1.0.2"
+
+cacheable-request@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
+ integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^3.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^4.1.0"
+ responselike "^1.0.2"
+
+call-me-maybe@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+ integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsite@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+ integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547"
+ integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==
+ dependencies:
+ pascal-case "^3.1.1"
+ tslib "^1.10.0"
+
+camelcase-css@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+ integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^5.0.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-api@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+ integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-lite "^1.0.0"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001061:
+ version "1.0.30001083"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001083.tgz#52410c20c6f029f604f0d45eca0439a82e712442"
+ integrity sha512-CnYJ27awX4h7yj5glfK7r1TOI13LBytpLzEgfj0s4mY75/F8pnQcYjL+oVpmS38FB59+vU0gscQ9D8tc+lIXvA==
+
+case@^1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9"
+ integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+caw@^2.0.0, caw@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95"
+ integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==
+ dependencies:
+ get-proxy "^2.0.0"
+ isurl "^1.0.0-alpha5"
+ tunnel-agent "^0.6.0"
+ url-to-options "^1.0.1"
+
+ccount@^1.0.0, ccount@^1.0.3:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17"
+ integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==
+
+chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+character-entities-html4@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
+ integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==
+
+character-entities-legacy@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
+ integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
+
+character-entities@^1.0.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
+ integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
+
+character-reference-invalid@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
+ integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
+
+chardet@^0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+ integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+charenc@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+ integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
+
+cheerio@^1.0.0-rc.3:
+ version "1.0.0-rc.3"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
+ integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
+ dependencies:
+ css-select "~1.2.0"
+ dom-serializer "~0.1.1"
+ entities "~1.1.1"
+ htmlparser2 "^3.9.1"
+ lodash "^4.15.0"
+ parse5 "^3.0.1"
+
+chokidar@3.4.0, chokidar@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8"
+ integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.4.0"
+ optionalDependencies:
+ fsevents "~2.1.2"
+
+chokidar@^2.0.4, chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+ci-info@2.0.0, ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-boxes@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d"
+ integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==
+
+cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-spinners@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
+ integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==
+
+cli-table3@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
+ integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==
+ dependencies:
+ object-assign "^4.1.0"
+ string-width "^2.1.1"
+ optionalDependencies:
+ colors "^1.1.2"
+
+cli-truncate@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+ integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+ dependencies:
+ slice-ansi "^3.0.0"
+ string-width "^4.2.0"
+
+cli-width@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+ integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
+
+clipboardy@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290"
+ integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==
+ dependencies:
+ arch "^2.1.1"
+ execa "^1.0.0"
+ is-wsl "^2.1.1"
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
+clone-response@1.0.2, clone-response@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
+ integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
+ dependencies:
+ mimic-response "^1.0.0"
+
+coa@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+ integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+ dependencies:
+ "@types/q" "^1.5.1"
+ chalk "^2.4.1"
+ q "^1.1.2"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collapse-white-space@^1.0.0, collapse-white-space@^1.0.2:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287"
+ integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0, color-convert@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@^1.0.0, color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^1.5.2:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+ integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@^3.0.0, color@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
+ integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
+ dependencies:
+ color-convert "^1.9.1"
+ color-string "^1.5.2"
+
+colors@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
+ integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
+
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+comma-separated-tokens@^1.0.0:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
+ integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
+
+command-exists@^1.2.4:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
+ integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
+
+commander@^2.11.0, commander@^2.20.0, commander@^2.20.3:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@~2.8.1:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
+ integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+common-tags@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
+ integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+ integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
+
+component-emitter@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+component-emitter@^1.2.1, component-emitter@~1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+ integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
+
+compressible@~2.0.16:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.16"
+ debug "2.6.9"
+ on-headers "~1.0.2"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+config-chain@^1.1.11:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
+ integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
+configstore@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
+ integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+configstore@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7"
+ integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+configstore@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
+ integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
+ dependencies:
+ dot-prop "^5.2.0"
+ graceful-fs "^4.1.2"
+ make-dir "^3.0.0"
+ unique-string "^2.0.0"
+ write-file-atomic "^3.0.0"
+ xdg-basedir "^4.0.0"
+
+confusing-browser-globals@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd"
+ integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==
+
+connect-history-api-fallback@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+ integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+console-stream@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44"
+ integrity sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+content-disposition@0.5.3, content-disposition@^0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
+
+content-type@^1.0.4, content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-hrtime@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/convert-hrtime/-/convert-hrtime-3.0.0.tgz#62c7593f5809ca10be8da858a6d2f702bcda00aa"
+ integrity sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==
+
+convert-source-map@^1.5.0, convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+
+cookie@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
+ integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+copyfiles@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.3.0.tgz#1c26ebbe3d46bba2d309a3fd8e3aaccf53af8c76"
+ integrity sha512-73v7KFuDFJ/ofkQjZBMjMBFWGgkS76DzXvBMUh7djsMOE5EELWtAO/hRB6Wr5Vj5Zg+YozvoHemv0vnXpqxmOQ==
+ dependencies:
+ glob "^7.0.5"
+ minimatch "^3.0.3"
+ mkdirp "^1.0.4"
+ noms "0.0.0"
+ through2 "^2.0.1"
+ yargs "^15.3.1"
+
+core-js-compat@^3.6.2:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"
+ integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==
+ dependencies:
+ browserslist "^4.8.5"
+ semver "7.0.0"
+
+core-js-pure@^3.0.0:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
+ integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
+
+core-js@^2.4.0, core-js@^2.4.1, core-js@^2.6.11, core-js@^2.6.5:
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
+ integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
+
+core-js@^3.4.1, core-js@^3.6.3:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
+ integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cors@^2.8.5:
+ version "2.8.5"
+ resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
+ integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
+ dependencies:
+ object-assign "^4"
+ vary "^1"
+
+cosmiconfig@^5.0.0, cosmiconfig@^5.1.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.1"
+ parse-json "^4.0.0"
+
+cosmiconfig@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.1.0"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.7.2"
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-emotion@^10.0.27:
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.27.tgz#cb4fa2db750f6ca6f9a001a33fbf1f6c46789503"
+ integrity sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg==
+ dependencies:
+ "@emotion/cache" "^10.0.27"
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/sheet" "0.9.4"
+ "@emotion/utils" "0.11.3"
+
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-react-context@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c"
+ integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==
+ dependencies:
+ gud "^1.0.0"
+ warning "^4.0.3"
+
+cross-fetch@2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.2.tgz#a47ff4f7fc712daba8f6a695a11c948440d45723"
+ integrity sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=
+ dependencies:
+ node-fetch "2.1.2"
+ whatwg-fetch "2.0.4"
+
+cross-fetch@3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.4.tgz#7bef7020207e684a7638ef5f2f698e24d9eb283c"
+ integrity sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw==
+ dependencies:
+ node-fetch "2.6.0"
+ whatwg-fetch "3.0.0"
+
+cross-spawn@5.1.0, cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^7.0.0:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypt@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+ integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+ integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
+
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+
+css-color-names@0.0.4, css-color-names@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+ integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
+
+css-declaration-sorter@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
+ integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
+ dependencies:
+ postcss "^7.0.1"
+ timsort "^0.3.0"
+
+css-loader@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe"
+ integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==
+ dependencies:
+ babel-code-frame "^6.26.0"
+ css-selector-tokenizer "^0.7.0"
+ icss-utils "^2.1.0"
+ loader-utils "^1.0.2"
+ lodash "^4.17.11"
+ postcss "^6.0.23"
+ postcss-modules-extract-imports "^1.2.0"
+ postcss-modules-local-by-default "^1.2.0"
+ postcss-modules-scope "^1.1.0"
+ postcss-modules-values "^1.3.0"
+ postcss-value-parser "^3.3.0"
+ source-list-map "^2.0.0"
+
+css-select-base-adapter@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+ integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^1.1.0, css-select@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-select@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+ integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^3.2.1"
+ domutils "^1.7.0"
+ nth-check "^1.0.2"
+
+css-selector-tokenizer@^0.7.0:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87"
+ integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==
+ dependencies:
+ cssesc "^3.0.0"
+ fastparse "^1.1.2"
+ regexpu-core "^4.6.0"
+
+css-tree@1.0.0-alpha.37:
+ version "1.0.0-alpha.37"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
+ integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
+ dependencies:
+ mdn-data "2.0.4"
+ source-map "^0.6.1"
+
+css-tree@1.0.0-alpha.39:
+ version "1.0.0-alpha.39"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb"
+ integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==
+ dependencies:
+ mdn-data "2.0.6"
+ source-map "^0.6.1"
+
+css-what@2.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+ integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+
+css-what@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39"
+ integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssfilter@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae"
+ integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=
+
+cssnano-preset-default@^4.0.7:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
+ integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==
+ dependencies:
+ css-declaration-sorter "^4.0.1"
+ cssnano-util-raw-cache "^4.0.1"
+ postcss "^7.0.0"
+ postcss-calc "^7.0.1"
+ postcss-colormin "^4.0.3"
+ postcss-convert-values "^4.0.1"
+ postcss-discard-comments "^4.0.2"
+ postcss-discard-duplicates "^4.0.2"
+ postcss-discard-empty "^4.0.1"
+ postcss-discard-overridden "^4.0.1"
+ postcss-merge-longhand "^4.0.11"
+ postcss-merge-rules "^4.0.3"
+ postcss-minify-font-values "^4.0.2"
+ postcss-minify-gradients "^4.0.2"
+ postcss-minify-params "^4.0.2"
+ postcss-minify-selectors "^4.0.2"
+ postcss-normalize-charset "^4.0.1"
+ postcss-normalize-display-values "^4.0.2"
+ postcss-normalize-positions "^4.0.2"
+ postcss-normalize-repeat-style "^4.0.2"
+ postcss-normalize-string "^4.0.2"
+ postcss-normalize-timing-functions "^4.0.2"
+ postcss-normalize-unicode "^4.0.1"
+ postcss-normalize-url "^4.0.1"
+ postcss-normalize-whitespace "^4.0.2"
+ postcss-ordered-values "^4.1.2"
+ postcss-reduce-initial "^4.0.3"
+ postcss-reduce-transforms "^4.0.2"
+ postcss-svgo "^4.0.2"
+ postcss-unique-selectors "^4.0.1"
+
+cssnano-util-get-arguments@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
+ integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=
+
+cssnano-util-get-match@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
+ integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=
+
+cssnano-util-raw-cache@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
+ integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
+ dependencies:
+ postcss "^7.0.0"
+
+cssnano-util-same-parent@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
+ integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
+
+cssnano@^4.1.10:
+ version "4.1.10"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
+ integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==
+ dependencies:
+ cosmiconfig "^5.0.0"
+ cssnano-preset-default "^4.0.7"
+ is-resolvable "^1.0.0"
+ postcss "^7.0.0"
+
+csso@^4.0.2:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903"
+ integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==
+ dependencies:
+ css-tree "1.0.0-alpha.39"
+
+csstype@^2.2.0, csstype@^2.5.7, csstype@^2.6.10, csstype@^2.6.6, csstype@^2.6.9:
+ version "2.6.10"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b"
+ integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+cwebp-bin@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cwebp-bin/-/cwebp-bin-5.1.0.tgz#d5bea87c127358558e7bf7a90a6d440d42dcb074"
+ integrity sha512-BsPKStaNr98zfxwejWWLIGELbPERULJoD2v5ijvpeutSAGsegX7gmABgnkRK7MUucCPROXXfaPqkLAwI509JzA==
+ dependencies:
+ bin-build "^3.0.0"
+ bin-wrapper "^4.0.1"
+ logalot "^2.1.0"
+
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
+damerau-levenshtein@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
+ integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+dataloader@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f"
+ integrity sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ==
+
+date-fns@^2.14.0, date-fns@^2.8.1:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.14.0.tgz#359a87a265bb34ef2e38f93ecf63ac453f9bc7ba"
+ integrity sha512-1zD+68jhFgDIM0rF05rcwYO8cExdNqxjq4xP1QKM60Q45mnO6zaMWB4tOzrIr4M4GSLntsKeE4c9Bdl2jhL/yw==
+
+de-indent@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
+ integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
+
+debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@=3.1.0, debug@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.1.2, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+decompress-response@^3.2.0, decompress-response@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+ integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
+ dependencies:
+ mimic-response "^1.0.0"
+
+decompress-response@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
+ integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
+ dependencies:
+ mimic-response "^2.0.0"
+
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+ dependencies:
+ mimic-response "^3.1.0"
+
+decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
+ integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==
+ dependencies:
+ file-type "^5.2.0"
+ is-stream "^1.1.0"
+ tar-stream "^1.5.2"
+
+decompress-tarbz2@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b"
+ integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==
+ dependencies:
+ decompress-tar "^4.1.0"
+ file-type "^6.1.0"
+ is-stream "^1.1.0"
+ seek-bzip "^1.0.5"
+ unbzip2-stream "^1.0.9"
+
+decompress-targz@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
+ integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
+ dependencies:
+ decompress-tar "^4.1.1"
+ file-type "^5.2.0"
+ is-stream "^1.1.0"
+
+decompress-unzip@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69"
+ integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k=
+ dependencies:
+ file-type "^3.8.0"
+ get-stream "^2.2.0"
+ pify "^2.3.0"
+ yauzl "^2.4.2"
+
+decompress@^4.0.0, decompress@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118"
+ integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==
+ dependencies:
+ decompress-tar "^4.0.0"
+ decompress-tarbz2 "^4.0.0"
+ decompress-targz "^4.0.0"
+ decompress-unzip "^4.0.1"
+ graceful-fs "^4.1.10"
+ make-dir "^1.0.0"
+ pify "^2.3.0"
+ strip-dirs "^2.0.0"
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-equal@^1.0.1, deep-equal@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+ integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+ dependencies:
+ is-arguments "^1.0.4"
+ is-date-object "^1.0.1"
+ is-regex "^1.0.4"
+ object-is "^1.0.1"
+ object-keys "^1.1.1"
+ regexp.prototype.flags "^1.2.0"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+deepmerge@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
+ integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==
+
+deepmerge@^4.0.0, deepmerge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+ integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+
+default-gateway@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
+ integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
+ dependencies:
+ execa "^1.0.0"
+ ip-regex "^2.1.0"
+
+defer-to-connect@^1.0.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
+ integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+del@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+ integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ globby "^6.1.0"
+ is-path-cwd "^2.0.0"
+ is-path-in-cwd "^2.0.0"
+ p-map "^2.0.0"
+ pify "^4.0.1"
+ rimraf "^2.6.3"
+
+del@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7"
+ integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==
+ dependencies:
+ globby "^10.0.1"
+ graceful-fs "^4.2.2"
+ is-glob "^4.0.1"
+ is-path-cwd "^2.2.0"
+ is-path-inside "^3.0.1"
+ p-map "^3.0.0"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+deprecated-decorator@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37"
+ integrity sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=
+
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detab@2.0.3, detab@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.3.tgz#33e5dd74d230501bd69985a0d2b9a3382699a130"
+ integrity sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==
+ dependencies:
+ repeat-string "^1.5.4"
+
+detect-indent@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd"
+ integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
+
+detect-libc@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+detect-newline@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-1.0.3.tgz#e97b1003877d70c09af1af35bfadff168de4920d"
+ integrity sha1-6XsQA4d9cMCa8a81v63/Fo3kkg0=
+ dependencies:
+ get-stdin "^4.0.1"
+ minimist "^1.1.0"
+
+detect-node@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
+ integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
+
+detect-port-alt@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.3.tgz#a4d2f061d757a034ecf37c514260a98750f2b131"
+ integrity sha1-pNLwYddXoDTs83xRQmCph1DysTE=
+ dependencies:
+ address "^1.0.1"
+ debug "^2.6.0"
+
+detect-port@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1"
+ integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==
+ dependencies:
+ address "^1.0.1"
+ debug "^2.6.0"
+
+devcert@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/devcert/-/devcert-1.1.1.tgz#a4175124c4d3bf02bc248987b9e069fd5e44d78b"
+ integrity sha512-4C1y6ZP9PFE1CK/Pgks4Qf1WA4rzJOtR2RJ7mkDfiQRixDNrtCkZiWvwSKb0AN830Dp4cgb+VLLi8eVWv7cC6A==
+ dependencies:
+ "@types/configstore" "^2.1.1"
+ "@types/debug" "^0.0.30"
+ "@types/get-port" "^3.2.0"
+ "@types/glob" "^5.0.34"
+ "@types/lodash" "^4.14.92"
+ "@types/mkdirp" "^0.5.2"
+ "@types/node" "^8.5.7"
+ "@types/rimraf" "^2.0.2"
+ "@types/tmp" "^0.0.33"
+ application-config-path "^0.1.0"
+ command-exists "^1.2.4"
+ configstore "^3.0.0"
+ debug "^3.1.0"
+ eol "^0.9.1"
+ get-port "^3.2.0"
+ glob "^7.1.2"
+ lodash "^4.17.4"
+ mkdirp "^0.5.1"
+ password-prompt "^1.0.4"
+ rimraf "^2.6.2"
+ sudo-prompt "^8.2.0"
+ tmp "^0.0.33"
+ tslib "^1.10.0"
+
+diff-sequences@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
+ integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+ integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
+ dependencies:
+ arrify "^1.0.1"
+ path-type "^3.0.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+dns-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+ integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
+
+dns-packet@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
+ integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
+ dependencies:
+ ip "^1.1.0"
+ safe-buffer "^5.0.1"
+
+dns-txt@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+ integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
+ dependencies:
+ buffer-indexof "^1.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-converter@^0.2:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+ integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+ dependencies:
+ utila "~0.4"
+
+dom-helpers@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
+ integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+
+dom-serializer@0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
+dom-serializer@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
+ integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
+ dependencies:
+ domelementtype "^1.3.0"
+ entities "^1.1.1"
+
+dom-walk@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
+ integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
+ integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==
+
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+domutils@^1.5.1, domutils@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dot-prop@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb"
+ integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==
+ dependencies:
+ is-obj "^2.0.0"
+
+dotenv@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
+ integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
+
+download@^6.2.2:
+ version "6.2.5"
+ resolved "https://registry.yarnpkg.com/download/-/download-6.2.5.tgz#acd6a542e4cd0bb42ca70cfc98c9e43b07039714"
+ integrity sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==
+ dependencies:
+ caw "^2.0.0"
+ content-disposition "^0.5.2"
+ decompress "^4.0.0"
+ ext-name "^5.0.0"
+ file-type "5.2.0"
+ filenamify "^2.0.0"
+ get-stream "^3.0.0"
+ got "^7.0.0"
+ make-dir "^1.0.0"
+ p-event "^1.0.0"
+ pify "^3.0.0"
+
+download@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233"
+ integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==
+ dependencies:
+ archive-type "^4.0.0"
+ caw "^2.0.1"
+ content-disposition "^0.5.2"
+ decompress "^4.2.0"
+ ext-name "^5.0.0"
+ file-type "^8.1.0"
+ filenamify "^2.0.0"
+ get-stream "^3.0.0"
+ got "^8.3.1"
+ make-dir "^1.2.0"
+ p-event "^2.1.0"
+ pify "^3.0.0"
+
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-to-chromium@^1.3.413:
+ version "1.3.473"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.473.tgz#d0cd5fe391046fb70674ec98149f0f97609d29b8"
+ integrity sha512-smevlzzMNz3vMz6OLeeCq5HRWEj2AcgccNPYnAx4Usx0IOciq9DU36RJcICcS09hXoY7t7deRfVYKD14IrGb9A==
+
+elliptic@^6.0.0, elliptic@^6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
+ integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1, emoji-regex@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+emotion@^10.0.27:
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/emotion/-/emotion-10.0.27.tgz#f9ca5df98630980a23c819a56262560562e5d75e"
+ integrity sha512-2xdDzdWWzue8R8lu4G76uWX5WhyQuzATon9LmNeCy/2BHVC6dsEpfhN1a0qhELgtDVdjyEA6J8Y/VlI5ZnaH0g==
+ dependencies:
+ babel-plugin-emotion "^10.0.27"
+ create-emotion "^10.0.27"
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+encoding@^0.1.11:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
+ dependencies:
+ iconv-lite "~0.4.13"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+engine.io-client@~3.4.0:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.3.tgz#192d09865403e3097e3575ebfeb3861c4d01a66c"
+ integrity sha512-0NGY+9hioejTEJCaSJZfWZLk4FPI9dN+1H1C4+wj2iuFba47UgZbJzfWs4aNFajnX/qAaYKbe2lLTfEEWzCmcw==
+ dependencies:
+ component-emitter "~1.3.0"
+ component-inherit "0.0.3"
+ debug "~4.1.0"
+ engine.io-parser "~2.2.0"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ ws "~6.1.0"
+ xmlhttprequest-ssl "~1.5.4"
+ yeast "0.1.2"
+
+engine.io-parser@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed"
+ integrity sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "~0.0.7"
+ base64-arraybuffer "0.1.5"
+ blob "0.0.5"
+ has-binary2 "~1.0.2"
+
+engine.io@~3.4.0:
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.2.tgz#8fc84ee00388e3e228645e0a7d3dfaeed5bd122c"
+ integrity sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg==
+ dependencies:
+ accepts "~1.3.4"
+ base64id "2.0.0"
+ cookie "0.3.1"
+ debug "~4.1.0"
+ engine.io-parser "~2.2.0"
+ ws "^7.1.2"
+
+enhanced-resolve@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
+ integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
+entities@^1.1.1, entities@~1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+entities@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
+ integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==
+
+envinfo@^7.5.1:
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236"
+ integrity sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ==
+
+eol@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd"
+ integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+error-stack-parser@^2.0.0, error-stack-parser@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8"
+ integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==
+ dependencies:
+ stackframe "^1.1.1"
+
+es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5:
+ version "1.17.6"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
+ integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.0"
+ is-regex "^1.1.0"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimend "^1.0.1"
+ string.prototype.trimstart "^1.0.1"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@^0.10.35, es5-ext@^0.10.50:
+ version "0.10.53"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
+ integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
+ dependencies:
+ es6-iterator "~2.0.3"
+ es6-symbol "~3.1.3"
+ next-tick "~1.0.0"
+
+es6-iterator@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
+es6-symbol@^3.1.1, es6-symbol@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+ integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+ dependencies:
+ d "^1.0.1"
+ ext "^1.1.2"
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-config-react-app@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df"
+ integrity sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==
+ dependencies:
+ confusing-browser-globals "^1.0.9"
+
+eslint-import-resolver-node@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
+ integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.13.1"
+
+eslint-loader@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337"
+ integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==
+ dependencies:
+ loader-fs-cache "^1.0.0"
+ loader-utils "^1.0.2"
+ object-assign "^4.0.1"
+ object-hash "^1.1.4"
+ rimraf "^2.6.1"
+
+eslint-module-utils@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
+ integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
+ dependencies:
+ debug "^2.6.9"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-flowtype@^3.13.0:
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz#e241ebd39c0ce519345a3f074ec1ebde4cf80f2c"
+ integrity sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==
+ dependencies:
+ lodash "^4.17.15"
+
+eslint-plugin-graphql@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-graphql/-/eslint-plugin-graphql-3.1.1.tgz#640f7f73f12cee2f7145140bd2ff21694018bff5"
+ integrity sha512-VNu2AipS8P1BAnE/tcJ2EmBWjFlCnG+1jKdUlFNDQjocWZlFiPpMu9xYNXePoEXK+q+jG51M/6PdhOjEgJZEaQ==
+ dependencies:
+ graphql-config "^2.0.1"
+ lodash "^4.11.1"
+
+eslint-plugin-import@^2.20.2:
+ version "2.21.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz#8fef77475cc5510801bedc95f84b932f7f334a7c"
+ integrity sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA==
+ dependencies:
+ array-includes "^3.1.1"
+ array.prototype.flat "^1.2.3"
+ contains-path "^0.1.0"
+ debug "^2.6.9"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.3"
+ eslint-module-utils "^2.6.0"
+ has "^1.0.3"
+ minimatch "^3.0.4"
+ object.values "^1.1.1"
+ read-pkg-up "^2.0.0"
+ resolve "^1.17.0"
+ tsconfig-paths "^3.9.0"
+
+eslint-plugin-jsx-a11y@^6.2.3:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa"
+ integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==
+ dependencies:
+ "@babel/runtime" "^7.4.5"
+ aria-query "^3.0.0"
+ array-includes "^3.0.3"
+ ast-types-flow "^0.0.7"
+ axobject-query "^2.0.2"
+ damerau-levenshtein "^1.0.4"
+ emoji-regex "^7.0.2"
+ has "^1.0.3"
+ jsx-ast-utils "^2.2.1"
+
+eslint-plugin-react-hooks@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
+ integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
+
+eslint-plugin-react@^7.20.0:
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3"
+ integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==
+ dependencies:
+ array-includes "^3.1.1"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.2.3"
+ object.entries "^1.1.1"
+ object.fromentries "^2.0.2"
+ object.values "^1.1.1"
+ prop-types "^15.7.2"
+ resolve "^1.15.1"
+ string.prototype.matchall "^4.0.2"
+ xregexp "^4.3.0"
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5"
+ integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-utils@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa"
+ integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ==
+
+eslint@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
+ integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ ajv "^6.10.0"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^1.4.3"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.1.2"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ inquirer "^7.0.0"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.14"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.3"
+ progress "^2.0.0"
+ regexpp "^2.0.1"
+ semver "^6.1.2"
+ strip-ansi "^5.2.0"
+ strip-json-comments "^3.0.1"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^6.1.2:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
+ integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-jsx "^5.2.0"
+ eslint-visitor-keys "^1.1.0"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
+ integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^4.1.0, estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
+ integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
+
+estree-walker@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
+ integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+event-source-polyfill@^1.0.15:
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/event-source-polyfill/-/event-source-polyfill-1.0.15.tgz#a28e116281be677af4b055b67d95517e35c92435"
+ integrity sha512-IVmd8jWwX6ag5rXIdVCPBjBChiHBceLb1/7aKPIK7CUeJ5Br7alx029+ZpQlK4jW4Hk2qncy3ClJP97S8ltvmg==
+
+eventemitter3@^3.1.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+ integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+
+eventemitter3@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
+ integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
+
+events@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
+ integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==
+
+eventsource@0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
+ integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=
+ dependencies:
+ original ">=0.0.5"
+
+eventsource@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
+ integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
+ dependencies:
+ original "^1.0.0"
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+exec-buffer@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b"
+ integrity sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==
+ dependencies:
+ execa "^0.7.0"
+ p-finally "^1.0.0"
+ pify "^3.0.0"
+ rimraf "^2.5.4"
+ tempfile "^2.0.0"
+
+execa@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
+ integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
+ integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ p-finally "^2.0.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+execa@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.2.tgz#ad87fb7b2d9d564f70d2b62d511bee41d5cbb240"
+ integrity sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+executable@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c"
+ integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==
+ dependencies:
+ pify "^2.2.0"
+
+exif-parser@^0.1.12:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
+ integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-template@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+ integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+express-graphql@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.9.0.tgz#00fd8552f866bac5c9a4612b2c4c82076107b3c2"
+ integrity sha512-wccd9Lb6oeJ8yHpUs/8LcnGjFUUQYmOG9A5BNLybRdCzGw0PeUrtBxsIR8bfiur6uSW4OvPkVDoYH06z6/N9+w==
+ dependencies:
+ accepts "^1.3.7"
+ content-type "^1.0.4"
+ http-errors "^1.7.3"
+ raw-body "^2.4.1"
+
+express@^4.17.1:
+ version "4.17.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
+ integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
+ dependencies:
+ accepts "~1.3.7"
+ array-flatten "1.1.1"
+ body-parser "1.19.0"
+ content-disposition "0.5.3"
+ content-type "~1.0.4"
+ cookie "0.4.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "~1.1.2"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.5"
+ qs "6.7.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.1.2"
+ send "0.17.1"
+ serve-static "1.14.1"
+ setprototypeof "1.1.1"
+ statuses "~1.5.0"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+ext-list@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37"
+ integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==
+ dependencies:
+ mime-db "^1.28.0"
+
+ext-name@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6"
+ integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==
+ dependencies:
+ ext-list "^2.0.0"
+ sort-keys-length "^1.0.0"
+
+ext@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
+ integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
+ dependencies:
+ type "^2.0.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^2.0.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+ integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+ dependencies:
+ chardet "^0.4.0"
+ iconv-lite "^0.4.17"
+ tmp "^0.0.33"
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extract-files@^8.0.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-8.1.0.tgz#46a0690d0fe77411a2e3804852adeaa65cd59288"
+ integrity sha512-PTGtfthZK79WUMk+avLmwx3NGdU8+iVFXC2NMGxKsn0MnihOG2lvumj+AZo8CTwTrwjXDgZ5tztbRlEdRjBonQ==
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^2.0.2, fast-glob@^2.2.2:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+ integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
+ dependencies:
+ "@mrmlnc/readdir-enhanced" "^2.2.1"
+ "@nodelib/fs.stat" "^1.1.2"
+ glob-parent "^3.1.0"
+ is-glob "^4.0.0"
+ merge2 "^1.2.3"
+ micromatch "^3.1.10"
+
+fast-glob@^3.0.3, fast-glob@^3.1.1:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d"
+ integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastparse@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
+ integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
+
+fastq@^1.6.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481"
+ integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==
+ dependencies:
+ reusify "^1.0.4"
+
+faye-websocket@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
+ integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+faye-websocket@~0.11.0, faye-websocket@~0.11.1:
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
+ integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
+fbjs-css-vars@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8"
+ integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==
+
+fbjs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a"
+ integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==
+ dependencies:
+ core-js "^2.4.1"
+ fbjs-css-vars "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.18"
+
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
+ dependencies:
+ pend "~1.2.0"
+
+fd@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/fd/-/fd-0.0.3.tgz#b3240de86dbf5a345baae7382a07d4713566ff0c"
+ integrity sha512-iAHrIslQb3U68OcMSP0kkNWabp7sSN6d2TBSb2JO3gcLJVDd4owr/hKM4SFJovFOUeeXeItjYgouEDTMWiVAnA==
+
+figgy-pudding@^3.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+ integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+
+figures@^1.3.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+figures@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+file-loader@^1.1.11:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8"
+ integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^0.4.5"
+
+file-type@5.2.0, file-type@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
+ integrity sha1-LdvqfHP/42No365J3DOMBYwritY=
+
+file-type@^10.7.0:
+ version "10.11.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-10.11.0.tgz#2961d09e4675b9fb9a3ee6b69e9cd23f43fd1890"
+ integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==
+
+file-type@^12.4.2:
+ version "12.4.2"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-12.4.2.tgz#a344ea5664a1d01447ee7fb1b635f72feb6169d9"
+ integrity sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==
+
+file-type@^3.8.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
+ integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
+
+file-type@^4.2.0, file-type@^4.3.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5"
+ integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU=
+
+file-type@^6.1.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
+ integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==
+
+file-type@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c"
+ integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==
+
+file-type@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18"
+ integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+filename-reserved-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
+ integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik=
+
+filenamify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9"
+ integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==
+ dependencies:
+ filename-reserved-regex "^2.0.0"
+ strip-outer "^1.0.0"
+ trim-repeated "^1.0.0"
+
+filesize@3.5.11:
+ version "3.5.11"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee"
+ integrity sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+finalhandler@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
+ unpipe "~1.0.0"
+
+find-cache-dir@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+ integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
+ dependencies:
+ commondir "^1.0.1"
+ mkdirp "^0.5.1"
+ pkg-dir "^1.0.0"
+
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-root@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-versions@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e"
+ integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==
+ dependencies:
+ semver-regex "^2.0.0"
+
+find-yarn-workspace-root@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db"
+ integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==
+ dependencies:
+ fs-extra "^4.0.3"
+ micromatch "^3.1.4"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flat@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
+ integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
+ dependencies:
+ is-buffer "~2.0.3"
+
+flatted@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
+ integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+fn-name@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c"
+ integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA==
+
+focus-lock@^0.6.7:
+ version "0.6.8"
+ resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.8.tgz#61985fadfa92f02f2ee1d90bc738efaf7f3c9f46"
+ integrity sha512-vkHTluRCoq9FcsrldC0ulQHiyBYgVJB2CX53I8r0nTC6KnEij7Of0jpBspjt3/CuNb6fyoj3aOh9J2HgQUM0og==
+
+follow-redirects@1.5.10:
+ version "1.5.10"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
+ integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
+ dependencies:
+ debug "=3.1.0"
+
+follow-redirects@^1.0.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb"
+ integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==
+ dependencies:
+ debug "^3.0.0"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@3.0.0, form-data@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
+ integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+formik@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/formik/-/formik-2.1.4.tgz#8deef07ec845ea98f75e03da4aad7aab4ac46570"
+ integrity sha512-oKz8S+yQBzuQVSEoxkqqJrKQS5XJASWGVn6mrs+oTWrBoHgByVwwI1qHiVc9GKDpZBU9vAxXYAKz2BvujlwunA==
+ dependencies:
+ deepmerge "^2.1.1"
+ hoist-non-react-statics "^3.3.0"
+ lodash "^4.17.14"
+ lodash-es "^4.17.14"
+ react-fast-compare "^2.0.1"
+ scheduler "^0.18.0"
+ tiny-warning "^1.0.2"
+ tslib "^1.10.0"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from2@^2.1.0, from2@^2.1.1:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-exists-cached@1.0.0, fs-exists-cached@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce"
+ integrity sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=
+
+fs-extra@9.0.1:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc"
+ integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^1.0.0"
+
+fs-extra@^4.0.2, fs-extra@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
+ integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+ integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+fsevents@~2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
+ integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+gatsby-admin@^0.1.67:
+ version "0.1.67"
+ resolved "https://registry.yarnpkg.com/gatsby-admin/-/gatsby-admin-0.1.67.tgz#2813d25ed25f11375500fbe9399ee64ea7a97d66"
+ integrity sha512-8TCI6TEycyb3qWmrRm6GieCMVsNnuAkbMXwl8grg5Vyi0UA2oGxilTTwfQERjLNfpsPpuI0rn0197clgYZCwQA==
+ dependencies:
+ "@emotion/core" "^10.0.28"
+ "@emotion/styled" "^10.0.27"
+ "@typescript-eslint/eslint-plugin" "^2.28.0"
+ "@typescript-eslint/parser" "^2.28.0"
+ csstype "^2.6.10"
+ formik "^2.1.4"
+ gatsby "^2.23.3"
+ gatsby-interface "0.0.167"
+ gatsby-plugin-typescript "^2.4.6"
+ gatsby-source-graphql "^2.5.4"
+ react "^16.12.0"
+ react-dom "^16.12.0"
+ react-helmet "^6.0.0"
+ react-icons "^3.10.0"
+ strict-ui "^0.1.3"
+ subscriptions-transport-ws "^0.9.16"
+ theme-ui "^0.4.0-alpha.3"
+ typescript "^3.9.3"
+ urql "^1.9.7"
+ yup "^0.29.1"
+
+gatsby-cli@^2.12.45:
+ version "2.12.45"
+ resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.12.45.tgz#5f99e8ea96264c55e981d13147c1a387c9bf1164"
+ integrity sha512-CY0ltZ5DvrSo30MkPcU2FFGiCrQUjirXAY7TdFEhc8IeV5Gj9E2AFmUF1FO4Dna6yv47WBBaHKFpsiKc5Iq0XA==
+ dependencies:
+ "@babel/code-frame" "^7.10.1"
+ "@babel/runtime" "^7.10.2"
+ "@hapi/joi" "^15.1.1"
+ better-opn "^1.0.0"
+ bluebird "^3.7.2"
+ chalk "^2.4.2"
+ clipboardy "^2.3.0"
+ common-tags "^1.8.0"
+ configstore "^5.0.1"
+ convert-hrtime "^3.0.0"
+ core-js "^2.6.11"
+ envinfo "^7.5.1"
+ execa "^3.4.0"
+ fs-exists-cached "^1.0.0"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.5"
+ gatsby-recipes "^0.1.39"
+ gatsby-telemetry "^1.3.11"
+ hosted-git-info "^3.0.4"
+ ink "^2.7.1"
+ ink-spinner "^3.0.1"
+ is-valid-path "^0.1.1"
+ lodash "^4.17.15"
+ meant "^1.0.1"
+ node-fetch "^2.6.0"
+ object.entries "^1.1.2"
+ opentracing "^0.14.4"
+ pretty-error "^2.1.1"
+ progress "^2.0.3"
+ prompts "^2.3.2"
+ react "^16.8.0"
+ redux "^4.0.5"
+ resolve-cwd "^3.0.0"
+ semver "^6.3.0"
+ signal-exit "^3.0.3"
+ source-map "0.7.3"
+ stack-trace "^0.0.10"
+ strip-ansi "^5.2.0"
+ update-notifier "^3.0.1"
+ uuid "3.4.0"
+ yargs "^15.3.1"
+ yurnalist "^1.1.2"
+
+gatsby-core-utils@^1.3.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-1.3.5.tgz#3c8f2dc940cec6570d1317f02ba028f327d1e773"
+ integrity sha512-kbwJ5BeQ8OixJVuBb1AGRL6vdkFz9nFBa6gXqjQ6AAXHhYDrjOYrRMIENT1QLoabWo6tlh0Hyl1agfWaQwW8lg==
+ dependencies:
+ ci-info "2.0.0"
+ configstore "^5.0.1"
+ fs-extra "^8.1.0"
+ node-object-hash "^2.0.0"
+ proper-lockfile "^4.1.1"
+ xdg-basedir "^4.0.0"
+
+gatsby-design-tokens@^2.0.2:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/gatsby-design-tokens/-/gatsby-design-tokens-2.0.6.tgz#593aa969e360560369fc59054c01236beed9be7d"
+ integrity sha512-N5lf7ajRz5Uc26U/c+/Xc1VDBSFNZiQYjKMacOPFiB9U8Z4exuIv08MKWHFRJiXZeK911WATXs/IoWmcWxJJrw==
+ dependencies:
+ hex2rgba "^0.0.1"
+
+gatsby-graphiql-explorer@^0.4.5:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.4.5.tgz#63795dc891e0ddc25436f51495342f0f7a2a0a1f"
+ integrity sha512-5ykkwnMhmIAzcxvVCnvYEk8HmEoFDZLeRET3Ug4sCthYvfucqzG6JJ3RuMGhPElu6Sat0vSS6XKwQ5EPu/sWTA==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+
+gatsby-image@^2.4.5:
+ version "2.4.7"
+ resolved "https://registry.yarnpkg.com/gatsby-image/-/gatsby-image-2.4.7.tgz#a8a867a11b1af36a377df551685b85a26e62c59d"
+ integrity sha512-n9btEYLUDjpnJQBK4vSfjgVuwNhPcPwbQoz5pV7kRlB3r1k141ZaYgubM6hgsZxu47btjUKtLiThBJAQP2L9ow==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ object-fit-images "^3.2.4"
+ prop-types "^15.7.2"
+
+gatsby-interface@0.0.167:
+ version "0.0.167"
+ resolved "https://registry.yarnpkg.com/gatsby-interface/-/gatsby-interface-0.0.167.tgz#c20f22f6cd403313a78e5e1bdaed5558fabfe37f"
+ integrity sha512-OAQEoqoQLrF7aHqR3OiS6K9O/fB9SIezhBGf+iC8Xnc0+mOkRoZA7IwAlk1YLTVcTQ875MuMfQTKRrhf1PVpnQ==
+ dependencies:
+ "@mdx-js/react" "^1.5.2"
+ "@reach/alert" "0.10.3"
+ "@reach/combobox" "0.10.3"
+ "@reach/dialog" "0.10.3"
+ "@reach/menu-button" "0.10.3"
+ "@reach/popover" "0.10.3"
+ "@reach/tabs" "0.10.3"
+ "@reach/tooltip" "0.10.3"
+ "@types/lodash.sample" "^4.2.6"
+ case "^1.6.2"
+ date-fns "^2.8.1"
+ gatsby-design-tokens "^2.0.2"
+ lodash.sample "^4.2.1"
+ theme-ui "^0.2.49"
+
+gatsby-link@^2.4.6:
+ version "2.4.6"
+ resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-2.4.6.tgz#5fdd2b16175e33ed51f20c9e5d1d0cc3eb2fe7f6"
+ integrity sha512-jOYEJa860KHcVOZ/6gjMv2EnCG7StdD4mLEGEMcEC8mzn4PWHQXHYsGdXcOvjn6SaqJ888hWuYjik5Jm8xW+cg==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ "@types/reach__router" "^1.3.3"
+ prop-types "^15.7.2"
+
+gatsby-page-utils@^0.2.9:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/gatsby-page-utils/-/gatsby-page-utils-0.2.9.tgz#567eb9b446d27a2cbcc99ca8bb6a321e2cfd1a65"
+ integrity sha512-Mh3QbDdKKrvbJRHtMsBvo+sDTaGfcTiXCFGTkFu2VbL3P6mZySFJ8fDLb9SbQvwvMVw/vD5IZT1KJerfmgfvGQ==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ bluebird "^3.7.2"
+ chokidar "3.4.0"
+ fs-exists-cached "^1.0.0"
+ gatsby-core-utils "^1.3.5"
+ glob "^7.1.6"
+ lodash "^4.17.15"
+ micromatch "^3.1.10"
+
+gatsby-plugin-manifest@^2.4.9:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.4.11.tgz#f9d342f6f98a3af6bc6d24b470e48647bfbeddab"
+ integrity sha512-IpgLRPxomeKPtGUMxXKxcS3QOvr1MwHB+D17Z31IedCUZZhthA3MTM6Ry+imKXqxXDXVBbsU6O6L5wJRmdWo9Q==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ gatsby-core-utils "^1.3.5"
+ semver "^5.7.1"
+ sharp "^0.25.1"
+
+gatsby-plugin-offline@^3.2.7:
+ version "3.2.9"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-offline/-/gatsby-plugin-offline-3.2.9.tgz#23cb90ace60ea586f0b9c62e4f37806e5f00e2a3"
+ integrity sha512-AyW0DDdyqlSrseMlEcyPWxLAGGWFLNP2psP6WeuSifEQJrNIFV5FHU3prd925jXYW+aJ84qjLjKDDvNN/6c8xw==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ cheerio "^1.0.0-rc.3"
+ gatsby-core-utils "^1.3.5"
+ glob "^7.1.6"
+ idb-keyval "^3.2.0"
+ lodash "^4.17.15"
+ workbox-build "^4.3.1"
+
+gatsby-plugin-page-creator@^2.3.9:
+ version "2.3.9"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.3.9.tgz#b0793cf1340dc903560791fea4948c28b2d302ad"
+ integrity sha512-ZNfjSoJ3AyACP5FWo0rwoeuIoZdD58le7oCmcVHVks/KOS/pJVGn8GwcrHE6xxCNM4KzqdfNBGZVyM+7RUASyA==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ bluebird "^3.7.2"
+ fs-exists-cached "^1.0.0"
+ gatsby-page-utils "^0.2.9"
+ glob "^7.1.6"
+ lodash "^4.17.15"
+ micromatch "^3.1.10"
+
+gatsby-plugin-react-helmet@^3.3.2:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.3.4.tgz#d41decbf4981e580b1006498ce773896f4a9a460"
+ integrity sha512-tBHxEDqqaqVz6aAgBqpwB+Hg8qcaqb/qPFbdGBggllAoCuFclZfqnxCpy5c65JIBl2xenQVXfBkhn+yBUh4vGg==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+
+gatsby-plugin-sharp@^2.6.9:
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.6.11.tgz#5a4327306c381c6fd3ae3954ae0628fba85d6683"
+ integrity sha512-OOHjhb1SJpjvxBxYjISMJU1BwzJMCYrtO77/qG2UDlftWIKhsjjxlB0x51nDkRtnbZp8JQo1GGIIJ5YD4f742w==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ async "^2.6.3"
+ bluebird "^3.7.2"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.5"
+ got "^8.3.2"
+ imagemin "^6.1.0"
+ imagemin-mozjpeg "^8.0.0"
+ imagemin-pngquant "^6.0.1"
+ imagemin-webp "^5.1.0"
+ lodash "^4.17.15"
+ mini-svg-data-uri "^1.2.3"
+ potrace "^2.1.6"
+ probe-image-size "^4.1.1"
+ progress "^2.0.3"
+ semver "^5.7.1"
+ sharp "^0.25.1"
+ svgo "1.3.2"
+ uuid "^3.4.0"
+
+gatsby-plugin-typescript@^2.4.6:
+ version "2.4.6"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-typescript/-/gatsby-plugin-typescript-2.4.6.tgz#8c1c53510678978303ce9cd489e69f6696409bd8"
+ integrity sha512-RfI2/k5XHmyNHjKDZDEPha/TNoY0Wh6zeBteqmidoPsJ2GfeFhyyxFxuRak+wYpZqdMh/aVwaJoF9Q1OiS4woQ==
+ dependencies:
+ "@babel/core" "^7.10.2"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1"
+ "@babel/plugin-proposal-numeric-separator" "^7.10.1"
+ "@babel/plugin-proposal-optional-chaining" "^7.10.1"
+ "@babel/preset-typescript" "^7.10.1"
+ "@babel/runtime" "^7.10.2"
+ babel-plugin-remove-graphql-queries "^2.9.5"
+
+gatsby-react-router-scroll@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-3.0.3.tgz#3c373fe96efe63259235bb5f5f79eca837ab19d1"
+ integrity sha512-VwwF1kmehIbjZek5MeMvf3SySoJUbUhQVQIsteWLqOPU3shz7b1sLpcLu3o0knUn7ml+8NB3rG2Yjb0a/LPBpA==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ scroll-behavior "^0.9.12"
+ warning "^3.0.0"
+
+gatsby-recipes@^0.1.39:
+ version "0.1.39"
+ resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.1.39.tgz#6bd079e0011fbe41c14b371f9b757bcaa377c3ad"
+ integrity sha512-Pf8EGKhCAv4E1rU0NL6pKH9mC8QB/0pW/9oAAb9Rs2N3TeBYcQ36hQP95ana63GZwY35eKoFzjdWGHmegQw90Q==
+ dependencies:
+ "@babel/core" "^7.10.2"
+ "@babel/generator" "^7.10.2"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-transform-react-jsx" "^7.10.1"
+ "@babel/standalone" "^7.10.2"
+ "@babel/template" "^7.10.1"
+ "@babel/types" "^7.10.2"
+ "@hapi/hoek" "8.x"
+ "@hapi/joi" "^15.1.1"
+ "@mdx-js/mdx" "^1.6.5"
+ "@mdx-js/react" "^1.6.5"
+ "@mdx-js/runtime" "^1.6.5"
+ acorn "^7.2.0"
+ acorn-jsx "^5.2.0"
+ cors "^2.8.5"
+ debug "^4.1.1"
+ detect-port "^1.3.0"
+ execa "^4.0.2"
+ express "^4.17.1"
+ express-graphql "^0.9.0"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.5"
+ gatsby-telemetry "^1.3.11"
+ glob "^7.1.6"
+ graphql "^14.6.0"
+ graphql-compose "^6.3.8"
+ graphql-subscriptions "^1.1.0"
+ graphql-tools "^6.0.5"
+ graphql-type-json "^0.3.1"
+ hicat "^0.7.0"
+ html-tag-names "^1.1.5"
+ ink "^2.7.1"
+ ink-box "^1.0.0"
+ ink-link "^1.1.0"
+ ink-select-input "^3.1.2"
+ ink-spinner "^3.0.1"
+ is-binary-path "^2.1.0"
+ is-blank "^2.1.0"
+ is-string "^1.0.5"
+ is-url "^1.2.4"
+ jest-diff "^25.5.0"
+ lodash "^4.17.15"
+ mkdirp "^0.5.1"
+ node-fetch "^2.6.0"
+ pkg-dir "^4.2.0"
+ prettier "^2.0.5"
+ react-reconciler "^0.25.1"
+ remark-mdx "^1.6.5"
+ remark-parse "^6.0.3"
+ remark-stringify "^8.0.0"
+ resolve-cwd "^3.0.0"
+ semver "^7.3.2"
+ single-trailing-newline "^1.0.0"
+ strip-ansi "^6.0.0"
+ style-to-object "^0.3.0"
+ subscriptions-transport-ws "^0.9.16"
+ svg-tag-names "^2.0.1"
+ unified "^8.4.2"
+ unist-util-visit "^2.0.2"
+ urql "^1.9.7"
+ ws "^7.3.0"
+ xstate "^4.10.0"
+
+gatsby-source-filesystem@^2.3.8:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-2.3.11.tgz#0e65b01ba23d6ef49c6bdd005326ea4b51bcdd4b"
+ integrity sha512-IQdeoU1yvMEYjIYq7DyH4W/KAN0D1RGfpIYPzc/MAERatn1pUk5GHDLIghyIujeMY3oFXVbh9/63tSRv+Gu9/g==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ better-queue "^3.8.10"
+ bluebird "^3.7.2"
+ chokidar "3.4.0"
+ file-type "^12.4.2"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.5"
+ got "^9.6.0"
+ md5-file "^3.2.3"
+ mime "^2.4.6"
+ pretty-bytes "^5.3.0"
+ progress "^2.0.3"
+ read-chunk "^3.2.0"
+ valid-url "^1.0.9"
+ xstate "^4.10.0"
+
+gatsby-source-graphql@^2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/gatsby-source-graphql/-/gatsby-source-graphql-2.5.4.tgz#fc2eba5e6128bbe2af06c7e1405fca4370fba5dc"
+ integrity sha512-lP8/GS6f1SMQXa4q72iH/CAAZQ/RxwgADPdFSAZS8e7fNkdlhUYpUqY69mdmQxwv5iMqaHMVQTdQmuiKcyQYXg==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ apollo-link "1.2.14"
+ apollo-link-http "^1.5.17"
+ dataloader "^2.0.0"
+ graphql "^14.6.0"
+ graphql-tools "^5.0.0"
+ invariant "^2.2.4"
+ node-fetch "^1.7.3"
+ uuid "^3.4.0"
+
+gatsby-telemetry@^1.3.11:
+ version "1.3.11"
+ resolved "https://registry.yarnpkg.com/gatsby-telemetry/-/gatsby-telemetry-1.3.11.tgz#2a5743387d84e796e11f9577f9981c9b46c34e11"
+ integrity sha512-k5bzy0G0Me0aQYaW1cOWp0PQ9+wRXHU0lbztdinnRAWlqqb3EGMVPtfUhP7aMJvXtj3UfLy3pk0xBfsX8BHvfA==
+ dependencies:
+ "@babel/code-frame" "^7.10.1"
+ "@babel/runtime" "^7.10.2"
+ bluebird "^3.7.2"
+ boxen "^4.2.0"
+ configstore "^5.0.1"
+ envinfo "^7.5.1"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.5"
+ git-up "4.0.1"
+ is-docker "2.0.0"
+ lodash "^4.17.15"
+ node-fetch "2.6.0"
+ resolve-cwd "^2.0.0"
+ source-map "^0.7.3"
+ stack-trace "^0.0.10"
+ stack-utils "1.0.2"
+ uuid "3.4.0"
+
+gatsby-transformer-sharp@^2.5.3:
+ version "2.5.5"
+ resolved "https://registry.yarnpkg.com/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.5.5.tgz#e42c8db6f55fe40acd5733a030f437df7cea980d"
+ integrity sha512-s5IvYwg7TDPCYoCiIpYO6U32sQyOXFlVJNe5gJk4VlztVe5+wbBaGcthsqYrhxEekantc9zg2aLJ+tpvJ9HoFA==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ bluebird "^3.7.2"
+ fs-extra "^8.1.0"
+ potrace "^2.1.6"
+ probe-image-size "^4.1.1"
+ semver "^5.7.1"
+ sharp "^0.25.1"
+
+gatsby@^2.22.15, gatsby@^2.23.3:
+ version "2.23.3"
+ resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.23.3.tgz#d5d7bbe9c68b9d5f982520b06c6a057e034bc2c3"
+ integrity sha512-uVRJUQuTga7GMag9Rrb+3amjSVoGDPgSTXivhDXW/TzR5ouBr6/rudjcDTruRwFnKsAwUExrYMMXPRCwkMFctQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.1"
+ "@babel/core" "^7.10.2"
+ "@babel/parser" "^7.10.2"
+ "@babel/polyfill" "^7.8.7"
+ "@babel/runtime" "^7.10.2"
+ "@babel/traverse" "^7.10.1"
+ "@hapi/joi" "^15.1.1"
+ "@mikaelkristiansson/domready" "^1.0.10"
+ "@pieh/friendly-errors-webpack-plugin" "1.7.0-chalk-2"
+ "@pmmmwh/react-refresh-webpack-plugin" "^0.3.3"
+ "@reach/router" "^1.3.3"
+ "@types/http-proxy" "^1.17.4"
+ "@typescript-eslint/eslint-plugin" "^2.24.0"
+ "@typescript-eslint/parser" "^2.24.0"
+ address "1.1.2"
+ autoprefixer "^9.8.0"
+ axios "^0.19.2"
+ babel-core "7.0.0-bridge.0"
+ babel-eslint "^10.1.0"
+ babel-loader "^8.1.0"
+ babel-plugin-add-module-exports "^0.3.3"
+ babel-plugin-dynamic-import-node "^2.3.3"
+ babel-plugin-remove-graphql-queries "^2.9.5"
+ babel-preset-gatsby "^0.4.9"
+ better-opn "1.0.0"
+ better-queue "^3.8.10"
+ bluebird "^3.7.2"
+ browserslist "^4.12.0"
+ cache-manager "^2.11.1"
+ cache-manager-fs-hash "^0.0.8"
+ chalk "^2.4.2"
+ chokidar "3.4.0"
+ common-tags "^1.8.0"
+ compression "^1.7.4"
+ convert-hrtime "^3.0.0"
+ copyfiles "^2.3.0"
+ core-js "^2.6.11"
+ cors "^2.8.5"
+ css-loader "^1.0.1"
+ date-fns "^2.14.0"
+ debug "^3.2.6"
+ del "^5.1.0"
+ detect-port "^1.3.0"
+ devcert "^1.1.0"
+ dotenv "^8.2.0"
+ eslint "^6.8.0"
+ eslint-config-react-app "^5.2.1"
+ eslint-loader "^2.2.1"
+ eslint-plugin-flowtype "^3.13.0"
+ eslint-plugin-graphql "^3.1.1"
+ eslint-plugin-import "^2.20.2"
+ eslint-plugin-jsx-a11y "^6.2.3"
+ eslint-plugin-react "^7.20.0"
+ eslint-plugin-react-hooks "^1.7.0"
+ event-source-polyfill "^1.0.15"
+ express "^4.17.1"
+ express-graphql "^0.9.0"
+ fast-levenshtein "^2.0.6"
+ file-loader "^1.1.11"
+ flat "^4.1.0"
+ fs-exists-cached "1.0.0"
+ fs-extra "^8.1.0"
+ gatsby-admin "^0.1.67"
+ gatsby-cli "^2.12.45"
+ gatsby-core-utils "^1.3.5"
+ gatsby-graphiql-explorer "^0.4.5"
+ gatsby-link "^2.4.6"
+ gatsby-plugin-page-creator "^2.3.9"
+ gatsby-plugin-typescript "^2.4.6"
+ gatsby-react-router-scroll "^3.0.3"
+ gatsby-telemetry "^1.3.11"
+ glob "^7.1.6"
+ got "8.3.2"
+ graphql "^14.6.0"
+ graphql-compose "^6.3.8"
+ graphql-playground-middleware-express "^1.7.15"
+ hasha "^5.2.0"
+ http-proxy "^1.18.1"
+ invariant "^2.2.4"
+ is-relative "^1.0.0"
+ is-relative-url "^3.0.0"
+ is-wsl "^2.2.0"
+ jest-worker "^24.9.0"
+ json-loader "^0.5.7"
+ json-stringify-safe "^5.0.1"
+ latest-version "5.1.0"
+ lodash "^4.17.15"
+ md5 "^2.2.1"
+ md5-file "^3.2.3"
+ meant "^1.0.1"
+ micromatch "^3.1.10"
+ mime "^2.4.6"
+ mini-css-extract-plugin "^0.8.2"
+ mitt "^1.2.0"
+ mkdirp "^0.5.1"
+ moment "^2.26.0"
+ name-all-modules-plugin "^1.0.1"
+ normalize-path "^2.1.1"
+ null-loader "^3.0.0"
+ opentracing "^0.14.4"
+ optimize-css-assets-webpack-plugin "^5.0.3"
+ p-defer "^3.0.0"
+ parseurl "^1.3.3"
+ physical-cpu-count "^2.0.0"
+ pnp-webpack-plugin "^1.6.4"
+ postcss-flexbugs-fixes "^4.2.1"
+ postcss-loader "^3.0.0"
+ prompts "^2.3.2"
+ prop-types "^15.7.2"
+ query-string "^6.12.1"
+ raw-loader "^0.5.1"
+ react-dev-utils "^4.2.3"
+ react-error-overlay "^3.0.0"
+ react-hot-loader "^4.12.21"
+ react-refresh "^0.7.0"
+ redux "^4.0.5"
+ redux-thunk "^2.3.0"
+ semver "^5.7.1"
+ shallow-compare "^1.2.2"
+ sift "^5.1.0"
+ signal-exit "^3.0.3"
+ slugify "^1.4.0"
+ socket.io "^2.3.0"
+ socket.io-client "2.3.0"
+ st "^2.0.0"
+ stack-trace "^0.0.10"
+ string-similarity "^1.2.2"
+ style-loader "^0.23.1"
+ terser-webpack-plugin "^1.4.3"
+ tmp "^0.2.1"
+ "true-case-path" "^2.2.1"
+ type-of "^2.0.1"
+ url-loader "^1.1.2"
+ util.promisify "^1.0.1"
+ uuid "^3.4.0"
+ v8-compile-cache "^1.1.2"
+ webpack "~4.43.0"
+ webpack-dev-middleware "^3.7.2"
+ webpack-dev-server "^3.11.0"
+ webpack-hot-middleware "^2.25.0"
+ webpack-merge "^4.2.2"
+ webpack-stats-plugin "^0.3.1"
+ xstate "^4.10.0"
+ yaml-loader "^0.6.0"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gensync@^1.0.0-beta.1:
+ version "1.0.0-beta.1"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
+ integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-nonce@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3"
+ integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-port@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc"
+ integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=
+
+get-proxy@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93"
+ integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==
+ dependencies:
+ npm-conf "^1.1.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stream@3.0.0, get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
+ integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=
+ dependencies:
+ object-assign "^4.0.1"
+ pinkie-promise "^2.0.0"
+
+get-stream@^4.0.0, get-stream@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^5.0.0, get-stream@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
+ integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+git-up@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0"
+ integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw==
+ dependencies:
+ is-ssh "^1.3.0"
+ parse-url "^5.0.0"
+
+github-from-package@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+ integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
+ integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-to-regexp@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+ integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
+glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ 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"
+
+global-dirs@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
+global-modules@1.0.0, global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+global@^4.3.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
+ integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
+ dependencies:
+ min-document "^2.19.0"
+ process "^0.11.10"
+
+global@~4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^12.1.0:
+ version "12.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+ integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ dependencies:
+ type-fest "^0.8.1"
+
+globby@11.0.1:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357"
+ integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+globby@^10.0.1:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543"
+ integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.0.3"
+ glob "^7.1.3"
+ ignore "^5.1.1"
+ merge2 "^1.2.3"
+ slash "^3.0.0"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globby@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
+ integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
+ dependencies:
+ array-union "^1.0.1"
+ dir-glob "2.0.0"
+ fast-glob "^2.0.2"
+ glob "^7.1.2"
+ ignore "^3.3.5"
+ pify "^3.0.0"
+ slash "^1.0.0"
+
+got@8.3.2, got@^8.3.1, got@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937"
+ integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==
+ dependencies:
+ "@sindresorhus/is" "^0.7.0"
+ cacheable-request "^2.1.1"
+ decompress-response "^3.3.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ into-stream "^3.1.0"
+ is-retry-allowed "^1.1.0"
+ isurl "^1.0.0-alpha5"
+ lowercase-keys "^1.0.0"
+ mimic-response "^1.0.0"
+ p-cancelable "^0.4.0"
+ p-timeout "^2.0.1"
+ pify "^3.0.0"
+ safe-buffer "^5.1.1"
+ timed-out "^4.0.1"
+ url-parse-lax "^3.0.0"
+ url-to-options "^1.0.1"
+
+got@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"
+ integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==
+ dependencies:
+ decompress-response "^3.2.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ is-plain-obj "^1.1.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ isurl "^1.0.0-alpha5"
+ lowercase-keys "^1.0.0"
+ p-cancelable "^0.3.0"
+ p-timeout "^1.1.1"
+ safe-buffer "^5.0.1"
+ timed-out "^4.0.0"
+ url-parse-lax "^1.0.0"
+ url-to-options "^1.0.1"
+
+got@^9.6.0:
+ version "9.6.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
+ integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
+ dependencies:
+ "@sindresorhus/is" "^0.14.0"
+ "@szmarczak/http-timer" "^1.1.2"
+ cacheable-request "^6.0.0"
+ decompress-response "^3.3.0"
+ duplexer3 "^0.1.4"
+ get-stream "^4.1.0"
+ lowercase-keys "^1.0.1"
+ mimic-response "^1.0.1"
+ p-cancelable "^1.0.0"
+ to-readable-stream "^1.0.0"
+ url-parse-lax "^3.0.0"
+
+graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
+ integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+graphql-compose@^6.3.8:
+ version "6.3.8"
+ resolved "https://registry.yarnpkg.com/graphql-compose/-/graphql-compose-6.3.8.tgz#9f82a85d5001a83adf1f7c4d3b5e5f72c432a062"
+ integrity sha512-o0/jzQEMIpSjryLKwmD1vGrCubiPxD0LxlGTgWDSu38TBepu2GhugC9gYgTEbtiCZAHPtvkZ90SzzABOWZyQLA==
+ dependencies:
+ graphql-type-json "^0.2.4"
+ object-path "^0.11.4"
+
+graphql-config@^2.0.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-2.2.2.tgz#a4b577826bba9b83e7b0f6cd617be43ca67da045"
+ integrity sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==
+ dependencies:
+ graphql-import "^0.7.1"
+ graphql-request "^1.5.0"
+ js-yaml "^3.10.0"
+ lodash "^4.17.4"
+ minimatch "^3.0.4"
+
+graphql-import@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.7.1.tgz#4add8d91a5f752d764b0a4a7a461fcd93136f223"
+ integrity sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw==
+ dependencies:
+ lodash "^4.17.4"
+ resolve-from "^4.0.0"
+
+graphql-playground-html@1.6.25:
+ version "1.6.25"
+ resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.25.tgz#2d8fa250cec4036a4f5b7f8ad069c86d6d64c95f"
+ integrity sha512-wMNvGsQ0OwBVhn72VVi7OdpI85IxiIZT43glRx7gQIwQ6NvhFnzMYBIVmcJAJ4UlXRYiWtrQhuOItDXObiR3kg==
+ dependencies:
+ xss "^1.0.6"
+
+graphql-playground-middleware-express@^1.7.15:
+ version "1.7.18"
+ resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.18.tgz#306d64d54ccb531baf7df0699df3220ca4e25364"
+ integrity sha512-EywRL+iBa4u//5YbY1iJxrl0n4IKyomBKgLXrMbG8gHJUwxmFs5FCWJJ4Q6moSn5Q3RgMZvrWzXB27lKwN8Kgw==
+ dependencies:
+ graphql-playground-html "1.6.25"
+
+graphql-request@^1.5.0:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-1.8.2.tgz#398d10ae15c585676741bde3fc01d5ca948f8fbe"
+ integrity sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==
+ dependencies:
+ cross-fetch "2.2.2"
+
+graphql-subscriptions@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11"
+ integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==
+ dependencies:
+ iterall "^1.2.1"
+
+graphql-tools@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-5.0.0.tgz#67281c834a0e29f458adba8018f424816fa627e9"
+ integrity sha512-5zn3vtn//382b7G3Wzz3d5q/sh+f7tVrnxeuhTMTJ7pWJijNqLxH7VEzv8VwXCq19zAzHYEosFHfXiK7qzvk7w==
+ dependencies:
+ apollo-link "^1.2.14"
+ apollo-upload-client "^13.0.0"
+ deprecated-decorator "^0.1.6"
+ form-data "^3.0.0"
+ iterall "^1.3.0"
+ node-fetch "^2.6.0"
+ tslib "^1.11.1"
+ uuid "^7.0.3"
+
+graphql-tools@^6.0.5:
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-6.0.9.tgz#79cdaae87d03a4c6ff60ab0e57a7476c131aed49"
+ integrity sha512-hmCm6Zn8k3mLDi+/F0BXSnvF2EUtIqqjxhQTG2hvawUeGhsH3YNu+fsRtBWmXTLqt2nEfLSTxKMJVjFFXAZNFw==
+ dependencies:
+ "@graphql-tools/code-file-loader" "6.0.9"
+ "@graphql-tools/delegate" "6.0.9"
+ "@graphql-tools/git-loader" "6.0.9"
+ "@graphql-tools/github-loader" "6.0.9"
+ "@graphql-tools/graphql-file-loader" "6.0.9"
+ "@graphql-tools/graphql-tag-pluck" "6.0.9"
+ "@graphql-tools/import" "6.0.9"
+ "@graphql-tools/json-file-loader" "6.0.9"
+ "@graphql-tools/links" "6.0.9"
+ "@graphql-tools/load" "6.0.9"
+ "@graphql-tools/load-files" "6.0.9"
+ "@graphql-tools/merge" "6.0.9"
+ "@graphql-tools/mock" "6.0.9"
+ "@graphql-tools/module-loader" "6.0.9"
+ "@graphql-tools/relay-operation-optimizer" "6.0.9"
+ "@graphql-tools/resolvers-composition" "6.0.9"
+ "@graphql-tools/schema" "6.0.9"
+ "@graphql-tools/stitch" "6.0.9"
+ "@graphql-tools/url-loader" "6.0.9"
+ "@graphql-tools/utils" "6.0.9"
+ "@graphql-tools/wrap" "6.0.9"
+
+graphql-type-json@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.2.4.tgz#545af27903e40c061edd30840a272ea0a49992f9"
+ integrity sha512-/tq02ayMQjrG4oDFDRLLrPk0KvJXue0nVXoItBe7uAdbNXjQUu+HYCBdAmPLQoseVzUKKMzrhq2P/sfI76ON6w==
+
+graphql-type-json@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.3.2.tgz#f53a851dbfe07bd1c8157d24150064baab41e115"
+ integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==
+
+graphql@^14.6.0:
+ version "14.6.0"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.6.0.tgz#57822297111e874ea12f5cd4419616930cd83e49"
+ integrity sha512-VKzfvHEKybTKjQVpTFrA5yUq2S9ihcZvfJAtsDBBCuV6wauPu1xl/f9ehgVf0FcEJJs4vz6ysb/ZMkGigQZseg==
+ dependencies:
+ iterall "^1.2.2"
+
+gud@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
+ integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
+
+gzip-size@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
+ dependencies:
+ duplexer "^0.1.1"
+
+handle-thing@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
+ integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-binary2@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
+ integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==
+ dependencies:
+ isarray "2.0.1"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+ integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbol-support-x@^1.4.1:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
+ integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==
+
+has-symbols@^1.0.0, has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-to-string-tag-x@^1.2.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
+ integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==
+ dependencies:
+ has-symbol-support-x "^1.4.1"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has-yarn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
+ integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
+
+has@^1.0.0, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+ integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hasha@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.0.tgz#33094d1f69c40a4a6ac7be53d5fe3ff95a269e0c"
+ integrity sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==
+ dependencies:
+ is-stream "^2.0.0"
+ type-fest "^0.8.0"
+
+hast-to-hyperscript@^7.0.0:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-7.0.4.tgz#7c4c037d9a8ea19b0a3fdb676a26448ad922353d"
+ integrity sha512-vmwriQ2H0RPS9ho4Kkbf3n3lY436QKLq6VaGA1pzBh36hBi3tm1DO9bR+kaJIbpT10UqaANDkMjxvjVfr+cnOA==
+ dependencies:
+ comma-separated-tokens "^1.0.0"
+ property-information "^5.3.0"
+ space-separated-tokens "^1.0.0"
+ style-to-object "^0.2.1"
+ unist-util-is "^3.0.0"
+ web-namespaces "^1.1.2"
+
+hast-util-from-parse5@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c"
+ integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==
+ dependencies:
+ ccount "^1.0.3"
+ hastscript "^5.0.0"
+ property-information "^5.0.0"
+ web-namespaces "^1.1.2"
+ xtend "^4.0.1"
+
+hast-util-parse-selector@^2.0.0:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz#60c99d0b519e12ab4ed32e58f150ec3f61ed1974"
+ integrity sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==
+
+hast-util-raw@5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-5.0.2.tgz#62288f311ec2f35e066a30d5e0277f963ad43a67"
+ integrity sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==
+ dependencies:
+ hast-util-from-parse5 "^5.0.0"
+ hast-util-to-parse5 "^5.0.0"
+ html-void-elements "^1.0.0"
+ parse5 "^5.0.0"
+ unist-util-position "^3.0.0"
+ web-namespaces "^1.0.0"
+ xtend "^4.0.0"
+ zwitch "^1.0.0"
+
+hast-util-to-parse5@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-5.1.2.tgz#09d27bee9ba9348ea05a6cfcc44e02f9083969b6"
+ integrity sha512-ZgYLJu9lYknMfsBY0rBV4TJn2xiwF1fXFFjbP6EE7S0s5mS8LIKBVWzhA1MeIs1SWW6GnnE4In6c3kPb+CWhog==
+ dependencies:
+ hast-to-hyperscript "^7.0.0"
+ property-information "^5.0.0"
+ web-namespaces "^1.0.0"
+ xtend "^4.0.0"
+ zwitch "^1.0.0"
+
+hastscript@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a"
+ integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==
+ dependencies:
+ comma-separated-tokens "^1.0.0"
+ hast-util-parse-selector "^2.0.0"
+ property-information "^5.0.0"
+ space-separated-tokens "^1.0.0"
+
+he@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+hex-color-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
+ integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
+
+hex2rgba@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/hex2rgba/-/hex2rgba-0.0.1.tgz#8701ba1c6ec02c204504158407c1c4b47a9336ed"
+ integrity sha1-hwG6HG7ALCBFBBWEB8HEtHqTNu0=
+
+hicat@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/hicat/-/hicat-0.7.0.tgz#a704cb3f57e49fbd7d38c2edd7aba38ff0b35263"
+ integrity sha1-pwTLP1fkn719OMLt16ujj/CzUmM=
+ dependencies:
+ highlight.js "^8.1.0"
+ minimist "^0.2.0"
+
+highlight-words-core@1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/highlight-words-core/-/highlight-words-core-1.2.2.tgz#1eff6d7d9f0a22f155042a00791237791b1eeaaa"
+ integrity sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==
+
+highlight.js@^8.1.0:
+ version "8.9.1"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-8.9.1.tgz#b8a9c5493212a9392f0222b649c9611497ebfb88"
+ integrity sha1-uKnFSTISqTkvAiK2SclhFJfr+4g=
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoist-non-react-statics@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.8.8"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
+ integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+
+hosted-git-info@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d"
+ integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==
+ dependencies:
+ lru-cache "^5.1.1"
+
+hpack.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
+ dependencies:
+ inherits "^2.0.1"
+ obuf "^1.0.0"
+ readable-stream "^2.0.1"
+ wbuf "^1.1.0"
+
+hsl-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
+ integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=
+
+hsla-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
+ integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg=
+
+html-comment-regex@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
+ integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
+
+html-entities@^1.2.0, html-entities@^1.2.1, html-entities@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
+ integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==
+
+html-tag-names@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/html-tag-names/-/html-tag-names-1.1.5.tgz#f537420c16769511283f8ae1681785fbc89ee0a9"
+ integrity sha512-aI5tKwNTBzOZApHIynaAwecLBv8TlZTEy/P4Sj2SzzAhBrGuI8yGZ0UIXVPQzOHGS+to2mjb04iy6VWt/8+d8A==
+
+html-void-elements@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483"
+ integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==
+
+htmlparser2@^3.3.0, htmlparser2@^3.9.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+ integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+ dependencies:
+ domelementtype "^1.3.1"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.1.1"
+
+http-cache-semantics@3.8.1:
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
+ integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
+
+http-cache-semantics@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
+ integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
+
+http-deceiver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+ integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
+
+http-errors@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@1.7.3, http-errors@^1.7.3, http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-parser-js@>=0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77"
+ integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==
+
+http-proxy-middleware@0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
+ integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
+ dependencies:
+ http-proxy "^1.17.0"
+ is-glob "^4.0.0"
+ lodash "^4.17.11"
+ micromatch "^3.1.10"
+
+http-proxy@^1.17.0, http-proxy@^1.18.1:
+ version "1.18.1"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+ integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+ dependencies:
+ eventemitter3 "^4.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+ integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
+
+icss-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
+ integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=
+ dependencies:
+ postcss "^6.0.1"
+
+idb-keyval@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-3.2.0.tgz#cbbf354deb5684b6cdc84376294fc05932845bd6"
+ integrity sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==
+
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore@^3.3.5:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.1.1, ignore@^5.1.4:
+ version "5.1.8"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+
+imagemin-mozjpeg@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz#d2ca4e8c982c7c6eda55069af89dee4c1cebcdfd"
+ integrity sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==
+ dependencies:
+ execa "^1.0.0"
+ is-jpg "^2.0.0"
+ mozjpeg "^6.0.0"
+
+imagemin-pngquant@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/imagemin-pngquant/-/imagemin-pngquant-6.0.1.tgz#07b4c80e327ac60ef5246758029b1e8aecd879b9"
+ integrity sha512-Stk+fZCLxZznV8MFNA/T3AY/VRKevsiP9uZOLV0RCXoi0vUUFriySYuz/83IGp9D254EW8miGyyQ69zKouFr7w==
+ dependencies:
+ execa "^0.10.0"
+ is-png "^1.0.0"
+ is-stream "^1.1.0"
+ pngquant-bin "^5.0.0"
+
+imagemin-webp@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/imagemin-webp/-/imagemin-webp-5.1.0.tgz#ddb1307ad97aff97293c5a600e384e40c07f68a7"
+ integrity sha512-BsPTpobgbDPFBBsI3UflnU/cpIVa15qInEDBcYBw16qI/6XiB4vDF/dGp9l4aM3pfFDDYqR0mANMcKpBD7wbCw==
+ dependencies:
+ cwebp-bin "^5.0.0"
+ exec-buffer "^3.0.0"
+ is-cwebp-readable "^2.0.1"
+
+imagemin@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/imagemin/-/imagemin-6.1.0.tgz#62508b465728fea36c03cdc07d915fe2d8cf9e13"
+ integrity sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==
+ dependencies:
+ file-type "^10.7.0"
+ globby "^8.0.1"
+ make-dir "^1.0.0"
+ p-pipe "^1.1.0"
+ pify "^4.0.1"
+ replace-ext "^1.0.0"
+
+immutable@~3.7.6:
+ version "3.7.6"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b"
+ integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks=
+
+import-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
+ integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=
+ dependencies:
+ import-from "^2.1.0"
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-fresh@^3.0.0, import-fresh@^3.1.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+ integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-from@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966"
+ integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==
+ dependencies:
+ resolve-from "^5.0.0"
+
+import-from@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
+ integrity sha1-M1238qev/VOqpHHUuAId7ja387E=
+ dependencies:
+ resolve-from "^3.0.0"
+
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+
+import-lazy@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc"
+ integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==
+
+import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+indexes-of@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+ integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+ink-box@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ink-box/-/ink-box-1.0.0.tgz#8cbcb5541d32787d08d43acf1a9907e86e3572f3"
+ integrity sha512-wD2ldWX9lcE/6+flKbAJ0TZF7gKbTH8CRdhEor6DD8d+V0hPITrrGeST2reDBpCia8wiqHrdxrqTyafwtmVanA==
+ dependencies:
+ boxen "^3.0.0"
+ prop-types "^15.7.2"
+
+ink-link@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ink-link/-/ink-link-1.1.0.tgz#e00bd68dfd163a9392baecc0808391fd07e6cfbb"
+ integrity sha512-a716nYz4YDPu8UOA2PwabTZgTvZa3SYB/70yeXVmTOKFAEdMbJyGSVeNuB7P+aM2olzDj9AGVchA7W5QytF9uA==
+ dependencies:
+ prop-types "^15.7.2"
+ terminal-link "^2.1.1"
+
+ink-select-input@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/ink-select-input/-/ink-select-input-3.1.2.tgz#fd53f2f0946bc43989899522b013a2c10a60f722"
+ integrity sha512-PaLraGx8A54GhSkTNzZI8bgY0elAoa1jSPPe5Q52B5VutcBoJc4HE3ICDwsEGJ88l1Hw6AWjpeoqrq82a8uQPA==
+ dependencies:
+ arr-rotate "^1.0.0"
+ figures "^2.0.0"
+ lodash.isequal "^4.5.0"
+ prop-types "^15.5.10"
+
+ink-spinner@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ink-spinner/-/ink-spinner-3.0.1.tgz#7b4b206d2b18538701fd92593f9acabbfe308dce"
+ integrity sha512-AVR4Z/NXDQ7dT5ltWcCzFS9Dd4T8eaO//E2UO8VYNiJcZpPCSJ11o5A0UVPcMlZxGbGD6ikUFDR3ZgPUQk5haQ==
+ dependencies:
+ cli-spinners "^1.0.0"
+ prop-types "^15.5.10"
+
+ink@^2.7.1:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/ink/-/ink-2.7.1.tgz#ff1c75b4b022924e2993af62297fa0e48e85618b"
+ integrity sha512-s7lJuQDJEdjqtaIWhp3KYHl6WV3J04U9zoQ6wVc+Xoa06XM27SXUY57qC5DO46xkF0CfgXMKkKNcgvSu/SAEpA==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ arrify "^2.0.1"
+ auto-bind "^4.0.0"
+ chalk "^3.0.0"
+ cli-cursor "^3.1.0"
+ cli-truncate "^2.1.0"
+ is-ci "^2.0.0"
+ lodash.throttle "^4.1.1"
+ log-update "^3.0.0"
+ prop-types "^15.6.2"
+ react-reconciler "^0.24.0"
+ scheduler "^0.18.0"
+ signal-exit "^3.0.2"
+ slice-ansi "^3.0.0"
+ string-length "^3.1.0"
+ widest-line "^3.1.0"
+ wrap-ansi "^6.2.0"
+ yoga-layout-prebuilt "^1.9.3"
+
+inline-style-parser@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
+ integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
+
+inquirer@3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
+ integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^2.0.4"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rx-lite "^4.0.8"
+ rx-lite-aggregates "^4.0.8"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
+inquirer@^7.0.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.2.0.tgz#63ce99d823090de7eb420e4bb05e6f3449aa389a"
+ integrity sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^3.0.0"
+ cli-cursor "^3.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.15"
+ mute-stream "0.0.8"
+ run-async "^2.4.0"
+ rxjs "^6.5.3"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+ through "^2.3.6"
+
+internal-ip@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
+ integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
+ dependencies:
+ default-gateway "^4.2.0"
+ ipaddr.js "^1.9.0"
+
+internal-slot@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3"
+ integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==
+ dependencies:
+ es-abstract "^1.17.0-next.1"
+ has "^1.0.3"
+ side-channel "^1.0.2"
+
+into-stream@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6"
+ integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=
+ dependencies:
+ from2 "^2.1.1"
+ p-is-promise "^1.1.0"
+
+invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
+
+ip@^1.1.0, ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+
+ipaddr.js@1.9.1, ipaddr.js@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+is-absolute-url@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+ integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
+
+is-absolute-url@^3.0.0, is-absolute-url@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
+ integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-alphabetical@1.0.4, is-alphabetical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
+ integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
+
+is-alphanumeric@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4"
+ integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=
+
+is-alphanumerical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
+ integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
+is-arguments@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
+ integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-binary-path@^2.1.0, is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-blank@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-blank/-/is-blank-2.1.0.tgz#69a73d3c0d4f417dfffb207a2795c0f0e576de04"
+ integrity sha1-aac9PA1PQX3/+yB6J5XA8OV23gQ=
+ dependencies:
+ is-empty latest
+ is-whitespace latest
+
+is-buffer@^1.1.5, is-buffer@~1.1.1:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.0, is-buffer@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
+ integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
+
+is-builtin-module@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.0.0.tgz#137d3d2425023a19a660fb9dd6ddfabe52c03466"
+ integrity sha512-/93sDihsAD652hrMEbJGbMAVBf1qc96kyThHQ0CAOONHaE3aROLpTjDe4WQ5aoC5ITHFxEq1z8XqSU7km+8amw==
+ dependencies:
+ builtin-modules "^3.0.0"
+
+is-callable@^1.1.4, is-callable@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
+ integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
+
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
+is-color-stop@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
+ integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=
+ dependencies:
+ css-color-names "^0.0.4"
+ hex-color-regex "^1.1.0"
+ hsl-regex "^1.0.0"
+ hsla-regex "^1.0.0"
+ rgb-regex "^1.0.1"
+ rgba-regex "^1.0.0"
+
+is-cwebp-readable@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-cwebp-readable/-/is-cwebp-readable-2.0.1.tgz#afb93b0c0abd0a25101016ae33aea8aedf926d26"
+ integrity sha1-r7k7DAq9CiUQEBauM66ort+SbSY=
+ dependencies:
+ file-type "^4.3.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-decimal@^1.0.0, is-decimal@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
+ integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-docker@2.0.0, is-docker@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b"
+ integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==
+
+is-empty@latest:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b"
+ integrity sha1-3pu1snhzigWgsJpX4ftNSjQan2s=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-finite@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
+ integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-function@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
+ integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
+
+is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-glob@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-hexadecimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
+ integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
+
+is-installed-globally@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
+ integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
+ dependencies:
+ global-dirs "^0.1.0"
+ is-path-inside "^1.0.0"
+
+is-invalid-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34"
+ integrity sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=
+ dependencies:
+ is-glob "^2.0.0"
+
+is-jpg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-jpg/-/is-jpg-2.0.0.tgz#2e1997fa6e9166eaac0242daae443403e4ef1d97"
+ integrity sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=
+
+is-natural-number@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
+ integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=
+
+is-npm@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-3.0.0.tgz#ec9147bfb629c43f494cf67936a961edec7e8053"
+ integrity sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.0, is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
+ integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA=
+
+is-path-cwd@^2.0.0, is-path-cwd@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+ integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
+ dependencies:
+ is-path-inside "^2.1.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-path-inside@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+ integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
+ dependencies:
+ path-is-inside "^1.0.2"
+
+is-path-inside@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"
+ integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==
+
+is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-obj@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-png@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-png/-/is-png-1.1.0.tgz#d574b12bf275c0350455570b0e5b57ab062077ce"
+ integrity sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=
+
+is-regex@^1.0.4, is-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff"
+ integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-relative-url@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-3.0.0.tgz#f623c8e26baa5bd3742b3b7ec074f50f3b45b3f3"
+ integrity sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA==
+ dependencies:
+ is-absolute-url "^3.0.0"
+
+is-relative@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
+ integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
+ dependencies:
+ is-unc-path "^1.0.0"
+
+is-resolvable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+ integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
+ integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
+
+is-root@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5"
+ integrity sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=
+
+is-ssh@^1.3.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3"
+ integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==
+ dependencies:
+ protocols "^1.1.0"
+
+is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
+is-svg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
+ integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==
+ dependencies:
+ html-comment-regex "^1.1.0"
+
+is-symbol@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-unc-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
+ integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
+ dependencies:
+ unc-path-regex "^0.1.2"
+
+is-url@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
+ integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-valid-path@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df"
+ integrity sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=
+ dependencies:
+ is-invalid-path "^0.1.0"
+
+is-whitespace-character@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7"
+ integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==
+
+is-whitespace@latest:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f"
+ integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38=
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-word-character@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230"
+ integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+is-wsl@^2.1.1, is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
+is-yarn-global@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
+ integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isarray@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
+ integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isomorphic-fetch@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
+ dependencies:
+ node-fetch "^1.0.1"
+ whatwg-fetch ">=0.10.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+isurl@^1.0.0-alpha5:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
+ integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==
+ dependencies:
+ has-to-string-tag-x "^1.2.0"
+ is-object "^1.0.1"
+
+iterall@^1.2.1, iterall@^1.2.2, iterall@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea"
+ integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==
+
+jest-diff@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
+ integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
+ dependencies:
+ chalk "^3.0.0"
+ diff-sequences "^25.2.6"
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
+
+jest-get-type@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
+ integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
+
+jest-worker@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
+ integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^6.1.0"
+
+jimp@^0.10.2:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.10.3.tgz#285027b49eee3418259a8e1e9a20dd078cf8b7b1"
+ integrity sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/custom" "^0.10.3"
+ "@jimp/plugins" "^0.10.3"
+ "@jimp/types" "^0.10.3"
+ core-js "^3.4.1"
+ regenerator-runtime "^0.13.3"
+
+jpeg-js@^0.3.4:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d"
+ integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.10.0, js-yaml@^3.13.1:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
+ integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-buffer@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
+ integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
+
+json-loader@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+ integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json3@^3.3.2:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
+ integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
+ integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
+ dependencies:
+ minimist "^1.2.5"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179"
+ integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==
+ dependencies:
+ universalify "^1.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e"
+ integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==
+ dependencies:
+ array-includes "^3.1.1"
+ object.assign "^4.1.0"
+
+keyv@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373"
+ integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==
+ dependencies:
+ json-buffer "3.0.0"
+
+keyv@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
+ integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
+ dependencies:
+ json-buffer "3.0.0"
+
+killable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+ integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+last-call-webpack-plugin@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
+ integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==
+ dependencies:
+ lodash "^4.17.5"
+ webpack-sources "^1.1.0"
+
+latest-version@5.1.0, latest-version@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
+ integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
+ dependencies:
+ package-json "^6.3.0"
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levenary@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77"
+ integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==
+ dependencies:
+ leven "^3.1.0"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+linaria@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/linaria/-/linaria-1.3.3.tgz#af806fe7272f1f43688615ab4f04a6edb785bd40"
+ integrity sha512-CoDZ7mrXNHLXGRfaYCSVKQr94rvzn6KIir4dTwaq6o0VlDp9TkKOg2WHdMS7I2WhQTefdLJEdPYE/1TckAnVRw==
+ dependencies:
+ "@babel/core" "^7.3.3"
+ "@babel/generator" "^7.3.3"
+ "@babel/plugin-proposal-export-namespace-from" "^7.2.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.2.0"
+ "@babel/register" "^7.0.0"
+ "@emotion/is-prop-valid" "^0.7.3"
+ core-js "^3.6.3"
+ cosmiconfig "^5.1.0"
+ dedent "^0.7.0"
+ enhanced-resolve "^4.1.0"
+ find-yarn-workspace-root "^1.2.1"
+ glob "^7.1.3"
+ loader-utils "^1.2.3"
+ mkdirp "^0.5.1"
+ normalize-path "^3.0.0"
+ postcss "^7.0.14"
+ react-is "^16.8.3"
+ rollup-pluginutils "^2.4.1"
+ source-map "^0.7.3"
+ strip-ansi "^5.0.0"
+ stylis "^3.5.4"
+ yargs "^13.2.1"
+
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
+load-bmfont@^1.3.1, load-bmfont@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b"
+ integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==
+ dependencies:
+ buffer-equal "0.0.1"
+ mime "^1.3.4"
+ parse-bmfont-ascii "^1.0.3"
+ parse-bmfont-binary "^1.0.5"
+ parse-bmfont-xml "^1.1.4"
+ phin "^2.9.1"
+ xhr "^2.0.1"
+ xtend "^4.0.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+loader-fs-cache@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9"
+ integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==
+ dependencies:
+ find-cache-dir "^0.1.1"
+ mkdirp "^0.5.1"
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lockfile@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609"
+ integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==
+ dependencies:
+ signal-exit "^3.0.2"
+
+lodash-es@^4.17.11, lodash-es@^4.17.14:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78"
+ integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==
+
+lodash._reinterpolate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+ integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+
+lodash.clonedeep@4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
+
+lodash.every@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7"
+ integrity sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc=
+
+lodash.flattendeep@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
+ integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=
+
+lodash.foreach@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
+ integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=
+
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
+
+lodash.map@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
+ integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=
+
+lodash.maxby@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.maxby/-/lodash.maxby-4.6.0.tgz#082240068f3c7a227aa00a8380e4f38cf0786e3d"
+ integrity sha1-CCJABo88eiJ6oAqDgOTzjPB4bj0=
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.sample@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.sample/-/lodash.sample-4.2.1.tgz#5e4291b0c753fa1abeb0aab8fb29df1b66f07f6d"
+ integrity sha1-XkKRsMdT+hq+sKq4+ynfG2bwf20=
+
+lodash.template@^4.4.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
+ integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
+ integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+
+lodash.throttle@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
+ integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
+
+lodash.toarray@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
+ integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=
+
+lodash.uniq@4.5.0, lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash@4.17.15, lodash@^4.11.1, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+log-update@^3.0.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-3.4.0.tgz#3b9a71e00ac5b1185cc193a36d654581c48f97b9"
+ integrity sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==
+ dependencies:
+ ansi-escapes "^3.2.0"
+ cli-cursor "^2.1.0"
+ wrap-ansi "^5.0.0"
+
+logalot@^2.0.0, logalot@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/logalot/-/logalot-2.1.0.tgz#5f8e8c90d304edf12530951a5554abb8c5e3f552"
+ integrity sha1-X46MkNME7fElMJUaVVSruMXj9VI=
+ dependencies:
+ figures "^1.3.5"
+ squeak "^1.0.0"
+
+loglevel@^1.6.8:
+ version "1.6.8"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
+ integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==
+
+longest-streak@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
+ integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
+
+longest@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+loud-rejection@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-2.2.0.tgz#4255eb6e9c74045b0edc021fa7397ab655a8517c"
+ integrity sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.2"
+
+lower-case@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7"
+ integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==
+ dependencies:
+ tslib "^1.10.0"
+
+lowercase-keys@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
+ integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=
+
+lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lpad-align@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/lpad-align/-/lpad-align-1.1.2.tgz#21f600ac1c3095c3c6e497ee67271ee08481fe9e"
+ integrity sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=
+ dependencies:
+ get-stdin "^4.0.1"
+ indent-string "^2.1.0"
+ longest "^1.0.0"
+ meow "^3.3.0"
+
+lru-cache@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.0.tgz#b5cbf01556c16966febe54ceec0fb4dc90df6c28"
+ integrity sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=
+ dependencies:
+ pseudomap "^1.0.1"
+ yallist "^2.0.0"
+
+lru-cache@^4.0.0, lru-cache@^4.0.1:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+magic-string@^0.25.3:
+ version "0.25.7"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
+ integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
+ dependencies:
+ sourcemap-codec "^1.4.4"
+
+make-dir@^1.0.0, make-dir@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
+ dependencies:
+ pify "^3.0.0"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+make-dir@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+markdown-escapes@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
+ integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
+
+markdown-table@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"
+ integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==
+ dependencies:
+ repeat-string "^1.0.0"
+
+md5-file@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f"
+ integrity sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==
+ dependencies:
+ buffer-alloc "^1.1.0"
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+md5@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
+ integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=
+ dependencies:
+ charenc "~0.0.1"
+ crypt "~0.0.1"
+ is-buffer "~1.1.1"
+
+mdast-squeeze-paragraphs@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97"
+ integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==
+ dependencies:
+ unist-util-remove "^2.0.0"
+
+mdast-util-compact@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490"
+ integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+mdast-util-definitions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz#06af6c49865fc63d6d7d30125569e2f7ae3d0a86"
+ integrity sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+mdast-util-to-hast@9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-9.1.0.tgz#6ef121dd3cd3b006bf8650b1b9454da0faf79ffe"
+ integrity sha512-Akl2Vi9y9cSdr19/Dfu58PVwifPXuFt1IrHe7l+Crme1KvgUT+5z+cHLVcQVGCiNTZZcdqjnuv9vPkGsqWytWA==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.3"
+ collapse-white-space "^1.0.0"
+ detab "^2.0.0"
+ mdast-util-definitions "^3.0.0"
+ mdurl "^1.0.0"
+ trim-lines "^1.0.0"
+ unist-builder "^2.0.0"
+ unist-util-generated "^1.0.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^2.0.0"
+
+mdn-data@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+ integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
+mdn-data@2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978"
+ integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==
+
+mdurl@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
+
+meant@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d"
+ integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.3.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.2.3, merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.44.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0:
+ version "1.44.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
+ integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
+
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.27"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
+ integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
+ dependencies:
+ mime-db "1.44.0"
+
+mime@1.6.0, mime@^1.3.4:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^2.0.3, mime@^2.4.4, mime@^2.4.6:
+ version "2.4.6"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1"
+ integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^1.0.0, mimic-response@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+ integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+mimic-response@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
+ integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
+
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
+ dependencies:
+ dom-walk "^0.1.0"
+
+mini-css-extract-plugin@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161"
+ integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==
+ dependencies:
+ loader-utils "^1.1.0"
+ normalize-url "1.9.1"
+ schema-utils "^1.0.0"
+ webpack-sources "^1.1.0"
+
+mini-svg-data-uri@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.2.3.tgz#e16baa92ad55ddaa1c2c135759129f41910bc39f"
+ integrity sha512-zd6KCAyXgmq6FV1mR10oKXYtvmA9vRoB6xPSTUJTbFApCtkefDnYueVR1gkof3KcdLZo1Y8mjF2DFmQMIxsHNQ==
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimatch@^3.0.3, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455"
+ integrity sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==
+
+minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minipass@^3.0.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
+ integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
+ dependencies:
+ yallist "^4.0.0"
+
+minizlib@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3"
+ integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mitt@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d"
+ integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp-classic@^0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+mkdirp@^1.0.3, mkdirp@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+moment@^2.26.0:
+ version "2.26.0"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a"
+ integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+mozjpeg@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/mozjpeg/-/mozjpeg-6.0.1.tgz#56969dddb5741ef2bcb1af066cae21e61a91a27b"
+ integrity sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==
+ dependencies:
+ bin-build "^3.0.0"
+ bin-wrapper "^4.0.0"
+ logalot "^2.1.0"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+multicast-dns-service-types@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+ integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
+
+multicast-dns@^6.0.1:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
+ integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
+ dependencies:
+ dns-packet "^1.3.1"
+ thunky "^1.0.2"
+
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+mute-stream@0.0.8, mute-stream@~0.0.4:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+name-all-modules-plugin@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/name-all-modules-plugin/-/name-all-modules-plugin-1.0.1.tgz#0abfb6ad835718b9fb4def0674e06657a954375c"
+ integrity sha1-Cr+2rYNXGLn7Te8GdOBmV6lUN1w=
+
+nan@^2.12.1, nan@^2.14.0:
+ version "2.14.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
+ integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+napi-build-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
+ integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
+
+native-url@^0.2.6:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae"
+ integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==
+ dependencies:
+ querystring "^0.2.0"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+negotiator@0.6.2, negotiator@~0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0, neo-async@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+next-tick@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
+ integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
+
+next-tick@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+ integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+no-case@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8"
+ integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==
+ dependencies:
+ lower-case "^2.0.1"
+ tslib "^1.10.0"
+
+node-abi@^2.7.0:
+ version "2.18.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.18.0.tgz#1f5486cfd7d38bd4f5392fa44a4ad4d9a0dffbf4"
+ integrity sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw==
+ dependencies:
+ semver "^5.4.1"
+
+node-addon-api@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.0.tgz#812446a1001a54f71663bed188314bba07e09247"
+ integrity sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg==
+
+node-emoji@^1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
+ integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
+ dependencies:
+ lodash.toarray "^4.4.0"
+
+node-eta@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/node-eta/-/node-eta-0.9.0.tgz#9fb0b099bcd2a021940e603c64254dc003d9a7a8"
+ integrity sha1-n7CwmbzSoCGUDmA8ZCVNwAPZp6g=
+
+node-fetch@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
+ integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=
+
+node-fetch@2.6.0, node-fetch@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
+ integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
+
+node-fetch@^1.0.1, node-fetch@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
+node-forge@0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
+ integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-object-hash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-2.0.0.tgz#9971fcdb7d254f05016bd9ccf508352bee11116b"
+ integrity sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ==
+
+node-releases@^1.1.53:
+ version "1.1.58"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz#8ee20eef30fa60e52755fcc0942def5a734fe935"
+ integrity sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==
+
+noms@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859"
+ integrity sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "~1.0.31"
+
+noop-logger@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
+ integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+normalize-url@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
+ dependencies:
+ object-assign "^4.0.1"
+ prepend-http "^1.0.0"
+ query-string "^4.1.0"
+ sort-keys "^1.0.0"
+
+normalize-url@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6"
+ integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==
+ dependencies:
+ prepend-http "^2.0.0"
+ query-string "^5.0.1"
+ sort-keys "^2.0.0"
+
+normalize-url@^3.0.0, normalize-url@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+ integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
+
+normalize-url@^4.1.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
+ integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
+
+npm-conf@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
+ integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
+ dependencies:
+ config-chain "^1.1.11"
+ pify "^3.0.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+npmlog@^4.0.1, npmlog@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@^1.0.2, nth-check@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
+null-loader@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245"
+ integrity sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==
+ dependencies:
+ loader-utils "^1.2.3"
+ schema-utils "^1.0.0"
+
+nullthrows@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
+ integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+ integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-component@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+ integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-fit-images@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/object-fit-images/-/object-fit-images-3.2.4.tgz#6c299d38fdf207746e5d2d46c2877f6f25d15b52"
+ integrity sha512-G+7LzpYfTfqUyrZlfrou/PLLLAPNC52FTy5y1CBywX+1/FkxIloOyQXBmZ3Zxa2AWO+lMF0JTuvqbr7G5e5CWg==
+
+object-hash@^1.1.4:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
+ integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==
+
+object-inspect@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+ integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
+
+object-is@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6"
+ integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-path@^0.11.2, object-path@^0.11.4:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949"
+ integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
+object.entries@^1.1.1, object.entries@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add"
+ integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+ has "^1.0.3"
+
+object.fromentries@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
+ integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+object.getownpropertydescriptors@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
+ integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.0, object.values@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
+ integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+obuf@^1.0.0, obuf@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+ integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+omggif@^1.0.9:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19"
+ integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+onetime@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+ integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+open@^6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
+ integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==
+ dependencies:
+ is-wsl "^1.1.0"
+
+opentracing@^0.14.4:
+ version "0.14.4"
+ resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.4.tgz#a113408ea740da3a90fde5b3b0011a375c2e4268"
+ integrity sha512-nNnZDkUNExBwEpb7LZaeMeQgvrlO8l4bgY/LvGNZCR0xG/dGWqHqjKrAmR5GUoYo0FIz38kxasvA1aevxWs2CA==
+
+opn@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519"
+ integrity sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==
+ dependencies:
+ is-wsl "^1.1.0"
+
+opn@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
+ integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
+ dependencies:
+ is-wsl "^1.1.0"
+
+optimize-css-assets-webpack-plugin@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572"
+ integrity sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==
+ dependencies:
+ cssnano "^4.1.10"
+ last-call-webpack-plugin "^3.0.0"
+
+optionator@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+original@>=0.0.5, original@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
+ integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
+ dependencies:
+ url-parse "^1.4.3"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-filter-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-2.0.0.tgz#1c0b62d5f3a2442749a2d139e6dddee6e81d8d16"
+ integrity sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==
+ dependencies:
+ arch "^2.1.0"
+
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+p-cancelable@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
+ integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==
+
+p-cancelable@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0"
+ integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==
+
+p-cancelable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
+ integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+
+p-defer@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83"
+ integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==
+
+p-event@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-event/-/p-event-1.3.0.tgz#8e6b4f4f65c72bc5b6fe28b75eda874f96a4a085"
+ integrity sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=
+ dependencies:
+ p-timeout "^1.1.1"
+
+p-event@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6"
+ integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==
+ dependencies:
+ p-timeout "^2.0.1"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-finally@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
+ integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
+
+p-is-promise@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
+ integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=
+
+p-limit@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.1.tgz#584784ac0722d1aed09f19f90ed2999af6ce2839"
+ integrity sha512-mw/p92EyOzl2MhauKodw54Rx5ZK4624rNfgNaBguFZkHzyUG9WsDzFF5/yQVEJinbJDdP4jEfMN+uBquiGnaLg==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-map-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
+ integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-map@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-map@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d"
+ integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-pipe@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
+ integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k=
+
+p-reduce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+ integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
+
+p-retry@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
+ integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==
+ dependencies:
+ retry "^0.12.0"
+
+p-timeout@^1.1.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
+ integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=
+ dependencies:
+ p-finally "^1.0.0"
+
+p-timeout@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038"
+ integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==
+ dependencies:
+ p-finally "^1.0.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0, p-try@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+package-json@^6.3.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
+ integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
+ dependencies:
+ got "^9.6.0"
+ registry-auth-token "^4.0.0"
+ registry-url "^5.0.0"
+ semver "^6.2.0"
+
+pako@^1.0.5, pako@~1.0.5:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-asn1@^5.0.0, parse-asn1@^5.1.5:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
+ integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-bmfont-ascii@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
+ integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=
+
+parse-bmfont-binary@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
+ integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=
+
+parse-bmfont-xml@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389"
+ integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==
+ dependencies:
+ xml-parse-from-string "^1.0.0"
+ xml2js "^0.4.5"
+
+parse-entities@^1.1.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
+ integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
+ integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-headers@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515"
+ integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-json@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
+ integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+ lines-and-columns "^1.1.6"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parse-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff"
+ integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA==
+ dependencies:
+ is-ssh "^1.3.0"
+ protocols "^1.4.0"
+
+parse-url@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f"
+ integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg==
+ dependencies:
+ is-ssh "^1.3.0"
+ normalize-url "^3.3.0"
+ parse-path "^4.0.0"
+ protocols "^1.4.0"
+
+parse5@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
+ integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
+ dependencies:
+ "@types/node" "*"
+
+parse5@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+
+parseqs@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+ integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseuri@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+ integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascal-case@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f"
+ integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==
+ dependencies:
+ no-case "^3.0.3"
+ tslib "^1.10.0"
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+password-prompt@^1.0.4:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923"
+ integrity sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==
+ dependencies:
+ ansi-escapes "^3.1.0"
+ cross-spawn "^6.0.5"
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pbkdf2@^3.0.3:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94"
+ integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+phin@^2.9.1:
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
+ integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==
+
+physical-cpu-count@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660"
+ integrity sha1-GN4vl+S/epVRrXURlCtUlverpmA=
+
+picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
+ integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+
+pify@^2.0.0, pify@^2.2.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pirates@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pixelmatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
+ integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=
+ dependencies:
+ pngjs "^3.0.0"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
+ dependencies:
+ find-up "^1.0.0"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
+ integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
+ dependencies:
+ find-up "^2.1.0"
+
+pngjs@^3.0.0, pngjs@^3.3.3:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
+ integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
+
+pngquant-bin@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/pngquant-bin/-/pngquant-bin-5.0.2.tgz#6f34f3e89c9722a72bbc509062b40f1b17cda460"
+ integrity sha512-OLdT+4JZx5BqE1CFJkrvomYV0aSsv6x2Bba+aWaVc0PMfWlE+ZByNKYAdKeIqsM4uvW1HOSEHnf8KcOnykPNxA==
+ dependencies:
+ bin-build "^3.0.0"
+ bin-wrapper "^4.0.1"
+ execa "^0.10.0"
+ logalot "^2.0.0"
+
+pnp-webpack-plugin@^1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
+ integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==
+ dependencies:
+ ts-pnp "^1.1.6"
+
+portfinder@^1.0.26:
+ version "1.0.26"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70"
+ integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==
+ dependencies:
+ async "^2.6.2"
+ debug "^3.1.1"
+ mkdirp "^0.5.1"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-calc@^7.0.1:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1"
+ integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==
+ dependencies:
+ postcss "^7.0.27"
+ postcss-selector-parser "^6.0.2"
+ postcss-value-parser "^4.0.2"
+
+postcss-colormin@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
+ integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==
+ dependencies:
+ browserslist "^4.0.0"
+ color "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-convert-values@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
+ integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-discard-comments@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
+ integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-duplicates@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
+ integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-empty@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
+ integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-overridden@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
+ integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-flexbugs-fixes@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690"
+ integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==
+ dependencies:
+ postcss "^7.0.26"
+
+postcss-load-config@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003"
+ integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==
+ dependencies:
+ cosmiconfig "^5.0.0"
+ import-cwd "^2.0.0"
+
+postcss-loader@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d"
+ integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==
+ dependencies:
+ loader-utils "^1.1.0"
+ postcss "^7.0.0"
+ postcss-load-config "^2.0.0"
+ schema-utils "^1.0.0"
+
+postcss-merge-longhand@^4.0.11:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
+ integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==
+ dependencies:
+ css-color-names "0.0.4"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ stylehacks "^4.0.0"
+
+postcss-merge-rules@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
+ integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ cssnano-util-same-parent "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+ vendors "^1.0.0"
+
+postcss-minify-font-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
+ integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-minify-gradients@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
+ integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ is-color-stop "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-minify-params@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
+ integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ browserslist "^4.0.0"
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ uniqs "^2.0.0"
+
+postcss-minify-selectors@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
+ integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
+postcss-modules-extract-imports@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a"
+ integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-modules-local-by-default@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+ integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-scope@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+ integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A=
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-values@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+ integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^6.0.1"
+
+postcss-normalize-charset@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
+ integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-normalize-display-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
+ integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-positions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
+ integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-repeat-style@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
+ integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-string@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
+ integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==
+ dependencies:
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-timing-functions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
+ integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-unicode@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
+ integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-url@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
+ integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==
+ dependencies:
+ is-absolute-url "^2.0.0"
+ normalize-url "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-whitespace@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
+ integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-ordered-values@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
+ integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-reduce-initial@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
+ integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+
+postcss-reduce-transforms@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
+ integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-selector-parser@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270"
+ integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==
+ dependencies:
+ dot-prop "^5.2.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-selector-parser@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
+ integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
+ dependencies:
+ cssesc "^3.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-svgo@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
+ integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==
+ dependencies:
+ is-svg "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ svgo "^1.0.0"
+
+postcss-unique-selectors@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
+ integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ postcss "^7.0.0"
+ uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
+ integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
+
+postcss@^6.0.1, postcss@^6.0.23:
+ version "6.0.23"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
+ integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
+ dependencies:
+ chalk "^2.4.1"
+ source-map "^0.6.1"
+ supports-color "^5.4.0"
+
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.30:
+ version "7.0.32"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d"
+ integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+potrace@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/potrace/-/potrace-2.1.6.tgz#687d48d4441eebca9539f4c39f6815b6e2480e67"
+ integrity sha512-sXdIDGZAb3x1GSnyps7VxksRoy57/ch+kq7J79L5UPUHU5KRIJF9oLJQeRVyYlOPjois+gMxVfNJkQjSkK9xMA==
+ dependencies:
+ jimp "^0.10.2"
+
+prebuild-install@^5.3.4:
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.4.tgz#6982d10084269d364c1856550b7d090ea31fa293"
+ integrity sha512-AkKN+pf4fSEihjapLEEj8n85YIw/tN6BQqkhzbDc0RvEZGdkpJBGMUYx66AAMcPG2KzmPQS7Cm16an4HVBRRMA==
+ dependencies:
+ detect-libc "^1.0.3"
+ expand-template "^2.0.3"
+ github-from-package "0.0.0"
+ minimist "^1.2.3"
+ mkdirp "^0.5.1"
+ napi-build-utils "^1.0.1"
+ node-abi "^2.7.0"
+ noop-logger "^0.1.1"
+ npmlog "^4.0.1"
+ pump "^3.0.0"
+ rc "^1.2.7"
+ simple-get "^3.0.3"
+ tar-fs "^2.0.0"
+ tunnel-agent "^0.6.0"
+ which-pm-runs "^1.0.0"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prepend-http@^1.0.0, prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+prepend-http@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
+ integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+
+prettier@2.0.5, prettier@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
+ integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
+
+pretty-bytes@^5.1.0, pretty-bytes@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2"
+ integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==
+
+pretty-error@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+ integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
+ dependencies:
+ renderkid "^2.0.1"
+ utila "~0.4"
+
+pretty-format@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
+ integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^16.12.0"
+
+private@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+ integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+probe-image-size@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/probe-image-size/-/probe-image-size-4.1.1.tgz#c836c53154b6dd04dbcf66af2bbd50087b15e1dc"
+ integrity sha512-42LqKZqTLxH/UvAZ2/cKhAsR4G/Y6B7i7fI2qtQu9hRBK4YjS6gqO+QRtwTjvojUx4+/+JuOMzLoFyRecT9qRw==
+ dependencies:
+ any-promise "^1.3.0"
+ deepmerge "^4.0.0"
+ inherits "^2.0.3"
+ next-tick "^1.0.0"
+ request "^2.83.0"
+ stream-parser "~0.3.1"
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+ integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
+
+progress@^2.0.0, progress@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+promise@^7.1.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
+ dependencies:
+ asap "~2.0.3"
+
+prompts@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
+ integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.4"
+
+prop-types@^15.5.10, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+proper-lockfile@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.1.tgz#284cf9db9e30a90e647afad69deb7cb06881262c"
+ integrity sha512-1w6rxXodisVpn7QYvLk706mzprPTAPCYAqxMvctmPN3ekuRk/kuGkGc82pangZiAt4R3lwSuUzheTTn0/Yb7Zg==
+ dependencies:
+ graceful-fs "^4.1.11"
+ retry "^0.12.0"
+ signal-exit "^3.0.2"
+
+property-expr@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.2.tgz#fff2a43919135553a3bc2fdd94bdb841965b2330"
+ integrity sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g==
+
+property-information@^5.0.0, property-information@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943"
+ integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA==
+ dependencies:
+ xtend "^4.0.0"
+
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+ integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+
+protocols@^1.1.0, protocols@^1.4.0:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32"
+ integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==
+
+proxy-addr@~2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
+ integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.9.1"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+pseudomap@^1.0.1, pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.28:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.1.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qs@6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+query-string@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
+ dependencies:
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+query-string@^5.0.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
+ integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
+ dependencies:
+ decode-uri-component "^0.2.0"
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+query-string@^6.12.1:
+ version "6.13.1"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.1.tgz#d913ccfce3b4b3a713989fe6d39466d92e71ccad"
+ integrity sha512-RfoButmcK+yCta1+FuU8REvisx1oEzhMKwhLUNcepQTPGcNMp1sIqjnfCtfnvGSQZQEhaBHvccujtWoUV3TTbA==
+ dependencies:
+ decode-uri-component "^0.2.0"
+ split-on-first "^1.0.0"
+ strict-uri-encode "^2.0.0"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0, querystring@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+querystringify@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
+ integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+raw-body@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
+ integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.3"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+raw-loader@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
+ integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
+
+rc@^1.2.7, rc@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-clientside-effect@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837"
+ integrity sha512-nRmoyxeok5PBO6ytPvSjKp9xwXg9xagoTK1mMjwnQxqM9Hd7MNPl+LS1bOSOe+CV2+4fnEquc7H/S8QD3q697A==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+
+react-dev-utils@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-4.2.3.tgz#5b42d9ea58d5e9e017a2f57a40a8af408a3a46fb"
+ integrity sha512-uvmkwl5uMexCmC0GUv1XGQP0YjfYePJufGg4YYiukhqk2vN1tQxwWJIBERqhOmSi80cppZg8mZnPP/kOMf1sUQ==
+ dependencies:
+ address "1.0.3"
+ babel-code-frame "6.26.0"
+ chalk "1.1.3"
+ cross-spawn "5.1.0"
+ detect-port-alt "1.1.3"
+ escape-string-regexp "1.0.5"
+ filesize "3.5.11"
+ global-modules "1.0.0"
+ gzip-size "3.0.0"
+ inquirer "3.3.0"
+ is-root "1.0.0"
+ opn "5.1.0"
+ react-error-overlay "^3.0.0"
+ recursive-readdir "2.2.1"
+ shell-quote "1.6.1"
+ sockjs-client "1.1.4"
+ strip-ansi "3.0.1"
+ text-table "0.2.0"
+
+react-dom@^16.12.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f"
+ integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.19.1"
+
+react-error-overlay@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-3.0.0.tgz#c2bc8f4d91f1375b3dad6d75265d51cd5eeaf655"
+ integrity sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw==
+
+react-fast-compare@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
+ integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
+
+react-fast-compare@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
+ integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==
+
+react-focus-lock@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.3.1.tgz#9d5d85899773609c7eefa4fc54fff6a0f5f2fc47"
+ integrity sha512-j15cWLPzH0gOmRrUg01C09Peu8qbcdVqr6Bjyfxj80cNZmH+idk/bNBYEDSmkAtwkXI+xEYWSmHYqtaQhZ8iUQ==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ focus-lock "^0.6.7"
+ prop-types "^15.6.2"
+ react-clientside-effect "^1.2.2"
+ use-callback-ref "^1.2.1"
+ use-sidecar "^1.0.1"
+
+react-helmet@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726"
+ integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==
+ dependencies:
+ object-assign "^4.1.1"
+ prop-types "^15.7.2"
+ react-fast-compare "^3.1.1"
+ react-side-effect "^2.1.0"
+
+react-hot-loader@^4.12.21:
+ version "4.12.21"
+ resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.21.tgz#332e830801fb33024b5a147d6b13417f491eb975"
+ integrity sha512-Ynxa6ROfWUeKWsTHxsrL2KMzujxJVPjs385lmB2t5cHUxdoRPGind9F00tOkdc1l5WBleOF4XEAMILY1KPIIDA==
+ dependencies:
+ fast-levenshtein "^2.0.6"
+ global "^4.3.0"
+ hoist-non-react-statics "^3.3.0"
+ loader-utils "^1.1.0"
+ prop-types "^15.6.1"
+ react-lifecycles-compat "^3.0.4"
+ shallowequal "^1.1.0"
+ source-map "^0.7.3"
+
+react-icons@^3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.10.0.tgz#6c217a2dde2e8fa8d293210023914b123f317297"
+ integrity sha512-WsQ5n1JToG9VixWilSo1bHv842Cj5aZqTGiS3Ud47myF6aK7S/IUY2+dHcBdmkQcCFRuHsJ9OMUI0kTDfjyZXQ==
+ dependencies:
+ camelcase "^5.0.0"
+
+react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.3:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-lifecycles-compat@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+
+react-reconciler@^0.24.0:
+ version "0.24.0"
+ resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.24.0.tgz#5a396b2c2f5efe8554134a5935f49f546723f2dd"
+ integrity sha512-gAGnwWkf+NOTig9oOowqid9O0HjTDC+XVGBCAmJYYJ2A2cN/O4gDdIuuUQjv8A4v6GDwVfJkagpBBLW5OW9HSw==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.18.0"
+
+react-reconciler@^0.25.1:
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.25.1.tgz#f9814d59d115e1210762287ce987801529363aaa"
+ integrity sha512-R5UwsIvRcSs3w8n9k3tBoTtUHdVhu9u84EG7E5M0Jk9F5i6DA1pQzPfUZd6opYWGy56MJOtV3VADzy6DRwYDjw==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.19.1"
+
+react-refresh@^0.7.0:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.7.2.tgz#f30978d21eb8cac6e2f2fde056a7d04f6844dd50"
+ integrity sha512-u5l7fhAJXecWUJzVxzMRU2Zvw8m4QmDNHlTrT5uo3KBlYBhmChd7syAakBoay1yIiVhx/8Fi7a6v6kQZfsw81Q==
+
+react-remove-scroll-bar@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.1.0.tgz#edafe9b42a42c0dad9bdd10712772a1f9a39d7b9"
+ integrity sha512-5X5Y5YIPjIPrAoMJxf6Pfa7RLNGCgwZ95TdnVPgPuMftRfO8DaC7F4KP1b5eiO8hHbe7u+wZNDbYN5WUTpv7+g==
+ dependencies:
+ react-style-singleton "^2.1.0"
+ tslib "^1.0.0"
+
+react-remove-scroll@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.3.0.tgz#3af06fe2f7130500704b676cdef94452c08fe593"
+ integrity sha512-UqVimLeAe+5EHXKfsca081hAkzg3WuDmoT9cayjBegd6UZVhlTEchleNp9J4TMGkb/ftLve7ARB5Wph+HJ7A5g==
+ dependencies:
+ react-remove-scroll-bar "^2.1.0"
+ react-style-singleton "^2.1.0"
+ tslib "^1.0.0"
+ use-callback-ref "^1.2.3"
+ use-sidecar "^1.0.1"
+
+react-side-effect@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.0.tgz#1ce4a8b4445168c487ed24dab886421f74d380d3"
+ integrity sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg==
+
+react-style-singleton@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.0.tgz#7396885332e9729957f9df51f08cadbfc164e1c4"
+ integrity sha512-DH4ED+YABC1dhvSDYGGreAHmfuTXj6+ezT3CmHoqIEfxNgEYfIMoOtmbRp42JsUst3IPqBTDL+8r4TF7EWhIHw==
+ dependencies:
+ get-nonce "^1.0.0"
+ invariant "^2.2.4"
+ tslib "^1.0.0"
+
+react@^16.12.0, react@^16.8.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
+ integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+
+read-chunk@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-3.2.0.tgz#2984afe78ca9bfbbdb74b19387bf9e86289c16ca"
+ integrity sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==
+ dependencies:
+ pify "^4.0.1"
+ with-open-file "^0.1.6"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+read@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
+ integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
+ dependencies:
+ mute-stream "~0.0.4"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@~1.0.31:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+readdirp@~3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
+ integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==
+ dependencies:
+ picomatch "^2.2.1"
+
+recursive-readdir@2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99"
+ integrity sha1-kO8jHQd4xc4JPJpI105cVCLROpk=
+ dependencies:
+ minimatch "3.0.3"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+redux-thunk@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
+ integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
+
+redux@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
+ integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==
+ dependencies:
+ loose-envify "^1.4.0"
+ symbol-observable "^1.2.0"
+
+reflexbox@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/reflexbox/-/reflexbox-4.0.6.tgz#fc756d2cc1ca493baf9b96bb27dd640ad8154cf1"
+ integrity sha512-UNUL4YoJEXAPjRKHuty1tuOk+LV1nDJ2KYViDcH7lYm5yU3AQ+EKNXxPU3E14bQNK/pE09b1hYl+ZKdA94tWLQ==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@emotion/styled" "^10.0.0"
+ "@styled-system/css" "^5.0.0"
+ "@styled-system/should-forward-prop" "^5.0.0"
+ styled-system "^5.0.0"
+
+regenerate-unicode-properties@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
+ integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f"
+ integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4:
+ version "0.13.5"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
+ integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
+
+regenerator-transform@^0.14.2:
+ version "0.14.4"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7"
+ integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+ private "^0.1.8"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
+ integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+regexpp@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
+ integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+
+regexpu-core@^4.5.4, regexpu-core@^4.6.0, regexpu-core@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938"
+ integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.2.0"
+ regjsgen "^0.5.1"
+ regjsparser "^0.6.4"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.2.0"
+
+registry-auth-token@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479"
+ integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==
+ dependencies:
+ rc "^1.2.8"
+
+registry-url@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
+ integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
+ dependencies:
+ rc "^1.2.8"
+
+regjsgen@^0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
+ integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
+
+regjsparser@^0.6.4:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272"
+ integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==
+ dependencies:
+ jsesc "~0.5.0"
+
+relay-compiler@9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/relay-compiler/-/relay-compiler-9.1.0.tgz#e2975de85192e2470daad78e30052bf9614d22ed"
+ integrity sha512-jsJx0Ux5RoxM+JFm3M3xl7UfZAJ0kUTY/r6jqOpcYgVI3GLJthvNI4IoziFRlWbhizEzGFbpkdshZcu9IObJYA==
+ dependencies:
+ "@babel/core" "^7.0.0"
+ "@babel/generator" "^7.5.0"
+ "@babel/parser" "^7.0.0"
+ "@babel/runtime" "^7.0.0"
+ "@babel/traverse" "^7.0.0"
+ "@babel/types" "^7.0.0"
+ babel-preset-fbjs "^3.3.0"
+ chalk "^2.4.1"
+ fast-glob "^2.2.2"
+ fb-watchman "^2.0.0"
+ fbjs "^1.0.0"
+ immutable "~3.7.6"
+ nullthrows "^1.1.1"
+ relay-runtime "9.1.0"
+ signedsource "^1.0.0"
+ yargs "^14.2.0"
+
+relay-runtime@9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-9.1.0.tgz#d0534007d5c43e7b9653c6f5cc112ffac09c5020"
+ integrity sha512-6FE5YlZpR/b3R/HzGly85V+c4MdtLJhFY/outQARgxXonomrwqEik0Cr34LnPK4DmGS36cMLUliqhCs/DZyPVw==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ fbjs "^1.0.0"
+
+remark-footnotes@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-1.0.0.tgz#9c7a97f9a89397858a50033373020b1ea2aad011"
+ integrity sha512-X9Ncj4cj3/CIvLI2Z9IobHtVi8FVdUrdJkCNaL9kdX8ohfsi18DXHsCVd/A7ssARBdccdDb5ODnt62WuEWaM/g==
+
+remark-mdx@^1.6.5:
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.5.tgz#a268b18fe8dbe23f2b7c8cf572264c7c0398e0d1"
+ integrity sha512-zItwP3xcVQAEPJTHseFh+KZEyJ31+pbVJMOMzognqTuZ2zfzIR4Xrg0BAx6eo+paV4fHne/5vi2ugWtCeOaBRA==
+ dependencies:
+ "@babel/core" "7.9.6"
+ "@babel/helper-plugin-utils" "7.8.3"
+ "@babel/plugin-proposal-object-rest-spread" "7.9.6"
+ "@babel/plugin-syntax-jsx" "7.8.3"
+ "@mdx-js/util" "^1.6.5"
+ is-alphabetical "1.0.4"
+ remark-parse "8.0.2"
+ unified "9.0.0"
+
+remark-parse@8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.2.tgz#5999bc0b9c2e3edc038800a64ff103d0890b318b"
+ integrity sha512-eMI6kMRjsAGpMXXBAywJwiwAse+KNpmt+BK55Oofy4KvBZEqUDj6mWbGLJZrujoPIPPxDXzn3T9baRlpsm2jnQ==
+ dependencies:
+ ccount "^1.0.0"
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^2.0.0"
+ vfile-location "^3.0.0"
+ xtend "^4.0.1"
+
+remark-parse@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a"
+ integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==
+ dependencies:
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^1.1.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^1.0.0"
+ vfile-location "^2.0.0"
+ xtend "^4.0.1"
+
+remark-squeeze-paragraphs@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead"
+ integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==
+ dependencies:
+ mdast-squeeze-paragraphs "^4.0.0"
+
+remark-stringify@^8.0.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.0.tgz#1e555f4402e445c364fb23d12fc5f5e0337ec8b7"
+ integrity sha512-FSPZv1ds76oAZjurhhuV5qXSUSoz6QRPuwYK38S41sLHwg4oB7ejnmZshj7qwjgYLf93kdz6BOX9j5aidNE7rA==
+ dependencies:
+ ccount "^1.0.0"
+ is-alphanumeric "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ longest-streak "^2.0.1"
+ markdown-escapes "^1.0.0"
+ markdown-table "^2.0.0"
+ mdast-util-compact "^2.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ stringify-entities "^3.0.0"
+ unherit "^1.0.4"
+ xtend "^4.0.1"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+renderkid@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149"
+ integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==
+ dependencies:
+ css-select "^1.1.0"
+ dom-converter "^0.2"
+ htmlparser2 "^3.3.0"
+ strip-ansi "^3.0.0"
+ utila "^0.4.0"
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.0.0, repeat-string@^1.5.4, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+replace-ext@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+ integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
+
+replace-ext@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a"
+ integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==
+
+request@^2.83.0:
+ version "2.88.2"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-dir@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@5.0.0, resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.8.1:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
+ integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
+ dependencies:
+ path-parse "^1.0.6"
+
+responselike@1.0.2, responselike@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
+ integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
+ dependencies:
+ lowercase-keys "^1.0.0"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rgb-regex@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
+ integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE=
+
+rgba-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
+ integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
+
+rimraf@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rollup-pluginutils@^2.4.1:
+ version "2.8.2"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e"
+ integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==
+ dependencies:
+ estree-walker "^0.6.1"
+
+run-async@^2.2.0, run-async@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
+run-parallel@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
+ integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+rx-lite-aggregates@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+ integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
+ dependencies:
+ rx-lite "*"
+
+rx-lite@*, rx-lite@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+ integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
+
+rxjs@^6.5.3:
+ version "6.5.5"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
+ integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@>=0.6.0, sax@~1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+scheduler@^0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4"
+ integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+scheduler@^0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
+ integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+schema-utils@^0.4.5:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
+ integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^2.6.5:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7"
+ integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==
+ dependencies:
+ "@types/json-schema" "^7.0.4"
+ ajv "^6.12.2"
+ ajv-keywords "^3.4.1"
+
+scroll-behavior@^0.9.12:
+ version "0.9.12"
+ resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.12.tgz#1c22d273ec4ce6cd4714a443fead50227da9424c"
+ integrity sha512-18sirtyq1P/VsBX6O/vgw20Np+ngduFXEMO4/NDFXabdOKBL2kjPVUpz1y0+jm99EWwFJafxf5/tCyMeXt9Xyg==
+ dependencies:
+ dom-helpers "^3.4.0"
+ invariant "^2.2.4"
+
+seek-bzip@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc"
+ integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=
+ dependencies:
+ commander "~2.8.1"
+
+select-hose@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+ integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
+
+selfsigned@^1.10.7:
+ version "1.10.7"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"
+ integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==
+ dependencies:
+ node-forge "0.9.0"
+
+semver-diff@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
+ dependencies:
+ semver "^5.0.3"
+
+semver-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
+ integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
+
+semver-truncate@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8"
+ integrity sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=
+ dependencies:
+ semver "^5.3.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.2:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
+ integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+
+send@0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+ integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.7.2"
+ mime "1.6.0"
+ ms "2.1.1"
+ on-finished "~2.3.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
+
+serialize-javascript@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea"
+ integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==
+ dependencies:
+ randombytes "^2.1.0"
+
+serve-index@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+ integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
+ dependencies:
+ accepts "~1.3.4"
+ batch "0.6.1"
+ debug "2.6.9"
+ escape-html "~1.0.3"
+ http-errors "~1.6.2"
+ mime-types "~2.1.17"
+ parseurl "~1.3.2"
+
+serve-static@1.14.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+ integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.17.1"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4, setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shallow-compare@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/shallow-compare/-/shallow-compare-1.2.2.tgz#fa4794627bf455a47c4f56881d8a6132d581ffdb"
+ integrity sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg==
+
+shallowequal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+ integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+sharp@^0.25.1:
+ version "0.25.4"
+ resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363"
+ integrity sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==
+ dependencies:
+ color "^3.1.2"
+ detect-libc "^1.0.3"
+ node-addon-api "^3.0.0"
+ npmlog "^4.1.2"
+ prebuild-install "^5.3.4"
+ semver "^7.3.2"
+ simple-get "^4.0.0"
+ tar "^6.0.2"
+ tunnel-agent "^0.6.0"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
+ integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=
+ dependencies:
+ array-filter "~0.0.0"
+ array-map "~0.0.0"
+ array-reduce "~0.0.0"
+ jsonify "~0.0.0"
+
+side-channel@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947"
+ integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==
+ dependencies:
+ es-abstract "^1.17.0-next.1"
+ object-inspect "^1.7.0"
+
+sift@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/sift/-/sift-5.1.0.tgz#1bbf2dfb0eb71e56c4cc7fb567fbd1351b65015e"
+ integrity sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=
+
+signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+signedsource@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a"
+ integrity sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=
+
+simple-concat@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
+ integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
+
+simple-get@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
+ integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
+ dependencies:
+ decompress-response "^4.2.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
+simple-get@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675"
+ integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==
+ dependencies:
+ decompress-response "^6.0.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
+simple-git@2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.6.0.tgz#04b554d1038e6036af2ae4d67a30bc5fd75f4fcd"
+ integrity sha512-eplWRfu6RTfoAzGl7I0+g06MvYauXaNpjeuhFiOYZO9hevnH54RkkStOkEevWwqBWfdzWNO9ocffbdtxFzBqXQ==
+
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
+ dependencies:
+ is-arrayish "^0.3.1"
+
+single-trailing-newline@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/single-trailing-newline/-/single-trailing-newline-1.0.0.tgz#81f0ad2ad645181945c80952a5c1414992ee9664"
+ integrity sha1-gfCtKtZFGBlFyAlSpcFBSZLulmQ=
+ dependencies:
+ detect-newline "^1.0.3"
+
+sisteransi@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+slice-ansi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+ integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+slugify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.0.tgz#c9557c653c54b0c7f7a8e786ef3431add676d2cb"
+ integrity sha512-FtLNsMGBSRB/0JOE2A0fxlqjI6fJsgHGS13iTuVT28kViI4JjUiNqp/vyis0ZXYcMnpR3fzGNkv+6vRlI2GwdQ==
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+socket.io-adapter@~1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9"
+ integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==
+
+socket.io-client@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4"
+ integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==
+ dependencies:
+ backo2 "1.0.2"
+ base64-arraybuffer "0.1.5"
+ component-bind "1.0.0"
+ component-emitter "1.2.1"
+ debug "~4.1.0"
+ engine.io-client "~3.4.0"
+ has-binary2 "~1.0.2"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ socket.io-parser "~3.3.0"
+ to-array "0.1.4"
+
+socket.io-parser@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f"
+ integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ isarray "2.0.1"
+
+socket.io-parser@~3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a"
+ integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~4.1.0"
+ isarray "2.0.1"
+
+socket.io@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb"
+ integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==
+ dependencies:
+ debug "~4.1.0"
+ engine.io "~3.4.0"
+ has-binary2 "~1.0.2"
+ socket.io-adapter "~1.1.0"
+ socket.io-client "2.3.0"
+ socket.io-parser "~3.4.0"
+
+sockjs-client@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12"
+ integrity sha1-W6vjhrd15M8U51IJEUUmVAFsixI=
+ dependencies:
+ debug "^2.6.6"
+ eventsource "0.1.6"
+ faye-websocket "~0.11.0"
+ inherits "^2.0.1"
+ json3 "^3.3.2"
+ url-parse "^1.1.8"
+
+sockjs-client@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5"
+ integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==
+ dependencies:
+ debug "^3.2.5"
+ eventsource "^1.0.7"
+ faye-websocket "~0.11.1"
+ inherits "^2.0.3"
+ json3 "^3.3.2"
+ url-parse "^1.4.3"
+
+sockjs@0.3.20:
+ version "0.3.20"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855"
+ integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==
+ dependencies:
+ faye-websocket "^0.10.0"
+ uuid "^3.4.0"
+ websocket-driver "0.6.5"
+
+sort-keys-length@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188"
+ integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=
+ dependencies:
+ sort-keys "^1.0.0"
+
+sort-keys@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+sort-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
+ integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.16, source-map-support@~0.5.12:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@0.7.3, source-map@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sourcemap-codec@^1.4.4:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+ integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+space-separated-tokens@^1.0.0:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
+ integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+spdy-transport@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+ integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+ dependencies:
+ debug "^4.1.0"
+ detect-node "^2.0.4"
+ hpack.js "^2.1.6"
+ obuf "^1.1.2"
+ readable-stream "^3.0.6"
+ wbuf "^1.7.3"
+
+spdy@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
+ integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
+ dependencies:
+ debug "^4.1.0"
+ handle-thing "^2.0.0"
+ http-deceiver "^1.2.7"
+ select-hose "^2.0.0"
+ spdy-transport "^3.0.0"
+
+split-on-first@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
+ integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+squeak@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3"
+ integrity sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=
+ dependencies:
+ chalk "^1.0.0"
+ console-stream "^0.1.1"
+ lpad-align "^1.0.1"
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+st@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/st/-/st-2.0.0.tgz#eabd11e7722863b8ee8cfbdd027cb25e76ff35e9"
+ integrity sha512-drN+aGYnrZPNYIymmNwIY7LXYJ8MqsqXj4fMRue3FOgGMdGjSX10fhJ3qx0sVQPhcWxhEaN4U/eWM4O4dbYNAw==
+ dependencies:
+ async-cache "^1.1.0"
+ bl "^4.0.0"
+ fd "~0.0.2"
+ mime "^2.4.4"
+ negotiator "~0.6.2"
+ optionalDependencies:
+ graceful-fs "^4.2.3"
+
+stable@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+ integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+stack-trace@^0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
+ integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
+
+stack-utils@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
+ integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+
+stackframe@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303"
+ integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==
+
+state-toggle@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"
+ integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-parser@~0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773"
+ integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=
+ dependencies:
+ debug "2"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+strict-ui@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/strict-ui/-/strict-ui-0.1.3.tgz#3e73ef91b58ca86e24dac464dceddbbb5a2acadd"
+ integrity sha512-bbvWCY89TXb9Bkv7M0CWeFIJ8LXRvAxCqDkG3E87UGGuKAKShQzuziebnNEHgdgxQwvr/OJUxL/PJUIp+A0hwA==
+ dependencies:
+ "@theme-ui/components" ">= 0.4.0-alpha.0"
+ "@theme-ui/css" ">= 0.4.0-alpha.0"
+ "@types/reflexbox" "^4.0.0"
+ emotion "^10.0.27"
+ reflexbox "^4.0.6"
+ theme-ui ">= 0.4.0-alpha.0"
+
+strict-uri-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+ integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+
+strict-uri-encode@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
+ integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
+
+string-length@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"
+ integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^5.2.0"
+
+string-similarity@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-1.2.2.tgz#99b2c20a3c9bbb3903964eae1d89856db3d8db9b"
+ integrity sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==
+ dependencies:
+ lodash.every "^4.6.0"
+ lodash.flattendeep "^4.4.0"
+ lodash.foreach "^4.5.0"
+ lodash.map "^4.6.0"
+ lodash.maxby "^4.6.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string.prototype.matchall@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e"
+ integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0"
+ has-symbols "^1.0.1"
+ internal-slot "^1.0.2"
+ regexp.prototype.flags "^1.3.0"
+ side-channel "^1.0.2"
+
+string.prototype.trimend@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
+ integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+string.prototype.trimstart@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
+ integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringify-entities@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.0.1.tgz#32154b91286ab0869ab2c07696223bd23b6dbfc0"
+ integrity sha512-Lsk3ISA2++eJYqBMPKcr/8eby1I6L0gP0NlxF8Zja6c05yr/yCYyb2c9PwXjd08Ib3If1vn1rbs1H5ZtVuOfvQ==
+ dependencies:
+ character-entities-html4 "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.2"
+ is-hexadecimal "^1.0.0"
+
+stringify-object@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@3.0.1, strip-ansi@^3, strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-comments@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d"
+ integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==
+ dependencies:
+ babel-extract-comments "^1.0.0"
+ babel-plugin-transform-object-rest-spread "^6.26.0"
+
+strip-dirs@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
+ integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==
+ dependencies:
+ is-natural-number "^4.0.1"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
+ integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+strip-outer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
+ integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
+ dependencies:
+ escape-string-regexp "^1.0.2"
+
+style-loader@^0.23.1:
+ version "0.23.1"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+ integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+
+style-to-object@0.3.0, style-to-object@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46"
+ integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==
+ dependencies:
+ inline-style-parser "0.1.1"
+
+style-to-object@^0.2.1:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.3.tgz#afcf42bc03846b1e311880c55632a26ad2780bcb"
+ integrity sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng==
+ dependencies:
+ inline-style-parser "0.1.1"
+
+styled-system@^5.0.0, styled-system@^5.1.5:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-5.1.5.tgz#e362d73e1dbb5641a2fd749a6eba1263dc85075e"
+ integrity sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==
+ dependencies:
+ "@styled-system/background" "^5.1.2"
+ "@styled-system/border" "^5.1.5"
+ "@styled-system/color" "^5.1.2"
+ "@styled-system/core" "^5.1.2"
+ "@styled-system/flexbox" "^5.1.2"
+ "@styled-system/grid" "^5.1.2"
+ "@styled-system/layout" "^5.1.2"
+ "@styled-system/position" "^5.1.2"
+ "@styled-system/shadow" "^5.1.2"
+ "@styled-system/space" "^5.1.2"
+ "@styled-system/typography" "^5.1.2"
+ "@styled-system/variant" "^5.1.5"
+ object-assign "^4.1.1"
+
+stylehacks@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
+ integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
+stylis@^3.5.4:
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe"
+ integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==
+
+subscriptions-transport-ws@0.9.16, subscriptions-transport-ws@^0.9.16:
+ version "0.9.16"
+ resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz#90a422f0771d9c32069294c08608af2d47f596ec"
+ integrity sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==
+ dependencies:
+ backo2 "^1.0.2"
+ eventemitter3 "^3.1.0"
+ iterall "^1.2.1"
+ symbol-observable "^1.0.4"
+ ws "^5.2.0"
+
+sudo-prompt@^8.2.0:
+ version "8.2.5"
+ resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e"
+ integrity sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^5.3.0, supports-color@^5.4.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.0.0, supports-color@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
+ integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-hyperlinks@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47"
+ integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==
+ dependencies:
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
+
+svg-tag-names@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/svg-tag-names/-/svg-tag-names-2.0.1.tgz#acf5655faaa2e4b173007599226b906be1b38a29"
+ integrity sha512-BEZ508oR+X/b5sh7bT0RqDJ7GhTpezjj3P1D4kugrOaPs6HijviWksoQ63PS81vZn0QCjZmVKjHDBniTo+Domg==
+
+svgo@1.3.2, svgo@^1.0.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+ integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
+ dependencies:
+ chalk "^2.4.1"
+ coa "^2.0.2"
+ css-select "^2.0.0"
+ css-select-base-adapter "^0.1.1"
+ css-tree "1.0.0-alpha.37"
+ csso "^4.0.2"
+ js-yaml "^3.13.1"
+ mkdirp "~0.5.1"
+ object.values "^1.1.0"
+ sax "~1.2.4"
+ stable "^0.1.8"
+ unquote "~1.1.1"
+ util.promisify "~1.0.0"
+
+symbol-observable@^1.0.4, symbol-observable@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+synchronous-promise@^2.0.10:
+ version "2.0.13"
+ resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.13.tgz#9d8c165ddee69c5a6542862b405bc50095926702"
+ integrity sha512-R9N6uDkVsghHePKh1TEqbnLddO2IY25OcsksyFp/qBe7XYd0PVbKEWxhcdMhpLzE1I6skj5l4aEZ3CRxcbArlA==
+
+tabbable@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-4.0.0.tgz#5bff1d1135df1482cf0f0206434f15eadbeb9261"
+ integrity sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==
+
+table@^5.2.3:
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tar-fs@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5"
+ integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp-classic "^0.5.2"
+ pump "^3.0.0"
+ tar-stream "^2.0.0"
+
+tar-stream@^1.5.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
+ integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
+ dependencies:
+ bl "^1.0.0"
+ buffer-alloc "^1.2.0"
+ end-of-stream "^1.0.0"
+ fs-constants "^1.0.0"
+ readable-stream "^2.3.0"
+ to-buffer "^1.1.1"
+ xtend "^4.0.0"
+
+tar-stream@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325"
+ integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==
+ dependencies:
+ bl "^4.0.1"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+tar@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.2.tgz#5df17813468a6264ff14f766886c622b84ae2f39"
+ integrity sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^3.0.0"
+ minizlib "^2.1.0"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
+temp-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
+ integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
+
+tempfile@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-2.0.0.tgz#6b0446856a9b1114d1856ffcbe509cccb0977265"
+ integrity sha1-awRGhWqbERTRhW/8vlCczLCXcmU=
+ dependencies:
+ temp-dir "^1.0.0"
+ uuid "^3.0.1"
+
+term-size@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
+ integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
+ dependencies:
+ execa "^0.7.0"
+
+term-size@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753"
+ integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==
+
+terminal-link@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ supports-hyperlinks "^2.0.0"
+
+terser-webpack-plugin@^1.4.3:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f"
+ integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^3.1.0"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^4.1.2:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006"
+ integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+text-table@0.2.0, text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+"theme-ui@>= 0.4.0-alpha.0", theme-ui@^0.4.0-alpha.3:
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/theme-ui/-/theme-ui-0.4.0-highlight.0.tgz#461ee37d5091a53430e45479b3966ba122ec31f0"
+ integrity sha512-Eg8ATVmgEpUwtQ0gWOrci3Y4A6s1S3DOgBmEj99W9JugIQ6XXWwa0rYO43vmwhoXPq6/vEDqKDA5QapaRKpJQw==
+ dependencies:
+ "@theme-ui/color-modes" "^0.4.0-highlight.0"
+ "@theme-ui/components" "^0.4.0-highlight.0"
+ "@theme-ui/core" "^0.4.0-highlight.0"
+ "@theme-ui/css" "^0.4.0-highlight.0"
+ "@theme-ui/mdx" "^0.4.0-highlight.0"
+ "@theme-ui/theme-provider" "^0.4.0-highlight.0"
+ "@types/theme-ui__components" "^0.2.3"
+
+theme-ui@^0.2.49:
+ version "0.2.52"
+ resolved "https://registry.yarnpkg.com/theme-ui/-/theme-ui-0.2.52.tgz#c041a32b0b257fc8ecbae273e14e92abd48c0f2d"
+ integrity sha512-JFujorP5aFxIm1UyVCtefN5baXjwh5TXHKFYNWgAP+3rqVvggIr46uSMrRNvDjyhFOQiMK8YI8ctPQrrhcETpw==
+ dependencies:
+ "@emotion/is-prop-valid" "^0.8.1"
+ "@styled-system/css" "^5.0.16"
+ deepmerge "^4.0.0"
+
+through2@^2.0.0, through2@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through@^2.3.6, through@^2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+thunky@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+ integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+timed-out@^4.0.0, timed-out@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+ integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+
+timers-browserify@^2.0.4:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+timm@^1.6.1:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.2.tgz#dfd8c6719f7ba1fcfc6295a32670a1c6d166c0bd"
+ integrity sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw==
+
+timsort@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
+ integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+
+tiny-warning@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+ integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tinycolor2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
+ integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+tmp@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
+ integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
+ dependencies:
+ rimraf "^3.0.0"
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+ integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-buffer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
+ integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-readable-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
+ integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+toposort@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+ integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
+
+tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+trim-lines@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.3.tgz#839514be82428fd9e7ec89e35081afe8f6f93115"
+ integrity sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+trim-repeated@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
+ integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE=
+ dependencies:
+ escape-string-regexp "^1.0.2"
+
+trim-trailing-lines@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94"
+ integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==
+
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+ integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
+
+trough@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
+ integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
+
+"true-case-path@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf"
+ integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==
+
+ts-invariant@^0.4.0:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86"
+ integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==
+ dependencies:
+ tslib "^1.9.3"
+
+ts-pnp@^1.1.6:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
+ integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
+
+tsconfig-paths@^3.9.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
+ integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.1"
+ minimist "^1.2.0"
+ strip-bom "^3.0.0"
+
+tslib@^1.0.0, tslib@^1.10.0, tslib@^1.11.1, tslib@^1.11.2, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
+ integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+
+tslib@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3"
+ integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==
+
+tsutils@^3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
+ integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+ dependencies:
+ tslib "^1.8.1"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-fest@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
+ integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+
+type-fest@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+ integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
+
+type-fest@^0.8.0, type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+type-is@~1.6.17, type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+type-of@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/type-of/-/type-of-2.0.1.tgz#e72a1741896568e9f628378d816d6912f7f23972"
+ integrity sha1-5yoXQYllaOn2KDeNgW1pEvfyOXI=
+
+type@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+ integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
+ integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript@^3.9.3:
+ version "3.9.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36"
+ integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==
+
+ua-parser-js@^0.7.18:
+ version "0.7.21"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777"
+ integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==
+
+unbzip2-stream@^1.0.9:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
+ integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
+ dependencies:
+ buffer "^5.2.1"
+ through "^2.3.8"
+
+unc-path-regex@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+ integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
+
+unherit@^1.0.4:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
+ integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==
+ dependencies:
+ inherits "^2.0.0"
+ xtend "^4.0.0"
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"
+ integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
+ integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
+
+unified@9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-9.0.0.tgz#12b099f97ee8b36792dbad13d278ee2f696eed1d"
+ integrity sha512-ssFo33gljU3PdlWLjNp15Inqb77d6JnJSfyplGJPT/a+fNRNyCBeveBAYJdO5khKdF6WVHa/yYCC7Xl6BDwZUQ==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-buffer "^2.0.0"
+ is-plain-obj "^2.0.0"
+ trough "^1.0.0"
+ vfile "^4.0.0"
+
+unified@^8.4.2:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1"
+ integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-plain-obj "^2.0.0"
+ trough "^1.0.0"
+ vfile "^4.0.0"
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+uniqs@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+ integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unique-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
+ dependencies:
+ crypto-random-string "^1.0.0"
+
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ dependencies:
+ crypto-random-string "^2.0.0"
+
+unist-builder@2.0.3, unist-builder@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436"
+ integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==
+
+unist-util-generated@^1.0.0:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42"
+ integrity sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==
+
+unist-util-is@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd"
+ integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==
+
+unist-util-is@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.2.tgz#c7d1341188aa9ce5b3cff538958de9895f14a5de"
+ integrity sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==
+
+unist-util-position@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47"
+ integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==
+
+unist-util-remove-position@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020"
+ integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+unist-util-remove-position@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc"
+ integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+unist-util-remove@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.0.tgz#32c2ad5578802f2ca62ab808173d505b2c898488"
+ integrity sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==
+ dependencies:
+ unist-util-is "^4.0.0"
+
+unist-util-stringify-position@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
+ integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
+ dependencies:
+ "@types/unist" "^2.0.2"
+
+unist-util-visit-parents@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9"
+ integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==
+ dependencies:
+ unist-util-is "^3.0.0"
+
+unist-util-visit-parents@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz#d4076af3011739c71d2ce99d05de37d545f4351d"
+ integrity sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+
+unist-util-visit@2.0.2, unist-util-visit@^2.0.0, unist-util-visit@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.2.tgz#3843782a517de3d2357b4c193b24af2d9366afb7"
+ integrity sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+ unist-util-visit-parents "^3.0.0"
+
+unist-util-visit@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3"
+ integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==
+ dependencies:
+ unist-util-visit-parents "^2.0.0"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
+ integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
+
+unixify@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090"
+ integrity sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA=
+ dependencies:
+ normalize-path "^2.1.1"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unquote@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+ integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+update-notifier@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-3.0.1.tgz#78ecb68b915e2fd1be9f767f6e298ce87b736250"
+ integrity sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==
+ dependencies:
+ boxen "^3.0.0"
+ chalk "^2.0.1"
+ configstore "^4.0.0"
+ has-yarn "^2.1.0"
+ import-lazy "^2.1.0"
+ is-ci "^2.0.0"
+ is-installed-globally "^0.1.0"
+ is-npm "^3.0.0"
+ is-yarn-global "^0.3.0"
+ latest-version "^5.0.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-loader@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8"
+ integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
+ dependencies:
+ loader-utils "^1.1.0"
+ mime "^2.0.3"
+ schema-utils "^1.0.0"
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
+ dependencies:
+ prepend-http "^1.0.1"
+
+url-parse-lax@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
+ integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
+ dependencies:
+ prepend-http "^2.0.0"
+
+url-parse@^1.1.8, url-parse@^1.4.3:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
+ integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
+ dependencies:
+ querystringify "^2.1.1"
+ requires-port "^1.0.0"
+
+url-to-options@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
+ integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+urql@^1.9.7:
+ version "1.9.8"
+ resolved "https://registry.yarnpkg.com/urql/-/urql-1.9.8.tgz#07d76efdc698205a55724a2acd2640f7706a036d"
+ integrity sha512-AMikyJ9ldVvFVRND7AjgHJ3dBZXH2ygTM9bj4BwQzE9gfJfWA1wK+dXffV1WTOdOoCRngIxGWgZIzSkoLGBpbw==
+ dependencies:
+ "@urql/core" "^1.12.0"
+ wonka "^4.0.14"
+
+use-callback-ref@^1.2.1, use-callback-ref@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.4.tgz#d86d1577bfd0b955b6e04aaf5971025f406bea3c"
+ integrity sha512-rXpsyvOnqdScyied4Uglsp14qzag1JIemLeTWGKbwpotWht57hbP78aNT+Q4wdFKQfQibbUX4fb6Qb4y11aVOQ==
+
+use-sidecar@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.2.tgz#e72f582a75842f7de4ef8becd6235a4720ad8af6"
+ integrity sha512-287RZny6m5KNMTb/Kq9gmjafi7lQL0YHO1lYolU6+tY1h9+Z3uCtkJJ3OSOq3INwYf2hBryCcDh4520AhJibMA==
+ dependencies:
+ detect-node "^2.0.4"
+ tslib "^1.9.3"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+utif@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"
+ integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==
+ dependencies:
+ pako "^1.0.5"
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@^1.0.1, util.promisify@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
+ integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.2"
+ has-symbols "^1.0.1"
+ object.getownpropertydescriptors "^2.1.0"
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+utila@^0.4.0, utila@~0.4:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+ integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@3.4.0, uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+uuid@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
+ integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
+
+v8-compile-cache@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4"
+ integrity sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==
+
+v8-compile-cache@^2.0.3:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745"
+ integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==
+
+valid-url@1.0.9, valid-url@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
+ integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+vary@^1, vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+vendors@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
+ integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vfile-location@^2.0.0:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e"
+ integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==
+
+vfile-location@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3"
+ integrity sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==
+
+vfile-message@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
+ integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+vfile@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.1.1.tgz#282d28cebb609183ac51703001bc18b3e3f17de9"
+ integrity sha512-lRjkpyDGjVlBA7cDQhQ+gNcvB1BGaTHYuSOcY3S7OhDmBtnzX95FhtZZDecSTDm6aajFymyve6S5DN4ZHGezdQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ is-buffer "^2.0.0"
+ replace-ext "1.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-message "^2.0.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+vue-template-compiler@^2.6.11:
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080"
+ integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==
+ dependencies:
+ de-indent "^1.0.2"
+ he "^1.1.0"
+
+warning@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
+ integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
+ dependencies:
+ loose-envify "^1.0.0"
+
+warning@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+ integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+ dependencies:
+ loose-envify "^1.0.0"
+
+watchpack-chokidar2@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0"
+ integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==
+ dependencies:
+ chokidar "^2.1.8"
+
+watchpack@^1.6.1:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa"
+ integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==
+ dependencies:
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+ optionalDependencies:
+ chokidar "^3.4.0"
+ watchpack-chokidar2 "^2.0.0"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+ integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+ dependencies:
+ minimalistic-assert "^1.0.0"
+
+web-namespaces@^1.0.0, web-namespaces@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec"
+ integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==
+
+webpack-dev-middleware@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3"
+ integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==
+ dependencies:
+ memory-fs "^0.4.1"
+ mime "^2.4.4"
+ mkdirp "^0.5.1"
+ range-parser "^1.2.1"
+ webpack-log "^2.0.0"
+
+webpack-dev-server@^3.11.0:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c"
+ integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==
+ dependencies:
+ ansi-html "0.0.7"
+ bonjour "^3.5.0"
+ chokidar "^2.1.8"
+ compression "^1.7.4"
+ connect-history-api-fallback "^1.6.0"
+ debug "^4.1.1"
+ del "^4.1.1"
+ express "^4.17.1"
+ html-entities "^1.3.1"
+ http-proxy-middleware "0.19.1"
+ import-local "^2.0.0"
+ internal-ip "^4.3.0"
+ ip "^1.1.5"
+ is-absolute-url "^3.0.3"
+ killable "^1.0.1"
+ loglevel "^1.6.8"
+ opn "^5.5.0"
+ p-retry "^3.0.1"
+ portfinder "^1.0.26"
+ schema-utils "^1.0.0"
+ selfsigned "^1.10.7"
+ semver "^6.3.0"
+ serve-index "^1.9.1"
+ sockjs "0.3.20"
+ sockjs-client "1.4.0"
+ spdy "^4.0.2"
+ strip-ansi "^3.0.1"
+ supports-color "^6.1.0"
+ url "^0.11.0"
+ webpack-dev-middleware "^3.7.2"
+ webpack-log "^2.0.0"
+ ws "^6.2.1"
+ yargs "^13.3.2"
+
+webpack-hot-middleware@^2.25.0:
+ version "2.25.0"
+ resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706"
+ integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==
+ dependencies:
+ ansi-html "0.0.7"
+ html-entities "^1.2.0"
+ querystring "^0.2.0"
+ strip-ansi "^3.0.0"
+
+webpack-log@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
+ integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
+ dependencies:
+ ansi-colors "^3.0.0"
+ uuid "^3.3.2"
+
+webpack-merge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d"
+ integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==
+ dependencies:
+ lodash "^4.17.15"
+
+webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack-stats-plugin@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.3.1.tgz#1103c39a305a4e6ba15d5078db84bc0b35447417"
+ integrity sha512-pxqzFE055NlNTlNyfDG3xlB2QwT1EWdm/CF5dCJI/e+rRHVxrWhWg1rf1lfsWhI1/EePv8gi/A36YxO/+u0FgQ==
+
+webpack@~4.43.0:
+ version "4.43.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6"
+ integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/wasm-edit" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ acorn "^6.4.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.3"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.6.1"
+ webpack-sources "^1.4.1"
+
+websocket-driver@0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36"
+ integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=
+ dependencies:
+ websocket-extensions ">=0.1.1"
+
+websocket-driver@>=0.5.1:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
+ integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
+ dependencies:
+ http-parser-js ">=0.5.1"
+ safe-buffer ">=5.1.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
+ integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
+
+websocket@1.0.31:
+ version "1.0.31"
+ resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.31.tgz#e5d0f16c3340ed87670e489ecae6144c79358730"
+ integrity sha512-VAouplvGKPiKFDTeCCO65vYHsyay8DqoBSlzIO3fayrfOgU94lQN5a1uWVnFrMLceTJw/+fQXR5PGbUVRaHshQ==
+ dependencies:
+ debug "^2.2.0"
+ es5-ext "^0.10.50"
+ nan "^2.14.0"
+ typedarray-to-buffer "^3.1.5"
+ yaeti "^0.0.6"
+
+whatwg-fetch@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
+ integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
+
+whatwg-fetch@3.0.0, whatwg-fetch@>=0.10.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
+ integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which-pm-runs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
+ integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
+
+which@^1.2.14, which@^1.2.9:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+widest-line@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
+ integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
+ dependencies:
+ string-width "^2.1.1"
+
+widest-line@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
+ integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
+ dependencies:
+ string-width "^4.0.0"
+
+with-open-file@^0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/with-open-file/-/with-open-file-0.1.7.tgz#e2de8d974e8a8ae6e58886be4fe8e7465b58a729"
+ integrity sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==
+ dependencies:
+ p-finally "^1.0.0"
+ p-try "^2.1.0"
+ pify "^4.0.1"
+
+wonka@^4.0.14:
+ version "4.0.14"
+ resolved "https://registry.yarnpkg.com/wonka/-/wonka-4.0.14.tgz#77d680a84e575ed15a9f975eb87d6c530488f3a4"
+ integrity sha512-v9vmsTxpZjrA8CYfztbuoTQSHEsG3ZH+NCYfasHm0V3GqBupXrjuuz0RJyUaw2cRO7ouW2js0P6i853/qxlDcA==
+
+word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+workbox-background-sync@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz#26821b9bf16e9e37fd1d640289edddc08afd1950"
+ integrity sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-broadcast-update@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz#e2c0280b149e3a504983b757606ad041f332c35b"
+ integrity sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-build@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-4.3.1.tgz#414f70fb4d6de47f6538608b80ec52412d233e64"
+ integrity sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==
+ dependencies:
+ "@babel/runtime" "^7.3.4"
+ "@hapi/joi" "^15.0.0"
+ common-tags "^1.8.0"
+ fs-extra "^4.0.2"
+ glob "^7.1.3"
+ lodash.template "^4.4.0"
+ pretty-bytes "^5.1.0"
+ stringify-object "^3.3.0"
+ strip-comments "^1.0.2"
+ workbox-background-sync "^4.3.1"
+ workbox-broadcast-update "^4.3.1"
+ workbox-cacheable-response "^4.3.1"
+ workbox-core "^4.3.1"
+ workbox-expiration "^4.3.1"
+ workbox-google-analytics "^4.3.1"
+ workbox-navigation-preload "^4.3.1"
+ workbox-precaching "^4.3.1"
+ workbox-range-requests "^4.3.1"
+ workbox-routing "^4.3.1"
+ workbox-strategies "^4.3.1"
+ workbox-streams "^4.3.1"
+ workbox-sw "^4.3.1"
+ workbox-window "^4.3.1"
+
+workbox-cacheable-response@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz#f53e079179c095a3f19e5313b284975c91428c91"
+ integrity sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-core@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-4.3.1.tgz#005d2c6a06a171437afd6ca2904a5727ecd73be6"
+ integrity sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==
+
+workbox-expiration@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-4.3.1.tgz#d790433562029e56837f341d7f553c4a78ebe921"
+ integrity sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-google-analytics@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz#9eda0183b103890b5c256e6f4ea15a1f1548519a"
+ integrity sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==
+ dependencies:
+ workbox-background-sync "^4.3.1"
+ workbox-core "^4.3.1"
+ workbox-routing "^4.3.1"
+ workbox-strategies "^4.3.1"
+
+workbox-navigation-preload@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz#29c8e4db5843803b34cd96dc155f9ebd9afa453d"
+ integrity sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-precaching@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-4.3.1.tgz#9fc45ed122d94bbe1f0ea9584ff5940960771cba"
+ integrity sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-range-requests@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz#f8a470188922145cbf0c09a9a2d5e35645244e74"
+ integrity sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-routing@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-4.3.1.tgz#a675841af623e0bb0c67ce4ed8e724ac0bed0cda"
+ integrity sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-strategies@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-4.3.1.tgz#d2be03c4ef214c115e1ab29c9c759c9fe3e9e646"
+ integrity sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-streams@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-4.3.1.tgz#0b57da70e982572de09c8742dd0cb40a6b7c2cc3"
+ integrity sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-sw@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-4.3.1.tgz#df69e395c479ef4d14499372bcd84c0f5e246164"
+ integrity sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==
+
+workbox-window@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-4.3.1.tgz#ee6051bf10f06afa5483c9b8dfa0531994ede0f3"
+ integrity sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==
+ dependencies:
+ workbox-core "^4.3.1"
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^5.0.0, wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@^2.0.0:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
+ integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@^5.2.0:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
+ integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+ws@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
+ integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+ws@^7.1.2, ws@^7.3.0:
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd"
+ integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==
+
+ws@~6.1.0:
+ version "6.1.4"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9"
+ integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+ integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
+
+xdg-basedir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
+ integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
+
+xhr@^2.0.1:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd"
+ integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==
+ dependencies:
+ global "~4.3.0"
+ is-function "^1.0.1"
+ parse-headers "^2.0.0"
+ xtend "^4.0.0"
+
+xml-parse-from-string@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
+ integrity sha1-qQKekp09vN7RafPG4oI42VpdWig=
+
+xml2js@^0.4.5:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
+ integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~11.0.0"
+
+xmlbuilder@~11.0.0:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
+ integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
+
+xmlhttprequest-ssl@~1.5.4:
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
+ integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
+
+xregexp@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50"
+ integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==
+ dependencies:
+ "@babel/runtime-corejs3" "^7.8.3"
+
+xss@^1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.7.tgz#a554cbd5e909324bd6893fb47fff441ad54e2a95"
+ integrity sha512-A9v7tblGvxu8TWXQC9rlpW96a+LN1lyw6wyhpTmmGW+FwRMactchBR3ROKSi33UPCUcUHSu8s9YP6F+K3Mw//w==
+ dependencies:
+ commander "^2.20.3"
+ cssfilter "0.0.10"
+
+xstate@^4.10.0:
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.10.0.tgz#f87e4ef593fe40300b8eec50a5d9f0763aa4f622"
+ integrity sha512-nncQ9gW+xgk5iUEvpBOXhbzSCS0uwzzT4bOAXxo6oUoALgbxzqEyMmaMYwuvOHrabDTdMJYnF+xe2XD8RRgWmA==
+
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yaeti@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
+ integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=
+
+yallist@^2.0.0, yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml-loader@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/yaml-loader/-/yaml-loader-0.6.0.tgz#fe1c48b9f4803dace55a59a1474e790ba6ab1b48"
+ integrity sha512-1bNiLelumURyj+zvVHOv8Y3dpCri0F2S+DCcmps0pA1zWRLjS+FhZQg4o3aUUDYESh73+pKZNI18bj7stpReow==
+ dependencies:
+ loader-utils "^1.4.0"
+ yaml "^1.8.3"
+
+yaml@^1.7.2, yaml@^1.8.3:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
+ integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
+
+yargs-parser@^13.1.2:
+ version "13.1.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+ integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^15.0.1:
+ version "15.0.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3"
+ integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^18.1.1:
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@^13.2.1, yargs@^13.3.2:
+ version "13.3.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+ integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.2"
+
+yargs@^14.2.0:
+ version "14.2.3"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
+ integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
+ dependencies:
+ cliui "^5.0.0"
+ decamelize "^1.2.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^15.0.1"
+
+yargs@^15.3.1:
+ version "15.3.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
+ integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==
+ dependencies:
+ cliui "^6.0.0"
+ decamelize "^1.2.0"
+ find-up "^4.1.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^4.2.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^18.1.1"
+
+yauzl@^2.4.2:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+ integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.1.0"
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+ integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
+
+yoga-layout-prebuilt@^1.9.3:
+ version "1.9.6"
+ resolved "https://registry.yarnpkg.com/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.9.6.tgz#98dde95bbf8e6e12835876e9305f1e995c4bb801"
+ integrity sha512-Wursw6uqLXLMjBAO4SEShuzj8+EJXhCF71/rJ7YndHTkRAYSU0GY3OghRqfAk9HPUAAFMuqp3U1Wl+01vmGRQQ==
+ dependencies:
+ "@types/yoga-layout" "1.9.2"
+
+yup@^0.29.1:
+ version "0.29.1"
+ resolved "https://registry.yarnpkg.com/yup/-/yup-0.29.1.tgz#35d25aab470a0c3950f66040ba0ff4b1b6efe0d9"
+ integrity sha512-U7mPIbgfQWI6M3hZCJdGFrr+U0laG28FxMAKIgNvgl7OtyYuUoc4uy9qCWYHZjh49b8T7Ug8NNDdiMIEytcXrQ==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ fn-name "~3.0.0"
+ lodash "^4.17.15"
+ lodash-es "^4.17.11"
+ property-expr "^2.0.2"
+ synchronous-promise "^2.0.10"
+ toposort "^2.0.2"
+
+yurnalist@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/yurnalist/-/yurnalist-1.1.2.tgz#0fce283f1c53ea25ec278e2d1ab58537323b63e0"
+ integrity sha512-y7bsTXqL+YMJQ2De2CBtSftJNLQnB7gWIzzKm10GDyC8Fg4Dsmd2LG5YhT8pudvUiuotic80WVXt/g1femRVQg==
+ dependencies:
+ babel-runtime "^6.26.0"
+ chalk "^2.4.2"
+ cli-table3 "^0.5.1"
+ debug "^4.1.1"
+ deep-equal "^1.1.0"
+ detect-indent "^6.0.0"
+ inquirer "^7.0.0"
+ invariant "^2.2.0"
+ is-builtin-module "^3.0.0"
+ is-ci "^2.0.0"
+ leven "^3.1.0"
+ loud-rejection "^2.2.0"
+ node-emoji "^1.10.0"
+ object-path "^0.11.2"
+ read "^1.0.7"
+ rimraf "^3.0.0"
+ semver "^6.3.0"
+ strip-ansi "^5.2.0"
+ strip-bom "^4.0.0"
+
+zen-observable-ts@^0.8.21:
+ version "0.8.21"
+ resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d"
+ integrity sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==
+ dependencies:
+ tslib "^1.9.3"
+ zen-observable "^0.8.0"
+
+zen-observable@^0.8.0:
+ version "0.8.15"
+ resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15"
+ integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==
+
+zwitch@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
+ integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==
diff --git a/@linaria/examples/gatsby/plugin/.gitignore b/@linaria/examples/gatsby/plugin/.gitignore
new file mode 100644
index 0000000..15c894f
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/.gitignore
@@ -0,0 +1,72 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Typescript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# dotenv environment variable files
+.env*
+
+# gatsby files
+.cache/
+public
+
+# linaria
+.linaria-cache
+
+# Mac files
+.DS_Store
+
+# Yarn
+yarn-error.log
+.pnp/
+.pnp.js
+# Yarn Integrity file
+.yarn-integrity
diff --git a/@linaria/examples/gatsby/plugin/.prettierignore b/@linaria/examples/gatsby/plugin/.prettierignore
new file mode 100644
index 0000000..58d06c3
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/.prettierignore
@@ -0,0 +1,4 @@
+.cache
+package.json
+package-lock.json
+public
diff --git a/@linaria/examples/gatsby/plugin/.prettierrc b/@linaria/examples/gatsby/plugin/.prettierrc
new file mode 100644
index 0000000..33d2cfa
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/.prettierrc
@@ -0,0 +1,4 @@
+{
+ "arrowParens": "avoid",
+ "semi": false
+}
diff --git a/@linaria/examples/gatsby/plugin/LICENSE b/@linaria/examples/gatsby/plugin/LICENSE
new file mode 100644
index 0000000..5169a5e
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 gatsbyjs
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/@linaria/examples/gatsby/plugin/README.md b/@linaria/examples/gatsby/plugin/README.md
new file mode 100644
index 0000000..afbb4aa
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/README.md
@@ -0,0 +1,99 @@
+<!-- AUTO-GENERATED-CONTENT:START (STARTER) -->
+<p align="center">
+ <a href="https://www.gatsbyjs.org">
+ <img alt="Gatsby" src="https://www.gatsbyjs.org/monogram.svg" width="60" />
+ </a>
+</p>
+<h1 align="center">
+ Gatsby's default starter
+</h1>
+
+Kick off your project with this default boilerplate. This starter ships with the main Gatsby configuration files you might need to get up and running blazing fast with the blazing fast app generator for React.
+
+_Have another more specific idea? You may want to check out our vibrant collection of [official and community-created starters](https://www.gatsbyjs.org/docs/gatsby-starters/)._
+
+## 🚀 Quick start
+
+1. **Create a Gatsby site.**
+
+ Use the Gatsby CLI to create a new site, specifying the default starter.
+
+ ```shell
+ # create a new Gatsby site using the default starter
+ gatsby new my-default-starter https://github.com/gatsbyjs/gatsby-starter-default
+ ```
+
+1. **Start developing.**
+
+ Navigate into your new site’s directory and start it up.
+
+ ```shell
+ cd my-default-starter/
+ gatsby develop
+ ```
+
+1. **Open the source code and start editing!**
+
+ Your site is now running at `http://localhost:8000`!
+
+ _Note: You'll also see a second link: _`http://localhost:8000/___graphql`_. This is a tool you can use to experiment with querying your data. Learn more about using this tool in the [Gatsby tutorial](https://www.gatsbyjs.org/tutorial/part-five/#introducing-graphiql)._
+
+ Open the `my-default-starter` directory in your code editor of choice and edit `src/pages/index.js`. Save your changes and the browser will update in real time!
+
+## 🧐 What's inside?
+
+A quick look at the top-level files and directories you'll see in a Gatsby project.
+
+ .
+ ├── node_modules
+ ├── src
+ ├── .gitignore
+ ├── .prettierrc
+ ├── gatsby-browser.js
+ ├── gatsby-config.js
+ ├── gatsby-node.js
+ ├── gatsby-ssr.js
+ ├── LICENSE
+ ├── package-lock.json
+ ├── package.json
+ └── README.md
+
+1. **`/node_modules`**: This directory contains all of the modules of code that your project depends on (npm packages) are automatically installed.
+
+2. **`/src`**: This directory will contain all of the code related to what you will see on the front-end of your site (what you see in the browser) such as your site header or a page template. `src` is a convention for “source code”.
+
+3. **`.gitignore`**: This file tells git which files it should not track / not maintain a version history for.
+
+4. **`.prettierrc`**: This is a configuration file for [Prettier](https://prettier.io/). Prettier is a tool to help keep the formatting of your code consistent.
+
+5. **`gatsby-browser.js`**: This file is where Gatsby expects to find any usage of the [Gatsby browser APIs](https://www.gatsbyjs.org/docs/browser-apis/) (if any). These allow customization/extension of default Gatsby settings affecting the browser.
+
+6. **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you’d like to include, etc. (Check out the [config docs](https://www.gatsbyjs.org/docs/gatsby-config/) for more detail).
+
+7. **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby Node APIs](https://www.gatsbyjs.org/docs/node-apis/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process.
+
+8. **`gatsby-ssr.js`**: This file is where Gatsby expects to find any usage of the [Gatsby server-side rendering APIs](https://www.gatsbyjs.org/docs/ssr-apis/) (if any). These allow customization of default Gatsby settings affecting server-side rendering.
+
+9. **`LICENSE`**: Gatsby is licensed under the MIT license.
+
+10. **`package-lock.json`** (See `package.json` below, first). This is an automatically generated file based on the exact versions of your npm dependencies that were installed for your project. **(You won’t change this file directly).**
+
+11. **`package.json`**: A manifest file for Node.js projects, which includes things like metadata (the project’s name, author, etc). This manifest is how npm knows which packages to install for your project.
+
+12. **`README.md`**: A text file containing useful reference information about your project.
+
+## 🎓 Learning Gatsby
+
+Looking for more guidance? Full documentation for Gatsby lives [on the website](https://www.gatsbyjs.org/). Here are some places to start:
+
+- **For most developers, we recommend starting with our [in-depth tutorial for creating a site with Gatsby](https://www.gatsbyjs.org/tutorial/).** It starts with zero assumptions about your level of ability and walks through every step of the process.
+
+- **To dive straight into code samples, head [to our documentation](https://www.gatsbyjs.org/docs/).** In particular, check out the _Guides_, _API Reference_, and _Advanced Tutorials_ sections in the sidebar.
+
+## 💫 Deploy
+
+[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/gatsbyjs/gatsby-starter-default)
+
+[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/import/project?template=https://github.com/gatsbyjs/gatsby-starter-default)
+
+<!-- AUTO-GENERATED-CONTENT:END -->
diff --git a/@linaria/examples/gatsby/plugin/gatsby-browser.js b/@linaria/examples/gatsby/plugin/gatsby-browser.js
new file mode 100644
index 0000000..b1e5c31
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/gatsby-browser.js
@@ -0,0 +1,7 @@
+/**
+ * Implement Gatsby's Browser APIs in this file.
+ *
+ * See: https://www.gatsbyjs.org/docs/browser-apis/
+ */
+
+// You can delete this file if you're not using it
diff --git a/@linaria/examples/gatsby/plugin/gatsby-config.js b/@linaria/examples/gatsby/plugin/gatsby-config.js
new file mode 100644
index 0000000..25fa047
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/gatsby-config.js
@@ -0,0 +1,35 @@
+module.exports = {
+ siteMetadata: {
+ title: `Gatsby Default Starter`,
+ description: `Kick off your next, great Gatsby project with this default starter. This barebones starter ships with the main Gatsby configuration files you might need.`,
+ author: `@gatsbyjs`,
+ },
+ plugins: [
+ `gatsby-plugin-react-helmet`,
+ {
+ resolve: `gatsby-source-filesystem`,
+ options: {
+ name: `images`,
+ path: `${__dirname}/src/images`,
+ },
+ },
+ `gatsby-transformer-sharp`,
+ `gatsby-plugin-sharp`,
+ {
+ resolve: `gatsby-plugin-manifest`,
+ options: {
+ name: `gatsby-starter-default`,
+ short_name: `starter`,
+ start_url: `/`,
+ background_color: `#663399`,
+ theme_color: `#663399`,
+ display: `minimal-ui`,
+ icon: `src/images/gatsby-icon.png`, // This path is relative to the root of the site.
+ },
+ },
+ "gatsby-plugin-linaria",
+ // this (optional) plugin enables Progressive Web App + Offline functionality
+ // To learn more, visit: https://gatsby.dev/offline
+ // `gatsby-plugin-offline`,
+ ],
+}
diff --git a/@linaria/examples/gatsby/plugin/gatsby-node.js b/@linaria/examples/gatsby/plugin/gatsby-node.js
new file mode 100644
index 0000000..2f42665
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/gatsby-node.js
@@ -0,0 +1,7 @@
+/**
+ * Implement Gatsby's Node APIs in this file.
+ *
+ * See: https://www.gatsbyjs.org/docs/node-apis/
+ */
+
+// You can delete this file if you're not using it
diff --git a/@linaria/examples/gatsby/plugin/gatsby-ssr.js b/@linaria/examples/gatsby/plugin/gatsby-ssr.js
new file mode 100644
index 0000000..b17b8fc
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/gatsby-ssr.js
@@ -0,0 +1,7 @@
+/**
+ * Implement Gatsby's SSR (Server Side Rendering) APIs in this file.
+ *
+ * See: https://www.gatsbyjs.org/docs/ssr-apis/
+ */
+
+// You can delete this file if you're not using it
diff --git a/@linaria/examples/gatsby/plugin/package.json b/@linaria/examples/gatsby/plugin/package.json
new file mode 100644
index 0000000..b402685
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "gatsby-starter-default",
+ "private": true,
+ "description": "A simple starter to get up and developing quickly with Gatsby",
+ "version": "0.1.0",
+ "author": "Kyle Mathews <mathews.kyle@gmail.com>",
+ "dependencies": {
+ "gatsby": "^2.22.15",
+ "gatsby-image": "^2.4.5",
+ "gatsby-plugin-linaria": "^2.0.0",
+ "gatsby-plugin-manifest": "^2.4.9",
+ "gatsby-plugin-offline": "^3.2.7",
+ "gatsby-plugin-react-helmet": "^3.3.2",
+ "gatsby-plugin-sharp": "^2.6.9",
+ "gatsby-source-filesystem": "^2.3.8",
+ "gatsby-transformer-sharp": "^2.5.3",
+ "linaria": "^1.3.3",
+ "prop-types": "^15.7.2",
+ "react": "^16.12.0",
+ "react-dom": "^16.12.0",
+ "react-helmet": "^6.0.0"
+ },
+ "devDependencies": {
+ "prettier": "2.0.5"
+ },
+ "keywords": [
+ "gatsby"
+ ],
+ "license": "MIT",
+ "scripts": {
+ "build": "gatsby build",
+ "develop": "gatsby develop",
+ "format": "prettier --write \"**/*.{js,jsx,json,md}\"",
+ "start": "npm run develop",
+ "serve": "gatsby serve",
+ "clean": "gatsby clean",
+ "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/gatsbyjs/gatsby-starter-default"
+ },
+ "bugs": {
+ "url": "https://github.com/gatsbyjs/gatsby/issues"
+ }
+}
diff --git a/@linaria/examples/gatsby/plugin/src/components/header.js b/@linaria/examples/gatsby/plugin/src/components/header.js
new file mode 100644
index 0000000..8990b7e
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/components/header.js
@@ -0,0 +1,42 @@
+import { Link } from "gatsby"
+import PropTypes from "prop-types"
+import React from "react"
+
+const Header = ({ siteTitle }) => (
+ <header
+ style={{
+ background: `rebeccapurple`,
+ marginBottom: `1.45rem`,
+ }}
+ >
+ <div
+ style={{
+ margin: `0 auto`,
+ maxWidth: 960,
+ padding: `1.45rem 1.0875rem`,
+ }}
+ >
+ <h1 style={{ margin: 0 }}>
+ <Link
+ to="/"
+ style={{
+ color: `white`,
+ textDecoration: `none`,
+ }}
+ >
+ {siteTitle}
+ </Link>
+ </h1>
+ </div>
+ </header>
+)
+
+Header.propTypes = {
+ siteTitle: PropTypes.string,
+}
+
+Header.defaultProps = {
+ siteTitle: ``,
+}
+
+export default Header
diff --git a/@linaria/examples/gatsby/plugin/src/components/image.js b/@linaria/examples/gatsby/plugin/src/components/image.js
new file mode 100644
index 0000000..e61edb6
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/components/image.js
@@ -0,0 +1,32 @@
+import React from "react"
+import { useStaticQuery, graphql } from "gatsby"
+import Img from "gatsby-image"
+
+/*
+ * This component is built using `gatsby-image` to automatically serve optimized
+ * images with lazy loading and reduced file sizes. The image is loaded using a
+ * `useStaticQuery`, which allows us to load the image from directly within this
+ * component, rather than having to pass the image data down from pages.
+ *
+ * For more information, see the docs:
+ * - `gatsby-image`: https://gatsby.dev/gatsby-image
+ * - `useStaticQuery`: https://www.gatsbyjs.org/docs/use-static-query/
+ */
+
+const Image = () => {
+ const data = useStaticQuery(graphql`
+ query {
+ placeholderImage: file(relativePath: { eq: "gatsby-astronaut.png" }) {
+ childImageSharp {
+ fluid(maxWidth: 300) {
+ ...GatsbyImageSharpFluid
+ }
+ }
+ }
+ }
+ `)
+
+ return <Img fluid={data.placeholderImage.childImageSharp.fluid} />
+}
+
+export default Image
diff --git a/@linaria/examples/gatsby/plugin/src/components/layout.css b/@linaria/examples/gatsby/plugin/src/components/layout.css
new file mode 100644
index 0000000..b6f6332
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/components/layout.css
@@ -0,0 +1,622 @@
+html {
+ font-family: sans-serif;
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+progress {
+ vertical-align: baseline;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background-color: transparent;
+ -webkit-text-decoration-skip: objects;
+}
+a:active,
+a:hover {
+ outline-width: 0;
+}
+abbr[title] {
+ border-bottom: none;
+ text-decoration: underline;
+ text-decoration: underline dotted;
+}
+b,
+strong {
+ font-weight: inherit;
+ font-weight: bolder;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+mark {
+ background-color: #ff0;
+ color: #000;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+sub {
+ bottom: -0.25em;
+}
+sup {
+ top: -0.5em;
+}
+img {
+ border-style: none;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ font: inherit;
+ margin: 0;
+}
+optgroup {
+ font-weight: 700;
+}
+button,
+input {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+[type="reset"],
+[type="submit"],
+button,
+html [type="button"] {
+ -webkit-appearance: button;
+}
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner,
+button::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring,
+button:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+fieldset {
+ border: 1px solid silver;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+legend {
+ box-sizing: border-box;
+ color: inherit;
+ display: table;
+ max-width: 100%;
+ padding: 0;
+ white-space: normal;
+}
+textarea {
+ overflow: auto;
+}
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+[type="search"] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px;
+}
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+::-webkit-input-placeholder {
+ color: inherit;
+ opacity: 0.54;
+}
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit;
+}
+html {
+ font: 112.5%/1.45em georgia, serif;
+ box-sizing: border-box;
+ overflow-y: scroll;
+}
+* {
+ box-sizing: inherit;
+}
+*:before {
+ box-sizing: inherit;
+}
+*:after {
+ box-sizing: inherit;
+}
+body {
+ color: hsla(0, 0%, 0%, 0.8);
+ font-family: georgia, serif;
+ font-weight: normal;
+ word-wrap: break-word;
+ font-kerning: normal;
+ -moz-font-feature-settings: "kern", "liga", "clig", "calt";
+ -ms-font-feature-settings: "kern", "liga", "clig", "calt";
+ -webkit-font-feature-settings: "kern", "liga", "clig", "calt";
+ font-feature-settings: "kern", "liga", "clig", "calt";
+}
+img {
+ max-width: 100%;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+h1 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 2.25rem;
+ line-height: 1.1;
+}
+h2 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 1.62671rem;
+ line-height: 1.1;
+}
+h3 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 1.38316rem;
+ line-height: 1.1;
+}
+h4 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 1rem;
+ line-height: 1.1;
+}
+h5 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 0.85028rem;
+ line-height: 1.1;
+}
+h6 {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ color: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-weight: bold;
+ text-rendering: optimizeLegibility;
+ font-size: 0.78405rem;
+ line-height: 1.1;
+}
+hgroup {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+ul {
+ margin-left: 1.45rem;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ list-style-position: outside;
+ list-style-image: none;
+}
+ol {
+ margin-left: 1.45rem;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ list-style-position: outside;
+ list-style-image: none;
+}
+dl {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+dd {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+p {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+figure {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+pre {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 1.45rem;
+ font-size: 0.85rem;
+ line-height: 1.42;
+ background: hsla(0, 0%, 0%, 0.04);
+ border-radius: 3px;
+ overflow: auto;
+ word-wrap: normal;
+ padding: 1.45rem;
+}
+table {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+ font-size: 1rem;
+ line-height: 1.45rem;
+ border-collapse: collapse;
+ width: 100%;
+}
+fieldset {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+blockquote {
+ margin-left: 1.45rem;
+ margin-right: 1.45rem;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+form {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+noscript {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+iframe {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+hr {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: calc(1.45rem - 1px);
+ background: hsla(0, 0%, 0%, 0.2);
+ border: none;
+ height: 1px;
+}
+address {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ margin-bottom: 1.45rem;
+}
+b {
+ font-weight: bold;
+}
+strong {
+ font-weight: bold;
+}
+dt {
+ font-weight: bold;
+}
+th {
+ font-weight: bold;
+}
+li {
+ margin-bottom: calc(1.45rem / 2);
+}
+ol li {
+ padding-left: 0;
+}
+ul li {
+ padding-left: 0;
+}
+li > ol {
+ margin-left: 1.45rem;
+ margin-bottom: calc(1.45rem / 2);
+ margin-top: calc(1.45rem / 2);
+}
+li > ul {
+ margin-left: 1.45rem;
+ margin-bottom: calc(1.45rem / 2);
+ margin-top: calc(1.45rem / 2);
+}
+blockquote *:last-child {
+ margin-bottom: 0;
+}
+li *:last-child {
+ margin-bottom: 0;
+}
+p *:last-child {
+ margin-bottom: 0;
+}
+li > p {
+ margin-bottom: calc(1.45rem / 2);
+}
+code {
+ font-size: 0.85rem;
+ line-height: 1.45rem;
+}
+kbd {
+ font-size: 0.85rem;
+ line-height: 1.45rem;
+}
+samp {
+ font-size: 0.85rem;
+ line-height: 1.45rem;
+}
+abbr {
+ border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
+ cursor: help;
+}
+acronym {
+ border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
+ cursor: help;
+}
+abbr[title] {
+ border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
+ cursor: help;
+ text-decoration: none;
+}
+thead {
+ text-align: left;
+}
+td,
+th {
+ text-align: left;
+ border-bottom: 1px solid hsla(0, 0%, 0%, 0.12);
+ font-feature-settings: "tnum";
+ -moz-font-feature-settings: "tnum";
+ -ms-font-feature-settings: "tnum";
+ -webkit-font-feature-settings: "tnum";
+ padding-left: 0.96667rem;
+ padding-right: 0.96667rem;
+ padding-top: 0.725rem;
+ padding-bottom: calc(0.725rem - 1px);
+}
+th:first-child,
+td:first-child {
+ padding-left: 0;
+}
+th:last-child,
+td:last-child {
+ padding-right: 0;
+}
+tt,
+code {
+ background-color: hsla(0, 0%, 0%, 0.04);
+ border-radius: 3px;
+ font-family: "SFMono-Regular", Consolas, "Roboto Mono", "Droid Sans Mono",
+ "Liberation Mono", Menlo, Courier, monospace;
+ padding: 0;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+}
+pre code {
+ background: none;
+ line-height: 1.42;
+}
+code:before,
+code:after,
+tt:before,
+tt:after {
+ letter-spacing: -0.2em;
+ content: " ";
+}
+pre code:before,
+pre code:after,
+pre tt:before,
+pre tt:after {
+ content: "";
+}
+@media only screen and (max-width: 480px) {
+ html {
+ font-size: 100%;
+ }
+}
diff --git a/@linaria/examples/gatsby/plugin/src/components/layout.js b/@linaria/examples/gatsby/plugin/src/components/layout.js
new file mode 100644
index 0000000..0359ea6
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/components/layout.js
@@ -0,0 +1,51 @@
+/**
+ * Layout component that queries for data
+ * with Gatsby's useStaticQuery component
+ *
+ * See: https://www.gatsbyjs.org/docs/use-static-query/
+ */
+
+import React from "react"
+import PropTypes from "prop-types"
+import { useStaticQuery, graphql } from "gatsby"
+
+import Header from "./header"
+import "./layout.css"
+
+const Layout = ({ children }) => {
+ const data = useStaticQuery(graphql`
+ query SiteTitleQuery {
+ site {
+ siteMetadata {
+ title
+ }
+ }
+ }
+ `)
+
+ return (
+ <>
+ <Header siteTitle={data.site.siteMetadata.title} />
+ <div
+ style={{
+ margin: `0 auto`,
+ maxWidth: 960,
+ padding: `0 1.0875rem 1.45rem`,
+ }}
+ >
+ <main>{children}</main>
+ <footer>
+ © {new Date().getFullYear()}, Built with
+ {` `}
+ <a href="https://www.gatsbyjs.org">Gatsby</a>
+ </footer>
+ </div>
+ </>
+ )
+}
+
+Layout.propTypes = {
+ children: PropTypes.node.isRequired,
+}
+
+export default Layout
diff --git a/@linaria/examples/gatsby/plugin/src/components/seo.js b/@linaria/examples/gatsby/plugin/src/components/seo.js
new file mode 100644
index 0000000..aee4d45
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/components/seo.js
@@ -0,0 +1,88 @@
+/**
+ * SEO component that queries for data with
+ * Gatsby's useStaticQuery React hook
+ *
+ * See: https://www.gatsbyjs.org/docs/use-static-query/
+ */
+
+import React from "react"
+import PropTypes from "prop-types"
+import { Helmet } from "react-helmet"
+import { useStaticQuery, graphql } from "gatsby"
+
+function SEO({ description, lang, meta, title }) {
+ const { site } = useStaticQuery(
+ graphql`
+ query {
+ site {
+ siteMetadata {
+ title
+ description
+ author
+ }
+ }
+ }
+ `
+ )
+
+ const metaDescription = description || site.siteMetadata.description
+
+ return (
+ <Helmet
+ htmlAttributes={{
+ lang,
+ }}
+ title={title}
+ titleTemplate={`%s | ${site.siteMetadata.title}`}
+ meta={[
+ {
+ name: `description`,
+ content: metaDescription,
+ },
+ {
+ property: `og:title`,
+ content: title,
+ },
+ {
+ property: `og:description`,
+ content: metaDescription,
+ },
+ {
+ property: `og:type`,
+ content: `website`,
+ },
+ {
+ name: `twitter:card`,
+ content: `summary`,
+ },
+ {
+ name: `twitter:creator`,
+ content: site.siteMetadata.author,
+ },
+ {
+ name: `twitter:title`,
+ content: title,
+ },
+ {
+ name: `twitter:description`,
+ content: metaDescription,
+ },
+ ].concat(meta)}
+ />
+ )
+}
+
+SEO.defaultProps = {
+ lang: `en`,
+ meta: [],
+ description: ``,
+}
+
+SEO.propTypes = {
+ description: PropTypes.string,
+ lang: PropTypes.string,
+ meta: PropTypes.arrayOf(PropTypes.object),
+ title: PropTypes.string.isRequired,
+}
+
+export default SEO
diff --git a/@linaria/examples/gatsby/plugin/src/images/gatsby-astronaut.png b/@linaria/examples/gatsby/plugin/src/images/gatsby-astronaut.png
new file mode 100644
index 0000000..da58ece
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/images/gatsby-astronaut.png
Binary files differ
diff --git a/@linaria/examples/gatsby/plugin/src/images/gatsby-icon.png b/@linaria/examples/gatsby/plugin/src/images/gatsby-icon.png
new file mode 100644
index 0000000..908bc78
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/images/gatsby-icon.png
Binary files differ
diff --git a/@linaria/examples/gatsby/plugin/src/pages/404.js b/@linaria/examples/gatsby/plugin/src/pages/404.js
new file mode 100644
index 0000000..bc4c31d
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/pages/404.js
@@ -0,0 +1,14 @@
+import React from "react"
+
+import Layout from "../components/layout"
+import SEO from "../components/seo"
+
+const NotFoundPage = () => (
+ <Layout>
+ <SEO title="404: Not found" />
+ <h1>NOT FOUND</h1>
+ <p>You just hit a route that doesn&#39;t exist... the sadness.</p>
+ </Layout>
+)
+
+export default NotFoundPage
diff --git a/@linaria/examples/gatsby/plugin/src/pages/index.js b/@linaria/examples/gatsby/plugin/src/pages/index.js
new file mode 100644
index 0000000..e7cc99f
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/pages/index.js
@@ -0,0 +1,28 @@
+import React from "react"
+import { Link } from "gatsby"
+import { css } from "linaria"
+
+import Layout from "../components/layout"
+import Image from "../components/image"
+import SEO from "../components/seo"
+
+const imageWrapper = css`
+ max-width: 300px;
+ margin-bottom: 1.45rem;
+`
+
+const IndexPage = () => (
+ <Layout>
+ <SEO title="Home" />
+ <h1>Hi people</h1>
+ <p>Welcome to your new Gatsby site.</p>
+ <p>Now go build something great.</p>
+ <div className={imageWrapper}>
+ <Image />
+ </div>
+ <Link to="/page-2/">Go to page 2</Link> <br />
+ <Link to="/using-typescript/">Go to "Using TypeScript"</Link>
+ </Layout>
+)
+
+export default IndexPage
diff --git a/@linaria/examples/gatsby/plugin/src/pages/page-2.js b/@linaria/examples/gatsby/plugin/src/pages/page-2.js
new file mode 100644
index 0000000..666c23e
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/pages/page-2.js
@@ -0,0 +1,16 @@
+import React from "react"
+import { Link } from "gatsby"
+
+import Layout from "../components/layout"
+import SEO from "../components/seo"
+
+const SecondPage = () => (
+ <Layout>
+ <SEO title="Page two" />
+ <h1>Hi from the second page</h1>
+ <p>Welcome to page 2</p>
+ <Link to="/">Go back to the homepage</Link>
+ </Layout>
+)
+
+export default SecondPage
diff --git a/@linaria/examples/gatsby/plugin/src/pages/using-typescript.tsx b/@linaria/examples/gatsby/plugin/src/pages/using-typescript.tsx
new file mode 100644
index 0000000..f9212ca
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/src/pages/using-typescript.tsx
@@ -0,0 +1,34 @@
+// If you don't want to use TypeScript you can delete this file!
+import React from "react"
+import { PageProps, Link, graphql } from "gatsby"
+
+import Layout from "../components/layout"
+import SEO from "../components/seo"
+
+type DataProps = {
+ site: {
+ buildTime: string
+ }
+}
+
+const UsingTypescript: React.FC<PageProps<DataProps>> = ({ data, path }) => (
+ <Layout>
+ <SEO title="Using TypeScript" />
+ <h1>Gatsby supports TypeScript by default!</h1>
+ <p>This means that you can create and write <em>.ts/.tsx</em> files for your pages, components etc. Please note that the <em>gatsby-*.js</em> files (like gatsby-node.js) currently don't support TypeScript yet.</p>
+ <p>For type checking you'll want to install <em>typescript</em> via npm and run <em>tsc --init</em> to create a <em>.tsconfig</em> file.</p>
+ <p>You're currently on the page "{path}" which was built on {data.site.buildTime}.</p>
+ <p>To learn more, head over to our <a href="https://www.gatsbyjs.org/docs/typescript/">documentation about TypeScript</a>.</p>
+ <Link to="/">Go back to the homepage</Link>
+ </Layout>
+)
+
+export default UsingTypescript
+
+export const query = graphql`
+ {
+ site {
+ buildTime(formatString: "YYYY-MM-DD hh:mm a z")
+ }
+ }
+`
diff --git a/@linaria/examples/gatsby/plugin/yarn.lock b/@linaria/examples/gatsby/plugin/yarn.lock
new file mode 100644
index 0000000..ada8b0a
--- /dev/null
+++ b/@linaria/examples/gatsby/plugin/yarn.lock
@@ -0,0 +1,15409 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1", "@babel/code-frame@^7.8.3":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff"
+ integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==
+ dependencies:
+ "@babel/highlight" "^7.10.1"
+
+"@babel/compat-data@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db"
+ integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw==
+ dependencies:
+ browserslist "^4.12.0"
+ invariant "^2.2.4"
+ semver "^5.5.0"
+
+"@babel/core@7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376"
+ integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/generator" "^7.9.6"
+ "@babel/helper-module-transforms" "^7.9.0"
+ "@babel/helpers" "^7.9.6"
+ "@babel/parser" "^7.9.6"
+ "@babel/template" "^7.8.6"
+ "@babel/traverse" "^7.9.6"
+ "@babel/types" "^7.9.6"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/core@^7.0.0", "@babel/core@^7.3.3", "@babel/core@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a"
+ integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.1"
+ "@babel/generator" "^7.10.2"
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helpers" "^7.10.1"
+ "@babel/parser" "^7.10.2"
+ "@babel/template" "^7.10.1"
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.2"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.10.1", "@babel/generator@^7.10.2", "@babel/generator@^7.3.3", "@babel/generator@^7.5.0", "@babel/generator@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9"
+ integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==
+ dependencies:
+ "@babel/types" "^7.10.2"
+ jsesc "^2.5.1"
+ lodash "^4.17.13"
+ source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268"
+ integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059"
+ integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-builder-react-jsx-experimental@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.1.tgz#9a7d58ad184d3ac3bafb1a452cec2bad7e4a0bc8"
+ integrity sha512-irQJ8kpQUV3JasXPSFQ+LCCtJSc5ceZrPFVj6TElR6XCHssi3jV8ch3odIrNtjJFRZZVbrOEfJMI79TPU/h1pQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-module-imports" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-builder-react-jsx@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.1.tgz#a327f0cf983af5554701b1215de54a019f09b532"
+ integrity sha512-KXzzpyWhXgzjXIlJU1ZjIXzUPdej1suE6vzqgImZ/cpAsR/CC8gUcX4EWRmDfWz/cs6HOCPMBIJ3nKoXt3BFuw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-compilation-targets@^7.10.2":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285"
+ integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==
+ dependencies:
+ "@babel/compat-data" "^7.10.1"
+ browserslist "^4.12.0"
+ invariant "^2.2.4"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/helper-create-class-features-plugin@^7.10.1":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz#7474295770f217dbcf288bf7572eb213db46ee67"
+ integrity sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/helper-member-expression-to-functions" "^7.10.1"
+ "@babel/helper-optimise-call-expression" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-replace-supers" "^7.10.1"
+ "@babel/helper-split-export-declaration" "^7.10.1"
+
+"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd"
+ integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-regex" "^7.10.1"
+ regexpu-core "^4.7.0"
+
+"@babel/helper-define-map@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d"
+ integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/types" "^7.10.1"
+ lodash "^4.17.13"
+
+"@babel/helper-explode-assignable-expression@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e"
+ integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg==
+ dependencies:
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-function-name@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4"
+ integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.10.1"
+ "@babel/template" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-get-function-arity@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d"
+ integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-hoist-variables@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077"
+ integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-member-expression-to-functions@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15"
+ integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876"
+ integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-module-transforms@^7.10.1", "@babel/helper-module-transforms@^7.9.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622"
+ integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==
+ dependencies:
+ "@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-optimise-call-expression@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543"
+ integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-plugin-utils@7.8.3", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
+ integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127"
+ integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==
+
+"@babel/helper-regex@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96"
+ integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==
+ dependencies:
+ lodash "^4.17.13"
+
+"@babel/helper-remap-async-to-generator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432"
+ integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-wrap-function" "^7.10.1"
+ "@babel/template" "^7.10.1"
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-replace-supers@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d"
+ integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==
+ dependencies:
+ "@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-simple-access@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e"
+ integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==
+ dependencies:
+ "@babel/template" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-split-export-declaration@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f"
+ integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==
+ dependencies:
+ "@babel/types" "^7.10.1"
+
+"@babel/helper-validator-identifier@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5"
+ integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==
+
+"@babel/helper-wrap-function@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9"
+ integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/template" "^7.10.1"
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/helpers@^7.10.1", "@babel/helpers@^7.9.6":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973"
+ integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==
+ dependencies:
+ "@babel/template" "^7.10.1"
+ "@babel/traverse" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/highlight@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0"
+ integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.1"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.1.tgz#2e142c27ca58aa2c7b119d09269b702c8bbad28c"
+ integrity sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg==
+
+"@babel/parser@^7.0.0", "@babel/parser@^7.10.1", "@babel/parser@^7.10.2", "@babel/parser@^7.7.0", "@babel/parser@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0"
+ integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==
+
+"@babel/plugin-proposal-async-generator-functions@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55"
+ integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-remap-async-to-generator" "^7.10.1"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+
+"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.10.1", "@babel/plugin-proposal-class-properties@^7.8.3":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01"
+ integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-proposal-dynamic-import@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0"
+ integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+
+"@babel/plugin-proposal-export-namespace-from@^7.2.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.1.tgz#512ee069cd866256600bdf89639cf7e1b51fbfe9"
+ integrity sha512-eR4CoYb6mh5y9LWjnb4CyUatuhtZ8pNLXLDi46GkqtF7WPafFqXycHdvF5qWviozZVGRSAmHzdayc8wUReCdjA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09"
+ integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78"
+ integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+
+"@babel/plugin-proposal-numeric-separator@^7.10.1", "@babel/plugin-proposal-numeric-separator@^7.8.3":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123"
+ integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.1"
+
+"@babel/plugin-proposal-object-rest-spread@7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63"
+ integrity sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-transform-parameters" "^7.9.5"
+
+"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6"
+ integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-transform-parameters" "^7.10.1"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2"
+ integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+
+"@babel/plugin-proposal-optional-chaining@^7.10.1", "@babel/plugin-proposal-optional-chaining@^7.9.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c"
+ integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+
+"@babel/plugin-proposal-private-methods@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598"
+ integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f"
+ integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-async-generators@^7.8.0":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5"
+ integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+ integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.1.tgz#cd4bbca62fb402babacb174f64f8734310d742f0"
+ integrity sha512-b3pWVncLBYoPP60UOTc7NMlbtsHQ6ITim78KQejNHK6WJ2mzV5kCcg4mIWpasAfJEgwVTibwo2e+FU7UEIKQUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-json-strings@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94"
+ integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz#0ae371134a42b91d5418feb3c8c8d43e1565d2da"
+ integrity sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99"
+ integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-top-level-await@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362"
+ integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-syntax-typescript@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.1.tgz#5e82bc27bb4202b93b949b029e699db536733810"
+ integrity sha512-X/d8glkrAtra7CaQGMiGs/OGa6XgUzqPcBXCIGFCpCqnfGlT0Wfbzo/B89xHhnInTaItPK8LALblVXcUOEh95Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b"
+ integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-async-to-generator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062"
+ integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-remap-async-to-generator" "^7.10.1"
+
+"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d"
+ integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e"
+ integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ lodash "^4.17.13"
+
+"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f"
+ integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-define-map" "^7.10.1"
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/helper-optimise-call-expression" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-replace-supers" "^7.10.1"
+ "@babel/helper-split-export-declaration" "^7.10.1"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07"
+ integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907"
+ integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee"
+ integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-duplicate-keys@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9"
+ integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-exponentiation-operator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3"
+ integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-flow-strip-types@^7.0.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.1.tgz#59eafbff9ae85ec8932d4c16c068654be814ec5e"
+ integrity sha512-i4o0YwiJBIsIx7/liVCZ3Q2WkWr1/Yu39PksBOnh/khW2SwIFsGa5Ze+MSon5KbDfrEHP9NeyefAgvUSXzaEkw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-flow" "^7.10.1"
+
+"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5"
+ integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d"
+ integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a"
+ integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39"
+ integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-modules-amd@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a"
+ integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.10.1", "@babel/plugin-transform-modules-commonjs@^7.2.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301"
+ integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-simple-access" "^7.10.1"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6"
+ integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.10.1"
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595"
+ integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c"
+ integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.8.3"
+
+"@babel/plugin-transform-new-target@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324"
+ integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde"
+ integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-replace-supers" "^7.10.1"
+
+"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.10.1", "@babel/plugin-transform-parameters@^7.9.5":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd"
+ integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d"
+ integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.1.tgz#e6a33f6d48dfb213dda5e007d0c7ff82b6a3d8ef"
+ integrity sha512-rBjKcVwjk26H3VX8pavMxGf33LNlbocMHdSeldIEswtQ/hrjyTG8fKKILW1cSkODyRovckN/uZlGb2+sAV9JUQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-react-jsx-development@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.1.tgz#1ac6300d8b28ef381ee48e6fec430cc38047b7f3"
+ integrity sha512-XwDy/FFoCfw9wGFtdn5Z+dHh6HXKHkC6DwKNWpN74VWinUagZfDcEJc3Y8Dn5B3WMVnAllX8Kviaw7MtC5Epwg==
+ dependencies:
+ "@babel/helper-builder-react-jsx-experimental" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-jsx" "^7.10.1"
+
+"@babel/plugin-transform-react-jsx-self@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.1.tgz#22143e14388d72eb88649606bb9e46f421bc3821"
+ integrity sha512-4p+RBw9d1qV4S749J42ZooeQaBomFPrSxa9JONLHJ1TxCBo3TzJ79vtmG2S2erUT8PDDrPdw4ZbXGr2/1+dILA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-jsx" "^7.10.1"
+
+"@babel/plugin-transform-react-jsx-source@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.1.tgz#30db3d4ee3cdebbb26a82a9703673714777a4273"
+ integrity sha512-neAbaKkoiL+LXYbGDvh6PjPG+YeA67OsZlE78u50xbWh2L1/C81uHiNP5d1fw+uqUIoiNdCC8ZB+G4Zh3hShJA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-jsx" "^7.10.1"
+
+"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.10.1", "@babel/plugin-transform-react-jsx@^7.9.4":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.1.tgz#91f544248ba131486decb5d9806da6a6e19a2896"
+ integrity sha512-MBVworWiSRBap3Vs39eHt+6pJuLUAaK4oxGc8g+wY+vuSJvLiEQjW1LSTqKb8OUPtDvHCkdPhk7d6sjC19xyFw==
+ dependencies:
+ "@babel/helper-builder-react-jsx" "^7.10.1"
+ "@babel/helper-builder-react-jsx-experimental" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-jsx" "^7.10.1"
+
+"@babel/plugin-transform-react-pure-annotations@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.1.tgz#f5e7c755d3e7614d4c926e144f501648a5277b70"
+ integrity sha512-mfhoiai083AkeewsBHUpaS/FM1dmUENHBMpS/tugSJ7VXqXO5dCN1Gkint2YvM1Cdv1uhmAKt1ZOuAjceKmlLA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-regenerator@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490"
+ integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw==
+ dependencies:
+ regenerator-transform "^0.14.2"
+
+"@babel/plugin-transform-reserved-words@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86"
+ integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-runtime@^7.9.6":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz#fd1887f749637fb2ed86dc278e79eb41df37f4b1"
+ integrity sha512-4w2tcglDVEwXJ5qxsY++DgWQdNJcCCsPxfT34wCUwIf2E7dI7pMpH8JczkMBbgBTNzBX62SZlNJ9H+De6Zebaw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ resolve "^1.8.1"
+ semver "^5.5.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3"
+ integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.10.1", "@babel/plugin-transform-spread@^7.8.3":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8"
+ integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-sticky-regex@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00"
+ integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/helper-regex" "^7.10.1"
+
+"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628"
+ integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-typeof-symbol@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e"
+ integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-typescript@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.1.tgz#2c54daea231f602468686d9faa76f182a94507a6"
+ integrity sha512-v+QWKlmCnsaimLeqq9vyCsVRMViZG1k2SZTlcZvB+TqyH570Zsij8nvVUZzOASCRiQFUxkLrn9Wg/kH0zgy5OQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-syntax-typescript" "^7.10.1"
+
+"@babel/plugin-transform-unicode-escapes@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940"
+ integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/plugin-transform-unicode-regex@^7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f"
+ integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+
+"@babel/polyfill@^7.8.7":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.10.1.tgz#d56d4c8be8dd6ec4dce2649474e9b707089f739f"
+ integrity sha512-TviueJ4PBW5p48ra8IMtLXVkDucrlOZAIZ+EXqS3Ot4eukHbWiqcn7DcqpA1k5PcKtmJ4Xl9xwdv6yQvvcA+3g==
+ dependencies:
+ core-js "^2.6.5"
+ regenerator-runtime "^0.13.4"
+
+"@babel/preset-env@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb"
+ integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA==
+ dependencies:
+ "@babel/compat-data" "^7.10.1"
+ "@babel/helper-compilation-targets" "^7.10.2"
+ "@babel/helper-module-imports" "^7.10.1"
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-proposal-async-generator-functions" "^7.10.1"
+ "@babel/plugin-proposal-class-properties" "^7.10.1"
+ "@babel/plugin-proposal-dynamic-import" "^7.10.1"
+ "@babel/plugin-proposal-json-strings" "^7.10.1"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1"
+ "@babel/plugin-proposal-numeric-separator" "^7.10.1"
+ "@babel/plugin-proposal-object-rest-spread" "^7.10.1"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.10.1"
+ "@babel/plugin-proposal-optional-chaining" "^7.10.1"
+ "@babel/plugin-proposal-private-methods" "^7.10.1"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.10.1"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+ "@babel/plugin-syntax-class-properties" "^7.10.1"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.1"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+ "@babel/plugin-syntax-top-level-await" "^7.10.1"
+ "@babel/plugin-transform-arrow-functions" "^7.10.1"
+ "@babel/plugin-transform-async-to-generator" "^7.10.1"
+ "@babel/plugin-transform-block-scoped-functions" "^7.10.1"
+ "@babel/plugin-transform-block-scoping" "^7.10.1"
+ "@babel/plugin-transform-classes" "^7.10.1"
+ "@babel/plugin-transform-computed-properties" "^7.10.1"
+ "@babel/plugin-transform-destructuring" "^7.10.1"
+ "@babel/plugin-transform-dotall-regex" "^7.10.1"
+ "@babel/plugin-transform-duplicate-keys" "^7.10.1"
+ "@babel/plugin-transform-exponentiation-operator" "^7.10.1"
+ "@babel/plugin-transform-for-of" "^7.10.1"
+ "@babel/plugin-transform-function-name" "^7.10.1"
+ "@babel/plugin-transform-literals" "^7.10.1"
+ "@babel/plugin-transform-member-expression-literals" "^7.10.1"
+ "@babel/plugin-transform-modules-amd" "^7.10.1"
+ "@babel/plugin-transform-modules-commonjs" "^7.10.1"
+ "@babel/plugin-transform-modules-systemjs" "^7.10.1"
+ "@babel/plugin-transform-modules-umd" "^7.10.1"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3"
+ "@babel/plugin-transform-new-target" "^7.10.1"
+ "@babel/plugin-transform-object-super" "^7.10.1"
+ "@babel/plugin-transform-parameters" "^7.10.1"
+ "@babel/plugin-transform-property-literals" "^7.10.1"
+ "@babel/plugin-transform-regenerator" "^7.10.1"
+ "@babel/plugin-transform-reserved-words" "^7.10.1"
+ "@babel/plugin-transform-shorthand-properties" "^7.10.1"
+ "@babel/plugin-transform-spread" "^7.10.1"
+ "@babel/plugin-transform-sticky-regex" "^7.10.1"
+ "@babel/plugin-transform-template-literals" "^7.10.1"
+ "@babel/plugin-transform-typeof-symbol" "^7.10.1"
+ "@babel/plugin-transform-unicode-escapes" "^7.10.1"
+ "@babel/plugin-transform-unicode-regex" "^7.10.1"
+ "@babel/preset-modules" "^0.1.3"
+ "@babel/types" "^7.10.2"
+ browserslist "^4.12.0"
+ core-js-compat "^3.6.2"
+ invariant "^2.2.2"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/preset-modules@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72"
+ integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/preset-react@^7.9.4":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.1.tgz#e2ab8ae9a363ec307b936589f07ed753192de041"
+ integrity sha512-Rw0SxQ7VKhObmFjD/cUcKhPTtzpeviEFX1E6PgP+cYOhQ98icNqtINNFANlsdbQHrmeWnqdxA4Tmnl1jy5tp3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-transform-react-display-name" "^7.10.1"
+ "@babel/plugin-transform-react-jsx" "^7.10.1"
+ "@babel/plugin-transform-react-jsx-development" "^7.10.1"
+ "@babel/plugin-transform-react-jsx-self" "^7.10.1"
+ "@babel/plugin-transform-react-jsx-source" "^7.10.1"
+ "@babel/plugin-transform-react-pure-annotations" "^7.10.1"
+
+"@babel/preset-typescript@^7.9.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.1.tgz#a8d8d9035f55b7d99a2461a0bdc506582914d07e"
+ integrity sha512-m6GV3y1ShiqxnyQj10600ZVOFrSSAa8HQ3qIUk2r+gcGtHTIRw0dJnFLt1WNXpKjtVw7yw1DAPU/6ma2ZvgJuA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.1"
+ "@babel/plugin-transform-typescript" "^7.10.1"
+
+"@babel/register@^7.0.0":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.1.tgz#b6567c5cb5049f44bbf8c35d6ff68ca3c43238ed"
+ integrity sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg==
+ dependencies:
+ find-cache-dir "^2.0.0"
+ lodash "^4.17.13"
+ make-dir "^2.1.0"
+ pirates "^4.0.0"
+ source-map-support "^0.5.16"
+
+"@babel/runtime-corejs3@^7.8.3":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.2.tgz#3511797ddf9a3d6f3ce46b99cc835184817eaa4e"
+ integrity sha512-+a2M/u7r15o3dV1NEizr9bRi+KUVnrs/qYxF0Z06DAPx/4VCWaz1WA7EcbE+uqGgt39lp5akWGmHsTseIkHkHg==
+ dependencies:
+ core-js-pure "^3.0.0"
+ regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839"
+ integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
+"@babel/standalone@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.10.2.tgz#49dbbadcbc4b199df064d7d8b3e21c915b84abdb"
+ integrity sha512-PNQuj9oQH6BL/3l9iiL8hJLQwX14woA2/FHcPtNIZAc7IgFZYJdtMBMXiy4xcefADHTSvoBnmc2AybrHRW1IKQ==
+
+"@babel/template@^7.10.1", "@babel/template@^7.8.6":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811"
+ integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==
+ dependencies:
+ "@babel/code-frame" "^7.10.1"
+ "@babel/parser" "^7.10.1"
+ "@babel/types" "^7.10.1"
+
+"@babel/traverse@7.10.1", "@babel/traverse@^7.0.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.6":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27"
+ integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.1"
+ "@babel/generator" "^7.10.1"
+ "@babel/helper-function-name" "^7.10.1"
+ "@babel/helper-split-export-declaration" "^7.10.1"
+ "@babel/parser" "^7.10.1"
+ "@babel/types" "^7.10.1"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.13"
+
+"@babel/types@7.10.1":
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.1.tgz#6886724d31c8022160a7db895e6731ca33483921"
+ integrity sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.1"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.6":
+ version "7.10.2"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d"
+ integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.1"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
+"@emotion/cache@^10.0.27":
+ version "10.0.29"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0"
+ integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==
+ dependencies:
+ "@emotion/sheet" "0.9.4"
+ "@emotion/stylis" "0.8.5"
+ "@emotion/utils" "0.11.3"
+ "@emotion/weak-memoize" "0.2.5"
+
+"@emotion/core@^10.0.0", "@emotion/core@^10.0.28":
+ version "10.0.28"
+ resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.28.tgz#bb65af7262a234593a9e952c041d0f1c9b9bef3d"
+ integrity sha512-pH8UueKYO5jgg0Iq+AmCLxBsvuGtvlmiDCOuv8fGNYn3cowFpLN98L8zO56U0H1PjDIyAlXymgL3Wu7u7v6hbA==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ "@emotion/cache" "^10.0.27"
+ "@emotion/css" "^10.0.27"
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/sheet" "0.9.4"
+ "@emotion/utils" "0.11.3"
+
+"@emotion/css@^10.0.27":
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c"
+ integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==
+ dependencies:
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/utils" "0.11.3"
+ babel-plugin-emotion "^10.0.27"
+
+"@emotion/hash@0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+ integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
+"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.1":
+ version "0.8.8"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
+ integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==
+ dependencies:
+ "@emotion/memoize" "0.7.4"
+
+"@emotion/is-prop-valid@^0.7.3":
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc"
+ integrity sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==
+ dependencies:
+ "@emotion/memoize" "0.7.1"
+
+"@emotion/memoize@0.7.1":
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f"
+ integrity sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg==
+
+"@emotion/memoize@0.7.4", "@emotion/memoize@^0.7.1":
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
+ integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
+
+"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16":
+ version "0.11.16"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
+ integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==
+ dependencies:
+ "@emotion/hash" "0.8.0"
+ "@emotion/memoize" "0.7.4"
+ "@emotion/unitless" "0.7.5"
+ "@emotion/utils" "0.11.3"
+ csstype "^2.5.7"
+
+"@emotion/sheet@0.9.4":
+ version "0.9.4"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
+ integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
+
+"@emotion/styled-base@^10.0.27":
+ version "10.0.31"
+ resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a"
+ integrity sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ "@emotion/is-prop-valid" "0.8.8"
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/utils" "0.11.3"
+
+"@emotion/styled@*", "@emotion/styled@^10.0.0", "@emotion/styled@^10.0.27":
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf"
+ integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==
+ dependencies:
+ "@emotion/styled-base" "^10.0.27"
+ babel-plugin-emotion "^10.0.27"
+
+"@emotion/stylis@0.8.5":
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
+ integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
+
+"@emotion/unitless@0.7.5":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+ integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
+"@emotion/utils@0.11.3":
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
+ integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
+
+"@emotion/weak-memoize@0.2.5":
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
+ integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+
+"@graphql-tools/code-file-loader@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-6.0.5.tgz#770fde0c548cec757ae20fb9fa6508acb7abbd1d"
+ integrity sha512-mj/v64+wM0Z+Ww7NTD62NRMlvxi9AL99YMxaX2f6qRQQhn2+awkvW7gu3rJa8Q5HD8H8gVK/ENPebE88VTqCPw==
+ dependencies:
+ "@graphql-tools/graphql-tag-pluck" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ fs-extra "9.0.0"
+ tslib "~2.0.0"
+
+"@graphql-tools/delegate@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-6.0.5.tgz#34a5fbcaa749d54e5e13e892dd55d0b6021a418c"
+ integrity sha512-JOXfDor3wQyjLkGD8JvTLRoXi3KNZvybm9fIwyPlbFghTac+KRH1A1RmHqQdaLE1ieYVv34Cplp/itoA77R4FQ==
+ dependencies:
+ "@graphql-tools/schema" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ tslib "~2.0.0"
+
+"@graphql-tools/git-loader@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-6.0.5.tgz#fa81cb9b618b2b178ef7fefe09224b07f5c75096"
+ integrity sha512-iG++W3hi0Eg71RuPUFD8TDUjpcORqPvKVxLKJqoYkLMJgkQAiSS1dvYlZGFOmo3mwdXZq7O6DcIqVORqiRkKzQ==
+ dependencies:
+ "@graphql-tools/graphql-tag-pluck" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ simple-git "2.5.0"
+
+"@graphql-tools/github-loader@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-6.0.5.tgz#553da79b6c5bd7c3702b061f124e4a52edd98948"
+ integrity sha512-aDvenC1l9V1MDFkp3YP/TsJwTQLHzLwMobUpE3aypwHExoO/LCTScQg7QOPDPQQ9bP/KK2ROgihPRu476O/roA==
+ dependencies:
+ "@graphql-tools/graphql-tag-pluck" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ cross-fetch "3.0.4"
+
+"@graphql-tools/graphql-file-loader@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.0.5.tgz#c7b487528546e44f1a9a0d1fc996c81029e76dd8"
+ integrity sha512-TSrD48/9bj1Ps4ne78PBurO/yP0wv7Qyjzg/Lfg04Apqw4cezVYIyqcTPGnXArQra1w/yORHw4726CKeZ96fbg==
+ dependencies:
+ "@graphql-tools/import" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ fs-extra "9.0.0"
+ tslib "~2.0.0"
+
+"@graphql-tools/graphql-tag-pluck@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.0.5.tgz#d5145c960b16d74f29efe8d1aed0cda7398cd67d"
+ integrity sha512-QwNKMiUfZJoJGMQAacgypkQXF4zze3fWjgIAGOIGOER+71D8Mz3uS1K4VtO6qsrNB5hNzvORPS9i5oawB46bgg==
+ dependencies:
+ "@babel/parser" "7.10.1"
+ "@babel/traverse" "7.10.1"
+ "@babel/types" "7.10.1"
+ "@graphql-tools/utils" "6.0.5"
+ optionalDependencies:
+ vue-template-compiler "^2.6.11"
+
+"@graphql-tools/import@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.0.5.tgz#743a3cfb41523944367bc24a4df5feaa9f42de61"
+ integrity sha512-SPv/hrQg6uVrliFo7Bj9kM6RKEW4u1+jsDQF/x76x92gxNTtfd231mYZTbbqYXdsZ4P0fZR+FxBN2wIRJaMDWQ==
+ dependencies:
+ fs-extra "9.0.0"
+ resolve-from "5.0.0"
+
+"@graphql-tools/json-file-loader@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-6.0.5.tgz#22d0c4cd211df20029180c7bb0678a83f9d0e632"
+ integrity sha512-sHb15+frrK82hYgydhuW2QkogJOeZIDGoIctHLG8on5DdDTI4IVF3oJwg/tOHxej22apLKzLef9waKxa6Q8vPQ==
+ dependencies:
+ "@graphql-tools/utils" "6.0.5"
+ fs-extra "9.0.0"
+ tslib "~2.0.0"
+
+"@graphql-tools/links@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/links/-/links-6.0.5.tgz#ae60578eeb390ff22942dd53baa54e9ebe6c3ad5"
+ integrity sha512-qhI6MlkuX9YmgA0RSCBqloZkxGm7n609GqqAO6YhRpcBeFBhw90xiGh/+evx9M3/XJ0H/sJ3nGGlQPUojCTa9w==
+ dependencies:
+ "@graphql-tools/utils" "6.0.5"
+ apollo-link "1.2.14"
+ apollo-upload-client "13.0.0"
+ cross-fetch "3.0.4"
+ form-data "3.0.0"
+ tslib "~2.0.0"
+
+"@graphql-tools/load-files@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/load-files/-/load-files-6.0.5.tgz#f7c2f89b28867b8b83b9a2aa9558dd211933e2c9"
+ integrity sha512-XWHyE1cCXHv9YcjiLDm/v7f1oG7oIAkkuik481+5YQqfQyOZAkc293Gwh8ZWhXZ+ExT51c4+0ifZDxiOC3NSow==
+ dependencies:
+ fs-extra "9.0.0"
+ globby "11.0.0"
+ unixify "1.0.0"
+
+"@graphql-tools/load@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-6.0.5.tgz#1049cce06b0ae35d928824bfbe04b9b3038ef249"
+ integrity sha512-XERawStpQcky11zHVo3m7DieY8yBpC6n1rZbjv5JKi40Iik0MpNWsKfApBVxL461xeiCARNjN/YMxvnfe92HTg==
+ dependencies:
+ "@graphql-tools/merge" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ globby "11.0.0"
+ import-from "3.0.0"
+ is-glob "4.0.1"
+ p-limit "2.3.0"
+ tslib "~2.0.0"
+ unixify "1.0.0"
+ valid-url "1.0.9"
+
+"@graphql-tools/merge@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-6.0.5.tgz#fc17a1087571ae63773ff15e4289173d6c707035"
+ integrity sha512-ep7dwXaoNo47EkNpHoGKVHj4r/364IKMzdF8vBQC77DpIZtdNj8L3EgaSvUD40GoajGlTYP2lz/WAZb23JxlOQ==
+ dependencies:
+ "@graphql-tools/schema" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ tslib "~2.0.0"
+
+"@graphql-tools/mock@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/mock/-/mock-6.0.5.tgz#936058834491df0a50a9066320049e73fb12f39f"
+ integrity sha512-QSbBlwpeftidHnPBQqOMm7Cn7vBcQV8xw/3SAbclXcVTGajEmosEHLJnaD8+KFV/tRYjJb5nw5m3P7gYKeRV+g==
+ dependencies:
+ "@graphql-tools/schema" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ tslib "~2.0.0"
+
+"@graphql-tools/module-loader@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/module-loader/-/module-loader-6.0.5.tgz#5945b6c0a0d65feab567a852792af2b5a312bb4d"
+ integrity sha512-rh77WaJXbYpgCRzHHt4fd8o8npjNx/sVq+FJWEpsZ152F+4DT6eD4U4GQ2Jo0dDsYLu5NBFzmMk3XIihv1GhUw==
+ dependencies:
+ "@graphql-tools/utils" "6.0.5"
+ tslib "~2.0.0"
+
+"@graphql-tools/relay-operation-optimizer@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.0.5.tgz#16896a26308b84e365634d208ddd881c9c64f9a4"
+ integrity sha512-tYJYNa8wICbpHd3Ub8s1QPKlSStnqLfv+ANw7htDUIsejSycu4hAvTTj1qzN+AOmvD8OIBMBuBVg+9vilbPOHg==
+ dependencies:
+ "@graphql-tools/utils" "6.0.5"
+ relay-compiler "9.1.0"
+
+"@graphql-tools/resolvers-composition@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/resolvers-composition/-/resolvers-composition-6.0.5.tgz#42401d1f324ed0b3c7dc4dfddb2abbe788132278"
+ integrity sha512-MYmpPgn4M/bURKIIEBBknSvowW+r9MuaWGM5OuY8k9K+rzttA9aftCL06DEgFBHXZ2zXmc/P1YV+L+C6ltAAkw==
+ dependencies:
+ "@graphql-tools/utils" "6.0.5"
+ lodash "4.17.15"
+
+"@graphql-tools/schema@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.0.5.tgz#6dc6f15861a48f2b8f82407b0701b3ec0476e7ce"
+ integrity sha512-F1MAW2uufz5O6fSUTdb72MMICbgP0km7l7wbsOC0izeEG/EqvvAs0dBDzvC6cNokDz/X/PCHhIdunK9o7XY/0g==
+ dependencies:
+ "@graphql-tools/utils" "6.0.5"
+ tslib "~2.0.0"
+
+"@graphql-tools/stitch@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/stitch/-/stitch-6.0.5.tgz#934e5622c24b278c37f23b4c26a92bc645993fc6"
+ integrity sha512-g9Iyo0nEIWtPNLDpZB9bREzdEtg0QM6DV+LQfB4mZX6sco1El3ejqbkyV/6kH+Y1T5vNgJXi7Z80Ciw9wcY1gQ==
+ dependencies:
+ "@graphql-tools/delegate" "6.0.5"
+ "@graphql-tools/schema" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ "@graphql-tools/wrap" "6.0.5"
+ tslib "~2.0.0"
+
+"@graphql-tools/url-loader@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-6.0.5.tgz#4a51df971b8ec51b124a41be9520e90b69d8454a"
+ integrity sha512-h/F3Js5VoywUF9tcbdKXgNrKCIOc8wyxTrXNpqM3sqgvgz2eu0yFQWin1YwAmgLUsxGttVUFJOVKT9rux0zaBw==
+ dependencies:
+ "@graphql-tools/utils" "6.0.5"
+ "@graphql-tools/wrap" "6.0.5"
+ "@types/websocket" "1.0.0"
+ cross-fetch "3.0.4"
+ subscriptions-transport-ws "0.9.16"
+ tslib "~2.0.0"
+ valid-url "1.0.9"
+ websocket "1.0.31"
+
+"@graphql-tools/utils@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.0.5.tgz#f46462ded39388cc28e1a1477e3e5c82185f9910"
+ integrity sha512-RRBx+ZKrw82dFXaXqh5lLNtjF9uD28G9OXESTj404+JSuz+eLbP0LIA/S6bcdUFfWqppgoswkK1sngvNpelKrg==
+ dependencies:
+ camel-case "4.1.1"
+
+"@graphql-tools/wrap@6.0.5":
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-6.0.5.tgz#134e890657cc7be64ce57d46f04cfc135c79294e"
+ integrity sha512-eXQeA9RXZ9w5a7zORQxI3Dw1W0fyMQ4H5u/R80AEqbLYGAaqrr/4WEB3fhIBaOUw6D3ZsC34a3tmImwx77VHTw==
+ dependencies:
+ "@graphql-tools/delegate" "6.0.5"
+ "@graphql-tools/schema" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ tslib "~2.0.0"
+
+"@hapi/address@2.x.x":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
+ integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
+
+"@hapi/bourne@1.x.x":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a"
+ integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
+
+"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06"
+ integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==
+
+"@hapi/joi@^15.0.0", "@hapi/joi@^15.1.1":
+ version "15.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7"
+ integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==
+ dependencies:
+ "@hapi/address" "2.x.x"
+ "@hapi/bourne" "1.x.x"
+ "@hapi/hoek" "8.x.x"
+ "@hapi/topo" "3.x.x"
+
+"@hapi/topo@3.x.x":
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+ integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
+ dependencies:
+ "@hapi/hoek" "^8.3.0"
+
+"@jest/types@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
+ integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^15.0.0"
+ chalk "^3.0.0"
+
+"@jimp/bmp@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.10.3.tgz#79a23678e8389865c62e77b0dccc3e069dfc27f0"
+ integrity sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ bmp-js "^0.1.0"
+ core-js "^3.4.1"
+
+"@jimp/core@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.10.3.tgz#4095f3bef43837c85d8f8373b912bc431cfe6d1f"
+ integrity sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ any-base "^1.1.0"
+ buffer "^5.2.0"
+ core-js "^3.4.1"
+ exif-parser "^0.1.12"
+ file-type "^9.0.0"
+ load-bmfont "^1.3.1"
+ mkdirp "^0.5.1"
+ phin "^2.9.1"
+ pixelmatch "^4.0.2"
+ tinycolor2 "^1.4.1"
+
+"@jimp/custom@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.10.3.tgz#eb6201b2e8fdd83afc3d8b514538e5faa1d30980"
+ integrity sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/core" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/gif@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.10.3.tgz#7661280fd2b9cb70175b20e80f4e2b3e3ecf614e"
+ integrity sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ omggif "^1.0.9"
+
+"@jimp/jpeg@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.10.3.tgz#56f66874f204826291747ae12ff9eb337ab5cb8d"
+ integrity sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ jpeg-js "^0.3.4"
+
+"@jimp/plugin-blit@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz#095bafbb2d82c300159334a49a094f0b7d362ae6"
+ integrity sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-blur@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz#1bb91f730fda02b3c99d913e0191111327654766"
+ integrity sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-circle@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz#c5a6ec275cf1e86b1356824637910a299c9fd662"
+ integrity sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-color@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.10.3.tgz#810c0f7cb4ceb21da1aecfbdb6ae09f00c1c0bfa"
+ integrity sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ tinycolor2 "^1.4.1"
+
+"@jimp/plugin-contain@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz#cf62126a60260359061be456b2193818c5eb1df5"
+ integrity sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-cover@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz#7cdf56ce878c24adc35c583735015118c6de38b4"
+ integrity sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-crop@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz#03785181f62ddae9558ae73206f8d6217d7fa703"
+ integrity sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-displace@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz#cb5b225e6cf3cf44062b08cd2cf2115b3150d8c3"
+ integrity sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-dither@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz#c5c1cbbf157a771ba72b947dd9921a7bff3cf41a"
+ integrity sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-fisheye@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz#dee46d704df5c681556dc9ea9e87e8c77ac4fdda"
+ integrity sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-flip@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz#12f894f85b283ad4f43b492e0755f8ec9459bc60"
+ integrity sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-gaussian@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz#279222fc5d3aec24fab6162df2a1190309c71874"
+ integrity sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-invert@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz#6b7beacbe507fa03eec87b1d6343feba80e342eb"
+ integrity sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-mask@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz#72d994c3bb56c050a4edd6515f74b5b6d92dee69"
+ integrity sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-normalize@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz#f3cbb8a0fcc8e696619d5d46403b0620ee5240d6"
+ integrity sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-print@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.10.3.tgz#565d57a3a87dd59b4ede9cba7a6e34f8d01ed1b1"
+ integrity sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ load-bmfont "^1.4.0"
+
+"@jimp/plugin-resize@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz#616fab55a1996a12e9583e7c1fb76815388fc14b"
+ integrity sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-rotate@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz#cfcbdad664e13c84ce9b008ddbc157e03d7baa31"
+ integrity sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-scale@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz#b593081ff35b0e9e11d5e0a3188c590eaa838434"
+ integrity sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-shadow@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz#a9d54c8081a55152e5cc830cf5c898ab882b519a"
+ integrity sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-threshold@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz#8dd289c81de4bfbdb496f9c24496f9ee3b751ab5"
+ integrity sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
+"@jimp/plugins@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.10.3.tgz#e15d7ba3f9e2a6b479efad5c344c8b61e01b7cb2"
+ integrity sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/plugin-blit" "^0.10.3"
+ "@jimp/plugin-blur" "^0.10.3"
+ "@jimp/plugin-circle" "^0.10.3"
+ "@jimp/plugin-color" "^0.10.3"
+ "@jimp/plugin-contain" "^0.10.3"
+ "@jimp/plugin-cover" "^0.10.3"
+ "@jimp/plugin-crop" "^0.10.3"
+ "@jimp/plugin-displace" "^0.10.3"
+ "@jimp/plugin-dither" "^0.10.3"
+ "@jimp/plugin-fisheye" "^0.10.3"
+ "@jimp/plugin-flip" "^0.10.3"
+ "@jimp/plugin-gaussian" "^0.10.3"
+ "@jimp/plugin-invert" "^0.10.3"
+ "@jimp/plugin-mask" "^0.10.3"
+ "@jimp/plugin-normalize" "^0.10.3"
+ "@jimp/plugin-print" "^0.10.3"
+ "@jimp/plugin-resize" "^0.10.3"
+ "@jimp/plugin-rotate" "^0.10.3"
+ "@jimp/plugin-scale" "^0.10.3"
+ "@jimp/plugin-shadow" "^0.10.3"
+ "@jimp/plugin-threshold" "^0.10.3"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
+"@jimp/png@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.10.3.tgz#5282cad239d02743137d88239e4cb1804ed877dd"
+ integrity sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ pngjs "^3.3.3"
+
+"@jimp/tiff@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.10.3.tgz#6d143bbc42b40c9f618686a596311b35f7ff8502"
+ integrity sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+ utif "^2.0.1"
+
+"@jimp/types@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.10.3.tgz#9122e0a3c70129c7f26c05bbeae5030ed3a6fd5d"
+ integrity sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/bmp" "^0.10.3"
+ "@jimp/gif" "^0.10.3"
+ "@jimp/jpeg" "^0.10.3"
+ "@jimp/png" "^0.10.3"
+ "@jimp/tiff" "^0.10.3"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
+"@jimp/utils@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.10.3.tgz#69209dd6c2d6fd956a0beb67a47c26cb6f52f3fe"
+ integrity sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+ regenerator-runtime "^0.13.3"
+
+"@kwsites/exec-p@^0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@kwsites/exec-p/-/exec-p-0.4.0.tgz#ab3765d482849ba6e825721077c248cf9f3323b7"
+ integrity sha512-44DWNv5gDR9EwrCTVQ4ZC99yPqVS0VCWrYIBl45qNR8XQy+4lbl0IQG8kBDf6NHwj4Ib4c2z1Fq1IUJOCbkZcw==
+
+"@mdx-js/mdx@^1.6.1", "@mdx-js/mdx@^1.6.5":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.5.tgz#4e00ca5d38d678c6070d73819bb696e4030e2662"
+ integrity sha512-DC13eeEM0Dv9OD+UVhyB69BlV29d2eoAmfiR/XdgNl4R7YmRNEPGRD3QvGUdRUDxYdJBHauMz5ZIV507cNXXaA==
+ dependencies:
+ "@babel/core" "7.9.6"
+ "@babel/plugin-syntax-jsx" "7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "7.8.3"
+ "@mdx-js/util" "^1.6.5"
+ babel-plugin-apply-mdx-type-prop "^1.6.5"
+ babel-plugin-extract-import-names "^1.6.5"
+ camelcase-css "2.0.1"
+ detab "2.0.3"
+ hast-util-raw "5.0.2"
+ lodash.uniq "4.5.0"
+ mdast-util-to-hast "9.1.0"
+ remark-footnotes "1.0.0"
+ remark-mdx "^1.6.5"
+ remark-parse "8.0.2"
+ remark-squeeze-paragraphs "4.0.0"
+ style-to-object "0.3.0"
+ unified "9.0.0"
+ unist-builder "2.0.3"
+ unist-util-visit "2.0.2"
+
+"@mdx-js/react@^1.0.0", "@mdx-js/react@^1.5.2", "@mdx-js/react@^1.6.1", "@mdx-js/react@^1.6.5":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.5.tgz#70380f25209b62ef69349b7eef09fad7e1103824"
+ integrity sha512-y1Yu9baw3KokFrs7g5RxHpJNSU4e1zk/5bAJX94yVATglG5HyAL0lYMySU8YzebXNE+fJJMCx9CuiQHy2ezoew==
+
+"@mdx-js/runtime@^1.6.1":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@mdx-js/runtime/-/runtime-1.6.5.tgz#d0f26ccf74ccab4a2e7a16f5fbb2106697df645a"
+ integrity sha512-JxyskuQaQwJBAjdClY7Un7wD+RWLkzPuox0Tfs72c4OQ5it1TzxCeQTL3Zv6ZsWzNCUgVt9o+h31+pbvYtsFsA==
+ dependencies:
+ "@mdx-js/mdx" "^1.6.5"
+ "@mdx-js/react" "^1.6.5"
+ buble-jsx-only "^0.19.8"
+
+"@mdx-js/util@^1.6.5":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.5.tgz#d3bf891748dcf49a148a4591ef6c16caae4b32ed"
+ integrity sha512-ljr9hGQYW3kZY1NmQbmSe4yXvgq3KDRt0FMBOB5OaDWqi4X2WzEsp6SZ02KmVrieNW1cjWlj13pgvcf0towZPw==
+
+"@mikaelkristiansson/domready@^1.0.10":
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/@mikaelkristiansson/domready/-/domready-1.0.10.tgz#f6d69866c0857664e70690d7a0bfedb72143adb5"
+ integrity sha512-6cDuZeKSCSJ1KvfEQ25Y8OXUjqDJZ+HgUs6dhASWbAX8fxVraTfPsSeRe2bN+4QJDsgUaXaMWBYfRomCr04GGg==
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+ integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ glob-to-regexp "^0.3.0"
+
+"@nodelib/fs.scandir@2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b"
+ integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.3"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
+ integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
+
+"@nodelib/fs.stat@^1.1.2":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
+ integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.3"
+ fastq "^1.6.0"
+
+"@pieh/friendly-errors-webpack-plugin@1.7.0-chalk-2":
+ version "1.7.0-chalk-2"
+ resolved "https://registry.yarnpkg.com/@pieh/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0-chalk-2.tgz#2e9da9d3ade9d18d013333eb408c457d04eabac0"
+ integrity sha512-65+vYGuDkHBCWWjqzzR/Ck318+d6yTI00EqII9qe3aPD1J3Olhvw0X38uM5moQb1PK/ksDXwSoPGt/5QhCiotw==
+ dependencies:
+ chalk "^2.4.2"
+ error-stack-parser "^2.0.0"
+ string-width "^2.0.0"
+ strip-ansi "^3"
+
+"@pmmmwh/react-refresh-webpack-plugin@^0.3.1":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.3.3.tgz#40a3d674f42a011b7f30a9609aa8fb68ec3c39c9"
+ integrity sha512-uc6FmPEegAZawSHjUMFQwU7EjaDn7zy1iD/KD/wBROL9F4378OES8MKMYHoRAKT61Fk7LxVKZSDR5VespMQiqw==
+ dependencies:
+ ansi-html "^0.0.7"
+ error-stack-parser "^2.0.6"
+ html-entities "^1.2.1"
+ lodash.debounce "^4.0.8"
+ native-url "^0.2.6"
+ schema-utils "^2.6.5"
+
+"@reach/alert@^0.10.1":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/alert/-/alert-0.10.3.tgz#9e4278edf8e6cfbe94df9a105faaa1c049a84517"
+ integrity sha512-Nu0XRKsHdM4gblgIgfTyJSl2KV1vrRTVVCVpol/f/ZVckTXAM/qN0C+JCCZSMfdjtt3u29CX6pRNkVu3PLfYsQ==
+ dependencies:
+ "@reach/utils" "^0.10.3"
+ "@reach/visually-hidden" "^0.10.2"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/auto-id@^0.10.1", "@reach/auto-id@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/auto-id/-/auto-id-0.10.3.tgz#d2b6fe3ccb81b0fb44dc8bd3aca567c94ac11f5e"
+ integrity sha512-LK3qIsurXnga+gUbjl6t6msrZ+F3aZMY+k2go5Xcns9b85bNRyF/LwlUtcGSqmhgqbVYvMcnLeEdSQLZRxCGnQ==
+ dependencies:
+ "@reach/utils" "^0.10.3"
+ tslib "^1.11.2"
+
+"@reach/combobox@^0.10.1":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/combobox/-/combobox-0.10.3.tgz#a5c2b76fdaf28a8872e5a49200570970da20e7e7"
+ integrity sha512-Z9Xl+j4Tm9JNC6ouHhzL0lv2Y+Of5/tD7CnpxaVudeIeXQKjeg5YSUCnIBU/OTUtRsIllkgACk70SGHqvntQAw==
+ dependencies:
+ "@reach/auto-id" "^0.10.3"
+ "@reach/descendants" "^0.10.3"
+ "@reach/popover" "^0.10.3"
+ "@reach/portal" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ highlight-words-core "1.2.2"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/descendants@^0.10.1", "@reach/descendants@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/descendants/-/descendants-0.10.3.tgz#c2cbd14c172cb82189bf6f290b09577193926a1a"
+ integrity sha512-1uwe2w49xSMF0ei1KedydB30sEWfyksk5axI3nEanwUDO7Sd1kCyt2GHZHoP2ESr6VQx2a9ETzMw8gKHsoy79g==
+ dependencies:
+ "@reach/utils" "^0.10.3"
+ tslib "^1.11.2"
+
+"@reach/dialog@^0.10.1":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/dialog/-/dialog-0.10.3.tgz#ba789809c3b194fff79d3bcb4a583c58e03edb83"
+ integrity sha512-RMpUHNjRQhkjGzKt9/oLmDhwUBikW3JbEzgzZngq5MGY5kWRPwYInLDkEA8We4E43AbBsl5J/PRzQha9V+EEXw==
+ dependencies:
+ "@reach/portal" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ prop-types "^15.7.2"
+ react-focus-lock "^2.3.1"
+ react-remove-scroll "^2.3.0"
+ tslib "^1.11.2"
+
+"@reach/menu-button@^0.10.1":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/menu-button/-/menu-button-0.10.3.tgz#6e72cd122e16f28c4b15a140f329be256adc72c8"
+ integrity sha512-50C5nl7JJG9YcKqngmwTLVft+ZF2MMieto1GSCC7qEU8ykUNz0p69Ipup+Eqjk7KRHpSIYPlYIfAOS75dDuiZQ==
+ dependencies:
+ "@reach/auto-id" "^0.10.3"
+ "@reach/descendants" "^0.10.3"
+ "@reach/popover" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/observe-rect@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@reach/observe-rect/-/observe-rect-1.1.0.tgz#4e967a93852b6004c3895d9ed8d4e5b41895afde"
+ integrity sha512-kE+jvoj/OyJV24C03VvLt5zclb9ArJi04wWXMMFwQvdZjdHoBlN4g0ZQFjyy/ejPF1Z/dpUD5dhRdBiUmIGZTA==
+
+"@reach/popover@^0.10.1", "@reach/popover@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/popover/-/popover-0.10.3.tgz#82e29b91748869923756a165758a29c8269b93e3"
+ integrity sha512-41iNfdjd9/5HtYuhezTc9z9WGkloYFVB8wBmPX3QOTuBP4qYd0La5sXClrfyiVqPn/uj1gGzehrZKuh8oSkorw==
+ dependencies:
+ "@reach/portal" "^0.10.3"
+ "@reach/rect" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ tabbable "^4.0.0"
+ tslib "^1.11.2"
+
+"@reach/portal@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/portal/-/portal-0.10.3.tgz#2eb408cc246d3eabbbf3b47ca4dc9c381cdb1d88"
+ integrity sha512-t8c+jtDxMLSPRGg93sQd2s6dDNilh5/qdrwmx88ki7l9h8oIXqMxPP3kSkOqZ9cbVR0b2A68PfMhCDOwMGvkoQ==
+ dependencies:
+ "@reach/utils" "^0.10.3"
+ tslib "^1.11.2"
+
+"@reach/rect@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/rect/-/rect-0.10.3.tgz#b4fd7c730d27eaf5fdf04c9a65227cc805787803"
+ integrity sha512-OmnGfG+MdumviJXK5oPcrw2Nd4EgMPKLMCs03GrbkmZJwtXIQJNhQrVg60PQT6HKAKI0+0LobHKxHFT+7Ri7kw==
+ dependencies:
+ "@reach/observe-rect" "^1.1.0"
+ "@reach/utils" "^0.10.3"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/router@^1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.3.tgz#58162860dce6c9449d49be86b0561b5ef46d80db"
+ integrity sha512-gOIAiFhWdiVGSVjukKeNKkCRBLmnORoTPyBihI/jLunICPgxdP30DroAvPQuf1eVfQbfGJQDJkwhJXsNPMnVWw==
+ dependencies:
+ create-react-context "0.3.0"
+ invariant "^2.2.3"
+ prop-types "^15.6.1"
+ react-lifecycles-compat "^3.0.4"
+
+"@reach/tabs@0.10.1":
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/@reach/tabs/-/tabs-0.10.1.tgz#35752444083427d19628344af02d051d1b7e0ea0"
+ integrity sha512-a3lpLU7KEZrvJJdzyqWB90Q50rPhBWAWBWcHAyewkm6uWTamSB/GNTHxylKo3B8fSkFMUL7r1e/odKsE+GB29w==
+ dependencies:
+ "@reach/auto-id" "^0.10.1"
+ "@reach/descendants" "^0.10.1"
+ "@reach/utils" "^0.10.1"
+ prop-types "^15.7.2"
+ tslib "^1.11.1"
+
+"@reach/tooltip@^0.10.1":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/tooltip/-/tooltip-0.10.3.tgz#0f34630aceaba7da7ad2dd23f92cc0d484e7113f"
+ integrity sha512-tbj569uSJ+O86fAvR62lK8Tb00aTQxah6dFKgf06lskCGUoYzeFxkZTds9b+TRjzz9G1v68McQHwuAZUH0XrGA==
+ dependencies:
+ "@reach/auto-id" "^0.10.3"
+ "@reach/portal" "^0.10.3"
+ "@reach/rect" "^0.10.3"
+ "@reach/utils" "^0.10.3"
+ "@reach/visually-hidden" "^0.10.2"
+ prop-types "^15.7.2"
+ tslib "^1.11.2"
+
+"@reach/utils@^0.10.1", "@reach/utils@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@reach/utils/-/utils-0.10.3.tgz#e30f9b172d131161953df7dd01553c57ca4e78f8"
+ integrity sha512-LoIZSfVAJMA+DnzAMCMfc/wAM39iKT8BQQ9gI1FODpxd8nPFP4cKisMuRXImh2/iVtG2Z6NzzCNgceJSrywqFQ==
+ dependencies:
+ "@types/warning" "^3.0.0"
+ tslib "^1.11.2"
+ warning "^4.0.3"
+
+"@reach/visually-hidden@^0.10.2":
+ version "0.10.2"
+ resolved "https://registry.yarnpkg.com/@reach/visually-hidden/-/visually-hidden-0.10.2.tgz#cbe391c78be2139be9583bae5666ab58eb82f682"
+ integrity sha512-RWC2CZsEB6sUOMnBCiuemyesMVNOOKJP53j4RgbdaJ2zGFL6N+bh/E5bfZnAiVhjJ0G0laViE9s7iROaRWNFew==
+ dependencies:
+ tslib "^1.11.2"
+
+"@sindresorhus/is@^0.14.0":
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
+ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+
+"@sindresorhus/is@^0.7.0":
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
+ integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==
+
+"@styled-system/background@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba"
+ integrity sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/border@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/border/-/border-5.1.5.tgz#0493d4332d2b59b74bb0d57d08c73eb555761ba6"
+ integrity sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/color@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/color/-/color-5.1.2.tgz#b8d6b4af481faabe4abca1a60f8daa4ccc2d9f43"
+ integrity sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/core@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/core/-/core-5.1.2.tgz#b8b7b86455d5a0514f071c4fa8e434b987f6a772"
+ integrity sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==
+ dependencies:
+ object-assign "^4.1.1"
+
+"@styled-system/css@^5.0.0", "@styled-system/css@^5.0.16", "@styled-system/css@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/css/-/css-5.1.5.tgz#0460d5f3ff962fa649ea128ef58d9584f403bbbc"
+ integrity sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==
+
+"@styled-system/flexbox@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/flexbox/-/flexbox-5.1.2.tgz#077090f43f61c3852df63da24e4108087a8beecf"
+ integrity sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/grid@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/grid/-/grid-5.1.2.tgz#7165049877732900b99cd00759679fbe45c6c573"
+ integrity sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/layout@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/layout/-/layout-5.1.2.tgz#12d73e79887e10062f4dbbbc2067462eace42339"
+ integrity sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/position@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/position/-/position-5.1.2.tgz#56961266566836f57a24d8e8e33ce0c1adb59dd3"
+ integrity sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/shadow@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/shadow/-/shadow-5.1.2.tgz#beddab28d7de03cd0177a87ac4ed3b3b6d9831fd"
+ integrity sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/should-forward-prop@^5.0.0", "@styled-system/should-forward-prop@^5.1.2":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/should-forward-prop/-/should-forward-prop-5.1.5.tgz#c392008c6ae14a6eb78bf1932733594f7f7e5c76"
+ integrity sha512-+rPRomgCGYnUIaFabDoOgpSDc4UUJ1KsmlnzcEp0tu5lFrBQKgZclSo18Z1URhaZm7a6agGtS5Xif7tuC2s52Q==
+ dependencies:
+ "@emotion/is-prop-valid" "^0.8.1"
+ "@emotion/memoize" "^0.7.1"
+ styled-system "^5.1.5"
+
+"@styled-system/space@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/space/-/space-5.1.2.tgz#38925d2fa29a41c0eb20e65b7c3efb6e8efce953"
+ integrity sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/typography@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7"
+ integrity sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/variant@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/variant/-/variant-5.1.5.tgz#8446d8aad06af3a4c723d717841df2dbe4ddeafd"
+ integrity sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+ "@styled-system/css" "^5.1.5"
+
+"@szmarczak/http-timer@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
+ integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+ dependencies:
+ defer-to-connect "^1.0.1"
+
+"@theme-ui/color-modes@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/color-modes/-/color-modes-0.4.0-highlight.0.tgz#333400c5d30ac65b71ff1b23a7d7ebee72f3c477"
+ integrity sha512-xdcAgfkL0gs0Z832lojtNGiTNtnQKoCu85t3Cxvqg2r1hVHar0SOJAyx+ljdV6tIHsBTxgVwUvdcby+QYCghRg==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@theme-ui/core" "^0.4.0-highlight.0"
+ "@theme-ui/css" "^0.4.0-highlight.0"
+ deepmerge "^4.2.2"
+
+"@theme-ui/components@>= 0.4.0-alpha.0", "@theme-ui/components@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/components/-/components-0.4.0-highlight.0.tgz#e4eafd517e347b3c8f380906f504103e215ca222"
+ integrity sha512-dwVKGcXf29m4nehEKwaX/Vbl5fi/xhMNqHIYo1hnYmInKdUOnKDJOyxiiu4iNdmjTuXmpjj9WxBap1WHM07hkQ==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@emotion/styled" "^10.0.0"
+ "@styled-system/color" "^5.1.2"
+ "@styled-system/should-forward-prop" "^5.1.2"
+ "@styled-system/space" "^5.1.2"
+ "@theme-ui/css" "^0.4.0-highlight.0"
+
+"@theme-ui/core@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/core/-/core-0.4.0-highlight.0.tgz#8989fc45347ad750ab9b1ab10c896387582dd48f"
+ integrity sha512-r5S0tiO51sBrFPXWOnotWfhA+L+s60JI5ewLJU+P6wE2ZOKdnn3HorphRgZWusxjTrzjNfBfgwhwXK+GkQFycw==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@theme-ui/css" "^0.4.0-highlight.0"
+ deepmerge "^4.2.2"
+
+"@theme-ui/css@>= 0.4.0-alpha.0", "@theme-ui/css@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/css/-/css-0.4.0-highlight.0.tgz#ee239d61ce7c7e076ffb49a7c5fcd5b9f1bbfb48"
+ integrity sha512-0O9ERm3l4arXip9EmaVl83I84l0ZhEj1ZUrKHrNbjiW2/rhIdEWUQOdYcWdBCb8/nr5NwRMOJQ4rdqiUj7S5IQ==
+ dependencies:
+ csstype "^2.5.7"
+
+"@theme-ui/mdx@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/mdx/-/mdx-0.4.0-highlight.0.tgz#e7c9bfea7d2c9ab8cbd8318726d8e14661a2b373"
+ integrity sha512-kyEU0+AGaE3EoIe5Sip2PvEYx0w6CnkaryxEtqi6XH2A0Vu4jlRTVeDS0/ZrKVcsbqOWGdyc0Kpti3DN/JBhIg==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@emotion/styled" "^10.0.0"
+ "@mdx-js/react" "^1.0.0"
+
+"@theme-ui/theme-provider@^0.4.0-highlight.0":
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/@theme-ui/theme-provider/-/theme-provider-0.4.0-highlight.0.tgz#88e8cb28bc5f7d9629573e1bdbec4369fdacd044"
+ integrity sha512-QBpTmyyQenyc6fZd/4ereXdMGZiaJ8IVN+FmoRXo9UnV3EJDBrAAt708lMRaVw7ccWpa4KQb7HQnN3FpxXlnTg==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@theme-ui/color-modes" "^0.4.0-highlight.0"
+ "@theme-ui/core" "^0.4.0-highlight.0"
+ "@theme-ui/mdx" "^0.4.0-highlight.0"
+
+"@types/color-name@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
+ integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
+
+"@types/configstore@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@types/configstore/-/configstore-2.1.1.tgz#cd1e8553633ad3185c3f2f239ecff5d2643e92b6"
+ integrity sha1-zR6FU2M60xhcPy8jns/10mQ+krY=
+
+"@types/debug@^0.0.30":
+ version "0.0.30"
+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-0.0.30.tgz#dc1e40f7af3b9c815013a7860e6252f6352a84df"
+ integrity sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ==
+
+"@types/eslint-visitor-keys@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
+ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+
+"@types/events@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
+ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
+
+"@types/get-port@^3.2.0":
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/@types/get-port/-/get-port-3.2.0.tgz#f9e0a11443cc21336470185eae3dfba4495d29bc"
+ integrity sha512-TiNg8R1kjDde5Pub9F9vCwZA/BNW9HeXP5b9j7Qucqncy/McfPZ6xze/EyBdXS5FhMIGN6Fx3vg75l5KHy3V1Q==
+
+"@types/glob@*", "@types/glob@^7.1.1":
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
+ integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
+ dependencies:
+ "@types/events" "*"
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/glob@^5.0.34":
+ version "5.0.36"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.36.tgz#0c80a9c8664fc7d19781de229f287077fd622cb2"
+ integrity sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg==
+ dependencies:
+ "@types/events" "*"
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/history@*":
+ version "4.7.6"
+ resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.6.tgz#ed8fc802c45b8e8f54419c2d054e55c9ea344356"
+ integrity sha512-GRTZLeLJ8ia00ZH8mxMO8t0aC9M1N9bN461Z2eaRurJo6Fpa+utgCwLzI4jQHcrdzuzp5WPN9jRwpsCQ1VhJ5w==
+
+"@types/http-proxy@^1.17.4":
+ version "1.17.4"
+ resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.4.tgz#e7c92e3dbe3e13aa799440ff42e6d3a17a9d045b"
+ integrity sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q==
+ dependencies:
+ "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz#79d7a78bad4219f4c03d6557a1c72d9ca6ba62d5"
+ integrity sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^1.1.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
+ integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+ "@types/istanbul-lib-report" "*"
+
+"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4":
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"
+ integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==
+
+"@types/lodash.sample@^4.2.6":
+ version "4.2.6"
+ resolved "https://registry.yarnpkg.com/@types/lodash.sample/-/lodash.sample-4.2.6.tgz#ec7f6a6dbd0401c4a1e5f5b3c85fa5a85a42a84a"
+ integrity sha512-hxBvsUjPcW1O8mC9TiBE4m8TwvLuUU+zW8J6GI1M6WmPg8J87mXGt7zavpJ/9Znb+0rVsSB3VNAjCFaJ9YUJKg==
+ dependencies:
+ "@types/lodash" "*"
+
+"@types/lodash@*", "@types/lodash@^4.14.92":
+ version "4.14.154"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.154.tgz#069e3c703fdb264e67be9e03b20a640bc0198ecc"
+ integrity sha512-VoDZIJmg3P8vPEnTldLvgA+q7RkIbVkbYX4k0cAVFzGAOQwUehVgRHgIr2/wepwivDst/rVRqaiBSjCXRnoWwQ==
+
+"@types/mdast@^3.0.0":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
+ integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/minimatch@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
+"@types/mkdirp@^0.5.2":
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f"
+ integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/node@*":
+ version "14.0.6"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.6.tgz#f9e178b2da31a4b0ec60b64649e244c31ce18daf"
+ integrity sha512-FbNmu4F67d3oZMWBV6Y4MaPER+0EpE9eIYf2yaHhCWovc1dlXCZkqGX4NLHfVVr6umt20TNBdRzrNJIzIKfdbw==
+
+"@types/node@^8.5.7":
+ version "8.10.61"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.61.tgz#d299136ce54bcaf1abaa4a487f9e4bedf6b0d393"
+ integrity sha512-l+zSbvT8TPRaCxL1l9cwHCb0tSqGAGcjPJFItGGYat5oCTiq1uQQKYg5m7AF1mgnEBzFXGLJ2LRmNjtreRX76Q==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/prop-types@*":
+ version "15.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
+ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
+
+"@types/q@^1.5.1":
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
+ integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
+
+"@types/reach__router@^1.3.3":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.5.tgz#14e1e981cccd3a5e50dc9e969a72de0b9d472f6d"
+ integrity sha512-h0NbqXN/tJuBY/xggZSej1SKQEstbHO7J/omt1tYoFGmj3YXOodZKbbqD4mNDh7zvEGYd7YFrac1LTtAr3xsYQ==
+ dependencies:
+ "@types/history" "*"
+ "@types/react" "*"
+
+"@types/react@*":
+ version "16.9.35"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.35.tgz#a0830d172e8aadd9bd41709ba2281a3124bbd368"
+ integrity sha512-q0n0SsWcGc8nDqH2GJfWQWUOmZSJhXV64CjVN5SvcNti3TdEaA3AH0D8DwNmMdzjMAC/78tB8nAZIlV8yTz+zQ==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^2.2.0"
+
+"@types/reflexbox@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/reflexbox/-/reflexbox-4.0.1.tgz#dfe91aace3c931766507cfd1cce65498a4d052a0"
+ integrity sha512-Ucw4Fh13EYJdWS8zsyP6HJz8ooDL3LFwGT63J9Pu9hMqNRTO21yFaXH6BDUtNjD1zNyOxpv6Oe1+7Z90iiLFtQ==
+ dependencies:
+ "@emotion/styled" "*"
+ "@types/react" "*"
+ "@types/styled-system" "*"
+
+"@types/rimraf@^2.0.2":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.4.tgz#403887b0b53c6100a6c35d2ab24f6ccc042fec46"
+ integrity sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==
+ dependencies:
+ "@types/glob" "*"
+ "@types/node" "*"
+
+"@types/styled-system@*":
+ version "5.1.9"
+ resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.9.tgz#8baac8f6eca9e0bd5768c175ca5ce1f2d6f61ade"
+ integrity sha512-QlWv6tmQV8dqk8s+LSLb9QAtmuQEnfv4f8lKKZkMgDqRFVmxJDBwEw0u4zhpxp56u0hdR+TCIk9dGfOw3TkCoQ==
+ dependencies:
+ csstype "^2.6.9"
+
+"@types/styled-system__css@*":
+ version "5.0.11"
+ resolved "https://registry.yarnpkg.com/@types/styled-system__css/-/styled-system__css-5.0.11.tgz#a9ff7e5d75e69a0d5ccff36acb4bbd491f1a9da9"
+ integrity sha512-hUieAt4sFS7zwbdU9Vlnn/c3vkfhTMhyiccYGpUSX96nJ4BF3NjLIjMu3cQOYS5EX4gPkHJZhkfdw41ov1NjhQ==
+ dependencies:
+ csstype "^2.6.6"
+
+"@types/theme-ui@*":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@types/theme-ui/-/theme-ui-0.3.2.tgz#f8e49734398725f72195866cdc2462a07743bf38"
+ integrity sha512-xAHYIyIsInPbcRf2YqCnioTmTsVjX+5fClO6NqwNORn0j9deGuSMp2gI8lPjm5b0eZwxM5ugExLbz01lxjjVqw==
+ dependencies:
+ "@emotion/serialize" "^0.11.15"
+ "@types/react" "*"
+ "@types/styled-system" "*"
+ "@types/styled-system__css" "*"
+ "@types/theme-ui__components" "*"
+ csstype "^2.6.6"
+
+"@types/theme-ui__components@*", "@types/theme-ui__components@^0.2.3":
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/@types/theme-ui__components/-/theme-ui__components-0.2.5.tgz#65ef4e160e2e0cf7c52ae220f6579a707d33667d"
+ integrity sha512-qqhIJboXzGXE0ZpKRHrwQvRbuOAcGNyAWMPXXP2jGs65XcaTuDJJpz1Rx5JCaQ1h+Tt99uIriRzZRthWarh1wg==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@emotion/styled" "^10.0.0"
+ "@types/react" "*"
+ "@types/styled-system" "*"
+ "@types/theme-ui" "*"
+
+"@types/tmp@^0.0.33":
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.0.33.tgz#1073c4bc824754ae3d10cfab88ab0237ba964e4d"
+ integrity sha1-EHPEvIJHVK49EM+riKsCN7qWTk0=
+
+"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+ integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+
+"@types/warning@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52"
+ integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=
+
+"@types/websocket@1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.0.tgz#828c794b0a50949ad061aa311af1009934197e4b"
+ integrity sha512-MLr8hDM8y7vvdAdnoDEP5LotRoYJj7wgT6mWzCUQH/gHqzS4qcnOT/K4dhC0WimWIUiA3Arj9QAJGGKNRiRZKA==
+ dependencies:
+ "@types/node" "*"
+
+"@types/yargs-parser@*":
+ version "15.0.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
+ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
+
+"@types/yargs@^15.0.0":
+ version "15.0.5"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79"
+ integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@types/yoga-layout@1.9.2":
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/@types/yoga-layout/-/yoga-layout-1.9.2.tgz#efaf9e991a7390dc081a0b679185979a83a9639a"
+ integrity sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==
+
+"@typescript-eslint/eslint-plugin@^2.24.0", "@typescript-eslint/eslint-plugin@^2.28.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9"
+ integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "2.34.0"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^3.0.0"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/experimental-utils@2.34.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
+ integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/typescript-estree" "2.34.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
+"@typescript-eslint/parser@^2.24.0", "@typescript-eslint/parser@^2.28.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8"
+ integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==
+ dependencies:
+ "@types/eslint-visitor-keys" "^1.0.0"
+ "@typescript-eslint/experimental-utils" "2.34.0"
+ "@typescript-eslint/typescript-estree" "2.34.0"
+ eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/typescript-estree@2.34.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
+ integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==
+ dependencies:
+ 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"
+
+"@urql/core@^1.11.0":
+ version "1.11.8"
+ resolved "https://registry.yarnpkg.com/@urql/core/-/core-1.11.8.tgz#6a3186ac84d6b08752585f42e8ec81539338d7a9"
+ integrity sha512-lBlCjw3sLlblGIzRVg583IdsONUIt04f/LHI0oiEgNlPViZcRR3B31LCKyOChba/klIqSaDivaqCfzg5wyTPoQ==
+ dependencies:
+ wonka "^4.0.10"
+
+"@webassemblyjs/ast@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+ integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+ integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
+"@webassemblyjs/helper-api-error@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+ integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
+"@webassemblyjs/helper-buffer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+ integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+ integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+ integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+ integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+ integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+ integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+ integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+ integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+ integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
+"@webassemblyjs/wasm-edit@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+ integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/helper-wasm-section" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-opt" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+ integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+ integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+ integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+ integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-code-frame" "1.9.0"
+ "@webassemblyjs/helper-fsm" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+ integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@wry/equality@^0.1.2":
+ version "0.1.11"
+ resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790"
+ integrity sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==
+ dependencies:
+ tslib "^1.9.3"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn-dynamic-import@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
+ integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
+
+acorn-jsx@^5.0.1, acorn-jsx@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
+ integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
+
+acorn@^6.1.1, acorn@^6.4.1:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
+ integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
+
+acorn@^7.1.1, acorn@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe"
+ integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==
+
+address@1.0.3, address@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
+ integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==
+
+address@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
+ integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
+
+after@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+ integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
+
+aggregate-error@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0"
+ integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5:
+ version "6.12.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
+ integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+alphanum-sort@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+ integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+
+ansi-align@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
+ integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
+ dependencies:
+ string-width "^3.0.0"
+
+ansi-colors@^3.0.0:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+ integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
+ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-escapes@^4.2.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
+ integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
+ dependencies:
+ type-fest "^0.11.0"
+
+ansi-html@0.0.7, ansi-html@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+ integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
+ integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
+ dependencies:
+ "@types/color-name" "^1.1.1"
+ color-convert "^2.0.1"
+
+any-base@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
+ integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==
+
+any-promise@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
+ integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+apollo-link-http-common@^0.2.14, apollo-link-http-common@^0.2.16:
+ version "0.2.16"
+ resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz#756749dafc732792c8ca0923f9a40564b7c59ecc"
+ integrity sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg==
+ dependencies:
+ apollo-link "^1.2.14"
+ ts-invariant "^0.4.0"
+ tslib "^1.9.3"
+
+apollo-link-http@^1.5.17:
+ version "1.5.17"
+ resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.17.tgz#499e9f1711bf694497f02c51af12d82de5d8d8ba"
+ integrity sha512-uWcqAotbwDEU/9+Dm9e1/clO7hTB2kQ/94JYcGouBVLjoKmTeJTUPQKcJGpPwUjZcSqgYicbFqQSoJIW0yrFvg==
+ dependencies:
+ apollo-link "^1.2.14"
+ apollo-link-http-common "^0.2.16"
+ tslib "^1.9.3"
+
+apollo-link@1.2.14, apollo-link@^1.2.12, apollo-link@^1.2.14:
+ version "1.2.14"
+ resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9"
+ integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==
+ dependencies:
+ apollo-utilities "^1.3.0"
+ ts-invariant "^0.4.0"
+ tslib "^1.9.3"
+ zen-observable-ts "^0.8.21"
+
+apollo-upload-client@13.0.0, apollo-upload-client@^13.0.0:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-13.0.0.tgz#146d1ddd85d711fcac8ca97a72d3ca6787f2b71b"
+ integrity sha512-lJ9/bk1BH1lD15WhWRha2J3+LrXrPIX5LP5EwiOUHv8PCORp4EUrcujrA3rI5hZeZygrTX8bshcuMdpqpSrvtA==
+ dependencies:
+ "@babel/runtime" "^7.9.2"
+ apollo-link "^1.2.12"
+ apollo-link-http-common "^0.2.14"
+ extract-files "^8.0.0"
+
+apollo-utilities@^1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf"
+ integrity sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==
+ dependencies:
+ "@wry/equality" "^0.1.2"
+ fast-json-stable-stringify "^2.0.0"
+ ts-invariant "^0.4.0"
+ tslib "^1.10.0"
+
+application-config-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.0.tgz#193c5f0a86541a4c66fba1e2dc38583362ea5e8f"
+ integrity sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+arch@^2.1.0, arch@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf"
+ integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==
+
+archive-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70"
+ integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=
+ dependencies:
+ file-type "^4.2.0"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+aria-query@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
+ integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=
+ dependencies:
+ ast-types-flow "0.0.7"
+ commander "^2.11.0"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-rotate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/arr-rotate/-/arr-rotate-1.0.0.tgz#c11877d06a0a42beb39ab8956a06779d9b71d248"
+ integrity sha512-yOzOZcR9Tn7enTF66bqKorGGH0F36vcPaSWg8fO0c0UYb3LX3VMXj5ZxEqQLNOecAhlRJ7wYZja5i4jTlnbIfQ==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-filter@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+ integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-flatten@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+ integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+array-includes@^3.0.3, array-includes@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
+ integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0"
+ is-string "^1.0.5"
+
+array-map@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+ integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=
+
+array-reduce@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
+ integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.1:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
+ integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+arraybuffer.slice@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
+ integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+arrify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+ integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
+asap@~2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-types-flow@0.0.7, ast-types-flow@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-cache@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/async-cache/-/async-cache-1.1.0.tgz#4a9a5a89d065ec5d8e5254bd9ee96ba76c532b5a"
+ integrity sha1-SppaidBl7F2OUlS9nulrp2xTK1o=
+ dependencies:
+ lru-cache "^4.0.0"
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async@1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+
+async@^2.6.2, async@^2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+auto-bind@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb"
+ integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==
+
+autoprefixer@^9.8.0:
+ version "9.8.0"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz#68e2d2bef7ba4c3a65436f662d0a56a741e56511"
+ integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A==
+ dependencies:
+ browserslist "^4.12.0"
+ caniuse-lite "^1.0.30001061"
+ chalk "^2.4.2"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^7.0.30"
+ postcss-value-parser "^4.1.0"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2"
+ integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==
+
+axios@^0.19.2:
+ version "0.19.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
+ integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
+ dependencies:
+ follow-redirects "1.5.10"
+
+axobject-query@^2.0.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799"
+ integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==
+
+babel-code-frame@6.26.0, babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+babel-core@7.0.0-bridge.0:
+ version "7.0.0-bridge.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
+ integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
+
+babel-eslint@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
+ integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.7.0"
+ "@babel/traverse" "^7.7.0"
+ "@babel/types" "^7.7.0"
+ eslint-visitor-keys "^1.0.0"
+ resolve "^1.12.0"
+
+babel-extract-comments@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21"
+ integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==
+ dependencies:
+ babylon "^6.18.0"
+
+babel-loader@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3"
+ integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==
+ dependencies:
+ find-cache-dir "^2.1.0"
+ loader-utils "^1.4.0"
+ mkdirp "^0.5.3"
+ pify "^4.0.1"
+ schema-utils "^2.6.5"
+
+babel-plugin-add-module-exports@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.3.3.tgz#b9f7c0a93b989170dce07c3e97071a905a13fc29"
+ integrity sha512-hC37mm7aAdEb1n8SgggG8a1QuhZapsY/XLCi4ETSH6AVjXBCWEa50CXlOsAMPPWLnSx5Ns6mzz39uvuseh0Xjg==
+ optionalDependencies:
+ chokidar "^2.0.4"
+
+babel-plugin-apply-mdx-type-prop@^1.6.5:
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.5.tgz#61f6e16e3ee9d09660d510723199de743cd516f4"
+ integrity sha512-Bs2hv/bYFTJyhBqvsWOsceFyPXAhVM1gvwF8fIm6GeXYTQV+sY+qRR5TClamgr3OEsD8ZApmw+kxJSHgJggVyw==
+ dependencies:
+ "@babel/helper-plugin-utils" "7.8.3"
+ "@mdx-js/util" "^1.6.5"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+ integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-emotion@^10.0.27:
+ version "10.0.33"
+ resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03"
+ integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@emotion/hash" "0.8.0"
+ "@emotion/memoize" "0.7.4"
+ "@emotion/serialize" "^0.11.16"
+ babel-plugin-macros "^2.0.0"
+ babel-plugin-syntax-jsx "^6.18.0"
+ convert-source-map "^1.5.0"
+ escape-string-regexp "^1.0.5"
+ find-root "^1.1.0"
+ source-map "^0.5.7"
+
+babel-plugin-extract-import-names@^1.6.5:
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.5.tgz#b5b2639a9bbe880f2433736f1ca35c0a08d8518a"
+ integrity sha512-rrNoCZ1DHMdy3vuihvkuO2AjE2DVFrI78e61W7eVsgpNTbG0KO1UESQwXMTlS3v1PMnlEJjdvoteRAkatEkWFQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "7.8.3"
+
+babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
+ integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ cosmiconfig "^6.0.0"
+ resolve "^1.12.0"
+
+babel-plugin-remove-graphql-queries@^2.9.2:
+ version "2.9.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.9.2.tgz#20633ca9a0b245ba104a6e02d99ee09cb08c26cf"
+ integrity sha512-W6UpWAT18G27XfXvBmBoSsb5CfeMRf3K/dCkK5w0i9D9VC4CIj3162s2P2SGawqEraO1njKgjvkRfut8uTLUdw==
+
+babel-plugin-syntax-jsx@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+ integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
+
+babel-plugin-syntax-object-rest-spread@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+ integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
+
+babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0:
+ version "7.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf"
+ integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==
+
+babel-plugin-transform-object-rest-spread@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
+ integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=
+ dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.8.0"
+ babel-runtime "^6.26.0"
+
+babel-plugin-transform-react-remove-prop-types@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+ integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+
+babel-preset-fbjs@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541"
+ integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==
+ dependencies:
+ "@babel/plugin-proposal-class-properties" "^7.0.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/plugin-syntax-class-properties" "^7.0.0"
+ "@babel/plugin-syntax-flow" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ "@babel/plugin-transform-arrow-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoped-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoping" "^7.0.0"
+ "@babel/plugin-transform-classes" "^7.0.0"
+ "@babel/plugin-transform-computed-properties" "^7.0.0"
+ "@babel/plugin-transform-destructuring" "^7.0.0"
+ "@babel/plugin-transform-flow-strip-types" "^7.0.0"
+ "@babel/plugin-transform-for-of" "^7.0.0"
+ "@babel/plugin-transform-function-name" "^7.0.0"
+ "@babel/plugin-transform-literals" "^7.0.0"
+ "@babel/plugin-transform-member-expression-literals" "^7.0.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.0.0"
+ "@babel/plugin-transform-object-super" "^7.0.0"
+ "@babel/plugin-transform-parameters" "^7.0.0"
+ "@babel/plugin-transform-property-literals" "^7.0.0"
+ "@babel/plugin-transform-react-display-name" "^7.0.0"
+ "@babel/plugin-transform-react-jsx" "^7.0.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0"
+ "@babel/plugin-transform-spread" "^7.0.0"
+ "@babel/plugin-transform-template-literals" "^7.0.0"
+ babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0"
+
+babel-preset-gatsby@^0.4.7:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-0.4.7.tgz#a23945eea34817d09988b434b2fe4c46f69b3ad6"
+ integrity sha512-s8YBkUJRZL4rVwAMDiXuE4NNpmwRQBBcFluns/L4ehJvckMoSZvRkX6APTiXW4ztdehxzT6/m7oE22Q91boAvQ==
+ dependencies:
+ "@babel/plugin-proposal-class-properties" "^7.8.3"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-proposal-optional-chaining" "^7.9.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+ "@babel/plugin-transform-runtime" "^7.9.6"
+ "@babel/plugin-transform-spread" "^7.8.3"
+ "@babel/preset-env" "^7.9.6"
+ "@babel/preset-react" "^7.9.4"
+ "@babel/runtime" "^7.9.6"
+ babel-plugin-dynamic-import-node "^2.3.3"
+ babel-plugin-macros "^2.8.0"
+ babel-plugin-transform-react-remove-prop-types "^0.4.24"
+ gatsby-core-utils "^1.3.3"
+
+babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+ integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+backo2@1.0.2, backo2@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+ integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
+
+bail@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
+ integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-arraybuffer@0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+ integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
+
+base64-js@^1.0.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
+base64id@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6"
+ integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+batch@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+ integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+better-assert@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+ integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
+ dependencies:
+ callsite "1.0.0"
+
+better-opn@1.0.0, better-opn@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-1.0.0.tgz#0454e4bb9115c6a9e4e5744417dd9c97fb9fce41"
+ integrity sha512-q3eO2se4sFbTERB1dFBDdjTiIIpRohMErpwBX21lhPvmgmQNNrcQj0zbWRhMREDesJvyod9kxBS3kOtdAvkB/A==
+ dependencies:
+ open "^6.4.0"
+
+better-queue-memory@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/better-queue-memory/-/better-queue-memory-1.0.4.tgz#f390d6b30bb3b36aaf2ce52b37a483e8a7a81a22"
+ integrity sha512-SWg5wFIShYffEmJpI6LgbL8/3Dqhku7xI1oEiy6FroP9DbcZlG0ZDjxvPdP9t7hTGW40IpIcC6zVoGT1oxjOuA==
+
+better-queue@^3.8.10:
+ version "3.8.10"
+ resolved "https://registry.yarnpkg.com/better-queue/-/better-queue-3.8.10.tgz#1c93b9ec4cb3d1b72eb91d0efcb84fc80e8c6835"
+ integrity sha512-e3gwNZgDCnNWl0An0Tz6sUjKDV9m6aB+K9Xg//vYeo8+KiH8pWhLFxkawcXhm6FpM//GfD9IQv/kmvWCAVVpKA==
+ dependencies:
+ better-queue-memory "^1.0.1"
+ node-eta "^0.9.0"
+ uuid "^3.0.0"
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+bin-build@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bin-build/-/bin-build-3.0.0.tgz#c5780a25a8a9f966d8244217e6c1f5082a143861"
+ integrity sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==
+ dependencies:
+ decompress "^4.0.0"
+ download "^6.2.2"
+ execa "^0.7.0"
+ p-map-series "^1.0.0"
+ tempfile "^2.0.0"
+
+bin-check@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bin-check/-/bin-check-4.1.0.tgz#fc495970bdc88bb1d5a35fc17e65c4a149fc4a49"
+ integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==
+ dependencies:
+ execa "^0.7.0"
+ executable "^4.1.0"
+
+bin-version-check@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-4.0.0.tgz#7d819c62496991f80d893e6e02a3032361608f71"
+ integrity sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==
+ dependencies:
+ bin-version "^3.0.0"
+ semver "^5.6.0"
+ semver-truncate "^1.1.2"
+
+bin-version@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-3.1.0.tgz#5b09eb280752b1bd28f0c9db3f96f2f43b6c0839"
+ integrity sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==
+ dependencies:
+ execa "^1.0.0"
+ find-versions "^3.0.0"
+
+bin-wrapper@^4.0.0, bin-wrapper@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz#99348f2cf85031e3ef7efce7e5300aeaae960605"
+ integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==
+ dependencies:
+ bin-check "^4.1.0"
+ bin-version-check "^4.0.0"
+ download "^7.1.0"
+ import-lazy "^3.1.0"
+ os-filter-obj "^2.0.0"
+ pify "^4.0.1"
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-extensions@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c"
+ integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bl@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
+ integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
+bl@^4.0.0, bl@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a"
+ integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
+blob@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
+ integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==
+
+bluebird@^3.5.5, bluebird@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bmp-js@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233"
+ integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM=
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
+ version "4.11.9"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
+ integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
+
+bn.js@^5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0"
+ integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==
+
+body-parser@1.19.0:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+ integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+ dependencies:
+ bytes "3.1.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ on-finished "~2.3.0"
+ qs "6.7.0"
+ raw-body "2.4.0"
+ type-is "~1.6.17"
+
+bonjour@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+ integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
+ dependencies:
+ array-flatten "^2.1.0"
+ deep-equal "^1.0.1"
+ dns-equal "^1.0.0"
+ dns-txt "^2.0.2"
+ multicast-dns "^6.0.1"
+ multicast-dns-service-types "^1.1.0"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+boxen@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-3.2.0.tgz#fbdff0de93636ab4450886b6ff45b92d098f45eb"
+ integrity sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^5.3.1"
+ chalk "^2.4.2"
+ cli-boxes "^2.2.0"
+ string-width "^3.0.0"
+ term-size "^1.2.0"
+ type-fest "^0.3.0"
+ widest-line "^2.0.0"
+
+boxen@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64"
+ integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^5.3.1"
+ chalk "^3.0.0"
+ cli-boxes "^2.2.0"
+ string-width "^4.1.0"
+ term-size "^2.1.0"
+ type-fest "^0.8.1"
+ widest-line "^3.1.0"
+
+brace-expansion@^1.0.0, brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.1, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11"
+ integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==
+ dependencies:
+ bn.js "^5.1.1"
+ browserify-rsa "^4.0.1"
+ create-hash "^1.2.0"
+ create-hmac "^1.1.7"
+ elliptic "^6.5.2"
+ inherits "^2.0.4"
+ parse-asn1 "^5.1.5"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d"
+ integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==
+ dependencies:
+ caniuse-lite "^1.0.30001043"
+ electron-to-chromium "^1.3.413"
+ node-releases "^1.1.53"
+ pkg-up "^2.0.0"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buble-jsx-only@^0.19.8:
+ version "0.19.8"
+ resolved "https://registry.yarnpkg.com/buble-jsx-only/-/buble-jsx-only-0.19.8.tgz#6e3524aa0f1c523de32496ac9aceb9cc2b493867"
+ integrity sha512-7AW19pf7PrKFnGTEDzs6u9+JZqQwM1VnLS19OlqYDhXomtFFknnoQJAPHeg84RMFWAvOhYrG7harizJNwUKJsA==
+ dependencies:
+ acorn "^6.1.1"
+ acorn-dynamic-import "^4.0.0"
+ acorn-jsx "^5.0.1"
+ chalk "^2.4.2"
+ magic-string "^0.25.3"
+ minimist "^1.2.0"
+ regexpu-core "^4.5.4"
+
+buffer-alloc-unsafe@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+ integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.1.0, buffer-alloc@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+ integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+ dependencies:
+ buffer-alloc-unsafe "^1.1.0"
+ buffer-fill "^1.0.0"
+
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+
+buffer-equal@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
+ integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=
+
+buffer-fill@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+ integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-indexof@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+ integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
+ integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+
+builtin-modules@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484"
+ integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+ integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+
+bytes@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^12.0.2:
+ version "12.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+ integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cache-manager-fs-hash@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/cache-manager-fs-hash/-/cache-manager-fs-hash-0.0.8.tgz#55484c4bd03c7bc4ef43008292dd32b6f7f8d9bc"
+ integrity sha512-U4N81RiwyUVSAutgfWxW1sV6YJRk9QgizCRXOqdEevMDNA+0uiXtnZTHYfg11RKyJnX+yXsaPsJHloIylk4ZhQ==
+ dependencies:
+ lockfile "^1.0.4"
+
+cache-manager@^2.11.1:
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/cache-manager/-/cache-manager-2.11.1.tgz#212e8c3db15288af653b029a1d9fe12f1fd9df61"
+ integrity sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==
+ dependencies:
+ async "1.5.2"
+ lodash.clonedeep "4.5.0"
+ lru-cache "4.0.0"
+
+cacheable-request@^2.1.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d"
+ integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=
+ dependencies:
+ clone-response "1.0.2"
+ get-stream "3.0.0"
+ http-cache-semantics "3.8.1"
+ keyv "3.0.0"
+ lowercase-keys "1.0.0"
+ normalize-url "2.0.1"
+ responselike "1.0.2"
+
+cacheable-request@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
+ integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^3.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^4.1.0"
+ responselike "^1.0.2"
+
+call-me-maybe@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+ integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsite@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+ integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547"
+ integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==
+ dependencies:
+ pascal-case "^3.1.1"
+ tslib "^1.10.0"
+
+camelcase-css@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+ integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^5.0.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-api@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+ integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-lite "^1.0.0"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001061:
+ version "1.0.30001066"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001066.tgz#0a8a58a10108f2b9bf38e7b65c237b12fd9c5f04"
+ integrity sha512-Gfj/WAastBtfxLws0RCh2sDbTK/8rJuSeZMecrSkNGYxPcv7EzblmDGfWQCFEQcSqYE2BRgQiJh8HOD07N5hIw==
+
+case@^1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9"
+ integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+caw@^2.0.0, caw@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95"
+ integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==
+ dependencies:
+ get-proxy "^2.0.0"
+ isurl "^1.0.0-alpha5"
+ tunnel-agent "^0.6.0"
+ url-to-options "^1.0.1"
+
+ccount@^1.0.0, ccount@^1.0.3:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17"
+ integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==
+
+chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+character-entities-html4@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
+ integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==
+
+character-entities-legacy@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
+ integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
+
+character-entities@^1.0.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
+ integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
+
+character-reference-invalid@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
+ integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
+
+chardet@^0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+ integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+charenc@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+ integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
+
+cheerio@^1.0.0-rc.3:
+ version "1.0.0-rc.3"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
+ integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
+ dependencies:
+ css-select "~1.2.0"
+ dom-serializer "~0.1.1"
+ entities "~1.1.1"
+ htmlparser2 "^3.9.1"
+ lodash "^4.15.0"
+ parse5 "^3.0.1"
+
+chokidar@3.4.0, chokidar@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8"
+ integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.4.0"
+ optionalDependencies:
+ fsevents "~2.1.2"
+
+chokidar@^2.0.4, chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+ci-info@2.0.0, ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-boxes@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d"
+ integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==
+
+cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-spinners@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
+ integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==
+
+cli-table3@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
+ integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==
+ dependencies:
+ object-assign "^4.1.0"
+ string-width "^2.1.1"
+ optionalDependencies:
+ colors "^1.1.2"
+
+cli-truncate@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+ integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+ dependencies:
+ slice-ansi "^3.0.0"
+ string-width "^4.2.0"
+
+cli-width@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+ integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
+
+clipboardy@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290"
+ integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==
+ dependencies:
+ arch "^2.1.1"
+ execa "^1.0.0"
+ is-wsl "^2.1.1"
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
+clone-response@1.0.2, clone-response@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
+ integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
+ dependencies:
+ mimic-response "^1.0.0"
+
+coa@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+ integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+ dependencies:
+ "@types/q" "^1.5.1"
+ chalk "^2.4.1"
+ q "^1.1.2"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collapse-white-space@^1.0.0, collapse-white-space@^1.0.2:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287"
+ integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0, color-convert@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3, color-name@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^1.5.2:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+ integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@^3.0.0, color@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
+ integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
+ dependencies:
+ color-convert "^1.9.1"
+ color-string "^1.5.2"
+
+colors@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
+ integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
+
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+comma-separated-tokens@^1.0.0:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
+ integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
+
+command-exists@^1.2.4:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
+ integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
+
+commander@^2.11.0, commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@~2.8.1:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
+ integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+common-tags@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
+ integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+ integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
+
+component-emitter@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+component-emitter@^1.2.1, component-emitter@~1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+ integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
+
+compressible@~2.0.16:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.16"
+ debug "2.6.9"
+ on-headers "~1.0.2"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+config-chain@^1.1.11:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
+ integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
+configstore@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
+ integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+configstore@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7"
+ integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+configstore@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
+ integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
+ dependencies:
+ dot-prop "^5.2.0"
+ graceful-fs "^4.1.2"
+ make-dir "^3.0.0"
+ unique-string "^2.0.0"
+ write-file-atomic "^3.0.0"
+ xdg-basedir "^4.0.0"
+
+confusing-browser-globals@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd"
+ integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==
+
+connect-history-api-fallback@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+ integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+console-stream@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44"
+ integrity sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+content-disposition@0.5.3, content-disposition@^0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
+
+content-type@^1.0.4, content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-hrtime@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/convert-hrtime/-/convert-hrtime-3.0.0.tgz#62c7593f5809ca10be8da858a6d2f702bcda00aa"
+ integrity sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==
+
+convert-source-map@^1.5.0, convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+
+cookie@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
+ integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+copyfiles@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.3.0.tgz#1c26ebbe3d46bba2d309a3fd8e3aaccf53af8c76"
+ integrity sha512-73v7KFuDFJ/ofkQjZBMjMBFWGgkS76DzXvBMUh7djsMOE5EELWtAO/hRB6Wr5Vj5Zg+YozvoHemv0vnXpqxmOQ==
+ dependencies:
+ glob "^7.0.5"
+ minimatch "^3.0.3"
+ mkdirp "^1.0.4"
+ noms "0.0.0"
+ through2 "^2.0.1"
+ yargs "^15.3.1"
+
+core-js-compat@^3.6.2:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"
+ integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==
+ dependencies:
+ browserslist "^4.8.5"
+ semver "7.0.0"
+
+core-js-pure@^3.0.0:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
+ integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
+
+core-js@^2.4.0, core-js@^2.4.1, core-js@^2.6.11, core-js@^2.6.5:
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
+ integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
+
+core-js@^3.4.1, core-js@^3.6.3:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
+ integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cors@^2.8.5:
+ version "2.8.5"
+ resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
+ integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
+ dependencies:
+ object-assign "^4"
+ vary "^1"
+
+cosmiconfig@^5.0.0, cosmiconfig@^5.1.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.1"
+ parse-json "^4.0.0"
+
+cosmiconfig@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.1.0"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.7.2"
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-emotion@^10.0.27:
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.27.tgz#cb4fa2db750f6ca6f9a001a33fbf1f6c46789503"
+ integrity sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg==
+ dependencies:
+ "@emotion/cache" "^10.0.27"
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/sheet" "0.9.4"
+ "@emotion/utils" "0.11.3"
+
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-react-context@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c"
+ integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==
+ dependencies:
+ gud "^1.0.0"
+ warning "^4.0.3"
+
+cross-fetch@2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.2.tgz#a47ff4f7fc712daba8f6a695a11c948440d45723"
+ integrity sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=
+ dependencies:
+ node-fetch "2.1.2"
+ whatwg-fetch "2.0.4"
+
+cross-fetch@3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.4.tgz#7bef7020207e684a7638ef5f2f698e24d9eb283c"
+ integrity sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw==
+ dependencies:
+ node-fetch "2.6.0"
+ whatwg-fetch "3.0.0"
+
+cross-spawn@5.1.0, cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^7.0.0:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypt@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+ integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+ integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
+
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+
+css-color-names@0.0.4, css-color-names@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+ integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
+
+css-declaration-sorter@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
+ integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
+ dependencies:
+ postcss "^7.0.1"
+ timsort "^0.3.0"
+
+css-loader@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe"
+ integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==
+ dependencies:
+ babel-code-frame "^6.26.0"
+ css-selector-tokenizer "^0.7.0"
+ icss-utils "^2.1.0"
+ loader-utils "^1.0.2"
+ lodash "^4.17.11"
+ postcss "^6.0.23"
+ postcss-modules-extract-imports "^1.2.0"
+ postcss-modules-local-by-default "^1.2.0"
+ postcss-modules-scope "^1.1.0"
+ postcss-modules-values "^1.3.0"
+ postcss-value-parser "^3.3.0"
+ source-list-map "^2.0.0"
+
+css-select-base-adapter@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+ integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^1.1.0, css-select@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-select@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+ integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^3.2.1"
+ domutils "^1.7.0"
+ nth-check "^1.0.2"
+
+css-selector-tokenizer@^0.7.0:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87"
+ integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==
+ dependencies:
+ cssesc "^3.0.0"
+ fastparse "^1.1.2"
+ regexpu-core "^4.6.0"
+
+css-tree@1.0.0-alpha.37:
+ version "1.0.0-alpha.37"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
+ integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
+ dependencies:
+ mdn-data "2.0.4"
+ source-map "^0.6.1"
+
+css-tree@1.0.0-alpha.39:
+ version "1.0.0-alpha.39"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb"
+ integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==
+ dependencies:
+ mdn-data "2.0.6"
+ source-map "^0.6.1"
+
+css-what@2.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+ integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+
+css-what@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39"
+ integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano-preset-default@^4.0.7:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
+ integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==
+ dependencies:
+ css-declaration-sorter "^4.0.1"
+ cssnano-util-raw-cache "^4.0.1"
+ postcss "^7.0.0"
+ postcss-calc "^7.0.1"
+ postcss-colormin "^4.0.3"
+ postcss-convert-values "^4.0.1"
+ postcss-discard-comments "^4.0.2"
+ postcss-discard-duplicates "^4.0.2"
+ postcss-discard-empty "^4.0.1"
+ postcss-discard-overridden "^4.0.1"
+ postcss-merge-longhand "^4.0.11"
+ postcss-merge-rules "^4.0.3"
+ postcss-minify-font-values "^4.0.2"
+ postcss-minify-gradients "^4.0.2"
+ postcss-minify-params "^4.0.2"
+ postcss-minify-selectors "^4.0.2"
+ postcss-normalize-charset "^4.0.1"
+ postcss-normalize-display-values "^4.0.2"
+ postcss-normalize-positions "^4.0.2"
+ postcss-normalize-repeat-style "^4.0.2"
+ postcss-normalize-string "^4.0.2"
+ postcss-normalize-timing-functions "^4.0.2"
+ postcss-normalize-unicode "^4.0.1"
+ postcss-normalize-url "^4.0.1"
+ postcss-normalize-whitespace "^4.0.2"
+ postcss-ordered-values "^4.1.2"
+ postcss-reduce-initial "^4.0.3"
+ postcss-reduce-transforms "^4.0.2"
+ postcss-svgo "^4.0.2"
+ postcss-unique-selectors "^4.0.1"
+
+cssnano-util-get-arguments@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
+ integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=
+
+cssnano-util-get-match@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
+ integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=
+
+cssnano-util-raw-cache@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
+ integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
+ dependencies:
+ postcss "^7.0.0"
+
+cssnano-util-same-parent@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
+ integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
+
+cssnano@^4.1.10:
+ version "4.1.10"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
+ integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==
+ dependencies:
+ cosmiconfig "^5.0.0"
+ cssnano-preset-default "^4.0.7"
+ is-resolvable "^1.0.0"
+ postcss "^7.0.0"
+
+csso@^4.0.2:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903"
+ integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==
+ dependencies:
+ css-tree "1.0.0-alpha.39"
+
+csstype@^2.2.0, csstype@^2.5.7, csstype@^2.6.10, csstype@^2.6.6, csstype@^2.6.9:
+ version "2.6.10"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b"
+ integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+cwebp-bin@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cwebp-bin/-/cwebp-bin-5.1.0.tgz#d5bea87c127358558e7bf7a90a6d440d42dcb074"
+ integrity sha512-BsPKStaNr98zfxwejWWLIGELbPERULJoD2v5ijvpeutSAGsegX7gmABgnkRK7MUucCPROXXfaPqkLAwI509JzA==
+ dependencies:
+ bin-build "^3.0.0"
+ bin-wrapper "^4.0.1"
+ logalot "^2.1.0"
+
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
+damerau-levenshtein@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
+ integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+dataloader@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f"
+ integrity sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ==
+
+date-fns@^2.14.0, date-fns@^2.8.1:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.14.0.tgz#359a87a265bb34ef2e38f93ecf63ac453f9bc7ba"
+ integrity sha512-1zD+68jhFgDIM0rF05rcwYO8cExdNqxjq4xP1QKM60Q45mnO6zaMWB4tOzrIr4M4GSLntsKeE4c9Bdl2jhL/yw==
+
+de-indent@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
+ integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
+
+debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@=3.1.0, debug@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.1.2, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+decompress-response@^3.2.0, decompress-response@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+ integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
+ dependencies:
+ mimic-response "^1.0.0"
+
+decompress-response@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
+ integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
+ dependencies:
+ mimic-response "^2.0.0"
+
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+ dependencies:
+ mimic-response "^3.1.0"
+
+decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
+ integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==
+ dependencies:
+ file-type "^5.2.0"
+ is-stream "^1.1.0"
+ tar-stream "^1.5.2"
+
+decompress-tarbz2@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b"
+ integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==
+ dependencies:
+ decompress-tar "^4.1.0"
+ file-type "^6.1.0"
+ is-stream "^1.1.0"
+ seek-bzip "^1.0.5"
+ unbzip2-stream "^1.0.9"
+
+decompress-targz@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
+ integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
+ dependencies:
+ decompress-tar "^4.1.1"
+ file-type "^5.2.0"
+ is-stream "^1.1.0"
+
+decompress-unzip@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69"
+ integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k=
+ dependencies:
+ file-type "^3.8.0"
+ get-stream "^2.2.0"
+ pify "^2.3.0"
+ yauzl "^2.4.2"
+
+decompress@^4.0.0, decompress@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118"
+ integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==
+ dependencies:
+ decompress-tar "^4.0.0"
+ decompress-tarbz2 "^4.0.0"
+ decompress-targz "^4.0.0"
+ decompress-unzip "^4.0.1"
+ graceful-fs "^4.1.10"
+ make-dir "^1.0.0"
+ pify "^2.3.0"
+ strip-dirs "^2.0.0"
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-equal@^1.0.1, deep-equal@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+ integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+ dependencies:
+ is-arguments "^1.0.4"
+ is-date-object "^1.0.1"
+ is-regex "^1.0.4"
+ object-is "^1.0.1"
+ object-keys "^1.1.1"
+ regexp.prototype.flags "^1.2.0"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+deepmerge@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
+ integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==
+
+deepmerge@^4.0.0, deepmerge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+ integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+
+default-gateway@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
+ integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
+ dependencies:
+ execa "^1.0.0"
+ ip-regex "^2.1.0"
+
+defer-to-connect@^1.0.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
+ integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+del@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+ integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ globby "^6.1.0"
+ is-path-cwd "^2.0.0"
+ is-path-in-cwd "^2.0.0"
+ p-map "^2.0.0"
+ pify "^4.0.1"
+ rimraf "^2.6.3"
+
+del@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7"
+ integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==
+ dependencies:
+ globby "^10.0.1"
+ graceful-fs "^4.2.2"
+ is-glob "^4.0.1"
+ is-path-cwd "^2.2.0"
+ is-path-inside "^3.0.1"
+ p-map "^3.0.0"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+deprecated-decorator@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37"
+ integrity sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=
+
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detab@2.0.3, detab@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.3.tgz#33e5dd74d230501bd69985a0d2b9a3382699a130"
+ integrity sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==
+ dependencies:
+ repeat-string "^1.5.4"
+
+detect-indent@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd"
+ integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
+
+detect-libc@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+detect-newline@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-1.0.3.tgz#e97b1003877d70c09af1af35bfadff168de4920d"
+ integrity sha1-6XsQA4d9cMCa8a81v63/Fo3kkg0=
+ dependencies:
+ get-stdin "^4.0.1"
+ minimist "^1.1.0"
+
+detect-node@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
+ integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
+
+detect-port-alt@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.3.tgz#a4d2f061d757a034ecf37c514260a98750f2b131"
+ integrity sha1-pNLwYddXoDTs83xRQmCph1DysTE=
+ dependencies:
+ address "^1.0.1"
+ debug "^2.6.0"
+
+detect-port@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1"
+ integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==
+ dependencies:
+ address "^1.0.1"
+ debug "^2.6.0"
+
+devcert@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/devcert/-/devcert-1.1.0.tgz#255508c20dd21045e3020acf438491b745835dfd"
+ integrity sha512-ppyIBJueMMisYvJABaXESY10CwEm1pUXoLOm6TeBO2bbDUQE8ZjJPNADlu31I2InL7hduSgratzRG/dHUDF41w==
+ dependencies:
+ "@types/configstore" "^2.1.1"
+ "@types/debug" "^0.0.30"
+ "@types/get-port" "^3.2.0"
+ "@types/glob" "^5.0.34"
+ "@types/lodash" "^4.14.92"
+ "@types/mkdirp" "^0.5.2"
+ "@types/node" "^8.5.7"
+ "@types/rimraf" "^2.0.2"
+ "@types/tmp" "^0.0.33"
+ application-config-path "^0.1.0"
+ command-exists "^1.2.4"
+ configstore "^3.0.0"
+ debug "^3.1.0"
+ eol "^0.9.1"
+ get-port "^3.2.0"
+ glob "^7.1.2"
+ lodash "^4.17.4"
+ mkdirp "^0.5.1"
+ password-prompt "^1.0.4"
+ rimraf "^2.6.2"
+ sudo-prompt "^8.2.0"
+ tmp "^0.0.33"
+ tslib "^1.10.0"
+
+diff-sequences@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
+ integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+ integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
+ dependencies:
+ arrify "^1.0.1"
+ path-type "^3.0.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+dns-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+ integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
+
+dns-packet@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
+ integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
+ dependencies:
+ ip "^1.1.0"
+ safe-buffer "^5.0.1"
+
+dns-txt@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+ integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
+ dependencies:
+ buffer-indexof "^1.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-converter@^0.2:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+ integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+ dependencies:
+ utila "~0.4"
+
+dom-helpers@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
+ integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+
+dom-serializer@0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
+dom-serializer@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
+ integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
+ dependencies:
+ domelementtype "^1.3.0"
+ entities "^1.1.1"
+
+dom-walk@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
+ integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
+ integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==
+
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5.1, domutils@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+domutils@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dot-prop@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb"
+ integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==
+ dependencies:
+ is-obj "^2.0.0"
+
+dotenv@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
+ integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
+
+download@^6.2.2:
+ version "6.2.5"
+ resolved "https://registry.yarnpkg.com/download/-/download-6.2.5.tgz#acd6a542e4cd0bb42ca70cfc98c9e43b07039714"
+ integrity sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==
+ dependencies:
+ caw "^2.0.0"
+ content-disposition "^0.5.2"
+ decompress "^4.0.0"
+ ext-name "^5.0.0"
+ file-type "5.2.0"
+ filenamify "^2.0.0"
+ get-stream "^3.0.0"
+ got "^7.0.0"
+ make-dir "^1.0.0"
+ p-event "^1.0.0"
+ pify "^3.0.0"
+
+download@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233"
+ integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==
+ dependencies:
+ archive-type "^4.0.0"
+ caw "^2.0.1"
+ content-disposition "^0.5.2"
+ decompress "^4.2.0"
+ ext-name "^5.0.0"
+ file-type "^8.1.0"
+ filenamify "^2.0.0"
+ get-stream "^3.0.0"
+ got "^8.3.1"
+ make-dir "^1.2.0"
+ p-event "^2.1.0"
+ pify "^3.0.0"
+
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-to-chromium@^1.3.413:
+ version "1.3.455"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.455.tgz#fd65a3f5db6ffa83eb7c84f16ea9b1b7396f537d"
+ integrity sha512-4lwnxp+ArqOX9hiLwLpwhfqvwzUHFuDgLz4NTiU3lhygUzWtocIJ/5Vix+mWVNE2HQ9aI1k2ncGe5H/0OktMvA==
+
+elliptic@^6.0.0, elliptic@^6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
+ integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1, emoji-regex@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+emotion@^10.0.27:
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/emotion/-/emotion-10.0.27.tgz#f9ca5df98630980a23c819a56262560562e5d75e"
+ integrity sha512-2xdDzdWWzue8R8lu4G76uWX5WhyQuzATon9LmNeCy/2BHVC6dsEpfhN1a0qhELgtDVdjyEA6J8Y/VlI5ZnaH0g==
+ dependencies:
+ babel-plugin-emotion "^10.0.27"
+ create-emotion "^10.0.27"
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+encoding@^0.1.11:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
+ dependencies:
+ iconv-lite "~0.4.13"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+engine.io-client@~3.4.0:
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.2.tgz#4fb2ef2b1fe1d3aa1c621c6a8d87f1fc55426b50"
+ integrity sha512-AWjc1Xg06a6UPFOBAzJf48W1UR/qKYmv/ubgSCumo9GXgvL/xGIvo05dXoBL+2NTLMipDI7in8xK61C17L25xg==
+ dependencies:
+ component-emitter "~1.3.0"
+ component-inherit "0.0.3"
+ debug "~4.1.0"
+ engine.io-parser "~2.2.0"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ ws "~6.1.0"
+ xmlhttprequest-ssl "~1.5.4"
+ yeast "0.1.2"
+
+engine.io-parser@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed"
+ integrity sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "~0.0.7"
+ base64-arraybuffer "0.1.5"
+ blob "0.0.5"
+ has-binary2 "~1.0.2"
+
+engine.io@~3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.1.tgz#a61cbc13fa0cb27d9453fd079a29ee980564b069"
+ integrity sha512-8MfIfF1/IIfxuc2gv5K+XlFZczw/BpTvqBdl0E2fBLkYQp4miv4LuDTVtYt4yMyaIFLEr4vtaSgV4mjvll8Crw==
+ dependencies:
+ accepts "~1.3.4"
+ base64id "2.0.0"
+ cookie "0.3.1"
+ debug "~4.1.0"
+ engine.io-parser "~2.2.0"
+ ws "^7.1.2"
+
+enhanced-resolve@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
+ integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
+entities@^1.1.1, entities@~1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+entities@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436"
+ integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==
+
+envinfo@^7.5.1:
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236"
+ integrity sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ==
+
+eol@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd"
+ integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+error-stack-parser@^2.0.0, error-stack-parser@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8"
+ integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==
+ dependencies:
+ stackframe "^1.1.1"
+
+es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5:
+ version "1.17.5"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
+ integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.1.5"
+ is-regex "^1.0.5"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimleft "^2.1.1"
+ string.prototype.trimright "^2.1.1"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@^0.10.35, es5-ext@^0.10.50:
+ version "0.10.53"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
+ integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
+ dependencies:
+ es6-iterator "~2.0.3"
+ es6-symbol "~3.1.3"
+ next-tick "~1.0.0"
+
+es6-iterator@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
+es6-symbol@^3.1.1, es6-symbol@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+ integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+ dependencies:
+ d "^1.0.1"
+ ext "^1.1.2"
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-config-react-app@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df"
+ integrity sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==
+ dependencies:
+ confusing-browser-globals "^1.0.9"
+
+eslint-import-resolver-node@^0.3.2:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
+ integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.13.1"
+
+eslint-loader@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337"
+ integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==
+ dependencies:
+ loader-fs-cache "^1.0.0"
+ loader-utils "^1.0.2"
+ object-assign "^4.0.1"
+ object-hash "^1.1.4"
+ rimraf "^2.6.1"
+
+eslint-module-utils@^2.4.1:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
+ integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
+ dependencies:
+ debug "^2.6.9"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-flowtype@^3.13.0:
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz#e241ebd39c0ce519345a3f074ec1ebde4cf80f2c"
+ integrity sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==
+ dependencies:
+ lodash "^4.17.15"
+
+eslint-plugin-graphql@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-graphql/-/eslint-plugin-graphql-3.1.1.tgz#640f7f73f12cee2f7145140bd2ff21694018bff5"
+ integrity sha512-VNu2AipS8P1BAnE/tcJ2EmBWjFlCnG+1jKdUlFNDQjocWZlFiPpMu9xYNXePoEXK+q+jG51M/6PdhOjEgJZEaQ==
+ dependencies:
+ graphql-config "^2.0.1"
+ lodash "^4.11.1"
+
+eslint-plugin-import@^2.20.2:
+ version "2.20.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d"
+ integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==
+ dependencies:
+ array-includes "^3.0.3"
+ array.prototype.flat "^1.2.1"
+ contains-path "^0.1.0"
+ debug "^2.6.9"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.2"
+ eslint-module-utils "^2.4.1"
+ has "^1.0.3"
+ minimatch "^3.0.4"
+ object.values "^1.1.0"
+ read-pkg-up "^2.0.0"
+ resolve "^1.12.0"
+
+eslint-plugin-jsx-a11y@^6.2.3:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa"
+ integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==
+ dependencies:
+ "@babel/runtime" "^7.4.5"
+ aria-query "^3.0.0"
+ array-includes "^3.0.3"
+ ast-types-flow "^0.0.7"
+ axobject-query "^2.0.2"
+ damerau-levenshtein "^1.0.4"
+ emoji-regex "^7.0.2"
+ has "^1.0.3"
+ jsx-ast-utils "^2.2.1"
+
+eslint-plugin-react-hooks@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
+ integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
+
+eslint-plugin-react@^7.20.0:
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3"
+ integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==
+ dependencies:
+ array-includes "^3.1.1"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.2.3"
+ object.entries "^1.1.1"
+ object.fromentries "^2.0.2"
+ object.values "^1.1.1"
+ prop-types "^15.7.2"
+ resolve "^1.15.1"
+ string.prototype.matchall "^4.0.2"
+ xregexp "^4.3.0"
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
+ integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd"
+ integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+ integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+
+eslint@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
+ integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ ajv "^6.10.0"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^1.4.3"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.1.2"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ inquirer "^7.0.0"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.14"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.3"
+ progress "^2.0.0"
+ regexpp "^2.0.1"
+ semver "^6.1.2"
+ strip-ansi "^5.2.0"
+ strip-json-comments "^3.0.1"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^6.1.2:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
+ integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-jsx "^5.2.0"
+ eslint-visitor-keys "^1.1.0"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
+ integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^4.1.0, estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
+ integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
+
+estree-walker@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
+ integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+event-source-polyfill@^1.0.14:
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/event-source-polyfill/-/event-source-polyfill-1.0.15.tgz#a28e116281be677af4b055b67d95517e35c92435"
+ integrity sha512-IVmd8jWwX6ag5rXIdVCPBjBChiHBceLb1/7aKPIK7CUeJ5Br7alx029+ZpQlK4jW4Hk2qncy3ClJP97S8ltvmg==
+
+eventemitter3@^3.1.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+ integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+
+eventemitter3@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
+ integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
+
+events@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
+ integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==
+
+eventsource@0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
+ integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=
+ dependencies:
+ original ">=0.0.5"
+
+eventsource@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
+ integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
+ dependencies:
+ original "^1.0.0"
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+exec-buffer@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b"
+ integrity sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==
+ dependencies:
+ execa "^0.7.0"
+ p-finally "^1.0.0"
+ pify "^3.0.0"
+ rimraf "^2.5.4"
+ tempfile "^2.0.0"
+
+execa@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
+ integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
+ integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ p-finally "^2.0.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+execa@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.2.tgz#ad87fb7b2d9d564f70d2b62d511bee41d5cbb240"
+ integrity sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+executable@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c"
+ integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==
+ dependencies:
+ pify "^2.2.0"
+
+exif-parser@^0.1.12:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
+ integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-template@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+ integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+express-graphql@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.9.0.tgz#00fd8552f866bac5c9a4612b2c4c82076107b3c2"
+ integrity sha512-wccd9Lb6oeJ8yHpUs/8LcnGjFUUQYmOG9A5BNLybRdCzGw0PeUrtBxsIR8bfiur6uSW4OvPkVDoYH06z6/N9+w==
+ dependencies:
+ accepts "^1.3.7"
+ content-type "^1.0.4"
+ http-errors "^1.7.3"
+ raw-body "^2.4.1"
+
+express@^4.17.1:
+ version "4.17.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
+ integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
+ dependencies:
+ accepts "~1.3.7"
+ array-flatten "1.1.1"
+ body-parser "1.19.0"
+ content-disposition "0.5.3"
+ content-type "~1.0.4"
+ cookie "0.4.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "~1.1.2"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.5"
+ qs "6.7.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.1.2"
+ send "0.17.1"
+ serve-static "1.14.1"
+ setprototypeof "1.1.1"
+ statuses "~1.5.0"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+ext-list@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37"
+ integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==
+ dependencies:
+ mime-db "^1.28.0"
+
+ext-name@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6"
+ integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==
+ dependencies:
+ ext-list "^2.0.0"
+ sort-keys-length "^1.0.0"
+
+ext@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
+ integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
+ dependencies:
+ type "^2.0.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^2.0.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+ integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+ dependencies:
+ chardet "^0.4.0"
+ iconv-lite "^0.4.17"
+ tmp "^0.0.33"
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extract-files@^8.0.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-8.1.0.tgz#46a0690d0fe77411a2e3804852adeaa65cd59288"
+ integrity sha512-PTGtfthZK79WUMk+avLmwx3NGdU8+iVFXC2NMGxKsn0MnihOG2lvumj+AZo8CTwTrwjXDgZ5tztbRlEdRjBonQ==
+
+extsprintf@1.3.0, extsprintf@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+fast-deep-equal@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
+ integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
+
+fast-glob@^2.0.2, fast-glob@^2.2.2:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+ integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
+ dependencies:
+ "@mrmlnc/readdir-enhanced" "^2.2.1"
+ "@nodelib/fs.stat" "^1.1.2"
+ glob-parent "^3.1.0"
+ is-glob "^4.0.0"
+ merge2 "^1.2.3"
+ micromatch "^3.1.10"
+
+fast-glob@^3.0.3, fast-glob@^3.1.1:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d"
+ integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastparse@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
+ integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
+
+fastq@^1.6.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481"
+ integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==
+ dependencies:
+ reusify "^1.0.4"
+
+faye-websocket@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
+ integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+faye-websocket@~0.11.0, faye-websocket@~0.11.1:
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
+ integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
+fbjs-css-vars@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8"
+ integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==
+
+fbjs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a"
+ integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==
+ dependencies:
+ core-js "^2.4.1"
+ fbjs-css-vars "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.18"
+
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
+ dependencies:
+ pend "~1.2.0"
+
+fd@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/fd/-/fd-0.0.3.tgz#b3240de86dbf5a345baae7382a07d4713566ff0c"
+ integrity sha512-iAHrIslQb3U68OcMSP0kkNWabp7sSN6d2TBSb2JO3gcLJVDd4owr/hKM4SFJovFOUeeXeItjYgouEDTMWiVAnA==
+
+figgy-pudding@^3.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+ integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+
+figures@^1.3.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+figures@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+file-loader@^1.1.11:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8"
+ integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^0.4.5"
+
+file-type@5.2.0, file-type@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
+ integrity sha1-LdvqfHP/42No365J3DOMBYwritY=
+
+file-type@^10.7.0:
+ version "10.11.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-10.11.0.tgz#2961d09e4675b9fb9a3ee6b69e9cd23f43fd1890"
+ integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==
+
+file-type@^12.4.2:
+ version "12.4.2"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-12.4.2.tgz#a344ea5664a1d01447ee7fb1b635f72feb6169d9"
+ integrity sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==
+
+file-type@^3.8.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
+ integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
+
+file-type@^4.2.0, file-type@^4.3.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5"
+ integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU=
+
+file-type@^6.1.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
+ integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==
+
+file-type@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c"
+ integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==
+
+file-type@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18"
+ integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+filename-reserved-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
+ integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik=
+
+filenamify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9"
+ integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==
+ dependencies:
+ filename-reserved-regex "^2.0.0"
+ strip-outer "^1.0.0"
+ trim-repeated "^1.0.0"
+
+filesize@3.5.11:
+ version "3.5.11"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee"
+ integrity sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+finalhandler@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
+ unpipe "~1.0.0"
+
+find-cache-dir@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+ integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
+ dependencies:
+ commondir "^1.0.1"
+ mkdirp "^0.5.1"
+ pkg-dir "^1.0.0"
+
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-root@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-versions@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e"
+ integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==
+ dependencies:
+ semver-regex "^2.0.0"
+
+find-yarn-workspace-root@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db"
+ integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==
+ dependencies:
+ fs-extra "^4.0.3"
+ micromatch "^3.1.4"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flat@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
+ integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
+ dependencies:
+ is-buffer "~2.0.3"
+
+flatted@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
+ integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+fn-name@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c"
+ integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA==
+
+focus-lock@^0.6.7:
+ version "0.6.8"
+ resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.8.tgz#61985fadfa92f02f2ee1d90bc738efaf7f3c9f46"
+ integrity sha512-vkHTluRCoq9FcsrldC0ulQHiyBYgVJB2CX53I8r0nTC6KnEij7Of0jpBspjt3/CuNb6fyoj3aOh9J2HgQUM0og==
+
+follow-redirects@1.5.10, follow-redirects@^1.0.0:
+ version "1.5.10"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
+ integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
+ dependencies:
+ debug "=3.1.0"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@3.0.0, form-data@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
+ integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+formik@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/formik/-/formik-2.1.4.tgz#8deef07ec845ea98f75e03da4aad7aab4ac46570"
+ integrity sha512-oKz8S+yQBzuQVSEoxkqqJrKQS5XJASWGVn6mrs+oTWrBoHgByVwwI1qHiVc9GKDpZBU9vAxXYAKz2BvujlwunA==
+ dependencies:
+ deepmerge "^2.1.1"
+ hoist-non-react-statics "^3.3.0"
+ lodash "^4.17.14"
+ lodash-es "^4.17.14"
+ react-fast-compare "^2.0.1"
+ scheduler "^0.18.0"
+ tiny-warning "^1.0.2"
+ tslib "^1.10.0"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from2@^2.1.0, from2@^2.1.1:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-exists-cached@1.0.0, fs-exists-cached@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce"
+ integrity sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=
+
+fs-extra@9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3"
+ integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^1.0.0"
+
+fs-extra@^4.0.2, fs-extra@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
+ integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+ integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+fsevents@~2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
+ integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+gatsby-admin@^0.1.56:
+ version "0.1.56"
+ resolved "https://registry.yarnpkg.com/gatsby-admin/-/gatsby-admin-0.1.56.tgz#cc4b9b010e89b7bc5a3d5cbd7238f2790b8cc129"
+ integrity sha512-ElOqF6tizHfHstrCRfI+XxCoENNoQX7F6/COu3RDts7RLco1roqeG9vep2bXBP4cdono9TkMb2LZOVcmrciiKA==
+ dependencies:
+ "@emotion/core" "^10.0.28"
+ "@emotion/styled" "^10.0.27"
+ "@typescript-eslint/eslint-plugin" "^2.28.0"
+ "@typescript-eslint/parser" "^2.28.0"
+ csstype "^2.6.10"
+ formik "^2.1.4"
+ gatsby "^2.22.15"
+ gatsby-interface "0.0.163"
+ gatsby-plugin-typescript "^2.4.3"
+ gatsby-source-graphql "^2.5.2"
+ react "^16.12.0"
+ react-dom "^16.12.0"
+ react-icons "^3.10.0"
+ strict-ui "^0.1.2"
+ subscriptions-transport-ws "^0.9.16"
+ theme-ui "^0.4.0-alpha.3"
+ typescript "^3.9.2"
+ urql "^1.9.7"
+ yup "^0.29.0"
+
+gatsby-cli@^2.12.40:
+ version "2.12.40"
+ resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.12.40.tgz#d80d5dfd0d188d9a0e5a792cb5007279b2b46569"
+ integrity sha512-iLZSHOb8IObc6e8VluV0AXsY8p7E37CUAL/Dknh79cJC6kkjVpfPwZnlaJa/8b+sxXCfJJkKTeEwYW0YbSsHbA==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/runtime" "^7.9.6"
+ "@hapi/joi" "^15.1.1"
+ better-opn "^1.0.0"
+ bluebird "^3.7.2"
+ chalk "^2.4.2"
+ clipboardy "^2.3.0"
+ common-tags "^1.8.0"
+ configstore "^5.0.1"
+ convert-hrtime "^3.0.0"
+ core-js "^2.6.11"
+ envinfo "^7.5.1"
+ execa "^3.4.0"
+ fs-exists-cached "^1.0.0"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.3"
+ gatsby-recipes "^0.1.34"
+ gatsby-telemetry "^1.3.9"
+ hosted-git-info "^3.0.4"
+ ink "^2.7.1"
+ ink-spinner "^3.0.1"
+ is-valid-path "^0.1.1"
+ lodash "^4.17.15"
+ meant "^1.0.1"
+ node-fetch "^2.6.0"
+ object.entries "^1.1.1"
+ opentracing "^0.14.4"
+ pretty-error "^2.1.1"
+ progress "^2.0.3"
+ prompts "^2.3.2"
+ react "^16.8.0"
+ redux "^4.0.5"
+ resolve-cwd "^3.0.0"
+ semver "^6.3.0"
+ signal-exit "^3.0.3"
+ source-map "0.7.3"
+ stack-trace "^0.0.10"
+ strip-ansi "^5.2.0"
+ update-notifier "^3.0.1"
+ uuid "3.4.0"
+ yargs "^15.3.1"
+ yurnalist "^1.1.2"
+
+gatsby-core-utils@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-1.3.3.tgz#f721600994c91743f3815e0c2c54f3f3947dbd62"
+ integrity sha512-kRcC7Fsn7puGeJERK5EZ3x4drPOnnYNlFygl1tEbpFIKdOhsWRlRF8es7uaqwyZBtBYJHVHHjCyJszRiJRZ5Sw==
+ dependencies:
+ ci-info "2.0.0"
+ configstore "^5.0.1"
+ fs-extra "^8.1.0"
+ node-object-hash "^2.0.0"
+ proper-lockfile "^4.1.1"
+ xdg-basedir "^4.0.0"
+
+gatsby-design-tokens@^2.0.2:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/gatsby-design-tokens/-/gatsby-design-tokens-2.0.6.tgz#593aa969e360560369fc59054c01236beed9be7d"
+ integrity sha512-N5lf7ajRz5Uc26U/c+/Xc1VDBSFNZiQYjKMacOPFiB9U8Z4exuIv08MKWHFRJiXZeK911WATXs/IoWmcWxJJrw==
+ dependencies:
+ hex2rgba "^0.0.1"
+
+gatsby-graphiql-explorer@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.4.3.tgz#fe005b4e176a3b49cb9f822f85c977afcdf3e613"
+ integrity sha512-PrHSyYS3pWn/3u94cvNcCFwvozIwX5t5ER+xzhQzoq2pygO4Vd3VNPMCTLN8+ZZR5utiRpvgBZZ6f3NCIR6Mpg==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+
+gatsby-image@^2.4.5:
+ version "2.4.5"
+ resolved "https://registry.yarnpkg.com/gatsby-image/-/gatsby-image-2.4.5.tgz#c14f549a224a0306e20c1b39f3f6fef41b0918f6"
+ integrity sha512-XqSUEJX42ufWuce8JXaDRYKxpFBUqVoNRhG2lGABUenwUqLc2UAYebb5xXUQ7HZJciGi5HdoJtWuZOy5NzphsA==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ object-fit-images "^3.2.4"
+ prop-types "^15.7.2"
+
+gatsby-interface@0.0.163:
+ version "0.0.163"
+ resolved "https://registry.yarnpkg.com/gatsby-interface/-/gatsby-interface-0.0.163.tgz#49fc1dd82a92b260f0af85172f6018cd097952c2"
+ integrity sha512-dZLbdmMzl98nWKlZI8Myqj1M1orldjXckHGSnDKamfM2nNNhmqZcM503zgolHorXtf0SkReB2KquAYb85wb15A==
+ dependencies:
+ "@mdx-js/react" "^1.5.2"
+ "@reach/alert" "^0.10.1"
+ "@reach/combobox" "^0.10.1"
+ "@reach/dialog" "^0.10.1"
+ "@reach/menu-button" "^0.10.1"
+ "@reach/popover" "^0.10.1"
+ "@reach/tabs" "0.10.1"
+ "@reach/tooltip" "^0.10.1"
+ "@types/lodash.sample" "^4.2.6"
+ case "^1.6.2"
+ date-fns "^2.8.1"
+ gatsby-design-tokens "^2.0.2"
+ lodash.sample "^4.2.1"
+ theme-ui "^0.2.49"
+
+gatsby-link@^2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-2.4.3.tgz#e13b75ca86d172b7338761c9aa335f1746db3c4b"
+ integrity sha512-nQ9T9T91TxPIuf0HuHxTQ/oFjXg0hi4tF39X8IjWj7YNk4kKct0l2Jaztk/RzsZ930x6AtgGt6x6ukWic4zQKQ==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ "@types/reach__router" "^1.3.3"
+ prop-types "^15.7.2"
+
+gatsby-page-utils@^0.2.7:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/gatsby-page-utils/-/gatsby-page-utils-0.2.7.tgz#3b4a3a4aee9e31143bca8b98fdb6d772d64ff4da"
+ integrity sha512-YhsTtAP1K9bzj3awlG4nHKHZyITbPxUaP/7QSEeA7Gi02BNHmMlfQ9VPSFl2/3zHri9m2DIS5aJLSbsitHTJIw==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ bluebird "^3.7.2"
+ chokidar "3.4.0"
+ fs-exists-cached "^1.0.0"
+ gatsby-core-utils "^1.3.3"
+ glob "^7.1.6"
+ lodash "^4.17.15"
+ micromatch "^3.1.10"
+
+gatsby-plugin-linaria@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-linaria/-/gatsby-plugin-linaria-2.0.0.tgz#387be2e4e9a28b763695755e39b2f17953151d04"
+ integrity sha512-n7jvvc7bmTPY2J+tL9NAoq63mNTIKOsvMWD0p+Ktq7hFWwXZDwrWvaRgjPTa24ZqgwImC2vc8/RQS/VzM2VePQ==
+
+gatsby-plugin-manifest@^2.4.9:
+ version "2.4.9"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.4.9.tgz#f211d87cf3d06a5bfd0619b6844b156abd837d43"
+ integrity sha512-uFz6/VsepGqai9jaCI2EWTbg2ICX60ZM63RxeCm8xO9m6B3VLxh0NShpU81IoWi7aQfj9iyD2LZiIu3JcnSj+g==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ gatsby-core-utils "^1.3.3"
+ semver "^5.7.1"
+ sharp "^0.25.1"
+
+gatsby-plugin-offline@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-offline/-/gatsby-plugin-offline-3.2.7.tgz#6afab6c485dcc4cbbe433232703794ca8ac8407d"
+ integrity sha512-nILi//N6gS8Ils0JQ4bPUSAFzaNXp2cMl/im1JtoZl7V22GhLMPtCmNx4PykBoq3pt/nRubNHfHc2SitH6oXDA==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ cheerio "^1.0.0-rc.3"
+ gatsby-core-utils "^1.3.3"
+ glob "^7.1.6"
+ idb-keyval "^3.2.0"
+ lodash "^4.17.15"
+ workbox-build "^4.3.1"
+
+gatsby-plugin-page-creator@^2.3.7:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.3.7.tgz#c7c8e2a045ca5107775f57515c506e3c143bada4"
+ integrity sha512-2hUTP5yEvG9JUrVPjbUGiUcMERwimge+JMEV0806EaITQrpzp6zkiTVD/NHyeJzm6f0BWZr0Q2slI9iJYEXbJQ==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ bluebird "^3.7.2"
+ fs-exists-cached "^1.0.0"
+ gatsby-page-utils "^0.2.7"
+ glob "^7.1.6"
+ lodash "^4.17.15"
+ micromatch "^3.1.10"
+
+gatsby-plugin-react-helmet@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.3.2.tgz#5619a1808d9607eb89c19d3f04854f497c6fb890"
+ integrity sha512-uRZlX4ejy0Txlw+9qbIVkULsuc6iniSwDgD+Ed6BOryKmF42qaqmdbcc78ZwPVN2SZJCDhcZKXoJf6QftTwwDg==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+
+gatsby-plugin-sharp@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.6.9.tgz#e18b6f3cf83c1ae09fdf975947b88af01e51b72c"
+ integrity sha512-H90sUQoFxSYN1n7awKfzidltyf+Ho5YpVZxSdEnv3nermNT07sLLarCz3Mtg7DKnxSePmXuWz6Mu30+CgToQ0g==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ async "^2.6.3"
+ bluebird "^3.7.2"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.3"
+ got "^8.3.2"
+ imagemin "^6.1.0"
+ imagemin-mozjpeg "^8.0.0"
+ imagemin-pngquant "^6.0.1"
+ imagemin-webp "^5.1.0"
+ lodash "^4.17.15"
+ mini-svg-data-uri "^1.2.3"
+ potrace "^2.1.6"
+ probe-image-size "^4.1.1"
+ progress "^2.0.3"
+ semver "^5.7.1"
+ sharp "^0.25.1"
+ svgo "1.3.2"
+ uuid "^3.4.0"
+
+gatsby-plugin-typescript@^2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-typescript/-/gatsby-plugin-typescript-2.4.3.tgz#07393d842d8cb6fd3d0fcdafee36ab3ff55ab32b"
+ integrity sha512-smD3IlOigNR5gNQwRAp6TH4czsZ8mpO+WMxoE3M0G49JR/aj2kgh85pzB0yRWpq0/oUUf9guatQJxGhvUWUJYg==
+ dependencies:
+ "@babel/core" "^7.9.6"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-proposal-numeric-separator" "^7.8.3"
+ "@babel/plugin-proposal-optional-chaining" "^7.9.0"
+ "@babel/preset-typescript" "^7.9.0"
+ "@babel/runtime" "^7.9.6"
+ babel-plugin-remove-graphql-queries "^2.9.2"
+
+gatsby-react-router-scroll@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-3.0.1.tgz#e9fe3e27a6b0a6bdbf2f54859b138e87cb858271"
+ integrity sha512-sozpkBv9BZoGpzwlZwSc7CeHHM67yl79jv/oEky7jZmw/7b8u5fxlGUjHPl7vNzk8y2FhiYh121Kv7VMHZi6QA==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ scroll-behavior "^0.9.12"
+ warning "^3.0.0"
+
+gatsby-recipes@^0.1.34:
+ version "0.1.34"
+ resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.1.34.tgz#f8a639738daca8679e0d9250d92a7287771d5e52"
+ integrity sha512-QriLHGD96pNMMqac2HEvAu06fEdqcZpz04emaxvahC1h+1zhab3dCX+Fka827Nh3qNxqkccbvZDXINUyZsMzBQ==
+ dependencies:
+ "@babel/core" "^7.9.6"
+ "@babel/generator" "^7.9.6"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-transform-react-jsx" "^7.9.4"
+ "@babel/standalone" "^7.9.6"
+ "@babel/template" "^7.8.6"
+ "@babel/types" "^7.9.6"
+ "@hapi/hoek" "8.x.x"
+ "@hapi/joi" "^15.1.1"
+ "@mdx-js/mdx" "^1.6.1"
+ "@mdx-js/react" "^1.6.1"
+ "@mdx-js/runtime" "^1.6.1"
+ acorn "^7.2.0"
+ acorn-jsx "^5.2.0"
+ cors "^2.8.5"
+ debug "^4.1.1"
+ detect-port "^1.3.0"
+ execa "^4.0.1"
+ express "^4.17.1"
+ express-graphql "^0.9.0"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.3"
+ gatsby-telemetry "^1.3.9"
+ glob "^7.1.6"
+ graphql "^14.6.0"
+ graphql-compose "^6.3.8"
+ graphql-subscriptions "^1.1.0"
+ graphql-tools "^6.0.1"
+ graphql-type-json "^0.3.1"
+ hicat "^0.7.0"
+ html-tag-names "^1.1.5"
+ ink "^2.7.1"
+ ink-box "^1.0.0"
+ ink-link "^1.1.0"
+ ink-select-input "^3.1.2"
+ ink-spinner "^3.0.1"
+ is-binary-path "^2.1.0"
+ is-blank "^2.1.0"
+ is-string "^1.0.5"
+ is-url "^1.2.4"
+ jest-diff "^25.5.0"
+ lodash "^4.17.15"
+ mkdirp "^0.5.1"
+ node-fetch "^2.6.0"
+ pkg-dir "^4.2.0"
+ prettier "^2.0.5"
+ react-reconciler "^0.25.1"
+ remark-mdx "^1.6.1"
+ remark-parse "^6.0.3"
+ remark-stringify "^8.0.0"
+ resolve-cwd "^3.0.0"
+ semver "^7.3.2"
+ single-trailing-newline "^1.0.0"
+ style-to-object "^0.3.0"
+ subscriptions-transport-ws "^0.9.16"
+ svg-tag-names "^2.0.1"
+ unified "^8.4.2"
+ unist-util-visit "^2.0.2"
+ urql "^1.9.7"
+ ws "^7.3.0"
+ xstate "^4.9.1"
+
+gatsby-source-filesystem@^2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-2.3.8.tgz#c1902fefdd700f2b34eea2d6dcd75543e49f90e2"
+ integrity sha512-b+K1WU8x7Ekxf1f7FrSAtjOkHhWTlrDJhubkA38SUgSbmKDotTOoU+bLi7PlnA3GgUnZ9kGSvzXNImRc6fFPCg==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ better-queue "^3.8.10"
+ bluebird "^3.7.2"
+ chokidar "3.4.0"
+ file-type "^12.4.2"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.3"
+ got "^9.6.0"
+ md5-file "^3.2.3"
+ mime "^2.4.5"
+ pretty-bytes "^5.3.0"
+ progress "^2.0.3"
+ read-chunk "^3.2.0"
+ valid-url "^1.0.9"
+ xstate "^4.9.1"
+
+gatsby-source-graphql@^2.5.2:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/gatsby-source-graphql/-/gatsby-source-graphql-2.5.2.tgz#33136b51f90a15f07b665aa4765fb549f49c47d3"
+ integrity sha512-aM96mHFPNWE2GSIaK6KcuL4tDYOmejO9cxQWs8adpJBYw8SiEOy604dAMDPaHCtOSM+LySz8BjjWu0CSUhcxrA==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ apollo-link "1.2.14"
+ apollo-link-http "^1.5.17"
+ dataloader "^2.0.0"
+ graphql "^14.6.0"
+ graphql-tools "^5.0.0"
+ invariant "^2.2.4"
+ node-fetch "^1.7.3"
+ uuid "^3.4.0"
+
+gatsby-telemetry@^1.3.9:
+ version "1.3.9"
+ resolved "https://registry.yarnpkg.com/gatsby-telemetry/-/gatsby-telemetry-1.3.9.tgz#8ac311f6b3139cdf8e562b23a0e87d917de9ac0b"
+ integrity sha512-jnv+nOrmFigaBd8LAdoGDDdHVTj4a06QcfiPW1P+bYl5WibaUkCEtKgQEpuu8OMvwErXFO5FFMHpiwLITcNIEw==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/runtime" "^7.9.6"
+ bluebird "^3.7.2"
+ boxen "^4.2.0"
+ configstore "^5.0.1"
+ envinfo "^7.5.1"
+ fs-extra "^8.1.0"
+ gatsby-core-utils "^1.3.3"
+ git-up "4.0.1"
+ is-docker "2.0.0"
+ lodash "^4.17.15"
+ node-fetch "2.6.0"
+ resolve-cwd "^2.0.0"
+ source-map "^0.7.3"
+ stack-trace "^0.0.10"
+ stack-utils "1.0.2"
+ uuid "3.4.0"
+
+gatsby-transformer-sharp@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.5.3.tgz#0403c916ce3b96ce244a2b7bbcd11e0d4d8611e4"
+ integrity sha512-tUkH1uCdwSLeOqjptYQD6V/UH5U18UQPFzwKvhWRepcl//FvmCnOv5Kn03SpeBCuPeccxKt3kT3UVJxdOOGShw==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ bluebird "^3.7.2"
+ fs-extra "^8.1.0"
+ potrace "^2.1.6"
+ probe-image-size "^4.1.1"
+ semver "^5.7.1"
+ sharp "^0.25.1"
+
+gatsby@^2.22.15:
+ version "2.22.15"
+ resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.22.15.tgz#63ea14353b1d67a05b90b68d90aa5e41592e5081"
+ integrity sha512-HBcdofBKZoa78EonTgbUuw46iA02OEXzMixPzyvPD6rNWOH93FnlhwbVt9yGsBYRl7gFrkzA8TANpR7P6Zhhbg==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/core" "^7.9.6"
+ "@babel/parser" "^7.9.6"
+ "@babel/polyfill" "^7.8.7"
+ "@babel/runtime" "^7.9.6"
+ "@babel/traverse" "^7.9.6"
+ "@hapi/joi" "^15.1.1"
+ "@mikaelkristiansson/domready" "^1.0.10"
+ "@pieh/friendly-errors-webpack-plugin" "1.7.0-chalk-2"
+ "@pmmmwh/react-refresh-webpack-plugin" "^0.3.1"
+ "@reach/router" "^1.3.3"
+ "@types/http-proxy" "^1.17.4"
+ "@typescript-eslint/eslint-plugin" "^2.24.0"
+ "@typescript-eslint/parser" "^2.24.0"
+ address "1.1.2"
+ autoprefixer "^9.8.0"
+ axios "^0.19.2"
+ babel-core "7.0.0-bridge.0"
+ babel-eslint "^10.1.0"
+ babel-loader "^8.1.0"
+ babel-plugin-add-module-exports "^0.3.3"
+ babel-plugin-dynamic-import-node "^2.3.3"
+ babel-plugin-remove-graphql-queries "^2.9.2"
+ babel-preset-gatsby "^0.4.7"
+ better-opn "1.0.0"
+ better-queue "^3.8.10"
+ bluebird "^3.7.2"
+ browserslist "^4.12.0"
+ cache-manager "^2.11.1"
+ cache-manager-fs-hash "^0.0.8"
+ chalk "^2.4.2"
+ chokidar "3.4.0"
+ common-tags "^1.8.0"
+ compression "^1.7.4"
+ convert-hrtime "^3.0.0"
+ copyfiles "^2.2.0"
+ core-js "^2.6.11"
+ cors "^2.8.5"
+ css-loader "^1.0.1"
+ date-fns "^2.14.0"
+ debug "^3.2.6"
+ del "^5.1.0"
+ detect-port "^1.3.0"
+ devcert "^1.1.0"
+ dotenv "^8.2.0"
+ eslint "^6.8.0"
+ eslint-config-react-app "^5.2.1"
+ eslint-loader "^2.2.1"
+ eslint-plugin-flowtype "^3.13.0"
+ eslint-plugin-graphql "^3.1.1"
+ eslint-plugin-import "^2.20.2"
+ eslint-plugin-jsx-a11y "^6.2.3"
+ eslint-plugin-react "^7.20.0"
+ eslint-plugin-react-hooks "^1.7.0"
+ event-source-polyfill "^1.0.14"
+ express "^4.17.1"
+ express-graphql "^0.9.0"
+ fast-levenshtein "^2.0.6"
+ file-loader "^1.1.11"
+ flat "^4.1.0"
+ fs-exists-cached "1.0.0"
+ fs-extra "^8.1.0"
+ gatsby-admin "^0.1.56"
+ gatsby-cli "^2.12.40"
+ gatsby-core-utils "^1.3.3"
+ gatsby-graphiql-explorer "^0.4.3"
+ gatsby-link "^2.4.3"
+ gatsby-plugin-page-creator "^2.3.7"
+ gatsby-plugin-typescript "^2.4.3"
+ gatsby-react-router-scroll "^3.0.1"
+ gatsby-telemetry "^1.3.9"
+ glob "^7.1.6"
+ got "8.3.2"
+ graphql "^14.6.0"
+ graphql-compose "^6.3.8"
+ graphql-playground-middleware-express "^1.7.14"
+ hasha "^5.2.0"
+ http-proxy "^1.18.1"
+ invariant "^2.2.4"
+ is-relative "^1.0.0"
+ is-relative-url "^3.0.0"
+ is-wsl "^2.2.0"
+ jest-worker "^24.9.0"
+ json-loader "^0.5.7"
+ json-stringify-safe "^5.0.1"
+ latest-version "5.1.0"
+ lodash "^4.17.15"
+ md5 "^2.2.1"
+ md5-file "^3.2.3"
+ meant "^1.0.1"
+ micromatch "^3.1.10"
+ mime "^2.4.5"
+ mini-css-extract-plugin "^0.8.2"
+ mitt "^1.2.0"
+ mkdirp "^0.5.1"
+ moment "^2.25.3"
+ name-all-modules-plugin "^1.0.1"
+ normalize-path "^2.1.1"
+ null-loader "^3.0.0"
+ opentracing "^0.14.4"
+ optimize-css-assets-webpack-plugin "^5.0.3"
+ p-defer "^3.0.0"
+ parseurl "^1.3.3"
+ physical-cpu-count "^2.0.0"
+ pnp-webpack-plugin "^1.6.4"
+ postcss-flexbugs-fixes "^4.2.1"
+ postcss-loader "^3.0.0"
+ prompts "^2.3.2"
+ prop-types "^15.7.2"
+ query-string "^6.12.1"
+ raw-loader "^0.5.1"
+ react-dev-utils "^4.2.3"
+ react-error-overlay "^3.0.0"
+ react-hot-loader "^4.12.21"
+ react-refresh "^0.7.0"
+ redux "^4.0.5"
+ redux-thunk "^2.3.0"
+ semver "^5.7.1"
+ shallow-compare "^1.2.2"
+ sift "^5.1.0"
+ signal-exit "^3.0.3"
+ slugify "^1.4.0"
+ socket.io "^2.3.0"
+ socket.io-client "2.3.0"
+ st "^2.0.0"
+ stack-trace "^0.0.10"
+ string-similarity "^1.2.2"
+ style-loader "^0.23.1"
+ terser-webpack-plugin "^1.4.3"
+ tmp "^0.2.1"
+ "true-case-path" "^2.2.1"
+ type-of "^2.0.1"
+ url-loader "^1.1.2"
+ util.promisify "^1.0.1"
+ uuid "^3.4.0"
+ v8-compile-cache "^1.1.2"
+ webpack "~4.43.0"
+ webpack-dev-middleware "^3.7.2"
+ webpack-dev-server "^3.11.0"
+ webpack-hot-middleware "^2.25.0"
+ webpack-merge "^4.2.2"
+ webpack-stats-plugin "^0.3.1"
+ xstate "^4.9.1"
+ yaml-loader "^0.6.0"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gensync@^1.0.0-beta.1:
+ version "1.0.0-beta.1"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
+ integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-nonce@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3"
+ integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-port@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc"
+ integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=
+
+get-proxy@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93"
+ integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==
+ dependencies:
+ npm-conf "^1.1.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stream@3.0.0, get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
+ integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=
+ dependencies:
+ object-assign "^4.0.1"
+ pinkie-promise "^2.0.0"
+
+get-stream@^4.0.0, get-stream@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^5.0.0, get-stream@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
+ integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+git-up@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0"
+ integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw==
+ dependencies:
+ is-ssh "^1.3.0"
+ parse-url "^5.0.0"
+
+github-from-package@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+ integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
+ integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-to-regexp@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+ integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
+glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ 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"
+
+global-dirs@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
+global-modules@1.0.0, global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+global@^4.3.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
+ integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
+ dependencies:
+ min-document "^2.19.0"
+ process "^0.11.10"
+
+global@~4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^12.1.0:
+ version "12.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+ integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ dependencies:
+ type-fest "^0.8.1"
+
+globby@11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.0.tgz#56fd0e9f0d4f8fb0c456f1ab0dee96e1380bc154"
+ integrity sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+globby@^10.0.1:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543"
+ integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.0.3"
+ glob "^7.1.3"
+ ignore "^5.1.1"
+ merge2 "^1.2.3"
+ slash "^3.0.0"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globby@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
+ integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
+ dependencies:
+ array-union "^1.0.1"
+ dir-glob "2.0.0"
+ fast-glob "^2.0.2"
+ glob "^7.1.2"
+ ignore "^3.3.5"
+ pify "^3.0.0"
+ slash "^1.0.0"
+
+got@8.3.2, got@^8.3.1, got@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937"
+ integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==
+ dependencies:
+ "@sindresorhus/is" "^0.7.0"
+ cacheable-request "^2.1.1"
+ decompress-response "^3.3.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ into-stream "^3.1.0"
+ is-retry-allowed "^1.1.0"
+ isurl "^1.0.0-alpha5"
+ lowercase-keys "^1.0.0"
+ mimic-response "^1.0.0"
+ p-cancelable "^0.4.0"
+ p-timeout "^2.0.1"
+ pify "^3.0.0"
+ safe-buffer "^5.1.1"
+ timed-out "^4.0.1"
+ url-parse-lax "^3.0.0"
+ url-to-options "^1.0.1"
+
+got@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"
+ integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==
+ dependencies:
+ decompress-response "^3.2.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ is-plain-obj "^1.1.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ isurl "^1.0.0-alpha5"
+ lowercase-keys "^1.0.0"
+ p-cancelable "^0.3.0"
+ p-timeout "^1.1.1"
+ safe-buffer "^5.0.1"
+ timed-out "^4.0.0"
+ url-parse-lax "^1.0.0"
+ url-to-options "^1.0.1"
+
+got@^9.6.0:
+ version "9.6.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
+ integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
+ dependencies:
+ "@sindresorhus/is" "^0.14.0"
+ "@szmarczak/http-timer" "^1.1.2"
+ cacheable-request "^6.0.0"
+ decompress-response "^3.3.0"
+ duplexer3 "^0.1.4"
+ get-stream "^4.1.0"
+ lowercase-keys "^1.0.1"
+ mimic-response "^1.0.1"
+ p-cancelable "^1.0.0"
+ to-readable-stream "^1.0.0"
+ url-parse-lax "^3.0.0"
+
+graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
+ integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+graphql-compose@^6.3.8:
+ version "6.3.8"
+ resolved "https://registry.yarnpkg.com/graphql-compose/-/graphql-compose-6.3.8.tgz#9f82a85d5001a83adf1f7c4d3b5e5f72c432a062"
+ integrity sha512-o0/jzQEMIpSjryLKwmD1vGrCubiPxD0LxlGTgWDSu38TBepu2GhugC9gYgTEbtiCZAHPtvkZ90SzzABOWZyQLA==
+ dependencies:
+ graphql-type-json "^0.2.4"
+ object-path "^0.11.4"
+
+graphql-config@^2.0.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-2.2.2.tgz#a4b577826bba9b83e7b0f6cd617be43ca67da045"
+ integrity sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==
+ dependencies:
+ graphql-import "^0.7.1"
+ graphql-request "^1.5.0"
+ js-yaml "^3.10.0"
+ lodash "^4.17.4"
+ minimatch "^3.0.4"
+
+graphql-import@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.7.1.tgz#4add8d91a5f752d764b0a4a7a461fcd93136f223"
+ integrity sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw==
+ dependencies:
+ lodash "^4.17.4"
+ resolve-from "^4.0.0"
+
+graphql-playground-html@^1.6.19:
+ version "1.6.20"
+ resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.20.tgz#53a6a497ae3252cd1a7d1e96867fd02538c6e6df"
+ integrity sha512-RkC18un0a1YEm0PoTMGgFQh7kIA6mtp3dUun+6coWtuMLczoNNij6V0DPHEj5kWi8u0qIrSKgSx5kh4pxcCX6g==
+
+graphql-playground-middleware-express@^1.7.14:
+ version "1.7.15"
+ resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.15.tgz#246a938e9bfb9e510ff9a24deaba32fbbf83006d"
+ integrity sha512-Q7bjD1SMT5fiXMgUqstNzkYk9+csbuu5K7uOga9tJlA8x9gOVsSmmIfLi0tjPOrPd4m8icPnKncR73oNA22d5g==
+ dependencies:
+ graphql-playground-html "^1.6.19"
+
+graphql-request@^1.5.0:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-1.8.2.tgz#398d10ae15c585676741bde3fc01d5ca948f8fbe"
+ integrity sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==
+ dependencies:
+ cross-fetch "2.2.2"
+
+graphql-subscriptions@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11"
+ integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==
+ dependencies:
+ iterall "^1.2.1"
+
+graphql-tools@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-5.0.0.tgz#67281c834a0e29f458adba8018f424816fa627e9"
+ integrity sha512-5zn3vtn//382b7G3Wzz3d5q/sh+f7tVrnxeuhTMTJ7pWJijNqLxH7VEzv8VwXCq19zAzHYEosFHfXiK7qzvk7w==
+ dependencies:
+ apollo-link "^1.2.14"
+ apollo-upload-client "^13.0.0"
+ deprecated-decorator "^0.1.6"
+ form-data "^3.0.0"
+ iterall "^1.3.0"
+ node-fetch "^2.6.0"
+ tslib "^1.11.1"
+ uuid "^7.0.3"
+
+graphql-tools@^6.0.1:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-6.0.5.tgz#998d0679639c07925833efb1aa9d5f915617e9a7"
+ integrity sha512-vmJQr0ZmsdCukzXvjDXY4daEkiNnuXZdB6GVByxYQWcrU886CvpyXxS4x28taRP0XUTEmHnJ3IrM+I/IH3VzyA==
+ dependencies:
+ "@graphql-tools/code-file-loader" "6.0.5"
+ "@graphql-tools/delegate" "6.0.5"
+ "@graphql-tools/git-loader" "6.0.5"
+ "@graphql-tools/github-loader" "6.0.5"
+ "@graphql-tools/graphql-file-loader" "6.0.5"
+ "@graphql-tools/graphql-tag-pluck" "6.0.5"
+ "@graphql-tools/import" "6.0.5"
+ "@graphql-tools/json-file-loader" "6.0.5"
+ "@graphql-tools/links" "6.0.5"
+ "@graphql-tools/load" "6.0.5"
+ "@graphql-tools/load-files" "6.0.5"
+ "@graphql-tools/merge" "6.0.5"
+ "@graphql-tools/mock" "6.0.5"
+ "@graphql-tools/module-loader" "6.0.5"
+ "@graphql-tools/relay-operation-optimizer" "6.0.5"
+ "@graphql-tools/resolvers-composition" "6.0.5"
+ "@graphql-tools/schema" "6.0.5"
+ "@graphql-tools/stitch" "6.0.5"
+ "@graphql-tools/url-loader" "6.0.5"
+ "@graphql-tools/utils" "6.0.5"
+ "@graphql-tools/wrap" "6.0.5"
+
+graphql-type-json@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.2.4.tgz#545af27903e40c061edd30840a272ea0a49992f9"
+ integrity sha512-/tq02ayMQjrG4oDFDRLLrPk0KvJXue0nVXoItBe7uAdbNXjQUu+HYCBdAmPLQoseVzUKKMzrhq2P/sfI76ON6w==
+
+graphql-type-json@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.3.1.tgz#47fca2b1fa7adc0758d165b33580d7be7a6cf548"
+ integrity sha512-1lPkUXQ2L8o+ERLzVAuc3rzc/E6pGF+6HnjihCVTK0VzR0jCuUd92FqNxoHdfILXqOn2L6b4y47TBxiPyieUVA==
+
+graphql@^14.6.0:
+ version "14.6.0"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.6.0.tgz#57822297111e874ea12f5cd4419616930cd83e49"
+ integrity sha512-VKzfvHEKybTKjQVpTFrA5yUq2S9ihcZvfJAtsDBBCuV6wauPu1xl/f9ehgVf0FcEJJs4vz6ysb/ZMkGigQZseg==
+ dependencies:
+ iterall "^1.2.2"
+
+gud@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
+ integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
+
+gzip-size@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
+ dependencies:
+ duplexer "^0.1.1"
+
+handle-thing@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
+ integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-binary2@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
+ integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==
+ dependencies:
+ isarray "2.0.1"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+ integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbol-support-x@^1.4.1:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
+ integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==
+
+has-symbols@^1.0.0, has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-to-string-tag-x@^1.2.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
+ integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==
+ dependencies:
+ has-symbol-support-x "^1.4.1"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has-yarn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
+ integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
+
+has@^1.0.0, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+ integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hasha@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.0.tgz#33094d1f69c40a4a6ac7be53d5fe3ff95a269e0c"
+ integrity sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==
+ dependencies:
+ is-stream "^2.0.0"
+ type-fest "^0.8.0"
+
+hast-to-hyperscript@^7.0.0:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-7.0.4.tgz#7c4c037d9a8ea19b0a3fdb676a26448ad922353d"
+ integrity sha512-vmwriQ2H0RPS9ho4Kkbf3n3lY436QKLq6VaGA1pzBh36hBi3tm1DO9bR+kaJIbpT10UqaANDkMjxvjVfr+cnOA==
+ dependencies:
+ comma-separated-tokens "^1.0.0"
+ property-information "^5.3.0"
+ space-separated-tokens "^1.0.0"
+ style-to-object "^0.2.1"
+ unist-util-is "^3.0.0"
+ web-namespaces "^1.1.2"
+
+hast-util-from-parse5@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c"
+ integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==
+ dependencies:
+ ccount "^1.0.3"
+ hastscript "^5.0.0"
+ property-information "^5.0.0"
+ web-namespaces "^1.1.2"
+ xtend "^4.0.1"
+
+hast-util-parse-selector@^2.0.0:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz#60c99d0b519e12ab4ed32e58f150ec3f61ed1974"
+ integrity sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==
+
+hast-util-raw@5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-5.0.2.tgz#62288f311ec2f35e066a30d5e0277f963ad43a67"
+ integrity sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==
+ dependencies:
+ hast-util-from-parse5 "^5.0.0"
+ hast-util-to-parse5 "^5.0.0"
+ html-void-elements "^1.0.0"
+ parse5 "^5.0.0"
+ unist-util-position "^3.0.0"
+ web-namespaces "^1.0.0"
+ xtend "^4.0.0"
+ zwitch "^1.0.0"
+
+hast-util-to-parse5@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-5.1.2.tgz#09d27bee9ba9348ea05a6cfcc44e02f9083969b6"
+ integrity sha512-ZgYLJu9lYknMfsBY0rBV4TJn2xiwF1fXFFjbP6EE7S0s5mS8LIKBVWzhA1MeIs1SWW6GnnE4In6c3kPb+CWhog==
+ dependencies:
+ hast-to-hyperscript "^7.0.0"
+ property-information "^5.0.0"
+ web-namespaces "^1.0.0"
+ xtend "^4.0.0"
+ zwitch "^1.0.0"
+
+hastscript@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a"
+ integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==
+ dependencies:
+ comma-separated-tokens "^1.0.0"
+ hast-util-parse-selector "^2.0.0"
+ property-information "^5.0.0"
+ space-separated-tokens "^1.0.0"
+
+he@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+hex-color-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
+ integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
+
+hex2rgba@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/hex2rgba/-/hex2rgba-0.0.1.tgz#8701ba1c6ec02c204504158407c1c4b47a9336ed"
+ integrity sha1-hwG6HG7ALCBFBBWEB8HEtHqTNu0=
+
+hicat@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/hicat/-/hicat-0.7.0.tgz#a704cb3f57e49fbd7d38c2edd7aba38ff0b35263"
+ integrity sha1-pwTLP1fkn719OMLt16ujj/CzUmM=
+ dependencies:
+ highlight.js "^8.1.0"
+ minimist "^0.2.0"
+
+highlight-words-core@1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/highlight-words-core/-/highlight-words-core-1.2.2.tgz#1eff6d7d9f0a22f155042a00791237791b1eeaaa"
+ integrity sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==
+
+highlight.js@^8.1.0:
+ version "8.9.1"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-8.9.1.tgz#b8a9c5493212a9392f0222b649c9611497ebfb88"
+ integrity sha1-uKnFSTISqTkvAiK2SclhFJfr+4g=
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoist-non-react-statics@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.8.8"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
+ integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+
+hosted-git-info@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d"
+ integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==
+ dependencies:
+ lru-cache "^5.1.1"
+
+hpack.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
+ dependencies:
+ inherits "^2.0.1"
+ obuf "^1.0.0"
+ readable-stream "^2.0.1"
+ wbuf "^1.1.0"
+
+hsl-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
+ integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=
+
+hsla-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
+ integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg=
+
+html-comment-regex@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
+ integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
+
+html-entities@^1.2.0, html-entities@^1.2.1, html-entities@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
+ integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==
+
+html-tag-names@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/html-tag-names/-/html-tag-names-1.1.5.tgz#f537420c16769511283f8ae1681785fbc89ee0a9"
+ integrity sha512-aI5tKwNTBzOZApHIynaAwecLBv8TlZTEy/P4Sj2SzzAhBrGuI8yGZ0UIXVPQzOHGS+to2mjb04iy6VWt/8+d8A==
+
+html-void-elements@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483"
+ integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==
+
+htmlparser2@^3.3.0, htmlparser2@^3.9.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+ integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+ dependencies:
+ domelementtype "^1.3.1"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.1.1"
+
+http-cache-semantics@3.8.1:
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
+ integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
+
+http-cache-semantics@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
+ integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
+
+http-deceiver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+ integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
+
+http-errors@1.7.2, http-errors@~1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@1.7.3, http-errors@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-proxy-middleware@0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
+ integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
+ dependencies:
+ http-proxy "^1.17.0"
+ is-glob "^4.0.0"
+ lodash "^4.17.11"
+ micromatch "^3.1.10"
+
+http-proxy@^1.17.0, http-proxy@^1.18.1:
+ version "1.18.1"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+ integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+ dependencies:
+ eventemitter3 "^4.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+ integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
+
+icss-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
+ integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=
+ dependencies:
+ postcss "^6.0.1"
+
+idb-keyval@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-3.2.0.tgz#cbbf354deb5684b6cdc84376294fc05932845bd6"
+ integrity sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==
+
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore@^3.3.5:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.1.1, ignore@^5.1.4:
+ version "5.1.8"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+
+imagemin-mozjpeg@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz#d2ca4e8c982c7c6eda55069af89dee4c1cebcdfd"
+ integrity sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==
+ dependencies:
+ execa "^1.0.0"
+ is-jpg "^2.0.0"
+ mozjpeg "^6.0.0"
+
+imagemin-pngquant@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/imagemin-pngquant/-/imagemin-pngquant-6.0.1.tgz#07b4c80e327ac60ef5246758029b1e8aecd879b9"
+ integrity sha512-Stk+fZCLxZznV8MFNA/T3AY/VRKevsiP9uZOLV0RCXoi0vUUFriySYuz/83IGp9D254EW8miGyyQ69zKouFr7w==
+ dependencies:
+ execa "^0.10.0"
+ is-png "^1.0.0"
+ is-stream "^1.1.0"
+ pngquant-bin "^5.0.0"
+
+imagemin-webp@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/imagemin-webp/-/imagemin-webp-5.1.0.tgz#ddb1307ad97aff97293c5a600e384e40c07f68a7"
+ integrity sha512-BsPTpobgbDPFBBsI3UflnU/cpIVa15qInEDBcYBw16qI/6XiB4vDF/dGp9l4aM3pfFDDYqR0mANMcKpBD7wbCw==
+ dependencies:
+ cwebp-bin "^5.0.0"
+ exec-buffer "^3.0.0"
+ is-cwebp-readable "^2.0.1"
+
+imagemin@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/imagemin/-/imagemin-6.1.0.tgz#62508b465728fea36c03cdc07d915fe2d8cf9e13"
+ integrity sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==
+ dependencies:
+ file-type "^10.7.0"
+ globby "^8.0.1"
+ make-dir "^1.0.0"
+ p-pipe "^1.1.0"
+ pify "^4.0.1"
+ replace-ext "^1.0.0"
+
+immutable@~3.7.6:
+ version "3.7.6"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b"
+ integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks=
+
+import-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
+ integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=
+ dependencies:
+ import-from "^2.1.0"
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-fresh@^3.0.0, import-fresh@^3.1.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+ integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-from@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966"
+ integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==
+ dependencies:
+ resolve-from "^5.0.0"
+
+import-from@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
+ integrity sha1-M1238qev/VOqpHHUuAId7ja387E=
+ dependencies:
+ resolve-from "^3.0.0"
+
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+
+import-lazy@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc"
+ integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==
+
+import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+indexes-of@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+ integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+ink-box@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ink-box/-/ink-box-1.0.0.tgz#8cbcb5541d32787d08d43acf1a9907e86e3572f3"
+ integrity sha512-wD2ldWX9lcE/6+flKbAJ0TZF7gKbTH8CRdhEor6DD8d+V0hPITrrGeST2reDBpCia8wiqHrdxrqTyafwtmVanA==
+ dependencies:
+ boxen "^3.0.0"
+ prop-types "^15.7.2"
+
+ink-link@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ink-link/-/ink-link-1.1.0.tgz#e00bd68dfd163a9392baecc0808391fd07e6cfbb"
+ integrity sha512-a716nYz4YDPu8UOA2PwabTZgTvZa3SYB/70yeXVmTOKFAEdMbJyGSVeNuB7P+aM2olzDj9AGVchA7W5QytF9uA==
+ dependencies:
+ prop-types "^15.7.2"
+ terminal-link "^2.1.1"
+
+ink-select-input@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/ink-select-input/-/ink-select-input-3.1.2.tgz#fd53f2f0946bc43989899522b013a2c10a60f722"
+ integrity sha512-PaLraGx8A54GhSkTNzZI8bgY0elAoa1jSPPe5Q52B5VutcBoJc4HE3ICDwsEGJ88l1Hw6AWjpeoqrq82a8uQPA==
+ dependencies:
+ arr-rotate "^1.0.0"
+ figures "^2.0.0"
+ lodash.isequal "^4.5.0"
+ prop-types "^15.5.10"
+
+ink-spinner@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ink-spinner/-/ink-spinner-3.0.1.tgz#7b4b206d2b18538701fd92593f9acabbfe308dce"
+ integrity sha512-AVR4Z/NXDQ7dT5ltWcCzFS9Dd4T8eaO//E2UO8VYNiJcZpPCSJ11o5A0UVPcMlZxGbGD6ikUFDR3ZgPUQk5haQ==
+ dependencies:
+ cli-spinners "^1.0.0"
+ prop-types "^15.5.10"
+
+ink@^2.7.1:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/ink/-/ink-2.7.1.tgz#ff1c75b4b022924e2993af62297fa0e48e85618b"
+ integrity sha512-s7lJuQDJEdjqtaIWhp3KYHl6WV3J04U9zoQ6wVc+Xoa06XM27SXUY57qC5DO46xkF0CfgXMKkKNcgvSu/SAEpA==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ arrify "^2.0.1"
+ auto-bind "^4.0.0"
+ chalk "^3.0.0"
+ cli-cursor "^3.1.0"
+ cli-truncate "^2.1.0"
+ is-ci "^2.0.0"
+ lodash.throttle "^4.1.1"
+ log-update "^3.0.0"
+ prop-types "^15.6.2"
+ react-reconciler "^0.24.0"
+ scheduler "^0.18.0"
+ signal-exit "^3.0.2"
+ slice-ansi "^3.0.0"
+ string-length "^3.1.0"
+ widest-line "^3.1.0"
+ wrap-ansi "^6.2.0"
+ yoga-layout-prebuilt "^1.9.3"
+
+inline-style-parser@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
+ integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
+
+inquirer@3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
+ integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^2.0.4"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rx-lite "^4.0.8"
+ rx-lite-aggregates "^4.0.8"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
+inquirer@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29"
+ integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^3.0.0"
+ cli-cursor "^3.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.15"
+ mute-stream "0.0.8"
+ run-async "^2.4.0"
+ rxjs "^6.5.3"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+ through "^2.3.6"
+
+internal-ip@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
+ integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
+ dependencies:
+ default-gateway "^4.2.0"
+ ipaddr.js "^1.9.0"
+
+internal-slot@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3"
+ integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==
+ dependencies:
+ es-abstract "^1.17.0-next.1"
+ has "^1.0.3"
+ side-channel "^1.0.2"
+
+into-stream@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6"
+ integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=
+ dependencies:
+ from2 "^2.1.1"
+ p-is-promise "^1.1.0"
+
+invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
+
+ip@^1.1.0, ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+
+ipaddr.js@1.9.1, ipaddr.js@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+is-absolute-url@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+ integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
+
+is-absolute-url@^3.0.0, is-absolute-url@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
+ integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-alphabetical@1.0.4, is-alphabetical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
+ integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
+
+is-alphanumeric@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4"
+ integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=
+
+is-alphanumerical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
+ integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
+is-arguments@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
+ integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-binary-path@^2.1.0, is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-blank@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-blank/-/is-blank-2.1.0.tgz#69a73d3c0d4f417dfffb207a2795c0f0e576de04"
+ integrity sha1-aac9PA1PQX3/+yB6J5XA8OV23gQ=
+ dependencies:
+ is-empty latest
+ is-whitespace latest
+
+is-buffer@^1.1.5, is-buffer@~1.1.1:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.0, is-buffer@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
+ integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
+
+is-builtin-module@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.0.0.tgz#137d3d2425023a19a660fb9dd6ddfabe52c03466"
+ integrity sha512-/93sDihsAD652hrMEbJGbMAVBf1qc96kyThHQ0CAOONHaE3aROLpTjDe4WQ5aoC5ITHFxEq1z8XqSU7km+8amw==
+ dependencies:
+ builtin-modules "^3.0.0"
+
+is-callable@^1.1.4, is-callable@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+ integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
+
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
+is-color-stop@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
+ integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=
+ dependencies:
+ css-color-names "^0.0.4"
+ hex-color-regex "^1.1.0"
+ hsl-regex "^1.0.0"
+ hsla-regex "^1.0.0"
+ rgb-regex "^1.0.1"
+ rgba-regex "^1.0.0"
+
+is-cwebp-readable@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-cwebp-readable/-/is-cwebp-readable-2.0.1.tgz#afb93b0c0abd0a25101016ae33aea8aedf926d26"
+ integrity sha1-r7k7DAq9CiUQEBauM66ort+SbSY=
+ dependencies:
+ file-type "^4.3.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-decimal@^1.0.0, is-decimal@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
+ integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-docker@2.0.0, is-docker@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b"
+ integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==
+
+is-empty@latest:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b"
+ integrity sha1-3pu1snhzigWgsJpX4ftNSjQan2s=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-finite@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
+ integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-function@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
+ integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
+
+is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-glob@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-hexadecimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
+ integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
+
+is-installed-globally@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
+ integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
+ dependencies:
+ global-dirs "^0.1.0"
+ is-path-inside "^1.0.0"
+
+is-invalid-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34"
+ integrity sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=
+ dependencies:
+ is-glob "^2.0.0"
+
+is-jpg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-jpg/-/is-jpg-2.0.0.tgz#2e1997fa6e9166eaac0242daae443403e4ef1d97"
+ integrity sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=
+
+is-natural-number@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
+ integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=
+
+is-npm@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-3.0.0.tgz#ec9147bfb629c43f494cf67936a961edec7e8053"
+ integrity sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.0, is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
+ integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA=
+
+is-path-cwd@^2.0.0, is-path-cwd@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+ integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
+ dependencies:
+ is-path-inside "^2.1.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-path-inside@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+ integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
+ dependencies:
+ path-is-inside "^1.0.2"
+
+is-path-inside@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"
+ integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==
+
+is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-obj@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-png@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-png/-/is-png-1.1.0.tgz#d574b12bf275c0350455570b0e5b57ab062077ce"
+ integrity sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=
+
+is-regex@^1.0.4, is-regex@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
+ integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
+ dependencies:
+ has "^1.0.3"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-relative-url@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-3.0.0.tgz#f623c8e26baa5bd3742b3b7ec074f50f3b45b3f3"
+ integrity sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA==
+ dependencies:
+ is-absolute-url "^3.0.0"
+
+is-relative@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
+ integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
+ dependencies:
+ is-unc-path "^1.0.0"
+
+is-resolvable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+ integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
+ integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
+
+is-root@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5"
+ integrity sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=
+
+is-ssh@^1.3.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3"
+ integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==
+ dependencies:
+ protocols "^1.1.0"
+
+is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
+is-svg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
+ integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==
+ dependencies:
+ html-comment-regex "^1.1.0"
+
+is-symbol@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-unc-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
+ integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
+ dependencies:
+ unc-path-regex "^0.1.2"
+
+is-url@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
+ integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-valid-path@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df"
+ integrity sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=
+ dependencies:
+ is-invalid-path "^0.1.0"
+
+is-whitespace-character@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7"
+ integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==
+
+is-whitespace@latest:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f"
+ integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38=
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-word-character@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230"
+ integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+is-wsl@^2.1.1, is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
+is-yarn-global@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
+ integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isarray@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
+ integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isomorphic-fetch@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
+ dependencies:
+ node-fetch "^1.0.1"
+ whatwg-fetch ">=0.10.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+isurl@^1.0.0-alpha5:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
+ integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==
+ dependencies:
+ has-to-string-tag-x "^1.2.0"
+ is-object "^1.0.1"
+
+iterall@^1.2.1, iterall@^1.2.2, iterall@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea"
+ integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==
+
+jest-diff@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
+ integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
+ dependencies:
+ chalk "^3.0.0"
+ diff-sequences "^25.2.6"
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
+
+jest-get-type@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
+ integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
+
+jest-worker@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
+ integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^6.1.0"
+
+jimp@^0.10.2:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.10.3.tgz#285027b49eee3418259a8e1e9a20dd078cf8b7b1"
+ integrity sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/custom" "^0.10.3"
+ "@jimp/plugins" "^0.10.3"
+ "@jimp/types" "^0.10.3"
+ core-js "^3.4.1"
+ regenerator-runtime "^0.13.3"
+
+jpeg-js@^0.3.4:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d"
+ integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.10.0, js-yaml@^3.13.1:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
+ integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-buffer@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
+ integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
+
+json-loader@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+ integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json3@^3.3.2:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
+ integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
+ integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
+ dependencies:
+ minimist "^1.2.5"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179"
+ integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==
+ dependencies:
+ universalify "^1.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.3.0.tgz#edd727794ea284d7fda575015ed1b0cde0289ab6"
+ integrity sha512-3HNoc7nZ1hpZIKB3hJ7BlFRkzCx2BynRtfSwbkqZdpRdvAPsGMnzclPwrvDBS7/lalHTj21NwIeaEpysHBOudg==
+ dependencies:
+ array-includes "^3.1.1"
+ object.assign "^4.1.0"
+
+keyv@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373"
+ integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==
+ dependencies:
+ json-buffer "3.0.0"
+
+keyv@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
+ integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
+ dependencies:
+ json-buffer "3.0.0"
+
+killable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+ integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+last-call-webpack-plugin@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
+ integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==
+ dependencies:
+ lodash "^4.17.5"
+ webpack-sources "^1.1.0"
+
+latest-version@5.1.0, latest-version@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
+ integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
+ dependencies:
+ package-json "^6.3.0"
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levenary@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77"
+ integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==
+ dependencies:
+ leven "^3.1.0"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+linaria@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/linaria/-/linaria-1.3.3.tgz#af806fe7272f1f43688615ab4f04a6edb785bd40"
+ integrity sha512-CoDZ7mrXNHLXGRfaYCSVKQr94rvzn6KIir4dTwaq6o0VlDp9TkKOg2WHdMS7I2WhQTefdLJEdPYE/1TckAnVRw==
+ dependencies:
+ "@babel/core" "^7.3.3"
+ "@babel/generator" "^7.3.3"
+ "@babel/plugin-proposal-export-namespace-from" "^7.2.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.2.0"
+ "@babel/register" "^7.0.0"
+ "@emotion/is-prop-valid" "^0.7.3"
+ core-js "^3.6.3"
+ cosmiconfig "^5.1.0"
+ dedent "^0.7.0"
+ enhanced-resolve "^4.1.0"
+ find-yarn-workspace-root "^1.2.1"
+ glob "^7.1.3"
+ loader-utils "^1.2.3"
+ mkdirp "^0.5.1"
+ normalize-path "^3.0.0"
+ postcss "^7.0.14"
+ react-is "^16.8.3"
+ rollup-pluginutils "^2.4.1"
+ source-map "^0.7.3"
+ strip-ansi "^5.0.0"
+ stylis "^3.5.4"
+ yargs "^13.2.1"
+
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
+load-bmfont@^1.3.1, load-bmfont@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b"
+ integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==
+ dependencies:
+ buffer-equal "0.0.1"
+ mime "^1.3.4"
+ parse-bmfont-ascii "^1.0.3"
+ parse-bmfont-binary "^1.0.5"
+ parse-bmfont-xml "^1.1.4"
+ phin "^2.9.1"
+ xhr "^2.0.1"
+ xtend "^4.0.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+loader-fs-cache@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9"
+ integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==
+ dependencies:
+ find-cache-dir "^0.1.1"
+ mkdirp "^0.5.1"
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lockfile@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609"
+ integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==
+ dependencies:
+ signal-exit "^3.0.2"
+
+lodash-es@^4.17.11, lodash-es@^4.17.14:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78"
+ integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==
+
+lodash._reinterpolate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+ integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+
+lodash.clonedeep@4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
+
+lodash.every@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7"
+ integrity sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc=
+
+lodash.flattendeep@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
+ integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=
+
+lodash.foreach@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
+ integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=
+
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
+
+lodash.map@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
+ integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=
+
+lodash.maxby@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.maxby/-/lodash.maxby-4.6.0.tgz#082240068f3c7a227aa00a8380e4f38cf0786e3d"
+ integrity sha1-CCJABo88eiJ6oAqDgOTzjPB4bj0=
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.sample@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.sample/-/lodash.sample-4.2.1.tgz#5e4291b0c753fa1abeb0aab8fb29df1b66f07f6d"
+ integrity sha1-XkKRsMdT+hq+sKq4+ynfG2bwf20=
+
+lodash.template@^4.4.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
+ integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
+ integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+
+lodash.throttle@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
+ integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
+
+lodash.toarray@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
+ integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=
+
+lodash.uniq@4.5.0, lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash@4.17.15, lodash@^4.11.1, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+log-update@^3.0.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-3.4.0.tgz#3b9a71e00ac5b1185cc193a36d654581c48f97b9"
+ integrity sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==
+ dependencies:
+ ansi-escapes "^3.2.0"
+ cli-cursor "^2.1.0"
+ wrap-ansi "^5.0.0"
+
+logalot@^2.0.0, logalot@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/logalot/-/logalot-2.1.0.tgz#5f8e8c90d304edf12530951a5554abb8c5e3f552"
+ integrity sha1-X46MkNME7fElMJUaVVSruMXj9VI=
+ dependencies:
+ figures "^1.3.5"
+ squeak "^1.0.0"
+
+loglevel@^1.6.8:
+ version "1.6.8"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
+ integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==
+
+longest-streak@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
+ integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
+
+longest@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+loud-rejection@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-2.2.0.tgz#4255eb6e9c74045b0edc021fa7397ab655a8517c"
+ integrity sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.2"
+
+lower-case@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7"
+ integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==
+ dependencies:
+ tslib "^1.10.0"
+
+lowercase-keys@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
+ integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=
+
+lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lpad-align@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/lpad-align/-/lpad-align-1.1.2.tgz#21f600ac1c3095c3c6e497ee67271ee08481fe9e"
+ integrity sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=
+ dependencies:
+ get-stdin "^4.0.1"
+ indent-string "^2.1.0"
+ longest "^1.0.0"
+ meow "^3.3.0"
+
+lru-cache@4.0.0, lru-cache@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.0.tgz#b5cbf01556c16966febe54ceec0fb4dc90df6c28"
+ integrity sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=
+ dependencies:
+ pseudomap "^1.0.1"
+ yallist "^2.0.0"
+
+lru-cache@^4.0.1:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+magic-string@^0.25.3:
+ version "0.25.7"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
+ integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
+ dependencies:
+ sourcemap-codec "^1.4.4"
+
+make-dir@^1.0.0, make-dir@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
+ dependencies:
+ pify "^3.0.0"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+make-dir@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+markdown-escapes@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
+ integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
+
+markdown-table@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"
+ integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==
+ dependencies:
+ repeat-string "^1.0.0"
+
+md5-file@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f"
+ integrity sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==
+ dependencies:
+ buffer-alloc "^1.1.0"
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+md5@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
+ integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=
+ dependencies:
+ charenc "~0.0.1"
+ crypt "~0.0.1"
+ is-buffer "~1.1.1"
+
+mdast-squeeze-paragraphs@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97"
+ integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==
+ dependencies:
+ unist-util-remove "^2.0.0"
+
+mdast-util-compact@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490"
+ integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+mdast-util-definitions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz#06af6c49865fc63d6d7d30125569e2f7ae3d0a86"
+ integrity sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+mdast-util-to-hast@9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-9.1.0.tgz#6ef121dd3cd3b006bf8650b1b9454da0faf79ffe"
+ integrity sha512-Akl2Vi9y9cSdr19/Dfu58PVwifPXuFt1IrHe7l+Crme1KvgUT+5z+cHLVcQVGCiNTZZcdqjnuv9vPkGsqWytWA==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.3"
+ collapse-white-space "^1.0.0"
+ detab "^2.0.0"
+ mdast-util-definitions "^3.0.0"
+ mdurl "^1.0.0"
+ trim-lines "^1.0.0"
+ unist-builder "^2.0.0"
+ unist-util-generated "^1.0.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^2.0.0"
+
+mdn-data@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+ integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
+mdn-data@2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978"
+ integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==
+
+mdurl@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
+
+meant@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d"
+ integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.3.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.2.3, merge2@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81"
+ integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.44.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0:
+ version "1.44.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
+ integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
+
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.27"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
+ integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
+ dependencies:
+ mime-db "1.44.0"
+
+mime@1.6.0, mime@^1.3.4:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^2.0.3, mime@^2.4.4, mime@^2.4.5:
+ version "2.4.6"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1"
+ integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^1.0.0, mimic-response@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+ integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+mimic-response@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
+ integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
+
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
+ dependencies:
+ dom-walk "^0.1.0"
+
+mini-css-extract-plugin@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161"
+ integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==
+ dependencies:
+ loader-utils "^1.1.0"
+ normalize-url "1.9.1"
+ schema-utils "^1.0.0"
+ webpack-sources "^1.1.0"
+
+mini-svg-data-uri@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.2.3.tgz#e16baa92ad55ddaa1c2c135759129f41910bc39f"
+ integrity sha512-zd6KCAyXgmq6FV1mR10oKXYtvmA9vRoB6xPSTUJTbFApCtkefDnYueVR1gkof3KcdLZo1Y8mjF2DFmQMIxsHNQ==
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimatch@^3.0.3, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455"
+ integrity sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==
+
+minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minipass@^3.0.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
+ integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
+ dependencies:
+ yallist "^4.0.0"
+
+minizlib@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3"
+ integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mitt@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d"
+ integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp-classic@^0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+mkdirp@^1.0.3, mkdirp@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+moment@^2.25.3:
+ version "2.26.0"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a"
+ integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+mozjpeg@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/mozjpeg/-/mozjpeg-6.0.1.tgz#56969dddb5741ef2bcb1af066cae21e61a91a27b"
+ integrity sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==
+ dependencies:
+ bin-build "^3.0.0"
+ bin-wrapper "^4.0.0"
+ logalot "^2.1.0"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+multicast-dns-service-types@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+ integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
+
+multicast-dns@^6.0.1:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
+ integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
+ dependencies:
+ dns-packet "^1.3.1"
+ thunky "^1.0.2"
+
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+mute-stream@0.0.8, mute-stream@~0.0.4:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+name-all-modules-plugin@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/name-all-modules-plugin/-/name-all-modules-plugin-1.0.1.tgz#0abfb6ad835718b9fb4def0674e06657a954375c"
+ integrity sha1-Cr+2rYNXGLn7Te8GdOBmV6lUN1w=
+
+nan@^2.12.1, nan@^2.14.0:
+ version "2.14.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
+ integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+napi-build-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
+ integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
+
+native-url@^0.2.6:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae"
+ integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==
+ dependencies:
+ querystring "^0.2.0"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+negotiator@0.6.2, negotiator@~0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0, neo-async@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+next-tick@^1.0.0, next-tick@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+ integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+no-case@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8"
+ integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==
+ dependencies:
+ lower-case "^2.0.1"
+ tslib "^1.10.0"
+
+node-abi@^2.7.0:
+ version "2.18.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.18.0.tgz#1f5486cfd7d38bd4f5392fa44a4ad4d9a0dffbf4"
+ integrity sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw==
+ dependencies:
+ semver "^5.4.1"
+
+node-addon-api@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.0.tgz#812446a1001a54f71663bed188314bba07e09247"
+ integrity sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg==
+
+node-emoji@^1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
+ integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
+ dependencies:
+ lodash.toarray "^4.4.0"
+
+node-eta@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/node-eta/-/node-eta-0.9.0.tgz#9fb0b099bcd2a021940e603c64254dc003d9a7a8"
+ integrity sha1-n7CwmbzSoCGUDmA8ZCVNwAPZp6g=
+
+node-fetch@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
+ integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=
+
+node-fetch@2.6.0, node-fetch@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
+ integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
+
+node-fetch@^1.0.1, node-fetch@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
+node-forge@0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
+ integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-object-hash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-2.0.0.tgz#9971fcdb7d254f05016bd9ccf508352bee11116b"
+ integrity sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ==
+
+node-releases@^1.1.53:
+ version "1.1.57"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.57.tgz#f6754ce225fad0611e61228df3e09232e017ea19"
+ integrity sha512-ZQmnWS7adi61A9JsllJ2gdj2PauElcjnOwTp2O011iGzoakTxUsDGSe+6vD7wXbKdqhSFymC0OSx35aAMhrSdw==
+
+noms@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859"
+ integrity sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "~1.0.31"
+
+noop-logger@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
+ integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+normalize-url@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
+ dependencies:
+ object-assign "^4.0.1"
+ prepend-http "^1.0.0"
+ query-string "^4.1.0"
+ sort-keys "^1.0.0"
+
+normalize-url@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6"
+ integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==
+ dependencies:
+ prepend-http "^2.0.0"
+ query-string "^5.0.1"
+ sort-keys "^2.0.0"
+
+normalize-url@^3.0.0, normalize-url@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+ integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
+
+normalize-url@^4.1.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
+ integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
+
+npm-conf@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
+ integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
+ dependencies:
+ config-chain "^1.1.11"
+ pify "^3.0.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+npmlog@^4.0.1, npmlog@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@^1.0.2, nth-check@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
+null-loader@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245"
+ integrity sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==
+ dependencies:
+ loader-utils "^1.2.3"
+ schema-utils "^1.0.0"
+
+nullthrows@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
+ integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+ integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-component@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+ integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-fit-images@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/object-fit-images/-/object-fit-images-3.2.4.tgz#6c299d38fdf207746e5d2d46c2877f6f25d15b52"
+ integrity sha512-G+7LzpYfTfqUyrZlfrou/PLLLAPNC52FTy5y1CBywX+1/FkxIloOyQXBmZ3Zxa2AWO+lMF0JTuvqbr7G5e5CWg==
+
+object-hash@^1.1.4:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
+ integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==
+
+object-inspect@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+ integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
+
+object-is@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6"
+ integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-path@^0.11.2, object-path@^0.11.4:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949"
+ integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
+object.entries@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add"
+ integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+ has "^1.0.3"
+
+object.fromentries@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
+ integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+object.getownpropertydescriptors@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
+ integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.0, object.values@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
+ integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+obuf@^1.0.0, obuf@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+ integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+omggif@^1.0.9:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19"
+ integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+onetime@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+ integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+open@^6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
+ integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==
+ dependencies:
+ is-wsl "^1.1.0"
+
+opentracing@^0.14.4:
+ version "0.14.4"
+ resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.4.tgz#a113408ea740da3a90fde5b3b0011a375c2e4268"
+ integrity sha512-nNnZDkUNExBwEpb7LZaeMeQgvrlO8l4bgY/LvGNZCR0xG/dGWqHqjKrAmR5GUoYo0FIz38kxasvA1aevxWs2CA==
+
+opn@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519"
+ integrity sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==
+ dependencies:
+ is-wsl "^1.1.0"
+
+opn@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
+ integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
+ dependencies:
+ is-wsl "^1.1.0"
+
+optimize-css-assets-webpack-plugin@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572"
+ integrity sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==
+ dependencies:
+ cssnano "^4.1.10"
+ last-call-webpack-plugin "^3.0.0"
+
+optionator@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+original@>=0.0.5, original@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
+ integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
+ dependencies:
+ url-parse "^1.4.3"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-filter-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-2.0.0.tgz#1c0b62d5f3a2442749a2d139e6dddee6e81d8d16"
+ integrity sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==
+ dependencies:
+ arch "^2.1.0"
+
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+p-cancelable@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
+ integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==
+
+p-cancelable@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0"
+ integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==
+
+p-cancelable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
+ integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+
+p-defer@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83"
+ integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==
+
+p-event@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-event/-/p-event-1.3.0.tgz#8e6b4f4f65c72bc5b6fe28b75eda874f96a4a085"
+ integrity sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=
+ dependencies:
+ p-timeout "^1.1.1"
+
+p-event@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6"
+ integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==
+ dependencies:
+ p-timeout "^2.0.1"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-finally@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
+ integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
+
+p-is-promise@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
+ integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=
+
+p-limit@2.3.0, p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-map-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
+ integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-map@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-map@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d"
+ integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-pipe@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
+ integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k=
+
+p-reduce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+ integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
+
+p-retry@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
+ integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==
+ dependencies:
+ retry "^0.12.0"
+
+p-timeout@^1.1.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
+ integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=
+ dependencies:
+ p-finally "^1.0.0"
+
+p-timeout@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038"
+ integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==
+ dependencies:
+ p-finally "^1.0.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0, p-try@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+package-json@^6.3.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
+ integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
+ dependencies:
+ got "^9.6.0"
+ registry-auth-token "^4.0.0"
+ registry-url "^5.0.0"
+ semver "^6.2.0"
+
+pako@^1.0.5, pako@~1.0.5:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-asn1@^5.0.0, parse-asn1@^5.1.5:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
+ integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-bmfont-ascii@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
+ integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=
+
+parse-bmfont-binary@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
+ integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=
+
+parse-bmfont-xml@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389"
+ integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==
+ dependencies:
+ xml-parse-from-string "^1.0.0"
+ xml2js "^0.4.5"
+
+parse-entities@^1.1.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
+ integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
+ integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-headers@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515"
+ integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-json@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
+ integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+ lines-and-columns "^1.1.6"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parse-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff"
+ integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA==
+ dependencies:
+ is-ssh "^1.3.0"
+ protocols "^1.4.0"
+
+parse-url@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f"
+ integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg==
+ dependencies:
+ is-ssh "^1.3.0"
+ normalize-url "^3.3.0"
+ parse-path "^4.0.0"
+ protocols "^1.4.0"
+
+parse5@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
+ integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
+ dependencies:
+ "@types/node" "*"
+
+parse5@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+
+parseqs@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+ integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseuri@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+ integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascal-case@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f"
+ integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==
+ dependencies:
+ no-case "^3.0.3"
+ tslib "^1.10.0"
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+password-prompt@^1.0.4:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923"
+ integrity sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==
+ dependencies:
+ ansi-escapes "^3.1.0"
+ cross-spawn "^6.0.5"
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+phin@^2.9.1:
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
+ integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==
+
+physical-cpu-count@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660"
+ integrity sha1-GN4vl+S/epVRrXURlCtUlverpmA=
+
+picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
+ integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+
+pify@^2.0.0, pify@^2.2.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pirates@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pixelmatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
+ integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=
+ dependencies:
+ pngjs "^3.0.0"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
+ dependencies:
+ find-up "^1.0.0"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
+ integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
+ dependencies:
+ find-up "^2.1.0"
+
+pngjs@^3.0.0, pngjs@^3.3.3:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
+ integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
+
+pngquant-bin@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/pngquant-bin/-/pngquant-bin-5.0.2.tgz#6f34f3e89c9722a72bbc509062b40f1b17cda460"
+ integrity sha512-OLdT+4JZx5BqE1CFJkrvomYV0aSsv6x2Bba+aWaVc0PMfWlE+ZByNKYAdKeIqsM4uvW1HOSEHnf8KcOnykPNxA==
+ dependencies:
+ bin-build "^3.0.0"
+ bin-wrapper "^4.0.1"
+ execa "^0.10.0"
+ logalot "^2.0.0"
+
+pnp-webpack-plugin@^1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
+ integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==
+ dependencies:
+ ts-pnp "^1.1.6"
+
+portfinder@^1.0.26:
+ version "1.0.26"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70"
+ integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==
+ dependencies:
+ async "^2.6.2"
+ debug "^3.1.1"
+ mkdirp "^0.5.1"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-calc@^7.0.1:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1"
+ integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==
+ dependencies:
+ postcss "^7.0.27"
+ postcss-selector-parser "^6.0.2"
+ postcss-value-parser "^4.0.2"
+
+postcss-colormin@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
+ integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==
+ dependencies:
+ browserslist "^4.0.0"
+ color "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-convert-values@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
+ integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-discard-comments@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
+ integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-duplicates@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
+ integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-empty@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
+ integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-overridden@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
+ integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-flexbugs-fixes@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690"
+ integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==
+ dependencies:
+ postcss "^7.0.26"
+
+postcss-load-config@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003"
+ integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==
+ dependencies:
+ cosmiconfig "^5.0.0"
+ import-cwd "^2.0.0"
+
+postcss-loader@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d"
+ integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==
+ dependencies:
+ loader-utils "^1.1.0"
+ postcss "^7.0.0"
+ postcss-load-config "^2.0.0"
+ schema-utils "^1.0.0"
+
+postcss-merge-longhand@^4.0.11:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
+ integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==
+ dependencies:
+ css-color-names "0.0.4"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ stylehacks "^4.0.0"
+
+postcss-merge-rules@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
+ integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ cssnano-util-same-parent "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+ vendors "^1.0.0"
+
+postcss-minify-font-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
+ integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-minify-gradients@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
+ integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ is-color-stop "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-minify-params@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
+ integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ browserslist "^4.0.0"
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ uniqs "^2.0.0"
+
+postcss-minify-selectors@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
+ integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
+postcss-modules-extract-imports@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a"
+ integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-modules-local-by-default@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+ integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-scope@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+ integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A=
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-values@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+ integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^6.0.1"
+
+postcss-normalize-charset@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
+ integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-normalize-display-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
+ integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-positions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
+ integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-repeat-style@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
+ integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-string@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
+ integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==
+ dependencies:
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-timing-functions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
+ integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-unicode@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
+ integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-url@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
+ integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==
+ dependencies:
+ is-absolute-url "^2.0.0"
+ normalize-url "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-whitespace@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
+ integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-ordered-values@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
+ integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-reduce-initial@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
+ integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+
+postcss-reduce-transforms@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
+ integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-selector-parser@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270"
+ integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==
+ dependencies:
+ dot-prop "^5.2.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-selector-parser@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
+ integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
+ dependencies:
+ cssesc "^3.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-svgo@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
+ integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==
+ dependencies:
+ is-svg "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ svgo "^1.0.0"
+
+postcss-unique-selectors@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
+ integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ postcss "^7.0.0"
+ uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
+ integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
+
+postcss@^6.0.1, postcss@^6.0.23:
+ version "6.0.23"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
+ integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
+ dependencies:
+ chalk "^2.4.1"
+ source-map "^0.6.1"
+ supports-color "^5.4.0"
+
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.30:
+ version "7.0.31"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.31.tgz#332af45cb73e26c0ee2614d7c7fb02dfcc2bd6dd"
+ integrity sha512-a937VDHE1ftkjk+8/7nj/mrjtmkn69xxzJgRETXdAUU+IgOYPQNJF17haGWbeDxSyk++HA14UA98FurvPyBJOA==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+postcss@^7.0.14:
+ version "7.0.32"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d"
+ integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+potrace@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/potrace/-/potrace-2.1.6.tgz#687d48d4441eebca9539f4c39f6815b6e2480e67"
+ integrity sha512-sXdIDGZAb3x1GSnyps7VxksRoy57/ch+kq7J79L5UPUHU5KRIJF9oLJQeRVyYlOPjois+gMxVfNJkQjSkK9xMA==
+ dependencies:
+ jimp "^0.10.2"
+
+prebuild-install@^5.3.3:
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.4.tgz#6982d10084269d364c1856550b7d090ea31fa293"
+ integrity sha512-AkKN+pf4fSEihjapLEEj8n85YIw/tN6BQqkhzbDc0RvEZGdkpJBGMUYx66AAMcPG2KzmPQS7Cm16an4HVBRRMA==
+ dependencies:
+ detect-libc "^1.0.3"
+ expand-template "^2.0.3"
+ github-from-package "0.0.0"
+ minimist "^1.2.3"
+ mkdirp "^0.5.1"
+ napi-build-utils "^1.0.1"
+ node-abi "^2.7.0"
+ noop-logger "^0.1.1"
+ npmlog "^4.0.1"
+ pump "^3.0.0"
+ rc "^1.2.7"
+ simple-get "^3.0.3"
+ tar-fs "^2.0.0"
+ tunnel-agent "^0.6.0"
+ which-pm-runs "^1.0.0"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prepend-http@^1.0.0, prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+prepend-http@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
+ integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+
+prettier@2.0.5, prettier@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
+ integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
+
+pretty-bytes@^5.1.0, pretty-bytes@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2"
+ integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==
+
+pretty-error@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+ integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
+ dependencies:
+ renderkid "^2.0.1"
+ utila "~0.4"
+
+pretty-format@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
+ integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^16.12.0"
+
+private@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+ integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+probe-image-size@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/probe-image-size/-/probe-image-size-4.1.1.tgz#c836c53154b6dd04dbcf66af2bbd50087b15e1dc"
+ integrity sha512-42LqKZqTLxH/UvAZ2/cKhAsR4G/Y6B7i7fI2qtQu9hRBK4YjS6gqO+QRtwTjvojUx4+/+JuOMzLoFyRecT9qRw==
+ dependencies:
+ any-promise "^1.3.0"
+ deepmerge "^4.0.0"
+ inherits "^2.0.3"
+ next-tick "^1.0.0"
+ request "^2.83.0"
+ stream-parser "~0.3.1"
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+ integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
+
+progress@^2.0.0, progress@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+promise@^7.1.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
+ dependencies:
+ asap "~2.0.3"
+
+prompts@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
+ integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.4"
+
+prop-types@^15.5.10, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+proper-lockfile@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.1.tgz#284cf9db9e30a90e647afad69deb7cb06881262c"
+ integrity sha512-1w6rxXodisVpn7QYvLk706mzprPTAPCYAqxMvctmPN3ekuRk/kuGkGc82pangZiAt4R3lwSuUzheTTn0/Yb7Zg==
+ dependencies:
+ graceful-fs "^4.1.11"
+ retry "^0.12.0"
+ signal-exit "^3.0.2"
+
+property-expr@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.2.tgz#fff2a43919135553a3bc2fdd94bdb841965b2330"
+ integrity sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g==
+
+property-information@^5.0.0, property-information@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943"
+ integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA==
+ dependencies:
+ xtend "^4.0.0"
+
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+ integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+
+protocols@^1.1.0, protocols@^1.4.0:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32"
+ integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==
+
+proxy-addr@~2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
+ integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.9.1"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+pseudomap@^1.0.1, pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.28:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.1.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qs@6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+query-string@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
+ dependencies:
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+query-string@^5.0.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
+ integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
+ dependencies:
+ decode-uri-component "^0.2.0"
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+query-string@^6.12.1:
+ version "6.12.1"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.12.1.tgz#2ae4d272db4fba267141665374e49a1de09e8a7c"
+ integrity sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA==
+ dependencies:
+ decode-uri-component "^0.2.0"
+ split-on-first "^1.0.0"
+ strict-uri-encode "^2.0.0"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0, querystring@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+querystringify@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
+ integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+raw-body@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
+ integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.3"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+raw-loader@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
+ integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
+
+rc@^1.2.7, rc@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-clientside-effect@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837"
+ integrity sha512-nRmoyxeok5PBO6ytPvSjKp9xwXg9xagoTK1mMjwnQxqM9Hd7MNPl+LS1bOSOe+CV2+4fnEquc7H/S8QD3q697A==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+
+react-dev-utils@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-4.2.3.tgz#5b42d9ea58d5e9e017a2f57a40a8af408a3a46fb"
+ integrity sha512-uvmkwl5uMexCmC0GUv1XGQP0YjfYePJufGg4YYiukhqk2vN1tQxwWJIBERqhOmSi80cppZg8mZnPP/kOMf1sUQ==
+ dependencies:
+ address "1.0.3"
+ babel-code-frame "6.26.0"
+ chalk "1.1.3"
+ cross-spawn "5.1.0"
+ detect-port-alt "1.1.3"
+ escape-string-regexp "1.0.5"
+ filesize "3.5.11"
+ global-modules "1.0.0"
+ gzip-size "3.0.0"
+ inquirer "3.3.0"
+ is-root "1.0.0"
+ opn "5.1.0"
+ react-error-overlay "^3.0.0"
+ recursive-readdir "2.2.1"
+ shell-quote "1.6.1"
+ sockjs-client "1.1.4"
+ strip-ansi "3.0.1"
+ text-table "0.2.0"
+
+react-dom@^16.12.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f"
+ integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.19.1"
+
+react-error-overlay@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-3.0.0.tgz#c2bc8f4d91f1375b3dad6d75265d51cd5eeaf655"
+ integrity sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw==
+
+react-fast-compare@^2.0.1, react-fast-compare@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
+ integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
+
+react-focus-lock@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.3.1.tgz#9d5d85899773609c7eefa4fc54fff6a0f5f2fc47"
+ integrity sha512-j15cWLPzH0gOmRrUg01C09Peu8qbcdVqr6Bjyfxj80cNZmH+idk/bNBYEDSmkAtwkXI+xEYWSmHYqtaQhZ8iUQ==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ focus-lock "^0.6.7"
+ prop-types "^15.6.2"
+ react-clientside-effect "^1.2.2"
+ use-callback-ref "^1.2.1"
+ use-sidecar "^1.0.1"
+
+react-helmet@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.0.0.tgz#fcb93ebaca3ba562a686eb2f1f9d46093d83b5f8"
+ integrity sha512-My6S4sa0uHN/IuVUn0HFmasW5xj9clTkB9qmMngscVycQ5vVG51Qp44BEvLJ4lixupTwDlU9qX1/sCrMN4AEPg==
+ dependencies:
+ object-assign "^4.1.1"
+ prop-types "^15.7.2"
+ react-fast-compare "^2.0.4"
+ react-side-effect "^2.1.0"
+
+react-hot-loader@^4.12.21:
+ version "4.12.21"
+ resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.21.tgz#332e830801fb33024b5a147d6b13417f491eb975"
+ integrity sha512-Ynxa6ROfWUeKWsTHxsrL2KMzujxJVPjs385lmB2t5cHUxdoRPGind9F00tOkdc1l5WBleOF4XEAMILY1KPIIDA==
+ dependencies:
+ fast-levenshtein "^2.0.6"
+ global "^4.3.0"
+ hoist-non-react-statics "^3.3.0"
+ loader-utils "^1.1.0"
+ prop-types "^15.6.1"
+ react-lifecycles-compat "^3.0.4"
+ shallowequal "^1.1.0"
+ source-map "^0.7.3"
+
+react-icons@^3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.10.0.tgz#6c217a2dde2e8fa8d293210023914b123f317297"
+ integrity sha512-WsQ5n1JToG9VixWilSo1bHv842Cj5aZqTGiS3Ud47myF6aK7S/IUY2+dHcBdmkQcCFRuHsJ9OMUI0kTDfjyZXQ==
+ dependencies:
+ camelcase "^5.0.0"
+
+react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.3:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-lifecycles-compat@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+
+react-reconciler@^0.24.0:
+ version "0.24.0"
+ resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.24.0.tgz#5a396b2c2f5efe8554134a5935f49f546723f2dd"
+ integrity sha512-gAGnwWkf+NOTig9oOowqid9O0HjTDC+XVGBCAmJYYJ2A2cN/O4gDdIuuUQjv8A4v6GDwVfJkagpBBLW5OW9HSw==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.18.0"
+
+react-reconciler@^0.25.1:
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.25.1.tgz#f9814d59d115e1210762287ce987801529363aaa"
+ integrity sha512-R5UwsIvRcSs3w8n9k3tBoTtUHdVhu9u84EG7E5M0Jk9F5i6DA1pQzPfUZd6opYWGy56MJOtV3VADzy6DRwYDjw==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.19.1"
+
+react-refresh@^0.7.0:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.7.2.tgz#f30978d21eb8cac6e2f2fde056a7d04f6844dd50"
+ integrity sha512-u5l7fhAJXecWUJzVxzMRU2Zvw8m4QmDNHlTrT5uo3KBlYBhmChd7syAakBoay1yIiVhx/8Fi7a6v6kQZfsw81Q==
+
+react-remove-scroll-bar@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.1.0.tgz#edafe9b42a42c0dad9bdd10712772a1f9a39d7b9"
+ integrity sha512-5X5Y5YIPjIPrAoMJxf6Pfa7RLNGCgwZ95TdnVPgPuMftRfO8DaC7F4KP1b5eiO8hHbe7u+wZNDbYN5WUTpv7+g==
+ dependencies:
+ react-style-singleton "^2.1.0"
+ tslib "^1.0.0"
+
+react-remove-scroll@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.3.0.tgz#3af06fe2f7130500704b676cdef94452c08fe593"
+ integrity sha512-UqVimLeAe+5EHXKfsca081hAkzg3WuDmoT9cayjBegd6UZVhlTEchleNp9J4TMGkb/ftLve7ARB5Wph+HJ7A5g==
+ dependencies:
+ react-remove-scroll-bar "^2.1.0"
+ react-style-singleton "^2.1.0"
+ tslib "^1.0.0"
+ use-callback-ref "^1.2.3"
+ use-sidecar "^1.0.1"
+
+react-side-effect@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.0.tgz#1ce4a8b4445168c487ed24dab886421f74d380d3"
+ integrity sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg==
+
+react-style-singleton@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.0.tgz#7396885332e9729957f9df51f08cadbfc164e1c4"
+ integrity sha512-DH4ED+YABC1dhvSDYGGreAHmfuTXj6+ezT3CmHoqIEfxNgEYfIMoOtmbRp42JsUst3IPqBTDL+8r4TF7EWhIHw==
+ dependencies:
+ get-nonce "^1.0.0"
+ invariant "^2.2.4"
+ tslib "^1.0.0"
+
+react@^16.12.0, react@^16.8.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
+ integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+
+read-chunk@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-3.2.0.tgz#2984afe78ca9bfbbdb74b19387bf9e86289c16ca"
+ integrity sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==
+ dependencies:
+ pify "^4.0.1"
+ with-open-file "^0.1.6"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+read@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
+ integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
+ dependencies:
+ mute-stream "~0.0.4"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@~1.0.31:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+readdirp@~3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
+ integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==
+ dependencies:
+ picomatch "^2.2.1"
+
+recursive-readdir@2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99"
+ integrity sha1-kO8jHQd4xc4JPJpI105cVCLROpk=
+ dependencies:
+ minimatch "3.0.3"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+redux-thunk@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
+ integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
+
+redux@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
+ integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==
+ dependencies:
+ loose-envify "^1.4.0"
+ symbol-observable "^1.2.0"
+
+reflexbox@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/reflexbox/-/reflexbox-4.0.6.tgz#fc756d2cc1ca493baf9b96bb27dd640ad8154cf1"
+ integrity sha512-UNUL4YoJEXAPjRKHuty1tuOk+LV1nDJ2KYViDcH7lYm5yU3AQ+EKNXxPU3E14bQNK/pE09b1hYl+ZKdA94tWLQ==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@emotion/styled" "^10.0.0"
+ "@styled-system/css" "^5.0.0"
+ "@styled-system/should-forward-prop" "^5.0.0"
+ styled-system "^5.0.0"
+
+regenerate-unicode-properties@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
+ integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+ integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4:
+ version "0.13.5"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
+ integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
+
+regenerator-transform@^0.14.2:
+ version "0.14.4"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7"
+ integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+ private "^0.1.8"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
+ integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+regexpp@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
+ integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+
+regexpu-core@^4.5.4, regexpu-core@^4.6.0, regexpu-core@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938"
+ integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.2.0"
+ regjsgen "^0.5.1"
+ regjsparser "^0.6.4"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.2.0"
+
+registry-auth-token@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479"
+ integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==
+ dependencies:
+ rc "^1.2.8"
+
+registry-url@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
+ integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
+ dependencies:
+ rc "^1.2.8"
+
+regjsgen@^0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
+ integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
+
+regjsparser@^0.6.4:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272"
+ integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==
+ dependencies:
+ jsesc "~0.5.0"
+
+relay-compiler@9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/relay-compiler/-/relay-compiler-9.1.0.tgz#e2975de85192e2470daad78e30052bf9614d22ed"
+ integrity sha512-jsJx0Ux5RoxM+JFm3M3xl7UfZAJ0kUTY/r6jqOpcYgVI3GLJthvNI4IoziFRlWbhizEzGFbpkdshZcu9IObJYA==
+ dependencies:
+ "@babel/core" "^7.0.0"
+ "@babel/generator" "^7.5.0"
+ "@babel/parser" "^7.0.0"
+ "@babel/runtime" "^7.0.0"
+ "@babel/traverse" "^7.0.0"
+ "@babel/types" "^7.0.0"
+ babel-preset-fbjs "^3.3.0"
+ chalk "^2.4.1"
+ fast-glob "^2.2.2"
+ fb-watchman "^2.0.0"
+ fbjs "^1.0.0"
+ immutable "~3.7.6"
+ nullthrows "^1.1.1"
+ relay-runtime "9.1.0"
+ signedsource "^1.0.0"
+ yargs "^14.2.0"
+
+relay-runtime@9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-9.1.0.tgz#d0534007d5c43e7b9653c6f5cc112ffac09c5020"
+ integrity sha512-6FE5YlZpR/b3R/HzGly85V+c4MdtLJhFY/outQARgxXonomrwqEik0Cr34LnPK4DmGS36cMLUliqhCs/DZyPVw==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ fbjs "^1.0.0"
+
+remark-footnotes@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-1.0.0.tgz#9c7a97f9a89397858a50033373020b1ea2aad011"
+ integrity sha512-X9Ncj4cj3/CIvLI2Z9IobHtVi8FVdUrdJkCNaL9kdX8ohfsi18DXHsCVd/A7ssARBdccdDb5ODnt62WuEWaM/g==
+
+remark-mdx@^1.6.1, remark-mdx@^1.6.5:
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.5.tgz#a268b18fe8dbe23f2b7c8cf572264c7c0398e0d1"
+ integrity sha512-zItwP3xcVQAEPJTHseFh+KZEyJ31+pbVJMOMzognqTuZ2zfzIR4Xrg0BAx6eo+paV4fHne/5vi2ugWtCeOaBRA==
+ dependencies:
+ "@babel/core" "7.9.6"
+ "@babel/helper-plugin-utils" "7.8.3"
+ "@babel/plugin-proposal-object-rest-spread" "7.9.6"
+ "@babel/plugin-syntax-jsx" "7.8.3"
+ "@mdx-js/util" "^1.6.5"
+ is-alphabetical "1.0.4"
+ remark-parse "8.0.2"
+ unified "9.0.0"
+
+remark-parse@8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.2.tgz#5999bc0b9c2e3edc038800a64ff103d0890b318b"
+ integrity sha512-eMI6kMRjsAGpMXXBAywJwiwAse+KNpmt+BK55Oofy4KvBZEqUDj6mWbGLJZrujoPIPPxDXzn3T9baRlpsm2jnQ==
+ dependencies:
+ ccount "^1.0.0"
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^2.0.0"
+ vfile-location "^3.0.0"
+ xtend "^4.0.1"
+
+remark-parse@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a"
+ integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==
+ dependencies:
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^1.1.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^1.0.0"
+ vfile-location "^2.0.0"
+ xtend "^4.0.1"
+
+remark-squeeze-paragraphs@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead"
+ integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==
+ dependencies:
+ mdast-squeeze-paragraphs "^4.0.0"
+
+remark-stringify@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.0.0.tgz#33423ab8bf3076fb197f4cf582aaaf866b531625"
+ integrity sha512-cABVYVloFH+2ZI5bdqzoOmemcz/ZuhQSH6W6ZNYnLojAUUn3xtX7u+6BpnYp35qHoGr2NFBsERV14t4vCIeW8w==
+ dependencies:
+ ccount "^1.0.0"
+ is-alphanumeric "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ longest-streak "^2.0.1"
+ markdown-escapes "^1.0.0"
+ markdown-table "^2.0.0"
+ mdast-util-compact "^2.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ stringify-entities "^3.0.0"
+ unherit "^1.0.4"
+ xtend "^4.0.1"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+renderkid@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149"
+ integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==
+ dependencies:
+ css-select "^1.1.0"
+ dom-converter "^0.2"
+ htmlparser2 "^3.3.0"
+ strip-ansi "^3.0.0"
+ utila "^0.4.0"
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.0.0, repeat-string@^1.5.4, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+replace-ext@1.0.0, replace-ext@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+ integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
+
+request@^2.83.0:
+ version "2.88.2"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-dir@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@5.0.0, resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.8.1:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
+ integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
+ dependencies:
+ path-parse "^1.0.6"
+
+responselike@1.0.2, responselike@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
+ integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
+ dependencies:
+ lowercase-keys "^1.0.0"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rgb-regex@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
+ integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE=
+
+rgba-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
+ integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
+
+rimraf@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rollup-pluginutils@^2.4.1:
+ version "2.8.2"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e"
+ integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==
+ dependencies:
+ estree-walker "^0.6.1"
+
+run-async@^2.2.0, run-async@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
+run-parallel@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
+ integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+rx-lite-aggregates@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+ integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
+ dependencies:
+ rx-lite "*"
+
+rx-lite@*, rx-lite@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+ integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
+
+rxjs@^6.5.3:
+ version "6.5.5"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
+ integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@^5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@>=0.6.0, sax@~1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+scheduler@^0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4"
+ integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+scheduler@^0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
+ integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+schema-utils@^0.4.5:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
+ integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^2.6.5:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7"
+ integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==
+ dependencies:
+ "@types/json-schema" "^7.0.4"
+ ajv "^6.12.2"
+ ajv-keywords "^3.4.1"
+
+scroll-behavior@^0.9.12:
+ version "0.9.12"
+ resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.12.tgz#1c22d273ec4ce6cd4714a443fead50227da9424c"
+ integrity sha512-18sirtyq1P/VsBX6O/vgw20Np+ngduFXEMO4/NDFXabdOKBL2kjPVUpz1y0+jm99EWwFJafxf5/tCyMeXt9Xyg==
+ dependencies:
+ dom-helpers "^3.4.0"
+ invariant "^2.2.4"
+
+seek-bzip@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc"
+ integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=
+ dependencies:
+ commander "~2.8.1"
+
+select-hose@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+ integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
+
+selfsigned@^1.10.7:
+ version "1.10.7"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"
+ integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==
+ dependencies:
+ node-forge "0.9.0"
+
+semver-diff@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
+ dependencies:
+ semver "^5.0.3"
+
+semver-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
+ integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
+
+semver-truncate@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8"
+ integrity sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=
+ dependencies:
+ semver "^5.3.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.2:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
+ integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+
+send@0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+ integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.7.2"
+ mime "1.6.0"
+ ms "2.1.1"
+ on-finished "~2.3.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
+
+serialize-javascript@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61"
+ integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==
+
+serve-index@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+ integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
+ dependencies:
+ accepts "~1.3.4"
+ batch "0.6.1"
+ debug "2.6.9"
+ escape-html "~1.0.3"
+ http-errors "~1.6.2"
+ mime-types "~2.1.17"
+ parseurl "~1.3.2"
+
+serve-static@1.14.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+ integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.17.1"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4, setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shallow-compare@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/shallow-compare/-/shallow-compare-1.2.2.tgz#fa4794627bf455a47c4f56881d8a6132d581ffdb"
+ integrity sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg==
+
+shallowequal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+ integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+sharp@^0.25.1:
+ version "0.25.3"
+ resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.3.tgz#fcb4f13fa9ce7d8a2d8273ebb40f375953cad937"
+ integrity sha512-qV3n30NaBEhAjBhFo+d8h5N4X3DHteFdwxXoWUiubk72G0VKT5fX50nlcawGYjPqfFV4Z2e/G9gDPeSGAdn/gg==
+ dependencies:
+ color "^3.1.2"
+ detect-libc "^1.0.3"
+ node-addon-api "^3.0.0"
+ npmlog "^4.1.2"
+ prebuild-install "^5.3.3"
+ semver "^7.3.2"
+ simple-get "^4.0.0"
+ tar "^6.0.2"
+ tunnel-agent "^0.6.0"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
+ integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=
+ dependencies:
+ array-filter "~0.0.0"
+ array-map "~0.0.0"
+ array-reduce "~0.0.0"
+ jsonify "~0.0.0"
+
+side-channel@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947"
+ integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==
+ dependencies:
+ es-abstract "^1.17.0-next.1"
+ object-inspect "^1.7.0"
+
+sift@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/sift/-/sift-5.1.0.tgz#1bbf2dfb0eb71e56c4cc7fb567fbd1351b65015e"
+ integrity sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=
+
+signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+signedsource@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a"
+ integrity sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=
+
+simple-concat@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
+ integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
+
+simple-get@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
+ integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
+ dependencies:
+ decompress-response "^4.2.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
+simple-get@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675"
+ integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==
+ dependencies:
+ decompress-response "^6.0.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
+simple-git@2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.5.0.tgz#538b14b25f83916a56f30eca53f13796db6712f6"
+ integrity sha512-4gmtMqfIL9bsBNJDP/rDwZe3GsQL/tp85Qv5cmRc8iIDNOZJS4IX1oPfcqp9b7BGPc5bfuw4yd1i3lQacvuqDQ==
+ dependencies:
+ "@kwsites/exec-p" "^0.4.0"
+ debug "^4.0.1"
+
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
+ dependencies:
+ is-arrayish "^0.3.1"
+
+single-trailing-newline@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/single-trailing-newline/-/single-trailing-newline-1.0.0.tgz#81f0ad2ad645181945c80952a5c1414992ee9664"
+ integrity sha1-gfCtKtZFGBlFyAlSpcFBSZLulmQ=
+ dependencies:
+ detect-newline "^1.0.3"
+
+sisteransi@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+slice-ansi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+ integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+slugify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.0.tgz#c9557c653c54b0c7f7a8e786ef3431add676d2cb"
+ integrity sha512-FtLNsMGBSRB/0JOE2A0fxlqjI6fJsgHGS13iTuVT28kViI4JjUiNqp/vyis0ZXYcMnpR3fzGNkv+6vRlI2GwdQ==
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+socket.io-adapter@~1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9"
+ integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==
+
+socket.io-client@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4"
+ integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==
+ dependencies:
+ backo2 "1.0.2"
+ base64-arraybuffer "0.1.5"
+ component-bind "1.0.0"
+ component-emitter "1.2.1"
+ debug "~4.1.0"
+ engine.io-client "~3.4.0"
+ has-binary2 "~1.0.2"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ socket.io-parser "~3.3.0"
+ to-array "0.1.4"
+
+socket.io-parser@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f"
+ integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ isarray "2.0.1"
+
+socket.io-parser@~3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a"
+ integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~4.1.0"
+ isarray "2.0.1"
+
+socket.io@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb"
+ integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==
+ dependencies:
+ debug "~4.1.0"
+ engine.io "~3.4.0"
+ has-binary2 "~1.0.2"
+ socket.io-adapter "~1.1.0"
+ socket.io-client "2.3.0"
+ socket.io-parser "~3.4.0"
+
+sockjs-client@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12"
+ integrity sha1-W6vjhrd15M8U51IJEUUmVAFsixI=
+ dependencies:
+ debug "^2.6.6"
+ eventsource "0.1.6"
+ faye-websocket "~0.11.0"
+ inherits "^2.0.1"
+ json3 "^3.3.2"
+ url-parse "^1.1.8"
+
+sockjs-client@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5"
+ integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==
+ dependencies:
+ debug "^3.2.5"
+ eventsource "^1.0.7"
+ faye-websocket "~0.11.1"
+ inherits "^2.0.3"
+ json3 "^3.3.2"
+ url-parse "^1.4.3"
+
+sockjs@0.3.20:
+ version "0.3.20"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855"
+ integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==
+ dependencies:
+ faye-websocket "^0.10.0"
+ uuid "^3.4.0"
+ websocket-driver "0.6.5"
+
+sort-keys-length@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188"
+ integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=
+ dependencies:
+ sort-keys "^1.0.0"
+
+sort-keys@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+sort-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
+ integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.16, source-map-support@~0.5.12:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@0.7.3, source-map@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sourcemap-codec@^1.4.4:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+ integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+space-separated-tokens@^1.0.0:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
+ integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+spdy-transport@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+ integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+ dependencies:
+ debug "^4.1.0"
+ detect-node "^2.0.4"
+ hpack.js "^2.1.6"
+ obuf "^1.1.2"
+ readable-stream "^3.0.6"
+ wbuf "^1.7.3"
+
+spdy@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
+ integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
+ dependencies:
+ debug "^4.1.0"
+ handle-thing "^2.0.0"
+ http-deceiver "^1.2.7"
+ select-hose "^2.0.0"
+ spdy-transport "^3.0.0"
+
+split-on-first@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
+ integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+squeak@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3"
+ integrity sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=
+ dependencies:
+ chalk "^1.0.0"
+ console-stream "^0.1.1"
+ lpad-align "^1.0.1"
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+st@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/st/-/st-2.0.0.tgz#eabd11e7722863b8ee8cfbdd027cb25e76ff35e9"
+ integrity sha512-drN+aGYnrZPNYIymmNwIY7LXYJ8MqsqXj4fMRue3FOgGMdGjSX10fhJ3qx0sVQPhcWxhEaN4U/eWM4O4dbYNAw==
+ dependencies:
+ async-cache "^1.1.0"
+ bl "^4.0.0"
+ fd "~0.0.2"
+ mime "^2.4.4"
+ negotiator "~0.6.2"
+ optionalDependencies:
+ graceful-fs "^4.2.3"
+
+stable@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+ integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+stack-trace@^0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
+ integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
+
+stack-utils@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
+ integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+
+stackframe@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303"
+ integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==
+
+state-toggle@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"
+ integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-parser@~0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773"
+ integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=
+ dependencies:
+ debug "2"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+strict-ui@^0.1.2:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/strict-ui/-/strict-ui-0.1.3.tgz#3e73ef91b58ca86e24dac464dceddbbb5a2acadd"
+ integrity sha512-bbvWCY89TXb9Bkv7M0CWeFIJ8LXRvAxCqDkG3E87UGGuKAKShQzuziebnNEHgdgxQwvr/OJUxL/PJUIp+A0hwA==
+ dependencies:
+ "@theme-ui/components" ">= 0.4.0-alpha.0"
+ "@theme-ui/css" ">= 0.4.0-alpha.0"
+ "@types/reflexbox" "^4.0.0"
+ emotion "^10.0.27"
+ reflexbox "^4.0.6"
+ theme-ui ">= 0.4.0-alpha.0"
+
+strict-uri-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+ integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+
+strict-uri-encode@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
+ integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
+
+string-length@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"
+ integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^5.2.0"
+
+string-similarity@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-1.2.2.tgz#99b2c20a3c9bbb3903964eae1d89856db3d8db9b"
+ integrity sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==
+ dependencies:
+ lodash.every "^4.6.0"
+ lodash.flattendeep "^4.4.0"
+ lodash.foreach "^4.5.0"
+ lodash.map "^4.6.0"
+ lodash.maxby "^4.6.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string.prototype.matchall@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e"
+ integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0"
+ has-symbols "^1.0.1"
+ internal-slot "^1.0.2"
+ regexp.prototype.flags "^1.3.0"
+ side-channel "^1.0.2"
+
+string.prototype.trimend@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
+ integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+string.prototype.trimleft@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"
+ integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+ string.prototype.trimstart "^1.0.0"
+
+string.prototype.trimright@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"
+ integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+ string.prototype.trimend "^1.0.0"
+
+string.prototype.trimstart@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
+ integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+stringify-entities@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.0.1.tgz#32154b91286ab0869ab2c07696223bd23b6dbfc0"
+ integrity sha512-Lsk3ISA2++eJYqBMPKcr/8eby1I6L0gP0NlxF8Zja6c05yr/yCYyb2c9PwXjd08Ib3If1vn1rbs1H5ZtVuOfvQ==
+ dependencies:
+ character-entities-html4 "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.2"
+ is-hexadecimal "^1.0.0"
+
+stringify-object@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@3.0.1, strip-ansi@^3, strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-comments@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d"
+ integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==
+ dependencies:
+ babel-extract-comments "^1.0.0"
+ babel-plugin-transform-object-rest-spread "^6.26.0"
+
+strip-dirs@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
+ integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==
+ dependencies:
+ is-natural-number "^4.0.1"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
+ integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+strip-outer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
+ integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
+ dependencies:
+ escape-string-regexp "^1.0.2"
+
+style-loader@^0.23.1:
+ version "0.23.1"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+ integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+
+style-to-object@0.3.0, style-to-object@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46"
+ integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==
+ dependencies:
+ inline-style-parser "0.1.1"
+
+style-to-object@^0.2.1:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.3.tgz#afcf42bc03846b1e311880c55632a26ad2780bcb"
+ integrity sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng==
+ dependencies:
+ inline-style-parser "0.1.1"
+
+styled-system@^5.0.0, styled-system@^5.1.5:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-5.1.5.tgz#e362d73e1dbb5641a2fd749a6eba1263dc85075e"
+ integrity sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==
+ dependencies:
+ "@styled-system/background" "^5.1.2"
+ "@styled-system/border" "^5.1.5"
+ "@styled-system/color" "^5.1.2"
+ "@styled-system/core" "^5.1.2"
+ "@styled-system/flexbox" "^5.1.2"
+ "@styled-system/grid" "^5.1.2"
+ "@styled-system/layout" "^5.1.2"
+ "@styled-system/position" "^5.1.2"
+ "@styled-system/shadow" "^5.1.2"
+ "@styled-system/space" "^5.1.2"
+ "@styled-system/typography" "^5.1.2"
+ "@styled-system/variant" "^5.1.5"
+ object-assign "^4.1.1"
+
+stylehacks@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
+ integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
+stylis@^3.5.4:
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe"
+ integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==
+
+subscriptions-transport-ws@0.9.16, subscriptions-transport-ws@^0.9.16:
+ version "0.9.16"
+ resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz#90a422f0771d9c32069294c08608af2d47f596ec"
+ integrity sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==
+ dependencies:
+ backo2 "^1.0.2"
+ eventemitter3 "^3.1.0"
+ iterall "^1.2.1"
+ symbol-observable "^1.0.4"
+ ws "^5.2.0"
+
+sudo-prompt@^8.2.0:
+ version "8.2.5"
+ resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e"
+ integrity sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^5.3.0, supports-color@^5.4.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.0.0, supports-color@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
+ integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-hyperlinks@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47"
+ integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==
+ dependencies:
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
+
+svg-tag-names@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/svg-tag-names/-/svg-tag-names-2.0.1.tgz#acf5655faaa2e4b173007599226b906be1b38a29"
+ integrity sha512-BEZ508oR+X/b5sh7bT0RqDJ7GhTpezjj3P1D4kugrOaPs6HijviWksoQ63PS81vZn0QCjZmVKjHDBniTo+Domg==
+
+svgo@1.3.2, svgo@^1.0.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+ integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
+ dependencies:
+ chalk "^2.4.1"
+ coa "^2.0.2"
+ css-select "^2.0.0"
+ css-select-base-adapter "^0.1.1"
+ css-tree "1.0.0-alpha.37"
+ csso "^4.0.2"
+ js-yaml "^3.13.1"
+ mkdirp "~0.5.1"
+ object.values "^1.1.0"
+ sax "~1.2.4"
+ stable "^0.1.8"
+ unquote "~1.1.1"
+ util.promisify "~1.0.0"
+
+symbol-observable@^1.0.4, symbol-observable@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+synchronous-promise@^2.0.10:
+ version "2.0.13"
+ resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.13.tgz#9d8c165ddee69c5a6542862b405bc50095926702"
+ integrity sha512-R9N6uDkVsghHePKh1TEqbnLddO2IY25OcsksyFp/qBe7XYd0PVbKEWxhcdMhpLzE1I6skj5l4aEZ3CRxcbArlA==
+
+tabbable@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-4.0.0.tgz#5bff1d1135df1482cf0f0206434f15eadbeb9261"
+ integrity sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==
+
+table@^5.2.3:
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tar-fs@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5"
+ integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp-classic "^0.5.2"
+ pump "^3.0.0"
+ tar-stream "^2.0.0"
+
+tar-stream@^1.5.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
+ integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
+ dependencies:
+ bl "^1.0.0"
+ buffer-alloc "^1.2.0"
+ end-of-stream "^1.0.0"
+ fs-constants "^1.0.0"
+ readable-stream "^2.3.0"
+ to-buffer "^1.1.1"
+ xtend "^4.0.0"
+
+tar-stream@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325"
+ integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==
+ dependencies:
+ bl "^4.0.1"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+tar@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.2.tgz#5df17813468a6264ff14f766886c622b84ae2f39"
+ integrity sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^3.0.0"
+ minizlib "^2.1.0"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
+temp-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
+ integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
+
+tempfile@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-2.0.0.tgz#6b0446856a9b1114d1856ffcbe509cccb0977265"
+ integrity sha1-awRGhWqbERTRhW/8vlCczLCXcmU=
+ dependencies:
+ temp-dir "^1.0.0"
+ uuid "^3.0.1"
+
+term-size@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
+ integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
+ dependencies:
+ execa "^0.7.0"
+
+term-size@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753"
+ integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==
+
+terminal-link@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ supports-hyperlinks "^2.0.0"
+
+terser-webpack-plugin@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c"
+ integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^2.1.2"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^4.1.2:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006"
+ integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+text-table@0.2.0, text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+"theme-ui@>= 0.4.0-alpha.0", theme-ui@^0.4.0-alpha.3:
+ version "0.4.0-highlight.0"
+ resolved "https://registry.yarnpkg.com/theme-ui/-/theme-ui-0.4.0-highlight.0.tgz#461ee37d5091a53430e45479b3966ba122ec31f0"
+ integrity sha512-Eg8ATVmgEpUwtQ0gWOrci3Y4A6s1S3DOgBmEj99W9JugIQ6XXWwa0rYO43vmwhoXPq6/vEDqKDA5QapaRKpJQw==
+ dependencies:
+ "@theme-ui/color-modes" "^0.4.0-highlight.0"
+ "@theme-ui/components" "^0.4.0-highlight.0"
+ "@theme-ui/core" "^0.4.0-highlight.0"
+ "@theme-ui/css" "^0.4.0-highlight.0"
+ "@theme-ui/mdx" "^0.4.0-highlight.0"
+ "@theme-ui/theme-provider" "^0.4.0-highlight.0"
+ "@types/theme-ui__components" "^0.2.3"
+
+theme-ui@^0.2.49:
+ version "0.2.52"
+ resolved "https://registry.yarnpkg.com/theme-ui/-/theme-ui-0.2.52.tgz#c041a32b0b257fc8ecbae273e14e92abd48c0f2d"
+ integrity sha512-JFujorP5aFxIm1UyVCtefN5baXjwh5TXHKFYNWgAP+3rqVvggIr46uSMrRNvDjyhFOQiMK8YI8ctPQrrhcETpw==
+ dependencies:
+ "@emotion/is-prop-valid" "^0.8.1"
+ "@styled-system/css" "^5.0.16"
+ deepmerge "^4.0.0"
+
+through2@^2.0.0, through2@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through@^2.3.6, through@^2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+thunky@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+ integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+timed-out@^4.0.0, timed-out@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+ integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+
+timers-browserify@^2.0.4:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+timm@^1.6.1:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.2.tgz#dfd8c6719f7ba1fcfc6295a32670a1c6d166c0bd"
+ integrity sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw==
+
+timsort@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
+ integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+
+tiny-warning@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+ integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tinycolor2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
+ integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+tmp@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
+ integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
+ dependencies:
+ rimraf "^3.0.0"
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+ integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-buffer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
+ integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-readable-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
+ integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+toposort@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+ integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
+
+tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+trim-lines@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.3.tgz#839514be82428fd9e7ec89e35081afe8f6f93115"
+ integrity sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+trim-repeated@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
+ integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE=
+ dependencies:
+ escape-string-regexp "^1.0.2"
+
+trim-trailing-lines@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94"
+ integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==
+
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+ integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
+
+trough@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
+ integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
+
+"true-case-path@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf"
+ integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==
+
+ts-invariant@^0.4.0:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86"
+ integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==
+ dependencies:
+ tslib "^1.9.3"
+
+ts-pnp@^1.1.6:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
+ integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
+
+tslib@^1.0.0, tslib@^1.10.0, tslib@^1.11.1, tslib@^1.11.2, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
+ integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+
+tslib@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3"
+ integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==
+
+tsutils@^3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
+ integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+ dependencies:
+ tslib "^1.8.1"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-fest@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
+ integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+
+type-fest@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+ integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
+
+type-fest@^0.8.0, type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+type-is@~1.6.17, type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+type-of@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/type-of/-/type-of-2.0.1.tgz#e72a1741896568e9f628378d816d6912f7f23972"
+ integrity sha1-5yoXQYllaOn2KDeNgW1pEvfyOXI=
+
+type@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+ integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
+ integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript@^3.9.2:
+ version "3.9.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.3.tgz#d3ac8883a97c26139e42df5e93eeece33d610b8a"
+ integrity sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==
+
+ua-parser-js@^0.7.18:
+ version "0.7.21"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777"
+ integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==
+
+unbzip2-stream@^1.0.9:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
+ integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
+ dependencies:
+ buffer "^5.2.1"
+ through "^2.3.8"
+
+unc-path-regex@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+ integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
+
+unherit@^1.0.4:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
+ integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==
+ dependencies:
+ inherits "^2.0.0"
+ xtend "^4.0.0"
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"
+ integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
+ integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
+
+unified@9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-9.0.0.tgz#12b099f97ee8b36792dbad13d278ee2f696eed1d"
+ integrity sha512-ssFo33gljU3PdlWLjNp15Inqb77d6JnJSfyplGJPT/a+fNRNyCBeveBAYJdO5khKdF6WVHa/yYCC7Xl6BDwZUQ==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-buffer "^2.0.0"
+ is-plain-obj "^2.0.0"
+ trough "^1.0.0"
+ vfile "^4.0.0"
+
+unified@^8.4.2:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1"
+ integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-plain-obj "^2.0.0"
+ trough "^1.0.0"
+ vfile "^4.0.0"
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+uniqs@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+ integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unique-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
+ dependencies:
+ crypto-random-string "^1.0.0"
+
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ dependencies:
+ crypto-random-string "^2.0.0"
+
+unist-builder@2.0.3, unist-builder@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436"
+ integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==
+
+unist-util-generated@^1.0.0:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42"
+ integrity sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==
+
+unist-util-is@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd"
+ integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==
+
+unist-util-is@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.2.tgz#c7d1341188aa9ce5b3cff538958de9895f14a5de"
+ integrity sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==
+
+unist-util-position@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47"
+ integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==
+
+unist-util-remove-position@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020"
+ integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+unist-util-remove-position@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc"
+ integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+unist-util-remove@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.0.tgz#32c2ad5578802f2ca62ab808173d505b2c898488"
+ integrity sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==
+ dependencies:
+ unist-util-is "^4.0.0"
+
+unist-util-stringify-position@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
+ integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
+ dependencies:
+ "@types/unist" "^2.0.2"
+
+unist-util-visit-parents@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9"
+ integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==
+ dependencies:
+ unist-util-is "^3.0.0"
+
+unist-util-visit-parents@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz#d4076af3011739c71d2ce99d05de37d545f4351d"
+ integrity sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+
+unist-util-visit@2.0.2, unist-util-visit@^2.0.0, unist-util-visit@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.2.tgz#3843782a517de3d2357b4c193b24af2d9366afb7"
+ integrity sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+ unist-util-visit-parents "^3.0.0"
+
+unist-util-visit@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3"
+ integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==
+ dependencies:
+ unist-util-visit-parents "^2.0.0"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
+ integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
+
+unixify@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090"
+ integrity sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA=
+ dependencies:
+ normalize-path "^2.1.1"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unquote@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+ integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+update-notifier@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-3.0.1.tgz#78ecb68b915e2fd1be9f767f6e298ce87b736250"
+ integrity sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==
+ dependencies:
+ boxen "^3.0.0"
+ chalk "^2.0.1"
+ configstore "^4.0.0"
+ has-yarn "^2.1.0"
+ import-lazy "^2.1.0"
+ is-ci "^2.0.0"
+ is-installed-globally "^0.1.0"
+ is-npm "^3.0.0"
+ is-yarn-global "^0.3.0"
+ latest-version "^5.0.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-loader@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8"
+ integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
+ dependencies:
+ loader-utils "^1.1.0"
+ mime "^2.0.3"
+ schema-utils "^1.0.0"
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
+ dependencies:
+ prepend-http "^1.0.1"
+
+url-parse-lax@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
+ integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
+ dependencies:
+ prepend-http "^2.0.0"
+
+url-parse@^1.1.8, url-parse@^1.4.3:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
+ integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
+ dependencies:
+ querystringify "^2.1.1"
+ requires-port "^1.0.0"
+
+url-to-options@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
+ integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+urql@^1.9.7:
+ version "1.9.7"
+ resolved "https://registry.yarnpkg.com/urql/-/urql-1.9.7.tgz#d3970a3af4a9d46528ec7c2f2e9839944875d8bf"
+ integrity sha512-zMLVeoAzY+C/RQGXjYYNC/XMqzMoyF1xjMNELTz4FNwXMEnk1wfCbgcQBbHyRVPql/9/CjY9Igq7AxUfY67Y5Q==
+ dependencies:
+ "@urql/core" "^1.11.0"
+ wonka "^4.0.9"
+
+use-callback-ref@^1.2.1, use-callback-ref@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.3.tgz#9f939dfb5740807bbf9dd79cdd4e99d27e827756"
+ integrity sha512-DPBPh1i2adCZoIArRlTuKRy7yue7QogtEnfv0AKrWsY+GA+4EKe37zhRDouNnyWMoNQFYZZRF+2dLHsWE4YvJA==
+
+use-sidecar@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.2.tgz#e72f582a75842f7de4ef8becd6235a4720ad8af6"
+ integrity sha512-287RZny6m5KNMTb/Kq9gmjafi7lQL0YHO1lYolU6+tY1h9+Z3uCtkJJ3OSOq3INwYf2hBryCcDh4520AhJibMA==
+ dependencies:
+ detect-node "^2.0.4"
+ tslib "^1.9.3"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+utif@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"
+ integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==
+ dependencies:
+ pako "^1.0.5"
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@^1.0.1, util.promisify@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
+ integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.2"
+ has-symbols "^1.0.1"
+ object.getownpropertydescriptors "^2.1.0"
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+utila@^0.4.0, utila@~0.4:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+ integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@3.4.0, uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+uuid@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
+ integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
+
+v8-compile-cache@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4"
+ integrity sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==
+
+v8-compile-cache@^2.0.3:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745"
+ integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==
+
+valid-url@1.0.9, valid-url@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
+ integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+vary@^1, vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+vendors@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
+ integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vfile-location@^2.0.0:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e"
+ integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==
+
+vfile-location@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3"
+ integrity sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==
+
+vfile-message@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
+ integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+vfile@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.1.1.tgz#282d28cebb609183ac51703001bc18b3e3f17de9"
+ integrity sha512-lRjkpyDGjVlBA7cDQhQ+gNcvB1BGaTHYuSOcY3S7OhDmBtnzX95FhtZZDecSTDm6aajFymyve6S5DN4ZHGezdQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ is-buffer "^2.0.0"
+ replace-ext "1.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-message "^2.0.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+vue-template-compiler@^2.6.11:
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080"
+ integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==
+ dependencies:
+ de-indent "^1.0.2"
+ he "^1.1.0"
+
+warning@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
+ integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
+ dependencies:
+ loose-envify "^1.0.0"
+
+warning@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+ integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+ dependencies:
+ loose-envify "^1.0.0"
+
+watchpack-chokidar2@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0"
+ integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==
+ dependencies:
+ chokidar "^2.1.8"
+
+watchpack@^1.6.1:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa"
+ integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==
+ dependencies:
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+ optionalDependencies:
+ chokidar "^3.4.0"
+ watchpack-chokidar2 "^2.0.0"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+ integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+ dependencies:
+ minimalistic-assert "^1.0.0"
+
+web-namespaces@^1.0.0, web-namespaces@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec"
+ integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==
+
+webpack-dev-middleware@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3"
+ integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==
+ dependencies:
+ memory-fs "^0.4.1"
+ mime "^2.4.4"
+ mkdirp "^0.5.1"
+ range-parser "^1.2.1"
+ webpack-log "^2.0.0"
+
+webpack-dev-server@^3.11.0:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c"
+ integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==
+ dependencies:
+ ansi-html "0.0.7"
+ bonjour "^3.5.0"
+ chokidar "^2.1.8"
+ compression "^1.7.4"
+ connect-history-api-fallback "^1.6.0"
+ debug "^4.1.1"
+ del "^4.1.1"
+ express "^4.17.1"
+ html-entities "^1.3.1"
+ http-proxy-middleware "0.19.1"
+ import-local "^2.0.0"
+ internal-ip "^4.3.0"
+ ip "^1.1.5"
+ is-absolute-url "^3.0.3"
+ killable "^1.0.1"
+ loglevel "^1.6.8"
+ opn "^5.5.0"
+ p-retry "^3.0.1"
+ portfinder "^1.0.26"
+ schema-utils "^1.0.0"
+ selfsigned "^1.10.7"
+ semver "^6.3.0"
+ serve-index "^1.9.1"
+ sockjs "0.3.20"
+ sockjs-client "1.4.0"
+ spdy "^4.0.2"
+ strip-ansi "^3.0.1"
+ supports-color "^6.1.0"
+ url "^0.11.0"
+ webpack-dev-middleware "^3.7.2"
+ webpack-log "^2.0.0"
+ ws "^6.2.1"
+ yargs "^13.3.2"
+
+webpack-hot-middleware@^2.25.0:
+ version "2.25.0"
+ resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706"
+ integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==
+ dependencies:
+ ansi-html "0.0.7"
+ html-entities "^1.2.0"
+ querystring "^0.2.0"
+ strip-ansi "^3.0.0"
+
+webpack-log@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
+ integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
+ dependencies:
+ ansi-colors "^3.0.0"
+ uuid "^3.3.2"
+
+webpack-merge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d"
+ integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==
+ dependencies:
+ lodash "^4.17.15"
+
+webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack-stats-plugin@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.3.1.tgz#1103c39a305a4e6ba15d5078db84bc0b35447417"
+ integrity sha512-pxqzFE055NlNTlNyfDG3xlB2QwT1EWdm/CF5dCJI/e+rRHVxrWhWg1rf1lfsWhI1/EePv8gi/A36YxO/+u0FgQ==
+
+webpack@~4.43.0:
+ version "4.43.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6"
+ integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/wasm-edit" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ acorn "^6.4.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.3"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.6.1"
+ webpack-sources "^1.4.1"
+
+websocket-driver@0.6.5, websocket-driver@>=0.5.1:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36"
+ integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=
+ dependencies:
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
+ integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
+
+websocket@1.0.31:
+ version "1.0.31"
+ resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.31.tgz#e5d0f16c3340ed87670e489ecae6144c79358730"
+ integrity sha512-VAouplvGKPiKFDTeCCO65vYHsyay8DqoBSlzIO3fayrfOgU94lQN5a1uWVnFrMLceTJw/+fQXR5PGbUVRaHshQ==
+ dependencies:
+ debug "^2.2.0"
+ es5-ext "^0.10.50"
+ nan "^2.14.0"
+ typedarray-to-buffer "^3.1.5"
+ yaeti "^0.0.6"
+
+whatwg-fetch@2.0.4, whatwg-fetch@>=0.10.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
+ integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
+
+whatwg-fetch@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
+ integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which-pm-runs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
+ integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
+
+which@^1.2.14, which@^1.2.9:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+widest-line@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
+ integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
+ dependencies:
+ string-width "^2.1.1"
+
+widest-line@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
+ integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
+ dependencies:
+ string-width "^4.0.0"
+
+with-open-file@^0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/with-open-file/-/with-open-file-0.1.7.tgz#e2de8d974e8a8ae6e58886be4fe8e7465b58a729"
+ integrity sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==
+ dependencies:
+ p-finally "^1.0.0"
+ p-try "^2.1.0"
+ pify "^4.0.1"
+
+wonka@^4.0.10, wonka@^4.0.9:
+ version "4.0.14"
+ resolved "https://registry.yarnpkg.com/wonka/-/wonka-4.0.14.tgz#77d680a84e575ed15a9f975eb87d6c530488f3a4"
+ integrity sha512-v9vmsTxpZjrA8CYfztbuoTQSHEsG3ZH+NCYfasHm0V3GqBupXrjuuz0RJyUaw2cRO7ouW2js0P6i853/qxlDcA==
+
+word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+workbox-background-sync@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz#26821b9bf16e9e37fd1d640289edddc08afd1950"
+ integrity sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-broadcast-update@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz#e2c0280b149e3a504983b757606ad041f332c35b"
+ integrity sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-build@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-4.3.1.tgz#414f70fb4d6de47f6538608b80ec52412d233e64"
+ integrity sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==
+ dependencies:
+ "@babel/runtime" "^7.3.4"
+ "@hapi/joi" "^15.0.0"
+ common-tags "^1.8.0"
+ fs-extra "^4.0.2"
+ glob "^7.1.3"
+ lodash.template "^4.4.0"
+ pretty-bytes "^5.1.0"
+ stringify-object "^3.3.0"
+ strip-comments "^1.0.2"
+ workbox-background-sync "^4.3.1"
+ workbox-broadcast-update "^4.3.1"
+ workbox-cacheable-response "^4.3.1"
+ workbox-core "^4.3.1"
+ workbox-expiration "^4.3.1"
+ workbox-google-analytics "^4.3.1"
+ workbox-navigation-preload "^4.3.1"
+ workbox-precaching "^4.3.1"
+ workbox-range-requests "^4.3.1"
+ workbox-routing "^4.3.1"
+ workbox-strategies "^4.3.1"
+ workbox-streams "^4.3.1"
+ workbox-sw "^4.3.1"
+ workbox-window "^4.3.1"
+
+workbox-cacheable-response@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz#f53e079179c095a3f19e5313b284975c91428c91"
+ integrity sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-core@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-4.3.1.tgz#005d2c6a06a171437afd6ca2904a5727ecd73be6"
+ integrity sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==
+
+workbox-expiration@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-4.3.1.tgz#d790433562029e56837f341d7f553c4a78ebe921"
+ integrity sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-google-analytics@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz#9eda0183b103890b5c256e6f4ea15a1f1548519a"
+ integrity sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==
+ dependencies:
+ workbox-background-sync "^4.3.1"
+ workbox-core "^4.3.1"
+ workbox-routing "^4.3.1"
+ workbox-strategies "^4.3.1"
+
+workbox-navigation-preload@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz#29c8e4db5843803b34cd96dc155f9ebd9afa453d"
+ integrity sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-precaching@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-4.3.1.tgz#9fc45ed122d94bbe1f0ea9584ff5940960771cba"
+ integrity sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-range-requests@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz#f8a470188922145cbf0c09a9a2d5e35645244e74"
+ integrity sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-routing@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-4.3.1.tgz#a675841af623e0bb0c67ce4ed8e724ac0bed0cda"
+ integrity sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-strategies@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-4.3.1.tgz#d2be03c4ef214c115e1ab29c9c759c9fe3e9e646"
+ integrity sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-streams@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-4.3.1.tgz#0b57da70e982572de09c8742dd0cb40a6b7c2cc3"
+ integrity sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==
+ dependencies:
+ workbox-core "^4.3.1"
+
+workbox-sw@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-4.3.1.tgz#df69e395c479ef4d14499372bcd84c0f5e246164"
+ integrity sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==
+
+workbox-window@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-4.3.1.tgz#ee6051bf10f06afa5483c9b8dfa0531994ede0f3"
+ integrity sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==
+ dependencies:
+ workbox-core "^4.3.1"
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^5.0.0, wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@^2.0.0:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
+ integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@^5.2.0:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
+ integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+ws@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
+ integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+ws@^7.1.2, ws@^7.3.0:
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd"
+ integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==
+
+ws@~6.1.0:
+ version "6.1.4"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9"
+ integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+ integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
+
+xdg-basedir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
+ integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
+
+xhr@^2.0.1:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd"
+ integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==
+ dependencies:
+ global "~4.3.0"
+ is-function "^1.0.1"
+ parse-headers "^2.0.0"
+ xtend "^4.0.0"
+
+xml-parse-from-string@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
+ integrity sha1-qQKekp09vN7RafPG4oI42VpdWig=
+
+xml2js@^0.4.5:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
+ integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~11.0.0"
+
+xmlbuilder@~11.0.0:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
+ integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
+
+xmlhttprequest-ssl@~1.5.4:
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
+ integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
+
+xregexp@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50"
+ integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==
+ dependencies:
+ "@babel/runtime-corejs3" "^7.8.3"
+
+xstate@^4.9.1:
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.10.0.tgz#f87e4ef593fe40300b8eec50a5d9f0763aa4f622"
+ integrity sha512-nncQ9gW+xgk5iUEvpBOXhbzSCS0uwzzT4bOAXxo6oUoALgbxzqEyMmaMYwuvOHrabDTdMJYnF+xe2XD8RRgWmA==
+
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yaeti@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
+ integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=
+
+yallist@^2.0.0, yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml-loader@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/yaml-loader/-/yaml-loader-0.6.0.tgz#fe1c48b9f4803dace55a59a1474e790ba6ab1b48"
+ integrity sha512-1bNiLelumURyj+zvVHOv8Y3dpCri0F2S+DCcmps0pA1zWRLjS+FhZQg4o3aUUDYESh73+pKZNI18bj7stpReow==
+ dependencies:
+ loader-utils "^1.4.0"
+ yaml "^1.8.3"
+
+yaml@^1.7.2, yaml@^1.8.3:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
+ integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
+
+yargs-parser@^13.1.2:
+ version "13.1.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+ integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^15.0.1:
+ version "15.0.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3"
+ integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^18.1.1:
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@^13.2.1, yargs@^13.3.2:
+ version "13.3.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+ integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.2"
+
+yargs@^14.2.0:
+ version "14.2.3"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
+ integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
+ dependencies:
+ cliui "^5.0.0"
+ decamelize "^1.2.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^15.0.1"
+
+yargs@^15.3.1:
+ version "15.3.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
+ integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==
+ dependencies:
+ cliui "^6.0.0"
+ decamelize "^1.2.0"
+ find-up "^4.1.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^4.2.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^18.1.1"
+
+yauzl@^2.4.2:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+ integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.1.0"
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+ integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
+
+yoga-layout-prebuilt@^1.9.3:
+ version "1.9.6"
+ resolved "https://registry.yarnpkg.com/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.9.6.tgz#98dde95bbf8e6e12835876e9305f1e995c4bb801"
+ integrity sha512-Wursw6uqLXLMjBAO4SEShuzj8+EJXhCF71/rJ7YndHTkRAYSU0GY3OghRqfAk9HPUAAFMuqp3U1Wl+01vmGRQQ==
+ dependencies:
+ "@types/yoga-layout" "1.9.2"
+
+yup@^0.29.0:
+ version "0.29.1"
+ resolved "https://registry.yarnpkg.com/yup/-/yup-0.29.1.tgz#35d25aab470a0c3950f66040ba0ff4b1b6efe0d9"
+ integrity sha512-U7mPIbgfQWI6M3hZCJdGFrr+U0laG28FxMAKIgNvgl7OtyYuUoc4uy9qCWYHZjh49b8T7Ug8NNDdiMIEytcXrQ==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ fn-name "~3.0.0"
+ lodash "^4.17.15"
+ lodash-es "^4.17.11"
+ property-expr "^2.0.2"
+ synchronous-promise "^2.0.10"
+ toposort "^2.0.2"
+
+yurnalist@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/yurnalist/-/yurnalist-1.1.2.tgz#0fce283f1c53ea25ec278e2d1ab58537323b63e0"
+ integrity sha512-y7bsTXqL+YMJQ2De2CBtSftJNLQnB7gWIzzKm10GDyC8Fg4Dsmd2LG5YhT8pudvUiuotic80WVXt/g1femRVQg==
+ dependencies:
+ babel-runtime "^6.26.0"
+ chalk "^2.4.2"
+ cli-table3 "^0.5.1"
+ debug "^4.1.1"
+ deep-equal "^1.1.0"
+ detect-indent "^6.0.0"
+ inquirer "^7.0.0"
+ invariant "^2.2.0"
+ is-builtin-module "^3.0.0"
+ is-ci "^2.0.0"
+ leven "^3.1.0"
+ loud-rejection "^2.2.0"
+ node-emoji "^1.10.0"
+ object-path "^0.11.2"
+ read "^1.0.7"
+ rimraf "^3.0.0"
+ semver "^6.3.0"
+ strip-ansi "^5.2.0"
+ strip-bom "^4.0.0"
+
+zen-observable-ts@^0.8.21:
+ version "0.8.21"
+ resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d"
+ integrity sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==
+ dependencies:
+ tslib "^1.9.3"
+ zen-observable "^0.8.0"
+
+zen-observable@^0.8.0:
+ version "0.8.15"
+ resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15"
+ integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==
+
+zwitch@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
+ integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==
diff --git a/@linaria/greenkeeper.json b/@linaria/greenkeeper.json
new file mode 100644
index 0000000..3ab93c3
--- /dev/null
+++ b/@linaria/greenkeeper.json
@@ -0,0 +1,10 @@
+{
+ "groups": {
+ "default": {
+ "packages": [
+ "package.json",
+ "website/package.json"
+ ]
+ }
+ }
+}
diff --git a/@linaria/jest.config.js b/@linaria/jest.config.js
new file mode 100644
index 0000000..6b62568
--- /dev/null
+++ b/@linaria/jest.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ testEnvironment: 'node',
+ collectCoverageFrom: ['src/*.ts'],
+ transformIgnorePatterns: ['node_modules/(?!@linaria)'],
+};
diff --git a/@linaria/lerna.json b/@linaria/lerna.json
new file mode 100644
index 0000000..2820e69
--- /dev/null
+++ b/@linaria/lerna.json
@@ -0,0 +1,23 @@
+{
+ "npmClient": "yarn",
+ "useWorkspaces": true,
+ "packages": [
+ "./packages/*",
+ "./website"
+ ],
+ "version": "3.0.0-beta.11",
+ "command": {
+ "publish": {
+ "allowBranch": "master",
+ "conventionalCommits": true,
+ "createRelease": "github",
+ "message": "chore: publish",
+ "ignoreChanges": [
+ "**/__fixtures__/**",
+ "**/__tests__/**",
+ "**/*.md",
+ "**/website/**"
+ ]
+ }
+ }
+}
diff --git a/@linaria/package.json b/@linaria/package.json
new file mode 100644
index 0000000..252b2e7
--- /dev/null
+++ b/@linaria/package.json
@@ -0,0 +1,76 @@
+{
+ "private": true,
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "scripts": {
+ "add-contributor": "all-contributors add",
+ "bootstrap": "yarn && yarn website install",
+ "check:all": "yarn test:dts && yarn typecheck && yarn test && yarn lint",
+ "clean": "del 'packages/*/{coverage,esm,lib,types,tsconfig.tsbuildinfo}'",
+ "lint": "eslint --ext .js,.ts,.tsx .",
+ "prepare": "lerna-to-typescript-project-references --update && yarn lerna run prepare",
+ "release": "release-it",
+ "test": "yarn lerna run test",
+ "test:coverage": "yarn lerna run test -- -- --coverage",
+ "test:dts": "yarn lerna run test:dts",
+ "typecheck": "yarn lerna run typecheck",
+ "watch": "lerna run --parallel watch",
+ "website": "yarn --cwd website"
+ },
+ "devDependencies": {
+ "@babel/cli": ">=7",
+ "@babel/core": ">=7",
+ "@babel/plugin-proposal-class-properties": ">=7",
+ "@babel/plugin-syntax-jsx": ">=7",
+ "@babel/preset-env": ">=7",
+ "@babel/preset-react": ">=7",
+ "@babel/preset-typescript": ">=7",
+ "@callstack/eslint-config": "^10.2.0",
+ "@commitlint/config-conventional": "^8.3.4",
+ "@release-it/conventional-changelog": "^1.1.0",
+ "@types/jest": "^24.9.1",
+ "@typescript-eslint/eslint-plugin": "^4.28.0",
+ "@typescript-eslint/parser": "^4.28.0",
+ "all-contributors-cli": "^6.1.1",
+ "babel-jest": "^27.0.5",
+ "codecov": "^3.2.0",
+ "commitlint": "^8.3.5",
+ "cross-env": "^7.0.3",
+ "del-cli": "^1.1.0",
+ "dtslint": "^4.0.4",
+ "eslint": "^7.6.0",
+ "eslint-plugin-prettier": "^3.1.4",
+ "husky": "^1.3.1",
+ "jest": "^24.9.0",
+ "lerna": "^3.22.1",
+ "lerna-changelog": "^1.0.1",
+ "lerna-to-typescript-project-references": "^0.0.6",
+ "prettier": "^2.0.5",
+ "react": ">=16",
+ "release-it": "^14.2.1",
+ "release-it-lerna-changelog": "^3.1.0",
+ "typescript": "^3.9.7"
+ },
+ "resolutions": {
+ "@typescript-eslint/experimental-utils": "^4.28.0",
+ "git-raw-commits": "^2.0.3"
+ },
+ "husky": {
+ "hooks": {
+ "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
+ "pre-commit": "yarn check:all"
+ }
+ },
+ "workspaces": [
+ "./packages/*",
+ "./website"
+ ],
+ "dependencies": {
+ "git-raw-commits": "^2.0.3"
+ },
+ "name": "linaria"
+}
diff --git a/@linaria/packages/babel/CHANGELOG.md b/@linaria/packages/babel/CHANGELOG.md
new file mode 100644
index 0000000..fc18483
--- /dev/null
+++ b/@linaria/packages/babel/CHANGELOG.md
@@ -0,0 +1,55 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+
+### Bug Fixes
+
+* **shaker:** fix undefined imports in some cases ([#333](https://github.com/callstack/linaria/issues/333), [#761](https://github.com/callstack/linaria/issues/761)) ([#787](https://github.com/callstack/linaria/issues/787)) ([e374072](https://github.com/callstack/linaria/commit/e3740727447b2867a2cfe40f763bc88e72eb2503))
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+
+### Bug Fixes
+
+* **shaker:** typescript enums support ([#761](https://github.com/callstack/linaria/issues/761)) ([#764](https://github.com/callstack/linaria/issues/764)) ([6907e22](https://github.com/callstack/linaria/commit/6907e2280a2ab8ee014b5d02b1169714ccac9d66))
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/babel-preset
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/babel-preset
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+
+### Bug Fixes
+
+* Import custom identifier called css with error "Cannot find module 'linaria'" [#739](https://github.com/callstack/linaria/issues/739) ([#740](https://github.com/callstack/linaria/issues/740)) ([07fb381](https://github.com/callstack/linaria/commit/07fb38131c9dec406dcca72f45638561c815e824))
+* loadOptions text regex ([#728](https://github.com/callstack/linaria/issues/728)) ([34ca3e5](https://github.com/callstack/linaria/commit/34ca3e5f211b65c14c2bf4efabb7065f7109da23))
+
+
+### Features
+
+* **babel:** expose CSS extraction from AST logic ([#737](https://github.com/callstack/linaria/issues/737)) ([f049a11](https://github.com/callstack/linaria/commit/f049a119ef70346340676ab6a397ad6358e5f39b))
diff --git a/@linaria/packages/babel/README.md b/@linaria/packages/babel/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/babel/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/babel/__fixtures__/complex-component.js b/@linaria/packages/babel/__fixtures__/complex-component.js
new file mode 100644
index 0000000..0c9ae15
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/complex-component.js
@@ -0,0 +1,21 @@
+// Dead code in this file should be ignored
+
+import deadDep from 'unknown-dependency';
+import { styled } from '@linaria/react';
+
+export const deadValue = deadDep();
+
+const objects = { font: { fontSize: 12 }, box: { border: '1px solid red' } };
+const foo = (k) => {
+ const { [k]: obj } = objects;
+ return obj;
+};
+
+objects.font.fontWeight = 'bold';
+
+export const whiteColor = '#fff';
+
+export const Title = styled.h1`
+ ${foo('font')}
+ ${foo('box')}
+`;
diff --git a/@linaria/packages/babel/__fixtures__/components-library.js b/@linaria/packages/babel/__fixtures__/components-library.js
new file mode 100644
index 0000000..487648e
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/components-library.js
@@ -0,0 +1,16 @@
+import { styled } from '@linaria/react';
+
+export const T1 = styled.h1`
+ background: #111;
+`;
+export const T2 = styled.h2`
+ background: #222;
+`;
+export const T3 = styled.h3`
+ ${T2} {
+ background: #333;
+ }
+`;
+export default styled.p`
+ background: #333;
+`;
diff --git a/@linaria/packages/babel/__fixtures__/enums.ts b/@linaria/packages/babel/__fixtures__/enums.ts
new file mode 100644
index 0000000..aa87847
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/enums.ts
@@ -0,0 +1,3 @@
+export enum Colors {
+ BLUE = '#27509A',
+}
diff --git a/@linaria/packages/babel/__fixtures__/escape-character.js b/@linaria/packages/babel/__fixtures__/escape-character.js
new file mode 100644
index 0000000..c7f7deb
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/escape-character.js
@@ -0,0 +1,7 @@
+import { styled } from '@linaria/react';
+
+const selectors = ['a', 'b'];
+
+export const Block = styled.div`
+ ${selectors.map((c) => String.raw`${c} { content: "\u000A"; }`).join('\n')};
+`;
diff --git a/@linaria/packages/babel/__fixtures__/sample-asset.png b/@linaria/packages/babel/__fixtures__/sample-asset.png
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/sample-asset.png
diff --git a/@linaria/packages/babel/__fixtures__/sample-data.json b/@linaria/packages/babel/__fixtures__/sample-data.json
new file mode 100644
index 0000000..c623402
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/sample-data.json
@@ -0,0 +1,10 @@
+{
+ "name": "Luke Skywalker",
+ "height": "172",
+ "mass": "77",
+ "hair_color": "blond",
+ "skin_color": "fair",
+ "eye_color": "blue",
+ "birth_year": "19BBY",
+ "gender": "male"
+}
diff --git a/@linaria/packages/babel/__fixtures__/sample-script.js b/@linaria/packages/babel/__fixtures__/sample-script.js
new file mode 100644
index 0000000..888cae3
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/sample-script.js
@@ -0,0 +1 @@
+module.exports = 42;
diff --git a/@linaria/packages/babel/__fixtures__/sample-typescript.tsx b/@linaria/packages/babel/__fixtures__/sample-typescript.tsx
new file mode 100644
index 0000000..d33d509
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/sample-typescript.tsx
@@ -0,0 +1 @@
+export default 27;
diff --git a/@linaria/packages/babel/__fixtures__/slugify.ts b/@linaria/packages/babel/__fixtures__/slugify.ts
new file mode 100644
index 0000000..bc69242
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/slugify.ts
@@ -0,0 +1,3 @@
+import slugify from '../src/utils/slugify';
+
+export default slugify;
diff --git a/@linaria/packages/babel/__fixtures__/ts-data.ts b/@linaria/packages/babel/__fixtures__/ts-data.ts
new file mode 100644
index 0000000..222fe53
--- /dev/null
+++ b/@linaria/packages/babel/__fixtures__/ts-data.ts
@@ -0,0 +1,4 @@
+export enum TestEnum {
+ FirstValue,
+ SecondValue,
+}
diff --git a/@linaria/packages/babel/__tests__/__snapshots__/babel.test.ts.snap b/@linaria/packages/babel/__tests__/__snapshots__/babel.test.ts.snap
new file mode 100644
index 0000000..84be71a
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/__snapshots__/babel.test.ts.snap
@@ -0,0 +1,617 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`does not include styles if not referenced anywhere 1`] = `
+"import { css } from '@linaria/core';
+import { styled } from '@linaria/react';
+const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\"
+});
+const title = \\"tccybe9\\";"
+`;
+
+exports[`does not include styles if not referenced anywhere 2`] = `Object {}`;
+
+exports[`does not output CSS if none present 1`] = `
+"const number = 42;
+const title = String.raw\`This is something\`;"
+`;
+
+exports[`does not output CSS if none present 2`] = `Object {}`;
+
+exports[`does not output CSS property when value is a blank string 1`] = `
+"import { css } from '@linaria/core';
+export const title = \\"t17gu1mi\\";"
+`;
+
+exports[`does not output CSS property when value is a blank string 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: ;
+ margin: 6px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`evaluates and inlines expressions in scope 1`] = `
+"import { styled } from '@linaria/react';
+const color = 'blue';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\"
+});"
+`;
+
+exports[`evaluates and inlines expressions in scope 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ color: blue;
+ width: 33.333333333333336%;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`handles css template literal in JSX element 1`] = `
+"import { css } from '@linaria/core';
+<Title class={\\"t17gu1mi\\"} />;"
+`;
+
+exports[`handles css template literal in JSX element 2`] = `
+
+CSS:
+
+.t17gu1mi { font-size: 14px; }
+
+Dependencies: NA
+
+`;
+
+exports[`handles css template literal in object property 1`] = `
+"import { css } from '@linaria/core';
+const components = {
+ title: \\"t17gu1mi\\"
+};"
+`;
+
+exports[`handles css template literal in object property 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: 14px;
+ }
+
+Dependencies: NA
+
+`;
+
+exports[`handles fn passed in as classNameSlug 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled('h1')({
+ name: \\"Title\\",
+ class: \\"t17gu1mi_42_Title\\"
+});"
+`;
+
+exports[`handles fn passed in as classNameSlug 2`] = `
+
+CSS:
+
+.t17gu1mi_42_Title {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`handles interpolation followed by unit 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\",
+ vars: {
+ \\"t17gu1mi-0\\": [size, \\"em\\"],
+ \\"t17gu1mi-1\\": [shadow, \\"px\\"],
+ \\"t17gu1mi-2\\": [size, \\"px\\"],
+ \\"t17gu1mi-3\\": [props => props.width, \\"vw\\"],
+ \\"t17gu1mi-4\\": [props => {
+ if (true) {
+ return props.height;
+ } else {
+ return 200;
+ }
+ }, \\"px\\"],
+ \\"t17gu1mi-5\\": [unit, \\"fr\\"],
+ \\"t17gu1mi-7\\": [function (props) {
+ return 200;
+ }, \\"px\\"]
+ }
+});"
+`;
+
+exports[`handles interpolation followed by unit 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: var(--t17gu1mi-0);
+ text-shadow: black 1px var(--t17gu1mi-1), white -2px -2px;
+ margin: var(--t17gu1mi-2);
+ width: calc(2 * var(--t17gu1mi-3));
+ height: var(--t17gu1mi-4);
+ grid-template-columns: var(--t17gu1mi-5) 1fr 1fr var(--t17gu1mi-5);
+ border-radius: var(--t17gu1mi-7)
+}
+
+Dependencies: NA
+
+`;
+
+exports[`handles nested blocks 1`] = `
+"import { styled } from '@linaria/react';
+export const Button = /*#__PURE__*/styled(\\"button\\")({
+ name: \\"Button\\",
+ class: \\"b17gu1mi\\",
+ vars: {
+ \\"b17gu1mi-0\\": [regular]
+ }
+});"
+`;
+
+exports[`handles nested blocks 2`] = `
+
+CSS:
+
+.b17gu1mi {
+ font-family: var(--b17gu1mi-0);
+
+ &:hover {
+ border-color: blue;
+ }
+
+ @media (max-width: 200px) {
+ width: 100%;
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`handles objects with enums as keys 1`] = `
+"import { css } from '@linaria/core';
+import { TestEnum } from './ts-data.ts';
+export const object = {
+ [TestEnum.FirstValue]: \\"t17gu1mi\\",
+ [TestEnum.SecondValue]: \\"tccybe9\\"
+};"
+`;
+
+exports[`handles objects with enums as keys 2`] = `
+
+CSS:
+
+.t17gu1mi {}
+.tccybe9 {}
+
+Dependencies: NA
+
+`;
+
+exports[`handles objects with numeric keys 1`] = `
+"import { css } from '@linaria/core';
+export const object = {
+ stringKey: \\"s17gu1mi\\",
+ 42: \\"_ccybe9\\"
+};"
+`;
+
+exports[`handles objects with numeric keys 2`] = `
+
+CSS:
+
+.s17gu1mi {}
+._ccybe9 {}
+
+Dependencies: NA
+
+`;
+
+exports[`includes unreferenced styles for :global 1`] = `
+"import { css } from '@linaria/core';
+import { styled } from '@linaria/react';
+const a = \\"a17gu1mi\\";
+const B = /*#__PURE__*/styled(\\"div\\")({
+ name: \\"B\\",
+ class: \\"bccybe9\\"
+});"
+`;
+
+exports[`includes unreferenced styles for :global 2`] = `
+
+CSS:
+
+.a17gu1mi {
+ :global() {
+ .title {
+ font-size: 14px;
+ }
+ }
+}
+.bccybe9 {
+ :global(.title) {
+ font-size: 14px;
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`inlines array styles as CSS string 1`] = `
+"import { styled } from '@linaria/react';
+const styles = [{
+ flex: 1
+}, {
+ display: 'block',
+ height: 24
+}];
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\"
+});"
+`;
+
+exports[`inlines array styles as CSS string 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ flex: 1; display: block; height: 24px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`inlines object styles as CSS string 1`] = `
+"import { styled } from '@linaria/react';
+const cover = {
+ '--color-primaryText': '#222',
+ position: 'absolute',
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0,
+ opacity: 1,
+ minHeight: 420,
+ '&.shouldNotBeChanged': {
+ borderColor: '#fff'
+ },
+ '@media (min-width: 200px)': {
+ WebkitOpacity: .8,
+ MozOpacity: .8,
+ msOpacity: .8,
+ OOpacity: .8,
+ WebkitBorderRadius: 2,
+ MozBorderRadius: 2,
+ msBorderRadius: 2,
+ OBorderRadius: 2,
+ WebkitTransition: '400ms',
+ MozTransition: '400ms',
+ OTransition: '400ms',
+ msTransition: '400ms'
+ }
+};
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\"
+});"
+`;
+
+exports[`inlines object styles as CSS string 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ --color-primaryText: #222; position: absolute; top: 0; right: 0; bottom: 0; left: 0; opacity: 1; min-height: 420px; &.shouldNotBeChanged { border-color: #fff; } @media (min-width: 200px) { -webkit-opacity: 0.8; -moz-opacity: 0.8; -ms-opacity: 0.8; -o-opacity: 0.8; -webkit-border-radius: 2px; -moz-border-radius: 2px; -ms-border-radius: 2px; -o-border-radius: 2px; -webkit-transition: 400ms; -moz-transition: 400ms; -o-transition: 400ms; -ms-transition: 400ms; }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`outputs valid CSS classname 1`] = `
+"import { styled } from '@linaria/react';
+export const ΩPage$Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"\\\\u03A9Page$Title\\",
+ class: \\"\\\\u03C917gu1mi\\"
+});"
+`;
+
+exports[`outputs valid CSS classname 2`] = `
+
+CSS:
+
+.ω17gu1mi {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`prevents class name collision 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\",
+ vars: {
+ \\"t17gu1mi-0\\": [size, \\"px\\"],
+ \\"t17gu1mi-1\\": [props => props.color]
+ }
+});
+
+function Something() {
+ const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"tccybe9\\",
+ vars: {
+ \\"tccybe9-0\\": [regular]
+ }
+ });
+ return <Title />;
+}"
+`;
+
+exports[`prevents class name collision 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: var(--t17gu1mi-0);
+ color: var(--t17gu1mi-1)
+}
+.tccybe9 {
+ font-family: var(--tccybe9-0);
+ }
+
+Dependencies: NA
+
+`;
+
+exports[`replaces unknown expressions with CSS custom properties 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\",
+ vars: {
+ \\"t17gu1mi-0\\": [size, \\"px\\"],
+ \\"t17gu1mi-1\\": [props => props.color]
+ }
+});"
+`;
+
+exports[`replaces unknown expressions with CSS custom properties 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: var(--t17gu1mi-0);
+ color: var(--t17gu1mi-1);
+}
+
+Dependencies: NA
+
+`;
+
+exports[`supports both css and styled tags 1`] = `
+"import { css } from '@linaria/core';
+import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\"
+});
+export const title = \\"tccybe9\\";"
+`;
+
+exports[`supports both css and styled tags 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: 14px;
+}
+.tccybe9 {
+ color: blue;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`throws when contains dynamic expression without evaluate: true in css tag 1`] = `
+"<<DIRNAME>>/app/index.js: The CSS cannot contain JavaScript expressions when using the 'css' tag. To evaluate the expressions at build time, pass 'evaluate: true' to the babel plugin.
+ 2 |
+ 3 | const title = css\`
+> 4 | font-size: \${size}px;
+ | ^^^^
+ 5 | \`;"
+`;
+
+exports[`transpiles css template literal 1`] = `
+"import { css } from '@linaria/core';
+export const title = \\"t17gu1mi\\";"
+`;
+
+exports[`transpiles css template literal 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`transpiles renamed styled import 1`] = `
+"import { styled as custom } from '@linaria/react';
+export const Title = /*#__PURE__*/custom('h1')({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\"
+});"
+`;
+
+exports[`transpiles renamed styled import 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`transpiles styled template literal with function and component 1`] = `
+"import { styled } from '@linaria/react';
+
+const Heading = () => null;
+
+export const Title = /*#__PURE__*/styled(Heading)({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\"
+});"
+`;
+
+exports[`transpiles styled template literal with function and component 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`transpiles styled template literal with function and tag 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled('h1')({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\"
+});"
+`;
+
+exports[`transpiles styled template literal with function and tag 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`transpiles styled template literal with object 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"t17gu1mi\\"
+});"
+`;
+
+exports[`transpiles styled template literal with object 2`] = `
+
+CSS:
+
+.t17gu1mi {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`uses string passed in as classNameSlug 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled('h1')({
+ name: \\"Title\\",
+ class: \\"testSlug\\"
+});"
+`;
+
+exports[`uses string passed in as classNameSlug 2`] = `
+
+CSS:
+
+.testSlug {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`uses the same custom property for the same expression 1`] = `
+"import { styled } from '@linaria/react';
+export const Box = /*#__PURE__*/styled(\\"div\\")({
+ name: \\"Box\\",
+ class: \\"b17gu1mi\\",
+ vars: {
+ \\"b17gu1mi-0\\": [props => props.size, \\"px\\"]
+ }
+});"
+`;
+
+exports[`uses the same custom property for the same expression 2`] = `
+
+CSS:
+
+.b17gu1mi {
+ height: var(--b17gu1mi-0);
+ width: var(--b17gu1mi-0);
+}
+
+Dependencies: NA
+
+`;
+
+exports[`uses the same custom property for the same identifier 1`] = `
+"import { styled } from '@linaria/react';
+export const Box = /*#__PURE__*/styled(\\"div\\")({
+ name: \\"Box\\",
+ class: \\"b17gu1mi\\",
+ vars: {
+ \\"b17gu1mi-0\\": [size, \\"px\\"]
+ }
+});"
+`;
+
+exports[`uses the same custom property for the same identifier 2`] = `
+
+CSS:
+
+.b17gu1mi {
+ height: var(--b17gu1mi-0);
+ width: var(--b17gu1mi-0);
+}
+
+Dependencies: NA
+
+`;
diff --git a/@linaria/packages/babel/__tests__/__snapshots__/dynamic-import-noop.test.js.snap b/@linaria/packages/babel/__tests__/__snapshots__/dynamic-import-noop.test.js.snap
new file mode 100644
index 0000000..02d59d1
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/__snapshots__/dynamic-import-noop.test.js.snap
@@ -0,0 +1,8 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`replaces dynamic imports with a noop 1`] = `
+"({
+ then: () => undefined,
+ catch: () => undefined
+}).then(foo => foo.init());"
+`;
diff --git a/@linaria/packages/babel/__tests__/__snapshots__/transform.test.ts.snap b/@linaria/packages/babel/__tests__/__snapshots__/transform.test.ts.snap
new file mode 100644
index 0000000..77636ca
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/__snapshots__/transform.test.ts.snap
@@ -0,0 +1,16 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`doesn't rewrite an absolute path in url() declarations 1`] = `
+".tpyglzj{background-image:url(/assets/test.jpg);}
+"
+`;
+
+exports[`rewrites a relative path in url() declarations 1`] = `
+".tpyglzj{background-image:url(../assets/test.jpg);background-image:url(\\"../assets/test.jpg\\");background-image:url('../assets/test.jpg');}
+"
+`;
+
+exports[`rewrites multiple relative paths in url() declarations 1`] = `
+"@font-face{font-family:Test;src:url(../assets/font.woff2) format(\\"woff2\\"),url(../assets/font.woff) format(\\"woff\\");}
+"
+`;
diff --git a/@linaria/packages/babel/__tests__/babel.test.ts b/@linaria/packages/babel/__tests__/babel.test.ts
new file mode 100644
index 0000000..99cc816
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/babel.test.ts
@@ -0,0 +1,524 @@
+import { join } from 'path';
+import { transformAsync } from '@babel/core';
+import dedent from 'dedent';
+import stripAnsi from 'strip-ansi';
+import type { StrictOptions } from '../src';
+import serializer from '../__utils__/linaria-snapshot-serializer';
+
+expect.addSnapshotSerializer(serializer);
+
+const transpile = async (
+ input: string,
+ opts: Partial<StrictOptions> = { evaluate: false }
+) =>
+ (await transformAsync(input, {
+ babelrc: false,
+ presets: [[require.resolve('../src'), opts]],
+ plugins: ['@babel/plugin-syntax-jsx'],
+ filename: join(__dirname, 'app/index.js'),
+ configFile: false,
+ }))!;
+
+it('transpiles styled template literal with object', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled.h1\`
+ font-size: 14px;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('uses string passed in as classNameSlug', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled('h1')\`
+ font-size: 14px;
+ \`;
+`,
+ { classNameSlug: 'testSlug' }
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('handles fn passed in as classNameSlug', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled('h1')\`
+ font-size: 14px;
+ \`;
+`,
+ {
+ classNameSlug: (hash, title) => {
+ return `${hash}_${7 * 6}_${title}`;
+ },
+ }
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('transpiles styled template literal with function and tag', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled('h1')\`
+ font-size: 14px;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('transpiles renamed styled import', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled as custom } from '@linaria/react';
+
+ export const Title = custom('h1')\`
+ font-size: 14px;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('transpiles styled template literal with function and component', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+ const Heading = () => null;
+
+ export const Title = styled(Heading)\`
+ font-size: 14px;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('outputs valid CSS classname', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const ΩPage$Title = styled.h1\`
+ font-size: 14px;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('evaluates and inlines expressions in scope', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const color = 'blue';
+
+ export const Title = styled.h1\`
+ color: ${'${color}'};
+ width: ${'${100 / 3}'}%;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('inlines object styles as CSS string', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const cover = {
+ '--color-primaryText': '#222',
+ position: 'absolute',
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0,
+ opacity: 1,
+ minHeight: 420,
+
+ '&.shouldNotBeChanged': {
+ borderColor: '#fff',
+ },
+
+ '@media (min-width: 200px)': {
+ WebkitOpacity: .8,
+ MozOpacity: .8,
+ msOpacity: .8,
+ OOpacity: .8,
+ WebkitBorderRadius: 2,
+ MozBorderRadius: 2,
+ msBorderRadius: 2,
+ OBorderRadius: 2,
+ WebkitTransition: '400ms',
+ MozTransition: '400ms',
+ OTransition: '400ms',
+ msTransition: '400ms',
+ }
+ };
+
+ export const Title = styled.h1\`
+ ${'${cover}'}
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('inlines array styles as CSS string', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const styles = [
+ { flex: 1 },
+ { display: 'block', height: 24 },
+ ];
+
+ export const Title = styled.h1\`
+ ${'${styles}'}
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('replaces unknown expressions with CSS custom properties', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled.h1\`
+ font-size: ${'${size}'}px;
+ color: ${'${props => props.color}'};
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('handles interpolation followed by unit', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled.h1\`
+ font-size: ${'${size}'}em;
+ text-shadow: black 1px ${'${shadow}'}px, white -2px -2px;
+ margin: ${'${size}'}px;
+ width: calc(2 * ${'${props => props.width}'}vw);
+ height: ${'${props => { if (true) { return props.height } else { return 200 } }}'}px;
+ grid-template-columns: ${'${unit}'}fr 1fr 1fr ${'${unit}'}fr;
+ border-radius: ${'${function(props) { return 200 }}'}px
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('uses the same custom property for the same identifier', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Box = styled.div\`
+ height: ${'${size}'}px;
+ width: ${'${size}'}px;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('uses the same custom property for the same expression', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Box = styled.div\`
+ height: ${'${props => props.size}'}px;
+ width: ${'${props => props.size}'}px;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('handles nested blocks', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Button = styled.button\`
+ font-family: ${'${regular}'};
+
+ &:hover {
+ border-color: blue;
+ }
+
+ @media (max-width: 200px) {
+ width: 100%;
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('prevents class name collision', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled.h1\`
+ font-size: ${'${size}'}px;
+ color: ${'${props => props.color}'}
+ \`;
+
+ function Something() {
+ const Title = styled.h1\`
+ font-family: ${'${regular}'};
+ \`;
+
+ return <Title />;
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('does not output CSS if none present', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ const number = 42;
+
+ const title = String.raw\`This is something\`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('does not output CSS property when value is a blank string', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+
+ export const title = css\`
+ font-size: ${''};
+ margin: 6px;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('transpiles css template literal', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+
+ export const title = css\`
+ font-size: 14px;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('handles css template literal in object property', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+
+ const components = {
+ title: css\`
+ font-size: 14px;
+ \`
+ };
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('handles css template literal in JSX element', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+
+ <Title class={css\` font-size: 14px; \`} />
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('throws when contains dynamic expression without evaluate: true in css tag', async () => {
+ expect.assertions(1);
+
+ try {
+ await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+
+ const title = css\`
+ font-size: ${'${size}'}px;
+ \`;
+ `
+ );
+ } catch (e) {
+ expect(
+ stripAnsi(e.message.replace(__dirname, '<<DIRNAME>>'))
+ ).toMatchSnapshot();
+ }
+});
+
+it('supports both css and styled tags', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+ import { styled } from '@linaria/react';
+
+ export const Title = styled.h1\`
+ font-size: 14px;
+ \`;
+
+ export const title = css\`
+ color: blue;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('does not include styles if not referenced anywhere', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+ import { styled } from '@linaria/react';
+
+ const Title = styled.h1\`
+ font-size: 14px;
+ \`;
+
+ const title = css\`
+ color: blue;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('includes unreferenced styles for :global', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+ import { styled } from '@linaria/react';
+
+ const a = css\`
+ :global() {
+ .title {
+ font-size: 14px;
+ }
+ }
+ \`;
+
+ const B = styled.div\`
+ :global(.title) {
+ font-size: 14px;
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('handles objects with numeric keys', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+
+ export const object = {
+ stringKey: css\`\`,
+ 42: css\`\`,
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
+
+it('handles objects with enums as keys', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+ import { TestEnum } from './ts-data.ts';
+
+ export const object = {
+ [TestEnum.FirstValue]: css\`\`,
+ [TestEnum.SecondValue]: css\`\`,
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+});
diff --git a/@linaria/packages/babel/__tests__/depsGraph.test.ts b/@linaria/packages/babel/__tests__/depsGraph.test.ts
new file mode 100644
index 0000000..000bd30
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/depsGraph.test.ts
@@ -0,0 +1,356 @@
+/* eslint-disable no-template-curly-in-string */
+
+import dedent from 'dedent';
+import * as babel from '@babel/core';
+import buildDepsGraph from '../../shaker/src/graphBuilder';
+
+function _build(literal: TemplateStringsArray, ...placeholders: string[]) {
+ const code = dedent(literal, ...placeholders);
+ return {
+ ast: babel.parseSync(code, { filename: 'source.js' })!,
+ code,
+ };
+}
+
+function _buildGraph(literal: TemplateStringsArray, ...placeholders: string[]) {
+ const { ast } = _build(literal, ...placeholders);
+ return buildDepsGraph(ast);
+}
+
+describe('VariableDeclaration', () => {
+ it('Identifier', () => {
+ const graph = _buildGraph`
+ const a = 42;
+ `;
+
+ const deps = graph.getDependenciesByBinding('0:a');
+ expect(deps).toMatchObject([
+ {
+ type: 'VariableDeclarator',
+ },
+ {
+ type: 'NumericLiteral',
+ value: 42,
+ },
+ ]);
+
+ expect(graph.findDependencies({ name: 'a' })).toContainEqual(deps[0]);
+ });
+});
+
+describe('scopes', () => {
+ it('BlockStatement', () => {
+ const graph = _buildGraph`
+ let a = 42;
+ {
+ const a = "21";
+ }
+
+ a = 21;
+ `;
+
+ const deps0 = graph.getDependenciesByBinding('0:a');
+ expect(deps0).toMatchObject([
+ {
+ type: 'VariableDeclarator',
+ },
+ {
+ type: 'NumericLiteral',
+ value: 42,
+ },
+ {
+ type: 'Identifier',
+ start: 4,
+ },
+ {
+ type: 'Identifier',
+ start: 35,
+ },
+ {
+ type: 'AssignmentExpression',
+ },
+ {
+ type: 'NumericLiteral',
+ value: 21,
+ },
+ ]);
+
+ const deps1 = graph.getDependenciesByBinding('1:a');
+ expect(deps1).toMatchObject([
+ {
+ type: 'VariableDeclarator',
+ },
+ {
+ type: 'StringLiteral',
+ value: '21',
+ },
+ ]);
+
+ expect(graph.findDependencies({ name: 'a' })).toHaveLength(8);
+ });
+
+ it('Function', () => {
+ const graph = _buildGraph`
+ const a = (arg1, arg2, arg3) => arg1 + arg2 + arg3;
+ `;
+
+ const aDeps = graph.getDependenciesByBinding('0:a');
+ expect(aDeps).toMatchObject([
+ {
+ type: 'VariableDeclarator',
+ },
+ {
+ type: 'ArrowFunctionExpression',
+ },
+ ]);
+
+ expect(graph.getDependenciesByBinding('1:arg1')).toHaveLength(3);
+ expect(graph.getDependentsByBinding('1:arg1')).toMatchObject([
+ {
+ // arg1 in the binary expression
+ type: 'Identifier',
+ name: 'arg1',
+ start: 32,
+ },
+ {
+ // arg1 + arg2
+ type: 'BinaryExpression',
+ right: {
+ name: 'arg2',
+ },
+ },
+ {
+ // (arg1 + arg2) + arg3, because of it is the whole function body
+ type: 'BinaryExpression',
+ right: {
+ name: 'arg3',
+ },
+ },
+ ]);
+
+ expect(graph.getDependenciesByBinding('1:arg2')).toMatchObject([
+ {
+ type: 'ArrowFunctionExpression',
+ },
+ {
+ type: 'Identifier',
+ name: 'arg2',
+ start: 17,
+ },
+ {
+ type: 'BinaryExpression',
+ start: 32,
+ },
+ ]);
+
+ expect(graph.getDependenciesByBinding('1:arg3')).toMatchObject([
+ {
+ type: 'ArrowFunctionExpression',
+ },
+ {
+ type: 'Identifier',
+ name: 'arg3',
+ start: 23,
+ },
+ {
+ type: 'BinaryExpression',
+ start: 32,
+ },
+ ]);
+ });
+});
+
+describe('AssignmentExpression', () => {
+ it('Identifier', () => {
+ const graph = _buildGraph`
+ let a = 42;
+ a = 24;
+ `;
+
+ const deps = graph.getDependenciesByBinding('0:a');
+ expect(deps).toMatchObject([
+ {
+ type: 'VariableDeclarator',
+ },
+ {
+ type: 'NumericLiteral',
+ value: 42,
+ },
+ {
+ type: 'Identifier',
+ name: 'a',
+ start: 4,
+ },
+ {
+ type: 'Identifier',
+ name: 'a',
+ start: 12,
+ },
+ {
+ type: 'AssignmentExpression',
+ },
+ {
+ type: 'NumericLiteral',
+ value: 24,
+ },
+ ]);
+
+ expect(graph.findDependents({ value: 42 })).toHaveLength(1);
+ expect(graph.findDependents({ value: 24 })).toHaveLength(1);
+ });
+
+ it('MemberExpression', () => {
+ const graph = _buildGraph`
+ const a = {};
+ a.foo.bar = 42;
+ `;
+
+ expect(graph.getDependenciesByBinding('0:a')).toMatchObject([
+ {
+ type: 'VariableDeclarator',
+ },
+ {
+ type: 'ObjectExpression',
+ properties: [],
+ },
+ {
+ type: 'Identifier',
+ name: 'a',
+ start: 6,
+ },
+ {
+ type: 'Identifier',
+ name: 'a',
+ start: 14,
+ },
+ {
+ type: 'MemberExpression',
+ property: {
+ name: 'foo',
+ },
+ },
+ ]);
+
+ expect(graph.findDependents({ value: 42 })).toMatchObject([
+ {
+ type: 'MemberExpression',
+ property: {
+ name: 'bar',
+ },
+ },
+ ]);
+ });
+});
+
+it('SequenceExpression', () => {
+ const graph = _buildGraph`
+ const color1 = 'blue';
+ let local = '';
+ const color2 = (true, local = color1, () => local);
+ `;
+
+ const seqDeps = graph.findDependencies({
+ type: 'SequenceExpression',
+ });
+ expect(seqDeps).toMatchObject([
+ {
+ type: 'ArrowFunctionExpression',
+ },
+ {
+ id: {
+ name: 'color2',
+ },
+ type: 'VariableDeclarator',
+ },
+ ]);
+
+ const fnDeps = graph.findDependencies({
+ type: 'ArrowFunctionExpression',
+ });
+ expect(fnDeps).toMatchObject([
+ {
+ body: {
+ name: 'local',
+ type: 'Identifier',
+ },
+
+ type: 'ArrowFunctionExpression',
+ },
+ {
+ name: 'local',
+ type: 'Identifier',
+ },
+ {
+ type: 'SequenceExpression',
+ },
+ ]);
+
+ const localDeps = graph.getDependenciesByBinding('0:local');
+ expect(localDeps).toMatchObject([
+ {
+ type: 'VariableDeclarator',
+ },
+ {
+ type: 'StringLiteral',
+ value: '',
+ },
+ {
+ type: 'Identifier',
+ name: 'local',
+ start: 27,
+ },
+ {
+ type: 'Identifier',
+ name: 'local',
+ start: 61,
+ },
+ {
+ type: 'AssignmentExpression',
+ },
+ {
+ type: 'Identifier',
+ name: 'color1',
+ },
+ {
+ type: 'Identifier',
+ name: 'local',
+ start: 27,
+ },
+ {
+ type: 'ArrowFunctionExpression',
+ },
+ ]);
+
+ const bool = { type: 'BooleanLiteral' };
+ expect(graph.findDependents(bool)).toHaveLength(0);
+ expect(graph.findDependencies(bool)).toHaveLength(1);
+});
+
+it('MemberExpression', () => {
+ const graph = _buildGraph`
+ const key = 'blue';
+ const obj = { blue: '#00F' };
+ const blue = obj[key];
+ `;
+
+ const memberExprDeps = graph.findDependencies({
+ type: 'MemberExpression',
+ });
+
+ expect(memberExprDeps).toMatchObject([
+ {
+ type: 'Identifier',
+ name: 'obj',
+ },
+ {
+ type: 'Identifier',
+ name: 'key',
+ },
+ {
+ type: 'VariableDeclarator',
+ id: {
+ name: 'blue',
+ },
+ },
+ ]);
+});
diff --git a/@linaria/packages/babel/__tests__/dynamic-import-noop.test.js b/@linaria/packages/babel/__tests__/dynamic-import-noop.test.js
new file mode 100644
index 0000000..04f0452
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/dynamic-import-noop.test.js
@@ -0,0 +1,15 @@
+import { transformAsync } from '@babel/core';
+
+it('replaces dynamic imports with a noop', async () => {
+ const { code } = await transformAsync(
+ `import('./foo').then(foo => foo.init())`,
+ {
+ plugins: [require.resolve('../src/dynamic-import-noop')],
+ filename: 'source.js',
+ configFile: false,
+ babelrc: false,
+ }
+ );
+
+ expect(code).toMatchSnapshot();
+});
diff --git a/@linaria/packages/babel/__tests__/evaluators/__snapshots__/extractor.test.ts.snap b/@linaria/packages/babel/__tests__/evaluators/__snapshots__/extractor.test.ts.snap
new file mode 100644
index 0000000..7ee2296
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/evaluators/__snapshots__/extractor.test.ts.snap
@@ -0,0 +1,237 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`keeps objects as is 1`] = `
+"{
+ const fill1 = (top = 0, left = 0, right = 0, bottom = 0) => ({
+ position: 'absolute',
+ top,
+ right,
+ bottom,
+ left
+ });
+
+ {
+ const fill2 = (top = 0, left = 0, right = 0, bottom = 0) => {
+ return {
+ position: 'absolute',
+ top,
+ right,
+ bottom,
+ left
+ };
+ };
+
+ {
+ exports.__linariaPreval = [fill1, fill2];
+ }
+ }
+}"
+`;
+
+exports[`keeps only code which is related to \`a\` 1`] = `
+"{
+ const {
+ whiteColor: color,
+ anotherColor
+ } = require('…');
+
+ {
+ const a = color || anotherColor;
+ {
+ exports.__linariaPreval = [a];
+ }
+ }
+}"
+`;
+
+exports[`keeps only code which is related to \`anotherColor\` 1`] = `
+"{
+ const {
+ whiteColor: color,
+ anotherColor
+ } = require('…');
+
+ {
+ exports.__linariaPreval = [anotherColor];
+ }
+}"
+`;
+
+exports[`keeps only code which is related to \`color\` 1`] = `
+"{
+ const {
+ whiteColor: color,
+ anotherColor
+ } = require('…');
+
+ {
+ exports.__linariaPreval = [color];
+ }
+}"
+`;
+
+exports[`removes all 1`] = `
+"{
+ exports.__linariaPreval = [];
+}"
+`;
+
+exports[`shakes assignment patterns 1`] = `
+"{
+ const [identifier = 1] = [2];
+ {
+ const [{ ...object
+ } = {}] = [{
+ a: 1,
+ b: 2
+ }];
+ {
+ const [[...array] = []] = [[1, 2, 3, 4]];
+ {
+ const obj = {
+ member: null
+ };
+ {
+ exports.__linariaPreval = [identifier, object, array, obj];
+ }
+ }
+ }
+ }
+}"
+`;
+
+exports[`shakes es5 exports 1`] = `
+"\\"use strict\\";
+
+Object.defineProperty(exports, \\"__esModule\\", {
+ value: true
+});
+exports.redColor = 'red';
+Object.defineProperty(exports, \\"blueColor\\", {
+ enumerable: true,
+ get: function get() {
+ return 'blue';
+ }
+});
+Object.defineProperty(exports, \\"greenColor\\", {
+ enumerable: true,
+ get: function get() {
+ return 'green';
+ }
+});"
+`;
+
+exports[`shakes exports 1`] = `
+"{
+ var _ = require(\\"\\\\u2026\\");
+
+ {
+ const a = _.whiteColor;
+ {
+ exports.__linariaPreval = [a];
+ }
+ }
+}"
+`;
+
+exports[`shakes imports 1`] = `
+"{
+ var _ = _interopRequireWildcard(require(\\"\\\\u2026\\"));
+
+ {
+ function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== \\"function\\") return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+ }
+
+ {
+ function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+
+ if (obj === null || typeof obj !== \\"object\\" && typeof obj !== \\"function\\") {
+ return {
+ default: obj
+ };
+ }
+
+ var cache = _getRequireWildcardCache(nodeInterop);
+
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+
+ var newObj = {};
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+ for (var key in obj) {
+ if (key !== \\"default\\" && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
+
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+
+ newObj.default = obj;
+
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+
+ return newObj;
+ }
+
+ {
+ exports.__linariaPreval = [_.whiteColor, _.default];
+ }
+ }
+ }
+}"
+`;
+
+exports[`shakes sequence expression 1`] = `
+"{
+ var _ = require(\\"\\\\u2026\\");
+
+ {
+ const color1 = () => 'blue';
+
+ {
+ let local = '';
+ {
+ const color2 = () => local;
+
+ {
+ exports.__linariaPreval = [color2];
+ }
+ }
+ }
+ }
+}"
+`;
+
+exports[`should keep member expression key 1`] = `
+"{
+ const key = 'blue';
+ {
+ const obj = {
+ blue: '#00F'
+ };
+ {
+ const blue = obj[key];
+ {
+ exports.__linariaPreval = [blue];
+ }
+ }
+ }
+}"
+`;
diff --git a/@linaria/packages/babel/__tests__/evaluators/__snapshots__/preeval.test.ts.snap b/@linaria/packages/babel/__tests__/evaluators/__snapshots__/preeval.test.ts.snap
new file mode 100644
index 0000000..93660fa
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/evaluators/__snapshots__/preeval.test.ts.snap
@@ -0,0 +1,60 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`handles locally named import 1`] = `
+"import { styled as custom } from '@linaria/react';
+const Component =
+/*linaria styled ci72cjv Component Component_ci72cjv*/
+custom.div\`\`;"
+`;
+
+exports[`hoists exports 1`] = `
+"\\"use strict\\";
+
+var _foo = require(\\"./foo\\");
+
+Object.defineProperty(exports, \\"__esModule\\", {
+ value: true
+});
+Object.defineProperty(exports, \\"foo\\", {
+ enumerable: true,
+ get: function get() {
+ return _foo.foo;
+ }
+});
+Object.defineProperty(exports, \\"bar\\", {
+ enumerable: true,
+ get: function get() {
+ return _foo.bar;
+ }
+});"
+`;
+
+exports[`preserves classNames 1`] = `
+"import { styled } from '@linaria/react';
+const Component =
+/*linaria styled ci72cjv Component Component_ci72cjv*/
+styled.div\`\`;"
+`;
+
+exports[`replaces class component 1`] = `
+"import React from 'react';
+
+function Component() {
+ return <></>;
+}"
+`;
+
+exports[`replaces constant 1`] = `
+"import React from 'react';
+const tag = <></>;
+
+const Component = props => tag;"
+`;
+
+exports[`replaces functional component 1`] = `
+"import React from 'react';
+
+const Component = () => {
+ return <></>;
+};"
+`;
diff --git a/@linaria/packages/babel/__tests__/evaluators/__snapshots__/shaker.test.ts.snap b/@linaria/packages/babel/__tests__/evaluators/__snapshots__/shaker.test.ts.snap
new file mode 100644
index 0000000..92b9b9e
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/evaluators/__snapshots__/shaker.test.ts.snap
@@ -0,0 +1,213 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`keeps objects as is 1`] = `
+"\\"use strict\\";
+
+var fill1 = function fill1() {
+ var top = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+ var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+ var right = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+ var bottom = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
+ return {
+ position: 'absolute',
+ top: top,
+ right: right,
+ bottom: bottom,
+ left: left
+ };
+};
+
+var fill2 = function fill2() {
+ var top = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+ var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+ var right = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+ var bottom = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
+ return {
+ position: 'absolute',
+ top: top,
+ right: right,
+ bottom: bottom,
+ left: left
+ };
+};
+
+exports.__linariaPreval = [fill1, fill2];"
+`;
+
+exports[`keeps only code which is related to \`a\` 1`] = `
+"\\"use strict\\";
+
+var _require = require('…'),
+ color = _require.whiteColor,
+ anotherColor = _require.anotherColor;
+
+var a = color || anotherColor;
+color.green = '#0f0';
+exports.__linariaPreval = [a];"
+`;
+
+exports[`keeps only code which is related to \`anotherColor\` 1`] = `
+"\\"use strict\\";
+
+var _require = require('…'),
+ anotherColor = _require.anotherColor;
+
+exports.__linariaPreval = [anotherColor];"
+`;
+
+exports[`keeps only code which is related to \`color\` 1`] = `
+"\\"use strict\\";
+
+var _require = require('…'),
+ color = _require.whiteColor;
+
+color.green = '#0f0';
+exports.__linariaPreval = [color];"
+`;
+
+exports[`keeps only the last assignment of each exported variable 1`] = `
+"\\"use strict\\";
+
+var bar = function bar() {
+ return 'hello world';
+};
+
+exports.bar = bar;
+var foo = exports.bar();
+exports.__linariaPreval = [foo];"
+`;
+
+exports[`keeps reused exports 1`] = `
+"\\"use strict\\";
+
+var bar = function bar() {
+ return 'hello world';
+};
+
+exports.bar = bar;
+var foo = exports.bar();
+exports.__linariaPreval = [foo];"
+`;
+
+exports[`removes all 1`] = `
+"\\"use strict\\";
+
+exports.__linariaPreval = [];"
+`;
+
+exports[`shakes assignment patterns 1`] = `
+"\\"use strict\\";
+
+var _interopRequireDefault = require(\\"@babel/runtime/helpers/interopRequireDefault\\");
+
+var _toArray2 = _interopRequireDefault(require(\\"@babel/runtime/helpers/toArray\\"));
+
+var _extends2 = _interopRequireDefault(require(\\"@babel/runtime/helpers/extends\\"));
+
+var _ = 2,
+ identifier = _ === void 0 ? 1 : _;
+var _a$b = {
+ a: 1,
+ b: 2
+};
+_a$b = _a$b === void 0 ? {} : _a$b;
+var object = (_extends2.default)({}, _a$b);
+var _ref = [1, 2, 3, 4];
+_ref = _ref === void 0 ? [] : _ref;
+
+var _ref2 = (_toArray2.default)(_ref),
+ array = _ref2.slice(0);
+
+var obj = {
+ member: null
+};
+var _2 = 1;
+obj.member = _2 === void 0 ? 42 : _2;
+exports.__linariaPreval = [identifier, object, array, obj];"
+`;
+
+exports[`shakes es5 exports 1`] = `
+"\\"use strict\\";
+
+Object.defineProperty(exports, \\"__esModule\\", {
+ value: true
+});
+exports.redColor = 'red';
+exports['yellowColor'] = 'yellow';
+Object.defineProperty(exports, \\"greenColor\\", {
+ enumerable: true,
+ get: function get() {
+ return 'green';
+ }
+});"
+`;
+
+exports[`shakes exports 1`] = `
+"\\"use strict\\";
+
+var _ = require(\\"\\\\u2026\\");
+
+Object.defineProperty(exports, \\"__esModule\\", {
+ value: true
+});
+var a = _.whiteColor;
+exports.__linariaPreval = [a];"
+`;
+
+exports[`shakes for-in statements 1`] = `
+"\\"use strict\\";
+
+var obj1 = {
+ a: 1,
+ b: 2
+};
+var obj2 = {};
+
+for (var key in obj1) {
+ obj2[key] = obj1[key];
+}
+
+exports.__linariaPreval = [obj2];"
+`;
+
+exports[`shakes imports 1`] = `
+"\\"use strict\\";
+
+var _typeof = require(\\"@babel/runtime/helpers/typeof\\");
+
+Object.defineProperty(exports, \\"__esModule\\", {
+ value: true
+});
+
+var _ = _interopRequireWildcard(require(\\"\\\\u2026\\"));
+
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \\"function\\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \\"object\\" && typeof obj !== \\"function\\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \\"default\\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+
+exports.__linariaPreval = [_.whiteColor, _.default];"
+`;
+
+exports[`shakes sequence expression 1`] = `
+"\\"use strict\\";
+
+var color1 = (function () {
+ return 'blue';
+});
+var local = '';
+var color2 = (local = color1(), function () {
+ return local;
+});
+exports.__linariaPreval = [color2];"
+`;
+
+exports[`should keep member expression key 1`] = `
+"\\"use strict\\";
+
+var key = 'blue';
+var obj = {
+ blue: '#00F'
+};
+var blue = obj[key];
+exports.__linariaPreval = [blue];"
+`;
diff --git a/@linaria/packages/babel/__tests__/evaluators/extractor.test.ts b/@linaria/packages/babel/__tests__/evaluators/extractor.test.ts
new file mode 100644
index 0000000..b764a25
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/evaluators/extractor.test.ts
@@ -0,0 +1,214 @@
+import path from 'path';
+import dedent from 'dedent';
+import type { TransformOptions } from '@babel/core';
+import exctract from '../../../extractor/src';
+
+function getFileName() {
+ return path.resolve(__dirname, `../__fixtures__/test.js`);
+}
+
+function _shake(opts?: TransformOptions, only: string[] = ['__linariaPreval']) {
+ return (
+ literal: TemplateStringsArray,
+ ...placeholders: string[]
+ ): [string, Map<string, string[]>] => {
+ const code = dedent(literal, ...placeholders);
+ const [shaken, deps] = exctract(
+ getFileName(),
+ {
+ babelOptions: opts || {},
+ displayName: true,
+ evaluate: true,
+ rules: [
+ {
+ action: require('../../../extractor/src').default,
+ },
+ {
+ test: /\/node_modules\//,
+ action: 'ignore',
+ },
+ ],
+ },
+ code,
+ only
+ );
+
+ return [shaken, deps!];
+ };
+}
+
+it('removes all', () => {
+ const [shaken] = _shake()`
+ const { whiteColor: color, anotherColor } = require('…');
+ const a = color || anotherColor;
+ color.green = '#0f0';
+
+ exports.__linariaPreval = [];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps only code which is related to `color`', () => {
+ const [shaken] = _shake()`
+ const { whiteColor: color, anotherColor } = require('…');
+ const wrap = '';
+ const a = color || anotherColor;
+ color.green = '#0f0';
+ module.exports = { color, anotherColor };
+ exports.__linariaPreval = [color];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps only code which is related to `anotherColor`', () => {
+ const [shaken] = _shake()`
+ const { whiteColor: color, anotherColor } = require('…');
+ const a = color || anotherColor;
+ color.green = '#0f0';
+ exports.__linariaPreval = [anotherColor];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps only code which is related to `a`', () => {
+ const [shaken] = _shake()`
+ const { whiteColor: color, anotherColor } = require('…');
+ const a = color || anotherColor;
+ color.green = '#0f0';
+ exports.__linariaPreval = [a];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes imports', () => {
+ const [shaken] = _shake()`
+ import { unrelatedImport } from '…';
+ import { whiteColor as color, anotherColor } from '…';
+ import defaultColor from '…';
+ import anotherDefaultColor from '…';
+ import '…';
+ require('…');
+ export default color;
+ exports.__linariaPreval = [color, defaultColor];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('should keep member expression key', () => {
+ const [shaken] = _shake()`
+ const key = 'blue';
+ const obj = { blue: '#00F' };
+ const blue = obj[key];
+ exports.__linariaPreval = [blue];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes exports', () => {
+ const [shaken] = _shake()`
+ import { whiteColor as color, anotherColor } from '…';
+ export const a = color;
+ export { redColor } from "…";
+ export { anotherColor };
+ exports.__linariaPreval = [a];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes es5 exports', () => {
+ const [shaken] = _shake(undefined, ['redColor', 'greenColor'])`
+ "use strict";
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+ exports.redColor = 'red';
+ Object.defineProperty(exports, "blueColor", {
+ enumerable: true,
+ get: function get() {
+ return 'blue';
+ }
+ });
+ Object.defineProperty(exports, "greenColor", {
+ enumerable: true,
+ get: function get() {
+ return 'green';
+ }
+ });
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+// TODO: this test will be disabled until the shaker is fully implemented
+// eslint-disable-next-line jest/no-disabled-tests
+it.skip('should throw away any side effects', () => {
+ const [shaken] = _shake()`
+ const objects = { key: { fontSize: 12 } };
+ const foo = (k) => {
+ const obj = objects[k];
+ console.log('side effect');
+ return obj;
+ };
+ exports.__linariaPreval = [foo];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps objects as is', () => {
+ const [shaken] = _shake()`
+ const fill1 = (top = 0, left = 0, right = 0, bottom = 0) => ({
+ position: 'absolute',
+ top,
+ right,
+ bottom,
+ left,
+ });
+
+ const fill2 = (top = 0, left = 0, right = 0, bottom = 0) => {
+ return {
+ position: 'absolute',
+ top,
+ right,
+ bottom,
+ left,
+ };
+ };
+
+ exports.__linariaPreval = [fill1, fill2];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes sequence expression', () => {
+ const [shaken] = _shake()`
+ import { external } from '…';
+ const color1 = (external, () => 'blue');
+ let local = '';
+ const color2 = (local = color1(), () => local);
+ exports.__linariaPreval = [color2];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes assignment patterns', () => {
+ const [shaken] = _shake()`
+ const [identifier = 1] = [2];
+ const [{...object} = {}] = [{ a: 1, b: 2 }];
+ const [[...array] = []] = [[1,2,3,4]];
+ const obj = { member: null };
+ ([obj.member = 42] = [1]);
+ exports.__linariaPreval = [identifier, object, array, obj];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
diff --git a/@linaria/packages/babel/__tests__/evaluators/preeval.test.ts b/@linaria/packages/babel/__tests__/evaluators/preeval.test.ts
new file mode 100644
index 0000000..307abd7
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/evaluators/preeval.test.ts
@@ -0,0 +1,121 @@
+import { join } from 'path';
+import { transformAsync } from '@babel/core';
+import dedent from 'dedent';
+import serializer from '../../__utils__/linaria-snapshot-serializer';
+import type { StrictOptions } from '../../src';
+
+expect.addSnapshotSerializer(serializer);
+
+const options: Partial<StrictOptions> = {
+ displayName: true,
+ evaluate: true,
+};
+
+const transpile = async (input: string) =>
+ (await transformAsync(input, {
+ babelrc: false,
+ presets: [[require.resolve('@linaria/preeval'), options]],
+ plugins: [
+ '@babel/plugin-proposal-class-properties',
+ '@babel/plugin-syntax-jsx',
+ ],
+ filename: join(__dirname, 'app/index.js'),
+ configFile: false,
+ }))!;
+
+it('preserves classNames', async () => {
+ const { code } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const Component = styled.div\`\`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+});
+
+it('handles locally named import', async () => {
+ const { code } = await transpile(
+ dedent`
+ import { styled as custom } from '@linaria/react';
+
+ const Component = custom.div\`\`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+});
+
+it('replaces functional component', async () => {
+ const div = '<div>{props.children}</div>';
+ const { code } = await transpile(
+ dedent`
+ import React from 'react';
+
+ const Component = (props) => ${div};
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+});
+
+it('replaces class component', async () => {
+ const div = '<div>{props.children}</div>';
+ const { code } = await transpile(
+ dedent`
+ import React from 'react';
+
+ class Component extends React.PureComponent {
+ render() {
+ return ${div};
+ }
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+});
+
+it('replaces constant', async () => {
+ const div = '<div>{props.children}</div>';
+ const { code } = await transpile(
+ dedent`
+ import React from 'react';
+
+ const tag = ${div};
+
+ const Component = (props) => tag;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+});
+
+it('hoists exports', async () => {
+ const { code } = await transpile(
+ dedent`
+ "use strict";
+
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+ Object.defineProperty(exports, "foo", {
+ enumerable: true,
+ get: function get() {
+ return _foo.foo;
+ }
+ });
+ Object.defineProperty(exports, "bar", {
+ enumerable: true,
+ get: function get() {
+ return _foo.bar;
+ }
+ });
+
+ var _foo = require("./foo");
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+});
diff --git a/@linaria/packages/babel/__tests__/evaluators/shaker.test.ts b/@linaria/packages/babel/__tests__/evaluators/shaker.test.ts
new file mode 100644
index 0000000..1208065
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/evaluators/shaker.test.ts
@@ -0,0 +1,259 @@
+import path from 'path';
+import dedent from 'dedent';
+import type { TransformOptions } from '@babel/core';
+import shake from '../../../shaker/src';
+
+function getFileName() {
+ return path.resolve(__dirname, `../__fixtures__/test.js`);
+}
+
+function _shake(opts?: TransformOptions, only: string[] = ['__linariaPreval']) {
+ return (
+ literal: TemplateStringsArray,
+ ...placeholders: string[]
+ ): [string, Map<string, string[]>] => {
+ const code = dedent(literal, ...placeholders);
+ const [shaken, deps] = shake(
+ getFileName(),
+ {
+ babelOptions: opts || {},
+ displayName: true,
+ evaluate: true,
+ rules: [
+ {
+ action: require('../../../extractor/src').default,
+ },
+ {
+ test: /\/node_modules\//,
+ action: 'ignore',
+ },
+ ],
+ },
+ code,
+ only
+ );
+
+ return [shaken, deps!];
+ };
+}
+
+it('removes all', () => {
+ const [shaken] = _shake()`
+ const { whiteColor: color, anotherColor } = require('…');
+ const a = color || anotherColor;
+ color.green = '#0f0';
+
+ exports.__linariaPreval = [];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps only code which is related to `color`', () => {
+ const [shaken] = _shake()`
+ const { whiteColor: color, anotherColor } = require('…');
+ const wrap = '';
+ const a = color || anotherColor;
+ color.green = '#0f0';
+ module.exports = { color, anotherColor };
+ exports.__linariaPreval = [color];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps only code which is related to `anotherColor`', () => {
+ const [shaken] = _shake()`
+ const { whiteColor: color, anotherColor } = require('…');
+ const a = color || anotherColor;
+ color.green = '#0f0';
+ exports.__linariaPreval = [anotherColor];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps only code which is related to `a`', () => {
+ const [shaken] = _shake()`
+ const { whiteColor: color, anotherColor } = require('…');
+ const a = color || anotherColor;
+ color.green = '#0f0';
+ exports.__linariaPreval = [a];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes imports', () => {
+ const [shaken] = _shake()`
+ import { unrelatedImport } from '…';
+ import { whiteColor as color, anotherColor } from '…';
+ import defaultColor from '…';
+ import anotherDefaultColor from '…';
+ import '…';
+ require('…');
+ export default color;
+ exports.__linariaPreval = [color, defaultColor];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('should keep member expression key', () => {
+ const [shaken] = _shake()`
+ const key = 'blue';
+ const obj = { blue: '#00F' };
+ const blue = obj[key];
+ exports.__linariaPreval = [blue];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes exports', () => {
+ const [shaken] = _shake()`
+ import { whiteColor as color, anotherColor } from '…';
+ export const a = color;
+ export { redColor } from "…";
+ export { anotherColor };
+ exports.__linariaPreval = [a];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes es5 exports', () => {
+ const [shaken] = _shake(undefined, ['redColor', 'greenColor', 'yellowColor'])`
+ "use strict";
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+ exports.redColor = 'red';
+ exports['yellowColor'] = 'yellow';
+ exports['pinkColor'] = 'pink';
+ Object.defineProperty(exports, "blueColor", {
+ enumerable: true,
+ get: function get() {
+ return 'blue';
+ }
+ });
+ Object.defineProperty(exports, "greenColor", {
+ enumerable: true,
+ get: function get() {
+ return 'green';
+ }
+ });
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+// TODO: this test will be disabled until the shaker is fully implemented
+// eslint-disable-next-line jest/no-disabled-tests
+it.skip('should throw away any side effects', () => {
+ const [shaken] = _shake()`
+ const objects = { key: { fontSize: 12 } };
+ const foo = (k) => {
+ const obj = objects[k];
+ console.log('side effect');
+ return obj;
+ };
+ exports.__linariaPreval = [foo];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps objects as is', () => {
+ const [shaken] = _shake()`
+ const fill1 = (top = 0, left = 0, right = 0, bottom = 0) => ({
+ position: 'absolute',
+ top,
+ right,
+ bottom,
+ left,
+ });
+
+ const fill2 = (top = 0, left = 0, right = 0, bottom = 0) => {
+ return {
+ position: 'absolute',
+ top,
+ right,
+ bottom,
+ left,
+ };
+ };
+
+ exports.__linariaPreval = [fill1, fill2];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes sequence expression', () => {
+ const [shaken] = _shake()`
+ import { external } from '…';
+ const color1 = (external, () => 'blue');
+ let local = '';
+ const color2 = (local = color1(), () => local);
+ exports.__linariaPreval = [color2];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes assignment patterns', () => {
+ const [shaken] = _shake()`
+ const [identifier = 1] = [2];
+ const [{...object} = {}] = [{ a: 1, b: 2 }];
+ const [[...array] = []] = [[1,2,3,4]];
+ const obj = { member: null };
+ ([obj.member = 42] = [1]);
+ exports.__linariaPreval = [identifier, object, array, obj];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('shakes for-in statements', () => {
+ const [shaken] = _shake()`
+ const obj1 = { a: 1, b: 2 };
+ const obj2 = {};
+ for (const key in obj1) {
+ obj2[key] = obj1[key];
+ }
+ exports.__linariaPreval = [obj2];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps reused exports', () => {
+ const [shaken] = _shake()`
+ const bar = function() {
+ return 'hello world';
+ };
+ exports.bar = bar;
+
+ const foo = exports.bar();
+ exports.__linariaPreval = [foo];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
+
+it('keeps only the last assignment of each exported variable', () => {
+ const [shaken] = _shake()`
+ const bar = function() {
+ return 'hello world';
+ };
+
+ exports.bar = "bar";
+ exports.bar = bar;
+
+ const foo = exports.bar();
+ exports.__linariaPreval = [foo];
+ `;
+
+ expect(shaken).toMatchSnapshot();
+});
diff --git a/@linaria/packages/babel/__tests__/module.test.ts b/@linaria/packages/babel/__tests__/module.test.ts
new file mode 100644
index 0000000..1012b93
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/module.test.ts
@@ -0,0 +1,320 @@
+import path from 'path';
+import dedent from 'dedent';
+import * as babel from '@babel/core';
+import { Module } from '../src';
+import type { Evaluator, StrictOptions } from '../src';
+
+beforeEach(() => Module.invalidate());
+
+const evaluator: Evaluator = (filename, options, text) => {
+ const { code } = babel.transformSync(text, {
+ filename: filename,
+ })!;
+ return [code!, null];
+};
+
+function getFileName() {
+ return path.resolve(__dirname, `../__fixtures__/test.js`);
+}
+
+const options: StrictOptions = {
+ displayName: false,
+ evaluate: true,
+ rules: [
+ {
+ action: evaluator,
+ },
+ {
+ test: /\/node_modules\//,
+ action: 'ignore',
+ },
+ ],
+ babelOptions: {},
+};
+
+beforeEach(() => Module.invalidateEvalCache());
+
+it('creates module for JS files', () => {
+ const filename = '/foo/bar/test.js';
+ const mod = new Module(filename, options);
+
+ mod.evaluate('module.exports = () => 42');
+
+ expect(mod.exports()).toBe(42);
+ expect(mod.id).toBe(filename);
+ expect(mod.filename).toBe(filename);
+});
+
+it('requires JS files', () => {
+ const mod = new Module(getFileName(), options);
+
+ mod.evaluate(dedent`
+ const answer = require('./sample-script');
+
+ module.exports = 'The answer is ' + answer;
+ `);
+
+ expect(mod.exports).toBe('The answer is 42');
+});
+
+it('requires JSON files', () => {
+ const mod = new Module(getFileName(), options);
+
+ mod.evaluate(dedent`
+ const data = require('./sample-data.json');
+
+ module.exports = 'Our saviour, ' + data.name;
+ `);
+
+ expect(mod.exports).toBe('Our saviour, Luke Skywalker');
+});
+
+it('imports JS files', () => {
+ const mod = new Module(getFileName(), options);
+
+ mod.evaluate(dedent`
+ import answer from './sample-script';
+
+ export const result = 'The answer is ' + answer;
+ `);
+
+ expect(mod.exports.result).toBe('The answer is 42');
+});
+
+it('imports TypeScript files', () => {
+ const mod = new Module(
+ path.resolve(__dirname, '../__fixtures__/test.ts'),
+ options
+ );
+
+ mod.evaluate(dedent`
+ import answer from './sample-typescript';
+
+ export const result = 'The answer is ' + answer;
+ `);
+
+ expect(mod.exports.result).toBe('The answer is 27');
+});
+
+it('imports JSON files', () => {
+ const mod = new Module(getFileName(), options);
+
+ mod.evaluate(dedent`
+ import data from './sample-data.json';
+
+ const result = 'Our saviour, ' + data.name;
+
+ export default result;
+ `);
+
+ expect(mod.exports.default).toBe('Our saviour, Luke Skywalker');
+});
+
+it('returns module from the cache', () => {
+ /* eslint-disable no-self-compare */
+
+ const filename = getFileName();
+ const mod = new Module(filename, options);
+ const id = './sample-data.json';
+
+ expect(mod.require(id) === mod.require(id)).toBe(true);
+
+ expect(
+ new Module(filename, options).require(id) ===
+ new Module(filename, options).require(id)
+ ).toBe(true);
+});
+
+it('clears modules from the cache', () => {
+ const filename = getFileName();
+ const id = './sample-data.json';
+
+ const result = new Module(filename, options).require(id);
+
+ expect(result === new Module(filename, options).require(id)).toBe(true);
+
+ Module.invalidate();
+
+ expect(result === new Module(filename, options).require(id)).toBe(false);
+});
+
+it('exports the path for non JS/JSON files', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(mod.require('./sample-asset.png')).toBe('./sample-asset.png');
+});
+
+it('returns module when requiring mocked builtin node modules', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(mod.require('path')).toBe(require('path'));
+});
+
+it('returns null when requiring empty builtin node modules', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(mod.require('fs')).toBe(null);
+});
+
+it('throws when requiring unmocked builtin node modules', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(() => mod.require('perf_hooks')).toThrow(
+ 'Unable to import "perf_hooks". Importing Node builtins is not supported in the sandbox.'
+ );
+});
+
+it('has access to the global object', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(() =>
+ mod.evaluate(dedent`
+ new global.Set();
+ `)
+ ).not.toThrow();
+});
+
+it("doesn't have access to the process object", () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(() =>
+ mod.evaluate(dedent`
+ module.exports = process.abort();
+ `)
+ ).toThrow('process.abort is not a function');
+});
+
+it('has access to NODE_ENV', () => {
+ const mod = new Module(getFileName(), options);
+
+ mod.evaluate(dedent`
+ module.exports = process.env.NODE_ENV;
+ `);
+
+ expect(mod.exports).toBe(process.env.NODE_ENV);
+});
+
+it('has require.resolve available', () => {
+ const mod = new Module(getFileName(), options);
+
+ mod.evaluate(dedent`
+ module.exports = require.resolve('./sample-script');
+ `);
+
+ expect(mod.exports).toBe(
+ path.resolve(path.dirname(mod.filename), 'sample-script.js')
+ );
+});
+
+it('has require.ensure available', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(() =>
+ mod.evaluate(dedent`
+ require.ensure(['./sample-script']);
+ `)
+ ).not.toThrow();
+});
+
+it('has __filename available', () => {
+ const mod = new Module(getFileName(), options);
+
+ mod.evaluate(dedent`
+ module.exports = __filename;
+ `);
+
+ expect(mod.exports).toBe(mod.filename);
+});
+
+it('has __dirname available', () => {
+ const mod = new Module(getFileName(), options);
+
+ mod.evaluate(dedent`
+ module.exports = __dirname;
+ `);
+
+ expect(mod.exports).toBe(path.dirname(mod.filename));
+});
+
+it('has setTimeout, clearTimeout available', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(() =>
+ mod.evaluate(dedent`
+ const x = setTimeout(() => {
+ console.log('test');
+ },0);
+
+ clearTimeout(x);
+ `)
+ ).not.toThrow();
+});
+
+it('has setInterval, clearInterval available', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(() =>
+ mod.evaluate(dedent`
+ const x = setInterval(() => {
+ console.log('test');
+ }, 1000);
+
+ clearInterval(x);
+ `)
+ ).not.toThrow();
+});
+
+it('has setImmediate, clearImmediate available', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(() =>
+ mod.evaluate(dedent`
+ const x = setImmediate(() => {
+ console.log('test');
+ });
+
+ clearImmediate(x);
+ `)
+ ).not.toThrow();
+});
+
+it('has global objects available without referencing global', () => {
+ const mod = new Module(getFileName(), options);
+
+ expect(() =>
+ mod.evaluate(dedent`
+ const x = new Set();
+ `)
+ ).not.toThrow();
+});
+
+it('changes resolve behaviour on overriding _resolveFilename', () => {
+ const originalResolveFilename = Module._resolveFilename;
+
+ Module._resolveFilename = (id) => (id === 'foo' ? 'bar' : id);
+
+ const mod = new Module(getFileName(), options);
+
+ mod.evaluate(dedent`
+ module.exports = [
+ require.resolve('foo'),
+ require.resolve('test'),
+ ];
+ `);
+
+ // Restore old behavior
+ Module._resolveFilename = originalResolveFilename;
+
+ expect(mod.exports).toEqual(['bar', 'test']);
+});
+
+it('correctly processes export declarations in strict mode', () => {
+ const filename = '/foo/bar/test.js';
+ const mod = new Module(filename, options);
+
+ mod.evaluate('"use strict"; exports = module.exports = () => 42');
+
+ expect(mod.exports()).toBe(42);
+ expect(mod.id).toBe(filename);
+ expect(mod.filename).toBe(filename);
+});
diff --git a/@linaria/packages/babel/__tests__/transform.test.ts b/@linaria/packages/babel/__tests__/transform.test.ts
new file mode 100644
index 0000000..c830ad9
--- /dev/null
+++ b/@linaria/packages/babel/__tests__/transform.test.ts
@@ -0,0 +1,237 @@
+/* eslint-disable no-template-curly-in-string */
+
+import path from 'path';
+import dedent from 'dedent';
+import transform, { transformUrl } from '../src/transform';
+import evaluator from '../../extractor/src';
+
+const outputFilename = './.linaria-cache/test.css';
+
+const rules = [
+ {
+ test: () => true,
+ action: evaluator,
+ },
+];
+
+describe('transformUrl', () => {
+ type TransformUrlArgs = Parameters<typeof transformUrl>;
+ const dataset: Record<string, TransformUrlArgs> = {
+ '../assets/test.jpg': [
+ './assets/test.jpg',
+ './.linaria-cache/test.css',
+ './test.js',
+ ],
+ '../a/b/test.jpg': [
+ '../a/b/test.jpg',
+ './.linaria-cache/test.css',
+ './a/test.js',
+ ],
+ };
+
+ it('should work with posix paths', () => {
+ for (const result of Object.keys(dataset)) {
+ expect(transformUrl(...dataset[result])).toBe(result);
+ }
+ });
+
+ it('should work with win32 paths', () => {
+ const toWin32 = (p: string) => p.split(path.posix.sep).join(path.win32.sep);
+ const win32Dataset = Object.keys(dataset).reduce(
+ (acc, key) => ({
+ ...acc,
+ [key]: [
+ dataset[key][0],
+ toWin32(dataset[key][1]),
+ toWin32(dataset[key][2]),
+ path.win32,
+ ] as TransformUrlArgs,
+ }),
+ {} as Record<string, TransformUrlArgs>
+ );
+
+ for (const result of Object.keys(win32Dataset)) {
+ expect(transformUrl(...win32Dataset[result])).toBe(result);
+ }
+ });
+});
+
+it('rewrites a relative path in url() declarations', async () => {
+ const { cssText } = await transform(
+ dedent`
+ import { css } from '@linaria/core';
+
+ export const title = css\`
+ background-image: url(./assets/test.jpg);
+ background-image: url("./assets/test.jpg");
+ background-image: url('./assets/test.jpg');
+ \`;
+ `,
+ {
+ filename: './test.js',
+ outputFilename: './.linaria-cache/test.css',
+ pluginOptions: {
+ rules,
+ },
+ }
+ );
+
+ expect(cssText).toMatchSnapshot();
+});
+
+it('rewrites multiple relative paths in url() declarations', async () => {
+ const { cssText } = await transform(
+ dedent`
+ import { css } from '@linaria/core';
+
+ export const title = css\`
+ @font-face {
+ font-family: Test;
+ src: url(./assets/font.woff2) format("woff2"), url(./assets/font.woff) format("woff");
+ }
+ \`;
+ `,
+ {
+ filename: './test.js',
+ outputFilename,
+ pluginOptions: {
+ rules,
+ },
+ }
+ );
+
+ expect(cssText).toMatchSnapshot();
+});
+
+it("doesn't rewrite an absolute path in url() declarations", async () => {
+ const { cssText } = await transform(
+ dedent`
+ import { css } from '@linaria/core';
+
+ export const title = css\`
+ background-image: url(/assets/test.jpg);
+ \`;
+ `,
+ {
+ filename: './test.js',
+ outputFilename,
+ pluginOptions: {
+ rules,
+ },
+ }
+ );
+
+ expect(cssText).toMatchSnapshot();
+});
+
+it('respects passed babel options', async () => {
+ expect.assertions(2);
+
+ expect(() =>
+ transform(
+ dedent`
+ import { css } from '@linaria/core';
+
+ export const error = <jsx />;
+ `,
+ {
+ filename: './test.js',
+ outputFilename,
+ pluginOptions: {
+ rules,
+ babelOptions: {
+ babelrc: false,
+ configFile: false,
+ presets: [['@babel/preset-env', { loose: true }]],
+ },
+ },
+ }
+ )
+ ).toThrow(
+ /Support for the experimental syntax 'jsx' isn't currently enabled/
+ );
+
+ expect(() =>
+ transform(
+ dedent`
+ import { css } from '@linaria/core';
+
+ export const error = <jsx />;
+ export const title = css\`
+ background-image: url(/assets/test.jpg);
+ \`;
+ `,
+ {
+ filename: './test.js',
+ outputFilename,
+ pluginOptions: {
+ rules,
+ babelOptions: {
+ babelrc: false,
+ configFile: false,
+ presets: [
+ ['@babel/preset-env', { loose: true }],
+ '@babel/preset-react',
+ ],
+ },
+ },
+ }
+ )
+ ).not.toThrow('Unexpected token');
+});
+
+it("doesn't throw due to duplicate preset", async () => {
+ expect.assertions(1);
+
+ expect(() =>
+ transform(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const Title = styled.h1\` color: blue; \`;
+
+ const Article = styled.article\`
+ ${'${Title}'} {
+ font-size: 16px;
+ }
+ \`;
+ `,
+ {
+ filename: './test.js',
+ outputFilename,
+ pluginOptions: {
+ rules,
+ babelOptions: {
+ babelrc: false,
+ configFile: false,
+ presets: [require.resolve('../src')],
+ plugins: [
+ require.resolve('@babel/plugin-transform-modules-commonjs'),
+ ],
+ },
+ },
+ }
+ )
+ ).not.toThrow('Duplicate plugin/preset detected');
+});
+
+it('should return transformed code even when file only contains unused linaria code', async () => {
+ const { code } = await transform(
+ dedent`
+ import { css } from '@linaria/core';
+
+ const title = css\`
+ color: red;
+ \`;
+ `,
+ {
+ filename: './test.js',
+ outputFilename,
+ pluginOptions: {
+ rules,
+ },
+ }
+ );
+
+ expect(code).not.toContain('css`');
+});
diff --git a/@linaria/packages/babel/__utils__/linaria-snapshot-serializer.ts b/@linaria/packages/babel/__utils__/linaria-snapshot-serializer.ts
new file mode 100644
index 0000000..1e65cd3
--- /dev/null
+++ b/@linaria/packages/babel/__utils__/linaria-snapshot-serializer.ts
@@ -0,0 +1,26 @@
+import type { LinariaMetadata } from '../src';
+
+type Serializer<T> = {
+ test: (value: any) => value is T;
+ print: (value: T) => string;
+};
+
+const withLinariaMetadata = (
+ value: any
+): value is { linaria: LinariaMetadata } =>
+ value && typeof value.linaria === 'object';
+
+export default {
+ test: withLinariaMetadata,
+ print: ({ linaria }) => `
+CSS:
+
+${Object.keys(linaria.rules)
+ .map((selector) => `${selector} {${linaria.rules[selector].cssText}}`)
+ .join('\n')}
+
+Dependencies: ${
+ linaria.dependencies.length ? linaria.dependencies.join(', ') : 'NA'
+ }
+`,
+} as Serializer<{ linaria: LinariaMetadata }>;
diff --git a/@linaria/packages/babel/__utils__/strategy-tester.ts b/@linaria/packages/babel/__utils__/strategy-tester.ts
new file mode 100644
index 0000000..168b491
--- /dev/null
+++ b/@linaria/packages/babel/__utils__/strategy-tester.ts
@@ -0,0 +1,976 @@
+/* eslint-env jest */
+/* eslint-disable import/no-extraneous-dependencies */
+import { join, resolve } from 'path';
+import * as babel from '@babel/core';
+import dedent from 'dedent';
+import stripAnsi from 'strip-ansi';
+
+import { Module } from '../src';
+import type { Evaluator, StrictOptions } from '../src';
+import serializer from './linaria-snapshot-serializer';
+
+expect.addSnapshotSerializer(serializer);
+async function transformAsync(
+ code: string,
+ opts?: babel.TransformOptions
+): Promise<babel.BabelFileResult> {
+ return (await babel.transformAsync(code, opts))!;
+}
+
+async function transformFileAsync(
+ filename: string,
+ opts?: babel.TransformOptions
+): Promise<babel.BabelFileResult> {
+ return (await babel.transformFileAsync(filename, opts))!;
+}
+
+type TranspileFn = (
+ input: string,
+ conf?: (original: babel.TransformOptions) => babel.TransformOptions
+) => Promise<babel.BabelFileResult>;
+
+// eslint-disable-next-line jest/no-export
+export function run(
+ dirname: string,
+ evaluator: Evaluator,
+ strategyDependentTests: (transpile: TranspileFn) => void = () => {}
+): void {
+ const babelrc: babel.TransformOptions = {
+ babelrc: false,
+ configFile: false,
+ plugins: [],
+ presets: [
+ [
+ require.resolve('../src'),
+ {
+ displayName: true,
+ evaluate: true,
+ rules: [
+ {
+ action: evaluator,
+ },
+ {
+ test: /\/node_modules\/(?!@linaria)/,
+ action: 'ignore',
+ },
+ {
+ test: /\/@linaria\/(?:core|react)\/\w+\.ts/,
+ action: (
+ filename: string,
+ options: StrictOptions,
+ text: string
+ ) => {
+ const { code } = babel.transformSync(text, {
+ filename,
+ })!;
+ return [code, new Map<string, string[]>()];
+ },
+ },
+ ],
+ },
+ ],
+ ],
+ };
+
+ const transpile: TranspileFn = async (
+ input: string,
+ conf: (original: typeof babelrc) => typeof babelrc = (i) => i
+ ) => {
+ const { code, metadata } = await transformAsync(input, {
+ filename: join(dirname, 'source.js'),
+ ...conf(babelrc),
+ });
+ // The slug will be machine specific, so replace it with a consistent one
+ return {
+ metadata,
+ code,
+ };
+ };
+
+ beforeEach(() => Module.invalidateEvalCache());
+
+ it('evaluates identifier in scope', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const answer = 42;
+ const foo = () => answer;
+ const days = foo() + ' days';
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${'${days}'}"
+ }
+ \`;
+ `
+ );
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('hoistable identifiers', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ {
+ var days = 42;
+ }
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${'${days}'}"
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('non-hoistable identifiers', async () => {
+ expect.assertions(1);
+
+ try {
+ await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ {
+ const days = 42;
+ }
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${'${days}'}"
+ }
+ \`;
+ `
+ );
+ } catch (e) {
+ expect(
+ stripAnsi(e.message.replace(dirname, '<<DIRNAME>>'))
+ ).toMatchSnapshot();
+ }
+ });
+
+ it('evaluates babel helpers', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ function copyAndExtend(a, b) {
+ return { ...a, ...b };
+ }
+
+ const obj = copyAndExtend({ a: 1 }, { a: 2 });
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${'${obj.a}'}"
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates imported typescript enums', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+ import { Colors } from '@linaria/babel-preset/__fixtures__/enums';
+
+ export const Title = styled.h1\`
+ color: ${'${Colors.BLUE}'};
+ \`;
+ `,
+ (config) => ({
+ ...config,
+ presets: ['@babel/preset-typescript', ...(config.presets ?? [])],
+ filename: 'source.ts',
+ })
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates local expressions', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const answer = 42;
+ const foo = () => answer;
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${"${foo() + ' days'}"}"
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates functions with nested identifiers', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const objects = { key: { fontSize: 12 } };
+ const foo = (k) => {
+ const obj = objects[k];
+ return obj;
+ };
+
+ export const Title = styled.h1\`
+ ${"${foo('key')}"}
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates expressions with dependencies', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+ import slugify from '@linaria/babel-preset/__fixtures__/slugify';
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${"${slugify('test')}"}"
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates expressions with expressions depending on shared dependency', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+ const slugify = require('@linaria/babel-preset/__fixtures__/slugify').default;
+
+ const boo = t => slugify(t) + 'boo';
+ const bar = t => slugify(t) + 'bar';
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${"${boo('test') + bar('test')}"}"
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates multiple expressions with shared dependency', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+ const slugify = require('@linaria/babel-preset/__fixtures__/slugify').default;
+
+ const boo = t => slugify(t) + 'boo';
+ const bar = t => slugify(t) + 'bar';
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${"${boo('test')}"}"
+ content: "${"${bar('test')}"}"
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates interpolations with sequence expression', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled.h1\`
+ color: ${'${(external, () => "blue")}'};
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates dependencies with sequence expression', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const color = (external, () => 'blue');
+
+ export const Title = styled.h1\`
+ color: ${'${color}'};
+ \`;
+ `
+ );
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates component interpolations', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ const { styled } = require('@linaria/react');
+
+ export const Title = styled.h1\`
+ color: red;
+ \`;
+
+ export const Paragraph = styled.p\`
+ ${'${Title}'} {
+ color: blue;
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('throws when interpolation evaluates to undefined', async () => {
+ expect.assertions(1);
+
+ try {
+ await transpile(
+ dedent`
+ const { styled } = require('@linaria/react');
+
+ let fontSize;
+
+ export const Title = styled.h1\`
+ font-size: ${'${fontSize}'};
+ \`;
+ `
+ );
+ } catch (e) {
+ expect(
+ stripAnsi(e.message.replace(dirname, '<<DIRNAME>>'))
+ ).toMatchSnapshot();
+ }
+ });
+
+ it('throws when interpolation evaluates to null', async () => {
+ expect.assertions(1);
+
+ try {
+ await transpile(
+ dedent`
+ const { styled } = require('@linaria/react');
+
+ const color = null;
+
+ export const Title = styled.h1\`
+ color: ${'${color}'};
+ \`;
+ `
+ );
+ } catch (e) {
+ expect(
+ stripAnsi(e.message.replace(dirname, '<<DIRNAME>>'))
+ ).toMatchSnapshot();
+ }
+ });
+
+ it('throws when interpolation evaluates to NaN', async () => {
+ expect.assertions(1);
+
+ try {
+ await transpile(
+ dedent`
+ const { styled } = require('@linaria/react');
+
+ const height = NaN;
+
+ export const Title = styled.h1\`
+ height: ${'${height}'}px;
+ \`;
+ `
+ );
+ } catch (e) {
+ expect(
+ stripAnsi(e.message.replace(dirname, '<<DIRNAME>>'))
+ ).toMatchSnapshot();
+ }
+ });
+
+ it('handles wrapping another styled component', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ const { css } = require('..');
+ const { styled } = require('@linaria/react');
+
+ const Title = styled.h1\`
+ color: red;
+ \`;
+
+ export const BlueTitle = styled(Title)\`
+ font-size: 24px;
+ color: blue;
+ \`;
+
+ export const GreenTitle = styled(BlueTitle)\`
+ color: green;
+ \`;
+ `
+ );
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('handles indirect wrapping another styled component', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ const { styled } = require('@linaria/react');
+
+ const Title = styled.h1\`
+ color: red;
+ \`;
+
+ const hoc = Cmp => Cmp;
+
+ export const CustomTitle = styled(hoc(Title))\`
+ font-size: 24px;
+ color: blue;
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('inlines object styles as CSS string', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const fill = (top = 0, left = 0, right = 0, bottom = 0) => ({
+ position: 'absolute',
+ top,
+ right,
+ bottom,
+ left,
+ });
+
+ export const Title = styled.h1\`
+ ${'${fill(0, 0)}'}
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('inlines array styles as CSS string', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const fill = (top = 0, left = 0, right = 0, bottom = 0) => [
+ { position: 'absolute' },
+ {
+ top,
+ right,
+ bottom,
+ left,
+ }
+ ];
+
+ export const Title = styled.h1\`
+ ${'${fill(0, 0)}'}
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('ignores inline arrow function expressions', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${'${props => props.content}'}"
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('simplifies react components', async () => {
+ const div = '<div>{props.children + constant}</div>';
+ const { code, metadata } = await transpile(
+ dedent`
+ import React from 'react';
+ import { styled } from '@linaria/react';
+ import constant from './broken-dependency';
+
+ const FuncComponent = (props) => ${div};
+
+ class ClassComponent extends React.PureComponent {
+ method() {
+ return constant;
+ }
+
+ render() {
+ return ${div};
+ }
+ }
+
+ export const StyledFunc = styled(FuncComponent)\`
+ color: red;
+ \`;
+ export const StyledClass = styled(ClassComponent)\`
+ color: blue;
+ \`;
+ `,
+ (config) => ({
+ ...config,
+ plugins: ['@babel/plugin-syntax-jsx', ...(config.plugins || [])],
+ })
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('ignores inline vanilla function expressions', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${'${function(props) { return props.content }}'}"
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('ignores external expressions', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const generate = props => props.content;
+
+ export const Title = styled.h1\`
+ &:before {
+ content: "${'${generate}'}"
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates complex styles with functions and nested selectors', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+ export const bareIconClass = css\`\`;
+
+ const getSizeStyles = (fs) => ({
+ [\`${'&.${bareIconClass}'}\`]: {
+ fontSize: fs * 1.5,
+ },
+ });
+
+ export const SIZES = {
+ XS: css\`${'${getSizeStyles(11)}'}\`,
+ };
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('throws codeframe error when evaluation fails', async () => {
+ expect.assertions(1);
+
+ try {
+ await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const foo = props => { throw new Error('This will fail') };
+
+ export const Title = styled.h1\`
+ font-size: ${'${foo()}'}px;
+ \`;
+ `
+ );
+ } catch (e) {
+ expect(
+ stripAnsi(e.message.replace(dirname, '<<DIRNAME>>'))
+ ).toMatchSnapshot();
+ }
+ });
+
+ it('handles escapes properly', async () => {
+ const { code, metadata } = await transformFileAsync(
+ resolve(__dirname, '../__fixtures__/escape-character.js'),
+ babelrc
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('handles complex component', async () => {
+ const { code, metadata } = await transformFileAsync(
+ resolve(__dirname, '../__fixtures__/complex-component.js'),
+ babelrc
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('generates stable class names', async () => {
+ const { code, metadata } = await transformFileAsync(
+ resolve(__dirname, '../__fixtures__/components-library.js'),
+ babelrc
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('derives display name from filename', async () => {
+ const { code, metadata } = await transformAsync(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export default styled.h1\`
+ font-size: 14px;
+ \`;
+ `,
+ {
+ ...babelrc,
+ filename: join(dirname, 'FancyName.js'),
+ }
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('derives display name from parent folder name', async () => {
+ const { code, metadata } = await transformAsync(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export default styled.h1\`
+ font-size: 14px;
+ \`;
+ `,
+ {
+ ...babelrc,
+ filename: join(dirname, 'FancyName/index.js'),
+ }
+ )!;
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it("throws if couldn't determine a display name", async () => {
+ expect.assertions(1);
+
+ try {
+ await transformAsync(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ export default styled.h1\`
+ font-size: 14px;
+ \`;
+ `,
+ {
+ ...babelrc,
+ filename: join(dirname, '/.js'),
+ }
+ );
+ } catch (e) {
+ expect(
+ stripAnsi(e.message.replace(dirname, '<<DIRNAME>>'))
+ ).toMatchSnapshot();
+ }
+ });
+
+ it('does not strip instanbul coverage sequences', async () => {
+ const { code, metadata } = await transformAsync(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ const a = 42;
+
+ export const Title = styled.h1\`
+ height: ${'${a}'}px;
+ \`;
+ `,
+ {
+ ...babelrc,
+ cwd: '/home/user/project',
+ filename: 'file.js',
+ plugins: [
+ [
+ // eslint-disable-next-line import/no-extraneous-dependencies
+ require('babel-plugin-istanbul').default({
+ ...babel,
+ assertVersion: () => {},
+ }),
+ { cwd: '/home/user/project' },
+ ],
+ ],
+ }
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ // PR #524
+ it('should work with String and Number object', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from '@linaria/core';
+
+ export const style = css\`
+ width: ${'${new String("100%")}'};
+ opacity: ${'${new Number(0.75)}'};
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('should work with generated classnames as selectors', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from "@linaria/core";
+
+ export const text = css\`\`;
+
+ export const square = css\`
+ .${'${text}'} {
+ color: red;
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('should process `css` calls inside components', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import React from 'react'
+ import {css} from '@linaria/core'
+
+ export function Component() {
+ const opacity = 0.2;
+ const className = css\`
+ opacity: ${'${opacity}'};
+ \`;
+
+ return React.createElement("div", { className });
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('should process `styled` calls inside components', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import React from 'react'
+ import {css} from '@linaria/core'
+
+ export function Component() {
+ const opacity = 0.2;
+ const MyComponent = styled.h1\`
+ opacity: ${'${opacity}'};
+ \`;
+
+ return React.createElement(MyComponent);
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('should process `css` calls with complex interpolation inside components', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import React from 'react'
+ import {css} from '@linaria/core'
+ import externalDep from '@linaria/babel-preset/__fixtures__/sample-script';
+ const globalObj = {
+ opacity: 0.5,
+ };
+
+ export function Component() {
+ const classes = {
+ value: 0.2,
+ cell: css\`
+ opacity: 0;
+ \`,
+ };
+
+ const classes2 = classes;
+ const referencedExternalDep = externalDep
+
+ const className = css\`
+ opacity: ${'${globalObj.opacity}'};
+ font-size: ${'${externalDep}'}
+ font-size: ${'${referencedExternalDep}'}
+
+ &:hover .${'${classes2.cell}'} {
+ opacity: ${'${classes.value}'};
+ }
+ \`;
+
+ return React.createElement("div", { className });
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('should process `styled` calls with complex interpolation inside components', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import React from 'react'
+ import {css} from '@linaria/core'
+
+ const globalObj = {
+ opacity: 0.5,
+ };
+
+ const Styled1 = styled.p\`
+ opacity: ${'${globalObj.opacity}'}
+ \`
+
+ export function Component() {
+ const classes = {
+ value: 0.2,
+ cell: css\`
+ opacity: 0;
+ \`,
+ };
+
+ const classes2 = classes;
+
+ const MyComponent = styled\`
+ opacity: ${'${globalObj.opacity}'};
+
+ &:hover .${'${classes2.cell}'} {
+ opacity: ${'${classes.value}'};
+ }
+ ${'${Styled1}'} {
+ font-size: 1;
+ }
+ \`;
+
+ return React.createElement(MyComponent);
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('should handle shadowed identifier inside components', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import React from 'react'
+ import {css} from '@linaria/core'
+
+ const color = 'red';
+
+ export default function Component() {
+ const color = 'blue'
+ const val = { color };
+ return React.createElement('div', {className: css\`background-color:${'${val.color}'};\`});
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('it should not throw location error for hoisted identifier', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import React from 'react'
+ import {css} from '@linaria/core'
+
+ const size = () => 5
+ export default function Component() {
+ const color = size()
+ return css\`opacity:${'${color}'};\`
+ }
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ strategyDependentTests(transpile);
+}
diff --git a/@linaria/packages/babel/babel.config.js b/@linaria/packages/babel/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/babel/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/babel/package.json b/@linaria/packages/babel/package.json
new file mode 100644
index 0000000..a63612c
--- /dev/null
+++ b/@linaria/packages/babel/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "@linaria/babel-preset",
+ "version": "3.0.0-beta.7",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "test": "jest --config ../../jest.config.js --rootDir .",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "@types/cosmiconfig": "^5.0.3",
+ "@types/dedent": "^0.7.0",
+ "dedent": "^0.7.0",
+ "strip-ansi": "^5.2.0"
+ },
+ "dependencies": {
+ "@babel/generator": ">=7",
+ "@babel/plugin-syntax-dynamic-import": ">=7",
+ "@babel/template": ">=7",
+ "@linaria/core": "^3.0.0-beta.4",
+ "@linaria/logger": "^3.0.0-beta.3",
+ "cosmiconfig": "^5.1.0",
+ "source-map": "^0.7.3",
+ "stylis": "^3.5.4"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7"
+ }
+}
diff --git a/@linaria/packages/babel/src/babel.ts b/@linaria/packages/babel/src/babel.ts
new file mode 100644
index 0000000..d99a54b
--- /dev/null
+++ b/@linaria/packages/babel/src/babel.ts
@@ -0,0 +1,3 @@
+import type core from '@babel/core';
+
+export type Core = typeof core;
diff --git a/@linaria/packages/babel/src/dynamic-import-noop.ts b/@linaria/packages/babel/src/dynamic-import-noop.ts
new file mode 100644
index 0000000..879fdc4
--- /dev/null
+++ b/@linaria/packages/babel/src/dynamic-import-noop.ts
@@ -0,0 +1,26 @@
+import type { Import } from '@babel/types';
+import type { NodePath } from '@babel/traverse';
+import syntax from '@babel/plugin-syntax-dynamic-import';
+import type { Visitor } from '@babel/traverse';
+import { Core } from './babel';
+
+export default function dynamic({ types: t }: Core): {
+ inherits: any;
+ visitor: Visitor;
+} {
+ return {
+ inherits: syntax,
+ visitor: {
+ Import(path: NodePath<Import>) {
+ const noop = t.arrowFunctionExpression([], t.identifier('undefined'));
+
+ path.parentPath.replaceWith(
+ t.objectExpression([
+ t.objectProperty(t.identifier('then'), noop),
+ t.objectProperty(t.identifier('catch'), noop),
+ ])
+ );
+ },
+ },
+ };
+}
diff --git a/@linaria/packages/babel/src/eval-cache.ts b/@linaria/packages/babel/src/eval-cache.ts
new file mode 100644
index 0000000..96149a6
--- /dev/null
+++ b/@linaria/packages/babel/src/eval-cache.ts
@@ -0,0 +1,87 @@
+import { createHash } from 'crypto';
+import { debug } from '@linaria/logger';
+
+const fileHashes = new Map<string, string>();
+const evalCache = new Map<string, any>();
+const fileKeys = new Map<string, string[]>();
+
+const hash = (text: string) => createHash('sha1').update(text).digest('base64');
+
+let lastText: string = '';
+let lastHash: string = hash(lastText);
+
+const memoizedHash: typeof hash = (text) => {
+ if (lastText !== text) {
+ lastHash = hash(text);
+ lastText = text;
+ }
+
+ return lastHash;
+};
+
+const toKey = (filename: string, exports: string[]) =>
+ exports.length > 0 ? `${filename}:${exports.join(',')}` : filename;
+
+export const clear = () => {
+ fileHashes.clear();
+ evalCache.clear();
+ fileKeys.clear();
+};
+
+export const clearForFile = (filename: string) => {
+ const keys = fileKeys.get(filename) ?? [];
+ if (keys.length === 0) {
+ return;
+ }
+
+ debug('eval-cache:clear-for-file', filename);
+
+ for (const key of keys) {
+ fileHashes.delete(key);
+ evalCache.delete(key);
+ }
+
+ fileKeys.set(filename, []);
+};
+
+export const has = (
+ [filename, ...exports]: string[],
+ text: string
+): boolean => {
+ const key = toKey(filename, exports);
+ const textHash = memoizedHash(text);
+ debug('eval-cache:has', `${key} ${textHash}`);
+
+ return fileHashes.get(key) === textHash;
+};
+
+export const get = ([filename, ...exports]: string[], text: string): any => {
+ const key = toKey(filename, exports);
+ const textHash = memoizedHash(text);
+ debug('eval-cache:get', `${key} ${textHash}`);
+
+ if (fileHashes.get(key) !== textHash) {
+ return undefined;
+ }
+
+ return evalCache.get(key);
+};
+
+export const set = (
+ [filename, ...exports]: string[],
+ text: string,
+ value: any
+): void => {
+ const key = toKey(filename, exports);
+ const textHash = memoizedHash(text);
+ debug('eval-cache:set', `${key} ${textHash}`);
+
+ fileHashes.set(key, textHash);
+ evalCache.set(key, value);
+
+ if (!fileKeys.has(filename)) {
+ fileKeys.set(filename, []);
+ }
+
+ fileKeys.get(filename)!.push(key);
+};
diff --git a/@linaria/packages/babel/src/evaluators/buildOptions.ts b/@linaria/packages/babel/src/evaluators/buildOptions.ts
new file mode 100644
index 0000000..a938d4b
--- /dev/null
+++ b/@linaria/packages/babel/src/evaluators/buildOptions.ts
@@ -0,0 +1,104 @@
+/**
+ * This file handles preparing babel config for Linaria preevaluation.
+ */
+
+import type { PluginItem, TransformOptions } from '@babel/core';
+import type { StrictOptions } from '../types';
+
+type DefaultOptions = Partial<TransformOptions> & {
+ plugins: PluginItem[];
+ presets: PluginItem[];
+ caller: { evaluate: boolean };
+};
+
+export default function buildOptions(
+ filename: string,
+ options?: StrictOptions
+): TransformOptions {
+ const plugins: Array<string | object> = [
+ // Include these plugins to avoid extra config when using { module: false } for webpack
+ '@babel/plugin-transform-modules-commonjs',
+ '@babel/plugin-proposal-export-namespace-from',
+ ];
+
+ const defaults: DefaultOptions = {
+ caller: { name: 'linaria', evaluate: true },
+ filename: filename,
+ presets: [
+ [
+ require.resolve('../index'),
+ {
+ ...(options || {}),
+ },
+ ],
+ ],
+ plugins: [
+ ...plugins.map((name) => require.resolve(name as string)),
+ // We don't support dynamic imports when evaluating, but don't wanna syntax error
+ // This will replace dynamic imports with an object that does nothing
+ require.resolve('../dynamic-import-noop'),
+ ],
+ };
+
+ const babelOptions =
+ // Shallow copy the babel options because we mutate it later
+ options?.babelOptions ? { ...options.babelOptions } : {};
+
+ // If we programmatically pass babel options while there is a .babelrc, babel might throw
+ // We need to filter out duplicate presets and plugins so that this doesn't happen
+ // This workaround isn't full proof, but it's still better than nothing
+ const keys: Array<keyof TransformOptions & ('presets' | 'plugins')> = [
+ 'presets',
+ 'plugins',
+ ];
+ keys.forEach((field) => {
+ babelOptions[field] = babelOptions[field]
+ ? babelOptions[field]!.filter((item: PluginItem) => {
+ // If item is an array it's a preset/plugin with options ([preset, options])
+ // Get the first item to get the preset.plugin name
+ // Otherwise it's a plugin name (can be a function too)
+ const name = Array.isArray(item) ? item[0] : item;
+
+ if (
+ // In our case, a preset might also be referring to linaria/babel
+ // We require the file from internal path which is not the same one that we export
+ // This case won't get caught and the preset won't filtered, even if they are same
+ // So we add an extra check for top level linaria/babel
+ name === 'linaria/babel' ||
+ name === '@linaria' ||
+ name === '@linaria/babel-preset' ||
+ name === require.resolve('../index') ||
+ // Also add a check for the plugin names we include for bundler support
+ plugins.includes(name)
+ ) {
+ return false;
+ }
+
+ // Loop through the default presets/plugins to see if it already exists
+ return !defaults[field].some((it) =>
+ // The default presets/plugins can also have nested arrays,
+ Array.isArray(it) ? it[0] === name : it === name
+ );
+ })
+ : [];
+ });
+
+ return {
+ // Passed options shouldn't be able to override the options we pass
+ // Linaria's plugins rely on these (such as filename to generate consistent hash)
+ ...babelOptions,
+ ...defaults,
+ presets: [
+ // Preset order is last to first, so add the extra presets to start
+ // This makes sure that our preset is always run first
+ ...babelOptions.presets!,
+ ...defaults.presets,
+ ],
+ plugins: [
+ ...defaults.plugins,
+ // Plugin order is first to last, so add the extra presets to end
+ // This makes sure that the plugins we specify always run first
+ ...babelOptions.plugins!,
+ ],
+ };
+}
diff --git a/@linaria/packages/babel/src/evaluators/index.ts b/@linaria/packages/babel/src/evaluators/index.ts
new file mode 100644
index 0000000..1d24750
--- /dev/null
+++ b/@linaria/packages/babel/src/evaluators/index.ts
@@ -0,0 +1,22 @@
+/**
+ * This file is an entry point for module evaluation for getting lazy dependencies.
+ */
+
+import Module from '../module';
+import type { StrictOptions } from '../types';
+
+export default function evaluate(
+ code: string,
+ filename: string,
+ options: StrictOptions
+) {
+ const m = new Module(filename, options);
+
+ m.dependencies = [];
+ m.evaluate(code, ['__linariaPreval']);
+
+ return {
+ value: m.exports,
+ dependencies: m.dependencies,
+ };
+}
diff --git a/@linaria/packages/babel/src/evaluators/templateProcessor.ts b/@linaria/packages/babel/src/evaluators/templateProcessor.ts
new file mode 100644
index 0000000..0c910d4
--- /dev/null
+++ b/@linaria/packages/babel/src/evaluators/templateProcessor.ts
@@ -0,0 +1,313 @@
+/**
+ * This file handles transforming template literals to class names or styled components and generates CSS content.
+ * It uses CSS code from template literals and evaluated values of lazy dependencies stored in ValueCache.
+ */
+
+import type { Expression } from '@babel/types';
+import generator from '@babel/generator';
+
+import type { StyledMeta } from '@linaria/core';
+import { debug } from '@linaria/logger';
+import { units } from '../units';
+import type {
+ State,
+ StrictOptions,
+ TemplateExpression,
+ ValueCache,
+} from '../types';
+
+import isSerializable from '../utils/isSerializable';
+import throwIfInvalid from '../utils/throwIfInvalid';
+import stripLines from '../utils/stripLines';
+import toCSS from '../utils/toCSS';
+import getLinariaComment from '../utils/getLinariaComment';
+import { Core } from '../babel';
+
+// Match any valid CSS units followed by a separator such as ;, newline etc.
+const unitRegex = new RegExp(`^(${units.join('|')})(;|,|\n| |\\))`);
+
+type Interpolation = {
+ id: string;
+ node: Expression;
+ source: string;
+ unit: string;
+};
+
+function hasMeta(value: any): value is StyledMeta {
+ return value && typeof value === 'object' && (value as any).__linaria;
+}
+
+const processedPaths = new WeakSet();
+
+export default function getTemplateProcessor(
+ { types: t }: Core,
+ options: StrictOptions
+) {
+ return function process(
+ { styled, path }: TemplateExpression,
+ state: State,
+ valueCache: ValueCache
+ ) {
+ if (processedPaths.has(path)) {
+ // Do not process an expression
+ // if it is referenced in one template more than once
+ return;
+ }
+
+ processedPaths.add(path);
+
+ const { quasi } = path.node;
+
+ const interpolations: Interpolation[] = [];
+
+ // Check if the variable is referenced anywhere for basic DCE
+ // Only works when it's assigned to a variable
+ let isReferenced = true;
+
+ const [, slug, displayName, className] = getLinariaComment(path);
+
+ const parent = path.findParent(
+ (p) =>
+ t.isObjectProperty(p) ||
+ t.isJSXOpeningElement(p) ||
+ t.isVariableDeclarator(p)
+ );
+
+ if (parent) {
+ const parentNode = parent.node;
+ if (t.isVariableDeclarator(parentNode) && t.isIdentifier(parentNode.id)) {
+ const { referencePaths } = path.scope.getBinding(
+ parentNode.id.name
+ ) || { referencePaths: [] };
+
+ isReferenced = referencePaths.length !== 0;
+ }
+ }
+
+ // Serialize the tagged template literal to a string
+ let cssText = '';
+
+ const expressions = path.get('quasi').get('expressions');
+
+ quasi.quasis.forEach((el, i, self) => {
+ let appended = false;
+
+ if (i !== 0 && el.value.cooked) {
+ // Check if previous expression was a CSS variable that we replaced
+ // If it has a unit after it, we need to move the unit into the interpolation
+ // e.g. `var(--size)px` should actually be `var(--size)`
+ // So we check if the current text starts with a unit, and add the unit to the previous interpolation
+ // Another approach would be `calc(var(--size) * 1px), but some browsers don't support all units
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=956573
+ const matches = el.value.cooked.match(unitRegex);
+
+ if (matches) {
+ const last = interpolations[interpolations.length - 1];
+ const [, unit] = matches;
+
+ if (last && cssText.endsWith(`var(--${last.id})`)) {
+ last.unit = unit;
+ cssText += el.value.cooked.replace(unitRegex, '$2');
+ appended = true;
+ }
+ }
+ }
+
+ if (!appended) {
+ cssText += el.value.cooked;
+ }
+
+ const ex = expressions[i];
+
+ if (ex && !ex.isExpression()) {
+ throw ex.buildCodeFrameError(
+ `The expression '${generator(ex.node).code}' is not supported.`
+ );
+ }
+
+ if (ex) {
+ const { end } = ex.node.loc!;
+ const result = ex.evaluate();
+ const beforeLength = cssText.length;
+
+ // The location will be end of the current string to start of next string
+ const next = self[i + 1];
+ const loc = {
+ // +1 because the expressions location always shows 1 column before
+ start: { line: el.loc!.end.line, column: el.loc!.end.column + 1 },
+ end: next
+ ? { line: next.loc!.start.line, column: next.loc!.start.column }
+ : { line: end.line, column: end.column + 1 },
+ };
+
+ if (result.confident) {
+ throwIfInvalid(result.value, ex);
+
+ if (isSerializable(result.value)) {
+ // If it's a plain object or an array, convert it to a CSS string
+ cssText += stripLines(loc, toCSS(result.value));
+ } else {
+ cssText += stripLines(loc, result.value);
+ }
+
+ state.replacements.push({
+ original: loc,
+ length: cssText.length - beforeLength,
+ });
+ } else {
+ // Try to preval the value
+ if (
+ options.evaluate &&
+ !(t.isFunctionExpression(ex) || t.isArrowFunctionExpression(ex))
+ ) {
+ const value = valueCache.get(ex.node);
+ throwIfInvalid(value, ex);
+
+ // Skip the blank string instead of throw ing an error
+ if (value === '') {
+ return;
+ }
+
+ if (value && typeof value !== 'function') {
+ // Only insert text for non functions
+ // We don't touch functions because they'll be interpolated at runtime
+
+ if (hasMeta(value)) {
+ // If it's an React component wrapped in styled, get the class name
+ // Useful for interpolating components
+ cssText += `.${value.__linaria.className}`;
+ } else if (isSerializable(value)) {
+ cssText += stripLines(loc, toCSS(value));
+ } else {
+ // For anything else, assume it'll be stringified
+ cssText += stripLines(loc, value);
+ }
+
+ state.replacements.push({
+ original: loc,
+ length: cssText.length - beforeLength,
+ });
+
+ return;
+ }
+ }
+
+ if (styled) {
+ const id = `${slug}-${i}`;
+
+ interpolations.push({
+ id,
+ node: ex.node,
+ source: ex.getSource() || generator(ex.node).code,
+ unit: '',
+ });
+
+ cssText += `var(--${id})`;
+ } else {
+ // CSS custom properties can't be used outside components
+ throw ex.buildCodeFrameError(
+ `The CSS cannot contain JavaScript expressions when using the 'css' tag. To evaluate the expressions at build time, pass 'evaluate: true' to the babel plugin.`
+ );
+ }
+ }
+ }
+ });
+
+ let selector = `.${className}`;
+
+ if (styled) {
+ // If `styled` wraps another component and not a primitive,
+ // get its class name to create a more specific selector
+ // it'll ensure that styles are overridden properly
+ if (options.evaluate && t.isIdentifier(styled.component.node)) {
+ let value = valueCache.get(styled.component.node.name);
+ while (hasMeta(value)) {
+ selector += `.${value.__linaria.className}`;
+ value = value.__linaria.extends;
+ }
+ }
+
+ const props = [];
+
+ props.push(
+ t.objectProperty(t.identifier('name'), t.stringLiteral(displayName!))
+ );
+
+ props.push(
+ t.objectProperty(t.identifier('class'), t.stringLiteral(className!))
+ );
+
+ // If we found any interpolations, also pass them so they can be applied
+ if (interpolations.length) {
+ // De-duplicate interpolations based on the source and unit
+ // If two interpolations have the same source code and same unit,
+ // we don't need to use 2 custom properties for them, we can use a single one
+ const result: { [key: string]: Interpolation } = {};
+
+ interpolations.forEach((it) => {
+ const key = it.source + it.unit;
+
+ if (key in result) {
+ cssText = cssText.replace(
+ `var(--${it.id})`,
+ `var(--${result[key].id})`
+ );
+ } else {
+ result[key] = it;
+ }
+ });
+
+ props.push(
+ t.objectProperty(
+ t.identifier('vars'),
+ t.objectExpression(
+ Object.keys(result).map((key) => {
+ const { id, node, unit } = result[key];
+ const items = [node];
+
+ if (unit) {
+ items.push(t.stringLiteral(unit));
+ }
+
+ return t.objectProperty(
+ t.stringLiteral(id),
+ t.arrayExpression(items)
+ );
+ })
+ )
+ )
+ );
+ }
+
+ path.replaceWith(
+ t.callExpression(
+ t.callExpression(
+ t.identifier(state.file.metadata.localName || 'styled'),
+ [styled.component.node]
+ ),
+ [t.objectExpression(props)]
+ )
+ );
+
+ path.addComment('leading', '#__PURE__');
+ } else {
+ path.replaceWith(t.stringLiteral(className!));
+ }
+
+ if (!isReferenced && !cssText.includes(':global')) {
+ return;
+ }
+
+ debug(
+ 'evaluator:template-processor:extracted-rule',
+ `\n${selector} {${cssText}\n}`
+ );
+
+ state.rules[selector] = {
+ cssText,
+ className: className!,
+ displayName: displayName!,
+ start: path.parent?.loc?.start ?? null,
+ };
+ };
+}
diff --git a/@linaria/packages/babel/src/evaluators/visitors/JSXElement.ts b/@linaria/packages/babel/src/evaluators/visitors/JSXElement.ts
new file mode 100644
index 0000000..89a0ccd
--- /dev/null
+++ b/@linaria/packages/babel/src/evaluators/visitors/JSXElement.ts
@@ -0,0 +1,56 @@
+import { types as t } from '@babel/core';
+import type { NodePath } from '@babel/traverse';
+import type { Function, JSXElement as JSXElementNode } from '@babel/types';
+
+function getFunctionName(path: NodePath<Function>): string | null {
+ if (path.isClassMethod() && t.isIdentifier(path.node.key)) {
+ return path.node.key.name;
+ }
+
+ return null;
+}
+
+export default function JSXElement(path: NodePath<JSXElementNode>) {
+ // JSX can be safely replaced on an empty fragment because it is unnecessary for styles
+ const emptyFragment = t.jsxFragment(
+ t.jsxOpeningFragment(),
+ t.jsxClosingFragment(),
+ []
+ );
+
+ // We can do even more
+ // If that JSX is a result of a function, we can replace the function body.
+ const scopePath = path.scope.path;
+ if (scopePath.isFunction()) {
+ const emptyBody = t.blockStatement([t.returnStatement(emptyFragment)]);
+
+ // Is it not just a function, but a method `render`?
+ if (getFunctionName(scopePath) === 'render') {
+ const decl = scopePath.findParent((p) => p.isClassDeclaration());
+
+ // Replace the whole component
+ if (decl?.isClassDeclaration()) {
+ decl.replaceWith(t.functionDeclaration(decl.node.id, [], emptyBody));
+
+ return;
+ }
+ }
+
+ const body = scopePath.get('body');
+ if (Array.isArray(body)) {
+ throw new Error(
+ `A body of a function is expected to be a single element but an array was returned. It's possible if JS syntax has been changed since that code was written.`
+ );
+ }
+
+ const node: typeof scopePath.node = {
+ ...scopePath.node,
+ body: emptyBody,
+ params: [],
+ };
+
+ scopePath.replaceWith(node);
+ } else {
+ path.replaceWith(emptyFragment);
+ }
+}
diff --git a/@linaria/packages/babel/src/evaluators/visitors/ProcessCSS.ts b/@linaria/packages/babel/src/evaluators/visitors/ProcessCSS.ts
new file mode 100644
index 0000000..6f737a1
--- /dev/null
+++ b/@linaria/packages/babel/src/evaluators/visitors/ProcessCSS.ts
@@ -0,0 +1,20 @@
+/**
+ * This visitor replaces css tag with the generated className
+ *
+ */
+
+import { types as t } from '@babel/core';
+import type { NodePath } from '@babel/traverse';
+import type { TaggedTemplateExpression } from '@babel/types';
+import getLinariaComment from '../../utils/getLinariaComment';
+
+export default function ProcessCSS(path: NodePath<TaggedTemplateExpression>) {
+ if (t.isIdentifier(path.node.tag) && path.node.tag.name === 'css') {
+ const [, , , className] = getLinariaComment(path);
+ if (!className) {
+ return;
+ }
+
+ path.replaceWith(t.stringLiteral(className));
+ }
+}
diff --git a/@linaria/packages/babel/src/evaluators/visitors/ProcessStyled.ts b/@linaria/packages/babel/src/evaluators/visitors/ProcessStyled.ts
new file mode 100644
index 0000000..a9e38c5
--- /dev/null
+++ b/@linaria/packages/babel/src/evaluators/visitors/ProcessStyled.ts
@@ -0,0 +1,46 @@
+/**
+ * This visitor replaces styled components with metadata about them.
+ * CallExpression should be used to match styled components.
+ * Works out of the box for styled that wraps other component,
+ * styled.tagName are transformed to call expressions using @babel/plugin-transform-template-literals
+ * @babel/plugin-transform-template-literals is loaded as a prest, to force proper ordering. It has to run just after linaria.
+ * It is used explicitly in extractor, and loaded as a part of `prest-env` in shaker
+ */
+
+import { types as t } from '@babel/core';
+import type { NodePath } from '@babel/traverse';
+import type { CallExpression } from '@babel/types';
+import { expression } from '@babel/template';
+import getLinariaComment from '../../utils/getLinariaComment';
+
+const linariaComponentTpl = expression(
+ `{
+ displayName: %%displayName%%,
+ __linaria: {
+ className: %%className%%,
+ extends: %%extends%%
+ }
+ }`
+);
+
+export default function ProcessStyled(path: NodePath<CallExpression>) {
+ const [type, , displayName, className] = getLinariaComment(path);
+ if (!className) {
+ return;
+ }
+
+ if (type === 'css') {
+ path.replaceWith(t.stringLiteral(className));
+ return;
+ }
+
+ path.replaceWith(
+ linariaComponentTpl({
+ className: t.stringLiteral(className),
+ displayName: displayName ? t.stringLiteral(displayName) : null,
+ extends: t.isCallExpression(path.node.callee)
+ ? path.node.callee.arguments[0]
+ : t.nullLiteral(),
+ })
+ );
+}
diff --git a/@linaria/packages/babel/src/extract.ts b/@linaria/packages/babel/src/extract.ts
new file mode 100644
index 0000000..fb2df83
--- /dev/null
+++ b/@linaria/packages/babel/src/extract.ts
@@ -0,0 +1,222 @@
+/* eslint-disable no-param-reassign */
+
+/**
+ * This is an entry point for styles extraction.
+ * On enter, It:
+ * - traverse the code using visitors (TaggedTemplateExpression, ImportDeclaration)
+ * - schedule evaluation of lazy dependencies (those who are not simple expressions //TODO does they have it's name?)
+ * - let templateProcessor to save evaluated values in babel state as `replacements`.
+ * On exit, It:
+ * - store result of extraction in babel's file metadata
+ */
+
+import type { Node, Program, Expression } from '@babel/types';
+import type { NodePath, Scope, Visitor } from '@babel/traverse';
+import { expression, statement } from '@babel/template';
+import generator from '@babel/generator';
+import { debug, error } from '@linaria/logger';
+import evaluate from './evaluators';
+import getTemplateProcessor from './evaluators/templateProcessor';
+import Module from './module';
+import type {
+ State,
+ StrictOptions,
+ LazyValue,
+ ExpressionValue,
+ ValueCache,
+} from './types';
+import { ValueType } from './types';
+import CollectDependencies from './visitors/CollectDependencies';
+import DetectStyledImportName from './visitors/DetectStyledImportName';
+import GenerateClassNames from './visitors/GenerateClassNames';
+import type { Core } from './babel';
+
+function isLazyValue(v: ExpressionValue): v is LazyValue {
+ return v.kind === ValueType.LAZY;
+}
+
+function isNodePath<T extends Node>(obj: NodePath<T> | T): obj is NodePath<T> {
+ return 'node' in obj && obj?.node !== undefined;
+}
+
+function findFreeName(scope: Scope, name: string): string {
+ // By default `name` is used as a name of the function …
+ let nextName = name;
+ let idx = 0;
+ while (scope.hasBinding(nextName, false)) {
+ // … but if there is an already defined variable with this name …
+ // … we are trying to use a name like wrap_N
+ idx += 1;
+ nextName = `wrap_${idx}`;
+ }
+
+ return nextName;
+}
+
+function unwrapNode<T extends Node>(
+ item: NodePath<T> | T | string
+): T | string {
+ if (typeof item === 'string') {
+ return item;
+ }
+
+ return isNodePath(item) ? item.node : item;
+}
+
+// All exported values will be wrapped with this function
+const expressionWrapperTpl = statement(`
+ const %%wrapName%% = (fn) => {
+ try {
+ return fn();
+ } catch (e) {
+ return e;
+ }
+ };
+`);
+
+const expressionTpl = expression(`%%wrapName%%(() => %%expression%%)`);
+const exportsLinariaPrevalTpl = statement(
+ `exports.__linariaPreval = %%expressions%%`
+);
+
+function addLinariaPreval(
+ { types: t }: Core,
+ path: NodePath<Program>,
+ lazyDeps: Array<Expression | string>
+): Program {
+ // Constant __linariaPreval with all dependencies
+ const wrapName = findFreeName(path.scope, '_wrap');
+ const statements = [
+ expressionWrapperTpl({ wrapName }),
+ exportsLinariaPrevalTpl({
+ expressions: t.arrayExpression(
+ lazyDeps.map((expression) => expressionTpl({ expression, wrapName }))
+ ),
+ }),
+ ];
+
+ const programNode = path.node;
+ return t.program(
+ [...programNode.body, ...statements],
+ programNode.directives,
+ programNode.sourceType,
+ programNode.interpreter
+ );
+}
+
+export default function extract(
+ babel: Core,
+ options: StrictOptions
+): { visitor: Visitor<State> } {
+ const process = getTemplateProcessor(babel, options);
+
+ return {
+ visitor: {
+ Program: {
+ enter(path: NodePath<Program>, state: State) {
+ // Collect all the style rules from the styles we encounter
+ state.queue = [];
+ state.rules = {};
+ state.index = -1;
+ state.dependencies = [];
+ state.replacements = [];
+ debug('extraction:start', state.file.opts.filename);
+
+ // Invalidate cache for module evaluation to get fresh modules
+ Module.invalidate();
+
+ // We need our transforms to run before anything else
+ // So we traverse here instead of a in a visitor
+ path.traverse({
+ ImportDeclaration: (p) => DetectStyledImportName(babel, p, state),
+ TaggedTemplateExpression: (p) => {
+ GenerateClassNames(babel, p, state, options);
+ CollectDependencies(babel, p, state, options);
+ },
+ });
+
+ const lazyDeps = state.queue.reduce(
+ (acc, { expressionValues: values }) => {
+ acc.push(...values.filter(isLazyValue));
+ return acc;
+ },
+ [] as LazyValue[]
+ );
+
+ const expressionsToEvaluate = lazyDeps.map((v) => unwrapNode(v.ex));
+ const originalLazyExpressions = lazyDeps.map((v) =>
+ unwrapNode(v.originalEx)
+ );
+
+ debug('lazy-deps:count', lazyDeps.length);
+
+ let lazyValues: any[] = [];
+
+ if (expressionsToEvaluate.length > 0) {
+ debug(
+ 'lazy-deps:original-expressions-list',
+ originalLazyExpressions.map((node) =>
+ typeof node !== 'string' ? generator(node).code : node
+ )
+ );
+ debug(
+ 'lazy-deps:expressions-to-eval-list',
+ expressionsToEvaluate.map((node) =>
+ typeof node !== 'string' ? generator(node).code : node
+ )
+ );
+
+ const program = addLinariaPreval(
+ babel,
+ path,
+ expressionsToEvaluate
+ );
+ const { code } = generator(program);
+ debug('lazy-deps:evaluate', '');
+ try {
+ const evaluation = evaluate(
+ code,
+ state.file.opts.filename,
+ options
+ );
+ debug('lazy-deps:sub-files', evaluation.dependencies);
+
+ state.dependencies.push(...evaluation.dependencies);
+ lazyValues = evaluation.value.__linariaPreval || [];
+ debug('lazy-deps:values', evaluation.value.__linariaPreval);
+ } catch (e) {
+ error('lazy-deps:evaluate', code);
+ throw new Error(
+ 'An unexpected runtime error occurred during dependencies evaluation: \n' +
+ e.stack +
+ '\n\nIt may happen when your code or third party module is invalid or uses identifiers not available in Node environment, eg. window. \n' +
+ 'Note that line numbers in above stack trace will most likely not match, because Linaria needed to transform your code a bit.\n'
+ );
+ }
+ }
+
+ const valueCache: ValueCache = new Map();
+ originalLazyExpressions.forEach((key, idx) =>
+ valueCache.set(key, lazyValues[idx])
+ );
+ state.queue.forEach((item) => process(item, state, valueCache));
+ },
+ exit(_: any, state: State) {
+ if (Object.keys(state.rules).length) {
+ // Store the result as the file metadata under linaria key
+ state.file.metadata.linaria = {
+ rules: state.rules,
+ replacements: state.replacements,
+ dependencies: state.dependencies,
+ };
+ }
+
+ // Invalidate cache for module evaluation when we're done
+ Module.invalidate();
+
+ debug('extraction:end', state.file.opts.filename);
+ },
+ },
+ },
+ };
+}
diff --git a/@linaria/packages/babel/src/index.ts b/@linaria/packages/babel/src/index.ts
new file mode 100644
index 0000000..048fe58
--- /dev/null
+++ b/@linaria/packages/babel/src/index.ts
@@ -0,0 +1,45 @@
+/**
+ * File defines babel prest for Linaria.
+ * It uses ./extract function that is an entry point for styles extraction.
+ * It also bypass babel options defined in Linaria config file with it's defaults (see ./utils/loadOptions).
+ */
+import type { ConfigAPI, TransformCaller } from '@babel/core';
+
+import { debug } from '@linaria/logger';
+import type { PluginOptions } from './utils/loadOptions';
+import loadOptions from './utils/loadOptions';
+
+export * as EvalCache from './eval-cache';
+export { default as buildOptions } from './evaluators/buildOptions';
+export { default as JSXElement } from './evaluators/visitors/JSXElement';
+export { default as ProcessCSS } from './evaluators/visitors/ProcessCSS';
+export { default as ProcessStyled } from './evaluators/visitors/ProcessStyled';
+export { default as Module } from './module';
+export {
+ default as transform,
+ extractCssFromAst,
+ shouldTransformCode,
+} from './transform';
+export * from './types';
+export type { PluginOptions } from './utils/loadOptions';
+export { default as isNode } from './utils/isNode';
+export { default as getVisitorKeys } from './utils/getVisitorKeys';
+export { default as peek } from './utils/peek';
+export { default as slugify } from './utils/slugify';
+export { default as CollectDependencies } from './visitors/CollectDependencies';
+export { default as DetectStyledImportName } from './visitors/DetectStyledImportName';
+export { default as GenerateClassNames } from './visitors/GenerateClassNames';
+
+function isEnabled(caller?: TransformCaller & { evaluate?: true }) {
+ return caller?.name !== 'linaria' || !caller.evaluate;
+}
+
+export default function linaria(babel: ConfigAPI, options: PluginOptions) {
+ if (!babel.caller(isEnabled)) {
+ return {};
+ }
+ debug('options', JSON.stringify(options));
+ return {
+ plugins: [[require('./extract'), loadOptions(options)]],
+ };
+}
diff --git a/@linaria/packages/babel/src/module.ts b/@linaria/packages/babel/src/module.ts
new file mode 100644
index 0000000..7893812
--- /dev/null
+++ b/@linaria/packages/babel/src/module.ts
@@ -0,0 +1,373 @@
+/**
+ * This is a custom implementation for the module system for evaluating code,
+ * used for resolving values for dependencies interpolated in `css` or `styled`.
+ *
+ * This serves 2 purposes:
+ * - Avoid leakage from evaluated code to module cache in current context, e.g. `babel-register`
+ * - Allow us to invalidate the module cache without affecting other stuff, necessary for rebuilds
+ *
+ * We also use it to transpile the code with Babel by default.
+ * We also store source maps for it to provide correct error stacktraces.
+ *
+ */
+
+import NativeModule from 'module';
+import vm from 'vm';
+import fs from 'fs';
+import path from 'path';
+import type { BabelFileResult } from '@babel/core';
+import { debug } from '@linaria/logger';
+import * as EvalCache from './eval-cache';
+import * as process from './process';
+import type { Evaluator, StrictOptions } from './types';
+
+// Supported node builtins based on the modules polyfilled by webpack
+// `true` means module is polyfilled, `false` means module is empty
+const builtins = {
+ assert: true,
+ buffer: true,
+ child_process: false,
+ cluster: false,
+ console: true,
+ constants: true,
+ crypto: true,
+ dgram: false,
+ dns: false,
+ domain: true,
+ events: true,
+ fs: false,
+ http: true,
+ https: true,
+ module: false,
+ net: false,
+ os: true,
+ path: true,
+ punycode: true,
+ process: true,
+ querystring: true,
+ readline: false,
+ repl: false,
+ stream: true,
+ string_decoder: true,
+ sys: true,
+ timers: true,
+ tls: false,
+ tty: true,
+ url: true,
+ util: true,
+ vm: true,
+ zlib: true,
+};
+
+// Separate cache for evaluated modules
+let cache: { [id: string]: Module } = {};
+
+const NOOP = () => {};
+
+const createCustomDebug =
+ (depth: number) =>
+ (..._args: Parameters<typeof debug>) => {
+ const [namespaces, arg1, ...args] = _args;
+ const modulePrefix = depth === 0 ? 'module' : `sub-module-${depth}`;
+ debug(`${modulePrefix}:${namespaces}`, arg1, ...args);
+ };
+
+const cookModuleId = (rawId: string) => {
+ // It's a dirty hack for avoiding conflicts with babel-preset-react-app
+ // https://github.com/callstack/linaria/issues/745
+ // FIXME @Anber: I'll try to figure out a better solution. Probably, using Terser as a shaker's core can solve problems with interfered plugins.
+ return rawId.replace(
+ '/@babel/runtime/helpers/esm/',
+ '/@babel/runtime/helpers/'
+ );
+};
+
+class Module {
+ static invalidate: () => void;
+ static invalidateEvalCache: () => void;
+ static _resolveFilename: (
+ id: string,
+ options: { id: string; filename: string; paths: string[] }
+ ) => string;
+ static _nodeModulePaths: (filename: string) => string[];
+
+ id: string;
+ filename: string;
+ options: StrictOptions;
+ imports: Map<string, string[]> | null;
+ paths: string[];
+ exports: any;
+ extensions: string[];
+ dependencies: string[] | null;
+ transform: ((text: string) => BabelFileResult | null) | null;
+ debug: typeof debug;
+ debuggerDepth: number;
+
+ constructor(
+ filename: string,
+ options: StrictOptions,
+ debuggerDepth: number = 0
+ ) {
+ this.id = filename;
+ this.filename = filename;
+ this.options = options;
+ this.imports = null;
+ this.paths = [];
+ this.dependencies = null;
+ this.transform = null;
+ this.debug = createCustomDebug(debuggerDepth);
+ this.debuggerDepth = debuggerDepth;
+
+ Object.defineProperties(this, {
+ id: {
+ value: filename,
+ writable: false,
+ },
+ filename: {
+ value: filename,
+ writable: false,
+ },
+ paths: {
+ value: Object.freeze(
+ (
+ NativeModule as unknown as {
+ _nodeModulePaths(filename: string): string[];
+ }
+ )._nodeModulePaths(path.dirname(filename))
+ ),
+ writable: false,
+ },
+ });
+
+ this.exports = {};
+
+ // We support following extensions by default
+ this.extensions = ['.json', '.js', '.jsx', '.ts', '.tsx'];
+ this.debug('prepare', filename);
+ }
+
+ resolve = (rawId: string) => {
+ const id = cookModuleId(rawId);
+ const extensions = (
+ NativeModule as unknown as {
+ _extensions: { [key: string]: Function };
+ }
+ )._extensions;
+ const added: string[] = [];
+
+ try {
+ // Check for supported extensions
+ this.extensions.forEach((ext) => {
+ if (ext in extensions) {
+ return;
+ }
+
+ // When an extension is not supported, add it
+ // And keep track of it to clean it up after resolving
+ // Use noop for the transform function since we handle it
+ extensions[ext] = NOOP;
+ added.push(ext);
+ });
+
+ return Module._resolveFilename(id, this);
+ } finally {
+ // Cleanup the extensions we added to restore previous behaviour
+ added.forEach((ext) => delete extensions[ext]);
+ }
+ };
+
+ require: {
+ (id: string): any;
+ resolve: (id: string) => string;
+ ensure: () => void;
+ cache: typeof cache;
+ } = Object.assign(
+ (rawId: string) => {
+ const id = cookModuleId(rawId);
+ this.debug('require', id);
+ if (id in builtins) {
+ // The module is in the allowed list of builtin node modules
+ // Ideally we should prevent importing them, but webpack polyfills some
+ // So we check for the list of polyfills to determine which ones to support
+ if (builtins[id as keyof typeof builtins]) {
+ return require(id);
+ }
+
+ return null;
+ }
+
+ // Resolve module id (and filename) relatively to parent module
+ const filename = this.resolve(id);
+ if (filename === id && !path.isAbsolute(id)) {
+ // The module is a builtin node modules, but not in the allowed list
+ throw new Error(
+ `Unable to import "${id}". Importing Node builtins is not supported in the sandbox.`
+ );
+ }
+
+ this.dependencies?.push(id);
+
+ let cacheKey = filename;
+ let only: string[] = [];
+ if (this.imports?.has(id)) {
+ // We know what exactly we need from this module. Let's shake it!
+ only = this.imports.get(id)!.sort();
+ if (only.length === 0) {
+ // Probably the module is used as a value itself
+ // like `'The answer is ' + require('./module')`
+ only = ['default'];
+ }
+
+ cacheKey += `:${only.join(',')}`;
+ }
+
+ let m = cache[cacheKey];
+
+ if (!m) {
+ this.debug('cached:not-exist', id);
+ // Create the module if cached module is not available
+ m = new Module(filename, this.options, this.debuggerDepth + 1);
+ m.transform = this.transform;
+
+ // Store it in cache at this point with, otherwise
+ // we would end up in infinite loop with cyclic dependencies
+ cache[cacheKey] = m;
+
+ if (this.extensions.includes(path.extname(filename))) {
+ // To evaluate the file, we need to read it first
+ const code = fs.readFileSync(filename, 'utf-8');
+ if (/\.json$/.test(filename)) {
+ // For JSON files, parse it to a JS object similar to Node
+ m.exports = JSON.parse(code);
+ } else {
+ // For JS/TS files, evaluate the module
+ // The module will be transpiled using provided transform
+ m.evaluate(code, only.includes('*') ? null : only);
+ }
+ } else {
+ // For non JS/JSON requires, just export the id
+ // This is to support importing assets in webpack
+ // The module will be resolved by css-loader
+ m.exports = id;
+ }
+ } else {
+ this.debug('cached:exist', id);
+ }
+
+ return m.exports;
+ },
+ {
+ ensure: NOOP,
+ cache,
+ resolve: this.resolve,
+ }
+ );
+
+ evaluate(text: string, only: string[] | null = null) {
+ const filename = this.filename;
+ const matchedRules = this.options.rules
+ .filter(({ test }) => {
+ if (!test) {
+ return true;
+ }
+
+ if (typeof test === 'function') {
+ // this is not a test
+ // eslint-disable-next-line jest/no-disabled-tests
+ return test(filename);
+ }
+
+ if (test instanceof RegExp) {
+ return test.test(filename);
+ }
+
+ return false;
+ })
+ .reverse();
+
+ const cacheKey = [this.filename, ...(only ?? [])];
+
+ if (EvalCache.has(cacheKey, text)) {
+ this.exports = EvalCache.get(cacheKey, text);
+ return;
+ }
+
+ let code: string | null | undefined;
+ const action = matchedRules.length > 0 ? matchedRules[0].action : 'ignore';
+ if (action === 'ignore') {
+ this.debug('ignore', `${filename}`);
+ code = text;
+ } else {
+ // Action can be a function or a module name
+ const evaluator: Evaluator =
+ typeof action === 'function' ? action : require(action).default;
+
+ // For JavaScript files, we need to transpile it and to get the exports of the module
+ let imports: Module['imports'];
+
+ this.debug('prepare-evaluation', this.filename, 'using', evaluator.name);
+
+ [code, imports] = evaluator(this.filename, this.options, text, only);
+ this.imports = imports;
+
+ this.debug(
+ 'evaluate',
+ `${this.filename} (only ${(only || []).join(', ')}):\n${code}`
+ );
+ }
+
+ const script = new vm.Script(
+ `(function (exports) { ${code}\n})(exports);`,
+ {
+ filename: this.filename,
+ }
+ );
+
+ script.runInContext(
+ vm.createContext({
+ clearImmediate: NOOP,
+ clearInterval: NOOP,
+ clearTimeout: NOOP,
+ setImmediate: NOOP,
+ setInterval: NOOP,
+ setTimeout: NOOP,
+ global,
+ process,
+ module: this,
+ exports: this.exports,
+ require: this.require,
+ __filename: this.filename,
+ __dirname: path.dirname(this.filename),
+ })
+ );
+
+ EvalCache.set(cacheKey, text, this.exports);
+ }
+}
+
+Module.invalidate = () => {
+ cache = {};
+};
+
+Module.invalidateEvalCache = () => {
+ EvalCache.clear();
+};
+
+// Alias to resolve the module using node's resolve algorithm
+// This static property can be overriden by the webpack loader
+// This allows us to use webpack's module resolution algorithm
+Module._resolveFilename = (id, options) =>
+ (
+ NativeModule as unknown as {
+ _resolveFilename: (id: string, options: any) => string;
+ }
+ )._resolveFilename(id, options);
+
+Module._nodeModulePaths = (filename: string) =>
+ (
+ NativeModule as unknown as {
+ _nodeModulePaths: (filename: string) => string[];
+ }
+ )._nodeModulePaths(filename);
+
+export default Module;
diff --git a/@linaria/packages/babel/src/plugin-syntax-dynamic-import.d.ts b/@linaria/packages/babel/src/plugin-syntax-dynamic-import.d.ts
new file mode 100644
index 0000000..b7ddeed
--- /dev/null
+++ b/@linaria/packages/babel/src/plugin-syntax-dynamic-import.d.ts
@@ -0,0 +1,4 @@
+declare module '@babel/plugin-syntax-dynamic-import' {
+ const syntax: {};
+ export default syntax;
+}
diff --git a/@linaria/packages/babel/src/process.ts b/@linaria/packages/babel/src/process.ts
new file mode 100644
index 0000000..2553577
--- /dev/null
+++ b/@linaria/packages/babel/src/process.ts
@@ -0,0 +1,31 @@
+/**
+ * It contains API for mocked process variable available in node environment used to evaluate scripts with node's `vm` in ./module.ts
+ */
+export const nextTick = (fn: Function) => setTimeout(fn, 0);
+
+export const platform = 'browser';
+export const arch = 'browser';
+export const execPath = 'browser';
+export const title = 'browser';
+export const pid = 1;
+export const browser = true;
+export const argv = [];
+
+export const binding = function binding() {
+ throw new Error('No such module. (Possibly not yet loaded)');
+};
+
+export const cwd = () => '/';
+
+const noop = () => {};
+export const exit = noop;
+export const kill = noop;
+export const chdir = noop;
+export const umask = noop;
+export const dlopen = noop;
+export const uptime = noop;
+export const memoryUsage = noop;
+export const uvCounters = noop;
+export const features = {};
+
+export const env = process.env;
diff --git a/@linaria/packages/babel/src/transform.ts b/@linaria/packages/babel/src/transform.ts
new file mode 100644
index 0000000..cfc0ea6
--- /dev/null
+++ b/@linaria/packages/babel/src/transform.ts
@@ -0,0 +1,187 @@
+/**
+ * This file exposes transform function that:
+ * - parse the passed code to AST
+ * - transforms the AST using Linaria babel preset ('./babel/index.js) and additional config defined in Linaria config file or passed to bundler configuration.
+ * - runs generated CSS files through default of user-defined preprocessor
+ * - generates source maps for CSS files
+ * - return transformed code (without Linaria template literals), generated CSS, source maps and babel metadata from transform step.
+ */
+
+import path from 'path';
+import type { BabelFileMetadata, BabelFileResult } from '@babel/core';
+import { parseSync, transformFromAstSync } from '@babel/core';
+import stylis from 'stylis';
+import type { Mapping } from 'source-map';
+import { SourceMapGenerator } from 'source-map';
+import { debug } from '@linaria/logger';
+import loadOptions from './utils/loadOptions';
+import type { LinariaMetadata, Options, PreprocessorFn, Result } from './types';
+
+const STYLIS_DECLARATION = 1;
+const posixSep = path.posix.sep;
+const babelPreset = require.resolve('./index');
+
+export function transformUrl(
+ url: string,
+ outputFilename: string,
+ sourceFilename: string,
+ platformPath: typeof path = path
+) {
+ // Replace asset path with new path relative to the output CSS
+ const relative = platformPath.relative(
+ platformPath.dirname(outputFilename),
+ // Get the absolute path to the asset from the path relative to the JS file
+ platformPath.resolve(platformPath.dirname(sourceFilename), url)
+ );
+
+ if (platformPath.sep === posixSep) {
+ return relative;
+ }
+
+ return relative.split(platformPath.sep).join(posixSep);
+}
+
+export function shouldTransformCode(code: string): boolean {
+ return /\b(styled|css)/.test(code);
+}
+
+export function extractCssFromAst(
+ babelFileResult: BabelFileResult,
+ code: string,
+ options: Options
+): Result {
+ const { metadata, code: transformedCode, map } = babelFileResult;
+
+ if (
+ !metadata ||
+ !(metadata as BabelFileMetadata & { linaria: LinariaMetadata }).linaria
+ ) {
+ return {
+ code: transformedCode || '', // if there was only unused code we want to return transformed code which will be later removed by the bundler
+ sourceMap: map,
+ };
+ }
+
+ const { rules, replacements, dependencies } = (
+ metadata as BabelFileMetadata & {
+ linaria: LinariaMetadata;
+ }
+ ).linaria;
+ const mappings: Mapping[] = [];
+
+ let cssText = '';
+
+ let preprocessor: PreprocessorFn;
+ if (typeof options.preprocessor === 'function') {
+ // eslint-disable-next-line prefer-destructuring
+ preprocessor = options.preprocessor;
+ } else {
+ switch (options.preprocessor) {
+ case 'none':
+ preprocessor = (selector, text) => `${selector} {${text}}\n`;
+ break;
+ case 'stylis':
+ default:
+ stylis.use(null)((context, decl) => {
+ const { outputFilename } = options;
+ if (context === STYLIS_DECLARATION && outputFilename) {
+ // When writing to a file, we need to adjust the relative paths inside url(..) expressions
+ // It'll allow css-loader to resolve an imported asset properly
+ return decl.replace(
+ /\b(url\((["']?))(\.[^)]+?)(\2\))/g,
+ (match, p1, p2, p3, p4) =>
+ p1 + transformUrl(p3, outputFilename, options.filename) + p4
+ );
+ }
+
+ return decl;
+ });
+
+ preprocessor = stylis;
+ }
+ }
+
+ Object.keys(rules).forEach((selector, index) => {
+ mappings.push({
+ generated: {
+ line: index + 1,
+ column: 0,
+ },
+ original: rules[selector].start!,
+ name: selector,
+ source: '',
+ });
+
+ // Run each rule through stylis to support nesting
+ cssText += `${preprocessor(selector, rules[selector].cssText)}\n`;
+ });
+
+ return {
+ code: transformedCode || '',
+ cssText,
+ rules,
+ replacements,
+ dependencies,
+ sourceMap: map,
+
+ get cssSourceMapText() {
+ if (mappings?.length) {
+ const generator = new SourceMapGenerator({
+ file: options.filename.replace(/\.js$/, '.css'),
+ });
+
+ mappings.forEach((mapping) =>
+ generator.addMapping(
+ Object.assign({}, mapping, { source: options.filename })
+ )
+ );
+
+ generator.setSourceContent(options.filename, code);
+
+ return generator.toString();
+ }
+
+ return '';
+ },
+ };
+}
+
+export default function transform(code: string, options: Options): Result {
+ // Check if the file contains `css` or `styled` words first
+ // Otherwise we should skip transforming
+ if (!shouldTransformCode(code)) {
+ return {
+ code,
+ sourceMap: options.inputSourceMap,
+ };
+ }
+
+ debug(
+ 'transform',
+ `${options.filename} to ${options.outputFilename}\n${code}`
+ );
+
+ const pluginOptions = loadOptions(options.pluginOptions);
+ const babelOptions = pluginOptions?.babelOptions ?? null;
+
+ // Parse the code first so babel uses user's babel config for parsing
+ // We don't want to use user's config when transforming the code
+ const ast = parseSync(code, {
+ ...babelOptions,
+ filename: options.filename,
+ caller: { name: 'linaria' },
+ });
+
+ const babelFileResult = transformFromAstSync(ast!, code, {
+ ...(babelOptions?.rootMode ? { rootMode: babelOptions.rootMode } : null),
+ filename: options.filename,
+ presets: [[babelPreset, pluginOptions]],
+ babelrc: false,
+ configFile: false,
+ sourceMaps: true,
+ sourceFileName: options.filename,
+ inputSourceMap: options.inputSourceMap,
+ })!;
+
+ return extractCssFromAst(babelFileResult, code, options);
+}
diff --git a/@linaria/packages/babel/src/types.ts b/@linaria/packages/babel/src/types.ts
new file mode 100644
index 0000000..bee9a47
--- /dev/null
+++ b/@linaria/packages/babel/src/types.ts
@@ -0,0 +1,180 @@
+import type { Node, Expression, TaggedTemplateExpression } from '@babel/types';
+import type { TransformOptions } from '@babel/core';
+import type { NodePath } from '@babel/traverse';
+import type { StyledMeta } from '@linaria/core';
+import type { RawSourceMap } from 'source-map';
+import type { PluginOptions } from './utils/loadOptions';
+
+export type JSONValue = string | number | boolean | JSONObject | JSONArray;
+
+export interface JSONObject {
+ [x: string]: JSONValue;
+}
+
+export interface JSONArray extends Array<JSONValue> {}
+
+export type Serializable = JSONArray | JSONObject;
+
+export enum ValueType {
+ COMPONENT,
+ LAZY,
+ FUNCTION,
+ VALUE,
+}
+
+export type Value = Function | StyledMeta | string | number;
+
+export type ValueCache = Map<Expression | string, Value>;
+
+export type ComponentValue = {
+ kind: ValueType.COMPONENT;
+ ex: NodePath<Expression> | Expression | string;
+};
+
+export type LazyValue = {
+ kind: ValueType.LAZY;
+ ex: NodePath<Expression> | Expression | string;
+ originalEx: NodePath<Expression> | Expression | string;
+};
+
+export type FunctionValue = {
+ kind: ValueType.FUNCTION;
+ ex: any;
+};
+
+export type EvaluatedValue = {
+ kind: ValueType.VALUE;
+ value: Value;
+};
+
+export type ExpressionValue =
+ | ComponentValue
+ | LazyValue
+ | FunctionValue
+ | EvaluatedValue;
+
+export type TemplateExpression = {
+ styled?: { component: any };
+ path: NodePath<TaggedTemplateExpression>;
+ expressionValues: ExpressionValue[];
+};
+
+type Rules = {
+ [selector: string]: {
+ className: string;
+ displayName: string;
+ cssText: string;
+ start: Location | null | undefined;
+ };
+};
+
+type Replacements = Array<{
+ original: {
+ start: Location;
+ end: Location;
+ };
+ length: number;
+}>;
+
+type Dependencies = string[];
+
+export type State = {
+ queue: TemplateExpression[];
+ rules: Rules;
+ replacements: Replacements;
+ index: number;
+ dependencies: Dependencies;
+ file: {
+ opts: {
+ cwd: string;
+ root: string;
+ filename: string;
+ };
+ metadata: {
+ localName?: string;
+ linaria?: {
+ rules: Rules;
+ replacements: Replacements;
+ dependencies: Dependencies;
+ };
+ };
+ };
+};
+
+export type Evaluator = (
+ filename: string,
+ options: StrictOptions,
+ text: string,
+ only: string[] | null
+) => [string, Map<string, string[]> | null];
+
+export type EvalRule = {
+ test?: RegExp | ((path: string) => boolean);
+ action: Evaluator | 'ignore' | string;
+};
+
+type ClassNameFn = (hash: string, title: string) => string;
+
+export type StrictOptions = {
+ classNameSlug?: string | ClassNameFn;
+ displayName: boolean;
+ evaluate: boolean;
+ ignore?: RegExp;
+ babelOptions: TransformOptions;
+ rules: EvalRule[];
+};
+
+export type Location = {
+ line: number;
+ column: number;
+};
+
+export type Replacement = {
+ original: { start: Location; end: Location };
+ length: number;
+};
+
+export type Result = {
+ code: string;
+ sourceMap?: RawSourceMap | null;
+ cssText?: string;
+ cssSourceMapText?: string;
+ dependencies?: string[];
+ rules?: Rules;
+ replacements?: Replacement[];
+};
+
+export type LinariaMetadata = {
+ rules: Rules;
+ replacements: Replacement[];
+ dependencies: string[];
+};
+
+export type Options = {
+ filename: string;
+ preprocessor?: Preprocessor;
+ outputFilename?: string;
+ inputSourceMap?: RawSourceMap;
+ pluginOptions?: Partial<PluginOptions>;
+};
+
+export type PreprocessorFn = (selector: string, cssText: string) => string;
+export type Preprocessor = 'none' | 'stylis' | PreprocessorFn | void;
+
+type AllNodes = { [T in Node['type']]: Extract<Node, { type: T }> };
+
+declare module '@babel/types' {
+ type VisitorKeys = {
+ [T in keyof AllNodes]: Extract<
+ keyof AllNodes[T],
+ {
+ [Key in keyof AllNodes[T]]: AllNodes[T][Key] extends
+ | Node
+ | Node[]
+ | null
+ ? Key
+ : never;
+ }[keyof AllNodes[T]]
+ >;
+ };
+}
diff --git a/@linaria/packages/babel/src/units.ts b/@linaria/packages/babel/src/units.ts
new file mode 100644
index 0000000..7ac148a
--- /dev/null
+++ b/@linaria/packages/babel/src/units.ts
@@ -0,0 +1,101 @@
+// https://www.w3.org/TR/css-values-4/
+export const units = [
+ // font relative lengths
+ 'em',
+ 'ex',
+ 'cap',
+ 'ch',
+ 'ic',
+ 'rem',
+ 'lh',
+ 'rlh',
+
+ // viewport percentage lengths
+ 'vw',
+ 'vh',
+ 'vi',
+ 'vb',
+ 'vmin',
+ 'vmax',
+
+ // absolute lengths
+ 'cm',
+ 'mm',
+ 'Q',
+ 'in',
+ 'pc',
+ 'pt',
+ 'px',
+
+ // angle units
+ 'deg',
+ 'grad',
+ 'rad',
+ 'turn',
+
+ // duration units
+ 's',
+ 'ms',
+
+ // frequency units
+ 'Hz',
+ 'kHz',
+
+ // resolution units
+ 'dpi',
+ 'dpcm',
+ 'dppx',
+ 'x',
+
+ // https://www.w3.org/TR/css-grid-1/#fr-unit
+ 'fr',
+
+ // percentages
+ '%',
+];
+
+export const unitless = {
+ animationIterationCount: true,
+ borderImageOutset: true,
+ borderImageSlice: true,
+ borderImageWidth: true,
+ boxFlex: true,
+ boxFlexGroup: true,
+ boxOrdinalGroup: true,
+ columnCount: true,
+ columns: true,
+ flex: true,
+ flexGrow: true,
+ flexPositive: true,
+ flexShrink: true,
+ flexNegative: true,
+ flexOrder: true,
+ gridRow: true,
+ gridRowEnd: true,
+ gridRowSpan: true,
+ gridRowStart: true,
+ gridColumn: true,
+ gridColumnEnd: true,
+ gridColumnSpan: true,
+ gridColumnStart: true,
+ fontWeight: true,
+ lineClamp: true,
+ lineHeight: true,
+ opacity: true,
+ order: true,
+ orphans: true,
+ tabSize: true,
+ widows: true,
+ zIndex: true,
+ zoom: true,
+
+ // SVG-related properties
+ fillOpacity: true,
+ floodOpacity: true,
+ stopOpacity: true,
+ strokeDasharray: true,
+ strokeDashoffset: true,
+ strokeMiterlimit: true,
+ strokeOpacity: true,
+ strokeWidth: true,
+};
diff --git a/@linaria/packages/babel/src/utils/getLinariaComment.ts b/@linaria/packages/babel/src/utils/getLinariaComment.ts
new file mode 100644
index 0000000..06b3edb
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/getLinariaComment.ts
@@ -0,0 +1,31 @@
+import type { Node } from '@babel/types';
+
+const pattern = /^linaria (css|styled) (.+)$/;
+
+export default function getLinariaComment(
+ path: { node: Node },
+ remove: boolean = true
+): ['css' | 'styled' | null, ...(string | null)[]] {
+ const comments = path.node.leadingComments;
+ if (!comments) {
+ return [null, null, null, null];
+ }
+
+ const idx = comments.findIndex((comment) => pattern.test(comment.value));
+ if (idx === -1) {
+ return [null, null, null, null];
+ }
+
+ const matched = comments[idx].value.match(pattern);
+ if (!matched) {
+ return [null, null, null, null];
+ }
+
+ if (remove) {
+ path.node.leadingComments = comments.filter((_, i) => i !== idx);
+ }
+
+ const type = matched[1] === 'css' ? 'css' : 'styled';
+
+ return [type, ...matched[2].split(' ').map((i) => (i ? i : null))];
+}
diff --git a/@linaria/packages/babel/src/utils/getVisitorKeys.ts b/@linaria/packages/babel/src/utils/getVisitorKeys.ts
new file mode 100644
index 0000000..72f11f8
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/getVisitorKeys.ts
@@ -0,0 +1,10 @@
+import { types as t } from '@babel/core';
+import type { Node, VisitorKeys } from '@babel/types';
+
+type Keys<T extends Node> = (VisitorKeys[T['type']] & keyof T)[];
+
+export default function getVisitorKeys<TNode extends Node>(
+ node: TNode
+): Keys<TNode> {
+ return t.VISITOR_KEYS[node.type] as Keys<TNode>;
+}
diff --git a/@linaria/packages/babel/src/utils/hasImport.ts b/@linaria/packages/babel/src/utils/hasImport.ts
new file mode 100644
index 0000000..39c1f07
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/hasImport.ts
@@ -0,0 +1,83 @@
+import { dirname } from 'path';
+import Module from '../module';
+
+const linariaLibs = new Set([
+ '@linaria/core',
+ '@linaria/react',
+ 'linaria',
+ 'linaria/react',
+]);
+
+const safeResolve = (name: string) => {
+ try {
+ return require.resolve(name);
+ } catch (err) {
+ return null;
+ }
+};
+
+// Verify if the binding is imported from the specified source
+export default function hasImport(
+ t: any,
+ scope: any,
+ filename: string,
+ identifier: string,
+ sources: string[]
+): boolean {
+ const binding = scope.getAllBindings()[identifier];
+
+ if (!binding) {
+ return false;
+ }
+
+ const p = binding.path;
+
+ const resolveFromFile = (id: string) => {
+ try {
+ return Module._resolveFilename(id, {
+ id: filename,
+ filename,
+ paths: Module._nodeModulePaths(dirname(filename)),
+ });
+ } catch (e) {
+ return null;
+ }
+ };
+
+ const isImportingModule = (value: string) =>
+ sources.some(
+ (source) =>
+ // If the value is an exact match, assume it imports the module
+ value === source ||
+ // Otherwise try to resolve both and check if they are the same file
+ resolveFromFile(value) ===
+ (linariaLibs.has(source)
+ ? safeResolve(source)
+ : resolveFromFile(source))
+ );
+
+ if (t.isImportSpecifier(p) && t.isImportDeclaration(p.parentPath)) {
+ return isImportingModule(p.parentPath.node.source.value);
+ }
+
+ if (t.isVariableDeclarator(p)) {
+ if (
+ t.isCallExpression(p.node.init) &&
+ t.isIdentifier(p.node.init.callee) &&
+ p.node.init.callee.name === 'require' &&
+ p.node.init.arguments.length === 1
+ ) {
+ const node = p.node.init.arguments[0];
+
+ if (t.isStringLiteral(node)) {
+ return isImportingModule(node.value);
+ }
+
+ if (t.isTemplateLiteral(node) && node.quasis.length === 1) {
+ return isImportingModule(node.quasis[0].value.cooked);
+ }
+ }
+ }
+
+ return false;
+}
diff --git a/@linaria/packages/babel/src/utils/isBoxedPrimitive.ts b/@linaria/packages/babel/src/utils/isBoxedPrimitive.ts
new file mode 100644
index 0000000..2d20eec
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/isBoxedPrimitive.ts
@@ -0,0 +1,10 @@
+// There is a problem with using boxed numbers and strings in TS,
+// so we cannot just use `instanceof` here
+
+const constructors = ['Number', 'String'];
+export default function isBoxedPrimitive(o: any): o is Number | String {
+ return (
+ constructors.includes(o.constructor.name) &&
+ typeof o?.valueOf() !== 'object'
+ );
+}
diff --git a/@linaria/packages/babel/src/utils/isNode.ts b/@linaria/packages/babel/src/utils/isNode.ts
new file mode 100644
index 0000000..2340ef9
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/isNode.ts
@@ -0,0 +1,5 @@
+import type { Node } from '@babel/types';
+
+const isNode = (obj: any): obj is Node => obj?.type !== undefined;
+
+export default isNode;
diff --git a/@linaria/packages/babel/src/utils/isSerializable.ts b/@linaria/packages/babel/src/utils/isSerializable.ts
new file mode 100644
index 0000000..1f65d58
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/isSerializable.ts
@@ -0,0 +1,11 @@
+import type { Serializable } from '../types';
+import isBoxedPrimitive from './isBoxedPrimitive';
+
+export default function isSerializable(o: any): o is Serializable {
+ return (
+ (Array.isArray(o) && o.every(isSerializable)) ||
+ (typeof o === 'object' &&
+ o !== null &&
+ (o.constructor.name === 'Object' || isBoxedPrimitive(o)))
+ );
+}
diff --git a/@linaria/packages/babel/src/utils/isStyledOrCss.ts b/@linaria/packages/babel/src/utils/isStyledOrCss.ts
new file mode 100644
index 0000000..04e4789
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/isStyledOrCss.ts
@@ -0,0 +1,67 @@
+import type {
+ CallExpression,
+ Expression,
+ TaggedTemplateExpression,
+} from '@babel/types';
+import type { NodePath } from '@babel/traverse';
+import type { State, TemplateExpression } from '../types';
+import { Core } from '../babel';
+import hasImport from './hasImport';
+
+type Result = NonNullable<TemplateExpression['styled']> | 'css' | null;
+
+const cache = new WeakMap<NodePath<TaggedTemplateExpression>, Result>();
+
+export default function isStyledOrCss(
+ { types: t }: Core,
+ path: NodePath<TaggedTemplateExpression>,
+ state: State
+): Result {
+ if (!cache.has(path)) {
+ const { tag } = path.node;
+
+ const localName = state.file.metadata.localName || 'styled';
+
+ if (
+ t.isCallExpression(tag) &&
+ t.isIdentifier(tag.callee) &&
+ tag.arguments.length === 1 &&
+ tag.callee.name === localName &&
+ hasImport(t, path.scope, state.file.opts.filename, localName, [
+ '@linaria/react',
+ 'linaria/react',
+ ])
+ ) {
+ const tagPath = path.get('tag') as NodePath<CallExpression>;
+ cache.set(path, {
+ component: tagPath.get('arguments')[0] as NodePath<Expression>,
+ });
+ } else if (
+ t.isMemberExpression(tag) &&
+ t.isIdentifier(tag.object) &&
+ t.isIdentifier(tag.property) &&
+ tag.object.name === localName &&
+ hasImport(t, path.scope, state.file.opts.filename, localName, [
+ '@linaria/react',
+ 'linaria/react',
+ ])
+ ) {
+ cache.set(path, {
+ component: { node: t.stringLiteral(tag.property.name) },
+ });
+ } else if (
+ hasImport(t, path.scope, state.file.opts.filename, 'css', [
+ '@linaria/core',
+ 'linaria',
+ ]) &&
+ t.isIdentifier(tag) &&
+ tag.name === 'css'
+ ) {
+ cache.set(path, 'css');
+ } else {
+ cache.set(path, null);
+ }
+ }
+
+ return cache.get(path) ?? null;
+}
diff --git a/@linaria/packages/babel/src/utils/loadOptions.ts b/@linaria/packages/babel/src/utils/loadOptions.ts
new file mode 100644
index 0000000..8c0f0b8
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/loadOptions.ts
@@ -0,0 +1,38 @@
+import cosmiconfig from 'cosmiconfig';
+import type { StrictOptions } from '../types';
+
+export type PluginOptions = StrictOptions & {
+ configFile?: string;
+};
+
+const explorer = cosmiconfig('linaria');
+
+export default function loadOptions(
+ overrides: Partial<PluginOptions> = {}
+): Partial<StrictOptions> {
+ const { configFile, ignore, ...rest } = overrides;
+
+ const result =
+ configFile !== undefined
+ ? explorer.loadSync(configFile)
+ : explorer.searchSync();
+
+ return {
+ displayName: false,
+ evaluate: true,
+ rules: [
+ {
+ // FIXME: if `rule` is not specified in a config, `@linaria/shaker` should be added as a dependency
+ // eslint-disable-next-line import/no-extraneous-dependencies
+ action: require('@linaria/shaker').default,
+ },
+ {
+ // The old `ignore` option is used as a default value for `ignore` rule.
+ test: ignore ?? /[\\/]node_modules[\\/]/,
+ action: 'ignore',
+ },
+ ],
+ ...(result ? result.config : null),
+ ...rest,
+ };
+}
diff --git a/@linaria/packages/babel/src/utils/peek.ts b/@linaria/packages/babel/src/utils/peek.ts
new file mode 100644
index 0000000..cabadc4
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/peek.ts
@@ -0,0 +1,3 @@
+const peek = <T>(stack: T[], offset = 1): T => stack[stack.length - offset];
+
+export default peek;
diff --git a/@linaria/packages/babel/src/utils/slugify.ts b/@linaria/packages/babel/src/utils/slugify.ts
new file mode 100644
index 0000000..39772ad
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/slugify.ts
@@ -0,0 +1,83 @@
+/**
+ * This file contains a utility to generate hashes to be used as generated class names
+ */
+
+/* eslint-disable no-bitwise, default-case, no-param-reassign, prefer-destructuring */
+
+/**
+ * murmurhash2 via https://gist.github.com/raycmorgan/588423
+ */
+
+function doHash(str: string, seed: number = 0) {
+ const m = 0x5bd1e995;
+ const r = 24;
+ let h = seed ^ str.length;
+ let length = str.length;
+ let currentIndex = 0;
+
+ while (length >= 4) {
+ let k = UInt32(str, currentIndex);
+
+ k = Umul32(k, m);
+ k ^= k >>> r;
+ k = Umul32(k, m);
+
+ h = Umul32(h, m);
+ h ^= k;
+
+ currentIndex += 4;
+ length -= 4;
+ }
+
+ switch (length) {
+ case 3:
+ h ^= UInt16(str, currentIndex);
+ h ^= str.charCodeAt(currentIndex + 2) << 16;
+ h = Umul32(h, m);
+ break;
+
+ case 2:
+ h ^= UInt16(str, currentIndex);
+ h = Umul32(h, m);
+ break;
+
+ case 1:
+ h ^= str.charCodeAt(currentIndex);
+ h = Umul32(h, m);
+ break;
+ }
+
+ h ^= h >>> 13;
+ h = Umul32(h, m);
+ h ^= h >>> 15;
+
+ return h >>> 0;
+}
+
+function UInt32(str: string, pos: number) {
+ return (
+ str.charCodeAt(pos++) +
+ (str.charCodeAt(pos++) << 8) +
+ (str.charCodeAt(pos++) << 16) +
+ (str.charCodeAt(pos) << 24)
+ );
+}
+
+function UInt16(str: string, pos: number) {
+ return str.charCodeAt(pos++) + (str.charCodeAt(pos++) << 8);
+}
+
+function Umul32(n: number, m: number) {
+ n |= 0;
+ m |= 0;
+ const nlo = n & 0xffff;
+ const nhi = n >>> 16;
+ const res = (nlo * m + (((nhi * m) & 0xffff) << 16)) | 0;
+ return res;
+}
+
+function slugify(code: string) {
+ return doHash(code).toString(36);
+}
+
+export default slugify;
diff --git a/@linaria/packages/babel/src/utils/stripLines.ts b/@linaria/packages/babel/src/utils/stripLines.ts
new file mode 100644
index 0000000..d0495ae
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/stripLines.ts
@@ -0,0 +1,23 @@
+import type { Location } from '../types';
+
+// Stripping away the new lines ensures that we preserve line numbers
+// This is useful in case of tools such as the stylelint pre-processor
+// This should be safe because strings cannot contain newline: https://www.w3.org/TR/CSS2/syndata.html#strings
+export default function stripLines(
+ loc: { start: Location; end: Location },
+ text: string | number
+) {
+ let result = String(text)
+ .replace(/[\r\n]+/g, ' ')
+ .trim();
+
+ // If the start and end line numbers aren't same, add new lines to span the text across multiple lines
+ if (loc.start.line !== loc.end.line) {
+ result += '\n'.repeat(loc.end.line - loc.start.line);
+
+ // Add extra spaces to offset the column
+ result += ' '.repeat(loc.end.column);
+ }
+
+ return result;
+}
diff --git a/@linaria/packages/babel/src/utils/throwIfInvalid.ts b/@linaria/packages/babel/src/utils/throwIfInvalid.ts
new file mode 100644
index 0000000..a883f9f
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/throwIfInvalid.ts
@@ -0,0 +1,49 @@
+import generator from '@babel/generator';
+import type { Serializable } from '../types';
+import isSerializable from './isSerializable';
+
+// Throw if we can't handle the interpolated value
+function throwIfInvalid(
+ value: Error | Function | string | number | Serializable | undefined,
+ ex: any
+): void {
+ if (
+ typeof value === 'function' ||
+ typeof value === 'string' ||
+ (typeof value === 'number' && Number.isFinite(value)) ||
+ isSerializable(value)
+ ) {
+ return;
+ }
+
+ // We can't use instanceof here so let's use duck typing
+ if (value && typeof value !== 'number' && value.stack && value.message) {
+ throw ex.buildCodeFrameError(
+ `An error occurred when evaluating the expression:
+
+ > ${value.message}.
+
+ Make sure you are not using a browser or Node specific API and all the variables are available in static context.
+ Linaria have to extract pieces of your code to resolve the interpolated values.
+ Defining styled component or class will not work inside:
+ - function,
+ - class,
+ - method,
+ - loop,
+ because it cannot be statically determined in which context you use them.
+ That's why some variables may be not defined during evaluation.
+ `
+ );
+ }
+
+ const stringified =
+ typeof value === 'object' ? JSON.stringify(value) : String(value);
+
+ throw ex.buildCodeFrameError(
+ `The expression evaluated to '${stringified}', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(${
+ generator(ex.node).code
+ })'.`
+ );
+}
+
+export default throwIfInvalid;
diff --git a/@linaria/packages/babel/src/utils/toCSS.ts b/@linaria/packages/babel/src/utils/toCSS.ts
new file mode 100644
index 0000000..b396087
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/toCSS.ts
@@ -0,0 +1,57 @@
+import { unitless } from '../units';
+import type { JSONValue } from '../types';
+import isSerializable from './isSerializable';
+import isBoxedPrimitive from './isBoxedPrimitive';
+
+const hyphenate = (s: string) => {
+ if (s.startsWith('--')) {
+ // It's a custom property which is already well formatted.
+ return s;
+ }
+ return (
+ s
+ // Hyphenate CSS property names from camelCase version from JS string
+ .replace(/([A-Z])/g, (match, p1) => `-${p1.toLowerCase()}`)
+ // Special case for `-ms` because in JS it starts with `ms` unlike `Webkit`
+ .replace(/^ms-/, '-ms-')
+ );
+};
+
+// Some tools such as polished.js output JS objects
+// To support them transparently, we convert JS objects to CSS strings
+export default function toCSS(o: JSONValue): string {
+ if (Array.isArray(o)) {
+ return o.map(toCSS).join('\n');
+ }
+
+ if (isBoxedPrimitive(o)) {
+ return o.valueOf().toString();
+ }
+
+ return Object.entries(o)
+ .filter(
+ ([, value]) =>
+ // Ignore all falsy values except numbers
+ typeof value === 'number' || value
+ )
+ .map(([key, value]) => {
+ if (isSerializable(value)) {
+ return `${key} { ${toCSS(value)} }`;
+ }
+
+ return `${hyphenate(key)}: ${
+ typeof value === 'number' &&
+ value !== 0 &&
+ // Strip vendor prefixes when checking if the value is unitless
+ !(
+ key.replace(
+ /^(Webkit|Moz|O|ms)([A-Z])(.+)$/,
+ (match, p1, p2, p3) => `${p2.toLowerCase()}${p3}`
+ ) in unitless
+ )
+ ? `${value}px`
+ : value
+ };`;
+ })
+ .join(' ');
+}
diff --git a/@linaria/packages/babel/src/utils/toValidCSSIdentifier.ts b/@linaria/packages/babel/src/utils/toValidCSSIdentifier.ts
new file mode 100644
index 0000000..9a2be8f
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/toValidCSSIdentifier.ts
@@ -0,0 +1,3 @@
+export default function toValidCSSIdentifier(s: string) {
+ return s.replace(/[^-_a-z0-9\u00A0-\uFFFF]/gi, '_').replace(/^\d/, '_');
+}
diff --git a/@linaria/packages/babel/src/visitors/CollectDependencies.ts b/@linaria/packages/babel/src/visitors/CollectDependencies.ts
new file mode 100644
index 0000000..fc6d2fd
--- /dev/null
+++ b/@linaria/packages/babel/src/visitors/CollectDependencies.ts
@@ -0,0 +1,132 @@
+/**
+ * This file is a visitor that checks TaggedTemplateExpressions and look for Linaria css or styled templates.
+ * For each template it makes a list of dependencies, try to evaluate expressions, and if it is not possible, mark them as lazy dependencies.
+ */
+
+import type {
+ Expression,
+ Identifier as IdentifierNode,
+ TaggedTemplateExpression,
+ TSType,
+} from '@babel/types';
+import type { NodePath } from '@babel/traverse';
+import { debug } from '@linaria/logger';
+import generator from '@babel/generator';
+import throwIfInvalid from '../utils/throwIfInvalid';
+import type { State, StrictOptions, ExpressionValue } from '../types';
+import { ValueType } from '../types';
+import isStyledOrCss from '../utils/isStyledOrCss';
+import { Core } from '../babel';
+
+/**
+ * Hoist the node and its dependencies to the highest scope possible
+ */
+function hoist(babel: Core, ex: NodePath<Expression | null>) {
+ const Identifier = (idPath: NodePath<IdentifierNode>) => {
+ if (!idPath.isReferencedIdentifier()) {
+ return;
+ }
+ const binding = idPath.scope.getBinding(idPath.node.name);
+ if (!binding) return;
+ const { scope, path: bindingPath, referencePaths } = binding;
+ // parent here can be null or undefined in different versions of babel
+ if (!scope.parent) {
+ // It's a variable from global scope
+ return;
+ }
+
+ if (bindingPath.isVariableDeclarator()) {
+ const initPath = bindingPath.get('init') as NodePath<Expression | null>;
+ hoist(babel, initPath);
+ initPath.hoist(scope);
+ if (initPath.isIdentifier()) {
+ referencePaths.forEach((referencePath) => {
+ referencePath.replaceWith(babel.types.identifier(initPath.node.name));
+ });
+ }
+ }
+ };
+
+ if (ex.isIdentifier()) {
+ return Identifier(ex);
+ }
+
+ ex.traverse({
+ Identifier,
+ });
+}
+
+export default function CollectDependencies(
+ babel: Core,
+ path: NodePath<TaggedTemplateExpression>,
+ state: State,
+ options: StrictOptions
+) {
+ const { types: t } = babel;
+ const styledOrCss = isStyledOrCss(babel, path, state);
+ if (!styledOrCss) {
+ return;
+ }
+ const expressions = path.get('quasi').get('expressions');
+
+ debug('template-parse:identify-expressions', expressions.length);
+
+ const expressionValues: ExpressionValue[] = expressions.map(
+ (ex: NodePath<Expression | TSType>) => {
+ if (!ex.isExpression()) {
+ throw ex.buildCodeFrameError(
+ `The expression '${generator(ex.node).code}' is not supported.`
+ );
+ }
+
+ const result = ex.evaluate();
+ if (result.confident) {
+ throwIfInvalid(result.value, ex);
+ return { kind: ValueType.VALUE, value: result.value };
+ }
+ if (
+ options.evaluate &&
+ !(t.isFunctionExpression(ex) || t.isArrowFunctionExpression(ex))
+ ) {
+ // save original expression that may be changed during hoisting
+ const originalExNode = t.cloneNode(ex.node);
+
+ hoist(babel, ex as NodePath<Expression | null>);
+
+ // save hoisted expression to be used to evaluation
+ const hoistedExNode = t.cloneNode(ex.node);
+
+ // get back original expression to the tree
+ ex.replaceWith(originalExNode);
+
+ return { kind: ValueType.LAZY, ex: hoistedExNode, originalEx: ex };
+ }
+
+ return { kind: ValueType.FUNCTION, ex };
+ }
+ );
+
+ debug(
+ 'template-parse:evaluate-expressions',
+ expressionValues.map((expressionValue) =>
+ expressionValue.kind === ValueType.VALUE ? expressionValue.value : 'lazy'
+ )
+ );
+
+ if (styledOrCss !== 'css' && 'name' in styledOrCss.component.node) {
+ // It's not a real dependency.
+ // It can be simplified because we need just a className.
+ expressionValues.push({
+ // kind: ValueType.COMPONENT,
+ kind: ValueType.LAZY,
+ ex: styledOrCss.component.node.name,
+ originalEx: styledOrCss.component.node.name,
+ });
+ }
+
+ state.queue.push({
+ styled: styledOrCss !== 'css' ? styledOrCss : undefined,
+ path,
+ expressionValues,
+ });
+}
diff --git a/@linaria/packages/babel/src/visitors/DetectStyledImportName.ts b/@linaria/packages/babel/src/visitors/DetectStyledImportName.ts
new file mode 100644
index 0000000..07bf724
--- /dev/null
+++ b/@linaria/packages/babel/src/visitors/DetectStyledImportName.ts
@@ -0,0 +1,33 @@
+/* eslint-disable no-param-reassign */
+/**
+ * This Visitor checks if import of `@linaria/react` was renamed and stores that information in state
+ */
+
+import type { ImportDeclaration } from '@babel/types';
+import type { NodePath } from '@babel/traverse';
+import type { State } from '../types';
+import { Core } from '../babel';
+
+export default function DetectStyledImportName(
+ { types: t }: Core,
+ path: NodePath<ImportDeclaration>,
+ state: State
+) {
+ if (!t.isLiteral(path.node.source, { value: '@linaria/react' })) {
+ return;
+ }
+
+ path.node.specifiers.forEach((specifier) => {
+ if (!t.isImportSpecifier(specifier)) {
+ return;
+ }
+
+ const importedName = t.isStringLiteral(specifier.imported)
+ ? specifier.imported.value
+ : specifier.imported.name;
+
+ if (specifier.local.name !== importedName) {
+ state.file.metadata.localName = specifier.local.name;
+ }
+ });
+}
diff --git a/@linaria/packages/babel/src/visitors/GenerateClassNames.ts b/@linaria/packages/babel/src/visitors/GenerateClassNames.ts
new file mode 100644
index 0000000..9bebf2e
--- /dev/null
+++ b/@linaria/packages/babel/src/visitors/GenerateClassNames.ts
@@ -0,0 +1,161 @@
+/**
+ * This file is a visitor that checks TaggedTemplateExpressions and look for Linaria css or styled templates.
+ * For each template it generates a slug that will be used as a CSS class for particular Template Expression,
+ * and generates a display name for class or styled components.
+ * It saves that meta data as comment above the template, to be later used in templateProcessor.
+ */
+
+import { basename, dirname, relative } from 'path';
+import type { ObjectProperty, TaggedTemplateExpression } from '@babel/types';
+import type { NodePath } from '@babel/traverse';
+import { debug } from '@linaria/logger';
+import type { State, StrictOptions } from '../types';
+import toValidCSSIdentifier from '../utils/toValidCSSIdentifier';
+import slugify from '../utils/slugify';
+import getLinariaComment from '../utils/getLinariaComment';
+import isStyledOrCss from '../utils/isStyledOrCss';
+import { Core } from '../babel';
+
+export default function GenerateClassNames(
+ babel: Core,
+ path: NodePath<TaggedTemplateExpression>,
+ state: State,
+ options: StrictOptions
+) {
+ const { types: t } = babel;
+ const styledOrCss = isStyledOrCss(babel, path, state);
+ if (!styledOrCss) {
+ return;
+ }
+
+ const expressions = path.get('quasi').get('expressions');
+
+ debug('template-parse:identify-expressions', expressions.length);
+
+ // Increment the index of the style we're processing
+ // This is used for slug generation to prevent collision
+ // Also used for display name if it couldn't be determined
+ state.index++;
+
+ let [, slug, displayName, predefinedClassName] = getLinariaComment(path);
+
+ const parent = path.findParent(
+ (p) =>
+ t.isObjectProperty(p) ||
+ t.isJSXOpeningElement(p) ||
+ t.isVariableDeclarator(p)
+ );
+
+ if (!displayName && parent) {
+ const parentNode = parent.node;
+ if (t.isObjectProperty(parentNode)) {
+ if ('name' in parentNode.key) {
+ displayName = parentNode.key.name;
+ } else if ('value' in parentNode.key) {
+ displayName = parentNode.key.value.toString();
+ } else {
+ const keyPath = (parent as NodePath<ObjectProperty>).get('key');
+ displayName = keyPath.getSource();
+ }
+ } else if (
+ t.isJSXOpeningElement(parentNode) &&
+ t.isJSXIdentifier(parentNode.name)
+ ) {
+ displayName = parentNode.name.name;
+ } else if (
+ t.isVariableDeclarator(parentNode) &&
+ t.isIdentifier(parentNode.id)
+ ) {
+ displayName = parentNode.id.name;
+ }
+ }
+
+ if (!displayName) {
+ // Try to derive the path from the filename
+ displayName = basename(state.file.opts.filename);
+
+ if (/^index\.[a-z0-9]+$/.test(displayName)) {
+ // If the file name is 'index', better to get name from parent folder
+ displayName = basename(dirname(state.file.opts.filename));
+ }
+
+ // Remove the file extension
+ displayName = displayName.replace(/\.[a-z0-9]+$/, '');
+
+ if (displayName) {
+ displayName += state.index;
+ } else {
+ throw path.buildCodeFrameError(
+ "Couldn't determine a name for the component. Ensure that it's either:\n" +
+ '- Assigned to a variable\n' +
+ '- Is an object property\n' +
+ '- Is a prop in a JSX element\n'
+ );
+ }
+ }
+
+ // Custom properties need to start with a letter, so we prefix the slug
+ // Also use append the index of the class to the filename for uniqueness in the file
+ slug =
+ slug ||
+ toValidCSSIdentifier(
+ `${displayName.charAt(0).toLowerCase()}${slugify(
+ `${relative(state.file.opts.root, state.file.opts.filename)}:${
+ state.index
+ }`
+ )}`
+ );
+
+ let className = predefinedClassName
+ ? predefinedClassName
+ : options.displayName
+ ? `${toValidCSSIdentifier(displayName!)}_${slug!}`
+ : slug!;
+
+ // The className can be defined by the user either as fn or a string
+ if (typeof options.classNameSlug === 'function') {
+ try {
+ className = toValidCSSIdentifier(
+ options.classNameSlug(slug, displayName)
+ );
+ } catch {
+ throw new Error(`classNameSlug option must return a string`);
+ }
+ }
+
+ if (typeof options.classNameSlug === 'string') {
+ const { classNameSlug } = options;
+
+ // Available variables for the square brackets used in `classNameSlug` options
+ const classNameSlugVars: Record<string, string | null> = {
+ hash: slug,
+ title: displayName,
+ };
+
+ // Variables that were used in the config for `classNameSlug`
+ const optionVariables = classNameSlug.match(/\[.*?]/g) || [];
+ let cnSlug = classNameSlug;
+
+ for (let i = 0, l = optionVariables.length; i < l; i++) {
+ const v = optionVariables[i].slice(1, -1); // Remove the brackets around the variable name
+
+ // Replace the var if it key and value exist otherwise place an empty string
+ cnSlug = cnSlug.replace(`[${v}]`, classNameSlugVars[v] || '');
+ }
+
+ className = toValidCSSIdentifier(cnSlug);
+ }
+
+ const type = styledOrCss === 'css' ? 'css' : 'styled';
+
+ debug(
+ `template-parse:generated-meta:${type}`,
+ `slug: ${slug}, displayName: ${displayName}, className: ${className}`
+ );
+
+ // Save evaluated slug and displayName for future usage in templateProcessor
+ path.addComment(
+ 'leading',
+ `linaria ${type} ${slug} ${displayName} ${className}`
+ );
+}
diff --git a/@linaria/packages/babel/tsconfig.json b/@linaria/packages/babel/tsconfig.json
new file mode 100644
index 0000000..73092b0
--- /dev/null
+++ b/@linaria/packages/babel/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "paths": {},
+ "rootDir": "src/"
+ },
+ "references": [{ "path": "../core" }, { "path": "../logger" }]
+}
diff --git a/@linaria/packages/cli/CHANGELOG.md b/@linaria/packages/cli/CHANGELOG.md
new file mode 100644
index 0000000..91008be
--- /dev/null
+++ b/@linaria/packages/cli/CHANGELOG.md
@@ -0,0 +1,46 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package @linaria/cli
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+**Note:** Version bump only for package @linaria/cli
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+
+### Bug Fixes
+
+* **cli:** cannot find module '../lib/cli' ([#753](https://github.com/callstack/linaria/issues/753)) ([#754](https://github.com/callstack/linaria/issues/754)) ([fd7a09b](https://github.com/callstack/linaria/commit/fd7a09b4d4c7265e631b1d9c153362c87ed4132c))
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/cli
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+
+### Bug Fixes
+
+* resolve output filename relative to source root ([#733](https://github.com/callstack/linaria/issues/733)) ([c606b3f](https://github.com/callstack/linaria/commit/c606b3f9340f498e104905a954393df6fd48cb73))
diff --git a/@linaria/packages/cli/README.md b/@linaria/packages/cli/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/cli/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/cli/babel.config.js b/@linaria/packages/cli/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/cli/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/cli/bin/linaria.js b/@linaria/packages/cli/bin/linaria.js
new file mode 100755
index 0000000..8c6c091
--- /dev/null
+++ b/@linaria/packages/cli/bin/linaria.js
@@ -0,0 +1,5 @@
+#!/usr/bin/env node
+
+/* eslint-disable import/no-unresolved */
+
+module.exports = require('../lib/linaria');
diff --git a/@linaria/packages/cli/package.json b/@linaria/packages/cli/package.json
new file mode 100644
index 0000000..12e3558
--- /dev/null
+++ b/@linaria/packages/cli/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "@linaria/cli",
+ "version": "3.0.0-beta.7",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/linaria.js",
+ "module": "esm/linaria.js",
+ "bin": {
+ "linaria": "bin/linaria.js"
+ },
+ "files": [
+ "bin/",
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "@types/mkdirp": "^0.5.2",
+ "@types/normalize-path": "^3.0.0"
+ },
+ "dependencies": {
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "glob": "^7.1.3",
+ "mkdirp": "^0.5.1",
+ "normalize-path": "^3.0.0",
+ "yargs": "^13.2.1"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7"
+ }
+}
diff --git a/@linaria/packages/cli/src/linaria.ts b/@linaria/packages/cli/src/linaria.ts
new file mode 100644
index 0000000..30d269b
--- /dev/null
+++ b/@linaria/packages/cli/src/linaria.ts
@@ -0,0 +1,174 @@
+/**
+ * This file contains a CLI for Linaria.
+ */
+
+import path from 'path';
+import fs from 'fs';
+import normalize from 'normalize-path';
+import mkdirp from 'mkdirp';
+import glob from 'glob';
+import yargs from 'yargs';
+import { transform } from '@linaria/babel-preset';
+
+const { argv } = yargs
+ .usage('Usage: $0 [options] <files ...>')
+ .option('config', {
+ alias: 'c',
+ type: 'string',
+ description: 'Path to a config file',
+ requiresArg: true,
+ })
+ .option('out-dir', {
+ alias: 'o',
+ type: 'string',
+ description: 'Output directory for the extracted CSS files',
+ demandOption: true,
+ requiresArg: true,
+ })
+ .option('source-maps', {
+ alias: 's',
+ type: 'boolean',
+ description: 'Generate source maps for the CSS files',
+ default: false,
+ })
+ .option('source-root', {
+ alias: 'r',
+ type: 'string',
+ description: 'Directory containing the source JS files',
+ demandOption: true,
+ requiresArg: true,
+ })
+ .option('insert-css-requires', {
+ alias: 'i',
+ type: 'string',
+ description:
+ 'Directory containing JS files to insert require statements for the CSS files',
+ requiresArg: true,
+ })
+ .implies('insert-css-requires', 'source-root')
+ .option('ignore', {
+ alias: 'x',
+ type: 'string',
+ description: 'Pattern of files to ignore. Be sure to provide a string',
+ requiresArg: true,
+ })
+ .alias('help', 'h')
+ .alias('version', 'v')
+ .strict();
+
+processFiles(argv._, {
+ outDir: argv['out-dir'],
+ sourceMaps: argv['source-maps'],
+ sourceRoot: argv['source-root'],
+ insertCssRequires: argv['insert-css-requires'],
+ configFile: argv.config,
+ ignore: argv.ignore,
+});
+
+type Options = {
+ outDir: string;
+ sourceMaps?: boolean;
+ sourceRoot: string;
+ insertCssRequires?: string;
+ configFile?: string;
+ ignore?: string;
+};
+
+function processFiles(files: string[], options: Options) {
+ let count = 0;
+
+ const resolvedFiles = files.reduce(
+ (acc, pattern) => [
+ ...acc,
+ ...glob.sync(pattern, { absolute: true, ignore: options.ignore }),
+ ],
+ [] as string[]
+ );
+
+ resolvedFiles.forEach((filename) => {
+ const outputFilename = resolveOutputFilename(
+ filename,
+ options.outDir,
+ options.sourceRoot
+ );
+
+ const { cssText, sourceMap, cssSourceMapText } = transform(
+ fs.readFileSync(filename).toString(),
+ {
+ filename,
+ outputFilename,
+ pluginOptions: {
+ configFile: options.configFile,
+ },
+ }
+ );
+
+ if (cssText) {
+ mkdirp.sync(path.dirname(outputFilename));
+
+ const cssContent =
+ options.sourceMaps && sourceMap
+ ? `${cssText}\n/*# sourceMappingURL=${outputFilename}.map */`
+ : cssText;
+
+ fs.writeFileSync(outputFilename, cssContent);
+
+ if (
+ options.sourceMaps &&
+ sourceMap &&
+ typeof cssSourceMapText !== 'undefined'
+ ) {
+ fs.writeFileSync(`${outputFilename}.map`, cssSourceMapText);
+ }
+
+ if (options.insertCssRequires && options.sourceRoot) {
+ const inputFilename = path.resolve(
+ options.insertCssRequires,
+ path.relative(options.sourceRoot, filename)
+ );
+
+ const normalizedInputFilename =
+ resolveRequireInsertionFilename(inputFilename);
+
+ const relativePath = normalize(
+ path.relative(path.dirname(inputFilename), outputFilename)
+ );
+
+ const requireStatement = `\nrequire('${
+ relativePath.startsWith('.') ? relativePath : `./${relativePath}`
+ }');`;
+
+ const inputContent = fs.readFileSync(normalizedInputFilename, 'utf-8');
+
+ if (!inputContent.trim().endsWith(requireStatement)) {
+ fs.writeFileSync(
+ normalizedInputFilename,
+ `${inputContent}\n${requireStatement}\n`
+ );
+ }
+ }
+
+ count++;
+ }
+ });
+
+ // eslint-disable-next-line no-console
+ console.log(`Successfully extracted ${count} CSS files.`);
+}
+
+function resolveRequireInsertionFilename(filename: string) {
+ return filename.replace(/\.tsx?/, '.js');
+}
+
+function resolveOutputFilename(
+ filename: string,
+ outDir: string,
+ sourceRoot: string
+) {
+ const outputFolder = path.relative(sourceRoot, path.dirname(filename));
+ const outputBasename = path
+ .basename(filename)
+ .replace(path.extname(filename), '.css');
+
+ return path.join(outDir, outputFolder, outputBasename);
+}
diff --git a/@linaria/packages/cli/tsconfig.json b/@linaria/packages/cli/tsconfig.json
new file mode 100644
index 0000000..38139ee
--- /dev/null
+++ b/@linaria/packages/cli/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [{ "path": "../babel" }]
+}
diff --git a/@linaria/packages/core/CHANGELOG.md b/@linaria/packages/core/CHANGELOG.md
new file mode 100644
index 0000000..ba95b76
--- /dev/null
+++ b/@linaria/packages/core/CHANGELOG.md
@@ -0,0 +1,27 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/core
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/core
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+
+### Bug Fixes
+
+* **core:** remove unnecessary spread operators from css and cx ([#746](https://github.com/callstack/linaria/issues/746)) ([#749](https://github.com/callstack/linaria/issues/749)) ([de23a09](https://github.com/callstack/linaria/commit/de23a0926c2583db01e7df5ea9a134f5910f96a1))
diff --git a/@linaria/packages/core/README.md b/@linaria/packages/core/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/core/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/core/__tests__/cx.test.ts b/@linaria/packages/core/__tests__/cx.test.ts
new file mode 100644
index 0000000..97fabff
--- /dev/null
+++ b/@linaria/packages/core/__tests__/cx.test.ts
@@ -0,0 +1,7 @@
+import { cx } from '../src';
+
+it('should filter falsy values', () => {
+ expect(cx('1', 'test', false, '2', 0, '', null, undefined, '3')).toBe(
+ '1 test 2 3'
+ );
+});
diff --git a/@linaria/packages/core/__tests__/detect-core-js.test.js b/@linaria/packages/core/__tests__/detect-core-js.test.js
new file mode 100644
index 0000000..22bfbe4
--- /dev/null
+++ b/@linaria/packages/core/__tests__/detect-core-js.test.js
@@ -0,0 +1,35 @@
+import cp from 'child_process';
+
+const waitForProcess = async (process) => {
+ return new Promise((resolve) => {
+ let output = '';
+ process.stdout.on('data', (chunk) => {
+ output += chunk.toString();
+ });
+ process.on('close', () => {
+ resolve(output);
+ });
+ });
+};
+
+it('Ensures that package do not include core-js dependency after build', async () => {
+ // eslint-disable-next-line import/no-extraneous-dependencies
+ const packageJSON = require('@linaria/babel-preset/package.json');
+ const buildScript = packageJSON.scripts['build:lib'];
+
+ const proc = cp.exec(buildScript, {
+ stdio: 'ignore',
+ env: {
+ ...process.env,
+ DEBUG_CORE_JS: 'true',
+ },
+ });
+ const result = await waitForProcess(proc);
+ // run `DEBUG_CORE_JS=true yarn build:lib` to debug issues with introduced core-js dependency
+ expect(result).not.toContain(
+ 'The corejs3 polyfill added the following polyfills'
+ );
+ expect(result).toContain(
+ 'Based on your code and targets, the corejs3 polyfill did not add any polyfill'
+ );
+}, 15000);
diff --git a/@linaria/packages/core/babel.config.js b/@linaria/packages/core/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/core/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/core/package.json b/@linaria/packages/core/package.json
new file mode 100644
index 0000000..6026b2f
--- /dev/null
+++ b/@linaria/packages/core/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "@linaria/core",
+ "version": "3.0.0-beta.4",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "sideEffects": false,
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types/index.d.ts",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "test": "jest --config ../../jest.config.js --rootDir .",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ }
+}
diff --git a/@linaria/packages/core/src/CSSProperties.ts b/@linaria/packages/core/src/CSSProperties.ts
new file mode 100644
index 0000000..0c8e580
--- /dev/null
+++ b/@linaria/packages/core/src/CSSProperties.ts
@@ -0,0 +1,3 @@
+export type CSSProperties = {
+ [key: string]: string | number | CSSProperties;
+};
diff --git a/@linaria/packages/core/src/StyledMeta.ts b/@linaria/packages/core/src/StyledMeta.ts
new file mode 100644
index 0000000..e3aa691
--- /dev/null
+++ b/@linaria/packages/core/src/StyledMeta.ts
@@ -0,0 +1,6 @@
+export type StyledMeta = {
+ __linaria: {
+ className: string;
+ extends: StyledMeta;
+ };
+};
diff --git a/@linaria/packages/core/src/css.ts b/@linaria/packages/core/src/css.ts
new file mode 100644
index 0000000..82c977f
--- /dev/null
+++ b/@linaria/packages/core/src/css.ts
@@ -0,0 +1,15 @@
+import type { CSSProperties } from './CSSProperties';
+import type { StyledMeta } from './StyledMeta';
+
+type CSS = (
+ strings: TemplateStringsArray,
+ ...exprs: Array<string | number | CSSProperties | StyledMeta>
+) => string;
+
+const css: CSS = () => {
+ throw new Error(
+ 'Using the "css" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly.'
+ );
+};
+
+export default css;
diff --git a/@linaria/packages/core/src/cx.ts b/@linaria/packages/core/src/cx.ts
new file mode 100644
index 0000000..e34fae2
--- /dev/null
+++ b/@linaria/packages/core/src/cx.ts
@@ -0,0 +1,9 @@
+export type ClassName = string | false | void | null | 0;
+
+type CX = (...classNames: ClassName[]) => string;
+
+const cx: CX = function cx() {
+ return Array.prototype.slice.call(arguments).filter(Boolean).join(' ');
+};
+
+export default cx;
diff --git a/@linaria/packages/core/src/index.ts b/@linaria/packages/core/src/index.ts
new file mode 100644
index 0000000..60cdc6d
--- /dev/null
+++ b/@linaria/packages/core/src/index.ts
@@ -0,0 +1,4 @@
+export { default as css } from './css';
+export { default as cx } from './cx';
+export type { CSSProperties } from './CSSProperties';
+export type { StyledMeta } from './StyledMeta';
diff --git a/@linaria/packages/core/tsconfig.json b/@linaria/packages/core/tsconfig.json
new file mode 100644
index 0000000..3a01f90
--- /dev/null
+++ b/@linaria/packages/core/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "paths": {},
+ "rootDir": "src/"
+ }
+}
diff --git a/@linaria/packages/esbuild/CHANGELOG.md b/@linaria/packages/esbuild/CHANGELOG.md
new file mode 100644
index 0000000..e5945ab
--- /dev/null
+++ b/@linaria/packages/esbuild/CHANGELOG.md
@@ -0,0 +1,34 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.8](https://github.com/callstack/linaria/compare/v3.0.0-beta.7...v3.0.0-beta.8) (2021-07-18)
+
+
+### Bug Fixes
+
+* **esbuild:** add missing resolveDir to support webfont bundling ([#789](https://github.com/callstack/linaria/issues/789)) ([45e5de0](https://github.com/callstack/linaria/commit/45e5de06cef880a3b3524e2fed5cec313903cc43))
+
+
+
+
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+
+### Bug Fixes
+
+* **esbuild:** import esbuild correctly ([#783](https://github.com/callstack/linaria/issues/783)) ([a22522b](https://github.com/callstack/linaria/commit/a22522b0c91eefa12a10f67caf27ecb2954d8d1d))
+* **esbuild:** workaround to for esbuild compile options ([#784](https://github.com/callstack/linaria/issues/784)) ([ac47f43](https://github.com/callstack/linaria/commit/ac47f43d7d2f692ef57b12573fdacdde72c25e19))
+
+
+
+
+
+# [3.0.0-beta.6](https://github.com/callstack/linaria/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-06)
+
+
+### Features
+
+* add esbuild integration ([#765](https://github.com/callstack/linaria/issues/765)) ([511a717](https://github.com/callstack/linaria/commit/511a7178fd9c77fb971d392067b0f7ea8fcd30a4))
diff --git a/@linaria/packages/esbuild/README.md b/@linaria/packages/esbuild/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/esbuild/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/esbuild/babel.config.js b/@linaria/packages/esbuild/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/esbuild/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/esbuild/package.json b/@linaria/packages/esbuild/package.json
new file mode 100644
index 0000000..148d5c5
--- /dev/null
+++ b/@linaria/packages/esbuild/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "@linaria/esbuild",
+ "version": "3.0.0-beta.8",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel",
+ "esbuild"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "dependencies": {
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "esbuild": "^0.12.5"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7"
+ }
+}
diff --git a/@linaria/packages/esbuild/src/index.ts b/@linaria/packages/esbuild/src/index.ts
new file mode 100644
index 0000000..ab58fca
--- /dev/null
+++ b/@linaria/packages/esbuild/src/index.ts
@@ -0,0 +1,106 @@
+/**
+ * This file contains an esbuild loader for Linaria.
+ * It uses the transform.ts function to generate class names from source code,
+ * returns transformed code without template literals and attaches generated source maps
+ */
+
+import path from 'path';
+import fs from 'fs';
+import type { PluginOptions, Preprocessor } from '@linaria/babel-preset';
+import { slugify, transform } from '@linaria/babel-preset';
+import { transformSync, Plugin, TransformOptions, Loader } from 'esbuild';
+
+type EsbuildPluginOptions = {
+ sourceMap?: boolean;
+ preprocessor?: Preprocessor;
+ esbuildOptions?: TransformOptions;
+} & Partial<PluginOptions>;
+
+const nodeModulesRegex = /^(?:.*[\\/])?node_modules(?:[\\/].*)?$/;
+
+export default function linaria({
+ sourceMap,
+ preprocessor,
+ esbuildOptions,
+ ...rest
+}: EsbuildPluginOptions = {}): Plugin {
+ return {
+ name: 'linaria',
+ setup(build) {
+ const cssLookup = new Map<string, string>();
+
+ build.onResolve({ filter: /\.linaria\.css$/ }, (args) => {
+ return {
+ namespace: 'linaria',
+ path: args.path,
+ };
+ });
+
+ build.onLoad({ filter: /.*/, namespace: 'linaria' }, (args) => {
+ return {
+ contents: cssLookup.get(args.path),
+ loader: 'css',
+ resolveDir: path.basename(args.path),
+ };
+ });
+
+ build.onLoad({ filter: /\.(js|jsx|ts|tsx)$/ }, (args) => {
+ const rawCode = fs.readFileSync(args.path, 'utf8');
+ const { ext, name: filename } = path.parse(args.path);
+ const loader = ext.replace(/^\./, '') as Loader;
+
+ if (nodeModulesRegex.test(args.path)) {
+ return {
+ loader,
+ contents: rawCode,
+ };
+ }
+
+ if (typeof esbuildOptions === 'undefined') {
+ esbuildOptions = {};
+ if ('jsxFactory' in build.initialOptions) {
+ esbuildOptions.jsxFactory = build.initialOptions.jsxFactory;
+ }
+ if ('jsxFragment' in build.initialOptions) {
+ esbuildOptions.jsxFragment = build.initialOptions.jsxFragment;
+ }
+ }
+
+ const { code } = transformSync(rawCode, {
+ ...esbuildOptions,
+ loader,
+ });
+ const result = transform(code, {
+ filename: args.path,
+ preprocessor,
+ pluginOptions: rest,
+ });
+
+ if (!result.cssText) {
+ return {
+ contents: code,
+ };
+ }
+
+ let { cssText } = result;
+
+ const slug = slugify(cssText);
+ const cssFilename = `${filename}_${slug}.linaria.css`;
+
+ if (sourceMap && result.cssSourceMapText) {
+ const map = Buffer.from(result.cssSourceMapText).toString('base64');
+ cssText += `/*# sourceMappingURL=data:application/json;base64,${map}*/`;
+ }
+
+ cssLookup.set(cssFilename, cssText);
+
+ return {
+ contents: `
+ import ${JSON.stringify(cssFilename)};
+ ${result.code}
+ `,
+ };
+ });
+ },
+ };
+}
diff --git a/@linaria/packages/esbuild/tsconfig.json b/@linaria/packages/esbuild/tsconfig.json
new file mode 100644
index 0000000..3d5aeee
--- /dev/null
+++ b/@linaria/packages/esbuild/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "paths": {},
+ "rootDir": "src/"
+ },
+ "references": [
+ {
+ "path": "../babel"
+ }
+ ]
+} \ No newline at end of file
diff --git a/@linaria/packages/extractor/CHANGELOG.md b/@linaria/packages/extractor/CHANGELOG.md
new file mode 100644
index 0000000..99b988e
--- /dev/null
+++ b/@linaria/packages/extractor/CHANGELOG.md
@@ -0,0 +1,51 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.8](https://github.com/callstack/linaria/compare/v3.0.0-beta.7...v3.0.0-beta.8) (2021-07-18)
+
+**Note:** Version bump only for package @linaria/extractor
+
+
+
+
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package @linaria/extractor
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+
+### Bug Fixes
+
+* **shaker:** typescript enums support ([#761](https://github.com/callstack/linaria/issues/761)) ([#764](https://github.com/callstack/linaria/issues/764)) ([6907e22](https://github.com/callstack/linaria/commit/6907e2280a2ab8ee014b5d02b1169714ccac9d66))
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/extractor
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/extractor
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package @linaria/extractor
diff --git a/@linaria/packages/extractor/README.md b/@linaria/packages/extractor/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/extractor/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/extractor/__tests__/__snapshots__/extractor.test.ts.snap b/@linaria/packages/extractor/__tests__/__snapshots__/extractor.test.ts.snap
new file mode 100644
index 0000000..c3c9582
--- /dev/null
+++ b/@linaria/packages/extractor/__tests__/__snapshots__/extractor.test.ts.snap
@@ -0,0 +1,1126 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`extractor derives display name from filename 1`] = `
+"import { styled } from '@linaria/react';
+export default /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"FancyName0\\",
+ class: \\"FancyName0_f1tjvuuv\\"
+});"
+`;
+
+exports[`extractor derives display name from filename 2`] = `
+
+CSS:
+
+.FancyName0_f1tjvuuv {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor derives display name from parent folder name 1`] = `
+"import { styled } from '@linaria/react';
+export default /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"FancyName0\\",
+ class: \\"FancyName0_fud4l0y\\"
+});"
+`;
+
+exports[`extractor derives display name from parent folder name 2`] = `
+
+CSS:
+
+.FancyName0_fud4l0y {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor does not strip instanbul coverage sequences 1`] = `
+"var cov_2dr9r1nt95 = function () {
+ var path = \\"/home/user/project/file.js\\";
+ var hash = \\"23f56bbaeb2ebcd213f41374d3b2af1bce287bd3\\";
+ var global = new Function(\\"return this\\")();
+ var gcv = \\"__coverage__\\";
+ var coverageData = {
+ path: \\"/home/user/project/file.js\\",
+ statementMap: {
+ \\"0\\": {
+ start: {
+ line: 3,
+ column: 10
+ },
+ end: {
+ line: 3,
+ column: 12
+ }
+ },
+ \\"1\\": {
+ start: {
+ line: 5,
+ column: 21
+ },
+ end: {
+ line: 7,
+ column: 1
+ }
+ }
+ },
+ fnMap: {},
+ branchMap: {},
+ s: {
+ \\"0\\": 0,
+ \\"1\\": 0
+ },
+ f: {},
+ b: {},
+ _coverageSchema: \\"43e27e138ebf9cfc5966b082cf9a028302ed4184\\",
+ hash: \\"23f56bbaeb2ebcd213f41374d3b2af1bce287bd3\\"
+ };
+ var coverage = global[gcv] || (global[gcv] = {});
+
+ if (coverage[path] && coverage[path].hash === hash) {
+ return coverage[path];
+ }
+
+ return coverage[path] = coverageData;
+}();
+
+import { styled } from '@linaria/react';
+const a = (cov_2dr9r1nt95.s[0]++, 42);
+export const Title = (cov_2dr9r1nt95.s[1]++, /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_tow9xsn\\"
+}));"
+`;
+
+exports[`extractor does not strip instanbul coverage sequences 2`] = `
+
+CSS:
+
+.Title_tow9xsn {
+ height: 42px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor evaluates babel helpers 1`] = `
+"import { styled } from '@linaria/react';
+
+function copyAndExtend(a, b) {
+ return { ...a,
+ ...b
+ };
+}
+
+const obj = copyAndExtend({
+ a: 1
+}, {
+ a: 2
+});
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor evaluates babel helpers 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "2"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor evaluates complex styles with functions and nested selectors 1`] = `
+"import { css } from '@linaria/core';
+export const bareIconClass = \\"bareIconClass_b1t92lw9\\";
+
+const getSizeStyles = fs => ({
+ [\`&.\${bareIconClass}\`]: {
+ fontSize: fs * 1.5
+ }
+});
+
+export const SIZES = {
+ XS: \\"XS_x1xjmq2i\\"
+};"
+`;
+
+exports[`extractor evaluates complex styles with functions and nested selectors 2`] = `
+
+CSS:
+
+.bareIconClass_b1t92lw9 {}
+.XS_x1xjmq2i {&.bareIconClass_b1t92lw9 { font-size: 16.5px; }}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor evaluates component interpolations 1`] = `
+"const {
+ styled
+} = require('@linaria/react');
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});
+export const Paragraph = /*#__PURE__*/styled(\\"p\\")({
+ name: \\"Paragraph\\",
+ class: \\"Paragraph_p1xjmq2i\\"
+});"
+`;
+
+exports[`extractor evaluates component interpolations 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: red;
+}
+.Paragraph_p1xjmq2i {
+ .Title_t1t92lw9 {
+ color: blue;
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor evaluates dependencies with sequence expression 1`] = `
+"import { styled } from '@linaria/react';
+const color = (external, () => 'blue');
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [color]
+ }
+});"
+`;
+
+exports[`extractor evaluates dependencies with sequence expression 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: var(--t1t92lw9-0);
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor evaluates expressions with dependencies 1`] = `
+"import { styled } from '@linaria/react';
+import slugify from '@linaria/babel-preset/__fixtures__/slugify';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor evaluates expressions with dependencies 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "6og6jy"
+ }
+}
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, @linaria/babel-preset/__fixtures__/slugify
+
+`;
+
+exports[`extractor evaluates expressions with expressions depending on shared dependency 1`] = `
+"import { styled } from '@linaria/react';
+
+const slugify = require('@linaria/babel-preset/__fixtures__/slugify').default;
+
+const boo = t => slugify(t) + 'boo';
+
+const bar = t => slugify(t) + 'bar';
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor evaluates expressions with expressions depending on shared dependency 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "6og6jyboo6og6jybar"
+ }
+}
+
+Dependencies: @linaria/babel-preset/__fixtures__/slugify
+
+`;
+
+exports[`extractor evaluates functions with nested identifiers 1`] = `
+"import { styled } from '@linaria/react';
+const objects = {
+ key: {
+ fontSize: 12
+ }
+};
+
+const foo = k => {
+ const obj = objects[k];
+ return obj;
+};
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor evaluates functions with nested identifiers 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ font-size: 12px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor evaluates identifier in scope 1`] = `
+"import { styled } from '@linaria/react';
+const answer = 42;
+
+const foo = () => answer;
+
+const days = foo() + ' days';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor evaluates identifier in scope 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "42 days"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor evaluates imported typescript enums 1`] = `
+"import { styled } from '@linaria/react';
+import { Colors } from '@linaria/babel-preset/__fixtures__/enums';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_taxxqrn\\"
+});"
+`;
+
+exports[`extractor evaluates imported typescript enums 2`] = `
+
+CSS:
+
+.Title_taxxqrn {
+ color: #27509A;
+}
+
+Dependencies: @linaria/babel-preset/__fixtures__/enums
+
+`;
+
+exports[`extractor evaluates interpolations with sequence expression 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [(external, () => \\"blue\\")]
+ }
+});"
+`;
+
+exports[`extractor evaluates interpolations with sequence expression 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: var(--t1t92lw9-0);
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor evaluates local expressions 1`] = `
+"import { styled } from '@linaria/react';
+const answer = 42;
+
+const foo = () => answer;
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor evaluates local expressions 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "42 days"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor evaluates multiple expressions with shared dependency 1`] = `
+"import { styled } from '@linaria/react';
+
+const slugify = require('@linaria/babel-preset/__fixtures__/slugify').default;
+
+const boo = t => slugify(t) + 'boo';
+
+const bar = t => slugify(t) + 'bar';
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor evaluates multiple expressions with shared dependency 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "6og6jyboo"
+ content: "6og6jybar"
+ }
+}
+
+Dependencies: @linaria/babel-preset/__fixtures__/slugify
+
+`;
+
+exports[`extractor generates stable class names 1`] = `
+"import { styled } from '@linaria/react';
+export const T1 = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"T1\\",
+ class: \\"T1_t16d1w5s\\"
+});
+export const T2 = /*#__PURE__*/styled(\\"h2\\")({
+ name: \\"T2\\",
+ class: \\"T2_t18j681n\\"
+});
+export const T3 = /*#__PURE__*/styled(\\"h3\\")({
+ name: \\"T3\\",
+ class: \\"T3_t16ajafo\\"
+});
+export default /*#__PURE__*/styled(\\"p\\")({
+ name: \\"components-library3\\",
+ class: \\"components-library3_c16bmp8w\\"
+});"
+`;
+
+exports[`extractor generates stable class names 2`] = `
+
+CSS:
+
+.T1_t16d1w5s {
+ background: #111;
+}
+.T2_t18j681n {
+ background: #222;
+}
+.T3_t16ajafo {
+ .T2_t18j681n {
+ background: #333;
+ }
+}
+.components-library3_c16bmp8w {
+ background: #333;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor handles complex component 1`] = `
+"// Dead code in this file should be ignored
+import deadDep from 'unknown-dependency';
+import { styled } from '@linaria/react';
+export const deadValue = deadDep();
+const objects = {
+ font: {
+ fontSize: 12
+ },
+ box: {
+ border: '1px solid red'
+ }
+};
+
+const foo = k => {
+ const {
+ [k]: obj
+ } = objects;
+ return obj;
+};
+
+objects.font.fontWeight = 'bold';
+export const whiteColor = '#fff';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t16vg7lb\\"
+});"
+`;
+
+exports[`extractor handles complex component 2`] = `
+
+CSS:
+
+.Title_t16vg7lb {
+ font-size: 12px;
+ border: 1px solid red;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor handles escapes properly 1`] = `
+"import { styled } from '@linaria/react';
+const selectors = ['a', 'b'];
+export const Block = /*#__PURE__*/styled(\\"div\\")({
+ name: \\"Block\\",
+ class: \\"Block_b11ngyv0\\"
+});"
+`;
+
+exports[`extractor handles escapes properly 2`] = `
+
+CSS:
+
+.Block_b11ngyv0 {
+ a { content: "\\u000A"; } b { content: "\\u000A"; };
+}
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, @babel/runtime/helpers/taggedTemplateLiteral
+
+`;
+
+exports[`extractor handles indirect wrapping another styled component 1`] = `
+"const {
+ styled
+} = require('@linaria/react');
+
+const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});
+
+const hoc = Cmp => Cmp;
+
+export const CustomTitle = /*#__PURE__*/styled(hoc(Title))({
+ name: \\"CustomTitle\\",
+ class: \\"CustomTitle_c1xjmq2i\\"
+});"
+`;
+
+exports[`extractor handles indirect wrapping another styled component 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: red;
+}
+.CustomTitle_c1xjmq2i {
+ font-size: 24px;
+ color: blue;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor handles wrapping another styled component 1`] = `
+"const {
+ css
+} = require('..');
+
+const {
+ styled
+} = require('@linaria/react');
+
+const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});
+export const BlueTitle = /*#__PURE__*/styled(Title)({
+ name: \\"BlueTitle\\",
+ class: \\"BlueTitle_b1xjmq2i\\"
+});
+export const GreenTitle = /*#__PURE__*/styled(BlueTitle)({
+ name: \\"GreenTitle\\",
+ class: \\"GreenTitle_g2qjq78\\"
+});"
+`;
+
+exports[`extractor handles wrapping another styled component 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: red;
+}
+.BlueTitle_b1xjmq2i.Title_t1t92lw9 {
+ font-size: 24px;
+ color: blue;
+}
+.GreenTitle_g2qjq78.BlueTitle_b1xjmq2i.Title_t1t92lw9 {
+ color: green;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor hoistable identifiers 1`] = `
+"import { styled } from '@linaria/react';
+{
+ var days = 42;
+}
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor hoistable identifiers 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "42"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor ignores external expressions 1`] = `
+"import { styled } from '@linaria/react';
+
+const generate = props => props.content;
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [generate]
+ }
+});"
+`;
+
+exports[`extractor ignores external expressions 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "var(--t1t92lw9-0)"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor ignores inline arrow function expressions 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [props => props.content]
+ }
+});"
+`;
+
+exports[`extractor ignores inline arrow function expressions 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "var(--t1t92lw9-0)"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor ignores inline vanilla function expressions 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [function (props) {
+ return props.content;
+ }]
+ }
+});"
+`;
+
+exports[`extractor ignores inline vanilla function expressions 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "var(--t1t92lw9-0)"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor inlines array styles as CSS string 1`] = `
+"import { styled } from '@linaria/react';
+
+const fill = (top = 0, left = 0, right = 0, bottom = 0) => [{
+ position: 'absolute'
+}, {
+ top,
+ right,
+ bottom,
+ left
+}];
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor inlines array styles as CSS string 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ position: absolute; top: 0; right: 0; bottom: 0; left: 0;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor inlines object styles as CSS string 1`] = `
+"import { styled } from '@linaria/react';
+
+const fill = (top = 0, left = 0, right = 0, bottom = 0) => ({
+ position: 'absolute',
+ top,
+ right,
+ bottom,
+ left
+});
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`extractor inlines object styles as CSS string 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ position: absolute; top: 0; right: 0; bottom: 0; left: 0;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor it should not throw location error for hoisted identifier 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+
+const size = () => 5;
+
+var _ref = size();
+
+export default function Component() {
+ const color = _ref;
+ return \\"source0_s1t92lw9\\";
+}"
+`;
+
+exports[`extractor it should not throw location error for hoisted identifier 2`] = `
+
+CSS:
+
+.source0_s1t92lw9 {opacity:5;}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor non-hoistable identifiers 1`] = `
+"<<DIRNAME>>/source.js: An error occurred when evaluating the expression:
+
+ > days is not defined.
+
+ Make sure you are not using a browser or Node specific API and all the variables are available in static context.
+ Linaria have to extract pieces of your code to resolve the interpolated values.
+ Defining styled component or class will not work inside:
+ - function,
+ - class,
+ - method,
+ - loop,
+ because it cannot be statically determined in which context you use them.
+ That's why some variables may be not defined during evaluation.
+
+ 7 | export const Title = styled.h1\`
+ 8 | &:before {
+> 9 | content: \\"\${days}\\"
+ | ^^^^
+ 10 | }
+ 11 | \`;"
+`;
+
+exports[`extractor should handle shadowed identifier inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+const color = 'red';
+var _ref = 'blue';
+var _ref2 = {
+ color: _ref
+};
+export default function Component() {
+ const color = _ref;
+ const val = _ref2;
+ return React.createElement('div', {
+ className: \\"className_c1t92lw9\\"
+ });
+}"
+`;
+
+exports[`extractor should handle shadowed identifier inside components 2`] = `
+
+CSS:
+
+.className_c1t92lw9 {background-color:blue;}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor should process \`css\` calls inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+export function Component() {
+ const opacity = 0.2;
+ const className = \\"className_c1t92lw9\\";
+ return React.createElement(\\"div\\", {
+ className
+ });
+}"
+`;
+
+exports[`extractor should process \`css\` calls inside components 2`] = `
+
+CSS:
+
+.className_c1t92lw9 {
+ opacity: 0.2;
+ }
+
+Dependencies: NA
+
+`;
+
+exports[`extractor should process \`css\` calls with complex interpolation inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+import externalDep from '@linaria/babel-preset/__fixtures__/sample-script';
+const globalObj = {
+ opacity: 0.5
+};
+var _ref = externalDep;
+var _ref2 = {
+ value: 0.2,
+ cell: \\"cell_c1t92lw9\\"
+};
+var _ref3 = _ref2;
+export function Component() {
+ const classes = _ref2;
+ const classes2 = _ref3;
+ const referencedExternalDep = _ref;
+ const className = \\"className_c1xjmq2i\\";
+ return React.createElement(\\"div\\", {
+ className
+ });
+}"
+`;
+
+exports[`extractor should process \`css\` calls with complex interpolation inside components 2`] = `
+
+CSS:
+
+.cell_c1t92lw9 {
+ opacity: 0;
+ }
+.className_c1xjmq2i {
+ opacity: 0.5;
+ font-size: 42
+ font-size: 42
+
+ &:hover .cell_c1t92lw9 {
+ opacity: 0.2;
+ }
+ }
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, @linaria/babel-preset/__fixtures__/sample-script
+
+`;
+
+exports[`extractor should process \`styled\` calls inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+export function Component() {
+ const opacity = 0.2;
+ const MyComponent = styled.h1\`
+ opacity: \${opacity};
+ \`;
+ return React.createElement(MyComponent);
+}"
+`;
+
+exports[`extractor should process \`styled\` calls inside components 2`] = `Object {}`;
+
+exports[`extractor should process \`styled\` calls with complex interpolation inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+const globalObj = {
+ opacity: 0.5
+};
+const Styled1 = styled.p\`
+ opacity: \${globalObj.opacity}
+\`;
+export function Component() {
+ const classes = {
+ value: 0.2,
+ cell: \\"cell_c1t92lw9\\"
+ };
+ const classes2 = classes;
+ const MyComponent = styled\`
+ opacity: \${globalObj.opacity};
+
+ &:hover .\${classes2.cell} {
+ opacity: \${classes.value};
+ }
+ \${Styled1} {
+ font-size: 1;
+ }
+ \`;
+ return React.createElement(MyComponent);
+}"
+`;
+
+exports[`extractor should process \`styled\` calls with complex interpolation inside components 2`] = `
+
+CSS:
+
+.cell_c1t92lw9 {
+ opacity: 0;
+ }
+
+Dependencies: NA
+
+`;
+
+exports[`extractor should work with String and Number object 1`] = `
+"import { css } from '@linaria/core';
+export const style = \\"style_s1t92lw9\\";"
+`;
+
+exports[`extractor should work with String and Number object 2`] = `
+
+CSS:
+
+.style_s1t92lw9 {
+ width: 100%;
+ opacity: 0.75;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor should work with generated classnames as selectors 1`] = `
+"import { css } from \\"@linaria/core\\";
+export const text = \\"text_t1t92lw9\\";
+export const square = \\"square_s1xjmq2i\\";"
+`;
+
+exports[`extractor should work with generated classnames as selectors 2`] = `
+
+CSS:
+
+.text_t1t92lw9 {}
+.square_s1xjmq2i {
+ .text_t1t92lw9 {
+ color: red;
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`extractor simplifies react components 1`] = `
+"import React from 'react';
+import { styled } from '@linaria/react';
+import constant from './broken-dependency';
+
+const FuncComponent = props => <div>{props.children + constant}</div>;
+
+class ClassComponent extends React.PureComponent {
+ method() {
+ return constant;
+ }
+
+ render() {
+ return <div>{props.children + constant}</div>;
+ }
+
+}
+
+export const StyledFunc = /*#__PURE__*/styled(FuncComponent)({
+ name: \\"StyledFunc\\",
+ class: \\"StyledFunc_s1t92lw9\\"
+});
+export const StyledClass = /*#__PURE__*/styled(ClassComponent)({
+ name: \\"StyledClass\\",
+ class: \\"StyledClass_s1xjmq2i\\"
+});"
+`;
+
+exports[`extractor simplifies react components 2`] = `
+
+CSS:
+
+.StyledFunc_s1t92lw9 {
+ color: red;
+}
+.StyledClass_s1xjmq2i {
+ color: blue;
+}
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, react
+
+`;
+
+exports[`extractor throws codeframe error when evaluation fails 1`] = `
+"<<DIRNAME>>/source.js: An error occurred when evaluating the expression:
+
+ > This will fail.
+
+ Make sure you are not using a browser or Node specific API and all the variables are available in static context.
+ Linaria have to extract pieces of your code to resolve the interpolated values.
+ Defining styled component or class will not work inside:
+ - function,
+ - class,
+ - method,
+ - loop,
+ because it cannot be statically determined in which context you use them.
+ That's why some variables may be not defined during evaluation.
+
+ 4 |
+ 5 | export const Title = styled.h1\`
+> 6 | font-size: \${foo()}px;
+ | ^^^^^
+ 7 | \`;"
+`;
+
+exports[`extractor throws if couldn't determine a display name 1`] = `
+"<<DIRNAME>>/.js: Couldn't determine a name for the component. Ensure that it's either:
+- Assigned to a variable
+- Is an object property
+- Is a prop in a JSX element
+
+ 1 | import { styled } from '@linaria/react';
+ 2 |
+> 3 | export default styled.h1\`
+ | ^
+ 4 | font-size: 14px;
+ 5 | \`;"
+`;
+
+exports[`extractor throws when interpolation evaluates to NaN 1`] = `
+"<<DIRNAME>>/source.js: The expression evaluated to 'NaN', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(height)'.
+ 4 |
+ 5 | export const Title = styled.h1\`
+> 6 | height: \${height}px;
+ | ^^^^^^
+ 7 | \`;"
+`;
+
+exports[`extractor throws when interpolation evaluates to null 1`] = `
+"<<DIRNAME>>/source.js: The expression evaluated to 'null', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(color)'.
+ 4 |
+ 5 | export const Title = styled.h1\`
+> 6 | color: \${color};
+ | ^^^^^
+ 7 | \`;"
+`;
+
+exports[`extractor throws when interpolation evaluates to undefined 1`] = `
+"<<DIRNAME>>/source.js: The expression evaluated to 'undefined', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(fontSize)'.
+ 4 |
+ 5 | export const Title = styled.h1\`
+> 6 | font-size: \${fontSize};
+ | ^^^^^^^^
+ 7 | \`;"
+`;
diff --git a/@linaria/packages/extractor/__tests__/extractor.test.ts b/@linaria/packages/extractor/__tests__/extractor.test.ts
new file mode 100644
index 0000000..0883339
--- /dev/null
+++ b/@linaria/packages/extractor/__tests__/extractor.test.ts
@@ -0,0 +1,5 @@
+import { run } from '@linaria/babel-preset/__utils__/strategy-tester';
+
+describe('extractor', () => {
+ run(__dirname, require('../src').default);
+});
diff --git a/@linaria/packages/extractor/babel.config.js b/@linaria/packages/extractor/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/extractor/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/extractor/package.json b/@linaria/packages/extractor/package.json
new file mode 100644
index 0000000..68a4545
--- /dev/null
+++ b/@linaria/packages/extractor/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "@linaria/extractor",
+ "version": "3.0.0-beta.8",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "test": "jest --config ../../jest.config.js --rootDir .",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "dependencies": {
+ "@babel/generator": ">=7",
+ "@babel/plugin-transform-runtime": ">=7",
+ "@babel/plugin-transform-template-literals": ">=7",
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "@linaria/preeval": "^3.0.0-beta.8"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7"
+ }
+}
diff --git a/@linaria/packages/extractor/src/RequirementsResolver.ts b/@linaria/packages/extractor/src/RequirementsResolver.ts
new file mode 100644
index 0000000..019177b
--- /dev/null
+++ b/@linaria/packages/extractor/src/RequirementsResolver.ts
@@ -0,0 +1,212 @@
+/**
+ * This file is used to extract statements required to evaluate dependencies.
+ * Starting from the exports.__linariaPreval passed as argument to static method on class RequirementsResolver,
+ * it recursively extracts paths that contains identifiers that are needed to evaluate the dependency.
+ */
+
+import { types as t } from '@babel/core';
+import type {
+ Identifier,
+ Node,
+ Statement,
+ VariableDeclarator,
+} from '@babel/types';
+import type { Binding, NodePath } from '@babel/traverse';
+
+type Requirement = {
+ result: Statement;
+ path: NodePath<Node>;
+ requirements: Set<NodePath>;
+};
+
+export default class RequirementsResolver {
+ public static resolve(path: NodePath<Node> | NodePath<Node>[]): Statement[] {
+ const resolver = new RequirementsResolver();
+ if (Array.isArray(path)) {
+ path.forEach((p) => this.resolve(p));
+ } else {
+ resolver.resolve(path);
+ }
+
+ return resolver.statements;
+ }
+
+ private requirements: Requirement[] = [];
+
+ /**
+ * Checks that specified node or one of its ancestors is already added
+ */
+ private isAdded(path: NodePath<Node>): boolean {
+ if (this.requirements.some((req) => req.path === path)) {
+ return true;
+ }
+
+ if (path.parentPath) {
+ return this.isAdded(path.parentPath);
+ }
+
+ return false;
+ }
+
+ /**
+ * Makes a declaration statement, finds dependencies
+ * and adds all of it to the list of requirements.
+ */
+ private resolveBinding(binding: Binding) {
+ let result: Statement;
+ const startPosition = binding.path.node.start;
+
+ switch (binding.kind) {
+ case 'module':
+ if (
+ binding.path.isImportSpecifier() &&
+ binding.path.parentPath.isImportDeclaration()
+ ) {
+ result = t.importDeclaration(
+ [binding.path.node],
+ binding.path.parentPath.node.source
+ );
+ } else {
+ result = binding.path.parentPath.node as Statement;
+ }
+ break;
+ case 'const':
+ case 'let':
+ case 'var': {
+ let decl = (binding.path as NodePath<VariableDeclarator>).node;
+ if (
+ binding.path.isVariableDeclarator() &&
+ t.isSequenceExpression(binding.path.node.init)
+ ) {
+ // Replace SequenceExpressions (expr1, expr2, expr3, ...) with the last one
+ decl = t.variableDeclarator(
+ binding.path.node.id,
+ binding.path.node.init.expressions[
+ binding.path.node.init.expressions.length - 1
+ ]
+ );
+ }
+
+ result = t.variableDeclaration(binding.kind, [decl]);
+ break;
+ }
+ default:
+ result = binding.path.node as Statement;
+ break;
+ }
+ // result may be newly created node that not have start/end/loc info
+ // which is needed to sort statements
+ result.start = startPosition;
+
+ const req: Requirement = {
+ result,
+ path: binding.path,
+ requirements: new Set(),
+ };
+
+ this.requirements.push(req);
+
+ req.requirements = this.resolve(binding.path);
+ }
+
+ /**
+ * Checks that a specified identifier has a binding and tries to resolve it
+ * @return `Binding` or null if there is no binding, or it is already added, or it has useless type
+ */
+ private resolveIdentifier(path: NodePath<Identifier>): Binding | null {
+ const binding = path.scope.getBinding(path.node.name);
+
+ if (
+ path.isReferenced() &&
+ binding &&
+ !this.isAdded(binding.path) &&
+ // @ts-ignore binding.kind can be param
+ binding.kind !== 'param'
+ ) {
+ this.resolveBinding(binding);
+ return binding;
+ }
+
+ return null;
+ }
+
+ /**
+ * Finds all identifiers in a specified path, finds all related bindings
+ * and recursively calls `resolve` for each of them.
+ * @return `Set` with related bindings
+ */
+ private resolve(path: NodePath<Node>): Set<NodePath> {
+ const set = new Set<NodePath>();
+ if (path.isIdentifier()) {
+ const binding = this.resolveIdentifier(path);
+ if (binding !== null) {
+ set.add(binding.path);
+ }
+
+ return set;
+ }
+
+ path.traverse({
+ Identifier: (p) => {
+ const binding = this.resolveIdentifier(p);
+ if (binding !== null) {
+ set.add(binding.path);
+ }
+ },
+ });
+
+ return set;
+ }
+
+ /**
+ * Returns sorted list of required statements
+ */
+ private get statements(): Statement[] {
+ const statements: Statement[] = [];
+ let requirements = this.requirements;
+ while (requirements.length > 0) {
+ // On each step, we add to the result list only that statements
+ // which don't have any dependencies (`zeroDeps`)
+ const [zeroDeps, rest] = requirements.reduce(
+ (acc, req) => {
+ if (req.requirements.size === 0) {
+ acc[0].push(req);
+ } else {
+ acc[1].push(req);
+ }
+
+ return acc;
+ },
+ [[], []] as [Requirement[], Requirement[]]
+ );
+
+ if (zeroDeps.length === 0) {
+ // That means that we are in the endless loop.
+ // I don't know how it's possible, but if it's ever happened, we at least would be notified.
+ throw new Error('Circular dependency');
+ }
+
+ statements.push(...zeroDeps.map((req) => req.result));
+ // Let's remove already added statements from the requirements of the rest of the list.
+ requirements = rest.map((req) => {
+ const reqs = new Set(req.requirements);
+ zeroDeps.forEach((r) => reqs.delete(r.path));
+ return {
+ ...req,
+ requirements: reqs,
+ };
+ });
+ }
+
+ // preserve original statements order, but reversed
+ statements.sort((a, b) => {
+ if (a.start && b.start) {
+ return b.start - a.start;
+ } else {
+ return 0;
+ }
+ });
+
+ return statements;
+ }
+}
diff --git a/@linaria/packages/extractor/src/index.ts b/@linaria/packages/extractor/src/index.ts
new file mode 100644
index 0000000..385b748
--- /dev/null
+++ b/@linaria/packages/extractor/src/index.ts
@@ -0,0 +1,144 @@
+/**
+ * This file is a main file of extractor evaluation strategy.
+ * It finds __linariaPreval statements starting from the end of the program and
+ * invoke RequirementsResolver to get parts of code that needs to be executed in order to evaluate the dependency.
+ */
+
+import { traverse, types as t } from '@babel/core';
+import type {
+ ExpressionStatement,
+ MemberExpression,
+ Program,
+ SequenceExpression,
+} from '@babel/types';
+import { parseSync, transformSync } from '@babel/core';
+import type { NodePath } from '@babel/traverse';
+import generator from '@babel/generator';
+
+import type { Evaluator } from '@linaria/babel-preset';
+import { buildOptions } from '@linaria/babel-preset';
+import RequirementsResolver from './RequirementsResolver';
+
+function isMemberExpression(
+ path: NodePath<any> | NodePath<any>[]
+): path is NodePath<MemberExpression> {
+ return !Array.isArray(path) && path.isMemberExpression();
+}
+
+// Checks that passed node is `exports.__linariaPreval = /* something */`
+function isLinariaPrevalExport(
+ path: NodePath<any>
+): path is NodePath<ExpressionStatement> {
+ if (!path.isExpressionStatement()) {
+ return false;
+ }
+
+ if (
+ !(path as NodePath<ExpressionStatement>)
+ .get('expression')
+ .isAssignmentExpression()
+ ) {
+ return false;
+ }
+
+ const left = path.get('expression.left');
+
+ if (!isMemberExpression(left)) {
+ return false;
+ }
+
+ const object = left.get('object');
+ const property = left.get('property');
+ if (
+ Array.isArray(property) ||
+ !property.isIdentifier() ||
+ property.node.name !== '__linariaPreval'
+ ) {
+ return false;
+ }
+
+ return object.isIdentifier() && object.node.name === 'exports';
+}
+
+const extractor: Evaluator = (filename, options, text, only = null) => {
+ const transformOptions = buildOptions(filename, options);
+ transformOptions.presets!.unshift([
+ require.resolve('@linaria/preeval'),
+ options,
+ ]);
+ transformOptions.plugins!.unshift([
+ require.resolve('@babel/plugin-transform-runtime'),
+ { useESModules: false },
+ ]);
+
+ // We made a mistake somewhen, and linaria preval was dependent on `plugin-transform-template-literals`
+ // Usually it was loaded into preval, because user was using `@babel/preset-env` preset which included that plugin. Internally we used this preset for tests (and previously for everything) - thats why we implemented behavior based on existing of that plugin
+ // The ordering is very important here, that's why it is added as a preset, not just as a plugin. It makes this plugin run *AFTER* linaria preset, which is required to make have the current behavior.
+ // In preval we have 2 visitors, one for Call Expressions and second for TaggedTemplateLiterals. Babel process TaggedTemplates first for some reason, and we grab only the css`` statements, we skip styled statements at this stage.
+ // Then it process TaggedTemplateLiterals with mentioned plugin, which transforms them to CallExpressions (babel seems to apply thw whole set of plugins for particular visitor, then for the next visitor and so on).
+ // Then Linaria can identify all `styled` as call expressions, including `styled.h1`, `styled.p` and others.
+
+ // Presets ordering is from last to first, so we add the plugin at the beginning of the list, which persist the order that was established with formerly used `@babel/preset-env`.
+
+ transformOptions.presets!.unshift({
+ plugins: [require.resolve('@babel/plugin-transform-template-literals')],
+ });
+ // Expressions will be extracted only for __linariaPreval.
+ // In all other cases a code will be returned as is.
+ let { code } = transformSync(text, transformOptions)!;
+ if (!only || only.length !== 1 || only[0] !== '__linariaPreval') {
+ return [code!, null];
+ }
+ // We cannot just use `ast` that was returned by `transformSync`,
+ // because there is some kind of cache inside `traverse` which
+ // reuses `NodePath` with a wrong scope.
+ // There is probably a better solution, but I haven't found it yet.
+ const ast = parseSync(code!, { filename: filename + '.preval' });
+ // First of all, let's find a __linariaPreval export
+ traverse(ast!, {
+ // We know that export has been added to the program body,
+ // so we don't need to traverse through the whole tree
+ Program(path: NodePath<Program>) {
+ const body = path.get('body');
+ // Highly likely it has been added in the end
+ for (let idx = body.length - 1; idx >= 0; idx--) {
+ if (isLinariaPrevalExport(body[idx])) {
+ // Here we are!
+ const statements = RequirementsResolver.resolve(
+ body[idx].get('expression.right')
+ );
+
+ // We only need to evaluate the last item in a sequence expression, e.g. (a, b, c)
+ body[idx].traverse({
+ SequenceExpression(sequence: NodePath<SequenceExpression>) {
+ sequence.replaceWith(
+ sequence.get('expressions')[
+ sequence.node.expressions.length - 1
+ ]
+ );
+ },
+ });
+
+ // We'll wrap each code in a block to avoid collisions in variable names
+ const wrapped = statements.reduce(
+ (acc, curr) => t.blockStatement([curr, acc]),
+ t.blockStatement([body[idx].node])
+ );
+
+ // Generate a new code with extracted statements
+ code = [
+ // Use String.raw to preserve escapes such as '\n' in the code
+ String.raw`${generator(wrapped).code}`,
+ ].join('\n');
+ break;
+ }
+ }
+
+ path.stop();
+ },
+ });
+
+ return [code!, null];
+};
+
+export default extractor;
diff --git a/@linaria/packages/extractor/tsconfig.json b/@linaria/packages/extractor/tsconfig.json
new file mode 100644
index 0000000..1b2c87e
--- /dev/null
+++ b/@linaria/packages/extractor/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [{ "path": "../babel" }, { "path": "../preeval" }]
+}
diff --git a/@linaria/packages/interop/CHANGELOG.md b/@linaria/packages/interop/CHANGELOG.md
new file mode 100644
index 0000000..99b4976
--- /dev/null
+++ b/@linaria/packages/interop/CHANGELOG.md
@@ -0,0 +1,19 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/tree/master/packages/interop/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package @linaria/babel-plugin-interop
+
+
+
+
+
+# [3.0.0-beta.6](https://github.com/callstack/linaria/tree/master/packages/interop/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-06)
+
+
+### Features
+
+* **interop:** interop between Linaria and traditional CSS-in-JS libraries ([#776](https://github.com/callstack/linaria/tree/master/packages/interop/issues/776)) ([0a5f5b4](https://github.com/callstack/linaria/tree/master/packages/interop/commit/0a5f5b440506bfa24724d4a91e519c48d6f6c69b))
diff --git a/@linaria/packages/interop/README.md b/@linaria/packages/interop/README.md
new file mode 100644
index 0000000..c10fc6e
--- /dev/null
+++ b/@linaria/packages/interop/README.md
@@ -0,0 +1,45 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+# `@linaria/babel-plugin-interop`
+
+This plugin allows to interpolate Linaria components inside styled-components and Emotion:
+```javascript
+import styled from 'styled-components';
+import { Title } from './Title.styled'; // Linaria component
+
+const Article = () => { /* … */ };
+
+export default styled(Article)`
+ & > ${Title} {
+ color: green;
+ }
+`;
+
+```
+
+## Quick start
+
+Install the plugin first:
+
+```
+npm install --save-dev @linaria/babel-plugin-interop
+```
+
+Then add `@linaria/interop` to your babel configuration *before* `styled-components`:
+
+```JSON
+{
+ "plugins": [
+ ["@linaria/interop", { "library": "styled-components" }],
+ "styled-components"
+ ]
+}
+```
diff --git a/@linaria/packages/interop/__tests__/__snapshots__/index.test.js.snap b/@linaria/packages/interop/__tests__/__snapshots__/index.test.js.snap
new file mode 100644
index 0000000..52a322f
--- /dev/null
+++ b/@linaria/packages/interop/__tests__/__snapshots__/index.test.js.snap
@@ -0,0 +1,73 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`styled-components css 1`] = `
+"import { css } from \\"styled-components\\";
+import Title from \\"./Title\\";
+export default css\`
+ & > \${(i => i && i.__linaria ? '.' + i.__linaria.className : i)(Title)} {
+ color: red;
+ }
+\`;"
+`;
+
+exports[`styled-components keeps linaria 1`] = `
+"import styled from \\"linaria/react\\";
+import Title from \\"./Title\\";
+export default styled.h1\`
+ & > \${Title} {
+ color: red;
+ }
+\`;"
+`;
+
+exports[`styled-components member expression as selector 1`] = `
+"import styled from \\"styled-components\\";
+import Title from \\"./Title\\";
+export default styled.h1\`
+ & > \${(i => i && i.__linaria ? '.' + i.__linaria.className : i)(Title.Small)} {
+ color: red;
+ }
+\`;"
+`;
+
+exports[`styled-components styled(Cmp) 1`] = `
+"import styled from \\"styled-components\\";
+import Cmp from \\"./Cmp\\";
+import Title from \\"./Title\\";
+export default styled(Cmp)\`
+ & > \${(i => i && i.__linaria ? '.' + i.__linaria.className : i)(Title)} {
+ color: red;
+ }
+\`;"
+`;
+
+exports[`styled-components styled(Cmp).attrs({}) 1`] = `
+"import styled from \\"styled-components\\";
+import Cmp from \\"./Cmp\\";
+import Title from \\"./Title\\";
+export default styled(Cmp).attrs(() => ({}))\`
+ & > \${(i => i && i.__linaria ? '.' + i.__linaria.className : i)(Title)} {
+ color: red;
+ }
+\`;"
+`;
+
+exports[`styled-components styled.h1 1`] = `
+"import styled from \\"styled-components\\";
+import Title from \\"./Title\\";
+export default styled.h1\`
+ & > \${(i => i && i.__linaria ? '.' + i.__linaria.className : i)(Title)} {
+ color: red;
+ }
+\`;"
+`;
+
+exports[`styled-components styled.h1.attrs({}) 1`] = `
+"import styled from \\"styled-components\\";
+import Title from \\"./Title\\";
+export default styled.h1.attrs(() => ({}))\`
+ & > \${(i => i && i.__linaria ? '.' + i.__linaria.className : i)(Title)} {
+ color: red;
+ }
+\`;"
+`;
diff --git a/@linaria/packages/interop/__tests__/index.test.js b/@linaria/packages/interop/__tests__/index.test.js
new file mode 100644
index 0000000..d6e6d86
--- /dev/null
+++ b/@linaria/packages/interop/__tests__/index.test.js
@@ -0,0 +1,117 @@
+const babel = require('@babel/core');
+const dedent = require('dedent');
+const plugin = require('../');
+
+const getCode = (src) => {
+ const { code } = babel.transform(dedent(src), { plugins: [plugin] });
+ return code;
+};
+
+describe('styled-components', function () {
+ it('keeps linaria', () => {
+ const code = getCode(`
+ import styled from "linaria/react";
+ import Title from "./Title";
+
+ export default styled.h1\`
+ & > ${'${Title}'} {
+ color: red;
+ }
+ \`;
+ `);
+
+ expect(code).toMatchSnapshot();
+ });
+
+ it('css', () => {
+ const code = getCode(`
+ import { css } from "styled-components";
+ import Title from "./Title";
+
+ export default css\`
+ & > ${'${Title}'} {
+ color: red;
+ }
+ \`;
+ `);
+
+ expect(code).toMatchSnapshot();
+ });
+
+ it('styled.h1', () => {
+ const code = getCode(`
+ import styled from "styled-components";
+ import Title from "./Title";
+
+ export default styled.h1\`
+ & > ${'${Title}'} {
+ color: red;
+ }
+ \`;
+ `);
+
+ expect(code).toMatchSnapshot();
+ });
+
+ it('member expression as selector', () => {
+ const code = getCode(`
+ import styled from "styled-components";
+ import Title from "./Title";
+
+ export default styled.h1\`
+ & > ${'${Title.Small}'} {
+ color: red;
+ }
+ \`;
+ `);
+
+ expect(code).toMatchSnapshot();
+ });
+
+ it('styled(Cmp)', () => {
+ const code = getCode(`
+ import styled from "styled-components";
+ import Cmp from "./Cmp";
+ import Title from "./Title";
+
+ export default styled(Cmp)\`
+ & > ${'${Title}'} {
+ color: red;
+ }
+ \`;
+ `);
+
+ expect(code).toMatchSnapshot();
+ });
+
+ it('styled(Cmp).attrs({})', () => {
+ const code = getCode(`
+ import styled from "styled-components";
+ import Cmp from "./Cmp";
+ import Title from "./Title";
+
+ export default styled(Cmp).attrs(() => ({}))\`
+ & > ${'${Title}'} {
+ color: red;
+ }
+ \`;
+ `);
+
+ expect(code).toMatchSnapshot();
+ });
+
+ it('styled.h1.attrs({})', () => {
+ const code = getCode(`
+ import styled from "styled-components";
+ import Title from "./Title";
+
+ export default styled.h1.attrs(() => ({}))\`
+ & > ${'${Title}'} {
+ color: red;
+ }
+ \`;
+ `);
+
+ expect(code).toMatchSnapshot();
+ });
+});
diff --git a/@linaria/packages/interop/index.js b/@linaria/packages/interop/index.js
new file mode 100644
index 0000000..35eff7e
--- /dev/null
+++ b/@linaria/packages/interop/index.js
@@ -0,0 +1,54 @@
+module.exports = function ({ types: t }, config = {}) {
+ const library = config.library || 'styled-components';
+ const isLibrary =
+ library instanceof RegExp ? (s) => library.test(s) : (s) => s === library;
+ const fixer = {
+ 'MemberExpression|Identifier': (path) => {
+ if (!t.isTemplateLiteral(path.parent) || path.listKey !== 'expressions') {
+ return;
+ }
+
+ const original = path.node;
+ path.replaceWithSourceString(
+ `(i => i && i.__linaria ? '.' + i.__linaria.className : i)('placeholder')`
+ );
+ path.get('arguments.0').replaceWith(original);
+ },
+ };
+
+ return {
+ visitor: {
+ TaggedTemplateExpression(path) {
+ const tag = path.get('tag');
+ let identifier = null;
+ if (t.isIdentifier(tag)) {
+ identifier = tag;
+ } else if (t.isMemberExpression(tag)) {
+ identifier = tag.get('object');
+ } else if (t.isCallExpression(tag)) {
+ identifier = tag.get('callee');
+ }
+
+ if (t.isMemberExpression(identifier)) {
+ // it's something like styled().attrs()
+ if (t.isCallExpression(identifier.node.object)) {
+ identifier = identifier.get('object.callee');
+ } else if (t.isMemberExpression(identifier.node.object)) {
+ identifier = identifier.get('object.object');
+ }
+ }
+
+ const scope = identifier.scope;
+ const binding = scope.getBinding(identifier.node.name);
+ if (!t.isImportDeclaration(binding.path.parent)) {
+ return;
+ }
+
+ const importSource = binding.path.parent.source.value;
+ if (isLibrary(importSource)) {
+ path.get('quasi').traverse(fixer);
+ }
+ },
+ },
+ };
+};
diff --git a/@linaria/packages/interop/package.json b/@linaria/packages/interop/package.json
new file mode 100644
index 0000000..dabcfef
--- /dev/null
+++ b/@linaria/packages/interop/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "@linaria/babel-plugin-interop",
+ "version": "3.0.0-beta.7",
+ "publishConfig": {
+ "access": "public"
+ },
+ "main": "index.js",
+ "repository": "https://github.com/callstack/linaria/tree/master/packages/interop",
+ "homepage": "https://github.com/callstack/linaria/tree/master/packages/interop#readme",
+ "author": {
+ "name": "Anton Evzhakov",
+ "email": "anton@evz.name"
+ },
+ "scripts": {
+ "test": "jest --config ../../jest.config.js --rootDir ."
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "@babel/core": ">=7",
+ "dedent": "^0.7.0"
+ }
+}
diff --git a/@linaria/packages/linaria/CHANGELOG.md b/@linaria/packages/linaria/CHANGELOG.md
new file mode 100644
index 0000000..21e3aa2
--- /dev/null
+++ b/@linaria/packages/linaria/CHANGELOG.md
@@ -0,0 +1,80 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.11](https://github.com/callstack/linaria/compare/v3.0.0-beta.10...v3.0.0-beta.11) (2021-08-08)
+
+**Note:** Version bump only for package linaria
+
+
+
+
+
+# [3.0.0-beta.10](https://github.com/callstack/linaria/compare/v3.0.0-beta.9...v3.0.0-beta.10) (2021-07-24)
+
+**Note:** Version bump only for package linaria
+
+
+
+
+
+# [3.0.0-beta.9](https://github.com/callstack/linaria/compare/v3.0.0-beta.8...v3.0.0-beta.9) (2021-07-23)
+
+**Note:** Version bump only for package linaria
+
+
+
+
+
+# [3.0.0-beta.8](https://github.com/callstack/linaria/compare/v3.0.0-beta.7...v3.0.0-beta.8) (2021-07-18)
+
+**Note:** Version bump only for package linaria
+
+
+
+
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package linaria
+
+
+
+
+
+# [3.0.0-beta.6](https://github.com/callstack/linaria/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-06)
+
+**Note:** Version bump only for package linaria
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+**Note:** Version bump only for package linaria
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package linaria
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package linaria
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package linaria
diff --git a/@linaria/packages/linaria/README.md b/@linaria/packages/linaria/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/linaria/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/linaria/babel.config.js b/@linaria/packages/linaria/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/linaria/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/linaria/babel/package.json b/@linaria/packages/linaria/babel/package.json
new file mode 100644
index 0000000..938e8cf
--- /dev/null
+++ b/@linaria/packages/linaria/babel/package.json
@@ -0,0 +1,5 @@
+{
+ "main": "../lib/babel.js",
+ "module": "../esm/babel.js",
+ "types": "../types/babel.d.ts"
+}
diff --git a/@linaria/packages/linaria/evaluators/package.json b/@linaria/packages/linaria/evaluators/package.json
new file mode 100644
index 0000000..854b331
--- /dev/null
+++ b/@linaria/packages/linaria/evaluators/package.json
@@ -0,0 +1,5 @@
+{
+ "main": "../lib/evaluators.js",
+ "module": "../esm/evaluators.js",
+ "types": "../types/evaluators.d.ts"
+}
diff --git a/@linaria/packages/linaria/loader/package.json b/@linaria/packages/linaria/loader/package.json
new file mode 100644
index 0000000..e9e409d
--- /dev/null
+++ b/@linaria/packages/linaria/loader/package.json
@@ -0,0 +1,5 @@
+{
+ "main": "../lib/webpack4-loader.js",
+ "module": "../esm/webpack4-loader.js",
+ "types": "../types/webpack4-loader.d.ts"
+}
diff --git a/@linaria/packages/linaria/package.json b/@linaria/packages/linaria/package.json
new file mode 100644
index 0000000..19da3a8
--- /dev/null
+++ b/@linaria/packages/linaria/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "linaria",
+ "version": "3.0.0-beta.11",
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/core.js",
+ "module": "esm/core.js",
+ "types": "types/core.d.ts",
+ "files": [
+ "babel",
+ "evaluators",
+ "loader",
+ "react",
+ "rollup",
+ "server",
+ "stylelint-config",
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "dependencies": {
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "@linaria/core": "^3.0.0-beta.4",
+ "@linaria/extractor": "^3.0.0-beta.8",
+ "@linaria/react": "^3.0.0-beta.11",
+ "@linaria/rollup": "^3.0.0-beta.7",
+ "@linaria/server": "^3.0.0-beta.3",
+ "@linaria/shaker": "^3.0.0-beta.11",
+ "@linaria/stylelint": "^3.0.0-beta.7",
+ "@linaria/webpack4-loader": "^3.0.0-beta.7"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7"
+ }
+}
diff --git a/@linaria/packages/linaria/react/package.json b/@linaria/packages/linaria/react/package.json
new file mode 100644
index 0000000..7dd16f2
--- /dev/null
+++ b/@linaria/packages/linaria/react/package.json
@@ -0,0 +1,5 @@
+{
+ "main": "../lib/react.js",
+ "module": "../esm/react.js",
+ "types": "../types/react.d.ts"
+}
diff --git a/@linaria/packages/linaria/rollup/package.json b/@linaria/packages/linaria/rollup/package.json
new file mode 100644
index 0000000..c376587
--- /dev/null
+++ b/@linaria/packages/linaria/rollup/package.json
@@ -0,0 +1,5 @@
+{
+ "main": "../lib/rollup.js",
+ "module": "../esm/rollup.js",
+ "types": "../types/rollup.d.ts"
+}
diff --git a/@linaria/packages/linaria/server/package.json b/@linaria/packages/linaria/server/package.json
new file mode 100644
index 0000000..c7b588d
--- /dev/null
+++ b/@linaria/packages/linaria/server/package.json
@@ -0,0 +1,5 @@
+{
+ "main": "../lib/server.js",
+ "module": "../esm/server.js",
+ "types": "../types/server.d.ts"
+}
diff --git a/@linaria/packages/linaria/src/babel.ts b/@linaria/packages/linaria/src/babel.ts
new file mode 100644
index 0000000..7a05fc1
--- /dev/null
+++ b/@linaria/packages/linaria/src/babel.ts
@@ -0,0 +1,4 @@
+import babel from '@linaria/babel-preset';
+
+export default babel;
+export * from '@linaria/babel-preset';
diff --git a/@linaria/packages/linaria/src/core.ts b/@linaria/packages/linaria/src/core.ts
new file mode 100644
index 0000000..a42a9f7
--- /dev/null
+++ b/@linaria/packages/linaria/src/core.ts
@@ -0,0 +1 @@
+export * from '@linaria/core';
diff --git a/@linaria/packages/linaria/src/evaluators.ts b/@linaria/packages/linaria/src/evaluators.ts
new file mode 100644
index 0000000..92c98da
--- /dev/null
+++ b/@linaria/packages/linaria/src/evaluators.ts
@@ -0,0 +1,4 @@
+import extractor from '@linaria/extractor';
+import shaker from '@linaria/shaker';
+
+export { extractor, shaker };
diff --git a/@linaria/packages/linaria/src/react.ts b/@linaria/packages/linaria/src/react.ts
new file mode 100644
index 0000000..c45484c
--- /dev/null
+++ b/@linaria/packages/linaria/src/react.ts
@@ -0,0 +1 @@
+export * from '@linaria/react';
diff --git a/@linaria/packages/linaria/src/rollup.ts b/@linaria/packages/linaria/src/rollup.ts
new file mode 100644
index 0000000..a9b3d05
--- /dev/null
+++ b/@linaria/packages/linaria/src/rollup.ts
@@ -0,0 +1,4 @@
+import loader from '@linaria/rollup';
+
+export default loader;
+export * from '@linaria/rollup';
diff --git a/@linaria/packages/linaria/src/server.ts b/@linaria/packages/linaria/src/server.ts
new file mode 100644
index 0000000..8442f2a
--- /dev/null
+++ b/@linaria/packages/linaria/src/server.ts
@@ -0,0 +1 @@
+export * from '@linaria/server';
diff --git a/@linaria/packages/linaria/src/stylelint.ts b/@linaria/packages/linaria/src/stylelint.ts
new file mode 100644
index 0000000..64eab59
--- /dev/null
+++ b/@linaria/packages/linaria/src/stylelint.ts
@@ -0,0 +1 @@
+export * from '@linaria/stylelint';
diff --git a/@linaria/packages/linaria/src/webpack4-loader.ts b/@linaria/packages/linaria/src/webpack4-loader.ts
new file mode 100644
index 0000000..6928aea
--- /dev/null
+++ b/@linaria/packages/linaria/src/webpack4-loader.ts
@@ -0,0 +1,4 @@
+import loader from '@linaria/webpack4-loader';
+
+export default loader;
+export * from '@linaria/webpack4-loader';
diff --git a/@linaria/packages/linaria/stylelint-config/package.json b/@linaria/packages/linaria/stylelint-config/package.json
new file mode 100644
index 0000000..6e4226a
--- /dev/null
+++ b/@linaria/packages/linaria/stylelint-config/package.json
@@ -0,0 +1,5 @@
+{
+ "main": "../lib/stylelint.js",
+ "module": "../esm/stylelint.js",
+ "types": "../types/stylelint.d.ts"
+}
diff --git a/@linaria/packages/linaria/tsconfig.json b/@linaria/packages/linaria/tsconfig.json
new file mode 100644
index 0000000..7507a55
--- /dev/null
+++ b/@linaria/packages/linaria/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [
+ { "path": "../babel" },
+ { "path": "../core" },
+ { "path": "../extractor" },
+ { "path": "../react" },
+ { "path": "../rollup" },
+ { "path": "../server" },
+ { "path": "../shaker" },
+ { "path": "../stylelint" },
+ { "path": "../webpack4-loader" }
+ ]
+}
diff --git a/@linaria/packages/logger/CHANGELOG.md b/@linaria/packages/logger/CHANGELOG.md
new file mode 100644
index 0000000..e5ad1d5
--- /dev/null
+++ b/@linaria/packages/logger/CHANGELOG.md
@@ -0,0 +1,8 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/logger
diff --git a/@linaria/packages/logger/README.md b/@linaria/packages/logger/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/logger/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/logger/babel.config.js b/@linaria/packages/logger/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/logger/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/logger/package.json b/@linaria/packages/logger/package.json
new file mode 100644
index 0000000..0e9e3ac
--- /dev/null
+++ b/@linaria/packages/logger/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "@linaria/logger",
+ "version": "3.0.0-beta.3",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "@types/debug": "^4.1.5"
+ },
+ "dependencies": {
+ "debug": "^4.1.1"
+ }
+}
diff --git a/@linaria/packages/logger/src/index.ts b/@linaria/packages/logger/src/index.ts
new file mode 100644
index 0000000..45765bb
--- /dev/null
+++ b/@linaria/packages/logger/src/index.ts
@@ -0,0 +1,63 @@
+import genericDebug from 'debug';
+import type { Debugger } from 'debug';
+
+type LogLevel = 'error' | 'warn' | 'info' | 'debug';
+
+const levels = ['error', 'warn', 'info', 'debug'];
+const currentLevel = levels.indexOf(process.env.LINARIA_LOG || 'error');
+
+const linariaLogger = genericDebug('linaria');
+
+const loggers = new Map<string, Debugger>();
+
+function gerOrCreate(namespace: string | null | undefined): Debugger {
+ if (!namespace) return linariaLogger;
+ const lastIndexOf = namespace.lastIndexOf(':');
+ if (!loggers.has(namespace)) {
+ loggers.set(
+ namespace,
+ gerOrCreate(namespace.substr(0, lastIndexOf)).extend(
+ namespace.substr(lastIndexOf + 1)
+ )
+ );
+ }
+
+ return loggers.get(namespace)!;
+}
+
+const format = <T>(text: T) => {
+ if (typeof text === 'string') {
+ return text.replace(/\n/g, '\n\t');
+ }
+
+ return text;
+};
+
+function log(
+ level: LogLevel,
+ namespaces: string,
+ arg1: any | (() => void),
+ ...restArgs: any[]
+) {
+ if (currentLevel < levels.indexOf(level)) {
+ return;
+ }
+
+ const logger = gerOrCreate(namespaces);
+ if (!logger.enabled) return;
+
+ if (typeof arg1 === 'function') {
+ const text = arg1();
+ if (text) {
+ logger('', format(text), ...restArgs);
+ }
+ return;
+ }
+
+ logger('', format(arg1), ...restArgs);
+}
+
+export const debug = log.bind(null, 'debug');
+export const info = log.bind(null, 'info');
+export const warn = log.bind(null, 'warn');
+export const error = log.bind(null, 'error');
diff --git a/@linaria/packages/logger/tsconfig.json b/@linaria/packages/logger/tsconfig.json
new file mode 100644
index 0000000..3a01f90
--- /dev/null
+++ b/@linaria/packages/logger/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "paths": {},
+ "rootDir": "src/"
+ }
+}
diff --git a/@linaria/packages/preeval/CHANGELOG.md b/@linaria/packages/preeval/CHANGELOG.md
new file mode 100644
index 0000000..831fdd1
--- /dev/null
+++ b/@linaria/packages/preeval/CHANGELOG.md
@@ -0,0 +1,51 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.8](https://github.com/callstack/linaria/compare/v3.0.0-beta.7...v3.0.0-beta.8) (2021-07-18)
+
+
+### Bug Fixes
+
+* **shaker:** named exports are removed (fixes [#800](https://github.com/callstack/linaria/issues/800)) ([#801](https://github.com/callstack/linaria/issues/801)) ([3421930](https://github.com/callstack/linaria/commit/3421930b26608b41a02f8b776562655d755a23b4))
+
+
+
+
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package @linaria/preeval
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+**Note:** Version bump only for package @linaria/preeval
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/preeval
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/preeval
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package @linaria/preeval
diff --git a/@linaria/packages/preeval/README.md b/@linaria/packages/preeval/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/preeval/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/preeval/babel.config.js b/@linaria/packages/preeval/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/preeval/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/preeval/package.json b/@linaria/packages/preeval/package.json
new file mode 100644
index 0000000..5950ec0
--- /dev/null
+++ b/@linaria/packages/preeval/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "@linaria/preeval",
+ "version": "3.0.0-beta.8",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "dependencies": {
+ "@linaria/babel-preset": "^3.0.0-beta.7"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7"
+ }
+}
diff --git a/@linaria/packages/preeval/src/babel.ts b/@linaria/packages/preeval/src/babel.ts
new file mode 100644
index 0000000..d99a54b
--- /dev/null
+++ b/@linaria/packages/preeval/src/babel.ts
@@ -0,0 +1,3 @@
+import type core from '@babel/core';
+
+export type Core = typeof core;
diff --git a/@linaria/packages/preeval/src/index.ts b/@linaria/packages/preeval/src/index.ts
new file mode 100644
index 0000000..6197ce0
--- /dev/null
+++ b/@linaria/packages/preeval/src/index.ts
@@ -0,0 +1,88 @@
+/**
+ * This file is a babel preset used to transform files inside evaluators.
+ * It works the same as main `babel/extract` preset, but do not evaluate lazy dependencies.
+ */
+import type { NodePath } from '@babel/traverse';
+import type { Program, Statement, VariableDeclaration } from '@babel/types';
+import type { State, StrictOptions } from '@linaria/babel-preset';
+import {
+ GenerateClassNames,
+ DetectStyledImportName,
+ JSXElement,
+ ProcessStyled,
+ ProcessCSS,
+} from '@linaria/babel-preset';
+import { Core } from './babel';
+
+const isHoistableExport = (
+ node: NodePath<Statement>
+): node is NodePath<Statement> & NodePath<VariableDeclaration> => {
+ // Only `var` can be hoisted
+ if (!node.isVariableDeclaration({ kind: 'var' })) return false;
+
+ const declarations = node.get('declarations');
+
+ // Our target has only one declaration
+ if (!Array.isArray(declarations) || declarations.length !== 1) return false;
+
+ const init = declarations[0].get('init');
+ // It should be initialized with CallExpression…
+ if (!init || Array.isArray(init) || !init.isCallExpression()) return false;
+
+ const callee = init.get('callee');
+ // … which callee should be `required` …
+ if (Array.isArray(callee) || !callee.isIdentifier({ name: 'require' }))
+ return false;
+
+ // … which should be a global identifier
+ return !callee.scope.hasReference('require');
+};
+
+function index(babel: Core, options: StrictOptions) {
+ return {
+ visitor: {
+ Program: {
+ enter(path: NodePath<Program>, state: State) {
+ // Collect all the style rules from the styles we encounter
+ state.queue = [];
+ state.rules = {};
+ state.index = -1;
+ state.dependencies = [];
+ state.replacements = [];
+
+ // We need our transforms to run before anything else
+ // So we traverse here instead of a in a visitor
+ path.traverse({
+ ImportDeclaration: (p) => DetectStyledImportName(babel, p, state),
+ TaggedTemplateExpression: (p) =>
+ GenerateClassNames(babel, p, state, options),
+ JSXElement,
+ });
+ },
+ exit(path: NodePath<Program>) {
+ /* A really dirty hack that solves https://github.com/callstack/linaria/issues/800
+ * Sometimes babel inserts `require` after usages of required modules.
+ * It makes the shaker sad. As a temporary solution, we hoist requires.
+ * This hack should be deleted after transition `shaker` to @babel/traverse
+ */
+ path
+ .get('body')
+ .filter(isHoistableExport)
+ .forEach((p) => {
+ const node = p.node;
+ p.remove();
+ path.unshiftContainer('body', node);
+ });
+ },
+ },
+ CallExpression: ProcessStyled,
+ TaggedTemplateExpression: ProcessCSS, // TaggedTemplateExpression is processed before CallExpression
+ },
+ };
+}
+
+export default function preset(context: any, options: StrictOptions) {
+ return {
+ plugins: [[index, options]],
+ };
+}
diff --git a/@linaria/packages/preeval/tsconfig.json b/@linaria/packages/preeval/tsconfig.json
new file mode 100644
index 0000000..38139ee
--- /dev/null
+++ b/@linaria/packages/preeval/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [{ "path": "../babel" }]
+}
diff --git a/@linaria/packages/react/CHANGELOG.md b/@linaria/packages/react/CHANGELOG.md
new file mode 100644
index 0000000..6fc0719
--- /dev/null
+++ b/@linaria/packages/react/CHANGELOG.md
@@ -0,0 +1,46 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.11](https://github.com/callstack/linaria/compare/v3.0.0-beta.10...v3.0.0-beta.11) (2021-08-08)
+
+
+### Bug Fixes
+
+* **styled:** remove unnecessary core-js polyfills (fixes [#799](https://github.com/callstack/linaria/issues/799)) ([#814](https://github.com/callstack/linaria/issues/814)) ([6c3070a](https://github.com/callstack/linaria/commit/6c3070a47715022eb761567b8795f6918784ae4c))
+
+
+
+
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package @linaria/react
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/react
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+
+### Bug Fixes
+
+* **core,react:** make IE 11 compatible (fixes [#746](https://github.com/callstack/linaria/issues/746)) ([#750](https://github.com/callstack/linaria/issues/750)) ([922df95](https://github.com/callstack/linaria/commit/922df9576a430cdfe9b27aed5dc45c4f75917607))
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package @linaria/react
diff --git a/@linaria/packages/react/README.md b/@linaria/packages/react/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/react/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/react/__dtslint__/index.d.ts b/@linaria/packages/react/__dtslint__/index.d.ts
new file mode 100644
index 0000000..b57206b
--- /dev/null
+++ b/@linaria/packages/react/__dtslint__/index.d.ts
@@ -0,0 +1,2 @@
+// dtslint wants to see index.d.ts. Well, here it is.
+declare const linaria: any;
diff --git a/@linaria/packages/react/__dtslint__/styled.ts b/@linaria/packages/react/__dtslint__/styled.ts
new file mode 100644
index 0000000..446d3b4
--- /dev/null
+++ b/@linaria/packages/react/__dtslint__/styled.ts
@@ -0,0 +1,135 @@
+/* tslint:disable:no-unnecessary-generics */
+// eslint-disable-next-line import/no-extraneous-dependencies
+import * as React from 'react';
+import { css } from '@linaria/core';
+import { styled } from '../src';
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+function isExtends<C, T>(arg1?: C, arg2?: T): C extends T ? 'extends' : never {
+ // It will never be executed, so the result doesn't matter.
+ return null as any;
+}
+
+const Fabric =
+ <T>(): React.FC<T> =>
+ (props) =>
+ React.createElement('div', props);
+
+const Header = (p: { children: string }) => React.createElement('h1', p);
+
+const Generic = <T>(p: T & { className?: string }) =>
+ React.createElement('h1', p);
+
+const StyledDiv = styled.div``;
+// $ExpectType "extends"
+isExtends<typeof StyledDiv, React.FC<React.DetailedHTMLProps<any, any>>>();
+
+// component should have className property
+// $ExpectError
+styled(Fabric<{ a: string }>())``;
+
+// className property should be string
+// $ExpectError
+styled(Fabric<{ className: number }>())``;
+
+const SimplestComponent = styled(Fabric<{ className: string }>())``;
+// $ExpectType "extends"
+isExtends<typeof SimplestComponent, React.FC<{ className: string }>>();
+
+styled(Fabric<{ className: string }>())`
+ // component should have style property
+ // $ExpectError
+ color: ${() => 'red'};
+`;
+
+styled(Fabric<{ className: string }>())`
+ // it looks like function, but it's a reference to another styled component
+ & > ${SimplestComponent} {
+ color: red;
+ }
+`;
+
+styled(Fabric<{ className: string }>())`
+ // it looks like the previous test, but it references a non-linaria component
+ // $ExpectError
+ & > ${Header} {
+ color: red;
+ }
+`;
+
+styled(Fabric<{ className: string; style: {} }>())`
+ color: ${() => 'red'};
+`;
+
+styled(Fabric<{ className: string; style: {} }>())`
+ // color should be defined in props
+ // $ExpectError
+ color: ${(props) => props.color};
+`;
+
+styled(Fabric<{ className: string; style: {}; color: 'red' | 'blue' }>())`
+ & > ${SimplestComponent} {
+ color: ${(props) => props.color};
+ }
+`;
+
+// $ExpectType number
+Generic({ children: 123 }).props.children;
+
+const StyledGeneric = styled(Generic)``;
+// $ExpectType number
+StyledGeneric({ children: 123 }).props.children;
+
+styled.a`
+ & > ${SimplestComponent} {
+ color: red;
+ }
+`({ href: 'about:blank' });
+
+((/* Issue #536 */) => {
+ const Title = styled.div<{ background: string }>`
+ background: ${(props) => props.background};
+ `;
+
+ // $ExpectType "extends"
+ isExtends<typeof Title, React.FC<{ background: string }>>();
+
+ css`
+ ${Title} {
+ color: green;
+ }
+ `;
+})();
+
+((/* Issue #622 */) => {
+ const Wrapper = styled.div<{ prop1: boolean }>`
+ width: 1em;
+ background-color: ${(props) => (props.prop1 ? 'transparent' : 'green')};
+ `;
+
+ const Custom: React.FC<{ className?: string; id: number }> = () => null;
+
+ const tag = styled(Custom);
+ const Card = tag`
+ ${Wrapper} {
+ color: green;
+ }
+ `;
+
+ // $ExpectType Validator<number> | undefined
+ Card.propTypes!.id;
+
+ const styledTag = styled(Wrapper);
+
+ const NewWrapper = styledTag<{ prop2: string }>`
+ width: 2em;
+ background-color: ${(props) => (props.prop1 ? 'transparent' : 'red')};
+ color: ${(props) => props.prop2};
+ `;
+
+ // $ExpectType Validator<boolean> | undefined
+ NewWrapper.propTypes!.prop1;
+
+ // $ExpectType Validator<string> | undefined
+ NewWrapper.propTypes!.prop2;
+})();
diff --git a/@linaria/packages/react/__dtslint__/tsconfig.json b/@linaria/packages/react/__dtslint__/tsconfig.json
new file mode 100644
index 0000000..dcb273f
--- /dev/null
+++ b/@linaria/packages/react/__dtslint__/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "lib": ["es6"],
+ "esModuleInterop": true,
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictNullChecks": true,
+ "strictFunctionTypes": true,
+ "noEmit": true,
+
+ "baseUrl": "./"
+ }
+}
diff --git a/@linaria/packages/react/__tests__/__snapshots__/styled.test.js.snap b/@linaria/packages/react/__tests__/__snapshots__/styled.test.js.snap
new file mode 100644
index 0000000..e4cd67b
--- /dev/null
+++ b/@linaria/packages/react/__tests__/__snapshots__/styled.test.js.snap
@@ -0,0 +1,143 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`applies CSS variables in style prop 1`] = `
+<div
+ className="abcdefg"
+ size={24}
+ style={
+ Object {
+ "--bar": "20px",
+ "--baz": "24px",
+ "--foo": "tomato",
+ }
+ }
+>
+ This is a test
+</div>
+`;
+
+exports[`does not filter attributes for components 1`] = `
+<div>
+ voila
+</div>
+`;
+
+exports[`does not filter attributes for custom elements 1`] = `
+<my-element
+ className="abcdefg"
+ unknownAttribute="voila"
+>
+ This is a test
+</my-element>
+`;
+
+exports[`filters unknown html attributes for HTML tag 1`] = `
+<div
+ className="abcdefg"
+>
+ This is a test
+</div>
+`;
+
+exports[`forwards as prop when wrapping another styled component 1`] = `
+<a
+ className="hijklmn abcdefg"
+>
+ This is a test
+</a>
+`;
+
+exports[`handles wrapping another styled component 1`] = `
+<div
+ className="hijklmn abcdefg"
+>
+ This is a test
+</div>
+`;
+
+exports[`merges CSS variables with custom style prop 1`] = `
+<div
+ className="abcdefg"
+ style={
+ Object {
+ "--foo": "tomato",
+ "bar": "baz",
+ }
+ }
+>
+ This is a test
+</div>
+`;
+
+exports[`provides linaria component className for composition as last item in props.className 1`] = `
+<div
+ className="some-another-class abcdefg abcdefg--primary abcdefg--accessibility"
+>
+ original classname used for composition
+</div>
+`;
+
+exports[`renders component with display name and class name 1`] = `
+<div
+ className="abcdefg"
+>
+ This is a test
+</div>
+`;
+
+exports[`renders tag with display name and class name 1`] = `
+<h1
+ className="abcdefg"
+>
+ This is a test
+</h1>
+`;
+
+exports[`replaces custom component with as prop for primitive 1`] = `
+<a
+ className="abcdefg"
+ id="test"
+>
+ This is a test
+</a>
+`;
+
+exports[`replaces primitive with as prop for custom component 1`] = `
+<div
+ className="abcdefg"
+ foo="bar"
+ id="test"
+ style={
+ Object {
+ "fontSize": 12,
+ }
+ }
+>
+ This is a test
+</div>
+`;
+
+exports[`replaces simple component with as prop 1`] = `
+<a
+ className="abcdefg"
+ id="test"
+>
+ This is a test
+</a>
+`;
+
+exports[`supports extra class prop 1`] = `
+<div
+ className="primary abcdefg"
+>
+ This is a test
+</div>
+`;
+
+exports[`supports extra className prop 1`] = `
+<div
+ className="primary abcdefg"
+>
+ This is a test
+</div>
+`;
diff --git a/@linaria/packages/react/__tests__/detect-core-js.test.js b/@linaria/packages/react/__tests__/detect-core-js.test.js
new file mode 100644
index 0000000..22bfbe4
--- /dev/null
+++ b/@linaria/packages/react/__tests__/detect-core-js.test.js
@@ -0,0 +1,35 @@
+import cp from 'child_process';
+
+const waitForProcess = async (process) => {
+ return new Promise((resolve) => {
+ let output = '';
+ process.stdout.on('data', (chunk) => {
+ output += chunk.toString();
+ });
+ process.on('close', () => {
+ resolve(output);
+ });
+ });
+};
+
+it('Ensures that package do not include core-js dependency after build', async () => {
+ // eslint-disable-next-line import/no-extraneous-dependencies
+ const packageJSON = require('@linaria/babel-preset/package.json');
+ const buildScript = packageJSON.scripts['build:lib'];
+
+ const proc = cp.exec(buildScript, {
+ stdio: 'ignore',
+ env: {
+ ...process.env,
+ DEBUG_CORE_JS: 'true',
+ },
+ });
+ const result = await waitForProcess(proc);
+ // run `DEBUG_CORE_JS=true yarn build:lib` to debug issues with introduced core-js dependency
+ expect(result).not.toContain(
+ 'The corejs3 polyfill added the following polyfills'
+ );
+ expect(result).toContain(
+ 'Based on your code and targets, the corejs3 polyfill did not add any polyfill'
+ );
+}, 15000);
diff --git a/@linaria/packages/react/__tests__/styled.test.js b/@linaria/packages/react/__tests__/styled.test.js
new file mode 100644
index 0000000..8f38ab2
--- /dev/null
+++ b/@linaria/packages/react/__tests__/styled.test.js
@@ -0,0 +1,256 @@
+const React = require('react');
+const renderer = require('react-test-renderer');
+const styled = require('../src').styled;
+
+it('renders tag with display name and class name', () => {
+ const Test = styled('h1')({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ expect(Test.displayName).toBe('TestComponent');
+ expect(Test.__linaria.className).toBe('abcdefg');
+ expect(Test.__linaria.extends).toBe('h1');
+
+ const tree = renderer.create(<Test>This is a test</Test>);
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('renders component with display name and class name', () => {
+ const Custom = (props) => <div {...props} />;
+
+ const Test = styled(Custom)({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ expect(Test.displayName).toBe('TestComponent');
+ expect(Test.__linaria.className).toBe('abcdefg');
+ expect(Test.__linaria.extends).toBe(Custom);
+
+ const tree = renderer.create(<Test>This is a test</Test>);
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('applies CSS variables in style prop', () => {
+ const Test = styled('div')({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ vars: {
+ foo: ['tomato'],
+ bar: [20, 'px'],
+ baz: [(props) => props.size, 'px'],
+ },
+ });
+
+ const tree = renderer.create(<Test size={24}>This is a test</Test>);
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('merges CSS variables with custom style prop', () => {
+ const Test = styled('div')({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ vars: {
+ foo: ['tomato'],
+ },
+ });
+
+ const tree = renderer.create(
+ <Test style={{ bar: 'baz' }}>This is a test</Test>
+ );
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('supports extra className prop', () => {
+ const Test = styled('div')({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ const tree = renderer.create(<Test className="primary">This is a test</Test>);
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('supports extra class prop', () => {
+ const Test = styled('div')({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ const tree = renderer.create(<Test class="primary">This is a test</Test>);
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('replaces simple component with as prop', () => {
+ const Test = styled('button')({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ const tree = renderer.create(
+ <Test as="a" id="test" foo="bar">
+ This is a test
+ </Test>
+ );
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('replaces custom component with as prop for primitive', () => {
+ const Custom = (props) => <div {...props} style={{ fontSize: 12 }} />;
+
+ const Test = styled(Custom)({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ const tree = renderer.create(
+ <Test as="a" id="test" foo="bar">
+ This is a test
+ </Test>
+ );
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('replaces primitive with as prop for custom component', () => {
+ const Custom = (props) => <div {...props} style={{ fontSize: 12 }} />;
+
+ const Test = styled('div')({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ const tree = renderer.create(
+ <Test as={Custom} id="test" foo="bar">
+ This is a test
+ </Test>
+ );
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('handles wrapping another styled component', () => {
+ const First = styled('div')({
+ name: 'FirstComponent',
+ class: 'abcdefg',
+ });
+
+ const Second = styled(First)({
+ name: 'SecondComponent',
+ class: 'hijklmn',
+ });
+
+ const tree = renderer.create(<Second>This is a test</Second>);
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('forwards as prop when wrapping another styled component', () => {
+ const First = styled('div')({
+ name: 'FirstComponent',
+ class: 'abcdefg',
+ });
+
+ const Second = styled(First)({
+ name: 'SecondComponent',
+ class: 'hijklmn',
+ });
+
+ const tree = renderer.create(<Second as="a">This is a test</Second>);
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('filters unknown html attributes for HTML tag', () => {
+ const Test = styled('div')({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ const tree = renderer.create(
+ <Test unknownAttribute="voila">This is a test</Test>
+ );
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('does not filter attributes for custom elements', () => {
+ const Test = styled('my-element')({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ const tree = renderer.create(
+ <Test unknownAttribute="voila">This is a test</Test>
+ );
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('does not filter attributes for components', () => {
+ const Custom = (props) => <div>{props.unknownAttribute}</div>;
+
+ const Test = styled(Custom)({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ const tree = renderer.create(
+ <Test unknownAttribute="voila">This is a test</Test>
+ );
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('provides linaria component className for composition as last item in props.className', () => {
+ const Custom = (props) => {
+ const classnames = props.className.split(' ');
+ const linariaClassName = classnames[classnames.length - 1];
+ const newClassNames = [
+ props.className,
+ `${linariaClassName}--primary`,
+ `${linariaClassName}--accessibility`,
+ ].join(' ');
+
+ return (
+ <div className={newClassNames}>
+ original classname used for composition
+ </div>
+ );
+ };
+
+ const Test = styled(Custom)({
+ name: 'TestComponent',
+ class: 'abcdefg',
+ });
+
+ const tree = renderer.create(
+ <Test className="some-another-class">This is a test</Test>
+ );
+
+ expect(tree.toJSON()).toMatchSnapshot();
+});
+
+it('throws when using as tag for template literal', () => {
+ expect(
+ () =>
+ styled('div')`
+ color: blue;
+ `
+ ).toThrow('Using the "styled" tag in runtime is not supported');
+
+ expect(
+ () =>
+ styled.div`
+ color: blue;
+ `
+ ).toThrow('Using the "styled" tag in runtime is not supported');
+});
diff --git a/@linaria/packages/react/babel.config.js b/@linaria/packages/react/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/react/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/react/package.json b/@linaria/packages/react/package.json
new file mode 100644
index 0000000..aaea46f
--- /dev/null
+++ b/@linaria/packages/react/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "@linaria/react",
+ "version": "3.0.0-beta.11",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "sideEffects": false,
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types/index.d.ts",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "test": "jest --config ../../jest.config.js --rootDir .",
+ "test:dts": "dtslint --localTs ../../node_modules/typescript/lib __dtslint__",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "@types/react": ">=16",
+ "react": "^16.13.1",
+ "react-test-renderer": "^16.8.3"
+ },
+ "dependencies": {
+ "@emotion/is-prop-valid": "^0.8.8",
+ "@linaria/core": "^3.0.0-beta.4"
+ },
+ "peerDependencies": {
+ "react": ">=16"
+ }
+}
diff --git a/@linaria/packages/react/src/index.ts b/@linaria/packages/react/src/index.ts
new file mode 100644
index 0000000..bece49d
--- /dev/null
+++ b/@linaria/packages/react/src/index.ts
@@ -0,0 +1,2 @@
+export { default as styled } from './styled';
+export type { CSSProperties } from '@linaria/core';
diff --git a/@linaria/packages/react/src/styled.ts b/@linaria/packages/react/src/styled.ts
new file mode 100644
index 0000000..1bcbe02
--- /dev/null
+++ b/@linaria/packages/react/src/styled.ts
@@ -0,0 +1,224 @@
+/**
+ * This file contains an runtime version of `styled` component. Responsibilities of the component are:
+ * - returns ReactElement based on HTML tag used with `styled` or custom React Component
+ * - injects classNames for the returned component
+ * - injects CSS variables used to define dynamic styles based on props
+ */
+import React from 'react';
+import validAttr from '@emotion/is-prop-valid';
+import { cx } from '@linaria/core';
+import type { CSSProperties, StyledMeta } from '@linaria/core';
+
+export type NoInfer<A extends any> = [A][A extends any ? 0 : never];
+
+type Options = {
+ name: string;
+ class: string;
+ vars?: {
+ [key: string]: [
+ string | number | ((props: unknown) => string | number),
+ string | void
+ ];
+ };
+};
+
+// Workaround for rest operator
+const restOp = (
+ obj: Record<string, unknown>,
+ keysToExclude: string[]
+): Record<string, unknown> =>
+ Object.keys(obj)
+ .filter((prop) => keysToExclude.indexOf(prop) === -1)
+ .reduce((acc, curr) => {
+ acc[curr] = obj[curr];
+ return acc;
+ }, {} as Record<string, unknown>); // rest operator workaround
+
+const warnIfInvalid = (value: any, componentName: string) => {
+ if (process.env.NODE_ENV !== 'production') {
+ if (
+ typeof value === 'string' ||
+ // eslint-disable-next-line no-self-compare
+ (typeof value === 'number' && isFinite(value))
+ ) {
+ return;
+ }
+
+ const stringified =
+ typeof value === 'object' ? JSON.stringify(value) : String(value);
+
+ // eslint-disable-next-line no-console
+ console.warn(
+ `An interpolation evaluated to '${stringified}' in the component '${componentName}', which is probably a mistake. You should explicitly cast or transform the value to a string.`
+ );
+ }
+};
+
+interface IProps {
+ className?: string;
+ style?: Record<string, string>;
+ [props: string]: unknown;
+}
+
+// If styled wraps custom component, that component should have className property
+function styled<TConstructor extends React.FunctionComponent<any>>(
+ tag: TConstructor extends React.FunctionComponent<infer T>
+ ? T extends { className?: string }
+ ? TConstructor
+ : never
+ : never
+): ComponentStyledTag<TConstructor>;
+function styled<T>(
+ tag: T extends { className?: string } ? React.ComponentType<T> : never
+): ComponentStyledTag<T>;
+function styled<TName extends keyof JSX.IntrinsicElements>(
+ tag: TName
+): HtmlStyledTag<TName>;
+function styled(tag: any): any {
+ return (options: Options) => {
+ if (process.env.NODE_ENV !== 'production') {
+ if (Array.isArray(options)) {
+ // We received a strings array since it's used as a tag
+ throw new Error(
+ 'Using the "styled" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly. See https://github.com/callstack/linaria#setup'
+ );
+ }
+ }
+
+ const render = (props: any, ref: any) => {
+ const { as: component = tag, class: className } = props;
+ const rest = restOp(props, ['as', 'class']);
+ let filteredProps: IProps;
+
+ // Check if it's an HTML tag and not a custom element
+ if (typeof component === 'string' && component.indexOf('-') === -1) {
+ filteredProps = {} as { [key: string]: any };
+
+ // eslint-disable-next-line guard-for-in
+ for (const key in rest) {
+ if (key === 'as' || validAttr(key)) {
+ // Don't pass through invalid attributes to HTML elements
+ filteredProps[key] = rest[key];
+ }
+ }
+ } else {
+ filteredProps = rest;
+ }
+
+ filteredProps.ref = ref;
+ filteredProps.className = cx(
+ filteredProps.className || className,
+ options.class
+ );
+
+ const { vars } = options;
+
+ if (vars) {
+ const style: { [key: string]: string } = {};
+
+ // eslint-disable-next-line guard-for-in
+ for (const name in vars) {
+ const variable = vars[name];
+ const result = variable[0];
+ const unit = variable[1] || '';
+ const value = typeof result === 'function' ? result(props) : result;
+
+ warnIfInvalid(value, options.name);
+
+ style[`--${name}`] = `${value}${unit}`;
+ }
+
+ const ownStyle = filteredProps.style || {};
+ const keys = Object.keys(ownStyle);
+ if (keys.length > 0) {
+ keys.forEach((key) => {
+ style[key] = ownStyle[key];
+ });
+ }
+
+ filteredProps.style = style;
+ }
+
+ if ((tag as any).__linaria && tag !== component) {
+ // If the underlying tag is a styled component, forward the `as` prop
+ // Otherwise the styles from the underlying component will be ignored
+ filteredProps.as = component;
+
+ return React.createElement(tag, filteredProps);
+ }
+ return React.createElement(component, filteredProps);
+ };
+
+ const Result = React.forwardRef
+ ? React.forwardRef(render)
+ : // React.forwardRef won't available on older React versions and in Preact
+ // Fallback to a innerRef prop in that case
+ (props: any) => {
+ const rest = restOp(props, ['innerRef']);
+ return render(rest, props.innerRef);
+ };
+
+ (Result as any).displayName = options.name;
+
+ // These properties will be read by the babel plugin for interpolation
+ (Result as any).__linaria = {
+ className: options.class,
+ extends: tag,
+ };
+
+ return Result;
+ };
+}
+
+type StyledComponent<T> = StyledMeta &
+ (T extends React.FunctionComponent<any>
+ ? T
+ : React.FunctionComponent<T & { as?: React.ElementType }>);
+
+type StaticPlaceholder = string | number | CSSProperties | StyledMeta;
+
+type HtmlStyledTag<TName extends keyof JSX.IntrinsicElements> = <
+ TAdditionalProps = {}
+>(
+ strings: TemplateStringsArray,
+ ...exprs: Array<
+ | StaticPlaceholder
+ | ((
+ // Without Omit here TS tries to infer TAdditionalProps
+ // from a component passed for interpolation
+ props: JSX.IntrinsicElements[TName] & Omit<TAdditionalProps, never>
+ ) => string | number)
+ >
+) => StyledComponent<JSX.IntrinsicElements[TName] & TAdditionalProps>;
+
+type ComponentStyledTag<T> = <
+ OwnProps = {},
+ TrgProps = T extends React.FunctionComponent<infer TProps> ? TProps : T
+>(
+ strings: TemplateStringsArray,
+ // Expressions can contain functions only if wrapped component has style property
+ ...exprs: TrgProps extends { style?: React.CSSProperties }
+ ? Array<
+ | StaticPlaceholder
+ | ((props: NoInfer<OwnProps & TrgProps>) => string | number)
+ >
+ : StaticPlaceholder[]
+) => keyof OwnProps extends never
+ ? T extends React.FunctionComponent<any>
+ ? StyledMeta & T
+ : StyledComponent<TrgProps>
+ : StyledComponent<OwnProps & TrgProps>;
+
+type StyledJSXIntrinsics = {
+ readonly [P in keyof JSX.IntrinsicElements]: HtmlStyledTag<P>;
+};
+
+export type Styled = typeof styled & StyledJSXIntrinsics;
+
+export default (process.env.NODE_ENV !== 'production'
+ ? new Proxy(styled, {
+ get(o, prop: keyof JSX.IntrinsicElements) {
+ return o(prop);
+ },
+ })
+ : styled) as Styled;
diff --git a/@linaria/packages/react/tsconfig.json b/@linaria/packages/react/tsconfig.json
new file mode 100644
index 0000000..61b3298
--- /dev/null
+++ b/@linaria/packages/react/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "paths": {},
+ "rootDir": "src/"
+ },
+ "references": [{ "path": "../core" }]
+}
diff --git a/@linaria/packages/rollup/CHANGELOG.md b/@linaria/packages/rollup/CHANGELOG.md
new file mode 100644
index 0000000..2918312
--- /dev/null
+++ b/@linaria/packages/rollup/CHANGELOG.md
@@ -0,0 +1,51 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package @linaria/rollup
+
+
+
+
+
+# [3.0.0-beta.6](https://github.com/callstack/linaria/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-06)
+
+
+### Bug Fixes
+
+* **rollup:** compliant vite ([#763](https://github.com/callstack/linaria/issues/763)) ([3966dcf](https://github.com/callstack/linaria/commit/3966dcf03919430a7054ee7d6cf54aeaa715413c))
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+**Note:** Version bump only for package @linaria/rollup
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/rollup
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/rollup
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package @linaria/rollup
diff --git a/@linaria/packages/rollup/README.md b/@linaria/packages/rollup/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/rollup/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/rollup/babel.config.js b/@linaria/packages/rollup/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/rollup/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/rollup/package.json b/@linaria/packages/rollup/package.json
new file mode 100644
index 0000000..26656bc
--- /dev/null
+++ b/@linaria/packages/rollup/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "@linaria/rollup",
+ "version": "3.0.0-beta.7",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel",
+ "rollup"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "@types/estree": "^0.0.45",
+ "rollup": "1.20.0||^2.0.0"
+ },
+ "dependencies": {
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "@rollup/pluginutils": "^4.1.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7"
+ }
+}
diff --git a/@linaria/packages/rollup/src/index.ts b/@linaria/packages/rollup/src/index.ts
new file mode 100644
index 0000000..64ba9fc
--- /dev/null
+++ b/@linaria/packages/rollup/src/index.ts
@@ -0,0 +1,70 @@
+/**
+ * This file contains a Rollup loader for Linaria.
+ * It uses the transform.ts function to generate class names from source code,
+ * returns transformed code without template literals and attaches generated source maps
+ */
+
+import { createFilter } from '@rollup/pluginutils';
+import { transform, slugify, Result } from '@linaria/babel-preset';
+import type { PluginOptions, Preprocessor } from '@linaria/babel-preset';
+
+type RollupPluginOptions = {
+ include?: string | string[];
+ exclude?: string | string[];
+ sourceMap?: boolean;
+ preprocessor?: Preprocessor;
+} & Partial<PluginOptions>;
+
+export default function linaria({
+ include,
+ exclude,
+ sourceMap,
+ preprocessor,
+ ...rest
+}: RollupPluginOptions = {}) {
+ const filter = createFilter(include, exclude);
+ const cssLookup: { [key: string]: string } = {};
+
+ return {
+ name: 'linaria',
+ load(id: string) {
+ return cssLookup[id];
+ },
+ /* eslint-disable-next-line consistent-return */
+ resolveId(importee: string) {
+ if (importee in cssLookup) return importee;
+ },
+ transform(
+ code: string,
+ id: string
+ ): { code: string; map: Result['sourceMap'] } | undefined {
+ // Do not transform ignored and generated files
+ if (!filter(id) || id in cssLookup) return;
+
+ const result = transform(code, {
+ filename: id,
+ preprocessor,
+ pluginOptions: rest,
+ });
+
+ if (!result.cssText) return;
+
+ let { cssText } = result;
+
+ const slug = slugify(cssText);
+ const filename = `@linaria:${id.replace(/\.js$/, '')}_${slug}.css`;
+
+ if (sourceMap && result.cssSourceMapText) {
+ const map = Buffer.from(result.cssSourceMapText).toString('base64');
+ cssText += `/*# sourceMappingURL=data:application/json;base64,${map}*/`;
+ }
+
+ cssLookup[filename] = cssText;
+
+ result.code += `\nimport ${JSON.stringify(filename)};\n`;
+
+ /* eslint-disable-next-line consistent-return */
+ return { code: result.code, map: result.sourceMap };
+ },
+ };
+}
diff --git a/@linaria/packages/rollup/tsconfig.json b/@linaria/packages/rollup/tsconfig.json
new file mode 100644
index 0000000..38139ee
--- /dev/null
+++ b/@linaria/packages/rollup/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [{ "path": "../babel" }]
+}
diff --git a/@linaria/packages/server/CHANGELOG.md b/@linaria/packages/server/CHANGELOG.md
new file mode 100644
index 0000000..2596d9e
--- /dev/null
+++ b/@linaria/packages/server/CHANGELOG.md
@@ -0,0 +1,8 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/server
diff --git a/@linaria/packages/server/README.md b/@linaria/packages/server/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/server/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/server/__tests__/__snapshots__/collect.test.ts.snap b/@linaria/packages/server/__tests__/__snapshots__/collect.test.ts.snap
new file mode 100644
index 0000000..c5ff639
--- /dev/null
+++ b/@linaria/packages/server/__tests__/__snapshots__/collect.test.ts.snap
@@ -0,0 +1,300 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`classname in @rule critical 1`] = `
+"@supports (object-fit: cover) {
+ .linaria {
+ }
+}
+@media (min-width: 600px) {
+ .linaria {
+ }
+}
+@charset() {
+ .linaria {
+ }
+}
+@import() {
+ .linaria {
+ }
+}
+@namespace () {
+ .linaria {
+ }
+}
+@media() {
+ .linaria {
+ }
+}
+@supports () {
+ .linaria {
+ }
+}
+@document() {
+ .linaria {
+ }
+}
+@page() {
+ .linaria {
+ }
+}
+@viewport() {
+ .linaria {
+ }
+}
+@counter-style() {
+ .linaria {
+ }
+}
+@font-feature-values() {
+ .linaria {
+ }
+}
+"
+`;
+
+exports[`classname in @rule other 1`] = `
+"@supports (object-fit: cover) {
+ .other {
+ }
+}
+@media (min-width: 600px) {
+ .other {
+ }
+}
+@charset() {
+ .other {
+ }
+}
+@import() {
+ .other {
+ }
+}
+@namespace () {
+ .other {
+ }
+}
+@media() {
+ .other {
+ }
+}
+@supports () {
+ .other {
+ }
+}
+@document() {
+ .other {
+ }
+}
+@page() {
+ .other {
+ }
+}
+@viewport() {
+ .other {
+ }
+}
+@counter-style() {
+ .other {
+ }
+}
+@font-feature-values() {
+ .other {
+ }
+}
+"
+`;
+
+exports[`collects complex css critical 1`] = `
+".lotus {
+ vertical-align: top;
+}
+@media (max-width: 1200px) {
+ .lotus {
+ vertical-align: bottom;
+ }
+}
+@supports (object-fit: contain) {
+ .lotus {
+ object-fit: contain;
+ }
+
+ .linaria::before,
+ .linaria::after {
+ content: \\"\\";
+ object-fit: contain;
+ }
+}
+.linaria {
+ float: left;
+ flex: 1;
+ animation: custom-animation 0.2s;
+}
+.linaria:hover {
+ float: right;
+}
+.linaria > span,
+.linaria + .linaria,
+.linaria ~ div {
+ display: none;
+}
+.linaria > span {
+ display: none;
+}
+.linaria::after {
+ display: block;
+}
+.lily {
+ color: #fff;
+}
+[data-theme=\\"dark\\"] .lily {
+ color: #000;
+}
+.linaria ~ div {
+}
+.linaria.linaria2 {
+}
+@keyframes custom-animation {
+ 0% {
+ opacity: 0;
+ }
+ 50% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+"
+`;
+
+exports[`collects complex css other 1`] = `
+"@supports (object-fit: cover) {
+ .unrelated-nested {
+ float: left;
+ animation: custom-animation;
+ }
+
+ .unrelated-nested2 {
+ float: left;
+ }
+}
+
+.unrelated {
+ animation-name: custom-animation;
+}
+
+.unrelated2 {
+ animation: custom-animation 0.3s;
+}
+
+.unrelated3 {
+ flex: 0;
+}
+"
+`;
+
+exports[`handles top-level @font-face critical 1`] = `
+"@font-face {
+ font-family: MyFont;
+ font-weight: normal;
+ font-style: normal;
+ src: url(MyFont.woff);
+}
+"
+`;
+
+exports[`handles top-level @font-face other 1`] = `""`;
+
+exports[`include atrule once critical 1`] = `
+"@media screen {
+ body {
+ font-size: 10px;
+ }
+ h1 {
+ font-size: 20px;
+ }
+ .class {
+ font-size: 15px;
+ }
+}
+"
+`;
+
+exports[`include atrule once other 1`] = `""`;
+
+exports[`simple class name critical 1`] = `
+".linaria {
+}
+"
+`;
+
+exports[`simple class name other 1`] = `
+".classname {
+}
+"
+`;
+
+exports[`works with CSS combinators critical 1`] = `
+".linaria + span {
+}
+.linaria ~ div {
+}
+.linaria > a {
+}
+.linaria b {
+}
+"
+`;
+
+exports[`works with CSS combinators other 1`] = `
+".other + span {
+}
+.other ~ div {
+}
+.other > a {
+}
+.other b {
+}
+"
+`;
+
+exports[`works with global css critical 1`] = `
+"body {
+ font-size: 13.37px;
+}
+html {
+ -webkit-font-smoothing: antialiased;
+}
+h1 {
+ font-weight: bold;
+}
+.linaria:active {
+}
+.linaria::before {
+}
+"
+`;
+
+exports[`works with global css other 1`] = `
+".other:active {
+}
+.other::before {
+}
+"
+`;
+
+exports[`works with pseudo-class and pseudo-elements critical 1`] = `
+".linaria:active {
+}
+.linaria::before {
+}
+"
+`;
+
+exports[`works with pseudo-class and pseudo-elements other 1`] = `
+".other:active {
+}
+.other::before {
+}
+"
+`;
diff --git a/@linaria/packages/server/__tests__/collect.test.ts b/@linaria/packages/server/__tests__/collect.test.ts
new file mode 100644
index 0000000..ba5208e
--- /dev/null
+++ b/@linaria/packages/server/__tests__/collect.test.ts
@@ -0,0 +1,235 @@
+import dedent from 'dedent';
+import prettier from 'prettier';
+import collect from '../src/collect';
+
+const prettyPrint = (src: string) => prettier.format(src, { parser: 'scss' });
+
+const testCollect = (html: string, css: string) => {
+ const { critical, other } = collect(html, css);
+ test('critical', () => expect(prettyPrint(critical)).toMatchSnapshot());
+ test('other', () => expect(prettyPrint(other)).toMatchSnapshot());
+};
+
+const html = dedent`
+ <div class="linaria lily">
+ <span class="lotus"></div>
+ </div>
+`;
+
+describe('collects complex css', () => {
+ const css = dedent`
+ .lotus {
+ vertical-align: top;
+ }
+
+ @media (max-width: 1200px) {
+ .lotus {
+ vertical-align: bottom;
+ }
+ }
+
+ @supports (object-fit: cover) {
+ .unrelated-nested {
+ float: left;
+ animation: custom-animation;
+ }
+
+ .unrelated-nested2 {
+ float: left;
+ }
+ }
+
+ @supports (object-fit: contain) {
+ .lotus {
+ object-fit: contain;
+ }
+
+ .linaria::before,
+ .linaria::after {
+ content: '';
+ object-fit: contain;
+ }
+ }
+
+ @keyframes custom-animation {
+ 0% { opacity: 0 }
+ 50% { opacity: 0 }
+ 100% { opacity: 1 }
+ }
+
+ .linaria {
+ float: left;
+ flex: 1;
+ animation: custom-animation .2s;
+ }
+
+ .linaria:hover {
+ float: right;
+ }
+
+ .linaria > span,
+ .linaria + .linaria,
+ .linaria ~ div {
+ display: none;
+ }
+
+ .linaria > span {
+ display: none;
+ }
+
+ .linaria::after {
+ display: block;
+ }
+
+ .unrelated {
+ animation-name: custom-animation;
+ }
+
+ .unrelated2 {
+ animation: custom-animation .3s;
+ }
+
+ .lily {
+ color: #fff;
+ }
+
+ [data-theme=dark] .lily {
+ color: #000;
+ }
+
+ .unrelated3 {
+ flex: 0;
+ }
+
+ .linaria ~ div {}
+ .linaria.linaria2{}
+ `;
+
+ testCollect(html, css);
+});
+
+describe('simple class name', () => {
+ const css = dedent`
+ .linaria {}
+ .classname {}
+ `;
+
+ testCollect(html, css);
+});
+
+describe('classname in @rule', () => {
+ const css = dedent`
+ @supports (object-fit: cover) { .linaria {} }
+ @media (min-width: 600px) { .linaria {} }
+ @charset () { .linaria {} }
+ @import () { .linaria {} }
+ @namespace () { .linaria {} }
+ @media () { .linaria {} }
+ @supports () { .linaria {} }
+ @document () { .linaria {} }
+ @page () { .linaria {} }
+ @keyframes () { .linaria {} }
+ @viewport () { .linaria {} }
+ @counter-style () { .linaria {} }
+ @font-feature-values () { .linaria {} }
+
+ @supports (object-fit: cover) { .other {} }
+ @media (min-width: 600px) { .other {} }
+ @charset () { .other {} }
+ @import () { .other {} }
+ @namespace () { .other {} }
+ @media () { .other {} }
+ @supports () { .other {} }
+ @document () { .other {} }
+ @page () { .other {} }
+ @keyframes () { .other {} }
+ @viewport () { .other {} }
+ @counter-style () { .other {} }
+ @font-feature-values () { .other {} }
+ `;
+
+ testCollect(html, css);
+});
+
+describe('works with CSS combinators', () => {
+ const css = dedent`
+ .linaria + span {}
+ .linaria ~ div {}
+ .linaria > a {}
+ .linaria b {}
+
+ .other + span {}
+ .other ~ div {}
+ .other > a {}
+ .other b {}
+ `;
+ testCollect(html, css);
+});
+
+describe('works with pseudo-class and pseudo-elements', () => {
+ const css = dedent`
+ .linaria:active {}
+ .linaria::before {}
+
+ .other:active {}
+ .other::before {}
+ `;
+ testCollect(html, css);
+});
+
+describe('works with global css', () => {
+ const css = dedent`
+ body { font-size: 13.37px; }
+
+ html { -webkit-font-smoothing: antialiased; }
+
+ h1 { font-weight: bold; }
+
+ .linaria:active {}
+ .linaria::before {}
+
+ .other:active {}
+ .other::before {}
+ `;
+
+ const { critical, other } = collect(html, css);
+
+ test('critical', () => expect(prettyPrint(critical)).toMatchSnapshot());
+ test('other', () => expect(prettyPrint(other)).toMatchSnapshot());
+});
+
+describe('handles top-level @font-face', () => {
+ const css = dedent`
+ @font-face {
+ font-family: MyFont;
+ font-weight: normal;
+ font-style: normal;
+ src: url(MyFont.woff);
+ }
+ `;
+ const { critical, other } = collect(html, css);
+
+ test('critical', () => expect(prettyPrint(critical)).toMatchSnapshot());
+ test('other', () => expect(prettyPrint(other)).toMatchSnapshot());
+});
+
+// there was a bug when the whole atrule was included for each child rule
+describe('include atrule once', () => {
+ const css = dedent`
+ @media screen {
+ body {
+ font-size: 10px;
+ }
+ h1 {
+ font-size: 20px;
+ }
+ .class {
+ font-size: 15px;
+ }
+ }
+ `;
+ const { critical, other } = collect(html, css);
+
+ test('critical', () => expect(prettyPrint(critical)).toMatchSnapshot());
+ test('other', () => expect(prettyPrint(other)).toMatchSnapshot());
+});
diff --git a/@linaria/packages/server/babel.config.js b/@linaria/packages/server/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/server/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/server/package.json b/@linaria/packages/server/package.json
new file mode 100644
index 0000000..162ea40
--- /dev/null
+++ b/@linaria/packages/server/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "@linaria/server",
+ "version": "3.0.0-beta.3",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "@types/dedent": "^0.7.0",
+ "dedent": "^0.7.0",
+ "prettier": "^2.0.5"
+ },
+ "dependencies": {
+ "postcss": "^7.0.14"
+ }
+}
diff --git a/@linaria/packages/server/src/collect.ts b/@linaria/packages/server/src/collect.ts
new file mode 100644
index 0000000..5d2b197
--- /dev/null
+++ b/@linaria/packages/server/src/collect.ts
@@ -0,0 +1,115 @@
+/**
+ * This utility extracts critical CSS from given HTML and CSS file to be used in SSR environments
+ */
+
+import type { AtRule, ChildNode } from 'postcss';
+import postcss from 'postcss';
+
+type CollectResult = {
+ critical: string;
+ other: string;
+};
+
+export default function collect(html: string, css: string): CollectResult {
+ const animations = new Set();
+ const other = postcss.root();
+ const critical = postcss.root();
+ const stylesheet = postcss.parse(css);
+ const htmlClassesRegExp = extractClassesFromHtml(html);
+
+ const isCritical = (rule: ChildNode) => {
+ // Only check class names selectors
+ if ('selector' in rule && rule.selector.startsWith('.')) {
+ return Boolean(rule.selector.match(htmlClassesRegExp));
+ }
+
+ return true;
+ };
+
+ const handleAtRule = (rule: AtRule) => {
+ let addedToCritical = false;
+
+ rule.each((childRule) => {
+ if (isCritical(childRule) && !addedToCritical) {
+ critical.append(rule.clone());
+ addedToCritical = true;
+ }
+ });
+
+ if (rule.name === 'keyframes') {
+ return;
+ }
+
+ if (addedToCritical) {
+ rule.remove();
+ } else {
+ other.append(rule);
+ }
+ };
+
+ stylesheet.walkAtRules('font-face', (rule) => {
+ /**
+ * @font-face rules may be defined also in CSS conditional groups (eg. @media)
+ * we want only handle those from top-level, rest will be handled in stylesheet.walkRules
+ */
+ if (rule.parent.type === 'root') {
+ critical.append(rule);
+ }
+ });
+
+ const walkedAtRules = new Set();
+
+ stylesheet.walkRules((rule) => {
+ if ('name' in rule.parent && rule.parent.name === 'keyframes') {
+ return;
+ }
+
+ if (rule.parent.type === 'atrule') {
+ if (!walkedAtRules.has(rule.parent)) {
+ handleAtRule(rule.parent);
+ walkedAtRules.add(rule.parent);
+ }
+ return;
+ }
+
+ if (isCritical(rule)) {
+ critical.append(rule);
+ } else {
+ other.append(rule);
+ }
+ });
+
+ critical.walkDecls(/animation/, (decl) => {
+ animations.add(decl.value.split(' ')[0]);
+ });
+
+ stylesheet.walkAtRules('keyframes', (rule) => {
+ if (animations.has(rule.params)) {
+ critical.append(rule);
+ }
+ });
+
+ return {
+ critical: critical.toString(),
+ other: other.toString(),
+ };
+}
+
+const extractClassesFromHtml = (html: string): RegExp => {
+ const htmlClasses: string[] = [];
+ const regex = /\s+class="([^"]*)"/gm;
+ let match = regex.exec(html);
+
+ while (match !== null) {
+ match[1].split(' ').forEach((className) => {
+ className = className.replace(
+ /\\|\^|\$|\{|\}|\[|\]|\(|\)|\.|\*|\+|\?|\|/g,
+ '\\$&'
+ );
+ htmlClasses.push(className);
+ });
+ match = regex.exec(html);
+ }
+
+ return new RegExp(htmlClasses.join('|'), 'gm');
+};
diff --git a/@linaria/packages/server/src/index.ts b/@linaria/packages/server/src/index.ts
new file mode 100644
index 0000000..0d86f03
--- /dev/null
+++ b/@linaria/packages/server/src/index.ts
@@ -0,0 +1 @@
+export { default as collect } from './collect';
diff --git a/@linaria/packages/server/tsconfig.json b/@linaria/packages/server/tsconfig.json
new file mode 100644
index 0000000..3a01f90
--- /dev/null
+++ b/@linaria/packages/server/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "paths": {},
+ "rootDir": "src/"
+ }
+}
diff --git a/@linaria/packages/shaker/CHANGELOG.md b/@linaria/packages/shaker/CHANGELOG.md
new file mode 100644
index 0000000..62ecee4
--- /dev/null
+++ b/@linaria/packages/shaker/CHANGELOG.md
@@ -0,0 +1,88 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.11](https://github.com/callstack/linaria/compare/v3.0.0-beta.10...v3.0.0-beta.11) (2021-08-08)
+
+
+### Bug Fixes
+
+* **shaker:** string literals for addressing values in imported NS ([#815](https://github.com/callstack/linaria/issues/815)) ([8adf43e](https://github.com/callstack/linaria/commit/8adf43ec56b107c8017608ccc460d0ba8794c8ef))
+
+
+
+
+
+# [3.0.0-beta.10](https://github.com/callstack/linaria/compare/v3.0.0-beta.9...v3.0.0-beta.10) (2021-07-24)
+
+
+### Bug Fixes
+
+* **shaker:** use the last export statement instead of the 1st ([#804](https://github.com/callstack/linaria/issues/804)) ([b79584c](https://github.com/callstack/linaria/commit/b79584c292aaa50eb2a420b73434341419b01ff9))
+
+
+
+
+
+# [3.0.0-beta.9](https://github.com/callstack/linaria/compare/v3.0.0-beta.8...v3.0.0-beta.9) (2021-07-23)
+
+
+### Bug Fixes
+
+* **shaker:** keep exports if there are dependent code (fixes [#804](https://github.com/callstack/linaria/issues/804)) ([#807](https://github.com/callstack/linaria/issues/807)) ([4bb7744](https://github.com/callstack/linaria/commit/4bb77444a604581877a64d6f88dfac0bc04583f0))
+* **shaker:** support for "export * from …" ([#809](https://github.com/callstack/linaria/issues/809)) ([b06c1ba](https://github.com/callstack/linaria/commit/b06c1ba5f44ae7af23cf7793c13a2acfee1bf706))
+
+
+
+
+
+# [3.0.0-beta.8](https://github.com/callstack/linaria/compare/v3.0.0-beta.7...v3.0.0-beta.8) (2021-07-18)
+
+**Note:** Version bump only for package @linaria/shaker
+
+
+
+
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+
+### Bug Fixes
+
+* **shaker:** fix undefined imports in some cases ([#333](https://github.com/callstack/linaria/issues/333), [#761](https://github.com/callstack/linaria/issues/761)) ([#787](https://github.com/callstack/linaria/issues/787)) ([e374072](https://github.com/callstack/linaria/commit/e3740727447b2867a2cfe40f763bc88e72eb2503))
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+
+### Bug Fixes
+
+* **shaker:** typescript enums support ([#761](https://github.com/callstack/linaria/issues/761)) ([#764](https://github.com/callstack/linaria/issues/764)) ([6907e22](https://github.com/callstack/linaria/commit/6907e2280a2ab8ee014b5d02b1169714ccac9d66))
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/shaker
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/shaker
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package @linaria/shaker
diff --git a/@linaria/packages/shaker/README.md b/@linaria/packages/shaker/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/shaker/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/shaker/__fixtures__/bar.js b/@linaria/packages/shaker/__fixtures__/bar.js
new file mode 100644
index 0000000..80afd18
--- /dev/null
+++ b/@linaria/packages/shaker/__fixtures__/bar.js
@@ -0,0 +1,2 @@
+export const bar1 = 'bar1';
+export const bar2 = 'bar2';
diff --git a/@linaria/packages/shaker/__fixtures__/foo.js b/@linaria/packages/shaker/__fixtures__/foo.js
new file mode 100644
index 0000000..d558031
--- /dev/null
+++ b/@linaria/packages/shaker/__fixtures__/foo.js
@@ -0,0 +1,2 @@
+export const foo1 = "foo1";
+export const foo2 = "foo2";
diff --git a/@linaria/packages/shaker/__fixtures__/reexports.js b/@linaria/packages/shaker/__fixtures__/reexports.js
new file mode 100644
index 0000000..88f8d33
--- /dev/null
+++ b/@linaria/packages/shaker/__fixtures__/reexports.js
@@ -0,0 +1,2 @@
+export * from './foo';
+export * from './bar';
diff --git a/@linaria/packages/shaker/__tests__/__snapshots__/shaker.test.ts.snap b/@linaria/packages/shaker/__tests__/__snapshots__/shaker.test.ts.snap
new file mode 100644
index 0000000..b14a18b
--- /dev/null
+++ b/@linaria/packages/shaker/__tests__/__snapshots__/shaker.test.ts.snap
@@ -0,0 +1,1229 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`shaker derives display name from filename 1`] = `
+"import { styled } from '@linaria/react';
+export default /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"FancyName0\\",
+ class: \\"FancyName0_f1tjvuuv\\"
+});"
+`;
+
+exports[`shaker derives display name from filename 2`] = `
+
+CSS:
+
+.FancyName0_f1tjvuuv {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker derives display name from parent folder name 1`] = `
+"import { styled } from '@linaria/react';
+export default /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"FancyName0\\",
+ class: \\"FancyName0_fud4l0y\\"
+});"
+`;
+
+exports[`shaker derives display name from parent folder name 2`] = `
+
+CSS:
+
+.FancyName0_fud4l0y {
+ font-size: 14px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker does not strip instanbul coverage sequences 1`] = `
+"var cov_2dr9r1nt95 = function () {
+ var path = \\"/home/user/project/file.js\\";
+ var hash = \\"23f56bbaeb2ebcd213f41374d3b2af1bce287bd3\\";
+ var global = new Function(\\"return this\\")();
+ var gcv = \\"__coverage__\\";
+ var coverageData = {
+ path: \\"/home/user/project/file.js\\",
+ statementMap: {
+ \\"0\\": {
+ start: {
+ line: 3,
+ column: 10
+ },
+ end: {
+ line: 3,
+ column: 12
+ }
+ },
+ \\"1\\": {
+ start: {
+ line: 5,
+ column: 21
+ },
+ end: {
+ line: 7,
+ column: 1
+ }
+ }
+ },
+ fnMap: {},
+ branchMap: {},
+ s: {
+ \\"0\\": 0,
+ \\"1\\": 0
+ },
+ f: {},
+ b: {},
+ _coverageSchema: \\"43e27e138ebf9cfc5966b082cf9a028302ed4184\\",
+ hash: \\"23f56bbaeb2ebcd213f41374d3b2af1bce287bd3\\"
+ };
+ var coverage = global[gcv] || (global[gcv] = {});
+
+ if (coverage[path] && coverage[path].hash === hash) {
+ return coverage[path];
+ }
+
+ return coverage[path] = coverageData;
+}();
+
+import { styled } from '@linaria/react';
+const a = (cov_2dr9r1nt95.s[0]++, 42);
+export const Title = (cov_2dr9r1nt95.s[1]++, /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_tow9xsn\\"
+}));"
+`;
+
+exports[`shaker does not strip instanbul coverage sequences 2`] = `
+
+CSS:
+
+.Title_tow9xsn {
+ height: 42px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker evaluates babel helpers 1`] = `
+"import { styled } from '@linaria/react';
+
+function copyAndExtend(a, b) {
+ return { ...a,
+ ...b
+ };
+}
+
+const obj = copyAndExtend({
+ a: 1
+}, {
+ a: 2
+});
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker evaluates babel helpers 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "2"
+ }
+}
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, @babel/runtime/helpers/defineProperty
+
+`;
+
+exports[`shaker evaluates complex styles with functions and nested selectors 1`] = `
+"import { css } from '@linaria/core';
+export const bareIconClass = \\"bareIconClass_b1t92lw9\\";
+
+const getSizeStyles = fs => ({
+ [\`&.\${bareIconClass}\`]: {
+ fontSize: fs * 1.5
+ }
+});
+
+export const SIZES = {
+ XS: \\"XS_x1xjmq2i\\"
+};"
+`;
+
+exports[`shaker evaluates complex styles with functions and nested selectors 2`] = `
+
+CSS:
+
+.bareIconClass_b1t92lw9 {}
+.XS_x1xjmq2i {&.bareIconClass_b1t92lw9 { font-size: 16.5px; }}
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, @babel/runtime/helpers/defineProperty
+
+`;
+
+exports[`shaker evaluates component interpolations 1`] = `
+"const {
+ styled
+} = require('@linaria/react');
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});
+export const Paragraph = /*#__PURE__*/styled(\\"p\\")({
+ name: \\"Paragraph\\",
+ class: \\"Paragraph_p1xjmq2i\\"
+});"
+`;
+
+exports[`shaker evaluates component interpolations 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: red;
+}
+.Paragraph_p1xjmq2i {
+ .Title_t1t92lw9 {
+ color: blue;
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker evaluates dependencies with sequence expression 1`] = `
+"import { styled } from '@linaria/react';
+const color = (external, () => 'blue');
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [color]
+ }
+});"
+`;
+
+exports[`shaker evaluates dependencies with sequence expression 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: var(--t1t92lw9-0);
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker evaluates expressions with dependencies 1`] = `
+"import { styled } from '@linaria/react';
+import slugify from '@linaria/babel-preset/__fixtures__/slugify';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker evaluates expressions with dependencies 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "6og6jy"
+ }
+}
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, @linaria/babel-preset/__fixtures__/slugify
+
+`;
+
+exports[`shaker evaluates expressions with expressions depending on shared dependency 1`] = `
+"import { styled } from '@linaria/react';
+
+const slugify = require('@linaria/babel-preset/__fixtures__/slugify').default;
+
+const boo = t => slugify(t) + 'boo';
+
+const bar = t => slugify(t) + 'bar';
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker evaluates expressions with expressions depending on shared dependency 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "6og6jyboo6og6jybar"
+ }
+}
+
+Dependencies: @linaria/babel-preset/__fixtures__/slugify
+
+`;
+
+exports[`shaker evaluates functions with nested identifiers 1`] = `
+"import { styled } from '@linaria/react';
+const objects = {
+ key: {
+ fontSize: 12
+ }
+};
+
+const foo = k => {
+ const obj = objects[k];
+ return obj;
+};
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker evaluates functions with nested identifiers 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ font-size: 12px;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker evaluates identifier in scope 1`] = `
+"import { styled } from '@linaria/react';
+const answer = 42;
+
+const foo = () => answer;
+
+const days = foo() + ' days';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker evaluates identifier in scope 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "42 days"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker evaluates imported typescript enums 1`] = `
+"import { styled } from '@linaria/react';
+import { Colors } from '@linaria/babel-preset/__fixtures__/enums';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_taxxqrn\\"
+});"
+`;
+
+exports[`shaker evaluates imported typescript enums 2`] = `
+
+CSS:
+
+.Title_taxxqrn {
+ color: #27509A;
+}
+
+Dependencies: @linaria/babel-preset/__fixtures__/enums
+
+`;
+
+exports[`shaker evaluates interpolations with sequence expression 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [(external, () => \\"blue\\")]
+ }
+});"
+`;
+
+exports[`shaker evaluates interpolations with sequence expression 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: var(--t1t92lw9-0);
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker evaluates local expressions 1`] = `
+"import { styled } from '@linaria/react';
+const answer = 42;
+
+const foo = () => answer;
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker evaluates local expressions 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "42 days"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker evaluates multiple expressions with shared dependency 1`] = `
+"import { styled } from '@linaria/react';
+
+const slugify = require('@linaria/babel-preset/__fixtures__/slugify').default;
+
+const boo = t => slugify(t) + 'boo';
+
+const bar = t => slugify(t) + 'bar';
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker evaluates multiple expressions with shared dependency 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "6og6jyboo"
+ content: "6og6jybar"
+ }
+}
+
+Dependencies: @linaria/babel-preset/__fixtures__/slugify
+
+`;
+
+exports[`shaker evaluates typescript enums 1`] = `
+"import { styled } from '@linaria/react';
+var Colors;
+
+(function (Colors) {
+ Colors[\\"BLUE\\"] = \\"#27509A\\";
+})(Colors || (Colors = {}));
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_taxxqrn\\"
+});"
+`;
+
+exports[`shaker evaluates typescript enums 2`] = `
+
+CSS:
+
+.Title_taxxqrn {
+ color: #27509A;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker generates stable class names 1`] = `
+"import { styled } from '@linaria/react';
+export const T1 = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"T1\\",
+ class: \\"T1_t16d1w5s\\"
+});
+export const T2 = /*#__PURE__*/styled(\\"h2\\")({
+ name: \\"T2\\",
+ class: \\"T2_t18j681n\\"
+});
+export const T3 = /*#__PURE__*/styled(\\"h3\\")({
+ name: \\"T3\\",
+ class: \\"T3_t16ajafo\\"
+});
+export default /*#__PURE__*/styled(\\"p\\")({
+ name: \\"components-library3\\",
+ class: \\"components-library3_c16bmp8w\\"
+});"
+`;
+
+exports[`shaker generates stable class names 2`] = `
+
+CSS:
+
+.T1_t16d1w5s {
+ background: #111;
+}
+.T2_t18j681n {
+ background: #222;
+}
+.T3_t16ajafo {
+ .T2_t18j681n {
+ background: #333;
+ }
+}
+.components-library3_c16bmp8w {
+ background: #333;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker handles complex component 1`] = `
+"// Dead code in this file should be ignored
+import deadDep from 'unknown-dependency';
+import { styled } from '@linaria/react';
+export const deadValue = deadDep();
+const objects = {
+ font: {
+ fontSize: 12
+ },
+ box: {
+ border: '1px solid red'
+ }
+};
+
+const foo = k => {
+ const {
+ [k]: obj
+ } = objects;
+ return obj;
+};
+
+objects.font.fontWeight = 'bold';
+export const whiteColor = '#fff';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t16vg7lb\\"
+});"
+`;
+
+exports[`shaker handles complex component 2`] = `
+
+CSS:
+
+.Title_t16vg7lb {
+ font-size: 12px; font-weight: bold;
+ border: 1px solid red;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker handles escapes properly 1`] = `
+"import { styled } from '@linaria/react';
+const selectors = ['a', 'b'];
+export const Block = /*#__PURE__*/styled(\\"div\\")({
+ name: \\"Block\\",
+ class: \\"Block_b11ngyv0\\"
+});"
+`;
+
+exports[`shaker handles escapes properly 2`] = `
+
+CSS:
+
+.Block_b11ngyv0 {
+ a { content: "\\u000A"; } b { content: "\\u000A"; };
+}
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, @babel/runtime/helpers/taggedTemplateLiteral
+
+`;
+
+exports[`shaker handles indirect wrapping another styled component 1`] = `
+"const {
+ styled
+} = require('@linaria/react');
+
+const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});
+
+const hoc = Cmp => Cmp;
+
+export const CustomTitle = /*#__PURE__*/styled(hoc(Title))({
+ name: \\"CustomTitle\\",
+ class: \\"CustomTitle_c1xjmq2i\\"
+});"
+`;
+
+exports[`shaker handles indirect wrapping another styled component 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: red;
+}
+.CustomTitle_c1xjmq2i {
+ font-size: 24px;
+ color: blue;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker handles wrapping another styled component 1`] = `
+"const {
+ css
+} = require('..');
+
+const {
+ styled
+} = require('@linaria/react');
+
+const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});
+export const BlueTitle = /*#__PURE__*/styled(Title)({
+ name: \\"BlueTitle\\",
+ class: \\"BlueTitle_b1xjmq2i\\"
+});
+export const GreenTitle = /*#__PURE__*/styled(BlueTitle)({
+ name: \\"GreenTitle\\",
+ class: \\"GreenTitle_g2qjq78\\"
+});"
+`;
+
+exports[`shaker handles wrapping another styled component 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ color: red;
+}
+.BlueTitle_b1xjmq2i.Title_t1t92lw9 {
+ font-size: 24px;
+ color: blue;
+}
+.GreenTitle_g2qjq78.BlueTitle_b1xjmq2i.Title_t1t92lw9 {
+ color: green;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker hoistable identifiers 1`] = `
+"import { styled } from '@linaria/react';
+{
+ var days = 42;
+}
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker hoistable identifiers 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "42"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker ignores external expressions 1`] = `
+"import { styled } from '@linaria/react';
+
+const generate = props => props.content;
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [generate]
+ }
+});"
+`;
+
+exports[`shaker ignores external expressions 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "var(--t1t92lw9-0)"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker ignores inline arrow function expressions 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [props => props.content]
+ }
+});"
+`;
+
+exports[`shaker ignores inline arrow function expressions 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "var(--t1t92lw9-0)"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker ignores inline vanilla function expressions 1`] = `
+"import { styled } from '@linaria/react';
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\",
+ vars: {
+ \\"t1t92lw9-0\\": [function (props) {
+ return props.content;
+ }]
+ }
+});"
+`;
+
+exports[`shaker ignores inline vanilla function expressions 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ &:before {
+ content: "var(--t1t92lw9-0)"
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker inlines array styles as CSS string 1`] = `
+"import { styled } from '@linaria/react';
+
+const fill = (top = 0, left = 0, right = 0, bottom = 0) => [{
+ position: 'absolute'
+}, {
+ top,
+ right,
+ bottom,
+ left
+}];
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker inlines array styles as CSS string 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ position: absolute; top: 0; right: 0; bottom: 0; left: 0;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker inlines object styles as CSS string 1`] = `
+"import { styled } from '@linaria/react';
+
+const fill = (top = 0, left = 0, right = 0, bottom = 0) => ({
+ position: 'absolute',
+ top,
+ right,
+ bottom,
+ left
+});
+
+export const Title = /*#__PURE__*/styled(\\"h1\\")({
+ name: \\"Title\\",
+ class: \\"Title_t1t92lw9\\"
+});"
+`;
+
+exports[`shaker inlines object styles as CSS string 2`] = `
+
+CSS:
+
+.Title_t1t92lw9 {
+ position: absolute; top: 0; right: 0; bottom: 0; left: 0;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker it should not throw location error for hoisted identifier 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+
+const size = () => 5;
+
+var _ref = size();
+
+export default function Component() {
+ const color = _ref;
+ return \\"source0_s1t92lw9\\";
+}"
+`;
+
+exports[`shaker it should not throw location error for hoisted identifier 2`] = `
+
+CSS:
+
+.source0_s1t92lw9 {opacity:5;}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker non-hoistable identifiers 1`] = `
+"<<DIRNAME>>/source.js: An error occurred when evaluating the expression:
+
+ > days is not defined.
+
+ Make sure you are not using a browser or Node specific API and all the variables are available in static context.
+ Linaria have to extract pieces of your code to resolve the interpolated values.
+ Defining styled component or class will not work inside:
+ - function,
+ - class,
+ - method,
+ - loop,
+ because it cannot be statically determined in which context you use them.
+ That's why some variables may be not defined during evaluation.
+
+ 7 | export const Title = styled.h1\`
+ 8 | &:before {
+> 9 | content: \\"\${days}\\"
+ | ^^^^
+ 10 | }
+ 11 | \`;"
+`;
+
+exports[`shaker should handle shadowed identifier inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+const color = 'red';
+var _ref = 'blue';
+var _ref2 = {
+ color: _ref
+};
+export default function Component() {
+ const color = _ref;
+ const val = _ref2;
+ return React.createElement('div', {
+ className: \\"className_c1t92lw9\\"
+ });
+}"
+`;
+
+exports[`shaker should handle shadowed identifier inside components 2`] = `
+
+CSS:
+
+.className_c1t92lw9 {background-color:blue;}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker should interpolate imported components 1`] = `
+"import { css } from \\"@linaria/core\\";
+import { Title } from \\"@linaria/babel-preset/__fixtures__/complex-component\\";
+export const square = \\"square_s1t92lw9\\";"
+`;
+
+exports[`shaker should interpolate imported components 2`] = `
+
+CSS:
+
+.square_s1t92lw9 {
+ .Title_t16vg7lb {
+ color: red;
+ }
+}
+
+Dependencies: @linaria/babel-preset/__fixtures__/complex-component
+
+`;
+
+exports[`shaker should interpolate imported variables 1`] = `
+"import { css } from \\"@linaria/core\\";
+import { whiteColor } from \\"@linaria/babel-preset/__fixtures__/complex-component\\";
+export const square = \\"square_s1t92lw9\\";"
+`;
+
+exports[`shaker should interpolate imported variables 2`] = `
+
+CSS:
+
+.square_s1t92lw9 {
+ color: #fff
+}
+
+Dependencies: @linaria/babel-preset/__fixtures__/complex-component
+
+`;
+
+exports[`shaker should process \`css\` calls inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+export function Component() {
+ const opacity = 0.2;
+ const className = \\"className_c1t92lw9\\";
+ return React.createElement(\\"div\\", {
+ className
+ });
+}"
+`;
+
+exports[`shaker should process \`css\` calls inside components 2`] = `
+
+CSS:
+
+.className_c1t92lw9 {
+ opacity: 0.2;
+ }
+
+Dependencies: NA
+
+`;
+
+exports[`shaker should process \`css\` calls with complex interpolation inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+import externalDep from '@linaria/babel-preset/__fixtures__/sample-script';
+const globalObj = {
+ opacity: 0.5
+};
+var _ref = externalDep;
+var _ref2 = {
+ value: 0.2,
+ cell: \\"cell_c1t92lw9\\"
+};
+var _ref3 = _ref2;
+export function Component() {
+ const classes = _ref2;
+ const classes2 = _ref3;
+ const referencedExternalDep = _ref;
+ const className = \\"className_c1xjmq2i\\";
+ return React.createElement(\\"div\\", {
+ className
+ });
+}"
+`;
+
+exports[`shaker should process \`css\` calls with complex interpolation inside components 2`] = `
+
+CSS:
+
+.cell_c1t92lw9 {
+ opacity: 0;
+ }
+.className_c1xjmq2i {
+ opacity: 0.5;
+ font-size: 42
+ font-size: 42
+
+ &:hover .cell_c1t92lw9 {
+ opacity: 0.2;
+ }
+ }
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, @linaria/babel-preset/__fixtures__/sample-script
+
+`;
+
+exports[`shaker should process \`styled\` calls inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+export function Component() {
+ const opacity = 0.2;
+ const MyComponent = styled.h1\`
+ opacity: \${opacity};
+ \`;
+ return React.createElement(MyComponent);
+}"
+`;
+
+exports[`shaker should process \`styled\` calls inside components 2`] = `Object {}`;
+
+exports[`shaker should process \`styled\` calls with complex interpolation inside components 1`] = `
+"import React from 'react';
+import { css } from '@linaria/core';
+const globalObj = {
+ opacity: 0.5
+};
+const Styled1 = styled.p\`
+ opacity: \${globalObj.opacity}
+\`;
+export function Component() {
+ const classes = {
+ value: 0.2,
+ cell: \\"cell_c1t92lw9\\"
+ };
+ const classes2 = classes;
+ const MyComponent = styled\`
+ opacity: \${globalObj.opacity};
+
+ &:hover .\${classes2.cell} {
+ opacity: \${classes.value};
+ }
+ \${Styled1} {
+ font-size: 1;
+ }
+ \`;
+ return React.createElement(MyComponent);
+}"
+`;
+
+exports[`shaker should process \`styled\` calls with complex interpolation inside components 2`] = `
+
+CSS:
+
+.cell_c1t92lw9 {
+ opacity: 0;
+ }
+
+Dependencies: NA
+
+`;
+
+exports[`shaker should work with String and Number object 1`] = `
+"import { css } from '@linaria/core';
+export const style = \\"style_s1t92lw9\\";"
+`;
+
+exports[`shaker should work with String and Number object 2`] = `
+
+CSS:
+
+.style_s1t92lw9 {
+ width: 100%;
+ opacity: 0.75;
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker should work with generated classnames as selectors 1`] = `
+"import { css } from \\"@linaria/core\\";
+export const text = \\"text_t1t92lw9\\";
+export const square = \\"square_s1xjmq2i\\";"
+`;
+
+exports[`shaker should work with generated classnames as selectors 2`] = `
+
+CSS:
+
+.text_t1t92lw9 {}
+.square_s1xjmq2i {
+ .text_t1t92lw9 {
+ color: red;
+ }
+}
+
+Dependencies: NA
+
+`;
+
+exports[`shaker should work with wildcard imports 1`] = `
+"import { css } from \\"@linaria/core\\";
+import * as mod from \\"@linaria/babel-preset/__fixtures__/complex-component\\";
+const color = mod[\\"whiteColor\\"];
+export const square = \\"square_s1t92lw9\\";"
+`;
+
+exports[`shaker should work with wildcard imports 2`] = `
+
+CSS:
+
+.square_s1t92lw9 {
+ .Title_t16vg7lb {
+ color: #fff;
+ }
+}
+
+Dependencies: @babel/runtime/helpers/typeof, @linaria/babel-preset/__fixtures__/complex-component
+
+`;
+
+exports[`shaker should work with wildcard reexports 1`] = `
+"import { css } from \\"@linaria/core\\";
+import { foo1 } from \\"../__fixtures__/reexports\\";
+export const square = \\"square_s1t92lw9\\";"
+`;
+
+exports[`shaker should work with wildcard reexports 2`] = `
+
+CSS:
+
+.square_s1t92lw9 {
+ color: foo1;
+}
+
+Dependencies: ../__fixtures__/reexports
+
+`;
+
+exports[`shaker simplifies react components 1`] = `
+"import React from 'react';
+import { styled } from '@linaria/react';
+import constant from './broken-dependency';
+
+const FuncComponent = props => <div>{props.children + constant}</div>;
+
+class ClassComponent extends React.PureComponent {
+ method() {
+ return constant;
+ }
+
+ render() {
+ return <div>{props.children + constant}</div>;
+ }
+
+}
+
+export const StyledFunc = /*#__PURE__*/styled(FuncComponent)({
+ name: \\"StyledFunc\\",
+ class: \\"StyledFunc_s1t92lw9\\"
+});
+export const StyledClass = /*#__PURE__*/styled(ClassComponent)({
+ name: \\"StyledClass\\",
+ class: \\"StyledClass_s1xjmq2i\\"
+});"
+`;
+
+exports[`shaker simplifies react components 2`] = `
+
+CSS:
+
+.StyledFunc_s1t92lw9 {
+ color: red;
+}
+.StyledClass_s1xjmq2i {
+ color: blue;
+}
+
+Dependencies: @babel/runtime/helpers/interopRequireDefault, react
+
+`;
+
+exports[`shaker throws codeframe error when evaluation fails 1`] = `
+"<<DIRNAME>>/source.js: An error occurred when evaluating the expression:
+
+ > This will fail.
+
+ Make sure you are not using a browser or Node specific API and all the variables are available in static context.
+ Linaria have to extract pieces of your code to resolve the interpolated values.
+ Defining styled component or class will not work inside:
+ - function,
+ - class,
+ - method,
+ - loop,
+ because it cannot be statically determined in which context you use them.
+ That's why some variables may be not defined during evaluation.
+
+ 4 |
+ 5 | export const Title = styled.h1\`
+> 6 | font-size: \${foo()}px;
+ | ^^^^^
+ 7 | \`;"
+`;
+
+exports[`shaker throws if couldn't determine a display name 1`] = `
+"<<DIRNAME>>/.js: Couldn't determine a name for the component. Ensure that it's either:
+- Assigned to a variable
+- Is an object property
+- Is a prop in a JSX element
+
+ 1 | import { styled } from '@linaria/react';
+ 2 |
+> 3 | export default styled.h1\`
+ | ^
+ 4 | font-size: 14px;
+ 5 | \`;"
+`;
+
+exports[`shaker throws when interpolation evaluates to NaN 1`] = `
+"<<DIRNAME>>/source.js: The expression evaluated to 'NaN', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(height)'.
+ 4 |
+ 5 | export const Title = styled.h1\`
+> 6 | height: \${height}px;
+ | ^^^^^^
+ 7 | \`;"
+`;
+
+exports[`shaker throws when interpolation evaluates to null 1`] = `
+"<<DIRNAME>>/source.js: The expression evaluated to 'null', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(color)'.
+ 4 |
+ 5 | export const Title = styled.h1\`
+> 6 | color: \${color};
+ | ^^^^^
+ 7 | \`;"
+`;
+
+exports[`shaker throws when interpolation evaluates to undefined 1`] = `
+"<<DIRNAME>>/source.js: The expression evaluated to 'undefined', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(fontSize)'.
+ 4 |
+ 5 | export const Title = styled.h1\`
+> 6 | font-size: \${fontSize};
+ | ^^^^^^^^
+ 7 | \`;"
+`;
diff --git a/@linaria/packages/shaker/__tests__/shaker.test.ts b/@linaria/packages/shaker/__tests__/shaker.test.ts
new file mode 100644
index 0000000..516670d
--- /dev/null
+++ b/@linaria/packages/shaker/__tests__/shaker.test.ts
@@ -0,0 +1,100 @@
+import { run } from '@linaria/babel-preset/__utils__/strategy-tester';
+import dedent from 'dedent';
+
+describe('shaker', () => {
+ run(__dirname, require('../src').default, (transpile) => {
+ it('should work with wildcard imports', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from "@linaria/core";
+ import * as mod from "@linaria/babel-preset/__fixtures__/complex-component";
+
+ const color = mod["whiteColor"];
+
+ export const square = css\`
+ ${'${mod.Title}'} {
+ color: ${'${color}'};
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('should work with wildcard reexports', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from "@linaria/core";
+ import { foo1 } from "../__fixtures__/reexports";
+
+ export const square = css\`
+ color: ${'${foo1}'};
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('should interpolate imported components', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from "@linaria/core";
+ import { Title } from "@linaria/babel-preset/__fixtures__/complex-component";
+
+ export const square = css\`
+ ${'${Title}'} {
+ color: red;
+ }
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('should interpolate imported variables', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { css } from "@linaria/core";
+ import { whiteColor } from "@linaria/babel-preset/__fixtures__/complex-component";
+
+ export const square = css\`
+ color: ${'${whiteColor}'}
+ \`;
+ `
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+
+ it('evaluates typescript enums', async () => {
+ const { code, metadata } = await transpile(
+ dedent`
+ import { styled } from '@linaria/react';
+
+ enum Colors {
+ BLUE = '#27509A'
+ }
+
+ export const Title = styled.h1\`
+ color: ${'${Colors.BLUE}'};
+ \`;
+ `,
+ (config) => ({
+ ...config,
+ presets: ['@babel/preset-typescript', ...(config.presets ?? [])],
+ filename: 'source.ts',
+ })
+ );
+
+ expect(code).toMatchSnapshot();
+ expect(metadata).toMatchSnapshot();
+ });
+ });
+});
diff --git a/@linaria/packages/shaker/babel.config.js b/@linaria/packages/shaker/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/shaker/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/shaker/package.json b/@linaria/packages/shaker/package.json
new file mode 100644
index 0000000..5c12659
--- /dev/null
+++ b/@linaria/packages/shaker/package.json
@@ -0,0 +1,59 @@
+{
+ "name": "@linaria/shaker",
+ "version": "3.0.0-beta.11",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "test": "jest --config ../../jest.config.js --rootDir .",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "@types/dedent": "^0.7.0",
+ "dedent": "^0.7.0"
+ },
+ "dependencies": {
+ "@babel/generator": ">=7",
+ "@babel/plugin-transform-runtime": ">=7",
+ "@babel/plugin-transform-template-literals": ">=7",
+ "@babel/preset-env": ">=7",
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "@linaria/logger": "^3.0.0-beta.3",
+ "@linaria/preeval": "^3.0.0-beta.8",
+ "babel-plugin-transform-react-remove-prop-types": "^0.4.24",
+ "ts-invariant": "^0.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7"
+ }
+}
diff --git a/@linaria/packages/shaker/src/DepsGraph.ts b/@linaria/packages/shaker/src/DepsGraph.ts
new file mode 100644
index 0000000..45fbe21
--- /dev/null
+++ b/@linaria/packages/shaker/src/DepsGraph.ts
@@ -0,0 +1,149 @@
+import { types as t } from '@babel/core';
+import ScopeManager, { PromisedNode, resolveNode } from './scope';
+
+type Action = (this: DepsGraph, a: t.Node, b: t.Node) => void;
+
+function addEdge(this: DepsGraph, a: t.Node, b: t.Node) {
+ if (this.dependencies.has(a) && this.dependencies.get(a)!.has(b)) {
+ // edge has been already added∂ƒ
+ return;
+ }
+
+ this.edges.push([a, b]);
+ if (this.dependencies.has(a)) {
+ this.dependencies.get(a)!.add(b);
+ } else {
+ this.dependencies.set(a, new Set([b]));
+ }
+
+ if (this.dependents.has(b)) {
+ this.dependents.get(b)!.add(a);
+ } else {
+ this.dependents.set(b, new Set([a]));
+ }
+}
+
+export default class DepsGraph {
+ public readonly imports: Map<string, (t.Identifier | t.StringLiteral)[]> =
+ new Map();
+ public readonly importAliases: Map<t.Identifier, string> = new Map();
+ public readonly importTypes: Map<
+ string,
+ 'wildcard' | 'default' | 'reexport'
+ > = new Map();
+ public readonly reexports: Array<t.Identifier> = [];
+
+ protected readonly parents: WeakMap<t.Node, t.Node> = new WeakMap();
+ protected readonly edges: Array<[t.Node, t.Node]> = [];
+ protected readonly exports: Map<string, t.Node> = new Map();
+ protected readonly dependencies: Map<t.Node, Set<t.Node>> = new Map();
+ protected readonly dependents: Map<t.Node, Set<t.Node>> = new Map();
+
+ private actionQueue: Array<
+ [Action, t.Node | PromisedNode, t.Node | PromisedNode]
+ > = [];
+
+ private processQueue() {
+ if (this.actionQueue.length === 0) {
+ return;
+ }
+
+ for (const [action, a, b] of this.actionQueue) {
+ const resolvedA = resolveNode(a);
+ const resolvedB = resolveNode(b);
+ if (resolvedA && resolvedB) {
+ action.call(this, resolvedA, resolvedB);
+ }
+ }
+
+ this.actionQueue = [];
+ }
+
+ private getAllReferences(id: string): (t.Identifier | t.MemberExpression)[] {
+ const [, name] = id.split(':');
+ const declaration = this.scope.getDeclaration(id)!;
+ const allReferences: (t.Identifier | t.MemberExpression)[] = [
+ ...Array.from(this.dependencies.get(declaration) || []),
+ ...Array.from(this.dependents.get(declaration) || []),
+ ].filter((i) => t.isIdentifier(i) && i.name === name) as t.Identifier[];
+ allReferences.push(declaration);
+ return allReferences;
+ }
+
+ constructor(protected scope: ScopeManager) {}
+
+ addEdge(dependent: t.Node | PromisedNode, dependency: t.Node | PromisedNode) {
+ this.actionQueue.push([addEdge, dependent, dependency]);
+ }
+
+ addExport(name: string, node: t.Node) {
+ this.exports.set(name, node);
+ }
+
+ addParent(node: t.Node, parent: t.Node) {
+ this.parents.set(node, parent);
+ }
+
+ getParent(node: t.Node): t.Node | undefined {
+ return this.parents.get(node);
+ }
+
+ getDependenciesByBinding(id: string) {
+ this.processQueue();
+ const allReferences = this.getAllReferences(id);
+ const dependencies = [];
+ for (let [a, b] of this.edges) {
+ if (t.isIdentifier(a) && allReferences.includes(a)) {
+ dependencies.push(b);
+ }
+ }
+
+ return dependencies;
+ }
+
+ getDependentsByBinding(id: string) {
+ this.processQueue();
+ const allReferences = this.getAllReferences(id);
+ const dependents = [];
+ for (let [a, b] of this.edges) {
+ if (t.isIdentifier(b) && allReferences.includes(b)) {
+ dependents.push(a);
+ }
+ }
+
+ return dependents;
+ }
+
+ findDependencies(like: Object) {
+ this.processQueue();
+ return this.edges
+ .filter(([a]) => t.shallowEqual(a, like))
+ .map(([, b]) => b);
+ }
+
+ findDependents(like: object) {
+ this.processQueue();
+ return this.edges
+ .filter(([, b]) => t.shallowEqual(b, like))
+ .map(([a]) => a);
+ }
+
+ getDependencies(nodes: t.Node[]) {
+ this.processQueue();
+ return nodes.reduce(
+ (acc, node) => acc.concat(Array.from(this.dependencies.get(node) || [])),
+ [] as t.Node[]
+ );
+ }
+
+ getLeaf(name: string): t.Node | undefined {
+ return this.exports.get(name);
+ }
+
+ getLeaves(only: string[] | null): Array<t.Node | undefined> {
+ this.processQueue();
+ return only
+ ? only.map((name) => this.getLeaf(name))
+ : Array.from(this.exports.values());
+ }
+}
diff --git a/@linaria/packages/shaker/src/GraphBuilderState.ts b/@linaria/packages/shaker/src/GraphBuilderState.ts
new file mode 100644
index 0000000..ba70ca2
--- /dev/null
+++ b/@linaria/packages/shaker/src/GraphBuilderState.ts
@@ -0,0 +1,45 @@
+import type { Node, VisitorKeys } from '@babel/types';
+import ScopeManager from './scope';
+import DepsGraph from './DepsGraph';
+
+export type OnVisitCallback = (n: Node) => void;
+
+export default abstract class GraphBuilderState {
+ public readonly scope = new ScopeManager();
+ public readonly graph = new DepsGraph(this.scope);
+ public readonly meta = new Map<string, any>();
+
+ protected callbacks: OnVisitCallback[] = [];
+
+ /*
+ * For expressions like `{ foo: bar }` we need to now context
+ *
+ * const obj = { foo: bar };
+ * Here context is `expression`, `bar` is a variable which depends from its declaration.
+ *
+ * const { foo: bar } = obj;
+ * Here context is `pattern` and `bar` is a variable declaration itself.
+ */
+ public readonly context: Array<'expression' | 'lval'> = [];
+
+ public readonly fnStack: Node[] = [];
+
+ public onVisit(callback: OnVisitCallback) {
+ this.callbacks.push(callback);
+ return () => {
+ this.callbacks = this.callbacks.filter((c) => c !== callback);
+ };
+ }
+
+ abstract baseVisit<TNode extends Node>(
+ node: TNode,
+ ignoreDeps?: boolean
+ ): void;
+
+ abstract visit<TNode extends Node, TParent extends Node>(
+ node: TNode,
+ parent: TParent | null,
+ parentKey: VisitorKeys[TParent['type']] | null,
+ listIdx?: number | null
+ ): void;
+}
diff --git a/@linaria/packages/shaker/src/Visitors.ts b/@linaria/packages/shaker/src/Visitors.ts
new file mode 100644
index 0000000..0228d4a
--- /dev/null
+++ b/@linaria/packages/shaker/src/Visitors.ts
@@ -0,0 +1,87 @@
+import { types as t } from '@babel/core';
+import type { Identifier, Node, VisitorKeys } from '@babel/types';
+import { warn } from '@linaria/logger';
+import { peek } from '@linaria/babel-preset';
+import GraphBuilderState from './GraphBuilderState';
+import identifierHandlers from './identifierHandlers';
+import type { Visitor, Visitors } from './types';
+
+import { visitors as core } from './langs/core';
+
+const visitors: Visitors = {
+ Identifier<TParent extends Node>(
+ this: GraphBuilderState,
+ node: Identifier,
+ parent: TParent | null,
+ parentKey: VisitorKeys[TParent['type']] | null,
+ listIdx: number | null = null
+ ) {
+ if (!parent || !parentKey) {
+ return;
+ }
+
+ const handler = identifierHandlers[`${parent.type}:${parentKey}`];
+
+ if (typeof handler === 'function') {
+ handler(this, node, parent, parentKey, listIdx);
+ return;
+ }
+
+ if (handler === 'keep') {
+ return;
+ }
+
+ if (handler === 'declare') {
+ const kindOfDeclaration = this.meta.get('kind-of-declaration');
+ this.scope.declare(node, kindOfDeclaration === 'var', null);
+ return;
+ }
+
+ if (handler === 'refer') {
+ const declaration = this.scope.addReference(node);
+ // Let's check that it's not a global variable
+ if (declaration) {
+ // usage of a variable depends on its declaration
+ this.graph.addEdge(node, declaration);
+
+ const context = peek(this.context);
+ if (context === 'lval') {
+ // This is an identifier in the left side of an assignment expression and a variable value depends on that.
+ this.graph.addEdge(declaration, node);
+ }
+ }
+
+ return;
+ }
+
+ /*
+ * There is an unhandled identifier.
+ * This case should be added to ./identifierHandlers.ts
+ */
+ warn(
+ 'evaluator:shaker',
+ 'Unhandled identifier',
+ node.name,
+ parent.type,
+ parentKey,
+ listIdx
+ );
+ },
+
+ ...core,
+};
+
+const isKeyOfVisitors = (type: string): type is keyof Visitors =>
+ type in visitors;
+
+export function getVisitors<TNode extends Node>(node: TNode): Visitor<TNode>[] {
+ const aliases = t.ALIAS_KEYS[node.type] || [];
+ const aliasVisitors = aliases
+ .map((type) => (isKeyOfVisitors(type) ? visitors[type] : null))
+ .filter((i) => i) as Visitor<TNode>[];
+ return [...aliasVisitors, visitors[node.type] as Visitor<TNode>].filter(
+ (v) => v
+ );
+}
+
+export default visitors;
diff --git a/@linaria/packages/shaker/src/dumpNode.ts b/@linaria/packages/shaker/src/dumpNode.ts
new file mode 100644
index 0000000..f6d1c84
--- /dev/null
+++ b/@linaria/packages/shaker/src/dumpNode.ts
@@ -0,0 +1,63 @@
+import { types as t } from '@babel/core';
+import type {
+ BinaryExpression,
+ Identifier,
+ Node,
+ NumericLiteral,
+ StringLiteral,
+} from '@babel/types';
+
+type Hooks = {
+ [key: string]: (node: any) => string | number;
+};
+
+const hooks: Hooks = {
+ Identifier: (node: Identifier) => node.name,
+ BinaryExpression: (node: BinaryExpression) => node.operator,
+ NumericLiteral: (node: NumericLiteral) => node.value,
+ StringLiteral: (node: StringLiteral) => node.value,
+};
+
+function isNode(obj: any): obj is Node {
+ return !!obj;
+}
+
+export default function dumpNode<T extends Node>(
+ node: T,
+ alive: Set<Node> | null = null,
+ level = 0,
+ idx: number | null = null
+) {
+ let result = level === 0 ? '\n' : '';
+ const prefix =
+ level === 0
+ ? ''
+ : `${'| '.repeat(level - 1)}${idx === null ? '|' : idx}${
+ (idx || 0) < 10 ? '=' : ''
+ }`;
+
+ const { type } = node;
+ result += `${prefix}${type}${type in hooks ? ` ${hooks[type](node)}` : ''}`;
+
+ if (alive) {
+ result += alive.has(node) ? ' ✅' : ' ❌';
+ }
+
+ result += '\n';
+ const keys = t.VISITOR_KEYS[type] as Array<keyof T>;
+ for (const key of keys) {
+ const subNode = node[key];
+
+ result += `${'| '.repeat(level)}|-${key}\n`;
+ if (Array.isArray(subNode)) {
+ for (let i = 0; i < subNode.length; i++) {
+ const child = subNode[i];
+ if (child) result += dumpNode(child, alive, level + 2, i);
+ }
+ } else if (isNode(subNode)) {
+ result += dumpNode(subNode, alive, level + 2);
+ }
+ }
+
+ return result;
+}
diff --git a/@linaria/packages/shaker/src/graphBuilder.ts b/@linaria/packages/shaker/src/graphBuilder.ts
new file mode 100644
index 0000000..6b167e8
--- /dev/null
+++ b/@linaria/packages/shaker/src/graphBuilder.ts
@@ -0,0 +1,192 @@
+import { types as t } from '@babel/core';
+import type { AssignmentExpression, Node, VisitorKeys } from '@babel/types';
+import { isNode, getVisitorKeys } from '@linaria/babel-preset';
+import DepsGraph from './DepsGraph';
+import GraphBuilderState from './GraphBuilderState';
+import { getVisitors } from './Visitors';
+import type { VisitorAction } from './types';
+import ScopeManager from './scope';
+
+const isVoid = (node: Node): boolean =>
+ t.isUnaryExpression(node) && node.operator === 'void';
+
+class GraphBuilder extends GraphBuilderState {
+ static build(root: Node): DepsGraph {
+ return new GraphBuilder(root).graph;
+ }
+
+ constructor(rootNode: Node) {
+ super();
+
+ this.visit(rootNode, null, null, null);
+ }
+
+ private isExportsIdentifier(node: Node) {
+ if (
+ t.isIdentifier(node) &&
+ this.scope.getDeclaration(node) === ScopeManager.globalExportsIdentifier
+ ) {
+ return true;
+ }
+
+ return (
+ t.isMemberExpression(node) &&
+ t.isIdentifier(node.property) &&
+ node.property.name === 'exports' &&
+ t.isIdentifier(node.object) &&
+ this.scope.getDeclaration(node.object) ===
+ ScopeManager.globalModuleIdentifier
+ );
+ }
+
+ private isExportsAssigment(node: Node): node is AssignmentExpression {
+ if (
+ node &&
+ t.isAssignmentExpression(node) &&
+ t.isMemberExpression(node.left)
+ ) {
+ if (this.isExportsIdentifier(node.left)) {
+ // This is a default export like `module.exports = 42`
+ return true;
+ }
+
+ if (this.isExportsIdentifier(node.left.object)) {
+ // This is a named export like `module.exports.a = 42` or `exports.a = 42`
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /*
+ * Implements a default behaviour for AST-nodes:
+ * • visits every child;
+ * • if the current node is an Expression node, adds all its children as dependencies.
+ *
+ * eg. BinaryExpression has children `left` and `right`,
+ * both of them are required for evaluating the value of the expression
+ */
+ baseVisit<TNode extends Node>(node: TNode, ignoreDeps = false) {
+ const dependencies = [];
+ const isExpression = t.isExpression(node);
+ const keys = getVisitorKeys(node);
+ for (const key of keys) {
+ // Ignore all types
+ if (key === 'typeArguments' || key === 'typeParameters') {
+ continue;
+ }
+
+ const subNode = node[key as keyof TNode];
+
+ if (Array.isArray(subNode)) {
+ for (let i = 0; i < subNode.length; i++) {
+ const child = subNode[i];
+ if (child && this.visit(child, node, key, i) !== 'ignore') {
+ dependencies.push(child);
+ }
+ }
+ } else if (
+ isNode(subNode) &&
+ this.visit(subNode, node, key) !== 'ignore'
+ ) {
+ dependencies.push(subNode);
+ }
+ }
+
+ if (isExpression && !ignoreDeps) {
+ dependencies.forEach((dep) => this.graph.addEdge(node, dep));
+ }
+
+ this.callbacks.forEach((callback) => callback(node));
+ }
+
+ visit<TNode extends Node, TParent extends Node>(
+ node: TNode,
+ parent: TParent | null,
+ parentKey: VisitorKeys[TParent['type']] | null,
+ listIdx: number | null = null
+ ): VisitorAction {
+ if (parent) {
+ this.graph.addParent(node, parent);
+ }
+
+ if (
+ this.isExportsAssigment(node) &&
+ !this.isExportsAssigment(node.right) &&
+ !isVoid(node.right)
+ ) {
+ if (
+ t.isMemberExpression(node.left) &&
+ (t.isIdentifier(node.left.property) ||
+ t.isStringLiteral(node.left.property))
+ ) {
+ if (
+ t.isIdentifier(node.left.object) &&
+ node.left.object.name === 'module'
+ ) {
+ // It's a batch or default export
+ if (t.isObjectExpression(node.right)) {
+ // Batch export is a very particular case.
+ // Each property of the assigned object is independent named export.
+ // We also need to specify all dependencies and call `visit` for every value.
+ this.visit(node.left, node, 'left');
+ node.right.properties.forEach((prop) => {
+ if (t.isObjectProperty(prop) && t.isIdentifier(prop.key)) {
+ this.visit(prop.value, prop, 'value');
+ this.graph.addExport(prop.key.name, prop);
+ this.graph.addEdge(prop, node.right);
+ this.graph.addEdge(prop, prop.key);
+ this.graph.addEdge(prop.key, prop.value);
+ }
+ });
+
+ this.graph.addEdge(node.right, node);
+ this.graph.addEdge(node, node.left);
+
+ // We have done all the required work, so stop here
+ return;
+ } else {
+ this.graph.addExport('default', node);
+ }
+ } else {
+ // it can be either `exports.name` or `exports["name"]`
+ const nameNode = node.left.property;
+ this.graph.addExport(
+ t.isStringLiteral(nameNode) ? nameNode.value : nameNode.name,
+ node
+ );
+ }
+ }
+ }
+
+ const isScopable = t.isScopable(node);
+ const isFunction = t.isFunction(node);
+
+ if (isScopable) this.scope.new(t.isProgram(node) || t.isFunction(node));
+ if (isFunction) this.fnStack.push(node);
+
+ const visitors = getVisitors(node);
+ let action: VisitorAction;
+ if (visitors.length > 0) {
+ let visitor;
+ while (!action && (visitor = visitors.shift())) {
+ action = visitor.call(this, node, parent, parentKey, listIdx);
+ }
+ } else {
+ this.baseVisit(node);
+ }
+
+ if (parent && action !== 'ignore') {
+ // Node always depends on its parent
+ this.graph.addEdge(node, parent);
+ }
+
+ if (isFunction) this.fnStack.pop();
+ if (isScopable) this.scope.dispose();
+
+ return action;
+ }
+}
+
+export default GraphBuilder.build;
diff --git a/@linaria/packages/shaker/src/identifierHandlers.ts b/@linaria/packages/shaker/src/identifierHandlers.ts
new file mode 100644
index 0000000..bd3c919
--- /dev/null
+++ b/@linaria/packages/shaker/src/identifierHandlers.ts
@@ -0,0 +1,130 @@
+import { types as t } from '@babel/core';
+import type { Aliases, Identifier, Node, VisitorKeys } from '@babel/types';
+import { peek } from '@linaria/babel-preset';
+import GraphBuilderState from './GraphBuilderState';
+import type { IdentifierHandlerType, NodeType } from './types';
+import { identifierHandlers as core } from './langs/core';
+import ScopeManager from './scope';
+
+type HandlerFn = <TParent extends Node = Node>(
+ builder: GraphBuilderState,
+ node: Identifier,
+ parent: TParent,
+ parentKey: VisitorKeys[TParent['type']],
+ listIdx: number | null
+) => void;
+
+type Handler = IdentifierHandlerType | HandlerFn;
+
+const handlers: {
+ [key: string]: Handler;
+} = {};
+
+function isAlias(type: NodeType): type is keyof Aliases {
+ return type in t.FLIPPED_ALIAS_KEYS;
+}
+
+export function defineHandler(
+ typeOrAlias: NodeType,
+ field: string,
+ handler: Handler
+) {
+ const types = isAlias(typeOrAlias)
+ ? t.FLIPPED_ALIAS_KEYS[typeOrAlias]
+ : [typeOrAlias];
+ types.forEach((type: string) => {
+ handlers[`${type}:${field}`] = handler;
+ });
+}
+
+export function batchDefineHandlers(
+ typesAndFields: [NodeType, ...string[]][],
+ handler: IdentifierHandlerType
+) {
+ typesAndFields.forEach(([type, ...fields]) =>
+ fields.forEach((field) => defineHandler(type, field, handler))
+ );
+}
+
+batchDefineHandlers([...core.declare], 'declare');
+
+batchDefineHandlers([...core.keep], 'keep');
+
+batchDefineHandlers([...core.refer], 'refer');
+
+/*
+ * Special case for FunctionDeclaration
+ * Function id should be defined in the parent scope
+ */
+defineHandler(
+ 'FunctionDeclaration',
+ 'id',
+ (builder: GraphBuilderState, node: Identifier) => {
+ builder.scope.declare(node, false, null, 1);
+ }
+);
+
+/*
+ * Special handler for [obj.member = 42] = [1] in different contexts
+ */
+const memberExpressionObjectHandler = (
+ builder: GraphBuilderState,
+ node: Identifier
+) => {
+ const context = peek(builder.context);
+ const declaration = builder.scope.addReference(node);
+ if (declaration) {
+ builder.graph.addEdge(node, declaration);
+
+ if (context === 'lval') {
+ // One exception here: we shake exports,
+ // so `exports` does not depend on its members' assignments.
+ if (
+ declaration !== ScopeManager.globalExportsIdentifier &&
+ declaration !== ScopeManager.globalModuleIdentifier
+ ) {
+ builder.graph.addEdge(declaration, node);
+ }
+ }
+ }
+};
+
+defineHandler('MemberExpression', 'object', memberExpressionObjectHandler);
+defineHandler(
+ 'OptionalMemberExpression',
+ 'object',
+ memberExpressionObjectHandler
+);
+
+/*
+ * Special handler for obj.member and obj[member]
+ */
+const memberExpressionPropertyHandler = (
+ builder: GraphBuilderState,
+ node: Identifier,
+ parent: Node
+) => {
+ if (t.isMemberExpression(parent) && parent.computed) {
+ const declaration = builder.scope.addReference(node);
+ // Let's check that it's not a global variable
+ if (declaration) {
+ // usage of a variable depends on its declaration
+ builder.graph.addEdge(node, declaration);
+
+ const context = peek(builder.context);
+ if (context === 'lval') {
+ // This is an identifier in the left side of an assignment expression and a variable value depends on that.
+ builder.graph.addEdge(declaration, node);
+ }
+ }
+ }
+};
+
+defineHandler('MemberExpression', 'property', memberExpressionPropertyHandler);
+defineHandler(
+ 'OptionalMemberExpression',
+ 'property',
+ memberExpressionPropertyHandler
+);
+
+export default handlers;
diff --git a/@linaria/packages/shaker/src/index.ts b/@linaria/packages/shaker/src/index.ts
new file mode 100644
index 0000000..f71353b
--- /dev/null
+++ b/@linaria/packages/shaker/src/index.ts
@@ -0,0 +1,65 @@
+import generator from '@babel/generator';
+import { transformSync } from '@babel/core';
+import type { Program } from '@babel/types';
+import { debug } from '@linaria/logger';
+import type { Evaluator, StrictOptions } from '@linaria/babel-preset';
+import { buildOptions } from '@linaria/babel-preset';
+import shake from './shaker';
+
+function prepareForShake(
+ filename: string,
+ options: StrictOptions,
+ code: string
+): Program {
+ const transformOptions = buildOptions(filename, options);
+
+ transformOptions.ast = true;
+ transformOptions.presets!.unshift([
+ require.resolve('@babel/preset-env'),
+ {
+ targets: 'ie 11',
+ // we need this plugin so we list it explicitly, explanation in `packages/extractor/src/index`
+ include: ['@babel/plugin-transform-template-literals'],
+ },
+ ]);
+ transformOptions.presets!.unshift([
+ require.resolve('@linaria/preeval'),
+ options,
+ ]);
+ transformOptions.plugins!.unshift(
+ require.resolve('babel-plugin-transform-react-remove-prop-types')
+ );
+ transformOptions.plugins!.unshift([
+ require.resolve('@babel/plugin-transform-runtime'),
+ { useESModules: false },
+ ]);
+
+ debug(
+ 'evaluator:shaker:transform',
+ `Transform ${filename} with options ${JSON.stringify(
+ transformOptions,
+ null,
+ 2
+ )}`
+ );
+ const transformed = transformSync(code, transformOptions);
+
+ if (transformed === null || !transformed.ast) {
+ throw new Error(`${filename} cannot be transformed`);
+ }
+
+ return transformed.ast.program;
+}
+
+const shaker: Evaluator = (filename, options, text, only = null) => {
+ const [shaken, imports] = shake(
+ prepareForShake(filename, options, text),
+ only
+ );
+
+ debug('evaluator:shaker:generate', `Generate shaken source code ${filename}`);
+ const { code: shakenCode } = generator(shaken!);
+ return [shakenCode, imports];
+};
+
+export default shaker;
diff --git a/@linaria/packages/shaker/src/langs/core.ts b/@linaria/packages/shaker/src/langs/core.ts
new file mode 100644
index 0000000..c0368bb
--- /dev/null
+++ b/@linaria/packages/shaker/src/langs/core.ts
@@ -0,0 +1,653 @@
+import { types as t } from '@babel/core';
+import type {
+ AssignmentExpression,
+ Block,
+ CallExpression,
+ Directive,
+ ExpressionStatement,
+ ForInStatement,
+ ForStatement,
+ Function,
+ Identifier,
+ IfStatement,
+ MemberExpression,
+ Node,
+ ObjectExpression,
+ SequenceExpression,
+ SwitchCase,
+ SwitchStatement,
+ Terminatorless,
+ TryStatement,
+ VariableDeclaration,
+ VariableDeclarator,
+ WhileStatement,
+} from '@babel/types';
+
+import { peek } from '@linaria/babel-preset';
+import type { IdentifierHandlers, Visitors } from '../types';
+import GraphBuilderState from '../GraphBuilderState';
+import ScopeManager from '../scope';
+import DepsGraph from '../DepsGraph';
+
+function isIdentifier(
+ node: Node,
+ name?: string | string[]
+): node is Identifier {
+ return (
+ t.isIdentifier(node) &&
+ (name === undefined ||
+ (Array.isArray(name) ? name.includes(node.name) : node.name === name))
+ );
+}
+
+type SideEffect = [
+ {
+ callee?: (child: CallExpression['callee']) => boolean;
+ arguments?: (child: CallExpression['arguments']) => boolean;
+ },
+ (node: CallExpression, state: GraphBuilderState) => void
+];
+
+const sideEffects: SideEffect[] = [
+ [
+ // if the first argument of forEach is required, mark forEach as required
+ {
+ callee: (node) =>
+ t.isMemberExpression(node) &&
+ t.isIdentifier(node.property) &&
+ node.property.name === 'forEach',
+ },
+ (node, state) => state.graph.addEdge(node.arguments[0], node),
+ ],
+];
+
+function getCallee(node: CallExpression): Node {
+ if (
+ t.isSequenceExpression(node.callee) &&
+ node.callee.expressions.length === 2
+ ) {
+ const [first, second] = node.callee.expressions;
+ if (t.isNumericLiteral(first) && first.value === 0) {
+ return second;
+ }
+ }
+
+ return node.callee;
+}
+
+function findWildcardReexportStatement(
+ node: t.CallExpression,
+ identifierName: string,
+ graph: DepsGraph
+): t.Statement | null {
+ if (!t.isIdentifier(node.callee) || node.callee.name !== 'require')
+ return null;
+
+ const declarator = graph.getParent(node);
+ if (!t.isVariableDeclarator(declarator)) return null;
+
+ const declaration = graph.getParent(declarator);
+ if (!t.isVariableDeclaration(declaration)) return null;
+
+ const program = graph.getParent(declaration);
+ if (!t.isProgram(program)) return null;
+
+ // Our node is a correct export
+ // Let's check that we have something that looks like transpiled re-export
+ return (
+ program.body.find((statement) => {
+ /*
+ * We are looking for `Object.keys(_bar).forEach(…)`
+ */
+
+ if (!t.isExpressionStatement(statement)) return false;
+
+ const expression = statement.expression;
+ if (!t.isCallExpression(expression)) return false;
+
+ const callee = expression.callee;
+ if (!t.isMemberExpression(callee)) return false;
+
+ const { object, property } = callee;
+
+ if (!isIdentifier(property, 'forEach')) return false;
+
+ if (!t.isCallExpression(object)) return false;
+
+ // `object` should be `Object.keys`
+ if (
+ !t.isMemberExpression(object.callee) ||
+ !isIdentifier(object.callee.object, 'Object') ||
+ !isIdentifier(object.callee.property, 'keys')
+ )
+ return false;
+
+ //
+ const [argument] = object.arguments;
+ return isIdentifier(argument, identifierName);
+ }) ?? null
+ );
+}
+
+/*
+ * Returns nodes which are implicitly affected by specified node
+ */
+function getAffectedNodes(node: Node, state: GraphBuilderState): Node[] {
+ // FIXME: this method should be generalized
+ const callee = t.isCallExpression(node) ? getCallee(node) : null;
+ if (
+ t.isCallExpression(node) &&
+ t.isMemberExpression(callee) &&
+ isIdentifier(callee.object, 'Object') &&
+ isIdentifier(callee.property, [
+ 'assign',
+ 'defineProperty',
+ 'defineProperties',
+ 'freeze',
+ 'observe',
+ ])
+ ) {
+ const [obj, property] = node.arguments;
+ if (!t.isIdentifier(obj)) {
+ return [];
+ }
+
+ if (
+ state.scope.getDeclaration(obj) !== ScopeManager.globalExportsIdentifier
+ ) {
+ return [node.arguments[0]];
+ }
+
+ if (t.isStringLiteral(property)) {
+ if (property.value === '__esModule') {
+ return [node.arguments[0]];
+ }
+
+ state.graph.addExport(property.value, node);
+ }
+ }
+
+ return [];
+}
+
+export const visitors: Visitors = {
+ /*
+ * FunctionDeclaration | FunctionExpression | ObjectMethod | ArrowFunctionExpression | ClassMethod | ClassPrivateMethod;
+ * Functions can be either a statement or an expression.
+ * That's why we need to disable default dependency resolving strategy for expressions by passing `ignoreDeps` flag.
+ * Every function must have a body. Without a body, it becomes invalid.
+ * In general, a body depends on parameters of a function.
+ * In real life, some of the parameters can be omitted, but it's not trivial to implement that type of tree shaking.
+ */
+ Function(this: GraphBuilderState, node: Function) {
+ const unsubscribe = this.onVisit((descendant) =>
+ this.graph.addEdge(node, descendant)
+ );
+ this.baseVisit(node, true); // ignoreDeps=true prevents default dependency resolving
+ unsubscribe();
+
+ this.graph.addEdge(node, node.body);
+
+ node.params.forEach((param) => this.graph.addEdge(node.body, param));
+ if (
+ t.isFunctionExpression(node) &&
+ node.id !== null &&
+ node.id !== undefined
+ ) {
+ // keep function name in expressions like `const a = function a();`
+ this.graph.addEdge(node, node.id);
+ }
+ },
+
+ /*
+ * ExpressionStatement
+ */
+ ExpressionStatement(this: GraphBuilderState, node: ExpressionStatement) {
+ this.baseVisit(node);
+
+ this.graph.addEdge(node, node.expression);
+ this.graph.addEdge(node.expression, node);
+ },
+
+ /*
+ * BlockStatement | Program
+ * The same situation as in ExpressionStatement: if one of the expressions is required, the block itself is also required.
+ * Whereas a block doesn't depend on its children.
+ * Example:
+ * 1. let c;
+ * 2. { // BlockStatement begin
+ * 3. let a = 1;
+ * 4. let b = 2;
+ * 5. a++;
+ * 6. a = c;
+ * 7. } // BlockStatement end
+ *
+ * If we want to evaluate the value of `c`, we need to evaluate lines 1, 3, 5 and 6,
+ * but we don't need line 4, even though it's a child of the block.
+ */
+ Block(this: GraphBuilderState, node: Block) {
+ this.baseVisit(node);
+
+ if (t.isProgram(node)) {
+ const exportsDeclaration = this.scope.getDeclaration('global:exports')!;
+ this.graph.addEdge(node, exportsDeclaration);
+ node.directives.forEach((directive) =>
+ this.graph.addEdge(node, directive)
+ );
+ }
+ },
+
+ Directive(this: GraphBuilderState, node: Directive) {
+ this.baseVisit(node);
+ this.graph.addEdge(node, node.value);
+ },
+
+ /*
+ * TryStatement
+ * try { /* block *\/ } catch() {/* handler *\/} finalize {/* finalizer *\/}
+ * `handler` and `finalizer` do not make sense without `block`
+ * `block` depends on the whole node.
+ */
+ TryStatement(this: GraphBuilderState, node: TryStatement) {
+ this.baseVisit(node);
+ [node.handler, node.finalizer].forEach((statement) => {
+ if (statement) {
+ this.graph.addEdge(node.block, statement);
+ this.graph.addEdge(statement, node.block);
+ }
+ });
+ },
+
+ IfStatement(this: GraphBuilderState, node: IfStatement) {
+ this.baseVisit(node);
+ this.graph.addEdge(node, node.consequent);
+ this.graph.addEdge(node, node.test);
+ },
+
+ /*
+ * WhileStatement
+ * Pretty simple behaviour here:
+ * • if body is required, the statement is required
+ * • if the statement is required, the condition is also required.
+ */
+ WhileStatement(this: GraphBuilderState, node: WhileStatement) {
+ this.baseVisit(node);
+ this.graph.addEdge(node, node.test);
+ },
+
+ SwitchCase(this: GraphBuilderState, node: SwitchCase) {
+ this.baseVisit(node);
+ node.consequent.forEach((statement) => this.graph.addEdge(statement, node));
+ if (node.test) {
+ this.graph.addEdge(node, node.test);
+ }
+ },
+
+ SwitchStatement(this: GraphBuilderState, node: SwitchStatement) {
+ this.baseVisit(node);
+ node.cases.forEach((c) => this.graph.addEdge(c, node));
+ this.graph.addEdge(node, node.discriminant);
+ },
+
+ ForStatement(this: GraphBuilderState, node: ForStatement) {
+ this.baseVisit(node);
+
+ [node.init, node.test, node.update, node.body].forEach((child) => {
+ if (child) {
+ this.graph.addEdge(node, child);
+ }
+ });
+ },
+
+ /*
+ * ForInStatement
+ * for (const k in o) { body }
+ */
+ ForInStatement(this: GraphBuilderState, node: ForInStatement) {
+ this.baseVisit(node);
+
+ if (node.body) {
+ this.graph.addEdge(node, node.body);
+ this.graph.addEdge(node.body, node.left);
+ }
+
+ this.graph.addEdge(node.left, node.right);
+ },
+
+ /*
+ * BreakStatement | ContinueStatement | ReturnStatement | ThrowStatement | YieldExpression | AwaitExpression
+ * All these nodes are required to evaluate the value of a function in which they are defined.
+ * Also, the value of these nodes depends on the argument if it is presented.
+ */
+ Terminatorless(this: GraphBuilderState, node: Terminatorless) {
+ this.baseVisit(node);
+
+ if (
+ !(t.isBreakStatement(node) || t.isContinueStatement(node)) &&
+ node.argument
+ ) {
+ this.graph.addEdge(node, node.argument);
+ }
+
+ const closestFunctionNode = peek(this.fnStack);
+ this.graph.addEdge(closestFunctionNode, node);
+ },
+
+ /*
+ * ObjectExpression
+ * Objects are… complicated. Especially because similarly looking code can be either an expression or a pattern.
+ * In this case we work with an expression like:
+ * const obj = {
+ * method() {}, // ObjectMethod
+ * property: "value", // ObjectProperty
+ * ...rest, // SpreadElement
+ * }
+ */
+ ObjectExpression(this: GraphBuilderState, node: ObjectExpression) {
+ this.context.push('expression');
+ this.baseVisit(node);
+ node.properties.forEach((prop) => {
+ this.graph.addEdge(node, prop);
+ if (t.isObjectMethod(prop)) {
+ this.graph.addEdge(prop, prop.key);
+ this.graph.addEdge(prop, prop.body);
+ } else if (t.isObjectProperty(prop)) {
+ this.graph.addEdge(prop, prop.key);
+ this.graph.addEdge(prop, prop.value);
+ } else if (t.isSpreadElement(prop)) {
+ this.graph.addEdge(prop, prop.argument);
+ }
+ });
+ this.context.pop();
+ },
+
+ /*
+ * MemberExpression
+ * It's about a simple expression like `obj.foo` or `obj['foo']`.
+ * In addition to default behaviour (an expression depends on all its children),
+ * we add a backward dependency from an object to a node for processing member
+ * expressions in assignments.
+ *
+ * Example:
+ * let obj = { a: 1 };
+ * obj.b = 2;
+ *
+ * If we try to evaluate `obj` without backward dependency,
+ * `obj.b = 2` will be cut and we will get just `{ a: 1 }`.
+ */
+ MemberExpression(this: GraphBuilderState, node: MemberExpression) {
+ this.baseVisit(node);
+
+ if (
+ isIdentifier(node.object, 'exports') &&
+ this.scope.getDeclaration(node.object) ===
+ ScopeManager.globalExportsIdentifier
+ ) {
+ // We treat `exports.something` and `exports['something']` as identifiers in the global scope
+ this.graph.addEdge(node, node.object);
+ this.graph.addEdge(node, node.property);
+
+ const isLVal = peek(this.context) === 'lval';
+ if (isLVal) {
+ this.scope.declare(node, false);
+ } else {
+ const declaration = this.scope.addReference(node);
+ this.graph.addEdge(node, declaration);
+ }
+
+ return;
+ }
+
+ if (
+ t.isIdentifier(node.object) &&
+ ((t.isIdentifier(node.property) && !node.computed) ||
+ t.isStringLiteral(node.property))
+ ) {
+ // It's simple `foo.bar` or `foo["bar"]` expression. Is it a usage of a required library?
+ const declaration = this.scope.getDeclaration(node.object);
+ if (
+ t.isIdentifier(declaration) &&
+ this.graph.importAliases.has(declaration)
+ ) {
+ // It is. We can remember what exactly we use from it.
+ const source = this.graph.importAliases.get(declaration)!;
+ this.graph.imports.get(source)!.push(node.property);
+ }
+ }
+ },
+
+ /*
+ * AssignmentExpression
+ * `a = b`, `{ ...rest } = obj`, `obj.a = 3`, etc.
+ * It's not a declaration, it's just an assignment, but it affects
+ * the value of declared variable if the variable it mentioned in the left part.
+ * So, we apply some context-magic here in order to catch reference of variables in the left part.
+ * We switch the context to `lval` and continue traversing through the left branch.
+ * If we then meet some identifier, we mark it as a dependency of its declaration.
+ */
+ AssignmentExpression(this: GraphBuilderState, node: AssignmentExpression) {
+ this.context.push('lval');
+ this.visit<AssignmentExpression['left'], AssignmentExpression>(
+ node.left,
+ node,
+ 'left'
+ );
+ this.context.pop();
+
+ this.visit(node.right, node, 'right');
+
+ // The value of an expression depends on the left part.
+ this.graph.addEdge(node, node.left);
+
+ // The left part of an assignment depends on the right part.
+ this.graph.addEdge(node.left, node.right);
+ },
+
+ /*
+ * VariableDeclarator
+ * It would be pretty simple if it weren't used to declare variables from other modules.
+ */
+ VariableDeclarator(this: GraphBuilderState, node: VariableDeclarator) {
+ /*
+ * declared is used for detecting external dependencies in cases like
+ * const { a, b, c } = require('module');
+ *
+ * We are remembering all declared variables in order to use it later in CallExpression visitor
+ */
+ const declared: Array<[Identifier, Identifier | null]> = [];
+ this.meta.set('declared', declared);
+ const unregister = this.scope.addDeclareHandler((identifier, from) =>
+ declared.push([identifier, from])
+ );
+ this.baseVisit(node);
+ this.meta.delete('declared');
+ unregister();
+
+ if (node.init) {
+ // If there is an initialization part, the identifier depends on it.
+ this.graph.addEdge(node.id, node.init);
+ }
+
+ // If a statement is required itself, an id is also required
+ this.graph.addEdge(node, node.id);
+ },
+
+ /*
+ * VariableDeclaration
+ * It's just a wrapper for group of VariableDeclarator.
+ * If one of the declarators is required, the wrapper itself is also required.
+ */
+ VariableDeclaration(this: GraphBuilderState, node: VariableDeclaration) {
+ this.meta.set('kind-of-declaration', node.kind);
+ this.baseVisit(node);
+ node.declarations.forEach((declaration) =>
+ this.graph.addEdge(declaration, node)
+ );
+ this.meta.delete('kind-of-declaration');
+ },
+
+ /*
+ * CallExpression
+ * Do you remember that we have already mentioned it in VariableDeclarator?
+ * It is a simple expression with default behaviour unless it is a `require`.
+ *
+ * Another tricky use case here is functions with side effects (e.g. `Object.defineProperty`).
+ */
+ CallExpression(
+ this: GraphBuilderState,
+ node: CallExpression,
+ parent: Node | null
+ ) {
+ this.baseVisit(node);
+
+ if (t.isIdentifier(node.callee) && node.callee.name === 'require') {
+ // It looks like a module import …
+ const scopeId = this.scope.whereIsDeclared(node.callee);
+ if (scopeId && scopeId !== 'global') {
+ // … but it is just a user defined function
+ return;
+ }
+
+ const [firstArg] = node.arguments;
+ if (!t.isStringLiteral(firstArg)) {
+ // dynamic import? Maybe someday we can do something about it
+ return;
+ }
+
+ const { value: source } = firstArg;
+ const declared = this.meta.get('declared') as Array<
+ [Identifier, Identifier | null]
+ >;
+ if (!declared) {
+ // This is a standalone `require`
+ return;
+ }
+
+ // Define all declared variables as external dependencies.
+ declared.forEach(([local, _imported]) =>
+ // FIXME: var slugify = require('../slugify').default;
+ {
+ if (!this.graph.imports.has(source)) {
+ this.graph.imports.set(source, []);
+ }
+
+ if (
+ parent &&
+ t.isMemberExpression(parent) &&
+ t.isIdentifier(parent.property)
+ ) {
+ // An imported function is specified right here.
+ // eg. require('../slugify').default
+ this.graph.imports.get(source)!.push(parent.property);
+ } else {
+ if (
+ t.isCallExpression(parent) &&
+ t.isIdentifier(parent.callee) &&
+ typeof parent.callee.name === 'string'
+ ) {
+ if (parent.callee.name.startsWith('_interopRequireDefault')) {
+ this.graph.importTypes.set(source, 'default');
+ } else if (
+ parent.callee.name.startsWith('_interopRequireWildcard')
+ ) {
+ this.graph.importTypes.set(source, 'wildcard');
+ } else {
+ // What I've missed?
+ }
+ }
+
+ // Do we know the type of import?
+ if (!this.graph.importTypes.has(source)) {
+ // Is it a wildcard reexport? Let's check.
+ const statement = findWildcardReexportStatement(
+ node,
+ local.name,
+ this.graph
+ );
+ if (statement) {
+ this.graph.addEdge(local, statement);
+ this.graph.reexports.push(local);
+ this.graph.importTypes.set(source, 'reexport');
+ }
+ }
+
+ // The whole namespace was imported. We will know later, what exactly we need.
+ // eg. const slugify = require('../slugify');
+ this.graph.importAliases.set(local, source);
+ }
+ }
+ );
+
+ return;
+ }
+
+ sideEffects.forEach(([conditions, callback]) => {
+ if (
+ (conditions.callee && !conditions.callee(node.callee)) ||
+ (conditions.arguments && !conditions.arguments(node.arguments))
+ ) {
+ return;
+ }
+
+ return callback(node, this);
+ });
+
+ getAffectedNodes(node, this).forEach((affectedNode) => {
+ this.graph.addEdge(affectedNode, node);
+ if (t.isIdentifier(affectedNode)) {
+ this.graph.addEdge(
+ this.scope.getDeclaration(affectedNode)!,
+ affectedNode
+ );
+ }
+ });
+ },
+
+ /*
+ * SequenceExpression
+ * It is a special case of expression in which the value of the whole
+ * expression depends only on the last subexpression in the list.
+ * The rest of the subexpressions can be omitted if they don't have dependent nodes.
+ *
+ * Example:
+ * const a = (1, 2, b = 3, 4, b + 2); // `a` will be equal 5
+ */
+ SequenceExpression(this: GraphBuilderState, node: SequenceExpression) {
+ // Sequence value depends on only last expression in the list
+ this.baseVisit(node, true);
+ if (node.expressions.length > 0) {
+ this.graph.addEdge(node, node.expressions[node.expressions.length - 1]);
+ }
+ },
+};
+
+export const identifierHandlers: IdentifierHandlers = {
+ declare: [
+ ['CatchClause', 'param'],
+ ['Function', 'params'],
+ ['FunctionExpression', 'id'],
+ ['RestElement', 'argument'],
+ ['ThrowStatement', 'argument'],
+ ['VariableDeclarator', 'id'],
+ ],
+ keep: [['ObjectProperty', 'key']],
+ refer: [
+ ['ArrayExpression', 'elements'],
+ ['AssignmentExpression', 'left', 'right'],
+ ['BinaryExpression', 'left', 'right'],
+ ['CallExpression', 'arguments', 'callee'],
+ ['ConditionalExpression', 'test', 'consequent', 'alternate'],
+ ['ForInStatement', 'right'],
+ ['Function', 'body'],
+ ['IfStatement', 'test'],
+ ['LogicalExpression', 'left', 'right'],
+ ['NewExpression', 'arguments', 'callee'],
+ ['ObjectProperty', 'value'],
+ ['ReturnStatement', 'argument'],
+ ['SequenceExpression', 'expressions'],
+ ['SwitchStatement', 'discriminant'],
+ ['UnaryExpression', 'argument'],
+ ['UpdateExpression', 'argument'],
+ ['VariableDeclarator', 'init'],
+ ],
+};
diff --git a/@linaria/packages/shaker/src/scope.ts b/@linaria/packages/shaker/src/scope.ts
new file mode 100644
index 0000000..2b496b0
--- /dev/null
+++ b/@linaria/packages/shaker/src/scope.ts
@@ -0,0 +1,210 @@
+import { types as t } from '@babel/core';
+import invariant from 'ts-invariant';
+
+type Scope = Map<string, Set<t.Identifier | t.MemberExpression>>;
+
+export type ScopeId = number | 'global' | 'exports';
+export type DeclareHandler = (
+ identifier: t.Identifier,
+ from: t.Identifier | null
+) => void;
+
+const ResolvedNode = Symbol('ResolvedNode');
+const functionScopes = new WeakSet<Scope>();
+
+export class PromisedNode<T = t.Node> {
+ static is<TNode>(obj: any): obj is PromisedNode<TNode> {
+ return obj && ResolvedNode in obj;
+ }
+
+ [ResolvedNode]: T | undefined;
+
+ get identifier(): T | undefined {
+ return this[ResolvedNode];
+ }
+}
+
+export const resolveNode = <T = t.Node>(
+ obj: T | PromisedNode<T> | undefined
+): T | undefined => (PromisedNode.is<T>(obj) ? obj.identifier : obj);
+
+const getExportName = (node: t.Node): string => {
+ invariant(
+ t.isMemberExpression(node),
+ `getExportName expects MemberExpression but received ${node.type}`
+ );
+
+ const { object, property } = node;
+ invariant(
+ t.isIdentifier(object) && object.name === 'exports',
+ `getExportName expects a member expression with 'exports'`
+ );
+ invariant(
+ t.isIdentifier(property) || t.isStringLiteral(property),
+ `getExportName supports only identifiers and literals as names of exported values`
+ );
+
+ const name = t.isIdentifier(property) ? property.name : property.value;
+ return `exports.${name}`;
+};
+
+const scopeIds = new WeakMap<Scope, ScopeId>();
+const getId = (scope: Scope, identifier: t.Identifier | string): string => {
+ const scopeId = scopeIds.get(scope);
+ return `${scopeId}:${
+ typeof identifier === 'string' ? identifier : identifier.name
+ }`;
+};
+
+export default class ScopeManager {
+ public static globalExportsIdentifier = t.identifier('exports');
+ public static globalModuleIdentifier = t.identifier('module');
+ private nextId = 0;
+ private readonly stack: Array<Scope> = [];
+ private readonly map: Map<ScopeId, Scope> = new Map();
+ private readonly handlers: Map<ScopeId, Array<DeclareHandler>> = new Map();
+ private readonly declarations: Map<
+ string,
+ t.Identifier | t.MemberExpression | PromisedNode<t.Identifier>
+ > = new Map();
+
+ private get global(): Scope {
+ return this.map.get('global')!;
+ }
+
+ constructor() {
+ this.new(true, 'global');
+ this.declare(ScopeManager.globalExportsIdentifier, false);
+ this.declare(ScopeManager.globalModuleIdentifier, false);
+ }
+
+ new(isFunction: boolean, scopeId: ScopeId = this.nextId++): Scope {
+ const scope: Scope = new Map();
+ if (isFunction) {
+ functionScopes.add(scope);
+ }
+
+ scopeIds.set(scope, scopeId);
+ this.map.set(scopeId, scope);
+ this.handlers.set(scopeId, []);
+ this.stack.unshift(scope);
+ return scope;
+ }
+
+ dispose(): Scope | undefined {
+ const disposed = this.stack.shift();
+ if (disposed) {
+ this.map.delete(scopeIds.get(disposed)!);
+ }
+
+ return disposed;
+ }
+
+ declare(
+ identifierOrMemberExpression: t.Identifier | t.MemberExpression,
+ isHoistable: boolean,
+ from: t.Identifier | null = null,
+ stack = 0
+ ): void {
+ if (t.isMemberExpression(identifierOrMemberExpression)) {
+ // declare receives MemberExpression only if it's `exports.something` expression
+ const memberExp = identifierOrMemberExpression;
+ const name = getExportName(memberExp);
+ if (!this.global.has(name)) {
+ this.global.set(name, new Set());
+ }
+
+ // There can be a few `export.foo = …` statements, but we need only the last one
+ this.declarations.set(getId(this.global, name), memberExp);
+ this.global.get(name)!.add(memberExp);
+ return;
+ }
+
+ const identifier = identifierOrMemberExpression;
+ const idName = identifier.name;
+ const scope = this.stack
+ .slice(stack)
+ .find((s) => !isHoistable || functionScopes.has(s))!;
+ if (this.global.has(idName)) {
+ // It's probably a declaration of a previous referenced identifier
+ // Let's use naïve implementation of hoisting
+ const promise = this.declarations.get(
+ getId(this.global, identifier)
+ )! as PromisedNode<t.Identifier>;
+ promise[ResolvedNode] = identifier;
+ scope.set(
+ idName,
+ new Set([identifier, ...Array.from(this.global.get(idName)!)])
+ );
+ this.global.delete(idName);
+ } else {
+ scope.set(idName, new Set([identifier]));
+ }
+
+ this.declarations.set(getId(scope, identifier), identifier);
+ const handlers = this.handlers.get(scopeIds.get(scope)!)!;
+ handlers.forEach((handler) => handler(identifier, from));
+ }
+
+ addReference(
+ identifierOrMemberExpression: t.Identifier | t.MemberExpression
+ ): t.Identifier | t.MemberExpression | PromisedNode {
+ const name = t.isIdentifier(identifierOrMemberExpression)
+ ? identifierOrMemberExpression.name
+ : getExportName(identifierOrMemberExpression);
+ const scope = this.stack.find((s) => s.has(name)) ?? this.global;
+ const id = getId(scope, name);
+ if (scope === this.global && !scope.has(name)) {
+ scope.set(name, new Set());
+ this.declarations.set(id, new PromisedNode());
+ }
+
+ scope.get(name)!.add(identifierOrMemberExpression);
+ return this.declarations.get(id)!;
+ }
+
+ whereIsDeclared(identifier: t.Identifier): ScopeId | undefined {
+ const name = identifier.name;
+ const scope = this.stack.find(
+ (s) => s.has(name) && s.get(name)!.has(identifier)
+ );
+ if (scope) {
+ return scopeIds.get(scope);
+ }
+
+ if (this.global.has(name)) {
+ return 'global';
+ }
+
+ return undefined;
+ }
+
+ getDeclaration(
+ identifierOrMemberExpOrName: t.Identifier | t.MemberExpression | string
+ ): t.Identifier | t.MemberExpression | undefined {
+ let name: string;
+ if (typeof identifierOrMemberExpOrName === 'string') {
+ name = identifierOrMemberExpOrName;
+ } else if (t.isMemberExpression(identifierOrMemberExpOrName)) {
+ name = getId(this.global, getExportName(identifierOrMemberExpOrName));
+ } else {
+ const scopeId = this.whereIsDeclared(identifierOrMemberExpOrName);
+ if (scopeId === undefined) {
+ return undefined;
+ }
+
+ name = getId(this.map.get(scopeId)!, identifierOrMemberExpOrName);
+ }
+
+ return resolveNode(this.declarations.get(name));
+ }
+
+ addDeclareHandler(handler: DeclareHandler): () => void {
+ const scopeId = scopeIds.get(this.stack[0])!;
+ this.handlers.get(scopeId)!.push(handler);
+ return () => {
+ const handlers = this.handlers.get(scopeId)!.filter((h) => h !== handler);
+ this.handlers.set(scopeId, handlers);
+ };
+ }
+}
diff --git a/@linaria/packages/shaker/src/shaker.ts b/@linaria/packages/shaker/src/shaker.ts
new file mode 100644
index 0000000..f2584f3
--- /dev/null
+++ b/@linaria/packages/shaker/src/shaker.ts
@@ -0,0 +1,127 @@
+import type { Node, Program } from '@babel/types';
+import generator from '@babel/generator';
+import { debug } from '@linaria/logger';
+import { isNode, getVisitorKeys } from '@linaria/babel-preset';
+import build from './graphBuilder';
+import dumpNode from './dumpNode';
+
+/*
+ * Returns new tree without dead nodes
+ */
+function shakeNode<TNode extends Node>(node: TNode, alive: Set<Node>): Node {
+ const keys = getVisitorKeys(node) as Array<keyof TNode>;
+ const changes: Partial<TNode> = {};
+ const isNodeAlive = (n: Node) => alive.has(n);
+
+ for (const key of keys) {
+ const subNode = node[key];
+
+ if (Array.isArray(subNode)) {
+ const list: any = [];
+ let hasChanges = false;
+ for (let i = 0; i < subNode.length; i++) {
+ const child = subNode[i];
+ const isAlive = isNodeAlive(child);
+ hasChanges = hasChanges || !isAlive;
+ if (child && isAlive) {
+ const shaken = shakeNode(child, alive);
+ if (shaken) {
+ list.push(shaken);
+ }
+
+ hasChanges = hasChanges || shaken !== child;
+ }
+ }
+ if (hasChanges) {
+ changes[key] = list;
+ }
+ } else if (isNode(subNode)) {
+ if (isNodeAlive(subNode)) {
+ const shaken = shakeNode(subNode, alive);
+ if (shaken && shaken !== subNode) {
+ changes[key] = shaken as any;
+ }
+ } else {
+ changes[key] = undefined;
+ }
+ }
+ }
+
+ return Object.keys(changes).length ? { ...node, ...changes } : node;
+}
+
+/*
+ * Gets AST and a list of nodes for evaluation
+ * Removes unrelated “dead” code.
+ * Adds to the end of module export of array of evaluated values or evaluation errors.
+ * Returns new AST and an array of external dependencies.
+ */
+export default function shake(
+ rootPath: Program,
+ exports: string[] | null
+): [Program, Map<string, string[]>] {
+ debug(
+ 'evaluator:shaker:shake',
+ () =>
+ `source (exports: ${(exports || []).join(', ')}):\n${
+ generator(rootPath).code
+ }`
+ );
+
+ const depsGraph = build(rootPath);
+ const alive = new Set<Node>();
+ const reexports: string[] = [];
+ let deps = (exports ?? [])
+ .map((token) => {
+ const node = depsGraph.getLeaf(token);
+ if (node) return [node];
+ // We have some unknown token. Do we have `export * from …` in that file?
+ if (depsGraph.reexports.length === 0) {
+ return [];
+ }
+
+ // If so, mark all re-exported files as required
+ reexports.push(token);
+ return [...depsGraph.reexports];
+ })
+ .reduce<Node[]>((acc, el) => {
+ acc.push(...el);
+ return acc;
+ }, []);
+ while (deps.length > 0) {
+ // Mark all dependencies as alive
+ deps.forEach((d) => alive.add(d));
+
+ // Collect new dependencies of dependencies
+ deps = depsGraph.getDependencies(deps).filter((d) => !alive.has(d));
+ }
+
+ const shaken = shakeNode(rootPath, alive) as Program;
+ /*
+ * If we want to know what is really happen with our code tree,
+ * we can print formatted tree here by setting env variable LINARIA_LOG=debug
+ */
+ debug('evaluator:shaker:shake', () => dumpNode(rootPath, alive));
+
+ const imports = new Map<string, string[]>();
+ for (let [source, members] of depsGraph.imports.entries()) {
+ const importType = depsGraph.importTypes.get(source);
+ const defaultMembers = importType === 'wildcard' ? ['*'] : [];
+ const aliveMembers = new Set(
+ members
+ .filter((i) => alive.has(i))
+ .map((i) => (i.type === 'Identifier' ? i.name : i.value))
+ );
+
+ if (importType === 'reexport') {
+ reexports.forEach((token) => aliveMembers.add(token));
+ }
+
+ imports.set(
+ source,
+ aliveMembers.size > 0 ? Array.from(aliveMembers) : defaultMembers
+ );
+ }
+
+ return [shaken, imports];
+}
diff --git a/@linaria/packages/shaker/src/types.ts b/@linaria/packages/shaker/src/types.ts
new file mode 100644
index 0000000..582e014
--- /dev/null
+++ b/@linaria/packages/shaker/src/types.ts
@@ -0,0 +1,22 @@
+import type { Aliases, Node, VisitorKeys } from '@babel/types';
+
+export type NodeOfType<T> = Extract<Node, { type: T }>;
+
+export type NodeType = Node['type'] | keyof Aliases;
+
+export type VisitorAction = 'ignore' | void;
+
+export type Visitor<TNode extends Node> = <TParent extends Node>(
+ node: TNode,
+ parent: TParent | null,
+ parentKey: VisitorKeys[TParent['type']] | null,
+ listIdx: number | null
+) => VisitorAction;
+
+export type Visitors = { [TMethod in NodeType]?: Visitor<NodeOfType<TMethod>> };
+
+export type IdentifierHandlerType = 'declare' | 'keep' | 'refer';
+
+export type IdentifierHandlers = {
+ [key in IdentifierHandlerType]: [NodeType, ...string[]][];
+};
diff --git a/@linaria/packages/shaker/tsconfig.json b/@linaria/packages/shaker/tsconfig.json
new file mode 100644
index 0000000..fbcbab1
--- /dev/null
+++ b/@linaria/packages/shaker/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [
+ { "path": "../babel" },
+ { "path": "../logger" },
+ { "path": "../preeval" }
+ ]
+}
diff --git a/@linaria/packages/stylelint/CHANGELOG.md b/@linaria/packages/stylelint/CHANGELOG.md
new file mode 100644
index 0000000..6be3171
--- /dev/null
+++ b/@linaria/packages/stylelint/CHANGELOG.md
@@ -0,0 +1,40 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package @linaria/stylelint
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+**Note:** Version bump only for package @linaria/stylelint
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/stylelint
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/stylelint
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package @linaria/stylelint
diff --git a/@linaria/packages/stylelint/README.md b/@linaria/packages/stylelint/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/stylelint/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/stylelint/babel.config.js b/@linaria/packages/stylelint/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/stylelint/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/stylelint/package.json b/@linaria/packages/stylelint/package.json
new file mode 100644
index 0000000..1ab8aae
--- /dev/null
+++ b/@linaria/packages/stylelint/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "@linaria/stylelint",
+ "version": "3.0.0-beta.7",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "dependencies": {
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "strip-ansi": "^5.2.0"
+ }
+}
diff --git a/@linaria/packages/stylelint/src/index.ts b/@linaria/packages/stylelint/src/index.ts
new file mode 100644
index 0000000..1794dcb
--- /dev/null
+++ b/@linaria/packages/stylelint/src/index.ts
@@ -0,0 +1,12 @@
+export default {
+ processors: [require.resolve('./preprocessor')],
+ syntax: 'scss',
+ rules: {
+ 'property-no-vendor-prefix': true,
+ 'string-no-newline': true,
+ 'value-no-vendor-prefix': true,
+ 'no-empty-source': null,
+ 'no-extra-semicolons': null,
+ 'no-missing-end-of-source-newline': null,
+ },
+};
diff --git a/@linaria/packages/stylelint/src/preprocessor.ts b/@linaria/packages/stylelint/src/preprocessor.ts
new file mode 100644
index 0000000..9e9945c
--- /dev/null
+++ b/@linaria/packages/stylelint/src/preprocessor.ts
@@ -0,0 +1,185 @@
+import stripAnsi from 'strip-ansi';
+import { transform } from '@linaria/babel-preset';
+import type { Replacement } from '@linaria/babel-preset';
+
+type Errors = {
+ [key: string]:
+ | {
+ name?: string;
+ code?: string;
+ message: string;
+ pos?: number;
+ loc?: {
+ line: number;
+ column: number;
+ };
+ }
+ | null
+ | undefined;
+};
+
+type Cache = {
+ [key: string]: Replacement[] | null | undefined;
+};
+
+type Warning = {
+ rule?: string;
+ text: string;
+ severity: 'error' | 'warning';
+ line: number;
+ column: number;
+};
+
+type LintResult = {
+ errored: boolean;
+ warnings: Warning[];
+};
+
+function preprocessor() {
+ const errors: Errors = {};
+ const cache: Cache = {};
+
+ return {
+ code(input: string, filename: string) {
+ let result;
+
+ try {
+ result = transform(input, {
+ filename,
+ });
+
+ cache[filename] = undefined;
+ errors[filename] = undefined;
+ } catch (e) {
+ cache[filename] = undefined;
+ errors[filename] = e;
+
+ // Ignore parse errors here
+ // We handle it separately
+ return '';
+ }
+
+ const { rules, replacements } = result;
+
+ if (!rules) {
+ return '';
+ }
+
+ // Construct a CSS-ish file from the unprocessed style rules
+ let cssText = '';
+
+ Object.keys(rules).forEach((selector) => {
+ const rule = rules[selector];
+
+ // Append new lines until we get to the start line number
+ let line = cssText.split('\n').length;
+
+ while (rule.start && line < rule.start.line) {
+ cssText += '\n';
+ line++;
+ }
+
+ cssText += `.${rule.displayName} {`;
+
+ // Append blank spaces until we get to the start column number
+ const last = cssText.split('\n').pop();
+
+ let column = last ? last.length : 0;
+
+ while (rule.start && column < rule.start.column) {
+ cssText += ' ';
+ column++;
+ }
+
+ cssText += `${rule.cssText} }`;
+ });
+
+ cache[filename] = replacements;
+
+ return cssText;
+ },
+ result(result: LintResult, filename: string) {
+ const error = errors[filename];
+ const replacements = cache[filename];
+
+ if (error) {
+ // Babel adds this to the error message
+ const prefix = `${filename}: `;
+
+ let message = stripAnsi(
+ error.message.startsWith(prefix)
+ ? error.message.replace(prefix, '')
+ : error.message
+ );
+
+ let { loc } = error;
+
+ if (!loc) {
+ // If the error doesn't have location info, try to find it from the code frame
+ const line = message.split('\n').find((l) => l.startsWith('>'));
+ const column = message.split('\n').find((l) => l.includes('^'));
+
+ if (line && column) {
+ loc = {
+ line: Number(line.replace(/^> /, '').split('|')[0].trim()),
+ column: column.replace(/[^|]+\|\s/, '').length,
+ };
+ }
+ }
+
+ if (loc) {
+ // Strip the codeframe text if we have location of the error
+ // It's formatted badly by stylelint, so not very helpful
+ message = message.replace(/^>?\s+\d?\s\|.*$/gm, '').trim();
+ }
+
+ // eslint-disable-next-line no-param-reassign
+ result.errored = true;
+ result.warnings.push({
+ rule: error.code || error.name,
+ text: message,
+ line: loc ? loc.line : 0,
+ column: loc ? loc.column : 0,
+ severity: 'error',
+ });
+ }
+
+ if (replacements) {
+ replacements.forEach(({ original, length }) => {
+ // If the warnings contain stuff that's been replaced,
+ // Correct the line and column numbers to what's replaced
+ result.warnings.forEach((w) => {
+ /* eslint-disable no-param-reassign */
+
+ if (w.line === original.start.line) {
+ // If the error is on the same line where an interpolation started, we need to adjust the line and column numbers
+ // Because a replacement would have increased or decreased the column numbers
+ // If it's in the same line where interpolation ended, it would have been adjusted during replacement
+ if (w.column > original.start.column + length) {
+ // The error is from an item after the replacements
+ // So we need to adjust the column
+ w.column +=
+ original.end.column - original.start.column + 1 - length;
+ } else if (
+ w.column >= original.start.column &&
+ w.column < original.start.column + length
+ ) {
+ // The linter will underline the whole word in the editor if column is in inside a word
+ // Set the column to the end, so it will underline the word inside the interpolation
+ // e.g. in `${colors.primary}`, `primary` will be underlined
+ w.column =
+ original.start.line === original.end.line
+ ? original.end.column - 1
+ : original.start.column;
+ }
+ }
+ });
+ });
+ }
+
+ return result;
+ },
+ };
+}
+
+module.exports = preprocessor;
diff --git a/@linaria/packages/stylelint/tsconfig.json b/@linaria/packages/stylelint/tsconfig.json
new file mode 100644
index 0000000..38139ee
--- /dev/null
+++ b/@linaria/packages/stylelint/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [{ "path": "../babel" }]
+}
diff --git a/@linaria/packages/webpack-loader/CHANGELOG.md b/@linaria/packages/webpack-loader/CHANGELOG.md
new file mode 100644
index 0000000..dc3c8ed
--- /dev/null
+++ b/@linaria/packages/webpack-loader/CHANGELOG.md
@@ -0,0 +1,48 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package @linaria/webpack-loader
+
+
+
+
+
+# [3.0.0-beta.6](https://github.com/callstack/linaria/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-06)
+
+**Note:** Version bump only for package @linaria/webpack-loader
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+**Note:** Version bump only for package @linaria/webpack-loader
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/webpack-loader
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/webpack-loader
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package @linaria/webpack-loader
diff --git a/@linaria/packages/webpack-loader/README.md b/@linaria/packages/webpack-loader/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/webpack-loader/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/webpack-loader/babel.config.js b/@linaria/packages/webpack-loader/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/webpack-loader/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/webpack-loader/package.json b/@linaria/packages/webpack-loader/package.json
new file mode 100644
index 0000000..ce29a55
--- /dev/null
+++ b/@linaria/packages/webpack-loader/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "@linaria/webpack-loader",
+ "version": "3.0.0-beta.7",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types/index.d.ts",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "@linaria/webpack4-loader": "^3.0.0-beta.7",
+ "@linaria/webpack5-loader": "^3.0.0-beta.7"
+ }
+}
diff --git a/@linaria/packages/webpack-loader/src/index.ts b/@linaria/packages/webpack-loader/src/index.ts
new file mode 100644
index 0000000..4660310
--- /dev/null
+++ b/@linaria/packages/webpack-loader/src/index.ts
@@ -0,0 +1,21 @@
+import webpack4Loader from '@linaria/webpack4-loader';
+import webpack5Loader from '@linaria/webpack5-loader';
+
+type W4This = ThisParameterType<typeof webpack4Loader>;
+type W4Params = Parameters<typeof webpack4Loader>;
+
+type W5This = ThisParameterType<typeof webpack5Loader>;
+type W5Params = Parameters<typeof webpack5Loader>;
+
+export default function webpackLoader(
+ this: W4This | W5This,
+ ...args: W4Params | W5Params
+) {
+ if ('getOptions' in this) {
+ // webpack v5
+ webpack5Loader.apply(this, args);
+ } else {
+ // webpack v4
+ webpack4Loader.apply(this, args);
+ }
+}
diff --git a/@linaria/packages/webpack-loader/tsconfig.json b/@linaria/packages/webpack-loader/tsconfig.json
new file mode 100644
index 0000000..8d49d50
--- /dev/null
+++ b/@linaria/packages/webpack-loader/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [
+ { "path": "../webpack4-loader" },
+ { "path": "../webpack5-loader" }
+ ]
+}
diff --git a/@linaria/packages/webpack4-loader/CHANGELOG.md b/@linaria/packages/webpack4-loader/CHANGELOG.md
new file mode 100644
index 0000000..c8fca74
--- /dev/null
+++ b/@linaria/packages/webpack4-loader/CHANGELOG.md
@@ -0,0 +1,54 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+
+### Bug Fixes
+
+* webpack resolve options ([#785](https://github.com/callstack/linaria/issues/785)) ([64b2b06](https://github.com/callstack/linaria/commit/64b2b06edd873d7db0f36ef25a4b9d8389808eb2))
+
+
+
+
+
+# [3.0.0-beta.6](https://github.com/callstack/linaria/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-06)
+
+
+### Bug Fixes
+
+* **webpack:** hot reload fails after compile error (fixes [#762](https://github.com/callstack/linaria/issues/762)) ([#775](https://github.com/callstack/linaria/issues/775)) ([67fcd81](https://github.com/callstack/linaria/commit/67fcd8108f283f8ade23c68ad3fece8aee335bf1))
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+**Note:** Version bump only for package @linaria/webpack4-loader
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/webpack4-loader
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/webpack4-loader
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package @linaria/webpack4-loader
diff --git a/@linaria/packages/webpack4-loader/README.md b/@linaria/packages/webpack4-loader/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/webpack4-loader/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/webpack4-loader/babel.config.js b/@linaria/packages/webpack4-loader/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/webpack4-loader/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/webpack4-loader/package.json b/@linaria/packages/webpack4-loader/package.json
new file mode 100644
index 0000000..c7fdf8a
--- /dev/null
+++ b/@linaria/packages/webpack4-loader/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "@linaria/webpack4-loader",
+ "version": "3.0.0-beta.7",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "@types/cosmiconfig": "^5.0.3",
+ "@types/enhanced-resolve": "^3.0.6",
+ "@types/loader-utils": "^1.1.3",
+ "@types/mkdirp": "^0.5.2",
+ "@types/normalize-path": "^3.0.0",
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "@linaria/logger": "^3.0.0-beta.3",
+ "cosmiconfig": "^5.1.0",
+ "enhanced-resolve": "^4.1.0",
+ "find-yarn-workspace-root": "^1.2.1",
+ "loader-utils": "^1.2.3",
+ "mkdirp": "^0.5.1",
+ "normalize-path": "^3.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7"
+ }
+}
diff --git a/@linaria/packages/webpack4-loader/src/index.ts b/@linaria/packages/webpack4-loader/src/index.ts
new file mode 100644
index 0000000..c55329a
--- /dev/null
+++ b/@linaria/packages/webpack4-loader/src/index.ts
@@ -0,0 +1,167 @@
+/**
+ * This file contains a Webpack loader for Linaria.
+ * It uses the transform.ts function to generate class names from source code,
+ * returns transformed code without template literals and attaches generated source maps
+ */
+
+import fs from 'fs';
+import path from 'path';
+import mkdirp from 'mkdirp';
+import normalize from 'normalize-path';
+import loaderUtils from 'loader-utils';
+import enhancedResolve from 'enhanced-resolve';
+import findYarnWorkspaceRoot from 'find-yarn-workspace-root';
+import type { RawSourceMap } from 'source-map';
+import cosmiconfig from 'cosmiconfig';
+import { EvalCache, Module, transform } from '@linaria/babel-preset';
+import { debug } from '@linaria/logger';
+
+const workspaceRoot = findYarnWorkspaceRoot();
+const lernaConfig = cosmiconfig('lerna', {
+ searchPlaces: ['lerna.json'],
+}).searchSync();
+const lernaRoot =
+ lernaConfig !== null ? path.dirname(lernaConfig.filepath) : null;
+
+type LoaderContext = Parameters<typeof loaderUtils.getOptions>[0];
+
+const castSourceMap = <T extends { version: number } | { version: string }>(
+ sourceMap: T | null | undefined
+) =>
+ sourceMap
+ ? {
+ ...sourceMap,
+ version: sourceMap.version.toString(),
+ }
+ : undefined;
+
+export default function webpack4Loader(
+ this: LoaderContext,
+ content: string,
+ inputSourceMap: RawSourceMap | null
+) {
+ debug('loader', this.resourcePath);
+
+ EvalCache.clearForFile(this.resourcePath);
+
+ const resolveOptionsDefaults = {
+ conditionNames: ['require'],
+ extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
+ };
+
+ const {
+ sourceMap = undefined,
+ cacheDirectory = '.linaria-cache',
+ preprocessor = undefined,
+ extension = '.linaria.css',
+ resolveOptions = {},
+ ...rest
+ } = loaderUtils.getOptions(this) || {};
+
+ const root = workspaceRoot || lernaRoot || process.cwd();
+
+ const baseOutputFileName = this.resourcePath.replace(/\.[^.]+$/, extension);
+
+ const outputFilename = normalize(
+ path.join(
+ path.isAbsolute(cacheDirectory)
+ ? cacheDirectory
+ : path.join(process.cwd(), cacheDirectory),
+ this.resourcePath.includes(root)
+ ? path.relative(root, baseOutputFileName)
+ : baseOutputFileName
+ )
+ );
+
+ const resolveSync = enhancedResolve.create.sync(
+ // this._compilation is a deprecated API
+ // However there seems to be no other way to access webpack's resolver
+ // There is this.resolve, but it's asynchronous
+ // Another option is to read the webpack.config.js, but it won't work for programmatic usage
+ // This API is used by many loaders/plugins, so hope we're safe for a while
+ {
+ ...resolveOptionsDefaults,
+ ...((this._compilation?.options.resolve && {
+ alias: this._compilation.options.resolve.alias,
+ modules: this._compilation.options.resolve.modules,
+ }) ||
+ {}),
+ ...resolveOptions,
+ }
+ );
+
+ let result;
+
+ const originalResolveFilename = Module._resolveFilename;
+
+ try {
+ // Use webpack's resolution when evaluating modules
+ Module._resolveFilename = (id, { filename }) => {
+ const result = resolveSync(path.dirname(filename), id);
+ this.addDependency(result);
+ return result;
+ };
+
+ result = transform(content, {
+ filename: path.relative(process.cwd(), this.resourcePath),
+ inputSourceMap: inputSourceMap ?? undefined,
+ outputFilename,
+ pluginOptions: rest,
+ preprocessor,
+ });
+ } finally {
+ // Restore original behaviour
+ Module._resolveFilename = originalResolveFilename;
+ }
+
+ if (result.cssText) {
+ let { cssText } = result;
+
+ if (sourceMap) {
+ cssText += `/*# sourceMappingURL=data:application/json;base64,${Buffer.from(
+ result.cssSourceMapText || ''
+ ).toString('base64')}*/`;
+ }
+
+ if (result.dependencies?.length) {
+ result.dependencies.forEach((dep) => {
+ try {
+ const f = resolveSync(path.dirname(this.resourcePath), dep);
+
+ this.addDependency(f);
+ } catch (e) {
+ // eslint-disable-next-line no-console
+ console.warn(`[linaria] failed to add dependency for: ${dep}`, e);
+ }
+ });
+ }
+
+ // Read the file first to compare the content
+ // Write the new content only if it's changed
+ // This will prevent unnecessary WDS reloads
+ let currentCssText;
+
+ try {
+ currentCssText = fs.readFileSync(outputFilename, 'utf-8');
+ } catch (e) {
+ // Ignore error
+ }
+
+ if (currentCssText !== cssText) {
+ mkdirp.sync(path.dirname(outputFilename));
+ fs.writeFileSync(outputFilename, cssText);
+ }
+
+ this.callback(
+ null,
+ `${result.code}\n\nrequire(${loaderUtils.stringifyRequest(
+ this,
+ outputFilename
+ )});`,
+ castSourceMap(result.sourceMap)
+ );
+ return;
+ }
+
+ this.callback(null, result.code, castSourceMap(result.sourceMap));
+}
diff --git a/@linaria/packages/webpack4-loader/tsconfig.json b/@linaria/packages/webpack4-loader/tsconfig.json
new file mode 100644
index 0000000..0b7f756
--- /dev/null
+++ b/@linaria/packages/webpack4-loader/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [{ "path": "../babel" }, { "path": "../logger" }]
+}
diff --git a/@linaria/packages/webpack5-loader/CHANGELOG.md b/@linaria/packages/webpack5-loader/CHANGELOG.md
new file mode 100644
index 0000000..b9ff875
--- /dev/null
+++ b/@linaria/packages/webpack5-loader/CHANGELOG.md
@@ -0,0 +1,54 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+
+### Bug Fixes
+
+* webpack resolve options ([#785](https://github.com/callstack/linaria/issues/785)) ([64b2b06](https://github.com/callstack/linaria/commit/64b2b06edd873d7db0f36ef25a4b9d8389808eb2))
+
+
+
+
+
+# [3.0.0-beta.6](https://github.com/callstack/linaria/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-06)
+
+
+### Bug Fixes
+
+* **webpack:** hot reload fails after compile error (fixes [#762](https://github.com/callstack/linaria/issues/762)) ([#775](https://github.com/callstack/linaria/issues/775)) ([67fcd81](https://github.com/callstack/linaria/commit/67fcd8108f283f8ade23c68ad3fece8aee335bf1))
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+**Note:** Version bump only for package @linaria/webpack5-loader
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package @linaria/webpack5-loader
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package @linaria/webpack5-loader
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package @linaria/webpack5-loader
diff --git a/@linaria/packages/webpack5-loader/README.md b/@linaria/packages/webpack5-loader/README.md
new file mode 100644
index 0000000..0d75b37
--- /dev/null
+++ b/@linaria/packages/webpack5-loader/README.md
@@ -0,0 +1,35 @@
+<p align="center">
+ <img alt="Linaria" src="https://raw.githubusercontent.com/callstack/linaria/HEAD/website/assets/linaria-logo@2x.png" width="496">
+</p>
+
+<p align="center">
+Zero-runtime CSS in JS library.
+</p>
+
+---
+
+### 📖 Please refer to the [GitHub](https://github.com/callstack/linaria#readme) for full documentation.
+
+## Features
+
+- Write CSS in JS, but with **zero runtime**, CSS is extracted to CSS files during build
+- Familiar **CSS syntax** with Sass like nesting
+- Use **dynamic prop based styles** with the React bindings, uses CSS variables behind the scenes
+- Easily find where the style was defined with **CSS sourcemaps**
+- **Lint your CSS** in JS with [stylelint](https://github.com/stylelint/stylelint)
+- Use **JavaScript for logic**, no CSS preprocessor needed
+- Optionally use any **CSS preprocessor** such as Sass or PostCSS
+
+**[Why use Linaria](../../docs/BENEFITS.md)**
+
+## Installation
+
+```sh
+npm install @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
+
+or
+
+```sh
+yarn add @linaria/core @linaria/react @linaria/babel-preset @linaria/shaker
+```
diff --git a/@linaria/packages/webpack5-loader/babel.config.js b/@linaria/packages/webpack5-loader/babel.config.js
new file mode 100644
index 0000000..c9ad680
--- /dev/null
+++ b/@linaria/packages/webpack5-loader/babel.config.js
@@ -0,0 +1,3 @@
+const config = require('../../babel.config');
+
+module.exports = config;
diff --git a/@linaria/packages/webpack5-loader/package.json b/@linaria/packages/webpack5-loader/package.json
new file mode 100644
index 0000000..57377be
--- /dev/null
+++ b/@linaria/packages/webpack5-loader/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "@linaria/webpack5-loader",
+ "version": "3.0.0-beta.7",
+ "publishConfig": {
+ "access": "public"
+ },
+ "description": "Blazing fast zero-runtime CSS in JS library",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "types": "types",
+ "files": [
+ "types/",
+ "lib/",
+ "esm/"
+ ],
+ "license": "MIT",
+ "repository": "git@github.com:callstack/linaria.git",
+ "bugs": {
+ "url": "https://github.com/callstack/linaria/issues"
+ },
+ "homepage": "https://github.com/callstack/linaria#readme",
+ "keywords": [
+ "react",
+ "linaria",
+ "css",
+ "css-in-js",
+ "styled-components",
+ "babel-plugin",
+ "babel"
+ ],
+ "scripts": {
+ "build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build:esm": "babel src --out-dir esm --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
+ "build": "yarn build:lib && yarn build:esm",
+ "build:declarations": "tsc --emitDeclarationOnly --outDir types",
+ "prepare": "yarn build && yarn build:declarations",
+ "typecheck": "tsc --noEmit --composite false",
+ "watch": "yarn build --watch"
+ },
+ "devDependencies": {
+ "@types/cosmiconfig": "^5.0.3",
+ "@types/enhanced-resolve": "^3.0.6",
+ "@types/loader-utils": "^1.1.3",
+ "@types/mkdirp": "^0.5.2",
+ "@types/normalize-path": "^3.0.0",
+ "source-map": "^0.7.3",
+ "webpack": "^5.6.0"
+ },
+ "dependencies": {
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "@linaria/logger": "^3.0.0-beta.3",
+ "cosmiconfig": "^5.1.0",
+ "enhanced-resolve": "^5.3.1",
+ "find-yarn-workspace-root": "^1.2.1",
+ "loader-utils": "^2.0.0",
+ "mkdirp": "^0.5.1",
+ "normalize-path": "^3.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7",
+ "webpack": ">=5"
+ }
+}
diff --git a/@linaria/packages/webpack5-loader/src/index.ts b/@linaria/packages/webpack5-loader/src/index.ts
new file mode 100644
index 0000000..e4314e2
--- /dev/null
+++ b/@linaria/packages/webpack5-loader/src/index.ts
@@ -0,0 +1,162 @@
+/**
+ * This file contains a Webpack loader for Linaria.
+ * It uses the transform.ts function to generate class names from source code,
+ * returns transformed code without template literals and attaches generated source maps
+ */
+
+import fs from 'fs';
+import path from 'path';
+import loaderUtils from 'loader-utils';
+import mkdirp from 'mkdirp';
+import normalize from 'normalize-path';
+import enhancedResolve from 'enhanced-resolve';
+import findYarnWorkspaceRoot from 'find-yarn-workspace-root';
+import type { RawSourceMap } from 'source-map';
+import cosmiconfig from 'cosmiconfig';
+import { EvalCache, Module, transform } from '@linaria/babel-preset';
+import { debug } from '@linaria/logger';
+
+const workspaceRoot = findYarnWorkspaceRoot();
+const lernaConfig = cosmiconfig('lerna', {
+ searchPlaces: ['lerna.json'],
+}).searchSync();
+const lernaRoot =
+ lernaConfig !== null ? path.dirname(lernaConfig.filepath) : null;
+
+export default function webpack5Loader(
+ this: any,
+ content: string,
+ inputSourceMap: RawSourceMap | null
+) {
+ debug('loader', this.resourcePath);
+
+ EvalCache.clearForFile(this.resourcePath);
+
+ const resolveOptionsDefaults = {
+ conditionNames: ['require'],
+ extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
+ };
+
+ const {
+ sourceMap = undefined,
+ cacheDirectory = '.linaria-cache',
+ preprocessor = undefined,
+ extension = '.linaria.css',
+ resolveOptions = {},
+ ...rest
+ } = this.getOptions() || {};
+
+ const root = workspaceRoot || lernaRoot || process.cwd();
+
+ const baseOutputFileName = this.resourcePath.replace(/\.[^.]+$/, extension);
+
+ const outputFilename = normalize(
+ path.join(
+ path.isAbsolute(cacheDirectory)
+ ? cacheDirectory
+ : path.join(process.cwd(), cacheDirectory),
+ this.resourcePath.includes(root)
+ ? path.relative(root, baseOutputFileName)
+ : baseOutputFileName
+ )
+ );
+
+ const resolveSync = enhancedResolve.create.sync(
+ // this._compilation is a deprecated API
+ // However there seems to be no other way to access webpack's resolver
+ // There is this.resolve, but it's asynchronous
+ // Another option is to read the webpack.config.js, but it won't work for programmatic usage
+ // This API is used by many loaders/plugins, so hope we're safe for a while
+ {
+ ...resolveOptionsDefaults,
+ ...((this._compilation?.options.resolve && {
+ alias: this._compilation.options.resolve.alias,
+ modules: this._compilation.options.resolve.modules,
+ }) ||
+ {}),
+ ...resolveOptions,
+ }
+ );
+
+ let result;
+
+ const originalResolveFilename = Module._resolveFilename;
+
+ try {
+ // Use webpack's resolution when evaluating modules
+ Module._resolveFilename = (id, { filename }) => {
+ const result = resolveSync(path.dirname(filename), id);
+ if (!result) {
+ // enhanced-resolve v4 throws a error when dependency is missed
+ throw new Error('No result');
+ }
+
+ this.addDependency(result);
+ return result;
+ };
+
+ result = transform(content, {
+ filename: path.relative(process.cwd(), this.resourcePath),
+ inputSourceMap: inputSourceMap ?? undefined,
+ outputFilename,
+ pluginOptions: rest,
+ preprocessor,
+ });
+ } finally {
+ // Restore original behaviour
+ Module._resolveFilename = originalResolveFilename;
+ }
+
+ if (result.cssText) {
+ let { cssText } = result;
+
+ if (sourceMap) {
+ cssText += `/*# sourceMappingURL=data:application/json;base64,${Buffer.from(
+ result.cssSourceMapText || ''
+ ).toString('base64')}*/`;
+ }
+
+ if (result.dependencies?.length) {
+ result.dependencies.forEach((dep) => {
+ try {
+ const f = resolveSync(path.dirname(this.resourcePath), dep);
+
+ this.addDependency(f);
+ } catch (e) {
+ // eslint-disable-next-line no-console
+ console.warn(`[linaria] failed to add dependency for: ${dep}`, e);
+ }
+ });
+ }
+
+ // Read the file first to compare the content
+ // Write the new content only if it's changed
+ // This will prevent unnecessary WDS reloads
+ let currentCssText;
+
+ try {
+ currentCssText = fs.readFileSync(outputFilename, 'utf-8');
+ } catch (e) {
+ // Ignore error
+ }
+
+ if (currentCssText !== cssText) {
+ mkdirp.sync(path.dirname(outputFilename));
+ fs.writeFileSync(outputFilename, cssText);
+ }
+
+ this.callback(
+ null,
+ `${result.code}\n\nrequire(${loaderUtils.stringifyRequest(
+ this,
+ outputFilename
+ )});`,
+ result.sourceMap ?? undefined
+ );
+ return;
+ }
+
+ this.callback(null, result.code, result.sourceMap ?? undefined);
+}
+
+export type Webpack5Loader = typeof webpack5Loader;
diff --git a/@linaria/packages/webpack5-loader/tsconfig.json b/@linaria/packages/webpack5-loader/tsconfig.json
new file mode 100644
index 0000000..0b7f756
--- /dev/null
+++ b/@linaria/packages/webpack5-loader/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": { "paths": {}, "rootDir": "src/" },
+ "references": [{ "path": "../babel" }, { "path": "../logger" }]
+}
diff --git a/@linaria/react/package.json b/@linaria/react/package.json
new file mode 100644
index 0000000..2f5a476
--- /dev/null
+++ b/@linaria/react/package.json
@@ -0,0 +1,5 @@
+{
+ "main": "../lib/react/index.js",
+ "module": "../esm/react/index.js",
+ "types": "../lib/react/index.d.ts"
+}
diff --git a/@linaria/tsconfig.json b/@linaria/tsconfig.json
new file mode 100644
index 0000000..7ae195b
--- /dev/null
+++ b/@linaria/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "exclude": [
+ "node_modules",
+ "packages/*/__dtslint__/**",
+ "packages/*/__tests__/**",
+ "packages/*/__fixtures__/**",
+ "packages/*/__utils__/**",
+ "packages/*/types/**"
+ ],
+ "compilerOptions": {
+ "baseUrl": ".",
+ "composite": true,
+ "paths": {
+ "@linaria/*": ["./packages/*/src"]
+ },
+ "jsx": "react",
+ "lib": ["es6", "dom"],
+ "module": "es6",
+ "moduleResolution": "node",
+ "strict": true,
+ "target": "esnext",
+ "allowSyntheticDefaultImports": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "declaration": true,
+ "typeRoots": ["node_modules/@types", "typings"]
+ }
+}
diff --git a/@linaria/tsconfig.prod.json b/@linaria/tsconfig.prod.json
new file mode 100644
index 0000000..ac97660
--- /dev/null
+++ b/@linaria/tsconfig.prod.json
@@ -0,0 +1,4 @@
+{
+ "extends": "./tsconfig.json",
+ "include": ["src/core/*.ts", "src/react/*.ts"]
+}
diff --git a/@linaria/tslint.json b/@linaria/tslint.json
new file mode 100644
index 0000000..5643073
--- /dev/null
+++ b/@linaria/tslint.json
@@ -0,0 +1,11 @@
+{
+ "extends": "dtslint/dtslint.json",
+ "rules": {
+ "file-name-casing": false,
+ "interface-over-type-literal": false,
+ "strict-export-declare-modifiers": false
+ },
+ "linterOptions": {
+ "exclude": ["node_modules/**", "packages/*/types"]
+ }
+}
diff --git a/@linaria/website/.eslintrc b/@linaria/website/.eslintrc
new file mode 100644
index 0000000..88b1938
--- /dev/null
+++ b/@linaria/website/.eslintrc
@@ -0,0 +1,5 @@
+{
+ "settings": {
+ "import/core-modules": []
+ }
+}
diff --git a/@linaria/website/CHANGELOG.md b/@linaria/website/CHANGELOG.md
new file mode 100644
index 0000000..57cac4e
--- /dev/null
+++ b/@linaria/website/CHANGELOG.md
@@ -0,0 +1,56 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+# [3.0.0-beta.11](https://github.com/callstack/linaria/compare/v3.0.0-beta.10...v3.0.0-beta.11) (2021-08-08)
+
+**Note:** Version bump only for package linaria-website
+
+
+
+
+
+# [3.0.0-beta.7](https://github.com/callstack/linaria/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-06-24)
+
+**Note:** Version bump only for package linaria-website
+
+
+
+
+
+# [3.0.0-beta.6](https://github.com/callstack/linaria/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-06)
+
+**Note:** Version bump only for package linaria-website
+
+
+
+
+
+# [3.0.0-beta.5](https://github.com/callstack/linaria/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-05-31)
+
+**Note:** Version bump only for package linaria-website
+
+
+
+
+
+# [3.0.0-beta.4](https://github.com/callstack/linaria/compare/v3.0.0-beta.3...v3.0.0-beta.4) (2021-05-07)
+
+**Note:** Version bump only for package linaria-website
+
+
+
+
+
+# [3.0.0-beta.3](https://github.com/callstack/linaria/compare/v3.0.0-beta.2...v3.0.0-beta.3) (2021-04-20)
+
+**Note:** Version bump only for package linaria-website
+
+
+
+
+
+# [3.0.0-beta.2](https://github.com/callstack/linaria/compare/v3.0.0-beta.1...v3.0.0-beta.2) (2021-04-11)
+
+**Note:** Version bump only for package linaria-website
diff --git a/@linaria/website/assets/code-sample.png b/@linaria/website/assets/code-sample.png
new file mode 100644
index 0000000..6d532ab
--- /dev/null
+++ b/@linaria/website/assets/code-sample.png
Binary files differ
diff --git a/@linaria/website/assets/linaria-logo.svg b/@linaria/website/assets/linaria-logo.svg
new file mode 100644
index 0000000..e16e090
--- /dev/null
+++ b/@linaria/website/assets/linaria-logo.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 263.42 67.35">
+<defs>
+<style>.cls-1{fill:#fff;}</style>
+</defs>
+<title>linaria-logo</title>
+<g id="Warstwa_2" data-name="Warstwa 2">
+<g id="logo">
+<path class="cls-1" d="M103,49a6,6,0,0,0,2.91-1l.81,4a9.09,9.09,0,0,1-5,1.62,6,6,0,0,1-4.63-2,7.94,7.94,0,0,1-1.78-5.52V13.42h5V45.53Q100.3,49,103,49Z"/>
+<path class="cls-1" d="M117.08,14.44a3.19,3.19,0,0,1,.89,2.32,3.19,3.19,0,0,1-.89,2.32,3.19,3.19,0,0,1-4.47,0,3.19,3.19,0,0,1-.89-2.32,3.19,3.19,0,0,1,.89-2.32,3.19,3.19,0,0,1,4.47,0Zm-4.71,10.45h5v28.5h-5Z"/>
+<path class="cls-1" d="M151.37,27.67q2.85,2.94,2.86,8.11V53.39h-5V37.12a7,7,0,0,0-7.6-7.65,8.6,8.6,0,0,0-6.22,2.45,9.62,9.62,0,0,0-2.72,6.22V53.39h-5V24.89h5v6q2.85-6.09,10.83-6.2A10.46,10.46,0,0,1,151.37,27.67Z"/>
+<path class="cls-1" d="M190.21,24.89v28.5h-5V47.84a11.28,11.28,0,0,1-4.31,4.31,12.69,12.69,0,0,1-6.3,1.51,13.6,13.6,0,0,1-7.14-1.86,12.76,12.76,0,0,1-4.82-5.17,16.15,16.15,0,0,1-1.72-7.57,15.71,15.71,0,0,1,1.72-7.46,12.61,12.61,0,0,1,4.85-5.09,13.8,13.8,0,0,1,7.11-1.83,12.88,12.88,0,0,1,6.3,1.48,11.1,11.1,0,0,1,4.31,4.28V24.89Zm-8,22a10,10,0,0,0,3-6.55V38.14a10.13,10.13,0,0,0-3-6.57,9.1,9.1,0,0,0-6.6-2.53,9.44,9.44,0,0,0-5,1.32A9.27,9.27,0,0,0,167.2,34a11.64,11.64,0,0,0,0,10.45,9.07,9.07,0,0,0,3.42,3.61,9.59,9.59,0,0,0,5,1.29A9.15,9.15,0,0,0,182.21,46.84Z"/>
+<path class="cls-1" d="M209.49,26.37a11.86,11.86,0,0,1,6.14-1.64v4.85a9.16,9.16,0,0,0-10.13,8.78v15h-5V24.89h5V31A10.31,10.31,0,0,1,209.49,26.37Z"/>
+<path class="cls-1" d="M226.33,14.44a3.19,3.19,0,0,1,.89,2.32,3.19,3.19,0,0,1-.89,2.32,3.19,3.19,0,0,1-4.47,0,3.19,3.19,0,0,1-.89-2.32,3.19,3.19,0,0,1,.89-2.32,3.19,3.19,0,0,1,4.47,0Zm-4.71,10.45h5v28.5h-5Z"/>
+<path class="cls-1" d="M263.42,24.89v28.5h-5V47.84a11.28,11.28,0,0,1-4.31,4.31,12.69,12.69,0,0,1-6.3,1.51,13.6,13.6,0,0,1-7.14-1.86,12.76,12.76,0,0,1-4.82-5.17,16.15,16.15,0,0,1-1.72-7.57,15.71,15.71,0,0,1,1.72-7.46,12.61,12.61,0,0,1,4.85-5.09,13.8,13.8,0,0,1,7.11-1.83,12.88,12.88,0,0,1,6.3,1.48,11.1,11.1,0,0,1,4.31,4.28V24.89Zm-8,22a10,10,0,0,0,3-6.55V38.14a10.13,10.13,0,0,0-3-6.57,9.1,9.1,0,0,0-6.6-2.53,9.44,9.44,0,0,0-5,1.32A9.27,9.27,0,0,0,240.41,34a11.64,11.64,0,0,0,0,10.45,9.07,9.07,0,0,0,3.42,3.61,9.59,9.59,0,0,0,5,1.29A9.15,9.15,0,0,0,255.42,46.84Z"/><path class="cls-1" d="M23.21,48.37H16.35a11.09,11.09,0,0,1,0-22.18,2.63,2.63,0,1,0,0-5.26,16.35,16.35,0,0,0,0,32.7h6.86A11.1,11.1,0,0,1,34.3,64.72a2.63,2.63,0,0,0,5.26,0A16.37,16.37,0,0,0,23.21,48.37Z"/><path class="cls-1" d="M57.51,20.93a16.39,16.39,0,0,0-7.6,1.87A64.43,64.43,0,0,1,38,27.71a7.33,7.33,0,0,1-3.71.14A11.44,11.44,0,0,1,36.65,5.27,11.44,11.44,0,0,1,48.37,16.7a2.63,2.63,0,0,0,5.26,0A16.7,16.7,0,1,0,23.79,27a16.76,16.76,0,0,0,9.34,6,12.6,12.6,0,0,0,6.39-.22,69.61,69.61,0,0,0,12.84-5.3,11,11,0,0,1,5.15-1.26,11.09,11.09,0,1,1,0,22.18H50.65a16.35,16.35,0,0,0-8.18,2.19,2.63,2.63,0,1,0,2.63,4.56,11.08,11.08,0,0,1,5.54-1.48h6.86a16.35,16.35,0,1,0,0-32.7Z"/></g></g></svg>
diff --git a/@linaria/website/assets/linaria-logo@2x.png b/@linaria/website/assets/linaria-logo@2x.png
new file mode 100644
index 0000000..a9c975d
--- /dev/null
+++ b/@linaria/website/assets/linaria-logo@2x.png
Binary files differ
diff --git a/@linaria/website/assets/linaria-logomark.svg b/@linaria/website/assets/linaria-logomark.svg
new file mode 100644
index 0000000..6c28e31
--- /dev/null
+++ b/@linaria/website/assets/linaria-logomark.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 73.86 67.35">
+ <title>linaria-logomark-black</title>
+ <g id="Warstwa_2" data-name="Warstwa 2">
+ <g id="logo">
+ <path fill="white" fill-opacity="0.17" d="M23.21,48.37H16.35a11.09,11.09,0,0,1,0-22.18,2.63,2.63,0,1,0,0-5.26,16.35,16.35,0,0,0,0,32.7h6.86A11.1,11.1,0,0,1,34.3,64.72a2.63,2.63,0,0,0,5.26,0A16.37,16.37,0,0,0,23.21,48.37Z"/>
+ <path fill="white" fill-opacity="0.17" d="M57.51,20.93a16.39,16.39,0,0,0-7.6,1.87A64.43,64.43,0,0,1,38,27.71a7.33,7.33,0,0,1-3.71.14A11.44,11.44,0,0,1,36.65,5.27,11.44,11.44,0,0,1,48.37,16.7a2.63,2.63,0,0,0,5.26,0A16.7,16.7,0,1,0,23.79,27a16.76,16.76,0,0,0,9.34,6,12.6,12.6,0,0,0,6.39-.22,69.61,69.61,0,0,0,12.84-5.3,11,11,0,0,1,5.15-1.26,11.09,11.09,0,1,1,0,22.18H50.65a16.35,16.35,0,0,0-8.18,2.19,2.63,2.63,0,1,0,2.63,4.56,11.08,11.08,0,0,1,5.54-1.48h6.86a16.35,16.35,0,1,0,0-32.7Z"/>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/@linaria/website/babel.config.js b/@linaria/website/babel.config.js
new file mode 100644
index 0000000..f6928ff
--- /dev/null
+++ b/@linaria/website/babel.config.js
@@ -0,0 +1,20 @@
+module.exports = {
+ presets: ['@babel/preset-env', '@babel/preset-flow', '@babel/preset-react'],
+ env: {
+ server: {
+ presets: [
+ ['@babel/preset-env', { targets: { node: 8 } }],
+ require.resolve('@linaria/babel-preset'),
+ ],
+ plugins: [
+ [
+ 'file-loader',
+ {
+ publicPath: '/dist',
+ outputPath: '/dist',
+ },
+ ],
+ ],
+ },
+ },
+};
diff --git a/@linaria/website/index.html b/@linaria/website/index.html
new file mode 100644
index 0000000..36117e4
--- /dev/null
+++ b/@linaria/website/index.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+ <title>Linaria – zero-runtime CSS in JS library</title>
+
+ <link rel="stylesheet" type="text/css" href="/dist/styles.css">
+</head>
+
+<body>
+ <div id="root"></div>
+
+ <script src="/dist/app.bundle.js"></script>
+</body>
+
+</html>
diff --git a/@linaria/website/linaria.config.js b/@linaria/website/linaria.config.js
new file mode 100644
index 0000000..fab2cc8
--- /dev/null
+++ b/@linaria/website/linaria.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ displayName: process.env.NODE_ENV !== 'production',
+};
diff --git a/@linaria/website/package.json b/@linaria/website/package.json
new file mode 100644
index 0000000..211d321
--- /dev/null
+++ b/@linaria/website/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "linaria-website",
+ "version": "3.0.0-beta.11",
+ "private": true,
+ "description": "Linaria website",
+ "scripts": {
+ "prestart": "yarn --cwd .. prepare",
+ "start": "webpack-serve",
+ "server": "node build/server",
+ "clean:client": "del dist",
+ "clean:server": "del build",
+ "clean": "yarn clean:client && yarn clean:server",
+ "build:client": "cross-env NODE_ENV=production webpack -p --env.NODE_ENV production",
+ "build:server": "cross-env NODE_ENV=production BABEL_ENV=server babel src --out-dir build",
+ "build": "yarn build:client && yarn build:server",
+ "prebuild": "yarn clean",
+ "lint:css": "stylelint src/**/*.js"
+ },
+ "dependencies": {
+ "@linaria/core": "^3.0.0-beta.4",
+ "@linaria/react": "^3.0.0-beta.11",
+ "@linaria/server": "^3.0.0-beta.3",
+ "babel-plugin-file-loader": "^1.1.1",
+ "dedent": "^0.7.0",
+ "escape-html": "^1.0.3",
+ "ignore-styles": "^5.0.1",
+ "koa": "^2.7.0",
+ "koa-compress": "^3.0.0",
+ "koa-router": "^7.4.0",
+ "koa-send": "^5.0.0",
+ "react": "^16.14.0",
+ "react-dom": "^16.14.0"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.12.1",
+ "@babel/core": "^7.12.3",
+ "@babel/preset-flow": "^7.0.0",
+ "@linaria/babel-preset": "^3.0.0-beta.7",
+ "@linaria/stylelint": "^3.0.0-beta.7",
+ "@linaria/webpack4-loader": "^3.0.0-beta.7",
+ "babel-loader": "^8.0.5",
+ "babel-plugin-module-resolver": "^3.2.0",
+ "cross-env": "^5.2.0",
+ "css-hot-loader": "^1.4.3",
+ "css-loader": "^2.1.0",
+ "del-cli": "^1.1.0",
+ "file-loader": "^3.0.1",
+ "mini-css-extract-plugin": "^0.5.0",
+ "stylelint": "^13.7.2",
+ "stylelint-config-recommended": "^3.0.0",
+ "webpack": "^4.44.2",
+ "webpack-cli": "^3.2.3",
+ "webpack-serve": "^3.2.0"
+ }
+}
diff --git a/@linaria/website/serve.config.js b/@linaria/website/serve.config.js
new file mode 100644
index 0000000..3d9b150
--- /dev/null
+++ b/@linaria/website/serve.config.js
@@ -0,0 +1,9 @@
+const path = require('path');
+
+module.exports = {
+ port: 3242,
+ content: path.resolve(__dirname),
+ devMiddleware: {
+ publicPath: '/dist/',
+ },
+};
diff --git a/@linaria/website/src/.eslintrc b/@linaria/website/src/.eslintrc
new file mode 100644
index 0000000..e5a34ae
--- /dev/null
+++ b/@linaria/website/src/.eslintrc
@@ -0,0 +1,5 @@
+{
+ "env": {
+ "browser": true
+ }
+}
diff --git a/@linaria/website/src/components/App.js b/@linaria/website/src/components/App.js
new file mode 100644
index 0000000..4a1d817
--- /dev/null
+++ b/@linaria/website/src/components/App.js
@@ -0,0 +1,22 @@
+/* @flow */
+
+import { styled } from '@linaria/react';
+import React from 'react';
+import Header from './Header';
+import Hero from './Hero';
+
+export default function Index() {
+ return (
+ <Page>
+ <Header />
+ <Hero />
+ </Page>
+ );
+}
+
+const Page = styled.div`
+ background: linear-gradient(to bottom right, #b24592, #f15f79);
+ color: #fff;
+ min-height: 100vh;
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.08);
+`;
diff --git a/@linaria/website/src/components/Container.js b/@linaria/website/src/components/Container.js
new file mode 100644
index 0000000..74a13ed
--- /dev/null
+++ b/@linaria/website/src/components/Container.js
@@ -0,0 +1,11 @@
+/* @flow */
+
+import { styled } from '@linaria/react';
+
+const Container = styled.div`
+ max-width: 1140px;
+ padding: 16px 24px;
+ margin: 0 auto;
+`;
+
+export default Container;
diff --git a/@linaria/website/src/components/Header.js b/@linaria/website/src/components/Header.js
new file mode 100644
index 0000000..3f6fd35
--- /dev/null
+++ b/@linaria/website/src/components/Header.js
@@ -0,0 +1,101 @@
+/* @flow */
+
+import { styled } from '@linaria/react';
+import React from 'react';
+import constants from '../styles/constants';
+import { media } from '../styles/utils';
+import Container from './Container';
+
+export default function Header() {
+ return (
+ <NavBar>
+ <LogoImage
+ src={require('../../assets/linaria-logo.svg')}
+ alt="Linaria Logo"
+ />
+ <Links>
+ <li>
+ <LinkItem href="https://github.com/callstack/linaria#features">
+ Features
+ </LinkItem>
+ </li>
+ <li>
+ <LinkItem
+ target="_blank"
+ rel="noopener noreferrer"
+ href="https://github.com/callstack/linaria/tree/master/docs"
+ >
+ Docs
+ </LinkItem>
+ </li>
+ <li>
+ <LinkItem
+ target="_blank"
+ rel="noopener noreferrer"
+ href="https://github.com/callstack/linaria"
+ title="GitHub"
+ >
+ GitHub
+ </LinkItem>
+ </li>
+ </Links>
+ </NavBar>
+ );
+}
+
+const NavBar = styled(Container)`
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+
+ ${media.medium} {
+ flex-direction: row;
+ }
+`;
+
+const LogoImage = styled.img`
+ height: 64px;
+ margin: 16px auto;
+ display: block;
+
+ ${media.medium} {
+ height: 48px;
+ margin: 0;
+ display: inline-block;
+ vertical-align: middle;
+ }
+`;
+
+const Links = styled.ul`
+ display: flex;
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ align-items: center;
+`;
+
+const LinkItem = styled.a`
+ display: block;
+ font-size: 1.2em;
+ font-weight: 700;
+ padding: 24px 16px;
+ text-decoration: none;
+ color: inherit;
+ transition: color 0.2s;
+ transition: 200ms;
+
+ &:hover {
+ color: inherit;
+ }
+
+ @supports (-webkit-background-clip: text) {
+ background-image: ${constants.gradient};
+ /* stylelint-disable-next-line property-no-vendor-prefix */
+ -webkit-background-clip: text;
+
+ &:hover {
+ color: transparent;
+ }
+ }
+`;
diff --git a/@linaria/website/src/components/Hero.js b/@linaria/website/src/components/Hero.js
new file mode 100644
index 0000000..a4fd568
--- /dev/null
+++ b/@linaria/website/src/components/Hero.js
@@ -0,0 +1,122 @@
+/* @flow */
+
+import { styled } from '@linaria/react';
+import React from 'react';
+import { media } from '../styles/utils';
+import Container from './Container';
+
+export default function Hero() {
+ return (
+ <HeroContainer>
+ <Container>
+ <Row>
+ <LeftColumn>
+ <Heading>Zero-Runtime CSS in JS</Heading>
+ <Description>
+ Write CSS in JS and get real CSS files during build. Use dynamic
+ prop based styles with the React bindings and have them transpiled
+ to CSS variables automatically. Great productivity with source
+ maps and linting support.
+ </Description>
+ <Button
+ as="a"
+ href="https://github.com/callstack/linaria#installation"
+ >
+ Get Started
+ </Button>
+ </LeftColumn>
+ <RightColumn>
+ <CodeSample
+ alt="Linaria code sample"
+ src={require('../../assets/code-sample.png')}
+ />
+ </RightColumn>
+ </Row>
+ </Container>
+ </HeroContainer>
+ );
+}
+
+const HeroContainer = styled.main`
+ position: relative;
+
+ ${media.large} {
+ padding: 64px 0;
+ background-image: url(${require('../../assets/linaria-logomark.svg')});
+ background-repeat: no-repeat;
+ background-position: bottom right;
+ }
+`;
+
+const Row = styled.div`
+ ${media.large} {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+`;
+
+const LeftColumn = styled.div`
+ text-align: center;
+ flex: 3;
+
+ ${media.large} {
+ text-align: left;
+ }
+`;
+
+const RightColumn = styled.div`
+ text-align: center;
+ flex: 2;
+ z-index: 1;
+`;
+
+const Heading = styled.h1`
+ font-weight: 700;
+ font-size: 56px;
+`;
+
+const Description = styled.p`
+ margin-bottom: 60px;
+`;
+
+const Button = styled.button`
+ display: inline-block;
+ appearance: none;
+ background: none;
+ border: 0;
+ padding: 16px 24px;
+ color: inherit;
+ font-size: inherit;
+ font-weight: 700;
+ font-family: inherit;
+ text-transform: uppercase;
+ text-decoration: none;
+ box-shadow: inset 0 0 0 2px currentColor, 1px 1px 1px rgba(0, 0, 0, 0.08);
+ border-radius: 30px;
+ cursor: pointer;
+ transition: color 200ms, background 200ms;
+
+ &:hover {
+ color: #d2356d;
+ box-shadow: inset 0 0 0 2px transparent, 1px 1px 1px rgba(0, 0, 0, 0.08);
+ background: linear-gradient(
+ to right,
+ hsl(180, 100%, 70%),
+ hsl(64, 57%, 82%),
+ hsl(0, 100%, 84%)
+ );
+ }
+`;
+
+const CodeSample = styled.img`
+ width: 100%;
+ height: auto;
+ margin: 64px 24px;
+ max-width: calc(100% - 48px);
+ box-shadow: 3px 3px 32px rgba(0, 0, 0, 0.32);
+
+ ${media.large} {
+ margin: 24px;
+ }
+`;
diff --git a/@linaria/website/src/index.js b/@linaria/website/src/index.js
new file mode 100644
index 0000000..d034852
--- /dev/null
+++ b/@linaria/website/src/index.js
@@ -0,0 +1,36 @@
+/* @flow */
+
+import { css } from '@linaria/core';
+import React from 'react';
+import ReactDOM from 'react-dom';
+import App from './components/App';
+import constants from './styles/constants';
+
+/* $FlowFixMe */
+ReactDOM.render(<App />, document.getElementById('root'));
+
+export const globals = css`
+ :global() {
+ html {
+ box-sizing: border-box;
+ height: 100%;
+ width: 100%;
+ }
+
+ body {
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ width: 100%;
+ font-family: ${constants.fontFamily};
+ font-size: 20px;
+ line-height: 1.42857;
+ }
+
+ *,
+ *:before,
+ *:after {
+ box-sizing: inherit;
+ }
+ }
+`;
diff --git a/@linaria/website/src/server.js b/@linaria/website/src/server.js
new file mode 100644
index 0000000..1ea6ad7
--- /dev/null
+++ b/@linaria/website/src/server.js
@@ -0,0 +1,73 @@
+/* @flow */
+
+import 'ignore-styles';
+
+import fs from 'fs';
+import path from 'path';
+import crypto from 'crypto';
+import { collect } from '@linaria/server';
+import Koa from 'koa';
+import Router from 'koa-router';
+import compress from 'koa-compress';
+import send from 'koa-send';
+import dedent from 'dedent';
+import React from 'react';
+import ReactDOMServer from 'react-dom/server';
+import config from '../serve.config';
+import App from './components/App';
+
+const cache = {};
+const css = fs.readFileSync(path.join(__dirname, '../dist/styles.css'), 'utf8');
+const app = new Koa();
+const router = new Router();
+
+app.use(compress());
+
+router.get('/', async (ctx) => {
+ const html = ReactDOMServer.renderToStaticMarkup(<App />);
+
+ const { critical, other } = collect(html, css);
+ const slug = crypto.createHash('md5').update(other).digest('hex');
+
+ cache[slug] = other;
+
+ ctx.type = 'html';
+ ctx.body = dedent`
+ <!doctype html>
+ <html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+ <title>Linaria – zero-runtime CSS in JS library</title>
+
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat:300,600">
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Fira+Mono">
+
+ <style type="text/css">${critical}</style>
+ </head>
+ <body>
+ <div id="root">${html}</div>
+
+ <script src="/dist/app.bundle.js"></script>
+ <link rel="stylesheet" href="/styles/${slug}">
+ </body>
+ </html>
+ `;
+});
+
+router.get('/dist/:path+', async (ctx) => {
+ await send(ctx, path.join('dist', ctx.params.path));
+});
+
+router.get('/styles/:slug', async (ctx) => {
+ ctx.type = 'text/css';
+ ctx.body = cache[ctx.params.slug];
+});
+
+app.use(router.routes());
+
+app.listen(config.port);
+
+// eslint-disable-next-line no-console
+console.log(`Listening on http://localhost:${config.port}`);
diff --git a/@linaria/website/src/styles/constants.js b/@linaria/website/src/styles/constants.js
new file mode 100644
index 0000000..a20a441
--- /dev/null
+++ b/@linaria/website/src/styles/constants.js
@@ -0,0 +1,8 @@
+/* @flow */
+
+export default {
+ fontFamily:
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", Helvetica, sans-serif',
+ gradient:
+ 'linear-gradient(to right, hsl(180, 100%, 70%), hsl(64, 57%, 82%), hsl(0, 100%, 90%))',
+};
diff --git a/@linaria/website/src/styles/utils.js b/@linaria/website/src/styles/utils.js
new file mode 100644
index 0000000..42c088c
--- /dev/null
+++ b/@linaria/website/src/styles/utils.js
@@ -0,0 +1,11 @@
+/* @flow */
+
+export const breakpoints = {
+ medium: 640,
+ large: 1024,
+};
+
+export const media = Object.keys(breakpoints).reduce((acc, item) => {
+ acc[item] = `@media screen and (min-width: ${breakpoints[item]}px)`;
+ return acc;
+}, {});
diff --git a/@linaria/website/stylelint.config.js b/@linaria/website/stylelint.config.js
new file mode 100644
index 0000000..9469350
--- /dev/null
+++ b/@linaria/website/stylelint.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ extends: [
+ 'stylelint-config-recommended',
+ require.resolve('@linaria/stylelint'),
+ ],
+};
diff --git a/@linaria/website/webpack.config.js b/@linaria/website/webpack.config.js
new file mode 100644
index 0000000..47427f5
--- /dev/null
+++ b/@linaria/website/webpack.config.js
@@ -0,0 +1,57 @@
+const path = require('path');
+const webpack = require('webpack'); // eslint-disable-line import/no-extraneous-dependencies
+const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // eslint-disable-line import/no-extraneous-dependencies
+
+const dev = process.env.NODE_ENV !== 'production';
+
+module.exports = {
+ mode: dev ? 'development' : 'production',
+ devtool: 'source-map',
+ entry: {
+ app: './src/index',
+ },
+ output: {
+ path: path.resolve(__dirname, 'dist'),
+ publicPath: '/dist/',
+ filename: '[name].bundle.js',
+ },
+ optimization: {
+ noEmitOnErrors: true,
+ },
+ plugins: [
+ new webpack.DefinePlugin({
+ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV) },
+ }),
+ new MiniCssExtractPlugin({ filename: 'styles.css' }),
+ ],
+ module: {
+ rules: [
+ {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ use: [
+ { loader: 'babel-loader' },
+ {
+ loader: require.resolve('@linaria/webpack4-loader'),
+ options: { sourceMap: dev },
+ },
+ ],
+ },
+ {
+ test: /\.css$/,
+ use: [
+ 'css-hot-loader',
+ MiniCssExtractPlugin.loader,
+ {
+ loader: 'css-loader',
+ options: { sourceMap: dev },
+ },
+ ],
+ },
+ {
+ test: /\.(png|jpg|gif|svg)$/,
+ use: [{ loader: 'file-loader' }],
+ },
+ ],
+ },
+};
diff --git a/@linaria/website/yarn.lock b/@linaria/website/yarn.lock
new file mode 100644
index 0000000..a60d56d
--- /dev/null
+++ b/@linaria/website/yarn.lock
@@ -0,0 +1,6175 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/cli@^7.12.1":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.14.5.tgz#9551b194f02360729de6060785bbdcce52c69f0a"
+ integrity sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==
+ dependencies:
+ commander "^4.0.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.1.0"
+ glob "^7.0.0"
+ make-dir "^2.1.0"
+ slash "^2.0.0"
+ source-map "^0.5.0"
+ optionalDependencies:
+ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.2"
+ chokidar "^3.4.0"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"
+ integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==
+ dependencies:
+ "@babel/highlight" "^7.14.5"
+
+"@babel/compat-data@^7.14.5":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08"
+ integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==
+
+"@babel/core@>=7.9.0", "@babel/core@^7.12.3":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab"
+ integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/generator" "^7.14.5"
+ "@babel/helper-compilation-targets" "^7.14.5"
+ "@babel/helper-module-transforms" "^7.14.5"
+ "@babel/helpers" "^7.14.6"
+ "@babel/parser" "^7.14.6"
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.1.2"
+ semver "^6.3.0"
+ source-map "^0.5.0"
+
+"@babel/generator@>=7", "@babel/generator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"
+ integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
+"@babel/helper-compilation-targets@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf"
+ integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==
+ dependencies:
+ "@babel/compat-data" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ browserslist "^4.16.6"
+ semver "^6.3.0"
+
+"@babel/helper-function-name@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4"
+ integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.14.5"
+ "@babel/template" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-get-function-arity@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815"
+ integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-hoist-variables@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d"
+ integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-member-expression-to-functions@^7.14.5":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970"
+ integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-module-imports@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"
+ integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-module-transforms@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e"
+ integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==
+ dependencies:
+ "@babel/helper-module-imports" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.14.5"
+ "@babel/helper-simple-access" "^7.14.5"
+ "@babel/helper-split-export-declaration" "^7.14.5"
+ "@babel/helper-validator-identifier" "^7.14.5"
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-optimise-call-expression@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"
+ integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
+ integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
+
+"@babel/helper-replace-supers@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94"
+ integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.14.5"
+ "@babel/helper-optimise-call-expression" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-simple-access@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4"
+ integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-split-export-declaration@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a"
+ integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-validator-identifier@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"
+ integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==
+
+"@babel/helper-validator-option@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
+ integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
+
+"@babel/helpers@^7.14.6":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635"
+ integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==
+ dependencies:
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/highlight@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
+ integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.5"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595"
+ integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==
+
+"@babel/plugin-syntax-dynamic-import@>=7":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-flow@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz#2ff654999497d7d7d142493260005263731da180"
+ integrity sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-flow-strip-types@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.14.5.tgz#0dc9c1d11dcdc873417903d6df4bed019ef0f85e"
+ integrity sha512-KhcolBKfXbvjwI3TV7r7TkYm8oNXHNBqGOy6JDVwtecFaRoKYsUUqJdS10q0YDKW1c6aZQgO+Ys3LfGkox8pXA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-flow" "^7.14.5"
+
+"@babel/preset-flow@^7.0.0":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.14.5.tgz#a1810b0780c8b48ab0bece8e7ab8d0d37712751c"
+ integrity sha512-pP5QEb4qRUSVGzzKx9xqRuHUrM/jEzMqdrZpdMA+oUCRgd5zM1qGr5y5+ZgAL/1tVv1H0dyk5t4SKJntqyiVtg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ "@babel/plugin-transform-flow-strip-types" "^7.14.5"
+
+"@babel/runtime-corejs3@^7.12.1":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz#0ef292bbce40ca00f874c9724ef175a12476465c"
+ integrity sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==
+ dependencies:
+ core-js-pure "^3.15.0"
+ regenerator-runtime "^0.13.4"
+
+"@babel/template@>=7", "@babel/template@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"
+ integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/parser" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/traverse@^7.14.5":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753"
+ integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/generator" "^7.14.5"
+ "@babel/helper-function-name" "^7.14.5"
+ "@babel/helper-hoist-variables" "^7.14.5"
+ "@babel/helper-split-export-declaration" "^7.14.5"
+ "@babel/parser" "^7.14.7"
+ "@babel/types" "^7.14.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
+"@babel/types@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"
+ integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.5"
+ to-fast-properties "^2.0.0"
+
+"@emotion/is-prop-valid@^0.8.8":
+ version "0.8.8"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
+ integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==
+ dependencies:
+ "@emotion/memoize" "0.7.4"
+
+"@emotion/memoize@0.7.4":
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
+ integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
+
+"@hapi/address@2.x.x":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
+ integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
+
+"@hapi/bourne@1.x.x":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a"
+ integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
+
+"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06"
+ integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==
+
+"@hapi/joi@^15.1.0":
+ version "15.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7"
+ integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==
+ dependencies:
+ "@hapi/address" "2.x.x"
+ "@hapi/bourne" "1.x.x"
+ "@hapi/hoek" "8.x.x"
+ "@hapi/topo" "3.x.x"
+
+"@hapi/topo@3.x.x":
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+ integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
+ dependencies:
+ "@hapi/hoek" "^8.3.0"
+
+"@linaria/babel-preset@^3.0.0-beta.7":
+ version "3.0.0-beta.7"
+ resolved "https://registry.yarnpkg.com/@linaria/babel-preset/-/babel-preset-3.0.0-beta.7.tgz#015f4406ce11d6c78bc6dec58801dc5a500e1c0e"
+ integrity sha512-NE5f//T9ywXZA+W+Pw1YjWKdzskUpaV7GVkxXhkxLM2la1+S4xOoZR1rzW77bR1C9GFFwzZTeb8XP85whb2ZqQ==
+ dependencies:
+ "@babel/generator" ">=7"
+ "@babel/plugin-syntax-dynamic-import" ">=7"
+ "@babel/template" ">=7"
+ "@linaria/core" "^3.0.0-beta.4"
+ "@linaria/logger" "^3.0.0-beta.3"
+ cosmiconfig "^5.1.0"
+ source-map "^0.7.3"
+ stylis "^3.5.4"
+
+"@linaria/core@^3.0.0-beta.4":
+ version "3.0.0-beta.4"
+ resolved "https://registry.yarnpkg.com/@linaria/core/-/core-3.0.0-beta.4.tgz#ae878874773c15b189792e277771f68fef18019a"
+ integrity sha512-NzxeMDxRt57nR6tLFZ8xIstp5ld9JQPIyp9+TKtQZhoX3oJuUru+S4vXPr1Gach6VaqKKKT5T6fmJgJl9MMprw==
+
+"@linaria/logger@^3.0.0-beta.3":
+ version "3.0.0-beta.3"
+ resolved "https://registry.yarnpkg.com/@linaria/logger/-/logger-3.0.0-beta.3.tgz#4bb8f0f36567cea7cac16a60fb3474fbfec491a7"
+ integrity sha512-Z2k0RJuA4PffcZcwBN1By8FmcCvcFUe9GHc846B6hNP09zDVhHSFLKJN9NfXJCzJ/9PifOxSUKyOjLtpv3EhGA==
+ dependencies:
+ debug "^4.1.1"
+
+"@linaria/react@^3.0.0-beta.7":
+ version "3.0.0-beta.7"
+ resolved "https://registry.yarnpkg.com/@linaria/react/-/react-3.0.0-beta.7.tgz#a1983acd752cda5c0b740735b9112a663dfd180d"
+ integrity sha512-sAup35gSRuenwbziPhp1hmkfziY72BS9jr5Lp0GQ9NRG5fnxYBQ36TY4rrGE09mSBjw/uq2i7XsvYL8MNm1f1Q==
+ dependencies:
+ "@emotion/is-prop-valid" "^0.8.8"
+ "@linaria/core" "^3.0.0-beta.4"
+
+"@linaria/server@^3.0.0-beta.3":
+ version "3.0.0-beta.3"
+ resolved "https://registry.yarnpkg.com/@linaria/server/-/server-3.0.0-beta.3.tgz#26493955a25875a685e11fa1c3d7792c425b9152"
+ integrity sha512-IQNZennqoZwBXznYvYfEKt2KcEXVDDwkjvmWdGxsKakKnCii1jdtOn0cueBD55/f3vrpidYyBBRNTB1iiS41OA==
+ dependencies:
+ postcss "^7.0.14"
+
+"@linaria/stylelint@^3.0.0-beta.7":
+ version "3.0.0-beta.7"
+ resolved "https://registry.yarnpkg.com/@linaria/stylelint/-/stylelint-3.0.0-beta.7.tgz#d087c26ce1c0c4b4be3db0285cb3f23870971ebe"
+ integrity sha512-8dC6mtZWWAGsDTNYeW0jEwrXgCLHnpERutlemZobTNujTBVUDPUHFP7uEoHBt+FBSEPrmyT3+69oEiciR515DQ==
+ dependencies:
+ "@linaria/babel-preset" "^3.0.0-beta.7"
+ strip-ansi "^5.2.0"
+
+"@linaria/webpack4-loader@^3.0.0-beta.7":
+ version "3.0.0-beta.7"
+ resolved "https://registry.yarnpkg.com/@linaria/webpack4-loader/-/webpack4-loader-3.0.0-beta.7.tgz#bfb27a95cf97a55971a35d92fc6a94fec44ec9cc"
+ integrity sha512-B2c5vr9b8igcILM/ZcxE9Vu0J2w7NS9xERTvGD7Kp4TdLnFRpALMTJgYqlk3Gxq4T7RlAEi1vu8kHx65mXqA6g==
+ dependencies:
+ "@linaria/babel-preset" "^3.0.0-beta.7"
+ "@linaria/logger" "^3.0.0-beta.3"
+ cosmiconfig "^5.1.0"
+ enhanced-resolve "^4.1.0"
+ find-yarn-workspace-root "^1.2.1"
+ loader-utils "^1.2.3"
+ mkdirp "^0.5.1"
+ normalize-path "^3.0.0"
+
+"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.2":
+ version "2.1.8-no-fsevents.2"
+ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz#e324c0a247a5567192dd7180647709d7e2faf94b"
+ integrity sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^5.1.2"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2"
+ integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@stylelint/postcss-css-in-js@^0.37.2":
+ version "0.37.2"
+ resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2"
+ integrity sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==
+ dependencies:
+ "@babel/core" ">=7.9.0"
+
+"@stylelint/postcss-markdown@^0.36.2":
+ version "0.36.2"
+ resolved "https://registry.yarnpkg.com/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz#0a540c4692f8dcdfc13c8e352c17e7bfee2bb391"
+ integrity sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==
+ dependencies:
+ remark "^13.0.0"
+ unist-util-find-all-after "^3.0.2"
+
+"@types/glob@^7.1.1":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
+ integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==
+ dependencies:
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/json-schema@^7.0.5":
+ version "7.0.7"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
+ integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
+
+"@types/mdast@^3.0.0":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
+ integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/minimatch@*":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21"
+ integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==
+
+"@types/minimist@^1.2.0":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
+ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
+
+"@types/node@*":
+ version "15.12.4"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26"
+ integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==
+
+"@types/normalize-package-data@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
+ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+ integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+
+"@webassemblyjs/ast@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+ integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+ integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
+"@webassemblyjs/helper-api-error@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+ integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
+"@webassemblyjs/helper-buffer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+ integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+ integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+ integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+ integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+ integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+ integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+ integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+ integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+ integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
+"@webassemblyjs/wasm-edit@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+ integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/helper-wasm-section" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-opt" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+ integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+ integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+ integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+ integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-code-frame" "1.9.0"
+ "@webassemblyjs/helper-fsm" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+ integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+accepts@^1.3.5:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn@^6.4.1:
+ version "6.4.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+ integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+ integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ajv@^8.0.1:
+ version "8.6.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720"
+ integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
+ansi-align@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
+ integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=
+ dependencies:
+ string-width "^2.0.0"
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+any-promise@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@~3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+ integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1.js@^5.2.0:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
+ integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ safer-buffer "^2.1.0"
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+autoprefixer@^9.8.6:
+ version "9.8.6"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f"
+ integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==
+ dependencies:
+ browserslist "^4.12.0"
+ caniuse-lite "^1.0.30001109"
+ colorette "^1.2.1"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^7.0.32"
+ postcss-value-parser "^4.1.0"
+
+babel-loader@^8.0.5:
+ version "8.2.2"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81"
+ integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==
+ dependencies:
+ find-cache-dir "^3.3.1"
+ loader-utils "^1.4.0"
+ make-dir "^3.1.0"
+ schema-utils "^2.6.5"
+
+babel-plugin-file-loader@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-file-loader/-/babel-plugin-file-loader-1.1.1.tgz#22c6fdd5829ac4653d92cf5bd4d8bc87521523f2"
+ integrity sha512-ORBZGJHxXv2Pd+lFsVqu4gwraBTTo32ue17MzdbWduT65k3rws9AlVWWmgDP59nFLJCfVkEcLLIbuR2C4lKVjw==
+ dependencies:
+ big.js "^5.0.3"
+ fs-extra "^4.0.2"
+ mime "^2.0.3"
+
+babel-plugin-module-resolver@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7"
+ integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==
+ dependencies:
+ find-babel-config "^1.1.0"
+ glob "^7.1.2"
+ pkg-up "^2.0.0"
+ reselect "^3.0.1"
+ resolve "^1.4.0"
+
+bail@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
+ integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+balanced-match@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
+ integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
+
+base64-js@^1.0.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+big.js@^5.0.3, big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bluebird@^3.5.5:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+ integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+bn.js@^5.0.0, bn.js@^5.1.1:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
+ integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
+
+boxen@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
+ integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==
+ dependencies:
+ ansi-align "^2.0.0"
+ camelcase "^4.0.0"
+ chalk "^2.0.1"
+ cli-boxes "^1.0.0"
+ string-width "^2.0.0"
+ term-size "^1.2.0"
+ widest-line "^2.0.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.1, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1, brorand@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
+ integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
+ dependencies:
+ bn.js "^5.0.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
+ integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
+ dependencies:
+ bn.js "^5.1.1"
+ browserify-rsa "^4.0.1"
+ create-hash "^1.2.0"
+ create-hmac "^1.1.7"
+ elliptic "^6.5.3"
+ inherits "^2.0.4"
+ parse-asn1 "^5.1.5"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^4.12.0, browserslist@^4.16.6:
+ version "4.16.6"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"
+ integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==
+ dependencies:
+ caniuse-lite "^1.0.30001219"
+ colorette "^1.2.2"
+ electron-to-chromium "^1.3.723"
+ escalade "^3.1.1"
+ node-releases "^1.1.71"
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^12.0.2:
+ version "12.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+ integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cache-content-type@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c"
+ integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==
+ dependencies:
+ mime-types "^2.1.18"
+ ylru "^1.2.0"
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase-keys@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
+ integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
+ dependencies:
+ camelcase "^5.3.1"
+ map-obj "^4.0.0"
+ quick-lru "^4.0.1"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219:
+ version "1.0.30001239"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz#66e8669985bb2cb84ccb10f68c25ce6dd3e4d2b8"
+ integrity sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==
+
+capture-stack-trace@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
+ integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.1.0, chalk@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
+ integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+character-entities-legacy@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
+ integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
+
+character-entities@^1.0.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
+ integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
+
+character-reference-invalid@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
+ integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
+
+chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chokidar@^3.4.0, chokidar@^3.4.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
+ integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+ integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+ci-info@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
+ integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cli-boxes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+ integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+clone-regexp@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f"
+ integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==
+ dependencies:
+ is-regexp "^2.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colorette@^1.2.1, colorette@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
+ integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
+
+commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+compressible@^2.0.0:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+configstore@^3.0.0:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f"
+ integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==
+ dependencies:
+ dot-prop "^4.2.1"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+connect-history-api-fallback@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+ integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+content-disposition@~0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
+
+content-type@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-source-map@^1.1.0, convert-source-map@^1.7.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
+ integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+cookies@~0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90"
+ integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==
+ dependencies:
+ depd "~2.0.0"
+ keygrip "~1.1.0"
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js-pure@^3.15.0:
+ version "3.15.1"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.1.tgz#8356f6576fa2aa8e54ca6fe02620968ff010eed7"
+ integrity sha512-OZuWHDlYcIda8sJLY4Ec6nWq2hRjlyCqCZ+jCflyleMkVt3tPedDVErvHslyS2nbO+SlBFMSBJYvtLMwxnrzjA==
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^5.1.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.1"
+ parse-json "^4.0.0"
+
+cosmiconfig@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
+ integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
+create-ecdh@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
+ integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.5.3"
+
+create-error-class@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-env@^5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d"
+ integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==
+ dependencies:
+ cross-spawn "^6.0.5"
+
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^7.0.0:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+ integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
+
+css-hot-loader@^1.4.3:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/css-hot-loader/-/css-hot-loader-1.4.4.tgz#ae784932cd8b7d092f7f15702af08b3ec9436052"
+ integrity sha512-J/qXHz+r7FOT92qMIJfxUk0LC9fecQNZVr0MswQ4FOpKLyOCBjofVMfc6R268bh/5ktkTShrweMr0wWqerC92g==
+ dependencies:
+ loader-utils "^1.1.0"
+ lodash "^4.17.5"
+ normalize-url "^1.9.1"
+
+css-loader@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea"
+ integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==
+ dependencies:
+ camelcase "^5.2.0"
+ icss-utils "^4.1.0"
+ loader-utils "^1.2.3"
+ normalize-path "^3.0.0"
+ postcss "^7.0.14"
+ postcss-modules-extract-imports "^2.0.0"
+ postcss-modules-local-by-default "^2.0.6"
+ postcss-modules-scope "^2.1.0"
+ postcss-modules-values "^2.0.0"
+ postcss-value-parser "^3.3.0"
+ schema-utils "^1.0.0"
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+debug@*, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ dependencies:
+ ms "2.1.2"
+
+debug@^2.2.0, debug@^2.3.3:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+decamelize-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+ integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+ dependencies:
+ decamelize "^1.1.0"
+ map-obj "^1.0.0"
+
+decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decamelize@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-3.2.0.tgz#84b8e8f4f8c579f938e35e2cc7024907e0090851"
+ integrity sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==
+ dependencies:
+ xregexp "^4.2.4"
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-equal@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+ integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+del-cli@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/del-cli/-/del-cli-1.1.0.tgz#27557d69a0b7df99dcbaa1e34a09e6ac6591d2c4"
+ integrity sha1-J1V9aaC335ncuqHjSgnmrGWR0sQ=
+ dependencies:
+ del "^3.0.0"
+ meow "^3.6.0"
+ update-notifier "^2.1.0"
+
+del@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+ dependencies:
+ globby "^6.1.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ p-map "^1.1.1"
+ pify "^3.0.0"
+ rimraf "^2.2.8"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@^2.0.0, depd@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+dom-serializer@0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1, domelementtype@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
+ integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
+
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+ dependencies:
+ domelementtype "1"
+
+domutils@^1.5.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dot-prop@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4"
+ integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==
+ dependencies:
+ is-obj "^1.0.0"
+
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-to-chromium@^1.3.723:
+ version "1.3.755"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.755.tgz#4b6101f13de910cf3f0a1789ddc57328133b9332"
+ integrity sha512-BJ1s/kuUuOeo1bF/EM2E4yqW9te0Hpof3wgwBx40AWJE18zsD1Tqo0kr7ijnOc+lRsrlrqKPauJAHqaxOItoUA==
+
+elliptic@^6.5.3:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
+ integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
+ dependencies:
+ bn.js "^4.11.9"
+ brorand "^1.1.0"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.1"
+ inherits "^2.0.4"
+ minimalistic-assert "^1.0.1"
+ minimalistic-crypto-utils "^1.0.1"
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+encodeurl@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^4.1.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec"
+ integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
+entities@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+entities@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+ integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
+ integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-html@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esrecurse@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+
+eventemitter3@^4.0.0:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+ integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+events@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+ integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
+ integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+execall@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45"
+ integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==
+ dependencies:
+ clone-regexp "^2.1.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.5:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
+ integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fastest-levenshtein@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2"
+ integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==
+
+fastq@^1.6.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
+ integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
+ dependencies:
+ reusify "^1.0.4"
+
+figgy-pudding@^3.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+ integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+file-loader@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
+ integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^1.0.0"
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-babel-config@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
+ integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
+ dependencies:
+ json5 "^0.5.1"
+ path-exists "^3.0.0"
+
+find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-cache-dir@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
+ integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^3.0.2"
+ pkg-dir "^4.1.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-yarn-workspace-root@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db"
+ integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==
+ dependencies:
+ fs-extra "^4.0.3"
+ micromatch "^3.1.4"
+
+findup-sync@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
+flatted@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
+ integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+follow-redirects@^1.0.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43"
+ integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@~0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-extra@^4.0.2, fs-extra@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
+ integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-readdir-recursive@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
+ integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+ integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+fsevents@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
+ integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+ integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+ dependencies:
+ 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"
+
+global-dirs@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-modules@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@^10.0.1:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543"
+ integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.0.3"
+ glob "^7.1.3"
+ ignore "^5.1.1"
+ merge2 "^1.2.3"
+ slash "^3.0.0"
+
+globby@^11.0.3:
+ version "11.0.4"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5"
+ integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globjoin@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
+ integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=
+
+gonzales-pe@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3"
+ integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==
+ dependencies:
+ minimist "^1.2.5"
+
+got@^6.7.1:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
+ integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
+ dependencies:
+ create-error-class "^3.0.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ is-redirect "^1.0.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ lowercase-keys "^1.0.0"
+ safe-buffer "^5.0.1"
+ timed-out "^4.0.0"
+ unzip-response "^2.0.1"
+ url-parse-lax "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
+ version "4.2.6"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
+ integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
+
+hard-rejection@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
+ integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+ integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hmac-drbg@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.8.9"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+ integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+
+hosted-git-info@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961"
+ integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+html-tags@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140"
+ integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==
+
+htmlparser2@^3.10.0:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+ integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+ dependencies:
+ domelementtype "^1.3.1"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.1.1"
+
+http-assert@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878"
+ integrity sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==
+ dependencies:
+ deep-equal "~1.0.1"
+ http-errors "~1.7.2"
+
+http-errors@^1.3.1, http-errors@^1.6.3, http-errors@^1.7.3:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507"
+ integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-proxy-middleware@^0.19.0:
+ version "0.19.2"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz#ee73dcc8348165afefe8de2ff717751d181608ee"
+ integrity sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ==
+ dependencies:
+ http-proxy "^1.18.1"
+ is-glob "^4.0.0"
+ lodash "^4.17.11"
+ micromatch "^3.1.10"
+
+http-proxy@^1.18.1:
+ version "1.18.1"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+ integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+ dependencies:
+ eventemitter3 "^4.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+ integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
+
+icss-utils@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
+ integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==
+ dependencies:
+ postcss "^7.0.14"
+
+ieee754@^1.1.4:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore-styles@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-styles/-/ignore-styles-5.0.1.tgz#b49ef2274bdafcd8a4880a966bfe38d1a0bf4671"
+ integrity sha1-tJ7yJ0va/NikiAqWa/440aC/RnE=
+
+ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8:
+ version "5.1.8"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+
+import-lazy@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
+ integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
+
+import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+import-local@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6"
+ integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+interpret@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-alphabetical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
+ integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
+
+is-alphanumerical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
+ integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+ integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+
+is-ci@^1.0.10:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
+ integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
+ dependencies:
+ ci-info "^1.5.0"
+
+is-core-module@^2.2.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
+ integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
+ dependencies:
+ has "^1.0.3"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-decimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
+ integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-finite@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
+ integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-function@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c"
+ integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-hexadecimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
+ integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
+
+is-installed-globally@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
+ integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
+ dependencies:
+ global-dirs "^0.1.0"
+ is-path-inside "^1.0.0"
+
+is-npm@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+ integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+ integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+
+is-path-cwd@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+ integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-obj@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-promise@^2.1.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
+ integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
+
+is-redirect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+ integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
+
+is-regexp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d"
+ integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==
+
+is-retry-allowed@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
+ integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
+
+is-stream@^1.0.0, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+is-typedarray@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
+ integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
+ dependencies:
+ minimist "^1.2.5"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+keygrip@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226"
+ integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==
+ dependencies:
+ tsscmp "1.0.6"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+known-css-properties@^0.21.0:
+ version "0.21.0"
+ resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.21.0.tgz#15fbd0bbb83447f3ce09d8af247ed47c68ede80d"
+ integrity sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==
+
+koa-compose@^3.0.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7"
+ integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=
+ dependencies:
+ any-promise "^1.1.0"
+
+koa-compose@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877"
+ integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==
+
+koa-compress@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/koa-compress/-/koa-compress-3.1.0.tgz#00fb0af695dc4661c6de261a18da669626ea3ca1"
+ integrity sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==
+ dependencies:
+ bytes "^3.0.0"
+ compressible "^2.0.0"
+ koa-is-json "^1.0.0"
+ statuses "^1.0.0"
+
+koa-connect@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/koa-connect/-/koa-connect-2.1.0.tgz#16bce0a917c4cb24233aaac83fbc5b83804b4a1c"
+ integrity sha512-O9pcFafHk0oQsBevlbTBlB9co+2RUQJ4zCzu3qJPmGlGoeEZkne+7gWDkecqDPSbCtED6LmhlQladxs6NjOnMQ==
+
+koa-convert@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0"
+ integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=
+ dependencies:
+ co "^4.6.0"
+ koa-compose "^3.0.0"
+
+koa-is-json@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14"
+ integrity sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=
+
+koa-route@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/koa-route/-/koa-route-3.2.0.tgz#76298b99a6bcfa9e38cab6fe5c79a8733e758bce"
+ integrity sha1-dimLmaa8+p44yrb+XHmocz51i84=
+ dependencies:
+ debug "*"
+ methods "~1.1.0"
+ path-to-regexp "^1.2.0"
+
+koa-router@^7.4.0:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/koa-router/-/koa-router-7.4.0.tgz#aee1f7adc02d5cb31d7d67465c9eacc825e8c5e0"
+ integrity sha512-IWhaDXeAnfDBEpWS6hkGdZ1ablgr6Q6pGdXCyK38RbzuH4LkUOpPqPw+3f8l8aTDrQmBQ7xJc0bs2yV4dzcO+g==
+ dependencies:
+ debug "^3.1.0"
+ http-errors "^1.3.1"
+ koa-compose "^3.0.0"
+ methods "^1.0.1"
+ path-to-regexp "^1.1.1"
+ urijs "^1.19.0"
+
+koa-send@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79"
+ integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==
+ dependencies:
+ debug "^4.1.1"
+ http-errors "^1.7.3"
+ resolve-path "^1.4.0"
+
+koa-static@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943"
+ integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==
+ dependencies:
+ debug "^3.1.0"
+ koa-send "^5.0.0"
+
+koa@^2.5.3, koa@^2.7.0:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051"
+ integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==
+ dependencies:
+ accepts "^1.3.5"
+ cache-content-type "^1.0.0"
+ content-disposition "~0.5.2"
+ content-type "^1.0.4"
+ cookies "~0.8.0"
+ debug "~3.1.0"
+ delegates "^1.0.0"
+ depd "^2.0.0"
+ destroy "^1.0.4"
+ encodeurl "^1.0.2"
+ escape-html "^1.0.3"
+ fresh "~0.5.2"
+ http-assert "^1.3.0"
+ http-errors "^1.6.3"
+ is-generator-function "^1.0.7"
+ koa-compose "^4.1.0"
+ koa-convert "^1.2.0"
+ on-finished "^2.3.0"
+ only "~0.0.2"
+ parseurl "^1.3.2"
+ statuses "^1.5.0"
+ type-is "^1.6.16"
+ vary "^1.1.2"
+
+latest-version@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
+ integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
+ dependencies:
+ package-json "^4.0.0"
+
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3"
+ integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==
+ dependencies:
+ graceful-fs "^4.1.15"
+ parse-json "^4.0.0"
+ pify "^4.0.1"
+ strip-bom "^3.0.0"
+ type-fest "^0.3.0"
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash.clonedeep@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+
+lodash.truncate@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
+ integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
+
+lodash@^4.17.11, lodash@^4.17.21, lodash@^4.17.5:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+loglevelnext@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-3.0.1.tgz#e3e4659c4061c09264f6812c33586dc55a009a04"
+ integrity sha512-JpjaJhIN1reaSb26SIxDGtE0uc67gPl19OMVHrr+Ggt6b/Vy60jmCtKgQBrygAH0bhRA2nkxgDvM+8QvR8r0YA==
+
+longest-streak@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
+ integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
+
+loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lowercase-keys@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lru-cache@^4.0.1:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+make-dir@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
+ dependencies:
+ pify "^3.0.0"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+make-dir@^3.0.2, make-dir@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-obj@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7"
+ integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+mathml-tag-names@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
+ integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+mdast-util-from-markdown@^0.8.0:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c"
+ integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ mdast-util-to-string "^2.0.0"
+ micromark "~2.11.0"
+ parse-entities "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+mdast-util-to-markdown@^0.6.0:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe"
+ integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ longest-streak "^2.0.0"
+ mdast-util-to-string "^2.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.0.0"
+ zwitch "^1.0.0"
+
+mdast-util-to-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b"
+ integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+meow@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364"
+ integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==
+ dependencies:
+ "@types/minimist" "^1.2.0"
+ camelcase-keys "^6.2.2"
+ decamelize "^1.2.0"
+ decamelize-keys "^1.1.0"
+ hard-rejection "^2.1.0"
+ minimist-options "4.1.0"
+ normalize-package-data "^3.0.0"
+ read-pkg-up "^7.0.1"
+ redent "^3.0.0"
+ trim-newlines "^3.0.0"
+ type-fest "^0.18.0"
+ yargs-parser "^20.2.3"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.2.3, merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+methods@^1.0.1, methods@~1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromark@~2.11.0:
+ version "2.11.4"
+ resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a"
+ integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==
+ dependencies:
+ debug "^4.0.0"
+ parse-entities "^2.0.0"
+
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.2, micromatch@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
+ integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.2.3"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.48.0, "mime-db@>= 1.43.0 < 2":
+ version "1.48.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d"
+ integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==
+
+mime-types@^2.1.18, mime-types@~2.1.24:
+ version "2.1.31"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b"
+ integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==
+ dependencies:
+ mime-db "1.48.0"
+
+mime@^2.0.3:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
+ integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+min-indent@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+ integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+
+mini-css-extract-plugin@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0"
+ integrity sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+ webpack-sources "^1.1.0"
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist-options@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
+ integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+ kind-of "^6.0.3"
+
+minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@^0.5.1, mkdirp@^0.5.3:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+nan@^2.12.1:
+ version "2.14.2"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
+ integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
+
+nanoid@^2.0.0:
+ version "2.1.11"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280"
+ integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0, neo-async@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-releases@^1.1.71:
+ version "1.1.73"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"
+ integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-package-data@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699"
+ integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==
+ dependencies:
+ hosted-git-info "^4.0.1"
+ resolve "^1.20.0"
+ semver "^7.3.4"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+normalize-selector@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03"
+ integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=
+
+normalize-url@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
+ dependencies:
+ object-assign "^4.0.1"
+ prepend-http "^1.0.0"
+ query-string "^4.1.0"
+ sort-keys "^1.0.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+ integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-path@^0.11.4:
+ version "0.11.5"
+ resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a"
+ integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+on-finished@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+only@~0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
+ integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=
+
+opn@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-6.0.0.tgz#3c5b0db676d5f97da1233d1ed42d182bc5a27d2d"
+ integrity sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==
+ dependencies:
+ is-wsl "^1.1.0"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+p-defer@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83"
+ integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+ integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+package-json@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
+ integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
+ dependencies:
+ got "^6.7.1"
+ registry-auth-token "^3.0.1"
+ registry-url "^3.0.3"
+ semver "^5.1.0"
+
+pako@~1.0.5:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-asn1@^5.0.0, parse-asn1@^5.1.5:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
+ integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
+ dependencies:
+ asn1.js "^5.2.0"
+ browserify-aes "^1.0.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
+ integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-json@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parseurl@^1.3.2:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@1.0.1, path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-to-regexp@^1.1.1, path-to-regexp@^1.2.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
+ integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
+ dependencies:
+ isarray "0.0.1"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pbkdf2@^3.0.3:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
+ integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
+ integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-conf@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae"
+ integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==
+ dependencies:
+ find-up "^3.0.0"
+ load-json-file "^5.2.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+pkg-dir@^4.1.0, pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
+ integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
+ dependencies:
+ find-up "^2.1.0"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-html@^0.36.0:
+ version "0.36.0"
+ resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204"
+ integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==
+ dependencies:
+ htmlparser2 "^3.10.0"
+
+postcss-less@^3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad"
+ integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==
+ dependencies:
+ postcss "^7.0.14"
+
+postcss-media-query-parser@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244"
+ integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=
+
+postcss-modules-extract-imports@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
+ integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
+ dependencies:
+ postcss "^7.0.5"
+
+postcss-modules-local-by-default@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63"
+ integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+ postcss-value-parser "^3.3.1"
+
+postcss-modules-scope@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee"
+ integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+
+postcss-modules-values@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64"
+ integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^7.0.6"
+
+postcss-resolve-nested-selector@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e"
+ integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=
+
+postcss-safe-parser@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96"
+ integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==
+ dependencies:
+ postcss "^7.0.26"
+
+postcss-sass@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.4.4.tgz#91f0f3447b45ce373227a98b61f8d8f0785285a3"
+ integrity sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==
+ dependencies:
+ gonzales-pe "^4.3.0"
+ postcss "^7.0.21"
+
+postcss-scss@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.1.1.tgz#ec3a75fa29a55e016b90bf3269026c53c1d2b383"
+ integrity sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==
+ dependencies:
+ postcss "^7.0.6"
+
+postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.5:
+ version "6.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea"
+ integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-syntax@^0.36.2:
+ version "0.36.2"
+ resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c"
+ integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==
+
+postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss-value-parser@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
+ integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
+
+postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6:
+ version "7.0.36"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb"
+ integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+prepend-http@^1.0.0, prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+prop-types@^15.6.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+query-string@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
+ dependencies:
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
+ integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+rc@^1.0.1, rc@^1.1.6:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-dom@^16.14.0:
+ version "16.14.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89"
+ integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.19.1"
+
+react-is@^16.8.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react@^16.14.0:
+ version "16.14.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
+ integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-6.0.0.tgz#da75ce72762f2fa1f20c5a40d4dd80c77db969e3"
+ integrity sha512-odtTvLl+EXo1eTsMnoUHRmg/XmXdTkwXVxy4VFE9Kp6cCq7b3l7QMdBndND3eAFzrbSAXC/WCUOQQ9rLjifKZw==
+ dependencies:
+ find-up "^4.0.0"
+ read-pkg "^5.1.1"
+ type-fest "^0.5.0"
+
+read-pkg-up@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
+ dependencies:
+ find-up "^4.1.0"
+ read-pkg "^5.2.0"
+ type-fest "^0.8.1"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^5.1.1, read-pkg@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.1.1, readable-stream@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+rechoir@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca"
+ integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==
+ dependencies:
+ resolve "^1.9.0"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
+regenerator-runtime@^0.13.4:
+ version "0.13.7"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
+ integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+registry-auth-token@^3.0.1:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e"
+ integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==
+ dependencies:
+ rc "^1.1.6"
+ safe-buffer "^5.0.1"
+
+registry-url@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
+ integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
+ dependencies:
+ rc "^1.0.1"
+
+remark-parse@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640"
+ integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==
+ dependencies:
+ mdast-util-from-markdown "^0.8.0"
+
+remark-stringify@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894"
+ integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==
+ dependencies:
+ mdast-util-to-markdown "^0.6.0"
+
+remark@^13.0.0:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425"
+ integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==
+ dependencies:
+ remark-parse "^9.0.0"
+ remark-stringify "^9.0.0"
+ unified "^9.1.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+ integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
+
+repeat-string@^1.0.0, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+reselect@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
+ integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-path@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7"
+ integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=
+ dependencies:
+ http-errors "~1.6.2"
+ path-is-absolute "1.0.1"
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.10.0, resolve@^1.20.0, resolve@^1.4.0, resolve@^1.9.0:
+ version "1.20.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
+ integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
+ dependencies:
+ is-core-module "^2.2.0"
+ path-parse "^1.0.6"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+safer-buffer@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+scheduler@^0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
+ integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^2.6.5:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
+ integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
+ dependencies:
+ "@types/json-schema" "^7.0.5"
+ ajv "^6.12.4"
+ ajv-keywords "^3.5.2"
+
+semver-diff@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
+ dependencies:
+ semver "^5.0.3"
+
+"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.5.0, semver@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@^6.0.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.4:
+ version "7.3.5"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+ integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
+ dependencies:
+ lru-cache "^6.0.0"
+
+serialize-javascript@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+ integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+ dependencies:
+ randombytes "^2.1.0"
+
+set-blocking@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+slash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+sort-keys@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@~0.5.12:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+ integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
+source-map@^0.5.0, source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f"
+ integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==
+
+specificity@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019"
+ integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+ssri@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
+ integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.0.0, statuses@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+strict-uri-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+ integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+
+string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.2.0, string-width@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
+ integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-indent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ dependencies:
+ min-indent "^1.0.0"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+style-search@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
+ integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=
+
+stylelint-config-recommended@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz#e0e547434016c5539fe2650afd58049a2fd1d657"
+ integrity sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==
+
+stylelint@^13.7.2:
+ version "13.13.1"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.13.1.tgz#fca9c9f5de7990ab26a00f167b8978f083a18f3c"
+ integrity sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==
+ dependencies:
+ "@stylelint/postcss-css-in-js" "^0.37.2"
+ "@stylelint/postcss-markdown" "^0.36.2"
+ autoprefixer "^9.8.6"
+ balanced-match "^2.0.0"
+ chalk "^4.1.1"
+ cosmiconfig "^7.0.0"
+ debug "^4.3.1"
+ execall "^2.0.0"
+ fast-glob "^3.2.5"
+ fastest-levenshtein "^1.0.12"
+ file-entry-cache "^6.0.1"
+ get-stdin "^8.0.0"
+ global-modules "^2.0.0"
+ globby "^11.0.3"
+ globjoin "^0.1.4"
+ html-tags "^3.1.0"
+ ignore "^5.1.8"
+ import-lazy "^4.0.0"
+ imurmurhash "^0.1.4"
+ known-css-properties "^0.21.0"
+ lodash "^4.17.21"
+ log-symbols "^4.1.0"
+ mathml-tag-names "^2.1.3"
+ meow "^9.0.0"
+ micromatch "^4.0.4"
+ normalize-selector "^0.2.0"
+ postcss "^7.0.35"
+ postcss-html "^0.36.0"
+ postcss-less "^3.1.4"
+ postcss-media-query-parser "^0.2.3"
+ postcss-resolve-nested-selector "^0.1.1"
+ postcss-safe-parser "^4.0.2"
+ postcss-sass "^0.4.4"
+ postcss-scss "^2.1.1"
+ postcss-selector-parser "^6.0.5"
+ postcss-syntax "^0.36.2"
+ postcss-value-parser "^4.1.0"
+ resolve-from "^5.0.0"
+ slash "^3.0.0"
+ specificity "^0.4.1"
+ string-width "^4.2.2"
+ strip-ansi "^6.0.0"
+ style-search "^0.1.0"
+ sugarss "^2.0.0"
+ svg-tags "^1.0.0"
+ table "^6.6.0"
+ v8-compile-cache "^2.3.0"
+ write-file-atomic "^3.0.3"
+
+stylis@^3.5.4:
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe"
+ integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==
+
+sugarss@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d"
+ integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==
+ dependencies:
+ postcss "^7.0.2"
+
+superstruct@^0.12.1:
+ version "0.12.2"
+ resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.12.2.tgz#214d419e2c1eabd87d7a3774150664dfe53506e0"
+ integrity sha512-yu+WNa/nSbFa+VBeR2KibfCeIQSKh/aD7G5eFD4Rx4W36MWE3G6SzU3BixDOArLv56u2bz6YEePsHSsioojuXw==
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+svg-tags@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
+ integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
+
+table@^6.6.0:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"
+ integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==
+ dependencies:
+ ajv "^8.0.1"
+ lodash.clonedeep "^4.5.0"
+ lodash.truncate "^4.4.2"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+term-size@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
+ integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
+ dependencies:
+ execa "^0.7.0"
+
+terser-webpack-plugin@^1.4.3:
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
+ integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^4.0.0"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^4.1.2:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
+ integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+through2@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+timed-out@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+ integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+
+timers-browserify@^2.0.4:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee"
+ integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+trim-newlines@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
+ integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
+
+trough@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
+ integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
+
+tsscmp@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
+ integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+type-fest@^0.18.0:
+ version "0.18.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
+ integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
+
+type-fest@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+ integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
+
+type-fest@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2"
+ integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==
+
+type-fest@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+type-is@^1.6.16:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+unified@^9.1.0:
+ version "9.2.1"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3"
+ integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-buffer "^2.0.0"
+ is-plain-obj "^2.0.0"
+ trough "^1.0.0"
+ vfile "^4.0.0"
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unique-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
+ dependencies:
+ crypto-random-string "^1.0.0"
+
+unist-util-find-all-after@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6"
+ integrity sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==
+ dependencies:
+ unist-util-is "^4.0.0"
+
+unist-util-is@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797"
+ integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==
+
+unist-util-stringify-position@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
+ integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
+ dependencies:
+ "@types/unist" "^2.0.2"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+unzip-response@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
+ integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
+
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+update-notifier@^2.1.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6"
+ integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==
+ dependencies:
+ boxen "^1.2.1"
+ chalk "^2.0.1"
+ configstore "^3.0.0"
+ import-lazy "^2.1.0"
+ is-ci "^1.0.10"
+ is-installed-globally "^0.1.0"
+ is-npm "^1.0.0"
+ latest-version "^3.0.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+urijs@^1.19.0:
+ version "1.19.7"
+ resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.7.tgz#4f594e59113928fea63c00ce688fb395b1168ab9"
+ integrity sha512-Id+IKjdU0Hx+7Zx717jwLPsPeUqz7rAtuVBRLLs+qn+J2nf9NGITWVCxcijgYxBqe83C7sqsQPs6H1pyz3x9gA==
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
+ dependencies:
+ prepend-http "^1.0.1"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+v8-compile-cache@^2.0.2, v8-compile-cache@^2.1.1, v8-compile-cache@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
+ integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+vary@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+vfile-message@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
+ integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+vfile@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624"
+ integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ is-buffer "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-message "^2.0.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+watchpack-chokidar2@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
+ integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==
+ dependencies:
+ chokidar "^2.1.8"
+
+watchpack@^1.7.4:
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
+ integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
+ dependencies:
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+ optionalDependencies:
+ chokidar "^3.4.1"
+ watchpack-chokidar2 "^2.0.1"
+
+webpack-cli@^3.2.3:
+ version "3.3.12"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a"
+ integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==
+ dependencies:
+ chalk "^2.4.2"
+ cross-spawn "^6.0.5"
+ enhanced-resolve "^4.1.1"
+ findup-sync "^3.0.0"
+ global-modules "^2.0.0"
+ import-local "^2.0.0"
+ interpret "^1.4.0"
+ loader-utils "^1.4.0"
+ supports-color "^6.1.0"
+ v8-compile-cache "^2.1.1"
+ yargs "^13.3.2"
+
+webpack-plugin-ramdisk@^0.1.2:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/webpack-plugin-ramdisk/-/webpack-plugin-ramdisk-0.1.8.tgz#f97db5f7c57a961baf7682872437b9f372ac28d4"
+ integrity sha512-JXIZZHKEeYA45yNPp5XDJ/VSt+j3yV2/zw5trF30I4lYcrWRnQ/45yKrmeu8dtPe4Wxm36os20XAtN6u1NAfqQ==
+ dependencies:
+ chalk "^4.1.0"
+ execa "^4.0.3"
+ superstruct "^0.12.1"
+
+webpack-plugin-serve@^0.12.1:
+ version "0.12.1"
+ resolved "https://registry.yarnpkg.com/webpack-plugin-serve/-/webpack-plugin-serve-0.12.1.tgz#a6d7930e900f74189cd8045f8c1a7d55ca4de282"
+ integrity sha512-q/MOuTcEvK98leIbOM5JvHrKACG9nMKILA/Pbv/3G8P7sAvRuDCk6NgWX7Hzpj5Y/DsoZIgtGSQRsHSq+sW4cA==
+ dependencies:
+ "@hapi/joi" "^15.1.0"
+ chalk "^2.4.1"
+ connect-history-api-fallback "^1.5.0"
+ globby "^10.0.1"
+ http-proxy-middleware "^0.19.0"
+ is-path-cwd "^2.2.0"
+ is-promise "^2.1.0"
+ koa "^2.5.3"
+ koa-compress "^3.0.0"
+ koa-connect "^2.0.1"
+ koa-route "^3.2.0"
+ koa-static "^5.0.0"
+ loglevelnext "^3.0.0"
+ nanoid "^2.0.0"
+ onetime "^5.1.0"
+ opn "^6.0.0"
+ p-defer "^3.0.0"
+ read-pkg-up "^6.0.0"
+ rimraf "^2.6.3"
+ strip-ansi "^5.0.0"
+ webpack-plugin-ramdisk "^0.1.2"
+ ws "^7.1.0"
+
+webpack-serve@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/webpack-serve/-/webpack-serve-3.2.0.tgz#b4cf4738712f469fef5d1aa951ceb565390a1405"
+ integrity sha512-voK36uw1PpW4jYHjSthUNVeghlfNdnO56iyKdMw7P/MKPmD6WbzwslwnjgDMz33IDRlfAiT+EVVNSa+14TAkJQ==
+ dependencies:
+ chalk "^2.4.2"
+ decamelize "^3.0.0"
+ import-local "^3.0.1"
+ is-plain-obj "^2.0.0"
+ object-path "^0.11.4"
+ pkg-conf "^3.0.0"
+ rechoir "^0.7.0"
+ v8-compile-cache "^2.0.2"
+ webpack-plugin-serve "^0.12.1"
+ yargs-parser "^14.0.0"
+
+webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^4.44.2:
+ version "4.46.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542"
+ integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/wasm-edit" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ acorn "^6.4.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.5.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.3"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.7.4"
+ webpack-sources "^1.4.1"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.14, which@^1.2.9, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+widest-line@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
+ integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
+ dependencies:
+ string-width "^2.1.1"
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@^2.0.0:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
+ integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write-file-atomic@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+ws@^7.1.0:
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.0.tgz#0033bafea031fb9df041b2026fc72a571ca44691"
+ integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==
+
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+ integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
+
+xregexp@^4.2.4:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65"
+ integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==
+ dependencies:
+ "@babel/runtime-corejs3" "^7.12.1"
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
+ integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^1.10.0:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yargs-parser@^13.1.2:
+ version "13.1.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+ integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-14.0.0.tgz#42e25777b06718ec99eac2c3a98ad3de73b6818f"
+ integrity sha512-zn/Mnx+tbFjkCFUodEpjXckNS65NfpB5oyqOkDDEG/8uxlfLZJu2IoBLQFjukUkn9rBbGkVYNzrDh6qy4NUd3g==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^20.2.3:
+ version "20.2.9"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+ integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs@^13.3.2:
+ version "13.3.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+ integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.2"
+
+ylru@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f"
+ integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==
+
+zwitch@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
+ integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==
diff --git a/@linaria/yarn.lock b/@linaria/yarn.lock
new file mode 100644
index 0000000..a5304c7
--- /dev/null
+++ b/@linaria/yarn.lock
@@ -0,0 +1,14864 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/cli@>=7", "@babel/cli@^7.12.1":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.14.5.tgz#9551b194f02360729de6060785bbdcce52c69f0a"
+ integrity sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==
+ dependencies:
+ commander "^4.0.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.1.0"
+ glob "^7.0.0"
+ make-dir "^2.1.0"
+ slash "^2.0.0"
+ source-map "^0.5.0"
+ optionalDependencies:
+ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.2"
+ chokidar "^3.4.0"
+
+"@babel/code-frame@7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
+ integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
+ dependencies:
+ "@babel/highlight" "^7.10.4"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"
+ integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==
+ dependencies:
+ "@babel/highlight" "^7.14.5"
+
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea"
+ integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==
+
+"@babel/core@>=7", "@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab"
+ integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/generator" "^7.14.5"
+ "@babel/helper-compilation-targets" "^7.14.5"
+ "@babel/helper-module-transforms" "^7.14.5"
+ "@babel/helpers" "^7.14.6"
+ "@babel/parser" "^7.14.6"
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.1.2"
+ semver "^6.3.0"
+ source-map "^0.5.0"
+
+"@babel/generator@>=7", "@babel/generator@^7.14.5", "@babel/generator@^7.4.0":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"
+ integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61"
+ integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191"
+ integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf"
+ integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==
+ dependencies:
+ "@babel/compat-data" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ browserslist "^4.16.6"
+ semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.14.6":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542"
+ integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ "@babel/helper-function-name" "^7.14.5"
+ "@babel/helper-member-expression-to-functions" "^7.14.5"
+ "@babel/helper-optimise-call-expression" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.14.5"
+ "@babel/helper-split-export-declaration" "^7.14.5"
+
+"@babel/helper-create-regexp-features-plugin@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4"
+ integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ regexpu-core "^4.7.1"
+
+"@babel/helper-define-polyfill-provider@^0.2.2":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6"
+ integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.13.0"
+ "@babel/helper-module-imports" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/traverse" "^7.13.0"
+ debug "^4.1.1"
+ lodash.debounce "^4.0.8"
+ resolve "^1.14.2"
+ semver "^6.1.2"
+
+"@babel/helper-explode-assignable-expression@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645"
+ integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-function-name@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4"
+ integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.14.5"
+ "@babel/template" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-get-function-arity@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815"
+ integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-hoist-variables@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d"
+ integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-member-expression-to-functions@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8"
+ integrity sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"
+ integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-module-transforms@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e"
+ integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==
+ dependencies:
+ "@babel/helper-module-imports" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.14.5"
+ "@babel/helper-simple-access" "^7.14.5"
+ "@babel/helper-split-export-declaration" "^7.14.5"
+ "@babel/helper-validator-identifier" "^7.14.5"
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-optimise-call-expression@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"
+ integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
+ integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
+
+"@babel/helper-remap-async-to-generator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6"
+ integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ "@babel/helper-wrap-function" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-replace-supers@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94"
+ integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.14.5"
+ "@babel/helper-optimise-call-expression" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-simple-access@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4"
+ integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4"
+ integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-split-export-declaration@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a"
+ integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
+"@babel/helper-validator-identifier@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"
+ integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==
+
+"@babel/helper-validator-option@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
+ integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
+
+"@babel/helper-wrap-function@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff"
+ integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.14.5"
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/helpers@^7.14.6":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635"
+ integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==
+ dependencies:
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
+ integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.5"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2"
+ integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e"
+ integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
+ "@babel/plugin-proposal-optional-chaining" "^7.14.5"
+
+"@babel/plugin-proposal-async-generator-functions@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz#4024990e3dd74181f4f426ea657769ff49a2df39"
+ integrity sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-remap-async-to-generator" "^7.14.5"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-proposal-class-properties@>=7", "@babel/plugin-proposal-class-properties@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e"
+ integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-proposal-class-static-block@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681"
+ integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-dynamic-import@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c"
+ integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-proposal-export-namespace-from@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76"
+ integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb"
+ integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738"
+ integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6"
+ integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-proposal-numeric-separator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18"
+ integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz#e581d5ccdfa187ea6ed73f56c6a21c1580b90fbf"
+ integrity sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A==
+ dependencies:
+ "@babel/compat-data" "^7.14.5"
+ "@babel/helper-compilation-targets" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.14.5"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c"
+ integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-proposal-optional-chaining@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603"
+ integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-proposal-private-methods@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d"
+ integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-proposal-private-property-in-object@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636"
+ integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ "@babel/helper-create-class-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8"
+ integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+ integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+ integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-dynamic-import@>=7", "@babel/plugin-syntax-dynamic-import@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+ integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-flow@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz#2ff654999497d7d7d142493260005263731da180"
+ integrity sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-import-meta@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@>=7", "@babel/plugin-syntax-jsx@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201"
+ integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+ integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+ integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716"
+ integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-arrow-functions@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a"
+ integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-async-to-generator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67"
+ integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==
+ dependencies:
+ "@babel/helper-module-imports" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-remap-async-to-generator" "^7.14.5"
+
+"@babel/plugin-transform-block-scoped-functions@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4"
+ integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-block-scoping@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939"
+ integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-classes@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf"
+ integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ "@babel/helper-function-name" "^7.14.5"
+ "@babel/helper-optimise-call-expression" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.14.5"
+ "@babel/helper-split-export-declaration" "^7.14.5"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f"
+ integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-destructuring@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz#d32ad19ff1a6da1e861dc62720d80d9776e3bf35"
+ integrity sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a"
+ integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-duplicate-keys@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954"
+ integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-exponentiation-operator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493"
+ integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-flow-strip-types@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.14.5.tgz#0dc9c1d11dcdc873417903d6df4bed019ef0f85e"
+ integrity sha512-KhcolBKfXbvjwI3TV7r7TkYm8oNXHNBqGOy6JDVwtecFaRoKYsUUqJdS10q0YDKW1c6aZQgO+Ys3LfGkox8pXA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-flow" "^7.14.5"
+
+"@babel/plugin-transform-for-of@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb"
+ integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-function-name@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2"
+ integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-literals@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78"
+ integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-member-expression-literals@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7"
+ integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-modules-amd@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7"
+ integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97"
+ integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-simple-access" "^7.14.5"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29"
+ integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.14.5"
+ "@babel/helper-module-transforms" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-identifier" "^7.14.5"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0"
+ integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz#d537e8ee083ee6f6aa4f4eef9d2081d555746e4c"
+ integrity sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+
+"@babel/plugin-transform-new-target@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8"
+ integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-object-super@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45"
+ integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.14.5"
+
+"@babel/plugin-transform-parameters@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3"
+ integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-property-literals@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34"
+ integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-react-display-name@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz#baa92d15c4570411301a85a74c13534873885b65"
+ integrity sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-react-jsx-development@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af"
+ integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==
+ dependencies:
+ "@babel/plugin-transform-react-jsx" "^7.14.5"
+
+"@babel/plugin-transform-react-jsx@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz#39749f0ee1efd8a1bd729152cf5f78f1d247a44a"
+ integrity sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ "@babel/helper-module-imports" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-jsx" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/plugin-transform-react-pure-annotations@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc"
+ integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-regenerator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f"
+ integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==
+ dependencies:
+ regenerator-transform "^0.14.2"
+
+"@babel/plugin-transform-reserved-words@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304"
+ integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-runtime@>=7":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523"
+ integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ babel-plugin-polyfill-corejs2 "^0.2.2"
+ babel-plugin-polyfill-corejs3 "^0.2.2"
+ babel-plugin-polyfill-regenerator "^0.2.2"
+ semver "^6.3.0"
+
+"@babel/plugin-transform-shorthand-properties@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58"
+ integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-spread@^7.14.5":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144"
+ integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
+
+"@babel/plugin-transform-sticky-regex@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9"
+ integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-template-literals@>=7", "@babel/plugin-transform-template-literals@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93"
+ integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-typeof-symbol@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4"
+ integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-typescript@^7.14.5":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c"
+ integrity sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.14.6"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-typescript" "^7.14.5"
+
+"@babel/plugin-transform-unicode-escapes@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b"
+ integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-unicode-regex@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e"
+ integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/preset-env@>=7":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.5.tgz#c0c84e763661fd0e74292c3d511cb33b0c668997"
+ integrity sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA==
+ dependencies:
+ "@babel/compat-data" "^7.14.5"
+ "@babel/helper-compilation-targets" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5"
+ "@babel/plugin-proposal-async-generator-functions" "^7.14.5"
+ "@babel/plugin-proposal-class-properties" "^7.14.5"
+ "@babel/plugin-proposal-class-static-block" "^7.14.5"
+ "@babel/plugin-proposal-dynamic-import" "^7.14.5"
+ "@babel/plugin-proposal-export-namespace-from" "^7.14.5"
+ "@babel/plugin-proposal-json-strings" "^7.14.5"
+ "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
+ "@babel/plugin-proposal-numeric-separator" "^7.14.5"
+ "@babel/plugin-proposal-object-rest-spread" "^7.14.5"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.14.5"
+ "@babel/plugin-proposal-optional-chaining" "^7.14.5"
+ "@babel/plugin-proposal-private-methods" "^7.14.5"
+ "@babel/plugin-proposal-private-property-in-object" "^7.14.5"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.14.5"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-class-properties" "^7.12.13"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+ "@babel/plugin-syntax-top-level-await" "^7.14.5"
+ "@babel/plugin-transform-arrow-functions" "^7.14.5"
+ "@babel/plugin-transform-async-to-generator" "^7.14.5"
+ "@babel/plugin-transform-block-scoped-functions" "^7.14.5"
+ "@babel/plugin-transform-block-scoping" "^7.14.5"
+ "@babel/plugin-transform-classes" "^7.14.5"
+ "@babel/plugin-transform-computed-properties" "^7.14.5"
+ "@babel/plugin-transform-destructuring" "^7.14.5"
+ "@babel/plugin-transform-dotall-regex" "^7.14.5"
+ "@babel/plugin-transform-duplicate-keys" "^7.14.5"
+ "@babel/plugin-transform-exponentiation-operator" "^7.14.5"
+ "@babel/plugin-transform-for-of" "^7.14.5"
+ "@babel/plugin-transform-function-name" "^7.14.5"
+ "@babel/plugin-transform-literals" "^7.14.5"
+ "@babel/plugin-transform-member-expression-literals" "^7.14.5"
+ "@babel/plugin-transform-modules-amd" "^7.14.5"
+ "@babel/plugin-transform-modules-commonjs" "^7.14.5"
+ "@babel/plugin-transform-modules-systemjs" "^7.14.5"
+ "@babel/plugin-transform-modules-umd" "^7.14.5"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.5"
+ "@babel/plugin-transform-new-target" "^7.14.5"
+ "@babel/plugin-transform-object-super" "^7.14.5"
+ "@babel/plugin-transform-parameters" "^7.14.5"
+ "@babel/plugin-transform-property-literals" "^7.14.5"
+ "@babel/plugin-transform-regenerator" "^7.14.5"
+ "@babel/plugin-transform-reserved-words" "^7.14.5"
+ "@babel/plugin-transform-shorthand-properties" "^7.14.5"
+ "@babel/plugin-transform-spread" "^7.14.5"
+ "@babel/plugin-transform-sticky-regex" "^7.14.5"
+ "@babel/plugin-transform-template-literals" "^7.14.5"
+ "@babel/plugin-transform-typeof-symbol" "^7.14.5"
+ "@babel/plugin-transform-unicode-escapes" "^7.14.5"
+ "@babel/plugin-transform-unicode-regex" "^7.14.5"
+ "@babel/preset-modules" "^0.1.4"
+ "@babel/types" "^7.14.5"
+ babel-plugin-polyfill-corejs2 "^0.2.2"
+ babel-plugin-polyfill-corejs3 "^0.2.2"
+ babel-plugin-polyfill-regenerator "^0.2.2"
+ core-js-compat "^3.14.0"
+ semver "^6.3.0"
+
+"@babel/preset-flow@^7.0.0":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.14.5.tgz#a1810b0780c8b48ab0bece8e7ab8d0d37712751c"
+ integrity sha512-pP5QEb4qRUSVGzzKx9xqRuHUrM/jEzMqdrZpdMA+oUCRgd5zM1qGr5y5+ZgAL/1tVv1H0dyk5t4SKJntqyiVtg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ "@babel/plugin-transform-flow-strip-types" "^7.14.5"
+
+"@babel/preset-modules@^0.1.4":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e"
+ integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/preset-react@>=7":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c"
+ integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ "@babel/plugin-transform-react-display-name" "^7.14.5"
+ "@babel/plugin-transform-react-jsx" "^7.14.5"
+ "@babel/plugin-transform-react-jsx-development" "^7.14.5"
+ "@babel/plugin-transform-react-pure-annotations" "^7.14.5"
+
+"@babel/preset-typescript@>=7":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz#aa98de119cf9852b79511f19e7f44a2d379bcce0"
+ integrity sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ "@babel/plugin-transform-typescript" "^7.14.5"
+
+"@babel/runtime-corejs3@^7.12.1":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.6.tgz#066b966eda40481740180cb3caab861a3f208cd3"
+ integrity sha512-Xl8SPYtdjcMoCsIM4teyVRg7jIcgl8F2kRtoCcXuHzXswt9UxZCS6BzRo8fcnCuP6u2XtPgvyonmEPF57Kxo9Q==
+ dependencies:
+ core-js-pure "^3.14.0"
+ regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4":
+ version "7.14.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d"
+ integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
+"@babel/template@>=7", "@babel/template@^7.14.5", "@babel/template@^7.3.3", "@babel/template@^7.4.0":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"
+ integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/parser" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.4":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870"
+ integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/generator" "^7.14.5"
+ "@babel/helper-function-name" "^7.14.5"
+ "@babel/helper-hoist-variables" "^7.14.5"
+ "@babel/helper-split-export-declaration" "^7.14.5"
+ "@babel/parser" "^7.14.5"
+ "@babel/types" "^7.14.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"
+ integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.5"
+ to-fast-properties "^2.0.0"
+
+"@callstack/eslint-config@^10.2.0":
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/@callstack/eslint-config/-/eslint-config-10.2.0.tgz#22963ac05b4b815ba4413467ebf81fec3de1cb97"
+ integrity sha512-vefzK3GT0HvLnr+1YxyvykF82bRfc6Oo7Tgof7pG9Xeh+PKHXuLjyUC4rjz3sMlBOsDoQdQulSayV5wIxZlxnA==
+ dependencies:
+ "@typescript-eslint/eslint-plugin" "^4.15.0"
+ "@typescript-eslint/parser" "^4.15.0"
+ babel-eslint "^10.0.3"
+ eslint-config-prettier "^6.10.1"
+ eslint-plugin-flowtype "^4.5.2"
+ eslint-plugin-import "^2.19.1"
+ eslint-plugin-jest "^23.1.1"
+ eslint-plugin-prettier "^3.1.3"
+ eslint-plugin-promise "^4.2.1"
+ eslint-plugin-react "^7.17.0"
+ eslint-plugin-react-hooks "^4.0.0"
+ eslint-plugin-react-native "^3.8.1"
+ eslint-plugin-react-native-a11y "^2.0.0"
+ eslint-restricted-globals "^0.2.0"
+ prettier "^2.0.4"
+
+"@cnakazawa/watch@^1.0.3":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
+ integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
+ dependencies:
+ exec-sh "^0.3.2"
+ minimist "^1.2.0"
+
+"@commitlint/cli@^8.3.5":
+ version "8.3.5"
+ resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-8.3.5.tgz#6d93a3a8b2437fa978999d3f6a336bcc70be3fd3"
+ integrity sha512-6+L0vbw55UEdht71pgWOE55SRgb+8OHcEwGDB234VlIBFGK9P2QOBU7MHiYJ5cjdjCQ0rReNrGjOHmJ99jwf0w==
+ dependencies:
+ "@commitlint/format" "^8.3.4"
+ "@commitlint/lint" "^8.3.5"
+ "@commitlint/load" "^8.3.5"
+ "@commitlint/read" "^8.3.4"
+ babel-polyfill "6.26.0"
+ chalk "2.4.2"
+ get-stdin "7.0.0"
+ lodash "4.17.15"
+ meow "5.0.0"
+ resolve-from "5.0.0"
+ resolve-global "1.0.0"
+
+"@commitlint/config-conventional@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-8.3.4.tgz#fed13b3711690663b176c1f6b39c205a565618d2"
+ integrity sha512-w0Yc5+aVAjZgjYqx29igBOnVCj8O22gy3Vo6Fyp7PwoS7+AYS1x3sN7IBq6i7Ae15Mv5P+rEx1pkxXo5zOMe4g==
+ dependencies:
+ conventional-changelog-conventionalcommits "4.2.1"
+
+"@commitlint/ensure@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-8.3.4.tgz#6931677e4ca0fde71686ae3b7a367261647a341d"
+ integrity sha512-8NW77VxviLhD16O3EUd02lApMFnrHexq10YS4F4NftNoErKbKaJ0YYedktk2boKrtNRf/gQHY/Qf65edPx4ipw==
+ dependencies:
+ lodash "4.17.15"
+
+"@commitlint/execute-rule@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.3.4.tgz#1b63f0713b197889d90b76f9eea1abc010d256b1"
+ integrity sha512-f4HigYjeIBn9f7OuNv5zh2y5vWaAhNFrfeul8CRJDy82l3Y+09lxOTGxfF3uMXKrZq4LmuK6qvvRCZ8mUrVvzQ==
+
+"@commitlint/format@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-8.3.4.tgz#7cd1f0ba5a3289c8d14d7dac29ee1fc1597fe1d9"
+ integrity sha512-809wlQ/ND6CLZON+w2Rb3YM2TLNDfU2xyyqpZeqzf2reJNpySMSUAeaO/fNDJSOKIsOsR3bI01rGu6hv28k+Nw==
+ dependencies:
+ chalk "^2.0.1"
+
+"@commitlint/is-ignored@^8.3.5":
+ version "8.3.5"
+ resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-8.3.5.tgz#e6f59496e1b1ce58020d519cd578ad0f43169199"
+ integrity sha512-Zo+8a6gJLFDTqyNRx53wQi/XTiz8mncvmWf/4oRG+6WRcBfjSSHY7KPVj5Y6UaLy2EgZ0WQ2Tt6RdTDeQiQplA==
+ dependencies:
+ semver "6.3.0"
+
+"@commitlint/lint@^8.3.5":
+ version "8.3.5"
+ resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-8.3.5.tgz#627e75adb1cc803cc723e33cc2ba4aa27cbb9f0c"
+ integrity sha512-02AkI0a6PU6rzqUvuDkSi6rDQ2hUgkq9GpmdJqfai5bDbxx2939mK4ZO+7apbIh4H6Pae7EpYi7ffxuJgm+3hQ==
+ dependencies:
+ "@commitlint/is-ignored" "^8.3.5"
+ "@commitlint/parse" "^8.3.4"
+ "@commitlint/rules" "^8.3.4"
+ babel-runtime "^6.23.0"
+ lodash "4.17.15"
+
+"@commitlint/load@^8.3.5":
+ version "8.3.5"
+ resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.3.5.tgz#3f059225ede92166ba94cf4c48e3d67c8b08b18a"
+ integrity sha512-poF7R1CtQvIXRmVIe63FjSQmN9KDqjRtU5A6hxqXBga87yB2VUJzic85TV6PcQc+wStk52cjrMI+g0zFx+Zxrw==
+ dependencies:
+ "@commitlint/execute-rule" "^8.3.4"
+ "@commitlint/resolve-extends" "^8.3.5"
+ babel-runtime "^6.23.0"
+ chalk "2.4.2"
+ cosmiconfig "^5.2.0"
+ lodash "4.17.15"
+ resolve-from "^5.0.0"
+
+"@commitlint/message@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-8.3.4.tgz#b4e50d14aa6e15a5ad0767b952a7953f3681d768"
+ integrity sha512-nEj5tknoOKXqBsaQtCtgPcsAaf5VCg3+fWhss4Vmtq40633xLq0irkdDdMEsYIx8rGR0XPBTukqzln9kAWCkcA==
+
+"@commitlint/parse@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-8.3.4.tgz#d741f8b9104b35d0f4c10938165b20cbf167f81e"
+ integrity sha512-b3uQvpUQWC20EBfKSfMRnyx5Wc4Cn778bVeVOFErF/cXQK725L1bYFvPnEjQO/GT8yGVzq2wtLaoEqjm1NJ/Bw==
+ dependencies:
+ conventional-changelog-angular "^1.3.3"
+ conventional-commits-parser "^3.0.0"
+ lodash "^4.17.11"
+
+"@commitlint/read@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-8.3.4.tgz#81a34283d8cd7b2acdf57829a91761e9c7791455"
+ integrity sha512-FKv1kHPrvcAG5j+OSbd41IWexsbLhfIXpxVC/YwQZO+FR0EHmygxQNYs66r+GnhD1EfYJYM4WQIqd5bJRx6OIw==
+ dependencies:
+ "@commitlint/top-level" "^8.3.4"
+ "@marionebl/sander" "^0.6.0"
+ babel-runtime "^6.23.0"
+ git-raw-commits "^2.0.0"
+
+"@commitlint/resolve-extends@^8.3.5":
+ version "8.3.5"
+ resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.3.5.tgz#8fff800f292ac217ae30b1862f5f9a84b278310a"
+ integrity sha512-nHhFAK29qiXNe6oH6uG5wqBnCR+BQnxlBW/q5fjtxIaQALgfoNLHwLS9exzbIRFqwJckpR6yMCfgMbmbAOtklQ==
+ dependencies:
+ import-fresh "^3.0.0"
+ lodash "4.17.15"
+ resolve-from "^5.0.0"
+ resolve-global "^1.0.0"
+
+"@commitlint/rules@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-8.3.4.tgz#41da7e16c6b89af268fe81c87a158c1fd2ac82b1"
+ integrity sha512-xuC9dlqD5xgAoDFgnbs578cJySvwOSkMLQyZADb1xD5n7BNcUJfP8WjT9W1Aw8K3Wf8+Ym/ysr9FZHXInLeaRg==
+ dependencies:
+ "@commitlint/ensure" "^8.3.4"
+ "@commitlint/message" "^8.3.4"
+ "@commitlint/to-lines" "^8.3.4"
+ babel-runtime "^6.23.0"
+
+"@commitlint/to-lines@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-8.3.4.tgz#ce24963b6d86dbe51d88d5e3028ab28f38562e2e"
+ integrity sha512-5AvcdwRsMIVq0lrzXTwpbbG5fKRTWcHkhn/hCXJJ9pm1JidsnidS1y0RGkb3O50TEHGewhXwNoavxW9VToscUA==
+
+"@commitlint/top-level@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-8.3.4.tgz#803fc6e8f5be5efa5f3551761acfca961f1d8685"
+ integrity sha512-nOaeLBbAqSZNpKgEtO6NAxmui1G8ZvLG+0wb4rvv6mWhPDzK1GNZkCd8FUZPahCoJ1iHDoatw7F8BbJLg4nDjg==
+ dependencies:
+ find-up "^4.0.0"
+
+"@definitelytyped/header-parser@latest":
+ version "0.0.84"
+ resolved "https://registry.yarnpkg.com/@definitelytyped/header-parser/-/header-parser-0.0.84.tgz#3050b1e060a5a391c8215eb8fefac82f79b87003"
+ integrity sha512-sqLbasyi1h7Y5/T8jZrLPDzRe9IExZDHKA3RGASabIvbP7UOTMJPN4ZKmbdJymtDNGV1DGiHkZ3/gOvnwlfcew==
+ dependencies:
+ "@definitelytyped/typescript-versions" "^0.0.84"
+ "@types/parsimmon" "^1.10.1"
+ parsimmon "^1.13.0"
+
+"@definitelytyped/typescript-versions@^0.0.84", "@definitelytyped/typescript-versions@latest":
+ version "0.0.84"
+ resolved "https://registry.yarnpkg.com/@definitelytyped/typescript-versions/-/typescript-versions-0.0.84.tgz#3cead40ca6131542609e8e3e621a23b8e72f7ddf"
+ integrity sha512-jV33obbCyLqStyBqBqrI02aDnZeCUV5GD66QkiWcuKQGxiFf+8VQNtptSQElinW8xIA4C4WE1kKoQy7F5yqTJQ==
+
+"@definitelytyped/utils@latest":
+ version "0.0.84"
+ resolved "https://registry.yarnpkg.com/@definitelytyped/utils/-/utils-0.0.84.tgz#abb36639fc17e91b114707ef8d46b42082a8912d"
+ integrity sha512-zMZxrpolOJtx1oUPga5H4KceuMyDXiKZ7py9avs/MI/6oFScUQgizOB0T8g+9EsxN/PIGSdBnWDV7I8Zc4IwjQ==
+ dependencies:
+ "@definitelytyped/typescript-versions" "^0.0.84"
+ "@types/node" "^14.14.35"
+ charm "^1.0.2"
+ fs-extra "^8.1.0"
+ fstream "^1.0.12"
+ npm-registry-client "^8.6.0"
+ tar "^2.2.2"
+ tar-stream "^2.1.4"
+
+"@emotion/is-prop-valid@^0.8.8":
+ version "0.8.8"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
+ integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==
+ dependencies:
+ "@emotion/memoize" "0.7.4"
+
+"@emotion/memoize@0.7.4":
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
+ integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
+
+"@eslint/eslintrc@^0.4.2":
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179"
+ integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.1.1"
+ espree "^7.3.0"
+ globals "^13.9.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^3.13.1"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
+"@evocateur/libnpmaccess@^3.1.2":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845"
+ integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg==
+ dependencies:
+ "@evocateur/npm-registry-fetch" "^4.0.0"
+ aproba "^2.0.0"
+ figgy-pudding "^3.5.1"
+ get-stream "^4.0.0"
+ npm-package-arg "^6.1.0"
+
+"@evocateur/libnpmpublish@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a"
+ integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg==
+ dependencies:
+ "@evocateur/npm-registry-fetch" "^4.0.0"
+ aproba "^2.0.0"
+ figgy-pudding "^3.5.1"
+ get-stream "^4.0.0"
+ lodash.clonedeep "^4.5.0"
+ normalize-package-data "^2.4.0"
+ npm-package-arg "^6.1.0"
+ semver "^5.5.1"
+ ssri "^6.0.1"
+
+"@evocateur/npm-registry-fetch@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66"
+ integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g==
+ dependencies:
+ JSONStream "^1.3.4"
+ bluebird "^3.5.1"
+ figgy-pudding "^3.4.1"
+ lru-cache "^5.1.1"
+ make-fetch-happen "^5.0.0"
+ npm-package-arg "^6.1.0"
+ safe-buffer "^5.1.2"
+
+"@evocateur/pacote@^9.6.3":
+ version "9.6.5"
+ resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5"
+ integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w==
+ dependencies:
+ "@evocateur/npm-registry-fetch" "^4.0.0"
+ bluebird "^3.5.3"
+ cacache "^12.0.3"
+ chownr "^1.1.2"
+ figgy-pudding "^3.5.1"
+ get-stream "^4.1.0"
+ glob "^7.1.4"
+ infer-owner "^1.0.4"
+ lru-cache "^5.1.1"
+ make-fetch-happen "^5.0.0"
+ minimatch "^3.0.4"
+ minipass "^2.3.5"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ normalize-package-data "^2.5.0"
+ npm-package-arg "^6.1.0"
+ npm-packlist "^1.4.4"
+ npm-pick-manifest "^3.0.0"
+ osenv "^0.1.5"
+ promise-inflight "^1.0.1"
+ promise-retry "^1.1.1"
+ protoduck "^5.0.1"
+ rimraf "^2.6.3"
+ safe-buffer "^5.2.0"
+ semver "^5.7.0"
+ ssri "^6.0.1"
+ tar "^4.4.10"
+ unique-filename "^1.1.1"
+ which "^1.3.1"
+
+"@hapi/address@2.x.x":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
+ integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
+
+"@hapi/bourne@1.x.x":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a"
+ integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
+
+"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06"
+ integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==
+
+"@hapi/joi@^15.1.0":
+ version "15.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7"
+ integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==
+ dependencies:
+ "@hapi/address" "2.x.x"
+ "@hapi/bourne" "1.x.x"
+ "@hapi/hoek" "8.x.x"
+ "@hapi/topo" "3.x.x"
+
+"@hapi/topo@3.x.x":
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+ integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
+ dependencies:
+ "@hapi/hoek" "^8.3.0"
+
+"@iarna/toml@2.2.5":
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c"
+ integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^24.7.1", "@jest/console@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0"
+ integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==
+ dependencies:
+ "@jest/source-map" "^24.9.0"
+ chalk "^2.0.1"
+ slash "^2.0.0"
+
+"@jest/core@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4"
+ integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/reporters" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-changed-files "^24.9.0"
+ jest-config "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-resolve-dependencies "^24.9.0"
+ jest-runner "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ jest-watcher "^24.9.0"
+ micromatch "^3.1.10"
+ p-each-series "^1.0.0"
+ realpath-native "^1.1.0"
+ rimraf "^2.5.4"
+ slash "^2.0.0"
+ strip-ansi "^5.0.0"
+
+"@jest/environment@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18"
+ integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==
+ dependencies:
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+
+"@jest/fake-timers@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93"
+ integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-mock "^24.9.0"
+
+"@jest/reporters@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43"
+ integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ istanbul-lib-coverage "^2.0.2"
+ istanbul-lib-instrument "^3.0.1"
+ istanbul-lib-report "^2.0.4"
+ istanbul-lib-source-maps "^3.0.1"
+ istanbul-reports "^2.2.6"
+ jest-haste-map "^24.9.0"
+ jest-resolve "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.6.0"
+ node-notifier "^5.4.2"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+ string-length "^2.0.0"
+
+"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714"
+ integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.1.15"
+ source-map "^0.6.0"
+
+"@jest/test-result@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca"
+ integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+
+"@jest/test-sequencer@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31"
+ integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==
+ dependencies:
+ "@jest/test-result" "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-runner "^24.9.0"
+ jest-runtime "^24.9.0"
+
+"@jest/transform@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56"
+ integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^24.9.0"
+ babel-plugin-istanbul "^5.1.0"
+ chalk "^2.0.1"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.1.15"
+ jest-haste-map "^24.9.0"
+ jest-regex-util "^24.9.0"
+ jest-util "^24.9.0"
+ micromatch "^3.1.10"
+ pirates "^4.0.1"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "2.4.1"
+
+"@jest/transform@^27.0.5":
+ version "27.0.5"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.5.tgz#2dcb78953708af713941ac845b06078bc74ed873"
+ integrity sha512-lBD6OwKXSc6JJECBNk4mVxtSVuJSBsQrJ9WCBisfJs7EZuYq4K6vM9HmoB7hmPiLIDGeyaerw3feBV/bC4z8tg==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^27.0.2"
+ 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 "^27.0.5"
+ jest-regex-util "^27.0.1"
+ jest-util "^27.0.2"
+ micromatch "^4.0.4"
+ pirates "^4.0.1"
+ slash "^3.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "^3.0.0"
+
+"@jest/types@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
+ integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^13.0.0"
+
+"@jest/types@^27.0.2":
+ version "27.0.2"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.2.tgz#e153d6c46bda0f2589f0702b071f9898c7bbd37e"
+ integrity sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^16.0.0"
+ chalk "^4.0.0"
+
+"@lerna/add@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b"
+ integrity sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A==
+ dependencies:
+ "@evocateur/pacote" "^9.6.3"
+ "@lerna/bootstrap" "3.21.0"
+ "@lerna/command" "3.21.0"
+ "@lerna/filter-options" "3.20.0"
+ "@lerna/npm-conf" "3.16.0"
+ "@lerna/validation-error" "3.13.0"
+ dedent "^0.7.0"
+ npm-package-arg "^6.1.0"
+ p-map "^2.1.0"
+ semver "^6.2.0"
+
+"@lerna/bootstrap@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.21.0.tgz#bcd1b651be5b0970b20d8fae04c864548123aed6"
+ integrity sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw==
+ dependencies:
+ "@lerna/command" "3.21.0"
+ "@lerna/filter-options" "3.20.0"
+ "@lerna/has-npm-version" "3.16.5"
+ "@lerna/npm-install" "3.16.5"
+ "@lerna/package-graph" "3.18.5"
+ "@lerna/pulse-till-done" "3.13.0"
+ "@lerna/rimraf-dir" "3.16.5"
+ "@lerna/run-lifecycle" "3.16.2"
+ "@lerna/run-topologically" "3.18.5"
+ "@lerna/symlink-binary" "3.17.0"
+ "@lerna/symlink-dependencies" "3.17.0"
+ "@lerna/validation-error" "3.13.0"
+ dedent "^0.7.0"
+ get-port "^4.2.0"
+ multimatch "^3.0.0"
+ npm-package-arg "^6.1.0"
+ npmlog "^4.1.2"
+ p-finally "^1.0.0"
+ p-map "^2.1.0"
+ p-map-series "^1.0.0"
+ p-waterfall "^1.0.0"
+ read-package-tree "^5.1.6"
+ semver "^6.2.0"
+
+"@lerna/changed@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.21.0.tgz#108e15f679bfe077af500f58248c634f1044ea0b"
+ integrity sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw==
+ dependencies:
+ "@lerna/collect-updates" "3.20.0"
+ "@lerna/command" "3.21.0"
+ "@lerna/listable" "3.18.5"
+ "@lerna/output" "3.13.0"
+
+"@lerna/check-working-tree@3.16.5":
+ version "3.16.5"
+ resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa"
+ integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ==
+ dependencies:
+ "@lerna/collect-uncommitted" "3.16.5"
+ "@lerna/describe-ref" "3.16.5"
+ "@lerna/validation-error" "3.13.0"
+
+"@lerna/child-process@3.16.5":
+ version "3.16.5"
+ resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2"
+ integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg==
+ dependencies:
+ chalk "^2.3.1"
+ execa "^1.0.0"
+ strong-log-transformer "^2.0.0"
+
+"@lerna/clean@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.21.0.tgz#c0b46b5300cc3dae2cda3bec14b803082da3856d"
+ integrity sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg==
+ dependencies:
+ "@lerna/command" "3.21.0"
+ "@lerna/filter-options" "3.20.0"
+ "@lerna/prompt" "3.18.5"
+ "@lerna/pulse-till-done" "3.13.0"
+ "@lerna/rimraf-dir" "3.16.5"
+ p-map "^2.1.0"
+ p-map-series "^1.0.0"
+ p-waterfall "^1.0.0"
+
+"@lerna/cli@3.18.5":
+ version "3.18.5"
+ resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242"
+ integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA==
+ dependencies:
+ "@lerna/global-options" "3.13.0"
+ dedent "^0.7.0"
+ npmlog "^4.1.2"
+ yargs "^14.2.2"
+
+"@lerna/collect-uncommitted@3.16.5":
+ version "3.16.5"
+ resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63"
+ integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ chalk "^2.3.1"
+ figgy-pudding "^3.5.1"
+ npmlog "^4.1.2"
+
+"@lerna/collect-updates@3.20.0":
+ version "3.20.0"
+ resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1"
+ integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ "@lerna/describe-ref" "3.16.5"
+ minimatch "^3.0.4"
+ npmlog "^4.1.2"
+ slash "^2.0.0"
+
+"@lerna/command@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.21.0.tgz#9a2383759dc7b700dacfa8a22b2f3a6e190121f7"
+ integrity sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ "@lerna/package-graph" "3.18.5"
+ "@lerna/project" "3.21.0"
+ "@lerna/validation-error" "3.13.0"
+ "@lerna/write-log-file" "3.13.0"
+ clone-deep "^4.0.1"
+ dedent "^0.7.0"
+ execa "^1.0.0"
+ is-ci "^2.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/conventional-commits@3.22.0":
+ version "3.22.0"
+ resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz#2798f4881ee2ef457bdae027ab7d0bf0af6f1e09"
+ integrity sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA==
+ dependencies:
+ "@lerna/validation-error" "3.13.0"
+ conventional-changelog-angular "^5.0.3"
+ conventional-changelog-core "^3.1.6"
+ conventional-recommended-bump "^5.0.0"
+ fs-extra "^8.1.0"
+ get-stream "^4.0.0"
+ lodash.template "^4.5.0"
+ npm-package-arg "^6.1.0"
+ npmlog "^4.1.2"
+ pify "^4.0.1"
+ semver "^6.2.0"
+
+"@lerna/create-symlink@3.16.2":
+ version "3.16.2"
+ resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967"
+ integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw==
+ dependencies:
+ "@zkochan/cmd-shim" "^3.1.0"
+ fs-extra "^8.1.0"
+ npmlog "^4.1.2"
+
+"@lerna/create@3.22.0":
+ version "3.22.0"
+ resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.22.0.tgz#d6bbd037c3dc5b425fe5f6d1b817057c278f7619"
+ integrity sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw==
+ dependencies:
+ "@evocateur/pacote" "^9.6.3"
+ "@lerna/child-process" "3.16.5"
+ "@lerna/command" "3.21.0"
+ "@lerna/npm-conf" "3.16.0"
+ "@lerna/validation-error" "3.13.0"
+ camelcase "^5.0.0"
+ dedent "^0.7.0"
+ fs-extra "^8.1.0"
+ globby "^9.2.0"
+ init-package-json "^1.10.3"
+ npm-package-arg "^6.1.0"
+ p-reduce "^1.0.0"
+ pify "^4.0.1"
+ semver "^6.2.0"
+ slash "^2.0.0"
+ validate-npm-package-license "^3.0.3"
+ validate-npm-package-name "^3.0.0"
+ whatwg-url "^7.0.0"
+
+"@lerna/describe-ref@3.16.5":
+ version "3.16.5"
+ resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0"
+ integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ npmlog "^4.1.2"
+
+"@lerna/diff@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.21.0.tgz#e6df0d8b9916167ff5a49fcb02ac06424280a68d"
+ integrity sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ "@lerna/command" "3.21.0"
+ "@lerna/validation-error" "3.13.0"
+ npmlog "^4.1.2"
+
+"@lerna/exec@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.21.0.tgz#17f07533893cb918a17b41bcc566dc437016db26"
+ integrity sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ "@lerna/command" "3.21.0"
+ "@lerna/filter-options" "3.20.0"
+ "@lerna/profiler" "3.20.0"
+ "@lerna/run-topologically" "3.18.5"
+ "@lerna/validation-error" "3.13.0"
+ p-map "^2.1.0"
+
+"@lerna/filter-options@3.20.0":
+ version "3.20.0"
+ resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b"
+ integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g==
+ dependencies:
+ "@lerna/collect-updates" "3.20.0"
+ "@lerna/filter-packages" "3.18.0"
+ dedent "^0.7.0"
+ figgy-pudding "^3.5.1"
+ npmlog "^4.1.2"
+
+"@lerna/filter-packages@3.18.0":
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70"
+ integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ==
+ dependencies:
+ "@lerna/validation-error" "3.13.0"
+ multimatch "^3.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/get-npm-exec-opts@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5"
+ integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw==
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/get-packed@3.16.0":
+ version "3.16.0"
+ resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff"
+ integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw==
+ dependencies:
+ fs-extra "^8.1.0"
+ ssri "^6.0.1"
+ tar "^4.4.8"
+
+"@lerna/github-client@3.22.0":
+ version "3.22.0"
+ resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.22.0.tgz#5d816aa4f76747ed736ae64ff962b8f15c354d95"
+ integrity sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ "@octokit/plugin-enterprise-rest" "^6.0.1"
+ "@octokit/rest" "^16.28.4"
+ git-url-parse "^11.1.2"
+ npmlog "^4.1.2"
+
+"@lerna/gitlab-client@3.15.0":
+ version "3.15.0"
+ resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6"
+ integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q==
+ dependencies:
+ node-fetch "^2.5.0"
+ npmlog "^4.1.2"
+ whatwg-url "^7.0.0"
+
+"@lerna/global-options@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1"
+ integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ==
+
+"@lerna/has-npm-version@3.16.5":
+ version "3.16.5"
+ resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326"
+ integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ semver "^6.2.0"
+
+"@lerna/import@3.22.0":
+ version "3.22.0"
+ resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.22.0.tgz#1a5f0394f38e23c4f642a123e5e1517e70d068d2"
+ integrity sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ "@lerna/command" "3.21.0"
+ "@lerna/prompt" "3.18.5"
+ "@lerna/pulse-till-done" "3.13.0"
+ "@lerna/validation-error" "3.13.0"
+ dedent "^0.7.0"
+ fs-extra "^8.1.0"
+ p-map-series "^1.0.0"
+
+"@lerna/info@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.21.0.tgz#76696b676fdb0f35d48c83c63c1e32bb5e37814f"
+ integrity sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA==
+ dependencies:
+ "@lerna/command" "3.21.0"
+ "@lerna/output" "3.13.0"
+ envinfo "^7.3.1"
+
+"@lerna/init@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.21.0.tgz#1e810934dc8bf4e5386c031041881d3b4096aa5c"
+ integrity sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ "@lerna/command" "3.21.0"
+ fs-extra "^8.1.0"
+ p-map "^2.1.0"
+ write-json-file "^3.2.0"
+
+"@lerna/link@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.21.0.tgz#8be68ff0ccee104b174b5bbd606302c2f06e9d9b"
+ integrity sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ==
+ dependencies:
+ "@lerna/command" "3.21.0"
+ "@lerna/package-graph" "3.18.5"
+ "@lerna/symlink-dependencies" "3.17.0"
+ p-map "^2.1.0"
+ slash "^2.0.0"
+
+"@lerna/list@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.21.0.tgz#42f76fafa56dea13b691ec8cab13832691d61da2"
+ integrity sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg==
+ dependencies:
+ "@lerna/command" "3.21.0"
+ "@lerna/filter-options" "3.20.0"
+ "@lerna/listable" "3.18.5"
+ "@lerna/output" "3.13.0"
+
+"@lerna/listable@3.18.5":
+ version "3.18.5"
+ resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a"
+ integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg==
+ dependencies:
+ "@lerna/query-graph" "3.18.5"
+ chalk "^2.3.1"
+ columnify "^1.5.4"
+
+"@lerna/log-packed@3.16.0":
+ version "3.16.0"
+ resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16"
+ integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ==
+ dependencies:
+ byte-size "^5.0.1"
+ columnify "^1.5.4"
+ has-unicode "^2.0.1"
+ npmlog "^4.1.2"
+
+"@lerna/npm-conf@3.16.0":
+ version "3.16.0"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827"
+ integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA==
+ dependencies:
+ config-chain "^1.1.11"
+ pify "^4.0.1"
+
+"@lerna/npm-dist-tag@3.18.5":
+ version "3.18.5"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55"
+ integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ==
+ dependencies:
+ "@evocateur/npm-registry-fetch" "^4.0.0"
+ "@lerna/otplease" "3.18.5"
+ figgy-pudding "^3.5.1"
+ npm-package-arg "^6.1.0"
+ npmlog "^4.1.2"
+
+"@lerna/npm-install@3.16.5":
+ version "3.16.5"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3"
+ integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ "@lerna/get-npm-exec-opts" "3.13.0"
+ fs-extra "^8.1.0"
+ npm-package-arg "^6.1.0"
+ npmlog "^4.1.2"
+ signal-exit "^3.0.2"
+ write-pkg "^3.1.0"
+
+"@lerna/npm-publish@3.18.5":
+ version "3.18.5"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af"
+ integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg==
+ dependencies:
+ "@evocateur/libnpmpublish" "^1.2.2"
+ "@lerna/otplease" "3.18.5"
+ "@lerna/run-lifecycle" "3.16.2"
+ figgy-pudding "^3.5.1"
+ fs-extra "^8.1.0"
+ npm-package-arg "^6.1.0"
+ npmlog "^4.1.2"
+ pify "^4.0.1"
+ read-package-json "^2.0.13"
+
+"@lerna/npm-run-script@3.16.5":
+ version "3.16.5"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15"
+ integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ "@lerna/get-npm-exec-opts" "3.13.0"
+ npmlog "^4.1.2"
+
+"@lerna/otplease@3.18.5":
+ version "3.18.5"
+ resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231"
+ integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog==
+ dependencies:
+ "@lerna/prompt" "3.18.5"
+ figgy-pudding "^3.5.1"
+
+"@lerna/output@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989"
+ integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg==
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/pack-directory@3.16.4":
+ version "3.16.4"
+ resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693"
+ integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng==
+ dependencies:
+ "@lerna/get-packed" "3.16.0"
+ "@lerna/package" "3.16.0"
+ "@lerna/run-lifecycle" "3.16.2"
+ figgy-pudding "^3.5.1"
+ npm-packlist "^1.4.4"
+ npmlog "^4.1.2"
+ tar "^4.4.10"
+ temp-write "^3.4.0"
+
+"@lerna/package-graph@3.18.5":
+ version "3.18.5"
+ resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b"
+ integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA==
+ dependencies:
+ "@lerna/prerelease-id-from-version" "3.16.0"
+ "@lerna/validation-error" "3.13.0"
+ npm-package-arg "^6.1.0"
+ npmlog "^4.1.2"
+ semver "^6.2.0"
+
+"@lerna/package@3.16.0":
+ version "3.16.0"
+ resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c"
+ integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw==
+ dependencies:
+ load-json-file "^5.3.0"
+ npm-package-arg "^6.1.0"
+ write-pkg "^3.1.0"
+
+"@lerna/prerelease-id-from-version@3.16.0":
+ version "3.16.0"
+ resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1"
+ integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA==
+ dependencies:
+ semver "^6.2.0"
+
+"@lerna/profiler@3.20.0":
+ version "3.20.0"
+ resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051"
+ integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg==
+ dependencies:
+ figgy-pudding "^3.5.1"
+ fs-extra "^8.1.0"
+ npmlog "^4.1.2"
+ upath "^1.2.0"
+
+"@lerna/project@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.21.0.tgz#5d784d2d10c561a00f20320bcdb040997c10502d"
+ integrity sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A==
+ dependencies:
+ "@lerna/package" "3.16.0"
+ "@lerna/validation-error" "3.13.0"
+ cosmiconfig "^5.1.0"
+ dedent "^0.7.0"
+ dot-prop "^4.2.0"
+ glob-parent "^5.0.0"
+ globby "^9.2.0"
+ load-json-file "^5.3.0"
+ npmlog "^4.1.2"
+ p-map "^2.1.0"
+ resolve-from "^4.0.0"
+ write-json-file "^3.2.0"
+
+"@lerna/prompt@3.18.5":
+ version "3.18.5"
+ resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1"
+ integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ==
+ dependencies:
+ inquirer "^6.2.0"
+ npmlog "^4.1.2"
+
+"@lerna/publish@3.22.1":
+ version "3.22.1"
+ resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.22.1.tgz#b4f7ce3fba1e9afb28be4a1f3d88222269ba9519"
+ integrity sha512-PG9CM9HUYDreb1FbJwFg90TCBQooGjj+n/pb3gw/eH5mEDq0p8wKdLFe0qkiqUkm/Ub5C8DbVFertIo0Vd0zcw==
+ dependencies:
+ "@evocateur/libnpmaccess" "^3.1.2"
+ "@evocateur/npm-registry-fetch" "^4.0.0"
+ "@evocateur/pacote" "^9.6.3"
+ "@lerna/check-working-tree" "3.16.5"
+ "@lerna/child-process" "3.16.5"
+ "@lerna/collect-updates" "3.20.0"
+ "@lerna/command" "3.21.0"
+ "@lerna/describe-ref" "3.16.5"
+ "@lerna/log-packed" "3.16.0"
+ "@lerna/npm-conf" "3.16.0"
+ "@lerna/npm-dist-tag" "3.18.5"
+ "@lerna/npm-publish" "3.18.5"
+ "@lerna/otplease" "3.18.5"
+ "@lerna/output" "3.13.0"
+ "@lerna/pack-directory" "3.16.4"
+ "@lerna/prerelease-id-from-version" "3.16.0"
+ "@lerna/prompt" "3.18.5"
+ "@lerna/pulse-till-done" "3.13.0"
+ "@lerna/run-lifecycle" "3.16.2"
+ "@lerna/run-topologically" "3.18.5"
+ "@lerna/validation-error" "3.13.0"
+ "@lerna/version" "3.22.1"
+ figgy-pudding "^3.5.1"
+ fs-extra "^8.1.0"
+ npm-package-arg "^6.1.0"
+ npmlog "^4.1.2"
+ p-finally "^1.0.0"
+ p-map "^2.1.0"
+ p-pipe "^1.2.0"
+ semver "^6.2.0"
+
+"@lerna/pulse-till-done@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110"
+ integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA==
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/query-graph@3.18.5":
+ version "3.18.5"
+ resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86"
+ integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA==
+ dependencies:
+ "@lerna/package-graph" "3.18.5"
+ figgy-pudding "^3.5.1"
+
+"@lerna/resolve-symlink@3.16.0":
+ version "3.16.0"
+ resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386"
+ integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ==
+ dependencies:
+ fs-extra "^8.1.0"
+ npmlog "^4.1.2"
+ read-cmd-shim "^1.0.1"
+
+"@lerna/rimraf-dir@3.16.5":
+ version "3.16.5"
+ resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09"
+ integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA==
+ dependencies:
+ "@lerna/child-process" "3.16.5"
+ npmlog "^4.1.2"
+ path-exists "^3.0.0"
+ rimraf "^2.6.2"
+
+"@lerna/run-lifecycle@3.16.2":
+ version "3.16.2"
+ resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00"
+ integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A==
+ dependencies:
+ "@lerna/npm-conf" "3.16.0"
+ figgy-pudding "^3.5.1"
+ npm-lifecycle "^3.1.2"
+ npmlog "^4.1.2"
+
+"@lerna/run-topologically@3.18.5":
+ version "3.18.5"
+ resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3"
+ integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg==
+ dependencies:
+ "@lerna/query-graph" "3.18.5"
+ figgy-pudding "^3.5.1"
+ p-queue "^4.0.0"
+
+"@lerna/run@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.21.0.tgz#2a35ec84979e4d6e42474fe148d32e5de1cac891"
+ integrity sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q==
+ dependencies:
+ "@lerna/command" "3.21.0"
+ "@lerna/filter-options" "3.20.0"
+ "@lerna/npm-run-script" "3.16.5"
+ "@lerna/output" "3.13.0"
+ "@lerna/profiler" "3.20.0"
+ "@lerna/run-topologically" "3.18.5"
+ "@lerna/timer" "3.13.0"
+ "@lerna/validation-error" "3.13.0"
+ p-map "^2.1.0"
+
+"@lerna/symlink-binary@3.17.0":
+ version "3.17.0"
+ resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a"
+ integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ==
+ dependencies:
+ "@lerna/create-symlink" "3.16.2"
+ "@lerna/package" "3.16.0"
+ fs-extra "^8.1.0"
+ p-map "^2.1.0"
+
+"@lerna/symlink-dependencies@3.17.0":
+ version "3.17.0"
+ resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a"
+ integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q==
+ dependencies:
+ "@lerna/create-symlink" "3.16.2"
+ "@lerna/resolve-symlink" "3.16.0"
+ "@lerna/symlink-binary" "3.17.0"
+ fs-extra "^8.1.0"
+ p-finally "^1.0.0"
+ p-map "^2.1.0"
+ p-map-series "^1.0.0"
+
+"@lerna/timer@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781"
+ integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw==
+
+"@lerna/validation-error@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3"
+ integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA==
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/version@3.22.1":
+ version "3.22.1"
+ resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.22.1.tgz#9805a9247a47ee62d6b81bd9fa5fb728b24b59e2"
+ integrity sha512-PSGt/K1hVqreAFoi3zjD0VEDupQ2WZVlVIwesrE5GbrL2BjXowjCsTDPqblahDUPy0hp6h7E2kG855yLTp62+g==
+ dependencies:
+ "@lerna/check-working-tree" "3.16.5"
+ "@lerna/child-process" "3.16.5"
+ "@lerna/collect-updates" "3.20.0"
+ "@lerna/command" "3.21.0"
+ "@lerna/conventional-commits" "3.22.0"
+ "@lerna/github-client" "3.22.0"
+ "@lerna/gitlab-client" "3.15.0"
+ "@lerna/output" "3.13.0"
+ "@lerna/prerelease-id-from-version" "3.16.0"
+ "@lerna/prompt" "3.18.5"
+ "@lerna/run-lifecycle" "3.16.2"
+ "@lerna/run-topologically" "3.18.5"
+ "@lerna/validation-error" "3.13.0"
+ chalk "^2.3.1"
+ dedent "^0.7.0"
+ load-json-file "^5.3.0"
+ minimatch "^3.0.4"
+ npmlog "^4.1.2"
+ p-map "^2.1.0"
+ p-pipe "^1.2.0"
+ p-reduce "^1.0.0"
+ p-waterfall "^1.0.0"
+ semver "^6.2.0"
+ slash "^2.0.0"
+ temp-write "^3.4.0"
+ write-json-file "^3.2.0"
+
+"@lerna/write-log-file@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26"
+ integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A==
+ dependencies:
+ npmlog "^4.1.2"
+ write-file-atomic "^2.3.0"
+
+"@marionebl/sander@^0.6.0":
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/@marionebl/sander/-/sander-0.6.1.tgz#1958965874f24bc51be48875feb50d642fc41f7b"
+ integrity sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s=
+ dependencies:
+ graceful-fs "^4.1.3"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.2"
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+ integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ glob-to-regexp "^0.3.0"
+
+"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.2":
+ version "2.1.8-no-fsevents.2"
+ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz#e324c0a247a5567192dd7180647709d7e2faf94b"
+ integrity sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^5.1.2"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.stat@^1.1.2":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2"
+ integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@octokit/auth-token@^2.4.0", "@octokit/auth-token@^2.4.4":
+ version "2.4.5"
+ resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3"
+ integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+
+"@octokit/core@^3.0.0", "@octokit/core@^3.2.3":
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b"
+ integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==
+ dependencies:
+ "@octokit/auth-token" "^2.4.4"
+ "@octokit/graphql" "^4.5.8"
+ "@octokit/request" "^5.6.0"
+ "@octokit/request-error" "^2.0.5"
+ "@octokit/types" "^6.0.3"
+ before-after-hook "^2.2.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/endpoint@^6.0.1":
+ version "6.0.12"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658"
+ integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+ is-plain-object "^5.0.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/graphql@^4.5.8":
+ version "4.6.4"
+ resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.4.tgz#0c3f5bed440822182e972317122acb65d311a5ed"
+ integrity sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==
+ dependencies:
+ "@octokit/request" "^5.6.0"
+ "@octokit/types" "^6.0.3"
+ universal-user-agent "^6.0.0"
+
+"@octokit/openapi-types@^7.3.2":
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-7.3.2.tgz#065ce49b338043ec7f741316ce06afd4d459d944"
+ integrity sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA==
+
+"@octokit/plugin-enterprise-rest@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437"
+ integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==
+
+"@octokit/plugin-paginate-rest@^1.1.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc"
+ integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==
+ dependencies:
+ "@octokit/types" "^2.0.1"
+
+"@octokit/plugin-paginate-rest@^2.2.0", "@octokit/plugin-paginate-rest@^2.6.2":
+ version "2.13.5"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.5.tgz#e459f9b5dccbe0a53f039a355d5b80c0a2b0dc57"
+ integrity sha512-3WSAKBLa1RaR/7GG+LQR/tAZ9fp9H9waE9aPXallidyci9oZsfgsLn5M836d3LuDC6Fcym+2idRTBpssHZePVg==
+ dependencies:
+ "@octokit/types" "^6.13.0"
+
+"@octokit/plugin-request-log@^1.0.0", "@octokit/plugin-request-log@^1.0.2":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85"
+ integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==
+
+"@octokit/plugin-rest-endpoint-methods@2.4.0":
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e"
+ integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==
+ dependencies:
+ "@octokit/types" "^2.0.1"
+ deprecation "^2.3.1"
+
+"@octokit/plugin-rest-endpoint-methods@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.1.3.tgz#44d9af35cd9fef63c7a4cf3b0e6b681886cc8d34"
+ integrity sha512-az3seq9yuc0OXlNLrZ0fWTNbFuL4sN8GN1sLmovELg3+LnpWmOs3GAn2KGa6E7SKMgpCuFvJwvsHEfYasTHUxQ==
+ dependencies:
+ "@octokit/types" "^5.1.1"
+ deprecation "^2.3.1"
+
+"@octokit/plugin-rest-endpoint-methods@5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.0.1.tgz#631b8d4edc6798b03489911252a25f2a4e58c594"
+ integrity sha512-vvWbPtPqLyIzJ7A4IPdTl+8IeuKAwMJ4LjvmqWOOdfSuqWQYZXq2CEd0hsnkidff2YfKlguzujHs/reBdAx8Sg==
+ dependencies:
+ "@octokit/types" "^6.13.1"
+ deprecation "^2.3.1"
+
+"@octokit/request-error@^1.0.2":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801"
+ integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==
+ dependencies:
+ "@octokit/types" "^2.0.0"
+ deprecation "^2.0.0"
+ once "^1.4.0"
+
+"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677"
+ integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+ deprecation "^2.0.0"
+ once "^1.4.0"
+
+"@octokit/request@^5.2.0", "@octokit/request@^5.6.0":
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672"
+ integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==
+ dependencies:
+ "@octokit/endpoint" "^6.0.1"
+ "@octokit/request-error" "^2.1.0"
+ "@octokit/types" "^6.16.1"
+ is-plain-object "^5.0.0"
+ node-fetch "^2.6.1"
+ universal-user-agent "^6.0.0"
+
+"@octokit/rest@18.0.4":
+ version "18.0.4"
+ resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.0.4.tgz#3c7e7dba671ae2097c24086581a2dc2fdb039be0"
+ integrity sha512-l4PspvLvBG+bTDsji+XceDWuIf7qAZHLljbqJZ6UDdtACkW+MuFsprXicV5pEFAkxfPusyVDDPYJKRY1KJb7Zg==
+ dependencies:
+ "@octokit/core" "^3.0.0"
+ "@octokit/plugin-paginate-rest" "^2.2.0"
+ "@octokit/plugin-request-log" "^1.0.0"
+ "@octokit/plugin-rest-endpoint-methods" "4.1.3"
+
+"@octokit/rest@18.5.3":
+ version "18.5.3"
+ resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.5.3.tgz#6a2e6006a87ebbc34079c419258dd29ec9ff659d"
+ integrity sha512-KPAsUCr1DOdLVbZJgGNuE/QVLWEaVBpFQwDAz/2Cnya6uW2wJ/P5RVGk0itx7yyN1aGa8uXm2pri4umEqG1JBA==
+ dependencies:
+ "@octokit/core" "^3.2.3"
+ "@octokit/plugin-paginate-rest" "^2.6.2"
+ "@octokit/plugin-request-log" "^1.0.2"
+ "@octokit/plugin-rest-endpoint-methods" "5.0.1"
+
+"@octokit/rest@^16.28.4":
+ version "16.43.2"
+ resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b"
+ integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==
+ dependencies:
+ "@octokit/auth-token" "^2.4.0"
+ "@octokit/plugin-paginate-rest" "^1.1.1"
+ "@octokit/plugin-request-log" "^1.0.0"
+ "@octokit/plugin-rest-endpoint-methods" "2.4.0"
+ "@octokit/request" "^5.2.0"
+ "@octokit/request-error" "^1.0.2"
+ atob-lite "^2.0.0"
+ before-after-hook "^2.0.0"
+ btoa-lite "^1.0.0"
+ deprecation "^2.0.0"
+ lodash.get "^4.4.2"
+ lodash.set "^4.3.2"
+ lodash.uniq "^4.5.0"
+ octokit-pagination-methods "^1.1.0"
+ once "^1.4.0"
+ universal-user-agent "^4.0.0"
+
+"@octokit/types@^2.0.0", "@octokit/types@^2.0.1":
+ version "2.16.2"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2"
+ integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==
+ dependencies:
+ "@types/node" ">= 8"
+
+"@octokit/types@^5.1.1":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b"
+ integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ==
+ dependencies:
+ "@types/node" ">= 8"
+
+"@octokit/types@^6.0.3", "@octokit/types@^6.13.0", "@octokit/types@^6.13.1", "@octokit/types@^6.16.1":
+ version "6.16.4"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.16.4.tgz#d24f5e1bacd2fe96d61854b5bda0e88cf8288dfe"
+ integrity sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A==
+ dependencies:
+ "@octokit/openapi-types" "^7.3.2"
+
+"@release-it/conventional-changelog@^1.1.0":
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/@release-it/conventional-changelog/-/conventional-changelog-1.1.4.tgz#28ad5a49e096fec7d874f06041b5cc0ddffa7daa"
+ integrity sha512-0e4qjsPvoGGkuT5YpCAQEv5LOGVa1nSAZay07NGmEhNZL/UxkAk2OJ2qoEAetqc08kA/DrLZL6gmCMs+fI9YOw==
+ dependencies:
+ concat-stream "^2.0.0"
+ conventional-changelog "^3.1.8"
+ conventional-recommended-bump "^6.0.5"
+ prepend-file "^1.3.1"
+ release-it "^13.5.6"
+
+"@rollup/pluginutils@^4.1.0":
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838"
+ integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==
+ dependencies:
+ estree-walker "^2.0.1"
+ picomatch "^2.2.2"
+
+"@sindresorhus/is@^0.14.0":
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
+ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+
+"@sindresorhus/is@^3.1.1":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-3.1.2.tgz#548650de521b344e3781fbdb0ece4aa6f729afb8"
+ integrity sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==
+
+"@sindresorhus/is@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5"
+ integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==
+
+"@stylelint/postcss-css-in-js@^0.37.2":
+ version "0.37.2"
+ resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2"
+ integrity sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==
+ dependencies:
+ "@babel/core" ">=7.9.0"
+
+"@stylelint/postcss-markdown@^0.36.2":
+ version "0.36.2"
+ resolved "https://registry.yarnpkg.com/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz#0a540c4692f8dcdfc13c8e352c17e7bfee2bb391"
+ integrity sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==
+ dependencies:
+ remark "^13.0.0"
+ unist-util-find-all-after "^3.0.2"
+
+"@szmarczak/http-timer@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
+ integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+ dependencies:
+ defer-to-connect "^1.0.1"
+
+"@szmarczak/http-timer@^4.0.5":
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152"
+ integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==
+ dependencies:
+ defer-to-connect "^2.0.0"
+
+"@tootallnate/once@1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+
+"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.0", "@types/babel__core@^7.1.14":
+ version "7.1.14"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402"
+ integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8"
+ integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be"
+ integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+ version "7.11.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639"
+ integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==
+ dependencies:
+ "@babel/types" "^7.3.0"
+
+"@types/cacheable-request@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976"
+ integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==
+ dependencies:
+ "@types/http-cache-semantics" "*"
+ "@types/keyv" "*"
+ "@types/node" "*"
+ "@types/responselike" "*"
+
+"@types/cosmiconfig@^5.0.3":
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/@types/cosmiconfig/-/cosmiconfig-5.0.3.tgz#880644bb155d4038d3b752159684b777b0a159dd"
+ integrity sha512-HgTGG7X5y9pLl3pixeo2XtDEFD8rq2EuH+S4mK6teCnAwWMucQl6v1D43hI4Uw1VJh6nu59lxLkqXHRl4uwThA==
+ dependencies:
+ "@types/node" "*"
+
+"@types/debug@^4.1.5":
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd"
+ integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==
+
+"@types/dedent@^0.7.0":
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/@types/dedent/-/dedent-0.7.0.tgz#155f339ca404e6dd90b9ce46a3f78fd69ca9b050"
+ integrity sha512-EGlKlgMhnLt/cM4DbUSafFdrkeJoC9Mvnj0PUCU7tFmTjMjNRT957kXCx0wYm3JuEq4o4ZsS5vG+NlkM2DMd2A==
+
+"@types/enhanced-resolve@^3.0.6":
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/@types/enhanced-resolve/-/enhanced-resolve-3.0.6.tgz#a51eaa24f4458ed13fb42a7048c0b66f92e95a28"
+ integrity sha512-mAWc6JpDiA6GnPCF5023YSGMa/E7baMvLs+HtT9E6Z52lUds3pthf4APhVQpbmV6sZTrbASgBEDdh70eGWTJFw==
+ dependencies:
+ "@types/node" "*"
+ "@types/tapable" "^0"
+
+"@types/eslint-scope@^3.7.0":
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86"
+ integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==
+ dependencies:
+ "@types/eslint" "*"
+ "@types/estree" "*"
+
+"@types/eslint@*":
+ version "7.2.13"
+ resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.13.tgz#e0ca7219ba5ded402062ad6f926d491ebb29dd53"
+ integrity sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==
+ dependencies:
+ "@types/estree" "*"
+ "@types/json-schema" "*"
+
+"@types/estree@*":
+ version "0.0.48"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74"
+ integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==
+
+"@types/estree@^0.0.45":
+ version "0.0.45"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884"
+ integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==
+
+"@types/estree@^0.0.47":
+ version "0.0.47"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4"
+ integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==
+
+"@types/glob@^7.1.1":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
+ integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==
+ dependencies:
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/graceful-fs@^4.1.2":
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
+ integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/http-cache-semantics@*":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a"
+ integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
+ integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^1.1.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
+ integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+ "@types/istanbul-lib-report" "*"
+
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
+ integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/jest@^24.9.1":
+ version "24.9.1"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534"
+ integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==
+ dependencies:
+ jest-diff "^24.3.0"
+
+"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7":
+ version "7.0.7"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
+ integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+
+"@types/keyv@*":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7"
+ integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/loader-utils@^1.1.3":
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/@types/loader-utils/-/loader-utils-1.1.5.tgz#445e88068a2a93c8ad4846a949244d9189209688"
+ integrity sha512-AwEO8Kn9369yVgFAK6m4NeqUSyT2JipLPsGLyeLFyIi4eksOXciq0nnsAHig29OJD3O0LCwY7h8pAoHx6Fu+Xw==
+ dependencies:
+ "@types/node" "*"
+ "@types/webpack" "^4"
+
+"@types/mdast@^3.0.0":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
+ integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/minimatch@*":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21"
+ integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==
+
+"@types/minimist@^1.2.0":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
+ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
+
+"@types/mkdirp@^0.5.2":
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f"
+ integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/node@*", "@types/node@>= 8":
+ version "15.12.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d"
+ integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==
+
+"@types/node@^14.14.35":
+ version "14.17.3"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.3.tgz#6d327abaa4be34a74e421ed6409a0ae2f47f4c3d"
+ integrity sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==
+
+"@types/normalize-package-data@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
+ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
+
+"@types/normalize-path@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/normalize-path/-/normalize-path-3.0.0.tgz#bb5c46cab77b93350b4cf8d7ff1153f47189ae31"
+ integrity sha512-Nd8y/5t/7CRakPYiyPzr/IAfYusy1FkcZYFEAcoMZkwpJv2n4Wm+olW+e7xBdHEXhOnWdG9ddbar0gqZWS4x5Q==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/parsimmon@^1.10.1":
+ version "1.10.6"
+ resolved "https://registry.yarnpkg.com/@types/parsimmon/-/parsimmon-1.10.6.tgz#8fcf95990514d2a7624aa5f630c13bf2427f9cdd"
+ integrity sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA==
+
+"@types/prop-types@*":
+ version "15.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
+ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
+
+"@types/react@>=16":
+ version "17.0.11"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.11.tgz#67fcd0ddbf5a0b083a0f94e926c7d63f3b836451"
+ integrity sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
+"@types/responselike@*", "@types/responselike@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
+ integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
+ dependencies:
+ "@types/node" "*"
+
+"@types/scheduler@*":
+ version "0.16.1"
+ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
+ integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==
+
+"@types/source-list-map@*":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
+ integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==
+
+"@types/stack-utils@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
+ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+
+"@types/tapable@^0":
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-0.2.5.tgz#2443fc12da514c81346b1a665675559cee21fa75"
+ integrity sha512-dEoVvo/I9QFomyhY+4Q6Qk+I+dhG59TYceZgC6Q0mCifVPErx6Y83PNTKGDS5e9h9Eti6q0S2mm16BU6iQK+3w==
+
+"@types/tapable@^1":
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4"
+ integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==
+
+"@types/uglify-js@*":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124"
+ integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q==
+ dependencies:
+ source-map "^0.6.1"
+
+"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+ integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+
+"@types/webpack-sources@*":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10"
+ integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==
+ dependencies:
+ "@types/node" "*"
+ "@types/source-list-map" "*"
+ source-map "^0.7.3"
+
+"@types/webpack@^4":
+ version "4.41.29"
+ resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.29.tgz#2e66c1de8223c440366469415c50a47d97625773"
+ integrity sha512-6pLaORaVNZxiB3FSHbyBiWM7QdazAWda1zvAq4SbZObZqHSDbWLi62iFdblVea6SK9eyBIVp5yHhKt/yNQdR7Q==
+ dependencies:
+ "@types/node" "*"
+ "@types/tapable" "^1"
+ "@types/uglify-js" "*"
+ "@types/webpack-sources" "*"
+ anymatch "^3.0.0"
+ source-map "^0.6.0"
+
+"@types/yargs-parser@*":
+ version "20.2.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9"
+ integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==
+
+"@types/yargs@^13.0.0":
+ version "13.0.11"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1"
+ integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@types/yargs@^16.0.0":
+ version "16.0.3"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01"
+ integrity sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^4.15.0":
+ version "4.27.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.27.0.tgz#0b7fc974e8bc9b2b5eb98ed51427b0be529b4ad0"
+ integrity sha512-DsLqxeUfLVNp3AO7PC3JyaddmEHTtI9qTSAs+RB6ja27QvIM0TA8Cizn1qcS6vOu+WDLFJzkwkgweiyFhssDdQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "4.27.0"
+ "@typescript-eslint/scope-manager" "4.27.0"
+ debug "^4.3.1"
+ functional-red-black-tree "^1.0.1"
+ lodash "^4.17.21"
+ regexpp "^3.1.0"
+ semver "^7.3.5"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/eslint-plugin@^4.28.0":
+ version "4.28.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.0.tgz#1a66f03b264844387beb7dc85e1f1d403bd1803f"
+ integrity sha512-KcF6p3zWhf1f8xO84tuBailV5cN92vhS+VT7UJsPzGBm9VnQqfI9AsiMUFUCYHTYPg1uCCo+HyiDnpDuvkAMfQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "4.28.0"
+ "@typescript-eslint/scope-manager" "4.28.0"
+ debug "^4.3.1"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^3.1.0"
+ semver "^7.3.5"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/experimental-utils@4.27.0", "@typescript-eslint/experimental-utils@4.28.0", "@typescript-eslint/experimental-utils@^2.5.0", "@typescript-eslint/experimental-utils@^4.28.0":
+ version "4.28.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz#13167ed991320684bdc23588135ae62115b30ee0"
+ integrity sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ==
+ dependencies:
+ "@types/json-schema" "^7.0.7"
+ "@typescript-eslint/scope-manager" "4.28.0"
+ "@typescript-eslint/types" "4.28.0"
+ "@typescript-eslint/typescript-estree" "4.28.0"
+ eslint-scope "^5.1.1"
+ eslint-utils "^3.0.0"
+
+"@typescript-eslint/parser@^4.15.0":
+ version "4.27.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.27.0.tgz#85447e573364bce4c46c7f64abaa4985aadf5a94"
+ integrity sha512-XpbxL+M+gClmJcJ5kHnUpBGmlGdgNvy6cehgR6ufyxkEJMGP25tZKCaKyC0W/JVpuhU3VU1RBn7SYUPKSMqQvQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "4.27.0"
+ "@typescript-eslint/types" "4.27.0"
+ "@typescript-eslint/typescript-estree" "4.27.0"
+ debug "^4.3.1"
+
+"@typescript-eslint/parser@^4.28.0":
+ version "4.28.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.0.tgz#2404c16751a28616ef3abab77c8e51d680a12caa"
+ integrity sha512-7x4D22oPY8fDaOCvkuXtYYTQ6mTMmkivwEzS+7iml9F9VkHGbbZ3x4fHRwxAb5KeuSkLqfnYjs46tGx2Nour4A==
+ dependencies:
+ "@typescript-eslint/scope-manager" "4.28.0"
+ "@typescript-eslint/types" "4.28.0"
+ "@typescript-eslint/typescript-estree" "4.28.0"
+ debug "^4.3.1"
+
+"@typescript-eslint/scope-manager@4.27.0":
+ version "4.27.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.27.0.tgz#b0b1de2b35aaf7f532e89c8e81d0fa298cae327d"
+ integrity sha512-DY73jK6SEH6UDdzc6maF19AHQJBFVRf6fgAXHPXCGEmpqD4vYgPEzqpFz1lf/daSbOcMpPPj9tyXXDPW2XReAw==
+ dependencies:
+ "@typescript-eslint/types" "4.27.0"
+ "@typescript-eslint/visitor-keys" "4.27.0"
+
+"@typescript-eslint/scope-manager@4.28.0":
+ version "4.28.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz#6a3009d2ab64a30fc8a1e257a1a320067f36a0ce"
+ integrity sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg==
+ dependencies:
+ "@typescript-eslint/types" "4.28.0"
+ "@typescript-eslint/visitor-keys" "4.28.0"
+
+"@typescript-eslint/types@4.27.0":
+ version "4.27.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8"
+ integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA==
+
+"@typescript-eslint/types@4.28.0":
+ version "4.28.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0"
+ integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA==
+
+"@typescript-eslint/typescript-estree@4.27.0":
+ version "4.27.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.27.0.tgz#189a7b9f1d0717d5cccdcc17247692dedf7a09da"
+ integrity sha512-KH03GUsUj41sRLLEy2JHstnezgpS5VNhrJouRdmh6yNdQ+yl8w5LrSwBkExM+jWwCJa7Ct2c8yl8NdtNRyQO6g==
+ dependencies:
+ "@typescript-eslint/types" "4.27.0"
+ "@typescript-eslint/visitor-keys" "4.27.0"
+ debug "^4.3.1"
+ globby "^11.0.3"
+ is-glob "^4.0.1"
+ semver "^7.3.5"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/typescript-estree@4.28.0":
+ version "4.28.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf"
+ integrity sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ==
+ dependencies:
+ "@typescript-eslint/types" "4.28.0"
+ "@typescript-eslint/visitor-keys" "4.28.0"
+ debug "^4.3.1"
+ globby "^11.0.3"
+ is-glob "^4.0.1"
+ semver "^7.3.5"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/visitor-keys@4.27.0":
+ version "4.27.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81"
+ integrity sha512-es0GRYNZp0ieckZ938cEANfEhsfHrzuLrePukLKtY3/KPXcq1Xd555Mno9/GOgXhKzn0QfkDLVgqWO3dGY80bg==
+ dependencies:
+ "@typescript-eslint/types" "4.27.0"
+ eslint-visitor-keys "^2.0.0"
+
+"@typescript-eslint/visitor-keys@4.28.0":
+ version "4.28.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434"
+ integrity sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw==
+ dependencies:
+ "@typescript-eslint/types" "4.28.0"
+ eslint-visitor-keys "^2.0.0"
+
+"@webassemblyjs/ast@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f"
+ integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==
+ dependencies:
+ "@webassemblyjs/helper-numbers" "1.11.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.0"
+
+"@webassemblyjs/ast@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+ integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c"
+ integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+ integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
+"@webassemblyjs/helper-api-error@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4"
+ integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==
+
+"@webassemblyjs/helper-api-error@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+ integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
+"@webassemblyjs/helper-buffer@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642"
+ integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==
+
+"@webassemblyjs/helper-buffer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+ integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+ integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+ integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+ integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-numbers@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9"
+ integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==
+ dependencies:
+ "@webassemblyjs/floating-point-hex-parser" "1.11.0"
+ "@webassemblyjs/helper-api-error" "1.11.0"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1"
+ integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+ integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
+"@webassemblyjs/helper-wasm-section@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b"
+ integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.0"
+ "@webassemblyjs/helper-buffer" "1.11.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.0"
+ "@webassemblyjs/wasm-gen" "1.11.0"
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+ integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf"
+ integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+ integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b"
+ integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/leb128@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+ integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf"
+ integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==
+
+"@webassemblyjs/utf8@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+ integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
+"@webassemblyjs/wasm-edit@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78"
+ integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.0"
+ "@webassemblyjs/helper-buffer" "1.11.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.0"
+ "@webassemblyjs/helper-wasm-section" "1.11.0"
+ "@webassemblyjs/wasm-gen" "1.11.0"
+ "@webassemblyjs/wasm-opt" "1.11.0"
+ "@webassemblyjs/wasm-parser" "1.11.0"
+ "@webassemblyjs/wast-printer" "1.11.0"
+
+"@webassemblyjs/wasm-edit@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+ integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/helper-wasm-section" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-opt" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe"
+ integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.0"
+ "@webassemblyjs/ieee754" "1.11.0"
+ "@webassemblyjs/leb128" "1.11.0"
+ "@webassemblyjs/utf8" "1.11.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+ integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978"
+ integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.0"
+ "@webassemblyjs/helper-buffer" "1.11.0"
+ "@webassemblyjs/wasm-gen" "1.11.0"
+ "@webassemblyjs/wasm-parser" "1.11.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+ integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754"
+ integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.0"
+ "@webassemblyjs/helper-api-error" "1.11.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.0"
+ "@webassemblyjs/ieee754" "1.11.0"
+ "@webassemblyjs/leb128" "1.11.0"
+ "@webassemblyjs/utf8" "1.11.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+ integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+ integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-code-frame" "1.9.0"
+ "@webassemblyjs/helper-fsm" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e"
+ integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.0"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+ integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+"@zkochan/cmd-shim@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e"
+ integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg==
+ dependencies:
+ is-windows "^1.0.0"
+ mkdirp-promise "^5.0.1"
+ mz "^2.5.0"
+
+JSONStream@^1.0.4, JSONStream@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
+ integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
+ dependencies:
+ jsonparse "^1.2.0"
+ through ">=2.2.7 <3"
+
+abab@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
+ integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+accepts@^1.3.5:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn-globals@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
+ integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==
+ dependencies:
+ acorn "^6.0.1"
+ acorn-walk "^6.0.1"
+
+acorn-jsx@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
+ integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
+
+acorn-walk@^6.0.1:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
+
+acorn@^5.5.3:
+ version "5.7.4"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
+ integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
+
+acorn@^6.0.1, acorn@^6.4.1:
+ version "6.4.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+ integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
+
+acorn@^7.4.0:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+acorn@^8.2.1:
+ version "8.4.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.0.tgz#af53266e698d7cffa416714b503066a82221be60"
+ integrity sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==
+
+add-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"
+ integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=
+
+agent-base@4, agent-base@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
+ integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
+ dependencies:
+ es6-promisify "^5.0.0"
+
+agent-base@5:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c"
+ integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+agent-base@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
+ integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
+ dependencies:
+ es6-promisify "^5.0.0"
+
+agentkeepalive@^3.4.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67"
+ integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==
+ dependencies:
+ humanize-ms "^1.2.1"
+
+agentkeepalive@^4.1.0:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b"
+ integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==
+ dependencies:
+ debug "^4.1.0"
+ depd "^1.1.2"
+ humanize-ms "^1.2.1"
+
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+ integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ajv@^8.0.1:
+ version "8.6.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720"
+ integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
+all-contributors-cli@^6.1.1:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/all-contributors-cli/-/all-contributors-cli-6.20.0.tgz#9bc98dda38cb29cfe8afc8a78c004e14af25d2f6"
+ integrity sha512-trEQlL1s1u8FSWSwY2w9uL4GCG7Fo9HIW5rm5LtlE0SQHSolfXQBzJib07Qes5j52/t72wjuE6sEKkuRrwiuuQ==
+ dependencies:
+ "@babel/runtime" "^7.7.6"
+ async "^3.0.1"
+ chalk "^4.0.0"
+ didyoumean "^1.2.1"
+ inquirer "^7.0.4"
+ json-fixer "^1.5.1"
+ lodash "^4.11.2"
+ node-fetch "^2.6.0"
+ pify "^5.0.0"
+ yargs "^15.0.1"
+
+ansi-align@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
+ integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=
+ dependencies:
+ string-width "^2.0.0"
+
+ansi-align@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
+ integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
+ dependencies:
+ string-width "^3.0.0"
+
+ansi-colors@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-escapes@^4.2.1:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.0.0, ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+any-promise@^1.0.0, any-promise@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+ integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+aproba@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+ integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+arg@^4.1.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+ integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+argv@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab"
+ integrity sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-differ@^2.0.3:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1"
+ integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-ify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
+ integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
+
+array-includes@^3.1.2, array-includes@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
+ integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.2"
+ get-intrinsic "^1.1.1"
+ is-string "^1.0.5"
+
+array-union@^1.0.1, array-union@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123"
+ integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+
+array.prototype.flatmap@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9"
+ integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ function-bind "^1.1.1"
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asap@^2.0.0:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
+
+asn1.js@^5.2.0:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
+ integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ safer-buffer "^2.1.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-types-flow@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async-retry@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.1.tgz#139f31f8ddce50c0870b0ba558a6079684aaed55"
+ integrity sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==
+ dependencies:
+ retry "0.12.0"
+
+async@^3.0.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
+ integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob-lite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696"
+ integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+autoprefixer@^9.8.6:
+ version "9.8.6"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f"
+ integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==
+ dependencies:
+ browserslist "^4.12.0"
+ caniuse-lite "^1.0.30001109"
+ colorette "^1.2.1"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^7.0.32"
+ postcss-value-parser "^4.1.0"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
+ integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
+
+babel-code-frame@^6.22.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+babel-eslint@^10.0.3:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
+ integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.7.0"
+ "@babel/traverse" "^7.7.0"
+ "@babel/types" "^7.7.0"
+ eslint-visitor-keys "^1.0.0"
+ resolve "^1.12.0"
+
+babel-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54"
+ integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==
+ dependencies:
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/babel__core" "^7.1.0"
+ babel-plugin-istanbul "^5.1.0"
+ babel-preset-jest "^24.9.0"
+ chalk "^2.4.2"
+ slash "^2.0.0"
+
+babel-jest@^27.0.5:
+ version "27.0.5"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.5.tgz#cd34c033ada05d1362211e5152391fd7a88080c8"
+ integrity sha512-bTMAbpCX7ldtfbca2llYLeSFsDM257aspyAOpsdrdSrBqoLkWCy4HPYTXtXWaSLgFPjrJGACL65rzzr4RFGadw==
+ dependencies:
+ "@jest/transform" "^27.0.5"
+ "@jest/types" "^27.0.2"
+ "@types/babel__core" "^7.1.14"
+ babel-plugin-istanbul "^6.0.0"
+ babel-preset-jest "^27.0.1"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ slash "^3.0.0"
+
+babel-loader@^8.0.5:
+ version "8.2.2"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81"
+ integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==
+ dependencies:
+ find-cache-dir "^3.3.1"
+ loader-utils "^1.4.0"
+ make-dir "^3.1.0"
+ schema-utils "^2.6.5"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+ integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-file-loader@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-file-loader/-/babel-plugin-file-loader-1.1.1.tgz#22c6fdd5829ac4653d92cf5bd4d8bc87521523f2"
+ integrity sha512-ORBZGJHxXv2Pd+lFsVqu4gwraBTTo32ue17MzdbWduT65k3rws9AlVWWmgDP59nFLJCfVkEcLLIbuR2C4lKVjw==
+ dependencies:
+ big.js "^5.0.3"
+ fs-extra "^4.0.2"
+ mime "^2.0.3"
+
+babel-plugin-istanbul@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
+ integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ find-up "^3.0.0"
+ istanbul-lib-instrument "^3.3.0"
+ test-exclude "^5.2.3"
+
+babel-plugin-istanbul@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765"
+ integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-instrument "^4.0.0"
+ test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756"
+ integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==
+ dependencies:
+ "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-jest-hoist@^27.0.1:
+ version "27.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz#a6d10e484c93abff0f4e95f437dad26e5736ea11"
+ integrity sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==
+ dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
+ "@types/babel__core" "^7.0.0"
+ "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-module-resolver@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7"
+ integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==
+ dependencies:
+ find-babel-config "^1.1.0"
+ glob "^7.1.2"
+ pkg-up "^2.0.0"
+ reselect "^3.0.1"
+ resolve "^1.4.0"
+
+babel-plugin-polyfill-corejs2@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327"
+ integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==
+ dependencies:
+ "@babel/compat-data" "^7.13.11"
+ "@babel/helper-define-polyfill-provider" "^0.2.2"
+ semver "^6.1.1"
+
+babel-plugin-polyfill-corejs3@^0.2.2:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b"
+ integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.2.2"
+ core-js-compat "^3.14.0"
+
+babel-plugin-polyfill-regenerator@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077"
+ integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.2.2"
+
+babel-plugin-transform-react-remove-prop-types@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+ integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+
+babel-polyfill@6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
+ integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=
+ dependencies:
+ babel-runtime "^6.26.0"
+ core-js "^2.5.0"
+ regenerator-runtime "^0.10.5"
+
+babel-preset-current-node-syntax@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+ integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.8.3"
+ "@babel/plugin-syntax-import-meta" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-top-level-await" "^7.8.3"
+
+babel-preset-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc"
+ integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==
+ dependencies:
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ babel-plugin-jest-hoist "^24.9.0"
+
+babel-preset-jest@^27.0.1:
+ version "27.0.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz#7a50c75d16647c23a2cf5158d5bb9eb206b10e20"
+ integrity sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==
+ dependencies:
+ babel-plugin-jest-hoist "^27.0.1"
+ babel-preset-current-node-syntax "^1.0.0"
+
+babel-runtime@^6.23.0, babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+bail@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
+ integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+balanced-match@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
+ integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
+
+base64-js@^1.0.2, base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+before-after-hook@^2.0.0, before-after-hook@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e"
+ integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==
+
+big.js@^5.0.3, big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bl@^4.0.3, bl@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+ integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+bn.js@^5.0.0, bn.js@^5.1.1:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
+ integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
+
+boxen@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
+ integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==
+ dependencies:
+ ansi-align "^2.0.0"
+ camelcase "^4.0.0"
+ chalk "^2.0.1"
+ cli-boxes "^1.0.0"
+ string-width "^2.0.0"
+ term-size "^1.2.0"
+ widest-line "^2.0.0"
+
+boxen@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64"
+ integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^5.3.1"
+ chalk "^3.0.0"
+ cli-boxes "^2.2.0"
+ string-width "^4.1.0"
+ term-size "^2.1.0"
+ type-fest "^0.8.1"
+ widest-line "^3.1.0"
+
+boxen@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b"
+ integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^6.2.0"
+ chalk "^4.1.0"
+ cli-boxes "^2.2.1"
+ string-width "^4.2.0"
+ type-fest "^0.20.2"
+ widest-line "^3.1.0"
+ wrap-ansi "^7.0.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.1, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1, brorand@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-process-hrtime@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
+browser-resolve@^1.11.3:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+ dependencies:
+ resolve "1.1.7"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
+ integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
+ dependencies:
+ bn.js "^5.0.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
+ integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
+ dependencies:
+ bn.js "^5.1.1"
+ browserify-rsa "^4.0.1"
+ create-hash "^1.2.0"
+ create-hmac "^1.1.7"
+ elliptic "^6.5.3"
+ inherits "^2.0.4"
+ parse-asn1 "^5.1.5"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.6:
+ version "4.16.6"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"
+ integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==
+ dependencies:
+ caniuse-lite "^1.0.30001219"
+ colorette "^1.2.2"
+ electron-to-chromium "^1.3.723"
+ escalade "^3.1.1"
+ node-releases "^1.1.71"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+btoa-lite@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
+ integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+buffer@^5.5.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+builtin-modules@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+builtins@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
+ integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og=
+
+byline@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1"
+ integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=
+
+byte-size@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191"
+ integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==
+
+bytes@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3:
+ version "12.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+ integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cacache@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-14.0.0.tgz#97c10fc87c4c7ee41d45e32631c26761c2687caa"
+ integrity sha512-+Nr/BnA/tjAUXza9gH8F+FSP+1HvWqCKt4c95dQr4EDVJVafbzmPZpLKCkLYexs6vSd2B/1TOXrAoNnqVPfvRA==
+ dependencies:
+ chownr "^1.1.2"
+ figgy-pudding "^3.5.1"
+ fs-minipass "^2.0.0"
+ glob "^7.1.4"
+ graceful-fs "^4.2.2"
+ infer-owner "^1.0.4"
+ lru-cache "^5.1.1"
+ minipass "^3.0.0"
+ minipass-collect "^1.0.2"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.2"
+ mkdirp "^1.0.3"
+ move-concurrently "^1.0.1"
+ p-map "^3.0.0"
+ promise-inflight "^1.0.1"
+ rimraf "^2.7.1"
+ ssri "^7.0.0"
+ tar "^6.0.0"
+ unique-filename "^1.1.1"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cache-content-type@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c"
+ integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==
+ dependencies:
+ mime-types "^2.1.18"
+ ylru "^1.2.0"
+
+cacheable-lookup@^5.0.3:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
+ integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
+
+cacheable-request@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
+ integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^3.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^4.1.0"
+ responselike "^1.0.2"
+
+cacheable-request@^7.0.1:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
+ integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^4.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^6.0.1"
+ responselike "^2.0.0"
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
+call-me-maybe@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+ integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase-keys@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
+ integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
+ dependencies:
+ camelcase "^4.1.0"
+ map-obj "^2.0.0"
+ quick-lru "^1.0.0"
+
+camelcase-keys@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
+ integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
+ dependencies:
+ camelcase "^5.3.1"
+ map-obj "^4.0.0"
+ quick-lru "^4.0.1"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^4.0.0, camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
+ integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
+
+caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219:
+ version "1.0.30001237"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz#4b7783661515b8e7151fc6376cfd97f0e427b9e5"
+ integrity sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==
+
+capture-exit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ dependencies:
+ rsvp "^4.8.4"
+
+capture-stack-trace@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
+ integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chalk@4.1.1, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
+ integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+changelog-filename-regex@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/changelog-filename-regex/-/changelog-filename-regex-1.1.2.tgz#19e98e38248cff0c1cf3ae3bf51bfb22c48592d6"
+ integrity sha512-kpOfKlZ9x2UpeC4at6FAXHLKfi/JEUqUqkPCb1JUCa5FnNbJIzOHRM9RfeQ1QDcpj+Gxuc/UoHqASgmEeFDejQ==
+
+character-entities-legacy@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
+ integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
+
+character-entities@^1.0.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
+ integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
+
+character-reference-invalid@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
+ integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+charm@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.2.tgz#8add367153a6d9a581331052c4090991da995e35"
+ integrity sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=
+ dependencies:
+ inherits "^2.0.1"
+
+chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chokidar@^3.4.0, chokidar@^3.4.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
+ integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+chownr@^1.1.1, chownr@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+ integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+ci-info@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
+ integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+ci-info@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6"
+ integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-boxes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+ integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
+
+cli-boxes@^2.2.0, cli-boxes@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
+ integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
+
+cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-highlight@^2.1.4:
+ version "2.1.11"
+ resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf"
+ integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==
+ dependencies:
+ chalk "^4.0.0"
+ highlight.js "^10.7.1"
+ mz "^2.4.0"
+ parse5 "^5.1.1"
+ parse5-htmlparser2-tree-adapter "^6.0.0"
+ yargs "^16.0.0"
+
+cli-spinners@^2.4.0, cli-spinners@^2.5.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939"
+ integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==
+
+cli-width@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+ integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
+
+cli-width@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
+ integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+clone-deep@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+ integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+ dependencies:
+ is-plain-object "^2.0.4"
+ kind-of "^6.0.2"
+ shallow-clone "^3.0.0"
+
+clone-regexp@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f"
+ integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==
+ dependencies:
+ is-regexp "^2.0.0"
+
+clone-response@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
+ integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
+ dependencies:
+ mimic-response "^1.0.0"
+
+clone@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+codecov@^3.2.0:
+ version "3.8.2"
+ resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.8.2.tgz#ab24f18783998c39e809ea210af899f8dbcc790e"
+ integrity sha512-6w/kt/xvmPsWMfDFPE/T054txA9RTgcJEw36PNa6MYX+YV29jCHCRFXwbQ3QZBTOgnex1J2WP8bo2AT8TWWz9g==
+ dependencies:
+ argv "0.0.2"
+ ignore-walk "3.0.3"
+ js-yaml "3.14.1"
+ teeny-request "7.0.1"
+ urlgrey "0.4.4"
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colorette@^1.2.1, colorette@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
+ integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
+
+columnify@^1.5.4:
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
+ integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=
+ dependencies:
+ strip-ansi "^3.0.0"
+ wcwidth "^1.0.0"
+
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+command-exists@^1.2.8:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
+ integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
+
+commander@^2.12.1, commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+commitlint@^8.3.5:
+ version "8.3.5"
+ resolved "https://registry.yarnpkg.com/commitlint/-/commitlint-8.3.5.tgz#a8fd4aeadf1bac76976bac14127cbfbd666e0aa6"
+ integrity sha512-vsJr4azgWgwQcBtQOJEMUH5m7yzhD6p09dss7XNs4a88ksBtWAHKXoCKaBCt9ISS1yWcxFRUwnNy7zZhjmnXdg==
+ dependencies:
+ "@commitlint/cli" "^8.3.5"
+ read-pkg "5.2.0"
+ resolve-pkg "2.0.0"
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+compare-func@^1.3.1:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.4.tgz#6b07c4c5e8341119baf44578085bda0f4a823516"
+ integrity sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==
+ dependencies:
+ array-ify "^1.0.0"
+ dot-prop "^3.0.0"
+
+compare-func@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
+ integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
+ dependencies:
+ array-ify "^1.0.0"
+ dot-prop "^5.1.0"
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+compressible@^2.0.0:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0, concat-stream@^1.5.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+concat-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
+ integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.0.2"
+ typedarray "^0.0.6"
+
+config-chain@^1.1.11:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
+ integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
+configstore@^3.0.0:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f"
+ integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==
+ dependencies:
+ dot-prop "^4.2.1"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+configstore@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
+ integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
+ dependencies:
+ dot-prop "^5.2.0"
+ graceful-fs "^4.1.2"
+ make-dir "^3.0.0"
+ unique-string "^2.0.0"
+ write-file-atomic "^3.0.0"
+ xdg-basedir "^4.0.0"
+
+connect-history-api-fallback@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+ integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+content-disposition@~0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
+
+content-type@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+conventional-changelog-angular@^1.3.3:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f"
+ integrity sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==
+ dependencies:
+ compare-func "^1.3.1"
+ q "^1.5.1"
+
+conventional-changelog-angular@^5.0.12, conventional-changelog-angular@^5.0.3:
+ version "5.0.12"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9"
+ integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==
+ dependencies:
+ compare-func "^2.0.0"
+ q "^1.5.1"
+
+conventional-changelog-atom@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de"
+ integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-codemirror@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc"
+ integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-conventionalcommits@4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz#d6cb2e2c5d7bfca044a08b9dba84b4082e1a1bd9"
+ integrity sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q==
+ dependencies:
+ compare-func "^1.3.1"
+ lodash "^4.2.1"
+ q "^1.5.1"
+
+conventional-changelog-conventionalcommits@^4.5.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.0.tgz#7fc17211dbca160acf24687bd2fdd5fd767750eb"
+ integrity sha512-sj9tj3z5cnHaSJCYObA9nISf7eq/YjscLPoq6nmew4SiOjxqL2KRpK20fjnjVbpNDjJ2HR3MoVcWKXwbVvzS0A==
+ dependencies:
+ compare-func "^2.0.0"
+ lodash "^4.17.15"
+ q "^1.5.1"
+
+conventional-changelog-core@^3.1.6:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb"
+ integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==
+ dependencies:
+ conventional-changelog-writer "^4.0.6"
+ conventional-commits-parser "^3.0.3"
+ dateformat "^3.0.0"
+ get-pkg-repo "^1.0.0"
+ git-raw-commits "2.0.0"
+ git-remote-origin-url "^2.0.0"
+ git-semver-tags "^2.0.3"
+ lodash "^4.2.1"
+ normalize-package-data "^2.3.5"
+ q "^1.5.1"
+ read-pkg "^3.0.0"
+ read-pkg-up "^3.0.0"
+ through2 "^3.0.0"
+
+conventional-changelog-core@^4.2.1:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.2.tgz#f0897df6d53b5d63dec36b9442bd45354f8b3ce5"
+ integrity sha512-7pDpRUiobQDNkwHyJG7k9f6maPo9tfPzkSWbRq97GGiZqisElhnvUZSvyQH20ogfOjntB5aadvv6NNcKL1sReg==
+ dependencies:
+ add-stream "^1.0.0"
+ conventional-changelog-writer "^4.0.18"
+ conventional-commits-parser "^3.2.0"
+ dateformat "^3.0.0"
+ get-pkg-repo "^1.0.0"
+ git-raw-commits "^2.0.8"
+ git-remote-origin-url "^2.0.0"
+ git-semver-tags "^4.1.1"
+ lodash "^4.17.15"
+ normalize-package-data "^3.0.0"
+ q "^1.5.1"
+ read-pkg "^3.0.0"
+ read-pkg-up "^3.0.0"
+ shelljs "^0.8.3"
+ through2 "^4.0.0"
+
+conventional-changelog-ember@^2.0.9:
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962"
+ integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-eslint@^3.0.9:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb"
+ integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-express@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8"
+ integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-jquery@^3.0.11:
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf"
+ integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-jshint@^2.0.9:
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff"
+ integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==
+ dependencies:
+ compare-func "^2.0.0"
+ q "^1.5.1"
+
+conventional-changelog-preset-loader@^2.1.1, conventional-changelog-preset-loader@^2.3.4:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c"
+ integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==
+
+conventional-changelog-writer@^4.0.18, conventional-changelog-writer@^4.0.6:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f"
+ integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==
+ dependencies:
+ compare-func "^2.0.0"
+ conventional-commits-filter "^2.0.7"
+ dateformat "^3.0.0"
+ handlebars "^4.7.6"
+ json-stringify-safe "^5.0.1"
+ lodash "^4.17.15"
+ meow "^8.0.0"
+ semver "^6.0.0"
+ split "^1.0.0"
+ through2 "^4.0.0"
+
+conventional-changelog@^3.1.8:
+ version "3.1.24"
+ resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.24.tgz#ebd180b0fd1b2e1f0095c4b04fd088698348a464"
+ integrity sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==
+ dependencies:
+ conventional-changelog-angular "^5.0.12"
+ conventional-changelog-atom "^2.0.8"
+ conventional-changelog-codemirror "^2.0.8"
+ conventional-changelog-conventionalcommits "^4.5.0"
+ conventional-changelog-core "^4.2.1"
+ conventional-changelog-ember "^2.0.9"
+ conventional-changelog-eslint "^3.0.9"
+ conventional-changelog-express "^2.0.6"
+ conventional-changelog-jquery "^3.0.11"
+ conventional-changelog-jshint "^2.0.9"
+ conventional-changelog-preset-loader "^2.3.4"
+
+conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3"
+ integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==
+ dependencies:
+ lodash.ismatch "^4.4.0"
+ modify-values "^1.0.0"
+
+conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.3, conventional-commits-parser@^3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2"
+ integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==
+ dependencies:
+ JSONStream "^1.0.4"
+ is-text-path "^1.0.1"
+ lodash "^4.17.15"
+ meow "^8.0.0"
+ split2 "^3.0.0"
+ through2 "^4.0.0"
+ trim-off-newlines "^1.0.0"
+
+conventional-recommended-bump@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba"
+ integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ==
+ dependencies:
+ concat-stream "^2.0.0"
+ conventional-changelog-preset-loader "^2.1.1"
+ conventional-commits-filter "^2.0.2"
+ conventional-commits-parser "^3.0.3"
+ git-raw-commits "2.0.0"
+ git-semver-tags "^2.0.3"
+ meow "^4.0.0"
+ q "^1.5.1"
+
+conventional-recommended-bump@^6.0.5:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55"
+ integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==
+ dependencies:
+ concat-stream "^2.0.0"
+ conventional-changelog-preset-loader "^2.3.4"
+ conventional-commits-filter "^2.0.7"
+ conventional-commits-parser "^3.2.0"
+ git-raw-commits "^2.0.8"
+ git-semver-tags "^4.1.1"
+ meow "^8.0.0"
+ q "^1.5.1"
+
+convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+cookies@~0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90"
+ integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==
+ dependencies:
+ depd "~2.0.0"
+ keygrip "~1.1.0"
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js-compat@^3.14.0:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5"
+ integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A==
+ dependencies:
+ browserslist "^4.16.6"
+ semver "7.0.0"
+
+core-js-pure@^3.14.0:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.14.0.tgz#72bcfacba74a65ffce04bf94ae91d966e80ee553"
+ integrity sha512-YVh+LN2FgNU0odThzm61BsdkwrbrchumFq3oztnE9vTKC4KS2fvnPmcx8t6jnqAyOTCTF4ZSiuK8Qhh7SNcL4g==
+
+core-js@^2.4.0, core-js@^2.5.0:
+ version "2.6.12"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
+ integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@7.0.0, cosmiconfig@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
+ integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
+cosmiconfig@^5.0.7, cosmiconfig@^5.1.0, cosmiconfig@^5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.1"
+ parse-json "^4.0.0"
+
+create-ecdh@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
+ integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.5.3"
+
+create-error-class@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-env@^5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d"
+ integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==
+ dependencies:
+ cross-spawn "^6.0.5"
+
+cross-env@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
+ integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
+ dependencies:
+ cross-spawn "^7.0.1"
+
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+ integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
+
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+
+css-hot-loader@^1.4.3:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/css-hot-loader/-/css-hot-loader-1.4.4.tgz#ae784932cd8b7d092f7f15702af08b3ec9436052"
+ integrity sha512-J/qXHz+r7FOT92qMIJfxUk0LC9fecQNZVr0MswQ4FOpKLyOCBjofVMfc6R268bh/5ktkTShrweMr0wWqerC92g==
+ dependencies:
+ loader-utils "^1.1.0"
+ lodash "^4.17.5"
+ normalize-url "^1.9.1"
+
+css-loader@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea"
+ integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==
+ dependencies:
+ camelcase "^5.2.0"
+ icss-utils "^4.1.0"
+ loader-utils "^1.2.3"
+ normalize-path "^3.0.0"
+ postcss "^7.0.14"
+ postcss-modules-extract-imports "^2.0.0"
+ postcss-modules-local-by-default "^2.0.6"
+ postcss-modules-scope "^2.1.0"
+ postcss-modules-values "^2.0.0"
+ postcss-value-parser "^3.3.0"
+ schema-utils "^1.0.0"
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1"
+ integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==
+ dependencies:
+ cssom "0.3.x"
+
+csstype@^3.0.2:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340"
+ integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+dargs@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
+ integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+data-urls@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
+ integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
+ dependencies:
+ abab "^2.0.0"
+ whatwg-mimetype "^2.2.0"
+ whatwg-url "^7.0.0"
+
+dateformat@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
+ integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
+
+debug@*, debug@4, debug@4.3.1, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ dependencies:
+ ms "2.1.2"
+
+debug@3.1.0, debug@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+debug@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0, debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+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=
+
+decamelize-keys@^1.0.0, decamelize-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+ integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+ dependencies:
+ decamelize "^1.1.0"
+ map-obj "^1.0.0"
+
+decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decamelize@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-3.2.0.tgz#84b8e8f4f8c579f938e35e2cc7024907e0090851"
+ integrity sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==
+ dependencies:
+ xregexp "^4.2.4"
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+decompress-response@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+ integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
+ dependencies:
+ mimic-response "^1.0.0"
+
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+ dependencies:
+ mimic-response "^3.1.0"
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-equal@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+ integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@^0.1.3, deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+defaults@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
+ dependencies:
+ clone "^1.0.2"
+
+defer-to-connect@^1.0.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
+ integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
+
+defer-to-connect@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+ integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
+define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+del-cli@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/del-cli/-/del-cli-1.1.0.tgz#27557d69a0b7df99dcbaa1e34a09e6ac6591d2c4"
+ integrity sha1-J1V9aaC335ncuqHjSgnmrGWR0sQ=
+ dependencies:
+ del "^3.0.0"
+ meow "^3.6.0"
+ update-notifier "^2.1.0"
+
+del@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+ dependencies:
+ globby "^6.1.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ p-map "^1.1.1"
+ pify "^3.0.0"
+ rimraf "^2.2.8"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@^1.1.2, depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+depd@^2.0.0, depd@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+deprecated-obj@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/deprecated-obj/-/deprecated-obj-2.0.0.tgz#e6ba93a3989f6ed18d685e7d99fb8d469b4beffc"
+ integrity sha512-CkdywZC2rJ8RGh+y3MM1fw1EJ4oO/oNExGbRFv0AQoMS+faTd3nO7slYjkj/6t8OnIMUE+wxh6G97YHhK1ytrw==
+ dependencies:
+ flat "^5.0.2"
+ lodash "^4.17.20"
+
+deprecation@^2.0.0, deprecation@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
+ integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
+
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+detect-indent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
+ integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50=
+
+detect-newline@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
+ integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+
+detect-repo-changelog@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/detect-repo-changelog/-/detect-repo-changelog-1.0.1.tgz#c2108cbbf0964da7bc074645b6ad1d3b80a6bd6d"
+ integrity sha1-whCMu/CWTae8B0ZFtq0dO4CmvW0=
+ dependencies:
+ changelog-filename-regex "^1.1.0"
+ is-regular-file "^1.0.1"
+ lodash.find "^4.6.0"
+ pify "^2.3.0"
+
+dezalgo@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456"
+ integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=
+ dependencies:
+ asap "^2.0.0"
+ wrappy "1"
+
+didyoumean@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff"
+ integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=
+
+diff-sequences@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
+ integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==
+
+diff@^3.2.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+ integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4"
+ integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==
+ dependencies:
+ path-type "^3.0.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-serializer@0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1, domelementtype@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
+ integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
+
+domexception@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+ integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
+ dependencies:
+ webidl-conversions "^4.0.2"
+
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+ dependencies:
+ domelementtype "1"
+
+domutils@^1.5.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dot-prop@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
+ integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc=
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^4.2.0, dot-prop@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4"
+ integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^5.1.0, dot-prop@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
+ integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
+ dependencies:
+ is-obj "^2.0.0"
+
+dts-critic@latest:
+ version "3.3.8"
+ resolved "https://registry.yarnpkg.com/dts-critic/-/dts-critic-3.3.8.tgz#7109f69559b1c2ef400bf3a8a5d5a23fc914a7b7"
+ integrity sha512-7kBza3f+RV/3hVCQ9yIskkrC+49kzDDM7qogbBFgLQCiGOLmUhpjE9FSw2iOWLVyeLagRNj7SmxAhD2SizJ49w==
+ dependencies:
+ "@definitelytyped/header-parser" latest
+ command-exists "^1.2.8"
+ rimraf "^3.0.2"
+ semver "^6.2.0"
+ tmp "^0.2.1"
+ yargs "^15.3.1"
+
+dtslint@^4.0.4:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/dtslint/-/dtslint-4.1.0.tgz#2929fd9c279e6fa43cf59205285f2e0b9ebbe926"
+ integrity sha512-4ftzxDgVWYfdsWr60PKL5i6hIwkszmfpNS7jRenEof37iIxOtkPajU2kcl1PksksLeP/76kJTlsUfVKMeMvA7g==
+ dependencies:
+ "@definitelytyped/header-parser" latest
+ "@definitelytyped/typescript-versions" latest
+ "@definitelytyped/utils" latest
+ dts-critic latest
+ fs-extra "^6.0.1"
+ json-stable-stringify "^1.0.1"
+ strip-json-comments "^2.0.1"
+ tslint "5.14.0"
+ tsutils "^2.29.0"
+ yargs "^15.1.0"
+
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+
+duplexer@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+ integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-to-chromium@^1.3.723:
+ version "1.3.752"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09"
+ integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==
+
+elliptic@^6.5.3:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
+ integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
+ dependencies:
+ bn.js "^4.11.9"
+ brorand "^1.1.0"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.1"
+ inherits "^2.0.4"
+ minimalistic-assert "^1.0.1"
+ minimalistic-crypto-utils "^1.0.1"
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+encodeurl@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+encoding@^0.1.11, encoding@^0.1.12:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+ integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+ dependencies:
+ iconv-lite "^0.6.2"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^4.1.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec"
+ integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
+enhanced-resolve@^5.3.1, enhanced-resolve@^5.8.0:
+ version "5.8.2"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b"
+ integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==
+ dependencies:
+ graceful-fs "^4.2.4"
+ tapable "^2.2.0"
+
+enquirer@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
+ integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ dependencies:
+ ansi-colors "^4.1.1"
+
+entities@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+entities@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+ integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+env-paths@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+ integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+envinfo@^7.3.1:
+ version "7.8.1"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
+ integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
+
+err-code@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960"
+ integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
+ integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2:
+ version "1.18.3"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0"
+ integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==
+ dependencies:
+ call-bind "^1.0.2"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ get-intrinsic "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.2"
+ is-callable "^1.2.3"
+ is-negative-zero "^2.0.1"
+ is-regex "^1.1.3"
+ is-string "^1.0.6"
+ object-inspect "^1.10.3"
+ object-keys "^1.1.1"
+ object.assign "^4.1.2"
+ string.prototype.trimend "^1.0.4"
+ string.prototype.trimstart "^1.0.4"
+ unbox-primitive "^1.0.1"
+
+es-module-lexer@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e"
+ integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es6-promise@^4.0.3:
+ version "4.2.8"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+ integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
+
+es6-promisify@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
+ integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
+ dependencies:
+ es6-promise "^4.0.3"
+
+esbuild@^0.12.5:
+ version "0.12.9"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.9.tgz#bed4e7087c286cd81d975631f77d47feb1660070"
+ integrity sha512-MWRhAbMOJ9RJygCrt778rz/qNYgA4ZVj6aXnNPxFjs7PmIpb0fuB9Gmg5uWrr6n++XKwwm/RmSz6RR5JL2Ocsw==
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-goat@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
+ integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
+
+escape-html@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escodegen@^1.9.1:
+ version "1.14.3"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+ integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+eslint-config-prettier@^6.10.1:
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9"
+ integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==
+ dependencies:
+ get-stdin "^6.0.0"
+
+eslint-import-resolver-node@^0.3.4:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
+ integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.13.1"
+
+eslint-module-utils@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233"
+ integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==
+ dependencies:
+ debug "^3.2.7"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-flowtype@^4.5.2:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.7.0.tgz#903a6ea3eb5cbf4c7ba7fa73cc43fc39ab7e4a70"
+ integrity sha512-M+hxhSCk5QBEValO5/UqrS4UunT+MgplIJK5wA1sCtXjzBcZkpTGRwxmLHhGpbHcrmQecgt6ZL/KDdXWqGB7VA==
+ dependencies:
+ lodash "^4.17.15"
+
+eslint-plugin-import@^2.19.1:
+ version "2.23.4"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97"
+ integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==
+ dependencies:
+ array-includes "^3.1.3"
+ array.prototype.flat "^1.2.4"
+ debug "^2.6.9"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.4"
+ eslint-module-utils "^2.6.1"
+ find-up "^2.0.0"
+ has "^1.0.3"
+ is-core-module "^2.4.0"
+ minimatch "^3.0.4"
+ object.values "^1.1.3"
+ pkg-up "^2.0.0"
+ read-pkg-up "^3.0.0"
+ resolve "^1.20.0"
+ tsconfig-paths "^3.9.0"
+
+eslint-plugin-jest@^23.1.1:
+ version "23.20.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.20.0.tgz#e1d69c75f639e99d836642453c4e75ed22da4099"
+ integrity sha512-+6BGQt85OREevBDWCvhqj1yYA4+BFK4XnRZSGJionuEYmcglMZYLNNBBemwzbqUAckURaHdJSBcjHPyrtypZOw==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "^2.5.0"
+
+eslint-plugin-prettier@^3.1.3, eslint-plugin-prettier@^3.1.4:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7"
+ integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==
+ dependencies:
+ prettier-linter-helpers "^1.0.0"
+
+eslint-plugin-promise@^4.2.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45"
+ integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==
+
+eslint-plugin-react-hooks@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556"
+ integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==
+
+eslint-plugin-react-native-a11y@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-a11y/-/eslint-plugin-react-native-a11y-2.0.4.tgz#34efcfb2539dbfb8648c09b8cf115b9c35c21c42"
+ integrity sha512-pTmvqNilRtgfeHZuCu0d5KzRUPQGMsCHSDHKw144IhlUEvX3ILmM74dELjOIqbokIhtg4tguHpHGupoAQphGxw==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+ ast-types-flow "^0.0.7"
+ jsx-ast-utils "^3.2.0"
+
+eslint-plugin-react-native-globals@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2"
+ integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==
+
+eslint-plugin-react-native@^3.8.1:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.11.0.tgz#c73b0886abb397867e5e6689d3a6a418682e6bac"
+ integrity sha512-7F3OTwrtQPfPFd+VygqKA2VZ0f2fz0M4gJmry/TRE18JBb94/OtMxwbL7Oqwu7FGyrdeIOWnXQbBAveMcSTZIA==
+ dependencies:
+ "@babel/traverse" "^7.7.4"
+ eslint-plugin-react-native-globals "^0.1.1"
+
+eslint-plugin-react@^7.17.0:
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4"
+ integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==
+ dependencies:
+ array-includes "^3.1.3"
+ array.prototype.flatmap "^1.2.4"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
+ minimatch "^3.0.4"
+ object.entries "^1.1.4"
+ object.fromentries "^2.0.4"
+ object.values "^1.1.4"
+ prop-types "^15.7.2"
+ resolve "^2.0.0-next.3"
+ string.prototype.matchall "^4.0.5"
+
+eslint-restricted-globals@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.2.0.tgz#7729f326af97bec7a7e56d9f7d9c064b79285c50"
+ integrity sha512-kwYJALm5KS2QW3Mc1PgObO4V+pTR6RQtRT65L1GQILlEnAhabUQqGAX7/qUjoQR4KZJKehWpBtyDEiDecwmY9A==
+
+eslint-scope@5.1.1, eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+ integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+ dependencies:
+ eslint-visitor-keys "^2.0.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
+eslint-visitor-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+ integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint@^7.6.0:
+ version "7.28.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820"
+ integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==
+ dependencies:
+ "@babel/code-frame" "7.12.11"
+ "@eslint/eslintrc" "^0.4.2"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ enquirer "^2.3.5"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^5.1.1"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^2.0.0"
+ espree "^7.3.1"
+ esquery "^1.4.0"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.1.2"
+ globals "^13.6.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ progress "^2.0.0"
+ regexpp "^3.1.0"
+ semver "^7.2.1"
+ strip-ansi "^6.0.0"
+ strip-json-comments "^3.1.0"
+ table "^6.0.9"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^7.3.0, espree@^7.3.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
+ integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
+ dependencies:
+ acorn "^7.4.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^1.3.0"
+
+esprima@^4.0.0, esprima@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+ integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.1.0, esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+
+estree-walker@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+eventemitter3@^3.1.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+ integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+
+eventemitter3@^4.0.0:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+ integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+events@^3.0.0, events@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+ integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+exec-sh@^0.3.2:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc"
+ integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==
+
+execa@4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2"
+ integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+execa@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376"
+ integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^6.0.0"
+ human-signals "^2.1.0"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.1"
+ onetime "^5.1.2"
+ signal-exit "^3.0.3"
+ strip-final-newline "^2.0.0"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^4.0.2, execa@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
+ integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+execall@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45"
+ integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==
+ dependencies:
+ clone-regexp "^2.1.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+expect@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca"
+ integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ ansi-styles "^3.2.0"
+ jest-get-type "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-regex-util "^24.9.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-diff@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
+ integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
+
+fast-glob@^2.2.6:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+ integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
+ dependencies:
+ "@mrmlnc/readdir-enhanced" "^2.2.1"
+ "@nodelib/fs.stat" "^1.1.2"
+ glob-parent "^3.1.0"
+ is-glob "^4.0.0"
+ merge2 "^1.2.3"
+ micromatch "^3.1.10"
+
+fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.5:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
+ integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastest-levenshtein@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2"
+ integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==
+
+fastq@^1.6.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
+ integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
+ dependencies:
+ reusify "^1.0.4"
+
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
+figgy-pudding@^3.4.1, figgy-pudding@^3.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+ integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+figures@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+file-loader@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
+ integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^1.0.0"
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+filter-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
+ integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs=
+
+find-babel-config@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
+ integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
+ dependencies:
+ json5 "^0.5.1"
+ path-exists "^3.0.0"
+
+find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-cache-dir@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
+ integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^3.0.2"
+ pkg-dir "^4.1.0"
+
+find-up@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-yarn-workspace-root@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db"
+ integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==
+ dependencies:
+ fs-extra "^4.0.3"
+ micromatch "^3.1.4"
+
+findup-sync@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+flatted@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
+ integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+follow-redirects@^1.0.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43"
+ integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==
+
+for-each@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+ dependencies:
+ is-callable "^1.1.3"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
+ integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@~0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@^4.0.2, fs-extra@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
+ integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b"
+ integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
+ integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
+ dependencies:
+ minipass "^2.6.0"
+
+fs-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
+fs-readdir-recursive@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
+ integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+ integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+fsevents@^2.3.2, fsevents@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+fstream@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
+ integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+genfun@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537"
+ integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
+ integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-pkg-repo@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d"
+ integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0=
+ dependencies:
+ hosted-git-info "^2.1.4"
+ meow "^3.3.0"
+ normalize-package-data "^2.3.0"
+ parse-github-repo-url "^1.3.0"
+ through2 "^2.0.0"
+
+get-port@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119"
+ integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==
+
+get-stdin@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6"
+ integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+ integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
+get-stdin@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
+ integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^4.0.0, get-stream@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^5.0.0, get-stream@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+ integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+git-raw-commits@2.0.0, git-raw-commits@^2.0.0, git-raw-commits@^2.0.3, git-raw-commits@^2.0.8:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1"
+ integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==
+ dependencies:
+ dargs "^7.0.0"
+ lodash "^4.17.15"
+ meow "^8.0.0"
+ split2 "^3.0.0"
+ through2 "^4.0.0"
+
+git-remote-origin-url@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f"
+ integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=
+ dependencies:
+ gitconfiglocal "^1.0.0"
+ pify "^2.3.0"
+
+git-semver-tags@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34"
+ integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==
+ dependencies:
+ meow "^4.0.0"
+ semver "^6.0.0"
+
+git-semver-tags@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780"
+ integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==
+ dependencies:
+ meow "^8.0.0"
+ semver "^6.0.0"
+
+git-up@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c"
+ integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==
+ dependencies:
+ is-ssh "^1.3.0"
+ parse-url "^5.0.0"
+
+git-url-parse@11.1.3:
+ version "11.1.3"
+ resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.3.tgz#03625b6fc09905e9ad1da7bb2b84be1bf9123143"
+ integrity sha512-GPsfwticcu52WQ+eHp0IYkAyaOASgYdtsQDIt4rUp6GbiNt1P9ddrh3O0kQB0eD4UJZszVqNT3+9Zwcg40fywA==
+ dependencies:
+ git-up "^4.0.0"
+
+git-url-parse@11.4.4, git-url-parse@^11.1.2:
+ version "11.4.4"
+ resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.4.tgz#5d747debc2469c17bc385719f7d0427802d83d77"
+ integrity sha512-Y4o9o7vQngQDIU9IjyCmRJBin5iYjI5u9ZITnddRZpD7dcCFQj2sL2XuMNbLRE4b4B/4ENPsp2Q8P44fjAZ0Pw==
+ dependencies:
+ git-up "^4.0.0"
+
+gitconfiglocal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b"
+ integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=
+ dependencies:
+ ini "^1.3.2"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-to-regexp@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+ integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
+glob-to-regexp@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+ integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+ integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+ dependencies:
+ 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"
+
+global-dirs@^0.1.0, global-dirs@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
+global-dirs@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d"
+ integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==
+ dependencies:
+ ini "1.3.7"
+
+global-dirs@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686"
+ integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==
+ dependencies:
+ ini "2.0.0"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-modules@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^13.6.0, globals@^13.9.0:
+ version "13.9.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb"
+ integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==
+ dependencies:
+ type-fest "^0.20.2"
+
+globby@11.0.1:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357"
+ integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+globby@11.0.3:
+ version "11.0.3"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
+ integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+globby@^10.0.1:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543"
+ integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.0.3"
+ glob "^7.1.3"
+ ignore "^5.1.1"
+ merge2 "^1.2.3"
+ slash "^3.0.0"
+
+globby@^11.0.3:
+ version "11.0.4"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5"
+ integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globby@^9.2.0:
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"
+ integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ array-union "^1.0.2"
+ dir-glob "^2.2.2"
+ fast-glob "^2.2.6"
+ glob "^7.1.3"
+ ignore "^4.0.3"
+ pify "^4.0.1"
+ slash "^2.0.0"
+
+globjoin@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
+ integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=
+
+gonzales-pe@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3"
+ integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==
+ dependencies:
+ minimist "^1.2.5"
+
+got@11.6.0:
+ version "11.6.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-11.6.0.tgz#4978c78f3cbc3a45ee95381f8bb6efd1db1f4638"
+ integrity sha512-ErhWb4IUjQzJ3vGs3+RR12NWlBDDkRciFpAkQ1LPUxi6OnwhGj07gQxjPsyIk69s7qMihwKrKquV6VQq7JNYLA==
+ dependencies:
+ "@sindresorhus/is" "^3.1.1"
+ "@szmarczak/http-timer" "^4.0.5"
+ "@types/cacheable-request" "^6.0.1"
+ "@types/responselike" "^1.0.0"
+ cacheable-lookup "^5.0.3"
+ cacheable-request "^7.0.1"
+ decompress-response "^6.0.0"
+ http2-wrapper "^1.0.0-beta.5.2"
+ lowercase-keys "^2.0.0"
+ p-cancelable "^2.0.0"
+ responselike "^2.0.0"
+
+got@11.8.2:
+ version "11.8.2"
+ resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599"
+ integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==
+ dependencies:
+ "@sindresorhus/is" "^4.0.0"
+ "@szmarczak/http-timer" "^4.0.5"
+ "@types/cacheable-request" "^6.0.1"
+ "@types/responselike" "^1.0.0"
+ cacheable-lookup "^5.0.3"
+ cacheable-request "^7.0.1"
+ decompress-response "^6.0.0"
+ http2-wrapper "^1.0.0-beta.5.2"
+ lowercase-keys "^2.0.0"
+ p-cancelable "^2.0.0"
+ responselike "^2.0.0"
+
+got@^6.7.1:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
+ integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
+ dependencies:
+ create-error-class "^3.0.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ is-redirect "^1.0.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ lowercase-keys "^1.0.0"
+ safe-buffer "^5.0.1"
+ timed-out "^4.0.0"
+ unzip-response "^2.0.1"
+ url-parse-lax "^1.0.0"
+
+got@^9.6.0:
+ version "9.6.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
+ integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
+ dependencies:
+ "@sindresorhus/is" "^0.14.0"
+ "@szmarczak/http-timer" "^1.1.2"
+ cacheable-request "^6.0.0"
+ decompress-response "^3.3.0"
+ duplexer3 "^0.1.4"
+ get-stream "^4.1.0"
+ lowercase-keys "^1.0.1"
+ mimic-response "^1.0.1"
+ p-cancelable "^1.0.0"
+ to-readable-stream "^1.0.0"
+ url-parse-lax "^3.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4:
+ version "4.2.6"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
+ integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
+handlebars@^4.7.6:
+ version "4.7.7"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
+ integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==
+ dependencies:
+ minimist "^1.2.5"
+ neo-async "^2.6.0"
+ source-map "^0.6.1"
+ wordwrap "^1.0.0"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.3:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+ integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
+ dependencies:
+ ajv "^6.12.3"
+ har-schema "^2.0.0"
+
+hard-rejection@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
+ integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-bigints@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
+ integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbols@^1.0.1, has-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
+ integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
+
+has-unicode@^2.0.0, has-unicode@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has-yarn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
+ integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+ integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+highlight.js@^10.7.1:
+ version "10.7.3"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
+ integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
+
+hmac-drbg@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4, hosted-git-info@^2.7.1:
+ version "2.8.9"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+ integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+
+hosted-git-info@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961"
+ integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+html-encoding-sniffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+html-tags@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140"
+ integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==
+
+htmlparser2@^3.10.0:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+ integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+ dependencies:
+ domelementtype "^1.3.1"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.1.1"
+
+http-assert@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878"
+ integrity sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==
+ dependencies:
+ deep-equal "~1.0.1"
+ http-errors "~1.7.2"
+
+http-cache-semantics@^3.8.1:
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
+ integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
+
+http-cache-semantics@^4.0.0, http-cache-semantics@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
+ integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
+
+http-errors@^1.3.1, http-errors@^1.6.3, http-errors@^1.7.3:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507"
+ integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-proxy-agent@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
+ integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
+ dependencies:
+ agent-base "4"
+ debug "3.1.0"
+
+http-proxy-agent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-3.0.0.tgz#598f42dc815949a11e2c6dbfdf24cd8a4c165327"
+ integrity sha512-uGuJaBWQWDQCJI5ip0d/VTYZW0nRrlLWXA4A7P1jrsa+f77rW2yXz315oBt6zGCF6l8C2tlMxY7ffULCj+5FhA==
+ dependencies:
+ agent-base "5"
+ debug "4"
+
+http-proxy-agent@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+ integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
+ dependencies:
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
+
+http-proxy-middleware@^0.19.0:
+ version "0.19.2"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz#ee73dcc8348165afefe8de2ff717751d181608ee"
+ integrity sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ==
+ dependencies:
+ http-proxy "^1.18.1"
+ is-glob "^4.0.0"
+ lodash "^4.17.11"
+ micromatch "^3.1.10"
+
+http-proxy@^1.18.1:
+ version "1.18.1"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+ integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+ dependencies:
+ eventemitter3 "^4.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+http2-wrapper@^1.0.0-beta.5.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
+ integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
+ dependencies:
+ quick-lru "^5.1.1"
+ resolve-alpn "^1.0.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+https-proxy-agent@^2.2.3:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
+ integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
+ dependencies:
+ agent-base "^4.3.0"
+ debug "^3.1.0"
+
+https-proxy-agent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b"
+ integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==
+ dependencies:
+ agent-base "5"
+ debug "4"
+
+https-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
+ integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+human-signals@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+ integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+humanize-ms@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+ integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=
+ dependencies:
+ ms "^2.0.0"
+
+husky@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0"
+ integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==
+ dependencies:
+ cosmiconfig "^5.0.7"
+ execa "^1.0.0"
+ find-up "^3.0.0"
+ get-stdin "^6.0.0"
+ is-ci "^2.0.0"
+ pkg-dir "^3.0.0"
+ please-upgrade-node "^3.1.1"
+ read-pkg "^4.0.1"
+ run-node "^1.0.0"
+ slash "^2.0.0"
+
+iconv-lite@0.4.24, iconv-lite@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@^0.6.2:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
+icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+ integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
+
+icss-utils@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
+ integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==
+ dependencies:
+ postcss "^7.0.14"
+
+ieee754@^1.1.13, ieee754@^1.1.4:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore-styles@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-styles/-/ignore-styles-5.0.1.tgz#b49ef2274bdafcd8a4880a966bfe38d1a0bf4671"
+ integrity sha1-tJ7yJ0va/NikiAqWa/440aC/RnE=
+
+ignore-walk@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
+ integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
+ dependencies:
+ minimatch "^3.0.4"
+
+ignore-walk@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335"
+ integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==
+ dependencies:
+ minimatch "^3.0.4"
+
+ignore@^4.0.3, ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8:
+ version "5.1.8"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+
+import-cwd@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92"
+ integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==
+ dependencies:
+ import-from "^3.0.0"
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966"
+ integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==
+ dependencies:
+ resolve-from "^5.0.0"
+
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+
+import-lazy@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
+ integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
+
+import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+import-local@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6"
+ integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+ integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+infer-owner@^1.0.3, infer-owner@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
+ integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
+
+ini@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
+ integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
+
+ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+init-package-json@^1.10.3:
+ version "1.10.3"
+ resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe"
+ integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==
+ dependencies:
+ glob "^7.1.1"
+ npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0"
+ promzard "^0.3.0"
+ read "~1.0.1"
+ read-package-json "1 || 2"
+ semver "2.x || 3.x || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+ validate-npm-package-name "^3.0.0"
+
+inquirer@7.3.3, inquirer@^7.0.4:
+ version "7.3.3"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
+ integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-width "^3.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.19"
+ mute-stream "0.0.8"
+ run-async "^2.4.0"
+ rxjs "^6.6.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+ through "^2.3.6"
+
+inquirer@8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.0.tgz#68ce5ce5376cf0e89765c993d8b7c1e62e184d69"
+ integrity sha512-1nKYPoalt1vMBfCMtpomsUc32wmOoWXAoq3kM/5iTfxyQ2f/BxjixQpC+mbZ7BI0JUXHED4/XPXekDVtJNpXYw==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^4.1.1"
+ cli-cursor "^3.1.0"
+ cli-width "^3.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.21"
+ mute-stream "0.0.8"
+ ora "^5.3.0"
+ run-async "^2.4.0"
+ rxjs "^6.6.6"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+ through "^2.3.6"
+
+inquirer@^6.2.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
+ integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
+ dependencies:
+ ansi-escapes "^3.2.0"
+ chalk "^2.4.2"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^2.0.0"
+ lodash "^4.17.12"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^6.4.0"
+ string-width "^2.1.0"
+ strip-ansi "^5.1.0"
+ through "^2.3.6"
+
+internal-slot@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
+ integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
+ dependencies:
+ get-intrinsic "^1.1.0"
+ has "^1.0.3"
+ side-channel "^1.0.4"
+
+interpret@^1.0.0, interpret@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+ip@1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-alphabetical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
+ integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
+
+is-alphanumerical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
+ integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-bigint@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a"
+ integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-boolean-object@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8"
+ integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+ integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
+ integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
+
+is-ci@2.0.0, is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
+is-ci@3.0.0, is-ci@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994"
+ integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==
+ dependencies:
+ ci-info "^3.1.1"
+
+is-ci@^1.0.10:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
+ integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
+ dependencies:
+ ci-info "^1.5.0"
+
+is-core-module@^2.2.0, is-core-module@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
+ integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
+ dependencies:
+ has "^1.0.3"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5"
+ integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==
+
+is-decimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
+ integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-finite@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
+ integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-generator-function@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c"
+ integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-hexadecimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
+ integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
+
+is-installed-globally@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
+ integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
+ dependencies:
+ global-dirs "^0.1.0"
+ is-path-inside "^1.0.0"
+
+is-installed-globally@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141"
+ integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==
+ dependencies:
+ global-dirs "^2.0.1"
+ is-path-inside "^3.0.1"
+
+is-installed-globally@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
+ integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
+ dependencies:
+ global-dirs "^3.0.0"
+ is-path-inside "^3.0.2"
+
+is-interactive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
+ integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
+
+is-lambda@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
+ integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=
+
+is-negative-zero@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
+ integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
+
+is-npm@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+ integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
+
+is-npm@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d"
+ integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==
+
+is-npm@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8"
+ integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==
+
+is-number-object@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb"
+ integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+ integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+
+is-path-cwd@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+ integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-path-inside@^3.0.1, is-path-inside@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-obj@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-plain-object@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
+ integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
+
+is-promise@^2.1.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
+ integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
+
+is-redirect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+ integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
+
+is-regex@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
+ integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
+ dependencies:
+ call-bind "^1.0.2"
+ has-symbols "^1.0.2"
+
+is-regexp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d"
+ integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==
+
+is-regular-file@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-regular-file/-/is-regular-file-1.1.1.tgz#ffcf9cae56ec63bc55b17d6fed1af441986dab66"
+ integrity sha512-+1U3MZrVwC4HM6VUKk3L5fiHtNd2d9kayzEJhmQ+B+uIBPE/p8Fy8QVdkx0HIr3o9J5TOKJY40eI5GfTfBqbdA==
+
+is-retry-allowed@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
+ integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
+
+is-ssh@^1.3.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e"
+ integrity sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==
+ dependencies:
+ protocols "^1.1.0"
+
+is-stream@^1.0.0, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+is-string@^1.0.5, is-string@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"
+ integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+ integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+ dependencies:
+ has-symbols "^1.0.2"
+
+is-text-path@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
+ integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
+ dependencies:
+ text-extensions "^1.0.0"
+
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+is-yarn-global@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
+ integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49"
+ integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==
+
+istanbul-lib-coverage@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
+ integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==
+
+istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630"
+ integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==
+ dependencies:
+ "@babel/generator" "^7.4.0"
+ "@babel/parser" "^7.4.3"
+ "@babel/template" "^7.4.0"
+ "@babel/traverse" "^7.4.3"
+ "@babel/types" "^7.4.0"
+ istanbul-lib-coverage "^2.0.5"
+ semver "^6.0.0"
+
+istanbul-lib-instrument@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
+ integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
+ dependencies:
+ "@babel/core" "^7.7.5"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.0.0"
+ semver "^6.3.0"
+
+istanbul-lib-report@^2.0.4:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33"
+ integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==
+ dependencies:
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ supports-color "^6.1.0"
+
+istanbul-lib-source-maps@^3.0.1:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8"
+ integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ rimraf "^2.6.3"
+ source-map "^0.6.1"
+
+istanbul-reports@^2.2.6:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931"
+ integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==
+ dependencies:
+ html-escaper "^2.0.0"
+
+jest-changed-files@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039"
+ integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ execa "^1.0.0"
+ throat "^4.0.0"
+
+jest-cli@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af"
+ integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==
+ dependencies:
+ "@jest/core" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ import-local "^2.0.0"
+ is-ci "^2.0.0"
+ jest-config "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ prompts "^2.0.1"
+ realpath-native "^1.1.0"
+ yargs "^13.3.0"
+
+jest-config@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5"
+ integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/test-sequencer" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ babel-jest "^24.9.0"
+ chalk "^2.0.1"
+ glob "^7.1.1"
+ jest-environment-jsdom "^24.9.0"
+ jest-environment-node "^24.9.0"
+ jest-get-type "^24.9.0"
+ jest-jasmine2 "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ micromatch "^3.1.10"
+ pretty-format "^24.9.0"
+ realpath-native "^1.1.0"
+
+jest-diff@^24.3.0, jest-diff@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
+ integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
+ dependencies:
+ chalk "^2.0.1"
+ diff-sequences "^24.9.0"
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-docblock@^24.3.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2"
+ integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==
+ dependencies:
+ detect-newline "^2.1.0"
+
+jest-each@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05"
+ integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ jest-get-type "^24.9.0"
+ jest-util "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-environment-jsdom@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b"
+ integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-util "^24.9.0"
+ jsdom "^11.5.1"
+
+jest-environment-node@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3"
+ integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-util "^24.9.0"
+
+jest-get-type@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
+ integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
+
+jest-haste-map@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d"
+ integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ anymatch "^2.0.0"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.15"
+ invariant "^2.2.4"
+ jest-serializer "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.9.0"
+ micromatch "^3.1.10"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+jest-haste-map@^27.0.5:
+ version "27.0.5"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.5.tgz#2e1e55073b5328410a2c0d74b334e513d71f3470"
+ integrity sha512-3LFryGSHxwPFHzKIs6W0BGA2xr6g1MvzSjR3h3D8K8Uqy4vbRm/grpGHzbPtIbOPLC6wFoViRrNEmd116QWSkw==
+ dependencies:
+ "@jest/types" "^27.0.2"
+ "@types/graceful-fs" "^4.1.2"
+ "@types/node" "*"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.4"
+ jest-regex-util "^27.0.1"
+ jest-serializer "^27.0.1"
+ jest-util "^27.0.2"
+ jest-worker "^27.0.2"
+ micromatch "^4.0.4"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^2.3.2"
+
+jest-jasmine2@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0"
+ integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ co "^4.6.0"
+ expect "^24.9.0"
+ is-generator-fn "^2.0.0"
+ jest-each "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ pretty-format "^24.9.0"
+ throat "^4.0.0"
+
+jest-leak-detector@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a"
+ integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==
+ dependencies:
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-matcher-utils@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073"
+ integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==
+ dependencies:
+ chalk "^2.0.1"
+ jest-diff "^24.9.0"
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-message-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3"
+ integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/stack-utils" "^1.0.1"
+ chalk "^2.0.1"
+ micromatch "^3.1.10"
+ slash "^2.0.0"
+ stack-utils "^1.0.1"
+
+jest-mock@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6"
+ integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==
+ dependencies:
+ "@jest/types" "^24.9.0"
+
+jest-pnp-resolver@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
+ integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
+
+jest-regex-util@^24.3.0, jest-regex-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636"
+ integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==
+
+jest-regex-util@^27.0.1:
+ version "27.0.1"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz#69d4b1bf5b690faa3490113c47486ed85dd45b68"
+ integrity sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==
+
+jest-resolve-dependencies@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab"
+ integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-snapshot "^24.9.0"
+
+jest-resolve@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321"
+ integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ browser-resolve "^1.11.3"
+ chalk "^2.0.1"
+ jest-pnp-resolver "^1.2.1"
+ realpath-native "^1.1.0"
+
+jest-runner@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42"
+ integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.4.2"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-config "^24.9.0"
+ jest-docblock "^24.3.0"
+ jest-haste-map "^24.9.0"
+ jest-jasmine2 "^24.9.0"
+ jest-leak-detector "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-resolve "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.6.0"
+ source-map-support "^0.5.6"
+ throat "^4.0.0"
+
+jest-runtime@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac"
+ integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.9.0"
+ "@jest/source-map" "^24.3.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/yargs" "^13.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.1.15"
+ jest-config "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ strip-bom "^3.0.0"
+ yargs "^13.3.0"
+
+jest-serializer@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73"
+ integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==
+
+jest-serializer@^27.0.1:
+ version "27.0.1"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.1.tgz#2464d04dcc33fb71dc80b7c82e3c5e8a08cb1020"
+ integrity sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==
+ dependencies:
+ "@types/node" "*"
+ graceful-fs "^4.2.4"
+
+jest-snapshot@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba"
+ integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==
+ dependencies:
+ "@babel/types" "^7.0.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ expect "^24.9.0"
+ jest-diff "^24.9.0"
+ jest-get-type "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-resolve "^24.9.0"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^24.9.0"
+ semver "^6.2.0"
+
+jest-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162"
+ integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/source-map" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ callsites "^3.0.0"
+ chalk "^2.0.1"
+ graceful-fs "^4.1.15"
+ is-ci "^2.0.0"
+ mkdirp "^0.5.1"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+
+jest-util@^27.0.2:
+ version "27.0.2"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.2.tgz#fc2c7ace3c75ae561cf1e5fdb643bf685a5be7c7"
+ integrity sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==
+ dependencies:
+ "@jest/types" "^27.0.2"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ is-ci "^3.0.0"
+ picomatch "^2.2.3"
+
+jest-validate@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab"
+ integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ camelcase "^5.3.1"
+ chalk "^2.0.1"
+ jest-get-type "^24.9.0"
+ leven "^3.1.0"
+ pretty-format "^24.9.0"
+
+jest-watcher@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b"
+ integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==
+ dependencies:
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/yargs" "^13.0.0"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ jest-util "^24.9.0"
+ string-length "^2.0.0"
+
+jest-worker@^24.6.0, jest-worker@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
+ integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^6.1.0"
+
+jest-worker@^27.0.2:
+ version "27.0.2"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05"
+ integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
+jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171"
+ integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==
+ dependencies:
+ import-local "^2.0.0"
+ jest-cli "^24.9.0"
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@3.14.1, js-yaml@^3.13.1, js-yaml@^3.7.0:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsdom@^11.5.1:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
+ integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
+ dependencies:
+ abab "^2.0.0"
+ acorn "^5.5.3"
+ acorn-globals "^4.1.0"
+ array-equal "^1.0.0"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle "^1.0.0"
+ data-urls "^1.0.0"
+ domexception "^1.0.1"
+ escodegen "^1.9.1"
+ html-encoding-sniffer "^1.0.2"
+ left-pad "^1.3.0"
+ nwsapi "^2.0.7"
+ parse5 "4.0.0"
+ pn "^1.1.0"
+ request "^2.87.0"
+ request-promise-native "^1.0.5"
+ sax "^1.2.4"
+ symbol-tree "^3.2.2"
+ tough-cookie "^2.3.4"
+ w3c-hr-time "^1.0.1"
+ webidl-conversions "^4.0.2"
+ whatwg-encoding "^1.0.3"
+ whatwg-mimetype "^2.1.0"
+ whatwg-url "^6.4.1"
+ ws "^5.2.0"
+ xml-name-validator "^3.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-buffer@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
+ integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-fixer@^1.5.1:
+ version "1.6.10"
+ resolved "https://registry.yarnpkg.com/json-fixer/-/json-fixer-1.6.10.tgz#2c76d47d0fc708063bd370c6e01ab376d669ce99"
+ integrity sha512-Q63bfy46LGJHPtjjB/t4+6d427K0RWgOy3bgUHXCl1ztNdMxiLxkHwOxD5U08cPiro4+iC1kBYf+HLlc1J4a6w==
+ dependencies:
+ "@babel/runtime" "^7.14.0"
+ chalk "^4.1.1"
+ pegjs "^0.10.0"
+
+json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
+ integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
+ dependencies:
+ minimist "^1.2.5"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsonparse@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"
+ integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==
+ dependencies:
+ array-includes "^3.1.2"
+ object.assign "^4.1.2"
+
+keygrip@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226"
+ integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==
+ dependencies:
+ tsscmp "1.0.6"
+
+keyv@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
+ integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
+ dependencies:
+ json-buffer "3.0.0"
+
+keyv@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254"
+ integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==
+ dependencies:
+ json-buffer "3.0.1"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+known-css-properties@^0.21.0:
+ version "0.21.0"
+ resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.21.0.tgz#15fbd0bbb83447f3ce09d8af247ed47c68ede80d"
+ integrity sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==
+
+koa-compose@^3.0.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7"
+ integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=
+ dependencies:
+ any-promise "^1.1.0"
+
+koa-compose@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877"
+ integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==
+
+koa-compress@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/koa-compress/-/koa-compress-3.1.0.tgz#00fb0af695dc4661c6de261a18da669626ea3ca1"
+ integrity sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==
+ dependencies:
+ bytes "^3.0.0"
+ compressible "^2.0.0"
+ koa-is-json "^1.0.0"
+ statuses "^1.0.0"
+
+koa-connect@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/koa-connect/-/koa-connect-2.1.0.tgz#16bce0a917c4cb24233aaac83fbc5b83804b4a1c"
+ integrity sha512-O9pcFafHk0oQsBevlbTBlB9co+2RUQJ4zCzu3qJPmGlGoeEZkne+7gWDkecqDPSbCtED6LmhlQladxs6NjOnMQ==
+
+koa-convert@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0"
+ integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=
+ dependencies:
+ co "^4.6.0"
+ koa-compose "^3.0.0"
+
+koa-is-json@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14"
+ integrity sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=
+
+koa-route@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/koa-route/-/koa-route-3.2.0.tgz#76298b99a6bcfa9e38cab6fe5c79a8733e758bce"
+ integrity sha1-dimLmaa8+p44yrb+XHmocz51i84=
+ dependencies:
+ debug "*"
+ methods "~1.1.0"
+ path-to-regexp "^1.2.0"
+
+koa-router@^7.4.0:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/koa-router/-/koa-router-7.4.0.tgz#aee1f7adc02d5cb31d7d67465c9eacc825e8c5e0"
+ integrity sha512-IWhaDXeAnfDBEpWS6hkGdZ1ablgr6Q6pGdXCyK38RbzuH4LkUOpPqPw+3f8l8aTDrQmBQ7xJc0bs2yV4dzcO+g==
+ dependencies:
+ debug "^3.1.0"
+ http-errors "^1.3.1"
+ koa-compose "^3.0.0"
+ methods "^1.0.1"
+ path-to-regexp "^1.1.1"
+ urijs "^1.19.0"
+
+koa-send@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79"
+ integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==
+ dependencies:
+ debug "^4.1.1"
+ http-errors "^1.7.3"
+ resolve-path "^1.4.0"
+
+koa-static@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943"
+ integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==
+ dependencies:
+ debug "^3.1.0"
+ koa-send "^5.0.0"
+
+koa@^2.5.3, koa@^2.7.0:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051"
+ integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==
+ dependencies:
+ accepts "^1.3.5"
+ cache-content-type "^1.0.0"
+ content-disposition "~0.5.2"
+ content-type "^1.0.4"
+ cookies "~0.8.0"
+ debug "~3.1.0"
+ delegates "^1.0.0"
+ depd "^2.0.0"
+ destroy "^1.0.4"
+ encodeurl "^1.0.2"
+ escape-html "^1.0.3"
+ fresh "~0.5.2"
+ http-assert "^1.3.0"
+ http-errors "^1.6.3"
+ is-generator-function "^1.0.7"
+ koa-compose "^4.1.0"
+ koa-convert "^1.2.0"
+ on-finished "^2.3.0"
+ only "~0.0.2"
+ parseurl "^1.3.2"
+ statuses "^1.5.0"
+ type-is "^1.6.16"
+ vary "^1.1.2"
+
+latest-version@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
+ integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
+ dependencies:
+ package-json "^4.0.0"
+
+latest-version@^5.0.0, latest-version@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
+ integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
+ dependencies:
+ package-json "^6.3.0"
+
+left-pad@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
+ integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
+
+lerna-changelog@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-1.0.1.tgz#53090ab7f047730ec88d32087762164626269d3a"
+ integrity sha512-E7ewsfQknBmQcUspCqd5b8Hbbp5SX768y6vEiIdXXui9pPhZS1WlrKtiAUPs0CeGd8Pv4gtIC/h3wSWIZuvqaA==
+ dependencies:
+ chalk "^2.4.1"
+ cli-highlight "^2.1.4"
+ execa "^1.0.0"
+ make-fetch-happen "^7.1.1"
+ normalize-git-url "^3.0.2"
+ p-map "^3.0.0"
+ progress "^2.0.0"
+ yargs "^13.0.0"
+
+lerna-to-typescript-project-references@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/lerna-to-typescript-project-references/-/lerna-to-typescript-project-references-0.0.6.tgz#0d9c623539eea0b27c8a68b39db2bb66df45c1a5"
+ integrity sha512-zQusn2ukikcursNYQsI1vQNuV1U5dLeXfculml0b1AtQI79mbnF3jDjQSsQ0tIM5+SeMuX3U//G2ZOdDld9Rww==
+ dependencies:
+ arg "^4.1.0"
+ prettier "^1.0.0"
+
+lerna@^3.22.1:
+ version "3.22.1"
+ resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62"
+ integrity sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg==
+ dependencies:
+ "@lerna/add" "3.21.0"
+ "@lerna/bootstrap" "3.21.0"
+ "@lerna/changed" "3.21.0"
+ "@lerna/clean" "3.21.0"
+ "@lerna/cli" "3.18.5"
+ "@lerna/create" "3.22.0"
+ "@lerna/diff" "3.21.0"
+ "@lerna/exec" "3.21.0"
+ "@lerna/import" "3.22.0"
+ "@lerna/info" "3.21.0"
+ "@lerna/init" "3.21.0"
+ "@lerna/link" "3.21.0"
+ "@lerna/list" "3.21.0"
+ "@lerna/publish" "3.22.1"
+ "@lerna/run" "3.21.0"
+ "@lerna/version" "3.22.1"
+ import-local "^2.0.0"
+ npmlog "^4.1.2"
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+load-json-file@^5.2.0, load-json-file@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3"
+ integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==
+ dependencies:
+ graceful-fs "^4.1.15"
+ parse-json "^4.0.0"
+ pify "^4.0.1"
+ strip-bom "^3.0.0"
+ type-fest "^0.3.0"
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-runner@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384"
+ integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==
+
+loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
+loader-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
+ integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^2.1.2"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash._reinterpolate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+ integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+
+lodash.clonedeep@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
+
+lodash.find@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1"
+ integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=
+
+lodash.get@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+ integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+
+lodash.ismatch@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
+ integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+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.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
+lodash.template@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
+ integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
+ integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+
+lodash.truncate@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
+ integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash@4.17.15:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+lodash@4.17.20:
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
+ integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
+
+lodash@4.17.21, lodash@^4.11.2, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.2.1:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@^4.0.0, log-symbols@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+loglevelnext@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-3.0.1.tgz#e3e4659c4061c09264f6812c33586dc55a009a04"
+ integrity sha512-JpjaJhIN1reaSb26SIxDGtE0uc67gPl19OMVHrr+Ggt6b/Vy60jmCtKgQBrygAH0bhRA2nkxgDvM+8QvR8r0YA==
+
+longest-streak@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
+ integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lru-cache@^4.0.1:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+macos-release@^2.2.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2"
+ integrity sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==
+
+make-dir@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
+ dependencies:
+ pify "^3.0.0"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+make-fetch-happen@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd"
+ integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==
+ dependencies:
+ agentkeepalive "^3.4.1"
+ cacache "^12.0.0"
+ http-cache-semantics "^3.8.1"
+ http-proxy-agent "^2.1.0"
+ https-proxy-agent "^2.2.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ node-fetch-npm "^2.0.2"
+ promise-retry "^1.1.1"
+ socks-proxy-agent "^4.0.0"
+ ssri "^6.0.0"
+
+make-fetch-happen@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-7.1.1.tgz#89ac8112eaa9d4361541deb591329e9238a531b1"
+ integrity sha512-7fNjiOXNZhNGQzG5P15nU97aZQtzPU2GVgVd7pnqnl5gnpLzMAD8bAe5YG4iW2s0PTqaZy9xGv4Wfqe872kRNQ==
+ dependencies:
+ agentkeepalive "^4.1.0"
+ cacache "^14.0.0"
+ http-cache-semantics "^4.0.3"
+ http-proxy-agent "^3.0.0"
+ https-proxy-agent "^4.0.0"
+ is-lambda "^1.0.1"
+ lru-cache "^5.1.1"
+ minipass "^3.0.0"
+ minipass-collect "^1.0.2"
+ minipass-fetch "^1.1.2"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.2"
+ promise-retry "^1.1.1"
+ socks-proxy-agent "^4.0.0"
+ ssri "^7.0.1"
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ dependencies:
+ tmpl "1.0.x"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
+ integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
+
+map-obj@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7"
+ integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+mathml-tag-names@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
+ integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+mdast-util-from-markdown@^0.8.0, mdast-util-from-markdown@^0.8.1:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c"
+ integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ mdast-util-to-string "^2.0.0"
+ micromark "~2.11.0"
+ parse-entities "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+mdast-util-to-markdown@^0.6.0:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe"
+ integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ longest-streak "^2.0.0"
+ mdast-util-to-string "^2.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.0.0"
+ zwitch "^1.0.0"
+
+mdast-util-to-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b"
+ integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4"
+ integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==
+ dependencies:
+ camelcase-keys "^4.0.0"
+ decamelize-keys "^1.0.0"
+ loud-rejection "^1.0.0"
+ minimist-options "^3.0.1"
+ normalize-package-data "^2.3.4"
+ read-pkg-up "^3.0.0"
+ redent "^2.0.0"
+ trim-newlines "^2.0.0"
+ yargs-parser "^10.0.0"
+
+meow@^3.3.0, meow@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+meow@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975"
+ integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==
+ dependencies:
+ camelcase-keys "^4.0.0"
+ decamelize-keys "^1.0.0"
+ loud-rejection "^1.0.0"
+ minimist "^1.1.3"
+ minimist-options "^3.0.1"
+ normalize-package-data "^2.3.4"
+ read-pkg-up "^3.0.0"
+ redent "^2.0.0"
+ trim-newlines "^2.0.0"
+
+meow@^8.0.0:
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
+ integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==
+ dependencies:
+ "@types/minimist" "^1.2.0"
+ camelcase-keys "^6.2.2"
+ decamelize-keys "^1.1.0"
+ hard-rejection "^2.1.0"
+ minimist-options "4.1.0"
+ normalize-package-data "^3.0.0"
+ read-pkg-up "^7.0.1"
+ redent "^3.0.0"
+ trim-newlines "^3.0.0"
+ type-fest "^0.18.0"
+ yargs-parser "^20.2.3"
+
+meow@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364"
+ integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==
+ dependencies:
+ "@types/minimist" "^1.2.0"
+ camelcase-keys "^6.2.2"
+ decamelize "^1.2.0"
+ decamelize-keys "^1.1.0"
+ hard-rejection "^2.1.0"
+ minimist-options "4.1.0"
+ normalize-package-data "^3.0.0"
+ read-pkg-up "^7.0.1"
+ redent "^3.0.0"
+ trim-newlines "^3.0.0"
+ type-fest "^0.18.0"
+ yargs-parser "^20.2.3"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.2.3, merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+methods@^1.0.1, methods@~1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromark@~2.11.0:
+ version "2.11.4"
+ resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a"
+ integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==
+ dependencies:
+ debug "^4.0.0"
+ parse-entities "^2.0.0"
+
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.2, micromatch@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
+ integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.2.3"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.44.0:
+ version "1.44.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
+ integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
+
+mime-db@1.47.0:
+ version "1.47.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c"
+ integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==
+
+mime-db@1.48.0, "mime-db@>= 1.43.0 < 2":
+ version "1.48.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d"
+ integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==
+
+mime-types@2.1.27:
+ version "2.1.27"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
+ integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
+ dependencies:
+ mime-db "1.44.0"
+
+mime-types@2.1.30:
+ version "2.1.30"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d"
+ integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==
+ dependencies:
+ mime-db "1.47.0"
+
+mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.31"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b"
+ integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==
+ dependencies:
+ mime-db "1.48.0"
+
+mime@^2.0.3:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
+ integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^1.0.0, mimic-response@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+ integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+min-indent@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+ integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+
+mini-css-extract-plugin@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0"
+ integrity sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+ webpack-sources "^1.1.0"
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist-options@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
+ integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+ kind-of "^6.0.3"
+
+minimist-options@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954"
+ integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+
+minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minipass-collect@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+ integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-fetch@^1.1.2:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.3.tgz#34c7cea038c817a8658461bf35174551dce17a0a"
+ integrity sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==
+ dependencies:
+ minipass "^3.1.0"
+ minipass-sized "^1.0.3"
+ minizlib "^2.0.0"
+ optionalDependencies:
+ encoding "^0.1.12"
+
+minipass-flush@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+ integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-pipeline@^1.2.2:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+ integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-sized@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
+ integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
+ integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
+ integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
+ dependencies:
+ yallist "^4.0.0"
+
+minizlib@^1.2.1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
+ integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
+ dependencies:
+ minipass "^2.9.0"
+
+minizlib@^2.0.0, minizlib@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+ integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp-promise@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1"
+ integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=
+ dependencies:
+ mkdirp "*"
+
+mkdirp@*, mkdirp@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+modify-values@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
+ integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.0.0, ms@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+multimatch@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b"
+ integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==
+ dependencies:
+ array-differ "^2.0.3"
+ array-union "^1.0.2"
+ arrify "^1.0.1"
+ minimatch "^3.0.4"
+
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+mute-stream@0.0.8, mute-stream@~0.0.4:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+mz@^2.4.0, mz@^2.5.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
+nan@^2.12.1:
+ version "2.14.2"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
+ integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
+
+nanoid@^2.0.0:
+ version "2.1.11"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280"
+ integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+node-fetch-npm@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4"
+ integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==
+ dependencies:
+ encoding "^0.1.11"
+ json-parse-better-errors "^1.0.0"
+ safe-buffer "^5.1.1"
+
+node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
+ integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
+
+node-gyp@^5.0.2:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e"
+ integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==
+ dependencies:
+ env-paths "^2.2.0"
+ glob "^7.1.4"
+ graceful-fs "^4.2.2"
+ mkdirp "^0.5.1"
+ nopt "^4.0.1"
+ npmlog "^4.1.2"
+ request "^2.88.0"
+ rimraf "^2.6.3"
+ semver "^5.7.1"
+ tar "^4.4.12"
+ which "^1.3.1"
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-notifier@^5.4.2:
+ version "5.4.5"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.5.tgz#0cbc1a2b0f658493b4025775a13ad938e96091ef"
+ integrity sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==
+ dependencies:
+ growly "^1.3.0"
+ is-wsl "^1.1.0"
+ semver "^5.5.0"
+ shellwords "^0.1.1"
+ which "^1.3.0"
+
+node-releases@^1.1.71:
+ version "1.1.73"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"
+ integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==
+
+nopt@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
+ integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-git-url@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4"
+ integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q=
+
+normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0, "normalize-package-data@~1.0.1 || ^2.0.0":
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-package-data@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699"
+ integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==
+ dependencies:
+ hosted-git-info "^4.0.1"
+ resolve "^1.20.0"
+ semver "^7.3.4"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+normalize-selector@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03"
+ integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=
+
+normalize-url@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
+ dependencies:
+ object-assign "^4.0.1"
+ prepend-http "^1.0.0"
+ query-string "^4.1.0"
+ sort-keys "^1.0.0"
+
+normalize-url@^4.1.0:
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
+ integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
+
+normalize-url@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.0.1.tgz#a4f27f58cf8c7b287b440b8a8201f42d0b00d256"
+ integrity sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==
+
+npm-bundled@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
+ integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==
+ dependencies:
+ npm-normalize-package-bin "^1.0.1"
+
+npm-lifecycle@^3.1.2:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309"
+ integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==
+ dependencies:
+ byline "^5.0.0"
+ graceful-fs "^4.1.15"
+ node-gyp "^5.0.2"
+ resolve-from "^4.0.0"
+ slide "^1.1.6"
+ uid-number "0.0.6"
+ umask "^1.1.0"
+ which "^1.3.1"
+
+npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
+ integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
+
+"npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", "npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7"
+ integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==
+ dependencies:
+ hosted-git-info "^2.7.1"
+ osenv "^0.1.5"
+ semver "^5.6.0"
+ validate-npm-package-name "^3.0.0"
+
+npm-packlist@^1.4.4:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
+ integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+ npm-normalize-package-bin "^1.0.1"
+
+npm-pick-manifest@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7"
+ integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==
+ dependencies:
+ figgy-pudding "^3.5.1"
+ npm-package-arg "^6.0.0"
+ semver "^5.4.1"
+
+npm-registry-client@^8.6.0:
+ version "8.6.0"
+ resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.6.0.tgz#7f1529f91450732e89f8518e0f21459deea3e4c4"
+ integrity sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==
+ dependencies:
+ concat-stream "^1.5.2"
+ graceful-fs "^4.1.6"
+ normalize-package-data "~1.0.1 || ^2.0.0"
+ npm-package-arg "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
+ once "^1.3.3"
+ request "^2.74.0"
+ retry "^0.10.0"
+ safe-buffer "^5.1.1"
+ semver "2 >=2.2.1 || 3.x || 4 || 5"
+ slide "^1.1.3"
+ ssri "^5.2.4"
+ optionalDependencies:
+ npmlog "2 || ^3.1.0 || ^4.0.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npm-run-path@^4.0.0, npm-run-path@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+"npmlog@2 || ^3.1.0 || ^4.0.0", npmlog@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+ integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+nwsapi@^2.0.7:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.10.3, object-inspect@^1.9.0:
+ version "1.10.3"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
+ integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
+
+object-keys@^1.0.12, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-path@^0.11.4:
+ version "0.11.5"
+ resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a"
+ integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0, object.assign@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
+ integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ has-symbols "^1.0.1"
+ object-keys "^1.1.1"
+
+object.entries@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd"
+ integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.2"
+
+object.fromentries@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8"
+ integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.2"
+ has "^1.0.3"
+
+object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7"
+ integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.2"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.3, object.values@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30"
+ integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.2"
+
+octokit-pagination-methods@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4"
+ integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==
+
+on-finished@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+onetime@^5.1.0, onetime@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+only@~0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
+ integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=
+
+opn@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-6.0.0.tgz#3c5b0db676d5f97da1233d1ed42d182bc5a27d2d"
+ integrity sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==
+ dependencies:
+ is-wsl "^1.1.0"
+
+optionator@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
+ora@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-5.0.0.tgz#4f0b34f2994877b49b452a707245ab1e9f6afccb"
+ integrity sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw==
+ dependencies:
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-spinners "^2.4.0"
+ is-interactive "^1.0.0"
+ log-symbols "^4.0.0"
+ mute-stream "0.0.8"
+ strip-ansi "^6.0.0"
+ wcwidth "^1.0.1"
+
+ora@5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.0.tgz#42eda4855835b9cd14d33864c97a3c95a3f56bf4"
+ integrity sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg==
+ dependencies:
+ bl "^4.1.0"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-spinners "^2.5.0"
+ is-interactive "^1.0.0"
+ is-unicode-supported "^0.1.0"
+ log-symbols "^4.1.0"
+ strip-ansi "^6.0.0"
+ wcwidth "^1.0.1"
+
+ora@^5.3.0:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
+ integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
+ dependencies:
+ bl "^4.1.0"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-spinners "^2.5.0"
+ is-interactive "^1.0.0"
+ is-unicode-supported "^0.1.0"
+ log-symbols "^4.1.0"
+ strip-ansi "^6.0.0"
+ wcwidth "^1.0.1"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-name@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/os-name/-/os-name-4.0.0.tgz#6c05c09c41c15848ea74658d12c9606f0f286599"
+ integrity sha512-caABzDdJMbtykt7GmSogEat3faTKQhmZf0BS5l/pZGmP0vPWQjXWqOhbLyK+b6j2/DQPmEvYdzLXJXXLJNVDNg==
+ dependencies:
+ macos-release "^2.2.0"
+ windows-release "^4.0.0"
+
+os-name@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801"
+ integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==
+ dependencies:
+ macos-release "^2.2.0"
+ windows-release "^3.1.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4, osenv@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-cancelable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
+ integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+
+p-cancelable@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
+ integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
+
+p-defer@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83"
+ integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==
+
+p-each-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71"
+ integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^3.0.2, p-limit@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-map-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
+ integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+ integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
+
+p-map@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-map@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d"
+ integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-pipe@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
+ integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k=
+
+p-queue@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346"
+ integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg==
+ dependencies:
+ eventemitter3 "^3.1.0"
+
+p-reduce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+ integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+p-waterfall@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00"
+ integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA=
+ dependencies:
+ p-reduce "^1.0.0"
+
+package-json@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
+ integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
+ dependencies:
+ got "^6.7.1"
+ registry-auth-token "^3.0.1"
+ registry-url "^3.0.3"
+ semver "^5.1.0"
+
+package-json@^6.3.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
+ integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
+ dependencies:
+ got "^9.6.0"
+ registry-auth-token "^4.0.0"
+ registry-url "^5.0.0"
+ semver "^6.2.0"
+
+pako@~1.0.5:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-asn1@^5.0.0, parse-asn1@^5.1.5:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
+ integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
+ dependencies:
+ asn1.js "^5.2.0"
+ browserify-aes "^1.0.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
+ integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-github-repo-url@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50"
+ integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A=
+
+parse-json@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646"
+ integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+parse-json@5.2.0, parse-json@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parse-path@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf"
+ integrity sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==
+ dependencies:
+ is-ssh "^1.3.0"
+ protocols "^1.4.0"
+ qs "^6.9.4"
+ query-string "^6.13.8"
+
+parse-url@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.3.tgz#c158560f14cb1560917e0b7fd8b01adc1e9d3cab"
+ integrity sha512-nrLCVMJpqo12X8uUJT4GJPd5AFaTOrGx/QpJy3HNcVtq0AZSstVIsnxS5fqNPuoqMUs3MyfBoOP6Zvu2Arok5A==
+ dependencies:
+ is-ssh "^1.3.0"
+ normalize-url "^6.0.1"
+ parse-path "^4.0.0"
+ protocols "^1.4.0"
+
+parse5-htmlparser2-tree-adapter@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
+ integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==
+ dependencies:
+ parse5 "^6.0.1"
+
+parse5@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
+ integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
+
+parse5@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+
+parse5@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+ integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
+parseurl@^1.3.2:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+parsimmon@^1.13.0:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/parsimmon/-/parsimmon-1.17.0.tgz#520bfaf5d80677cf74d9d2a586b6a503a29223b5"
+ integrity sha512-gp5yNYs0Lyv5Mp6hj+JMzsHaM4Mel0WuK2iHYKX32ActYAQdsSq+t4nVsqlOpUCiMYdTX1wFISLvugrAl9harg==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@1.0.1, path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-root-regex@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
+ integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=
+
+path-root@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
+ integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=
+ dependencies:
+ path-root-regex "^0.1.0"
+
+path-to-regexp@^1.1.1, path-to-regexp@^1.2.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
+ integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
+ dependencies:
+ isarray "0.0.1"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pbkdf2@^3.0.3:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
+ integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+pegjs@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd"
+ integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
+ integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
+
+pify@^2.0.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pify@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f"
+ integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pirates@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pkg-conf@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae"
+ integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==
+ dependencies:
+ find-up "^3.0.0"
+ load-json-file "^5.2.0"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+pkg-dir@^4.1.0, pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
+ integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
+ dependencies:
+ find-up "^2.1.0"
+
+please-upgrade-node@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
+ integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
+ dependencies:
+ semver-compare "^1.0.0"
+
+pn@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-html@^0.36.0:
+ version "0.36.0"
+ resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204"
+ integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==
+ dependencies:
+ htmlparser2 "^3.10.0"
+
+postcss-less@^3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad"
+ integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==
+ dependencies:
+ postcss "^7.0.14"
+
+postcss-media-query-parser@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244"
+ integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=
+
+postcss-modules-extract-imports@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
+ integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
+ dependencies:
+ postcss "^7.0.5"
+
+postcss-modules-local-by-default@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63"
+ integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+ postcss-value-parser "^3.3.1"
+
+postcss-modules-scope@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee"
+ integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+
+postcss-modules-values@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64"
+ integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^7.0.6"
+
+postcss-resolve-nested-selector@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e"
+ integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=
+
+postcss-safe-parser@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96"
+ integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==
+ dependencies:
+ postcss "^7.0.26"
+
+postcss-sass@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.4.4.tgz#91f0f3447b45ce373227a98b61f8d8f0785285a3"
+ integrity sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==
+ dependencies:
+ gonzales-pe "^4.3.0"
+ postcss "^7.0.21"
+
+postcss-scss@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.1.1.tgz#ec3a75fa29a55e016b90bf3269026c53c1d2b383"
+ integrity sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==
+ dependencies:
+ postcss "^7.0.6"
+
+postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.5:
+ version "6.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea"
+ integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-syntax@^0.36.2:
+ version "0.36.2"
+ resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c"
+ integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==
+
+postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss-value-parser@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
+ integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
+
+postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6:
+ version "7.0.36"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb"
+ integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prepend-file@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/prepend-file/-/prepend-file-1.3.1.tgz#83b16e0b4ac1901fce88dbd945a22f4cc81df579"
+ integrity sha1-g7FuC0rBkB/OiNvZRaIvTMgd9Xk=
+ dependencies:
+ tmp "0.0.31"
+
+prepend-http@^1.0.0, prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+prepend-http@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
+ integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+
+prettier-linter-helpers@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
+ integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+ dependencies:
+ fast-diff "^1.1.2"
+
+prettier@^1.0.0:
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
+ integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
+
+prettier@^2.0.4, prettier@^2.0.5:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6"
+ integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==
+
+pretty-format@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
+ integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ ansi-regex "^4.0.0"
+ ansi-styles "^3.2.0"
+ react-is "^16.8.4"
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+promise-retry@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d"
+ integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=
+ dependencies:
+ err-code "^1.0.0"
+ retry "^0.10.0"
+
+prompts@^2.0.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61"
+ integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+promzard@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee"
+ integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=
+ dependencies:
+ read "1"
+
+prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+ integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+
+protocols@^1.1.0, protocols@^1.4.0:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8"
+ integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==
+
+protoduck@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f"
+ integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==
+ dependencies:
+ genfun "^5.0.0"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.28:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+pupa@^2.0.1, pupa@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"
+ integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==
+ dependencies:
+ escape-goat "^2.0.0"
+
+q@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qs@^6.9.4:
+ version "6.10.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a"
+ integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==
+ dependencies:
+ side-channel "^1.0.4"
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+query-string@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
+ dependencies:
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+query-string@^6.13.8:
+ version "6.14.1"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a"
+ integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==
+ dependencies:
+ decode-uri-component "^0.2.0"
+ filter-obj "^1.1.0"
+ split-on-first "^1.0.0"
+ strict-uri-encode "^2.0.0"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
+ integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
+
+quick-lru@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
+ integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+
+quick-lru@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+ integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+rc@^1.0.1, rc@^1.1.6, rc@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-dom@^16.14.0:
+ version "16.14.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89"
+ integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.19.1"
+
+react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-test-renderer@^16.8.3:
+ version "16.14.0"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.14.0.tgz#e98360087348e260c56d4fe2315e970480c228ae"
+ integrity sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==
+ dependencies:
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ react-is "^16.8.6"
+ scheduler "^0.19.1"
+
+react@>=16:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
+ integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+react@^16.13.1, react@^16.14.0:
+ version "16.14.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
+ integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+
+read-cmd-shim@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16"
+ integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==
+ dependencies:
+ graceful-fs "^4.1.2"
+
+"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a"
+ integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==
+ dependencies:
+ glob "^7.1.1"
+ json-parse-even-better-errors "^2.3.0"
+ normalize-package-data "^2.0.0"
+ npm-normalize-package-bin "^1.0.0"
+
+read-package-tree@^5.1.6:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636"
+ integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==
+ dependencies:
+ read-package-json "^2.0.0"
+ readdir-scoped-modules "^1.0.0"
+ util-promisify "^2.1.0"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
+ integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^3.0.0"
+
+read-pkg-up@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
+ integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==
+ dependencies:
+ find-up "^3.0.0"
+ read-pkg "^3.0.0"
+
+read-pkg-up@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-6.0.0.tgz#da75ce72762f2fa1f20c5a40d4dd80c77db969e3"
+ integrity sha512-odtTvLl+EXo1eTsMnoUHRmg/XmXdTkwXVxy4VFE9Kp6cCq7b3l7QMdBndND3eAFzrbSAXC/WCUOQQ9rLjifKZw==
+ dependencies:
+ find-up "^4.0.0"
+ read-pkg "^5.1.1"
+ type-fest "^0.5.0"
+
+read-pkg-up@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
+ dependencies:
+ find-up "^4.1.0"
+ read-pkg "^5.2.0"
+ type-fest "^0.8.1"
+
+read-pkg@5.2.0, read-pkg@^5.1.1, read-pkg@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.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=
+ dependencies:
+ normalize-package-data "^2.3.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+
+read@1, read@~1.0.1:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
+ integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
+ dependencies:
+ mute-stream "~0.0.4"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readdir-scoped-modules@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309"
+ integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==
+ dependencies:
+ debuglog "^1.0.1"
+ dezalgo "^1.0.0"
+ graceful-fs "^4.1.2"
+ once "^1.3.0"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+realpath-native@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
+ integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==
+ dependencies:
+ util.promisify "^1.0.0"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
+ dependencies:
+ resolve "^1.1.6"
+
+rechoir@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca"
+ integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==
+ dependencies:
+ resolve "^1.9.0"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+redent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa"
+ integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=
+ dependencies:
+ indent-string "^3.0.0"
+ strip-indent "^2.0.0"
+
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
+regenerate-unicode-properties@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
+ integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+ integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.10.5:
+ version "0.10.5"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
+ integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.4:
+ version "0.13.7"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
+ integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
+
+regenerator-transform@^0.14.2:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"
+ integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
+ integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+regexpp@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
+ integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+
+regexpu-core@^4.7.1:
+ version "4.7.1"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6"
+ integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.2.0"
+ regjsgen "^0.5.1"
+ regjsparser "^0.6.4"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.2.0"
+
+registry-auth-token@^3.0.1:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e"
+ integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==
+ dependencies:
+ rc "^1.1.6"
+ safe-buffer "^5.0.1"
+
+registry-auth-token@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250"
+ integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==
+ dependencies:
+ rc "^1.2.8"
+
+registry-url@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
+ integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
+ dependencies:
+ rc "^1.0.1"
+
+registry-url@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
+ integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
+ dependencies:
+ rc "^1.2.8"
+
+regjsgen@^0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
+ integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
+
+regjsparser@^0.6.4:
+ version "0.6.9"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6"
+ integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==
+ dependencies:
+ jsesc "~0.5.0"
+
+release-it-lerna-changelog@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/release-it-lerna-changelog/-/release-it-lerna-changelog-3.1.0.tgz#cbcc877b40712e93a99a8b9a14e9e48290a82b9f"
+ integrity sha512-VehiRVpIB37XfggFcwMwDZ3ncXmD4npgM2tGGTfa3CN8MFCCJPPIRvaqHySDC/YV8mN7oLZeGSI/exrKXeybmA==
+ dependencies:
+ execa "^4.0.3"
+ lerna-changelog "^1.0.1"
+ mdast-util-from-markdown "^0.8.1"
+ tmp "^0.2.1"
+ validate-peer-dependencies "^1.0.0"
+ which "^2.0.2"
+
+release-it@^13.5.6:
+ version "13.7.1"
+ resolved "https://registry.yarnpkg.com/release-it/-/release-it-13.7.1.tgz#c23316bb538429c1576f969731df135a6016a32e"
+ integrity sha512-OAupGLMZJBGrGRJmb8RvZ8ZQAQquKlkGGYvgRrJmkHE+jnGdf+YSvEmItBv08CwhDcwCyXdTkkN/rJ2Flt68+g==
+ dependencies:
+ "@iarna/toml" "2.2.5"
+ "@octokit/rest" "18.0.4"
+ async-retry "1.3.1"
+ chalk "4.1.0"
+ cosmiconfig "7.0.0"
+ debug "4.1.1"
+ deprecated-obj "2.0.0"
+ detect-repo-changelog "1.0.1"
+ execa "4.0.3"
+ find-up "5.0.0"
+ form-data "3.0.0"
+ git-url-parse "11.1.3"
+ globby "11.0.1"
+ got "11.6.0"
+ import-cwd "3.0.0"
+ inquirer "7.3.3"
+ is-ci "2.0.0"
+ lodash "4.17.20"
+ mime-types "2.1.27"
+ ora "5.0.0"
+ os-name "4.0.0"
+ parse-json "5.1.0"
+ semver "7.3.2"
+ shelljs "0.8.4"
+ supports-color "7.2.0"
+ update-notifier "4.1.1"
+ url-join "4.0.1"
+ uuid "8.3.0"
+ window-size "1.1.1"
+ yaml "1.10.0"
+ yargs-parser "19.0.4"
+
+release-it@^14.2.1:
+ version "14.9.0"
+ resolved "https://registry.yarnpkg.com/release-it/-/release-it-14.9.0.tgz#7ac6ef284c9067c14313c64275e2e4b31fe9a9e1"
+ integrity sha512-Pn9GH60jKkL+dUkVxCyyiIhA9oySu/Q+8F9aExCggcppxfZbhRCxMgmk/iFh+/oejdzQq9zCZSudA2CmWOSKxQ==
+ dependencies:
+ "@iarna/toml" "2.2.5"
+ "@octokit/rest" "18.5.3"
+ async-retry "1.3.1"
+ chalk "4.1.1"
+ cosmiconfig "7.0.0"
+ debug "4.3.1"
+ deprecated-obj "2.0.0"
+ execa "5.0.0"
+ find-up "5.0.0"
+ form-data "4.0.0"
+ git-url-parse "11.4.4"
+ globby "11.0.3"
+ got "11.8.2"
+ import-cwd "3.0.0"
+ inquirer "8.1.0"
+ is-ci "3.0.0"
+ lodash "4.17.21"
+ mime-types "2.1.30"
+ ora "5.4.0"
+ os-name "4.0.0"
+ parse-json "5.2.0"
+ semver "7.3.5"
+ shelljs "0.8.4"
+ update-notifier "5.1.0"
+ url-join "4.0.1"
+ uuid "8.3.2"
+ yaml "1.10.2"
+ yargs-parser "20.2.7"
+
+remark-parse@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640"
+ integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==
+ dependencies:
+ mdast-util-from-markdown "^0.8.0"
+
+remark-stringify@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894"
+ integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==
+ dependencies:
+ mdast-util-to-markdown "^0.6.0"
+
+remark@^13.0.0:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425"
+ integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==
+ dependencies:
+ remark-parse "^9.0.0"
+ remark-stringify "^9.0.0"
+ unified "^9.1.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+ integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
+
+repeat-string@^1.0.0, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request-promise-core@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
+ integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
+ dependencies:
+ lodash "^4.17.19"
+
+request-promise-native@^1.0.5:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
+ integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
+ dependencies:
+ request-promise-core "1.1.4"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
+request@^2.74.0, request@^2.87.0, request@^2.88.0:
+ version "2.88.2"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+reselect@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
+ integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=
+
+resolve-alpn@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.1.2.tgz#30b60cfbb0c0b8dc897940fe13fe255afcdd4d28"
+ integrity sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA==
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@5.0.0, resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-global@1.0.0, resolve-global@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255"
+ integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==
+ dependencies:
+ global-dirs "^0.1.1"
+
+resolve-package-path@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-3.1.0.tgz#35faaa5d54a9c7dd481eb7c4b2a44410c9c763d8"
+ integrity sha512-2oC2EjWbMJwvSN6Z7DbDfJMnD8MYEouaLn5eIX0j8XwPsYCVIyY9bbnX88YHVkbr8XHqvZrYbxaLPibfTYKZMA==
+ dependencies:
+ path-root "^0.1.1"
+ resolve "^1.17.0"
+
+resolve-path@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7"
+ integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=
+ dependencies:
+ http-errors "~1.6.2"
+ path-is-absolute "1.0.1"
+
+resolve-pkg@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pkg/-/resolve-pkg-2.0.0.tgz#ac06991418a7623edc119084edc98b0e6bf05a41"
+ integrity sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.9.0:
+ version "1.20.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
+ integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
+ dependencies:
+ is-core-module "^2.2.0"
+ path-parse "^1.0.6"
+
+resolve@^2.0.0-next.3:
+ version "2.0.0-next.3"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
+ integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
+ dependencies:
+ is-core-module "^2.2.0"
+ path-parse "^1.0.6"
+
+responselike@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
+ integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
+ dependencies:
+ lowercase-keys "^1.0.0"
+
+responselike@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723"
+ integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==
+ dependencies:
+ lowercase-keys "^2.0.0"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retry@0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
+
+retry@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
+ integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^3.0.0, rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rollup@1.20.0||^2.0.0:
+ version "2.52.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.52.1.tgz#dd1cc178d70cf35c48d943fc06fdc32d546e6876"
+ integrity sha512-/SPqz8UGnp4P1hq6wc9gdTqA2bXQXGx13TtoL03GBm6qGRI6Hm3p4Io7GeiHNLl0BsQAne1JNYY+q/apcY933w==
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+rsvp@^4.8.4:
+ version "4.8.5"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+
+run-async@^2.2.0, run-async@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
+run-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"
+ integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+rxjs@^6.4.0, rxjs@^6.6.0, rxjs@^6.6.6:
+ version "6.6.7"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
+ integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sane@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
+ integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
+ dependencies:
+ "@cnakazawa/watch" "^1.0.3"
+ anymatch "^2.0.0"
+ capture-exit "^2.0.0"
+ exec-sh "^0.3.2"
+ execa "^1.0.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+scheduler@^0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
+ integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^2.6.5:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
+ integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
+ dependencies:
+ "@types/json-schema" "^7.0.5"
+ ajv "^6.12.4"
+ ajv-keywords "^3.5.2"
+
+schema-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
+ integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==
+ dependencies:
+ "@types/json-schema" "^7.0.6"
+ ajv "^6.12.5"
+ ajv-keywords "^3.5.2"
+
+semver-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
+semver-diff@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
+ dependencies:
+ semver "^5.0.3"
+
+semver-diff@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b"
+ integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==
+ dependencies:
+ semver "^6.3.0"
+
+"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@6.3.0, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@7.3.2:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
+ integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+
+semver@7.3.5, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5:
+ version "7.3.5"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+ integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
+ dependencies:
+ lru-cache "^6.0.0"
+
+serialize-javascript@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+ integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+ dependencies:
+ randombytes "^2.1.0"
+
+serialize-javascript@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
+ integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
+ dependencies:
+ randombytes "^2.1.0"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shallow-clone@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+ integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+ dependencies:
+ kind-of "^6.0.2"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shelljs@0.8.4, shelljs@^0.8.3:
+ version "0.8.4"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2"
+ integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
+side-channel@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ dependencies:
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+slide@^1.1.3, slide@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+ integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=
+
+smart-buffer@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba"
+ integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+socks-proxy-agent@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386"
+ integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==
+ dependencies:
+ agent-base "~4.2.1"
+ socks "~2.3.2"
+
+socks@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3"
+ integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==
+ dependencies:
+ ip "1.1.5"
+ smart-buffer "^4.1.0"
+
+sort-keys@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+sort-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
+ integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0, source-list-map@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+ integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
+source-map@^0.5.0, source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.3, source-map@~0.7.2:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f"
+ integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==
+
+specificity@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019"
+ integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==
+
+split-on-first@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
+ integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+split2@^3.0.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
+ integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
+ dependencies:
+ readable-stream "^3.0.0"
+
+split@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
+ integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
+ dependencies:
+ through "2"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^5.2.4:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06"
+ integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==
+ dependencies:
+ safe-buffer "^5.1.1"
+
+ssri@^6.0.0, ssri@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
+ integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+ssri@^7.0.0, ssri@^7.0.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.1.tgz#33e44f896a967158e3c63468e47ec46613b95b5f"
+ integrity sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw==
+ dependencies:
+ figgy-pudding "^3.5.1"
+ minipass "^3.1.1"
+
+stack-utils@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b"
+ integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.0.0, statuses@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-events@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5"
+ integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==
+ dependencies:
+ stubs "^3.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+strict-uri-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+ integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+
+strict-uri-encode@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
+ integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
+
+string-length@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
+ integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
+ integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string.prototype.matchall@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da"
+ integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.2"
+ get-intrinsic "^1.1.1"
+ has-symbols "^1.0.2"
+ internal-slot "^1.0.3"
+ regexp.prototype.flags "^1.3.1"
+ side-channel "^1.0.4"
+
+string.prototype.trimend@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
+ integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+string.prototype.trimstart@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
+ integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-indent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
+ integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
+
+strip-indent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ dependencies:
+ min-indent "^1.0.0"
+
+strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strong-log-transformer@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10"
+ integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==
+ dependencies:
+ duplexer "^0.1.1"
+ minimist "^1.2.0"
+ through "^2.3.4"
+
+stubs@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b"
+ integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls=
+
+style-search@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
+ integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=
+
+stylelint-config-recommended@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz#e0e547434016c5539fe2650afd58049a2fd1d657"
+ integrity sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==
+
+stylelint@^13.7.2:
+ version "13.13.1"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.13.1.tgz#fca9c9f5de7990ab26a00f167b8978f083a18f3c"
+ integrity sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==
+ dependencies:
+ "@stylelint/postcss-css-in-js" "^0.37.2"
+ "@stylelint/postcss-markdown" "^0.36.2"
+ autoprefixer "^9.8.6"
+ balanced-match "^2.0.0"
+ chalk "^4.1.1"
+ cosmiconfig "^7.0.0"
+ debug "^4.3.1"
+ execall "^2.0.0"
+ fast-glob "^3.2.5"
+ fastest-levenshtein "^1.0.12"
+ file-entry-cache "^6.0.1"
+ get-stdin "^8.0.0"
+ global-modules "^2.0.0"
+ globby "^11.0.3"
+ globjoin "^0.1.4"
+ html-tags "^3.1.0"
+ ignore "^5.1.8"
+ import-lazy "^4.0.0"
+ imurmurhash "^0.1.4"
+ known-css-properties "^0.21.0"
+ lodash "^4.17.21"
+ log-symbols "^4.1.0"
+ mathml-tag-names "^2.1.3"
+ meow "^9.0.0"
+ micromatch "^4.0.4"
+ normalize-selector "^0.2.0"
+ postcss "^7.0.35"
+ postcss-html "^0.36.0"
+ postcss-less "^3.1.4"
+ postcss-media-query-parser "^0.2.3"
+ postcss-resolve-nested-selector "^0.1.1"
+ postcss-safe-parser "^4.0.2"
+ postcss-sass "^0.4.4"
+ postcss-scss "^2.1.1"
+ postcss-selector-parser "^6.0.5"
+ postcss-syntax "^0.36.2"
+ postcss-value-parser "^4.1.0"
+ resolve-from "^5.0.0"
+ slash "^3.0.0"
+ specificity "^0.4.1"
+ string-width "^4.2.2"
+ strip-ansi "^6.0.0"
+ style-search "^0.1.0"
+ sugarss "^2.0.0"
+ svg-tags "^1.0.0"
+ table "^6.6.0"
+ v8-compile-cache "^2.3.0"
+ write-file-atomic "^3.0.3"
+
+stylis@^3.5.4:
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe"
+ integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==
+
+sugarss@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d"
+ integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==
+ dependencies:
+ postcss "^7.0.2"
+
+superstruct@^0.12.1:
+ version "0.12.2"
+ resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.12.2.tgz#214d419e2c1eabd87d7a3774150664dfe53506e0"
+ integrity sha512-yu+WNa/nSbFa+VBeR2KibfCeIQSKh/aD7G5eFD4Rx4W36MWE3G6SzU3BixDOArLv56u2bz6YEePsHSsioojuXw==
+
+supports-color@7.2.0, supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^8.0.0:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+svg-tags@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
+ integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
+
+symbol-tree@^3.2.2:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+table@^6.0.9, table@^6.6.0:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"
+ integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==
+ dependencies:
+ ajv "^8.0.1"
+ lodash.clonedeep "^4.5.0"
+ lodash.truncate "^4.4.2"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tapable@^2.1.1, tapable@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b"
+ integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==
+
+tar-stream@^2.1.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
+ integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
+ dependencies:
+ bl "^4.0.3"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+tar@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
+ integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.12"
+ inherits "2"
+
+tar@^4.4.10, tar@^4.4.12, tar@^4.4.8:
+ version "4.4.13"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
+ integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.8.6"
+ minizlib "^1.2.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.3"
+
+tar@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83"
+ integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^3.0.0"
+ minizlib "^2.1.1"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
+teeny-request@7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.0.1.tgz#bdd41fdffea5f8fbc0d29392cb47bec4f66b2b4c"
+ integrity sha512-sasJmQ37klOlplL4Ia/786M5YlOcoLGQyq2TE4WHSRupbAuDaQW0PfVxV4MtdBtRJ4ngzS+1qim8zP6Zp35qCw==
+ dependencies:
+ http-proxy-agent "^4.0.0"
+ https-proxy-agent "^5.0.0"
+ node-fetch "^2.6.1"
+ stream-events "^1.0.5"
+ uuid "^8.0.0"
+
+temp-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
+ integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
+
+temp-write@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492"
+ integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=
+ dependencies:
+ graceful-fs "^4.1.2"
+ is-stream "^1.1.0"
+ make-dir "^1.0.0"
+ pify "^3.0.0"
+ temp-dir "^1.0.0"
+ uuid "^3.0.1"
+
+term-size@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
+ integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
+ dependencies:
+ execa "^0.7.0"
+
+term-size@^2.1.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"
+ integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==
+
+terser-webpack-plugin@^1.4.3:
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
+ integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^4.0.0"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser-webpack-plugin@^5.1.1:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af"
+ integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==
+ dependencies:
+ jest-worker "^27.0.2"
+ p-limit "^3.1.0"
+ schema-utils "^3.0.0"
+ serialize-javascript "^5.0.1"
+ source-map "^0.6.1"
+ terser "^5.7.0"
+
+terser@^4.1.2:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
+ integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+terser@^5.7.0:
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693"
+ integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.7.2"
+ source-map-support "~0.5.19"
+
+test-exclude@^5.2.3:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0"
+ integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==
+ dependencies:
+ glob "^7.1.3"
+ minimatch "^3.0.4"
+ read-pkg-up "^4.0.0"
+ require-main-filename "^2.0.0"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
+text-extensions@^1.0.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
+ integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
+throat@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
+ integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
+
+through2@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through2@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4"
+ integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "2 || 3"
+
+through2@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
+ integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
+ dependencies:
+ readable-stream "3"
+
+through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+timed-out@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+ integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+
+timers-browserify@^2.0.4:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee"
+ integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+tmp@0.0.31:
+ version "0.0.31"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
+ integrity sha1-jzirlDjhcxXl29izZX6L+yd65Kc=
+ dependencies:
+ os-tmpdir "~1.0.1"
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+tmp@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
+ integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
+ dependencies:
+ rimraf "^3.0.0"
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-readable-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
+ integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
+ dependencies:
+ punycode "^2.1.0"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+trim-newlines@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
+ integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
+
+trim-newlines@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
+ integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
+
+trim-off-newlines@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
+ integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
+
+trough@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
+ integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
+
+ts-invariant@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.9.0.tgz#4c60e9159a31742ab0103f13d7f63314fb5409c9"
+ integrity sha512-+JqhKqywk+ue5JjAC6eTWe57mOIxYXypMUkBDStkAzvnlfkDJ1KGyeMuNRMwOt6GXzHSC1UT9JecowpZDmgXqA==
+ dependencies:
+ tslib "^2.1.0"
+
+tsconfig-paths@^3.9.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
+ integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.1"
+ minimist "^1.2.0"
+ strip-bom "^3.0.0"
+
+tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
+ integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
+
+tslint@5.14.0:
+ version "5.14.0"
+ resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.14.0.tgz#be62637135ac244fc9b37ed6ea5252c9eba1616e"
+ integrity sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==
+ dependencies:
+ babel-code-frame "^6.22.0"
+ builtin-modules "^1.1.1"
+ chalk "^2.3.0"
+ commander "^2.12.1"
+ diff "^3.2.0"
+ glob "^7.1.1"
+ js-yaml "^3.7.0"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ resolve "^1.3.2"
+ semver "^5.3.0"
+ tslib "^1.8.0"
+ tsutils "^2.29.0"
+
+tsscmp@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
+ integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
+
+tsutils@^2.29.0:
+ version "2.29.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
+ integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
+ dependencies:
+ tslib "^1.8.1"
+
+tsutils@^3.21.0:
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+ integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+ dependencies:
+ tslib "^1.8.1"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-fest@^0.18.0:
+ version "0.18.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
+ integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type-fest@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+ integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
+
+type-fest@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2"
+ integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==
+
+type-fest@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+type-is@^1.6.16:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript@^3.9.7:
+ version "3.9.10"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
+ integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
+
+uglify-js@^3.1.4:
+ version "3.13.9"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.9.tgz#4d8d21dcd497f29cfd8e9378b9df123ad025999b"
+ integrity sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g==
+
+uid-number@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+umask@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
+ integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=
+
+unbox-primitive@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
+ integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
+ dependencies:
+ function-bind "^1.1.1"
+ has-bigints "^1.0.1"
+ has-symbols "^1.0.2"
+ which-boxed-primitive "^1.0.2"
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"
+ integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
+ integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
+
+unified@^9.1.0:
+ version "9.2.1"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3"
+ integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-buffer "^2.0.0"
+ is-plain-obj "^2.0.0"
+ trough "^1.0.0"
+ vfile "^4.0.0"
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unique-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
+ dependencies:
+ crypto-random-string "^1.0.0"
+
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ dependencies:
+ crypto-random-string "^2.0.0"
+
+unist-util-find-all-after@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6"
+ integrity sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==
+ dependencies:
+ unist-util-is "^4.0.0"
+
+unist-util-is@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797"
+ integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==
+
+unist-util-stringify-position@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
+ integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
+ dependencies:
+ "@types/unist" "^2.0.2"
+
+universal-user-agent@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557"
+ integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==
+ dependencies:
+ os-name "^3.1.0"
+
+universal-user-agent@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
+ integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+unzip-response@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
+ integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
+
+upath@^1.1.1, upath@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+update-notifier@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.1.tgz#895fc8562bbe666179500f9f2cebac4f26323746"
+ integrity sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg==
+ dependencies:
+ boxen "^4.2.0"
+ chalk "^3.0.0"
+ configstore "^5.0.1"
+ has-yarn "^2.1.0"
+ import-lazy "^2.1.0"
+ is-ci "^2.0.0"
+ is-installed-globally "^0.3.1"
+ is-npm "^4.0.0"
+ is-yarn-global "^0.3.0"
+ latest-version "^5.0.0"
+ pupa "^2.0.1"
+ semver-diff "^3.1.1"
+ xdg-basedir "^4.0.0"
+
+update-notifier@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9"
+ integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==
+ dependencies:
+ boxen "^5.0.0"
+ chalk "^4.1.0"
+ configstore "^5.0.1"
+ has-yarn "^2.1.0"
+ import-lazy "^2.1.0"
+ is-ci "^2.0.0"
+ is-installed-globally "^0.4.0"
+ is-npm "^5.0.0"
+ is-yarn-global "^0.3.0"
+ latest-version "^5.1.0"
+ pupa "^2.1.1"
+ semver "^7.3.4"
+ semver-diff "^3.1.1"
+ xdg-basedir "^4.0.0"
+
+update-notifier@^2.1.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6"
+ integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==
+ dependencies:
+ boxen "^1.2.1"
+ chalk "^2.0.1"
+ configstore "^3.0.0"
+ import-lazy "^2.1.0"
+ is-ci "^1.0.10"
+ is-installed-globally "^0.1.0"
+ is-npm "^1.0.0"
+ latest-version "^3.0.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+urijs@^1.19.0:
+ version "1.19.6"
+ resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.6.tgz#51f8cb17ca16faefb20b9a31ac60f84aa2b7c870"
+ integrity sha512-eSXsXZ2jLvGWeLYlQA3Gh36BcjF+0amo92+wHPyN1mdR8Nxf75fuEuYTd9c0a+m/vhCjRK0ESlE9YNLW+E1VEw==
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-join@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
+ integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
+ dependencies:
+ prepend-http "^1.0.1"
+
+url-parse-lax@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
+ integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
+ dependencies:
+ prepend-http "^2.0.0"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+urlgrey@0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f"
+ integrity sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util-promisify@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53"
+ integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=
+ dependencies:
+ object.getownpropertydescriptors "^2.0.3"
+
+util.promisify@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b"
+ integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ for-each "^0.3.3"
+ has-symbols "^1.0.1"
+ object.getownpropertydescriptors "^2.1.1"
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+uuid@8.3.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea"
+ integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==
+
+uuid@8.3.2, uuid@^8.0.0:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+uuid@^3.0.1, uuid@^3.3.2:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+v8-compile-cache@^2.0.2, v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1, v8-compile-cache@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
+ integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+
+validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+validate-npm-package-name@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e"
+ integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34=
+ dependencies:
+ builtins "^1.0.3"
+
+validate-peer-dependencies@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/validate-peer-dependencies/-/validate-peer-dependencies-1.2.0.tgz#22aab93c514f4fda457d36c80685e8b1160d2036"
+ integrity sha512-nd2HUpKc6RWblPZQ2GDuI65sxJ2n/UqZwSBVtj64xlWjMx0m7ZB2m9b2JS3v1f+n9VWH/dd1CMhkHfP6pIdckA==
+ dependencies:
+ resolve-package-path "^3.1.0"
+ semver "^7.3.2"
+
+vary@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vfile-message@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
+ integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+vfile@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624"
+ integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ is-buffer "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-message "^2.0.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+w3c-hr-time@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+ dependencies:
+ browser-process-hrtime "^1.0.0"
+
+walker@^1.0.7, walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ dependencies:
+ makeerror "1.0.x"
+
+watchpack-chokidar2@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
+ integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==
+ dependencies:
+ chokidar "^2.1.8"
+
+watchpack@^1.7.4:
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
+ integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
+ dependencies:
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+ optionalDependencies:
+ chokidar "^3.4.1"
+ watchpack-chokidar2 "^2.0.1"
+
+watchpack@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce"
+ integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==
+ dependencies:
+ glob-to-regexp "^0.4.1"
+ graceful-fs "^4.1.2"
+
+wcwidth@^1.0.0, wcwidth@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+ integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
+ dependencies:
+ defaults "^1.0.3"
+
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+webpack-cli@^3.2.3:
+ version "3.3.12"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a"
+ integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==
+ dependencies:
+ chalk "^2.4.2"
+ cross-spawn "^6.0.5"
+ enhanced-resolve "^4.1.1"
+ findup-sync "^3.0.0"
+ global-modules "^2.0.0"
+ import-local "^2.0.0"
+ interpret "^1.4.0"
+ loader-utils "^1.4.0"
+ supports-color "^6.1.0"
+ v8-compile-cache "^2.1.1"
+ yargs "^13.3.2"
+
+webpack-plugin-ramdisk@^0.1.2:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/webpack-plugin-ramdisk/-/webpack-plugin-ramdisk-0.1.8.tgz#f97db5f7c57a961baf7682872437b9f372ac28d4"
+ integrity sha512-JXIZZHKEeYA45yNPp5XDJ/VSt+j3yV2/zw5trF30I4lYcrWRnQ/45yKrmeu8dtPe4Wxm36os20XAtN6u1NAfqQ==
+ dependencies:
+ chalk "^4.1.0"
+ execa "^4.0.3"
+ superstruct "^0.12.1"
+
+webpack-plugin-serve@^0.12.1:
+ version "0.12.1"
+ resolved "https://registry.yarnpkg.com/webpack-plugin-serve/-/webpack-plugin-serve-0.12.1.tgz#a6d7930e900f74189cd8045f8c1a7d55ca4de282"
+ integrity sha512-q/MOuTcEvK98leIbOM5JvHrKACG9nMKILA/Pbv/3G8P7sAvRuDCk6NgWX7Hzpj5Y/DsoZIgtGSQRsHSq+sW4cA==
+ dependencies:
+ "@hapi/joi" "^15.1.0"
+ chalk "^2.4.1"
+ connect-history-api-fallback "^1.5.0"
+ globby "^10.0.1"
+ http-proxy-middleware "^0.19.0"
+ is-path-cwd "^2.2.0"
+ is-promise "^2.1.0"
+ koa "^2.5.3"
+ koa-compress "^3.0.0"
+ koa-connect "^2.0.1"
+ koa-route "^3.2.0"
+ koa-static "^5.0.0"
+ loglevelnext "^3.0.0"
+ nanoid "^2.0.0"
+ onetime "^5.1.0"
+ opn "^6.0.0"
+ p-defer "^3.0.0"
+ read-pkg-up "^6.0.0"
+ rimraf "^2.6.3"
+ strip-ansi "^5.0.0"
+ webpack-plugin-ramdisk "^0.1.2"
+ ws "^7.1.0"
+
+webpack-serve@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/webpack-serve/-/webpack-serve-3.2.0.tgz#b4cf4738712f469fef5d1aa951ceb565390a1405"
+ integrity sha512-voK36uw1PpW4jYHjSthUNVeghlfNdnO56iyKdMw7P/MKPmD6WbzwslwnjgDMz33IDRlfAiT+EVVNSa+14TAkJQ==
+ dependencies:
+ chalk "^2.4.2"
+ decamelize "^3.0.0"
+ import-local "^3.0.1"
+ is-plain-obj "^2.0.0"
+ object-path "^0.11.4"
+ pkg-conf "^3.0.0"
+ rechoir "^0.7.0"
+ v8-compile-cache "^2.0.2"
+ webpack-plugin-serve "^0.12.1"
+ yargs-parser "^14.0.0"
+
+webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack-sources@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa"
+ integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==
+ dependencies:
+ source-list-map "^2.0.1"
+ source-map "^0.6.1"
+
+webpack@^4.44.2:
+ version "4.46.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542"
+ integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/wasm-edit" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ acorn "^6.4.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.5.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.3"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.7.4"
+ webpack-sources "^1.4.1"
+
+webpack@^5.6.0:
+ version "5.39.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.39.1.tgz#d1e014b6d71e1aef385316ad528f21cd5b1f9784"
+ integrity sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw==
+ dependencies:
+ "@types/eslint-scope" "^3.7.0"
+ "@types/estree" "^0.0.47"
+ "@webassemblyjs/ast" "1.11.0"
+ "@webassemblyjs/wasm-edit" "1.11.0"
+ "@webassemblyjs/wasm-parser" "1.11.0"
+ acorn "^8.2.1"
+ browserslist "^4.14.5"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^5.8.0"
+ es-module-lexer "^0.4.0"
+ eslint-scope "5.1.1"
+ events "^3.2.0"
+ glob-to-regexp "^0.4.1"
+ graceful-fs "^4.2.4"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^4.2.0"
+ mime-types "^2.1.27"
+ neo-async "^2.6.2"
+ schema-utils "^3.0.0"
+ tapable "^2.1.1"
+ terser-webpack-plugin "^5.1.1"
+ watchpack "^2.2.0"
+ webpack-sources "^2.3.0"
+
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^6.4.1:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
+ integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+whatwg-url@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+which-boxed-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ dependencies:
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1, which@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+widest-line@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
+ integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
+ dependencies:
+ string-width "^2.1.1"
+
+widest-line@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
+ integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
+ dependencies:
+ string-width "^4.0.0"
+
+window-size@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-1.1.1.tgz#9858586580ada78ab26ecd6978a6e03115c1af20"
+ integrity sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==
+ dependencies:
+ define-property "^1.0.0"
+ is-number "^3.0.0"
+
+windows-release@^3.1.0:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999"
+ integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==
+ dependencies:
+ execa "^1.0.0"
+
+windows-release@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-4.0.0.tgz#4725ec70217d1bf6e02c7772413b29cdde9ec377"
+ integrity sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==
+ dependencies:
+ execa "^4.0.2"
+
+word-wrap@^1.2.3, word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wordwrap@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529"
+ integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
+ integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write-file-atomic@^3.0.0, write-file-atomic@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+write-json-file@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f"
+ integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=
+ dependencies:
+ detect-indent "^5.0.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ pify "^3.0.0"
+ sort-keys "^2.0.0"
+ write-file-atomic "^2.0.0"
+
+write-json-file@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a"
+ integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==
+ dependencies:
+ detect-indent "^5.0.0"
+ graceful-fs "^4.1.15"
+ make-dir "^2.1.0"
+ pify "^4.0.1"
+ sort-keys "^2.0.0"
+ write-file-atomic "^2.4.2"
+
+write-pkg@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21"
+ integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw==
+ dependencies:
+ sort-keys "^2.0.0"
+ write-json-file "^2.2.0"
+
+ws@^5.2.0:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d"
+ integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+ws@^7.1.0:
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.0.tgz#0033bafea031fb9df041b2026fc72a571ca44691"
+ integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==
+
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+ integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
+
+xdg-basedir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
+ integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xregexp@^4.2.4:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65"
+ integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==
+ dependencies:
+ "@babel/runtime-corejs3" "^7.12.1"
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
+ integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
+ integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
+
+yaml@1.10.2, yaml@^1.10.0:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yargs-parser@19.0.4:
+ version "19.0.4"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-19.0.4.tgz#99183a3a59268b205c6b04177f2a5bfb46e79ba7"
+ integrity sha512-eXeQm7yXRjPFFyf1voPkZgXQZJjYfjgQUmGPbD2TLtZeIYzvacgWX7sQ5a1HsRgVP+pfKAkRZDNtTGev4h9vhw==
+
+yargs-parser@20.2.7, yargs-parser@^20.2.2, yargs-parser@^20.2.3:
+ version "20.2.7"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a"
+ integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==
+
+yargs-parser@^10.0.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
+ integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs-parser@^13.1.2:
+ version "13.1.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+ integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-14.0.0.tgz#42e25777b06718ec99eac2c3a98ad3de73b6818f"
+ integrity sha512-zn/Mnx+tbFjkCFUodEpjXckNS65NfpB5oyqOkDDEG/8uxlfLZJu2IoBLQFjukUkn9rBbGkVYNzrDh6qy4NUd3g==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^15.0.1:
+ version "15.0.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3"
+ integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^18.1.2:
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@^13.0.0, yargs@^13.2.1, yargs@^13.3.0, yargs@^13.3.2:
+ version "13.3.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+ integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.2"
+
+yargs@^14.2.2:
+ version "14.2.3"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
+ integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
+ dependencies:
+ cliui "^5.0.0"
+ decamelize "^1.2.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^15.0.1"
+
+yargs@^15.0.1, yargs@^15.1.0, yargs@^15.3.1:
+ version "15.4.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+ integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+ dependencies:
+ cliui "^6.0.0"
+ decamelize "^1.2.0"
+ find-up "^4.1.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^4.2.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^18.1.2"
+
+yargs@^16.0.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+ylru@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f"
+ integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+zwitch@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
+ integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==
diff --git a/README b/README
index 9bece32..c3e3cac 100644
--- a/README
+++ b/README
@@ -3,6 +3,20 @@ The packages in this repository are managed with git subtree.
git subtree -P fflate add --squash https://github.com/101arrowz/fflate v0.7.1
git subtree -P cancellationtoken add --squash https://github.com/conradreuter/cancellationtoken v2.3.0-rc1
git subtree -P axios add --squash https://github.com/axios/axios v0.21.1
-git subtree -P big-integer add --squash https://github.com/peterolson/BigInteger.js v1.6.40
+git subtree -P big-integer add --squash https://github.com/peterolson/BigInteger.js 67a715c917bd0eb0c106c45935b889269a24dcef #v1.6.48
git subtree -P jed add --squash https://github.com/messageformat/Jed 1.1.1
git subtree -P follow-redirects add --squash https://github.com/follow-redirects/follow-redirects v1.14.2
+
+#webextension dependencies
+git subtree -P preact add --squash https://github.com/preactjs/preact 10.5.14
+git subtree -P @linaria add --squash https://github.com/callstack/linaria v3.0.0-beta.11
+git subtree -P history add --squash https://github.com/remix-run/history v4.10.1
+git subtree -P preact-router add --squash https://github.com/preactjs/preact-router 3.2.1
+git subtree -P date-fns add --squash https://github.com/date-fns/date-fns v2.22.1
+
+#history dependencies
+git subtree -P tiny-invariant add --squash https://github.com/alexreardon/tiny-invariant v1.0.2
+git subtree -P tiny-warning add --squash https://github.com/alexreardon/tiny-warning v1.0.0
+git subtree -P value-equal add --squash https://github.com/mjackson/value-equal v1.0.1
+git subtree -P resolve-pathname add --squash https://github.com/mjackson/resolve-pathname v3.0.0
+
diff --git a/big-integer/.travis.yml b/big-integer/.travis.yml
index 66095ec..513bc8e 100644
--- a/big-integer/.travis.yml
+++ b/big-integer/.travis.yml
@@ -1,11 +1,8 @@
language: node_js
node_js:
- - "9"
- - "8"
- - "7"
- - "6"
- - "5"
- - "4"
+ - "12"
+ - "11"
+ - "10"
script:
- npm test
- cat ./coverage/lcov.info | ./node_modules/.bin/coveralls
diff --git a/big-integer/BigInteger.d.ts b/big-integer/BigInteger.d.ts
index 76b8409..354218e 100644
--- a/big-integer/BigInteger.d.ts
+++ b/big-integer/BigInteger.d.ts
@@ -8,7 +8,7 @@ export as namespace bigInt;
declare var bigInt: bigInt.BigIntegerStatic;
declare namespace bigInt {
- type BigNumber = number | string | BigInteger;
+ type BigNumber = number | bigint | string | BigInteger;
interface BigIntegerStatic {
/**
@@ -22,6 +22,11 @@ declare namespace bigInt {
(number: number): BigInteger;
/**
+ * Parse a Javascript native bigint into a bigInt.
+ */
+ (number: bigint): BigInteger;
+
+ /**
* Parse a string into a bigInt.
* Default base is 10.
* Default alphabet is "0123456789abcdefghijklmnopqrstuvwxyz".
@@ -79,7 +84,7 @@ declare namespace bigInt {
/**
* Returns a random number between min and max.
*/
- randBetween: (min: BigNumber, max: BigNumber) => BigInteger;
+ randBetween: (min: BigNumber, max: BigNumber, rng?: () => number) => BigInteger;
/**
* Equivalent to bigInt(0).
@@ -200,7 +205,7 @@ declare namespace bigInt {
/**
* Returns true if the number is very likely to be prime, false otherwise.
*/
- isProbablePrime(iterations?: number): boolean;
+ isProbablePrime(iterations?: number, rng?: () => number): boolean;
/**
* Returns true if the number is 1 or -1, false otherwise.
@@ -359,7 +364,7 @@ declare namespace bigInt {
/**
* Converts a bigInt to a string.
*/
- toString(radix?: number): string;
+ toString(radix?: number, alphabet?: string): string;
/**
* Converts a bigInt to a string. This method is called behind the scenes in JSON.stringify.
diff --git a/big-integer/BigInteger.js b/big-integer/BigInteger.js
index 228d36b..478a030 100644
--- a/big-integer/BigInteger.js
+++ b/big-integer/BigInteger.js
@@ -609,12 +609,18 @@ var bigInt = (function (undefined) {
BigInteger.prototype.divide = function (v) {
return divModAny(this, v)[0];
};
- NativeBigInt.prototype.over = NativeBigInt.prototype.divide = SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;
+ NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) {
+ return new NativeBigInt(this.value / parseValue(v).value);
+ };
+ SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;
BigInteger.prototype.mod = function (v) {
return divModAny(this, v)[1];
};
- NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;
+ NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) {
+ return new NativeBigInt(this.value % parseValue(v).value);
+ };
+ SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;
BigInteger.prototype.pow = function (v) {
var n = parseValue(v),
@@ -648,21 +654,27 @@ var bigInt = (function (undefined) {
};
SmallInteger.prototype.pow = BigInteger.prototype.pow;
- var pow;
- if (supportsNativeBigInt) {
- // forced to use eval because ** is a syntax error on pre-ECMAScript2017 environments.
- pow = eval("(a,b)=>a**b");
- }
-
NativeBigInt.prototype.pow = function (v) {
var n = parseValue(v);
var a = this.value, b = n.value;
- if (b === BigInt(0)) return Integer[1];
- if (a === BigInt(0)) return Integer[0];
- if (a === BigInt(1)) return Integer[1];
+ var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2);
+ if (b === _0) return Integer[1];
+ if (a === _0) return Integer[0];
+ if (a === _1) return Integer[1];
if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1];
- if (n.isNegative()) return new NativeBigInt(BigInt(0));
- return new NativeBigInt(pow(a, b));
+ if (n.isNegative()) return new NativeBigInt(_0);
+ var x = this;
+ var y = Integer[1];
+ while (true) {
+ if ((b & _1) === _1) {
+ y = y.times(x);
+ --b;
+ }
+ if (b === _0) break;
+ b /= _2;
+ x = x.square();
+ }
+ return y;
}
BigInteger.prototype.modPow = function (exp, mod) {
@@ -671,6 +683,10 @@ var bigInt = (function (undefined) {
if (mod.isZero()) throw new Error("Cannot take modPow with modulus 0");
var r = Integer[1],
base = this.mod(mod);
+ if (exp.isNegative()) {
+ exp = exp.multiply(Integer[-1]);
+ base = base.modInv(mod);
+ }
while (exp.isPositive()) {
if (base.isZero()) return Integer[0];
if (exp.isOdd()) r = r.multiply(base).mod(mod);
@@ -904,7 +920,7 @@ var bigInt = (function (undefined) {
var n = this.abs();
var bits = n.bitLength();
if (bits <= 64)
- return millerRabinTest(n, [2, 325, 9375, 28178, 450775, 9780504, 1795265022]);
+ return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]);
var logN = Math.log(2) * bits.toJSNumber();
var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN);
for (var a = [], i = 0; i < t; i++) {
@@ -914,13 +930,13 @@ var bigInt = (function (undefined) {
};
NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;
- BigInteger.prototype.isProbablePrime = function (iterations) {
+ BigInteger.prototype.isProbablePrime = function (iterations, rng) {
var isPrime = isBasicPrime(this);
if (isPrime !== undefined) return isPrime;
var n = this.abs();
var t = iterations === undefined ? 5 : iterations;
for (var a = [], i = 0; i < t; i++) {
- a.push(bigInt.randBetween(2, n.minus(2)));
+ a.push(bigInt.randBetween(2, n.minus(2), rng));
}
return millerRabinTest(n, a);
};
@@ -1152,17 +1168,18 @@ var bigInt = (function (undefined) {
b = parseValue(b).abs();
return a.divide(gcd(a, b)).multiply(b);
}
- function randBetween(a, b) {
+ function randBetween(a, b, rng) {
a = parseValue(a);
b = parseValue(b);
+ var usedRNG = rng || Math.random;
var low = min(a, b), high = max(a, b);
var range = high.subtract(low).add(1);
- if (range.isSmall) return low.add(Math.floor(Math.random() * range));
+ if (range.isSmall) return low.add(Math.floor(usedRNG() * range));
var digits = toBase(range, BASE).value;
var result = [], restricted = true;
for (var i = 0; i < digits.length; i++) {
var top = restricted ? digits[i] : BASE;
- var digit = truncate(Math.random() * top);
+ var digit = truncate(usedRNG() * top);
result.push(digit);
if (digit < top) restricted = false;
}
@@ -1430,7 +1447,7 @@ if (typeof module !== "undefined" && module.hasOwnProperty("exports")) {
//amd check
if (typeof define === "function" && define.amd) {
- define("big-integer", [], function () {
+ define( function () {
return bigInt;
});
}
diff --git a/big-integer/BigInteger.min.js b/big-integer/BigInteger.min.js
index dd656e4..5cc380c 100644
--- a/big-integer/BigInteger.min.js
+++ b/big-integer/BigInteger.min.js
@@ -1 +1 @@
-var bigInt=function(undefined){"use strict";var BASE=1e7,LOG_BASE=7,MAX_INT=9007199254740992,MAX_INT_ARR=smallToArray(MAX_INT),DEFAULT_ALPHABET="0123456789abcdefghijklmnopqrstuvwxyz";var supportsNativeBigInt=typeof BigInt==="function";function Integer(v,radix,alphabet,caseSensitive){if(typeof v==="undefined")return Integer[0];if(typeof radix!=="undefined")return+radix===10&&!alphabet?parseValue(v):parseBase(v,radix,alphabet,caseSensitive);return parseValue(v)}function BigInteger(value,sign){this.value=value;this.sign=sign;this.isSmall=false}BigInteger.prototype=Object.create(Integer.prototype);function SmallInteger(value){this.value=value;this.sign=value<0;this.isSmall=true}SmallInteger.prototype=Object.create(Integer.prototype);function NativeBigInt(value){this.value=value}NativeBigInt.prototype=Object.create(Integer.prototype);function isPrecise(n){return-MAX_INT<n&&n<MAX_INT}function smallToArray(n){if(n<1e7)return[n];if(n<1e14)return[n%1e7,Math.floor(n/1e7)];return[n%1e7,Math.floor(n/1e7)%1e7,Math.floor(n/1e14)]}function arrayToSmall(arr){trim(arr);var length=arr.length;if(length<4&&compareAbs(arr,MAX_INT_ARR)<0){switch(length){case 0:return 0;case 1:return arr[0];case 2:return arr[0]+arr[1]*BASE;default:return arr[0]+(arr[1]+arr[2]*BASE)*BASE}}return arr}function trim(v){var i=v.length;while(v[--i]===0);v.length=i+1}function createArray(length){var x=new Array(length);var i=-1;while(++i<length){x[i]=0}return x}function truncate(n){if(n>0)return Math.floor(n);return Math.ceil(n)}function add(a,b){var l_a=a.length,l_b=b.length,r=new Array(l_a),carry=0,base=BASE,sum,i;for(i=0;i<l_b;i++){sum=a[i]+b[i]+carry;carry=sum>=base?1:0;r[i]=sum-carry*base}while(i<l_a){sum=a[i]+carry;carry=sum===base?1:0;r[i++]=sum-carry*base}if(carry>0)r.push(carry);return r}function addAny(a,b){if(a.length>=b.length)return add(a,b);return add(b,a)}function addSmall(a,carry){var l=a.length,r=new Array(l),base=BASE,sum,i;for(i=0;i<l;i++){sum=a[i]-base+carry;carry=Math.floor(sum/base);r[i]=sum-carry*base;carry+=1}while(carry>0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}BigInteger.prototype.add=function(v){var n=parseValue(v);if(this.sign!==n.sign){return this.subtract(n.negate())}var a=this.value,b=n.value;if(n.isSmall){return new BigInteger(addSmall(a,Math.abs(b)),this.sign)}return new BigInteger(addAny(a,b),this.sign)};BigInteger.prototype.plus=BigInteger.prototype.add;SmallInteger.prototype.add=function(v){var n=parseValue(v);var a=this.value;if(a<0!==n.sign){return this.subtract(n.negate())}var b=n.value;if(n.isSmall){if(isPrecise(a+b))return new SmallInteger(a+b);b=smallToArray(Math.abs(b))}return new BigInteger(addSmall(b,Math.abs(a)),a<0)};SmallInteger.prototype.plus=SmallInteger.prototype.add;NativeBigInt.prototype.add=function(v){return new NativeBigInt(this.value+parseValue(v).value)};NativeBigInt.prototype.plus=NativeBigInt.prototype.add;function subtract(a,b){var a_l=a.length,b_l=b.length,r=new Array(a_l),borrow=0,base=BASE,i,difference;for(i=0;i<b_l;i++){difference=a[i]-borrow-b[i];if(difference<0){difference+=base;borrow=1}else borrow=0;r[i]=difference}for(i=b_l;i<a_l;i++){difference=a[i]-borrow;if(difference<0)difference+=base;else{r[i++]=difference;break}r[i]=difference}for(;i<a_l;i++){r[i]=a[i]}trim(r);return r}function subtractAny(a,b,sign){var value;if(compareAbs(a,b)>=0){value=subtract(a,b)}else{value=subtract(b,a);sign=!sign}value=arrayToSmall(value);if(typeof value==="number"){if(sign)value=-value;return new SmallInteger(value)}return new BigInteger(value,sign)}function subtractSmall(a,b,sign){var l=a.length,r=new Array(l),carry=-b,base=BASE,i,difference;for(i=0;i<l;i++){difference=a[i]+carry;carry=Math.floor(difference/base);difference%=base;r[i]=difference<0?difference+base:difference}r=arrayToSmall(r);if(typeof r==="number"){if(sign)r=-r;return new SmallInteger(r)}return new BigInteger(r,sign)}BigInteger.prototype.subtract=function(v){var n=parseValue(v);if(this.sign!==n.sign){return this.add(n.negate())}var a=this.value,b=n.value;if(n.isSmall)return subtractSmall(a,Math.abs(b),this.sign);return subtractAny(a,b,this.sign)};BigInteger.prototype.minus=BigInteger.prototype.subtract;SmallInteger.prototype.subtract=function(v){var n=parseValue(v);var a=this.value;if(a<0!==n.sign){return this.add(n.negate())}var b=n.value;if(n.isSmall){return new SmallInteger(a-b)}return subtractSmall(b,Math.abs(a),a>=0)};SmallInteger.prototype.minus=SmallInteger.prototype.subtract;NativeBigInt.prototype.subtract=function(v){return new NativeBigInt(this.value-parseValue(v).value)};NativeBigInt.prototype.minus=NativeBigInt.prototype.subtract;BigInteger.prototype.negate=function(){return new BigInteger(this.value,!this.sign)};SmallInteger.prototype.negate=function(){var sign=this.sign;var small=new SmallInteger(-this.value);small.sign=!sign;return small};NativeBigInt.prototype.negate=function(){return new NativeBigInt(-this.value)};BigInteger.prototype.abs=function(){return new BigInteger(this.value,false)};SmallInteger.prototype.abs=function(){return new SmallInteger(Math.abs(this.value))};NativeBigInt.prototype.abs=function(){return new NativeBigInt(this.value>=0?this.value:-this.value)};function multiplyLong(a,b){var a_l=a.length,b_l=b.length,l=a_l+b_l,r=createArray(l),base=BASE,product,carry,i,a_i,b_j;for(i=0;i<a_l;++i){a_i=a[i];for(var j=0;j<b_l;++j){b_j=b[j];product=a_i*b_j+r[i+j];carry=Math.floor(product/base);r[i+j]=product-carry*base;r[i+j+1]+=carry}}trim(r);return r}function multiplySmall(a,b){var l=a.length,r=new Array(l),base=BASE,carry=0,product,i;for(i=0;i<l;i++){product=a[i]*b+carry;carry=Math.floor(product/base);r[i]=product-carry*base}while(carry>0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}function shiftLeft(x,n){var r=[];while(n-- >0)r.push(0);return r.concat(x)}function multiplyKaratsuba(x,y){var n=Math.max(x.length,y.length);if(n<=30)return multiplyLong(x,y);n=Math.ceil(n/2);var b=x.slice(n),a=x.slice(0,n),d=y.slice(n),c=y.slice(0,n);var ac=multiplyKaratsuba(a,c),bd=multiplyKaratsuba(b,d),abcd=multiplyKaratsuba(addAny(a,b),addAny(c,d));var product=addAny(addAny(ac,shiftLeft(subtract(subtract(abcd,ac),bd),n)),shiftLeft(bd,2*n));trim(product);return product}function useKaratsuba(l1,l2){return-.012*l1-.012*l2+15e-6*l1*l2>0}BigInteger.prototype.multiply=function(v){var n=parseValue(v),a=this.value,b=n.value,sign=this.sign!==n.sign,abs;if(n.isSmall){if(b===0)return Integer[0];if(b===1)return this;if(b===-1)return this.negate();abs=Math.abs(b);if(abs<BASE){return new BigInteger(multiplySmall(a,abs),sign)}b=smallToArray(abs)}if(useKaratsuba(a.length,b.length))return new BigInteger(multiplyKaratsuba(a,b),sign);return new BigInteger(multiplyLong(a,b),sign)};BigInteger.prototype.times=BigInteger.prototype.multiply;function multiplySmallAndArray(a,b,sign){if(a<BASE){return new BigInteger(multiplySmall(b,a),sign)}return new BigInteger(multiplyLong(b,smallToArray(a)),sign)}SmallInteger.prototype._multiplyBySmall=function(a){if(isPrecise(a.value*this.value)){return new SmallInteger(a.value*this.value)}return multiplySmallAndArray(Math.abs(a.value),smallToArray(Math.abs(this.value)),this.sign!==a.sign)};BigInteger.prototype._multiplyBySmall=function(a){if(a.value===0)return Integer[0];if(a.value===1)return this;if(a.value===-1)return this.negate();return multiplySmallAndArray(Math.abs(a.value),this.value,this.sign!==a.sign)};SmallInteger.prototype.multiply=function(v){return parseValue(v)._multiplyBySmall(this)};SmallInteger.prototype.times=SmallInteger.prototype.multiply;NativeBigInt.prototype.multiply=function(v){return new NativeBigInt(this.value*parseValue(v).value)};NativeBigInt.prototype.times=NativeBigInt.prototype.multiply;function square(a){var l=a.length,r=createArray(l+l),base=BASE,product,carry,i,a_i,a_j;for(i=0;i<l;i++){a_i=a[i];carry=0-a_i*a_i;for(var j=i;j<l;j++){a_j=a[j];product=2*(a_i*a_j)+r[i+j]+carry;carry=Math.floor(product/base);r[i+j]=product-carry*base}r[i+l]=carry}trim(r);return r}BigInteger.prototype.square=function(){return new BigInteger(square(this.value),false)};SmallInteger.prototype.square=function(){var value=this.value*this.value;if(isPrecise(value))return new SmallInteger(value);return new BigInteger(square(smallToArray(Math.abs(this.value))),false)};NativeBigInt.prototype.square=function(v){return new NativeBigInt(this.value*this.value)};function divMod1(a,b){var a_l=a.length,b_l=b.length,base=BASE,result=createArray(b.length),divisorMostSignificantDigit=b[b_l-1],lambda=Math.ceil(base/(2*divisorMostSignificantDigit)),remainder=multiplySmall(a,lambda),divisor=multiplySmall(b,lambda),quotientDigit,shift,carry,borrow,i,l,q;if(remainder.length<=a_l)remainder.push(0);divisor.push(0);divisorMostSignificantDigit=divisor[b_l-1];for(shift=a_l-b_l;shift>=0;shift--){quotientDigit=base-1;if(remainder[shift+b_l]!==divisorMostSignificantDigit){quotientDigit=Math.floor((remainder[shift+b_l]*base+remainder[shift+b_l-1])/divisorMostSignificantDigit)}carry=0;borrow=0;l=divisor.length;for(i=0;i<l;i++){carry+=quotientDigit*divisor[i];q=Math.floor(carry/base);borrow+=remainder[shift+i]-(carry-q*base);carry=q;if(borrow<0){remainder[shift+i]=borrow+base;borrow=-1}else{remainder[shift+i]=borrow;borrow=0}}while(borrow!==0){quotientDigit-=1;carry=0;for(i=0;i<l;i++){carry+=remainder[shift+i]-base+divisor[i];if(carry<0){remainder[shift+i]=carry+base;carry=0}else{remainder[shift+i]=carry;carry=1}}borrow+=carry}result[shift]=quotientDigit}remainder=divModSmall(remainder,lambda)[0];return[arrayToSmall(result),arrayToSmall(remainder)]}function divMod2(a,b){var a_l=a.length,b_l=b.length,result=[],part=[],base=BASE,guess,xlen,highx,highy,check;while(a_l){part.unshift(a[--a_l]);trim(part);if(compareAbs(part,b)<0){result.push(0);continue}xlen=part.length;highx=part[xlen-1]*base+part[xlen-2];highy=b[b_l-1]*base+b[b_l-2];if(xlen>b_l){highx=(highx+1)*base}guess=Math.ceil(highx/highy);do{check=multiplySmall(b,guess);if(compareAbs(check,part)<=0)break;guess--}while(guess);result.push(guess);part=subtract(part,check)}result.reverse();return[arrayToSmall(result),arrayToSmall(part)]}function divModSmall(value,lambda){var length=value.length,quotient=createArray(length),base=BASE,i,q,remainder,divisor;remainder=0;for(i=length-1;i>=0;--i){divisor=remainder*base+value[i];q=truncate(divisor/lambda);remainder=divisor-q*lambda;quotient[i]=q|0}return[quotient,remainder|0]}function divModAny(self,v){var value,n=parseValue(v);if(supportsNativeBigInt){return[new NativeBigInt(self.value/n.value),new NativeBigInt(self.value%n.value)]}var a=self.value,b=n.value;var quotient;if(b===0)throw new Error("Cannot divide by zero");if(self.isSmall){if(n.isSmall){return[new SmallInteger(truncate(a/b)),new SmallInteger(a%b)]}return[Integer[0],self]}if(n.isSmall){if(b===1)return[self,Integer[0]];if(b==-1)return[self.negate(),Integer[0]];var abs=Math.abs(b);if(abs<BASE){value=divModSmall(a,abs);quotient=arrayToSmall(value[0]);var remainder=value[1];if(self.sign)remainder=-remainder;if(typeof quotient==="number"){if(self.sign!==n.sign)quotient=-quotient;return[new SmallInteger(quotient),new SmallInteger(remainder)]}return[new BigInteger(quotient,self.sign!==n.sign),new SmallInteger(remainder)]}b=smallToArray(abs)}var comparison=compareAbs(a,b);if(comparison===-1)return[Integer[0],self];if(comparison===0)return[Integer[self.sign===n.sign?1:-1],Integer[0]];if(a.length+b.length<=200)value=divMod1(a,b);else value=divMod2(a,b);quotient=value[0];var qSign=self.sign!==n.sign,mod=value[1],mSign=self.sign;if(typeof quotient==="number"){if(qSign)quotient=-quotient;quotient=new SmallInteger(quotient)}else quotient=new BigInteger(quotient,qSign);if(typeof mod==="number"){if(mSign)mod=-mod;mod=new SmallInteger(mod)}else mod=new BigInteger(mod,mSign);return[quotient,mod]}BigInteger.prototype.divmod=function(v){var result=divModAny(this,v);return{quotient:result[0],remainder:result[1]}};NativeBigInt.prototype.divmod=SmallInteger.prototype.divmod=BigInteger.prototype.divmod;BigInteger.prototype.divide=function(v){return divModAny(this,v)[0]};NativeBigInt.prototype.over=NativeBigInt.prototype.divide=SmallInteger.prototype.over=SmallInteger.prototype.divide=BigInteger.prototype.over=BigInteger.prototype.divide;BigInteger.prototype.mod=function(v){return divModAny(this,v)[1]};NativeBigInt.prototype.mod=NativeBigInt.prototype.remainder=SmallInteger.prototype.remainder=SmallInteger.prototype.mod=BigInteger.prototype.remainder=BigInteger.prototype.mod;BigInteger.prototype.pow=function(v){var n=parseValue(v),a=this.value,b=n.value,value,x,y;if(b===0)return Integer[1];if(a===0)return Integer[0];if(a===1)return Integer[1];if(a===-1)return n.isEven()?Integer[1]:Integer[-1];if(n.sign){return Integer[0]}if(!n.isSmall)throw new Error("The exponent "+n.toString()+" is too large.");if(this.isSmall){if(isPrecise(value=Math.pow(a,b)))return new SmallInteger(truncate(value))}x=this;y=Integer[1];while(true){if(b&1===1){y=y.times(x);--b}if(b===0)break;b/=2;x=x.square()}return y};SmallInteger.prototype.pow=BigInteger.prototype.pow;var pow;if(supportsNativeBigInt){pow=eval("(a,b)=>a**b")}NativeBigInt.prototype.pow=function(v){var n=parseValue(v);var a=this.value,b=n.value;if(b===BigInt(0))return Integer[1];if(a===BigInt(0))return Integer[0];if(a===BigInt(1))return Integer[1];if(a===BigInt(-1))return n.isEven()?Integer[1]:Integer[-1];if(n.isNegative())return new NativeBigInt(BigInt(0));return new NativeBigInt(pow(a,b))};BigInteger.prototype.modPow=function(exp,mod){exp=parseValue(exp);mod=parseValue(mod);if(mod.isZero())throw new Error("Cannot take modPow with modulus 0");var r=Integer[1],base=this.mod(mod);while(exp.isPositive()){if(base.isZero())return Integer[0];if(exp.isOdd())r=r.multiply(base).mod(mod);exp=exp.divide(2);base=base.square().mod(mod)}return r};NativeBigInt.prototype.modPow=SmallInteger.prototype.modPow=BigInteger.prototype.modPow;function compareAbs(a,b){if(a.length!==b.length){return a.length>b.length?1:-1}for(var i=a.length-1;i>=0;i--){if(a[i]!==b[i])return a[i]>b[i]?1:-1}return 0}BigInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall)return 1;return compareAbs(a,b)};SmallInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=Math.abs(this.value),b=n.value;if(n.isSmall){b=Math.abs(b);return a===b?0:a>b?1:-1}return-1};NativeBigInt.prototype.compareAbs=function(v){var a=this.value;var b=parseValue(v).value;a=a>=0?a:-a;b=b>=0?b:-b;return a===b?0:a>b?1:-1};BigInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(this.sign!==n.sign){return n.sign?1:-1}if(n.isSmall){return this.sign?-1:1}return compareAbs(a,b)*(this.sign?-1:1)};BigInteger.prototype.compareTo=BigInteger.prototype.compare;SmallInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall){return a==b?0:a>b?1:-1}if(a<0!==n.sign){return a<0?-1:1}return a<0?1:-1};SmallInteger.prototype.compareTo=SmallInteger.prototype.compare;NativeBigInt.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var a=this.value;var b=parseValue(v).value;return a===b?0:a>b?1:-1};NativeBigInt.prototype.compareTo=NativeBigInt.prototype.compare;BigInteger.prototype.equals=function(v){return this.compare(v)===0};NativeBigInt.prototype.eq=NativeBigInt.prototype.equals=SmallInteger.prototype.eq=SmallInteger.prototype.equals=BigInteger.prototype.eq=BigInteger.prototype.equals;BigInteger.prototype.notEquals=function(v){return this.compare(v)!==0};NativeBigInt.prototype.neq=NativeBigInt.prototype.notEquals=SmallInteger.prototype.neq=SmallInteger.prototype.notEquals=BigInteger.prototype.neq=BigInteger.prototype.notEquals;BigInteger.prototype.greater=function(v){return this.compare(v)>0};NativeBigInt.prototype.gt=NativeBigInt.prototype.greater=SmallInteger.prototype.gt=SmallInteger.prototype.greater=BigInteger.prototype.gt=BigInteger.prototype.greater;BigInteger.prototype.lesser=function(v){return this.compare(v)<0};NativeBigInt.prototype.lt=NativeBigInt.prototype.lesser=SmallInteger.prototype.lt=SmallInteger.prototype.lesser=BigInteger.prototype.lt=BigInteger.prototype.lesser;BigInteger.prototype.greaterOrEquals=function(v){return this.compare(v)>=0};NativeBigInt.prototype.geq=NativeBigInt.prototype.greaterOrEquals=SmallInteger.prototype.geq=SmallInteger.prototype.greaterOrEquals=BigInteger.prototype.geq=BigInteger.prototype.greaterOrEquals;BigInteger.prototype.lesserOrEquals=function(v){return this.compare(v)<=0};NativeBigInt.prototype.leq=NativeBigInt.prototype.lesserOrEquals=SmallInteger.prototype.leq=SmallInteger.prototype.lesserOrEquals=BigInteger.prototype.leq=BigInteger.prototype.lesserOrEquals;BigInteger.prototype.isEven=function(){return(this.value[0]&1)===0};SmallInteger.prototype.isEven=function(){return(this.value&1)===0};NativeBigInt.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)};BigInteger.prototype.isOdd=function(){return(this.value[0]&1)===1};SmallInteger.prototype.isOdd=function(){return(this.value&1)===1};NativeBigInt.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)};BigInteger.prototype.isPositive=function(){return!this.sign};SmallInteger.prototype.isPositive=function(){return this.value>0};NativeBigInt.prototype.isPositive=SmallInteger.prototype.isPositive;BigInteger.prototype.isNegative=function(){return this.sign};SmallInteger.prototype.isNegative=function(){return this.value<0};NativeBigInt.prototype.isNegative=SmallInteger.prototype.isNegative;BigInteger.prototype.isUnit=function(){return false};SmallInteger.prototype.isUnit=function(){return Math.abs(this.value)===1};NativeBigInt.prototype.isUnit=function(){return this.abs().value===BigInt(1)};BigInteger.prototype.isZero=function(){return false};SmallInteger.prototype.isZero=function(){return this.value===0};NativeBigInt.prototype.isZero=function(){return this.value===BigInt(0)};BigInteger.prototype.isDivisibleBy=function(v){var n=parseValue(v);if(n.isZero())return false;if(n.isUnit())return true;if(n.compareAbs(2)===0)return this.isEven();return this.mod(n).isZero()};NativeBigInt.prototype.isDivisibleBy=SmallInteger.prototype.isDivisibleBy=BigInteger.prototype.isDivisibleBy;function isBasicPrime(v){var n=v.abs();if(n.isUnit())return false;if(n.equals(2)||n.equals(3)||n.equals(5))return true;if(n.isEven()||n.isDivisibleBy(3)||n.isDivisibleBy(5))return false;if(n.lesser(49))return true}function millerRabinTest(n,a){var nPrev=n.prev(),b=nPrev,r=0,d,t,i,x;while(b.isEven())b=b.divide(2),r++;next:for(i=0;i<a.length;i++){if(n.lesser(a[i]))continue;x=bigInt(a[i]).modPow(b,n);if(x.isUnit()||x.equals(nPrev))continue;for(d=r-1;d!=0;d--){x=x.square().mod(n);if(x.isUnit())return false;if(x.equals(nPrev))continue next}return false}return true}BigInteger.prototype.isPrime=function(strict){var isPrime=isBasicPrime(this);if(isPrime!==undefined)return isPrime;var n=this.abs();var bits=n.bitLength();if(bits<=64)return millerRabinTest(n,[2,325,9375,28178,450775,9780504,1795265022]);var logN=Math.log(2)*bits.toJSNumber();var t=Math.ceil(strict===true?2*Math.pow(logN,2):logN);for(var a=[],i=0;i<t;i++){a.push(bigInt(i+2))}return millerRabinTest(n,a)};NativeBigInt.prototype.isPrime=SmallInteger.prototype.isPrime=BigInteger.prototype.isPrime;BigInteger.prototype.isProbablePrime=function(iterations){var isPrime=isBasicPrime(this);if(isPrime!==undefined)return isPrime;var n=this.abs();var t=iterations===undefined?5:iterations;for(var a=[],i=0;i<t;i++){a.push(bigInt.randBetween(2,n.minus(2)))}return millerRabinTest(n,a)};NativeBigInt.prototype.isProbablePrime=SmallInteger.prototype.isProbablePrime=BigInteger.prototype.isProbablePrime;BigInteger.prototype.modInv=function(n){var t=bigInt.zero,newT=bigInt.one,r=parseValue(n),newR=this.abs(),q,lastT,lastR;while(!newR.isZero()){q=r.divide(newR);lastT=t;lastR=r;t=newT;r=newR;newT=lastT.subtract(q.multiply(newT));newR=lastR.subtract(q.multiply(newR))}if(!r.isUnit())throw new Error(this.toString()+" and "+n.toString()+" are not co-prime");if(t.compare(0)===-1){t=t.add(n)}if(this.isNegative()){return t.negate()}return t};NativeBigInt.prototype.modInv=SmallInteger.prototype.modInv=BigInteger.prototype.modInv;BigInteger.prototype.next=function(){var value=this.value;if(this.sign){return subtractSmall(value,1,this.sign)}return new BigInteger(addSmall(value,1),this.sign)};SmallInteger.prototype.next=function(){var value=this.value;if(value+1<MAX_INT)return new SmallInteger(value+1);return new BigInteger(MAX_INT_ARR,false)};NativeBigInt.prototype.next=function(){return new NativeBigInt(this.value+BigInt(1))};BigInteger.prototype.prev=function(){var value=this.value;if(this.sign){return new BigInteger(addSmall(value,1),true)}return subtractSmall(value,1,this.sign)};SmallInteger.prototype.prev=function(){var value=this.value;if(value-1>-MAX_INT)return new SmallInteger(value-1);return new BigInteger(MAX_INT_ARR,true)};NativeBigInt.prototype.prev=function(){return new NativeBigInt(this.value-BigInt(1))};var powersOfTwo=[1];while(2*powersOfTwo[powersOfTwo.length-1]<=BASE)powersOfTwo.push(2*powersOfTwo[powersOfTwo.length-1]);var powers2Length=powersOfTwo.length,highestPower2=powersOfTwo[powers2Length-1];function shift_isSmall(n){return Math.abs(n)<=BASE}BigInteger.prototype.shiftLeft=function(v){var n=parseValue(v).toJSNumber();if(!shift_isSmall(n)){throw new Error(String(n)+" is too large for shifting.")}if(n<0)return this.shiftRight(-n);var result=this;if(result.isZero())return result;while(n>=powers2Length){result=result.multiply(highestPower2);n-=powers2Length-1}return result.multiply(powersOfTwo[n])};NativeBigInt.prototype.shiftLeft=SmallInteger.prototype.shiftLeft=BigInteger.prototype.shiftLeft;BigInteger.prototype.shiftRight=function(v){var remQuo;var n=parseValue(v).toJSNumber();if(!shift_isSmall(n)){throw new Error(String(n)+" is too large for shifting.")}if(n<0)return this.shiftLeft(-n);var result=this;while(n>=powers2Length){if(result.isZero()||result.isNegative()&&result.isUnit())return result;remQuo=divModAny(result,highestPower2);result=remQuo[1].isNegative()?remQuo[0].prev():remQuo[0];n-=powers2Length-1}remQuo=divModAny(result,powersOfTwo[n]);return remQuo[1].isNegative()?remQuo[0].prev():remQuo[0]};NativeBigInt.prototype.shiftRight=SmallInteger.prototype.shiftRight=BigInteger.prototype.shiftRight;function bitwise(x,y,fn){y=parseValue(y);var xSign=x.isNegative(),ySign=y.isNegative();var xRem=xSign?x.not():x,yRem=ySign?y.not():y;var xDigit=0,yDigit=0;var xDivMod=null,yDivMod=null;var result=[];while(!xRem.isZero()||!yRem.isZero()){xDivMod=divModAny(xRem,highestPower2);xDigit=xDivMod[1].toJSNumber();if(xSign){xDigit=highestPower2-1-xDigit}yDivMod=divModAny(yRem,highestPower2);yDigit=yDivMod[1].toJSNumber();if(ySign){yDigit=highestPower2-1-yDigit}xRem=xDivMod[0];yRem=yDivMod[0];result.push(fn(xDigit,yDigit))}var sum=fn(xSign?1:0,ySign?1:0)!==0?bigInt(-1):bigInt(0);for(var i=result.length-1;i>=0;i-=1){sum=sum.multiply(highestPower2).add(bigInt(result[i]))}return sum}BigInteger.prototype.not=function(){return this.negate().prev()};NativeBigInt.prototype.not=SmallInteger.prototype.not=BigInteger.prototype.not;BigInteger.prototype.and=function(n){return bitwise(this,n,function(a,b){return a&b})};NativeBigInt.prototype.and=SmallInteger.prototype.and=BigInteger.prototype.and;BigInteger.prototype.or=function(n){return bitwise(this,n,function(a,b){return a|b})};NativeBigInt.prototype.or=SmallInteger.prototype.or=BigInteger.prototype.or;BigInteger.prototype.xor=function(n){return bitwise(this,n,function(a,b){return a^b})};NativeBigInt.prototype.xor=SmallInteger.prototype.xor=BigInteger.prototype.xor;var LOBMASK_I=1<<30,LOBMASK_BI=(BASE&-BASE)*(BASE&-BASE)|LOBMASK_I;function roughLOB(n){var v=n.value,x=typeof v==="number"?v|LOBMASK_I:typeof v==="bigint"?v|BigInt(LOBMASK_I):v[0]+v[1]*BASE|LOBMASK_BI;return x&-x}function integerLogarithm(value,base){if(base.compareTo(value)<=0){var tmp=integerLogarithm(value,base.square(base));var p=tmp.p;var e=tmp.e;var t=p.multiply(base);return t.compareTo(value)<=0?{p:t,e:e*2+1}:{p:p,e:e*2}}return{p:bigInt(1),e:0}}BigInteger.prototype.bitLength=function(){var n=this;if(n.compareTo(bigInt(0))<0){n=n.negate().subtract(bigInt(1))}if(n.compareTo(bigInt(0))===0){return bigInt(0)}return bigInt(integerLogarithm(n,bigInt(2)).e).add(bigInt(1))};NativeBigInt.prototype.bitLength=SmallInteger.prototype.bitLength=BigInteger.prototype.bitLength;function max(a,b){a=parseValue(a);b=parseValue(b);return a.greater(b)?a:b}function min(a,b){a=parseValue(a);b=parseValue(b);return a.lesser(b)?a:b}function gcd(a,b){a=parseValue(a).abs();b=parseValue(b).abs();if(a.equals(b))return a;if(a.isZero())return b;if(b.isZero())return a;var c=Integer[1],d,t;while(a.isEven()&&b.isEven()){d=min(roughLOB(a),roughLOB(b));a=a.divide(d);b=b.divide(d);c=c.multiply(d)}while(a.isEven()){a=a.divide(roughLOB(a))}do{while(b.isEven()){b=b.divide(roughLOB(b))}if(a.greater(b)){t=b;b=a;a=t}b=b.subtract(a)}while(!b.isZero());return c.isUnit()?a:a.multiply(c)}function lcm(a,b){a=parseValue(a).abs();b=parseValue(b).abs();return a.divide(gcd(a,b)).multiply(b)}function randBetween(a,b){a=parseValue(a);b=parseValue(b);var low=min(a,b),high=max(a,b);var range=high.subtract(low).add(1);if(range.isSmall)return low.add(Math.floor(Math.random()*range));var digits=toBase(range,BASE).value;var result=[],restricted=true;for(var i=0;i<digits.length;i++){var top=restricted?digits[i]:BASE;var digit=truncate(Math.random()*top);result.push(digit);if(digit<top)restricted=false}return low.add(Integer.fromArray(result,BASE,false))}var parseBase=function(text,base,alphabet,caseSensitive){alphabet=alphabet||DEFAULT_ALPHABET;text=String(text);if(!caseSensitive){text=text.toLowerCase();alphabet=alphabet.toLowerCase()}var length=text.length;var i;var absBase=Math.abs(base);var alphabetValues={};for(i=0;i<alphabet.length;i++){alphabetValues[alphabet[i]]=i}for(i=0;i<length;i++){var c=text[i];if(c==="-")continue;if(c in alphabetValues){if(alphabetValues[c]>=absBase){if(c==="1"&&absBase===1)continue;throw new Error(c+" is not a valid digit in base "+base+".")}}}base=parseValue(base);var digits=[];var isNegative=text[0]==="-";for(i=isNegative?1:0;i<text.length;i++){var c=text[i];if(c in alphabetValues)digits.push(parseValue(alphabetValues[c]));else if(c==="<"){var start=i;do{i++}while(text[i]!==">"&&i<text.length);digits.push(parseValue(text.slice(start+1,i)))}else throw new Error(c+" is not a valid character")}return parseBaseFromArray(digits,base,isNegative)};function parseBaseFromArray(digits,base,isNegative){var val=Integer[0],pow=Integer[1],i;for(i=digits.length-1;i>=0;i--){val=val.add(digits[i].times(pow));pow=pow.times(base)}return isNegative?val.negate():val}function stringify(digit,alphabet){alphabet=alphabet||DEFAULT_ALPHABET;if(digit<alphabet.length){return alphabet[digit]}return"<"+digit+">"}function toBase(n,base){base=bigInt(base);if(base.isZero()){if(n.isZero())return{value:[0],isNegative:false};throw new Error("Cannot convert nonzero numbers to base 0.")}if(base.equals(-1)){if(n.isZero())return{value:[0],isNegative:false};if(n.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-n.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:false};var arr=Array.apply(null,Array(n.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);arr.unshift([1]);return{value:[].concat.apply([],arr),isNegative:false}}var neg=false;if(n.isNegative()&&base.isPositive()){neg=true;n=n.abs()}if(base.isUnit()){if(n.isZero())return{value:[0],isNegative:false};return{value:Array.apply(null,Array(n.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:neg}}var out=[];var left=n,divmod;while(left.isNegative()||left.compareAbs(base)>=0){divmod=left.divmod(base);left=divmod.quotient;var digit=divmod.remainder;if(digit.isNegative()){digit=base.minus(digit).abs();left=left.next()}out.push(digit.toJSNumber())}out.push(left.toJSNumber());return{value:out.reverse(),isNegative:neg}}function toBaseString(n,base,alphabet){var arr=toBase(n,base);return(arr.isNegative?"-":"")+arr.value.map(function(x){return stringify(x,alphabet)}).join("")}BigInteger.prototype.toArray=function(radix){return toBase(this,radix)};SmallInteger.prototype.toArray=function(radix){return toBase(this,radix)};NativeBigInt.prototype.toArray=function(radix){return toBase(this,radix)};BigInteger.prototype.toString=function(radix,alphabet){if(radix===undefined)radix=10;if(radix!==10)return toBaseString(this,radix,alphabet);var v=this.value,l=v.length,str=String(v[--l]),zeros="0000000",digit;while(--l>=0){digit=String(v[l]);str+=zeros.slice(digit.length)+digit}var sign=this.sign?"-":"";return sign+str};SmallInteger.prototype.toString=function(radix,alphabet){if(radix===undefined)radix=10;if(radix!=10)return toBaseString(this,radix,alphabet);return String(this.value)};NativeBigInt.prototype.toString=SmallInteger.prototype.toString;NativeBigInt.prototype.toJSON=BigInteger.prototype.toJSON=SmallInteger.prototype.toJSON=function(){return this.toString()};BigInteger.prototype.valueOf=function(){return parseInt(this.toString(),10)};BigInteger.prototype.toJSNumber=BigInteger.prototype.valueOf;SmallInteger.prototype.valueOf=function(){return this.value};SmallInteger.prototype.toJSNumber=SmallInteger.prototype.valueOf;NativeBigInt.prototype.valueOf=NativeBigInt.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};function parseStringValue(v){if(isPrecise(+v)){var x=+v;if(x===truncate(x))return supportsNativeBigInt?new NativeBigInt(BigInt(x)):new SmallInteger(x);throw new Error("Invalid integer: "+v)}var sign=v[0]==="-";if(sign)v=v.slice(1);var split=v.split(/e/i);if(split.length>2)throw new Error("Invalid integer: "+split.join("e"));if(split.length===2){var exp=split[1];if(exp[0]==="+")exp=exp.slice(1);exp=+exp;if(exp!==truncate(exp)||!isPrecise(exp))throw new Error("Invalid integer: "+exp+" is not a valid exponent.");var text=split[0];var decimalPlace=text.indexOf(".");if(decimalPlace>=0){exp-=text.length-decimalPlace-1;text=text.slice(0,decimalPlace)+text.slice(decimalPlace+1)}if(exp<0)throw new Error("Cannot include negative exponent part for integers");text+=new Array(exp+1).join("0");v=text}var isValid=/^([0-9][0-9]*)$/.test(v);if(!isValid)throw new Error("Invalid integer: "+v);if(supportsNativeBigInt){return new NativeBigInt(BigInt(sign?"-"+v:v))}var r=[],max=v.length,l=LOG_BASE,min=max-l;while(max>0){r.push(+v.slice(min,max));min-=l;if(min<0)min=0;max-=l}trim(r);return new BigInteger(r,sign)}function parseNumberValue(v){if(supportsNativeBigInt){return new NativeBigInt(BigInt(v))}if(isPrecise(v)){if(v!==truncate(v))throw new Error(v+" is not an integer.");return new SmallInteger(v)}return parseStringValue(v.toString())}function parseValue(v){if(typeof v==="number"){return parseNumberValue(v)}if(typeof v==="string"){return parseStringValue(v)}if(typeof v==="bigint"){return new NativeBigInt(v)}return v}for(var i=0;i<1e3;i++){Integer[i]=parseValue(i);if(i>0)Integer[-i]=parseValue(-i)}Integer.one=Integer[1];Integer.zero=Integer[0];Integer.minusOne=Integer[-1];Integer.max=max;Integer.min=min;Integer.gcd=gcd;Integer.lcm=lcm;Integer.isInstance=function(x){return x instanceof BigInteger||x instanceof SmallInteger||x instanceof NativeBigInt};Integer.randBetween=randBetween;Integer.fromArray=function(digits,base,isNegative){return parseBaseFromArray(digits.map(parseValue),parseValue(base||10),isNegative)};return Integer}();if(typeof module!=="undefined"&&module.hasOwnProperty("exports")){module.exports=bigInt}if(typeof define==="function"&&define.amd){define("big-integer",[],function(){return bigInt})} \ No newline at end of file
+var bigInt=function(undefined){"use strict";var BASE=1e7,LOG_BASE=7,MAX_INT=9007199254740992,MAX_INT_ARR=smallToArray(MAX_INT),DEFAULT_ALPHABET="0123456789abcdefghijklmnopqrstuvwxyz";var supportsNativeBigInt=typeof BigInt==="function";function Integer(v,radix,alphabet,caseSensitive){if(typeof v==="undefined")return Integer[0];if(typeof radix!=="undefined")return+radix===10&&!alphabet?parseValue(v):parseBase(v,radix,alphabet,caseSensitive);return parseValue(v)}function BigInteger(value,sign){this.value=value;this.sign=sign;this.isSmall=false}BigInteger.prototype=Object.create(Integer.prototype);function SmallInteger(value){this.value=value;this.sign=value<0;this.isSmall=true}SmallInteger.prototype=Object.create(Integer.prototype);function NativeBigInt(value){this.value=value}NativeBigInt.prototype=Object.create(Integer.prototype);function isPrecise(n){return-MAX_INT<n&&n<MAX_INT}function smallToArray(n){if(n<1e7)return[n];if(n<1e14)return[n%1e7,Math.floor(n/1e7)];return[n%1e7,Math.floor(n/1e7)%1e7,Math.floor(n/1e14)]}function arrayToSmall(arr){trim(arr);var length=arr.length;if(length<4&&compareAbs(arr,MAX_INT_ARR)<0){switch(length){case 0:return 0;case 1:return arr[0];case 2:return arr[0]+arr[1]*BASE;default:return arr[0]+(arr[1]+arr[2]*BASE)*BASE}}return arr}function trim(v){var i=v.length;while(v[--i]===0);v.length=i+1}function createArray(length){var x=new Array(length);var i=-1;while(++i<length){x[i]=0}return x}function truncate(n){if(n>0)return Math.floor(n);return Math.ceil(n)}function add(a,b){var l_a=a.length,l_b=b.length,r=new Array(l_a),carry=0,base=BASE,sum,i;for(i=0;i<l_b;i++){sum=a[i]+b[i]+carry;carry=sum>=base?1:0;r[i]=sum-carry*base}while(i<l_a){sum=a[i]+carry;carry=sum===base?1:0;r[i++]=sum-carry*base}if(carry>0)r.push(carry);return r}function addAny(a,b){if(a.length>=b.length)return add(a,b);return add(b,a)}function addSmall(a,carry){var l=a.length,r=new Array(l),base=BASE,sum,i;for(i=0;i<l;i++){sum=a[i]-base+carry;carry=Math.floor(sum/base);r[i]=sum-carry*base;carry+=1}while(carry>0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}BigInteger.prototype.add=function(v){var n=parseValue(v);if(this.sign!==n.sign){return this.subtract(n.negate())}var a=this.value,b=n.value;if(n.isSmall){return new BigInteger(addSmall(a,Math.abs(b)),this.sign)}return new BigInteger(addAny(a,b),this.sign)};BigInteger.prototype.plus=BigInteger.prototype.add;SmallInteger.prototype.add=function(v){var n=parseValue(v);var a=this.value;if(a<0!==n.sign){return this.subtract(n.negate())}var b=n.value;if(n.isSmall){if(isPrecise(a+b))return new SmallInteger(a+b);b=smallToArray(Math.abs(b))}return new BigInteger(addSmall(b,Math.abs(a)),a<0)};SmallInteger.prototype.plus=SmallInteger.prototype.add;NativeBigInt.prototype.add=function(v){return new NativeBigInt(this.value+parseValue(v).value)};NativeBigInt.prototype.plus=NativeBigInt.prototype.add;function subtract(a,b){var a_l=a.length,b_l=b.length,r=new Array(a_l),borrow=0,base=BASE,i,difference;for(i=0;i<b_l;i++){difference=a[i]-borrow-b[i];if(difference<0){difference+=base;borrow=1}else borrow=0;r[i]=difference}for(i=b_l;i<a_l;i++){difference=a[i]-borrow;if(difference<0)difference+=base;else{r[i++]=difference;break}r[i]=difference}for(;i<a_l;i++){r[i]=a[i]}trim(r);return r}function subtractAny(a,b,sign){var value;if(compareAbs(a,b)>=0){value=subtract(a,b)}else{value=subtract(b,a);sign=!sign}value=arrayToSmall(value);if(typeof value==="number"){if(sign)value=-value;return new SmallInteger(value)}return new BigInteger(value,sign)}function subtractSmall(a,b,sign){var l=a.length,r=new Array(l),carry=-b,base=BASE,i,difference;for(i=0;i<l;i++){difference=a[i]+carry;carry=Math.floor(difference/base);difference%=base;r[i]=difference<0?difference+base:difference}r=arrayToSmall(r);if(typeof r==="number"){if(sign)r=-r;return new SmallInteger(r)}return new BigInteger(r,sign)}BigInteger.prototype.subtract=function(v){var n=parseValue(v);if(this.sign!==n.sign){return this.add(n.negate())}var a=this.value,b=n.value;if(n.isSmall)return subtractSmall(a,Math.abs(b),this.sign);return subtractAny(a,b,this.sign)};BigInteger.prototype.minus=BigInteger.prototype.subtract;SmallInteger.prototype.subtract=function(v){var n=parseValue(v);var a=this.value;if(a<0!==n.sign){return this.add(n.negate())}var b=n.value;if(n.isSmall){return new SmallInteger(a-b)}return subtractSmall(b,Math.abs(a),a>=0)};SmallInteger.prototype.minus=SmallInteger.prototype.subtract;NativeBigInt.prototype.subtract=function(v){return new NativeBigInt(this.value-parseValue(v).value)};NativeBigInt.prototype.minus=NativeBigInt.prototype.subtract;BigInteger.prototype.negate=function(){return new BigInteger(this.value,!this.sign)};SmallInteger.prototype.negate=function(){var sign=this.sign;var small=new SmallInteger(-this.value);small.sign=!sign;return small};NativeBigInt.prototype.negate=function(){return new NativeBigInt(-this.value)};BigInteger.prototype.abs=function(){return new BigInteger(this.value,false)};SmallInteger.prototype.abs=function(){return new SmallInteger(Math.abs(this.value))};NativeBigInt.prototype.abs=function(){return new NativeBigInt(this.value>=0?this.value:-this.value)};function multiplyLong(a,b){var a_l=a.length,b_l=b.length,l=a_l+b_l,r=createArray(l),base=BASE,product,carry,i,a_i,b_j;for(i=0;i<a_l;++i){a_i=a[i];for(var j=0;j<b_l;++j){b_j=b[j];product=a_i*b_j+r[i+j];carry=Math.floor(product/base);r[i+j]=product-carry*base;r[i+j+1]+=carry}}trim(r);return r}function multiplySmall(a,b){var l=a.length,r=new Array(l),base=BASE,carry=0,product,i;for(i=0;i<l;i++){product=a[i]*b+carry;carry=Math.floor(product/base);r[i]=product-carry*base}while(carry>0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}function shiftLeft(x,n){var r=[];while(n-- >0)r.push(0);return r.concat(x)}function multiplyKaratsuba(x,y){var n=Math.max(x.length,y.length);if(n<=30)return multiplyLong(x,y);n=Math.ceil(n/2);var b=x.slice(n),a=x.slice(0,n),d=y.slice(n),c=y.slice(0,n);var ac=multiplyKaratsuba(a,c),bd=multiplyKaratsuba(b,d),abcd=multiplyKaratsuba(addAny(a,b),addAny(c,d));var product=addAny(addAny(ac,shiftLeft(subtract(subtract(abcd,ac),bd),n)),shiftLeft(bd,2*n));trim(product);return product}function useKaratsuba(l1,l2){return-.012*l1-.012*l2+15e-6*l1*l2>0}BigInteger.prototype.multiply=function(v){var n=parseValue(v),a=this.value,b=n.value,sign=this.sign!==n.sign,abs;if(n.isSmall){if(b===0)return Integer[0];if(b===1)return this;if(b===-1)return this.negate();abs=Math.abs(b);if(abs<BASE){return new BigInteger(multiplySmall(a,abs),sign)}b=smallToArray(abs)}if(useKaratsuba(a.length,b.length))return new BigInteger(multiplyKaratsuba(a,b),sign);return new BigInteger(multiplyLong(a,b),sign)};BigInteger.prototype.times=BigInteger.prototype.multiply;function multiplySmallAndArray(a,b,sign){if(a<BASE){return new BigInteger(multiplySmall(b,a),sign)}return new BigInteger(multiplyLong(b,smallToArray(a)),sign)}SmallInteger.prototype._multiplyBySmall=function(a){if(isPrecise(a.value*this.value)){return new SmallInteger(a.value*this.value)}return multiplySmallAndArray(Math.abs(a.value),smallToArray(Math.abs(this.value)),this.sign!==a.sign)};BigInteger.prototype._multiplyBySmall=function(a){if(a.value===0)return Integer[0];if(a.value===1)return this;if(a.value===-1)return this.negate();return multiplySmallAndArray(Math.abs(a.value),this.value,this.sign!==a.sign)};SmallInteger.prototype.multiply=function(v){return parseValue(v)._multiplyBySmall(this)};SmallInteger.prototype.times=SmallInteger.prototype.multiply;NativeBigInt.prototype.multiply=function(v){return new NativeBigInt(this.value*parseValue(v).value)};NativeBigInt.prototype.times=NativeBigInt.prototype.multiply;function square(a){var l=a.length,r=createArray(l+l),base=BASE,product,carry,i,a_i,a_j;for(i=0;i<l;i++){a_i=a[i];carry=0-a_i*a_i;for(var j=i;j<l;j++){a_j=a[j];product=2*(a_i*a_j)+r[i+j]+carry;carry=Math.floor(product/base);r[i+j]=product-carry*base}r[i+l]=carry}trim(r);return r}BigInteger.prototype.square=function(){return new BigInteger(square(this.value),false)};SmallInteger.prototype.square=function(){var value=this.value*this.value;if(isPrecise(value))return new SmallInteger(value);return new BigInteger(square(smallToArray(Math.abs(this.value))),false)};NativeBigInt.prototype.square=function(v){return new NativeBigInt(this.value*this.value)};function divMod1(a,b){var a_l=a.length,b_l=b.length,base=BASE,result=createArray(b.length),divisorMostSignificantDigit=b[b_l-1],lambda=Math.ceil(base/(2*divisorMostSignificantDigit)),remainder=multiplySmall(a,lambda),divisor=multiplySmall(b,lambda),quotientDigit,shift,carry,borrow,i,l,q;if(remainder.length<=a_l)remainder.push(0);divisor.push(0);divisorMostSignificantDigit=divisor[b_l-1];for(shift=a_l-b_l;shift>=0;shift--){quotientDigit=base-1;if(remainder[shift+b_l]!==divisorMostSignificantDigit){quotientDigit=Math.floor((remainder[shift+b_l]*base+remainder[shift+b_l-1])/divisorMostSignificantDigit)}carry=0;borrow=0;l=divisor.length;for(i=0;i<l;i++){carry+=quotientDigit*divisor[i];q=Math.floor(carry/base);borrow+=remainder[shift+i]-(carry-q*base);carry=q;if(borrow<0){remainder[shift+i]=borrow+base;borrow=-1}else{remainder[shift+i]=borrow;borrow=0}}while(borrow!==0){quotientDigit-=1;carry=0;for(i=0;i<l;i++){carry+=remainder[shift+i]-base+divisor[i];if(carry<0){remainder[shift+i]=carry+base;carry=0}else{remainder[shift+i]=carry;carry=1}}borrow+=carry}result[shift]=quotientDigit}remainder=divModSmall(remainder,lambda)[0];return[arrayToSmall(result),arrayToSmall(remainder)]}function divMod2(a,b){var a_l=a.length,b_l=b.length,result=[],part=[],base=BASE,guess,xlen,highx,highy,check;while(a_l){part.unshift(a[--a_l]);trim(part);if(compareAbs(part,b)<0){result.push(0);continue}xlen=part.length;highx=part[xlen-1]*base+part[xlen-2];highy=b[b_l-1]*base+b[b_l-2];if(xlen>b_l){highx=(highx+1)*base}guess=Math.ceil(highx/highy);do{check=multiplySmall(b,guess);if(compareAbs(check,part)<=0)break;guess--}while(guess);result.push(guess);part=subtract(part,check)}result.reverse();return[arrayToSmall(result),arrayToSmall(part)]}function divModSmall(value,lambda){var length=value.length,quotient=createArray(length),base=BASE,i,q,remainder,divisor;remainder=0;for(i=length-1;i>=0;--i){divisor=remainder*base+value[i];q=truncate(divisor/lambda);remainder=divisor-q*lambda;quotient[i]=q|0}return[quotient,remainder|0]}function divModAny(self,v){var value,n=parseValue(v);if(supportsNativeBigInt){return[new NativeBigInt(self.value/n.value),new NativeBigInt(self.value%n.value)]}var a=self.value,b=n.value;var quotient;if(b===0)throw new Error("Cannot divide by zero");if(self.isSmall){if(n.isSmall){return[new SmallInteger(truncate(a/b)),new SmallInteger(a%b)]}return[Integer[0],self]}if(n.isSmall){if(b===1)return[self,Integer[0]];if(b==-1)return[self.negate(),Integer[0]];var abs=Math.abs(b);if(abs<BASE){value=divModSmall(a,abs);quotient=arrayToSmall(value[0]);var remainder=value[1];if(self.sign)remainder=-remainder;if(typeof quotient==="number"){if(self.sign!==n.sign)quotient=-quotient;return[new SmallInteger(quotient),new SmallInteger(remainder)]}return[new BigInteger(quotient,self.sign!==n.sign),new SmallInteger(remainder)]}b=smallToArray(abs)}var comparison=compareAbs(a,b);if(comparison===-1)return[Integer[0],self];if(comparison===0)return[Integer[self.sign===n.sign?1:-1],Integer[0]];if(a.length+b.length<=200)value=divMod1(a,b);else value=divMod2(a,b);quotient=value[0];var qSign=self.sign!==n.sign,mod=value[1],mSign=self.sign;if(typeof quotient==="number"){if(qSign)quotient=-quotient;quotient=new SmallInteger(quotient)}else quotient=new BigInteger(quotient,qSign);if(typeof mod==="number"){if(mSign)mod=-mod;mod=new SmallInteger(mod)}else mod=new BigInteger(mod,mSign);return[quotient,mod]}BigInteger.prototype.divmod=function(v){var result=divModAny(this,v);return{quotient:result[0],remainder:result[1]}};NativeBigInt.prototype.divmod=SmallInteger.prototype.divmod=BigInteger.prototype.divmod;BigInteger.prototype.divide=function(v){return divModAny(this,v)[0]};NativeBigInt.prototype.over=NativeBigInt.prototype.divide=function(v){return new NativeBigInt(this.value/parseValue(v).value)};SmallInteger.prototype.over=SmallInteger.prototype.divide=BigInteger.prototype.over=BigInteger.prototype.divide;BigInteger.prototype.mod=function(v){return divModAny(this,v)[1]};NativeBigInt.prototype.mod=NativeBigInt.prototype.remainder=function(v){return new NativeBigInt(this.value%parseValue(v).value)};SmallInteger.prototype.remainder=SmallInteger.prototype.mod=BigInteger.prototype.remainder=BigInteger.prototype.mod;BigInteger.prototype.pow=function(v){var n=parseValue(v),a=this.value,b=n.value,value,x,y;if(b===0)return Integer[1];if(a===0)return Integer[0];if(a===1)return Integer[1];if(a===-1)return n.isEven()?Integer[1]:Integer[-1];if(n.sign){return Integer[0]}if(!n.isSmall)throw new Error("The exponent "+n.toString()+" is too large.");if(this.isSmall){if(isPrecise(value=Math.pow(a,b)))return new SmallInteger(truncate(value))}x=this;y=Integer[1];while(true){if(b&1===1){y=y.times(x);--b}if(b===0)break;b/=2;x=x.square()}return y};SmallInteger.prototype.pow=BigInteger.prototype.pow;NativeBigInt.prototype.pow=function(v){var n=parseValue(v);var a=this.value,b=n.value;var _0=BigInt(0),_1=BigInt(1),_2=BigInt(2);if(b===_0)return Integer[1];if(a===_0)return Integer[0];if(a===_1)return Integer[1];if(a===BigInt(-1))return n.isEven()?Integer[1]:Integer[-1];if(n.isNegative())return new NativeBigInt(_0);var x=this;var y=Integer[1];while(true){if((b&_1)===_1){y=y.times(x);--b}if(b===_0)break;b/=_2;x=x.square()}return y};BigInteger.prototype.modPow=function(exp,mod){exp=parseValue(exp);mod=parseValue(mod);if(mod.isZero())throw new Error("Cannot take modPow with modulus 0");var r=Integer[1],base=this.mod(mod);if(exp.isNegative()){exp=exp.multiply(Integer[-1]);base=base.modInv(mod)}while(exp.isPositive()){if(base.isZero())return Integer[0];if(exp.isOdd())r=r.multiply(base).mod(mod);exp=exp.divide(2);base=base.square().mod(mod)}return r};NativeBigInt.prototype.modPow=SmallInteger.prototype.modPow=BigInteger.prototype.modPow;function compareAbs(a,b){if(a.length!==b.length){return a.length>b.length?1:-1}for(var i=a.length-1;i>=0;i--){if(a[i]!==b[i])return a[i]>b[i]?1:-1}return 0}BigInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall)return 1;return compareAbs(a,b)};SmallInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=Math.abs(this.value),b=n.value;if(n.isSmall){b=Math.abs(b);return a===b?0:a>b?1:-1}return-1};NativeBigInt.prototype.compareAbs=function(v){var a=this.value;var b=parseValue(v).value;a=a>=0?a:-a;b=b>=0?b:-b;return a===b?0:a>b?1:-1};BigInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(this.sign!==n.sign){return n.sign?1:-1}if(n.isSmall){return this.sign?-1:1}return compareAbs(a,b)*(this.sign?-1:1)};BigInteger.prototype.compareTo=BigInteger.prototype.compare;SmallInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall){return a==b?0:a>b?1:-1}if(a<0!==n.sign){return a<0?-1:1}return a<0?1:-1};SmallInteger.prototype.compareTo=SmallInteger.prototype.compare;NativeBigInt.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var a=this.value;var b=parseValue(v).value;return a===b?0:a>b?1:-1};NativeBigInt.prototype.compareTo=NativeBigInt.prototype.compare;BigInteger.prototype.equals=function(v){return this.compare(v)===0};NativeBigInt.prototype.eq=NativeBigInt.prototype.equals=SmallInteger.prototype.eq=SmallInteger.prototype.equals=BigInteger.prototype.eq=BigInteger.prototype.equals;BigInteger.prototype.notEquals=function(v){return this.compare(v)!==0};NativeBigInt.prototype.neq=NativeBigInt.prototype.notEquals=SmallInteger.prototype.neq=SmallInteger.prototype.notEquals=BigInteger.prototype.neq=BigInteger.prototype.notEquals;BigInteger.prototype.greater=function(v){return this.compare(v)>0};NativeBigInt.prototype.gt=NativeBigInt.prototype.greater=SmallInteger.prototype.gt=SmallInteger.prototype.greater=BigInteger.prototype.gt=BigInteger.prototype.greater;BigInteger.prototype.lesser=function(v){return this.compare(v)<0};NativeBigInt.prototype.lt=NativeBigInt.prototype.lesser=SmallInteger.prototype.lt=SmallInteger.prototype.lesser=BigInteger.prototype.lt=BigInteger.prototype.lesser;BigInteger.prototype.greaterOrEquals=function(v){return this.compare(v)>=0};NativeBigInt.prototype.geq=NativeBigInt.prototype.greaterOrEquals=SmallInteger.prototype.geq=SmallInteger.prototype.greaterOrEquals=BigInteger.prototype.geq=BigInteger.prototype.greaterOrEquals;BigInteger.prototype.lesserOrEquals=function(v){return this.compare(v)<=0};NativeBigInt.prototype.leq=NativeBigInt.prototype.lesserOrEquals=SmallInteger.prototype.leq=SmallInteger.prototype.lesserOrEquals=BigInteger.prototype.leq=BigInteger.prototype.lesserOrEquals;BigInteger.prototype.isEven=function(){return(this.value[0]&1)===0};SmallInteger.prototype.isEven=function(){return(this.value&1)===0};NativeBigInt.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)};BigInteger.prototype.isOdd=function(){return(this.value[0]&1)===1};SmallInteger.prototype.isOdd=function(){return(this.value&1)===1};NativeBigInt.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)};BigInteger.prototype.isPositive=function(){return!this.sign};SmallInteger.prototype.isPositive=function(){return this.value>0};NativeBigInt.prototype.isPositive=SmallInteger.prototype.isPositive;BigInteger.prototype.isNegative=function(){return this.sign};SmallInteger.prototype.isNegative=function(){return this.value<0};NativeBigInt.prototype.isNegative=SmallInteger.prototype.isNegative;BigInteger.prototype.isUnit=function(){return false};SmallInteger.prototype.isUnit=function(){return Math.abs(this.value)===1};NativeBigInt.prototype.isUnit=function(){return this.abs().value===BigInt(1)};BigInteger.prototype.isZero=function(){return false};SmallInteger.prototype.isZero=function(){return this.value===0};NativeBigInt.prototype.isZero=function(){return this.value===BigInt(0)};BigInteger.prototype.isDivisibleBy=function(v){var n=parseValue(v);if(n.isZero())return false;if(n.isUnit())return true;if(n.compareAbs(2)===0)return this.isEven();return this.mod(n).isZero()};NativeBigInt.prototype.isDivisibleBy=SmallInteger.prototype.isDivisibleBy=BigInteger.prototype.isDivisibleBy;function isBasicPrime(v){var n=v.abs();if(n.isUnit())return false;if(n.equals(2)||n.equals(3)||n.equals(5))return true;if(n.isEven()||n.isDivisibleBy(3)||n.isDivisibleBy(5))return false;if(n.lesser(49))return true}function millerRabinTest(n,a){var nPrev=n.prev(),b=nPrev,r=0,d,t,i,x;while(b.isEven())b=b.divide(2),r++;next:for(i=0;i<a.length;i++){if(n.lesser(a[i]))continue;x=bigInt(a[i]).modPow(b,n);if(x.isUnit()||x.equals(nPrev))continue;for(d=r-1;d!=0;d--){x=x.square().mod(n);if(x.isUnit())return false;if(x.equals(nPrev))continue next}return false}return true}BigInteger.prototype.isPrime=function(strict){var isPrime=isBasicPrime(this);if(isPrime!==undefined)return isPrime;var n=this.abs();var bits=n.bitLength();if(bits<=64)return millerRabinTest(n,[2,3,5,7,11,13,17,19,23,29,31,37]);var logN=Math.log(2)*bits.toJSNumber();var t=Math.ceil(strict===true?2*Math.pow(logN,2):logN);for(var a=[],i=0;i<t;i++){a.push(bigInt(i+2))}return millerRabinTest(n,a)};NativeBigInt.prototype.isPrime=SmallInteger.prototype.isPrime=BigInteger.prototype.isPrime;BigInteger.prototype.isProbablePrime=function(iterations,rng){var isPrime=isBasicPrime(this);if(isPrime!==undefined)return isPrime;var n=this.abs();var t=iterations===undefined?5:iterations;for(var a=[],i=0;i<t;i++){a.push(bigInt.randBetween(2,n.minus(2),rng))}return millerRabinTest(n,a)};NativeBigInt.prototype.isProbablePrime=SmallInteger.prototype.isProbablePrime=BigInteger.prototype.isProbablePrime;BigInteger.prototype.modInv=function(n){var t=bigInt.zero,newT=bigInt.one,r=parseValue(n),newR=this.abs(),q,lastT,lastR;while(!newR.isZero()){q=r.divide(newR);lastT=t;lastR=r;t=newT;r=newR;newT=lastT.subtract(q.multiply(newT));newR=lastR.subtract(q.multiply(newR))}if(!r.isUnit())throw new Error(this.toString()+" and "+n.toString()+" are not co-prime");if(t.compare(0)===-1){t=t.add(n)}if(this.isNegative()){return t.negate()}return t};NativeBigInt.prototype.modInv=SmallInteger.prototype.modInv=BigInteger.prototype.modInv;BigInteger.prototype.next=function(){var value=this.value;if(this.sign){return subtractSmall(value,1,this.sign)}return new BigInteger(addSmall(value,1),this.sign)};SmallInteger.prototype.next=function(){var value=this.value;if(value+1<MAX_INT)return new SmallInteger(value+1);return new BigInteger(MAX_INT_ARR,false)};NativeBigInt.prototype.next=function(){return new NativeBigInt(this.value+BigInt(1))};BigInteger.prototype.prev=function(){var value=this.value;if(this.sign){return new BigInteger(addSmall(value,1),true)}return subtractSmall(value,1,this.sign)};SmallInteger.prototype.prev=function(){var value=this.value;if(value-1>-MAX_INT)return new SmallInteger(value-1);return new BigInteger(MAX_INT_ARR,true)};NativeBigInt.prototype.prev=function(){return new NativeBigInt(this.value-BigInt(1))};var powersOfTwo=[1];while(2*powersOfTwo[powersOfTwo.length-1]<=BASE)powersOfTwo.push(2*powersOfTwo[powersOfTwo.length-1]);var powers2Length=powersOfTwo.length,highestPower2=powersOfTwo[powers2Length-1];function shift_isSmall(n){return Math.abs(n)<=BASE}BigInteger.prototype.shiftLeft=function(v){var n=parseValue(v).toJSNumber();if(!shift_isSmall(n)){throw new Error(String(n)+" is too large for shifting.")}if(n<0)return this.shiftRight(-n);var result=this;if(result.isZero())return result;while(n>=powers2Length){result=result.multiply(highestPower2);n-=powers2Length-1}return result.multiply(powersOfTwo[n])};NativeBigInt.prototype.shiftLeft=SmallInteger.prototype.shiftLeft=BigInteger.prototype.shiftLeft;BigInteger.prototype.shiftRight=function(v){var remQuo;var n=parseValue(v).toJSNumber();if(!shift_isSmall(n)){throw new Error(String(n)+" is too large for shifting.")}if(n<0)return this.shiftLeft(-n);var result=this;while(n>=powers2Length){if(result.isZero()||result.isNegative()&&result.isUnit())return result;remQuo=divModAny(result,highestPower2);result=remQuo[1].isNegative()?remQuo[0].prev():remQuo[0];n-=powers2Length-1}remQuo=divModAny(result,powersOfTwo[n]);return remQuo[1].isNegative()?remQuo[0].prev():remQuo[0]};NativeBigInt.prototype.shiftRight=SmallInteger.prototype.shiftRight=BigInteger.prototype.shiftRight;function bitwise(x,y,fn){y=parseValue(y);var xSign=x.isNegative(),ySign=y.isNegative();var xRem=xSign?x.not():x,yRem=ySign?y.not():y;var xDigit=0,yDigit=0;var xDivMod=null,yDivMod=null;var result=[];while(!xRem.isZero()||!yRem.isZero()){xDivMod=divModAny(xRem,highestPower2);xDigit=xDivMod[1].toJSNumber();if(xSign){xDigit=highestPower2-1-xDigit}yDivMod=divModAny(yRem,highestPower2);yDigit=yDivMod[1].toJSNumber();if(ySign){yDigit=highestPower2-1-yDigit}xRem=xDivMod[0];yRem=yDivMod[0];result.push(fn(xDigit,yDigit))}var sum=fn(xSign?1:0,ySign?1:0)!==0?bigInt(-1):bigInt(0);for(var i=result.length-1;i>=0;i-=1){sum=sum.multiply(highestPower2).add(bigInt(result[i]))}return sum}BigInteger.prototype.not=function(){return this.negate().prev()};NativeBigInt.prototype.not=SmallInteger.prototype.not=BigInteger.prototype.not;BigInteger.prototype.and=function(n){return bitwise(this,n,function(a,b){return a&b})};NativeBigInt.prototype.and=SmallInteger.prototype.and=BigInteger.prototype.and;BigInteger.prototype.or=function(n){return bitwise(this,n,function(a,b){return a|b})};NativeBigInt.prototype.or=SmallInteger.prototype.or=BigInteger.prototype.or;BigInteger.prototype.xor=function(n){return bitwise(this,n,function(a,b){return a^b})};NativeBigInt.prototype.xor=SmallInteger.prototype.xor=BigInteger.prototype.xor;var LOBMASK_I=1<<30,LOBMASK_BI=(BASE&-BASE)*(BASE&-BASE)|LOBMASK_I;function roughLOB(n){var v=n.value,x=typeof v==="number"?v|LOBMASK_I:typeof v==="bigint"?v|BigInt(LOBMASK_I):v[0]+v[1]*BASE|LOBMASK_BI;return x&-x}function integerLogarithm(value,base){if(base.compareTo(value)<=0){var tmp=integerLogarithm(value,base.square(base));var p=tmp.p;var e=tmp.e;var t=p.multiply(base);return t.compareTo(value)<=0?{p:t,e:e*2+1}:{p:p,e:e*2}}return{p:bigInt(1),e:0}}BigInteger.prototype.bitLength=function(){var n=this;if(n.compareTo(bigInt(0))<0){n=n.negate().subtract(bigInt(1))}if(n.compareTo(bigInt(0))===0){return bigInt(0)}return bigInt(integerLogarithm(n,bigInt(2)).e).add(bigInt(1))};NativeBigInt.prototype.bitLength=SmallInteger.prototype.bitLength=BigInteger.prototype.bitLength;function max(a,b){a=parseValue(a);b=parseValue(b);return a.greater(b)?a:b}function min(a,b){a=parseValue(a);b=parseValue(b);return a.lesser(b)?a:b}function gcd(a,b){a=parseValue(a).abs();b=parseValue(b).abs();if(a.equals(b))return a;if(a.isZero())return b;if(b.isZero())return a;var c=Integer[1],d,t;while(a.isEven()&&b.isEven()){d=min(roughLOB(a),roughLOB(b));a=a.divide(d);b=b.divide(d);c=c.multiply(d)}while(a.isEven()){a=a.divide(roughLOB(a))}do{while(b.isEven()){b=b.divide(roughLOB(b))}if(a.greater(b)){t=b;b=a;a=t}b=b.subtract(a)}while(!b.isZero());return c.isUnit()?a:a.multiply(c)}function lcm(a,b){a=parseValue(a).abs();b=parseValue(b).abs();return a.divide(gcd(a,b)).multiply(b)}function randBetween(a,b,rng){a=parseValue(a);b=parseValue(b);var usedRNG=rng||Math.random;var low=min(a,b),high=max(a,b);var range=high.subtract(low).add(1);if(range.isSmall)return low.add(Math.floor(usedRNG()*range));var digits=toBase(range,BASE).value;var result=[],restricted=true;for(var i=0;i<digits.length;i++){var top=restricted?digits[i]:BASE;var digit=truncate(usedRNG()*top);result.push(digit);if(digit<top)restricted=false}return low.add(Integer.fromArray(result,BASE,false))}var parseBase=function(text,base,alphabet,caseSensitive){alphabet=alphabet||DEFAULT_ALPHABET;text=String(text);if(!caseSensitive){text=text.toLowerCase();alphabet=alphabet.toLowerCase()}var length=text.length;var i;var absBase=Math.abs(base);var alphabetValues={};for(i=0;i<alphabet.length;i++){alphabetValues[alphabet[i]]=i}for(i=0;i<length;i++){var c=text[i];if(c==="-")continue;if(c in alphabetValues){if(alphabetValues[c]>=absBase){if(c==="1"&&absBase===1)continue;throw new Error(c+" is not a valid digit in base "+base+".")}}}base=parseValue(base);var digits=[];var isNegative=text[0]==="-";for(i=isNegative?1:0;i<text.length;i++){var c=text[i];if(c in alphabetValues)digits.push(parseValue(alphabetValues[c]));else if(c==="<"){var start=i;do{i++}while(text[i]!==">"&&i<text.length);digits.push(parseValue(text.slice(start+1,i)))}else throw new Error(c+" is not a valid character")}return parseBaseFromArray(digits,base,isNegative)};function parseBaseFromArray(digits,base,isNegative){var val=Integer[0],pow=Integer[1],i;for(i=digits.length-1;i>=0;i--){val=val.add(digits[i].times(pow));pow=pow.times(base)}return isNegative?val.negate():val}function stringify(digit,alphabet){alphabet=alphabet||DEFAULT_ALPHABET;if(digit<alphabet.length){return alphabet[digit]}return"<"+digit+">"}function toBase(n,base){base=bigInt(base);if(base.isZero()){if(n.isZero())return{value:[0],isNegative:false};throw new Error("Cannot convert nonzero numbers to base 0.")}if(base.equals(-1)){if(n.isZero())return{value:[0],isNegative:false};if(n.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-n.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:false};var arr=Array.apply(null,Array(n.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);arr.unshift([1]);return{value:[].concat.apply([],arr),isNegative:false}}var neg=false;if(n.isNegative()&&base.isPositive()){neg=true;n=n.abs()}if(base.isUnit()){if(n.isZero())return{value:[0],isNegative:false};return{value:Array.apply(null,Array(n.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:neg}}var out=[];var left=n,divmod;while(left.isNegative()||left.compareAbs(base)>=0){divmod=left.divmod(base);left=divmod.quotient;var digit=divmod.remainder;if(digit.isNegative()){digit=base.minus(digit).abs();left=left.next()}out.push(digit.toJSNumber())}out.push(left.toJSNumber());return{value:out.reverse(),isNegative:neg}}function toBaseString(n,base,alphabet){var arr=toBase(n,base);return(arr.isNegative?"-":"")+arr.value.map(function(x){return stringify(x,alphabet)}).join("")}BigInteger.prototype.toArray=function(radix){return toBase(this,radix)};SmallInteger.prototype.toArray=function(radix){return toBase(this,radix)};NativeBigInt.prototype.toArray=function(radix){return toBase(this,radix)};BigInteger.prototype.toString=function(radix,alphabet){if(radix===undefined)radix=10;if(radix!==10)return toBaseString(this,radix,alphabet);var v=this.value,l=v.length,str=String(v[--l]),zeros="0000000",digit;while(--l>=0){digit=String(v[l]);str+=zeros.slice(digit.length)+digit}var sign=this.sign?"-":"";return sign+str};SmallInteger.prototype.toString=function(radix,alphabet){if(radix===undefined)radix=10;if(radix!=10)return toBaseString(this,radix,alphabet);return String(this.value)};NativeBigInt.prototype.toString=SmallInteger.prototype.toString;NativeBigInt.prototype.toJSON=BigInteger.prototype.toJSON=SmallInteger.prototype.toJSON=function(){return this.toString()};BigInteger.prototype.valueOf=function(){return parseInt(this.toString(),10)};BigInteger.prototype.toJSNumber=BigInteger.prototype.valueOf;SmallInteger.prototype.valueOf=function(){return this.value};SmallInteger.prototype.toJSNumber=SmallInteger.prototype.valueOf;NativeBigInt.prototype.valueOf=NativeBigInt.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};function parseStringValue(v){if(isPrecise(+v)){var x=+v;if(x===truncate(x))return supportsNativeBigInt?new NativeBigInt(BigInt(x)):new SmallInteger(x);throw new Error("Invalid integer: "+v)}var sign=v[0]==="-";if(sign)v=v.slice(1);var split=v.split(/e/i);if(split.length>2)throw new Error("Invalid integer: "+split.join("e"));if(split.length===2){var exp=split[1];if(exp[0]==="+")exp=exp.slice(1);exp=+exp;if(exp!==truncate(exp)||!isPrecise(exp))throw new Error("Invalid integer: "+exp+" is not a valid exponent.");var text=split[0];var decimalPlace=text.indexOf(".");if(decimalPlace>=0){exp-=text.length-decimalPlace-1;text=text.slice(0,decimalPlace)+text.slice(decimalPlace+1)}if(exp<0)throw new Error("Cannot include negative exponent part for integers");text+=new Array(exp+1).join("0");v=text}var isValid=/^([0-9][0-9]*)$/.test(v);if(!isValid)throw new Error("Invalid integer: "+v);if(supportsNativeBigInt){return new NativeBigInt(BigInt(sign?"-"+v:v))}var r=[],max=v.length,l=LOG_BASE,min=max-l;while(max>0){r.push(+v.slice(min,max));min-=l;if(min<0)min=0;max-=l}trim(r);return new BigInteger(r,sign)}function parseNumberValue(v){if(supportsNativeBigInt){return new NativeBigInt(BigInt(v))}if(isPrecise(v)){if(v!==truncate(v))throw new Error(v+" is not an integer.");return new SmallInteger(v)}return parseStringValue(v.toString())}function parseValue(v){if(typeof v==="number"){return parseNumberValue(v)}if(typeof v==="string"){return parseStringValue(v)}if(typeof v==="bigint"){return new NativeBigInt(v)}return v}for(var i=0;i<1e3;i++){Integer[i]=parseValue(i);if(i>0)Integer[-i]=parseValue(-i)}Integer.one=Integer[1];Integer.zero=Integer[0];Integer.minusOne=Integer[-1];Integer.max=max;Integer.min=min;Integer.gcd=gcd;Integer.lcm=lcm;Integer.isInstance=function(x){return x instanceof BigInteger||x instanceof SmallInteger||x instanceof NativeBigInt};Integer.randBetween=randBetween;Integer.fromArray=function(digits,base,isNegative){return parseBaseFromArray(digits.map(parseValue),parseValue(base||10),isNegative)};return Integer}();if(typeof module!=="undefined"&&module.hasOwnProperty("exports")){module.exports=bigInt}if(typeof define==="function"&&define.amd){define(function(){return bigInt})} \ No newline at end of file
diff --git a/big-integer/README.md b/big-integer/README.md
index 0901973..5668e58 100644
--- a/big-integer/README.md
+++ b/big-integer/README.md
@@ -15,7 +15,7 @@
If you are using a browser, you can download [BigInteger.js from GitHub](http://peterolson.github.com/BigInteger.js/BigInteger.min.js) or just hotlink to it:
- <script src="http://peterolson.github.com/BigInteger.js/BigInteger.min.js"></script>
+ <script src="https://peterolson.github.io/BigInteger.js/BigInteger.min.js"></script>
If you are using node, you can install BigInteger with [npm](https://npmjs.org/).
@@ -49,7 +49,7 @@ Examples:
var largeNumber = bigInt("75643564363473453456342378564387956906736546456235345");
var googol = bigInt("1e100");
var bigNumber = bigInt(largeNumber);
-
+
var maximumByte = bigInt("FF", 16);
var fiftyFiveGoogol = bigInt("<55>0", googol);
@@ -68,7 +68,7 @@ There are three named constants already stored that you do not have to construct
- `bigInt.one`, equivalent to `bigInt(1)`
- `bigInt.zero`, equivalent to `bigInt(0)`
- `bigInt.minusOne`, equivalent to `bigInt(-1)`
-
+
The numbers from -999 to 999 are also already prestored and can be accessed using `bigInt[index]`, for example:
- `bigInt[-999]`, equivalent to `bigInt(-999)`
@@ -88,7 +88,7 @@ Returns the absolute value of a bigInt.
Performs addition.
- `bigInt(5).add(7)` => `12`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Addition)
#### `and(number)`
@@ -129,7 +129,7 @@ Alias for the `compare` method.
Performs integer division, disregarding the remainder.
- `bigInt(59).divide(5)` => `11`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division)
#### `divmod(number)`
@@ -138,7 +138,7 @@ Performs division and returns an object with two properties: `quotient` and `rem
- `bigInt(59).divmod(5)` => `{quotient: bigInt(11), remainder: bigInt(4) }`
- `bigInt(-5).divmod(2)` => `{quotient: bigInt(-2), remainder: bigInt(-1) }`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division)
#### `eq(number)`
@@ -221,17 +221,21 @@ Returns `true` if the number is prime, `false` otherwise.
- `bigInt(5).isPrime()` => `true`
- `bigInt(6).isPrime()` => `false`
-#### `isProbablePrime([iterations])`
+#### `isProbablePrime([iterations], [rng])`
Returns `true` if the number is very likely to be prime, `false` otherwise.
-Argument is optional and determines the amount of iterations of the test (default: `5`). The more iterations, the lower chance of getting a false positive.
+Supplying `iterations` is optional - it determines the number of iterations of the test (default: `5`). The more iterations, the lower chance of getting a false positive.
This uses the [Miller Rabin test](https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test).
- `bigInt(5).isProbablePrime()` => `true`
- `bigInt(49).isProbablePrime()` => `false`
- `bigInt(1729).isProbablePrime()` => `false`
-
-Note that this function is not deterministic, since it relies on random sampling of factors, so the result for some numbers is not always the same.
+
+Note that this function is not deterministic, since it relies on random sampling of factors, so the result for some numbers is not always the same - unless you pass a predictable random number generator as `rng`. The behavior and requirements are the same as with `randBetween`.
+
+ - `bigInt(1729).isProbablePrime(1, () => 0.1)` => `false`
+ - `bigInt(1729).isProbablePrime(1, () => 0.2)` => `true`
+
If the number is composite then the Miller–Rabin primality test declares the number probably prime with a probability at most `4` to the power `−iterations`.
If the number is prime, this function always returns `true`.
@@ -280,7 +284,7 @@ Alias for the `lesser` method.
Alias for the `subtract` method.
- `bigInt(3).minus(5)` => `-2`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Subtraction)
#### `mod(number)`
@@ -289,7 +293,7 @@ Performs division and returns the remainder, disregarding the quotient. The sign
- `bigInt(59).mod(5)` => `4`
- `bigInt(-5).mod(2)` => `-1`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division)
#### `modInv(mod)`
@@ -349,7 +353,7 @@ Performs the bitwise OR operation. The operands are treated as if they were repr
Alias for the `divide` method.
- `bigInt(59).over(5)` => `11`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division)
#### `plus(number)`
@@ -357,7 +361,7 @@ Alias for the `divide` method.
Alias for the `add` method.
- `bigInt(5).plus(7)` => `12`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Addition)
#### `pow(number)`
@@ -399,7 +403,7 @@ Shifts the number right by `n` places in its binary representation. If a negativ
Squares the number
- `bigInt(3).square()` => `9`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Squaring)
#### `subtract(number)`
@@ -407,7 +411,7 @@ Squares the number
Performs subtraction.
- `bigInt(3).subtract(5)` => `-2`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Subtraction)
#### `times(number)`
@@ -415,7 +419,7 @@ Performs subtraction.
Alias for the `multiply` method.
- `bigInt(111).times(111)` => `12321`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Multiplication)
#### `toArray(radix)`
@@ -474,7 +478,7 @@ Performs the bitwise XOR operation. The operands are treated as if they were rep
- `bigInt(12).xor(5)` => `9`
- `bigInt(12).xor(-5)` => `-9`
-
+
### Static Methods
#### `fromArray(digits, base = 10, isNegative?)`
@@ -496,13 +500,13 @@ Returns `true` if `x` is a BigInteger, `false` otherwise.
- `bigInt.isInstance(bigInt(14))` => `true`
- `bigInt.isInstance(14)` => `false`
-
+
#### `lcm(a,b)`
Finds the least common multiple of `a` and `b`.
-
+
- `bigInt.lcm(21, 6)` => `42`
-
+
#### `max(a,b)`
Returns the largest of `a` and `b`.
@@ -515,12 +519,16 @@ Returns the smallest of `a` and `b`.
- `bigInt.min(77, 432)` => `77`
-#### `randBetween(min, max)`
+#### `randBetween(min, max, [rng])`
-Returns a random number between `min` and `max`.
+Returns a random number between `min` and `max`, optionally using `rng` to generate randomness.
- `bigInt.randBetween("-1e100", "1e100")` => (for example) `8494907165436643479673097939554427056789510374838494147955756275846226209006506706784609314471378745`
+`rng` should take no arguments and return a `number` between 0 and 1. It defaults to `Math.random`.
+
+ - `bigInt.randBetween("-1e100", "1e100", () => 0.5)` => (always) `50000005000000500000050000005000000500000050000005000000500000050000005000000500000050000005000000`
+
### Override Methods
@@ -558,9 +566,9 @@ Base 0 is only allowed for the number zero.
- `bigInt(0).toString(0)` => `0`
- `bigInt(1).toString(0)` => `Error: Cannot convert nonzero numbers to base 0.`
-
+
[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#toString)
-
+
#### `valueOf()`
Converts a bigInt to a native Javascript number. This override allows you to use native arithmetic operators without explicit conversion:
diff --git a/big-integer/benchmark/tests.js b/big-integer/benchmark/tests.js
index e3395b5..07f3273 100644
--- a/big-integer/benchmark/tests.js
+++ b/big-integer/benchmark/tests.js
@@ -114,7 +114,7 @@ var libraries = (function () {
"Yaffle BigInteger": {
url: ["https://rawgit.com/Yaffle/BigInteger/gh-pages/BigInteger.js"],
projectURL: "https://github.com/Yaffle/BigInteger",
- onStart: createInitialization("BigInteger.parseInt"),
+ onStart: createInitialization("BigInteger.BigInt"),
tests: generateTests(function (x) {
return x
.replace(/([_a-zA-Z0-9]+)\.add\(([_a-zA-Z0-9]+)\)/g, "BigInteger.add($1, $2)")
@@ -123,8 +123,27 @@ var libraries = (function () {
.replace(/([_a-zA-Z0-9]+)\.over\(([_a-zA-Z0-9]+)\)/g, "BigInteger.divide($1, $2)")
.replace(/([_a-zA-Z0-9]+)\.square\(\)/g, "BigInteger.multiply($1, $1)")
.replace(/([_a-zA-Z0-9]+)\.toString\(([_a-zA-Z0-9]+)\)/g, "($1).toString($2)")
- .replace("parseInt", "BigInteger.parseInt");
- }, ["Exponentiation"])
+ .replace(/parseInt\(([_a-zA-Z0-9]+),\s*16\)/g, "BigInteger.BigInt('0x' + $1)")
+ .replace(/parseInt\(([_a-zA-Z0-9]+),\s*10\)/g, "BigInteger.BigInt($1)")
+ .replace(/([_a-zA-Z0-9]+)\.pow\(([_a-zA-Z0-9]+)\)/g, "BigInteger.exponentiate($1, $2)");
+ })
+ },
+ "ChromeLabs JSBI": {
+ url: ["https://unpkg.com/jsbi@2.0.5/dist/jsbi-umd.js"],
+ projectURL: "https://github.com/GoogleChromeLabs/jsbi",
+ onStart: createInitialization("JSBI.BigInt"),
+ tests: generateTests(function (x) {
+ return x
+ .replace(/([_a-zA-Z0-9]+)\.add\(([_a-zA-Z0-9]+)\)/g, "JSBI.add($1, $2)")
+ .replace(/([_a-zA-Z0-9]+)\.minus\(([_a-zA-Z0-9]+)\)/g, "JSBI.subtract($1, $2)")
+ .replace(/([_a-zA-Z0-9]+)\.times\(([_a-zA-Z0-9]+)\)/g, "JSBI.multiply($1, $2)")
+ .replace(/([_a-zA-Z0-9]+)\.over\(([_a-zA-Z0-9]+)\)/g, "JSBI.divide($1, $2)")
+ .replace(/([_a-zA-Z0-9]+)\.square\(\)/g, "JSBI.multiply($1, $1)")
+ .replace(/([_a-zA-Z0-9]+)\.toString\(([_a-zA-Z0-9]+)\)/g, "($1).toString($2)")
+ .replace(/parseInt\(([_a-zA-Z0-9]+),\s*16\)/g, "JSBI.BigInt('0x' + $1)")
+ .replace(/parseInt\(([_a-zA-Z0-9]+),\s*10\)/g, "JSBI.BigInt($1)")
+ .replace(/([_a-zA-Z0-9]+)\.pow\(([_a-zA-Z0-9]+)\)/g, "JSBI.exponentiate($1, $2)");
+ })
},
"Silent Matt BigInteger": {
url: ["https://rawgit.com/silentmatt/javascript-biginteger/master/biginteger.js"],
diff --git a/big-integer/package.json b/big-integer/package.json
index 433de27..b7ffd66 100644
--- a/big-integer/package.json
+++ b/big-integer/package.json
@@ -1,6 +1,6 @@
{
"name": "big-integer",
- "version": "1.6.40",
+ "version": "1.6.48",
"author": "Peter Olson <peter.e.c.olson+npm@gmail.com>",
"description": "An arbitrary length integer library for Javascript",
"contributors": [],
@@ -28,16 +28,16 @@
"devDependencies": {
"@types/lodash": "^4.14.118",
"@types/node": "^7.10.2",
- "coveralls": "^2.11.4",
- "jasmine": "2.1.x",
- "jasmine-core": "^2.3.4",
- "karma": "^0.13.22",
- "karma-cli": "^1.0.1",
- "karma-coverage": "^0.4.2",
- "karma-jasmine": "^0.3.6",
+ "coveralls": "^3.0.6",
+ "jasmine": "3.5.0",
+ "jasmine-core": "^3.5.0",
+ "karma": "^4.3.0",
+ "karma-cli": "^2.0.0",
+ "karma-coverage": "^2.0.1",
+ "karma-jasmine": "^2.0.1",
"karma-phantomjs-launcher": "^1.0.4",
"lodash": "^4.17.11",
- "typescript": "^2.9.2",
+ "typescript": "^3.6.3",
"uglifyjs": "^2.4.10"
},
"license": "Unlicense",
diff --git a/big-integer/spec/spec.js b/big-integer/spec/spec.js
index 4d01dd8..be999e9 100644
--- a/big-integer/spec/spec.js
+++ b/big-integer/spec/spec.js
@@ -630,6 +630,9 @@ describe("BigInteger", function () {
} catch (e) {
expect(true).toBe(true);
}
+
+ expect(bigInt(2).modPow(-3, 11)).toEqualBigInt(7);
+ expect(bigInt(76455).modPow(-3758223534, 346346)).toEqualBigInt(339949);
});
});
@@ -818,7 +821,7 @@ describe("BigInteger", function () {
}
});
it("correctly identifies pseudo primes", function () {
- var largePrimes = ["3825123056546413051", "3825123056546413051", "3825123056546413051", "318665857834031151167461"];
+ var largePrimes = ["4033", "4681", "3825123056546413051", "3825123056546413051", "3825123056546413051", "318665857834031151167461"];
for (var i = 0; i < largePrimes.length; i++) {
expect(bigInt(largePrimes[i]).isPrime()).toBe(false);
}
@@ -854,6 +857,24 @@ describe("BigInteger", function () {
}
}
expect(falsePrimes / totalPrimes < 0.001).toBe(true);
+ });
+ it("is predictable given predictable rng", function () {
+ function getProbablePrimes(fakeRNG) {
+ var result = [];
+ for (var i = 1; i < 100; i++) {
+ var x = bigInt(i);
+ if (x.isProbablePrime(1, fakeRNG)) {
+ result.push(i);
+ }
+ }
+ return result;
+ }
+ for (var i = 0; i < 100; i++) {
+ function fakeRNG() {
+ return (i * 0.3571) % 1;
+ }
+ expect(getProbablePrimes(fakeRNG)).toEqual(getProbablePrimes(fakeRNG));
+ }
});
});
@@ -1153,6 +1174,14 @@ describe("BigInteger", function () {
expect(Math.abs(buckets[i] - ideal) / ideal < 0.1).toBe(true);
}
});
+ it("is predictable given predictable rng", function () {
+ for (var i = 0; i < 1e3; i++) {
+ function fakeRNG() {
+ return (i * 0.3571) % 1;
+ }
+ expect(bigInt.randBetween(0, 1024, fakeRNG)).toEqualBigInt(bigInt.randBetween(0, 1024, fakeRNG));
+ }
+ });
});
describe("isInstance", function () {
diff --git a/big-integer/spec/tsDefinitions.ts b/big-integer/spec/tsDefinitions.ts
index 5e4b6d4..b88bb98 100644
--- a/big-integer/spec/tsDefinitions.ts
+++ b/big-integer/spec/tsDefinitions.ts
@@ -106,6 +106,7 @@ if (removedInstanceFns.length) {
// constructor tests
const noArgument = bigInt();
const numberArgument = bigInt(93);
+const nativeBigintArgument = bigInt(93n);
const stringArgument = bigInt("75643564363473453456342378564387956906736546456235345");
const baseArgumentInt = bigInt("101010", 2);
const baseArgumentStr = bigInt("101010", "2");
@@ -131,6 +132,7 @@ isBigInteger = bigInt[0];
isBigInteger = bigInt[999];
isBigInteger = bigInt.fromArray([1, 2, 3]);
+isBigInteger = bigInt.fromArray([1n, 2n, 3n]);
isBigInteger = bigInt.fromArray(['1', '2', '3']);
isBigInteger = bigInt.fromArray([bigInt.one, bigInt.zero, bigInt(9)], 10, true);
@@ -138,55 +140,66 @@ isBigInteger = bigInt.gcd(0, 1);
isBoolean = bigInt.isInstance(x);
isBigInteger = bigInt.lcm(0, 1);
isBigInteger = bigInt.max(0, 1);
-isBigInteger = bigInt.gcd(0, 1);
+isBigInteger = bigInt.min(0, 1);
isBigInteger = bigInt.randBetween(0, 1);
+isBigInteger = bigInt.randBetween(0, 1, () => 0.5);
// Instance methods
isBigInteger = x.abs();
-isBigInteger = x.add(0).add(x).add("100");
-isBigInteger = x.and(0).and(x).and("100");
+isBigInteger = x.add(0).add(x).add("100").add(100n);
+isBigInteger = x.and(0).and(x).and("100").and(100n);
isNumber = x.compare(0);
isNumber = x.compare(x);
isNumber = x.compare("100");
+isNumber = x.compare(100n);
isNumber = x.compareAbs(0);
isNumber = x.compareAbs(x);
isNumber = x.compareAbs("100");
+isNumber = x.compareAbs(100n);
isNumber = x.compareTo(0);
isNumber = x.compareTo(x);
isNumber = x.compareTo("100");
+isNumber = x.compareTo(100n);
-isBigInteger = x.divide(10).divide(x).divide('10');
+isBigInteger = x.divide(10).divide(x).divide('10').divide(10n);
isDivmod = x.divmod(10);
isDivmod = x.divmod(x);
isDivmod = x.divmod("100");
+isDivmod = x.divmod(100n);
isBoolean = x.eq(0);
isBoolean = x.eq(x);
isBoolean = x.eq("100");
+isBoolean = x.eq(100n);
isBoolean = x.equals(0);
isBoolean = x.equals(x);
isBoolean = x.equals("100");
+isBoolean = x.equals(100n);
isBoolean = x.geq(0);
isBoolean = x.geq(x);
isBoolean = x.geq("100");
+isBoolean = x.geq(100n);
isBoolean = x.greater(0);
isBoolean = x.greater(x);
isBoolean = x.greater("100");
+isBoolean = x.greater(100n);
isBoolean = x.greaterOrEquals(0);
isBoolean = x.greaterOrEquals(x);
isBoolean = x.greaterOrEquals("100");
+isBoolean = x.greaterOrEquals(100n);
isBoolean = x.gt(0);
isBoolean = x.gt(x);
isBoolean = x.gt("100");
+isBoolean = x.gt(100n);
isBoolean = x.isDivisibleBy(x);
isBoolean = x.isEven();
@@ -197,6 +210,7 @@ isBoolean = x.isPrime();
isBoolean = x.isProbablePrime();
isBoolean = x.isProbablePrime(5);
+isBoolean = x.isProbablePrime(11, () => 0.5);
isBoolean = x.isUnit();
isBoolean = x.isZero();
@@ -204,11 +218,11 @@ isBoolean = x.leq(x);
isBoolean = x.lesser(0);
isBoolean = x.lesserOrEquals(0);
isBoolean = x.lt(0);
-isBigInteger = x.minus(0).minus(x).minus('0');
-isBigInteger = x.mod(10).mod(x).mod('10');
-isBigInteger = bigInt(3).modInv(11);
-isBigInteger = x.modPow(10, 2).modPow(x, x).modPow('10', '2');
-isBigInteger = x.multiply(0).multiply(x).multiply('0');
+isBigInteger = x.minus(0).minus(x).minus('0').minus(0n);
+isBigInteger = x.mod(10).mod(x).mod('10').mod(10n);
+isBigInteger = bigInt(3).modInv(11).modInv(11n);
+isBigInteger = x.modPow(10, 2).modPow(x, x).modPow('10', '2').modPow(10n, 2n);
+isBigInteger = x.multiply(0).multiply(x).multiply('0').multiply(0n);
isBigInteger = x.negate();
isBoolean = x.neq(x);
isBigInteger = x.next();
@@ -217,18 +231,19 @@ isBigInteger = x.not();
isBoolean = x.notEquals(0);
isBoolean = x.notEquals(x);
isBoolean = x.notEquals("100");
+isBoolean = x.notEquals(100n);
-isBigInteger = x.or(10).or(x).or('10');
-isBigInteger = x.over(10).over(x).over('10');
-isBigInteger = x.plus(0).plus(x).plus('0');
-isBigInteger = x.pow(0).pow(x).pow('0');
+isBigInteger = x.or(10).or(x).or('10').or(10n);
+isBigInteger = x.over(10).over(x).over('10').over(10n);
+isBigInteger = x.plus(0).plus(x).plus('0').plus(0n);
+isBigInteger = x.pow(0).pow(x).pow('0').pow(0n);
isBigInteger = x.prev();
-isBigInteger = x.remainder(10).remainder(x).remainder('10');
-isBigInteger = x.shiftLeft(0).shiftLeft('0');
-isBigInteger = x.shiftRight(0).shiftRight('0');
+isBigInteger = x.remainder(10).remainder(x).remainder('10').remainder(10n);
+isBigInteger = x.shiftLeft(0).shiftLeft('0').shiftLeft(0n);
+isBigInteger = x.shiftRight(0).shiftRight('0').shiftRight(0n);
isBigInteger = x.square();
-isBigInteger = x.subtract(0).subtract(x).subtract('0');
-isBigInteger = x.times(0).times(x).times('0');
+isBigInteger = x.subtract(0).subtract(x).subtract('0').subtract(0n);
+isBigInteger = x.times(0).times(x).times('0').times(0n);
isNumber = x.toJSNumber();
isBaseArray = x.toArray(10);
@@ -239,4 +254,4 @@ isString = x.toString(36);
isString = x.toJSON();
isNumber = x.valueOf();
-isBigInteger = x.xor(0).xor(x).xor('0');
+isBigInteger = x.xor(0).xor(x).xor('0').xor(0n);
diff --git a/big-integer/tsconfig.json b/big-integer/tsconfig.json
index 62636e8..dae01d4 100644
--- a/big-integer/tsconfig.json
+++ b/big-integer/tsconfig.json
@@ -1,5 +1,6 @@
{
"compilerOptions": {
+ "target": "esnext",
"module": "commonjs",
"lib": [
"es6"
@@ -22,4 +23,4 @@
"BigInteger.d.ts",
"spec/tsDefinitions.ts"
]
-} \ No newline at end of file
+}
diff --git a/date-fns/.babelrc.js b/date-fns/.babelrc.js
new file mode 100644
index 0000000..4e33238
--- /dev/null
+++ b/date-fns/.babelrc.js
@@ -0,0 +1,32 @@
+const presets = ['@babel/preset-typescript']
+const plugins = [
+ '@babel/plugin-transform-block-scoping',
+ '@babel/plugin-transform-template-literals',
+ '@babel/plugin-transform-arrow-functions',
+ '@babel/plugin-transform-parameters',
+ '@babel/plugin-transform-destructuring',
+ '@babel/plugin-proposal-optional-chaining',
+ '@babel/plugin-proposal-object-rest-spread',
+ '@babel/plugin-transform-shorthand-properties',
+]
+
+if (process.env.NODE_ENV === 'test') {
+ presets.push('babel-preset-power-assert')
+}
+
+if (process.env.BABEL_ENV !== 'esm') {
+ plugins.push('@babel/plugin-transform-modules-commonjs')
+ plugins.push('babel-plugin-add-module-exports')
+}
+
+if (process.env.BABEL_ENV === 'esm' || process.env.BABEL_ENV === 'commonjs') {
+ plugins.push(['babel-plugin-add-import-extension', { extension: 'js' }])
+}
+
+const overrides = [{ ignore: ['**/*.d.ts'] }]
+
+module.exports = {
+ presets,
+ plugins,
+ overrides,
+}
diff --git a/date-fns/.editorconfig b/date-fns/.editorconfig
new file mode 100644
index 0000000..1a09640
--- /dev/null
+++ b/date-fns/.editorconfig
@@ -0,0 +1,11 @@
+root = true
+
+[*]
+insert_final_newline = true
+charset = utf-8
+trim_trailing_whitespace = true
+end_of_line = lf
+
+[*.{js,json}]
+indent_style = space
+indent_size = 2
diff --git a/date-fns/.eslintignore b/date-fns/.eslintignore
new file mode 100644
index 0000000..082cbe2
--- /dev/null
+++ b/date-fns/.eslintignore
@@ -0,0 +1,3 @@
+node_modules
+/tmp
+/examples/*/dist \ No newline at end of file
diff --git a/date-fns/.eslintrc.js b/date-fns/.eslintrc.js
new file mode 100644
index 0000000..48a96d2
--- /dev/null
+++ b/date-fns/.eslintrc.js
@@ -0,0 +1,12 @@
+module.exports = {
+ extends: ['eslint:recommended', 'prettier'],
+ parser: 'babel-eslint',
+ env: {
+ browser: true,
+ node: true,
+ es6: true
+ },
+ rules: {
+ 'no-unused-vars': ['error', { argsIgnorePattern: '^_' }]
+ }
+}
diff --git a/date-fns/.flowconfig b/date-fns/.flowconfig
new file mode 100644
index 0000000..aa9fec0
--- /dev/null
+++ b/date-fns/.flowconfig
@@ -0,0 +1,4 @@
+[ignore]
+.*examples*
+[options]
+suppress_comment= \\(.\\|\n\\)*\\$ExpectedMistake
diff --git a/date-fns/.github/FUNDING.yml b/date-fns/.github/FUNDING.yml
new file mode 100644
index 0000000..ba2478b
--- /dev/null
+++ b/date-fns/.github/FUNDING.yml
@@ -0,0 +1,9 @@
+# These are supported funding model platforms
+
+github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+patreon: # Replace with a single Patreon username
+open_collective: date-fns
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+custom: # Replace with a single custom sponsorship URL
diff --git a/date-fns/.github/workflows/coverage.yaml b/date-fns/.github/workflows/coverage.yaml
new file mode 100644
index 0000000..88bc7cb
--- /dev/null
+++ b/date-fns/.github/workflows/coverage.yaml
@@ -0,0 +1,21 @@
+name: Coverage report
+
+'on':
+ push:
+ branches: [master]
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x]
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: Run release script
+ run: ./scripts/test/coverageReport.sh
diff --git a/date-fns/.github/workflows/deploy.yaml b/date-fns/.github/workflows/deploy.yaml
new file mode 100644
index 0000000..fda9ab1
--- /dev/null
+++ b/date-fns/.github/workflows/deploy.yaml
@@ -0,0 +1,21 @@
+name: Deploy
+
+'on':
+ push:
+ branches: [master]
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x]
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: Run release script
+ run: ./scripts/release/release.sh
diff --git a/date-fns/.github/workflows/main_tests.yaml b/date-fns/.github/workflows/main_tests.yaml
new file mode 100644
index 0000000..93ef149
--- /dev/null
+++ b/date-fns/.github/workflows/main_tests.yaml
@@ -0,0 +1,31 @@
+name: Node.js tests
+
+on: [push, pull_request]
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x]
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: export CHROME_BIN
+ run: export CHROME_BIN=chromium-browser
+ - name: export DISPLAY
+ run: export DISPLAY=:99.0
+ - name: Install yarn
+ run: npm install -g yarn
+ - name: Install dependencies
+ run: yarn install
+ - name: Run tests
+ uses: GabrielBB/xvfb-action@v1.0
+ with:
+ run: ./scripts/test/ci.sh
+ env:
+ TEST_SUITE: node
diff --git a/date-fns/.github/workflows/node_tests.yaml b/date-fns/.github/workflows/node_tests.yaml
new file mode 100644
index 0000000..c850a0b
--- /dev/null
+++ b/date-fns/.github/workflows/node_tests.yaml
@@ -0,0 +1,31 @@
+name: Main tests
+
+on: [push, pull_request]
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x]
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: export CHROME_BIN
+ run: export CHROME_BIN=chromium-browser
+ - name: export DISPLAY
+ run: export DISPLAY=:99.0
+ - name: Install yarn
+ run: npm install -g yarn
+ - name: Install dependencies
+ run: yarn install
+ - name: Run tests
+ uses: GabrielBB/xvfb-action@v1.0
+ with:
+ run: ./scripts/test/ci.sh
+ env:
+ TEST_SUITE: main
diff --git a/date-fns/.github/workflows/timezone_step_1.yaml b/date-fns/.github/workflows/timezone_step_1.yaml
new file mode 100644
index 0000000..fe9f365
--- /dev/null
+++ b/date-fns/.github/workflows/timezone_step_1.yaml
@@ -0,0 +1,33 @@
+name: Timezones 1/2
+
+on: [push, pull_request]
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x]
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: export CHROME_BIN
+ run: export CHROME_BIN=chromium-browser
+ - name: export DISPLAY
+ run: export DISPLAY=:99.0
+ - name: Install yarn
+ run: npm install -g yarn
+ - name: Install dependencies
+ run: yarn install
+ - name: Run tests
+ uses: GabrielBB/xvfb-action@v1.0
+ with:
+ run: ./scripts/test/ci.sh
+ env:
+ TEST_SUITE: tz
+ TZ_LENGTH: 2
+ TZ_INDEX: 0
diff --git a/date-fns/.github/workflows/timezone_step_2.yaml b/date-fns/.github/workflows/timezone_step_2.yaml
new file mode 100644
index 0000000..83c6fec
--- /dev/null
+++ b/date-fns/.github/workflows/timezone_step_2.yaml
@@ -0,0 +1,33 @@
+name: Timezones 2/2
+
+on: [push, pull_request]
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x]
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: export CHROME_BIN
+ run: export CHROME_BIN=chromium-browser
+ - name: export DISPLAY
+ run: export DISPLAY=:99.0
+ - name: Install yarn
+ run: npm install -g yarn
+ - name: Install dependencies
+ run: yarn install
+ - name: Run tests
+ uses: GabrielBB/xvfb-action@v1.0
+ with:
+ run: ./scripts/test/ci.sh
+ env:
+ TEST_SUITE: tz
+ TZ_LENGTH: 2
+ TZ_INDEX: 1
diff --git a/date-fns/.gitignore b/date-fns/.gitignore
new file mode 100644
index 0000000..2b95ec1
--- /dev/null
+++ b/date-fns/.gitignore
@@ -0,0 +1,11 @@
+node_modules
+npm-debug.log*
+yarn-error.log*
+tmp
+dist
+.envrc
+docs.json
+.idea
+.vscode
+coverage
+/secrets \ No newline at end of file
diff --git a/date-fns/.prettierrc.js b/date-fns/.prettierrc.js
new file mode 100644
index 0000000..a6b80c2
--- /dev/null
+++ b/date-fns/.prettierrc.js
@@ -0,0 +1,4 @@
+module.exports = {
+ singleQuote: true,
+ semi: false
+}
diff --git a/date-fns/.tool-versions b/date-fns/.tool-versions
new file mode 100644
index 0000000..23f946f
--- /dev/null
+++ b/date-fns/.tool-versions
@@ -0,0 +1 @@
+nodejs 14.16.0 \ No newline at end of file
diff --git a/date-fns/.ts-eslintrc.js b/date-fns/.ts-eslintrc.js
new file mode 100644
index 0000000..d0076c3
--- /dev/null
+++ b/date-fns/.ts-eslintrc.js
@@ -0,0 +1,32 @@
+module.exports = {
+ extends: ['plugin:@typescript-eslint/recommended'],
+ plugins: ['@typescript-eslint'],
+ parser: '@typescript-eslint/parser',
+ env: {
+ browser: true,
+ node: true,
+ es6: true
+ },
+ rules: {
+ '@typescript-eslint/indent': ['off'],
+ '@typescript-eslint/no-unused-vars': ['off'],
+ '@typescript-eslint/no-use-before-define': ['off'],
+ '@typescript-eslint/no-var-requires': ['off'],
+ '@typescript-eslint/no-explicit-any': ['off'],
+ '@typescript-eslint/prefer-interface': ['off'],
+ '@typescript-eslint/class-name-casing': ['off'],
+ '@typescript-eslint/ban-types': ['off'],
+ '@typescript-eslint/array-type': ['off'],
+ '@typescript-eslint/member-delimiter-style': [
+ 'error',
+ {
+ multiline: {
+ delimiter: 'none'
+ },
+ singleline: {
+ delimiter: 'semi'
+ }
+ }
+ ]
+ }
+}
diff --git a/date-fns/CHANGELOG.md b/date-fns/CHANGELOG.md
new file mode 100644
index 0000000..2b69990
--- /dev/null
+++ b/date-fns/CHANGELOG.md
@@ -0,0 +1,2359 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+This project adheres to [Semantic Versioning].
+
+This change log follows the format documented in [Keep a CHANGELOG].
+
+[semantic versioning]: http://semver.org/
+[keep a changelog]: http://keepachangelog.com/
+
+## v2.22.1 - 2021-05-28
+
+Thanks to [Sasha Koss](http://github.com/kossnocorp) for working on the release.
+
+### Fixed
+
+- Fixed constant typings. ([#2491](https://github.com/date-fns/date-fns/issues/2491))
+
+## v2.22.0 - 2021-05-28
+
+On this release worked [Sasha Koss](http://github.com/kossnocorp), [Lucas Silva](http://github.com/LucasHFS), [Lay](http://github.com/brownsugar), [jwbth](http://github.com/jwbth), [fturmel](http://github.com/fturmel), [Tan75](http://github.com/tan75) and [Anastasia Kobzar](http://github.com/rikkalo).
+
+### Fixed
+
+- [Fixed Taiwanese locale to use traditional Chinese and removed unnecessary spaces.](https://github.com/date-fns/date-fns/pull/2436)
+
+- [Fixed Russian locale to use correct long formats.](https://github.com/date-fns/date-fns/pull/2478)
+
+### Added
+
+- [Added 18 new conversion functions](https://github.com/date-fns/date-fns/pull/2433):
+ - `daysToWeeks`
+ - `hoursToMilliseconds`
+ - `hoursToMinutes`
+ - `hoursToSeconds`
+ - `millisecondsToHours`
+ - `millisecondsToMinutes`
+ - `millisecondsToSeconds`
+ - `minutesToHours`
+ - `minutesToMilliseconds`
+ - `minutesToSeconds`
+ - `monthsToQuarters`
+ - `monthsToYears`
+ - `quartersToMonths`
+ - `quartersToYears`
+ - `secondsToHours`
+ - `secondsToMilliseconds`
+ - `secondsToMinutes`
+ - `weeksToDays`
+ - `yearsToMonths`
+ - `yearsToQuarters`
+
+## v2.21.3 - 2021-05-08
+
+This release is brought to you by [Maxim Topciu](http://github.com/maximtop).
+
+### Fixed
+
+- [Fixed IE11 support by babelifing the shorthand properties.](https://github.com/date-fns/date-fns/pull/2467)
+
+## v2.21.2 - 2021-05-05
+
+Kudos to [Aleksei Korzun](http://github.com/a-korzun), [Maxim Topciu](http://github.com/maximtop), [Jonas L](http://github.com/jooola), [Mohammad ali Ali panah](http://github.com/always-maap) and [Tan75](http://github.com/tan75) for working on the release.
+
+### Fixed
+
+- [`differenceInBusinessDays` now returns `NaN` instead of `Invalid Date` when an invalid argument is passed to the function.](https://github.com/date-fns/date-fns/pull/2414)
+
+- [Fixed `weekStartsOn` in Persian locale.](https://github.com/date-fns/date-fns/pull/2430)
+
+## v2.21.1 - 2021-04-15
+
+Thanks to [Sasha Koss](http://github.com/kossnocorp) for working on the release.
+
+### Fixed
+
+- [Fixed a breaking change introduced by using modern default argument value syntax (see https://github.com/Hacker0x01/react-datepicker/issues/2870).](https://github.com/date-fns/date-fns/pull/2423)
+
+## v2.21.0 - 2021-04-14
+
+This release is brought to you by [Aleksei Korzun](http://github.com/a-korzun), [Tan75](http://github.com/tan75), [Rubens Mariuzzo](http://github.com/rmariuzzo), [Christoph Stenglein](http://github.com/cstenglein) and [Clément Tamisier](http://github.com/ctamisier).
+
+### Fixed
+
+- [Made `formatDistanceStrict` return `12 months` instead of `1 year` when `unit: 'month'`.](https://github.com/date-fns/date-fns/pull/2411)
+
+### Added
+
+- [Added Haitian Creole (`ht`) locale.](https://github.com/date-fns/date-fns/pull/2396)
+- [Added Austrian German (`de-AT`) locale.](https://github.com/date-fns/date-fns/pull/2362)
+
+## v2.20.3 - 2021-04-13
+
+Kudos to [fturmel](http://github.com/fturmel) for working on the release.
+
+### Fixed
+
+- [Fixed broken tree-shaking caused by missing links to corresponding ESM.](https://github.com/date-fns/date-fns/pull/2339) ([#2207](https://github.com/date-fns/date-fns/issues/2207))
+
+## v2.20.2 - 2021-04-12
+
+Kudos to [Maxim Topciu](http://github.com/maximtop) for working on the release.
+
+### Fixed
+
+- [Fixed IE11 incompatibility caused by the usage of spread syntax.](https://github.com/date-fns/date-fns/pull/2407) ([#2408](https://github.com/date-fns/date-fns/issues/2408))
+
+## v2.20.1 - 2021-04-09
+
+This release is brought to you by [Sasha Koss](http://github.com/kossnocorp) and [Tan75](http://github.com/tan75).
+
+### Fixed
+
+- Fixed `isDate` Flow typings that we broke in `v2.20.0`.
+
+## v2.20.0 - 2021-04-08
+
+This release is brought to you by [Sasha Koss](http://github.com/kossnocorp), [Maxim Topciu](http://github.com/maximtop), [tu4mo](http://github.com/tu4mo), [Tan75](http://github.com/tan75), [Ardit Dine](http://github.com/arditdine), [Carl Rosell](http://github.com/CarlRosell), [Roman Mahotskyi](http://github.com/enheit), [Mateusz Krzak](http://github.com/mateuszkrzak), [fgottschalk](http://github.com/fgottschalk), [Anastasia Kobzar](http://github.com/rikkalo), [Bilguun Ochirbat](http://github.com/bilguun0203), [Lesha Koss](http://github.com/leshakoss), [YuLe](http://github.com/yuler) and [guyroberts21](http://github.com/guyroberts21).
+
+### Fixed
+
+- [Made `formatDistanceStrict` and `formatDistanceToNowStrict` always return `1 year` instead of `12 months`.](https://github.com/date-fns/date-fns/pull/2391) ([#2388](https://github.com/date-fns/date-fns/issues/2388))
+
+- Fixed `nextDay`, `nextMonday` and `nextTuesday` missing in exports and type definitions. ([#2325](https://github.com/date-fns/date-fns/issues/2325))
+
+- [Fixed a DST bug in `formatDistanceStrict`.](https://github.com/date-fns/date-fns/pull/2329) ([#2307](https://github.com/date-fns/date-fns/issues/2307))
+
+### Added
+
+- [Added new `eachMinuteOfInterval` function.](https://github.com/date-fns/date-fns/pull/2382)
+
+- [Added Albanian (`sq`) locale](https://github.com/date-fns/date-fns/pull/2290)
+
+- [Added Mongolian (`mn`) locale](https://github.com/date-fns/date-fns/pull/1961)
+
+- [Added `nextWednesday`, `nextThursday`, `nextFriday`, `nextSaturday` and `nextSunday`.](https://github.com/date-fns/date-fns/pull/2291)
+
+## v2.19.0 - 2021-03-05
+
+On this release worked [Tan75](http://github.com/tan75).
+
+### Fixed
+
+- [Assigned the correct `firstWeekContainsDate` value (`4`) for the French locale.](https://github.com/date-fns/date-fns/pull/2273) ([#2148](https://github.com/date-fns/date-fns/issues/2148))
+
+- [Fixed torsdag abbreviation in the Swedish locale.](https://github.com/date-fns/date-fns/pull/2220)
+
+- [Fixed a bug in `differenceInMonths` and `intervalToDuration` that occurs when dealing with the 28th of February.](https://github.com/date-fns/date-fns/pull/2256) ([#2255](https://github.com/date-fns/date-fns/issues/2255))
+
+### Added
+
+- [Added new functions: `nextDay`, `nextMonday` and `nextTuesday` that allows getting the next day of the week, Monday or Tuesday respectively.](https://github.com/date-fns/date-fns/pull/2214)
+
+## v2.18.0 - 2021-03-01
+
+Thanks to [Tan75](http://github.com/tan75) and [Lesha Koss](http://github.com/leshakoss).
+
+### Fixed
+
+- [Fixed documentation missing for `intlFormat`.](https://github.com/date-fns/date-fns/pull/2259) ([#2258](https://github.com/date-fns/date-fns/issues/2258))
+
+- [Fixed date formats in the Latvian locale.](https://github.com/date-fns/date-fns/pull/2205) ([#2202](https://github.com/date-fns/date-fns/issues/2202))
+
+### Added
+
+- [Added support of positive and negative offsets in `parseJSON`.](https://github.com/date-fns/date-fns/pull/2200) ([#2149](https://github.com/date-fns/date-fns/issues/2149))
+
+## [2.17.0] - 2021-02-05
+
+Kudos to [@shaykav](https://github.com/date-fns/date-fns/pull/1952), [@davidgape89](https://github.com/davidgape89), [@rikkalo](https://github.com/rikkalo), [@tan75](https://github.com/tan75), [@talgautb](https://github.com/talgautb), [@owenl131](https://github.com/owenl131), [@kylesezhi](https://github.com/kylesezhi), [@inigoiparragirre](https://github.com/inigoiparragirre), [@gius](https://github.com/gius), [@Endeauvirr](https://github.com/Endeauvirr) and [@frankyston](https://github.com/frankyston).
+
+### Fixed
+
+- [Fixed Russian locale parsing issue](https://github.com/date-fns/date-fns/pull/1950).
+
+- [Fixed `differenceInMonths` for edge cases, such as the end of February dates](https://github.com/date-fns/date-fns/pull/2185).
+
+- [Fixed suffixes for the Kazakh locale](https://github.com/date-fns/date-fns/pull/2010).
+
+- [Fixed `formatDuration` week translation in `pt` and `pt-BR` locales](https://github.com/date-fns/date-fns/pull/2125).
+
+- [Made Japanese locale to use the correct value for the start of the week](https://github.com/date-fns/date-fns/pull/2099).
+
+- [Adjusted date formats in the Basque locale](https://github.com/date-fns/date-fns/pull/2080).
+
+- [Fixed the short and medium date formats in the Czech locale](https://github.com/date-fns/date-fns/pull/2111).
+
+- [Adjusted the Polish translations of `formatDistance`](https://github.com/date-fns/date-fns/pull/2187).
+
+- [Fixed the week's abbreviations in the Brazilian Portuguese](https://github.com/date-fns/date-fns/pull/2170).
+
+### Added
+
+- [Added `intlFormat`](https://github.com/date-fns/date-fns/pull/2172) a lightweight formatting function that uses [Intl API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl). Eventually, it will become the default formatting function, so it's highly recommended for new code.
+
+- [Added `en-ZA` locale](https://github.com/date-fns/date-fns/pull/1952).
+
+- [Added an ability to format lowercase am/pm with `aaa` and `bbb` tokens](https://github.com/date-fns/date-fns/pull/2016).
+
+- [Added ordinal formatting for Japanese year values](https://github.com/date-fns/date-fns/pull/2177/files).
+
+## [2.16.1] - 2020-07-31
+
+Kudos to [@aleksaps](https://github.com/aleksaps), [@leedriscoll](https://github.com/leedriscoll) and [@BanForFun](https://github.com/BanForFun) for pull-requests!
+
+### Fixed
+
+- [Fixed a typo in Scottish Gaelic (gd) locale](https://github.com/date-fns/date-fns/pull/1925).
+- [Fixed typos in Serbian Latin locale](https://github.com/date-fns/date-fns/pull/1928).
+- [Fixed greek grammar for Saturday on `formatRelative`](https://github.com/date-fns/date-fns/pull/1930).
+- Removed locale snapshots from the npm package making it lighter.
+
+## [2.16.0] - 2020-08-27
+
+Kudos to [@jvpelt](https://github.com/jvpelt), [@piotrl](https://github.com/piotrl), [@yotamofek](https://github.com/yotamofek), [@dwaxweiler](https://github.com/dwaxweiler), [@leedriscoll](https://github.com/leedriscoll) and [@bradevans](https://github.com/bradevans) for working on the release. Also thanks to [@PascalHonegger](https://github.com/PascalHonegger), [@pickfire](https://github.com/pickfire), [@TheJaredWilcurt](https://github.com/TheJaredWilcurt), [@SidKH](https://github.com/SidKH) and [@nfantone](https://github.com/nfantone) for improving the documentation.
+
+### Fixed
+
+- [Added correct translations for Welsh `1 minute` and `2 days`](https://github.com/date-fns/date-fns/pull/1903).
+- [Fixed `formatRFC3339` formatting timezone offset with minutes](https://github.com/date-fns/date-fns/pull/1890).
+- [Added missing locale type definition for `formatDuration`](https://github.com/date-fns/date-fns/pull/1881)
+- [Fixed Scottish Gaelic locale issues](https://github.com/date-fns/date-fns/pull/1914).
+
+### Changed
+
+- [Used shorter Hebrew alternative for "about"](https://github.com/date-fns/date-fns/pull/1893).
+- [Improved string arguments warning after upgrading to v2](https://github.com/date-fns/date-fns/pull/1910).
+
+### Added
+
+- [Added Luxembourgish (lb) locale](https://github.com/date-fns/date-fns/pull/1900).
+
+## [2.15.0] - 2020-07-17
+
+Thanks to [@belgamo](https://github.com/belgamo), [@Matsuuu](https://github.com/Matsuuu), [@Imballinst](https://github.com/Imballinst), [@arsnyder16](https://github.com/arsnyder16), [@pankajupadhyay29](https://github.com/pankajupadhyay29), [@DCBN](https://github.com/DCBN), [@leedriscoll](https://github.com/leedriscoll), [@gottsohn](https://github.com/gottsohn), [@mukuljainx](https://github.com/mukuljainx) and [@dtriana](https://github.com/dtriana) for working on the release. Also kudos to [@KidkArolis](https://github.com/KidkArolis), [@imgx64](https://github.com/imgx64), [@fjc0k](https://github.com/fjc0k), [@wmonk](https://github.com/wmonk), [@djD-REK](https://github.com/djD-REK), [@dandv](https://github.com/dandv), [@psimk](https://github.com/psimk) and [@brimworks](https://github.com/brimworks) for improving the documentation.
+
+### Fixed
+
+- [Fixed behavior of `addBusinessDays` when input date is a weekend day](https://github.com/date-fns/date-fns/pull/1790).
+- [Fixed `parseISO` not returning `Invalid Date` on incorrect string when there are spaces in it](https://github.com/date-fns/date-fns/pull/1791).
+- [Fixed `es` round-tripping dates with Wednesday](https://github.com/date-fns/date-fns/pull/1792).
+- [Fixed round-trip bug with `d`/`EEEE` ordering in tokens like `PPPPP`](https://github.com/date-fns/date-fns/pull/1795).
+- [Fixed issues with parsing values in Japanese](https://github.com/date-fns/date-fns/pull/1807).
+- [Fixed Hungarian breaking IE11](https://github.com/date-fns/date-fns/pull/1842).
+- [Fixed Spanish accents in Saturday and Wednesday](https://github.com/date-fns/date-fns/pull/1872).
+
+### Changed
+
+- [Improved the message of protected tokens error](https://github.com/date-fns/date-fns/pull/1641).
+
+### Added
+
+- [Added Swiss-French `fr-CH` locale](https://github.com/date-fns/date-fns/pull/1809).
+- [Added Flemish `nl-BE` locale](https://github.com/date-fns/date-fns/pull/1812).
+- [Added Scottish Gaelic `gd` locale](https://github.com/date-fns/date-fns/pull/1832).
+- [Added New Zealand English `en-NZ` locale](https://github.com/date-fns/date-fns/pull/1835).
+- [Added `isMatch` function](https://github.com/date-fns/date-fns/pull/1868).
+
+## [2.14.0] - 2020-05-18
+
+Kudos to [@julamb](https://github.com/julamb), [@JacobSoderblom](https://github.com/JacobSoderblom), [@justingrant](http://github.com/justingrant), [@dragunoff](https://github.com/dragunoff), [@jmate0321](https://github.com/jmate0321), [@gbhasha](https://github.com/gbhasha), [@rasck](https://github.com/rasck), [@AlbertoPdRF](https://github.com/AlbertoPdRF), [@sebastianhaberey](https://github.com/sebastianhaberey) and [@giogonzo](https://github.com/giogonzo) for working on the release!
+
+### Fixed
+
+- [Fixed DST issues with `add`, `addDays` and `addMonths`](https://github.com/date-fns/date-fns/pull/1760).
+- [Fixed "quarter" translation in the Bulgarian locale](https://github.com/date-fns/date-fns/pull/1763).
+- [Fixed `formatDistance` strings in the Hungarian locale](https://github.com/date-fns/date-fns/pull/1765).
+- [Fixed Danish month abbreviations](https://github.com/date-fns/date-fns/pull/1774).
+- [Fixed parsing of mei in the Dutch locale](https://github.com/date-fns/date-fns/pull/1774).
+- [Fixed missing preposition in `formatLong` in the Spanish locale](https://github.com/date-fns/date-fns/pull/1775).
+- [Fixed `formatRelative` in the Italian locale](https://github.com/date-fns/date-fns/pull/1777).
+
+### Added
+
+- [Added `eachQuarterOfInterval`](https://github.com/date-fns/date-fns/pull/1715).
+- [Added Basque (`eu`) locale](https://github.com/date-fns/date-fns/pull/1759).
+- [Added Indian English (`en-IN`) locale](https://github.com/date-fns/date-fns/pull/1767).
+- [Added `eachHourOfInterval`](https://github.com/date-fns/date-fns/pull/1776).
+
+## [2.13.0] - 2020-05-06
+
+Thanks to [@JorenVos](https://github.com/JorenVos), [@developergouli](https://github.com/developergouli), [@rhlowe](https://github.com/rhlowe) and [@justingrant](http://github.com/justingrant) for working on the release!
+
+### Fixed
+
+- [Fixed mei abbreviation in the Dutch locale](https://github.com/date-fns/date-fns/pull/1752).
+- [Fixed `differenceInDays` DST behavior broken in 2.12.0](https://github.com/date-fns/date-fns/pull/1754).
+
+### Added
+
+- [Added Kannada locale support](https://github.com/date-fns/date-fns/pull/1747).
+- [Added `formatISODuration` function](https://github.com/date-fns/date-fns/pull/1713).
+- [Added `intervalToDuration` function](https://github.com/date-fns/date-fns/pull/1713).
+
+## [2.12.0] - 2020-04-09
+
+Kudos to [@leshakoss](http://github.com/leshakoss), [@skyuplam](https://github.com/skyuplam), [@so99ynoodles](https://github.com/so99ynoodles), [@dkozickis](https://github.com/dkozickis), [@belgamo](https://github.com/belgamo), [@akgondber](https://github.com/akgondber), [@dcousens](https://github.com/dcousens) and [@BoomDev](https://github.com/BoomDev) for working on the release!
+
+### Fixed
+
+- [Fixed minulý štvrtok in Slovak locale](https://github.com/date-fns/date-fns/pull/1701).
+- Fixed date ordinalNumber for [ja/zh-CN/zh-TW](https://github.com/date-fns/date-fns/pull/1690) and [ko](https://github.com/date-fns/date-fns/pull/1696).
+- [Fixed quarters parsing](https://github.com/date-fns/date-fns/pull/1694).
+- [Fixed `setDay` with `weekStartsOn` != 0](https://github.com/date-fns/date-fns/pull/1639).
+- [Fixed differenceInDays across DST](https://github.com/date-fns/date-fns/pull/1630).
+- [Fixed required arguments exception message](https://github.com/date-fns/date-fns/pull/1674).
+
+### Added
+
+- [Added new function `formatDistanceToNowStrict`](https://github.com/date-fns/date-fns/pull/1679).
+
+## [2.11.1] - 2020-03-26
+
+### Fixed
+
+- Rebuilt TypeScript and flow types.
+
+## [2.11.0] - 2020-03-13
+
+Kudos to [@oakhan3](https://github.com/oakhan3), [@Mukhammadali](https://github.com/Mukhammadali), [@altrim](https://github.com/altrim), [@leepowellcouk](https://github.com/leepowellcouk), [@amatzon](@https://github.com/amatzon), [@bryanMt](https://github.com/bryanMt), [@kalekseev](https://github.com/kalekseev), [@eugene-platov](https://github.com/eugene-platov) and [@tjrobinson](https://github.com/tjrobinson) for working on the release.
+
+### Fixed
+
+- [Fixed a bug in `differenceInYears` causing incorrect results when the left date is a leap day](https://github.com/date-fns/date-fns/pull/1654).
+- [Fixed `parseISO` to work correctly around time shift dates](https://github.com/date-fns/date-fns/pull/1667).
+- [Fixed `format` to work correctly with GMT-0752/GMT-0456 and similar timezones](https://github.com/date-fns/date-fns/pull/1666).
+
+### Changed
+
+- [Changed `getDay` typings to return `0|1|2|3|4|5|6` instead of `number`](https://github.com/date-fns/date-fns/pull/1668).
+- [Improved Chinese locale](https://github.com/date-fns/date-fns/pull/1664):
+ - Change date format to meet the national standard (GB/T 7408-2005).
+ - Improve `ordinalNumber` function behavior.
+ - Add prefix in `formatRelative` depending on if it's a current week or not.
+
+### Added
+
+- [Added Uzbek `uz` locale](https://github.com/date-fns/date-fns/pull/1648).
+- [Updated Macedonian locale for v2](https://github.com/date-fns/date-fns/pull/1649).
+- [Added Maltese `mt` locale](https://github.com/date-fns/date-fns/pull/1658).
+
+## [2.10.0] - 2020-02-25
+
+### Fixed
+
+- [Fixed `formatISO` when formatting time with timezones with minute offsets > 0](https://github.com/date-fns/date-fns/pull/1599). Kudos to [@dcRUSTy](https://github.com/dcRUSTy).
+
+### Fixed
+
+- Fixed a bug in setDay when using weekStartsOn that is not 0
+
+### Added
+
+- [Added `weeks` to `Duration`](https://github.com/date-fns/date-fns/pull/1592).
+- [Added `weeks` support to `add` and `sub`](https://github.com/date-fns/date-fns/pull/1592).
+- [Added details message in `throwProtectedError`](https://github.com/date-fns/date-fns/pull/1592).
+
+## [2.9.0] - 2020-01-08
+
+Thanks to [@mborgbrant](https://github.com/mborgbrant), [@saintplay](https://github.com/saintplay), [@mrenty](https://github.com/mrenty), [@kibertoad](https://github.com/kibertoad), [@levibuzolic](https://github.com/levibuzolic), [@Anshuman71](https://github.com/Anshuman71), [@talgautb](https://github.com/talgautb), [@filipjuza](https://github.com/filipjuza), [@tobyzerner](https://github.com/tobyzerner), [@emil9453](https://github.com/emil9453), [@fintara](https://github.com/fintara), [@pascaliske](https://github.com/pascaliske), [@rramiachraf](https://github.com/rramiachraf), [@marnusw](https://github.com/marnusw) and [@Imballinst](https://github.com/Imballinst) for working on the release.
+
+### Fixed
+
+- [Fixed a bug with addBusinessDays returning the Tuesday when adding 1 day on weekends. Now it returns the Monday](https://github.com/date-fns/date-fns/pull/1588).
+- [Added missing timezone to `formatISO`](https://github.com/date-fns/date-fns/pull/1576).
+- [Removed dots from short day period names in the Kazakh locale](https://github.com/date-fns/date-fns/pull/1512).
+- [Fixed typo in formatDistance in the Czech locale](https://github.com/date-fns/date-fns/pull/1540).
+- [Fixed shortenings in the Bulgarian locale](https://github.com/date-fns/date-fns/pull/1560).
+- [Fixed regex for the May in the Portuguese locale](https://github.com/date-fns/date-fns/pull/1565).
+
+### Added
+
+- [Added `eachMonthOfInterval` and `eachYearOfInterval`](https://github.com/date-fns/date-fns/pull/618).
+- [Added `inclusive` option to `areIntervalsOverlapping](https://github.com/date-fns/date-fns/pull/643).
+- [Added `isExists` function that checks if the given date is exists](https://github.com/date-fns/date-fns/pull/682).
+- [Added `add` function to add seconds, minutes, hours, weeks, years in single call](https://github.com/date-fns/date-fns/pull/1581).
+- [Added `sub` function, the opposite of `add`](https://github.com/date-fns/date-fns/pull/1583).
+- [Added `Duration` type used in `add` and `sub`](https://github.com/date-fns/date-fns/pull/1583).
+- [Added Azerbaijani (az) locale](https://github.com/date-fns/date-fns/pull/1547).
+- [Added Moroccan Arabic (ar-MA) locale](https://github.com/date-fns/date-fns/pull/1578).
+
+### Changed
+
+- [Reduced the total minified build size by 1Kb/4%](https://github.com/date-fns/date-fns/pull/1563).
+- [Made all properties in `Locale` type optional](https://github.com/date-fns/date-fns/pull/1542).
+- [Added missing properties to `Locale` type](https://github.com/date-fns/date-fns/pull/1542).
+- [Add the locale code to `Locale` type](https://github.com/date-fns/date-fns/pull/1580).
+- [Added support of space time separator to `parseJSON`](https://github.com/date-fns/date-fns/pull/1579).
+- [Allowed up to 7 digits in milliseconds in `parseJSON`](https://github.com/date-fns/date-fns/pull/1579).
+
+## [2.8.1] - 2019-11-22
+
+Thanks to [@Imballinst](https://github.com/Imballinst) for the bug fix!
+
+### Fixed
+
+- [Add colon between the hour and minutes for `formatRFC3339`](https://github.com/date-fns/date-fns/pull/1549). [See #1548](https://github.com/date-fns/date-fns/issues/1548).
+
+## [2.8.0] - 2019-11-19
+
+Kudos to [@NaridaL](https://github.com/NaridaL), [@Zyten](https://github.com/Zyten), [@Imballinst](https://github.com/Imballinst), [@leshakoss](https://github.com/leshakoss) and [@Neorth](https://github.com/Neorth) for working on the release.
+
+### Fixed
+
+- [Remove the next week preposition in the Swedish locale](https://github.com/date-fns/date-fns/pull/1538).
+
+### Added
+
+- [Added Malay (ms) locale](https://github.com/date-fns/date-fns/pull/1537).
+- [Added `formatISO`, `formatISO9075`, `formatRFC3339`, and `formatRFC7231` functions](https://github.com/date-fns/date-fns/pull/1536).
+
+## [2.7.0] - 2019-11-07
+
+Thanks to [@mzgajner](https://github.com/mzgajner), [@NaridaL](https://github.com/NaridaL), [@Zyten](https://github.com/Zyten), [@leshakoss](https://github.com/leshakoss), [@fintara](https://github.com/fintara), [@kpr-hellofresh](https://github.com/kpr-hellofresh) for contributing to the release.
+
+### Fixed
+
+- [Fixed a mistake in the Slovenian locale](https://github.com/date-fns/date-fns/pull/1529).
+- [Fixed incorrect behavior of `parseISO` in Firefox caused by differences in `getTimezoneOffset`](https://github.com/date-fns/date-fns/pull/1495).
+
+### Changed
+
+- [Make object arguments types more elaborate in Flow type definitions](https://github.com/date-fns/date-fns/pull/1519).
+- [Get rid of deprecated Function in Flow type definitions](https://github.com/date-fns/date-fns/pull/1520).
+- [Allow `parseJSON` to accept strings without trailing 'Z' symbol and with up to 6 digits in the milliseconds' field](https://github.com/date-fns/date-fns/pull/1499).
+
+### Added
+
+- [Added Bulgarian (bg) locale](https://github.com/date-fns/date-fns/pull/1522).
+
+## [2.6.0] - 2019-10-22
+
+Kudos to [@marnusw](https://github.com/marnusw), [@cdrikd](https://github.com/cdrikd) and [@rogyvoje](https://github.com/rogyvoje) for working on the release!
+
+### Added
+
+- [Added `parseJSON` - lightweight function (just 411 B) that parses dates formatted with `toJSON`](https://github.com/date-fns/date-fns/pull/1463).
+- [Added the language code to each locale](https://github.com/date-fns/date-fns/pull/1489).
+- [Added `subBusinessDays` function](https://github.com/date-fns/date-fns/pull/1491).
+- [Added both Serbian - cyrillic (sr) and latin (sr-Latn) locales](https://github.com/date-fns/date-fns/pull/1494).
+
+## [2.5.1] - 2019-10-18
+
+Thanks to [@mitchellbutler](https://github.com/mitchellbutler) for the bug fix!
+
+### Fixed
+
+- [Fixed infinite loop in `addBusinessDays`](https://github.com/date-fns/date-fns/pull/1486).
+
+## [2.5.0] - 2019-10-16
+
+Kudos to [@dkozickis](https://github.com/dkozickis), [@drugoi](https://github.com/drugoi), [@kranthilakum](https://github.com/kranthilakum), [@102](https://github.com/102), [@gpetrioli](https://github.com/gpetrioli) and [@JulienMalige](https://github.com/JulienMalige) for making the release happen.
+
+### Fixed
+
+- [Fixed compatibility with IE11 by removing `findIndex` from the code](https://github.com/date-fns/date-fns/pull/1457).
+- [Fixed Greek locale patterns](https://github.com/date-fns/date-fns/pull/1480).
+
+### Added
+
+- [Added Kazakh (kk) locale](https://github.com/date-fns/date-fns/pull/1460).
+- [Added Telugu (te) locale](https://github.com/date-fns/date-fns/pull/1464).
+- [Added Canadian French (fr-CA) locale](https://github.com/date-fns/date-fns/issues/1465).
+- [Added Australian English (en-AU) locale](https://github.com/date-fns/date-fns/pull/1470).
+- [Exported `Interval` and `Locale` types from Flow typings](https://github.com/date-fns/date-fns/pull/1475).
+
+## [2.4.1] - 2019-09-28
+
+Thanks to [@mrclayman](https://github.com/mrclayman) for reporting the issue and [@leshakoss](https://github.com/leshakoss) for fixing it.
+
+### Fixed
+
+- [Fixed am/pm mixup in the Czech locale](https://github.com/date-fns/date-fns/pull/1453).
+
+## [2.4.0] - 2019-09-27
+
+This release brought to you by these amazing people: [@lovelovedokidoki](https://github.com/lovelovedokidoki), [@alexigityan](https://github.com/alexigityan), [@kalekseev](https://github.com/kalekseev) and [@andybangs](https://github.com/andybangs). You rock!
+
+### Fixed
+
+- [Fixed Vietnamese parsing patterns](https://github.com/date-fns/date-fns/pull/1445).
+- [Fixed Czech parsing regexes](https://github.com/date-fns/date-fns/pull/1446).
+- [Fixed offset for Eastern Hemisphere in `parseISO`](https://github.com/date-fns/date-fns/pull/1450).
+
+### Added
+
+- [Added Armenian locale support](https://github.com/date-fns/date-fns/pull/1448).
+
+## [2.3.0] - 2019-09-24
+
+Huge thanks to [@lovelovedokidoki](https://github.com/lovelovedokidoki) who improved 8 (!) locales in an unstoppable open-source rampage and [@VesterDe](https://github.com/VesterDe) for fixing Slovenian locale 👏
+
+### Fixed
+
+- [Fixed the translation of "yesterday" in the Slovenian locale](https://github.com/date-fns/date-fns/pull/1420).
+- [Fixed French parsing issues with June and August](https://github.com/date-fns/date-fns/pull/1430).
+- [Improved Turkish parsing](https://github.com/date-fns/date-fns/pull/1432).
+- [Fixed "March" in Dutch parsing patterns](https://github.com/date-fns/date-fns/pull/1433).
+- [Fixed Hindi parsing patterns](https://github.com/date-fns/date-fns/pull/1434).
+
+### Added
+
+- [Added Finnish matching patterns](https://github.com/date-fns/date-fns/pull/1425).
+- [Accept abbreviated March, June, July in Norwegian locales](https://github.com/date-fns/date-fns/pull/1431).
+- [Added parsing for Greek months with long formatting](https://github.com/date-fns/date-fns/pull/1435).
+
+## [2.2.1] - 2019-09-12
+
+Kudos to date-fns contributors: [@mzgajner](https://github.com/mzgajner), [@sibiraj-s](https://github.com/sibiraj-s), [@mukeshmandiwal](https://github.com/mukeshmandiwal), [@SneakyFish5](https://github.com/SneakyFish5) and [@CarterLi](https://github.com/CarterLi).
+
+### Added
+
+- [Added new `set` function](https://github.com/date-fns/date-fns/pull/1398).
+- [Updated Slovenian (sl) locale for v2](https://github.com/date-fns/date-fns/pull/1418).
+- [Added Tamil (ta) locale](https://github.com/date-fns/date-fns/pull/1411).
+- [Added Hindi (hi) locale](https://github.com/date-fns/date-fns/pull/1409).
+- [Added support of `\n` in `format`, `lightFormat` and `parse`](https://github.com/date-fns/date-fns/pull/1417).
+
+## [2.1.0] - 2019-09-06
+
+Thanks to date-fns contributors: [@ManadayM](https://github.com/ManadayM), [@illuminist](https://github.com/illuminist), [@visualfanatic](https://github.com/visualfanatic), [@vsaarinen](https://github.com/vsaarinen) and at least but not least [@leshakoss](https://github.com/leshakoss)!
+
+### Fixed
+
+- [Set start of the week to the Sunday for Thai locale](https://github.com/date-fns/date-fns/pull/1402).
+- [Fixed month matching in Polish locale](https://github.com/date-fns/date-fns/pull/1404).
+- [Fixed `eachWeekendOfInterval` skipping the first date in the supplied interval](https://github.com/date-fns/date-fns/pull/1407).
+
+### Added
+
+- [Added Gujarati locale](https://github.com/date-fns/date-fns/pull/1400).
+
+## [2.0.1] - 2019-08-23
+
+### Fixed
+
+- [Fix](https://github.com/date-fns/date-fns/pull/1046) `getWeekOfMonth` with `options.weekStartsOn` set to 1 [not working for Sundays](https://github.com/date-fns/date-fns/issues/1040). Kudos to [@waseemahmad31](https://github.com/waseemahmad31)!
+
+## [2.0.0] - 2019-08-20
+
+If you're upgrading from v2 alpha or beta, [see the pre-release changelog](https://gist.github.com/kossnocorp/a307a464760b405bb78ef5020a4ab136).
+
+### Fixed
+
+- Fix the `toDate` bug occurring when parsing ISO-8601 style dates (but not valid ISO format)
+ with a trailing Z (e.g `2012-01Z`), it returned Invalid Date for FireFox/IE11 [#510](https://github.com/date-fns/date-fns/issue/510)
+
+- Fix `differenceIn...` functions returning negative zero in some cases:
+ [#692](https://github.com/date-fns/date-fns/issues/692)
+
+- `isDate` now works properly with dates passed across iframes [#754](https://github.com/date-fns/date-fns/pull/754).
+
+- Fix a few bugs that appear in timezones with offsets that include seconds (e.g. GMT+00:57:44).
+ See PR [#789](https://github.com/date-fns/date-fns/pull/789).
+
+- [Fixed DST issue](https://github.com/date-fns/date-fns/pull/1003). See [#972](https://github.com/date-fns/date-fns/issues/972) and [#992](https://github.com/date-fns/date-fns/issues/992) for more details.
+
+- Fixed DST issue in `eachDayOfInterval` that caused time in the days
+ after DST change to have the shift as well.
+
+- Fix bug in Galician locale caused by incorrect usage of `getHours`
+ instead of `getUTCHours`.
+
+### Changed
+
+- **BREAKING**: now functions don't accept string arguments, but only
+ numbers or dates. When a string is passed, it will result in
+ an unexpected result (`Invalid Date`, `NaN`, etc).
+
+ From now on a string should be parsed using `parseISO` (ISO 8601)
+ or `parse`.
+
+ In v1 we've used `new Date()` to parse strings, but it resulted in many
+ hard-to-track bugs caused by inconsistencies in different browsers.
+ To address that we've implemented our ISO 8601 parser but that made
+ library to significantly grow in size. To prevent inevitable bugs
+ and keep the library tiny, we made this trade-off.
+
+ See [this post](https://blog.date-fns.org/post/we-cut-date-fns-v2-minimal-build-size-down-to-300-bytes-and-now-its-the-smallest-date-library-18f2nvh2z0yal) for more details.
+
+ ```javascript
+ // Before v2.0.0
+ addDays('2016-01-01', 1)
+
+ // v2.0.0 onward
+ addDays(parseISO('2016-01-01'), 1)
+ ```
+
+- **BREAKING**: new format string API for `format` function
+ which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).
+ See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.
+
+ | Unit | v2 Pattern | v1 Pattern | Result examples |
+ | ------------------------------- | ---------- | ---------- | --------------------------------- |
+ | Era | G..GGG | | AD, BC |
+ | | GGGG | | Anno Domini, Before Christ |
+ | | GGGGG | | A, B |
+ | Calendar year | y | | 44, 1, 1900, 2017 |
+ | | yo | | 44th, 1st, 0th, 17th |
+ | | yy | YY | 44, 01, 00, 17 |
+ | | yyy | | 044, 001, 1900, 2017 |
+ | | yyyy | YYYY | 0044, 0001, 1900, 2017 |
+ | | yyyyy | | ... |
+ | Local week-numbering year | Y | | 44, 1, 1900, 2017 |
+ | | Yo | | 44th, 1st, 1900th, 2017th |
+ | | YY | | 44, 01, 00, 17 |
+ | | YYY | | 044, 001, 1900, 2017 |
+ | | YYYY | | 0044, 0001, 1900, 2017 |
+ | | YYYYY | | ... |
+ | ISO week-numbering year | R | | -43, 0, 1, 1900, 2017 |
+ | | RR | GG | -43, 00, 01, 1900, 2017 |
+ | | RRR | | -043, 000, 001, 1900, 2017 |
+ | | RRRR | GGGG | -0043, 0000, 0001, 1900, 2017 |
+ | | RRRRR | | ... |
+ | Extended year | u | | -43, 0, 1, 1900, 2017 |
+ | | uu | | -43, 01, 1900, 2017 |
+ | | uuu | | -043, 001, 1900, 2017 |
+ | | uuuu | | -0043, 0001, 1900, 2017 |
+ | | uuuuu | | ... |
+ | Quarter (formatting) | Q | | 1, 2, 3, 4 |
+ | | Qo | | 1st, 2nd, 3rd, 4th |
+ | | QQ | | 01, 02, 03, 04 |
+ | | QQQ | | Q1, Q2, Q3, Q4 |
+ | | QQQQ | | 1st quarter, 2nd quarter, ... |
+ | | QQQQQ | | 1, 2, 3, 4 |
+ | Quarter (stand-alone) | q | Q | 1, 2, 3, 4 |
+ | | qo | Qo | 1st, 2nd, 3rd, 4th |
+ | | qq | | 01, 02, 03, 04 |
+ | | qqq | | Q1, Q2, Q3, Q4 |
+ | | qqqq | | 1st quarter, 2nd quarter, ... |
+ | | qqqqq | | 1, 2, 3, 4 |
+ | Month (formatting) | M | | 1, 2, ..., 12 |
+ | | Mo | | 1st, 2nd, ..., 12th |
+ | | MM | | 01, 02, ..., 12 |
+ | | MMM | | Jan, Feb, ..., Dec |
+ | | MMMM | | January, February, ..., December |
+ | | MMMMM | | J, F, ..., D |
+ | Month (stand-alone) | L | M | 1, 2, ..., 12 |
+ | | Lo | | 1st, 2nd, ..., 12th |
+ | | LL | MM | 01, 02, ..., 12 |
+ | | LLL | MMM | Jan, Feb, ..., Dec |
+ | | LLLL | MMMM | January, February, ..., December |
+ | | LLLLL | | J, F, ..., D |
+ | Local week of year | w | | 1, 2, ..., 53 |
+ | | wo | | 1st, 2nd, ..., 53th |
+ | | ww | | 01, 02, ..., 53 |
+ | ISO week of year | I | W | 1, 2, ..., 53 |
+ | | Io | Wo | 1st, 2nd, ..., 53th |
+ | | II | WW | 01, 02, ..., 53 |
+ | Day of month | d | D | 1, 2, ..., 31 |
+ | | do | Do | 1st, 2nd, ..., 31st |
+ | | dd | DD | 01, 02, ..., 31 |
+ | Day of year | D | DDD | 1, 2, ..., 365, 366 |
+ | | Do | DDDo | 1st, 2nd, ..., 365th, 366th |
+ | | DD | | 01, 02, ..., 365, 366 |
+ | | DDD | DDDD | 001, 002, ..., 365, 366 |
+ | | DDDD | | ... |
+ | Day of week (formatting) | E..EEE | | Mon, Tue, Wed, ..., Su |
+ | | EEEE | | Monday, Tuesday, ..., Sunday |
+ | | EEEEE | | M, T, W, T, F, S, S |
+ | | EEEEEE | | Mo, Tu, We, Th, Fr, Su, Sa |
+ | ISO day of week (formatting) | i | E | 1, 2, 3, ..., 7 |
+ | | io | do | 1st, 2nd, ..., 7th |
+ | | ii | | 01, 02, ..., 07 |
+ | | iii | ddd | Mon, Tue, Wed, ..., Su |
+ | | iiii | dddd | Monday, Tuesday, ..., Sunday |
+ | | iiiii | | M, T, W, T, F, S, S |
+ | | iiiiii | dd | Mo, Tu, We, Th, Fr, Su, Sa |
+ | Local day of week (formatting) | e | | 2, 3, 4, ..., 1 |
+ | | eo | | 2nd, 3rd, ..., 1st |
+ | | ee | | 02, 03, ..., 01 |
+ | | eee | | Mon, Tue, Wed, ..., Su |
+ | | eeee | | Monday, Tuesday, ..., Sunday |
+ | | eeeee | | M, T, W, T, F, S, S |
+ | | eeeeee | | Mo, Tu, We, Th, Fr, Su, Sa |
+ | Local day of week (stand-alone) | c | | 2, 3, 4, ..., 1 |
+ | | co | | 2nd, 3rd, ..., 1st |
+ | | cc | | 02, 03, ..., 01 |
+ | | ccc | | Mon, Tue, Wed, ..., Su |
+ | | cccc | | Monday, Tuesday, ..., Sunday |
+ | | ccccc | | M, T, W, T, F, S, S |
+ | | cccccc | | Mo, Tu, We, Th, Fr, Su, Sa |
+ | AM, PM | a..aaa | A | AM, PM |
+ | | aaaa | aa | a.m., p.m. |
+ | | aaaaa | | a, p |
+ | AM, PM, noon, midnight | b..bbb | | AM, PM, noon, midnight |
+ | | bbbb | | a.m., p.m., noon, midnight |
+ | | bbbbb | | a, p, n, mi |
+ | Flexible day period | B..BBB | | at night, in the morning, ... |
+ | | BBBB | | at night, in the morning, ... |
+ | | BBBBB | | at night, in the morning, ... |
+ | Hour [1-12] | h | | 1, 2, ..., 11, 12 |
+ | | ho | | 1st, 2nd, ..., 11th, 12th |
+ | | hh | | 01, 02, ..., 11, 12 |
+ | Hour [0-23] | H | | 0, 1, 2, ..., 23 |
+ | | Ho | | 0th, 1st, 2nd, ..., 23rd |
+ | | HH | | 00, 01, 02, ..., 23 |
+ | Hour [0-11] | K | | 1, 2, ..., 11, 0 |
+ | | Ko | | 1st, 2nd, ..., 11th, 0th |
+ | | KK | | 1, 2, ..., 11, 0 |
+ | Hour [1-24] | k | | 24, 1, 2, ..., 23 |
+ | | ko | | 24th, 1st, 2nd, ..., 23rd |
+ | | kk | | 24, 01, 02, ..., 23 |
+ | Minute | m | | 0, 1, ..., 59 |
+ | | mo | | 0th, 1st, ..., 59th |
+ | | mm | | 00, 01, ..., 59 |
+ | Second | s | | 0, 1, ..., 59 |
+ | | so | | 0th, 1st, ..., 59th |
+ | | ss | | 00, 01, ..., 59 |
+ | Fraction of second | S | | 0, 1, ..., 9 |
+ | | SS | | 00, 01, ..., 99 |
+ | | SSS | | 000, 0001, ..., 999 |
+ | | SSSS | | ... |
+ | Timezone (ISO-8601 w/ Z) | X | | -08, +0530, Z |
+ | | XX | | -0800, +0530, Z |
+ | | XXX | | -08:00, +05:30, Z |
+ | | XXXX | | -0800, +0530, Z, +123456 |
+ | | XXXXX | | -08:00, +05:30, Z, +12:34:56 |
+ | Timezone (ISO-8601 w/o Z) | x | | -08, +0530, +00 |
+ | | xx | ZZ | -0800, +0530, +0000 |
+ | | xxx | Z | -08:00, +05:30, +00:00 |
+ | | xxxx | | -0800, +0530, +0000, +123456 |
+ | | xxxxx | | -08:00, +05:30, +00:00, +12:34:56 |
+ | Timezone (GMT) | O...OOO | | GMT-8, GMT+5:30, GMT+0 |
+ | | OOOO | | GMT-08:00, GMT+05:30, GMT+00:00 |
+ | Timezone (specific non-locat.) | z...zzz | | GMT-8, GMT+5:30, GMT+0 |
+ | | zzzz | | GMT-08:00, GMT+05:30, GMT+00:00 |
+ | Seconds timestamp | t | X | 512969520 |
+ | | tt | | ... |
+ | Milliseconds timestamp | T | x | 512969520900 |
+ | | TT | | ... |
+ | Long localized date | P | | 5/29/53 |
+ | | PP | | May 29, 1453 |
+ | | PPP | | May 29th, 1453 |
+ | | PPPP | | Sunday, May 29th, 1453 |
+ | Long localized time | p | | 12:00 AM |
+ | | pp | | 12:00:00 AM |
+ | | ppp | | 12:00:00 AM GMT+2 |
+ | | pppp | | 12:00:00 AM GMT+02:00 |
+ | Combination of date and time | Pp | | 5/29/53, 12:00 AM |
+ | | PPpp | | May 29, 1453, 12:00 AM |
+ | | PPPppp | | May 29th, 1453 at ... |
+ | | PPPPpppp | | Sunday, May 29th, 1453 at ... |
+
+ Characters are now escaped using single quote symbols (`'`) instead of square brackets.
+ `format` now throws RangeError if it encounters an unescaped latin character
+ that isn't a valid formatting token.
+
+ To use `YY` and `YYYY` tokens that represent week-numbering years,
+ you should set `useAdditionalWeekYearTokens` option:
+
+ ```javascript
+ format(Date.now(), 'YY', { useAdditionalWeekYearTokens: true })
+ //=> '86'
+ ```
+
+ To use `D` and `DD` tokens which represent days of the year,
+ set `useAdditionalDayOfYearTokens` option:
+
+ ```javascript
+ format(Date.now(), 'D', { useAdditionalDayOfYearTokens: true })
+ //=> '364'
+ ```
+
+- **BREAKING**: function submodules now use camelCase naming schema:
+
+ ```javascript
+ // Before v2.0.0
+ import differenceInCalendarISOYears from 'date-fns/difference_in_calendar_iso_years'
+
+ // v2.0.0 onward
+ import differenceInCalendarISOYears from 'date-fns/differenceInCalendarISOYears'
+ ```
+
+- **BREAKING**: min and max functions now accept an array of dates
+ rather than spread arguments.
+
+ ```javascript
+ // Before v2.0.0
+ var date1 = new Date(1989, 6 /* Jul */, 10)
+ var date2 = new Date(1987, 1 /* Feb */, 11)
+
+ var minDate = min(date1, date2)
+ var maxDate = max(date1, date2)
+
+ // v2.0.0 onward:
+ var dates = [new Date(1989, 6 /* Jul */, 10), new Date(1987, 1 /* Feb */, 11)]
+
+ var minDate = min(dates)
+ var maxDate = max(dates)
+ ```
+
+- **BREAKING**: make the second argument of `format` required for the sake of explicitness.
+
+ ```javascript
+ // Before v2.0.0
+ format(new Date(2016, 0, 1))
+
+ // v2.0.0 onward
+ format(new Date(2016, 0, 1), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx")
+ ```
+
+- **BREAKING** renamed ISO week-numbering year helpers:
+
+ - `addISOYears` → `addISOWeekYears`
+ - `differenceInCalendarISOYears` → `differenceInCalendarISOWeekYears`
+ - `differenceInISOYears` → `differenceInISOWeekYears`
+ - `endOfISOYear` → `endOfISOWeekYear`
+ - `getISOYear` → `getISOWeekYear`
+ - `isSameISOYear` → `isSameISOWeekYear`
+ - `lastDayOfISOYear` → `lastDayOfISOWeekYear`
+ - `setISOYear` → `setISOWeekYear`
+ - `subISOYears` → `subISOWeekYears`
+
+ i.e. "ISO year" renamed to "ISO week year", which is short for
+ [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ It makes them consistent with locale-dependent week-numbering year helpers,
+ e.g., `startOfWeekYear`.
+
+- **BREAKING**: functions renamed:
+
+ - `areRangesOverlapping` → `areIntervalsOverlapping`
+ - `eachDay` → `eachDayOfInterval`
+ - `getOverlappingDaysInRanges` → `getOverlappingDaysInIntervals`
+ - `isWithinRange` → `isWithinInterval`
+
+ This change was made to mirror the use of the word "interval" in standard ISO 8601:2004 terminology:
+
+ ```
+ 2.1.3
+ time interval
+ part of the time axis limited by two instants
+ ```
+
+ Also these functions now accept an object with `start` and `end` properties
+ instead of two arguments as an interval. All these functions
+ throw `RangeError` if the start of the interval is after its end
+ or if any date in the interval is `Invalid Date`.
+
+ ```javascript
+ // Before v2.0.0
+
+ areRangesOverlapping(
+ new Date(2014, 0, 10),
+ new Date(2014, 0, 20),
+ new Date(2014, 0, 17),
+ new Date(2014, 0, 21)
+ )
+
+ eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))
+
+ getOverlappingDaysInRanges(
+ new Date(2014, 0, 10),
+ new Date(2014, 0, 20),
+ new Date(2014, 0, 17),
+ new Date(2014, 0, 21)
+ )
+
+ isWithinRange(
+ new Date(2014, 0, 3),
+ new Date(2014, 0, 1),
+ new Date(2014, 0, 7)
+ )
+
+ // v2.0.0 onward
+
+ areIntervalsOverlapping(
+ { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }
+ )
+
+ eachDayOfInterval({
+ start: new Date(2014, 0, 10),
+ end: new Date(2014, 0, 20),
+ })
+
+ getOverlappingDaysInIntervals(
+ { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }
+ )
+
+ isWithinInterval(new Date(2014, 0, 3), {
+ start: new Date(2014, 0, 1),
+ end: new Date(2014, 0, 7),
+ })
+ ```
+
+- **BREAKING**: functions renamed:
+
+ - `distanceInWords` → `formatDistance`
+ - `distanceInWordsStrict` → `formatDistanceStrict`
+ - `distanceInWordsToNow` → `formatDistanceToNow`
+
+ to make them consistent with `format` and `formatRelative`.
+
+- **BREAKING**: The order of arguments of `distanceInWords` and `distanceInWordsStrict`
+ is swapped to make them consistent with `differenceIn...` functions.
+
+ ```javascript
+ // Before v2.0.0
+
+ distanceInWords(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 11, 32, 0),
+ { addSuffix: true }
+ ) //=> 'in about 1 hour'
+
+ // v2.0.0 onward
+
+ formatDistance(
+ new Date(1986, 3, 4, 11, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { addSuffix: true }
+ ) //=> 'in about 1 hour'
+ ```
+
+- **BREAKING**: `partialMethod` option in `formatDistanceStrict` is renamed to `roundingMethod`.
+
+ ```javascript
+ // Before v2.0.0
+
+ distanceInWordsStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 1),
+ { partialMethod: 'ceil' }
+ ) //=> '2 minutes'
+
+ // v2.0.0 onward
+
+ formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 33, 1),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { roundingMethod: 'ceil' }
+ ) //=> '2 minutes'
+ ```
+
+- **BREAKING**: in `formatDistanceStrict`, if `roundingMethod` is not specified,
+ it now defaults to `round` instead of `floor`.
+
+- **BREAKING**: `unit` option in `formatDistanceStrict` now accepts one of the strings:
+ 'second', 'minute', 'hour', 'day', 'month' or 'year' instead of 's', 'm', 'h', 'd', 'M' or 'Y'
+
+ ```javascript
+ // Before v2.0.0
+
+ distanceInWordsStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 1),
+ { unit: 'm' }
+ )
+
+ // v2.0.0 onward
+
+ formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 33, 1),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'minute' }
+ )
+ ```
+
+- **BREAKING**: `parse` that previously used to convert strings and
+ numbers to dates now parse only strings in an arbitrary format
+ specified as an argument. Use `toDate` to coerce numbers and `parseISO`
+ to parse ISO 8601 strings.
+
+ ```javascript
+ // Before v2.0.0
+ parse('2016-01-01')
+ parse(1547005581366)
+ parse(new Date()) // Clone the date
+
+ // v2.0.0 onward
+ parse('2016-01-01', 'yyyy-MM-dd', new Date())
+ parseISO('2016-01-01')
+ toDate(1547005581366)
+ toDate(new Date()) // Clone the date
+ ```
+
+- **BREAKING**: `toDate` (previously `parse`) now doesn't accept string
+ arguments but only numbers and dates. `toDate` called with an invalid
+ argument will return `Invalid Date`.
+
+- **BREAKING**: new locale format.
+ See [docs/Locale](https://date-fns.org/docs/Locale).
+ Locales renamed:
+
+ - `en` → `en-US`
+ - `zh_cn` → `zh-CN`
+ - `zh_tw` → `zh-TW`
+
+ ```javascript
+ // Before v2.0.0
+ import locale from 'date-fns/locale/zh_cn'
+
+ // v2.0.0 onward
+ import locale from 'date-fns/locale/zh-CN'
+ ```
+
+- **BREAKING**: now `closestTo` and `closestIndexTo` don't throw an exception
+ when the second argument is not an array, and return Invalid Date instead.
+
+- **BREAKING**: now `isValid` doesn't throw an exception
+ if the first argument is not an instance of Date.
+ Instead, argument is converted beforehand using `toDate`.
+
+ Examples:
+
+ | `isValid` argument | Before v2.0.0 | v2.0.0 onward |
+ | ------------------------- | ------------- | ------------- |
+ | `new Date()` | `true` | `true` |
+ | `new Date('2016-01-01')` | `true` | `true` |
+ | `new Date('')` | `false` | `false` |
+ | `new Date(1488370835081)` | `true` | `true` |
+ | `new Date(NaN)` | `false` | `false` |
+ | `'2016-01-01'` | `TypeError` | `false` |
+ | `''` | `TypeError` | `false` |
+ | `1488370835081` | `TypeError` | `true` |
+ | `NaN` | `TypeError` | `false` |
+
+ We introduce this change to make _date-fns_ consistent with ECMAScript behavior
+ that try to coerce arguments to the expected type
+ (which is also the case with other _date-fns_ functions).
+
+- **BREAKING**: functions now throw `RangeError` if optional values passed to `options`
+ are not `undefined` or have expected values.
+ This change is introduced for consistency with ECMAScript standard library which does the same.
+
+- **BREAKING**: `format`, `formatDistance` (previously `distanceInWords`) and
+ `formatDistanceStrict` (previously `distanceInWordsStrict`) now throw
+ `RangeError` if one the passed arguments is invalid. It reflects behavior of
+ `toISOString` and Intl API. See [#1032](https://github.com/date-fns/date-fns/pull/1032).
+
+- **BREAKING**: all functions now implicitly convert arguments by following rules:
+
+ | | date | number | string | boolean |
+ | --------- | ------------ | ------ | ----------- | ------- |
+ | 0 | new Date(0) | 0 | '0' | false |
+ | '0' | Invalid Date | 0 | '0' | false |
+ | 1 | new Date(1) | 1 | '1' | true |
+ | '1' | Invalid Date | 1 | '1' | true |
+ | true | Invalid Date | NaN | 'true' | true |
+ | false | Invalid Date | NaN | 'false' | false |
+ | null | Invalid Date | NaN | 'null' | false |
+ | undefined | Invalid Date | NaN | 'undefined' | false |
+ | NaN | Invalid Date | NaN | 'NaN' | false |
+
+ Notes:
+
+ - as before, arguments expected to be `Date` are converted to `Date` using _date-fns'_ `toDate` function;
+ - arguments expected to be numbers are converted to integer numbers using our custom `toInteger` implementation
+ (see [#765](https://github.com/date-fns/date-fns/pull/765));
+ - arguments expected to be strings are converted to strings using JavaScript's `String` function;
+ - arguments expected to be booleans are converted to boolean using JavaScript's `Boolean` function.
+
+ `null` and `undefined` passed to optional arguments (i.e. properties of `options` argument)
+ are ignored as if no argument was passed.
+
+ If any resulting argument is invalid (i.e. `NaN` for numbers and `Invalid Date` for dates),
+ an invalid value will be returned:
+
+ - `false` for functions that return booleans (expect `isValid`);
+ - `Invalid Date` for functions that return dates;
+ - and `NaN` for functions that return numbers.
+
+ See tests and PRs [#460](https://github.com/date-fns/date-fns/pull/460) and
+ [#765](https://github.com/date-fns/date-fns/pull/765) for exact behavior.
+
+- **BREAKING**: all functions now check if the passed number of arguments is less
+ than the number of required arguments and throw `TypeError` exception if so.
+
+- **BREAKING**: all functions that accept numbers as arguments, now coerce
+ values using `Number()` and also round decimals. Positive decimals are
+ rounded using `Math.floor`, decimals less than zero are rounded using
+ `Math.ceil`.
+
+- **BREAKING**: The Bower & UMD/CDN package versions are no longer supported.
+
+- **BREAKING**: `null` now is not a valid date. `isValid(null)` returns `false`;
+ `toDate(null)` returns an invalid date. Since `toDate` is used internally
+ by all the functions, operations over `null` will also return an invalid date.
+ [See #537](https://github.com/date-fns/date-fns/issues/537) for the reasoning.
+
+- `toDate` (previously `parse`) and `isValid` functions now accept `any` type
+ as the first argument.
+
+- [Exclude `docs.json` from the npm package](https://github.com/date-fns/date-fns/pull/837). Kudos to [@hawkrives](https://github.com/hawkrives).
+
+### Added
+
+- FP functions like those in [lodash](https://github.com/lodash/lodash/wiki/FP-Guide),
+ that support [currying](https://en.wikipedia.org/wiki/Currying), and, as a consequence,
+ functional-style [function composing](https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba).
+
+ Functions with options (`format`, `parse`, etc.) have two FP counterparts:
+ one that has the options object as its first argument and one that hasn't.
+ The name of the former has `WithOptions` added to the end of its name.
+
+ In FP functions, the order of arguments is reversed.
+
+ See [FP Guide](https://date-fns.org/docs/FP-Guide) for more information.
+
+ ```javascript
+ import addYears from 'date-fns/fp/addYears'
+ import formatWithOptions from 'date-fns/fp/formatWithOptions'
+ import eo from 'date-fns/locale/eo'
+
+ // If FP function has not received enough arguments, it returns another function
+ const addFiveYears = addYears(5)
+
+ // Several arguments can be curried at once
+ const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy')
+
+ const dates = [
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(2017, 1 /* Feb */, 11),
+ new Date(2017, 6 /* Jul */, 2),
+ ]
+
+ const formattedDates = dates.map((date) => dateToString(addFiveYears(date)))
+ //=> ['1 januaro 2022', '11 februaro 2022', '2 julio 2022']
+ ```
+
+- Added support for [ECMAScript Modules](http://www.ecma-international.org/ecma-262/6.0/#sec-modules).
+
+ It allows usage with bundlers that support tree-shaking,
+ like [rollup.js](http://rollupjs.org) and [webpack](https://webpack.js.org):
+
+ ```javascript
+ // Without tree-shaking:
+ import format from 'date-fns/format'
+ import parse from 'date-fns/parse'
+
+ // With tree-shaking:
+ import { format, parse } from 'date-fns'
+ ```
+
+ Also, ESM functions provide default export, they can be used with TypeScript
+ to import functions in more idiomatic way:
+
+ ```typescript
+ // Before
+ import * as format from 'date-fns/format'
+
+ // Now
+ import format from 'date-fns/format'
+ ```
+
+- `formatRelative` function. See [formatRelative](https://date-fns.org/docs/formatRelative)
+
+- Flow typings for `index.js`, `fp/index.js`, `locale/index.js`, and their ESM equivalents.
+ See PR [#558](https://github.com/date-fns/date-fns/pull/558)
+
+- New locale-dependent week-numbering year helpers:
+
+ - `getWeek`
+
+ - `getWeekYear`
+
+ - `setWeek`
+
+ - `setWeekYear`
+
+ - `startOfWeekYear`
+
+- Added `eachWeekOfInterval`, the weekly equivalent of `eachDayOfInterval`
+
+- [Added `getUnixTime` function](https://github.com/date-fns/date-fns/pull/870). Kudos to [@Kingwl](https://github.com/Kingwl).
+
+- [New decade helpers](https://github.com/date-fns/date-fns/pull/839). Thanks to [@y-nk](https://github.com/y-nk)!
+
+ - `getDecade`
+
+ - `startOfDecade`
+
+ - `endOfDecade`
+
+ - `lastDayOfDecade`
+
+- [New `roundToNearestMinutes` function](https://github.com/date-fns/date-fns/pull/928). Kudos to [@xkizer](https://github.com/xkizer).
+
+- Added new function `fromUnixTime`. Thansk to [@xkizer](https://github.com/xkizer).
+
+- New interval, month, and year helpers to fetch a list of all Saturdays and Sundays (weekends) for a given date interval. `eachWeekendOfInterval` is the handler function while the other two are wrapper functions. Kudos to [@laekettavong](https://github.com/laekettavong)!
+
+ - `eachWeekendOfInterval`
+
+ - `eachWeekendOfMonth`
+
+ - `eachWeekendOfYear`
+
+- Build-efficient `lightFormat` that only supports the popular subset of tokens. See [#1050](https://github.com/date-fns/date-fns/pull/1015).
+
+- `parseISO` function that parses ISO 8601 strings. See [#1023](https://github.com/date-fns/date-fns/pull/1023).
+
+- Add constants that can be imported directly from `date-fns` or the submodule `date-fns/constants`:
+
+ - `maxTime`
+
+ - `minTime`
+
+- New locales:
+
+ - [Norwegian Nynorsk locale (nn)](https://github.com/date-fns/date-fns/pull/1172)
+ by [@draperunner](https://github.com/draperunner).
+
+ - [Ukrainian locale (ua)](https://github.com/date-fns/date-fns/pull/532)
+ by [@korzhyk](https://github.com/korzhyk).
+
+ - [Vietnamese locale (vi)](https://github.com/date-fns/date-fns/pull/546)
+ by [@trongthanh](https://github.com/trongthanh).
+
+ - [Persian locale (fa-IR)](https://github.com/date-fns/date-fns/pull/1113)
+ by [@mort3za](https://github.com/mort3za).
+
+ - [Latvian locale (lv)](https://github.com/date-fns/date-fns/pull/1175)
+ by [@prudolfs](https://github.com/prudolfs).
+
+ - [Bengali locale (bb)](https://github.com/date-fns/date-fns/pull/845)
+ by [@nutboltu](https://github.com/nutboltu) and [@touhidrahman](https://github.com/touhidrahman).
+
+ - [Hungarian (hu) and Lithuanian (lt) locales](https://github.com/date-fns/date-fns/pull/864)
+ by [@izifortune](https://github.com/izifortune) and [pardoeryanair](https://github.com/pardoeryanair).
+
+ - [Canadian English locale (en-CA)](https://github.com/date-fns/date-fns/pull/688)
+ by [@markowsiak](https://github.com/markowsiak).
+
+ - [Great Britain English locale (en-GB)](https://github.com/date-fns/date-fns/pull/563)
+ by [@glintik](https://github.com/glintik).
+
+ - [Uighur locale (ug)](https://github.com/date-fns/date-fns/pull/1080)
+ by [@abduwaly](https://github.com/abduwaly).
+
+- [Add new function `differenceInBusinessDays`](https://github.com/date-fns/date-fns/pull/1194)
+ which calculates the difference in business days. Kudos to [@ThorrStevens](https://github.com/ThorrStevens)!
+
+- [Add new function `addBusinessDays`](https://github.com/date-fns/date-fns/pull/1154),
+ similar to `addDays` but ignoring weekends. Thanks to [@ThorrStevens](https://github.com/ThorrStevens)!
+
+## [1.30.1] - 2018-12-10
+
+### Fixed
+
+- [Fixed DST issue](https://github.com/date-fns/date-fns/pull/1005). See [#972](https://github.com/date-fns/date-fns/issues/972) and [#992](https://github.com/date-fns/date-fns/issues/992) for more details. This fix was backported from v2.
+
+- Fix a few bugs that appear in timezones with offsets that include seconds (e.g. GMT+00:57:44). See PR [#789](https://github.com/date-fns/date-fns/issues/789). This fix was backported from v2.
+
+- [Fix misspelled January in the Thai locale](https://github.com/date-fns/date-fns/pull/913). Thanks to [@ratchapol-an](https://github.com/ratchapol-an)!
+
+### Added
+
+- [Added Serbian locale](https://github.com/date-fns/date-fns/pull/717). Kudos to [@mawi12345](https://github.com/mawi12345)!
+
+- [Added Belarusian locale](https://github.com/date-fns/date-fns/pull/716). Kudos to [@mawi12345](https://github.com/mawi12345) again!
+
+### Changed
+
+- [Improve ja translation of distanceInWords](https://github.com/date-fns/date-fns/pull/880). Thanks to [@kudohamu](https://github.com/kudohamu)!
+
+## [1.30.0] - 2018-12-10
+
+⚠️ The release got failed.
+
+## [1.29.0] - 2017-10-11
+
+### Fixed
+
+- Fix Italian translations for `formatDistance`. ([see the issue: #550](https://github.com/date-fns/date-fns/issues/550); [see the PR: #552](https://github.com/date-fns/date-fns/pull/552))
+ Thanks to [@giofilo](https://github.com/giofilo)!
+
+### Added
+
+- [Hungarian locale (hu)](https://github.com/date-fns/date-fns/pull/503)
+ (thanks to László Horváth [@horvathlg](https://github.com/horvathlg))
+
+- [Slovenian locale (sl)](https://github.com/date-fns/date-fns/pull/505)
+ (thanks to Adam Stradovnik [@Neoglyph](https://github.com/Neoglyph))
+
+- Add `step` to `eachDay` function. Thanks to [@BDav24](https://github.com/BDav24).
+ See PR [#487](https://github.com/date-fns/date-fns/pull/487).
+
+## [1.28.5] - 2017-05-19
+
+### Fixed
+
+- Fix a.m./p.m. formatters in Chinese Simplified locale.
+ Thanks to [@fnlctrl](https://github.com/fnlctrl).
+ See PR [#486](https://github.com/date-fns/date-fns/pull/486)
+
+## [1.28.4] - 2017-04-26
+
+### Fixed
+
+- Fix accents on weekdays in the Italian locale.
+ See PR [#481](https://github.com/date-fns/date-fns/pull/481).
+ Thanks to [@albertorestifo](https://github.com/albertorestifo)
+
+- Fix typo in `ddd` format token in Spanish language locale.
+ Kudos to [@fjaguero](https://github.com/fjaguero).
+ See PR [#482](https://github.com/date-fns/date-fns/pull/482)
+
+## [1.28.3] - 2017-04-14
+
+### Fixed
+
+- Fix ordinal numbers for Danish language locale. Thanks to [@kgram](https://github.com/kgram).
+ See PR [#474](https://github.com/date-fns/date-fns/pull/474)
+
+## [1.28.2] - 2017-03-27
+
+### Fixed
+
+- Fix `dd` and `ddd` formatters in Polish language locale. Kudos to [@justrag](https://github.com/justrag).
+ See PR: [#467](https://github.com/date-fns/date-fns/pull/467)
+
+## [1.28.1] - 2017-03-19
+
+### Fixed
+
+- Fix DST border bug in `addMilliseconds`, `addSeconds`, `addMinutes`, `addHours`,
+ `subMilliseconds`, `subSeconds`, `subMinutes` and `subHours`.
+ See issue [#465](https://github.com/date-fns/date-fns/issues/465)
+
+- Minor fix for Indonesian locale. Thanks to [@bentinata](https://github.com/bentinata).
+ See PR: [#458](https://github.com/date-fns/date-fns/pull/458)
+
+## [1.28.0] - 2017-02-27
+
+### Added
+
+- [Romanian locale (ro)](https://github.com/date-fns/date-fns/pull/446)
+ (thanks to Sergiu Munteanu [@jsergiu](https://github.com/jsergiu))
+
+### Fixed
+
+- All functions now convert all their arguments to the respective types.
+ See PR: [#443](https://github.com/date-fns/date-fns/pull/443)
+
+- Fixes for ordinals (1er, 2, 3, …) in French locale.
+ Thanks to [@fbonzon](https://github.com/fbonzon).
+ See PR: [#449](https://github.com/date-fns/date-fns/pull/449)
+
+## [1.27.2] - 2017-02-01
+
+### Fixed
+
+- Various fixes for Dutch locale. See PR: [#416](https://github.com/date-fns/date-fns/pull/416).
+ Thanks to Ruben Stolk [@rubenstolk](https://github.com/rubenstolk)
+
+## [1.27.1] - 2017-01-20
+
+### Fixed
+
+- Added generation of TypeScript locale sub-modules, allowing import of locales in TypeScript.
+
+## [1.27.0] - 2017-01-19
+
+### Added
+
+- [Macedonian locale (mk)](https://github.com/date-fns/date-fns/pull/398)
+ (thanks to Petar Vlahu [@vlahupetar](https://github.com/vlahupetar))
+
+## [1.26.0] - 2017-01-15
+
+### Added
+
+- `getTime`
+
+### Fixed
+
+- Various fixes for Japanese locale. See PR: [395](https://github.com/date-fns/date-fns/pull/395).
+ Thanks to Yamagishi Kazutoshi [@ykzts](https://github.com/ykzts)
+
+## [1.25.0] - 2017-01-11
+
+### Added
+
+- [Bulgarian locale (bg)](https://github.com/date-fns/date-fns/pull/357)
+ (thanks to Nikolay Stoynov [@arvigeus](https://github.com/arvigeus))
+
+- [Czech locale (cs)](https://github.com/date-fns/date-fns/pull/386)
+ (thanks to David Rus [@davidrus](https://github.com/davidrus))
+
+## [1.24.0] - 2017-01-06
+
+### Added
+
+- [Modern Standard Arabic locale (ar)](https://github.com/date-fns/date-fns/pull/367)
+ (thanks to Abdallah Hassan [@AbdallahAHO](https://github.com/AbdallahAHO))
+
+## [1.23.0] - 2017-01-05
+
+### Added
+
+- Auto generate TypeScript and flow typings from documentation on release.
+ Thanks to [@mattlewis92](https://github.com/mattlewis92).
+ See related PRs: [#355](https://github.com/date-fns/date-fns/pull/355),
+ [#370](https://github.com/date-fns/date-fns/pull/370)
+
+- [Croatian locale (hr)](https://github.com/date-fns/date-fns/pull/365)
+ (thanks to Matija Marohnić [@silvenon](https://github.com/silvenon))
+
+- [Thai locale (th)](https://github.com/date-fns/date-fns/pull/362)
+ (thanks to Athiwat Hirunworawongkun [@athivvat](https://github.com/athivvat))
+
+- [Finnish locale (fi)](https://github.com/date-fns/date-fns/pull/361)
+ (thanks to Pyry-Samuli Lahti [@Pyppe](https://github.com/Pyppe))
+
+## [1.22.0] - 2016-12-28
+
+### Added
+
+- [Icelandic locale (is)](https://github.com/date-fns/date-fns/pull/356)
+ (thanks to Derek Blank [@derekblank](https://github.com/derekblank))
+
+## [1.21.1] - 2016-12-18
+
+### Fixed
+
+- Fix `isBefore` and `isAfter` documentation mistakes.
+
+## [1.21.0] - 2016-12-16
+
+### Added
+
+- [Filipino locale (fil)](https://github.com/date-fns/date-fns/pull/339)
+ (thanks to Ian De La Cruz [@RIanDeLaCruz](https://github.com/RIanDeLaCruz))
+
+- [Danish locale (da)](https://github.com/date-fns/date-fns/pull/343)
+ (kudos to Anders B. Hansen [@Andersbiha](https://github.com/Andersbiha))
+
+## [1.20.1] - 2016-12-14
+
+### Fixed
+
+- Fix documentation for `getOverlappingDaysInRanges`.
+
+## [1.20.0] - 2016-12-13
+
+### Added
+
+- `areRangesOverlapping` and `getOverlappingDaysInRanges`
+ Thanks to Joanna T [@asia-t](https://github.com/asia-t).
+ See PR: [#331](https://github.com/date-fns/date-fns/pull/331)
+
+## [1.19.0] - 2016-12-13
+
+### Added
+
+- [Greek locale (el)](https://github.com/date-fns/date-fns/pull/334)
+ (kudos to Theodoros Orfanidis [@teoulas](https://github.com/teoulas))
+
+- [Slovak locale (sk)](https://github.com/date-fns/date-fns/pull/336)
+ (kudos to Marek Suscak [@mareksuscak](https://github.com/mareksuscak))
+
+- Add yarn support.
+ Thanks to Uladzimir Havenchyk [@havenchyk](https://github.com/havenchyk).
+ See PR: [#288](https://github.com/date-fns/date-fns/pull/288)
+
+## [1.18.0] - 2016-12-12
+
+### Added
+
+- [Turkish locale (tr)](https://github.com/date-fns/date-fns/pull/329)
+ (kudos to Alpcan Aydın [@alpcanaydin](https://github.com/alpcanaydin))
+
+- [Korean locale (ko)](https://github.com/date-fns/date-fns/pull/327)
+ (thanks to Hong Chulju [@angdev](https://github.com/angdev))
+
+### Fixed
+
+- `SS` and `SSS` formats in `format` are now correctly displayed with leading zeros.
+ Thanks to Paul Dijou [@pauldijou](https://github.com/pauldijou).
+ See PR: [#330](https://github.com/date-fns/date-fns/pull/330)
+
+## [1.17.0] - 2016-12-10
+
+### Added
+
+- [Polish locale (pl)](https://github.com/date-fns/date-fns/pull/294)
+ (thanks to Mateusz Derks [@ertrzyiks](https://github.com/ertrzyiks))
+
+- [Portuguese locale (pt)](https://github.com/date-fns/date-fns/pull/316)
+ (thanks to Dário Freire [@dfreire](https://github.com/dfreire))
+
+- [Swedish locale (sv)](https://github.com/date-fns/date-fns/pull/311)
+ (thanks to Johannes Ulén [@ejulen](https://github.com/ejulen))
+
+- [French locale (fr)](https://github.com/date-fns/date-fns/pull/281)
+ (thanks to Jean Dupouy [@izeau](https://github.com/izeau))
+
+- Performance tests. See PR: [#289](https://github.com/date-fns/date-fns/pull/289)
+
+### Fixed
+
+- Fix TypeScript and flow typings for `isValid`.
+ See PR: [#310](https://github.com/date-fns/date-fns/pull/310)
+
+- Fix incorrect locale tests that could potentially lead to `format` bugs.
+ Kudos to Mateusz Derks [@ertrzyiks](https://github.com/ertrzyiks).
+ See related PRs: [#312](https://github.com/date-fns/date-fns/pull/312),
+ [#320](https://github.com/date-fns/date-fns/pull/320)
+
+- Minor language fixes in the documentation.
+ Thanks to Vedad Šoše [@vedadsose](https://github.com/vedadsose) ([#314](https://github.com/date-fns/date-fns/pull/314))
+ and Asia [@asia-t](https://github.com/asia-t) ([#318](https://github.com/date-fns/date-fns/pull/318))
+
+### Changed
+
+- `format` now returns `String('Invalid Date')` if the passed date is invalid.
+ See PR: [#323](https://github.com/date-fns/date-fns/pull/323)
+
+- `distanceInWords`, `distanceInWordsToNow`, `distanceInWordsStrict` and `format` functions now
+ check if the passed locale is valid, and fallback to English locale otherwise.
+ See PR: [#321](https://github.com/date-fns/date-fns/pull/321)
+
+- _Internal_: use a loop instead of `Object.keys` in `buildFormattingTokensRegExp`
+ to improve compatibility with older browsers.
+ See PR: [#322](https://github.com/date-fns/date-fns/pull/322)
+
+## [1.16.0] - 2016-12-08
+
+### Added
+
+- [Italian locale (it)](https://github.com/date-fns/date-fns/pull/298)
+ (thanks to Alberto Restifo [@albertorestifo](https://github.com/albertorestifo))
+
+- For German `buildDistanceInWordsLocale`, add nominative case translations (for distances without a suffix).
+ Kudos to Asia [@asia-t](https://github.com/asia-t).
+ See related PR: [#295](https://github.com/date-fns/date-fns/pull/295)
+
+## [1.15.1] - 2016-12-07
+
+### Fixed
+
+- Fixed TypeScript imports from individual modules.
+ Thanks to [@mattlewis92](https://github.com/mattlewis92).
+ See related PR: [#287](https://github.com/date-fns/date-fns/pull/287)
+
+## [1.15.0] - 2016-12-07
+
+### Added
+
+- [Indonesian locale (id)](https://github.com/date-fns/date-fns/pull/299)
+ (thanks to Rahmat Budiharso [@rbudiharso](https://github.com/rbudiharso))
+
+- [Catalan locale (ca)](https://github.com/date-fns/date-fns/pull/300)
+ (thanks to Guillermo Grau [@guigrpa](https://github.com/guigrpa))
+
+### Fixed
+
+- Fix some inaccuracies in Spanish locale.
+ Kudos to [@guigrpa](https://github.com/guigrpa).
+ See related PR: [#302](https://github.com/date-fns/date-fns/pull/302)
+
+## [1.14.1] - 2016-12-06
+
+### Fixed
+
+- Fixed broken test for Norwegian Bokmål locale.
+
+## [1.14.0] - 2016-12-06
+
+### Added
+
+- [Norwegian Bokmål locale (nb)](https://github.com/date-fns/date-fns/pull/291)
+ (thanks to Hans-Kristian Koren [@Hanse](https://github.com/Hanse))
+
+## [1.13.0] - 2016-12-06
+
+### Added
+
+- [Chinese Traditional locale (zh_tw)](https://github.com/date-fns/date-fns/pull/283)
+ (thanks to tonypai [@tpai](https://github.com/tpai)).
+
+- [Dutch language locale (nl)](https://github.com/date-fns/date-fns/pull/278)
+ (kudos to Jorik Tangelder [@jtangelder](https://github.com/jtangelder))
+
+## [1.12.1] - 2016-12-05
+
+### Fixed
+
+- Added `distanceInWordsStrict` to the list of supported functions in I18n doc.
+
+## [1.12.0] - 2016-12-05
+
+### Added
+
+- [Spanish language locale (es)](https://github.com/date-fns/date-fns/pull/269)
+ (thanks to Juan Angosto [@juanangosto](https://github.com/juanangosto)).
+
+### Fixed
+
+- Fix flow typings for some of the functions.
+ See PR: [#273](https://github.com/date-fns/date-fns/pull/273)
+
+## [1.11.2] - 2016-11-28
+
+### Fixed
+
+- Bug in `parse` when it sometimes parses ISO week-numbering dates incorrectly.
+ See PR: [#262](https://github.com/date-fns/date-fns/pull/262)
+
+- Bug in some functions which caused them to handle dates earlier than 100 AD incorrectly.
+ See PR: [#263](https://github.com/date-fns/date-fns/pull/263)
+
+## [1.11.1] - 2016-11-24
+
+### Fixed
+
+- Include TypeScript typings with npm package.
+
+## [1.11.0] - 2016-11-23
+
+### Added
+
+- `distanceInWordsStrict`.
+ Kudos to [@STRML](https://github.com/STRML).
+ See related PR: [#254](https://github.com/date-fns/date-fns/pull/254)
+
+- [TypeScript](https://www.typescriptlang.org/) typings for all functions.
+ Kudos to [@mattlewis92](https://github.com/mattlewis92).
+ See related PR: [#255](https://github.com/date-fns/date-fns/pull/255)
+
+## [1.10.0] - 2016-11-01
+
+### Added
+
+- `parse` now can parse dates that are ISO 8601 centuries (e.g., `19` and `+0019`).
+
+ ```javascript
+ var result = parse('19')
+ //=> Mon Jan 01 1900 00:00:00
+ ```
+
+- In `parse`, added ability to specify the number of additional digits
+ for extended year or century format (possible values are 0, 1 or 2; default is 2).
+
+ ```javascript
+ parse('+002016-11-01')
+ parse('+02016-11-01', { additionalDigits: 1 })
+ parse('+2016-11-01', { additionalDigits: 0 })
+ ```
+
+## [1.9.0] - 2016-10-25
+
+### Added
+
+- Got index.js imports to work with SystemJS.
+
+## [1.8.1] - 2016-10-24
+
+### Fixed
+
+- Added Japanese and German language locales to the list in I18n doc.
+
+## [1.8.0] - 2016-10-23
+
+### Added
+
+- [Japanese language locale (ja)](https://github.com/date-fns/date-fns/pull/241)
+ (thanks to Thomas Eilmsteiner [@DeMuu](https://github.com/DeMuu) again!)
+
+- `getISODay`
+
+- `setISODay`
+
+## [1.7.0] - 2016-10-20
+
+### Added
+
+- [German language locale (de)](https://github.com/date-fns/date-fns/pull/237)
+ (thanks to Thomas Eilmsteiner [@DeMuu](https://github.com/DeMuu)).
+
+## [1.6.0] - 2016-10-16
+
+### Added
+
+- [Chinese Simplified locale (zh_cn)](https://github.com/date-fns/date-fns/pull/235)
+ (kudos to Changyu [@KingMario](https://github.com/KingMario) Geng).
+
+## [1.5.2] - 2016-10-13
+
+### Fixed
+
+- Incorrectly generated docs for `format`.
+
+- Fixed typo in I18n doc.
+
+## [1.5.1] - 2016-10-12
+
+### Fixed
+
+- A change log entry for [1.5.0] is added.
+
+## [1.5.0] - 2016-10-12
+
+### Added
+
+- [The initial I18n support](https://date-fns.org/docs/I18n)
+
+## [1.4.0] - 2016-10-09
+
+### Added
+
+- Basic [SystemJS](https://github.com/systemjs/systemjs) support.
+
+### Fixed
+
+- Fix incorrect behaviour of `YYYY` and `YY` for years prior to 1000:
+ now `format(new Date('0001-01-01'), 'YYYY-MM-DD')` returns `0001-01-01`
+ instead of `1-01-01`.
+
+## [1.3.0] - 2016-05-26
+
+### Added
+
+- `closestIndexTo`
+
+## [1.2.0] - 2016-05-23
+
+### Added
+
+- Add an ability to pass negative numbers to `setDay`.
+
+## [1.1.1] - 2016-05-19
+
+### Fixed
+
+- Fix [Flow](http://flowtype.org/) declarations for some of the functions.
+
+## [1.1.0] - 2016-05-19
+
+### Added
+
+- [Flow](http://flowtype.org/) declarations for each function
+ in [the ".js.flow" style](http://flowtype.org/docs/declarations.html#declaration-files).
+ Kudos to [@JohnyDays](https://github.com/JohnyDays). See related PRs:
+
+ - [#205](https://github.com/date-fns/date-fns/pull/205)
+
+ - [#207](https://github.com/date-fns/date-fns/pull/207)
+
+## [1.0.0] - 2016-05-18
+
+### Fixed
+
+- `format` now returns the correct result for key `E`.
+
+- Prevent `startOf...`, `endOf...` and `lastDayOf...` functions
+ to return dates with an incorrect time when the date is modifying
+ into another time zone.
+
+- `parse` now parses years from 1 AD to 99 AD correctly.
+
+- Fix a bug in `getISOWeek` appearing because of a changing time zone
+ (e.g., when the given date is in DST and the start of the ISO year is not).
+
+### Changed
+
+- **BREAKING**: all functions are moved to the root of the library, so they
+ are now accessible with `require('date-fns/name_of_function')` or
+ `import nameOfFunction from 'date-fns/name_of_function'`.
+
+ ```javascript
+ // Before v1.0.0
+ var addMonths = require('date-fns/src/add_months')
+
+ // v1.0.0 onward
+ var addMonths = require('date-fns/add_months')
+ ```
+
+- **BREAKING**: functions that had the last optional argument `weekStartsAt`
+ (i.e. `endOfWeek`, `isSameWeek`, `lastDayOfWeek`, `setDay`, `startOfWeek`)
+ now instead receive the object `options` with the property `options.weekStartsOn`
+ as the last argument.
+
+ ```javascript
+ // Before v1.0.0
+ var result = endOfWeek(new Date(2014, 8, 2), 1)
+
+ // v1.0.0 onward
+ var result = endOfWeek(new Date(2014, 8, 2), { weekStartsOn: 1 })
+ ```
+
+- **BREAKING**: remove the function `getTimeSinceMidnight` that was used inside
+ the other functions.
+
+- **BREAKING**: `differenceInDays` now returns the number of full days instead
+ of calendar days.
+
+- **BREAKING**: `eachDay` and `isWithinRange` now throw an exception
+ when the given range boundaries are invalid.
+
+- Faster `isLeapYear`.
+
+- _Internal_: make the documentation more verbose.
+
+- _Internal_: convert the tests from Chai to power-assert allowing them
+ to run against IE8.
+
+### Added
+
+- `addISOYears`
+
+- `closestTo`
+
+- `differenceInCalendarDays`
+
+- `differenceInCalendarISOWeeks`
+
+- `differenceInCalendarISOYears`
+
+- `differenceInCalendarMonths`
+
+- `differenceInCalendarQuarters`
+
+- `differenceInCalendarWeeks`
+
+- `differenceInCalendarYears`
+
+- `differenceInHours`
+
+- `differenceInISOYears`
+
+- `differenceInMilliseconds`
+
+- `differenceInMinutes`
+
+- `differenceInMonths`
+
+- `differenceInQuarters`
+
+- `differenceInSeconds`
+
+- `differenceInWeeks`
+
+- `differenceInYears`
+
+- `distanceInWords`
+
+- `distanceInWordsToNow`
+
+- `endOfISOWeek`
+
+- `endOfISOYear`
+
+- `endOfToday`
+
+- `endOfTomorrow`
+
+- `endOfYesterday`
+
+- `getDaysInYear`
+
+- `isDate`
+
+- `isFriday`
+
+- `isMonday`
+
+- `isSameISOWeek`
+
+- `isSameISOYear`
+
+- `isSaturday`
+
+- `isSunday`
+
+- `isThisHour`
+
+- `isThisISOWeek`
+
+- `isThisISOYear`
+
+- `isThisMinute`
+
+- `isThisMonth`
+
+- `isThisQuarter`
+
+- `isThisSecond`
+
+- `isThisWeek`
+
+- `isThisYear`
+
+- `isThursday`
+
+- `isTomorrow`
+
+- `isTuesday`
+
+- `isValid`
+
+- `isWednesday`
+
+- `isYesterday`
+
+- `lastDayOfISOWeek`
+
+- `lastDayOfISOYear`
+
+- `startOfISOWeek`
+
+- `startOfToday`
+
+- `startOfTomorrow`
+
+- `startOfYesterday`
+
+- `subISOYears`
+
+- Add `Qo`, `W`, `Wo`, `WW`, `GG`, `GGGG`, `Z`, `ZZ`, `X`, `x` keys to `format`.
+
+## [0.17.0] - 2015-09-29
+
+### Fixed
+
+- Fix a lot of bugs appearing when date is modifying into other time zone
+ (e.g., when adding months and original date is in DST but new date is not).
+
+- Prevent instances of Date to lose milliseconds value when passed to.
+ `parse` in IE10.
+
+### Changed
+
+- `setISOWeek` now keeps time from original date.
+
+- _Internal_: reuse `getDaysInMonth` inside of `addMonths`.
+
+### Added
+
+- `differenceInDays`
+
+- `getTimeSinceMidnight`
+
+- `format` now has new format key `aa`, which returns `a.m.`/`p.m.`
+ as opposed to `a` that returns `am`/`pm`.
+
+- Complete UMD package (for Bower and CDN).
+
+## [0.16.0] - 2015-09-01
+
+### Changed
+
+- Use `parse` to clean date arguments in all functions.
+
+- `parse` now fallbacks to `new Date` when the argument
+ is not an ISO formatted date.
+
+- _Internal_: reuse `getDaysInMonth` inside of `setMonth`.
+
+### Added
+
+- `addQuarters`
+
+- `addWeeks`
+
+- `endOfQuarter`
+
+- `getDate`
+
+- `getDay`
+
+- `getDaysInMonth`
+
+- `getHours`
+
+- `getISOWeeksInYear`
+
+- `getMilliseconds`
+
+- `getMinutes`
+
+- `getMonth`
+
+- `getSeconds`
+
+- `getYear`
+
+- `isLeapYear`
+
+- `isSameHour`
+
+- `isSameMinute`
+
+- `isSameQuarter`
+
+- `isSameSecond`
+
+- `lastDayOfQuarter`
+
+- `lastDayOfWeek`
+
+- `max`
+
+- `min`
+
+- `setDate`
+
+- `setDay`
+
+- `setHours`
+
+- `setMilliseconds`
+
+- `setMinutes`
+
+- `setSeconds`
+
+- `startOfQuarter`
+
+- `subQuarters`
+
+- `subWeeks`
+
+## [0.15.0] - 2015-08-26
+
+### Changed
+
+- `format` now returns `a.m.`/`p.m.` instead of `am`/`pm`.
+
+- `setMonth` now sets last day of month if original date was last day
+ of longer month.
+
+- _Internal_: Fix code style according to ESLint.
+
+- _Internal_: Make tests run through all time zones.
+
+### Added
+
+- `getQuarter`
+
+- `setQuarter`
+
+- `getDayOfYear`
+
+- `setDayOfYear`
+
+- `isPast`
+
+- `addSeconds`
+
+- `subSeconds`
+
+- `startOfSecond`
+
+- `endOfSecond`
+
+- `startOfMinute`
+
+- `endOfMinute`
+
+- `addMilliseconds`
+
+- `subMilliseconds`
+
+- `endOfYear`
+
+- `addYears`
+
+- `subYears`
+
+- `lastDayOfYear`
+
+- `lastDayOfMonth`
+
+## [0.14.11] - 2015-08-21
+
+### Fixed
+
+- `format` now uses `parse` to avoid time zone bugs.
+
+### Changed
+
+- `setIsoWeek` now sets time to the start of the day.
+
+## [0.14.10] - 2015-07-29
+
+### Fixed
+
+- `format` now behaves correctly with 12:00 am.
+
+- `format` now behaves correctly with ordinal numbers.
+
+### Added
+
+- `compareAsc`
+
+- `compareDesc`
+
+- `addHours`
+
+- `subHours`
+
+- `isSameDay`
+
+- `parse`
+
+- `getISOYear`
+
+- `setISOYear`
+
+- `startOfISOYear`
+
+- `getISOWeek`
+
+- `setISOWeek`
+
+## [0.14.9] - 2015-01-14
+
+### Fixed
+
+- `addMonths` now correctly behaves with February
+ (see [#18](https://github.com/js-fns/date-fns/pull/18)).
+
+## [0.14.8] - 2014-12-25
+
+### Fixed
+
+- `format` function now behaves correctly with `pm`/`am`.
+
+## [0.14.6] - 2014-12-04
+
+### Fixed
+
+- Fix broken Bower support.
+
+## [0.14.0] - 2014-11-05
+
+### Added
+
+- Bower package.
+
+## [0.13.0] - 2014-10-22
+
+### Added
+
+- `addMinutes`
+
+- `subMinutes`
+
+- `isEqual`
+
+- `isBefore`
+
+- `isAfter`
+
+## [0.12.1] - 2014-10-19
+
+### Fixed
+
+- Incorrect rounding in `DDD` formatter.
+
+## [0.12.0] - 2014-10-15
+
+### Added
+
+- `isSameYear`
+
+## [0.11.0] - 2014-10-15
+
+### Added
+
+- `isWithinRange`
+
+## [0.10.0] - 2014-10-13
+
+### Added
+
+- `format`
+
+- `startOfYear`
+
+## [0.9.0] - 2014-10-10
+
+### Changed
+
+- _Internal_: simplify `isWeekend`
+
+### Added
+
+- `isFuture`
+
+## [0.8.0] - 2014-10-09
+
+### Changed
+
+- _Internal_: reuse `addDays` inside of `subDays`.
+
+### Added
+
+- `addMonths`
+
+- `subMonths`
+
+- `setMonth`
+
+- `setYear`
+
+## [0.7.0] - 2014-10-08
+
+### Added
+
+- `isSameWeek`
+
+## [0.6.0] - 2014-10-07
+
+### Fixed
+
+- Inconsistent behavior of `endOfMonth`.
+
+### Added
+
+- `isFirstDayOfMonth`
+
+- `isLastDayOfMonth`
+
+- `isSameMonth`
+
+## [0.5.0] - 2014-10-07
+
+### Added
+
+- `addDays`
+
+- `subDays`
+
+## [0.4.0] - 2014-10-07
+
+### Added
+
+- `startOfWeek`
+
+- `endOfWeek`
+
+- `eachDay`
+
+## [0.3.0] - 2014-10-06
+
+### Changed
+
+- `startOfDay` now sets milliseconds as well.
+
+### Added
+
+- `endOfDay`
+
+- `startOfMonth`
+
+- `endOfMonth`
+
+## [0.2.0] - 2014-10-06
+
+### Added
+
+- `isToday`
+
+- `isWeekend`
+
+## 0.1.0 - 2014-10-06
+
+### Added
+
+- `startOfDay`
+
+[unreleased]: https://github.com/date-fns/date-fns/compare/v2.16.1...HEAD
+[2.16.1]: https://github.com/date-fns/date-fns/compare/v2.16.0...v2.16.1
+[2.16.0]: https://github.com/date-fns/date-fns/compare/v2.15.0...v2.16.0
+[2.15.0]: https://github.com/date-fns/date-fns/compare/v2.14.0...v2.15.0
+[2.14.0]: https://github.com/date-fns/date-fns/compare/v2.13.0...v2.14.0
+[2.13.0]: https://github.com/date-fns/date-fns/compare/v2.12.0...v2.13.0
+[2.12.0]: https://github.com/date-fns/date-fns/compare/v2.11.1...v2.12.0
+[2.11.1]: https://github.com/date-fns/date-fns/compare/v2.11.0...v2.11.1
+[2.11.0]: https://github.com/date-fns/date-fns/compare/v2.10.0...v2.11.0
+[2.10.0]: https://github.com/date-fns/date-fns/compare/v2.9.0...v2.10.0
+[2.9.0]: https://github.com/date-fns/date-fns/compare/v2.8.1...v2.9.0
+[2.8.1]: https://github.com/date-fns/date-fns/compare/v2.8.0...v2.8.1
+[2.8.0]: https://github.com/date-fns/date-fns/compare/v2.7.0...v2.8.0
+[2.7.0]: https://github.com/date-fns/date-fns/compare/v2.6.0...v2.7.0
+[2.6.0]: https://github.com/date-fns/date-fns/compare/v2.5.1...v2.6.0
+[2.5.1]: https://github.com/date-fns/date-fns/compare/v2.5.0...v2.5.1
+[2.5.0]: https://github.com/date-fns/date-fns/compare/v2.4.1...v2.5.0
+[2.4.1]: https://github.com/date-fns/date-fns/compare/v2.4.0...v2.4.1
+[2.4.0]: https://github.com/date-fns/date-fns/compare/v2.3.0...v2.4.0
+[2.3.0]: https://github.com/date-fns/date-fns/compare/v2.2.1...v2.3.0
+[2.2.1]: https://github.com/date-fns/date-fns/compare/v2.1.0...v2.2.1
+[2.1.0]: https://github.com/date-fns/date-fns/compare/v2.0.1...v2.1.0
+[2.0.1]: https://github.com/date-fns/date-fns/compare/v2.0.0...v2.0.1
+[2.0.0]: https://github.com/date-fns/date-fns/compare/v1.28.5...v2.0.0
+[1.28.5]: https://github.com/date-fns/date-fns/compare/v1.28.4...v1.28.5
+[1.28.4]: https://github.com/date-fns/date-fns/compare/v1.28.3...v1.28.4
+[1.28.3]: https://github.com/date-fns/date-fns/compare/v1.28.2...v1.28.3
+[1.28.2]: https://github.com/date-fns/date-fns/compare/v1.28.1...v1.28.2
+[1.28.1]: https://github.com/date-fns/date-fns/compare/v1.28.0...v1.28.1
+[1.28.0]: https://github.com/date-fns/date-fns/compare/v1.27.2...v1.28.0
+[1.27.2]: https://github.com/date-fns/date-fns/compare/v1.27.1...v1.27.2
+[1.27.1]: https://github.com/date-fns/date-fns/compare/v1.27.0...v1.27.1
+[1.27.0]: https://github.com/date-fns/date-fns/compare/v1.26.0...v1.27.0
+[1.26.0]: https://github.com/date-fns/date-fns/compare/v1.25.0...v1.26.0
+[1.25.0]: https://github.com/date-fns/date-fns/compare/v1.24.0...v1.25.0
+[1.24.0]: https://github.com/date-fns/date-fns/compare/v1.23.0...v1.24.0
+[1.23.0]: https://github.com/date-fns/date-fns/compare/v1.22.0...v1.23.0
+[1.22.0]: https://github.com/date-fns/date-fns/compare/v1.21.1...v1.22.0
+[1.21.1]: https://github.com/date-fns/date-fns/compare/v1.21.0...v1.21.1
+[1.21.0]: https://github.com/date-fns/date-fns/compare/v1.20.1...v1.21.0
+[1.20.1]: https://github.com/date-fns/date-fns/compare/v1.20.0...v1.20.1
+[1.20.0]: https://github.com/date-fns/date-fns/compare/v1.19.0...v1.20.0
+[1.19.0]: https://github.com/date-fns/date-fns/compare/v1.18.0...v1.19.0
+[1.18.0]: https://github.com/date-fns/date-fns/compare/v1.17.0...v1.18.0
+[1.17.0]: https://github.com/date-fns/date-fns/compare/v1.16.0...v1.17.0
+[1.16.0]: https://github.com/date-fns/date-fns/compare/v1.15.1...v1.16.0
+[1.15.1]: https://github.com/date-fns/date-fns/compare/v1.15.0...v1.15.1
+[1.15.0]: https://github.com/date-fns/date-fns/compare/v1.14.1...v1.15.0
+[1.14.1]: https://github.com/date-fns/date-fns/compare/v1.14.0...v1.14.1
+[1.14.0]: https://github.com/date-fns/date-fns/compare/v1.13.0...v1.14.0
+[1.13.0]: https://github.com/date-fns/date-fns/compare/v1.12.1...v1.13.0
+[1.12.1]: https://github.com/date-fns/date-fns/compare/v1.12.0...v1.12.1
+[1.12.0]: https://github.com/date-fns/date-fns/compare/v1.11.2...v1.12.0
+[1.11.2]: https://github.com/date-fns/date-fns/compare/v1.11.1...v1.11.2
+[1.11.1]: https://github.com/date-fns/date-fns/compare/v1.11.0...v1.11.1
+[1.11.0]: https://github.com/date-fns/date-fns/compare/v1.10.0...v1.11.0
+[1.10.0]: https://github.com/date-fns/date-fns/compare/v1.9.0...v1.10.0
+[1.9.0]: https://github.com/date-fns/date-fns/compare/v1.8.1...v1.9.0
+[1.8.1]: https://github.com/date-fns/date-fns/compare/v1.8.0...v1.8.1
+[1.8.0]: https://github.com/date-fns/date-fns/compare/v1.7.0...v1.8.0
+[1.7.0]: https://github.com/date-fns/date-fns/compare/v1.6.0...v1.7.0
+[1.6.0]: https://github.com/date-fns/date-fns/compare/v1.5.2...v1.6.0
+[1.5.2]: https://github.com/date-fns/date-fns/compare/v1.5.1...v1.5.2
+[1.5.1]: https://github.com/date-fns/date-fns/compare/v1.5.0...v1.5.1
+[1.5.0]: https://github.com/date-fns/date-fns/compare/v1.4.0...v1.5.0
+[1.4.0]: https://github.com/date-fns/date-fns/compare/v1.3.0...v1.4.0
+[1.3.0]: https://github.com/date-fns/date-fns/compare/v1.2.0...v1.3.0
+[1.2.0]: https://github.com/date-fns/date-fns/compare/v1.1.1...v1.2.0
+[1.1.1]: https://github.com/date-fns/date-fns/compare/v1.1.0...v1.1.1
+[1.1.0]: https://github.com/date-fns/date-fns/compare/v1.0.0...v1.1.0
+[1.0.0]: https://github.com/date-fns/date-fns/compare/v0.17.0...v1.0.0
+[0.17.0]: https://github.com/date-fns/date-fns/compare/v0.16.0...v0.17.0
+[0.16.0]: https://github.com/date-fns/date-fns/compare/v0.15.0...v0.16.0
+[0.15.0]: https://github.com/date-fns/date-fns/compare/v0.14.11...v0.15.0
+[0.14.11]: https://github.com/date-fns/date-fns/compare/v0.14.10...v0.14.11
+[0.14.10]: https://github.com/date-fns/date-fns/compare/v0.14.9...v0.14.10
+[0.14.9]: https://github.com/date-fns/date-fns/compare/v0.14.8...v0.14.9
+[0.14.8]: https://github.com/date-fns/date-fns/compare/v0.14.6...v0.14.8
+[0.14.6]: https://github.com/date-fns/date-fns/compare/v0.14.0...v0.14.6
+[0.14.0]: https://github.com/date-fns/date-fns/compare/v0.13.0...v0.14.0
+[0.13.0]: https://github.com/date-fns/date-fns/compare/v0.12.1...v0.13.0
+[0.12.1]: https://github.com/date-fns/date-fns/compare/v0.12.0...v0.12.1
+[0.12.0]: https://github.com/date-fns/date-fns/compare/v0.11.0...v0.12.0
+[0.11.0]: https://github.com/date-fns/date-fns/compare/v0.10.0...v0.11.0
+[0.10.0]: https://github.com/date-fns/date-fns/compare/v0.9.0...v0.10.0
+[0.9.0]: https://github.com/date-fns/date-fns/compare/v0.8.0...v0.9.0
+[0.8.0]: https://github.com/date-fns/date-fns/compare/v0.7.0...v0.8.0
+[0.7.0]: https://github.com/date-fns/date-fns/compare/v0.6.0...v0.7.0
+[0.6.0]: https://github.com/date-fns/date-fns/compare/v0.5.0...v0.6.0
+[0.5.0]: https://github.com/date-fns/date-fns/compare/v0.4.0...v0.5.0
+[0.4.0]: https://github.com/date-fns/date-fns/compare/v0.3.0...v0.4.0
+[0.3.0]: https://github.com/date-fns/date-fns/compare/v0.2.0...v0.3.0
+[0.2.0]: https://github.com/date-fns/date-fns/compare/v0.1.0...v0.2.0
diff --git a/date-fns/CONTRIBUTING.md b/date-fns/CONTRIBUTING.md
new file mode 100644
index 0000000..a823db7
--- /dev/null
+++ b/date-fns/CONTRIBUTING.md
@@ -0,0 +1,139 @@
+# Contributing Guide
+
+**⚠⚠⚠ Please contribute new code in TypeScript ⚠⚠⚠**
+
+[Read more about migration to TypeScript](https://github.com/date-fns/date-fns/discussions/1932)
+
+## Table of Contents
+
+- [How to Help?](#how-to-help)
+
+- [Contribution Guidelines](#contribution-guidelines)
+
+- [Getting Started](#getting-started)
+
+- [Testing](#testing)
+
+- [Code Style Guide](#code-style-guide)
+
+ - [Lint the Code](#lint-the-code)
+
+ - [Use EditorConfig](#use-editorconfig)
+
+- [Documentation](#documentation)
+
+ - [JSDoc](#jsdoc)
+
+## How to Help?
+
+Help is always welcome. There are areas where you can help:
+
+- The core functionality (performance improvements, bug fixes,
+ new features, etc.).
+
+- Documentation ([markdown documents](https://github.com/date-fns/date-fns/search?l=markdown),
+ inline JSDoc comments).
+
+- Test suite & development environment improvements.
+
+- The [website](https://github.com/date-fns/date-fns.org).
+
+If you see a gap, but don't have time, experience, or you just need help
+with the library, don't hesitate to [start a discussion](https://github.com/date-fns/date-fns/discussions/new) or
+[shoot an issue](https://github.com/date-fns/date-fns/issues/new).
+
+The date-fns functionality is comprehensive and covers most of the use cases,
+however it doesn't have an extended time zone support. Please leave a comment
+to the [Extended time zones support issue](https://github.com/date-fns/date-fns/issues/180)
+if you are interested in the functionality or want to help with development.
+
+If you are interested in Elm/ClojureScript/etc. wrappers,
+please [file an issue](https://github.com/date-fns/date-fns/issues/new).
+
+## Contribution Guidelines
+
+Due to the modular nature of date-fns, it's more than open to new features.
+However, when a new function duplicates the existing functionality, native API
+or causes significant build size increase, a PR might be rejected or
+the author can be asked to move the code to a new or another package.
+
+Please follow the main contributing rules, to maintain date-fns' top quality:
+
+- Follow style guides:
+
+ - [Lint the code](#lint-the-code).
+
+ - [Use EditorConfig](#use-editorconfig).
+
+- Write tests.
+
+- [Write documentation](#documentation).
+
+- Don't update the changelog.
+
+- Don't change the library version.
+
+## Getting Started
+
+1. Install [Node.js](https://nodejs.org/en/download) and [Yarn](https://yarnpkg.com/en/docs/install).
+
+2. Fork the project and clone the fork repo.
+
+3. Run `yarn` to install the application dependencies.
+
+## Testing
+
+Run all tests:
+
+```sh
+yarn test
+```
+
+Run tests once:
+
+```sh
+yarn test --single-run
+```
+
+To test a function in REPL, use `babel-node` located in `./node_modules/.bin` (mind the `-x` flag to support also TypeScript files):
+
+```sh
+./node_modules/.bin/babel-node -x ".js",".ts"
+
+> const toDate = require('./src/toDate')
+undefined
+> toDate(1392098430000).toString()
+'Tue Feb 11 2014 01:00:30 GMT-0500 (Eastern Standard Time)'
+>
+```
+
+Build date-fns to test in in your project:
+
+```sh
+env PACKAGE_OUTPUT_PATH="$(pwd)/../PATH-TO-YOUR-MODULE/node_modules/date-fns" ./scripts/build/package.sh
+```
+
+## Code Style Guide
+
+### Lint the Code
+
+The project follows [Prettier] code style and uses [ESLint] as the linter.
+To lint the code, run:
+
+```bash
+yarn lint
+```
+
+[prettier]: https://prettier.io/
+[eslint]: https://eslint.org/
+
+## Documentation
+
+### JSDoc
+
+[JSDoc](http://usejsdoc.org) is used for the code documentation. Along with the
+standard JSDoc tags, date-fns uses `@category` tag that allows
+to group functions.
+
+[jsdoc-parse](https://github.com/jsdoc2md/jsdoc-parse) is used to parse
+JSDoc annotations.
diff --git a/date-fns/LICENSE.md b/date-fns/LICENSE.md
new file mode 100644
index 0000000..a69dab1
--- /dev/null
+++ b/date-fns/LICENSE.md
@@ -0,0 +1,6 @@
+Copyright (C) 2020 Sasha Koss and Lesha Koss
+
+# License
+
+date-fns is licensed under the [MIT license](http://kossnocorp.mit-license.org).
+Read more about MIT at [TLDRLegal](https://tldrlegal.com/license/mit-license).
diff --git a/date-fns/README.md b/date-fns/README.md
new file mode 100644
index 0000000..8ac6395
--- /dev/null
+++ b/date-fns/README.md
@@ -0,0 +1,69 @@
+<p align="center">
+ <a href="https://date-fns.org/">
+ <img alt="date-fns" title="date-fns" src="https://raw.githubusercontent.com/date-fns/date-fns/master/docs/logotype.svg" width="300" />
+ </a>
+</p>
+
+<p align="center">
+ <b>date-fns</b> provides the most comprehensive, yet simple and consistent toolset
+ <br>
+ for manipulating <b>JavaScript dates</b> in <b>a browser</b> & <b>Node.js</b>.</b>
+</p>
+
+<div align="center">
+
+[📖&nbsp; Documentation](https://date-fns.org/docs/Getting-Started/)&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;[🧑‍💻&nbsp; JavaScript Jobs](https://jobs.date-fns.org/)
+
+</div>
+
+<hr>
+
+# It's like [Lodash](https://lodash.com) for dates
+
+- It has [**200+ functions** for all occasions](https://date-fns.org/docs/Getting-Started/).
+- **Modular**: Pick what you need. Works with webpack, Browserify, or Rollup and also supports tree-shaking.
+- **Native dates**: Uses existing native type. It doesn't extend core objects for safety's sake.
+- **Immutable & Pure**: Built using pure functions and always returns a new date instance.
+- **TypeScript & Flow**: Supports both Flow and TypeScript
+- **I18n**: Dozens of locales. Include only what you need.
+- [and many more benefits](https://date-fns.org/)
+
+```js
+import { compareAsc, format } from 'date-fns'
+
+format(new Date(2014, 1, 11), 'yyyy-MM-dd')
+//=> '2014-02-11'
+
+const dates = [
+ new Date(1995, 6, 2),
+ new Date(1987, 1, 11),
+ new Date(1989, 6, 10),
+]
+dates.sort(compareAsc)
+//=> [
+// Wed Feb 11 1987 00:00:00,
+// Mon Jul 10 1989 00:00:00,
+// Sun Jul 02 1995 00:00:00
+// ]
+```
+
+The library is available as an [npm package](https://www.npmjs.com/package/date-fns).
+To install the package run:
+
+```bash
+npm install date-fns --save
+# or with yarn
+yarn add date-fns
+```
+
+## Docs
+
+[See date-fns.org](https://date-fns.org/) for more details, API,
+and other docs.
+
+<br />
+<!-- END OF README-JOB SECTION -->
+
+## License
+
+[MIT © Sasha Koss](https://kossnocorp.mit-license.org/)
diff --git a/date-fns/benchmark.js b/date-fns/benchmark.js
new file mode 100644
index 0000000..2d65f5d
--- /dev/null
+++ b/date-fns/benchmark.js
@@ -0,0 +1,2 @@
+var testsContext = require.context('./src/', true, /\/benchmark\.js$/)
+testsContext.keys().forEach(testsContext)
diff --git a/date-fns/config/.eslintrc.js b/date-fns/config/.eslintrc.js
new file mode 100644
index 0000000..a40aaa8
--- /dev/null
+++ b/date-fns/config/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+ rules: {
+ 'no-console': 'off'
+ }
+}
diff --git a/date-fns/config/_lib/benchmarkJSONReporter.js b/date-fns/config/_lib/benchmarkJSONReporter.js
new file mode 100644
index 0000000..d435c96
--- /dev/null
+++ b/date-fns/config/_lib/benchmarkJSONReporter.js
@@ -0,0 +1,48 @@
+var fs = require('fs')
+
+var benchmarkResultFilename = './tmp/benchmark.json'
+
+function benchmarkJSONReporter () {
+ var benchmarkResult = {}
+
+ this.onSpecComplete = function (_, result) {
+ var fnName = result.benchmark.suite
+ var libraryName = result.benchmark.name
+ var operationsPerSecond = Math.floor(result.benchmark.hz)
+
+ if (!benchmarkResult[fnName]) {
+ benchmarkResult[fnName] = {}
+ }
+
+ benchmarkResult[fnName][libraryName] = operationsPerSecond
+ }
+
+ this.onRunComplete = function () {
+ var benchmarkResultArray = []
+ for (var fnName in benchmarkResult) {
+ if (benchmarkResult.hasOwnProperty(fnName)) {
+ var element = {fn: fnName}
+
+ if (benchmarkResult[fnName]['date-fns']) {
+ element.dateFns = benchmarkResult[fnName]['date-fns']
+ }
+
+ if (benchmarkResult[fnName]['Moment.js']) {
+ element.moment = benchmarkResult[fnName]['Moment.js']
+ }
+
+ benchmarkResultArray.push(element)
+ }
+ }
+
+ fs.writeFile(benchmarkResultFilename, JSON.stringify(benchmarkResultArray), 'utf-8', function (err) {
+ if (err) {
+ throw err
+ }
+
+ console.log('See results at ' + benchmarkResultFilename)
+ })
+ }
+}
+
+module.exports = benchmarkJSONReporter
diff --git a/date-fns/config/_lib/countReporter.js b/date-fns/config/_lib/countReporter.js
new file mode 100644
index 0000000..e78e238
--- /dev/null
+++ b/date-fns/config/_lib/countReporter.js
@@ -0,0 +1,34 @@
+var fs = require('fs')
+
+var countFilename = './tmp/tests_count.txt'
+
+function countReporter() {
+ this.onRunComplete = function (_, result) {
+ var runCount = result.success
+
+ fs.readFile(
+ countFilename,
+ { encoding: 'utf-8', flag: 'a+' },
+ function (err, data) {
+ if (err) {
+ throw err
+ }
+
+ var totalCount = (parseInt(data, 10) || 0) + runCount
+
+ fs.writeFile(
+ countFilename,
+ totalCount.toString(),
+ 'utf-8',
+ function (err) {
+ if (err) {
+ throw err
+ }
+ }
+ )
+ }
+ )
+ }
+}
+
+module.exports = countReporter
diff --git a/date-fns/config/karma.js b/date-fns/config/karma.js
new file mode 100644
index 0000000..e43fe80
--- /dev/null
+++ b/date-fns/config/karma.js
@@ -0,0 +1,220 @@
+process.env.PHANTOMJS_BIN = 'node_modules/.bin/phantomjs'
+process.env.NODE_ENV = 'test'
+
+const webpackConfig = require('./webpack')
+const countReporter = require('./_lib/countReporter')
+const benchmarkJSONReporter = require('./_lib/benchmarkJSONReporter')
+
+const sauceLabsLaunchers = {
+ // TODO: See if Safari became more reliable
+ safari: {
+ base: 'SauceLabs',
+ platform: 'OS X 10.11',
+ browserName: 'safari',
+ version: '9.0',
+ },
+
+ chrome: {
+ base: 'SauceLabs',
+ platform: 'Windows 8.1',
+ browserName: 'chrome',
+ version: '46.0',
+ },
+
+ firefox: {
+ base: 'SauceLabs',
+ platform: 'Windows 8.1',
+ browserName: 'firefox',
+ version: '41.0',
+ },
+
+ ie8: {
+ base: 'SauceLabs',
+ platform: 'Windows 7',
+ browserName: 'internet explorer',
+ version: '8.0',
+ },
+
+ ie9: {
+ base: 'SauceLabs',
+ platform: 'Windows 7',
+ browserName: 'internet explorer',
+ version: '9.0',
+ },
+
+ ie10: {
+ base: 'SauceLabs',
+ platform: 'Windows 7',
+ browserName: 'internet explorer',
+ version: '10.0',
+ },
+
+ ie11: {
+ base: 'SauceLabs',
+ platform: 'Windows 8.1',
+ browserName: 'internet explorer',
+ version: '11.0',
+ },
+
+ edge: {
+ base: 'SauceLabs',
+ platform: 'Windows 10',
+ browserName: 'microsoftedge',
+ version: '20.10240',
+ },
+
+ // TODO: See if iPhone became more reliable
+ // ios: {
+ // base: 'SauceLabs',
+ // browserName: 'iphone',
+ // platform: 'OS X 10.10',
+ // version: '9.1',
+ // deviceName: 'iPhone 6',
+ // deviceOrientation: 'portrait'
+ // },
+
+ android: {
+ base: 'SauceLabs',
+ browserName: 'android',
+ platform: 'Linux',
+ version: '5.1',
+ deviceName: 'Android Emulator',
+ deviceOrientation: 'portrait',
+ },
+}
+
+const localLaunchers = {
+ LocalChrome: {
+ base: 'Chrome',
+ },
+}
+
+const ciLaunchers = {
+ CIChrome: {
+ base: 'ChromeHeadless',
+ },
+}
+
+function config(config) {
+ config.set({
+ frameworks: getFrameworksConfig(),
+ files: getFilesConfig(),
+ preprocessors: getPreprocessorsConfig(),
+ webpack: webpackConfig,
+ webpackMiddleware: {
+ stats: {
+ assets: false,
+ chunks: false,
+ hash: false,
+ timings: false,
+ version: false,
+ },
+ },
+
+ // We are limited in the number of parallel VMs in SauceLabs (5)
+ // and Karma don't know how to limit parallel browser instances
+ // so waiting time must be insanely high.
+ browserNoActivityTimeout: process.env.TEST_CROSS_BROWSER
+ ? 60 * 60 * 1000 /* 1 hour */
+ : 10 * 1000 /* 10 sec */,
+ captureTimeout: process.env.TEST_CROSS_BROWSER
+ ? 120 * 1000 /* 2 min */
+ : 60 * 1000 /* 1 min */,
+
+ sauceLabs: {
+ startConnect: false,
+ tunnelIdentifier: process.env.GITHUB_RUN_ID,
+ recordScreenshots: false,
+ public: 'public',
+ },
+
+ coveageIstanbulReporter: {
+ reports: ['html', 'lcovonly'],
+ fixWebpackSourcePaths: true,
+ },
+
+ mochaReporter: {
+ output: 'minimal',
+ },
+
+ plugins: (process.env.COVERAGE_REPORT
+ ? ['karma-coverage', 'karma-coverage-istanbul-reporter']
+ : []
+ ).concat([
+ 'karma-mocha',
+ 'karma-mocha-reporter',
+ 'karma-phantomjs-launcher',
+ 'karma-chrome-launcher',
+ // TODO: Make it work
+ // 'karma-sauce-launcher',
+ 'karma-sourcemap-loader',
+ 'karma-webpack',
+ 'karma-benchmark',
+ 'karma-benchmark-reporter',
+ { 'reporter:count': ['type', countReporter] },
+ { 'reporter:benchmark-json': ['type', benchmarkJSONReporter] },
+ ]),
+
+ customLaunchers: process.env.TEST_CROSS_BROWSER
+ ? sauceLabsLaunchers
+ : process.env.CI
+ ? ciLaunchers
+ : localLaunchers,
+ browsers: getBrowsersConfig(),
+ reporters: getReportersConfig(),
+ })
+}
+
+function getFrameworksConfig() {
+ if (process.env.TEST_BENCHMARK) {
+ return ['benchmark']
+ } else {
+ return ['mocha']
+ }
+}
+
+function getFilesConfig() {
+ if (process.env.USE_STATIC_TESTS) {
+ return ['../tmp/tests.js']
+ } else if (process.env.TEST_BENCHMARK) {
+ return ['../node_modules/moment/moment.js', '../benchmark.js']
+ } else {
+ return ['../test.js']
+ }
+}
+
+function getPreprocessorsConfig() {
+ if (process.env.USE_STATIC_TESTS) {
+ return { '../tmp/tests.js': ['sourcemap'] }
+ } else if (process.env.TEST_BENCHMARK) {
+ return { '../benchmark.js': ['webpack', 'sourcemap'] }
+ } else {
+ return { '../test.js': ['webpack', 'sourcemap'] }
+ }
+}
+
+function getBrowsersConfig() {
+ if (process.env.TEST_CROSS_BROWSER) {
+ return Object.keys(sauceLabsLaunchers)
+ } else if (process.env.TEST_BENCHMARK) {
+ return ['PhantomJS']
+ } else if (process.env.CI) {
+ return Object.keys(ciLaunchers)
+ } else {
+ return Object.keys(localLaunchers)
+ }
+}
+
+function getReportersConfig() {
+ if (process.env.TEST_CROSS_BROWSER) {
+ return ['dots', 'saucelabs', 'count']
+ } else if (process.env.TEST_BENCHMARK) {
+ return ['benchmark', 'benchmark-json']
+ } else if (process.env.COVERAGE_REPORT) {
+ return ['coverage-istanbul']
+ } else {
+ return ['mocha', 'count']
+ }
+}
+
+module.exports = config
diff --git a/date-fns/config/webpack.js b/date-fns/config/webpack.js
new file mode 100644
index 0000000..327b587
--- /dev/null
+++ b/date-fns/config/webpack.js
@@ -0,0 +1,79 @@
+const path = require('path')
+const webpack = require('webpack')
+
+const isProduction = process.env.NODE_ENV === 'production'
+
+const config = {
+ mode: isProduction ? 'production' : 'development',
+ devtool: isProduction ? 'source-map' : 'inline-source-map',
+ entry: getEntryConfig(),
+ output: getOutputConfig(),
+ resolve: {
+ extensions: ['.ts', '.js']
+ },
+ module: {
+ rules: [
+ { test: /\.(js|ts)$/, exclude: /node_modules/, use: 'babel-loader' }
+ ].concat(
+ process.env.COVERAGE_REPORT
+ ? [
+ {
+ test: /\.(js|ts)$/,
+ use: {
+ loader: 'istanbul-instrumenter-loader',
+ options: { esModules: true }
+ },
+ enforce: 'post',
+ exclude: /node_modules|test.js|src\/locale$/
+ }
+ ]
+ : []
+ )
+ },
+ plugins: getPlugins()
+}
+
+module.exports = config
+
+function getEntryConfig() {
+ if (process.env.BUILD_TESTS) {
+ return {
+ tests: './testWithoutLocales.js'
+ }
+ } else if (process.env.NODE_ENV === 'test') {
+ return undefined
+ } else {
+ return {
+ date_fns: './tmp/umd/index.js'
+ }
+ }
+}
+
+function getOutputConfig() {
+ if (process.env.BUILD_TESTS) {
+ return {
+ path: path.join(process.cwd(), 'tmp'),
+ filename: '[name].js'
+ }
+ } else if (process.env.NODE_ENV === 'test') {
+ return undefined
+ } else {
+ return {
+ path: path.join(process.cwd(), 'dist'),
+ filename: '[name].js',
+ library: 'dateFns',
+ libraryTarget: 'umd'
+ }
+ }
+}
+
+function getPlugins() {
+ return process.env.NODE_ENV === 'test'
+ ? [
+ new webpack.ContextReplacementPlugin(
+ /power-assert-formatter[\\/]lib/,
+ new RegExp('^\\./.*\\.js$')
+ )
+ ]
+ : undefined
+}
diff --git a/date-fns/docs/.eslintrc.js b/date-fns/docs/.eslintrc.js
new file mode 100644
index 0000000..a40aaa8
--- /dev/null
+++ b/date-fns/docs/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+ rules: {
+ 'no-console': 'off'
+ }
+}
diff --git a/date-fns/docs/Day.js b/date-fns/docs/Day.js
new file mode 100644
index 0000000..42df02d
--- /dev/null
+++ b/date-fns/docs/Day.js
@@ -0,0 +1,15 @@
+/**
+ * @category Types
+ * @summary Day type
+ *
+ * @description
+ * The day of the week type alias (`0 | 1 | 2 | 3 | 4 | 5 | 6`). Unlike the date
+ * (the number of days since the beginningof the month), which starts with 1
+ * and is dynamic (can go up to 28, 30, or 31), the day starts with 0 and static
+ * (always ends at 6). Look at it as an index in an array where Sunday is
+ * the first element, and Saturday is the last.
+ *
+ * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6} Day
+ */
+const Day = 0
+module.exports = Day
diff --git a/date-fns/docs/Duration.js b/date-fns/docs/Duration.js
new file mode 100644
index 0000000..95702b3
--- /dev/null
+++ b/date-fns/docs/Duration.js
@@ -0,0 +1,19 @@
+/**
+ * @category Types
+ * @summary Duration object
+ *
+ * @description
+ * Duration object.
+ *
+ * @typedef {Object} Duration
+ *
+ * @property {number} [years]
+ * @property {number} [months]
+ * @property {number} [weeks]
+ * @property {number} [days]
+ * @property {number} [hours]
+ * @property {number} [minutes]
+ * @property {number} [seconds]
+ */
+const Duration = {}
+module.exports = Duration
diff --git a/date-fns/docs/Interval.js b/date-fns/docs/Interval.js
new file mode 100644
index 0000000..15347b6
--- /dev/null
+++ b/date-fns/docs/Interval.js
@@ -0,0 +1,16 @@
+/**
+ * @category Types
+ * @summary An object that combines two dates to represent the time interval.
+ *
+ * @description
+ * An object that combines two dates to represent the time interval.
+ *
+ * @typedef {Object} Interval
+ * @property {Date|Number} start - the start of the interval
+ * @property {Date|Number} end - the end of the interval
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ */
+var Interval = {}
+
+module.exports = Interval
diff --git a/date-fns/docs/Locale.js b/date-fns/docs/Locale.js
new file mode 100644
index 0000000..fe0de7b
--- /dev/null
+++ b/date-fns/docs/Locale.js
@@ -0,0 +1,64 @@
+/**
+ * @category Types
+ * @summary A locale object.
+ *
+ * @description
+ * A locale object.
+ *
+ * If you don't specify a locale in options, default locale is `en-US`.
+ *
+ * @typedef {Object} Locale
+ *
+ * @property {string} [code] - the locale code (ISO 639-1 + optional country code)
+ * @property {Function} [formatDistance] - the function that takes a token
+ * passed by `formatDistance` or `formatDistanceStrict` and payload,
+ * and returns localized distance in words.
+ * Required by `formatDistance` and `formatDistanceStrict`
+ *
+ * @property {Function} [formatRelative] - the function that takes a token
+ * passed by `formatRelative` and two dates and returns the localized relative date format.
+ * Required by `formatRelative`
+ *
+ * @property {Object} [localize] - the object with functions used to localize various values.
+ * Required by `format` and `formatRelative`
+ * @property {Function} localize.ordinalNumber - the function that localizes an ordinal number
+ * @property {Function} localize.era - the function that takes 0 or 1 and returns localized era
+ * @property {Function} localize.quarter - the function that localizes a quarter
+ * @property {Function} localize.month - the function that localizes a month
+ * @property {Function} localize.day - the function that localizes a day of the week
+ * @property {Function} localize.dayPeriod - the function that takes one of the strings
+ * 'am', 'pm', 'midnight', 'noon', 'morning', 'afternoon', 'evening' or 'night'
+ * and returns localized time of the day
+ *
+ * @property {Object} [formatLong] - the object with functions that return localized formats
+ * @property {Function} formatLong.date - the function that returns a localized long date format
+ * @property {Function} formatLong.time - the function that returns a localized long time format
+ * @property {Function} formatLong.dateTime - the function that returns a localized format of date and time combined
+ *
+ * @property {Object} [match] — the object with functions used to match and parse various localized values.
+ * Required by `parse`
+ * @property {Function} match.ordinalNumber - the function that parses a localized ordinal number
+ * @property {Function} match.era - the function that parses a localized era
+ * @property {Function} match.quarter - the function that parses a localized quarter
+ * @property {Function} match.month - the function that parses a localized month
+ * @property {Function} match.day - the function that parses a localized day of the week
+ * @property {Function} match.dayPeriod - the function that parses a localized time of the day
+ *
+ * @property {Object} [options] - an object with locale options.
+ * @property {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday).
+ * Used by `differenceInCalendarWeeks`, `endOfWeek`, `format`, `getWeek`, `getWeekOfMonth`,
+ * `getWeeksInMonth`, `isSameWeek`, `isSameWeek`, `lastDayOfWeek`, `parse`, `setDay`,
+ * `setWeek`, `startOfWeek` and `startOfWeekYear`
+ * @property {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January,
+ * which is always in the first week of the year.
+ * Used by `format`, `getWeek`, `getWeekYear`, `parse`, `setWeek`, `setWeekYear` and `startOfWeekYear`.
+ *
+ * @throws {RangeError} `locale` must contain `localize` property. Thrown by `format` and `formatRelative`
+ * @throws {RangeError} `locale` must contain `formatLong` property. Thrown by `format` and `formatRelative`
+ * @throws {RangeError} `locale` must contain `formatRelative` property. Thrown by `formatRelative`
+ * @throws {RangeError} `locale` must contain `formatDistance` property. Thrown by `formatDistance` and `formatDistanceStrict`
+ * @throws {RangeError} `locale` must contain `match` property. Thrown by `parse`
+ */
+var Locale = {}
+
+module.exports = Locale
diff --git a/date-fns/docs/constants.md b/date-fns/docs/constants.md
new file mode 100644
index 0000000..b792fd7
--- /dev/null
+++ b/date-fns/docs/constants.md
@@ -0,0 +1,47 @@
+# Constants
+
+date-fns provides with a number of useful constants.
+
+## Usage
+
+The constants could be imported from `date-fns/constants` or directly
+from `date-fns`:
+
+```js
+import { maxTime } from 'date-fns/constants'
+import { minTime } from 'date-fns'
+
+function isAllowedTime(time) {
+ return time <= maxTime && time >= minTime
+}
+```
+
+## Constants
+
+### `maxTime`
+
+Maximum allowed time:
+
+```js
+import { maxTime } from 'date-fns'
+
+const isValid = 8640000000000001 <= maxTime
+//=> false
+
+new Date(8640000000000001)
+//=> Invalid Date
+```
+
+### `minTime`
+
+Minimum allowed time:
+
+```js
+import { minTime } from 'date-fns'
+
+const isValid = -8640000000000001 >= minTime
+//=> false
+
+new Date(-8640000000000001)
+//=> Invalid Date
+```
diff --git a/date-fns/docs/esm.md b/date-fns/docs/esm.md
new file mode 100644
index 0000000..a3fcfa8
--- /dev/null
+++ b/date-fns/docs/esm.md
@@ -0,0 +1,24 @@
+# ECMAScript Modules
+
+**date-fns** v2.x provides support for
+[ECMAScript Modules](http://www.ecma-international.org/ecma-262/6.0/#sec-modules)
+that enables tree-shaking for bundlers, like [rollup.js](http://rollupjs.org)
+and [webpack](https://webpack.js.org).
+
+If you have tree-shaking enabled in your bundler, just import functions normally:
+
+```javascript
+import { format, parse } from 'date-fns'
+import { enUS, eo } from 'date-fns/locale'
+import { addDays, addHours } from 'date-fns/fp'
+```
+
+In TypeScript, now you can import individual functions in more idiomatic way:
+
+```typescript
+// Before
+import * as format from 'date-fns/format'
+
+// Now
+import format from 'date-fns/format'
+```
diff --git a/date-fns/docs/fp.md b/date-fns/docs/fp.md
new file mode 100644
index 0000000..fc7ca56
--- /dev/null
+++ b/date-fns/docs/fp.md
@@ -0,0 +1,70 @@
+# FP Guide
+
+**date-fns** v2.x provides [functional programming](https://en.wikipedia.org/wiki/Functional_programming) (FP)
+friendly functions, like those in [lodash](https://github.com/lodash/lodash/wiki/FP-Guide),
+that support [currying](https://en.wikipedia.org/wiki/Currying).
+
+## Table of Contents
+
+- [Usage](#usage)
+
+- [Using Function Composition](#using-function-composition)
+
+## Usage
+
+FP functions are provided via `'date-fns/fp'` submodule.
+
+Functions with options (`format`, `parse`, etc.) have two FP counterparts:
+one that has the options object as its first argument and one that hasn't.
+The name of the former has `WithOptions` added to the end of its name.
+
+In **date-fns'** FP functions, the order of arguments is reversed.
+
+```javascript
+import { addYears, formatWithOptions } from 'date-fns/fp'
+import { eo } from 'date-fns/locale'
+import toUpper from 'lodash/fp/toUpper' // 'date-fns/fp' is compatible with 'lodash/fp'!
+
+// If FP function has not received enough arguments, it returns another function
+const addFiveYears = addYears(5)
+
+// Several arguments can be curried at once
+const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy')
+
+const dates = [
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(2017, 1 /* Feb */, 11),
+ new Date(2017, 6 /* Jul */, 2)
+]
+
+const formattedDates = dates.map(addFiveYears).map(dateToString).map(toUpper)
+//=> ['1 JANUARO 2022', '11 FEBRUARO 2022', '2 JULIO 2022']
+```
+
+## Using Function Composition
+
+The main advantage of FP functions is support of functional-style
+[function composing](https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba).
+
+In the example above, you can compose `addFiveYears`, `dateToString` and `toUpper` into a single function:
+
+```javascript
+const formattedDates = dates.map((date) => toUpper(dateToString(addFiveYears(date))))
+```
+
+Or you can use `compose` function provided by [lodash](https://lodash.com) to do the same in more idiomatic way:
+
+```javascript
+import compose from 'lodash/fp/compose'
+
+const formattedDates = dates.map(compose(toUpper, dateToString, addFiveYears))
+```
+
+Or if you prefer natural direction of composing (as opposed to the computationally correct order),
+you can use lodash' `flow` instead:
+
+```javascript
+import flow from 'lodash/fp/flow'
+
+const formattedDates = dates.map(flow(addFiveYears, dateToString, toUpper))
+``` \ No newline at end of file
diff --git a/date-fns/docs/gettingStarted.md b/date-fns/docs/gettingStarted.md
new file mode 100644
index 0000000..51249b8
--- /dev/null
+++ b/date-fns/docs/gettingStarted.md
@@ -0,0 +1,87 @@
+# Getting Started
+
+## Table of Contents
+
+- [Introduction](#introduction)
+
+- [Submodules](#submodules)
+
+- [Installation](#installation)
+
+## Introduction
+
+**date-fns** provides the most comprehensive, yet simple and consistent toolset
+for manipulating **JavaScript dates** in **a browser** & **Node.js**.
+
+**date-fns** is like [lodash](https://lodash.com) for dates. It has
+[**140+ functions** for all occasions](https://date-fns.org/docs/).
+
+```js
+import { format, compareAsc } from 'date-fns'
+
+format(new Date(2014, 1, 11), 'MM/dd/yyyy')
+//=> '02/11/2014'
+
+const dates = [
+ new Date(1995, 6, 2),
+ new Date(1987, 1, 11),
+ new Date(1989, 6, 10),
+]
+dates.sort(compareAsc)
+//=> [
+// Wed Feb 11 1987 00:00:00,
+// Mon Jul 10 1989 00:00:00,
+// Sun Jul 02 1995 00:00:00
+// ]
+```
+
+## Submodules
+
+**date-fns** includes some optional features as submodules in the npm package.
+Here is the list of them, in order of nesting:
+
+- FP — functional programming-friendly variations of the functions. See [FP Guide](https://date-fns.org/docs/FP-Guide);
+
+- UTC (in development) — variations of the functions which calculate dates in UTC±00:00 timezone.
+
+The later submodules are also included inside the former if you want to use multiple features from the list.
+
+To use submodule features, [install the npm package](#npm) and then import a function from a submodule:
+
+```js
+// The main submodule:
+import addDays from 'date-fns/addDays'
+
+// FP variation:
+import addDays from 'date-fns/fp/addDays'
+
+// UTC variation:
+import addDays from 'date-fns/utc/addDays'
+
+// Both FP and UTC:
+import addDays from 'date-fns/fp/utc/addDays'
+
+// With tree-shaking enabled:
+import { addDays, format } from 'date-fns/fp'
+```
+
+## Installation
+
+The library is available as an [npm package](https://www.npmjs.com/package/date-fns).
+
+To install the package, run:
+
+```bash
+npm install date-fns --save
+# or
+yarn add date-fns
+```
+
+Start using:
+
+```js
+import { formatDistance, subDays } from 'date-fns'
+
+formatDistance(subDays(new Date(), 3), new Date(), { addSuffix: true })
+//=> "3 days ago"
+```
diff --git a/date-fns/docs/i18n.md b/date-fns/docs/i18n.md
new file mode 100644
index 0000000..4986e62
--- /dev/null
+++ b/date-fns/docs/i18n.md
@@ -0,0 +1,92 @@
+# Internationalization
+
+## Table of Contents
+
+- [Usage](#usage)
+
+- [Adding New Language](#adding-new-language)
+
+## Usage
+
+There are just a few functions that support I18n:
+
+- [`format`](https://date-fns.org/docs/format)
+- [`formatDistance`](https://date-fns.org/docs/formatDistance)
+- [`formatDistanceStrict`](https://date-fns.org/docs/formatDistanceStrict)
+- [`formatRelative`](https://date-fns.org/docs/formatRelative)
+
+To use a locale, you need to require it and then pass
+as an option to a function:
+
+```js
+import { formatDistance } from 'date-fns'
+// Require Esperanto locale
+import { eo } from 'date-fns/locale'
+
+const result = formatDistance(
+ new Date(2016, 7, 1),
+ new Date(2015, 0, 1),
+ {locale: eo} // Pass the locale as an option
+)
+//=> 'pli ol 1 jaro'
+```
+
+It might seem complicated to require and pass locales as options,
+but unlike Moment.js which bloats your build with all the locales
+by default date-fns forces developer to manually require locales when needed.
+To make API simple, we encourage you to write tiny wrappers and use those
+instead of original functions:
+
+```js
+// app/_lib/format.js
+
+import { format } from 'date-fns'
+import { enGB, eo, ru } from 'date-fns/locale'
+
+const locales = {enGB, eo, ru}
+
+// by providing a default string of 'PP' or any of its variants for `formatStr`
+// it will format dates in whichever way is appropriate to the locale
+export default function (date, formatStr = 'PP') {
+ return format(date, formatStr, {
+ locale: locales[window.__localeId__] // or global.__localeId__
+ })
+}
+
+// Later:
+
+import format from 'app/_lib/format'
+
+window.__localeId__ = 'enGB'
+format(friday13, 'EEEE d')
+//=> 'Friday 13'
+
+window.__localeId__ = 'eo'
+format(friday13, 'EEEE d')
+//=> 'vendredo 13'
+
+// If the format string is omitted, it will take the default for the locale.
+window.__localeId__ = 'enGB'
+format(friday13)
+//=> Jul 13, 2019
+
+window.__localeId__ = 'eo'
+format(friday13)
+//=> 2019-jul-13
+
+```
+
+## Adding New Language
+
+At the moment there is no definitive guide, so if you feel brave enough,
+use this quick guide:
+
+- First of all, [create an issue](https://github.com/date-fns/date-fns/issues/new?title=XXX%20language%20support)
+ so you won't overlap with others.
+- A detailed explanation of how to [add a new locale](https://github.com/date-fns/date-fns/blob/master/docs/i18nContributionGuide.md#adding-a-new-locale).
+- Use [English locale](https://github.com/date-fns/date-fns/tree/master/src/locale/en-US)
+ as the basis and then incrementally adjust the tests and the code.
+- Directions on [adding a locale with the same language as another locale](https://github.com/date-fns/date-fns/blob/master/docs/i18nContributionGuide.md#creating-a-locale-with-the-same-language-as-another-locale).
+- If you have questions or need guidance, leave a comment in the issue.
+
+Thank you for your support!
diff --git a/date-fns/docs/i18nContributionGuide.md b/date-fns/docs/i18nContributionGuide.md
new file mode 100644
index 0000000..3f4ef8e
--- /dev/null
+++ b/date-fns/docs/i18nContributionGuide.md
@@ -0,0 +1,921 @@
+# I18n Contribution Guide
+
+## Table of Contents
+
+- [Adding a new locale](#adding-a-new-locale)
+
+ - [Choosing a directory name for a locale](#choosing-a-directory-name-for-a-locale)
+
+ - [index.js](#index.js)
+
+ - [localize](#localize)
+
+ - [localize.ordinalNumber](#localize.ordinalnumber)
+
+ - [localize.era and using buildLocalizeFn function](#localize.era-and-using-buildlocalizefn-function)
+
+ - [Formatting localizers](#formatting-localizers)
+
+ - [localize.quarter](#localize.quarter)
+
+ - [localize.month](#localize.month)
+
+ - [localize.day](#localize.day)
+
+ - [localize.dayPeriod](#localize.dayperiod)
+
+ - [formatLong](#formatlong)
+
+ - [formatLong.dateFormats](#formatlong.dateformats)
+
+ - [formatLong.timeFormats](#formatlong.timeformats)
+
+ - [formatLong.dateTimeFormats](#formatlong.datetimeformats)
+
+ - [formatRelative](#formatrelative)
+
+ - [match](#match)
+
+ - [formatDistance](#formatdistance)
+
+ - [Tests](#tests)
+
+- [Creating a locale with the same language as another locale](#creating-a-locale-with-the-same-language-as-another-locale)
+
+## Adding a new locale
+
+To add a new locale:
+
+- [Choose a directory name for it](#choosing-a-directory-name-for-a-locale).
+
+- Copy the content of an existing locale (e.g. `en-US`) into the newly created directory.
+
+- Replace the values in the content with yours file-by-file.
+ Use [CLDR data](https://www.unicode.org/cldr/charts/32/summary/root.html)
+ as a point of reference which values to choose.
+
+All locales contain a number of properties:
+
+- [`formatDistance`](#formatdistance) — distance localizer function used by `formatDistance` and `formatDistanceStrict`.
+- [`formatLong`](#formatlong) — contains long date localizer functions used by `format` and `formatRelative`.
+- [`formatRelative`](#formatrelative) — relative date localizer function used by `formatRelative`.
+- [`localize`](#localize) — contains functions, which localize the various date values. Required by `format` and `formatRelative`.
+- [`match`](#match) — contains functions to parse date values. Required by `parse`.
+- [`options`](#indexjs) — contains the index of the first day of the week for functions such as `startOfWeek`,
+ and the value which determines the first week of the year
+ for functions like `setWeek`.
+
+### Choosing a directory name for a locale
+
+Use the four letter code for the directory name (e.g. `en-GB`),
+
+Use the two/three letter code:
+
+- if the language code and the country code are the same (e.g. `pt` instead of `pt-PT`).
+
+- if the language is used in only one country (e.g. `fil` instead of `fil-PH`).
+
+- if all countries who use the language
+also use the same regional standards: the first day of the week,
+the week numbering (see: https://en.wikipedia.org/wiki/Week#Week_numbering),
+calendar date format (see: https://en.wikipedia.org/wiki/Calendar_date)
+and date representation (see: https://en.wikipedia.org/wiki/Date_and_time_representation_by_country
+and: https://en.wikipedia.org/wiki/Date_format_by_country)
+(e.g. `ca` instead of `ca-ES` and `ca-AD`).
+
+### index.js
+
+Locale's `index.js` is where all the properties of the locale are combined in a single file,
+documented in JSDoc format.
+
+```javascript
+import formatDistance from './_lib/formatDistance/index.js'
+import formatLong from './_lib/formatLong/index.js'
+import formatRelative from './_lib/formatRelative/index.js'
+import localize from './_lib/localize/index.js'
+import match from './_lib/match/index.js'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ *
+ * // Name of the locale.
+ * // Inside the parentheses - name of the country - if the locale uses the four letter code, e.g. en-US, fr-CA or pt-BR.
+ * @summary English locale (United States).
+ *
+ * // Name of the language (used by https://date-fns.org/ website)
+ * @language English
+ *
+ * // ISO 639-2 code. See the list here:
+ * // https://www.loc.gov/standards/iso639-2/php/code_list.php
+ * // Used by https://date-fns.org/ to detect the list of the countries that uses the language.
+ * @iso-639-2 eng
+ *
+ * // Authors of the locale (including anyone who corrected or fixed the locale)
+ * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}
+ * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}
+ */
+var locale = {
+ code: 'en',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ // Index of the first day of the week.
+ // Sunday is 0, Monday is 1, Saturday is 6.
+ weekStartsOn: 0,
+
+ // Nth of January which is always in the first week of the year. See:
+ // https://en.wikipedia.org/wiki/Week#Week_numbering
+ // http://www.pjh2.de/datetime/weeknumber/wnd.php?l=en
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
+```
+
+### localize
+
+Put this object in `_lib/localize/index.js` inside your locale directory.
+Contains a number of functions for used by `format`:
+
+```js
+var localize = {
+ ordinalNumber,
+ era,
+ quarter,
+ month,
+ day,
+ dayPeriod
+}
+
+export default localize
+```
+
+#### localize.ordinalNumber
+
+Function that takes a numeric argument and returns a string with ordinal number:
+
+```js
+// In `en-US` locale:
+function ordinalNumber (dirtyNumber, dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ var rem100 = number % 100
+ if (rem100 > 20 || rem100 < 10) {
+ switch (rem100 % 10) {
+ case 1:
+ return number + 'st'
+ case 2:
+ return number + 'nd'
+ case 3:
+ return number + 'rd'
+ }
+ }
+ return number + 'th'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+ // ...
+}
+```
+
+If the form of the ordinal number depends on the grammatical case (or other grammatical structures),
+use `options.unit` argument which could be one of the values 'year', 'quarter', 'month', 'week',
+'date', 'dayOfYear', 'day', 'hour', 'minute' or 'second':
+
+```js
+// In `ru` locale:
+function ordinalNumber (dirtyNumber, dirtyOptions) {
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var suffix
+
+ if (unit === 'date') {
+ suffix = '-е'
+ } else if (unit === 'week' || unit === 'minute' || unit === 'second') {
+ suffix = '-я'
+ } else {
+ suffix = '-й'
+ }
+
+ return dirtyNumber + suffix
+}
+```
+
+#### localize.era and using buildLocalizeFn function
+
+Localizes a numeric era. Takes either 0 or 1 as the first argument.
+As with many of the `localize` functions, they can be generated by built-in
+`buildLocalizeFn` function.
+
+From CLDR chart, use ['Date & Time'/'Gregorian'/'Eras'](https://www.unicode.org/cldr/charts/32/summary/en.html#1771) values.
+
+```js
+// In `en-US` locale:
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
+
+var eraValues = {
+ narrow: ['B', 'A'],
+ abbreviated: ['BC', 'AD'],
+ wide: ['Before Christ', 'Anno Domini']
+}
+
+var localize = {
+ // ...
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+ // ...
+}
+
+export default localize
+```
+
+General usage of the function:
+
+```js
+var result = locale.localize.era(1, {width: 'abbreviated'})
+//=> 'AD'
+```
+
+If `width` is not provided or the `values` object does not contain values for the provided width,
+`defaultWidth` will be used. `defaultWidth` should indicate the longest form of the localized value.
+The same is true for all other `localize` functions.
+`width` for `localize.era` function could be either 'narrow', 'abbreviated' or 'wide'.
+
+```js
+var result = locale.localize.era(1, {width: 'foobar'})
+//=> 'Anno Domini'
+```
+
+#### Formatting localizers
+
+For some languages, there is a difference for "stand-alone" localizers and "formatting" localizers.
+"Stand-alone" means that the resulting value should make grammatical sense without context.
+"Formatting" means that the resulting value should be declined using the grammar rules of the language
+as if the value was a part of a date.
+For example, for languages with grammatical cases, stand-alone month could be in the nominative case ("January"),
+and formatting month could decline as a part of phrase "1st of January".
+In this case, use parameters `formattingValues` and `defaultFormattingWidth` of `buildLocalizeFn` function.
+
+Any localizer could be stand-alone and formatting.
+Check the CLDR chart for the unit to see if stand-alone and formatting values are different for a certain unit.
+If there's no difference (usually it happens in languages without grammatical cases),
+parameters `formattingValues` and `defaultFormattingWidth` are not needed.
+
+In this example, in Russian language a stand-alone month is in the nominative case ("январь"),
+and formatting month is in the genitive case ("января" as in "1-е января"). Notice the different endings:
+
+```js
+// In `ru` locale:
+var monthValues = {
+ narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'],
+ abbreviated: ['янв.', 'фев.', 'март', 'апр.', 'май', 'июнь', 'июль', 'авг.', 'сент.', 'окт.', 'нояб.', 'дек.'],
+ wide: ['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь']
+}
+var formattingMonthValues = {
+ narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'],
+ abbreviated: ['янв.', 'фев.', 'мар.', 'апр.', 'мая', 'июн.', 'июл.', 'авг.', 'сент.', 'окт.', 'нояб.', 'дек.'],
+ wide: ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря']
+}
+
+var localize = {
+ // ...
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+ // ...
+}
+
+export default localize
+```
+
+#### localize.quarter
+
+Localizes a quarter. Takes 1, 2, 3 or 4 as the first argument.
+`width` could be either 'narrow', 'abbreviated' or 'wide'.
+From CLDR chart, use ['Date & Time'/'Gregorian'/'Quarters'](https://www.unicode.org/cldr/charts/32/summary/en.html#1781) values.
+
+```js
+// In `en-US` locale:
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']
+}
+
+var localize = {
+ // ...
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function (quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+ // ...
+}
+
+export default localize
+```
+
+Note the usage of `argumentCallback` here. It converts the value passed into `localize.quarter` function
+(one of 1, 2, 3 or 4) into the index of the values array inside `quarterValues` (one of 0, 1, 2 or 3).
+
+#### localize.month
+
+Localizes a month. Takes numbers between 0 (for January) and 11 (for December).
+`width` could be either 'narrow', 'abbreviated' or 'wide'.
+From CLDR chart, use ['Date & Time'/'Gregorian'/'Months'](https://www.unicode.org/cldr/charts/32/summary/en.html#1793) values.
+
+```js
+// In `en-US` locale:
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
+}
+
+var localize = {
+ // ...
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+ // ...
+}
+
+export default localize
+```
+
+**NOTE**: in English, the names of days of the week and months are capitalized.
+Check if the same is true for the language you're working on.
+Generally, formatted dates should look like they are in the middle of a sentence,
+e.g. in Spanish language the weekdays and months should be in the lowercase:
+
+```js
+// In `es` locale:
+var monthValues = {
+ narrow: ['E', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: ['ene.', 'feb.', 'mar.', 'abr.', 'may.', 'jun.', 'jul.', 'ago.', 'sep.', 'oct.', 'nov.', 'dic.'],
+ wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
+}
+```
+
+`monthValues.narrow` are usually capitalized in every language. Check the CLDR chart for your language.
+
+#### localize.day
+
+Localizes a week day. Takes numbers between 0 (for Sunday) and 6 (for Saturday).
+`width` could be either 'narrow', 'short', 'abbreviated' or 'wide'.
+From CLDR chart, use ['Date & Time'/'Gregorian'/'Days'](https://www.unicode.org/cldr/charts/32/summary/en.html#1829) values.
+
+```js
+// In `en-US` locale:
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
+
+var dayValues = {
+ narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
+ short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+ abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
+}
+
+var localize = {
+ // ...
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+ // ...
+}
+
+export default localize
+```
+
+**NOTE**: the rules of capitalization from `localize.month` are also true for `localize.day`.
+
+#### localize.dayPeriod
+
+Localizes a certain day period.
+Could take of these strings as the argument: 'am', 'pm', 'midnight', 'noon', 'morning', 'afternoon', 'evening', 'night'.
+`width` could be either 'narrow', 'abbreviated' or 'wide'.
+From CLDR chart, use ['Date & Time'/'Gregorian'/'Day periods'](https://www.unicode.org/cldr/charts/32/summary/en.html#1857) values.
+
+```js
+// In `en-US` locale:
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mi',
+ noon: 'n',
+ morning: 'in the morning',
+ afternoon: 'in the afternoon',
+ evening: 'in the evening',
+ night: 'at night'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'in the morning',
+ afternoon: 'in the afternoon',
+ evening: 'in the evening',
+ night: 'at night'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'in the morning',
+ afternoon: 'in the afternoon',
+ evening: 'in the evening',
+ night: 'at night'
+ }
+}
+
+var localize = {
+ // ...
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
+```
+
+### formatLong
+
+Put this object in `_lib/formatLong/index.js` inside your locale directory.
+Locale date formats written in `format` token string format.
+See the list of tokens: https://date-fns.org/docs/format
+Use https://en.wikipedia.org/wiki/Date_format_by_country and CLDR chart as the reference.
+
+#### formatLong.dateFormats
+
+Use ['Date & Time'/'Gregorian'/'Formats - Standard - Date Formats'](https://www.unicode.org/cldr/charts/32/summary/en.html#1901) values
+from the CLDR chart as a reference.
+
+```js
+// In `en-US` locale
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'MM/dd/yyyy'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+ // ...
+}
+
+export default formatLong
+```
+
+`dateFormats.long` usually contains the longest form of writing the year, the month, and the day of the month.
+Use ordinal day of the month ('do' token) where applicable (date-fns, unlike CLDR supports ordinal numbers).
+
+`dateFormats.full` contains the same but with the day of the week.
+
+`dateFormats.medium` contains the same values as `dateFormats.long`, but with short form of month and non-ordinal day.
+
+`dateFormats.short` usually contains strictly numerical form of the date.
+Pay attention to the order of units (big-, little- or middle-endian)
+
+#### formatLong.timeFormats
+
+Use ['Date & Time'/'Gregorian'/'Formats - Standard - Time Formats'](https://www.unicode.org/cldr/charts/32/summary/en.html#1906) values
+from the CLDR chart as a reference.
+
+Use some variation of 'h:mm aa' for 12-hour clock locales or 'H:mm' for 24-hour clock locales. Use the local time separator.
+
+```js
+// In `en-US` locale
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var formatLong = {
+ // ...
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+ // ...
+}
+
+export default formatLong
+```
+
+#### formatLong.dateTimeFormats
+
+Use
+['Date & Time'/'Gregorian'/'Formats - Standard - Date & Time Combination Formats'](https://www.unicode.org/cldr/charts/32/summary/en.html#1910)
+values from the CLDR chart.
+
+```js
+// In `en-US` locale
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'
+
+var dateTimeFormats = {
+ full: "{{date}} 'at' {{time}}",
+ long: "{{date}} 'at' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ // ...
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
+```
+
+'{{date}}' and '{{time}}' from the strings will be replaced with the date and time respectively.
+
+### formatRelative
+
+Put this function in `_lib/formatRelative/index.js` inside your locale directory.
+Relative date formats written in `format` token string format.
+See the list of tokens: https://date-fns.org/docs/format.
+Has to process `lastWeek`, `yesterday`, `today`, `tomorrow`, `nextWeek` and `other` tokens.
+
+```javascript
+// In `en-US` locale
+var formatRelativeLocale = {
+ lastWeek: "'last' eeee 'at' p",
+ yesterday: "'yesterday at' p",
+ today: "'today at' p",
+ tomorrow: "'tomorrow at' p",
+ nextWeek: "eeee 'at' p",
+ other: 'P'
+}
+
+export default function formatRelative (token, date, baseDate, options) {
+ return formatRelativeLocale[token]
+}
+```
+
+You can use `date` and `baseDate` supplied to the function for the difficult situations
+(e.g. grammatical genders and cases of the days of the week)
+Both `date` and `baseDate` are converted to UTC timezone, which means
+that you should use UTC methods to take the date values (i.e. `date.getUTCDay()` instead of `date.getDay()`).
+You can use UTC functions from `src/_lib` in date-fns root directory if they are available.
+Don't forget to pass `options` object to them!
+Example is below. Note the different grammatical case for weekdays (accusative instead of nominative)
+and declension of word "прошлый" which depends on the grammatical gender of the weekday:
+
+```javascript
+// In `ru` locale
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index.js'
+
+var accusativeWeekdays = ['воскресенье', 'понедельник', 'вторник', 'среду', 'четверг', 'пятницу', 'субботу']
+
+function lastWeek (day) {
+ var weekday = accusativeWeekdays[day]
+
+ switch (day) {
+ case 0:
+ return "'в прошлое " + weekday + " в' p"
+ case 1:
+ case 2:
+ case 4:
+ return "'в прошлый " + weekday + " в' p"
+ case 3:
+ case 5:
+ case 6:
+ return "'в прошлую " + weekday + " в' p"
+ }
+}
+
+function thisWeek (day) {
+ // ...
+}
+
+function nextWeek (day) {
+ // ...
+}
+
+var formatRelativeLocale = {
+ lastWeek: function (date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return lastWeek(day)
+ }
+ },
+ yesterday: "'вчера в' p",
+ today: "'сегодня в' p",
+ tomorrow: "'завтра в' p",
+ nextWeek: function (date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return nextWeek(day)
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative (token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
+```
+
+### match
+
+Put this object in `_lib/match/index.js` inside your locale directory.
+Contains the functions used by `parse` to parse a localized value:
+
+```js
+// In `en-US` locale:
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index.js'
+import buildMatchFn from '../../../_lib/buildMatchFn/index.js'
+
+var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(b|a)/i,
+ abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
+ wide: /^(before christ|before common era|anno domini|common era)/i
+}
+var parseEraPatterns = {
+ any: [/^b/i, /^(a|c)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](th|st|nd|rd)? quarter/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
+ wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
+}
+var parseMonthPatterns = {
+ narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],
+ any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smtwf]/i,
+ short: /^(su|mo|tu|we|th|fr|sa)/i,
+ abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
+ wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
+}
+var parseDayPatterns = {
+ narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
+ any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
+ any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mi/i,
+ noon: /^no/i,
+ morning: /morning/i,
+ afternoon: /afternoon/i,
+ evening: /evening/i,
+ night: /night/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function (value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function (index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
+```
+
+These functions mirror those in `localize`.
+
+For `matchPatterns` the patterns should match the whole meaningful word for the parsed value
+(which will be cut from the string in the process of parsing).
+`parsePatterns` contains patterns to detect one of the values from the result of `matchPatterns`
+Note that the patterns for `parsePatterns` don't necessary contain the whole word:
+
+```javascript
+// In `en-US` locale:
+var parseDayPatterns = {
+ narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
+ any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
+}
+```
+
+but only the bare minimum to parse the value.
+
+Also note that all patterns have "case-insensitive" flags
+to match as much arbitrary user input as possible. For the same reason, try to match
+any variation of diacritical marks:
+
+```javascript
+// In `eo` locale:
+var matchDayPatterns = {
+ narrow: /^[dlmĵjvs]/i,
+ short: /^(di|lu|ma|me|(ĵ|jx|jh|j)a|ve|sa)/i,
+ abbreviated: /^(dim|lun|mar|mer|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)|ven|sab)/i,
+ wide: /^(diman(ĉ|cx|ch|c)o|lundo|mardo|merkredo|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)do|vendredo|sabato)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^(j|ĵ)/i, /^v/i, /^s/i],
+ any: [/^d/i, /^l/i, /^ma/i, /^me/i, /^(j|ĵ)/i, /^v/i, /^s/i]
+}
+```
+
+Here, for the word "dimanĉo" the functions will match also "dimancxo", "dimancho"
+and even grammatically incorrect "dimanco".
+
+Try to match any possible way of writing the word. Don't forget the grammatical cases:
+
+```javascript
+// In `ru` locale:
+var matchMonthPatterns = {
+ narrow: /^[яфмаисонд]/i,
+ abbreviated: /^(янв|фев|март?|апр|ма[йя]|июн[ья]?|июл[ья]?|авг|сент?|окт|нояб?|дек)/i,
+ wide: /^(январ[ья]|феврал[ья]|марта?|апрел[ья]|ма[йя]|июн[ья]|июл[ья]|августа?|сентябр[ья]|октябр[ья]|октябр[ья]|ноябр[ья]|декабр[ья])/i
+}
+```
+
+and variations of short weekdays and months:
+
+```javascript
+// In `ru` locale:
+var matchDayPatterns = {
+ narrow: /^[впсч]/i,
+ short: /^(вс|во|пн|по|вт|ср|чт|че|пт|пя|сб|су)\.?/i,
+ abbreviated: /^(вск|вос|пнд|пон|втр|вто|срд|сре|чтв|чет|птн|пят|суб).?/i,
+ wide: /^(воскресень[ея]|понедельника?|вторника?|сред[аы]|четверга?|пятниц[аы]|суббот[аы])/i
+}
+```
+
+(here, the `abbreviated` pattern will match both `вск` and `вос` as the short of `воскресенье` {Sunday})
+
+In `match.ordinalNumber` match ordinal numbers as well as non-ordinal numbers:
+
+```javascript
+// In `en-US` locale:
+var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
+```
+
+Don't forget the grammatical genders:
+
+```javascript
+// In `ru` locale:
+var matchOrdinalNumberPattern = /^(\d+)(-?(е|я|й|ое|ье|ая|ья|ый|ой|ий|ый))?/i
+```
+
+### formatDistance
+
+`formatDistance` property of locale is a function which takes three arguments:
+token passed by date-fns' `formatDistance` function (e.g. 'lessThanXMinutes'),
+a number of units to be displayed by the function
+(e.g. `locale.formatDistance('lessThanXMinutes', 5)` would display localized 'less than 5 minutes')
+and object with options.
+
+Your best guess is to copy `formatDistance` property from another locale and change the values.
+
+### Tests
+
+To test locales we use snapshots. See [`en-US` snapshot](https://github.com/date-fns/date-fns/blob/master/src/locale/en-US/snapshot.md) for an example.
+
+To generate snapshots, run `yarn locale-snapshots`. The snapshot for the locale
+you're working on will appear in the root locale directory (e.g. `src/locales/ru/snapshot.md`).
+
+Once you are done with the locale, generate the snapshot and review the output values.
+
+## Creating a locale with the same language as another locale
+
+Import the locale properties already implemented for the language,
+but replace unique properties.
+
+```javascript
+// Same as en-US
+import formatDistance from '../en-US/_lib/formatDistance/index.js'
+import formatRelative from '../en-US/_lib/formatRelative/index.js'
+import localize from '../en-US/_lib/localize/index.js'
+import match from '../en-US/_lib/match/index.js'
+
+// Unique for en-GB
+import formatLong from './_lib/formatLong/index.js'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary English locale (United Kingdom).
+ * @language English
+ * @iso-639-2 eng
+ * @author John Doe [@example]{@link https://github.com/example}
+ */
+var locale = {
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+
+ // Unique for en-GB
+ options: {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
+```
diff --git a/date-fns/docs/index.js b/date-fns/docs/index.js
new file mode 100644
index 0000000..bd8ee26
--- /dev/null
+++ b/date-fns/docs/index.js
@@ -0,0 +1,147 @@
+const path = require('path')
+
+module.exports = {
+ groups: [
+ 'General',
+ 'Types',
+ 'Common Helpers',
+ 'Conversion Helpers',
+ 'Interval Helpers',
+ 'Timestamp Helpers',
+ 'Millisecond Helpers',
+ 'Second Helpers',
+ 'Minute Helpers',
+ 'Hour Helpers',
+ 'Day Helpers',
+ 'Weekday Helpers',
+ 'Week Helpers',
+ 'ISO Week Helpers',
+ 'Month Helpers',
+ 'Quarter Helpers',
+ 'Year Helpers',
+ 'ISO Week-Numbering Year Helpers',
+ 'Decade Helpers',
+ ],
+
+ staticDocs: [
+ {
+ type: 'markdown',
+ urlId: 'Getting-Started',
+ category: 'General',
+ title: 'Getting Started',
+ description: 'Introduction & installation instructions',
+ path: path.join(__dirname, 'gettingStarted.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'Change-Log',
+ category: 'General',
+ title: 'Change Log',
+ description: 'Changes for each version of the library',
+ path: path.join(__dirname, '..', 'CHANGELOG.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'Contributing',
+ category: 'General',
+ title: 'Contributing',
+ description: 'Contribution manual',
+ path: path.join(__dirname, '..', 'CONTRIBUTING.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'Constants',
+ category: 'General',
+ title: 'Constants',
+ description: 'Useful constants',
+ path: path.join(__dirname, 'constants.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'I18n',
+ category: 'General',
+ title: 'I18n',
+ description: 'Internationalization',
+ path: path.join(__dirname, 'i18n.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'I18n-Contribution-Guide',
+ category: 'General',
+ title: 'I18n Contribution Guide',
+ description: 'Locales manual',
+ path: path.join(__dirname, 'i18nContributionGuide.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'Time-Zones',
+ category: 'General',
+ title: 'Time Zones',
+ description: 'Time zone functions',
+ path: path.join(__dirname, 'timeZones.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'ECMAScript-Modules',
+ category: 'General',
+ title: 'ECMAScript Modules',
+ description: 'Tree-shaking guide',
+ path: path.join(__dirname, 'esm.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'webpack',
+ category: 'General',
+ title: 'webpack',
+ description: 'Using date-fns with webpack',
+ path: path.join(__dirname, 'webpack.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'FP-Guide',
+ category: 'General',
+ title: 'FP Guide',
+ description: 'Curried functions',
+ path: path.join(__dirname, 'fp.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'Unicode-Tokens',
+ category: 'General',
+ title: 'Unicode Tokens',
+ description: 'Usage of the Unicode tokens in parse and format',
+ path: path.join(__dirname, 'unicodeTokens.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'Upgrade-Guide',
+ category: 'General',
+ title: 'Upgrade guide',
+ description: 'Changes from v1 to v2',
+ path: path.join(__dirname, 'upgradeGuide.md'),
+ },
+ {
+ type: 'markdown',
+ urlId: 'License',
+ category: 'General',
+ title: 'License',
+ description: 'MIT © Sasha Koss',
+ path: path.join(__dirname, '..', 'LICENSE.md'),
+ },
+ ],
+
+ sharedDocs: [
+ {
+ fullPath: path.join(__dirname, 'Interval.js'),
+ },
+ {
+ fullPath: path.join(__dirname, 'Locale.js'),
+ },
+ {
+ fullPath: path.join(__dirname, 'Duration.js'),
+ },
+ {
+ fullPath: path.join(__dirname, 'Day.js'),
+ },
+ ],
+}
diff --git a/date-fns/docs/logo.svg b/date-fns/docs/logo.svg
new file mode 100644
index 0000000..212e227
--- /dev/null
+++ b/date-fns/docs/logo.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg width="32px" height="26px" viewBox="0 0 32 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 3.7.1 (28215) - http://www.bohemiancoding.com/sketch -->
+ <title>Slice 1</title>
+ <desc>Created with Sketch.</desc>
+ <defs></defs>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="date-fns-mini-logo" fill="#770C56">
+ <g id="Page-1">
+ <g id="logo">
+ <g id="Page-1">
+ <g id="Solid-logo">
+ <g id="White-logo">
+ <path d="M0.0773377951,12.9617647 C0.0773377951,10.4657522 0.541359926,8.11201106 1.46941811,5.90047059 C2.39747629,3.68893013 3.73386003,1.72977324 5.47860941,0.0229411764 L8.98665179,0.0229411764 C5.34866372,3.58342956 3.52969697,7.89632761 3.52969697,12.9617647 C3.52969697,18.0272018 5.34866372,22.3400999 8.98665179,25.9005883 L5.47860941,25.9005883 C3.73386003,24.1937561 2.39747629,22.2345993 1.46941811,20.0230588 C0.541359926,17.8115184 0.0773377951,15.4577772 0.0773377951,12.9617647 L0.0773377951,12.9617647 L0.0773377951,12.9617647 L0.0773377951,12.9617647 Z M31.4378137,12.9617647 C31.4378137,15.4577772 30.9737916,17.8115184 30.0457334,20.0230588 C29.1176752,22.2345993 27.7812915,24.1937561 26.0365421,25.9005883 L22.5284998,25.9005883 C26.1664878,22.3400999 27.9854545,18.0272018 27.9854545,12.9617647 C27.9854545,7.89632761 26.1664878,3.58342956 22.5284998,0.0229411764 L26.0365421,0.0229411764 C27.7812915,1.72977324 29.1176752,3.68893013 30.0457334,5.90047059 C30.9737916,8.11201106 31.4378137,10.4657522 31.4378137,12.9617647 L31.4378137,12.9617647 L31.4378137,12.9617647 L31.4378137,12.9617647 Z" id="Parans"></path>
+ <g id="Hands" transform="translate(12.954081, 1.720588)">
+ <rect id="Hand" x="0" y="0" width="2.32013386" height="13.1911764"></rect>
+ <polygon id="Hand" points="2.3189551 13.1499342 0.815087916 11.6629302 10.2484366 2.3353599 11.7523038 3.82236388 2.3189551 13.1499342"></polygon>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/date-fns/docs/logotype.svg b/date-fns/docs/logotype.svg
new file mode 100644
index 0000000..8b2a3a4
--- /dev/null
+++ b/date-fns/docs/logotype.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 176 33"><g fill="#770C56" fill-rule="evenodd"><path d="M.1 16.5A22.7 22.7 0 017.1 0h4.4a22 22 0 00-7 16.5 22 22 0 007 16.4H7A22.5 22.5 0 01.1 16.5zm40.2 0a22.7 22.7 0 01-7 16.4H29a22 22 0 007-16.4 22 22 0 00-7-16.5h4.5a22.5 22.5 0 016.9 16.5z" fill-rule="nonzero"/><path d="M16.6 2.2h3v16.7h-3z"/><path d="M19.6 18.9l-2-2L29.7 5.2l2 2zM53.4 17.5c0 2 .5 3.8 1.4 5.2.8 1.4 2.2 2 4.2 2 1.5 0 2.7-.6 3.7-1.9 1-1.3 1.4-3.1 1.4-5.5 0-2.5-.5-4.3-1.5-5.5a4.7 4.7 0 00-3.7-1.7c-1.6 0-3 .6-4 1.8-1 1.3-1.5 3.1-1.5 5.6zm5-10.3c1.4 0 2.7.3 3.7 1 .5.3 1.2 1 2 1.9V.3h3v26.6h-2.9v-2.7a7 7 0 01-2.7 2.6c-1 .5-2.2.8-3.5.8-2.2 0-4-.9-5.6-2.7a10.6 10.6 0 01-2.4-7.2c0-2.9.7-5.3 2.2-7.4a7 7 0 016.1-3zm15.1 14.6c0 1 .4 1.7 1 2.2.8.5 1.6.8 2.5.8 1.2 0 2.3-.3 3.3-.8a4.5 4.5 0 002.7-4.3V17l-1.5.6-1.8.4-2 .2c-1.2.2-2 .4-2.7.8-1 .5-1.5 1.4-1.5 2.7zm8-6.6c.7-.1 1.2-.4 1.4-1 .2-.2.2-.7.2-1.2 0-1.1-.4-1.9-1.1-2.4-.8-.5-2-.8-3.4-.8-1.7 0-3 .5-3.6 1.4-.4.5-.7 1.3-.8 2.3h-3c0-2.4.8-4 2.3-5 1.5-1 3.2-1.4 5.1-1.4 2.3 0 4.2.4 5.6 1.3 1.4.9 2.1 2.2 2.1 4v11.2c0 .3 0 .6.2.8.1.2.4.3.9.3a5 5 0 001 0V27a9 9 0 01-1.1.3h-1c-1.2 0-2-.4-2.5-1.2-.3-.4-.5-1-.6-1.7a8.8 8.8 0 01-7 3.2c-1.7 0-3.2-.6-4.3-1.7a5.4 5.4 0 01-1.8-4c0-1.9.6-3.2 1.7-4.2a8 8 0 014.4-1.9l5.2-.6zm9.9-13h3.3v5.4h3v2.6h-3V23c0 .6.2 1 .7 1.3l1.2.2a15.2 15.2 0 001.2 0v2.5l-1.2.3h-1.3c-1.5 0-2.6-.4-3.1-1.1-.6-.8-.8-1.8-.8-3V10.1h-2.6V7.6h2.6V2.2zm16.8 5a8.8 8.8 0 016.9 3.4c.7 1 1 2.1 1.3 3.4.2 1 .3 2.3.3 4.3h-14.2c0 2 .5 3.5 1.4 4.7.9 1.2 2.2 1.8 4 1.8a5.2 5.2 0 005.3-4h3.2c0 .8-.3 1.6-.8 2.4a7.6 7.6 0 01-5.3 4c-.8.3-1.7.4-2.6.4-2.4 0-4.5-.9-6.2-2.6a10.2 10.2 0 01-2.5-7.4c0-3 .9-5.6 2.6-7.6 1.6-1.9 3.8-2.9 6.6-2.9zm5.2 8.5a8.4 8.4 0 00-1-3.4c-.9-1.5-2.3-2.3-4.4-2.3a5 5 0 00-3.8 1.6c-1 1-1.5 2.4-1.6 4.1h10.8zm5.5-.8h9.1v3.4h-9v-3.4zM132 4.6c0-1.3.3-2.3.7-3 .8-1 2.2-1.6 4.4-1.6a11.4 11.4 0 011.4 0v3a26.4 26.4 0 00-1.2 0c-1 0-1.5.2-1.7.7-.2.6-.3 1.9-.3 4h3.2v2.5h-3.3V27H132V10.2h-2.7V7.7h2.7v-3zm8.6 3h3v2.7c1-1.1 2-2 3-2.4 1-.5 2.1-.8 3.4-.8 2.7 0 4.6 1 5.6 3 .5 1 .8 2.5.8 4.4V27H153V14.7c0-1.2-.2-2.1-.6-2.8-.5-1.2-1.6-1.8-3.1-1.8a4.9 4.9 0 00-4.2 1.8c-.6.6-1 1.3-1.1 2-.2.6-.3 1.6-.3 2.9v10.1h-3.2V7.6zm21.6 13.2c0 1.1.4 2 .8 2.5.8 1 2.3 1.6 4.3 1.6 1.2 0 2.2-.2 3.2-.8.9-.5 1.3-1.3 1.3-2.4a2 2 0 00-1-1.9c-.5-.3-1.5-.6-2.9-1l-2.5-.6c-1.7-.4-3-.8-3.7-1.3a4.1 4.1 0 01-2-3.7c0-1.8.6-3.3 1.9-4.4 1.3-1.2 3-1.7 5.3-1.7 3 0 5 .8 6.3 2.5.8 1.1 1.2 2.3 1.2 3.5h-3c-.1-.7-.4-1.4-.9-2-.7-.8-2-1.3-3.8-1.3-1.3 0-2.2.3-2.8.8-.7.4-1 1-1 1.8 0 .9.4 1.5 1.3 2 .4.3 1.2.6 2.1.8l2.1.6c2.4.5 4 1 4.7 1.6 1.3.8 2 2.1 2 4a6 6 0 01-2 4.4c-1.3 1.2-3.3 1.9-6 1.9-2.9 0-5-.7-6.1-2a7.4 7.4 0 01-2-4.9h3.2z"/></g></svg> \ No newline at end of file
diff --git a/date-fns/docs/timeZones.md b/date-fns/docs/timeZones.md
new file mode 100644
index 0000000..54eb90b
--- /dev/null
+++ b/date-fns/docs/timeZones.md
@@ -0,0 +1,63 @@
+# Time Zones
+
+## Table of Contents
+
+- [Overview](#overview)
+
+- [`date-fns-tz`](#date-fns-tz)
+
+## Overview
+
+Working with UTC or ISO date strings is easy, and so is working with JS dates when all times
+are displayed in a user's local time in the browser. The difficulty comes when working with another
+time zone's local time, other than the current system's, like showing the local time of an event in LA
+at 8pm PST on a Node server in Europe or a user's machine set to EST.
+
+In this case there are two relevant pieces of information:
+
+- a fixed moment in time in the form of a timestamp, UTC or ISO date string, and
+- the time zone descriptor, usually an offset or IANA time zone name (e.g. `America/Los_Angeles`).
+
+Libraries like Moment and Luxon, which provide their own date time classes, manage these timestamp and time
+zone values internally. Since `date-fns` always returns a plain JS Date, which implicitly has the current
+system's time zone, helper functions are needed for handling common time zone related use cases.
+
+## [`date-fns-tz`](https://www.npmjs.com/package/date-fns-tz)
+
+Dependency free IANA time zone support is implemented via the
+[Intl API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) to keep
+actual time zone data out of code bundles. Modern browsers all support the
+[necessary features](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat#Browser_compatibility),
+and for those that don't a [polyfill](https://github.com/yahoo/date-time-format-timezone) can be used.
+
+Functions are provided for converting to and from a Date instance which will have the internal UTC time
+adjusted so it prints to the correct time value in the associated time zone, regardless of the current
+system time zone. The `date-fns` `format` function is extended with support for the `z...zzzz` tokens to
+format long and short time zone names.
+
+Compatible with `date-fns` version 2
+
+License: MIT
+
+### Synopsis
+
+```js
+const { zonedTimeToUtc, utcToZonedTime, format } = require('date-fns-tz')
+
+// Set the date to "2018-09-01T16:01:36.386Z"
+const utcDate = zonedTimeToUtc('2018-09-01 18:01:36.386', 'Europe/Berlin')
+
+// Obtain a Date instance that will render the equivalent Berlin time for the UTC date
+const date = new Date('2018-09-01T16:01:36.386Z')
+const timeZone = 'Europe/Berlin'
+const zonedDate = utcToZonedTime(date, timeZone)
+// zonedDate could be used to initialize a date picker or display the formatted local date/time
+
+// Set the output to "1.9.2018 18:01:36.386 GMT+02:00 (CEST)"
+const pattern = 'd.M.yyyy HH:mm:ss.SSS \'GMT\' XXX (z)'
+const output = format(zonedDate, pattern, { timeZone: 'Europe/Berlin' })
+```
+
+### Links
+
+- [API / Usage Scenarios](https://github.com/marnusw/date-fns-tz#time-zone-helpers)
diff --git a/date-fns/docs/unicodeTokens.md b/date-fns/docs/unicodeTokens.md
new file mode 100644
index 0000000..5daf282
--- /dev/null
+++ b/date-fns/docs/unicodeTokens.md
@@ -0,0 +1,54 @@
+# Unicode Tokens
+
+Starting with v2, `format` and `parse` use [Unicode tokens].
+
+The tokens are different from Moment.js and other libraries that opted to use
+custom formatting rules. While usage of a standard ensures compatibility and
+the future of the library, it causes confusion that this document intends
+to resolve.
+
+## Popular mistakes
+
+There are 4 tokens that cause most of the confusion:
+
+- `D` and `DD` that represent the day of a year (1, 2, ..., 365, 366)
+ are often confused with `d` and `dd` that represent the day of a month
+ (1, 2, ..., 31).
+
+- `YY` and `YYYY` that represent the local week-numbering year (44, 01, 00, 17)
+ are often confused with `yy` and `yyyy` that represent the calendar year.
+
+```js
+// ❌ Wrong!
+format(new Date(), 'YYYY-MM-DD')
+//=> 2018-10-283
+
+// ✅ Correct
+format(new Date(), 'yyyy-MM-dd')
+//=> 2018-10-10
+
+// ❌ Wrong!
+parse('11.02.87', 'D.MM.YY', new Date()).toString()
+//=> 'Sat Jan 11 1986 00:00:00 GMT+0200 (EET)'
+
+// ✅ Correct
+parse('11.02.87', 'd.MM.yy', new Date()).toString()
+//=> 'Wed Feb 11 1987 00:00:00 GMT+0200 (EET)'
+```
+
+To help with the issue, `format` and `parse` functions won't accept
+these tokens without `useAdditionalDayOfYearTokens` option for `D` and `DD` and
+`useAdditionalWeekYearTokens` options for `YY` and `YYYY`:
+
+```js
+format(new Date(), 'D', { useAdditionalDayOfYearTokens: true })
+//=> '283'
+
+parse('365+1987', 'DD+YYYY', new Date(), {
+ useAdditionalDayOfYearTokens: true,
+ useAdditionalWeekYearTokens: true
+}).toString()
+//=> 'Wed Dec 31 1986 00:00:00 GMT+0200 (EET)'
+```
+
+[Unicode tokens]: https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
diff --git a/date-fns/docs/upgradeGuide.md b/date-fns/docs/upgradeGuide.md
new file mode 100644
index 0000000..4f058b4
--- /dev/null
+++ b/date-fns/docs/upgradeGuide.md
@@ -0,0 +1,118 @@
+# v2 Upgrade Guide
+
+## Common changes
+
+This page covers a few of the most common problems people face when updating from v1 to v2. For a more detailed list of changes, look at the [change log for version 2.0.0](https://date-fns.org/docs/Change-Log#2.0.0-2019-08-20).
+
+### Camel case naming schema
+
+Function submodules now use camelCase naming schema:
+
+```javascript
+// Before v2.0.0
+import differenceInCalendarISOYears from 'date-fns/difference_in_calendar_iso_years'
+
+// v2.0.0 onward
+import differenceInCalendarISOYears from 'date-fns/differenceInCalendarISOYears'
+```
+
+### New formatting tokens
+
+Starting with v2 `format` and `parse` uses [Unicode tokens].
+
+See [Unicode Tokens doc](https://date-fns.org/docs/Unicode-Tokens) for more details.
+
+### String arguments
+
+Functions now don't accept strings as date arguments. Strings should
+be parsed using `parseISO` (ISO 8601) or `parse`.
+
+See [this post](https://blog.date-fns.org/post/we-cut-date-fns-v2-minimal-build-size-down-to-300-bytes-and-now-its-the-smallest-date-library-18f2nvh2z0yal) for more details.
+
+```javascript
+// Before v2.0.0
+addDays('2016-01-01', 1)
+
+// v2.0.0 onward
+addDays(parseISO('2016-01-01'), 1)
+```
+
+### Arguments conversion
+
+All functions now implicitly convert arguments by following rules:
+
+| | date | number | string | boolean |
+| --------- | ------------ | ------ | ----------- | ------- |
+| 0 | new Date(0) | 0 | '0' | false |
+| '0' | Invalid Date | 0 | '0' | false |
+| 1 | new Date(1) | 1 | '1' | true |
+| '1' | Invalid Date | 1 | '1' | true |
+| true | Invalid Date | NaN | 'true' | true |
+| false | Invalid Date | NaN | 'false' | false |
+| null | Invalid Date | NaN | 'null' | false |
+| undefined | Invalid Date | NaN | 'undefined' | false |
+| NaN | Invalid Date | NaN | 'NaN' | false |
+
+Notes:
+
+- as before, arguments expected to be `Date` are converted to `Date` using _date-fns'_ `toDate` function;
+- arguments expected to be numbers are converted to integer numbers using our custom `toInteger` implementation
+ (see [#765](https://github.com/date-fns/date-fns/pull/765));
+- arguments expected to be strings are converted to strings using JavaScript's `String` function;
+- arguments expected to be booleans are converted to boolean using JavaScript's `Boolean` function.
+
+`null` and `undefined` passed to optional arguments (i.e. properties of `options` argument)
+are ignored as if no argument was passed.
+
+If any argument is invalid (i.e. `NaN` for numbers and `Invalid Date` for dates),
+an invalid value will be returned:
+
+- `false` for functions that return booleans (expect `isValid`);
+- `Invalid Date` for functions that return dates;
+- `NaN` for functions that return numbers;
+- and `String('Invalid Date')` for functions that return strings.
+
+See tests and PRs [#460](https://github.com/date-fns/date-fns/pull/460) and
+[#765](https://github.com/date-fns/date-fns/pull/765) for exact behavior.
+
+### `null`
+
+`null` now is not a valid date. `isValid(null)` returns `false`;
+`toDate(null)` returns an invalid date. Since `toDate` is used internally
+by all the functions, operations over `null` will also return an invalid date.
+[See #537](https://github.com/date-fns/date-fns/issues/537) for the reasoning.
+
+### `RangeError`
+
+Functions now throw `RangeError` if optional values passed to `options`
+are not `undefined` or have expected values.
+This change is introduced for consistency with ECMAScript standard library which does the same.
+
+### `TypeError`
+
+All functions now check if the passed number of arguments is less
+than the number of required arguments and throw `TypeError` exception if so.
+
+### UMD/CDN
+
+The Bower & UMD/CDN package versions are no longer supported.
+
+### New locale format
+
+See [docs/Locale](https://date-fns.org/docs/Locale).
+
+Locales renamed:
+
+- `en` → `en-US`
+- `zh_cn` → `zh-CN`
+- `zh_tw` → `zh-TW`
+
+```javascript
+// Before v2.0.0
+import locale from 'date-fns/locale/zh_cn'
+
+// v2.0.0 onward
+import locale from 'date-fns/locale/zh-CN'
+```
+
+[unicode tokens]: https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
diff --git a/date-fns/docs/webpack.md b/date-fns/docs/webpack.md
new file mode 100644
index 0000000..9eb1c10
--- /dev/null
+++ b/date-fns/docs/webpack.md
@@ -0,0 +1,48 @@
+# webpack
+
+## Removing unused languages from dynamic import
+
+If a locale is imported dynamically, then all locales from date-fns are loaded by webpack into a bundle (~160kb) or split across the chunks. This prolongs the build process and increases the amount of space taken. However, it is possible to use webpack to trim down languages using [ContextReplacementPlugin].
+
+Let's assume that we have a single point in which supported locales are present:
+
+`config.js`:
+
+```js
+// `see date-fns/src/locale` for available locales
+export const supportedLocales = ['en-US', 'de', 'pl', 'it']
+```
+
+We could also have a function that formats the date:
+
+```js
+const getLocale = (locale) => import(`date-fns/locale/${locale}/index.js`) // or require() if using CommonJS
+
+const formatDate = (date, formatStyle, locale) => {
+ return format(date, formatStyle, {
+ locale: getLocale(locale),
+ })
+}
+```
+
+In order to exclude unused languages we can use webpacks [ContextReplacementPlugin].
+
+`webpack.config.js`:
+
+```js
+import webpack from 'webpack'
+import { supportedLocales } from './config.js'
+
+export default const config = {
+ plugins: [
+ new webpack.ContextReplacementPlugin(
+ /date\-fns[\/\\]/,
+ new RegExp(`[/\\\\\](${supportedLocales.join('|')})[/\\\\\]index\.js$`)
+ )
+ ]
+}
+```
+
+This results in a language bundle of ~23kb .
+
+[contextreplacementplugin]: https://webpack.js.org/plugins/context-replacement-plugin/
diff --git a/date-fns/examples/.eslintrc.js b/date-fns/examples/.eslintrc.js
new file mode 100644
index 0000000..a40aaa8
--- /dev/null
+++ b/date-fns/examples/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+ rules: {
+ 'no-console': 'off'
+ }
+}
diff --git a/date-fns/examples/babel/.babelrc b/date-fns/examples/babel/.babelrc
new file mode 100644
index 0000000..3be44b0
--- /dev/null
+++ b/date-fns/examples/babel/.babelrc
@@ -0,0 +1,4 @@
+{
+ "presets": ["es2015"],
+ "plugins": ["date-fns"]
+}
diff --git a/date-fns/examples/babel/README.md b/date-fns/examples/babel/README.md
new file mode 100644
index 0000000..5a4f6e6
--- /dev/null
+++ b/date-fns/examples/babel/README.md
@@ -0,0 +1,23 @@
+# Usage With babel, webpack and babel-plugin-date-fns
+
+See [example.js](./example.js) for source code example.
+
+See [package.json scripts](./package.json) for CLI usage.
+
+## Build Example
+
+```sh
+yarn
+yarn run build
+```
+
+See ./dist for output.
+
+## Minimal Build Size
+
+You can see minimal build size (when you use just one function):
+
+```sh
+gzip-size dist/example.min.js | pretty-bytes
+#=> 6.67 kB
+```
diff --git a/date-fns/examples/babel/example.js b/date-fns/examples/babel/example.js
new file mode 100644
index 0000000..acc5e27
--- /dev/null
+++ b/date-fns/examples/babel/example.js
@@ -0,0 +1,4 @@
+import { format } from 'date-fns'
+
+const result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
+console.log(result === '25.01.2017 21:28:15')
diff --git a/date-fns/examples/babel/package.json b/date-fns/examples/babel/package.json
new file mode 100644
index 0000000..d118276
--- /dev/null
+++ b/date-fns/examples/babel/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "date-fns-example-babel",
+ "version": "0.1.0",
+ "description": "Example of date-fns usage with webpack 1.x, babel and babel-plugin-date-fns",
+ "main": "example.js",
+ "author": "Sasha Koss <koss@nocorp.me>",
+ "license": "MIT",
+ "dependencies": {
+ "babel-core": "^6.22.1",
+ "babel-loader": "6",
+ "babel-plugin-date-fns": "^0.2.1",
+ "babel-preset-babili": "^0.0.11",
+ "babel-preset-es2015": "^6.22.0",
+ "babili": "^0.0.11",
+ "gzip-size-cli": "^1.0.0",
+ "pretty-bytes-cli": "^2.0.0",
+ "webpack": "1"
+ },
+ "scripts": {
+ "build": "yarn run build-date-fns && yarn run build-webpack && yarn run build-babili",
+ "build-date-fns": "env PACKAGE_OUTPUT_PATH=\"$(pwd)/node_modules/date-fns\" ../../scripts/build/package.sh",
+ "build-webpack": "webpack",
+ "build-babili": "babili dist/example.js --out-file dist/example.min.js --minified --no-comments && yarn run stats-size",
+ "stats-size": "gzip-size dist/example.min.js | pretty-bytes",
+ "test": "test $(env TZ=UTC node ./dist/example.min.js) = true"
+ }
+}
diff --git a/date-fns/examples/babel/webpack.config.js b/date-fns/examples/babel/webpack.config.js
new file mode 100644
index 0000000..ec54003
--- /dev/null
+++ b/date-fns/examples/babel/webpack.config.js
@@ -0,0 +1,14 @@
+module.exports = {
+ entry: './example.js',
+ output: {
+ path: './dist',
+ filename: 'example.js'
+ },
+ module: {
+ loaders: [{
+ test: /\.js$/,
+ exclude: /node_modules/,
+ loader: 'babel-loader'
+ }]
+ }
+}
diff --git a/date-fns/examples/babel/yarn.lock b/date-fns/examples/babel/yarn.lock
new file mode 100644
index 0000000..0606330
--- /dev/null
+++ b/date-fns/examples/babel/yarn.lock
@@ -0,0 +1,2791 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+abbrev@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+acorn@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+ integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+ integrity sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ integrity sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+aproba@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+ integrity sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA=
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ integrity sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+ integrity sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+ integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+
+async@^0.9.0:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+ integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
+
+async@^1.3.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+
+async@~0.2.6:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+ integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
+
+aws4@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
+ integrity sha1-Cin/t5wxyecS7rCH6OemS0pW11U=
+
+babel-cli@^6.10.1:
+ version "6.22.2"
+ resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.22.2.tgz#3f814c8acf52759082b8fedd9627f938936ab559"
+ integrity sha1-P4FMis9SdZCCuP7dlif5OJNqtVk=
+ dependencies:
+ babel-core "^6.22.1"
+ babel-polyfill "^6.22.0"
+ babel-register "^6.22.0"
+ babel-runtime "^6.22.0"
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.0.0"
+ glob "^7.0.0"
+ lodash "^4.2.0"
+ output-file-sync "^1.1.0"
+ path-is-absolute "^1.0.0"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+ v8flags "^2.0.10"
+ optionalDependencies:
+ chokidar "^1.6.1"
+
+babel-code-frame@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+ integrity sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+babel-core@^6.22.0, babel-core@^6.22.1:
+ version "6.22.1"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648"
+ integrity sha1-nF/WWLoXctKNch9tJdlo/HriFkg=
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-generator "^6.22.0"
+ babel-helpers "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-register "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.1"
+ babel-types "^6.22.0"
+ babylon "^6.11.0"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805"
+ integrity sha1-1kK/SWGRGorcfGkrDJKX8yXNqAU=
+ dependencies:
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+
+babel-helper-call-delegate@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef"
+ integrity sha1-EZkhtWEg8X6drj90tPXMe8wbN+8=
+ dependencies:
+ babel-helper-hoist-variables "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-define-map@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7"
+ integrity sha1-lUTpUCstbf59AP9g6CvVp6ielbc=
+ dependencies:
+ babel-helper-function-name "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ lodash "^4.2.0"
+
+babel-helper-evaluate-path@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.0.3.tgz#1d103ac9d4a59e5d431842212f151785f7ac547b"
+ integrity sha1-HRA6ydSlnl1DGEIhLxUXhfesVHs=
+
+babel-helper-flip-expressions@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.0.2.tgz#7bab2cf61162bc92703e9b298ef512bcf77d6787"
+ integrity sha1-e6ss9hFivJJwPpspjvUSvPd9Z4c=
+
+babel-helper-function-name@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc"
+ integrity sha1-UfG9xLuJsV9XqbJJ8z10KBbcvvw=
+ dependencies:
+ babel-helper-get-function-arity "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-get-function-arity@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce"
+ integrity sha1-C+tGStadxzR0EKxq3p8DpQY09c4=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-hoist-variables@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72"
+ integrity sha1-Pqy/cx2AcFhF3S6XGPYAz7m0unI=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.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.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.0.1.tgz#ed74553b883e68226ae45f989a99b02c190f105a"
+ integrity sha1-7XRVO4g+aCJq5F+YmpmwLBkPEFo=
+
+babel-helper-mark-eval-scopes@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.0.2.tgz#909fd1f2384570cd3003283773852d9d63922a37"
+ integrity sha1-kJ/R8jhFcM0wAyg3c4UtnWOSKjc=
+
+babel-helper-optimise-call-expression@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15"
+ integrity sha1-+NXUtApuJgWmp/nVN7WBvqN1bRU=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-regex@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d"
+ integrity sha1-efUyvhZHsfDuNHS19cPaWAAdJH0=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ lodash "^4.2.0"
+
+babel-helper-remove-or-void@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.0.1.tgz#f602790e465acf2dfbe84fb3dd210c43a2dd7262"
+ integrity sha1-9gJ5DkZazy376E+z3SEMQ6LdcmI=
+
+babel-helper-replace-supers@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42"
+ integrity sha1-H87iJwZXVIkIw02xa8w0X5hQz0I=
+ dependencies:
+ babel-helper-optimise-call-expression "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-to-multiple-sequence-expressions@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.0.3.tgz#c789a0faccd2669c51234be2cea7a3e5a0573c25"
+ integrity sha1-x4mg+szSZpxRI0vizqej5aBXPCU=
+
+babel-helpers@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c"
+ integrity sha1-0nX1XyJSuBAb/we8DFVt7aZXOSw=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-loader@6:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca"
+ integrity sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=
+ dependencies:
+ find-cache-dir "^0.1.1"
+ loader-utils "^0.2.16"
+ mkdirp "^0.5.1"
+ object-assign "^4.0.1"
+
+babel-messages@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575"
+ integrity sha1-NgZqIU8SF+TtQWSGdmnss54+pXU=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-check-es2015-constants@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+ integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-date-fns@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-date-fns/-/babel-plugin-date-fns-0.2.1.tgz#17b6e4666a05411857ac04af4318ff5fb72895f2"
+ integrity sha512-XdcYohZbmetNsEHG32QV+uC17J3LKfE5O5/47N+Ee9zR1xdqXPRm/Am1VbGidva7dFpRzXmdk4TYofS9Qq+1Tw==
+ dependencies:
+ lodash.snakecase "^4.1.1"
+
+babel-plugin-minify-constant-folding@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.0.4.tgz#b6e231026a6035e88ceadd206128d7db2b5c15e6"
+ integrity sha1-tuIxAmpgNeiM6t0gYSjX2ytcFeY=
+ dependencies:
+ babel-helper-evaluate-path "^0.0.3"
+ jsesc "^2.4.0"
+
+babel-plugin-minify-dead-code-elimination@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.3.tgz#7882c014619934cb9aca69d85c968ed124ac97e3"
+ integrity sha1-eILAFGGZNMuaymnYXJaO0SSsl+M=
+ dependencies:
+ babel-helper-mark-eval-scopes "^0.0.2"
+ babel-helper-remove-or-void "^0.0.1"
+ lodash.some "^4.6.0"
+
+babel-plugin-minify-flip-comparisons@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.0.2.tgz#7d0953aa5876ede6118966bda9edecc63bf346ab"
+ integrity sha1-fQlTqlh27eYRiWa9qe3sxjvzRqs=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-minify-guarded-expressions@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.0.4.tgz#957104a760e6a7ffd967005a7a11621bb42fd11c"
+ integrity sha1-lXEEp2Dmp//ZZwBaehFiG7Qv0Rw=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.2"
+
+babel-plugin-minify-infinity@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.0.3.tgz#4cc99b61d12b434ce80ad675103335c589cba9a1"
+ integrity sha1-TMmbYdErQ0zoCtZ1EDM1xYnLqaE=
+
+babel-plugin-minify-mangle-names@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.0.7.tgz#fcc5f9a4c4c9c0731e73a4a4e3d002fcb800ef41"
+ integrity sha1-/MX5pMTJwHMec6Sk49AC/LgA70E=
+ dependencies:
+ babel-helper-mark-eval-scopes "^0.0.2"
+
+babel-plugin-minify-numeric-literals@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.0.1.tgz#9597e6c31154d7daf3744d0bd417c144b275bd53"
+ integrity sha1-lZfmwxFU19rzdE0L1BfBRLJ1vVM=
+
+babel-plugin-minify-replace@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.0.1.tgz#5d5aea7cb9899245248d1ee9ce7a2fe556a8facc"
+ integrity sha1-XVrqfLmJkkUkjR7pznov5Vao+sw=
+
+babel-plugin-minify-simplify@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.0.7.tgz#4198d589ea10b4bc5bf9310206619a743c0d0664"
+ integrity sha1-QZjVieoQtLxb+TECBmGadDwNBmQ=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.2"
+ babel-helper-is-nodes-equiv "^0.0.1"
+ babel-helper-to-multiple-sequence-expressions "^0.0.3"
+
+babel-plugin-minify-type-constructors@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.0.3.tgz#ab59c1ad835b6b6e8e932b875d4df4dc393d9d26"
+ integrity sha1-q1nBrYNba26OkyuHXU303Dk9nSY=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-transform-es2015-arrow-functions@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
+ integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
+ integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoping@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e"
+ integrity sha1-ANbjoL69z+dTa51lO0SpFB5j5H4=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+ lodash "^4.2.0"
+
+babel-plugin-transform-es2015-classes@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14"
+ integrity sha1-VNRJmP2CPZ3KFSkjJBYcMxwbbxQ=
+ dependencies:
+ babel-helper-define-map "^6.22.0"
+ babel-helper-function-name "^6.22.0"
+ babel-helper-optimise-call-expression "^6.22.0"
+ babel-helper-replace-supers "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-computed-properties@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7"
+ integrity sha1-fDg+lim7pIIMEbBCW91ikPfwV+c=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-plugin-transform-es2015-destructuring@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6"
+ integrity sha1-jgry+IWgss+ZnUfEwd0jzojPpMY=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b"
+ integrity sha1-ZyOXAxwhYQ1y3Su7C6n7Ynfhw2s=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-for-of@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265"
+ integrity sha1-GARnrWOu6lkqHK7uS/HIs+JhYmU=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-function-name@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104"
+ integrity sha1-9fzIsJCT+aI8dqw9njksPsS3cQQ=
+ dependencies:
+ babel-helper-function-name "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-literals@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
+ integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-modules-amd@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21"
+ integrity sha1-v2nNNIiaQcM9kN+3QOAJHM/1LyE=
+ dependencies:
+ babel-plugin-transform-es2015-modules-commonjs "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-plugin-transform-es2015-modules-commonjs@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145"
+ integrity sha1-bKBOIrjiFPtQFpcwZX56B9yUEUU=
+ dependencies:
+ babel-plugin-transform-strict-mode "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-modules-systemjs@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad"
+ integrity sha1-gQzQzQJaCDg7hCNrksbjH4jmRK0=
+ dependencies:
+ babel-helper-hoist-variables "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-plugin-transform-es2015-modules-umd@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae"
+ integrity sha1-YNC6O9IyWHGcZDkdm/SS1kjcD64=
+ dependencies:
+ babel-plugin-transform-es2015-modules-amd "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-plugin-transform-es2015-object-super@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc"
+ integrity sha1-2qYOEUoELqdp3VP+Uo/IIxHrmPw=
+ dependencies:
+ babel-helper-replace-supers "^6.22.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-parameters@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb"
+ integrity sha1-VwdgaSMgGQlPJ9qMaLtxYv4gjbs=
+ dependencies:
+ babel-helper-call-delegate "^6.22.0"
+ babel-helper-get-function-arity "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723"
+ integrity sha1-i6d24K/6pgv/IekhQDuKZSov9yM=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-spread@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+ integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-sticky-regex@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593"
+ integrity sha1-qzFoKehm7j9LnrlpOXV9GaW8RZM=
+ dependencies:
+ babel-helper-regex "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-template-literals@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
+ integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-typeof-symbol@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1"
+ integrity sha1-h/ryM207apf2jE2QawzQ7ermduE=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-unicode-regex@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20"
+ integrity sha1-jZzCfn7h3s/mVFT7mGRSoEphPSA=
+ dependencies:
+ babel-helper-regex "^6.22.0"
+ babel-runtime "^6.22.0"
+ regexpu-core "^2.0.0"
+
+babel-plugin-transform-inline-consecutive-adds@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.0.2.tgz#a58fcecfc09c08fbf9373a5a3e70746c03d01fc1"
+ integrity sha1-pY/Oz8CcCPv5NzpaPnB0bAPQH8E=
+
+babel-plugin-transform-member-expression-literals@^6.8.1:
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.1.tgz#60b78cb2b814ac71dd6104ef51c496c62e877337"
+ integrity sha1-YLeMsrgUrHHdYQTvUcSWxi6Hczc=
+
+babel-plugin-transform-merge-sibling-variables@^6.8.2:
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.2.tgz#498acd07481ab340c1bad8b726c2fad1b8f644e5"
+ integrity sha1-SYrNB0gas0DButi3JsL60bj2ROU=
+
+babel-plugin-transform-minify-booleans@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.0.tgz#b1a48864a727847696b84eae36fa4d085a54b42b"
+ integrity sha1-saSIZKcnhHaWuE6uNvpNCFpUtCs=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-property-literals@^6.8.1:
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.1.tgz#05ed01f6024820b18f1d0495c80fe287176bccd9"
+ integrity sha1-Be0B9gJIILGPHQSVyA/ihxdrzNk=
+
+babel-plugin-transform-regenerator@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6"
+ integrity sha1-ZXQFk6MZxEUiFXU41pC4QJRhfqY=
+ dependencies:
+ regenerator-transform "0.9.8"
+
+babel-plugin-transform-regexp-constructors@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.0.5.tgz#74d95e0c567e6fc1d9c699a084894d40de8e581d"
+ integrity sha1-dNleDFZ+b8HZxpmghIlNQN6OWB0=
+
+babel-plugin-transform-remove-console@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.0.tgz#c4162f01ee169491776e64093f4dad8d61125a90"
+ integrity sha1-xBYvAe4WlJF3bmQJP02tjWESWpA=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-remove-debugger@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.0.tgz#d3ece7d8400473f7a706177ba22fd3026ad7e020"
+ integrity sha1-0+zn2EAEc/enBhd7oi/TAmrX4CA=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-remove-undefined@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.0.5.tgz#12ef11805e06e861dd2eb0c7cc041d2184b8f410"
+ integrity sha1-Eu8RgF4G6GHdLrDHzAQdIYS49BA=
+
+babel-plugin-transform-simplify-comparison-operators@^6.8.1:
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.1.tgz#a307088e0d1c728081777fba568f4107396ab25c"
+ integrity sha1-owcIjg0ccoCBd3+6Vo9BBzlqslw=
+
+babel-plugin-transform-strict-mode@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c"
+ integrity sha1-4AjfATQP3IfpWdplmRt+BZcMjHw=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-undefined-to-void@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.0.tgz#bc5b6b4908d3b1262170e67cb3963903ddce167e"
+ integrity sha1-vFtrSQjTsSYhcOZ8s5Y5A93OFn4=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-polyfill@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b"
+ integrity sha1-GsmevcxrpNseJhjDh7IISoIVSjs=
+ dependencies:
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-preset-babili@^0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/babel-preset-babili/-/babel-preset-babili-0.0.11.tgz#9461fd902d6a3c8bc032b8f06c2f691674c12a1f"
+ integrity sha1-lGH9kC1qPIvAMrjwbC9pFnTBKh8=
+ dependencies:
+ babel-plugin-minify-constant-folding "^0.0.4"
+ babel-plugin-minify-dead-code-elimination "^0.1.3"
+ babel-plugin-minify-flip-comparisons "^0.0.2"
+ babel-plugin-minify-guarded-expressions "^0.0.4"
+ babel-plugin-minify-infinity "^0.0.3"
+ babel-plugin-minify-mangle-names "^0.0.7"
+ babel-plugin-minify-numeric-literals "^0.0.1"
+ babel-plugin-minify-replace "^0.0.1"
+ babel-plugin-minify-simplify "^0.0.7"
+ babel-plugin-minify-type-constructors "^0.0.3"
+ babel-plugin-transform-inline-consecutive-adds "^0.0.2"
+ babel-plugin-transform-member-expression-literals "^6.8.1"
+ babel-plugin-transform-merge-sibling-variables "^6.8.2"
+ babel-plugin-transform-minify-booleans "^6.8.0"
+ babel-plugin-transform-property-literals "^6.8.1"
+ babel-plugin-transform-regexp-constructors "^0.0.5"
+ babel-plugin-transform-remove-console "^6.8.0"
+ babel-plugin-transform-remove-debugger "^6.8.0"
+ babel-plugin-transform-remove-undefined "^0.0.5"
+ babel-plugin-transform-simplify-comparison-operators "^6.8.1"
+ babel-plugin-transform-undefined-to-void "^6.8.0"
+ lodash.isplainobject "^4.0.6"
+
+babel-preset-es2015@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835"
+ integrity sha1-r1qY7LNeuK92StiloF6zbcQ4aDU=
+ dependencies:
+ babel-plugin-check-es2015-constants "^6.22.0"
+ babel-plugin-transform-es2015-arrow-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoping "^6.22.0"
+ babel-plugin-transform-es2015-classes "^6.22.0"
+ babel-plugin-transform-es2015-computed-properties "^6.22.0"
+ babel-plugin-transform-es2015-destructuring "^6.22.0"
+ babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
+ babel-plugin-transform-es2015-for-of "^6.22.0"
+ babel-plugin-transform-es2015-function-name "^6.22.0"
+ babel-plugin-transform-es2015-literals "^6.22.0"
+ babel-plugin-transform-es2015-modules-amd "^6.22.0"
+ babel-plugin-transform-es2015-modules-commonjs "^6.22.0"
+ babel-plugin-transform-es2015-modules-systemjs "^6.22.0"
+ babel-plugin-transform-es2015-modules-umd "^6.22.0"
+ babel-plugin-transform-es2015-object-super "^6.22.0"
+ babel-plugin-transform-es2015-parameters "^6.22.0"
+ babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
+ babel-plugin-transform-es2015-spread "^6.22.0"
+ babel-plugin-transform-es2015-sticky-regex "^6.22.0"
+ babel-plugin-transform-es2015-template-literals "^6.22.0"
+ babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
+ babel-plugin-transform-es2015-unicode-regex "^6.22.0"
+ babel-plugin-transform-regenerator "^6.22.0"
+
+babel-register@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63"
+ integrity sha1-ph3YOXX5ykqefW7/MFlJTNXqTGM=
+ dependencies:
+ babel-core "^6.22.0"
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611"
+ integrity sha1-HPi0rGfHek3bDbKuH3TeUqxMphE=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb"
+ integrity sha1-QD0RCQWkYmsxeiofy487cyBLLts=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+ babylon "^6.11.0"
+ lodash "^4.2.0"
+
+babel-traverse@^6.22.0, babel-traverse@^6.22.1:
+ version "6.22.1"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f"
+ integrity sha1-O5XNa3Qn1vH3V3BJCPL8l0il9Z8=
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ babylon "^6.15.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.19.0, babel-types@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db"
+ integrity sha1-KkR+jQ6iXSUSQJ5BdUef14zIsds=
+ dependencies:
+ babel-runtime "^6.22.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babili@^0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/babili/-/babili-0.0.11.tgz#887b3461c7e41aaf9f37383b5b01c82746201860"
+ integrity sha1-iHs0YcfkGq+fNzg7WwHIJ0YgGGA=
+ dependencies:
+ babel-cli "^6.10.1"
+ babel-preset-babili "^0.0.11"
+
+babylon@^6.11.0, babylon@^6.15.0:
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e"
+ integrity sha1-umXPoagOF1mw6J+1YuJ9zK5wNI4=
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
+
+base64-js@^1.0.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+ integrity sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
+ integrity sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+ integrity sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+browserify-aes@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
+ integrity sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=
+ dependencies:
+ inherits "^2.0.1"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
+ dependencies:
+ pako "~0.2.0"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+buffer@^4.9.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+ integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c=
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^1.1.0, chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chokidar@^1.0.0, chokidar@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+ integrity sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+clone@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+ integrity sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.8.1, commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+convert-source-map@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
+ integrity sha1-6fPpxuJyjvwmdmlqcOs4L3MQamc=
+
+core-js@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+ integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
+ dependencies:
+ boom "2.x.x"
+
+crypto-browserify@3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
+ integrity sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=
+ dependencies:
+ browserify-aes "0.4.0"
+ pbkdf2-compat "2.0.1"
+ ripemd160 "0.2.0"
+ sha.js "2.2.6"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+debug@^2.1.1, debug@^2.2.0, debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
+ dependencies:
+ ms "0.7.1"
+
+decamelize@^1.0.0, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+ integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
+ dependencies:
+ jsbn "~0.1.0"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+enhanced-resolve@~0.9.0:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
+ integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.2.0"
+ tapable "^0.1.8"
+
+errno@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ integrity sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=
+ dependencies:
+ prr "~0.0.0"
+
+error-ex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+ integrity sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+ integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+ integrity sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+ integrity sha1-4QgOBljjALBilJkMxw4VAiNf1VA=
+
+filename-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+ integrity sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+find-cache-dir@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+ integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
+ dependencies:
+ commondir "^1.0.1"
+ mkdirp "^0.5.1"
+ pkg-dir "^1.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+for-in@^0.1.5:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
+ integrity sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=
+
+for-own@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
+ integrity sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=
+ dependencies:
+ for-in "^0.1.5"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ integrity sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs-readdir-recursive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
+ integrity sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.0.0:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558"
+ integrity sha1-hTfz8SJyZ4dltP1lKMDx9m+PRVg=
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ integrity sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gauge@~2.7.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774"
+ integrity sha1-Fc7MMbAtBTRaXWsOFxzbOtIwd3Q=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^0.2.0"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+ integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
+ dependencies:
+ is-property "^1.0.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+ integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ integrity sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^7.0.0, glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.0.0:
+ version "9.14.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
+ integrity sha1-iFmTavADh0EmMFOznQ52yiQeQDQ=
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.4:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+gzip-size-cli@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size-cli/-/gzip-size-cli-1.0.0.tgz#97ef47b1600a2ad8f9c31539661eab39ec36caed"
+ integrity sha1-l+9HsWAKKtj5wxU5Zh6rOew2yu0=
+ dependencies:
+ gzip-size "^3.0.0"
+ meow "^3.3.0"
+
+gzip-size@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
+ dependencies:
+ duplexer "^0.1.1"
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+ integrity sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+ integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+interpret@^0.6.4:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
+ integrity sha1-/s16GOfOXKar+5U+H4YhOknxYls=
+
+invariant@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A=
+ dependencies:
+ loose-envify "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+ integrity sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+ integrity sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-my-json-valid@^2.12.4:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ integrity sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ integrity sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=
+ dependencies:
+ jsbn "~0.1.0"
+
+js-tokens@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+ integrity sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+ integrity sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+jsesc@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.4.0.tgz#8568d223ff69c0b5e081b4f8edf5a23d978c9867"
+ integrity sha1-hWjSI/9pwLXggbT47fWiPZeMmGc=
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+ integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ integrity sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ integrity sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=
+ dependencies:
+ is-buffer "^1.0.2"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+loader-utils@^0.2.11:
+ version "0.2.16"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
+ integrity sha1-8IYyBm7YKCg13/iN+1JwR2Wt7m0=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+loader-utils@^0.2.16:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
+
+lodash.snakecase@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
+ integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=
+
+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@^4.2.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+ integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ integrity sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=
+ dependencies:
+ js-tokens "^3.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+memory-fs@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
+ integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA=
+
+memory-fs@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
+ integrity sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.3.0, meow@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+mime-db@~1.25.0:
+ version "1.25.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
+ integrity sha1-wY29fHOl2/b0SgJNwNFloeexw5I=
+
+mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.13"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
+ integrity sha1-4HqqnGxrmnyjASxpADrSWjnpKog=
+ dependencies:
+ mime-db "~1.25.0"
+
+minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8, minimist@~0.0.1:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
+
+nan@^2.3.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
+ integrity sha1-qo8eNFMdgH6eJ3VbI0tKbsDBUqg=
+
+node-libs-browser@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b"
+ integrity sha1-PicsCBnjCJNeJmdECNevDhSRuDs=
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.1.4"
+ buffer "^4.9.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "3.3.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "0.0.1"
+ os-browserify "^0.2.0"
+ path-browserify "0.0.0"
+ process "^0.11.0"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.0.5"
+ stream-browserify "^2.0.1"
+ stream-http "^2.3.1"
+ string_decoder "^0.10.25"
+ timers-browserify "^2.0.2"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-pre-gyp@^0.6.29:
+ version "0.6.32"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
+ integrity sha1-/EUrN25zGbPSVfXzSFPvb9j+H9U=
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ integrity sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+ integrity sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ integrity sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+ integrity sha1-ejs9DpgGPUP0wD8uiubNUahog6A=
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+once@^1.3.0, once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+optimist@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+os-browserify@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+ integrity sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+output-file-sync@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+ integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=
+ dependencies:
+ graceful-fs "^4.1.4"
+ mkdirp "^0.5.1"
+ object-assign "^4.1.0"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+ integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pbkdf2-compat@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
+ integrity sha1-tuDI+plJTZTgURV1gCpZpcFC8og=
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
+ dependencies:
+ find-up "^1.0.0"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+pretty-bytes-cli@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes-cli/-/pretty-bytes-cli-2.0.0.tgz#e705662cffdc9c75291835333bc2f89ad3c033cf"
+ integrity sha1-5wVmLP/cnHUpGDUzO8L4mtPAM88=
+ dependencies:
+ get-stdin "^5.0.1"
+ meow "^3.6.0"
+ pretty-bytes "^4.0.0"
+
+pretty-bytes@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+ integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=
+
+private@^0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
+ integrity sha1-aM5eih7woju1cMwoU3tTMqumPvE=
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+process@^0.11.0:
+ version "0.11.9"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+ integrity sha1-e9WtIapiU+fahoImTx4R0RwDGME=
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+ integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+ integrity sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ integrity sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+rc@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
+ integrity sha1-Q2UbdrauU7XIAvEVH6P8OwWZack=
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~1.0.4"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ integrity sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regenerate@^1.2.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
+ integrity sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=
+
+regenerator-runtime@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
+ integrity sha1-JX9BlhzkRVixj3gUr0jBdVn5+us=
+
+regenerator-transform@0.9.8:
+ version "0.9.8"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c"
+ integrity sha1-D4i7K8A5Mt23trcxLmgHjwECbWw=
+ dependencies:
+ babel-runtime "^6.18.0"
+ babel-types "^6.19.0"
+ private "^0.1.6"
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ integrity sha1-mxpsNdTQ3871cRrmUejp09cRQUU=
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+regexpu-core@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+ integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=
+ dependencies:
+ regenerate "^1.2.1"
+ regjsgen "^0.2.0"
+ regjsparser "^0.1.4"
+
+regjsgen@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+ integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
+
+regjsparser@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+ integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
+ dependencies:
+ jsesc "~0.5.0"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
+ integrity sha1-K/GYveFnys+lHAqSjoS2i74XH84=
+
+"semver@2 || 3 || 4 || 5", semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+sha.js@2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
+ integrity sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
+ dependencies:
+ hoek "2.x.x"
+
+source-list-map@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e"
+ integrity sha1-1LXOKkZTXHLH6FJ8cad9JQYYFy4=
+
+source-map-support@^0.4.2:
+ version "0.4.11"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322"
+ integrity sha1-ZH+TmXizhTWQlTCIUwPa8jJ58yI=
+ dependencies:
+ source-map "^0.5.3"
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+ integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
+
+source-map@~0.4.1:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
+ dependencies:
+ amdefine ">=0.0.4"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+ integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+ integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=
+
+sshpk@^1.7.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
+ integrity sha1-MOGl0ykkSXShr2FREznVla9mOLA=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-http@^2.3.1:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.0.tgz#adf3309ced17624ebfb7ef13e6ac4cfe405a8b12"
+ integrity sha1-rfMwnO0XYk6/t+8T5qxM/kBaixI=
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.1.0"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@^0.10.25, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+ integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+ integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
+
+supports-color@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+ integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^3.1.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU=
+ dependencies:
+ has-flag "^1.0.0"
+
+tapable@^0.1.8, tapable@~0.1.8:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
+ integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ integrity sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+timers-browserify@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
+ integrity sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=
+ dependencies:
+ setimmediate "^1.0.4"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
+ integrity sha1-8/XAw7pymafvmUJ+RGMyV63kMyA=
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ integrity sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=
+ dependencies:
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+ integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+uglify-js@~2.7.3:
+ version "2.7.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
+ integrity sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=
+ dependencies:
+ async "~0.2.6"
+ source-map "~0.5.1"
+ uglify-to-browserify "~1.0.0"
+ yargs "~3.10.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+ integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA=
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3, util@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+ integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=
+
+v8flags@^2.0.10:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881"
+ integrity sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=
+ dependencies:
+ user-home "^1.1.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ integrity sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=
+ dependencies:
+ extsprintf "1.0.2"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
+ dependencies:
+ indexof "0.0.1"
+
+watchpack@^0.2.1:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
+ integrity sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=
+ dependencies:
+ async "^0.9.0"
+ chokidar "^1.0.0"
+ graceful-fs "^4.1.2"
+
+webpack-core@~0.6.9:
+ version "0.6.9"
+ resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
+ integrity sha1-/FcViMhVjad76e+23r3Fo7FyvcI=
+ dependencies:
+ source-list-map "~0.1.7"
+ source-map "~0.4.1"
+
+webpack@1:
+ version "1.14.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.14.0.tgz#54f1ffb92051a328a5b2057d6ae33c289462c823"
+ integrity sha1-VPH/uSBRoyilsgV9auM8KJRiyCM=
+ dependencies:
+ acorn "^3.0.0"
+ async "^1.3.0"
+ clone "^1.0.2"
+ enhanced-resolve "~0.9.0"
+ interpret "^0.6.4"
+ loader-utils "^0.2.11"
+ memory-fs "~0.3.0"
+ mkdirp "~0.5.0"
+ node-libs-browser "^0.7.0"
+ optimist "~0.6.0"
+ supports-color "^3.1.0"
+ tapable "~0.1.8"
+ uglify-js "~2.7.3"
+ watchpack "^0.2.1"
+ webpack-core "~0.6.9"
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ integrity sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=
+ dependencies:
+ string-width "^1.0.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
diff --git a/date-fns/examples/browserify/README.md b/date-fns/examples/browserify/README.md
new file mode 100644
index 0000000..a5aed20
--- /dev/null
+++ b/date-fns/examples/browserify/README.md
@@ -0,0 +1,23 @@
+# Usage With Browserify
+
+See [example.js](./example.js), [fp.js](./fp.js) and [misc.js](./misc.js) for source code examples.
+
+See [package.json scripts](./package.json) for CLI usage.
+
+## Build Example
+
+```sh
+yarn
+yarn run build
+```
+
+See ./dist for output.
+
+## Minimal Build Size
+
+You can see minimal build size (when you use just one function):
+
+```sh
+gzip-size dist/example.min.js | pretty-bytes
+#=> 7.15 kB
+```
diff --git a/date-fns/examples/browserify/example.js b/date-fns/examples/browserify/example.js
new file mode 100644
index 0000000..e09f17c
--- /dev/null
+++ b/date-fns/examples/browserify/example.js
@@ -0,0 +1,4 @@
+var format = require('date-fns/format')
+
+var result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
+console.log(result === '25.01.2017 21:28:15')
diff --git a/date-fns/examples/browserify/fp.js b/date-fns/examples/browserify/fp.js
new file mode 100644
index 0000000..7d25ec5
--- /dev/null
+++ b/date-fns/examples/browserify/fp.js
@@ -0,0 +1,19 @@
+var addYears = require('date-fns/fp/addYears')
+var dateFns = require('date-fns/fp')
+var formatWithOptions = dateFns.formatWithOptions
+var eo = require('date-fns/locale/eo')
+
+var addFiveYears = addYears(5)
+var dateToString = formatWithOptions({locale: eo}, 'd MMMM yyyy')
+
+var dates = [
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(2017, 1 /* Feb */, 11),
+ new Date(2017, 6 /* Jul */, 2)
+]
+
+var formattedDates = dates
+ .map((date) => dateToString(addFiveYears(date)))
+ .join(', ')
+
+console.log(formattedDates === '1 januaro 2022, 11 februaro 2022, 2 julio 2022')
diff --git a/date-fns/examples/browserify/misc.js b/date-fns/examples/browserify/misc.js
new file mode 100644
index 0000000..409974b
--- /dev/null
+++ b/date-fns/examples/browserify/misc.js
@@ -0,0 +1,10 @@
+var dateFns = require('date-fns')
+var format = dateFns.format
+var eo = require('date-fns/locale/eo')
+
+var result = format(
+ new Date(2017, 0, 25, 21, 28, 15),
+ 'eeee, dd MMMM HH:mm:ss',
+ { locale: eo }
+)
+console.log(result === 'merkredo, 25 januaro 21:28:15')
diff --git a/date-fns/examples/browserify/package.json b/date-fns/examples/browserify/package.json
new file mode 100644
index 0000000..a2e3ee1
--- /dev/null
+++ b/date-fns/examples/browserify/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "date-fns-example-browserify",
+ "version": "0.1.0",
+ "description": "Example of date-fns usage with Browserify",
+ "main": "example.js",
+ "author": "Sasha Koss <koss@nocorp.me>",
+ "license": "MIT",
+ "dependencies": {
+ "babili": "^0.0.9",
+ "browserify": "^13.3.0",
+ "gzip-size-cli": "^1.0.0",
+ "pretty-bytes-cli": "^2.0.0"
+ },
+ "scripts": {
+ "build": "yarn run build-date-fns && yarn run build-browserify && yarn run build-babili",
+ "build-date-fns": "env PACKAGE_OUTPUT_PATH=\"$(pwd)/node_modules/date-fns\" ../../scripts/build/package.sh",
+ "build-browserify": "yarn run build-browserify-example && yarn run build-browserify-fp && yarn run build-browserify-misc",
+ "build-browserify-example": "mkdir -p dist && browserify example.js -o dist/example.js",
+ "build-browserify-fp": "mkdir -p dist && browserify fp.js -o dist/fp.js",
+ "build-browserify-misc": "mkdir -p dist && browserify misc.js -o dist/misc.js",
+ "build-babili": "yarn run build-babili-example && yarn run build-babili-fp && yarn run build-babili-misc && yarn run stats-size",
+ "build-babili-example": "babili dist/example.js --out-file dist/example.min.js --minified --no-comments",
+ "build-babili-fp": "babili dist/fp.js --out-file dist/fp.min.js --minified --no-comments",
+ "build-babili-misc": "babili dist/misc.js --out-file dist/misc.min.js --minified --no-comments",
+ "stats-size": "gzip-size dist/example.min.js | pretty-bytes",
+ "test": "yarn run test-example && yarn run test-fp && yarn run test-misc",
+ "test-example": "test $(env TZ=UTC node ./dist/example.min.js) = true",
+ "test-fp": "test $(env TZ=UTC node ./dist/fp.min.js) = true",
+ "test-misc": "test $(env TZ=UTC node ./dist/misc.min.js) = true"
+ }
+}
diff --git a/date-fns/examples/browserify/yarn.lock b/date-fns/examples/browserify/yarn.lock
new file mode 100644
index 0000000..e5f3522
--- /dev/null
+++ b/date-fns/examples/browserify/yarn.lock
@@ -0,0 +1,2454 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+JSONStream@^1.0.3:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.0.tgz#680ab9ac6572a8a1a207e0b38721db1c77b215e5"
+ integrity sha1-aAq5rGVyqKGiB+CzhyHbHHeyFeU=
+ dependencies:
+ jsonparse "^1.2.0"
+ through ">=2.2.7 <3"
+
+abbrev@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+acorn@^1.0.3:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014"
+ integrity sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=
+
+acorn@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7"
+ integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=
+
+acorn@^3.1.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+ integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
+
+ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+ integrity sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ integrity sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+aproba@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+ integrity sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA=
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ integrity sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+ integrity sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=
+
+array-filter@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+ integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-map@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+ integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=
+
+array-reduce@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
+ integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+astw@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astw/-/astw-2.0.0.tgz#08121ac8288d35611c0ceec663f6cd545604897d"
+ integrity sha1-CBIayCiNNWEcDO7GY/bNVFYEiX0=
+ dependencies:
+ acorn "^1.0.3"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+ integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
+
+aws4@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
+ integrity sha1-Cin/t5wxyecS7rCH6OemS0pW11U=
+
+babel-cli@^6.10.1:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.18.0.tgz#92117f341add9dead90f6fa7d0a97c0cc08ec186"
+ integrity sha1-khF/NBrdnerZD2+n0Kl8DMCOwYY=
+ dependencies:
+ babel-core "^6.18.0"
+ babel-polyfill "^6.16.0"
+ babel-register "^6.18.0"
+ babel-runtime "^6.9.0"
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.0.0"
+ glob "^5.0.5"
+ lodash "^4.2.0"
+ output-file-sync "^1.1.0"
+ path-is-absolute "^1.0.0"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+ v8flags "^2.0.10"
+ optionalDependencies:
+ chokidar "^1.0.0"
+
+babel-code-frame@^6.20.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26"
+ integrity sha1-uWj4OQkPmovG1Bk4+5bLhPc4eyY=
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^2.0.0"
+
+babel-core@^6.18.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724"
+ integrity sha1-dVJUgMIcgD+CbvOGfSLBnwgKNyQ=
+ dependencies:
+ babel-code-frame "^6.20.0"
+ babel-generator "^6.21.0"
+ babel-helpers "^6.16.0"
+ babel-messages "^6.8.0"
+ babel-register "^6.18.0"
+ babel-runtime "^6.20.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.21.0"
+ babel-types "^6.21.0"
+ babylon "^6.11.0"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.21.0.tgz#605f1269c489a1c75deeca7ea16d43d4656c8494"
+ integrity sha1-YF8SacSJocdd7sp+oW1D1GVshJQ=
+ dependencies:
+ babel-messages "^6.8.0"
+ babel-runtime "^6.20.0"
+ babel-types "^6.21.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+
+babel-helper-flip-expressions@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.0.1.tgz#c2ba1599426e7928333fd5c08eee6cdf8328c848"
+ integrity sha1-wroVmUJueSgzP9XAju5s34MoyEg=
+
+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.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.0.1.tgz#ed74553b883e68226ae45f989a99b02c190f105a"
+ integrity sha1-7XRVO4g+aCJq5F+YmpmwLBkPEFo=
+
+babel-helper-remove-or-void@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.0.1.tgz#f602790e465acf2dfbe84fb3dd210c43a2dd7262"
+ integrity sha1-9gJ5DkZazy376E+z3SEMQ6LdcmI=
+
+babel-helper-to-multiple-sequence-expressions@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.0.2.tgz#07d5d2e674aa62962ac9e0000b539920c301c4b9"
+ integrity sha1-B9XS5nSqYpYqyeAAC1OZIMMBxLk=
+
+babel-helpers@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3"
+ integrity sha1-EJXsENmSeUYFU+Z+s+7plz04Z+M=
+ dependencies:
+ babel-runtime "^6.0.0"
+ babel-template "^6.16.0"
+
+babel-messages@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9"
+ integrity sha1-v1BHNsqWfm1l7wrbWipflHyODrk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-minify-constant-folding@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.0.1.tgz#d4abb5b62ccfc094bdce2a318b2f94fda5a73e29"
+ integrity sha1-1Ku1tizPwJS9zioxiy+U/aWnPik=
+
+babel-plugin-minify-dead-code-elimination@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.1.tgz#1a0133fcd06c7fa477b01c193ba3213c8944ff01"
+ integrity sha1-GgEz/NBsf6R3sBwZO6MhPIlE/wE=
+ dependencies:
+ babel-helper-remove-or-void "^0.0.1"
+ lodash.some "^4.6.0"
+
+babel-plugin-minify-flip-comparisons@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.0.1.tgz#679f4493a692afc705c4b79fde1dadb535c4eb08"
+ integrity sha1-Z59Ek6aSr8cFxLef3h2ttTXE6wg=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-minify-guarded-expressions@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.0.3.tgz#6da1caa0b6abda964647377bd5e19afdbf91cae8"
+ integrity sha1-baHKoLar2pZGRzd71eGa/b+Ryug=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.1"
+
+babel-plugin-minify-infinity@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.0.1.tgz#9394a4defc9db56da76f13fedd5d5e2d486a4299"
+ integrity sha1-k5Sk3vydtW2nbxP+3V1eLUhqQpk=
+
+babel-plugin-minify-mangle-names@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.0.4.tgz#94812c0c82320f7af97511b7d598527933973197"
+ integrity sha1-lIEsDIIyD3r5dRG31ZhSeTOXMZc=
+
+babel-plugin-minify-numeric-literals@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.0.1.tgz#9597e6c31154d7daf3744d0bd417c144b275bd53"
+ integrity sha1-lZfmwxFU19rzdE0L1BfBRLJ1vVM=
+
+babel-plugin-minify-replace@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.0.1.tgz#5d5aea7cb9899245248d1ee9ce7a2fe556a8facc"
+ integrity sha1-XVrqfLmJkkUkjR7pznov5Vao+sw=
+
+babel-plugin-minify-simplify@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.0.4.tgz#940d0dd0db6d4c4c1c51fc34c3c6e0d0ee1d67e9"
+ integrity sha1-lA0N0NttTEwcUfw0w8bg0O4dZ+k=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.1"
+ babel-helper-is-nodes-equiv "^0.0.1"
+ babel-helper-to-multiple-sequence-expressions "^0.0.2"
+
+babel-plugin-minify-type-constructors@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.0.2.tgz#4f9a28951e776f31ac11a29cd58cf9eef8b2e292"
+ integrity sha1-T5oolR53bzGsEaKc1Yz57viy4pI=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-transform-member-expression-literals@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.0.tgz#718755a70492a895d8f41810afa9998bc09f57b9"
+ integrity sha1-cYdVpwSSqJXY9BgQr6mZi8CfV7k=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-merge-sibling-variables@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.0.tgz#724074e4ef78b601fcf9a34165c972a1b6117e99"
+ integrity sha1-ckB05O94tgH8+aNBZclyobYRfpk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-minify-booleans@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.0.tgz#b1a48864a727847696b84eae36fa4d085a54b42b"
+ integrity sha1-saSIZKcnhHaWuE6uNvpNCFpUtCs=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-property-literals@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.0.tgz#a65b2e6e1274d25df0f3a4c5e85bc8f1cdd9e019"
+ integrity sha1-plsubhJ00l3w86TF6FvI8c3Z4Bk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-regexp-constructors@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.0.1.tgz#c5878cc4d78437e99d02790d325f163741741ff5"
+ integrity sha1-xYeMxNeEN+mdAnkNMl8WN0F0H/U=
+
+babel-plugin-transform-simplify-comparison-operators@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.0.tgz#0183d65bfdc54c80d922a3a9b3008e25fa9d32a7"
+ integrity sha1-AYPWW/3FTIDZIqOpswCOJfqdMqc=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-undefined-to-void@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.0.tgz#bc5b6b4908d3b1262170e67cb3963903ddce167e"
+ integrity sha1-vFtrSQjTsSYhcOZ8s5Y5A93OFn4=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-polyfill@^6.16.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.20.0.tgz#de4a371006139e20990aac0be367d398331204e7"
+ integrity sha1-3ko3EAYTniCZCqwL42fTmDMSBOc=
+ dependencies:
+ babel-runtime "^6.20.0"
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-preset-babili@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/babel-preset-babili/-/babel-preset-babili-0.0.8.tgz#aeba08a21171166e448fd4226c3cf03bcf682122"
+ integrity sha1-rroIohFxFm5Ej9QibDzwO89oISI=
+ dependencies:
+ babel-plugin-minify-constant-folding "^0.0.1"
+ babel-plugin-minify-dead-code-elimination "^0.1.0"
+ babel-plugin-minify-flip-comparisons "^0.0.1"
+ babel-plugin-minify-guarded-expressions "^0.0.3"
+ babel-plugin-minify-infinity "^0.0.1"
+ babel-plugin-minify-mangle-names "^0.0.4"
+ babel-plugin-minify-numeric-literals "^0.0.1"
+ babel-plugin-minify-replace "^0.0.1"
+ babel-plugin-minify-simplify "^0.0.4"
+ babel-plugin-minify-type-constructors "^0.0.2"
+ babel-plugin-transform-member-expression-literals "^6.8.0"
+ babel-plugin-transform-merge-sibling-variables "^6.8.0"
+ babel-plugin-transform-minify-booleans "^6.8.0"
+ babel-plugin-transform-property-literals "^6.8.0"
+ babel-plugin-transform-regexp-constructors "^0.0.1"
+ babel-plugin-transform-simplify-comparison-operators "^6.8.0"
+ babel-plugin-transform-undefined-to-void "^6.8.0"
+
+babel-register@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68"
+ integrity sha1-iS4uA4ZQeN2QrSxxURHsREmzKmg=
+ dependencies:
+ babel-core "^6.18.0"
+ babel-runtime "^6.11.6"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.20.0, babel-runtime@^6.9.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f"
+ integrity sha1-hzAL3PTNdw8JvwBIxkIE4XgG0W8=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
+ integrity sha1-4UndGp8Do1+BfdvE0EgZiOfryMo=
+ dependencies:
+ babel-runtime "^6.9.0"
+ babel-traverse "^6.16.0"
+ babel-types "^6.16.0"
+ babylon "^6.11.0"
+ lodash "^4.2.0"
+
+babel-traverse@^6.16.0, babel-traverse@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad"
+ integrity sha1-acY2WATxpPaesSE/hbAKgYuMIa0=
+ dependencies:
+ babel-code-frame "^6.20.0"
+ babel-messages "^6.8.0"
+ babel-runtime "^6.20.0"
+ babel-types "^6.21.0"
+ babylon "^6.11.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.16.0, babel-types@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2"
+ integrity sha1-MUuSFoiR7204Brf3qRf9+HwRpLI=
+ dependencies:
+ babel-runtime "^6.20.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babili@^0.0.9:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/babili/-/babili-0.0.9.tgz#cf1277f34d8265101847e2c5ac11771684f2b1d4"
+ integrity sha1-zxJ3802CZRAYR+LFrBF3FoTysdQ=
+ dependencies:
+ babel-cli "^6.10.1"
+ babel-preset-babili "^0.0.8"
+
+babylon@^6.11.0:
+ version "6.14.1"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
+ integrity sha1-lWJ1+rcnU62bNDXXr+WPi/CimBU=
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
+
+base64-js@^1.0.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+ integrity sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
+ integrity sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+browser-pack@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.2.tgz#f86cd6cef4f5300c8e63e07a4d512f65fbff4531"
+ integrity sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=
+ dependencies:
+ JSONStream "^1.0.3"
+ combine-source-map "~0.7.1"
+ defined "^1.0.0"
+ through2 "^2.0.0"
+ umd "^3.0.0"
+
+browser-resolve@^1.11.0, browser-resolve@^1.7.0:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+ integrity sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=
+ dependencies:
+ resolve "1.1.7"
+
+browserify-aes@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
+ integrity sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=
+ dependencies:
+ inherits "^2.0.1"
+
+browserify-zlib@~0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
+ dependencies:
+ pako "~0.2.0"
+
+browserify@^13.3.0:
+ version "13.3.0"
+ resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.3.0.tgz#b5a9c9020243f0c70e4675bec8223bc627e415ce"
+ integrity sha1-tanJAgJD8McORnW+yCI7xifkFc4=
+ dependencies:
+ JSONStream "^1.0.3"
+ assert "^1.4.0"
+ browser-pack "^6.0.1"
+ browser-resolve "^1.11.0"
+ browserify-zlib "~0.1.2"
+ buffer "^4.1.0"
+ cached-path-relative "^1.0.0"
+ concat-stream "~1.5.1"
+ console-browserify "^1.1.0"
+ constants-browserify "~1.0.0"
+ crypto-browserify "^3.0.0"
+ defined "^1.0.0"
+ deps-sort "^2.0.0"
+ domain-browser "~1.1.0"
+ duplexer2 "~0.1.2"
+ events "~1.1.0"
+ glob "^7.1.0"
+ has "^1.0.0"
+ htmlescape "^1.1.0"
+ https-browserify "~0.0.0"
+ inherits "~2.0.1"
+ insert-module-globals "^7.0.0"
+ labeled-stream-splicer "^2.0.0"
+ module-deps "^4.0.8"
+ os-browserify "~0.1.1"
+ parents "^1.0.1"
+ path-browserify "~0.0.0"
+ process "~0.11.0"
+ punycode "^1.3.2"
+ querystring-es3 "~0.2.0"
+ read-only-stream "^2.0.0"
+ readable-stream "^2.0.2"
+ resolve "^1.1.4"
+ shasum "^1.0.0"
+ shell-quote "^1.6.1"
+ stream-browserify "^2.0.0"
+ stream-http "^2.0.0"
+ string_decoder "~0.10.0"
+ subarg "^1.0.0"
+ syntax-error "^1.1.1"
+ through2 "^2.0.0"
+ timers-browserify "^1.0.1"
+ tty-browserify "~0.0.0"
+ url "~0.11.0"
+ util "~0.10.1"
+ vm-browserify "~0.0.1"
+ xtend "^4.0.0"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+buffer@^4.1.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+cached-path-relative@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.0.tgz#d1094c577fbd9a8b8bd43c96af6188aa205d05f4"
+ integrity sha1-0QlMV3+9mouL1DyWr2GIqiBdBfQ=
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+ integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c=
+
+chalk@^1.1.0, chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chokidar@^1.0.0:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+ integrity sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+combine-source-map@~0.7.1:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e"
+ integrity sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=
+ dependencies:
+ convert-source-map "~1.1.0"
+ inline-source-map "~0.6.0"
+ lodash.memoize "~3.0.3"
+ source-map "~0.5.3"
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.8.1, commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@~1.5.0, concat-stream@~1.5.1:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266"
+ integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY=
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "~2.0.0"
+ typedarray "~0.0.5"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+convert-source-map@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
+ integrity sha1-6fPpxuJyjvwmdmlqcOs4L3MQamc=
+
+convert-source-map@~1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860"
+ integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=
+
+core-js@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+ integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
+ dependencies:
+ boom "2.x.x"
+
+crypto-browserify@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
+ integrity sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=
+ dependencies:
+ browserify-aes "0.4.0"
+ pbkdf2-compat "2.0.1"
+ ripemd160 "0.2.0"
+ sha.js "2.2.6"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+debug@^2.1.1, debug@^2.2.0, debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
+ dependencies:
+ ms "0.7.1"
+
+decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+ integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=
+
+defined@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+ integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+deps-sort@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5"
+ integrity sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=
+ dependencies:
+ JSONStream "^1.0.3"
+ shasum "^1.0.0"
+ subarg "^1.0.0"
+ through2 "^2.0.0"
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+detective@^4.0.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/detective/-/detective-4.3.2.tgz#77697e2e7947ac3fe7c8e26a6d6f115235afa91c"
+ integrity sha1-d2l+LnlHrD/nyOJqbW8RUjWvqRw=
+ dependencies:
+ acorn "^3.1.0"
+ defined "^1.0.0"
+
+domain-browser@~1.1.0:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=
+
+duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+ integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=
+ dependencies:
+ readable-stream "^2.0.2"
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
+ dependencies:
+ jsbn "~0.1.0"
+
+error-ex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+ integrity sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+events@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+ integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+ integrity sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+ integrity sha1-4QgOBljjALBilJkMxw4VAiNf1VA=
+
+filename-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+ integrity sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+for-in@^0.1.5:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
+ integrity sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=
+
+for-own@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
+ integrity sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=
+ dependencies:
+ for-in "^0.1.5"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ integrity sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs-readdir-recursive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
+ integrity sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.0.0:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558"
+ integrity sha1-hTfz8SJyZ4dltP1lKMDx9m+PRVg=
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ integrity sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
+ integrity sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=
+
+gauge@~2.7.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774"
+ integrity sha1-Fc7MMbAtBTRaXWsOFxzbOtIwd3Q=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^0.2.0"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+ integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
+ dependencies:
+ is-property "^1.0.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+ integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ integrity sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^5.0.5:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.5, glob@^7.1.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.0.0:
+ version "9.14.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
+ integrity sha1-iFmTavADh0EmMFOznQ52yiQeQDQ=
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.4:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+gzip-size-cli@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size-cli/-/gzip-size-cli-1.0.0.tgz#97ef47b1600a2ad8f9c31539661eab39ec36caed"
+ integrity sha1-l+9HsWAKKtj5wxU5Zh6rOew2yu0=
+ dependencies:
+ gzip-size "^3.0.0"
+ meow "^3.3.0"
+
+gzip-size@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
+ dependencies:
+ duplexer "^0.1.1"
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+ integrity sha1-hGFzP1OLCDfJNh45qauelwTcLyg=
+ dependencies:
+ function-bind "^1.0.2"
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+ integrity sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=
+
+htmlescape@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351"
+ integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+ integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+inline-source-map@~0.6.0:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5"
+ integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=
+ dependencies:
+ source-map "~0.5.3"
+
+insert-module-globals@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3"
+ integrity sha1-wDv04BywhtW15azorQr+eInWOMM=
+ dependencies:
+ JSONStream "^1.0.3"
+ combine-source-map "~0.7.1"
+ concat-stream "~1.5.1"
+ is-buffer "^1.1.0"
+ lexical-scope "^1.2.0"
+ process "~0.11.0"
+ through2 "^2.0.0"
+ xtend "^4.0.0"
+
+invariant@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A=
+ dependencies:
+ loose-envify "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2, is-buffer@^1.1.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+ integrity sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+ integrity sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-my-json-valid@^2.12.4:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ integrity sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isarray@~0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ integrity sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=
+ dependencies:
+ jsbn "~0.1.0"
+
+js-tokens@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
+ integrity sha1-eZA/VWPud4zBFi5tzxoAJ8l/nLU=
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+ integrity sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45"
+ integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsonparse@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.2.0.tgz#5c0c5685107160e72fe7489bddea0b44c2bc67bd"
+ integrity sha1-XAxWhRBxYOcv50ib3eoLRMK8Z70=
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+ integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ integrity sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ integrity sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=
+ dependencies:
+ is-buffer "^1.0.2"
+
+labeled-stream-splicer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59"
+ integrity sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=
+ dependencies:
+ inherits "^2.0.1"
+ isarray "~0.0.1"
+ stream-splicer "^2.0.0"
+
+lexical-scope@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4"
+ integrity sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=
+ dependencies:
+ astw "^2.0.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+lodash.memoize@~3.0.3:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
+ integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=
+
+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@^4.2.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+ integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
+
+loose-envify@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8"
+ integrity sha1-ayYkjEL21PpLDYVC947fzeNWQqg=
+ dependencies:
+ js-tokens "^2.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+meow@^3.3.0, meow@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+mime-db@~1.25.0:
+ version "1.25.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
+ integrity sha1-wY29fHOl2/b0SgJNwNFloeexw5I=
+
+mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.13"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
+ integrity sha1-4HqqnGxrmnyjASxpADrSWjnpKog=
+ dependencies:
+ mime-db "~1.25.0"
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+module-deps@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.0.8.tgz#55fd70623399706c3288bef7a609ff1e8c0ed2bb"
+ integrity sha1-Vf1wYjOZcGwyiL73pgn/HowO0rs=
+ dependencies:
+ JSONStream "^1.0.3"
+ browser-resolve "^1.7.0"
+ cached-path-relative "^1.0.0"
+ concat-stream "~1.5.0"
+ defined "^1.0.0"
+ detective "^4.0.0"
+ duplexer2 "^0.1.2"
+ inherits "^2.0.1"
+ parents "^1.0.0"
+ readable-stream "^2.0.2"
+ resolve "^1.1.3"
+ stream-combiner2 "^1.1.1"
+ subarg "^1.0.0"
+ through2 "^2.0.0"
+ xtend "^4.0.0"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
+
+nan@^2.3.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
+ integrity sha1-qo8eNFMdgH6eJ3VbI0tKbsDBUqg=
+
+node-pre-gyp@^0.6.29:
+ version "0.6.32"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
+ integrity sha1-/EUrN25zGbPSVfXzSFPvb9j+H9U=
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ integrity sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+ integrity sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ integrity sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+ integrity sha1-ejs9DpgGPUP0wD8uiubNUahog6A=
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+once@^1.3.0, once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+os-browserify@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54"
+ integrity sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+output-file-sync@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+ integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=
+ dependencies:
+ graceful-fs "^4.1.4"
+ mkdirp "^0.5.1"
+ object-assign "^4.1.0"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
+
+parents@^1.0.0, parents@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751"
+ integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=
+ dependencies:
+ path-platform "~0.11.15"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+path-browserify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+ integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-platform@~0.11.15:
+ version "0.11.15"
+ resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2"
+ integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pbkdf2-compat@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
+ integrity sha1-tuDI+plJTZTgURV1gCpZpcFC8og=
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+pretty-bytes-cli@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes-cli/-/pretty-bytes-cli-2.0.0.tgz#e705662cffdc9c75291835333bc2f89ad3c033cf"
+ integrity sha1-5wVmLP/cnHUpGDUzO8L4mtPAM88=
+ dependencies:
+ get-stdin "^5.0.1"
+ meow "^3.6.0"
+ pretty-bytes "^4.0.0"
+
+pretty-bytes@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+ integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=
+
+private@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1"
+ integrity sha1-VcapdtD5uvuZJIUTUP5HubX7t8E=
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+process@~0.11.0:
+ version "0.11.9"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+ integrity sha1-e9WtIapiU+fahoImTx4R0RwDGME=
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.3.2, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+ integrity sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=
+
+querystring-es3@~0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ integrity sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+rc@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
+ integrity sha1-Q2UbdrauU7XIAvEVH6P8OwWZack=
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~1.0.4"
+
+read-only-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0"
+ integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=
+ dependencies:
+ readable-stream "^2.0.2"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.1.0, readable-stream@^2.1.5:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ integrity sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.0.0:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
+ integrity sha1-j5A0HmilPMySh4jaz80Rs265t44=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regenerator-runtime@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
+ integrity sha1-JX9BlhzkRVixj3gUr0jBdVn5+us=
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ integrity sha1-mxpsNdTQ3871cRrmUejp09cRQUU=
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^1.1.3, resolve@^1.1.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c"
+ integrity sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=
+
+rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
+ integrity sha1-K/GYveFnys+lHAqSjoS2i74XH84=
+
+"semver@2 || 3 || 4 || 5", semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
+sha.js@2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
+ integrity sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=
+
+sha.js@~2.4.4:
+ version "2.4.8"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f"
+ integrity sha1-NwaMLEdra69ALRSknGf1l5IfY08=
+ dependencies:
+ inherits "^2.0.1"
+
+shasum@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f"
+ integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8=
+ dependencies:
+ json-stable-stringify "~0.0.0"
+ sha.js "~2.4.4"
+
+shell-quote@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
+ integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=
+ dependencies:
+ array-filter "~0.0.0"
+ array-map "~0.0.0"
+ array-reduce "~0.0.0"
+ jsonify "~0.0.0"
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
+ dependencies:
+ hoek "2.x.x"
+
+source-map-support@^0.4.2:
+ version "0.4.8"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b"
+ integrity sha1-SHGRjYo68HKJGC6XTjKEQyey6Ys=
+ dependencies:
+ source-map "^0.5.3"
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.3:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+ integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+ integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+ integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=
+
+sshpk@^1.7.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
+ integrity sha1-MOGl0ykkSXShr2FREznVla9mOLA=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stream-browserify@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-combiner2@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
+ integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4=
+ dependencies:
+ duplexer2 "~0.1.0"
+ readable-stream "^2.0.2"
+
+stream-http@^2.0.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.0.tgz#adf3309ced17624ebfb7ef13e6ac4cfe405a8b12"
+ integrity sha1-rfMwnO0XYk6/t+8T5qxM/kBaixI=
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.1.0"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-splicer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83"
+ integrity sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.2"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@~0.10.0, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+ integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+ integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
+
+subarg@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
+ integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI=
+ dependencies:
+ minimist "^1.1.0"
+
+supports-color@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+ integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+syntax-error@^1.1.1:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.1.6.tgz#b4549706d386cc1c1dc7c2423f18579b6cade710"
+ integrity sha1-tFSXBtOGzBwdx8JCPxhXm2yt5xA=
+ dependencies:
+ acorn "^2.7.0"
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ integrity sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+through2@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
+"through@>=2.2.7 <3":
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+timers-browserify@^1.0.1:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
+ integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=
+ dependencies:
+ process "~0.11.0"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
+ integrity sha1-8/XAw7pymafvmUJ+RGMyV63kMyA=
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ integrity sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=
+ dependencies:
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+tty-browserify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+ integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+typedarray@~0.0.5:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+umd@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e"
+ integrity sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=
+
+url@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+ integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA=
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3, util@~0.10.1:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+ integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=
+
+v8flags@^2.0.10:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881"
+ integrity sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=
+ dependencies:
+ user-home "^1.1.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ integrity sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=
+ dependencies:
+ extsprintf "1.0.2"
+
+vm-browserify@~0.0.1:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
+ dependencies:
+ indexof "0.0.1"
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ integrity sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=
+ dependencies:
+ string-width "^1.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
diff --git a/date-fns/examples/flow/.babelrc b/date-fns/examples/flow/.babelrc
new file mode 100644
index 0000000..d42eaa2
--- /dev/null
+++ b/date-fns/examples/flow/.babelrc
@@ -0,0 +1,3 @@
+{
+ "plugins": ["transform-flow-strip-types"]
+}
diff --git a/date-fns/examples/flow/.flowconfig b/date-fns/examples/flow/.flowconfig
new file mode 100644
index 0000000..3f7e2ef
--- /dev/null
+++ b/date-fns/examples/flow/.flowconfig
@@ -0,0 +1,2 @@
+[include]
+./node_modules/date-fns/
diff --git a/date-fns/examples/flow/README.md b/date-fns/examples/flow/README.md
new file mode 100644
index 0000000..a41934d
--- /dev/null
+++ b/date-fns/examples/flow/README.md
@@ -0,0 +1,12 @@
+# Usage With flow
+
+See [example.js.flow](./example.js.flow), [fp.js.flow](./fp.js.flow) and [misc.js.flow](./misc.js.flow) for source code examples.
+
+See [package.json scripts](./package.json) for CLI usage.
+
+## Build Example
+
+```sh
+yarn
+yarn run build
+```
diff --git a/date-fns/examples/flow/constants.js.flow b/date-fns/examples/flow/constants.js.flow
new file mode 100644
index 0000000..28d3317
--- /dev/null
+++ b/date-fns/examples/flow/constants.js.flow
@@ -0,0 +1,11 @@
+// @flow
+
+const dateFns = require('date-fns')
+const constants = require('date-fns/constants')
+const { minTime: fpMinTime } = require('date-fns/fp')
+
+console.log(
+ dateFns.maxTime === 8640000000000000 &&
+ dateFns.minTime === constants.minTime &&
+ constants.minTime === fpMinTime
+)
diff --git a/date-fns/examples/flow/example.js.flow b/date-fns/examples/flow/example.js.flow
new file mode 100644
index 0000000..3b06f0a
--- /dev/null
+++ b/date-fns/examples/flow/example.js.flow
@@ -0,0 +1,8 @@
+// @flow
+
+const format = require('date-fns/format')
+
+const dateString : Date = new Date(2017, 0, 25, 21, 28, 15)
+const formatString : string = 'dd.MM.yyyy HH:mm:ss'
+const result : string = format(dateString, formatString)
+console.log(result === '25.01.2017 21:28:15')
diff --git a/date-fns/examples/flow/fp.js.flow b/date-fns/examples/flow/fp.js.flow
new file mode 100644
index 0000000..3f35e53
--- /dev/null
+++ b/date-fns/examples/flow/fp.js.flow
@@ -0,0 +1,19 @@
+const addYears = require('date-fns/fp/addYears')
+const dateFns = require('date-fns/fp')
+const formatWithOptions = dateFns.formatWithOptions
+const eo = require('date-fns/locale/eo')
+
+const addFiveYears = addYears(5)
+const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy')
+
+const dates: Date[] = [
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(2017, 1 /* Feb */, 11),
+ new Date(2017, 6 /* Jul */, 2)
+]
+
+const formattedDates: string = dates
+ .map(date => dateToString(addFiveYears(date)))
+ .join(', ')
+
+console.log(formattedDates === '1 januaro 2022, 11 februaro 2022, 2 julio 2022')
diff --git a/date-fns/examples/flow/misc.js.flow b/date-fns/examples/flow/misc.js.flow
new file mode 100644
index 0000000..8a5d6c7
--- /dev/null
+++ b/date-fns/examples/flow/misc.js.flow
@@ -0,0 +1,9 @@
+// @flow
+
+const format = require('date-fns').format
+const eo = require('date-fns/locale/eo')
+
+const dateString : Date = new Date(2017, 0, 25, 21, 28, 15)
+const formatString : string = 'dd.MM.yyyy HH:mm:ss'
+const result : string = format(new Date(2017, 0, 25, 21, 28, 15), 'eeee, dd MMMM HH:mm:ss', {locale: eo})
+console.log(result === 'merkredo, 25 januaro 21:28:15')
diff --git a/date-fns/examples/flow/package.json b/date-fns/examples/flow/package.json
new file mode 100644
index 0000000..67c3fb9
--- /dev/null
+++ b/date-fns/examples/flow/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "date-fns-example-flow",
+ "version": "0.1.0",
+ "description": "Example of date-fns usage with flow",
+ "main": "example.js.flow",
+ "author": "Sasha Koss <koss@nocorp.me>",
+ "license": "MIT",
+ "dependencies": {
+ "babel-cli": "^6.22.2",
+ "babel-plugin-transform-flow-strip-types": "^6.22.0",
+ "flow-bin": "^0.38.0"
+ },
+ "scripts": {
+ "build": "yarn run build-date-fns && yarn run flow-check && yarn run build-babel",
+ "flow-check": "flow check",
+ "build-date-fns": "env PACKAGE_OUTPUT_PATH=\"$(pwd)/node_modules/date-fns\" ../../scripts/build/package.sh",
+ "build-babel": "yarn run build-babel-example && yarn run build-babel-fp && yarn run build-babel-misc && yarn build-babel-constants",
+ "build-babel-example": "mkdir -p dist && babel example.js.flow --out-file dist/example.js",
+ "build-babel-fp": "mkdir -p dist && babel fp.js.flow --out-file dist/fp.js",
+ "build-babel-misc": "mkdir -p dist && babel misc.js.flow --out-file dist/misc.js",
+ "build-babel-constants": "mkdir -p dist && babel constants.js.flow --out-file dist/constants.js",
+ "test": "yarn run test-example && yarn run test-fp && yarn run test-misc && yarn run test-constants",
+ "test-example": "test $(env TZ=UTC node ./dist/example.js) = true",
+ "test-fp": "test $(env TZ=UTC node ./dist/fp.js) = true",
+ "test-misc": "test $(env TZ=UTC node ./dist/misc.js) = true",
+ "test-constants": "test $(node ./dist/constants.js) = true"
+ }
+}
diff --git a/date-fns/examples/flow/yarn.lock b/date-fns/examples/flow/yarn.lock
new file mode 100644
index 0000000..db8f081
--- /dev/null
+++ b/date-fns/examples/flow/yarn.lock
@@ -0,0 +1,1432 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+abbrev@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ integrity sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+aproba@^1.0.3:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.0.tgz#4d8f047a318604e18e3c06a0e52230d3d19f147b"
+ integrity sha1-TY8EejGGBOGOPAag5SIw09GfFHs=
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ integrity sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+ integrity sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+ integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
+
+aws4@^1.2.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+ integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=
+
+babel-cli@^6.22.2:
+ version "6.22.2"
+ resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.22.2.tgz#3f814c8acf52759082b8fedd9627f938936ab559"
+ integrity sha1-P4FMis9SdZCCuP7dlif5OJNqtVk=
+ dependencies:
+ babel-core "^6.22.1"
+ babel-polyfill "^6.22.0"
+ babel-register "^6.22.0"
+ babel-runtime "^6.22.0"
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.0.0"
+ glob "^7.0.0"
+ lodash "^4.2.0"
+ output-file-sync "^1.1.0"
+ path-is-absolute "^1.0.0"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+ v8flags "^2.0.10"
+ optionalDependencies:
+ chokidar "^1.6.1"
+
+babel-code-frame@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+ integrity sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+babel-core@^6.22.0, babel-core@^6.22.1:
+ version "6.22.1"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648"
+ integrity sha1-nF/WWLoXctKNch9tJdlo/HriFkg=
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-generator "^6.22.0"
+ babel-helpers "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-register "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.1"
+ babel-types "^6.22.0"
+ babylon "^6.11.0"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805"
+ integrity sha1-1kK/SWGRGorcfGkrDJKX8yXNqAU=
+ dependencies:
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+
+babel-helpers@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c"
+ integrity sha1-0nX1XyJSuBAb/we8DFVt7aZXOSw=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-messages@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575"
+ integrity sha1-NgZqIU8SF+TtQWSGdmnss54+pXU=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-syntax-flow@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
+ integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=
+
+babel-plugin-transform-flow-strip-types@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
+ integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=
+ dependencies:
+ babel-plugin-syntax-flow "^6.18.0"
+ babel-runtime "^6.22.0"
+
+babel-polyfill@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b"
+ integrity sha1-GsmevcxrpNseJhjDh7IISoIVSjs=
+ dependencies:
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-register@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63"
+ integrity sha1-ph3YOXX5ykqefW7/MFlJTNXqTGM=
+ dependencies:
+ babel-core "^6.22.0"
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611"
+ integrity sha1-HPi0rGfHek3bDbKuH3TeUqxMphE=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb"
+ integrity sha1-QD0RCQWkYmsxeiofy487cyBLLts=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+ babylon "^6.11.0"
+ lodash "^4.2.0"
+
+babel-traverse@^6.22.0, babel-traverse@^6.22.1:
+ version "6.22.1"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f"
+ integrity sha1-O5XNa3Qn1vH3V3BJCPL8l0il9Z8=
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ babylon "^6.15.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db"
+ integrity sha1-KkR+jQ6iXSUSQJ5BdUef14zIsds=
+ dependencies:
+ babel-runtime "^6.22.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babylon@^6.11.0, babylon@^6.15.0:
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e"
+ integrity sha1-umXPoagOF1mw6J+1YuJ9zK5wNI4=
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+ integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c=
+
+chalk@^1.1.0, chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chokidar@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+ integrity sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.8.1, commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+convert-source-map@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
+ integrity sha1-6fPpxuJyjvwmdmlqcOs4L3MQamc=
+
+core-js@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+ integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
+ dependencies:
+ boom "2.x.x"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+debug@^2.1.1, debug@^2.2.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
+ integrity sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=
+ dependencies:
+ ms "0.7.2"
+
+debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
+ dependencies:
+ ms "0.7.1"
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+ integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
+ dependencies:
+ jsbn "~0.1.0"
+
+escape-string-regexp@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+ integrity sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+ integrity sha1-4QgOBljjALBilJkMxw4VAiNf1VA=
+
+filename-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+ integrity sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+flow-bin@^0.38.0:
+ version "0.38.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.38.0.tgz#3ae096d401c969cc8b5798253fb82381e2d0237a"
+ integrity sha1-OuCW1AHJacyLV5glP7gjgeLQI3o=
+
+for-in@^0.1.5:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
+ integrity sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=
+
+for-own@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
+ integrity sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=
+ dependencies:
+ for-in "^0.1.5"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ integrity sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs-readdir-recursive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
+ integrity sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.0.0:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558"
+ integrity sha1-hTfz8SJyZ4dltP1lKMDx9m+PRVg=
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ integrity sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gauge@~2.7.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09"
+ integrity sha1-HCOFX5YvF7OtPQ3HRD8wRULt/gk=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+ integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
+ dependencies:
+ is-property "^1.0.0"
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ integrity sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^7.0.0, glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.0.0:
+ version "9.14.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
+ integrity sha1-iFmTavADh0EmMFOznQ52yiQeQDQ=
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.4:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+invariant@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A=
+ dependencies:
+ loose-envify "^1.0.0"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+ integrity sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=
+
+is-dotfile@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+ integrity sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-my-json-valid@^2.12.4:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ integrity sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+isarray@1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ integrity sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=
+ dependencies:
+ jsbn "~0.1.0"
+
+js-tokens@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+ integrity sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+ integrity sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+ integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ integrity sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ integrity sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=
+ dependencies:
+ is-buffer "^1.0.2"
+
+lodash@^4.2.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+ integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
+
+loose-envify@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ integrity sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=
+ dependencies:
+ js-tokens "^3.0.0"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+mime-db@~1.26.0:
+ version "1.26.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff"
+ integrity sha1-6v/NDk/Gk1z4E02iRuLmw1MFrf8=
+
+mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.14"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee"
+ integrity sha1-9+99l1g/yvO30oK2+LVnnaselO4=
+ dependencies:
+ mime-db "~1.26.0"
+
+minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
+
+ms@0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+ integrity sha1-riXPJRKziFodldfwN4aNhDESR2U=
+
+nan@^2.3.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2"
+ integrity sha1-1bAWkSUzJql6K77p5hxV2NYDUeI=
+
+node-pre-gyp@^0.6.29:
+ version "0.6.33"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9"
+ integrity sha1-ZArFUZj2qSWXLgwWxKwmoDTV7Mk=
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+normalize-path@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+ integrity sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ integrity sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+output-file-sync@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+ integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=
+ dependencies:
+ graceful-fs "^4.1.4"
+ mkdirp "^0.5.1"
+ object-assign "^4.1.0"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+private@^0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
+ integrity sha1-aM5eih7woju1cMwoU3tTMqumPvE=
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+ integrity sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ integrity sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+rc@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
+ integrity sha1-Q2UbdrauU7XIAvEVH6P8OwWZack=
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~1.0.4"
+
+"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ integrity sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+regenerator-runtime@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
+ integrity sha1-JX9BlhzkRVixj3gUr0jBdVn5+us=
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ integrity sha1-mxpsNdTQ3871cRrmUejp09cRQUU=
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=
+ dependencies:
+ glob "^7.0.5"
+
+semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
+ dependencies:
+ hoek "2.x.x"
+
+source-map-support@^0.4.2:
+ version "0.4.11"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322"
+ integrity sha1-ZH+TmXizhTWQlTCIUwPa8jJ58yI=
+ dependencies:
+ source-map "^0.5.3"
+
+source-map@^0.5.0, source-map@^0.5.3:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+ integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
+
+sshpk@^1.7.0:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa"
+ integrity sha1-1agEziJpVRVjjnmNviMnPeBwpfo=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+ integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-json-comments@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+ integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ integrity sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+to-fast-properties@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
+ integrity sha1-8/XAw7pymafvmUJ+RGMyV63kMyA=
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ integrity sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=
+ dependencies:
+ punycode "^1.4.1"
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+ integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+ integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA=
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+ integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=
+
+v8flags@^2.0.10:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881"
+ integrity sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=
+ dependencies:
+ user-home "^1.1.1"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ integrity sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=
+ dependencies:
+ extsprintf "1.0.2"
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ integrity sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=
+ dependencies:
+ string-width "^1.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
diff --git a/date-fns/examples/lodash-fp/.babelrc b/date-fns/examples/lodash-fp/.babelrc
new file mode 100644
index 0000000..c13c5f6
--- /dev/null
+++ b/date-fns/examples/lodash-fp/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["es2015"]
+}
diff --git a/date-fns/examples/lodash-fp/README.md b/date-fns/examples/lodash-fp/README.md
new file mode 100644
index 0000000..3e8482c
--- /dev/null
+++ b/date-fns/examples/lodash-fp/README.md
@@ -0,0 +1,23 @@
+# Usage With lodash FP
+
+See [example.js](./example.js) for source code example.
+
+See [package.json scripts](./package.json) for CLI usage.
+
+## Build Example
+
+```sh
+yarn
+yarn run build
+```
+
+See ./dist for output.
+
+## Minimal Build Size
+
+You can see the build size:
+
+```sh
+gzip-size dist/example.min.js | pretty-bytes
+#=> 23.4 kB
+```
diff --git a/date-fns/examples/lodash-fp/example.js b/date-fns/examples/lodash-fp/example.js
new file mode 100644
index 0000000..3a92f22
--- /dev/null
+++ b/date-fns/examples/lodash-fp/example.js
@@ -0,0 +1,30 @@
+import addYears from 'date-fns/fp/addYears'
+import formatWithOptions from 'date-fns/fp/formatWithOptions'
+import parseISO from 'date-fns/fp/parseISO'
+import eo from 'date-fns/locale/eo'
+
+import compose from 'lodash/fp/compose'
+import toUpper from 'lodash/fp/toUpper'
+import isEqual from 'lodash/isEqual'
+
+const addFiveYears = addYears(5)
+const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy')
+
+const dates = ['2017-01-01', '2017-02-11', '2017-07-02']
+
+const formattedDates = dates.map(
+ compose(
+ toUpper,
+ dateToString,
+ addFiveYears,
+ parseISO
+ )
+)
+
+console.log(
+ isEqual(formattedDates, [
+ '1 JANUARO 2022',
+ '11 FEBRUARO 2022',
+ '2 JULIO 2022'
+ ])
+)
diff --git a/date-fns/examples/lodash-fp/package.json b/date-fns/examples/lodash-fp/package.json
new file mode 100644
index 0000000..b833d0c
--- /dev/null
+++ b/date-fns/examples/lodash-fp/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "date-fns-example-babel",
+ "version": "0.1.0",
+ "description": "Example of date-fns usage with webpack 1.x, babel and lodash",
+ "main": "example.js",
+ "author": "Sasha Koss <koss@nocorp.me>",
+ "license": "MIT",
+ "dependencies": {
+ "babel-core": "^6.22.1",
+ "babel-loader": "6",
+ "babel-preset-babili": "^0.0.11",
+ "babel-preset-es2015": "^6.22.0",
+ "babili": "^0.0.11",
+ "gzip-size-cli": "^1.0.0",
+ "lodash": "^4.17.4",
+ "pretty-bytes-cli": "^2.0.0",
+ "webpack": "1"
+ },
+ "scripts": {
+ "build": "yarn run build-date-fns && yarn run build-webpack && yarn run build-babili",
+ "build-date-fns": "env PACKAGE_OUTPUT_PATH=\"$(pwd)/node_modules/date-fns\" ../../scripts/build/package.sh",
+ "build-webpack": "webpack",
+ "build-babili": "babili dist/example.js --out-file dist/example.min.js --minified --no-comments && yarn run stats-size",
+ "stats-size": "gzip-size dist/example.min.js | pretty-bytes",
+ "test": "test $(env TZ=UTC node ./dist/example.min.js) = true"
+ }
+}
diff --git a/date-fns/examples/lodash-fp/webpack.config.js b/date-fns/examples/lodash-fp/webpack.config.js
new file mode 100644
index 0000000..ec54003
--- /dev/null
+++ b/date-fns/examples/lodash-fp/webpack.config.js
@@ -0,0 +1,14 @@
+module.exports = {
+ entry: './example.js',
+ output: {
+ path: './dist',
+ filename: 'example.js'
+ },
+ module: {
+ loaders: [{
+ test: /\.js$/,
+ exclude: /node_modules/,
+ loader: 'babel-loader'
+ }]
+ }
+}
diff --git a/date-fns/examples/lodash-fp/yarn.lock b/date-fns/examples/lodash-fp/yarn.lock
new file mode 100644
index 0000000..48ff219
--- /dev/null
+++ b/date-fns/examples/lodash-fp/yarn.lock
@@ -0,0 +1,2779 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+abbrev@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+acorn@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+ integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+ integrity sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ integrity sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+aproba@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+ integrity sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA=
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ integrity sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+ integrity sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+ integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+
+async@^0.9.0:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+ integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
+
+async@^1.3.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+
+async@~0.2.6:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+ integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
+
+aws4@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
+ integrity sha1-Cin/t5wxyecS7rCH6OemS0pW11U=
+
+babel-cli@^6.10.1:
+ version "6.22.2"
+ resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.22.2.tgz#3f814c8acf52759082b8fedd9627f938936ab559"
+ integrity sha1-P4FMis9SdZCCuP7dlif5OJNqtVk=
+ dependencies:
+ babel-core "^6.22.1"
+ babel-polyfill "^6.22.0"
+ babel-register "^6.22.0"
+ babel-runtime "^6.22.0"
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.0.0"
+ glob "^7.0.0"
+ lodash "^4.2.0"
+ output-file-sync "^1.1.0"
+ path-is-absolute "^1.0.0"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+ v8flags "^2.0.10"
+ optionalDependencies:
+ chokidar "^1.6.1"
+
+babel-code-frame@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+ integrity sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+babel-core@^6.22.0, babel-core@^6.22.1:
+ version "6.22.1"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648"
+ integrity sha1-nF/WWLoXctKNch9tJdlo/HriFkg=
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-generator "^6.22.0"
+ babel-helpers "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-register "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.1"
+ babel-types "^6.22.0"
+ babylon "^6.11.0"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805"
+ integrity sha1-1kK/SWGRGorcfGkrDJKX8yXNqAU=
+ dependencies:
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+
+babel-helper-call-delegate@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef"
+ integrity sha1-EZkhtWEg8X6drj90tPXMe8wbN+8=
+ dependencies:
+ babel-helper-hoist-variables "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-define-map@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7"
+ integrity sha1-lUTpUCstbf59AP9g6CvVp6ielbc=
+ dependencies:
+ babel-helper-function-name "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ lodash "^4.2.0"
+
+babel-helper-evaluate-path@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.0.3.tgz#1d103ac9d4a59e5d431842212f151785f7ac547b"
+ integrity sha1-HRA6ydSlnl1DGEIhLxUXhfesVHs=
+
+babel-helper-flip-expressions@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.0.2.tgz#7bab2cf61162bc92703e9b298ef512bcf77d6787"
+ integrity sha1-e6ss9hFivJJwPpspjvUSvPd9Z4c=
+
+babel-helper-function-name@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc"
+ integrity sha1-UfG9xLuJsV9XqbJJ8z10KBbcvvw=
+ dependencies:
+ babel-helper-get-function-arity "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-get-function-arity@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce"
+ integrity sha1-C+tGStadxzR0EKxq3p8DpQY09c4=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-hoist-variables@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72"
+ integrity sha1-Pqy/cx2AcFhF3S6XGPYAz7m0unI=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.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.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.0.1.tgz#ed74553b883e68226ae45f989a99b02c190f105a"
+ integrity sha1-7XRVO4g+aCJq5F+YmpmwLBkPEFo=
+
+babel-helper-mark-eval-scopes@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.0.2.tgz#909fd1f2384570cd3003283773852d9d63922a37"
+ integrity sha1-kJ/R8jhFcM0wAyg3c4UtnWOSKjc=
+
+babel-helper-optimise-call-expression@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15"
+ integrity sha1-+NXUtApuJgWmp/nVN7WBvqN1bRU=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-regex@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d"
+ integrity sha1-efUyvhZHsfDuNHS19cPaWAAdJH0=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ lodash "^4.2.0"
+
+babel-helper-remove-or-void@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.0.1.tgz#f602790e465acf2dfbe84fb3dd210c43a2dd7262"
+ integrity sha1-9gJ5DkZazy376E+z3SEMQ6LdcmI=
+
+babel-helper-replace-supers@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42"
+ integrity sha1-H87iJwZXVIkIw02xa8w0X5hQz0I=
+ dependencies:
+ babel-helper-optimise-call-expression "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-to-multiple-sequence-expressions@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.0.3.tgz#c789a0faccd2669c51234be2cea7a3e5a0573c25"
+ integrity sha1-x4mg+szSZpxRI0vizqej5aBXPCU=
+
+babel-helpers@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c"
+ integrity sha1-0nX1XyJSuBAb/we8DFVt7aZXOSw=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-loader@6:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca"
+ integrity sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=
+ dependencies:
+ find-cache-dir "^0.1.1"
+ loader-utils "^0.2.16"
+ mkdirp "^0.5.1"
+ object-assign "^4.0.1"
+
+babel-messages@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575"
+ integrity sha1-NgZqIU8SF+TtQWSGdmnss54+pXU=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-check-es2015-constants@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+ integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-minify-constant-folding@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.0.4.tgz#b6e231026a6035e88ceadd206128d7db2b5c15e6"
+ integrity sha1-tuIxAmpgNeiM6t0gYSjX2ytcFeY=
+ dependencies:
+ babel-helper-evaluate-path "^0.0.3"
+ jsesc "^2.4.0"
+
+babel-plugin-minify-dead-code-elimination@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.3.tgz#7882c014619934cb9aca69d85c968ed124ac97e3"
+ integrity sha1-eILAFGGZNMuaymnYXJaO0SSsl+M=
+ dependencies:
+ babel-helper-mark-eval-scopes "^0.0.2"
+ babel-helper-remove-or-void "^0.0.1"
+ lodash.some "^4.6.0"
+
+babel-plugin-minify-flip-comparisons@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.0.2.tgz#7d0953aa5876ede6118966bda9edecc63bf346ab"
+ integrity sha1-fQlTqlh27eYRiWa9qe3sxjvzRqs=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-minify-guarded-expressions@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.0.4.tgz#957104a760e6a7ffd967005a7a11621bb42fd11c"
+ integrity sha1-lXEEp2Dmp//ZZwBaehFiG7Qv0Rw=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.2"
+
+babel-plugin-minify-infinity@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.0.3.tgz#4cc99b61d12b434ce80ad675103335c589cba9a1"
+ integrity sha1-TMmbYdErQ0zoCtZ1EDM1xYnLqaE=
+
+babel-plugin-minify-mangle-names@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.0.7.tgz#fcc5f9a4c4c9c0731e73a4a4e3d002fcb800ef41"
+ integrity sha1-/MX5pMTJwHMec6Sk49AC/LgA70E=
+ dependencies:
+ babel-helper-mark-eval-scopes "^0.0.2"
+
+babel-plugin-minify-numeric-literals@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.0.1.tgz#9597e6c31154d7daf3744d0bd417c144b275bd53"
+ integrity sha1-lZfmwxFU19rzdE0L1BfBRLJ1vVM=
+
+babel-plugin-minify-replace@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.0.1.tgz#5d5aea7cb9899245248d1ee9ce7a2fe556a8facc"
+ integrity sha1-XVrqfLmJkkUkjR7pznov5Vao+sw=
+
+babel-plugin-minify-simplify@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.0.7.tgz#4198d589ea10b4bc5bf9310206619a743c0d0664"
+ integrity sha1-QZjVieoQtLxb+TECBmGadDwNBmQ=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.2"
+ babel-helper-is-nodes-equiv "^0.0.1"
+ babel-helper-to-multiple-sequence-expressions "^0.0.3"
+
+babel-plugin-minify-type-constructors@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.0.3.tgz#ab59c1ad835b6b6e8e932b875d4df4dc393d9d26"
+ integrity sha1-q1nBrYNba26OkyuHXU303Dk9nSY=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-transform-es2015-arrow-functions@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
+ integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
+ integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoping@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e"
+ integrity sha1-ANbjoL69z+dTa51lO0SpFB5j5H4=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+ lodash "^4.2.0"
+
+babel-plugin-transform-es2015-classes@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14"
+ integrity sha1-VNRJmP2CPZ3KFSkjJBYcMxwbbxQ=
+ dependencies:
+ babel-helper-define-map "^6.22.0"
+ babel-helper-function-name "^6.22.0"
+ babel-helper-optimise-call-expression "^6.22.0"
+ babel-helper-replace-supers "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-computed-properties@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7"
+ integrity sha1-fDg+lim7pIIMEbBCW91ikPfwV+c=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-plugin-transform-es2015-destructuring@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6"
+ integrity sha1-jgry+IWgss+ZnUfEwd0jzojPpMY=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b"
+ integrity sha1-ZyOXAxwhYQ1y3Su7C6n7Ynfhw2s=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-for-of@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265"
+ integrity sha1-GARnrWOu6lkqHK7uS/HIs+JhYmU=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-function-name@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104"
+ integrity sha1-9fzIsJCT+aI8dqw9njksPsS3cQQ=
+ dependencies:
+ babel-helper-function-name "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-literals@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
+ integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-modules-amd@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21"
+ integrity sha1-v2nNNIiaQcM9kN+3QOAJHM/1LyE=
+ dependencies:
+ babel-plugin-transform-es2015-modules-commonjs "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-plugin-transform-es2015-modules-commonjs@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145"
+ integrity sha1-bKBOIrjiFPtQFpcwZX56B9yUEUU=
+ dependencies:
+ babel-plugin-transform-strict-mode "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-modules-systemjs@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad"
+ integrity sha1-gQzQzQJaCDg7hCNrksbjH4jmRK0=
+ dependencies:
+ babel-helper-hoist-variables "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-plugin-transform-es2015-modules-umd@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae"
+ integrity sha1-YNC6O9IyWHGcZDkdm/SS1kjcD64=
+ dependencies:
+ babel-plugin-transform-es2015-modules-amd "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+
+babel-plugin-transform-es2015-object-super@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc"
+ integrity sha1-2qYOEUoELqdp3VP+Uo/IIxHrmPw=
+ dependencies:
+ babel-helper-replace-supers "^6.22.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-parameters@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb"
+ integrity sha1-VwdgaSMgGQlPJ9qMaLtxYv4gjbs=
+ dependencies:
+ babel-helper-call-delegate "^6.22.0"
+ babel-helper-get-function-arity "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723"
+ integrity sha1-i6d24K/6pgv/IekhQDuKZSov9yM=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-spread@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+ integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-sticky-regex@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593"
+ integrity sha1-qzFoKehm7j9LnrlpOXV9GaW8RZM=
+ dependencies:
+ babel-helper-regex "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-template-literals@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
+ integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-typeof-symbol@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1"
+ integrity sha1-h/ryM207apf2jE2QawzQ7ermduE=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-unicode-regex@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20"
+ integrity sha1-jZzCfn7h3s/mVFT7mGRSoEphPSA=
+ dependencies:
+ babel-helper-regex "^6.22.0"
+ babel-runtime "^6.22.0"
+ regexpu-core "^2.0.0"
+
+babel-plugin-transform-inline-consecutive-adds@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.0.2.tgz#a58fcecfc09c08fbf9373a5a3e70746c03d01fc1"
+ integrity sha1-pY/Oz8CcCPv5NzpaPnB0bAPQH8E=
+
+babel-plugin-transform-member-expression-literals@^6.8.1:
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.1.tgz#60b78cb2b814ac71dd6104ef51c496c62e877337"
+ integrity sha1-YLeMsrgUrHHdYQTvUcSWxi6Hczc=
+
+babel-plugin-transform-merge-sibling-variables@^6.8.2:
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.2.tgz#498acd07481ab340c1bad8b726c2fad1b8f644e5"
+ integrity sha1-SYrNB0gas0DButi3JsL60bj2ROU=
+
+babel-plugin-transform-minify-booleans@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.0.tgz#b1a48864a727847696b84eae36fa4d085a54b42b"
+ integrity sha1-saSIZKcnhHaWuE6uNvpNCFpUtCs=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-property-literals@^6.8.1:
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.1.tgz#05ed01f6024820b18f1d0495c80fe287176bccd9"
+ integrity sha1-Be0B9gJIILGPHQSVyA/ihxdrzNk=
+
+babel-plugin-transform-regenerator@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6"
+ integrity sha1-ZXQFk6MZxEUiFXU41pC4QJRhfqY=
+ dependencies:
+ regenerator-transform "0.9.8"
+
+babel-plugin-transform-regexp-constructors@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.0.5.tgz#74d95e0c567e6fc1d9c699a084894d40de8e581d"
+ integrity sha1-dNleDFZ+b8HZxpmghIlNQN6OWB0=
+
+babel-plugin-transform-remove-console@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.0.tgz#c4162f01ee169491776e64093f4dad8d61125a90"
+ integrity sha1-xBYvAe4WlJF3bmQJP02tjWESWpA=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-remove-debugger@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.0.tgz#d3ece7d8400473f7a706177ba22fd3026ad7e020"
+ integrity sha1-0+zn2EAEc/enBhd7oi/TAmrX4CA=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-remove-undefined@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.0.5.tgz#12ef11805e06e861dd2eb0c7cc041d2184b8f410"
+ integrity sha1-Eu8RgF4G6GHdLrDHzAQdIYS49BA=
+
+babel-plugin-transform-simplify-comparison-operators@^6.8.1:
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.1.tgz#a307088e0d1c728081777fba568f4107396ab25c"
+ integrity sha1-owcIjg0ccoCBd3+6Vo9BBzlqslw=
+
+babel-plugin-transform-strict-mode@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c"
+ integrity sha1-4AjfATQP3IfpWdplmRt+BZcMjHw=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-undefined-to-void@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.0.tgz#bc5b6b4908d3b1262170e67cb3963903ddce167e"
+ integrity sha1-vFtrSQjTsSYhcOZ8s5Y5A93OFn4=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-polyfill@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b"
+ integrity sha1-GsmevcxrpNseJhjDh7IISoIVSjs=
+ dependencies:
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-preset-babili@^0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/babel-preset-babili/-/babel-preset-babili-0.0.11.tgz#9461fd902d6a3c8bc032b8f06c2f691674c12a1f"
+ integrity sha1-lGH9kC1qPIvAMrjwbC9pFnTBKh8=
+ dependencies:
+ babel-plugin-minify-constant-folding "^0.0.4"
+ babel-plugin-minify-dead-code-elimination "^0.1.3"
+ babel-plugin-minify-flip-comparisons "^0.0.2"
+ babel-plugin-minify-guarded-expressions "^0.0.4"
+ babel-plugin-minify-infinity "^0.0.3"
+ babel-plugin-minify-mangle-names "^0.0.7"
+ babel-plugin-minify-numeric-literals "^0.0.1"
+ babel-plugin-minify-replace "^0.0.1"
+ babel-plugin-minify-simplify "^0.0.7"
+ babel-plugin-minify-type-constructors "^0.0.3"
+ babel-plugin-transform-inline-consecutive-adds "^0.0.2"
+ babel-plugin-transform-member-expression-literals "^6.8.1"
+ babel-plugin-transform-merge-sibling-variables "^6.8.2"
+ babel-plugin-transform-minify-booleans "^6.8.0"
+ babel-plugin-transform-property-literals "^6.8.1"
+ babel-plugin-transform-regexp-constructors "^0.0.5"
+ babel-plugin-transform-remove-console "^6.8.0"
+ babel-plugin-transform-remove-debugger "^6.8.0"
+ babel-plugin-transform-remove-undefined "^0.0.5"
+ babel-plugin-transform-simplify-comparison-operators "^6.8.1"
+ babel-plugin-transform-undefined-to-void "^6.8.0"
+ lodash.isplainobject "^4.0.6"
+
+babel-preset-es2015@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835"
+ integrity sha1-r1qY7LNeuK92StiloF6zbcQ4aDU=
+ dependencies:
+ babel-plugin-check-es2015-constants "^6.22.0"
+ babel-plugin-transform-es2015-arrow-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoping "^6.22.0"
+ babel-plugin-transform-es2015-classes "^6.22.0"
+ babel-plugin-transform-es2015-computed-properties "^6.22.0"
+ babel-plugin-transform-es2015-destructuring "^6.22.0"
+ babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
+ babel-plugin-transform-es2015-for-of "^6.22.0"
+ babel-plugin-transform-es2015-function-name "^6.22.0"
+ babel-plugin-transform-es2015-literals "^6.22.0"
+ babel-plugin-transform-es2015-modules-amd "^6.22.0"
+ babel-plugin-transform-es2015-modules-commonjs "^6.22.0"
+ babel-plugin-transform-es2015-modules-systemjs "^6.22.0"
+ babel-plugin-transform-es2015-modules-umd "^6.22.0"
+ babel-plugin-transform-es2015-object-super "^6.22.0"
+ babel-plugin-transform-es2015-parameters "^6.22.0"
+ babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
+ babel-plugin-transform-es2015-spread "^6.22.0"
+ babel-plugin-transform-es2015-sticky-regex "^6.22.0"
+ babel-plugin-transform-es2015-template-literals "^6.22.0"
+ babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
+ babel-plugin-transform-es2015-unicode-regex "^6.22.0"
+ babel-plugin-transform-regenerator "^6.22.0"
+
+babel-register@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63"
+ integrity sha1-ph3YOXX5ykqefW7/MFlJTNXqTGM=
+ dependencies:
+ babel-core "^6.22.0"
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611"
+ integrity sha1-HPi0rGfHek3bDbKuH3TeUqxMphE=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb"
+ integrity sha1-QD0RCQWkYmsxeiofy487cyBLLts=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+ babylon "^6.11.0"
+ lodash "^4.2.0"
+
+babel-traverse@^6.22.0, babel-traverse@^6.22.1:
+ version "6.22.1"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f"
+ integrity sha1-O5XNa3Qn1vH3V3BJCPL8l0il9Z8=
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-messages "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ babylon "^6.15.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.19.0, babel-types@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db"
+ integrity sha1-KkR+jQ6iXSUSQJ5BdUef14zIsds=
+ dependencies:
+ babel-runtime "^6.22.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babili@^0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/babili/-/babili-0.0.11.tgz#887b3461c7e41aaf9f37383b5b01c82746201860"
+ integrity sha1-iHs0YcfkGq+fNzg7WwHIJ0YgGGA=
+ dependencies:
+ babel-cli "^6.10.1"
+ babel-preset-babili "^0.0.11"
+
+babylon@^6.11.0, babylon@^6.15.0:
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e"
+ integrity sha1-umXPoagOF1mw6J+1YuJ9zK5wNI4=
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
+
+base64-js@^1.0.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+ integrity sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
+ integrity sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+ integrity sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+browserify-aes@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
+ integrity sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=
+ dependencies:
+ inherits "^2.0.1"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
+ dependencies:
+ pako "~0.2.0"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+buffer@^4.9.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+ integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c=
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^1.1.0, chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chokidar@^1.0.0, chokidar@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+ integrity sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+clone@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+ integrity sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.8.1, commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+convert-source-map@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
+ integrity sha1-6fPpxuJyjvwmdmlqcOs4L3MQamc=
+
+core-js@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+ integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
+ dependencies:
+ boom "2.x.x"
+
+crypto-browserify@3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
+ integrity sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=
+ dependencies:
+ browserify-aes "0.4.0"
+ pbkdf2-compat "2.0.1"
+ ripemd160 "0.2.0"
+ sha.js "2.2.6"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+debug@^2.1.1, debug@^2.2.0, debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
+ dependencies:
+ ms "0.7.1"
+
+decamelize@^1.0.0, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+ integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
+ dependencies:
+ jsbn "~0.1.0"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+enhanced-resolve@~0.9.0:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
+ integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.2.0"
+ tapable "^0.1.8"
+
+errno@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ integrity sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=
+ dependencies:
+ prr "~0.0.0"
+
+error-ex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+ integrity sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+ integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+ integrity sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+ integrity sha1-4QgOBljjALBilJkMxw4VAiNf1VA=
+
+filename-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+ integrity sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+find-cache-dir@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+ integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
+ dependencies:
+ commondir "^1.0.1"
+ mkdirp "^0.5.1"
+ pkg-dir "^1.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+for-in@^0.1.5:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
+ integrity sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=
+
+for-own@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
+ integrity sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=
+ dependencies:
+ for-in "^0.1.5"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ integrity sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs-readdir-recursive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
+ integrity sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.0.0:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558"
+ integrity sha1-hTfz8SJyZ4dltP1lKMDx9m+PRVg=
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ integrity sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gauge@~2.7.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774"
+ integrity sha1-Fc7MMbAtBTRaXWsOFxzbOtIwd3Q=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^0.2.0"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+ integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
+ dependencies:
+ is-property "^1.0.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+ integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ integrity sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^7.0.0, glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.0.0:
+ version "9.14.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
+ integrity sha1-iFmTavADh0EmMFOznQ52yiQeQDQ=
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.4:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+gzip-size-cli@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size-cli/-/gzip-size-cli-1.0.0.tgz#97ef47b1600a2ad8f9c31539661eab39ec36caed"
+ integrity sha1-l+9HsWAKKtj5wxU5Zh6rOew2yu0=
+ dependencies:
+ gzip-size "^3.0.0"
+ meow "^3.3.0"
+
+gzip-size@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
+ dependencies:
+ duplexer "^0.1.1"
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+ integrity sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+ integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+interpret@^0.6.4:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
+ integrity sha1-/s16GOfOXKar+5U+H4YhOknxYls=
+
+invariant@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A=
+ dependencies:
+ loose-envify "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+ integrity sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+ integrity sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-my-json-valid@^2.12.4:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ integrity sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ integrity sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=
+ dependencies:
+ jsbn "~0.1.0"
+
+js-tokens@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+ integrity sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+ integrity sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+jsesc@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.4.0.tgz#8568d223ff69c0b5e081b4f8edf5a23d978c9867"
+ integrity sha1-hWjSI/9pwLXggbT47fWiPZeMmGc=
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+ integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ integrity sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ integrity sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=
+ dependencies:
+ is-buffer "^1.0.2"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+loader-utils@^0.2.11:
+ version "0.2.16"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
+ integrity sha1-8IYyBm7YKCg13/iN+1JwR2Wt7m0=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+loader-utils@^0.2.16:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
+
+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@^4.17.4, lodash@^4.2.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+ integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ integrity sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=
+ dependencies:
+ js-tokens "^3.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+memory-fs@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
+ integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA=
+
+memory-fs@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
+ integrity sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.3.0, meow@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+mime-db@~1.25.0:
+ version "1.25.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
+ integrity sha1-wY29fHOl2/b0SgJNwNFloeexw5I=
+
+mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.13"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
+ integrity sha1-4HqqnGxrmnyjASxpADrSWjnpKog=
+ dependencies:
+ mime-db "~1.25.0"
+
+minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8, minimist@~0.0.1:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
+
+nan@^2.3.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
+ integrity sha1-qo8eNFMdgH6eJ3VbI0tKbsDBUqg=
+
+node-libs-browser@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b"
+ integrity sha1-PicsCBnjCJNeJmdECNevDhSRuDs=
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.1.4"
+ buffer "^4.9.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "3.3.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "0.0.1"
+ os-browserify "^0.2.0"
+ path-browserify "0.0.0"
+ process "^0.11.0"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.0.5"
+ stream-browserify "^2.0.1"
+ stream-http "^2.3.1"
+ string_decoder "^0.10.25"
+ timers-browserify "^2.0.2"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-pre-gyp@^0.6.29:
+ version "0.6.32"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
+ integrity sha1-/EUrN25zGbPSVfXzSFPvb9j+H9U=
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ integrity sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+ integrity sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ integrity sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+ integrity sha1-ejs9DpgGPUP0wD8uiubNUahog6A=
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+once@^1.3.0, once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+optimist@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+os-browserify@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+ integrity sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+output-file-sync@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+ integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=
+ dependencies:
+ graceful-fs "^4.1.4"
+ mkdirp "^0.5.1"
+ object-assign "^4.1.0"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+ integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pbkdf2-compat@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
+ integrity sha1-tuDI+plJTZTgURV1gCpZpcFC8og=
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
+ dependencies:
+ find-up "^1.0.0"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+pretty-bytes-cli@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes-cli/-/pretty-bytes-cli-2.0.0.tgz#e705662cffdc9c75291835333bc2f89ad3c033cf"
+ integrity sha1-5wVmLP/cnHUpGDUzO8L4mtPAM88=
+ dependencies:
+ get-stdin "^5.0.1"
+ meow "^3.6.0"
+ pretty-bytes "^4.0.0"
+
+pretty-bytes@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+ integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=
+
+private@^0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
+ integrity sha1-aM5eih7woju1cMwoU3tTMqumPvE=
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+process@^0.11.0:
+ version "0.11.9"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+ integrity sha1-e9WtIapiU+fahoImTx4R0RwDGME=
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+ integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+ integrity sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ integrity sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+rc@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
+ integrity sha1-Q2UbdrauU7XIAvEVH6P8OwWZack=
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~1.0.4"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ integrity sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regenerate@^1.2.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
+ integrity sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=
+
+regenerator-runtime@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
+ integrity sha1-JX9BlhzkRVixj3gUr0jBdVn5+us=
+
+regenerator-transform@0.9.8:
+ version "0.9.8"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c"
+ integrity sha1-D4i7K8A5Mt23trcxLmgHjwECbWw=
+ dependencies:
+ babel-runtime "^6.18.0"
+ babel-types "^6.19.0"
+ private "^0.1.6"
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ integrity sha1-mxpsNdTQ3871cRrmUejp09cRQUU=
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+regexpu-core@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+ integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=
+ dependencies:
+ regenerate "^1.2.1"
+ regjsgen "^0.2.0"
+ regjsparser "^0.1.4"
+
+regjsgen@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+ integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
+
+regjsparser@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+ integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
+ dependencies:
+ jsesc "~0.5.0"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
+ integrity sha1-K/GYveFnys+lHAqSjoS2i74XH84=
+
+"semver@2 || 3 || 4 || 5", semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+sha.js@2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
+ integrity sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
+ dependencies:
+ hoek "2.x.x"
+
+source-list-map@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e"
+ integrity sha1-1LXOKkZTXHLH6FJ8cad9JQYYFy4=
+
+source-map-support@^0.4.2:
+ version "0.4.11"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322"
+ integrity sha1-ZH+TmXizhTWQlTCIUwPa8jJ58yI=
+ dependencies:
+ source-map "^0.5.3"
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+ integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
+
+source-map@~0.4.1:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
+ dependencies:
+ amdefine ">=0.0.4"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+ integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+ integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=
+
+sshpk@^1.7.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
+ integrity sha1-MOGl0ykkSXShr2FREznVla9mOLA=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-http@^2.3.1:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.0.tgz#adf3309ced17624ebfb7ef13e6ac4cfe405a8b12"
+ integrity sha1-rfMwnO0XYk6/t+8T5qxM/kBaixI=
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.1.0"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@^0.10.25, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+ integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+ integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
+
+supports-color@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+ integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^3.1.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU=
+ dependencies:
+ has-flag "^1.0.0"
+
+tapable@^0.1.8, tapable@~0.1.8:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
+ integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ integrity sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+timers-browserify@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
+ integrity sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=
+ dependencies:
+ setimmediate "^1.0.4"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
+ integrity sha1-8/XAw7pymafvmUJ+RGMyV63kMyA=
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ integrity sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=
+ dependencies:
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+ integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+uglify-js@~2.7.3:
+ version "2.7.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
+ integrity sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=
+ dependencies:
+ async "~0.2.6"
+ source-map "~0.5.1"
+ uglify-to-browserify "~1.0.0"
+ yargs "~3.10.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+ integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA=
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3, util@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+ integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=
+
+v8flags@^2.0.10:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881"
+ integrity sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=
+ dependencies:
+ user-home "^1.1.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ integrity sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=
+ dependencies:
+ extsprintf "1.0.2"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
+ dependencies:
+ indexof "0.0.1"
+
+watchpack@^0.2.1:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
+ integrity sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=
+ dependencies:
+ async "^0.9.0"
+ chokidar "^1.0.0"
+ graceful-fs "^4.1.2"
+
+webpack-core@~0.6.9:
+ version "0.6.9"
+ resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
+ integrity sha1-/FcViMhVjad76e+23r3Fo7FyvcI=
+ dependencies:
+ source-list-map "~0.1.7"
+ source-map "~0.4.1"
+
+webpack@1:
+ version "1.14.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.14.0.tgz#54f1ffb92051a328a5b2057d6ae33c289462c823"
+ integrity sha1-VPH/uSBRoyilsgV9auM8KJRiyCM=
+ dependencies:
+ acorn "^3.0.0"
+ async "^1.3.0"
+ clone "^1.0.2"
+ enhanced-resolve "~0.9.0"
+ interpret "^0.6.4"
+ loader-utils "^0.2.11"
+ memory-fs "~0.3.0"
+ mkdirp "~0.5.0"
+ node-libs-browser "^0.7.0"
+ optimist "~0.6.0"
+ supports-color "^3.1.0"
+ tapable "~0.1.8"
+ uglify-js "~2.7.3"
+ watchpack "^0.2.1"
+ webpack-core "~0.6.9"
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ integrity sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=
+ dependencies:
+ string-width "^1.0.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
diff --git a/date-fns/examples/rollup/README.md b/date-fns/examples/rollup/README.md
new file mode 100644
index 0000000..b144f68
--- /dev/null
+++ b/date-fns/examples/rollup/README.md
@@ -0,0 +1,23 @@
+# Usage With Rollup
+
+See [example.js](./example.js), [fp.js](./fp.js) and [misc.js](./misc.js) for source code examples.
+
+See [package.json scripts](./package.json) for CLI usage.
+
+## Build Example
+
+```sh
+yarn
+yarn run build
+```
+
+See ./dist for output.
+
+## Minimal Build Size
+
+You can see minimal build size (when you use just one function):
+
+```sh
+gzip-size dist/example.min.js | pretty-bytes
+#=> 6.22 kB
+```
diff --git a/date-fns/examples/rollup/example.js b/date-fns/examples/rollup/example.js
new file mode 100644
index 0000000..5619a30
--- /dev/null
+++ b/date-fns/examples/rollup/example.js
@@ -0,0 +1,4 @@
+import format from 'date-fns/esm/format'
+
+const result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
+console.log(result === '25.01.2017 21:28:15')
diff --git a/date-fns/examples/rollup/fp.js b/date-fns/examples/rollup/fp.js
new file mode 100644
index 0000000..41a29d0
--- /dev/null
+++ b/date-fns/examples/rollup/fp.js
@@ -0,0 +1,18 @@
+import addYears from 'date-fns/esm/fp/addYears'
+import {formatWithOptions} from 'date-fns/esm/fp'
+import {eo} from 'date-fns/esm/locale'
+
+const addFiveYears = addYears(5)
+const dateToString = formatWithOptions({locale: eo}, 'd MMMM yyyy')
+
+const dates = [
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(2017, 1 /* Feb */, 11),
+ new Date(2017, 6 /* Jul */, 2)
+]
+
+const formattedDates = dates
+ .map((date) => dateToString(addFiveYears(date)))
+ .join(', ')
+
+console.log(formattedDates === '1 januaro 2022, 11 februaro 2022, 2 julio 2022')
diff --git a/date-fns/examples/rollup/misc.js b/date-fns/examples/rollup/misc.js
new file mode 100644
index 0000000..4094cb2
--- /dev/null
+++ b/date-fns/examples/rollup/misc.js
@@ -0,0 +1,9 @@
+import { format } from 'date-fns/esm'
+import { eo } from 'date-fns/esm/locale'
+
+const result = format(
+ new Date(2017, 0, 25, 21, 28, 15),
+ 'eeee, dd MMMM HH:mm:ss',
+ { locale: eo }
+)
+console.log(result === 'merkredo, 25 januaro 21:28:15')
diff --git a/date-fns/examples/rollup/package.json b/date-fns/examples/rollup/package.json
new file mode 100644
index 0000000..6b64066
--- /dev/null
+++ b/date-fns/examples/rollup/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "date-fns-example-webpack2",
+ "version": "0.1.0",
+ "description": "Example of date-fns usage with Rollup",
+ "main": "example.js",
+ "author": "Sasha Koss <koss@nocorp.me>",
+ "license": "MIT",
+ "dependencies": {
+ "babili": "^0.0.9",
+ "gzip-size-cli": "^1.0.0",
+ "pretty-bytes-cli": "^2.0.0",
+ "rollup": "^0.41.1",
+ "rollup-plugin-commonjs": "^7.0.0",
+ "rollup-plugin-node-resolve": "^2.0.0"
+ },
+ "scripts": {
+ "build": "yarn run build-date-fns && yarn run build-rollup && yarn run build-babili",
+ "build-date-fns": "env PACKAGE_OUTPUT_PATH=\"$(pwd)/node_modules/date-fns\" ../../scripts/build/package.sh",
+ "build-rollup": "yarn run build-rollup-example && yarn run build-rollup-fp && yarn run build-rollup-misc",
+ "build-rollup-example": "rollup -c rollup.config.example.js",
+ "build-rollup-fp": "rollup -c rollup.config.fp.js",
+ "build-rollup-misc": "rollup -c rollup.config.misc.js",
+ "build-babili": "yarn run build-babili-example && yarn run build-babili-fp && yarn run build-babili-misc && yarn run stats-size",
+ "build-babili-example": "babili dist/example.js --out-file dist/example.min.js --minified --no-comments",
+ "build-babili-fp": "babili dist/fp.js --out-file dist/fp.min.js --minified --no-comments",
+ "build-babili-misc": "babili dist/misc.js --out-file dist/misc.min.js --minified --no-comments",
+ "stats-size": "gzip-size dist/example.min.js | pretty-bytes",
+ "test": "yarn run test-example && yarn run test-fp && yarn run test-misc",
+ "test-example": "test $(env TZ=UTC node ./dist/example.min.js) = true",
+ "test-fp": "test $(env TZ=UTC node ./dist/fp.min.js) = true",
+ "test-misc": "test $(env TZ=UTC node ./dist/misc.min.js) = true"
+ }
+}
diff --git a/date-fns/examples/rollup/rollup.config.example.js b/date-fns/examples/rollup/rollup.config.example.js
new file mode 100644
index 0000000..f9e7ee5
--- /dev/null
+++ b/date-fns/examples/rollup/rollup.config.example.js
@@ -0,0 +1,12 @@
+import resolve from 'rollup-plugin-node-resolve'
+import commonjs from 'rollup-plugin-commonjs'
+
+export default {
+ entry: 'example.js',
+ dest: 'dist/example.js',
+ format: 'cjs',
+ plugins: [
+ resolve({jsnext: true, main: true}),
+ commonjs()
+ ]
+}
diff --git a/date-fns/examples/rollup/rollup.config.fp.js b/date-fns/examples/rollup/rollup.config.fp.js
new file mode 100644
index 0000000..1f6a53d
--- /dev/null
+++ b/date-fns/examples/rollup/rollup.config.fp.js
@@ -0,0 +1,12 @@
+import resolve from 'rollup-plugin-node-resolve'
+import commonjs from 'rollup-plugin-commonjs'
+
+export default {
+ entry: 'fp.js',
+ dest: 'dist/fp.js',
+ format: 'cjs',
+ plugins: [
+ resolve({jsnext: true, main: true}),
+ commonjs()
+ ]
+}
diff --git a/date-fns/examples/rollup/rollup.config.misc.js b/date-fns/examples/rollup/rollup.config.misc.js
new file mode 100644
index 0000000..072f34a
--- /dev/null
+++ b/date-fns/examples/rollup/rollup.config.misc.js
@@ -0,0 +1,12 @@
+import resolve from 'rollup-plugin-node-resolve'
+import commonjs from 'rollup-plugin-commonjs'
+
+export default {
+ entry: 'misc.js',
+ dest: 'dist/misc.js',
+ format: 'cjs',
+ plugins: [
+ resolve({jsnext: true, main: true}),
+ commonjs()
+ ]
+}
diff --git a/date-fns/examples/rollup/yarn.lock b/date-fns/examples/rollup/yarn.lock
new file mode 100644
index 0000000..dc6cac2
--- /dev/null
+++ b/date-fns/examples/rollup/yarn.lock
@@ -0,0 +1,1932 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+abbrev@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+acorn@^4.0.1:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a"
+ integrity sha1-F6jWp6bE71OLgU7Jq6wneSk78wo=
+
+ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+ integrity sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ integrity sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+aproba@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+ integrity sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA=
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ integrity sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+ integrity sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+ integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
+
+aws4@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
+ integrity sha1-Cin/t5wxyecS7rCH6OemS0pW11U=
+
+babel-cli@^6.10.1:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.18.0.tgz#92117f341add9dead90f6fa7d0a97c0cc08ec186"
+ integrity sha1-khF/NBrdnerZD2+n0Kl8DMCOwYY=
+ dependencies:
+ babel-core "^6.18.0"
+ babel-polyfill "^6.16.0"
+ babel-register "^6.18.0"
+ babel-runtime "^6.9.0"
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.0.0"
+ glob "^5.0.5"
+ lodash "^4.2.0"
+ output-file-sync "^1.1.0"
+ path-is-absolute "^1.0.0"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+ v8flags "^2.0.10"
+ optionalDependencies:
+ chokidar "^1.0.0"
+
+babel-code-frame@^6.20.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26"
+ integrity sha1-uWj4OQkPmovG1Bk4+5bLhPc4eyY=
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^2.0.0"
+
+babel-core@^6.18.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724"
+ integrity sha1-dVJUgMIcgD+CbvOGfSLBnwgKNyQ=
+ dependencies:
+ babel-code-frame "^6.20.0"
+ babel-generator "^6.21.0"
+ babel-helpers "^6.16.0"
+ babel-messages "^6.8.0"
+ babel-register "^6.18.0"
+ babel-runtime "^6.20.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.21.0"
+ babel-types "^6.21.0"
+ babylon "^6.11.0"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.21.0.tgz#605f1269c489a1c75deeca7ea16d43d4656c8494"
+ integrity sha1-YF8SacSJocdd7sp+oW1D1GVshJQ=
+ dependencies:
+ babel-messages "^6.8.0"
+ babel-runtime "^6.20.0"
+ babel-types "^6.21.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+
+babel-helper-flip-expressions@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.0.1.tgz#c2ba1599426e7928333fd5c08eee6cdf8328c848"
+ integrity sha1-wroVmUJueSgzP9XAju5s34MoyEg=
+
+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.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.0.1.tgz#ed74553b883e68226ae45f989a99b02c190f105a"
+ integrity sha1-7XRVO4g+aCJq5F+YmpmwLBkPEFo=
+
+babel-helper-remove-or-void@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.0.1.tgz#f602790e465acf2dfbe84fb3dd210c43a2dd7262"
+ integrity sha1-9gJ5DkZazy376E+z3SEMQ6LdcmI=
+
+babel-helper-to-multiple-sequence-expressions@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.0.2.tgz#07d5d2e674aa62962ac9e0000b539920c301c4b9"
+ integrity sha1-B9XS5nSqYpYqyeAAC1OZIMMBxLk=
+
+babel-helpers@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3"
+ integrity sha1-EJXsENmSeUYFU+Z+s+7plz04Z+M=
+ dependencies:
+ babel-runtime "^6.0.0"
+ babel-template "^6.16.0"
+
+babel-messages@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9"
+ integrity sha1-v1BHNsqWfm1l7wrbWipflHyODrk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-minify-constant-folding@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.0.1.tgz#d4abb5b62ccfc094bdce2a318b2f94fda5a73e29"
+ integrity sha1-1Ku1tizPwJS9zioxiy+U/aWnPik=
+
+babel-plugin-minify-dead-code-elimination@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.1.tgz#1a0133fcd06c7fa477b01c193ba3213c8944ff01"
+ integrity sha1-GgEz/NBsf6R3sBwZO6MhPIlE/wE=
+ dependencies:
+ babel-helper-remove-or-void "^0.0.1"
+ lodash.some "^4.6.0"
+
+babel-plugin-minify-flip-comparisons@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.0.1.tgz#679f4493a692afc705c4b79fde1dadb535c4eb08"
+ integrity sha1-Z59Ek6aSr8cFxLef3h2ttTXE6wg=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-minify-guarded-expressions@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.0.3.tgz#6da1caa0b6abda964647377bd5e19afdbf91cae8"
+ integrity sha1-baHKoLar2pZGRzd71eGa/b+Ryug=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.1"
+
+babel-plugin-minify-infinity@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.0.1.tgz#9394a4defc9db56da76f13fedd5d5e2d486a4299"
+ integrity sha1-k5Sk3vydtW2nbxP+3V1eLUhqQpk=
+
+babel-plugin-minify-mangle-names@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.0.4.tgz#94812c0c82320f7af97511b7d598527933973197"
+ integrity sha1-lIEsDIIyD3r5dRG31ZhSeTOXMZc=
+
+babel-plugin-minify-numeric-literals@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.0.1.tgz#9597e6c31154d7daf3744d0bd417c144b275bd53"
+ integrity sha1-lZfmwxFU19rzdE0L1BfBRLJ1vVM=
+
+babel-plugin-minify-replace@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.0.1.tgz#5d5aea7cb9899245248d1ee9ce7a2fe556a8facc"
+ integrity sha1-XVrqfLmJkkUkjR7pznov5Vao+sw=
+
+babel-plugin-minify-simplify@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.0.4.tgz#940d0dd0db6d4c4c1c51fc34c3c6e0d0ee1d67e9"
+ integrity sha1-lA0N0NttTEwcUfw0w8bg0O4dZ+k=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.1"
+ babel-helper-is-nodes-equiv "^0.0.1"
+ babel-helper-to-multiple-sequence-expressions "^0.0.2"
+
+babel-plugin-minify-type-constructors@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.0.2.tgz#4f9a28951e776f31ac11a29cd58cf9eef8b2e292"
+ integrity sha1-T5oolR53bzGsEaKc1Yz57viy4pI=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-transform-member-expression-literals@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.0.tgz#718755a70492a895d8f41810afa9998bc09f57b9"
+ integrity sha1-cYdVpwSSqJXY9BgQr6mZi8CfV7k=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-merge-sibling-variables@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.0.tgz#724074e4ef78b601fcf9a34165c972a1b6117e99"
+ integrity sha1-ckB05O94tgH8+aNBZclyobYRfpk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-minify-booleans@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.0.tgz#b1a48864a727847696b84eae36fa4d085a54b42b"
+ integrity sha1-saSIZKcnhHaWuE6uNvpNCFpUtCs=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-property-literals@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.0.tgz#a65b2e6e1274d25df0f3a4c5e85bc8f1cdd9e019"
+ integrity sha1-plsubhJ00l3w86TF6FvI8c3Z4Bk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-regexp-constructors@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.0.1.tgz#c5878cc4d78437e99d02790d325f163741741ff5"
+ integrity sha1-xYeMxNeEN+mdAnkNMl8WN0F0H/U=
+
+babel-plugin-transform-simplify-comparison-operators@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.0.tgz#0183d65bfdc54c80d922a3a9b3008e25fa9d32a7"
+ integrity sha1-AYPWW/3FTIDZIqOpswCOJfqdMqc=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-undefined-to-void@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.0.tgz#bc5b6b4908d3b1262170e67cb3963903ddce167e"
+ integrity sha1-vFtrSQjTsSYhcOZ8s5Y5A93OFn4=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-polyfill@^6.16.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.20.0.tgz#de4a371006139e20990aac0be367d398331204e7"
+ integrity sha1-3ko3EAYTniCZCqwL42fTmDMSBOc=
+ dependencies:
+ babel-runtime "^6.20.0"
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-preset-babili@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/babel-preset-babili/-/babel-preset-babili-0.0.8.tgz#aeba08a21171166e448fd4226c3cf03bcf682122"
+ integrity sha1-rroIohFxFm5Ej9QibDzwO89oISI=
+ dependencies:
+ babel-plugin-minify-constant-folding "^0.0.1"
+ babel-plugin-minify-dead-code-elimination "^0.1.0"
+ babel-plugin-minify-flip-comparisons "^0.0.1"
+ babel-plugin-minify-guarded-expressions "^0.0.3"
+ babel-plugin-minify-infinity "^0.0.1"
+ babel-plugin-minify-mangle-names "^0.0.4"
+ babel-plugin-minify-numeric-literals "^0.0.1"
+ babel-plugin-minify-replace "^0.0.1"
+ babel-plugin-minify-simplify "^0.0.4"
+ babel-plugin-minify-type-constructors "^0.0.2"
+ babel-plugin-transform-member-expression-literals "^6.8.0"
+ babel-plugin-transform-merge-sibling-variables "^6.8.0"
+ babel-plugin-transform-minify-booleans "^6.8.0"
+ babel-plugin-transform-property-literals "^6.8.0"
+ babel-plugin-transform-regexp-constructors "^0.0.1"
+ babel-plugin-transform-simplify-comparison-operators "^6.8.0"
+ babel-plugin-transform-undefined-to-void "^6.8.0"
+
+babel-register@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68"
+ integrity sha1-iS4uA4ZQeN2QrSxxURHsREmzKmg=
+ dependencies:
+ babel-core "^6.18.0"
+ babel-runtime "^6.11.6"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.20.0, babel-runtime@^6.9.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f"
+ integrity sha1-hzAL3PTNdw8JvwBIxkIE4XgG0W8=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
+ integrity sha1-4UndGp8Do1+BfdvE0EgZiOfryMo=
+ dependencies:
+ babel-runtime "^6.9.0"
+ babel-traverse "^6.16.0"
+ babel-types "^6.16.0"
+ babylon "^6.11.0"
+ lodash "^4.2.0"
+
+babel-traverse@^6.16.0, babel-traverse@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad"
+ integrity sha1-acY2WATxpPaesSE/hbAKgYuMIa0=
+ dependencies:
+ babel-code-frame "^6.20.0"
+ babel-messages "^6.8.0"
+ babel-runtime "^6.20.0"
+ babel-types "^6.21.0"
+ babylon "^6.11.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.16.0, babel-types@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2"
+ integrity sha1-MUuSFoiR7204Brf3qRf9+HwRpLI=
+ dependencies:
+ babel-runtime "^6.20.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babili@^0.0.9:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/babili/-/babili-0.0.9.tgz#cf1277f34d8265101847e2c5ac11771684f2b1d4"
+ integrity sha1-zxJ3802CZRAYR+LFrBF3FoTysdQ=
+ dependencies:
+ babel-cli "^6.10.1"
+ babel-preset-babili "^0.0.8"
+
+babylon@^6.11.0:
+ version "6.14.1"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
+ integrity sha1-lWJ1+rcnU62bNDXXr+WPi/CimBU=
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
+ integrity sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+browser-resolve@^1.11.0:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+ integrity sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=
+ dependencies:
+ resolve "1.1.7"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+builtin-modules@^1.0.0, builtin-modules@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+ integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c=
+
+chalk@^1.1.0, chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chokidar@^1.0.0:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+ integrity sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.8.1, commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+convert-source-map@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
+ integrity sha1-6fPpxuJyjvwmdmlqcOs4L3MQamc=
+
+core-js@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+ integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
+ dependencies:
+ boom "2.x.x"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+debug@^2.1.1, debug@^2.2.0, debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
+ dependencies:
+ ms "0.7.1"
+
+decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+ integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
+ dependencies:
+ jsbn "~0.1.0"
+
+error-ex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+ integrity sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+estree-walker@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e"
+ integrity sha1-va/oCVOD2EFNXcLs9MkXO225QS4=
+
+estree-walker@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.0.tgz#f67ca8f57b9ed66d886af816c099c779b315d4db"
+ integrity sha1-9nyo9Xue1m2IavgWwJnHebMV1Ns=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+ integrity sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+ integrity sha1-4QgOBljjALBilJkMxw4VAiNf1VA=
+
+filename-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+ integrity sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+for-in@^0.1.5:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
+ integrity sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=
+
+for-own@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
+ integrity sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=
+ dependencies:
+ for-in "^0.1.5"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ integrity sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs-readdir-recursive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
+ integrity sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.0.0:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558"
+ integrity sha1-hTfz8SJyZ4dltP1lKMDx9m+PRVg=
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ integrity sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gauge@~2.7.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774"
+ integrity sha1-Fc7MMbAtBTRaXWsOFxzbOtIwd3Q=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^0.2.0"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+ integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
+ dependencies:
+ is-property "^1.0.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+ integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ integrity sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^5.0.5:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.0.0:
+ version "9.14.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
+ integrity sha1-iFmTavADh0EmMFOznQ52yiQeQDQ=
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.4:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+gzip-size-cli@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size-cli/-/gzip-size-cli-1.0.0.tgz#97ef47b1600a2ad8f9c31539661eab39ec36caed"
+ integrity sha1-l+9HsWAKKtj5wxU5Zh6rOew2yu0=
+ dependencies:
+ gzip-size "^3.0.0"
+ meow "^3.3.0"
+
+gzip-size@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
+ dependencies:
+ duplexer "^0.1.1"
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+ integrity sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+invariant@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A=
+ dependencies:
+ loose-envify "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+ integrity sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+ integrity sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-my-json-valid@^2.12.4:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ integrity sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+isarray@1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ integrity sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=
+ dependencies:
+ jsbn "~0.1.0"
+
+js-tokens@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
+ integrity sha1-eZA/VWPud4zBFi5tzxoAJ8l/nLU=
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+ integrity sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+ integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ integrity sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ integrity sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=
+ dependencies:
+ is-buffer "^1.0.2"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+lodash.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@^4.2.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+ integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
+
+loose-envify@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8"
+ integrity sha1-ayYkjEL21PpLDYVC947fzeNWQqg=
+ dependencies:
+ js-tokens "^2.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+magic-string@^0.19.0:
+ version "0.19.0"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.0.tgz#198948217254e3e0b93080e01146b7c73b2a06b2"
+ integrity sha1-GYlIIXJU4+C5MIDgEUa3xzsqBrI=
+ dependencies:
+ vlq "^0.2.1"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+meow@^3.3.0, meow@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+mime-db@~1.25.0:
+ version "1.25.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
+ integrity sha1-wY29fHOl2/b0SgJNwNFloeexw5I=
+
+mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.13"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
+ integrity sha1-4HqqnGxrmnyjASxpADrSWjnpKog=
+ dependencies:
+ mime-db "~1.25.0"
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
+
+nan@^2.3.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
+ integrity sha1-qo8eNFMdgH6eJ3VbI0tKbsDBUqg=
+
+node-pre-gyp@^0.6.29:
+ version "0.6.32"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
+ integrity sha1-/EUrN25zGbPSVfXzSFPvb9j+H9U=
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ integrity sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+ integrity sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ integrity sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+ integrity sha1-ejs9DpgGPUP0wD8uiubNUahog6A=
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+once@^1.3.0, once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+output-file-sync@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+ integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=
+ dependencies:
+ graceful-fs "^4.1.4"
+ mkdirp "^0.5.1"
+ object-assign "^4.1.0"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+pretty-bytes-cli@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes-cli/-/pretty-bytes-cli-2.0.0.tgz#e705662cffdc9c75291835333bc2f89ad3c033cf"
+ integrity sha1-5wVmLP/cnHUpGDUzO8L4mtPAM88=
+ dependencies:
+ get-stdin "^5.0.1"
+ meow "^3.6.0"
+ pretty-bytes "^4.0.0"
+
+pretty-bytes@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+ integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=
+
+private@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1"
+ integrity sha1-VcapdtD5uvuZJIUTUP5HubX7t8E=
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+ integrity sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ integrity sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+rc@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
+ integrity sha1-Q2UbdrauU7XIAvEVH6P8OwWZack=
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~1.0.4"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ integrity sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regenerator-runtime@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
+ integrity sha1-JX9BlhzkRVixj3gUr0jBdVn5+us=
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ integrity sha1-mxpsNdTQ3871cRrmUejp09cRQUU=
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^1.1.6, resolve@^1.1.7:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c"
+ integrity sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=
+
+rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=
+ dependencies:
+ glob "^7.0.5"
+
+rollup-plugin-commonjs@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-7.0.0.tgz#510762d5c423c761cd16d8e8451715b39f0ceb08"
+ integrity sha1-UQdi1cQjx2HNFtjoRRcVs58M6wg=
+ dependencies:
+ acorn "^4.0.1"
+ estree-walker "^0.3.0"
+ magic-string "^0.19.0"
+ resolve "^1.1.7"
+ rollup-pluginutils "^1.5.1"
+
+rollup-plugin-node-resolve@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.0.0.tgz#07e0ae94ac002a3ea36e8f33ca121d9f836b1309"
+ integrity sha1-B+CulKwAKj6jbo8zyhIdn4NrEwk=
+ dependencies:
+ browser-resolve "^1.11.0"
+ builtin-modules "^1.1.0"
+ resolve "^1.1.6"
+
+rollup-pluginutils@^1.5.1:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408"
+ integrity sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=
+ dependencies:
+ estree-walker "^0.2.1"
+ minimatch "^3.0.2"
+
+rollup@^0.41.1:
+ version "0.41.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.41.1.tgz#5be8192c196c35977551e52ec0c98c3f83280525"
+ integrity sha1-W+gZLBlsNZd1UeUuwMmMP4MoBSU=
+ dependencies:
+ source-map-support "^0.4.0"
+
+"semver@2 || 3 || 4 || 5", semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
+ dependencies:
+ hoek "2.x.x"
+
+source-map-support@^0.4.0, source-map-support@^0.4.2:
+ version "0.4.8"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b"
+ integrity sha1-SHGRjYo68HKJGC6XTjKEQyey6Ys=
+ dependencies:
+ source-map "^0.5.3"
+
+source-map@^0.5.0, source-map@^0.5.3:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+ integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+ integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+ integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=
+
+sshpk@^1.7.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
+ integrity sha1-MOGl0ykkSXShr2FREznVla9mOLA=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+ integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+ integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
+
+supports-color@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+ integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ integrity sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+to-fast-properties@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
+ integrity sha1-8/XAw7pymafvmUJ+RGMyV63kMyA=
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ integrity sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=
+ dependencies:
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+ integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+ integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA=
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+ integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=
+
+v8flags@^2.0.10:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881"
+ integrity sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=
+ dependencies:
+ user-home "^1.1.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ integrity sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=
+ dependencies:
+ extsprintf "1.0.2"
+
+vlq@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.1.tgz#14439d711891e682535467f8587c5630e4222a6c"
+ integrity sha1-FEOdcRiR5oJTVGf4WHxWMOQiKmw=
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ integrity sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=
+ dependencies:
+ string-width "^1.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
diff --git a/date-fns/examples/typescript/README.md b/date-fns/examples/typescript/README.md
new file mode 100644
index 0000000..98c5ad7
--- /dev/null
+++ b/date-fns/examples/typescript/README.md
@@ -0,0 +1,14 @@
+# Usage With TypeScript
+
+See [example.ts](./example.ts), [fp.ts](./fp.ts) and [misc.ts](./misc.ts) for source code examples.
+
+See [package.json scripts](./package.json) for CLI usage
+
+## Build Example
+
+```sh
+yarn
+yarn run build
+```
+
+See ./dist for output.
diff --git a/date-fns/examples/typescript/constants.ts b/date-fns/examples/typescript/constants.ts
new file mode 100644
index 0000000..832c131
--- /dev/null
+++ b/date-fns/examples/typescript/constants.ts
@@ -0,0 +1,9 @@
+import { maxTime as rootMaxTime, minTime as rootMinTime } from 'date-fns'
+import { minTime } from 'date-fns/constants'
+import { minTime as fpMinTime } from 'date-fns/fp'
+
+console.log(
+ rootMaxTime === 8640000000000000 &&
+ rootMinTime === minTime &&
+ minTime === fpMinTime
+)
diff --git a/date-fns/examples/typescript/example.ts b/date-fns/examples/typescript/example.ts
new file mode 100644
index 0000000..ed80190
--- /dev/null
+++ b/date-fns/examples/typescript/example.ts
@@ -0,0 +1,7 @@
+import { format } from 'date-fns'
+import { eo } from 'date-fns/locale'
+
+const result = format(new Date(2017, 0, 25, 21, 28, 15), 'eeee, dd MMMM HH:mm:ss', {
+ locale: eo
+})
+console.log(result === 'merkredo, 25 januaro 21:28:15')
diff --git a/date-fns/examples/typescript/fp.ts b/date-fns/examples/typescript/fp.ts
new file mode 100644
index 0000000..79d6311
--- /dev/null
+++ b/date-fns/examples/typescript/fp.ts
@@ -0,0 +1,17 @@
+import { addYears, formatWithOptions } from 'date-fns/fp'
+import { eo } from 'date-fns/locale'
+
+const addFiveYears = addYears(5)
+const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy')
+
+const dates = [
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(2017, 1 /* Feb */, 11),
+ new Date(2017, 6 /* Jul */, 2)
+]
+
+const formattedDates = dates
+ .map(date => dateToString(addFiveYears(date)))
+ .join(', ')
+
+console.log(formattedDates === '1 januaro 2022, 11 februaro 2022, 2 julio 2022')
diff --git a/date-fns/examples/typescript/misc.ts b/date-fns/examples/typescript/misc.ts
new file mode 100644
index 0000000..2f6cec4
--- /dev/null
+++ b/date-fns/examples/typescript/misc.ts
@@ -0,0 +1,7 @@
+import format from 'date-fns/format'
+import * as dateFns from 'date-fns'
+
+const date = dateFns.addDays(new Date(2017, 0, 25, 21, 28, 15), 1)
+
+const result = format(date, 'dd.MM.yyyy HH:mm:ss')
+console.log(result === '26.01.2017 21:28:15')
diff --git a/date-fns/examples/typescript/package.json b/date-fns/examples/typescript/package.json
new file mode 100644
index 0000000..9a23e62
--- /dev/null
+++ b/date-fns/examples/typescript/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "date-fns-example-typescript",
+ "version": "0.1.0",
+ "description": "Example of date-fns usage with TypeScript",
+ "main": "example.ts",
+ "author": "Sasha Koss <koss@nocorp.me>",
+ "license": "MIT",
+ "dependencies": {
+ "typescript": "3",
+ "webpack": "^4.44.1"
+ },
+ "scripts": {
+ "build": "yarn build-date-fns && yarn build-typescript && yarn build-webpack",
+ "build-date-fns": "env PACKAGE_OUTPUT_PATH=\"$(pwd)/node_modules/date-fns\" ../../scripts/build/package.sh",
+ "build-typescript": "tsc --outDir dist example.ts fp.ts misc.ts constants.ts --lib es2015,dom --esModuleInterop",
+ "build-webpack": "webpack example=./dist/example.js fp=./dist/fp misc=./dist/misc.js constants=./dist/constants.js --mode production --output-path dist --output-filename [name].bundle.js",
+ "test": "yarn test-example && yarn test-fp && yarn test-misc && yarn test-constants",
+ "test-example": "test $(env TZ=UTC node ./dist/example.bundle.js) = true",
+ "test-fp": "test $(env TZ=UTC node ./dist/fp.bundle.js) = true",
+ "test-misc": "test $(env TZ=UTC node ./dist/misc.bundle.js) = true",
+ "test-constants": "test $(node ./dist/constants.bundle.js) = true"
+ }
+}
diff --git a/date-fns/examples/typescript/yarn.lock b/date-fns/examples/typescript/yarn.lock
new file mode 100644
index 0000000..bc4e825
--- /dev/null
+++ b/date-fns/examples/typescript/yarn.lock
@@ -0,0 +1,2634 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@webassemblyjs/ast@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+ integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+ integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
+"@webassemblyjs/helper-api-error@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+ integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
+"@webassemblyjs/helper-buffer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+ integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+ integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+ integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+ integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+ integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+ integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+ integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+ integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+ integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
+"@webassemblyjs/wasm-edit@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+ integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/helper-wasm-section" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-opt" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+ integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+ integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+ integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+ integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-code-frame" "1.9.0"
+ "@webassemblyjs/helper-fsm" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+ integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abbrev@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+acorn@^6.4.1:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
+ integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+ integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.1.0, ajv@^6.10.2:
+ version "6.12.4"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234"
+ integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
+ integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+aproba@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+ integrity sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA=
+
+aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ integrity sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+asn1.js@^4.0.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40"
+ integrity sha1-SLokC0WpKA6UdImQull9IWYX/UA=
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-js@^1.0.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+ integrity sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=
+
+binary-extensions@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
+ integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
+
+bluebird@^3.5.5:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.6"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
+ integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU=
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.0.7.tgz#6677fa5e4901bdbf9c9ec2a748e28dca407a9bfc"
+ integrity sha1-Znf6XkkBvb+cnsKnSOKNykB6m/w=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a"
+ integrity sha1-Xncl297x/Vkw1OurSFZ85FHEigo=
+ dependencies:
+ buffer-xor "^1.0.2"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ integrity sha1-mYgkSHS/XtTijalWZtzWasj8Njo=
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ integrity sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f"
+ integrity sha1-EHc5EMPCBtVCCkaq2GlPgguFlo8=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+buffer-xor@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+cacache@^12.0.2:
+ version "12.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+ integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chokidar@^3.4.1:
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d"
+ integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.4.0"
+ optionalDependencies:
+ fsevents "~2.1.2"
+
+chownr@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
+ integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07"
+ integrity sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=
+ dependencies:
+ inherits "^2.0.1"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+create-ecdh@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ integrity sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad"
+ integrity sha1-USEAYte7dHn2xlu0GpIgix1hq60=
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ ripemd160 "^1.0.0"
+ sha.js "^2.3.6"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170"
+ integrity sha1-0/tLolPriz9W456i+8uK90e9MXA=
+ dependencies:
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+
+crypto-browserify@^3.11.0:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522"
+ integrity sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+debug@^2.2.0, debug@^2.3.3:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+diffie-hellman@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ integrity sha1-tYNXOScM/ias9jIJn97SoH8gnl4=
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+elliptic@^6.0.0:
+ version "6.3.3"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f"
+ integrity sha1-VILZZG1UvLif19mU/J4ulWiHbj8=
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ inherits "^2.0.1"
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126"
+ integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
+errno@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ integrity sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=
+ dependencies:
+ prr "~0.0.0"
+
+errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+esrecurse@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+
+events@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379"
+ integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==
+
+evp_bytestokey@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53"
+ integrity sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=
+ dependencies:
+ create-hash "^1.1.1"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+figgy-pudding@^3.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+ integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
+ integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==
+ dependencies:
+ minipass "^2.2.1"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
+ integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
+ dependencies:
+ nan "^2.12.1"
+ node-pre-gyp "^0.12.0"
+
+fsevents@~2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
+ integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@~5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
+ integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@^7.1.3:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+ integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ dependencies:
+ 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"
+
+glob@^7.1.4:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ 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"
+
+graceful-fs@^4.1.11:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
+ integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
+
+graceful-fs@^4.1.15:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
+ integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
+
+graceful-fs@^4.1.2:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+hash.js@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573"
+ integrity sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=
+ dependencies:
+ inherits "^2.0.1"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+iconv-lite@^0.4.4:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
+ dependencies:
+ minimatch "^3.0.4"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@^2.0.3, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+ integrity sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ integrity sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=
+ dependencies:
+ is-buffer "^1.0.2"
+
+kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@^1.2.3:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+make-dir@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d"
+ integrity sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+ integrity sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=
+
+minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minipass@^2.2.1, minipass@^2.3.5:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
+ integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
+ integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
+ dependencies:
+ minipass "^2.2.1"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@^0.5.0, mkdirp@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+mkdirp@^0.5.3:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+nan@^2.12.1:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+needle@^2.2.1:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
+ integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
+ dependencies:
+ debug "^3.2.6"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+neo-async@^2.5.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+neo-async@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-pre-gyp@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
+ integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+npm-bundled@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
+ integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
+
+npm-packlist@^1.1.6:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44"
+ integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+once@^1.3.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-limit@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@~1.0.5:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parse-asn1@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23"
+ integrity sha1-NQYPbVAV03Yox3D04JGgtaJ4vCM=
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+pbkdf2@^3.0.3:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693"
+ integrity sha1-8sSyWmAAWLPDdzwIbDfbvuH/5pM=
+ dependencies:
+ create-hmac "^1.1.2"
+
+picomatch@^2.0.4, picomatch@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
+ integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+ integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+public-encrypt@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ integrity sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+randombytes@^2.0.0, randombytes@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec"
+ integrity sha1-Z0yZdgkBw8QRJ3GjHlIdw0nMCew=
+
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ integrity sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+readdirp@~3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
+ integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==
+ dependencies:
+ picomatch "^2.2.1"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e"
+ integrity sha1-k6S71JQrxXS2mo+lfHHeEOzKfW4=
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+safe-buffer@^5.1.0, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-buffer@^5.1.2:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+semver@^5.3.0, semver@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+serialize-javascript@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+ integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+ dependencies:
+ randombytes "^2.1.0"
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+sha.js@^2.3.6:
+ version "2.4.8"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f"
+ integrity sha1-NwaMLEdra69ALRSknGf1l5IfY08=
+ dependencies:
+ inherits "^2.0.1"
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@~0.5.12:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tar@^4:
+ version "4.4.10"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1"
+ integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.5"
+ minizlib "^1.2.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.3"
+
+terser-webpack-plugin@^1.4.3:
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
+ integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^4.0.0"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^4.1.2:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
+ integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+through2@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+timers-browserify@^2.0.4:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+tslib@^1.9.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
+ integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript@3:
+ version "3.9.7"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"
+ integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
+ integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==
+
+uri-js@^4.2.2:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602"
+ integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+watchpack-chokidar2@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0"
+ integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==
+ dependencies:
+ chokidar "^2.1.8"
+
+watchpack@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b"
+ integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+ optionalDependencies:
+ chokidar "^3.4.1"
+ watchpack-chokidar2 "^2.0.0"
+
+webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^4.44.1:
+ version "4.44.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21"
+ integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/wasm-edit" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ acorn "^6.4.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.3.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.3"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.7.4"
+ webpack-sources "^1.4.1"
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ integrity sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=
+ dependencies:
+ string-width "^1.0.1"
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^3.0.0, yallist@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
+ integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
diff --git a/date-fns/examples/webpack-1.x/README.md b/date-fns/examples/webpack-1.x/README.md
new file mode 100644
index 0000000..77019c5
--- /dev/null
+++ b/date-fns/examples/webpack-1.x/README.md
@@ -0,0 +1,23 @@
+# Usage With webpack 1.x
+
+See [example.js](./example.js), [fp.js](./fp.js) and [misc.js](./misc.js) for source code examples.
+
+See [package.json scripts](./package.json) for CLI usage.
+
+## Build Example
+
+```sh
+yarn
+yarn run build
+```
+
+See ./dist for output.
+
+## Minimal Build Size
+
+You can see minimal build size (when you use just one function):
+
+```sh
+gzip-size dist/example.min.js | pretty-bytes
+#=> 6.61 kB
+```
diff --git a/date-fns/examples/webpack-1.x/constants.js b/date-fns/examples/webpack-1.x/constants.js
new file mode 100644
index 0000000..6942f28
--- /dev/null
+++ b/date-fns/examples/webpack-1.x/constants.js
@@ -0,0 +1,9 @@
+const dateFns = require('date-fns')
+const constants = require('date-fns/constants')
+const { minTime: fpMinTime } = require('date-fns/fp')
+
+console.log(
+ dateFns.maxTime === 8640000000000000 &&
+ dateFns.minTime === constants.minTime &&
+ constants.minTime === fpMinTime
+)
diff --git a/date-fns/examples/webpack-1.x/example.js b/date-fns/examples/webpack-1.x/example.js
new file mode 100644
index 0000000..e09f17c
--- /dev/null
+++ b/date-fns/examples/webpack-1.x/example.js
@@ -0,0 +1,4 @@
+var format = require('date-fns/format')
+
+var result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
+console.log(result === '25.01.2017 21:28:15')
diff --git a/date-fns/examples/webpack-1.x/fp.js b/date-fns/examples/webpack-1.x/fp.js
new file mode 100644
index 0000000..7d25ec5
--- /dev/null
+++ b/date-fns/examples/webpack-1.x/fp.js
@@ -0,0 +1,19 @@
+var addYears = require('date-fns/fp/addYears')
+var dateFns = require('date-fns/fp')
+var formatWithOptions = dateFns.formatWithOptions
+var eo = require('date-fns/locale/eo')
+
+var addFiveYears = addYears(5)
+var dateToString = formatWithOptions({locale: eo}, 'd MMMM yyyy')
+
+var dates = [
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(2017, 1 /* Feb */, 11),
+ new Date(2017, 6 /* Jul */, 2)
+]
+
+var formattedDates = dates
+ .map((date) => dateToString(addFiveYears(date)))
+ .join(', ')
+
+console.log(formattedDates === '1 januaro 2022, 11 februaro 2022, 2 julio 2022')
diff --git a/date-fns/examples/webpack-1.x/misc.js b/date-fns/examples/webpack-1.x/misc.js
new file mode 100644
index 0000000..409974b
--- /dev/null
+++ b/date-fns/examples/webpack-1.x/misc.js
@@ -0,0 +1,10 @@
+var dateFns = require('date-fns')
+var format = dateFns.format
+var eo = require('date-fns/locale/eo')
+
+var result = format(
+ new Date(2017, 0, 25, 21, 28, 15),
+ 'eeee, dd MMMM HH:mm:ss',
+ { locale: eo }
+)
+console.log(result === 'merkredo, 25 januaro 21:28:15')
diff --git a/date-fns/examples/webpack-1.x/package.json b/date-fns/examples/webpack-1.x/package.json
new file mode 100644
index 0000000..cad4bcc
--- /dev/null
+++ b/date-fns/examples/webpack-1.x/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "date-fns-example-webpack1",
+ "version": "0.1.0",
+ "description": "Example of date-fns usage with webpack 1.x",
+ "main": "example.js",
+ "author": "Sasha Koss <koss@nocorp.me>",
+ "license": "MIT",
+ "dependencies": {
+ "babili": "^0.0.9",
+ "gzip-size-cli": "^1.0.0",
+ "pretty-bytes-cli": "^2.0.0",
+ "webpack": "1"
+ },
+ "scripts": {
+ "build": "yarn run build-date-fns && yarn run build-webpack && yarn run build-babili",
+ "build-date-fns": "env PACKAGE_OUTPUT_PATH=\"$(pwd)/node_modules/date-fns\" ../../scripts/build/package.sh",
+ "build-webpack": "webpack example=./example.js fp=./fp.js misc=./misc.js constants=./constants.js --output-path dist --output-file [name].js",
+ "build-babili": "yarn run build-babili-example && yarn run build-babili-fp && yarn run build-babili-misc && yarn build-babili-constants && yarn run stats-size",
+ "build-babili-example": "babili dist/example.js --out-file dist/example.min.js --minified --no-comments",
+ "build-babili-fp": "babili dist/fp.js --out-file dist/fp.min.js --minified --no-comments",
+ "build-babili-misc": "babili dist/misc.js --out-file dist/misc.min.js --minified --no-comments",
+ "build-babili-constants": "babili dist/constants.js --out-file dist/constants.min.js --minified --no-comments",
+ "stats-size": "gzip-size dist/example.min.js | pretty-bytes",
+ "test": "yarn test-example && yarn test-fp && yarn test-misc && yarn test-constants",
+ "test-example": "test $(env TZ=UTC node ./dist/example.min.js) = true",
+ "test-fp": "test $(env TZ=UTC node ./dist/fp.min.js) = true",
+ "test-misc": "test $(env TZ=UTC node ./dist/misc.min.js) = true",
+ "test-constants": "test $(node ./dist/constants.min.js) = true"
+ }
+}
diff --git a/date-fns/examples/webpack-1.x/yarn.lock b/date-fns/examples/webpack-1.x/yarn.lock
new file mode 100644
index 0000000..c565611
--- /dev/null
+++ b/date-fns/examples/webpack-1.x/yarn.lock
@@ -0,0 +1,2344 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+abbrev@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+acorn@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+ integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+ integrity sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ integrity sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+aproba@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+ integrity sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA=
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ integrity sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+ integrity sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+ integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+
+async@^0.9.0:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+ integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
+
+async@^1.3.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+
+async@~0.2.6:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+ integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
+
+aws4@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
+ integrity sha1-Cin/t5wxyecS7rCH6OemS0pW11U=
+
+babel-cli@^6.10.1:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.18.0.tgz#92117f341add9dead90f6fa7d0a97c0cc08ec186"
+ integrity sha1-khF/NBrdnerZD2+n0Kl8DMCOwYY=
+ dependencies:
+ babel-core "^6.18.0"
+ babel-polyfill "^6.16.0"
+ babel-register "^6.18.0"
+ babel-runtime "^6.9.0"
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.0.0"
+ glob "^5.0.5"
+ lodash "^4.2.0"
+ output-file-sync "^1.1.0"
+ path-is-absolute "^1.0.0"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+ v8flags "^2.0.10"
+ optionalDependencies:
+ chokidar "^1.0.0"
+
+babel-code-frame@^6.20.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26"
+ integrity sha1-uWj4OQkPmovG1Bk4+5bLhPc4eyY=
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^2.0.0"
+
+babel-core@^6.18.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724"
+ integrity sha1-dVJUgMIcgD+CbvOGfSLBnwgKNyQ=
+ dependencies:
+ babel-code-frame "^6.20.0"
+ babel-generator "^6.21.0"
+ babel-helpers "^6.16.0"
+ babel-messages "^6.8.0"
+ babel-register "^6.18.0"
+ babel-runtime "^6.20.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.21.0"
+ babel-types "^6.21.0"
+ babylon "^6.11.0"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.21.0.tgz#605f1269c489a1c75deeca7ea16d43d4656c8494"
+ integrity sha1-YF8SacSJocdd7sp+oW1D1GVshJQ=
+ dependencies:
+ babel-messages "^6.8.0"
+ babel-runtime "^6.20.0"
+ babel-types "^6.21.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+
+babel-helper-flip-expressions@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.0.1.tgz#c2ba1599426e7928333fd5c08eee6cdf8328c848"
+ integrity sha1-wroVmUJueSgzP9XAju5s34MoyEg=
+
+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.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.0.1.tgz#ed74553b883e68226ae45f989a99b02c190f105a"
+ integrity sha1-7XRVO4g+aCJq5F+YmpmwLBkPEFo=
+
+babel-helper-remove-or-void@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.0.1.tgz#f602790e465acf2dfbe84fb3dd210c43a2dd7262"
+ integrity sha1-9gJ5DkZazy376E+z3SEMQ6LdcmI=
+
+babel-helper-to-multiple-sequence-expressions@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.0.2.tgz#07d5d2e674aa62962ac9e0000b539920c301c4b9"
+ integrity sha1-B9XS5nSqYpYqyeAAC1OZIMMBxLk=
+
+babel-helpers@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3"
+ integrity sha1-EJXsENmSeUYFU+Z+s+7plz04Z+M=
+ dependencies:
+ babel-runtime "^6.0.0"
+ babel-template "^6.16.0"
+
+babel-messages@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9"
+ integrity sha1-v1BHNsqWfm1l7wrbWipflHyODrk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-minify-constant-folding@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.0.1.tgz#d4abb5b62ccfc094bdce2a318b2f94fda5a73e29"
+ integrity sha1-1Ku1tizPwJS9zioxiy+U/aWnPik=
+
+babel-plugin-minify-dead-code-elimination@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.1.tgz#1a0133fcd06c7fa477b01c193ba3213c8944ff01"
+ integrity sha1-GgEz/NBsf6R3sBwZO6MhPIlE/wE=
+ dependencies:
+ babel-helper-remove-or-void "^0.0.1"
+ lodash.some "^4.6.0"
+
+babel-plugin-minify-flip-comparisons@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.0.1.tgz#679f4493a692afc705c4b79fde1dadb535c4eb08"
+ integrity sha1-Z59Ek6aSr8cFxLef3h2ttTXE6wg=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-minify-guarded-expressions@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.0.3.tgz#6da1caa0b6abda964647377bd5e19afdbf91cae8"
+ integrity sha1-baHKoLar2pZGRzd71eGa/b+Ryug=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.1"
+
+babel-plugin-minify-infinity@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.0.1.tgz#9394a4defc9db56da76f13fedd5d5e2d486a4299"
+ integrity sha1-k5Sk3vydtW2nbxP+3V1eLUhqQpk=
+
+babel-plugin-minify-mangle-names@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.0.4.tgz#94812c0c82320f7af97511b7d598527933973197"
+ integrity sha1-lIEsDIIyD3r5dRG31ZhSeTOXMZc=
+
+babel-plugin-minify-numeric-literals@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.0.1.tgz#9597e6c31154d7daf3744d0bd417c144b275bd53"
+ integrity sha1-lZfmwxFU19rzdE0L1BfBRLJ1vVM=
+
+babel-plugin-minify-replace@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.0.1.tgz#5d5aea7cb9899245248d1ee9ce7a2fe556a8facc"
+ integrity sha1-XVrqfLmJkkUkjR7pznov5Vao+sw=
+
+babel-plugin-minify-simplify@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.0.4.tgz#940d0dd0db6d4c4c1c51fc34c3c6e0d0ee1d67e9"
+ integrity sha1-lA0N0NttTEwcUfw0w8bg0O4dZ+k=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.1"
+ babel-helper-is-nodes-equiv "^0.0.1"
+ babel-helper-to-multiple-sequence-expressions "^0.0.2"
+
+babel-plugin-minify-type-constructors@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.0.2.tgz#4f9a28951e776f31ac11a29cd58cf9eef8b2e292"
+ integrity sha1-T5oolR53bzGsEaKc1Yz57viy4pI=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-transform-member-expression-literals@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.0.tgz#718755a70492a895d8f41810afa9998bc09f57b9"
+ integrity sha1-cYdVpwSSqJXY9BgQr6mZi8CfV7k=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-merge-sibling-variables@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.0.tgz#724074e4ef78b601fcf9a34165c972a1b6117e99"
+ integrity sha1-ckB05O94tgH8+aNBZclyobYRfpk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-minify-booleans@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.0.tgz#b1a48864a727847696b84eae36fa4d085a54b42b"
+ integrity sha1-saSIZKcnhHaWuE6uNvpNCFpUtCs=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-property-literals@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.0.tgz#a65b2e6e1274d25df0f3a4c5e85bc8f1cdd9e019"
+ integrity sha1-plsubhJ00l3w86TF6FvI8c3Z4Bk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-regexp-constructors@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.0.1.tgz#c5878cc4d78437e99d02790d325f163741741ff5"
+ integrity sha1-xYeMxNeEN+mdAnkNMl8WN0F0H/U=
+
+babel-plugin-transform-simplify-comparison-operators@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.0.tgz#0183d65bfdc54c80d922a3a9b3008e25fa9d32a7"
+ integrity sha1-AYPWW/3FTIDZIqOpswCOJfqdMqc=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-undefined-to-void@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.0.tgz#bc5b6b4908d3b1262170e67cb3963903ddce167e"
+ integrity sha1-vFtrSQjTsSYhcOZ8s5Y5A93OFn4=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-polyfill@^6.16.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.20.0.tgz#de4a371006139e20990aac0be367d398331204e7"
+ integrity sha1-3ko3EAYTniCZCqwL42fTmDMSBOc=
+ dependencies:
+ babel-runtime "^6.20.0"
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-preset-babili@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/babel-preset-babili/-/babel-preset-babili-0.0.8.tgz#aeba08a21171166e448fd4226c3cf03bcf682122"
+ integrity sha1-rroIohFxFm5Ej9QibDzwO89oISI=
+ dependencies:
+ babel-plugin-minify-constant-folding "^0.0.1"
+ babel-plugin-minify-dead-code-elimination "^0.1.0"
+ babel-plugin-minify-flip-comparisons "^0.0.1"
+ babel-plugin-minify-guarded-expressions "^0.0.3"
+ babel-plugin-minify-infinity "^0.0.1"
+ babel-plugin-minify-mangle-names "^0.0.4"
+ babel-plugin-minify-numeric-literals "^0.0.1"
+ babel-plugin-minify-replace "^0.0.1"
+ babel-plugin-minify-simplify "^0.0.4"
+ babel-plugin-minify-type-constructors "^0.0.2"
+ babel-plugin-transform-member-expression-literals "^6.8.0"
+ babel-plugin-transform-merge-sibling-variables "^6.8.0"
+ babel-plugin-transform-minify-booleans "^6.8.0"
+ babel-plugin-transform-property-literals "^6.8.0"
+ babel-plugin-transform-regexp-constructors "^0.0.1"
+ babel-plugin-transform-simplify-comparison-operators "^6.8.0"
+ babel-plugin-transform-undefined-to-void "^6.8.0"
+
+babel-register@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68"
+ integrity sha1-iS4uA4ZQeN2QrSxxURHsREmzKmg=
+ dependencies:
+ babel-core "^6.18.0"
+ babel-runtime "^6.11.6"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.20.0, babel-runtime@^6.9.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f"
+ integrity sha1-hzAL3PTNdw8JvwBIxkIE4XgG0W8=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
+ integrity sha1-4UndGp8Do1+BfdvE0EgZiOfryMo=
+ dependencies:
+ babel-runtime "^6.9.0"
+ babel-traverse "^6.16.0"
+ babel-types "^6.16.0"
+ babylon "^6.11.0"
+ lodash "^4.2.0"
+
+babel-traverse@^6.16.0, babel-traverse@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad"
+ integrity sha1-acY2WATxpPaesSE/hbAKgYuMIa0=
+ dependencies:
+ babel-code-frame "^6.20.0"
+ babel-messages "^6.8.0"
+ babel-runtime "^6.20.0"
+ babel-types "^6.21.0"
+ babylon "^6.11.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.16.0, babel-types@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2"
+ integrity sha1-MUuSFoiR7204Brf3qRf9+HwRpLI=
+ dependencies:
+ babel-runtime "^6.20.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babili@^0.0.9:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/babili/-/babili-0.0.9.tgz#cf1277f34d8265101847e2c5ac11771684f2b1d4"
+ integrity sha1-zxJ3802CZRAYR+LFrBF3FoTysdQ=
+ dependencies:
+ babel-cli "^6.10.1"
+ babel-preset-babili "^0.0.8"
+
+babylon@^6.11.0:
+ version "6.14.1"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
+ integrity sha1-lWJ1+rcnU62bNDXXr+WPi/CimBU=
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
+
+base64-js@^1.0.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+ integrity sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
+ integrity sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+ integrity sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+browserify-aes@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
+ integrity sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=
+ dependencies:
+ inherits "^2.0.1"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
+ dependencies:
+ pako "~0.2.0"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+buffer@^4.9.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+ integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c=
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^1.1.0, chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chokidar@^1.0.0:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+ integrity sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+clone@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+ integrity sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.8.1, commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+convert-source-map@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
+ integrity sha1-6fPpxuJyjvwmdmlqcOs4L3MQamc=
+
+core-js@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+ integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
+ dependencies:
+ boom "2.x.x"
+
+crypto-browserify@3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
+ integrity sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=
+ dependencies:
+ browserify-aes "0.4.0"
+ pbkdf2-compat "2.0.1"
+ ripemd160 "0.2.0"
+ sha.js "2.2.6"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+debug@^2.1.1, debug@^2.2.0, debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
+ dependencies:
+ ms "0.7.1"
+
+decamelize@^1.0.0, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+ integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
+ dependencies:
+ jsbn "~0.1.0"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+enhanced-resolve@~0.9.0:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
+ integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.2.0"
+ tapable "^0.1.8"
+
+errno@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ integrity sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=
+ dependencies:
+ prr "~0.0.0"
+
+error-ex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+ integrity sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+ integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+ integrity sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+ integrity sha1-4QgOBljjALBilJkMxw4VAiNf1VA=
+
+filename-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+ integrity sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+for-in@^0.1.5:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
+ integrity sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=
+
+for-own@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
+ integrity sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=
+ dependencies:
+ for-in "^0.1.5"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ integrity sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs-readdir-recursive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
+ integrity sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.0.0:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558"
+ integrity sha1-hTfz8SJyZ4dltP1lKMDx9m+PRVg=
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ integrity sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gauge@~2.7.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774"
+ integrity sha1-Fc7MMbAtBTRaXWsOFxzbOtIwd3Q=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^0.2.0"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+ integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
+ dependencies:
+ is-property "^1.0.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+ integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ integrity sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^5.0.5:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.0.0:
+ version "9.14.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
+ integrity sha1-iFmTavADh0EmMFOznQ52yiQeQDQ=
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.4:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+gzip-size-cli@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size-cli/-/gzip-size-cli-1.0.0.tgz#97ef47b1600a2ad8f9c31539661eab39ec36caed"
+ integrity sha1-l+9HsWAKKtj5wxU5Zh6rOew2yu0=
+ dependencies:
+ gzip-size "^3.0.0"
+ meow "^3.3.0"
+
+gzip-size@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
+ dependencies:
+ duplexer "^0.1.1"
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+ integrity sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+ integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+interpret@^0.6.4:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
+ integrity sha1-/s16GOfOXKar+5U+H4YhOknxYls=
+
+invariant@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A=
+ dependencies:
+ loose-envify "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+ integrity sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+ integrity sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-my-json-valid@^2.12.4:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ integrity sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ integrity sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=
+ dependencies:
+ jsbn "~0.1.0"
+
+js-tokens@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
+ integrity sha1-eZA/VWPud4zBFi5tzxoAJ8l/nLU=
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+ integrity sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+ integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ integrity sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ integrity sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=
+ dependencies:
+ is-buffer "^1.0.2"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+loader-utils@^0.2.11:
+ version "0.2.16"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
+ integrity sha1-8IYyBm7YKCg13/iN+1JwR2Wt7m0=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+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@^4.2.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+ integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8"
+ integrity sha1-ayYkjEL21PpLDYVC947fzeNWQqg=
+ dependencies:
+ js-tokens "^2.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+memory-fs@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
+ integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA=
+
+memory-fs@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
+ integrity sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.3.0, meow@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+mime-db@~1.25.0:
+ version "1.25.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
+ integrity sha1-wY29fHOl2/b0SgJNwNFloeexw5I=
+
+mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.13"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
+ integrity sha1-4HqqnGxrmnyjASxpADrSWjnpKog=
+ dependencies:
+ mime-db "~1.25.0"
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8, minimist@~0.0.1:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
+
+nan@^2.3.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
+ integrity sha1-qo8eNFMdgH6eJ3VbI0tKbsDBUqg=
+
+node-libs-browser@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b"
+ integrity sha1-PicsCBnjCJNeJmdECNevDhSRuDs=
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.1.4"
+ buffer "^4.9.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "3.3.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "0.0.1"
+ os-browserify "^0.2.0"
+ path-browserify "0.0.0"
+ process "^0.11.0"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.0.5"
+ stream-browserify "^2.0.1"
+ stream-http "^2.3.1"
+ string_decoder "^0.10.25"
+ timers-browserify "^2.0.2"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-pre-gyp@^0.6.29:
+ version "0.6.32"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
+ integrity sha1-/EUrN25zGbPSVfXzSFPvb9j+H9U=
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ integrity sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+ integrity sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ integrity sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+ integrity sha1-ejs9DpgGPUP0wD8uiubNUahog6A=
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+once@^1.3.0, once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+optimist@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+os-browserify@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+ integrity sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+output-file-sync@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+ integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=
+ dependencies:
+ graceful-fs "^4.1.4"
+ mkdirp "^0.5.1"
+ object-assign "^4.1.0"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+ integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pbkdf2-compat@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
+ integrity sha1-tuDI+plJTZTgURV1gCpZpcFC8og=
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+pretty-bytes-cli@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes-cli/-/pretty-bytes-cli-2.0.0.tgz#e705662cffdc9c75291835333bc2f89ad3c033cf"
+ integrity sha1-5wVmLP/cnHUpGDUzO8L4mtPAM88=
+ dependencies:
+ get-stdin "^5.0.1"
+ meow "^3.6.0"
+ pretty-bytes "^4.0.0"
+
+pretty-bytes@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+ integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=
+
+private@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1"
+ integrity sha1-VcapdtD5uvuZJIUTUP5HubX7t8E=
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+process@^0.11.0:
+ version "0.11.9"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+ integrity sha1-e9WtIapiU+fahoImTx4R0RwDGME=
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+ integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+ integrity sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ integrity sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+rc@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
+ integrity sha1-Q2UbdrauU7XIAvEVH6P8OwWZack=
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~1.0.4"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ integrity sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regenerator-runtime@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
+ integrity sha1-JX9BlhzkRVixj3gUr0jBdVn5+us=
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ integrity sha1-mxpsNdTQ3871cRrmUejp09cRQUU=
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
+ integrity sha1-K/GYveFnys+lHAqSjoS2i74XH84=
+
+"semver@2 || 3 || 4 || 5", semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+sha.js@2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
+ integrity sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
+ dependencies:
+ hoek "2.x.x"
+
+source-list-map@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e"
+ integrity sha1-1LXOKkZTXHLH6FJ8cad9JQYYFy4=
+
+source-map-support@^0.4.2:
+ version "0.4.8"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b"
+ integrity sha1-SHGRjYo68HKJGC6XTjKEQyey6Ys=
+ dependencies:
+ source-map "^0.5.3"
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+ integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
+
+source-map@~0.4.1:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
+ dependencies:
+ amdefine ">=0.0.4"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+ integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+ integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=
+
+sshpk@^1.7.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
+ integrity sha1-MOGl0ykkSXShr2FREznVla9mOLA=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-http@^2.3.1:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.0.tgz#adf3309ced17624ebfb7ef13e6ac4cfe405a8b12"
+ integrity sha1-rfMwnO0XYk6/t+8T5qxM/kBaixI=
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.1.0"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@^0.10.25, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+ integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+ integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
+
+supports-color@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+ integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^3.1.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU=
+ dependencies:
+ has-flag "^1.0.0"
+
+tapable@^0.1.8, tapable@~0.1.8:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
+ integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ integrity sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+timers-browserify@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
+ integrity sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=
+ dependencies:
+ setimmediate "^1.0.4"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
+ integrity sha1-8/XAw7pymafvmUJ+RGMyV63kMyA=
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ integrity sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=
+ dependencies:
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+ integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+uglify-js@~2.7.3:
+ version "2.7.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
+ integrity sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=
+ dependencies:
+ async "~0.2.6"
+ source-map "~0.5.1"
+ uglify-to-browserify "~1.0.0"
+ yargs "~3.10.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+ integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA=
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3, util@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+ integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=
+
+v8flags@^2.0.10:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881"
+ integrity sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=
+ dependencies:
+ user-home "^1.1.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ integrity sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=
+ dependencies:
+ extsprintf "1.0.2"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
+ dependencies:
+ indexof "0.0.1"
+
+watchpack@^0.2.1:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
+ integrity sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=
+ dependencies:
+ async "^0.9.0"
+ chokidar "^1.0.0"
+ graceful-fs "^4.1.2"
+
+webpack-core@~0.6.9:
+ version "0.6.9"
+ resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
+ integrity sha1-/FcViMhVjad76e+23r3Fo7FyvcI=
+ dependencies:
+ source-list-map "~0.1.7"
+ source-map "~0.4.1"
+
+webpack@1:
+ version "1.14.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.14.0.tgz#54f1ffb92051a328a5b2057d6ae33c289462c823"
+ integrity sha1-VPH/uSBRoyilsgV9auM8KJRiyCM=
+ dependencies:
+ acorn "^3.0.0"
+ async "^1.3.0"
+ clone "^1.0.2"
+ enhanced-resolve "~0.9.0"
+ interpret "^0.6.4"
+ loader-utils "^0.2.11"
+ memory-fs "~0.3.0"
+ mkdirp "~0.5.0"
+ node-libs-browser "^0.7.0"
+ optimist "~0.6.0"
+ supports-color "^3.1.0"
+ tapable "~0.1.8"
+ uglify-js "~2.7.3"
+ watchpack "^0.2.1"
+ webpack-core "~0.6.9"
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ integrity sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=
+ dependencies:
+ string-width "^1.0.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
diff --git a/date-fns/examples/webpack-2.x/README.md b/date-fns/examples/webpack-2.x/README.md
new file mode 100644
index 0000000..5445742
--- /dev/null
+++ b/date-fns/examples/webpack-2.x/README.md
@@ -0,0 +1,26 @@
+# Usage With webpack 2.x
+
+**Important**: as at webpack 2.2.0, tree-shaking is not removing all unused imports.
+See [webpack issue #2867](https://github.com/webpack/webpack/issues/2867)
+
+See [example.js](./example.js), [fp.js](./fp.js) and [misc.js](./misc.js) for source code examples.
+
+See [package.json scripts](./package.json) for CLI usage.
+
+## Build Example
+
+```sh
+yarn
+yarn run build
+```
+
+See ./dist for output.
+
+## Minimal Build Size
+
+You can see minimal build size (when you use just one function):
+
+```sh
+gzip-size dist/example.min.js | pretty-bytes
+#=> 13.1 kB
+```
diff --git a/date-fns/examples/webpack-2.x/example.js b/date-fns/examples/webpack-2.x/example.js
new file mode 100644
index 0000000..3afa67b
--- /dev/null
+++ b/date-fns/examples/webpack-2.x/example.js
@@ -0,0 +1,4 @@
+import { format } from 'date-fns/esm'
+
+const result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
+console.log(result === '25.01.2017 21:28:15')
diff --git a/date-fns/examples/webpack-2.x/fp.js b/date-fns/examples/webpack-2.x/fp.js
new file mode 100644
index 0000000..41a29d0
--- /dev/null
+++ b/date-fns/examples/webpack-2.x/fp.js
@@ -0,0 +1,18 @@
+import addYears from 'date-fns/esm/fp/addYears'
+import {formatWithOptions} from 'date-fns/esm/fp'
+import {eo} from 'date-fns/esm/locale'
+
+const addFiveYears = addYears(5)
+const dateToString = formatWithOptions({locale: eo}, 'd MMMM yyyy')
+
+const dates = [
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(2017, 1 /* Feb */, 11),
+ new Date(2017, 6 /* Jul */, 2)
+]
+
+const formattedDates = dates
+ .map((date) => dateToString(addFiveYears(date)))
+ .join(', ')
+
+console.log(formattedDates === '1 januaro 2022, 11 februaro 2022, 2 julio 2022')
diff --git a/date-fns/examples/webpack-2.x/misc.js b/date-fns/examples/webpack-2.x/misc.js
new file mode 100644
index 0000000..d096f16
--- /dev/null
+++ b/date-fns/examples/webpack-2.x/misc.js
@@ -0,0 +1,9 @@
+import format from 'date-fns/esm/format'
+import eo from 'date-fns/esm/locale/eo'
+
+const result = format(
+ new Date(2017, 0, 25, 21, 28, 15),
+ 'eeee, dd MMMM HH:mm:ss',
+ { locale: eo }
+)
+console.log(result === 'merkredo, 25 januaro 21:28:15')
diff --git a/date-fns/examples/webpack-2.x/package.json b/date-fns/examples/webpack-2.x/package.json
new file mode 100644
index 0000000..637de0b
--- /dev/null
+++ b/date-fns/examples/webpack-2.x/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "date-fns-example-webpack2",
+ "version": "0.1.0",
+ "description": "Example of date-fns usage with webpack 2.x",
+ "main": "example.js",
+ "author": "Sasha Koss <koss@nocorp.me>",
+ "license": "MIT",
+ "dependencies": {
+ "babili": "^0.0.9",
+ "gzip-size-cli": "^1.0.0",
+ "pretty-bytes-cli": "^2.0.0",
+ "webpack": "^2.2.0"
+ },
+ "scripts": {
+ "build": "yarn run build-date-fns && yarn run build-webpack && yarn run build-babili",
+ "build-date-fns": "env PACKAGE_OUTPUT_PATH=\"$(pwd)/node_modules/date-fns\" ../../scripts/build/package.sh",
+ "build-webpack": "webpack example=./example.js fp=./fp.js misc=./misc.js --output-path dist --output-filename [name].js",
+ "build-babili": "yarn run build-babili-example && yarn run build-babili-fp && yarn run build-babili-misc && yarn run stats-size",
+ "build-babili-example": "babili dist/example.js --out-file dist/example.min.js --minified --no-comments",
+ "build-babili-fp": "babili dist/fp.js --out-file dist/fp.min.js --minified --no-comments",
+ "build-babili-misc": "babili dist/misc.js --out-file dist/misc.min.js --minified --no-comments",
+ "stats-size": "gzip-size dist/example.min.js | pretty-bytes",
+ "test": "yarn run test-example && yarn run test-fp && yarn run test-misc",
+ "test-example": "test $(env TZ=UTC node ./dist/example.min.js) = true",
+ "test-fp": "test $(env TZ=UTC node ./dist/fp.min.js) = true",
+ "test-misc": "test $(env TZ=UTC node ./dist/misc.min.js) = true"
+ }
+}
diff --git a/date-fns/examples/webpack-2.x/yarn.lock b/date-fns/examples/webpack-2.x/yarn.lock
new file mode 100644
index 0000000..bb16224
--- /dev/null
+++ b/date-fns/examples/webpack-2.x/yarn.lock
@@ -0,0 +1,2642 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+abbrev@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+acorn-dynamic-import@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.1.tgz#23f671eb6e650dab277fef477c321b1178a8cca2"
+ integrity sha1-I/Zx625lDasnf+9HfDIbEXiozKI=
+ dependencies:
+ acorn "^4.0.3"
+
+acorn@^4.0.3, acorn@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a"
+ integrity sha1-F6jWp6bE71OLgU7Jq6wneSk78wo=
+
+ajv-keywords@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.0.tgz#c11e6859eafff83e0dafc416929472eca946aa2c"
+ integrity sha1-wR5oWer/+D4Nr8QWkpRy7KlGqiw=
+
+ajv@^4.7.0:
+ version "4.10.4"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.4.tgz#c0974dd00b3464984892d6010aa9c2c945933254"
+ integrity sha1-wJdN0As0ZJhIktYBCqnCyUWTMlQ=
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+ integrity sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ integrity sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+aproba@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+ integrity sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA=
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ integrity sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+ integrity sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1.js@^4.0.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40"
+ integrity sha1-SLokC0WpKA6UdImQull9IWYX/UA=
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+ integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+
+async@^2.1.2:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
+ integrity sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=
+ dependencies:
+ lodash "^4.14.0"
+
+async@~0.2.6:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+ integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
+
+aws4@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
+ integrity sha1-Cin/t5wxyecS7rCH6OemS0pW11U=
+
+babel-cli@^6.10.1:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.18.0.tgz#92117f341add9dead90f6fa7d0a97c0cc08ec186"
+ integrity sha1-khF/NBrdnerZD2+n0Kl8DMCOwYY=
+ dependencies:
+ babel-core "^6.18.0"
+ babel-polyfill "^6.16.0"
+ babel-register "^6.18.0"
+ babel-runtime "^6.9.0"
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.0.0"
+ glob "^5.0.5"
+ lodash "^4.2.0"
+ output-file-sync "^1.1.0"
+ path-is-absolute "^1.0.0"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+ v8flags "^2.0.10"
+ optionalDependencies:
+ chokidar "^1.0.0"
+
+babel-code-frame@^6.20.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26"
+ integrity sha1-uWj4OQkPmovG1Bk4+5bLhPc4eyY=
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^2.0.0"
+
+babel-core@^6.18.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724"
+ integrity sha1-dVJUgMIcgD+CbvOGfSLBnwgKNyQ=
+ dependencies:
+ babel-code-frame "^6.20.0"
+ babel-generator "^6.21.0"
+ babel-helpers "^6.16.0"
+ babel-messages "^6.8.0"
+ babel-register "^6.18.0"
+ babel-runtime "^6.20.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.21.0"
+ babel-types "^6.21.0"
+ babylon "^6.11.0"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.21.0.tgz#605f1269c489a1c75deeca7ea16d43d4656c8494"
+ integrity sha1-YF8SacSJocdd7sp+oW1D1GVshJQ=
+ dependencies:
+ babel-messages "^6.8.0"
+ babel-runtime "^6.20.0"
+ babel-types "^6.21.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+
+babel-helper-flip-expressions@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.0.1.tgz#c2ba1599426e7928333fd5c08eee6cdf8328c848"
+ integrity sha1-wroVmUJueSgzP9XAju5s34MoyEg=
+
+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.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.0.1.tgz#ed74553b883e68226ae45f989a99b02c190f105a"
+ integrity sha1-7XRVO4g+aCJq5F+YmpmwLBkPEFo=
+
+babel-helper-remove-or-void@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.0.1.tgz#f602790e465acf2dfbe84fb3dd210c43a2dd7262"
+ integrity sha1-9gJ5DkZazy376E+z3SEMQ6LdcmI=
+
+babel-helper-to-multiple-sequence-expressions@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.0.2.tgz#07d5d2e674aa62962ac9e0000b539920c301c4b9"
+ integrity sha1-B9XS5nSqYpYqyeAAC1OZIMMBxLk=
+
+babel-helpers@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3"
+ integrity sha1-EJXsENmSeUYFU+Z+s+7plz04Z+M=
+ dependencies:
+ babel-runtime "^6.0.0"
+ babel-template "^6.16.0"
+
+babel-messages@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9"
+ integrity sha1-v1BHNsqWfm1l7wrbWipflHyODrk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-minify-constant-folding@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.0.1.tgz#d4abb5b62ccfc094bdce2a318b2f94fda5a73e29"
+ integrity sha1-1Ku1tizPwJS9zioxiy+U/aWnPik=
+
+babel-plugin-minify-dead-code-elimination@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.1.tgz#1a0133fcd06c7fa477b01c193ba3213c8944ff01"
+ integrity sha1-GgEz/NBsf6R3sBwZO6MhPIlE/wE=
+ dependencies:
+ babel-helper-remove-or-void "^0.0.1"
+ lodash.some "^4.6.0"
+
+babel-plugin-minify-flip-comparisons@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.0.1.tgz#679f4493a692afc705c4b79fde1dadb535c4eb08"
+ integrity sha1-Z59Ek6aSr8cFxLef3h2ttTXE6wg=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-minify-guarded-expressions@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.0.3.tgz#6da1caa0b6abda964647377bd5e19afdbf91cae8"
+ integrity sha1-baHKoLar2pZGRzd71eGa/b+Ryug=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.1"
+
+babel-plugin-minify-infinity@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.0.1.tgz#9394a4defc9db56da76f13fedd5d5e2d486a4299"
+ integrity sha1-k5Sk3vydtW2nbxP+3V1eLUhqQpk=
+
+babel-plugin-minify-mangle-names@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.0.4.tgz#94812c0c82320f7af97511b7d598527933973197"
+ integrity sha1-lIEsDIIyD3r5dRG31ZhSeTOXMZc=
+
+babel-plugin-minify-numeric-literals@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.0.1.tgz#9597e6c31154d7daf3744d0bd417c144b275bd53"
+ integrity sha1-lZfmwxFU19rzdE0L1BfBRLJ1vVM=
+
+babel-plugin-minify-replace@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.0.1.tgz#5d5aea7cb9899245248d1ee9ce7a2fe556a8facc"
+ integrity sha1-XVrqfLmJkkUkjR7pznov5Vao+sw=
+
+babel-plugin-minify-simplify@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.0.4.tgz#940d0dd0db6d4c4c1c51fc34c3c6e0d0ee1d67e9"
+ integrity sha1-lA0N0NttTEwcUfw0w8bg0O4dZ+k=
+ dependencies:
+ babel-helper-flip-expressions "^0.0.1"
+ babel-helper-is-nodes-equiv "^0.0.1"
+ babel-helper-to-multiple-sequence-expressions "^0.0.2"
+
+babel-plugin-minify-type-constructors@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.0.2.tgz#4f9a28951e776f31ac11a29cd58cf9eef8b2e292"
+ integrity sha1-T5oolR53bzGsEaKc1Yz57viy4pI=
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-transform-member-expression-literals@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.0.tgz#718755a70492a895d8f41810afa9998bc09f57b9"
+ integrity sha1-cYdVpwSSqJXY9BgQr6mZi8CfV7k=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-merge-sibling-variables@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.0.tgz#724074e4ef78b601fcf9a34165c972a1b6117e99"
+ integrity sha1-ckB05O94tgH8+aNBZclyobYRfpk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-minify-booleans@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.0.tgz#b1a48864a727847696b84eae36fa4d085a54b42b"
+ integrity sha1-saSIZKcnhHaWuE6uNvpNCFpUtCs=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-property-literals@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.0.tgz#a65b2e6e1274d25df0f3a4c5e85bc8f1cdd9e019"
+ integrity sha1-plsubhJ00l3w86TF6FvI8c3Z4Bk=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-regexp-constructors@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.0.1.tgz#c5878cc4d78437e99d02790d325f163741741ff5"
+ integrity sha1-xYeMxNeEN+mdAnkNMl8WN0F0H/U=
+
+babel-plugin-transform-simplify-comparison-operators@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.0.tgz#0183d65bfdc54c80d922a3a9b3008e25fa9d32a7"
+ integrity sha1-AYPWW/3FTIDZIqOpswCOJfqdMqc=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-plugin-transform-undefined-to-void@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.0.tgz#bc5b6b4908d3b1262170e67cb3963903ddce167e"
+ integrity sha1-vFtrSQjTsSYhcOZ8s5Y5A93OFn4=
+ dependencies:
+ babel-runtime "^6.0.0"
+
+babel-polyfill@^6.16.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.20.0.tgz#de4a371006139e20990aac0be367d398331204e7"
+ integrity sha1-3ko3EAYTniCZCqwL42fTmDMSBOc=
+ dependencies:
+ babel-runtime "^6.20.0"
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-preset-babili@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/babel-preset-babili/-/babel-preset-babili-0.0.8.tgz#aeba08a21171166e448fd4226c3cf03bcf682122"
+ integrity sha1-rroIohFxFm5Ej9QibDzwO89oISI=
+ dependencies:
+ babel-plugin-minify-constant-folding "^0.0.1"
+ babel-plugin-minify-dead-code-elimination "^0.1.0"
+ babel-plugin-minify-flip-comparisons "^0.0.1"
+ babel-plugin-minify-guarded-expressions "^0.0.3"
+ babel-plugin-minify-infinity "^0.0.1"
+ babel-plugin-minify-mangle-names "^0.0.4"
+ babel-plugin-minify-numeric-literals "^0.0.1"
+ babel-plugin-minify-replace "^0.0.1"
+ babel-plugin-minify-simplify "^0.0.4"
+ babel-plugin-minify-type-constructors "^0.0.2"
+ babel-plugin-transform-member-expression-literals "^6.8.0"
+ babel-plugin-transform-merge-sibling-variables "^6.8.0"
+ babel-plugin-transform-minify-booleans "^6.8.0"
+ babel-plugin-transform-property-literals "^6.8.0"
+ babel-plugin-transform-regexp-constructors "^0.0.1"
+ babel-plugin-transform-simplify-comparison-operators "^6.8.0"
+ babel-plugin-transform-undefined-to-void "^6.8.0"
+
+babel-register@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68"
+ integrity sha1-iS4uA4ZQeN2QrSxxURHsREmzKmg=
+ dependencies:
+ babel-core "^6.18.0"
+ babel-runtime "^6.11.6"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.20.0, babel-runtime@^6.9.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f"
+ integrity sha1-hzAL3PTNdw8JvwBIxkIE4XgG0W8=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.16.0:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
+ integrity sha1-4UndGp8Do1+BfdvE0EgZiOfryMo=
+ dependencies:
+ babel-runtime "^6.9.0"
+ babel-traverse "^6.16.0"
+ babel-types "^6.16.0"
+ babylon "^6.11.0"
+ lodash "^4.2.0"
+
+babel-traverse@^6.16.0, babel-traverse@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad"
+ integrity sha1-acY2WATxpPaesSE/hbAKgYuMIa0=
+ dependencies:
+ babel-code-frame "^6.20.0"
+ babel-messages "^6.8.0"
+ babel-runtime "^6.20.0"
+ babel-types "^6.21.0"
+ babylon "^6.11.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.16.0, babel-types@^6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2"
+ integrity sha1-MUuSFoiR7204Brf3qRf9+HwRpLI=
+ dependencies:
+ babel-runtime "^6.20.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babili@^0.0.9:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/babili/-/babili-0.0.9.tgz#cf1277f34d8265101847e2c5ac11771684f2b1d4"
+ integrity sha1-zxJ3802CZRAYR+LFrBF3FoTysdQ=
+ dependencies:
+ babel-cli "^6.10.1"
+ babel-preset-babili "^0.0.8"
+
+babylon@^6.11.0:
+ version "6.14.1"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
+ integrity sha1-lWJ1+rcnU62bNDXXr+WPi/CimBU=
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
+
+base64-js@^1.0.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+ integrity sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
+ integrity sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+ integrity sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.6"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
+ integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU=
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+brorand@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.0.6.tgz#4028706b915f91f7b349a2e0bf3c376039d216e5"
+ integrity sha1-QChwa5FfkfezSaLgvzw3YDnSFuU=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a"
+ integrity sha1-Xncl297x/Vkw1OurSFZ85FHEigo=
+ dependencies:
+ buffer-xor "^1.0.2"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ integrity sha1-mYgkSHS/XtTijalWZtzWasj8Njo=
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ integrity sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f"
+ integrity sha1-EHc5EMPCBtVCCkaq2GlPgguFlo8=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
+ dependencies:
+ pako "~0.2.0"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+buffer-xor@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+ integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+ integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c=
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^1.1.0, chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chokidar@^1.0.0, chokidar@^1.4.3:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+ integrity sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07"
+ integrity sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=
+ dependencies:
+ inherits "^2.0.1"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.8.1, commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+convert-source-map@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
+ integrity sha1-6fPpxuJyjvwmdmlqcOs4L3MQamc=
+
+core-js@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+ integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+create-ecdh@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ integrity sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad"
+ integrity sha1-USEAYte7dHn2xlu0GpIgix1hq60=
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ ripemd160 "^1.0.0"
+ sha.js "^2.3.6"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170"
+ integrity sha1-0/tLolPriz9W456i+8uK90e9MXA=
+ dependencies:
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
+ dependencies:
+ boom "2.x.x"
+
+crypto-browserify@^3.11.0:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522"
+ integrity sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+debug@^2.1.1, debug@^2.2.0, debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
+ dependencies:
+ ms "0.7.1"
+
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+ integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+diffie-hellman@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ integrity sha1-tYNXOScM/ias9jIJn97SoH8gnl4=
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
+ dependencies:
+ jsbn "~0.1.0"
+
+elliptic@^6.0.0:
+ version "6.3.2"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.2.tgz#e4c81e0829cf0a65ab70e998b8232723b5c1bc48"
+ integrity sha1-5MgeCCnPCmWrcOmYuCMnI7XBvEg=
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ inherits "^2.0.1"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+enhanced-resolve@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.0.2.tgz#0fa709f29e59ee23e6bbcb070c85f992d6247cd1"
+ integrity sha1-D6cJ8p5Z7iPmu8sHDIX5ktYkfNE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ object-assign "^4.0.1"
+ tapable "^0.2.5"
+
+errno@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ integrity sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=
+ dependencies:
+ prr "~0.0.0"
+
+error-ex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+ integrity sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+ integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+
+evp_bytestokey@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53"
+ integrity sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=
+ dependencies:
+ create-hash "^1.1.1"
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+ integrity sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+ integrity sha1-4QgOBljjALBilJkMxw4VAiNf1VA=
+
+filename-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+ integrity sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+for-in@^0.1.5:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
+ integrity sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=
+
+for-own@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
+ integrity sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=
+ dependencies:
+ for-in "^0.1.5"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ integrity sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs-readdir-recursive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
+ integrity sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.0.0:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558"
+ integrity sha1-hTfz8SJyZ4dltP1lKMDx9m+PRVg=
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ integrity sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gauge@~2.7.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774"
+ integrity sha1-Fc7MMbAtBTRaXWsOFxzbOtIwd3Q=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^0.2.0"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+ integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
+ dependencies:
+ is-property "^1.0.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+ integrity sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+ integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ integrity sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^5.0.5:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.0.0:
+ version "9.14.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
+ integrity sha1-iFmTavADh0EmMFOznQ52yiQeQDQ=
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.4:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+gzip-size-cli@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size-cli/-/gzip-size-cli-1.0.0.tgz#97ef47b1600a2ad8f9c31539661eab39ec36caed"
+ integrity sha1-l+9HsWAKKtj5wxU5Zh6rOew2yu0=
+ dependencies:
+ gzip-size "^3.0.0"
+ meow "^3.3.0"
+
+gzip-size@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
+ dependencies:
+ duplexer "^0.1.1"
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+hash.js@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573"
+ integrity sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=
+ dependencies:
+ inherits "^2.0.1"
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+ integrity sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+ integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+interpret@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
+ integrity sha1-1Xn7f2k7hYAElHrzn6DbSfeVYCw=
+
+invariant@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A=
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+ integrity sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+ integrity sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-my-json-valid@^2.12.4:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ integrity sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ integrity sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=
+ dependencies:
+ jsbn "~0.1.0"
+
+js-tokens@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
+ integrity sha1-eZA/VWPud4zBFi5tzxoAJ8l/nLU=
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+ integrity sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+json-loader@^0.5.4:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de"
+ integrity sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+ integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ integrity sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ integrity sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=
+ dependencies:
+ is-buffer "^1.0.2"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
+ dependencies:
+ invert-kv "^1.0.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+loader-runner@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.2.0.tgz#824c1b699c4e7a2b6501b85902d5b862bf45b3fa"
+ integrity sha1-gkwbaZxOeitlAbhZAtW4Yr9Fs/o=
+
+loader-utils@^0.2.16:
+ version "0.2.16"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
+ integrity sha1-8IYyBm7YKCg13/iN+1JwR2Wt7m0=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+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@^4.14.0, lodash@^4.2.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+ integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8"
+ integrity sha1-ayYkjEL21PpLDYVC947fzeNWQqg=
+ dependencies:
+ js-tokens "^2.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+memory-fs@^0.4.0, memory-fs@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.3.0, meow@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d"
+ integrity sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@~1.25.0:
+ version "1.25.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
+ integrity sha1-wY29fHOl2/b0SgJNwNFloeexw5I=
+
+mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.13"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
+ integrity sha1-4HqqnGxrmnyjASxpADrSWjnpKog=
+ dependencies:
+ mime-db "~1.25.0"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+ integrity sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
+
+nan@^2.3.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
+ integrity sha1-qo8eNFMdgH6eJ3VbI0tKbsDBUqg=
+
+node-libs-browser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
+ integrity sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.1.4"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "0.0.1"
+ os-browserify "^0.2.0"
+ path-browserify "0.0.0"
+ process "^0.11.0"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.0.5"
+ stream-browserify "^2.0.1"
+ stream-http "^2.3.1"
+ string_decoder "^0.10.25"
+ timers-browserify "^2.0.2"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-pre-gyp@^0.6.29:
+ version "0.6.32"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
+ integrity sha1-/EUrN25zGbPSVfXzSFPvb9j+H9U=
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ integrity sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+ integrity sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ integrity sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+ integrity sha1-ejs9DpgGPUP0wD8uiubNUahog6A=
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+once@^1.3.0, once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+os-browserify@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+ integrity sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
+ dependencies:
+ lcid "^1.0.0"
+
+os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+output-file-sync@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+ integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=
+ dependencies:
+ graceful-fs "^4.1.4"
+ mkdirp "^0.5.1"
+ object-assign "^4.1.0"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
+
+parse-asn1@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23"
+ integrity sha1-NQYPbVAV03Yox3D04JGgtaJ4vCM=
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+ integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pbkdf2@^3.0.3:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693"
+ integrity sha1-8sSyWmAAWLPDdzwIbDfbvuH/5pM=
+ dependencies:
+ create-hmac "^1.1.2"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+pretty-bytes-cli@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes-cli/-/pretty-bytes-cli-2.0.0.tgz#e705662cffdc9c75291835333bc2f89ad3c033cf"
+ integrity sha1-5wVmLP/cnHUpGDUzO8L4mtPAM88=
+ dependencies:
+ get-stdin "^5.0.1"
+ meow "^3.6.0"
+ pretty-bytes "^4.0.0"
+
+pretty-bytes@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+ integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=
+
+private@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1"
+ integrity sha1-VcapdtD5uvuZJIUTUP5HubX7t8E=
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+process@^0.11.0:
+ version "0.11.9"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+ integrity sha1-e9WtIapiU+fahoImTx4R0RwDGME=
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+ integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=
+
+public-encrypt@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ integrity sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+ integrity sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ integrity sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+randombytes@^2.0.0, randombytes@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec"
+ integrity sha1-Z0yZdgkBw8QRJ3GjHlIdw0nMCew=
+
+rc@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
+ integrity sha1-Q2UbdrauU7XIAvEVH6P8OwWZack=
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~1.0.4"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ integrity sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regenerator-runtime@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
+ integrity sha1-JX9BlhzkRVixj3gUr0jBdVn5+us=
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ integrity sha1-mxpsNdTQ3871cRrmUejp09cRQUU=
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e"
+ integrity sha1-k6S71JQrxXS2mo+lfHHeEOzKfW4=
+
+"semver@2 || 3 || 4 || 5", semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+sha.js@^2.3.6:
+ version "2.4.8"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f"
+ integrity sha1-NwaMLEdra69ALRSknGf1l5IfY08=
+ dependencies:
+ inherits "^2.0.1"
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
+ dependencies:
+ hoek "2.x.x"
+
+source-list-map@~0.1.7:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
+ integrity sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=
+
+source-map-support@^0.4.2:
+ version "0.4.8"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b"
+ integrity sha1-SHGRjYo68HKJGC6XTjKEQyey6Ys=
+ dependencies:
+ source-map "^0.5.3"
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1, source-map@~0.5.3:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+ integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+ integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+ integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=
+
+sshpk@^1.7.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
+ integrity sha1-MOGl0ykkSXShr2FREznVla9mOLA=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-http@^2.3.1:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.0.tgz#adf3309ced17624ebfb7ef13e6ac4cfe405a8b12"
+ integrity sha1-rfMwnO0XYk6/t+8T5qxM/kBaixI=
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.1.0"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@^0.10.25, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+ integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+ integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
+
+supports-color@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+ integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^3.1.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU=
+ dependencies:
+ has-flag "^1.0.0"
+
+tapable@^0.2.5, tapable@~0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.5.tgz#1ff6ce7ade58e734ca9bfe36ba342304b377a4d0"
+ integrity sha1-H/bOet5Y5zTKm/42ujQjBLN3pNA=
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ integrity sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+timers-browserify@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
+ integrity sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=
+ dependencies:
+ setimmediate "^1.0.4"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
+ integrity sha1-8/XAw7pymafvmUJ+RGMyV63kMyA=
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ integrity sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=
+ dependencies:
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+ integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+uglify-js@^2.7.5:
+ version "2.7.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
+ integrity sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=
+ dependencies:
+ async "~0.2.6"
+ source-map "~0.5.1"
+ uglify-to-browserify "~1.0.0"
+ yargs "~3.10.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+ integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA=
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3, util@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+ integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=
+
+v8flags@^2.0.10:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881"
+ integrity sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=
+ dependencies:
+ user-home "^1.1.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ integrity sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=
+ dependencies:
+ extsprintf "1.0.2"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
+ dependencies:
+ indexof "0.0.1"
+
+watchpack@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.2.0.tgz#15d4620f1e7471f13fcb551d5c030d2c3eb42dbb"
+ integrity sha1-FdRiDx50cfE/y1UdXAMNLD60Lbs=
+ dependencies:
+ async "^2.1.2"
+ chokidar "^1.4.3"
+ graceful-fs "^4.1.2"
+
+webpack-sources@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd"
+ integrity sha1-zMLIF+COX6OTI5QSaQu0gYITk80=
+ dependencies:
+ source-list-map "~0.1.7"
+ source-map "~0.5.3"
+
+webpack@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.0.tgz#09246336b5581c9002353f75bcadb598a648f977"
+ integrity sha1-CSRjNrVYHJACNT91vK21mKZI+Xc=
+ dependencies:
+ acorn "^4.0.4"
+ acorn-dynamic-import "^2.0.0"
+ ajv "^4.7.0"
+ ajv-keywords "^1.1.1"
+ async "^2.1.2"
+ enhanced-resolve "^3.0.0"
+ interpret "^1.0.0"
+ json-loader "^0.5.4"
+ loader-runner "^2.2.0"
+ loader-utils "^0.2.16"
+ memory-fs "~0.4.1"
+ mkdirp "~0.5.0"
+ node-libs-browser "^2.0.0"
+ source-map "^0.5.3"
+ supports-color "^3.1.0"
+ tapable "~0.2.5"
+ uglify-js "^2.7.5"
+ watchpack "^1.2.0"
+ webpack-sources "^0.1.4"
+ yargs "^6.0.0"
+
+which-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+ integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ integrity sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=
+ dependencies:
+ string-width "^1.0.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+ integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+
+yargs-parser@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
+ integrity sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=
+ dependencies:
+ camelcase "^3.0.0"
+
+yargs@^6.0.0:
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
+ integrity sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=
+ dependencies:
+ camelcase "^3.0.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^4.2.0"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
diff --git a/date-fns/examples/webpack-4.x/README.md b/date-fns/examples/webpack-4.x/README.md
new file mode 100644
index 0000000..3a88eb1
--- /dev/null
+++ b/date-fns/examples/webpack-4.x/README.md
@@ -0,0 +1,29 @@
+# Usage with webpack 4.x
+
+See [example.js], [fp.js], [misc.js] and [minimal.js] for source code examples.
+
+See [package.json scripts](./package.json) for CLI usage.
+
+[example.js]: ./example.js
+[fp.js]: ./fp.js
+[misc.js]: ./misc.js
+[minimal.js]: ./minimal.js
+[package.json scripts]: ./package.json
+
+## Build example
+
+```sh
+yarn
+yarn build
+```
+
+See `./dist` for the output.
+
+## Minimal build size
+
+You can see the build size stats by running `yarn stats-size`:
+
+```
+Minimal size: 1.41 kB
+Format size: 6.18 kB
+```
diff --git a/date-fns/examples/webpack-4.x/constants.js b/date-fns/examples/webpack-4.x/constants.js
new file mode 100644
index 0000000..832c131
--- /dev/null
+++ b/date-fns/examples/webpack-4.x/constants.js
@@ -0,0 +1,9 @@
+import { maxTime as rootMaxTime, minTime as rootMinTime } from 'date-fns'
+import { minTime } from 'date-fns/constants'
+import { minTime as fpMinTime } from 'date-fns/fp'
+
+console.log(
+ rootMaxTime === 8640000000000000 &&
+ rootMinTime === minTime &&
+ minTime === fpMinTime
+)
diff --git a/date-fns/examples/webpack-4.x/example.js b/date-fns/examples/webpack-4.x/example.js
new file mode 100644
index 0000000..acc5e27
--- /dev/null
+++ b/date-fns/examples/webpack-4.x/example.js
@@ -0,0 +1,4 @@
+import { format } from 'date-fns'
+
+const result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
+console.log(result === '25.01.2017 21:28:15')
diff --git a/date-fns/examples/webpack-4.x/fp.js b/date-fns/examples/webpack-4.x/fp.js
new file mode 100644
index 0000000..79d6311
--- /dev/null
+++ b/date-fns/examples/webpack-4.x/fp.js
@@ -0,0 +1,17 @@
+import { addYears, formatWithOptions } from 'date-fns/fp'
+import { eo } from 'date-fns/locale'
+
+const addFiveYears = addYears(5)
+const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy')
+
+const dates = [
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(2017, 1 /* Feb */, 11),
+ new Date(2017, 6 /* Jul */, 2)
+]
+
+const formattedDates = dates
+ .map(date => dateToString(addFiveYears(date)))
+ .join(', ')
+
+console.log(formattedDates === '1 januaro 2022, 11 februaro 2022, 2 julio 2022')
diff --git a/date-fns/examples/webpack-4.x/minimal.js b/date-fns/examples/webpack-4.x/minimal.js
new file mode 100644
index 0000000..8144bd3
--- /dev/null
+++ b/date-fns/examples/webpack-4.x/minimal.js
@@ -0,0 +1,3 @@
+import { toDate } from 'date-fns'
+
+console.log(toDate(null).toString() === 'Invalid Date')
diff --git a/date-fns/examples/webpack-4.x/misc.js b/date-fns/examples/webpack-4.x/misc.js
new file mode 100644
index 0000000..62fbd61
--- /dev/null
+++ b/date-fns/examples/webpack-4.x/misc.js
@@ -0,0 +1,11 @@
+import { format } from 'date-fns'
+import { eo } from 'date-fns/locale'
+
+const result = format(
+ new Date(2017, 0, 25, 21, 28, 15),
+ 'eeee, dd MMMM HH:mm:ss',
+ {
+ locale: eo
+ }
+)
+console.log(result === 'merkredo, 25 januaro 21:28:15')
diff --git a/date-fns/examples/webpack-4.x/package.json b/date-fns/examples/webpack-4.x/package.json
new file mode 100644
index 0000000..bb4f97d
--- /dev/null
+++ b/date-fns/examples/webpack-4.x/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "date-fns-example-webpack4",
+ "version": "0.1.0",
+ "description": "Example of date-fns usage with webpack 4.x",
+ "main": "example.js",
+ "author": "Sasha Koss <koss@nocorp.me>",
+ "license": "MIT",
+ "dependencies": {
+ "gzip-size-cli": "^2.1.0",
+ "uglify-es": "^3.1.1",
+ "webpack": "4",
+ "webpack-cli": "^3.1.2"
+ },
+ "scripts": {
+ "build": "yarn build-date-fns && yarn build-webpack && yarn build-uglify",
+ "build-date-fns": "env PACKAGE_OUTPUT_PATH=\"$(pwd)/node_modules/date-fns\" ../../scripts/build/package.sh",
+ "build-webpack": "webpack example=./example.js fp=./fp.js misc=./misc.js minimal=./minimal.js constants=./constants.js --output-path dist --output-filename [name].js",
+ "build-uglify": "yarn build-uglify-example && yarn build-uglify-fp && yarn build-uglify-misc && yarn build-uglify-minimal && yarn build-uglify-constants && yarn stats-size",
+ "build-uglify-example": "node_modules/uglify-es/bin/uglifyjs --compress --mangle --output dist/example.min.js dist/example.js",
+ "build-uglify-fp": "node_modules/uglify-es/bin/uglifyjs --compress --mangle --output dist/fp.min.js dist/fp.js",
+ "build-uglify-misc": "node_modules/uglify-es/bin/uglifyjs --compress --mangle --output dist/misc.min.js dist/misc.js",
+ "build-uglify-minimal": "node_modules/uglify-es/bin/uglifyjs --compress --mangle --output dist/minimal.min.js dist/minimal.js",
+ "build-uglify-constants": "node_modules/uglify-es/bin/uglifyjs --compress --mangle --output dist/constants.min.js dist/constants.js",
+ "stats-size": "echo \"Minimal size: $(gzip-size dist/minimal.min.js)\nFormat size: $(gzip-size dist/example.min.js)\nFP size: $(gzip-size dist/fp.min.js)\nMisc size: $(gzip-size dist/misc.min.js)\"",
+ "test": "yarn test-example && yarn test-fp && yarn test-misc && yarn test-constants",
+ "test-example": "test $(env TZ=UTC node ./dist/example.min.js) = true",
+ "test-fp": "test $(env TZ=UTC node ./dist/fp.min.js) = true",
+ "test-misc": "test $(env TZ=UTC node ./dist/misc.min.js) = true",
+ "test-constants": "test $(env TZ=UTC node ./dist/constants.min.js) = true"
+ }
+}
diff --git a/date-fns/examples/webpack-4.x/yarn.lock b/date-fns/examples/webpack-4.x/yarn.lock
new file mode 100644
index 0000000..41dd513
--- /dev/null
+++ b/date-fns/examples/webpack-4.x/yarn.lock
@@ -0,0 +1,3163 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@webassemblyjs/ast@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.8.tgz#f31f480debeef957f01b623f27eabc695fa4fe8f"
+ integrity sha512-dOrtdtEyB8sInpl75yLPNksY4sRl0j/+t6aHyB/YA+ab9hV3Fo7FmG12FHzP+2MvWVAJtDb+6eXR5EZbZJ+uVg==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/wast-parser" "1.7.8"
+
+"@webassemblyjs/floating-point-hex-parser@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz#1b3ed0e27e384032254e9322fc646dd3e70ef1b9"
+ integrity sha512-kn2zNKGsbql5i56VAgRYkpG+VazqHhQQZQycT2uXAazrAEDs23gy+Odkh5VblybjnwX2/BITkDtNmSO76hdIvQ==
+
+"@webassemblyjs/helper-api-error@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz#a2b49c11f615e736f815ec927f035dcfa690d572"
+ integrity sha512-xUwxDXsd1dUKArJEP5wWM5zxgCSwZApSOJyP1XO7M8rNUChUDblcLQ4FpzTpWG2YeylMwMl1MlP5Ztryiz1x4g==
+
+"@webassemblyjs/helper-buffer@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz#3fc66bfa09c1c60e824cf3d5887826fac062877d"
+ integrity sha512-WXiIMnuvuwlhWvVOm8xEXU9DnHaa3AgAU0ZPfvY8vO1cSsmYb2WbGbHnMLgs43vXnA7XAob9b56zuZaMkxpCBg==
+
+"@webassemblyjs/helper-code-frame@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz#cc5a7e9522b70e7580df056dfd34020cf29645b0"
+ integrity sha512-TLQxyD9qGOIdX5LPQOPo0Ernd88U5rHkFb8WAjeMIeA0sPjCHeVPaGqUGGIXjUcblUkjuDAc07bruCcNHUrHDA==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.7.8"
+
+"@webassemblyjs/helper-fsm@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz#fe4607430af466912797c21acafd3046080182ea"
+ integrity sha512-TjK0CnD8hAPkV5mbSp5aWl6SO1+H3WFcjWtixWoy8EMA99YnNzYhpc/WSYWhf7yrhpzkq5tZB0tvLK3Svr3IXA==
+
+"@webassemblyjs/helper-module-context@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.8.tgz#3c2e7ee93d14ff4768ba66fb1be42fdc9dc7160a"
+ integrity sha512-uCutAKR7Nm0VsFixcvnB4HhAyHouNbj0Dx1p7eRjFjXGGZ+N7ftTaG1ZbWCasAEbtwGj54LP8+lkBZdTCPmLGg==
+
+"@webassemblyjs/helper-wasm-bytecode@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz#89bdb78cd6dd5209ae2ed2925de78d0f0e00b6f0"
+ integrity sha512-AdCCE3BMW6V34WYaKUmPgVHa88t2Z14P4/0LjLwuGkI0X6pf7nzp0CehzVVk51cKm2ymVXjl9dCG+gR1yhITIQ==
+
+"@webassemblyjs/helper-wasm-section@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz#c68ef7d26a6fc12421b2e6e56f9bc810dfb33e87"
+ integrity sha512-BkBhYQuzyl4hgTGOKo87Vdw6f9nj8HhI7WYpI0MCC5qFa5ahrAPOGgyETVdnRbv+Rjukl9MxxfDmVcVC435lDg==
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-buffer" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/wasm-gen" "1.7.8"
+
+"@webassemblyjs/ieee754@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz#1f37974b13cb486a9237e73ce04cac7a2f1265ed"
+ integrity sha512-tOarWChdG1a3y1yqCX0JMDKzrat5tQe4pV6K/TX19BcXsBLYxFQOL1DEDa5KG9syeyvCrvZ+i1+Mv1ExngvktQ==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.8.tgz#1bee83426819192db2ea1a234b84c7ebc6d34c1f"
+ integrity sha512-GCYeGPgUFWJiZuP4NICbcyUQNxNLJIf476Ei+K+jVuuebtLpfvwkvYT6iTUE7oZYehhkor4Zz2g7SJ/iZaPudQ==
+ dependencies:
+ "@xtuc/long" "4.2.1"
+
+"@webassemblyjs/utf8@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.8.tgz#2b489d5cf43e0aebb93d8e2d792aff9879c61f05"
+ integrity sha512-9X+f0VV+xNXW2ujfIRSXBJENGE6Qh7bNVKqu3yDjTFB3ar3nsThsGBBKdTG58aXOm2iUH6v28VIf88ymPXODHA==
+
+"@webassemblyjs/wasm-edit@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz#f8bdbe7088718eca27b1c349bb7c06b8a457950c"
+ integrity sha512-6D3Hm2gFixrfyx9XjSON4ml1FZTugqpkIz5Awvrou8fnpyprVzcm4X8pyGRtA2Piixjl3DqmX/HB1xdWyE097A==
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-buffer" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/helper-wasm-section" "1.7.8"
+ "@webassemblyjs/wasm-gen" "1.7.8"
+ "@webassemblyjs/wasm-opt" "1.7.8"
+ "@webassemblyjs/wasm-parser" "1.7.8"
+ "@webassemblyjs/wast-printer" "1.7.8"
+
+"@webassemblyjs/wasm-gen@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz#7e8abf1545eae74ac6781d545c034af3cfd0c7d5"
+ integrity sha512-a7O/wE6eBeVKKUYgpMK7NOHmMADD85rSXLe3CqrWRDwWff5y3cSVbzpN6Qv3z6C4hdkpq9qyij1Ga1kemOZGvQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/ieee754" "1.7.8"
+ "@webassemblyjs/leb128" "1.7.8"
+ "@webassemblyjs/utf8" "1.7.8"
+
+"@webassemblyjs/wasm-opt@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz#7ada6e211914728fce02ff0ff9c344edc6d41f26"
+ integrity sha512-3lbQ0PT81NHCdi1sR/7+SNpZadM4qYcTSr62nFFAA7e5lFwJr14M1Gi+A/Y3PgcDWOHYjsaNGPpPU0H03N6Blg==
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-buffer" "1.7.8"
+ "@webassemblyjs/wasm-gen" "1.7.8"
+ "@webassemblyjs/wasm-parser" "1.7.8"
+
+"@webassemblyjs/wasm-parser@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz#dac47c291fb6a3e63529aecd647592cd34afbf94"
+ integrity sha512-rZ/zlhp9DHR/05zh1MbAjT2t624sjrPP/OkJCjXqzm7ynH+nIdNcn9Ixc+qzPMFXhIrk0rBoQ3to6sEIvHh9jQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-api-error" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/ieee754" "1.7.8"
+ "@webassemblyjs/leb128" "1.7.8"
+ "@webassemblyjs/utf8" "1.7.8"
+
+"@webassemblyjs/wast-parser@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.8.tgz#f8aab9a450c048c1f9537695c89faeb92fabfba5"
+ integrity sha512-Q/zrvtUvzWuSiJMcSp90fi6gp2nraiHXjTV2VgAluVdVapM4gy1MQn7akja2p6eSBDQpKJPJ6P4TxRkghRS5dg==
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/floating-point-hex-parser" "1.7.8"
+ "@webassemblyjs/helper-api-error" "1.7.8"
+ "@webassemblyjs/helper-code-frame" "1.7.8"
+ "@webassemblyjs/helper-fsm" "1.7.8"
+ "@xtuc/long" "4.2.1"
+
+"@webassemblyjs/wast-printer@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz#e7e965782c1912f6a965f14a53ff43d8ad0403a5"
+ integrity sha512-GllIthRtwTxRDAURRNXscu7Napzmdf1jt1gpiZiK/QN4fH0lSGs3OTmvdfsMNP7tqI4B3ZtfaaWRlNIQug6Xyg==
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/wast-parser" "1.7.8"
+ "@xtuc/long" "4.2.1"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8"
+ integrity sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==
+
+abbrev@1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
+ integrity sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=
+
+acorn-dynamic-import@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
+ integrity sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==
+ dependencies:
+ acorn "^5.0.0"
+
+acorn@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7"
+ integrity sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==
+
+acorn@^5.6.2:
+ version "5.7.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+ integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+
+ajv-keywords@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
+ integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=
+
+ajv@^6.1.0:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.4.tgz#247d5274110db653706b550fcc2b797ca28cfc59"
+ integrity sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+aproba@^1.0.3:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1"
+ integrity sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==
+
+aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
+ integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+asn1.js@^4.0.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40"
+ integrity sha1-SLokC0WpKA6UdImQull9IWYX/UA=
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+ integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-js@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
+ integrity sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+big.js@^3.1.3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+ integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
+
+binary-extensions@^1.0.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0"
+ integrity sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=
+
+bluebird@^3.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a"
+ integrity sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+brace-expansion@^1.1.7:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+ integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI=
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.0, braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.8.tgz#c8fa3b1b7585bb7ba77c5560b60996ddec6d5309"
+ integrity sha512-WYCMOT/PtGTlpOKFht0YJFYcPy6pLCR98CtWfzK13zoynLlBMvAdEMSRGmgnJCw2M2j/5qxBkinZQFobieM8dQ==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ integrity sha1-mYgkSHS/XtTijalWZtzWasj8Njo=
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ integrity sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
+ dependencies:
+ pako "~0.2.0"
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+cacache@^10.0.4:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
+ integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==
+ dependencies:
+ bluebird "^3.5.1"
+ chownr "^1.0.1"
+ glob "^7.1.2"
+ graceful-fs "^4.1.11"
+ lru-cache "^4.1.1"
+ mississippi "^2.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.2"
+ ssri "^5.2.4"
+ unique-filename "^1.1.0"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+chalk@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
+ integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chokidar@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
+ integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.0"
+ braces "^2.3.0"
+ glob-parent "^3.1.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ lodash.debounce "^4.0.8"
+ normalize-path "^2.1.1"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ upath "^1.0.5"
+ optionalDependencies:
+ fsevents "^1.2.2"
+
+chownr@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
+ integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+
+chrome-trace-event@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"
+ integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==
+ dependencies:
+ tslib "^1.9.0"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cliui@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
+ integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+commander@~2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
+ integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==
+
+commander@~2.13.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+ integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-emitter@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+create-ecdh@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ integrity sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
+ integrity sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
+ integrity sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+crypto-browserify@^3.11.0:
+ version "3.11.1"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f"
+ integrity sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+cyclist@~0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
+ integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+debug@^2.1.2, debug@^2.3.3:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^2.2.0:
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
+ integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=
+ dependencies:
+ ms "2.0.0"
+
+decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decamelize@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7"
+ integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==
+ dependencies:
+ xregexp "4.0.0"
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+diffie-hellman@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ integrity sha1-tYNXOScM/ias9jIJn97SoH8gnl4=
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410"
+ integrity sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+elliptic@^6.0.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
+ integrity sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
+ integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ tapable "^1.0.0"
+
+errno@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ integrity sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=
+ dependencies:
+ prr "~0.0.0"
+
+errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ integrity sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-scope@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172"
+ integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+esrecurse@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+ integrity sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=
+ dependencies:
+ estraverse "^4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^4.1.0, estraverse@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+ integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+ integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
+ integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+ integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+ integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+find-cache-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
+ integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^1.0.0"
+ pkg-dir "^2.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+flush-write-stream@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
+ integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.4"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
+ integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
+ dependencies:
+ minipass "^2.2.1"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.2:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
+ integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==
+ dependencies:
+ nan "^2.9.2"
+ node-pre-gyp "^0.10.0"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob@^7.0.5:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
+ dependencies:
+ 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"
+
+glob@^7.1.2:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+ integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+ dependencies:
+ 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"
+
+global-modules-path@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/global-modules-path/-/global-modules-path-2.3.0.tgz#b0e2bac6beac39745f7db5c59d26a36a0b94f7dc"
+ integrity sha512-HchvMJNYh9dGSCy8pOQ2O8u/hoXaL+0XhnrwH0RyLiSXMMTl9W3N6KUU73+JFOg5PGjtzl6VZzUQsnrpm7Szag==
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+gzip-size-cli@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/gzip-size-cli/-/gzip-size-cli-2.1.0.tgz#78a1fc3dc399e9d39d9f1f63a7aae38a817e917d"
+ integrity sha512-2aFj16SGdAD5FTTqJe4Wdzs5d05MnHYLr5lwmxdFjiWzJWhUI+L48beS0Vmlg6s9Kqe+bfQ42WskPZdzTwPH4w==
+ dependencies:
+ gzip-size "^4.0.0"
+ meow "^3.7.0"
+ pretty-bytes "^4.0.2"
+
+gzip-size@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-4.0.0.tgz#a80e13e18938bcb2e6702fec606f5cf8b666db3a"
+ integrity sha512-6SWfFRd8r8VTKTpJCR7h/T6IbCaK+jM/n2gB1+pV3IrKcrLO1WTb8ZWdaRy1T/nwOz80cp4gAJf8sujpZxfA1w==
+ dependencies:
+ duplexer "^0.1.1"
+ pify "^3.0.0"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+hash-base@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
+ integrity sha1-ZuodhW206KVHDK32/OI65SRO8uE=
+ dependencies:
+ inherits "^2.0.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
+ integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.0"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
+ integrity sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==
+
+https-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+ integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=
+
+iconv-lite@^0.4.4:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
+ dependencies:
+ minimatch "^3.0.4"
+
+import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+interpret@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
+ integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=
+
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+ integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
+ integrity sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
+ integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+ dependencies:
+ invert-kv "^2.0.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+loader-runner@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
+ integrity sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=
+
+loader-utils@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+ integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lru-cache@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
+ integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+make-dir@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
+ dependencies:
+ pify "^3.0.0"
+
+map-age-cleaner@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74"
+ integrity sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+md5.js@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
+ integrity sha1-6b296UogpawYsENA/Fdk1bCdkB0=
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+mem@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf"
+ integrity sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^1.0.0"
+ p-is-promise "^1.1.0"
+
+memory-fs@^0.4.0, memory-fs@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+micromatch@^3.1.4, micromatch@^3.1.8:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d"
+ integrity sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+minimalistic-assert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+ integrity sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@^3.0.2, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minipass@^2.2.1, minipass@^2.3.3:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957"
+ integrity sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb"
+ integrity sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==
+ dependencies:
+ minipass "^2.2.1"
+
+mississippi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
+ integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^2.0.1"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+nan@^2.9.2:
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766"
+ integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+needle@^2.2.1:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
+ integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==
+ dependencies:
+ debug "^2.1.2"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+neo-async@^2.5.0:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.2.tgz#489105ce7bc54e709d736b195f82135048c50fcc"
+ integrity sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw==
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+node-libs-browser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
+ integrity sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.1.4"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "0.0.1"
+ os-browserify "^0.2.0"
+ path-browserify "0.0.0"
+ process "^0.11.0"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.0.5"
+ stream-browserify "^2.0.1"
+ stream-http "^2.3.1"
+ string_decoder "^0.10.25"
+ timers-browserify "^2.0.2"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-pre-gyp@^0.10.0:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
+ integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+ integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+npm-bundled@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
+ integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==
+
+npm-packlist@^1.1.6:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de"
+ integrity sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+os-browserify@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+ integrity sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-locale@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620"
+ integrity sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==
+ dependencies:
+ execa "^0.10.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
+os-tmpdir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+ integrity sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-is-promise@^1.1.0:
+ version "1.1.0"
+ resolved "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
+ integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=
+
+p-limit@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+ integrity sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=
+
+p-limit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec"
+ integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-try@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
+ integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
+
+parallel-transform@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
+ integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=
+ dependencies:
+ cyclist "~0.2.2"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parse-asn1@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
+ integrity sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+ integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pbkdf2@^3.0.3:
+ version "3.0.14"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
+ integrity sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+pretty-bytes@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+ integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+ integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+
+process@^0.11.0:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+ integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+public-encrypt@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ integrity sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+
+pump@^2.0.0, pump@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+randombytes@^2.0.0, randombytes@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"
+ integrity sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.4, readable-stream@^2.1.5, readable-stream@^2.2.2:
+ version "2.3.6"
+ resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.2.6:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+ integrity sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.0.3"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
+ integrity sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=
+ dependencies:
+ hash-base "^2.0.0"
+ inherits "^2.0.1"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+ integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
+
+safe-buffer@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+schema-utils@^0.4.4, schema-utils@^0.4.5:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
+ integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+ integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==
+
+semver@^5.5.0:
+ version "5.5.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
+ integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==
+
+serialize-javascript@^1.4.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe"
+ integrity sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.8"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f"
+ integrity sha1-NwaMLEdra69ALRSknGf1l5IfY08=
+ dependencies:
+ inherits "^2.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+source-list-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
+ integrity sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.6, source-map@~0.5.1:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+ integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+ integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+ssri@^5.2.4:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06"
+ integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==
+ dependencies:
+ safe-buffer "^5.1.1"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.3.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad"
+ integrity sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.2.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+ integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string_decoder@^0.10.25:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+string_decoder@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+ integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+supports-color@^5.3.0, supports-color@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+tapable@^1.0.0, tapable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c"
+ integrity sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==
+
+tar@^4:
+ version "4.4.6"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b"
+ integrity sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==
+ dependencies:
+ chownr "^1.0.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.3"
+ minizlib "^1.1.0"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.2"
+
+through2@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
+timers-browserify@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6"
+ integrity sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==
+ dependencies:
+ setimmediate "^1.0.4"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+tslib@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+ integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+uglify-es@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.1.1.tgz#27615a1203cd0b351d8b5bda743ac92ed482b826"
+ integrity sha512-oESWzXRJ5cHfxZnj1wS4WAy1Tcn4RbMhSX6lhMpzkHN+6SrO6Wmlg9dK4M+K/MXHIwndOD7wme7fEGuFcEf4BQ==
+ dependencies:
+ commander "~2.11.0"
+ source-map "~0.5.1"
+
+uglify-es@^3.3.4:
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
+ integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==
+ dependencies:
+ commander "~2.13.0"
+ source-map "~0.6.1"
+
+uglifyjs-webpack-plugin@^1.2.4:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de"
+ integrity sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==
+ dependencies:
+ cacache "^10.0.4"
+ find-cache-dir "^1.0.0"
+ schema-utils "^0.4.5"
+ serialize-javascript "^1.4.0"
+ source-map "^0.6.1"
+ uglify-es "^3.3.4"
+ webpack-sources "^1.1.0"
+ worker-farm "^1.5.2"
+
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
+unique-filename@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6"
+ integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.0.5:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd"
+ integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3, util@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+v8-compile-cache@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c"
+ integrity sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
+ dependencies:
+ indexof "0.0.1"
+
+watchpack@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
+ dependencies:
+ chokidar "^2.0.2"
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+
+webpack-cli@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.1.2.tgz#17d7e01b77f89f884a2bbf9db545f0f6a648e746"
+ integrity sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==
+ dependencies:
+ chalk "^2.4.1"
+ cross-spawn "^6.0.5"
+ enhanced-resolve "^4.1.0"
+ global-modules-path "^2.3.0"
+ import-local "^2.0.0"
+ interpret "^1.1.0"
+ loader-utils "^1.1.0"
+ supports-color "^5.5.0"
+ v8-compile-cache "^2.0.2"
+ yargs "^12.0.2"
+
+webpack-sources@^1.1.0, webpack-sources@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
+ integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@4:
+ version "4.20.2"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.20.2.tgz#89f6486b6bb276a91b0823453d377501fc625b5a"
+ integrity sha512-75WFUMblcWYcocjSLlXCb71QuGyH7egdBZu50FtBGl2Nso8CK3Ej+J7bTZz2FPFq5l6fzCisD9modB7t30ikuA==
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-module-context" "1.7.8"
+ "@webassemblyjs/wasm-edit" "1.7.8"
+ "@webassemblyjs/wasm-parser" "1.7.8"
+ acorn "^5.6.2"
+ acorn-dynamic-import "^3.0.0"
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+ chrome-trace-event "^1.0.0"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.0"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.3.0"
+ loader-utils "^1.1.0"
+ memory-fs "~0.4.1"
+ micromatch "^3.1.8"
+ mkdirp "~0.5.0"
+ neo-async "^2.5.0"
+ node-libs-browser "^2.0.0"
+ schema-utils "^0.4.4"
+ tapable "^1.1.0"
+ uglifyjs-webpack-plugin "^1.2.4"
+ watchpack "^1.5.0"
+ webpack-sources "^1.3.0"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.9:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+ integrity sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==
+ dependencies:
+ string-width "^1.0.2"
+
+worker-farm@^1.5.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
+ integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+xregexp@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
+ integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.0, yallist@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
+ integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=
+
+yargs-parser@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
+ integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^12.0.2:
+ version "12.0.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc"
+ integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^2.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^1.0.1"
+ os-locale "^3.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1 || ^4.0.0"
+ yargs-parser "^10.1.0"
diff --git a/date-fns/flow-typed/benchmark.js.flow b/date-fns/flow-typed/benchmark.js.flow
new file mode 100644
index 0000000..aeaad7e
--- /dev/null
+++ b/date-fns/flow-typed/benchmark.js.flow
@@ -0,0 +1,6 @@
+// @flow
+declare var suite: (description: string, spec: () => void, options?: Object) => void
+declare var benchmark: (description: string, spec: () => any) => void
+declare module 'moment' {
+ declare module.exports: (value: any, message?: string) => void
+}
diff --git a/date-fns/flow-typed/mocha.js.flow b/date-fns/flow-typed/mocha.js.flow
new file mode 100644
index 0000000..3cebc53
--- /dev/null
+++ b/date-fns/flow-typed/mocha.js.flow
@@ -0,0 +1,7 @@
+// @flow
+declare var xdescribe: (description: string, spec: () => void) => void
+declare var describe: (description: string, spec: () => void) => void
+declare var it: (description: string, spec: () => void) => void
+declare var context: (description: string, spec: () => void) => void
+declare var beforeEach: (action: () => void) => void
+declare var afterEach: (action: () => void) => void
diff --git a/date-fns/flow-typed/power-assert.js.flow b/date-fns/flow-typed/power-assert.js.flow
new file mode 100644
index 0000000..d9e2e5e
--- /dev/null
+++ b/date-fns/flow-typed/power-assert.js.flow
@@ -0,0 +1,3 @@
+declare module 'power-assert' {
+ declare module.exports: (value: any, message?: string) => void
+}
diff --git a/date-fns/flow-typed/sinon.js.flow b/date-fns/flow-typed/sinon.js.flow
new file mode 100644
index 0000000..e6a8743
--- /dev/null
+++ b/date-fns/flow-typed/sinon.js.flow
@@ -0,0 +1,2 @@
+// @flow
+declare var sinon: any
diff --git a/date-fns/jest.config.js b/date-fns/jest.config.js
new file mode 100644
index 0000000..6a32f38
--- /dev/null
+++ b/date-fns/jest.config.js
@@ -0,0 +1,4 @@
+module.exports = {
+ verbose: false,
+ testPathIgnorePatterns: ['<rootDir>/test.js'],
+}
diff --git a/date-fns/jsdoc2md.json b/date-fns/jsdoc2md.json
new file mode 100644
index 0000000..244e56e
--- /dev/null
+++ b/date-fns/jsdoc2md.json
@@ -0,0 +1,20 @@
+{
+ "source": {
+ "includePattern": ".+\\.(ts|js)?$",
+ "excludePattern": ".+\\.(test|spec).ts"
+ },
+ "plugins": ["node_modules/jsdoc-babel"],
+ "babel": {
+ "extensions": ["ts", "tsx", "js"],
+ "ignore": ["**/*.(test|spec).ts"],
+ "babelrc": false,
+ "presets": [
+ ["@babel/preset-env", { "targets": { "node": true } }],
+ "@babel/preset-typescript"
+ ],
+ "plugins": [
+ "@babel/proposal-class-properties",
+ "@babel/proposal-object-rest-spread"
+ ]
+ }
+}
diff --git a/date-fns/outdatedLocales.json b/date-fns/outdatedLocales.json
new file mode 100644
index 0000000..af12588
--- /dev/null
+++ b/date-fns/outdatedLocales.json
@@ -0,0 +1 @@
+["ar", "fil"] \ No newline at end of file
diff --git a/date-fns/package.json b/date-fns/package.json
new file mode 100644
index 0000000..6d2fe5e
--- /dev/null
+++ b/date-fns/package.json
@@ -0,0 +1,122 @@
+{
+ "name": "date-fns",
+ "version": "DON'T CHANGE; IT'S SET AUTOMATICALLY DURING DEPLOYMENT; ALSO, USE YARN FOR DEVELOPMENT",
+ "sideEffects": false,
+ "contributors": [
+ "Sasha Koss <koss@nocorp.me>",
+ "Lesha Koss <regiusprod@gmail.com>"
+ ],
+ "license": "MIT",
+ "description": "Modern JavaScript date utility library",
+ "repository": "https://github.com/date-fns/date-fns",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ },
+ "engines": {
+ "node": ">=0.11"
+ },
+ "typings": "./typings.d.ts",
+ "main": "index.js",
+ "module": "esm/index.js",
+ "scripts": {
+ "test": "karma start config/karma.js",
+ "lint": "eslint .",
+ "lint-types": "eslint --config=.ts-eslintrc.js typings.d.ts",
+ "locale-snapshots": "env TZ=utc babel-node --extensions .ts,.js ./scripts/build/localeSnapshots/index.js",
+ "benchmark": "env TEST_BENCHMARK=true yarn test --single-run",
+ "stats": "cloc . --exclude-dir=node_modules,tmp,.git"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.js": [
+ "prettier --write",
+ "git add"
+ ]
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "@babel/cli": "^7.5.5",
+ "@babel/core": "^7.5.5",
+ "@babel/node": "^7.5.5",
+ "@babel/plugin-proposal-object-rest-spread": "^7.13.8",
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
+ "@babel/plugin-transform-arrow-functions": "^7.2.0",
+ "@babel/plugin-transform-block-scoping": "^7.5.5",
+ "@babel/plugin-transform-destructuring": "^7.5.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.5.0",
+ "@babel/plugin-transform-parameters": "^7.4.4",
+ "@babel/plugin-transform-template-literals": "^7.4.4",
+ "@babel/preset-env": "^7.11.5",
+ "@babel/preset-typescript": "^7.10.4",
+ "@date-fns/date-fns-scripts": "0.0.4",
+ "@octokit/core": "^3.2.5",
+ "@types/jest": "^26.0.13",
+ "@types/node": "^14.6.3",
+ "@types/power-assert": "^1.5.3",
+ "@types/sinon": "^9.0.6",
+ "@typescript-eslint/eslint-plugin": "^2.9.0",
+ "@typescript-eslint/parser": "^2.9.0",
+ "babel-eslint": "^10.0.2",
+ "babel-loader": "8.0.6",
+ "babel-plugin-add-import-extension": "^1.4.3",
+ "babel-plugin-add-module-exports": "^1.0.2",
+ "babel-preset-power-assert": "^3.0.0",
+ "cloc": "^2.2.0",
+ "coveralls": "^3.0.6",
+ "eslint": "^5.16.0",
+ "eslint-config-prettier": "^4.3.0",
+ "firebase": "^3.7.1",
+ "flow-bin": "0.84.0",
+ "glob-promise": "^2.0.0",
+ "globby": "^11.0.3",
+ "gzip-size-cli": "^1.0.0",
+ "husky": "^1.0.1",
+ "istanbul-instrumenter-loader": "^3.0.1",
+ "jest": "^24.8.0",
+ "js-beautify": "^1.5.10",
+ "js-fns": "^2.5.1",
+ "jsdoc-babel": "^0.5.0",
+ "jsdoc-to-markdown": "7",
+ "karma": "^3.1.4",
+ "karma-benchmark": "^1.0.4",
+ "karma-benchmark-reporter": "^0.1.1",
+ "karma-chrome-launcher": "2.2",
+ "karma-cli": "^1.0.1",
+ "karma-coverage": "^1.1.2",
+ "karma-coverage-istanbul-reporter": "^2.1.0",
+ "karma-mocha": "^1.3.0",
+ "karma-mocha-reporter": "^2.2.5",
+ "karma-phantomjs-launcher": "^1.0.4",
+ "karma-sauce-launcher": "^1.2.0",
+ "karma-sourcemap-loader": "^0.3.5",
+ "karma-webpack": "^4.0.2",
+ "lint-staged": "^7.3.0",
+ "lodash": "^4.17.15",
+ "lodash.clonedeep": "^4.5.0",
+ "mocha": "^3.5.3",
+ "moment": "^2.24.0",
+ "mz": "^2.7.0",
+ "node-fetch": "^1.7.3",
+ "p-limit": "^3.1.0",
+ "power-assert": "^1.6.1",
+ "prettier": "2",
+ "rimraf": "^2.7.1",
+ "simple-git": "^2.35.2",
+ "sinon": "^7.4.1",
+ "size-limit": "^0.21.0",
+ "snazzy": "^7.0.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.0.2",
+ "webpack": "4",
+ "webpack-cli": "^3.1.2",
+ "world-countries": "^1.8.1"
+ },
+ "resolutions": {
+ "ajv": "6.8.1"
+ }
+}
diff --git a/date-fns/scripts/.eslintrc.js b/date-fns/scripts/.eslintrc.js
new file mode 100644
index 0000000..a40aaa8
--- /dev/null
+++ b/date-fns/scripts/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+ rules: {
+ 'no-console': 'off'
+ }
+}
diff --git a/date-fns/scripts/_lib/getConstants.js b/date-fns/scripts/_lib/getConstants.js
new file mode 100644
index 0000000..56387fd
--- /dev/null
+++ b/date-fns/scripts/_lib/getConstants.js
@@ -0,0 +1,14 @@
+const path = require('path')
+const jsDocParser = require('jsdoc-to-markdown')
+
+module.exports = getConstants
+
+function getConstants() {
+ return jsDocParser
+ .getJsdocDataSync({
+ files: path.resolve(process.cwd(), 'src/constants/index.ts'),
+ 'no-cache': true,
+ configure: path.resolve(process.cwd(), 'jsdoc2md.json'),
+ })
+ .filter((c) => c.kind === 'constant' && !c.undocumented)
+}
diff --git a/date-fns/scripts/_lib/listFPFns.js b/date-fns/scripts/_lib/listFPFns.js
new file mode 100644
index 0000000..d33180e
--- /dev/null
+++ b/date-fns/scripts/_lib/listFPFns.js
@@ -0,0 +1,17 @@
+const path = require('path')
+const fs = require('fs')
+
+module.exports = listFPFns
+
+const ignoredFiles = ['index.js', 'test.js', 'index.js.flow', 'package.json']
+
+function listFPFns() {
+ const files = fs.readdirSync(path.join(process.cwd(), 'src', 'fp'))
+ return files
+ .filter(file => /^[^._]/.test(file) && !ignoredFiles.includes(file))
+ .map(file => ({
+ name: file,
+ path: `./${file}`,
+ fullPath: `./src/fp/${file}/index.js`
+ }))
+}
diff --git a/date-fns/scripts/_lib/listFns.js b/date-fns/scripts/_lib/listFns.js
new file mode 100644
index 0000000..7ed93a4
--- /dev/null
+++ b/date-fns/scripts/_lib/listFns.js
@@ -0,0 +1,38 @@
+const path = require('path')
+const fs = require('fs')
+const { promisify } = require('util')
+
+const exists = promisify(fs.exists)
+const readDir = promisify(fs.readdir)
+
+module.exports = listFns
+
+const ignoredFiles = [
+ 'locale',
+ 'esm',
+ 'fp',
+ 'constants',
+ 'index.js',
+ 'test.js',
+ 'index.js.flow',
+ 'package.json',
+ 'types.ts'
+]
+
+async function listFns() {
+ const srcPath = path.join(process.cwd(), 'src')
+ const files = await readDir(srcPath)
+
+ return Promise.all(
+ files
+ .filter(file => /^[^._]/.test(file) && !ignoredFiles.includes(file))
+ .map(async file => {
+ const isTs = await exists(path.join(srcPath, file, 'index.ts'))
+ return {
+ name: file,
+ path: `./${file}`,
+ fullPath: `./src/${file}/index.${isTs ? 'ts' : 'js'}`
+ }
+ })
+ )
+}
diff --git a/date-fns/scripts/_lib/listLocales.js b/date-fns/scripts/_lib/listLocales.js
new file mode 100644
index 0000000..81c8cc8
--- /dev/null
+++ b/date-fns/scripts/_lib/listLocales.js
@@ -0,0 +1,24 @@
+const path = require('path')
+const fs = require('fs')
+
+const ignoredFiles = [
+ 'index.js',
+ 'test.js',
+ 'index.js.flow',
+ 'package.json',
+ 'types.ts',
+]
+
+module.exports = listLocales
+
+function listLocales() {
+ const locales = fs.readdirSync(path.join(process.cwd(), 'src', 'locale'))
+ return locales
+ .filter((file) => /^[^._]/.test(file) && !ignoredFiles.includes(file))
+ .map((locale) => ({
+ name: locale.replace(/-/g, ''),
+ code: locale,
+ path: `./${locale}`,
+ fullPath: `./src/locale/${locale}/index.js`,
+ }))
+}
diff --git a/date-fns/scripts/build/_lib/addDenoExtensions.ts b/date-fns/scripts/build/_lib/addDenoExtensions.ts
new file mode 100644
index 0000000..f0e43d6
--- /dev/null
+++ b/date-fns/scripts/build/_lib/addDenoExtensions.ts
@@ -0,0 +1,79 @@
+import { resolve, dirname } from 'path'
+import fs from 'fs'
+import globby from 'globby'
+import ts, {
+ ExportDeclaration,
+ ImportDeclaration,
+ StringLiteral,
+} from 'typescript'
+
+const { readFile, writeFile, stat } = fs.promises
+
+const pattern = /\.(ts|js)$/
+const ignore = [/\.d\.ts$/]
+
+const resolvedExtensions: Record<string, string> = {}
+
+globby('deno')
+ .then((files) =>
+ files.filter(
+ (file) => pattern.test(file) && !ignore.find((p) => p.test(file))
+ )
+ )
+ .then((files) =>
+ Promise.all(
+ files.map((file) =>
+ readFile(file, 'utf8').then(async (content) => {
+ const source = ts.createSourceFile(
+ file,
+ content,
+ ts.ScriptTarget.Latest
+ )
+ const imports: string[] = []
+
+ source.forEachChild((node) => {
+ if (
+ [
+ ts.SyntaxKind.ImportDeclaration,
+ ts.SyntaxKind.ExportDeclaration,
+ ].includes(node.kind)
+ ) {
+ const importNode = node as ImportDeclaration | ExportDeclaration
+ const specifier = importNode.moduleSpecifier as StringLiteral
+ const importPath = specifier.text
+ const isLocal = /\.\/.+/
+ if (isLocal) imports.push(importPath)
+ }
+ })
+
+ await Promise.all(
+ imports.map(async (importPath) => {
+ if (resolvedExtensions[importPath]) return
+ const fullPath = resolveFullPath(file, importPath)
+ let isTs = false
+ try {
+ await stat(fullPath + '.ts')
+ isTs = true
+ } catch (_) {}
+ resolvedExtensions[fullPath] = isTs ? '.ts' : '.js'
+ })
+ )
+
+ return writeFile(
+ file,
+ imports.reduce((acc, importPath) => {
+ const fullPath = resolveFullPath(file, importPath)
+ return acc.replace(
+ new RegExp(importPath, 'g'),
+ importPath + resolvedExtensions[fullPath]
+ )
+ }, content)
+ )
+ })
+ )
+ )
+ )
+
+function resolveFullPath(file: string, importPath: string) {
+ return resolve(dirname(file), importPath)
+}
diff --git a/date-fns/scripts/build/_lib/prettier.js b/date-fns/scripts/build/_lib/prettier.js
new file mode 100644
index 0000000..a8fb388
--- /dev/null
+++ b/date-fns/scripts/build/_lib/prettier.js
@@ -0,0 +1,6 @@
+const prettier = require('prettier')
+const config = require('../../../.prettierrc')
+
+module.exports = (code, parser = 'babel') => {
+ return prettier.format(code, Object.assign(config, { parser }))
+}
diff --git a/date-fns/scripts/build/_lib/typings/common.js b/date-fns/scripts/build/_lib/typings/common.js
new file mode 100644
index 0000000..cd56267
--- /dev/null
+++ b/date-fns/scripts/build/_lib/typings/common.js
@@ -0,0 +1,92 @@
+const { addSeparator, formatBlock } = require('./formatBlock')
+
+const lowerCaseTypes = ['String', 'Number', 'Boolean']
+
+function correctTypeCase(type) {
+ if (lowerCaseTypes.includes(type)) {
+ return type.toLowerCase()
+ }
+ return type
+}
+
+function getParams(params, { leftBorder = '{', rightBorder = '}' } = {}) {
+ if (!params || params.length === 0) {
+ return leftBorder + rightBorder
+ }
+
+ const formattedParams = addSeparator(
+ params.map(param => {
+ const {
+ name,
+ props,
+ optional,
+ variable,
+ type: { names: typeNames }
+ } = param
+ const type = getType(typeNames, { props, forceArray: variable })
+ return `${variable ? '...' : ''}${name}${optional ? '?' : ''}: ${type}`
+ }),
+ ','
+ )
+
+ return formatBlock`
+ ${leftBorder}
+ ${formattedParams}
+ ${rightBorder}
+ `
+}
+
+function getType(types, { props = [], forceArray = false } = {}) {
+ const typeStrings = types.map(type => {
+ if (type === '*') {
+ return 'any'
+ }
+
+ if (type === 'function') {
+ return '(...args: Array<any>) => any'
+ }
+
+ if (type.startsWith('Array.')) {
+ const [, arrayType] = type.match(/^Array\.<(\w+)>$/i)
+ return `${correctTypeCase(arrayType)}[]`
+ }
+
+ if (type === 'Object' && props.length > 0) {
+ return getParams(props)
+ }
+
+ const caseCorrectedType = correctTypeCase(type)
+ if (forceArray) {
+ return `${caseCorrectedType}[]`
+ }
+
+ return caseCorrectedType
+ })
+
+ const allArrayTypes =
+ typeStrings.length > 1 && typeStrings.every(type => type.endsWith('[]'))
+ if (allArrayTypes) {
+ return `(${typeStrings.map(type => type.replace('[]', '')).join(' | ')})[]`
+ }
+
+ return typeStrings.join(' | ')
+}
+
+function getFPFnType(params, returns) {
+ const fpParamTypes = params.map(param =>
+ getType(param.type.names, { props: param.props })
+ )
+
+ const arity = fpParamTypes.length
+
+ fpParamTypes.push(getType(returns))
+
+ return `CurriedFn${arity}<${fpParamTypes.join(', ')}>`
+}
+
+module.exports = {
+ correctTypeCase,
+ getParams,
+ getType,
+ getFPFnType
+}
diff --git a/date-fns/scripts/build/_lib/typings/flow.js b/date-fns/scripts/build/_lib/typings/flow.js
new file mode 100644
index 0000000..8eca3b7
--- /dev/null
+++ b/date-fns/scripts/build/_lib/typings/flow.js
@@ -0,0 +1,190 @@
+const fs = require('fs')
+const path = require('path')
+const prettier = require('../prettier')
+
+const { getParams, getType, getFPFnType } = require('./common')
+
+const { addSeparator, formatBlock, formatFlowFile } = require('./formatBlock')
+
+/**
+ * Return curried function type aliases for a specific FP function arity.
+ * @param {Number} [arity=4]
+ */
+const getFlowFPTypeAliases = (arity = 4) =>
+ [
+ 'type CurriedFn1<A, R> = <A>(a: A) => R',
+
+ formatBlock`
+ type CurriedFn2<A, B, R> = <A>(a: A) => CurriedFn1<B, R>
+ | <A, B>(a: A, b: B) => R
+ `,
+
+ formatBlock`
+ type CurriedFn3<A, B, C, R> = <A>(a: A) => CurriedFn2<B, C, R>
+ | <A,B>(a: A, b: B) => CurriedFn1<C, R>
+ | <A,B,C>(a: A, b: B, c: C) => R
+ `,
+
+ formatBlock`
+ type CurriedFn4<A, B, C, D, R> = <A>(a: A) => CurriedFn3<B, C, D, R>
+ | <A,B>(a: A, b: B) => CurriedFn2<C, D, R>
+ | <A,B,C>(a: A, b: B, c: C) => CurriedFn1<D, R>
+ | <A,B,C,D>(a: A, b: B, c: C, d: D) => R
+ `,
+ ].slice(0, arity)
+
+function getFlowTypeAlias(type) {
+ const { title, properties, content } = type
+ return `export type ${title} = ${
+ properties ? getParams(properties) : content.type.names.join(' | ')
+ }`
+}
+
+function generateFlowFnTyping(fn, aliasDeclarations) {
+ const { title, args, content } = fn
+
+ const params = getParams(args, { leftBorder: '(', rightBorder: ')' })
+ const returns = getType(content.returns[0].type.names)
+
+ const moduleDeclaration = `declare module.exports: ${params} => ${returns}`
+
+ const typingFile = formatFlowFile`
+ ${addSeparator(aliasDeclarations, '\n')}
+
+ ${moduleDeclaration}
+ `
+
+ writeFile(`src/${title}/index.js.flow`, typingFile)
+}
+
+function generateFlowFnIndexTyping(fns, aliasDeclarations, constants) {
+ const fnsDeclarations = fns.map(({ title, args, content }) => {
+ const params = getParams(args, { leftBorder: '(', rightBorder: ')' })
+ const returns = getType(content.returns[0].type.names)
+ return `${title}: ${params} => ${returns}`
+ })
+
+ const typingFile = formatFlowFile`
+ ${addSeparator(aliasDeclarations, '\n')}
+
+ declare module.exports: {
+ ${addSeparator(
+ fnsDeclarations.concat(generateConstantsDeclarations(constants)),
+ ',\n'
+ )}
+ }
+ `
+
+ writeFile(`src/index.js.flow`, typingFile)
+}
+
+function generateFlowFPFnTyping(fn, aliasDeclarations) {
+ const { title, args, content } = fn
+
+ const type = getFPFnType(args, content.returns[0].type.names)
+
+ const typingFile = formatFlowFile`
+ ${addSeparator(aliasDeclarations, '\n')}
+
+ ${addSeparator(getFlowFPTypeAliases(args.length), '\n')}
+
+ declare module.exports: ${type}
+ `
+
+ writeFile(`src/fp/${title}/index.js.flow`, typingFile)
+}
+
+function generateFlowFPFnIndexTyping(fns, aliasDeclarations, constants) {
+ const fnsDeclarations = fns.map(
+ ({ title, args, content }) =>
+ `${title}: ${getFPFnType(args, content.returns[0].type.names)}`
+ )
+
+ const typingFile = formatFlowFile`
+ ${addSeparator(aliasDeclarations, '\n')}
+
+ ${addSeparator(getFlowFPTypeAliases(), '\n')}
+
+ declare module.exports: {
+ ${addSeparator(
+ fnsDeclarations.concat(generateConstantsDeclarations(constants)),
+ ','
+ )}
+ }
+ `
+
+ writeFile(`src/fp/index.js.flow`, typingFile)
+}
+
+function generateFlowLocaleTyping(locale, localeAliasDeclaration) {
+ const { fullPath } = locale
+
+ const typingFile = formatFlowFile`
+ ${localeAliasDeclaration}
+
+ declare module.exports: Locale
+ `
+
+ writeFile(`${fullPath}.flow`, typingFile)
+}
+
+function generateFlowLocaleIndexTyping(locales, localeAliasDeclaration) {
+ const typingFile = formatFlowFile`
+ ${localeAliasDeclaration}
+
+ declare module.exports: {
+ ${addSeparator(
+ locales.map(({ name }) => `${name}: Locale`),
+ ','
+ )}
+ }
+ `
+
+ writeFile('src/locale/index.js.flow', typingFile)
+}
+
+function generateFlowTypings(fns, aliases, locales, constants) {
+ const aliasDeclarations = aliases.map(getFlowTypeAlias)
+ const localeAliasDeclaration = getFlowTypeAlias(
+ aliases.find((alias) => alias.title === 'Locale')
+ )
+
+ fns.forEach((fn) => {
+ if (fn.isFPFn) {
+ generateFlowFPFnTyping(fn, aliasDeclarations)
+ } else {
+ generateFlowFnTyping(fn, aliasDeclarations)
+ }
+ })
+
+ locales.forEach((locale) => {
+ generateFlowLocaleTyping(locale, localeAliasDeclaration)
+ })
+
+ generateFlowFnIndexTyping(
+ fns.filter(({ isFPFn }) => !isFPFn),
+ aliasDeclarations,
+ constants
+ )
+ generateFlowFPFnIndexTyping(
+ fns.filter(({ isFPFn }) => isFPFn),
+ aliasDeclarations,
+ constants
+ )
+ generateFlowLocaleIndexTyping(locales, localeAliasDeclaration)
+}
+
+function generateConstantsDeclarations(constants) {
+ return constants.map((c) => `${c.name}: ${c.type.names.join(' | ')}`)
+}
+
+function writeFile(relativePath, content) {
+ return fs.writeFileSync(
+ path.resolve(process.cwd(), relativePath),
+ prettier(content, 'flow')
+ )
+}
+
+module.exports = {
+ generateFlowTypings,
+}
diff --git a/date-fns/scripts/build/_lib/typings/formatBlock.js b/date-fns/scripts/build/_lib/typings/formatBlock.js
new file mode 100644
index 0000000..4e1aa32
--- /dev/null
+++ b/date-fns/scripts/build/_lib/typings/formatBlock.js
@@ -0,0 +1,149 @@
+const flowHeader = '// @flow'
+const generatedAutomaticallyMessage = "// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it."
+
+const id = x => x
+
+const trimLeft = string =>
+ string.replace(/^\s*/, '')
+
+const trimRight = string =>
+ string.replace(/\s*$/, '')
+
+const removeIndent = (string, indent) => {
+ return trimLeft(string.slice(0, indent)) + string.slice(indent)
+}
+
+const addIndent = (string, indent) =>
+ string.length > 0
+ ? ' '.repeat(indent) + string
+ : string
+
+const detectIndent = (string) => {
+ const matchResult = string.match(/^\n*(\s+)/)
+ const indent = matchResult
+ ? matchResult[1].length
+ : 0
+ return indent
+}
+
+const addIndentToMultilineString = (string, indent, ignoreFirstLine) =>
+ string
+ .split('\n')
+ .map((line, index) =>
+ (ignoreFirstLine && index === 0)
+ ? line
+ : addIndent(line, indent)
+ )
+ .join('\n')
+
+const addIndentToArray = (array, indent, ignoreFirstElement) =>
+ array
+ .map((element, index) =>
+ addIndentToMultilineString(element, indent, ignoreFirstElement && index === 0)
+ )
+
+const removeIndentFromArray = (array, indent, ignoreFirstElement) =>
+ array
+ .map((element, index) =>
+ (ignoreFirstElement && index === 0)
+ ? element
+ : removeIndent(element, indent)
+ )
+
+/**
+ * Add a specified separator to the end of every string in the array, except the last one
+ * @param {String[]} stringsArray
+ * @returns {String[]} stringsArray with added separators
+ */
+const addSeparator = (stringsArray, separator) =>
+ stringsArray.map((string, index) =>
+ index === stringsArray.length - 1
+ ? string
+ : string + separator
+ )
+
+/**
+ * Tag function that formats a code block by putting correct indentation to it
+ * @param {String[]} rawStrings
+ * @param {...String} substitutions
+ * @returns {String} formatted code block
+ *
+ * @example
+ * const result = formatBlock`
+ * while (true) {
+ * ${addSeparator(
+ * ['Hello', 'world', '!'].map(s => `console.log('${s}')`),
+ * ';'
+ * )}
+ * }
+ * `
+ * console.log(result)
+ * //=>
+ * while (true) {
+ * console.log('Hello');
+ * console.log('world');
+ * console.log('!')
+ * }
+ */
+const formatBlock = (rawStrings, ...substitutions) => {
+ const firstLineIndent = detectIndent(rawStrings[0])
+ let lastLineIndent = 0
+
+ const result = [...substitutions, ''].map((substitution, index) => {
+ const rawString = rawStrings[index]
+
+ // Trim left if it is the first string, and right if it is the last string
+ const maybeTrimLeft = index === 0 ? trimLeft : id
+ const maybeTrimRight = index === substitutions.length ? trimRight : id
+ const string = maybeTrimLeft(maybeTrimRight(rawString))
+
+ const lines = removeIndentFromArray(string.split('\n'), firstLineIndent, true)
+
+ if (lines.length > 1) {
+ const lastLine = lines[lines.length - 1]
+ lastLineIndent = detectIndent(lastLine)
+ }
+
+ const indentedSubstitution =
+ Array.isArray(substitution)
+ ? addIndentToArray(substitution, lastLineIndent, true).join('\n')
+ : addIndentToMultilineString(substitution, lastLineIndent, true)
+
+ return lines.join('\n') + indentedSubstitution
+ }).join('')
+
+ return result
+}
+
+/**
+ * Tag function that formats a Flow file by putting the correct indentation, header and footer to it
+ * @param {String[]} rawStrings
+ * @param {...String} substitutions
+ * @returns {String} formatted file content
+ */
+const formatFlowFile = (...args) =>
+ flowHeader +
+ '\n' +
+ generatedAutomaticallyMessage +
+ '\n\n' +
+ formatBlock(...args) +
+ '\n'
+
+/**
+ * Tag function that formats a TypeScript file by putting the correct indentation, header and footer to it
+ * @param {String[]} rawStrings
+ * @param {...String} substitutions
+ * @returns {String} formatted file content
+ */
+const formatTypeScriptFile = (...args) =>
+ generatedAutomaticallyMessage +
+ '\n\n' +
+ formatBlock(...args) +
+ '\n'
+
+module.exports = {
+ addSeparator,
+ formatBlock,
+ formatFlowFile,
+ formatTypeScriptFile
+}
diff --git a/date-fns/scripts/build/_lib/typings/typeScript.js b/date-fns/scripts/build/_lib/typings/typeScript.js
new file mode 100644
index 0000000..4e93155
--- /dev/null
+++ b/date-fns/scripts/build/_lib/typings/typeScript.js
@@ -0,0 +1,460 @@
+const fs = require('fs')
+const path = require('path')
+const prettier = require('../prettier')
+
+const { getParams, getType, getFPFnType } = require('./common')
+
+const {
+ addSeparator,
+ formatBlock,
+ formatTypeScriptFile,
+} = require('./formatBlock')
+
+/**
+ * Return curried function interfaces for a specific FP function arity.
+ * @param {Number} [arity=4]
+ * @returns {String[arity]} an array of code blocks
+ */
+const getTypeScriptFPInterfaces = (arity = 4) =>
+ [
+ formatBlock`
+ interface CurriedFn1<A, R> {
+ (a: A): R
+ }
+ `,
+
+ formatBlock`
+ interface CurriedFn2<A, B, R> {
+ (a: A): CurriedFn1<B, R>
+ (a: A, b: B): R
+ }
+ `,
+
+ formatBlock`
+ interface CurriedFn3<A, B, C, R> {
+ (a: A): CurriedFn2<B, C, R>
+ (a: A, b: B): CurriedFn1<C, R>
+ (a: A, b: B, c: C): R
+ }
+ `,
+
+ formatBlock`
+ interface CurriedFn4<A, B, C, D, R> {
+ (a: A): CurriedFn3<B, C, D, R>
+ (a: A, b: B): CurriedFn2<C, D, R>
+ (a: A, b: B, c: C): CurriedFn1<D, R>
+ (a: A, b: B, c: C, d: D): R
+ }
+ `,
+ ].slice(0, arity)
+
+function getTypeScriptTypeAlias(type) {
+ const { title, properties, content } = type
+
+ return formatBlock`
+ type ${title} = ${
+ properties ? getParams(properties) : content.type.names.join(' | ')
+ }
+ type ${title}Aliased = ${title}
+ `
+}
+
+function getExportedTypeScriptTypeAlias(type) {
+ const { title } = type
+
+ return formatBlock`
+ export type ${title} = ${title}Aliased
+ `
+}
+
+function getExportedTypeScriptTypeAliases(aliases) {
+ return formatBlock`
+ declare module 'date-fns' {
+ ${addSeparator(aliases.map(getExportedTypeScriptTypeAlias), '\n')}
+ }
+ `
+}
+
+function getTypeScriptDateFnsModuleDefinition(
+ submodule,
+ fns,
+ constantsDefinitions
+) {
+ const moduleName = `date-fns${submodule}`
+
+ const definition = formatBlock`
+ declare module '${moduleName}' {
+ ${addSeparator(
+ fns.map(getTypeScriptFnDefinition).concat(constantsDefinitions),
+ '\n'
+ )}
+ }
+ `
+
+ return {
+ name: moduleName,
+ definition,
+ }
+}
+
+function getTypeScriptDateFnsFPModuleDefinition(
+ submodule,
+ fns,
+ constantsDefinitions
+) {
+ const moduleName = `date-fns${submodule}/fp`
+
+ const fnDefinitions = fns.map(getTypeScriptFPFnDefinition)
+
+ const definition = formatBlock`
+ declare module '${moduleName}' {
+ ${addSeparator(fnDefinitions.concat(constantsDefinitions), '\n')}
+ }
+ `
+
+ return {
+ name: moduleName,
+ definition,
+ }
+}
+
+function getTypeScriptFnModuleDefinition(submodule, fnSuffix, fn) {
+ const name = fn.content.name
+ const moduleName = `date-fns${submodule}/${name}${fnSuffix}`
+
+ const definition = formatBlock`
+ declare module '${moduleName}' {
+ import {${name}} from 'date-fns${submodule}'
+ export default ${name}
+ }
+ `
+
+ return {
+ name: moduleName,
+ definition,
+ }
+}
+
+function getTypeScriptFnDefinition(fn) {
+ const { title, args, content } = fn
+
+ const params = getParams(args, { leftBorder: '(', rightBorder: ')' })
+ const returns = getType(content.returns[0].type.names)
+
+ return formatBlock`
+ function ${title} ${params}: ${returns}
+ namespace ${title} {}
+ `
+}
+
+function getTypeScriptFPFnDefinition(fn) {
+ const { title, args, content } = fn
+
+ const type = getFPFnType(args, content.returns[0].type.names)
+
+ return formatBlock`
+ const ${title}: ${type}
+ namespace ${title} {}
+ `
+}
+
+function getTypeScriptFPFnModuleDefinition(submodule, fnSuffix, isDefault, fn) {
+ const { title } = fn
+ const moduleName = `date-fns${submodule}/fp/${title}${fnSuffix}`
+
+ const definition = formatBlock`
+ declare module '${moduleName}' {
+ import {${title}} from 'date-fns${submodule}/fp'
+ export default ${title}
+ }
+ `
+
+ return {
+ name: moduleName,
+ definition,
+ }
+}
+
+function getTypeScriptLocaleIndexModuleDefinition(submodule, locales) {
+ const moduleName = `date-fns${submodule}/locale`
+
+ const localesDefinitions = locales.map(getTypeScriptLocaleDefinition)
+
+ const definition = formatBlock`
+ declare module '${moduleName}' {
+ ${addSeparator(localesDefinitions, '\n')}
+ }
+ `
+
+ return {
+ name: moduleName,
+ definition,
+ }
+}
+
+function getTypeScriptLocaleDefinition(locale) {
+ const { name } = locale
+
+ return formatBlock`
+ const ${name}: Locale
+ namespace ${name} {}
+ `
+}
+
+function getTypeScriptLocaleModuleDefinition(
+ submodule,
+ localeSuffix,
+ isDefault,
+ locale
+) {
+ const code = locale.code
+ const moduleName = `date-fns${submodule}/locale/${code}${localeSuffix}`
+ const { name } = locale
+
+ const definition = formatBlock`
+ declare module '${moduleName}' {
+ import {${name}} from 'date-fns${submodule}/locale'
+ export default ${name}
+ }
+ `
+
+ return {
+ name: moduleName,
+ definition,
+ }
+}
+
+function getTypeScriptInterfaceDefinition(fn) {
+ const { title, args, content } = fn
+ const params = getParams(args, { leftBorder: '(', rightBorder: ')' })
+ const returns = getType(content.returns[0].type.names)
+
+ return `${title}${params}: ${returns}`
+}
+
+function generateTypescriptFnTyping(fn) {
+ const typingFile = formatTypeScriptFile`
+ import {${fn.title}} from 'date-fns'
+ export default ${fn.title}
+ `
+ writeFile(`./src/${fn.title}/index.d.ts`, typingFile)
+}
+
+function generateTypescriptFPFnTyping(fn) {
+ const typingFile = formatTypeScriptFile`
+ import {${fn.title}} from 'date-fns/fp'
+ export default ${fn.title}
+ `
+ writeFile(`./src/fp/${fn.title}/index.d.ts`, typingFile)
+}
+
+function generateTypescriptLocaleTyping(locale) {
+ const typingFile = formatTypeScriptFile`
+ import {${locale.name}} from 'date-fns/locale'
+ export default ${locale.name}
+ `
+ writeFile(`src/locale/${locale.code}/index.d.ts`, typingFile)
+}
+
+function generateTypeScriptTypings(fns, aliases, locales, constants) {
+ const nonFPFns = fns.filter((fn) => !fn.isFPFn)
+ const fpFns = fns.filter((fn) => fn.isFPFn)
+ const constantsDefinitions = constants.map(
+ (c) => `const ${c.name}: ${c.type.names.join(' | ')}`
+ )
+
+ const moduleDefinitions = [
+ getTypeScriptDateFnsModuleDefinition('', nonFPFns, constantsDefinitions),
+ ]
+ .concat(nonFPFns.map(getTypeScriptFnModuleDefinition.bind(null, '', '')))
+ .concat(
+ nonFPFns.map(getTypeScriptFnModuleDefinition.bind(null, '', '/index'))
+ )
+ .concat(
+ nonFPFns.map(getTypeScriptFnModuleDefinition.bind(null, '', '/index.js'))
+ )
+ .map((module) => module.definition)
+
+ const fpModuleDefinitions = [
+ getTypeScriptDateFnsFPModuleDefinition('', fpFns, constantsDefinitions),
+ ]
+ .concat(
+ fpFns.map(getTypeScriptFPFnModuleDefinition.bind(null, '', '', false))
+ )
+ .concat(
+ fpFns.map(
+ getTypeScriptFPFnModuleDefinition.bind(null, '', '/index', false)
+ )
+ )
+ .concat(
+ fpFns.map(
+ getTypeScriptFPFnModuleDefinition.bind(null, '', '/index.js', false)
+ )
+ )
+ .map((module) => module.definition)
+
+ const esmModuleDefinitions = [
+ getTypeScriptDateFnsModuleDefinition(
+ '/esm',
+ nonFPFns,
+ constantsDefinitions
+ ),
+ ]
+ .concat(
+ nonFPFns.map(getTypeScriptFnModuleDefinition.bind(null, '/esm', ''))
+ )
+ .concat(
+ nonFPFns.map(getTypeScriptFnModuleDefinition.bind(null, '/esm', '/index'))
+ )
+ .concat(
+ nonFPFns.map(
+ getTypeScriptFnModuleDefinition.bind(null, '/esm', '/index.js')
+ )
+ )
+ .map((module) => module.definition)
+
+ const esmFPModuleDefinitions = [
+ getTypeScriptDateFnsFPModuleDefinition('/esm', fpFns, constantsDefinitions),
+ ]
+ .concat(
+ fpFns.map(getTypeScriptFPFnModuleDefinition.bind(null, '/esm', '', true))
+ )
+ .concat(
+ fpFns.map(
+ getTypeScriptFPFnModuleDefinition.bind(null, '/esm', '/index', true)
+ )
+ )
+ .concat(
+ fpFns.map(
+ getTypeScriptFPFnModuleDefinition.bind(null, '/esm', '/index.js', true)
+ )
+ )
+ .map((module) => module.definition)
+
+ const aliasDefinitions = aliases.map(getTypeScriptTypeAlias)
+
+ const exportedAliasDefinitions = [getExportedTypeScriptTypeAliases(aliases)]
+
+ const localeModuleDefinitions = [
+ getTypeScriptLocaleIndexModuleDefinition('', locales),
+ ]
+ .concat(
+ locales.map(getTypeScriptLocaleModuleDefinition.bind(null, '', '', false))
+ )
+ .concat(
+ locales.map(
+ getTypeScriptLocaleModuleDefinition.bind(null, '', '/index', false)
+ )
+ )
+ .concat(
+ locales.map(
+ getTypeScriptLocaleModuleDefinition.bind(null, '', '/index.js', false)
+ )
+ )
+ .map((module) => module.definition)
+
+ const esmLocaleModuleDefinitions = [
+ getTypeScriptLocaleIndexModuleDefinition('/esm', locales),
+ ]
+ .concat(
+ locales.map(
+ getTypeScriptLocaleModuleDefinition.bind(null, '/esm', '', true)
+ )
+ )
+ .concat(
+ locales.map(
+ getTypeScriptLocaleModuleDefinition.bind(null, '/esm', '/index', true)
+ )
+ )
+ .concat(
+ locales.map(
+ getTypeScriptLocaleModuleDefinition.bind(
+ null,
+ '/esm',
+ '/index.js',
+ true
+ )
+ )
+ )
+ .map((module) => module.definition)
+
+ const globalInterfaceDefinition = formatBlock`
+ interface dateFns {
+ ${addSeparator(
+ nonFPFns
+ .map(getTypeScriptInterfaceDefinition)
+ .concat(
+ constants.map((c) => `${c.name}: ${c.type.names.join(' | ')}`)
+ ),
+ '\n'
+ )}
+ }
+ `
+
+ const typingFile = formatTypeScriptFile`
+ // FP Interfaces
+
+ ${addSeparator(getTypeScriptFPInterfaces(), '\n')}
+
+ // Type Aliases
+
+ ${addSeparator(aliasDefinitions, '\n')}
+
+ // Exported Type Aliases
+
+ ${addSeparator(exportedAliasDefinitions, '\n')}
+
+ // Regular Functions
+
+ ${addSeparator(moduleDefinitions, '\n')}
+
+ // FP Functions
+
+ ${addSeparator(fpModuleDefinitions, '\n')}
+
+ // ECMAScript Module Functions
+
+ ${addSeparator(esmModuleDefinitions, '\n')}
+
+ // ECMAScript Module FP Functions
+
+ ${addSeparator(esmFPModuleDefinitions, '\n')}
+
+ // Regular Locales
+
+ ${addSeparator(localeModuleDefinitions, '\n')}
+
+ // ECMAScript Module Locales
+
+ ${addSeparator(esmLocaleModuleDefinitions, '\n')}
+
+ // dateFns Global Interface
+
+ ${globalInterfaceDefinition}
+ `
+
+ writeFile('typings.d.ts', typingFile)
+
+ fns.forEach((fn) => {
+ if (fn.isFPFn) {
+ generateTypescriptFPFnTyping(fn)
+ } else {
+ generateTypescriptFnTyping(fn)
+ }
+ })
+
+ locales.forEach((locale) => {
+ generateTypescriptLocaleTyping(locale)
+ })
+}
+
+function writeFile(relativePath, content) {
+ return fs.writeFileSync(
+ path.resolve(process.cwd(), relativePath),
+ prettier(content, 'typescript')
+ )
+}
+
+module.exports = {
+ generateTypeScriptTypings,
+}
diff --git a/date-fns/scripts/build/build.sh b/date-fns/scripts/build/build.sh
new file mode 100755
index 0000000..d4b3726
--- /dev/null
+++ b/date-fns/scripts/build/build.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# The script unifies the build scripts.
+#
+# It's the entry point for the build process.
+
+set -ex
+
+./scripts/build/docs.js
+./scripts/build/fp.js
+./scripts/build/typings.js
+./scripts/build/indices.js
diff --git a/date-fns/scripts/build/deno.sh b/date-fns/scripts/build/deno.sh
new file mode 100755
index 0000000..f76b52d
--- /dev/null
+++ b/date-fns/scripts/build/deno.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+# The script builds the Deno package.
+
+rsync --archive --prune-empty-dirs --relative --exclude={'*.flow','benchmark.*','test.*','snapshot.md'} src/./ deno
+cp {CHANGELOG.md,LICENSE.md,typings.d.ts} deno
+yarn ts-node scripts/build/_lib/addDenoExtensions.ts \ No newline at end of file
diff --git a/date-fns/scripts/build/docs.js b/date-fns/scripts/build/docs.js
new file mode 100755
index 0000000..85c99eb
--- /dev/null
+++ b/date-fns/scripts/build/docs.js
@@ -0,0 +1,380 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script generates docs.json used as the source of truth
+ * for the source code generators (FP, typings, etc.).
+ *
+ * It's a part of the build process.
+ */
+
+const os = require('os')
+const pLimit = require('p-limit')
+const fs = require('fs/promises')
+const path = require('path')
+const cloneDeep = require('lodash.clonedeep')
+const jsDocParser = require('jsdoc-to-markdown')
+const listFns = require('../_lib/listFns')
+const docsConfig = require('../../docs/index.js')
+
+const docsPath = path.resolve(process.cwd(), 'tmp/docs.json')
+
+generateDocsFromSource()
+ .then(generatedDocsObj)
+ .then(injectStaticDocsToDocsObj)
+ .then(injectSharedDocsToDocsObj)
+ .then(writeDocsFile)
+ .catch(reportErrors)
+
+/**
+ * Generates docs object from a list of functions using extended JSDoc format.
+ */
+async function generateDocsFromSource() {
+ const fns = await listFns()
+
+ const limit = pLimit(os.cpus().length)
+
+ const configFile = path.resolve(process.cwd(), 'jsdoc2md.json')
+
+ const jobs = fns.map((fn) => {
+ return limit(() =>
+ jsDocParser
+ .getTemplateData({
+ files: fn.fullPath,
+ 'no-cache': true,
+ configure: configFile,
+ })
+ .then((result) => result[0])
+ )
+ })
+
+ const docsResult = await Promise.all(jobs)
+
+ return docsResult
+ .map((doc) => {
+ const pureTag =
+ doc.customTags && doc.customTags.find((t) => t.tag === 'pure')
+ const pure = (pureTag && pureTag.value) !== 'false'
+ return {
+ type: 'jsdoc',
+ kind: 'function',
+ urlId: doc.name,
+ category: doc.category,
+ title: doc.name,
+ description: doc.summary,
+ content: doc,
+ pure,
+ }
+ })
+ .reduce(
+ (array, doc) =>
+ array
+ .concat(generateFnDoc(doc))
+ .concat(
+ doc.pure
+ ? [generateFPFnDoc(doc)].concat(
+ generateFPFnWithOptionsDoc(doc) || []
+ )
+ : []
+ ),
+ []
+ )
+}
+
+/**
+ * Generates docs object.
+ */
+function generatedDocsObj(docs) {
+ return groupDocs(docs, docsConfig.groups)
+}
+
+/**
+ * Injects static docs (markdown documents specified in the config file)
+ * to docs object.
+ */
+function injectStaticDocsToDocsObj(docsFileObj) {
+ return getListOfStaticDocs()
+ .then((staticDocs) => {
+ staticDocs.forEach((staticDoc) => {
+ docsFileObj[staticDoc.category].push(staticDoc)
+ })
+ return docsFileObj
+ })
+ .catch(reportErrors)
+}
+
+/**
+ * Injects shared docs to docs object.
+ */
+function injectSharedDocsToDocsObj(docsFileObj) {
+ return generateSharedDocs()
+ .then((sharedDocs) => {
+ sharedDocs.forEach((sharedDoc) => {
+ docsFileObj[sharedDoc.category].push(sharedDoc)
+ })
+ return docsFileObj
+ })
+ .catch(reportErrors)
+}
+
+/**
+ * Prints an error and exits the process with 1 status code.
+ */
+function reportErrors(err) {
+ console.error(err.stack)
+ process.exit(1)
+}
+
+/**
+ * Writes docs file.
+ */
+function writeDocsFile(docsFileObj) {
+ return fs.writeFile(docsPath, JSON.stringify(docsFileObj))
+}
+
+/**
+ * Groups passed docs list.
+ */
+function groupDocs(docs, groups) {
+ return docs.reduce((acc, doc) => {
+ ;(acc[doc.category] = acc[doc.category] || []).push(doc)
+ return acc
+ }, buildGroupsTemplate(groups))
+}
+
+/**
+ * Builds an object where the key is a group name and the value is
+ * an empty array. Pre-generated docs object allows to preserve the desired
+ * groups order.
+ */
+function buildGroupsTemplate(groups) {
+ return groups.reduce((acc, group) => {
+ acc[group] = []
+ return acc
+ }, {})
+}
+
+/**
+ * Returns promise to list of static docs with its contents.
+ */
+function getListOfStaticDocs() {
+ return Promise.all(
+ docsConfig.staticDocs.map((staticDoc) => {
+ return fs
+ .readFile(staticDoc.path)
+ .then((docContent) => docContent.toString())
+ .then((content) => Object.assign({ content }, staticDoc))
+ .catch(reportErrors)
+ })
+ )
+}
+
+/**
+ * Returns promise to list of shared docs with its contents.
+ */
+function generateSharedDocs() {
+ const docs = docsConfig.sharedDocs
+ .map(
+ (fn) =>
+ jsDocParser.getTemplateDataSync({
+ files: fn.fullPath,
+ 'no-cache': true,
+ })[0]
+ )
+ .map((doc) => ({
+ type: 'jsdoc',
+ kind: 'typedef',
+ urlId: doc.name,
+ category: doc.category,
+ title: doc.name,
+ description: doc.summary,
+ content: doc,
+ properties: paramsToTree(doc.properties),
+ }))
+
+ return Promise.resolve(docs)
+}
+
+function generateFnDoc(dirtyDoc) {
+ const doc = cloneDeep(dirtyDoc)
+
+ const isFPFn = false
+ const { urlId, title } = doc
+ const args = paramsToTree(doc.content.params)
+
+ return Object.assign(doc, {
+ isFPFn,
+ args,
+ relatedDocs: Object.assign(
+ { default: urlId, fp: `fp/${urlId}` },
+ withOptions(args) ? { fpWithOptions: `fp/${urlId}WithOptions` } : {}
+ ),
+ usage: generateUsage(title, isFPFn),
+ usageTabs: generateUsageTabs(isFPFn),
+ syntax: generateSyntaxString(title, args, isFPFn),
+ })
+}
+
+function generateFPFnDoc(dirtyDoc) {
+ const doc = cloneDeep(dirtyDoc)
+
+ const isFPFn = true
+ const { urlId, title } = doc
+ const exceptions = doc.content.exceptions.filter(
+ (exception) => !exception.description.includes('options.')
+ )
+ const params = doc.content.params
+ .filter((param) => !param.name.startsWith('options'))
+ .reverse()
+ const args = paramsToTree(params)
+
+ return Object.assign(doc, {
+ isFPFn,
+ args,
+ generatedFrom: title,
+ urlId: `fp/${urlId}`,
+ relatedDocs: Object.assign(
+ { default: urlId, fp: `fp/${urlId}` },
+ withOptions(args) ? { fpWithOptions: `fp/${urlId}WithOptions` } : {}
+ ),
+ usage: generateUsage(title, isFPFn),
+ usageTabs: generateUsageTabs(isFPFn),
+ syntax: generateSyntaxString(title, args, isFPFn),
+
+ content: Object.assign(doc.content, {
+ exceptions,
+ params,
+ examples:
+ 'See [FP Guide](https://date-fns.org/docs/FP-Guide) for more information',
+ }),
+ })
+}
+
+function generateFPFnWithOptionsDoc(dirtyDoc) {
+ const doc = cloneDeep(dirtyDoc)
+
+ const isFPFn = true
+ const { urlId, title } = doc
+ const params = doc.content.params
+ .map((param) => {
+ if (!param.name.includes('.')) {
+ param.optional = false
+ }
+ return param
+ })
+ .reverse()
+ const args = paramsToTree(params)
+
+ if (!withOptions(args)) return
+
+ return Object.assign(doc, {
+ isFPFn,
+ args,
+ generatedFrom: title,
+ title: `${title}WithOptions`,
+ urlId: `fp/${urlId}WithOptions`,
+ relatedDocs: {
+ default: urlId,
+ fp: `fp/${urlId}`,
+ fpWithOptions: `fp/${urlId}WithOptions`,
+ },
+ usage: generateUsage(title, isFPFn),
+ usageTabs: generateUsageTabs(isFPFn),
+ syntax: generateSyntaxString(title, args, isFPFn),
+
+ content: Object.assign(doc.content, {
+ params,
+ id: `${doc.content.id}WithOptions`,
+ longname: `${doc.content.longname}WithOptions`,
+ name: `${doc.content.name}WithOptions`,
+ examples:
+ 'See [FP Guide](https://date-fns.org/docs/FP-Guide) for more information',
+ }),
+ })
+}
+
+function withOptions(args) {
+ return args && args[0].name === 'options'
+}
+
+function generateUsageTabs(isFPFn) {
+ return isFPFn
+ ? ['commonjs', 'es2015', 'esm']
+ : ['commonjs', 'umd', 'es2015', 'esm']
+}
+
+function generateUsage(name, isFPFn) {
+ const submodule = isFPFn ? '/fp' : ''
+
+ let usage = {
+ commonjs: {
+ title: 'CommonJS',
+ code: `var ${name} = require('date-fns${submodule}/${name}')`,
+ },
+
+ es2015: {
+ title: 'ES 2015',
+ code: `import ${name} from 'date-fns${submodule}/${name}'`,
+ },
+
+ esm: {
+ title: 'ESM',
+ code: `import { ${name} } from 'date-fns${
+ submodule && `/esm/${submodule}`
+ }'`,
+ text:
+ 'See [ECMAScript Modules guide](https://date-fns.org/docs/ECMAScript-Modules) for more information',
+ },
+ }
+
+ return usage
+}
+
+function paramsToTree(dirtyParams) {
+ if (!dirtyParams) {
+ return null
+ }
+
+ const params = cloneDeep(dirtyParams)
+
+ const paramIndices = params.reduce((result, { name }, index) => {
+ result[name] = index
+ return result
+ }, {})
+
+ return params
+ .map((param) => {
+ const { name, isProperty } = param
+
+ const indexOfDot = name.indexOf('.')
+
+ if (indexOfDot >= 0 && !isProperty) {
+ const parentIndex = paramIndices[name.substring(0, indexOfDot)]
+ const parent = params[parentIndex]
+
+ param.name = name.substring(indexOfDot + 1)
+ param.isProperty = true
+ if (!parent.props) {
+ parent.props = [param]
+ } else {
+ parent.props.push(param)
+ }
+ }
+
+ return param
+ })
+ .filter((param) => !param.isProperty)
+}
+
+function generateSyntaxString(name, args, isFPFn) {
+ if (!args) {
+ return undefined
+ } else if (isFPFn) {
+ return args.reduce((acc, arg) => acc.concat(`(${arg.name})`), name)
+ } else {
+ const argsString = args
+ .map((arg) => (arg.optional ? `[${arg.name}]` : arg.name))
+ .join(', ')
+ return `${name}(${argsString})`
+ }
+}
diff --git a/date-fns/scripts/build/fp.js b/date-fns/scripts/build/fp.js
new file mode 100755
index 0000000..f3e5a5a
--- /dev/null
+++ b/date-fns/scripts/build/fp.js
@@ -0,0 +1,51 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script generates the FP functions using the docs JSON file.
+ *
+ * It's a part of the build process.
+ */
+
+const fs = require('fs')
+const path = require('path')
+const prettier = require('./_lib/prettier')
+const jsDocs = require(path.resolve(process.cwd(), 'tmp/docs.json'))
+
+const generatedAutomaticallyMessage =
+ "// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it."
+const FP_DIR = './src/fp'
+
+const fpFns = Object.keys(jsDocs)
+ .map((category) => jsDocs[category])
+ .reduce((previousValue, newValue) => [...previousValue, ...newValue], [])
+ .filter((doc) => doc.kind === 'function' && doc.isFPFn)
+
+buildFP(fpFns)
+
+function getFPFn(resultFnName, initialFnName, arity) {
+ return [generatedAutomaticallyMessage]
+ .concat('')
+ .concat(`import fn from '../../${initialFnName}/index'`)
+ .concat(`import convertToFP from '../_lib/convertToFP/index'`)
+ .concat('')
+ .concat(`var ${resultFnName} = convertToFP(fn, ${arity})`)
+ .concat('')
+ .concat(`export default ${resultFnName}`)
+ .concat('')
+ .join('\n')
+}
+
+function buildFPFn({ title, generatedFrom, args: { length } }) {
+ const fpFnLines = getFPFn(title, generatedFrom, length)
+ const fpFnDir = `${FP_DIR}/${title}`
+
+ if (!fs.existsSync(fpFnDir)) {
+ fs.mkdirSync(fpFnDir)
+ }
+ fs.writeFileSync(`${fpFnDir}/index.js`, prettier(fpFnLines))
+}
+
+function buildFP(fns) {
+ fns.forEach(buildFPFn)
+}
diff --git a/date-fns/scripts/build/indices.js b/date-fns/scripts/build/indices.js
new file mode 100755
index 0000000..45767fb
--- /dev/null
+++ b/date-fns/scripts/build/indices.js
@@ -0,0 +1,61 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script generates index files for submodules.
+ *
+ * It's a part of the build process.
+ */
+
+const fs = require('fs')
+const path = require('path')
+const prettier = require('./_lib/prettier')
+const listFns = require('../_lib/listFns')
+const listFPFns = require('../_lib/listFPFns')
+const listLocales = require('../_lib/listLocales')
+
+const outdatedLocales = require('../../outdatedLocales.json')
+
+const generatedAutomaticallyMessage =
+ "// This file is generated automatically by `scripts/build/indices.js`. Please, don't change it."
+
+listFns().then((fns) => {
+ const fpFns = listFPFns()
+ const locales = listLocales().filter(
+ ({ code }) => !outdatedLocales.includes(code)
+ )
+
+ writeFile('src/index.js', generateIndex(fns, false, true))
+ writeFile('src/fp/index.js', generateIndex(fpFns, true, true))
+ writeFile('src/locale/index.js', generateIndex(locales, false, false))
+})
+
+function writeFile(relativePath, content) {
+ return fs.writeFileSync(
+ path.resolve(process.cwd(), relativePath),
+ prettier(content)
+ )
+}
+
+function generateIndex(files, isFP, includeConstants) {
+ const fileLines = files
+ .map(
+ (fn) =>
+ `export { default as ${fn.name} } from '${fn.path.replace(
+ /\.js$/,
+ ''
+ )}/index'`
+ )
+ .concat(
+ includeConstants
+ ? `export * from '${isFP ? '..' : '.'}/constants/index'`
+ : []
+ )
+
+ const indexLines = [generatedAutomaticallyMessage]
+ .concat('')
+ .concat(fileLines)
+ .join('\n')
+
+ return `${indexLines}\n`
+}
diff --git a/date-fns/scripts/build/localeSnapshots/_lib/distanceDates.js b/date-fns/scripts/build/localeSnapshots/_lib/distanceDates.js
new file mode 100644
index 0000000..4f104a0
--- /dev/null
+++ b/date-fns/scripts/build/localeSnapshots/_lib/distanceDates.js
@@ -0,0 +1,59 @@
+export const baseDate = new Date(2000, 0, 1)
+
+export const dates = [
+ new Date(2006, 0, 1),
+ new Date(2005, 0, 1),
+ new Date(2004, 0, 1),
+ new Date(2003, 0, 1),
+ new Date(2002, 0, 1),
+ new Date(2001, 5, 1),
+ new Date(2001, 1, 1),
+ new Date(2001, 0, 1),
+ new Date(2000, 5, 1),
+ new Date(2000, 2, 1),
+ new Date(2000, 1, 1),
+ new Date(2000, 0, 15),
+ new Date(2000, 0, 2),
+ new Date(2000, 0, 1, 6),
+ new Date(2000, 0, 1, 1),
+ new Date(2000, 0, 1, 0, 45),
+ new Date(2000, 0, 1, 0, 30),
+ new Date(2000, 0, 1, 0, 15),
+ new Date(2000, 0, 1, 0, 1),
+ new Date(2000, 0, 1, 0, 0, 25),
+ new Date(2000, 0, 1, 0, 0, 15),
+ new Date(2000, 0, 1, 0, 0, 5),
+ baseDate,
+ new Date(1999, 11, 31, 23, 59, 55),
+ new Date(1999, 11, 31, 23, 59, 45),
+ new Date(1999, 11, 31, 23, 59, 35),
+ new Date(1999, 11, 31, 23, 59),
+ new Date(1999, 11, 31, 23, 45),
+ new Date(1999, 11, 31, 23, 30),
+ new Date(1999, 11, 31, 23, 15),
+ new Date(1999, 11, 31, 23),
+ new Date(1999, 11, 31, 18),
+ new Date(1999, 11, 30),
+ new Date(1999, 11, 15),
+ new Date(1999, 11, 1),
+ new Date(1999, 10, 1),
+ new Date(1999, 5, 1),
+ new Date(1999, 0, 1),
+ new Date(1998, 11, 1),
+ new Date(1998, 5, 1),
+ new Date(1998, 0, 1),
+ new Date(1997, 0, 1),
+ new Date(1996, 0, 1),
+ new Date(1995, 0, 1),
+ new Date(1994, 0, 1)
+]
+
+export const relativeDates = [
+ new Date(2000, 0, 10),
+ new Date(2000, 0, 5),
+ new Date(2000, 0, 2),
+ baseDate,
+ new Date(1999, 11, 31),
+ new Date(1999, 11, 27),
+ new Date(1999, 11, 21)
+]
diff --git a/date-fns/scripts/build/localeSnapshots/index.js b/date-fns/scripts/build/localeSnapshots/index.js
new file mode 100755
index 0000000..7581d95
--- /dev/null
+++ b/date-fns/scripts/build/localeSnapshots/index.js
@@ -0,0 +1,69 @@
+#!/usr/bin/env babel-node
+
+/**
+ * @file
+ * The script generates the locale snapshots.
+ *
+ * It's a part of the build process.
+ */
+
+import { readFile, readFileSync, writeFile } from 'mz/fs'
+import path from 'path'
+import listLocales from '../../_lib/listLocales'
+import prettier from '../_lib/prettier'
+import renderFormatDistance from './renderFormatDistance'
+import renderFormatDistanceStrict from './renderFormatDistanceStrict'
+import renderFormatParse from './renderFormatParse'
+import renderFormatRelative from './renderFormatRelative'
+
+const mode = process.argv[2] || 'generate'
+
+if (process.env.TZ.toLowerCase() !== 'utc')
+ throw new Error('The locale snapshots generation must be run with TZ=utc')
+
+const outdatedLocales = JSON.parse(
+ readFileSync(path.join(process.cwd(), 'outdatedLocales.json'), 'utf8')
+)
+const locales = listLocales().filter(
+ ({ code }) => !outdatedLocales.includes(code)
+)
+
+Promise.all(
+ locales.map(localeObj => {
+ const { code, fullPath } = localeObj
+ const locale = require(`../../../src/locale/${code}`)
+ const source = readFileSync(path.join(process.cwd(), fullPath)).toString()
+ const languageName = source.match(/\* @language (.*)/)[1]
+
+ const snapshot = `# ${languageName} (${code}) locale
+
+${renderFormatParse(locale)}
+
+${renderFormatDistance(locale)}
+
+${renderFormatDistanceStrict(locale)}
+
+${renderFormatRelative(locale)}
+`
+
+ const snapshotPath = path.join(
+ path.resolve(process.cwd(), path.dirname(fullPath)),
+ 'snapshot.md'
+ )
+ const formattedSnapshot = prettier(snapshot, 'markdown')
+
+ if (mode === 'test') {
+ return readFile(snapshotPath, 'utf8').then(snapshotFileContent => {
+ if (snapshotFileContent !== formattedSnapshot)
+ throw new Error(
+ `The snapshot on the disk doesn't match the generated snapshot: ${snapshotPath}. Please run yarn locale-snapshots and commit the results.`
+ )
+ })
+ } else {
+ return writeFile(snapshotPath, formattedSnapshot)
+ }
+ })
+).catch(err => {
+ console.error(err.stack)
+ process.exit(1)
+})
diff --git a/date-fns/scripts/build/localeSnapshots/renderFormatDistance/index.js b/date-fns/scripts/build/localeSnapshots/renderFormatDistance/index.js
new file mode 100644
index 0000000..f59d312
--- /dev/null
+++ b/date-fns/scripts/build/localeSnapshots/renderFormatDistance/index.js
@@ -0,0 +1,26 @@
+import formatDistance from '../../../../src/formatDistance'
+import { baseDate, dates } from '../_lib/distanceDates'
+
+export default function renderFormatDistance(locale) {
+ return `## \`formatDistance\`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | \`includeSeconds: true\` | \`addSuffix: true\` |
+|-|-|-|-|
+${dates
+ .map(date => {
+ const dateString = date.toISOString()
+ const result = formatDistance(date, baseDate, { locale })
+ const resultIncludeSeconds = formatDistance(date, baseDate, {
+ locale,
+ includeSeconds: true
+ })
+ const resultAddSuffix = formatDistance(date, baseDate, {
+ locale,
+ addSuffix: true
+ })
+ return `| ${dateString} | ${result} | ${resultIncludeSeconds} | ${resultAddSuffix} |`
+ })
+ .join('\n')}`
+}
diff --git a/date-fns/scripts/build/localeSnapshots/renderFormatDistanceStrict/index.js b/date-fns/scripts/build/localeSnapshots/renderFormatDistanceStrict/index.js
new file mode 100644
index 0000000..3dc03ab
--- /dev/null
+++ b/date-fns/scripts/build/localeSnapshots/renderFormatDistanceStrict/index.js
@@ -0,0 +1,26 @@
+import formatDistanceStrict from '../../../../src/formatDistanceStrict'
+import { baseDate, dates } from '../_lib/distanceDates'
+
+export default function renderFormatDistanceStrict(locale) {
+ return `## \`formatDistanceStrict\`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | \`addSuffix: true\` | With forced unit (i.e. \`hour\`)
+|-|-|-|-|
+${dates
+ .map(date => {
+ const dateString = date.toISOString()
+ const result = formatDistanceStrict(date, baseDate, { locale })
+ const resultAddSuffix = formatDistanceStrict(date, baseDate, {
+ locale,
+ addSuffix: true
+ })
+ const resultForcedUnit = formatDistanceStrict(date, baseDate, {
+ locale,
+ unit: 'hour'
+ })
+ return `| ${dateString} | ${result} | ${resultAddSuffix} | ${resultForcedUnit} |`
+ })
+ .join('\n')}`
+}
diff --git a/date-fns/scripts/build/localeSnapshots/renderFormatParse/formatParseTokens.js b/date-fns/scripts/build/localeSnapshots/renderFormatParse/formatParseTokens.js
new file mode 100644
index 0000000..5631d95
--- /dev/null
+++ b/date-fns/scripts/build/localeSnapshots/renderFormatParse/formatParseTokens.js
@@ -0,0 +1,218 @@
+const yearDates = [
+ new Date(1987, 1, 11, 12, 13, 14, 15),
+ new Date(0, 0, 1, 12, 13, 14, 15).setFullYear(5, 0, 1)
+]
+
+const quarterDates = [
+ new Date(2019, 0, 1, 12, 13, 14, 15),
+ new Date(2019, 3, 1, 12, 13, 14, 15)
+]
+
+const monthDates = [
+ new Date(2019, 1, 11, 12, 13, 14, 15),
+ new Date(2019, 6, 10, 12, 13, 14, 15)
+]
+
+const weekOfYearDates = [
+ new Date(2019, 0, 1, 12, 13, 14, 15),
+ new Date(2019, 11, 1, 12, 13, 14, 15)
+]
+
+const dayOfMonthDates = [
+ new Date(2019, 1, 11, 12, 13, 14, 15),
+ new Date(2019, 1, 28, 12, 13, 14, 15)
+]
+
+const dayOfYearDates = [
+ new Date(2019, 1, 11, 12, 13, 14, 15),
+ new Date(2019, 11, 31, 12, 13, 14, 15)
+]
+
+const dayOfWeekDates = [
+ new Date(2019, 1, 11, 12, 13, 14, 15),
+ new Date(2019, 1, 15, 12, 13, 14, 15)
+]
+
+const timeOfDayDates = [
+ new Date(2019, 1, 11, 11, 13, 14, 15),
+ new Date(2019, 1, 11, 14, 13, 14, 15),
+ new Date(2019, 1, 11, 19, 13, 14, 15),
+ new Date(2019, 1, 11, 2, 13, 14, 15)
+]
+
+const hourDates = [
+ new Date(2019, 1, 11, 11, 13, 14, 15),
+ new Date(2019, 1, 11, 23, 13, 14, 15)
+]
+
+const localizedDates = [
+ new Date(1987, 1, 11, 12, 13, 14, 15),
+ new Date(1453, 4, 29, 23, 59, 59, 999)
+]
+
+const formatParseTokens = [
+ {
+ title: 'Calendar year',
+ tokens: ['yo'],
+ dates: yearDates
+ },
+
+ {
+ title: 'Local week-numbering year',
+ tokens: ['Yo'],
+ dates: yearDates,
+ options: { useAdditionalWeekYearTokens: true }
+ },
+
+ {
+ title: 'Quarter (formatting)',
+ tokens: ['Qo', 'QQQ', 'QQQQ', 'QQQQQ'],
+ dates: quarterDates
+ },
+
+ {
+ title: 'Quarter (stand-alone)',
+ tokens: ['qo', 'qqq', 'qqqq'],
+ dates: quarterDates
+ },
+
+ {
+ title: 'Month (formatting)',
+ tokens: ['Mo', 'MMM', 'MMMM', 'MMMMM'],
+ dates: monthDates
+ },
+
+ {
+ title: 'Month (stand-alone) ',
+ tokens: ['Lo', 'LLL', 'LLLL', 'LLLLL'],
+ dates: monthDates
+ },
+
+ {
+ title: 'Local week of year',
+ tokens: ['wo'],
+ dates: weekOfYearDates
+ },
+
+ {
+ title: 'ISO week of year',
+ tokens: ['Io'],
+ dates: weekOfYearDates
+ },
+
+ {
+ title: 'Day of month',
+ tokens: ['do'],
+ dates: dayOfMonthDates
+ },
+
+ {
+ title: 'Day of year',
+ tokens: ['Do'],
+ dates: dayOfYearDates,
+ options: { useAdditionalDayOfYearTokens: true }
+ },
+
+ {
+ title: 'Day of week (formatting)',
+ tokens: ['E', 'EE', 'EEE', 'EEEE', 'EEEEE', 'EEEEEE'],
+ dates: dayOfWeekDates
+ },
+
+ {
+ title: 'ISO day of week (formatting)',
+ tokens: ['io', 'iii', 'iiii', 'iiiii', 'iiiiii'],
+ dates: dayOfWeekDates
+ },
+
+ {
+ title: 'Local day of week (formatting)',
+ tokens: ['eo', 'eee', 'eeee', 'eeeee', 'eeeeee'],
+ dates: dayOfWeekDates
+ },
+
+ {
+ title: 'Local day of week (stand-alone)',
+ tokens: ['co', 'ccc', 'cccc', 'ccccc', 'cccccc'],
+ dates: dayOfWeekDates
+ },
+
+ {
+ title: 'AM, PM',
+ tokens: ['a', 'aa', 'aaa', 'aaaa', 'aaaaa'],
+ dates: timeOfDayDates
+ },
+
+ {
+ title: 'AM, PM, noon, midnight',
+ tokens: ['b', 'bb', 'bbb', 'bbbb', 'bbbbb'],
+ dates: timeOfDayDates
+ },
+
+ {
+ title: 'Flexible day period',
+ tokens: ['B', 'BB', 'BBB', 'BBBB', 'BBBBB'],
+ dates: timeOfDayDates
+ },
+
+ {
+ title: 'Hour [1-12]',
+ tokens: ['ho'],
+ dates: hourDates
+ },
+
+ {
+ title: 'Hour [0-23]',
+ tokens: ['Ho'],
+ dates: hourDates
+ },
+
+ {
+ title: 'Hour [0-11]',
+ tokens: ['Ko'],
+ dates: hourDates
+ },
+
+ {
+ title: 'Hour [1-24]',
+ tokens: ['ko'],
+ dates: hourDates
+ },
+
+ {
+ title: 'Minute',
+ tokens: ['mo'],
+ dates: [
+ new Date(2019, 0, 1, 12, 1, 14, 15),
+ new Date(2019, 3, 1, 12, 55, 14, 15)
+ ]
+ },
+
+ {
+ title: 'Second',
+ tokens: ['so'],
+ dates: [
+ new Date(2019, 0, 1, 12, 13, 1, 15),
+ new Date(2019, 3, 1, 12, 13, 55, 15)
+ ]
+ },
+
+ {
+ title: 'Long localized date',
+ tokens: ['P', 'PP', 'PPP', 'PPPP'],
+ dates: localizedDates
+ },
+
+ {
+ title: 'Long localized time',
+ tokens: ['p', 'pp', 'ppp', 'pppp'],
+ dates: localizedDates
+ },
+
+ {
+ title: 'Combination of date and time',
+ tokens: ['Pp', 'PPpp', 'PPPppp', 'PPPPpppp'],
+ dates: localizedDates
+ }
+]
+export default formatParseTokens
diff --git a/date-fns/scripts/build/localeSnapshots/renderFormatParse/index.js b/date-fns/scripts/build/localeSnapshots/renderFormatParse/index.js
new file mode 100644
index 0000000..2ddcb10
--- /dev/null
+++ b/date-fns/scripts/build/localeSnapshots/renderFormatParse/index.js
@@ -0,0 +1,59 @@
+import format from '../../../../src/format'
+import isValid from '../../../../src/isValid'
+import parse from '../../../../src/parse'
+import toDate from '../../../../src/toDate'
+import formatParseTokens from './formatParseTokens'
+
+export default function renderFormatParse(locale) {
+ return `## \`format\` and \`parse\`
+
+| Title | Token string | Date | \`format\` result | \`parse\` result |
+|-|-|-|-|-|
+${formatParseTokens
+ .map(({ title, tokens, dates, options = {}, skipParse }) => {
+ return tokens
+ .map((token, tokenIndex) => {
+ return dates
+ .map((date, dateIndex) => {
+ const dateString = toDate(date).toISOString()
+ const formatResult = format(
+ date,
+ token,
+ Object.assign({ locale }, options)
+ )
+ let parsedDate
+ try {
+ parsedDate =
+ !skipParse &&
+ parse(
+ formatResult,
+ token,
+ date,
+ Object.assign({ locale }, options)
+ )
+ } catch (_err) {
+ parsedDate = 'Errored'
+ }
+
+ const parseResult = skipParse
+ ? 'NA'
+ : parsedDate === 'Errored'
+ ? parsedDate
+ : isValid(parsedDate)
+ ? parsedDate.toISOString()
+ : 'Invalid Date'
+
+ if (dateIndex === 0 && tokenIndex === 0) {
+ return `| ${title} | ${token} | ${dateString} | ${formatResult} | ${parseResult} |`
+ } else if (dateIndex === 0) {
+ return `| | ${token} | ${dateString} | ${formatResult} | ${parseResult} |`
+ } else {
+ return `| | | ${dateString} | ${formatResult} | ${parseResult} |`
+ }
+ })
+ .join('\n')
+ })
+ .join('\n')
+ })
+ .join('\n')}`
+}
diff --git a/date-fns/scripts/build/localeSnapshots/renderFormatRelative/index.js b/date-fns/scripts/build/localeSnapshots/renderFormatRelative/index.js
new file mode 100644
index 0000000..68e558e
--- /dev/null
+++ b/date-fns/scripts/build/localeSnapshots/renderFormatRelative/index.js
@@ -0,0 +1,23 @@
+import formatRelative from '../../../../src/formatRelative'
+import { baseDate, relativeDates } from '../_lib/distanceDates'
+
+export default function renderFormatRelative(locale) {
+ return `## \`formatRelative\`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+|-|-|
+${relativeDates
+ .map(date => {
+ const dateString = date.toISOString()
+ let result
+ try {
+ result = formatRelative(date, baseDate, { locale })
+ } catch (_err) {
+ result = 'Errored'
+ }
+ return `| ${dateString} | ${result} |`
+ })
+ .join('\n')}`
+}
diff --git a/date-fns/scripts/build/package.sh b/date-fns/scripts/build/package.sh
new file mode 100755
index 0000000..5f7a831
--- /dev/null
+++ b/date-fns/scripts/build/package.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+# The script generates the package in the given directory.
+#
+# It's addition to the build process. The script is used in examples.
+# It also could be used to build date-fns from a git checkout.
+
+set -e
+
+# cd to the root dir
+root="$(pwd)/$(dirname "$0")/../.."
+cd "$root" || exit 1
+
+PATH="$(npm bin):$PATH"
+# XXX: $PACKAGE_OUTPUT_PATH must be an absolute path!
+dir=${PACKAGE_OUTPUT_PATH:-"$root/tmp/package"}
+
+# Clean up output dir
+rm -rf "$dir"
+mkdir -p "$dir"
+
+# Traspile CommonJS versions of files
+env BABEL_ENV='commonjs' babel src --source-root src --out-dir "$dir" --extensions .ts,.js --ignore test.js,benchmark.js,snapshot.md --copy-files --quiet
+
+# Traspile ESM versions of files
+env BABEL_ENV='esm' babel src --source-root src --out-dir "$dir/esm" --extensions .ts,.js --ignore test.js,benchmark.js,snapshot.md,package.json --copy-files --quiet
+
+# Copy basic files
+for pattern in CHANGELOG.md \
+ package.json \
+ docs \
+ LICENSE.md \
+ README.md \
+ typings.d.ts
+do
+ cp -r "$pattern" "$dir"
+done
+
+# Remove clean up code when this issues is resolved:
+# https://github.com/babel/babel/issues/6226
+
+# Clean up dev code
+find "$dir" -type f -name "test.js" -delete
+find "$dir" -type f -name "benchmark.js" -delete
+find "$dir" -type f -name "snapshot.md" -delete
+
+# Clean up package.json pointing to the modules
+find "$dir/esm" -type f -name "package.json" -delete
+
+./scripts/build/packages.js
+./scripts/build/removeOutdatedLocales.js $dir
diff --git a/date-fns/scripts/build/packages.js b/date-fns/scripts/build/packages.js
new file mode 100755
index 0000000..154754c
--- /dev/null
+++ b/date-fns/scripts/build/packages.js
@@ -0,0 +1,92 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script generates package.json files that points to correct ESM modules
+ * and TypeScript typings.
+ *
+ * It's a part of the build process.
+ */
+
+const { writeFile } = require('mz/fs')
+const path = require('path')
+const listFns = require('../_lib/listFns')
+const listFPFns = require('../_lib/listFPFns')
+const listLocales = require('../_lib/listLocales')
+const rootPath =
+ process.env.PACKAGE_OUTPUT_PATH || path.resolve(process.cwd(), 'tmp/package')
+
+const extraModules = [
+ { fullPath: './src/fp/index.js' },
+ { fullPath: './src/locale/index.js' },
+]
+
+writePackages()
+
+async function writePackages() {
+ const initialPackages = await getInitialPackages()
+ const modules = await listAll()
+ await Promise.all(
+ modules.map(async (module) =>
+ writePackage(module.fullPath, initialPackages[module.fullPath])
+ )
+ )
+ console.log('package.json files are generated')
+}
+
+function writePackage(fullPath, initialPackage) {
+ const dirPath = path.dirname(fullPath)
+ const typingsRelativePath = path.relative(dirPath, `./src/typings.d.ts`)
+ const packagePath = path.resolve(
+ rootPath,
+ `${dirPath.replace('./src/', './')}/package.json`
+ )
+
+ return writeFile(
+ packagePath,
+ JSON.stringify(
+ Object.assign({ sideEffects: false }, initialPackage || {}, {
+ typings: typingsRelativePath,
+ }),
+ null,
+ 2
+ )
+ )
+}
+
+async function getInitialPackages() {
+ const fns = await listFns()
+ return fns
+ .concat(listFPFns())
+ .concat(listLocales())
+ .concat(extraModules)
+ .reduce((acc, module) => {
+ acc[module.fullPath] = getModulePackage(module.fullPath)
+ return acc
+ }, {})
+}
+
+function getModulePackage(fullPath) {
+ const dirPath = path.dirname(fullPath)
+ const subPath = dirPath.match(/^\.\/src\/(.+)$/)[1]
+ const esmRelativePath = path.relative(
+ dirPath,
+ `./src/esm/${subPath}/index.js`
+ )
+ return { module: esmRelativePath }
+}
+
+async function listAll() {
+ const fns = await listFns()
+ return fns
+ .concat(listFPFns())
+ .concat(listLocales())
+ .concat(extraModules)
+ .reduce((acc, module) => {
+ const esmModule = Object.assign({}, module, {
+ fullPath: module.fullPath.replace('./src/', './src/esm/'),
+ })
+ return acc.concat([module, esmModule])
+ }, [])
+ .concat([])
+}
diff --git a/date-fns/scripts/build/removeOutdatedLocales.js b/date-fns/scripts/build/removeOutdatedLocales.js
new file mode 100755
index 0000000..5285f11
--- /dev/null
+++ b/date-fns/scripts/build/removeOutdatedLocales.js
@@ -0,0 +1,20 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script removes outdated locales from the package.
+ *
+ * It's a part of the build process.
+ */
+
+const path = require('path')
+const rimraf = require('rimraf')
+
+const packageDir = process.argv[2]
+if (!packageDir) throw new Error('Package dir should be passed as an argument')
+
+const locales = require('../../outdatedLocales.json')
+locales.forEach(locale => {
+ rimraf.sync(path.resolve(packageDir, `locale/${locale}`))
+ rimraf.sync(path.resolve(packageDir, `locale/esm/${locale}`))
+})
diff --git a/date-fns/scripts/build/typings.js b/date-fns/scripts/build/typings.js
new file mode 100755
index 0000000..ea0dde5
--- /dev/null
+++ b/date-fns/scripts/build/typings.js
@@ -0,0 +1,31 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script generates Flow and TypeScript typing files.
+ *
+ * It's a part of the build process.
+ */
+
+const path = require('path')
+const listLocales = require('../_lib/listLocales')
+const getConstants = require('../_lib/getConstants')
+const jsDocs = require(path.resolve(process.cwd(), 'tmp/docs.json'))
+
+const { generateTypeScriptTypings } = require('./_lib/typings/typeScript')
+const { generateFlowTypings } = require('./_lib/typings/flow')
+
+const locales = listLocales()
+
+const fns = Object.keys(jsDocs)
+ .map(category => jsDocs[category])
+ .reduce((previousValue, newValue) => [...previousValue, ...newValue], [])
+ .filter(doc => doc.kind === 'function')
+ .sort((a, b) => a.title.localeCompare(b.title, 'en-US'))
+
+const constants = getConstants()
+
+const aliases = jsDocs['Types']
+
+generateTypeScriptTypings(fns, aliases, locales, constants)
+generateFlowTypings(fns, aliases, locales, constants)
diff --git a/date-fns/scripts/release/buildChangelog.ts b/date-fns/scripts/release/buildChangelog.ts
new file mode 100644
index 0000000..b745951
--- /dev/null
+++ b/date-fns/scripts/release/buildChangelog.ts
@@ -0,0 +1,289 @@
+import { fromEntries, last, sample, uniq } from 'js-fns'
+import sg from 'simple-git'
+import { Octokit } from '@octokit/core'
+import format from '../../src/format'
+
+const git = sg()
+const gh = new Octokit({ auth: process.env.GITHUB_TOKEN })
+
+;(async () => {
+ const changelog = await buildChangelog()
+ console.log(renderChangelog(changelog))
+})()
+
+function renderChangelog(changelog: ChangelogVersion) {
+ let markdown = `## ${renderVersion(changelog.version)} - ${format(
+ Date.now(),
+ 'yyyy-MM-dd'
+ )}
+
+${sample(thanksOptions)!(renderAuthors(changelog.authors))}`
+
+ if (changelog.fixed.length)
+ markdown += `
+
+### Fixed
+
+${changelog.fixed.map(renderItem).join('\n\n')}`
+
+ if (changelog.changed.length)
+ markdown += `
+
+### Changed
+
+${changelog.changed.map(renderItem).join('\n\n')}`
+
+ if (changelog.added.length)
+ markdown += `
+
+### Added
+
+${changelog.added.map(renderItem).join('\n\n')}`
+ return markdown
+}
+
+async function buildChangelog(): Promise<ChangelogVersion> {
+ const lastTag = last((await git.tags()).all)
+ if (!lastTag) throw new Error("Can't find tags")
+
+ const commits = await git.log({ from: lastTag, to: 'HEAD' })
+
+ const authorsMap: { [hash: string]: string } = fromEntries(
+ await Promise.all(
+ commits.all.map((c) =>
+ gh
+ .request('GET /repos/{owner}/{repo}/commits/{ref}', {
+ owner: 'date-fns',
+ repo: 'date-fns',
+ ref: c.hash,
+ })
+ .then(({ data }) => [c.hash, data.author?.login] as [string, string])
+ )
+ )
+ )
+
+ const items: ChangelogItem[] = []
+ const authors: Author[] = []
+
+ commits.all.forEach((commit) => {
+ const author: Author = {
+ login: authorsMap[commit.hash],
+ email: commit.author_email,
+ name: commit.author_name,
+ }
+
+ const prCaptures = commit.message.match(/\(#(\d+)\)/)
+ const pr = prCaptures ? parseInt(prCaptures[1]) : undefined
+
+ let issues: number[] | undefined
+ commit.message.match(new RegExp(closesRegExp, 'g'))?.forEach((str) => {
+ const issueCaptures = str.match(closesRegExp)
+ if (issueCaptures)
+ issues = (issues || []).concat(
+ issueCaptures.slice(1).map((issue) => parseInt(issue))
+ )
+ })
+ if (!issues?.length) issues = undefined
+
+ const commitItems = extractItems(commit.body.trim(), { author, pr, issues })
+
+ if (!authors.find((a) => a.login === author.login)) authors.push(author)
+ items.push(...commitItems)
+ })
+
+ const changed = items.filter((i) => i.type === 'changed')
+ const fixed = items.filter((i) => i.type === 'fixed')
+ const added = items.filter((i) => i.type === 'added')
+
+ const lastVersion = parseVersion(lastTag)
+ let version: Version
+ if (items.find((i) => i.breaking)) {
+ version = { major: lastVersion.major + 1, minor: 0, patch: 0 }
+ } else if (changed.length || added.length) {
+ version = {
+ major: lastVersion.major,
+ minor: lastVersion.minor + 1,
+ patch: 0,
+ }
+ } else {
+ version = {
+ major: lastVersion.major,
+ minor: lastVersion.minor,
+ patch: lastVersion.patch + 1,
+ }
+ }
+
+ return { version, changed, fixed, added, authors }
+}
+
+function parseVersion(tag: string): Version {
+ const captures = tag.match(/v(\d+)\.(\d+).(\d+)/)
+ if (!captures) throw new Error(`Can't parse version from tag "${tag}"`)
+ return {
+ major: parseInt(captures[1]),
+ minor: parseInt(captures[2]),
+ patch: parseInt(captures[3]),
+ }
+}
+
+function extractItems(
+ message: string,
+ {
+ author,
+ pr,
+ issues,
+ }: { author: Author; pr: number | undefined; issues: number[] | undefined }
+): ChangelogItem[] {
+ const item = ({
+ type,
+ message,
+ }: {
+ type: ChangelogType
+ message: string
+ }) => {
+ const issuesCaptures = message.match(issuesRegExp)
+ const messageIssues = issuesCaptures?.reduce<number[]>(
+ (acc, capture) =>
+ acc.concat(
+ (capture.match(/#\d+/g) || []).map((str) => parseInt(str.slice(1)))
+ ),
+ []
+ )
+ const itemIssues = messageIssues?.length
+ ? uniq(messageIssues.concat(issues || []))
+ : issues
+
+ const breaking = /^breaking:\s?/i.test(message)
+
+ return {
+ type,
+ author,
+ message: message.replace(issuesRegExp, ''),
+ pr,
+ issues: itemIssues,
+ breaking,
+ }
+ }
+
+ switch (true) {
+ // Fixed
+ case fixedSentenceRegExp.test(message): {
+ const captures = message.match(fixedSentenceRegExp)!
+ return [item({ type: 'fixed', message: captures[2] })]
+ }
+ case fixedOneLinerRegExp.test(message): {
+ const captures = message.match(fixedOneLinerRegExp)!
+ return [item({ type: 'fixed', message: captures[1] })]
+ }
+
+ // Changed
+ case changedSentenceRegExp.test(message): {
+ const captures = message.match(changedSentenceRegExp)!
+ return [item({ type: 'changed', message: captures[2] })]
+ }
+ case changedOneLinerRegExp.test(message): {
+ const captures = message.match(changedOneLinerRegExp)!
+ return [item({ type: 'changed', message: captures[1] })]
+ }
+
+ // Added
+ case addedSentenceRegExp.test(message): {
+ const captures = message.match(addedSentenceRegExp)!
+ return [item({ type: 'added', message: captures[2] })]
+ }
+ case addedOneLinerRegExp.test(message): {
+ const captures = message.match(addedOneLinerRegExp)!
+ return [item({ type: 'added', message: captures[1] })]
+ }
+
+ default:
+ return []
+ }
+}
+
+function renderVersion({ major, minor, patch }: Version) {
+ return `v${major}.${minor}.${patch}`
+}
+
+function renderAuthors(authors: Author[]) {
+ if (authors.length > 1) {
+ return (
+ authors
+ .slice(0, authors.length - 1)
+ .map(renderAuthor)
+ .join(', ') +
+ ' and ' +
+ renderAuthor(last(authors)!)
+ )
+ } else {
+ return renderAuthor(authors[0])
+ }
+}
+
+function renderAuthor(author: Author) {
+ return `[${author.name}](http://github.com/${author.login})`
+}
+
+function renderItem(item: ChangelogItem) {
+ const message = item.pr
+ ? `[${item.message}](https://github.com/date-fns/date-fns/pull/${item.pr})`
+ : item.message
+ const issues = item.issues
+ ? ` (${item.issues
+ .map((i) => `[#${i}](https://github.com/date-fns/date-fns/issues/${i})`)
+ .join(', ')})`
+ : ''
+
+ return `- ${message}${issues}`
+}
+
+type ChangelogType = 'changed' | 'fixed' | 'added'
+
+interface Version {
+ major: number
+ minor: number
+ patch: number
+}
+
+interface ChangelogItem {
+ type: ChangelogType
+ author: Author
+ message: string
+ pr?: number
+ issues?: number[]
+ breaking: boolean
+}
+
+interface ChangelogVersion {
+ version: Version
+ changed: ChangelogItem[]
+ fixed: ChangelogItem[]
+ added: ChangelogItem[]
+ authors: Author[]
+}
+
+interface Author {
+ login: string
+ name: string
+ email: string
+}
+
+var closesRegExp = /(?:closes|fixes) #(\d+)/
+
+var issuesRegExp = /\s?\(((?:#\d+(?:,\s?)?)+)\)/g
+
+var thanksOptions = [
+ (authors: string) => `Kudos to ${authors} for working on the release.`,
+ (authors: string) => `Thanks to ${authors} for working on the release.`,
+ (authors: string) => `This release is brought to you by ${authors}.`,
+ (authors: string) => `On this release worked ${authors}.`,
+]
+
+var fixedSentenceRegExp = /^(breaking:\s?)?(fixed\s.+)/i
+var fixedOneLinerRegExp = /^fixed:\s(.+)/i
+
+var changedSentenceRegExp = /^(breaking:\s?)?(changed\s.+)/i
+var changedOneLinerRegExp = /^changed:\s(.+)/i
+
+var addedSentenceRegExp = /^(breaking:\s?)?(added\s.+)/i
+var addedOneLinerRegExp = /^added:\s(.+)/i
diff --git a/date-fns/scripts/release/release.sh b/date-fns/scripts/release/release.sh
new file mode 100755
index 0000000..b7e53a7
--- /dev/null
+++ b/date-fns/scripts/release/release.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+# The script builds the package and publishes it to npm.
+#
+# It's the entry point for the release process.
+
+set -e
+
+if [ -z "${APP_ENV+x}" ];
+then
+ echo 'APP_ENV is unset; please set to staging or production'
+ exit 1
+fi
+
+# A pre-release is a version with a label i.e. v2.0.0-alpha.1
+if [[ "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-.+$ ]]
+then
+ IS_PRE_RELEASE=true
+else
+ IS_PRE_RELEASE=false
+fi
+
+PACKAGE_PATH="$(pwd)/../../tmp/package"
+./scripts/release/writeVersion.js
+
+env PACKAGE_OUTPUT_PATH="$PACKAGE_PATH" ./scripts/build/package.sh
+
+# Right now, we do releases manually, but when we move to GitHub Actions we'll need this line:
+# echo "//registry.npmjs.org/:_authToken=$NPM_KEY" > ~/.npmrc
+cd "$PACKAGE_PATH" || exit 1
+if [ "$IS_PRE_RELEASE" = true ]
+then
+ npm publish --tag next
+else
+ npm publish
+fi
+cd - || exit
+
+./scripts/build/docs.js
+./scripts/release/updateFirebase.js
+# TODO: Reanimate it
+# if [ "$IS_PRE_RELEASE" = false ]
+# then
+# ./scripts/release/tweet.js
+# fi
diff --git a/date-fns/scripts/release/tweet.js b/date-fns/scripts/release/tweet.js
new file mode 100755
index 0000000..8947712
--- /dev/null
+++ b/date-fns/scripts/release/tweet.js
@@ -0,0 +1,36 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script posts a tweet as @date_fns about the release
+ * with a link to the change log entry.
+ *
+ * It's a part of the release process.
+ */
+
+const fetch = require('node-fetch')
+const { execSync } = require('child_process')
+const formatDate = require('../../src/format')
+
+const zapierHookURL = `https://zapier.com/hooks/catch/${process.env.ZAPIER_TWEET_RELEASE_HOOK_ID}/`
+const tag =
+ process.env.VERSION ||
+ execSync('git describe --abbrev=0 --tags').toString().trim()
+const formattedDate = formatDate(new Date(), 'YYYY-MM-DD')
+const changelogUrl = `https://date-fns.org/docs/Change-Log#${tag.replace(
+ /^v/,
+ ''
+)}-${formattedDate}`
+
+console.log('Posting release tweet...')
+
+fetch(zapierHookURL, {
+ method: 'POST',
+ body: JSON.stringify({
+ tweet: `date-fns ${tag} is published! See changelog: ${changelogUrl}.`,
+ }),
+ headers: { 'Content-Type': 'application/json' },
+}).catch((err) => {
+ console.error(err)
+ process.exit(1)
+})
diff --git a/date-fns/scripts/release/updateFirebase.js b/date-fns/scripts/release/updateFirebase.js
new file mode 100755
index 0000000..ee53561
--- /dev/null
+++ b/date-fns/scripts/release/updateFirebase.js
@@ -0,0 +1,116 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script generates the site data (docs, versions, etc.)
+ * and writes it to Firebase.
+ *
+ * It's a part of the release process.
+ */
+
+const path = require('path')
+const fs = require('fs')
+const childProcess = require('child_process')
+const listLocales = require('../_lib/listLocales')
+const countries = require('world-countries')
+const publishVersion = require('@date-fns/date-fns-scripts').publishVersion
+const { version } = require('../../package.json')
+
+const prereleaseRegExp = /(test|alpha|beta|rc)/
+
+const features = {
+ docs: true,
+ i18n: true,
+ benchmarks: true,
+ camelCase: true,
+ fp: true,
+ esm: true,
+ utc: false,
+}
+
+function generateLocale(tag, locale) {
+ const { code, fullPath } = locale
+ const source = fs.readFileSync(path.join(process.cwd(), fullPath)).toString()
+ const languageName = source.match(/\* @language (.*)/)[1]
+ const iso639dash2 = source.match(/\* @iso-639-2 (.*)/)[1]
+
+ if (iso639dash2) {
+ return {
+ code,
+ url: `https://github.com/date-fns/date-fns/tree/${tag}/src/locale/${code}`,
+ name: languageName,
+ countries: countries.reduce((acc, country) => {
+ if (Object.keys(country.languages).includes(iso639dash2)) {
+ return acc.concat(country.cca2)
+ } else {
+ return acc
+ }
+ }, []),
+ }
+ } else {
+ return null
+ }
+}
+
+function generateVersionData() {
+ const tag = `v${version}`
+
+ const commit = childProcess
+ .execSync('git rev-parse HEAD')
+ .toString()
+ .replace(/[\s\n]/g, '')
+
+ const date =
+ parseInt(
+ childProcess
+ .execSync('git show -s --format=%ct')
+ .toString()
+ .replace(/[\s\n]/g, ''),
+ 10
+ ) * 1000
+
+ const docsJSON = fs
+ .readFileSync(path.resolve(process.cwd(), 'tmp/docs.json'))
+ .toString()
+ const docs = JSON.parse(docsJSON)
+ const docsCategories = Object.keys(docs)
+ const docsPages = docsCategories.reduce(
+ (acc, category) => acc.concat(docs[category]),
+ []
+ )
+ const docsKeys = docsPages.map(
+ ({ urlId, category, title, description }, index) => ({
+ urlId,
+ category,
+ title,
+ description,
+ key: index,
+ })
+ )
+
+ const locales = listLocales().map(generateLocale.bind(null, tag))
+
+ return {
+ tag,
+ date,
+ prerelease: Boolean(prereleaseRegExp.exec(tag)),
+ commit,
+ docsPages,
+ docsKeys,
+ docsCategories,
+ locales,
+ features,
+ }
+}
+
+const data = generateVersionData()
+
+publishVersion(data)
+ .then(() => {
+ console.log('Done!')
+ process.exit(0)
+ })
+ .catch((err) => {
+ console.log(err)
+ process.exit(1)
+ })
diff --git a/date-fns/scripts/release/writeVersion.js b/date-fns/scripts/release/writeVersion.js
new file mode 100755
index 0000000..c796d18
--- /dev/null
+++ b/date-fns/scripts/release/writeVersion.js
@@ -0,0 +1,35 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script extracts the actual package version from $VERSION
+ * and writes it to package.json
+ *
+ * It's a part of the release process.
+ */
+
+const path = require('path')
+const fs = require('fs')
+const beautify = require('js-beautify')['js_beautify']
+
+// Extract version from VERSION
+let version
+try {
+ ;[, version] = process.env.VERSION.match(/v(.+)/)
+} catch (err) {
+ console.error(`Can not extract version from VERSION (${process.env.VERSION})`)
+ console.error(err)
+ process.exit(1)
+}
+
+console.log(`Version: ${version}`)
+
+console.log('Writing to package.json...')
+// Write package.json with the version equal to the version encoded in the tag name
+const packagePath = path.join(process.cwd(), 'package.json')
+const packageContent = JSON.parse(fs.readFileSync(packagePath).toString())
+Object.assign(packageContent, { version })
+const newPackageContentStr = beautify(JSON.stringify(packageContent), {
+ indent_size: 2,
+})
+fs.writeFileSync(packagePath, `${newPackageContentStr}\n`)
diff --git a/date-fns/scripts/test/ci.sh b/date-fns/scripts/test/ci.sh
new file mode 100755
index 0000000..6ec5bfc
--- /dev/null
+++ b/date-fns/scripts/test/ci.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+# The script unifies the test scripts.
+#
+# It's used as the main CI script.
+
+set -ex
+
+export PATH="$(yarn bin):$PATH"
+
+function prebuild {
+ env BUILD_TESTS=true webpack-cli --config ./config/webpack.js
+}
+
+if [ "$TEST_SUITE" == "main" ]
+then
+ yarn lint
+ yarn lint-types
+ yarn locale-snapshots test
+ ./scripts/test/smoke.sh
+
+ yarn test --single-run
+
+ ./scripts/test/dst.sh
+ ./scripts/test/formatISO.sh
+ ./scripts/test/formatRFC3339.sh
+
+ prebuild
+ ./scripts/test/tz.sh
+
+elif [ "$TEST_SUITE" == "tz" ]
+then
+ prebuild
+ ./scripts/test/tzExtended.sh
+
+elif [ "$TEST_SUITE" == "cross_browser" ] && [ "$SAUCE_USERNAME" != "" ]
+then
+ yarn test-cross-browser
+ env TEST_CROSS_BROWSER=true yarn test --single-run
+
+elif [ "$TEST_SUITE" == "node" ]
+then
+ ./scripts/test/node.sh
+
+else
+ printf "\n\033[0;31m" "UNKNOWN SUITE!" "\033[0m\n"
+ exit 1
+fi
+
+./scripts/test/countTests.sh
diff --git a/date-fns/scripts/test/countTests.sh b/date-fns/scripts/test/countTests.sh
new file mode 100755
index 0000000..3db4daa
--- /dev/null
+++ b/date-fns/scripts/test/countTests.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# The script prints the total number of the examples in the test process.
+#
+# It's a part of the test process
+#
+# TODO: Write stats to Firebase and display the stats at the site.
+
+count=$( cat tmp/tests_count.txt 2> /dev/null || echo 0 )
+
+printf "\n%bSUITE: %s%b\n" "\x1B[32m" "$TEST_SUITE" "\x1B[0m"
+printf "\n%bTOTAL TESTS COMPLETED: %s%b\n" "\x1B[32m" "$count" "\x1B[0m"
+
+rm -f tmp/tests_count.txt
diff --git a/date-fns/scripts/test/coverageReport.sh b/date-fns/scripts/test/coverageReport.sh
new file mode 100755
index 0000000..0e7e6a3
--- /dev/null
+++ b/date-fns/scripts/test/coverageReport.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# The script generates coverage report and uploads it to Coveralls.
+#
+# It's a part of the test process
+
+set -ex
+
+export PATH="$(yarn bin):$PATH"
+
+env COVERAGE_REPORT=true yarn test --single-run
+cat ./coverage/lcov.info | coveralls
diff --git a/date-fns/scripts/test/dst.sh b/date-fns/scripts/test/dst.sh
new file mode 100755
index 0000000..5e645b9
--- /dev/null
+++ b/date-fns/scripts/test/dst.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# The script runs the DST tests.
+#
+# It's a part of the test process.
+
+set -ex
+
+export PATH="$(yarn bin):$PATH"
+export NODE_ENV=test
+
+env TZ=America/Sao_Paulo babel-node --extensions .ts,.js ./test/dst/parseISO/basic.js
+env TZ=Australia/Sydney babel-node --extensions .ts,.js ./test/dst/parseISO/sydney.js
+env TZ=Pacific/Apia babel-node --extensions .ts,.js ./test/dst/parseISO/samoa.js
+env TZ=Asia/Damascus babel-node --extensions .ts,.js ./test/dst/eachDayOfInterval/basic.js
+env TZ=America/Santiago babel-node --extensions .ts,.js ./test/dst/addBusinessDays/basic.js
+env TZ=Australia/Melbourne ts-node ./test/dst/formatDistanceStrict/melbourne.ts
+env TZ=Africa/Cairo ts-node ./test/dst/formatDistanceStrict/cairo.ts \ No newline at end of file
diff --git a/date-fns/scripts/test/formatISO.sh b/date-fns/scripts/test/formatISO.sh
new file mode 100755
index 0000000..28fc09e
--- /dev/null
+++ b/date-fns/scripts/test/formatISO.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# The script runs formatISO in a non%60 timezone offset
+#
+# It's a part of the test process.
+
+set -ex
+
+export PATH="$(yarn bin):$PATH"
+export NODE_ENV=test
+
+env TZ=Asia/Kolkata babel-node --extensions .ts,.js ./test/formatISO/india.js
diff --git a/date-fns/scripts/test/formatRFC3339.sh b/date-fns/scripts/test/formatRFC3339.sh
new file mode 100755
index 0000000..df8b4cf
--- /dev/null
+++ b/date-fns/scripts/test/formatRFC3339.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# The script runs formatRFC3339 in a non%60 timezone offset
+#
+# It's a part of the test process.
+
+set -ex
+
+export PATH="$(yarn bin):$PATH"
+export NODE_ENV=test
+
+env TZ=Asia/Kolkata babel-node --extensions .ts,.js ./test/formatRFC3339/india.js
+env TZ=America/St_Johns babel-node --extensions .ts,.js ./test/formatRFC3339/newfoundland.js
+env TZ=Australia/Eucla babel-node --extensions .ts,.js ./test/formatRFC3339/australia.js
+env TZ=Pacific/Chatham babel-node --extensions .ts,.js ./test/formatRFC3339/newzealand.js
+env TZ=Europe/Warsaw babel-node --extensions .ts,.js ./test/formatRFC3339/poland.js
+
diff --git a/date-fns/scripts/test/node.sh b/date-fns/scripts/test/node.sh
new file mode 100755
index 0000000..182b72e
--- /dev/null
+++ b/date-fns/scripts/test/node.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# The script runs the test suite using Jest in different Node.js versions.
+#
+# It's a part of the test process.
+
+export PATH="$(yarn bin):$PATH"
+
+# Update and source nvm
+curl -o ~/.nvm/nvm.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/nvm.sh
+source ~/.nvm/nvm.sh
+
+for version in 8 9 10 11 12
+do
+ echo "Running tests using Node.js $version"
+ nvm install $version
+ npm rebuild
+ jest || exit 1
+done \ No newline at end of file
diff --git a/date-fns/scripts/test/smoke.sh b/date-fns/scripts/test/smoke.sh
new file mode 100755
index 0000000..b718edd
--- /dev/null
+++ b/date-fns/scripts/test/smoke.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# The script runs the smoke test against every supported builder configuration.
+#
+# It's a part of the test process.
+
+dir="$(pwd)/examples"
+
+ok_message="\n\033[0;32m✓ OK!\033[0m\n"
+error_message="\n\033[0;31m✗ Something went wrong!\033[0m\n"
+
+cd "$dir" || exit 1
+
+for example in `ls`
+do
+ printf "\n\033[0;32mTesting $example...\033[0m\n\n"
+ cd "$example" || exit 1
+ yarn
+ yarn build
+ yarn test || (printf "$error_message" && exit 1) || exit 1
+ cd - || exit 1
+ printf "$ok_message"
+done
diff --git a/date-fns/scripts/test/tz.sh b/date-fns/scripts/test/tz.sh
new file mode 100755
index 0000000..90d1bd3
--- /dev/null
+++ b/date-fns/scripts/test/tz.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# The script runs the test suite against every possible time zone offset.
+#
+# It's a part of the test process.
+
+printf "\n"
+
+for tz in UTC-12:00 UTC-11:00 UTC-10:00 UTC-09:30 UTC-09:00 \
+ UTC-08:00 UTC-07:00 UTC-06:00 UTC-05:00 UTC-04:30 UTC-04:00 \
+ UTC-03:30 UTC-03:00 UTC-02:00 UTC-01:00 UTC UTC+01:00 UTC+02:00 \
+ UTC+03:00 UTC+03:30 UTC+04:00 UTC+04:30 UTC+05:00 UTC+05:30 \
+ UTC+05:45 UTC+06:00 UTC+06:30 UTC+07:00 UTC+08:00 UTC+08:30 \
+ UTC+08:45 UTC+09:00 UTC+09:30 UTC+10:00 UTC+10:30 UTC+11:00 \
+ UTC+11:30 UTC+12:00 UTC+12:45 UTC+13:00 UTC+14:00
+do
+ printf "Run test in time zone $tz\n"
+ env TEST_TZ=true USE_STATIC_TESTS=true TZ=$tz yarn test --single-run \
+ &>tmp/last_test_output.txt || (cat tmp/last_test_output.txt && exit 1) || exit 1
+done
diff --git a/date-fns/scripts/test/tzExtended.sh b/date-fns/scripts/test/tzExtended.sh
new file mode 100755
index 0000000..4a20e63
--- /dev/null
+++ b/date-fns/scripts/test/tzExtended.sh
@@ -0,0 +1,368 @@
+#!/bin/bash
+
+# The script runs the test suite against every time zone
+# in the IANA database.
+#
+# It's a part of the test process.
+
+printf "\n"
+
+tz_array=(
+ "Africa/Abidjan"
+ "Africa/Accra"
+ "Africa/Algiers"
+ "Africa/Bissau"
+ "Africa/Cairo"
+ "Africa/Casablanca"
+ "Africa/Ceuta"
+ "Africa/El_Aaiun"
+ "Africa/Johannesburg"
+ "Africa/Khartoum"
+ "Africa/Lagos"
+ "Africa/Maputo"
+ "Africa/Monrovia"
+ "Africa/Nairobi"
+ "Africa/Ndjamena"
+ "Africa/Tripoli"
+ "Africa/Tunis"
+ "Africa/Windhoek"
+ "America/Adak"
+ "America/Anchorage"
+ "America/Araguaina"
+ "America/Argentina/Buenos_Aires"
+ "America/Argentina/Catamarca"
+ "America/Argentina/Cordoba"
+ "America/Argentina/Jujuy"
+ "America/Argentina/La_Rioja"
+ "America/Argentina/Mendoza"
+ "America/Argentina/Rio_Gallegos"
+ "America/Argentina/Salta"
+ "America/Argentina/San_Juan"
+ "America/Argentina/San_Luis"
+ "America/Argentina/Tucuman"
+ "America/Argentina/Ushuaia"
+ "America/Asuncion"
+ "America/Atikokan"
+ "America/Bahia"
+ "America/Bahia_Banderas"
+ "America/Barbados"
+ "America/Belem"
+ "America/Belize"
+ "America/Blanc-Sablon"
+ "America/Boa_Vista"
+ "America/Bogota"
+ "America/Boise"
+ "America/Cambridge_Bay"
+ "America/Campo_Grande"
+ "America/Cancun"
+ "America/Caracas"
+ "America/Cayenne"
+ "America/Cayman"
+ "America/Chicago"
+ "America/Chihuahua"
+ "America/Costa_Rica"
+ "America/Creston"
+ "America/Cuiaba"
+ "America/Curacao"
+ "America/Danmarkshavn"
+ "America/Dawson"
+ "America/Dawson_Creek"
+ "America/Denver"
+ "America/Detroit"
+ "America/Edmonton"
+ "America/Eirunepe"
+ "America/El_Salvador"
+ "America/Fortaleza"
+ "America/Glace_Bay"
+ "America/Godthab"
+ "America/Goose_Bay"
+ "America/Grand_Turk"
+ "America/Guatemala"
+ "America/Guayaquil"
+ "America/Guyana"
+ "America/Halifax"
+ "America/Havana"
+ "America/Hermosillo"
+ "America/Indiana/Indianapolis"
+ "America/Indiana/Knox"
+ "America/Indiana/Marengo"
+ "America/Indiana/Petersburg"
+ "America/Indiana/Tell_City"
+ "America/Indiana/Vevay"
+ "America/Indiana/Vincennes"
+ "America/Indiana/Winamac"
+ "America/Inuvik"
+ "America/Iqaluit"
+ "America/Jamaica"
+ "America/Juneau"
+ "America/Kentucky/Louisville"
+ "America/Kentucky/Monticello"
+ "America/La_Paz"
+ "America/Lima"
+ "America/Los_Angeles"
+ "America/Maceio"
+ "America/Managua"
+ "America/Manaus"
+ "America/Martinique"
+ "America/Matamoros"
+ "America/Mazatlan"
+ "America/Menominee"
+ "America/Merida"
+ "America/Metlakatla"
+ "America/Mexico_City"
+ "America/Miquelon"
+ "America/Moncton"
+ "America/Monterrey"
+ "America/Montevideo"
+ "America/Nassau"
+ "America/New_York"
+ "America/Nipigon"
+ "America/Nome"
+ "America/Noronha"
+ "America/North_Dakota/Beulah"
+ "America/North_Dakota/Center"
+ "America/North_Dakota/New_Salem"
+ "America/Ojinaga"
+ "America/Panama"
+ "America/Pangnirtung"
+ "America/Paramaribo"
+ "America/Phoenix"
+ "America/Port-au-Prince"
+ "America/Port_of_Spain"
+ "America/Porto_Velho"
+ "America/Puerto_Rico"
+ "America/Rainy_River"
+ "America/Rankin_Inlet"
+ "America/Recife"
+ "America/Regina"
+ "America/Resolute"
+ "America/Rio_Branco"
+ "America/Santa_Isabel"
+ "America/Santarem"
+ "America/Santiago"
+ "America/Santo_Domingo"
+ "America/Sao_Paulo"
+ "America/Scoresbysund"
+ "America/Sitka"
+ "America/St_Johns"
+ "America/Swift_Current"
+ "America/Tegucigalpa"
+ "America/Thule"
+ "America/Thunder_Bay"
+ "America/Tijuana"
+ "America/Toronto"
+ "America/Vancouver"
+ "America/Whitehorse"
+ "America/Winnipeg"
+ "America/Yakutat"
+ "America/Yellowknife"
+ "Antarctica/Casey"
+ "Antarctica/Davis"
+ "Antarctica/DumontDUrville"
+ "Antarctica/Macquarie"
+ "Antarctica/Mawson"
+ "Antarctica/Palmer"
+ "Antarctica/Rothera"
+ "Antarctica/Syowa"
+ "Antarctica/Troll"
+ "Antarctica/Vostok"
+ "Asia/Almaty"
+ "Asia/Amman"
+ "Asia/Anadyr"
+ "Asia/Aqtau"
+ "Asia/Aqtobe"
+ "Asia/Ashgabat"
+ "Asia/Baghdad"
+ "Asia/Baku"
+ "Asia/Bangkok"
+ "Asia/Beirut"
+ "Asia/Bishkek"
+ "Asia/Brunei"
+ "Asia/Chita"
+ "Asia/Choibalsan"
+ "Asia/Colombo"
+ "Asia/Damascus"
+ "Asia/Dhaka"
+ "Asia/Dili"
+ "Asia/Dubai"
+ "Asia/Dushanbe"
+ "Asia/Gaza"
+ "Asia/Hebron"
+ "Asia/Ho_Chi_Minh"
+ "Asia/Hong_Kong"
+ "Asia/Hovd"
+ "Asia/Irkutsk"
+ "Asia/Jakarta"
+ "Asia/Jayapura"
+ "Asia/Jerusalem"
+ "Asia/Kabul"
+ "Asia/Kamchatka"
+ "Asia/Karachi"
+ "Asia/Kathmandu"
+ "Asia/Khandyga"
+ "Asia/Kolkata"
+ "Asia/Krasnoyarsk"
+ "Asia/Kuala_Lumpur"
+ "Asia/Kuching"
+ "Asia/Macau"
+ "Asia/Magadan"
+ "Asia/Makassar"
+ "Asia/Manila"
+ "Asia/Nicosia"
+ "Asia/Novokuznetsk"
+ "Asia/Novosibirsk"
+ "Asia/Omsk"
+ "Asia/Oral"
+ "Asia/Pontianak"
+ "Asia/Pyongyang"
+ "Asia/Qatar"
+ "Asia/Qyzylorda"
+ "Asia/Rangoon"
+ "Asia/Riyadh"
+ "Asia/Sakhalin"
+ "Asia/Samarkand"
+ "Asia/Seoul"
+ "Asia/Shanghai"
+ "Asia/Singapore"
+ "Asia/Srednekolymsk"
+ "Asia/Taipei"
+ "Asia/Tashkent"
+ "Asia/Tbilisi"
+ "Asia/Tehran"
+ "Asia/Thimphu"
+ "Asia/Tokyo"
+ "Asia/Ulaanbaatar"
+ "Asia/Urumqi"
+ "Asia/Ust-Nera"
+ "Asia/Vladivostok"
+ "Asia/Yakutsk"
+ "Asia/Yekaterinburg"
+ "Asia/Yerevan"
+ "Atlantic/Azores"
+ "Atlantic/Bermuda"
+ "Atlantic/Canary"
+ "Atlantic/Cape_Verde"
+ "Atlantic/Faroe"
+ "Atlantic/Madeira"
+ "Atlantic/Reykjavik"
+ "Atlantic/South_Georgia"
+ "Atlantic/Stanley"
+ "Australia/Adelaide"
+ "Australia/Brisbane"
+ "Australia/Broken_Hill"
+ "Australia/Currie"
+ "Australia/Darwin"
+ "Australia/Eucla"
+ "Australia/Hobart"
+ "Australia/Lindeman"
+ "Australia/Lord_Howe"
+ "Australia/Melbourne"
+ "Australia/Perth"
+ "Australia/Sydney"
+ "Europe/Amsterdam"
+ "Europe/Andorra"
+ "Europe/Athens"
+ "Europe/Belgrade"
+ "Europe/Berlin"
+ "Europe/Brussels"
+ "Europe/Bucharest"
+ "Europe/Budapest"
+ "Europe/Chisinau"
+ "Europe/Copenhagen"
+ "Europe/Dublin"
+ "Europe/Gibraltar"
+ "Europe/Helsinki"
+ "Europe/Istanbul"
+ "Europe/Kaliningrad"
+ "Europe/Kiev"
+ "Europe/Lisbon"
+ "Europe/London"
+ "Europe/Luxembourg"
+ "Europe/Madrid"
+ "Europe/Malta"
+ "Europe/Minsk"
+ "Europe/Monaco"
+ "Europe/Moscow"
+ "Europe/Oslo"
+ "Europe/Paris"
+ "Europe/Prague"
+ "Europe/Riga"
+ "Europe/Rome"
+ "Europe/Samara"
+ "Europe/Simferopol"
+ "Europe/Sofia"
+ "Europe/Stockholm"
+ "Europe/Tallinn"
+ "Europe/Tirane"
+ "Europe/Uzhgorod"
+ "Europe/Vienna"
+ "Europe/Vilnius"
+ "Europe/Volgograd"
+ "Europe/Warsaw"
+ "Europe/Zaporozhye"
+ "Europe/Zurich"
+ "Indian/Chagos"
+ "Indian/Christmas"
+ "Indian/Cocos"
+ "Indian/Kerguelen"
+ "Indian/Mahe"
+ "Indian/Maldives"
+ "Indian/Mauritius"
+ "Indian/Reunion"
+ "Pacific/Apia"
+ "Pacific/Auckland"
+ "Pacific/Bougainville"
+ "Pacific/Chatham"
+ "Pacific/Chuuk"
+ "Pacific/Easter"
+ "Pacific/Efate"
+ "Pacific/Enderbury"
+ "Pacific/Fakaofo"
+ "Pacific/Fiji"
+ "Pacific/Funafuti"
+ "Pacific/Galapagos"
+ "Pacific/Gambier"
+ "Pacific/Guadalcanal"
+ "Pacific/Guam"
+ "Pacific/Honolulu"
+ "Pacific/Kiritimati"
+ "Pacific/Kosrae"
+ "Pacific/Kwajalein"
+ "Pacific/Majuro"
+ "Pacific/Marquesas"
+ "Pacific/Nauru"
+ "Pacific/Niue"
+ "Pacific/Norfolk"
+ "Pacific/Noumea"
+ "Pacific/Pago_Pago"
+ "Pacific/Palau"
+ "Pacific/Pitcairn"
+ "Pacific/Pohnpei"
+ "Pacific/Port_Moresby"
+ "Pacific/Rarotonga"
+ "Pacific/Tahiti"
+ "Pacific/Tarawa"
+ "Pacific/Tongatapu"
+ "Pacific/Wake"
+ "Pacific/Wallis"
+)
+
+# Split array by max $TZ_LENGTH elements and take array with index $TZ_INDEX
+if [ "$TZ_LENGTH" != "" ] && [ "$TZ_INDEX" != "" ]
+then
+ tz_array_length="${#tz_array[@]}"
+
+ # divide $tz_array_length by $TZ_LENGTH and round up
+ tz_limit="$((($tz_array_length + $TZ_LENGTH - 1) / $TZ_LENGTH))"
+
+ tz_offset="$(($TZ_INDEX * $tz_limit))"
+
+ tz_array=("${tz_array[@]:$tz_offset:$tz_limit}")
+fi
+
+for tz in "${tz_array[@]}"
+do
+ printf "Run test in time zone $tz\n"
+ env TEST_TZ=true USE_STATIC_TESTS=true TZ=$tz yarn test --single-run \
+ &>tmp/last_test_output.txt || (cat tmp/last_test_output.txt && exit 1) || exit 1
+done
diff --git a/date-fns/src/_lib/addLeadingZeros/index.js b/date-fns/src/_lib/addLeadingZeros/index.js
new file mode 100644
index 0000000..62f812b
--- /dev/null
+++ b/date-fns/src/_lib/addLeadingZeros/index.js
@@ -0,0 +1,8 @@
+export default function addLeadingZeros(number, targetLength) {
+ var sign = number < 0 ? '-' : ''
+ var output = Math.abs(number).toString()
+ while (output.length < targetLength) {
+ output = '0' + output
+ }
+ return sign + output
+}
diff --git a/date-fns/src/_lib/assign/index.js b/date-fns/src/_lib/assign/index.js
new file mode 100644
index 0000000..6fd8782
--- /dev/null
+++ b/date-fns/src/_lib/assign/index.js
@@ -0,0 +1,17 @@
+export default function assign(target, dirtyObject) {
+ if (target == null) {
+ throw new TypeError(
+ 'assign requires that input parameter not be null or undefined'
+ )
+ }
+
+ dirtyObject = dirtyObject || {}
+
+ for (var property in dirtyObject) {
+ if (dirtyObject.hasOwnProperty(property)) {
+ target[property] = dirtyObject[property]
+ }
+ }
+
+ return target
+}
diff --git a/date-fns/src/_lib/assign/test.js b/date-fns/src/_lib/assign/test.js
new file mode 100644
index 0000000..629358f
--- /dev/null
+++ b/date-fns/src/_lib/assign/test.js
@@ -0,0 +1,30 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import assign from '.'
+
+describe('assign', function() {
+ it('assigns properties of the second argument to the first argument', function() {
+ var object = {}
+ assign(object, { a: 1, b: 2, c: 3 })
+ assert.deepEqual(object, { a: 1, b: 2, c: 3 })
+ })
+
+ it('the object passed as 2nd argument remains unchanged when the result is mutated', function() {
+ var object = { a: 1, b: 2, c: 3 }
+ var result = assign({}, object)
+ result.c = 4
+ assert.deepEqual(object, { a: 1, b: 2, c: 3 })
+ })
+
+ it('returns the first argument when the second argument is `undefined`', function() {
+ var original = { a: 1, b: 2, c: 3 }
+ var result = assign(original, undefined)
+ assert(original === result)
+ })
+
+ it('throws TypeError exception if the first argument is `undefined', function() {
+ assert.throws(assign.bind(null, undefined, { a: 1, b: 2, c: 3 }), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/cloneObject/index.js b/date-fns/src/_lib/cloneObject/index.js
new file mode 100644
index 0000000..34dd17b
--- /dev/null
+++ b/date-fns/src/_lib/cloneObject/index.js
@@ -0,0 +1,5 @@
+import assign from '../assign/index'
+
+export default function cloneObject(dirtyObject) {
+ return assign({}, dirtyObject)
+}
diff --git a/date-fns/src/_lib/cloneObject/test.js b/date-fns/src/_lib/cloneObject/test.js
new file mode 100644
index 0000000..96302bb
--- /dev/null
+++ b/date-fns/src/_lib/cloneObject/test.js
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import cloneObject from '.'
+
+describe('cloneObject', function () {
+ it('makes a copy of an object', function () {
+ var result = cloneObject({a: 1, b: 2, c: 3})
+ assert.deepEqual(result, {a: 1, b: 2, c: 3})
+ })
+
+ it('the copy remains unchanged when the original is changed', function () {
+ var original = {a: 1, b: 2, c: 3}
+ var copy = cloneObject(original)
+ original.c = 4
+ assert.deepEqual(copy, {a: 1, b: 2, c: 3})
+ })
+
+ it('the original remains unchanged when the copy is changed', function () {
+ var original = {a: 1, b: 2, c: 3}
+ var copy = cloneObject(original)
+ copy.c = 4
+ assert.deepEqual(original, {a: 1, b: 2, c: 3})
+ })
+
+ it('returns an empty object when argument is `undefined`', function () {
+ var result = cloneObject(undefined)
+ assert.deepEqual(result, {})
+ })
+})
diff --git a/date-fns/src/_lib/format/formatters/index.js b/date-fns/src/_lib/format/formatters/index.js
new file mode 100644
index 0000000..4638060
--- /dev/null
+++ b/date-fns/src/_lib/format/formatters/index.js
@@ -0,0 +1,768 @@
+import lightFormatters from '../lightFormatters/index'
+import getUTCDayOfYear from '../../../_lib/getUTCDayOfYear/index'
+import getUTCISOWeek from '../../../_lib/getUTCISOWeek/index'
+import getUTCISOWeekYear from '../../../_lib/getUTCISOWeekYear/index'
+import getUTCWeek from '../../../_lib/getUTCWeek/index'
+import getUTCWeekYear from '../../../_lib/getUTCWeekYear/index'
+import addLeadingZeros from '../../addLeadingZeros/index'
+
+var dayPeriodEnum = {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'morning',
+ afternoon: 'afternoon',
+ evening: 'evening',
+ night: 'night'
+}
+
+/*
+ * | | Unit | | Unit |
+ * |-----|--------------------------------|-----|--------------------------------|
+ * | a | AM, PM | A* | Milliseconds in day |
+ * | b | AM, PM, noon, midnight | B | Flexible day period |
+ * | c | Stand-alone local day of week | C* | Localized hour w/ day period |
+ * | d | Day of month | D | Day of year |
+ * | e | Local day of week | E | Day of week |
+ * | f | | F* | Day of week in month |
+ * | g* | Modified Julian day | G | Era |
+ * | h | Hour [1-12] | H | Hour [0-23] |
+ * | i! | ISO day of week | I! | ISO week of year |
+ * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |
+ * | k | Hour [1-24] | K | Hour [0-11] |
+ * | l* | (deprecated) | L | Stand-alone month |
+ * | m | Minute | M | Month |
+ * | n | | N | |
+ * | o! | Ordinal number modifier | O | Timezone (GMT) |
+ * | p! | Long localized time | P! | Long localized date |
+ * | q | Stand-alone quarter | Q | Quarter |
+ * | r* | Related Gregorian year | R! | ISO week-numbering year |
+ * | s | Second | S | Fraction of second |
+ * | t! | Seconds timestamp | T! | Milliseconds timestamp |
+ * | u | Extended year | U* | Cyclic year |
+ * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |
+ * | w | Local week of year | W* | Week of month |
+ * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |
+ * | y | Year (abs) | Y | Local week-numbering year |
+ * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |
+ *
+ * Letters marked by * are not implemented but reserved by Unicode standard.
+ *
+ * Letters marked by ! are non-standard, but implemented by date-fns:
+ * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)
+ * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,
+ * i.e. 7 for Sunday, 1 for Monday, etc.
+ * - `I` is ISO week of year, as opposed to `w` which is local week of year.
+ * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.
+ * `R` is supposed to be used in conjunction with `I` and `i`
+ * for universal ISO week-numbering date, whereas
+ * `Y` is supposed to be used in conjunction with `w` and `e`
+ * for week-numbering date specific to the locale.
+ * - `P` is long localized date format
+ * - `p` is long localized time format
+ */
+
+var formatters = {
+ // Era
+ G: function(date, token, localize) {
+ var era = date.getUTCFullYear() > 0 ? 1 : 0
+ switch (token) {
+ // AD, BC
+ case 'G':
+ case 'GG':
+ case 'GGG':
+ return localize.era(era, { width: 'abbreviated' })
+ // A, B
+ case 'GGGGG':
+ return localize.era(era, { width: 'narrow' })
+ // Anno Domini, Before Christ
+ case 'GGGG':
+ default:
+ return localize.era(era, { width: 'wide' })
+ }
+ },
+
+ // Year
+ y: function(date, token, localize) {
+ // Ordinal number
+ if (token === 'yo') {
+ var signedYear = date.getUTCFullYear()
+ // Returns 1 for 1 BC (which is year 0 in JavaScript)
+ var year = signedYear > 0 ? signedYear : 1 - signedYear
+ return localize.ordinalNumber(year, { unit: 'year' })
+ }
+
+ return lightFormatters.y(date, token)
+ },
+
+ // Local week-numbering year
+ Y: function(date, token, localize, options) {
+ var signedWeekYear = getUTCWeekYear(date, options)
+ // Returns 1 for 1 BC (which is year 0 in JavaScript)
+ var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear
+
+ // Two digit year
+ if (token === 'YY') {
+ var twoDigitYear = weekYear % 100
+ return addLeadingZeros(twoDigitYear, 2)
+ }
+
+ // Ordinal number
+ if (token === 'Yo') {
+ return localize.ordinalNumber(weekYear, { unit: 'year' })
+ }
+
+ // Padding
+ return addLeadingZeros(weekYear, token.length)
+ },
+
+ // ISO week-numbering year
+ R: function(date, token) {
+ var isoWeekYear = getUTCISOWeekYear(date)
+
+ // Padding
+ return addLeadingZeros(isoWeekYear, token.length)
+ },
+
+ // Extended year. This is a single number designating the year of this calendar system.
+ // The main difference between `y` and `u` localizers are B.C. years:
+ // | Year | `y` | `u` |
+ // |------|-----|-----|
+ // | AC 1 | 1 | 1 |
+ // | BC 1 | 1 | 0 |
+ // | BC 2 | 2 | -1 |
+ // Also `yy` always returns the last two digits of a year,
+ // while `uu` pads single digit years to 2 characters and returns other years unchanged.
+ u: function(date, token) {
+ var year = date.getUTCFullYear()
+ return addLeadingZeros(year, token.length)
+ },
+
+ // Quarter
+ Q: function(date, token, localize) {
+ var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)
+ switch (token) {
+ // 1, 2, 3, 4
+ case 'Q':
+ return String(quarter)
+ // 01, 02, 03, 04
+ case 'QQ':
+ return addLeadingZeros(quarter, 2)
+ // 1st, 2nd, 3rd, 4th
+ case 'Qo':
+ return localize.ordinalNumber(quarter, { unit: 'quarter' })
+ // Q1, Q2, Q3, Q4
+ case 'QQQ':
+ return localize.quarter(quarter, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ // 1, 2, 3, 4 (narrow quarter; could be not numerical)
+ case 'QQQQQ':
+ return localize.quarter(quarter, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ // 1st quarter, 2nd quarter, ...
+ case 'QQQQ':
+ default:
+ return localize.quarter(quarter, {
+ width: 'wide',
+ context: 'formatting'
+ })
+ }
+ },
+
+ // Stand-alone quarter
+ q: function(date, token, localize) {
+ var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)
+ switch (token) {
+ // 1, 2, 3, 4
+ case 'q':
+ return String(quarter)
+ // 01, 02, 03, 04
+ case 'qq':
+ return addLeadingZeros(quarter, 2)
+ // 1st, 2nd, 3rd, 4th
+ case 'qo':
+ return localize.ordinalNumber(quarter, { unit: 'quarter' })
+ // Q1, Q2, Q3, Q4
+ case 'qqq':
+ return localize.quarter(quarter, {
+ width: 'abbreviated',
+ context: 'standalone'
+ })
+ // 1, 2, 3, 4 (narrow quarter; could be not numerical)
+ case 'qqqqq':
+ return localize.quarter(quarter, {
+ width: 'narrow',
+ context: 'standalone'
+ })
+ // 1st quarter, 2nd quarter, ...
+ case 'qqqq':
+ default:
+ return localize.quarter(quarter, {
+ width: 'wide',
+ context: 'standalone'
+ })
+ }
+ },
+
+ // Month
+ M: function(date, token, localize) {
+ var month = date.getUTCMonth()
+ switch (token) {
+ case 'M':
+ case 'MM':
+ return lightFormatters.M(date, token)
+ // 1st, 2nd, ..., 12th
+ case 'Mo':
+ return localize.ordinalNumber(month + 1, { unit: 'month' })
+ // Jan, Feb, ..., Dec
+ case 'MMM':
+ return localize.month(month, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ // J, F, ..., D
+ case 'MMMMM':
+ return localize.month(month, { width: 'narrow', context: 'formatting' })
+ // January, February, ..., December
+ case 'MMMM':
+ default:
+ return localize.month(month, { width: 'wide', context: 'formatting' })
+ }
+ },
+
+ // Stand-alone month
+ L: function(date, token, localize) {
+ var month = date.getUTCMonth()
+ switch (token) {
+ // 1, 2, ..., 12
+ case 'L':
+ return String(month + 1)
+ // 01, 02, ..., 12
+ case 'LL':
+ return addLeadingZeros(month + 1, 2)
+ // 1st, 2nd, ..., 12th
+ case 'Lo':
+ return localize.ordinalNumber(month + 1, { unit: 'month' })
+ // Jan, Feb, ..., Dec
+ case 'LLL':
+ return localize.month(month, {
+ width: 'abbreviated',
+ context: 'standalone'
+ })
+ // J, F, ..., D
+ case 'LLLLL':
+ return localize.month(month, { width: 'narrow', context: 'standalone' })
+ // January, February, ..., December
+ case 'LLLL':
+ default:
+ return localize.month(month, { width: 'wide', context: 'standalone' })
+ }
+ },
+
+ // Local week of year
+ w: function(date, token, localize, options) {
+ var week = getUTCWeek(date, options)
+
+ if (token === 'wo') {
+ return localize.ordinalNumber(week, { unit: 'week' })
+ }
+
+ return addLeadingZeros(week, token.length)
+ },
+
+ // ISO week of year
+ I: function(date, token, localize) {
+ var isoWeek = getUTCISOWeek(date)
+
+ if (token === 'Io') {
+ return localize.ordinalNumber(isoWeek, { unit: 'week' })
+ }
+
+ return addLeadingZeros(isoWeek, token.length)
+ },
+
+ // Day of the month
+ d: function(date, token, localize) {
+ if (token === 'do') {
+ return localize.ordinalNumber(date.getUTCDate(), { unit: 'date' })
+ }
+
+ return lightFormatters.d(date, token)
+ },
+
+ // Day of year
+ D: function(date, token, localize) {
+ var dayOfYear = getUTCDayOfYear(date)
+
+ if (token === 'Do') {
+ return localize.ordinalNumber(dayOfYear, { unit: 'dayOfYear' })
+ }
+
+ return addLeadingZeros(dayOfYear, token.length)
+ },
+
+ // Day of week
+ E: function(date, token, localize) {
+ var dayOfWeek = date.getUTCDay()
+ switch (token) {
+ // Tue
+ case 'E':
+ case 'EE':
+ case 'EEE':
+ return localize.day(dayOfWeek, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ // T
+ case 'EEEEE':
+ return localize.day(dayOfWeek, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ // Tu
+ case 'EEEEEE':
+ return localize.day(dayOfWeek, {
+ width: 'short',
+ context: 'formatting'
+ })
+ // Tuesday
+ case 'EEEE':
+ default:
+ return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })
+ }
+ },
+
+ // Local day of week
+ e: function(date, token, localize, options) {
+ var dayOfWeek = date.getUTCDay()
+ var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7
+ switch (token) {
+ // Numerical value (Nth day of week with current locale or weekStartsOn)
+ case 'e':
+ return String(localDayOfWeek)
+ // Padded numerical value
+ case 'ee':
+ return addLeadingZeros(localDayOfWeek, 2)
+ // 1st, 2nd, ..., 7th
+ case 'eo':
+ return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })
+ case 'eee':
+ return localize.day(dayOfWeek, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ // T
+ case 'eeeee':
+ return localize.day(dayOfWeek, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ // Tu
+ case 'eeeeee':
+ return localize.day(dayOfWeek, {
+ width: 'short',
+ context: 'formatting'
+ })
+ // Tuesday
+ case 'eeee':
+ default:
+ return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })
+ }
+ },
+
+ // Stand-alone local day of week
+ c: function(date, token, localize, options) {
+ var dayOfWeek = date.getUTCDay()
+ var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7
+ switch (token) {
+ // Numerical value (same as in `e`)
+ case 'c':
+ return String(localDayOfWeek)
+ // Padded numerical value
+ case 'cc':
+ return addLeadingZeros(localDayOfWeek, token.length)
+ // 1st, 2nd, ..., 7th
+ case 'co':
+ return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })
+ case 'ccc':
+ return localize.day(dayOfWeek, {
+ width: 'abbreviated',
+ context: 'standalone'
+ })
+ // T
+ case 'ccccc':
+ return localize.day(dayOfWeek, {
+ width: 'narrow',
+ context: 'standalone'
+ })
+ // Tu
+ case 'cccccc':
+ return localize.day(dayOfWeek, {
+ width: 'short',
+ context: 'standalone'
+ })
+ // Tuesday
+ case 'cccc':
+ default:
+ return localize.day(dayOfWeek, { width: 'wide', context: 'standalone' })
+ }
+ },
+
+ // ISO day of week
+ i: function(date, token, localize) {
+ var dayOfWeek = date.getUTCDay()
+ var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek
+ switch (token) {
+ // 2
+ case 'i':
+ return String(isoDayOfWeek)
+ // 02
+ case 'ii':
+ return addLeadingZeros(isoDayOfWeek, token.length)
+ // 2nd
+ case 'io':
+ return localize.ordinalNumber(isoDayOfWeek, { unit: 'day' })
+ // Tue
+ case 'iii':
+ return localize.day(dayOfWeek, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ // T
+ case 'iiiii':
+ return localize.day(dayOfWeek, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ // Tu
+ case 'iiiiii':
+ return localize.day(dayOfWeek, {
+ width: 'short',
+ context: 'formatting'
+ })
+ // Tuesday
+ case 'iiii':
+ default:
+ return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })
+ }
+ },
+
+ // AM or PM
+ a: function(date, token, localize) {
+ var hours = date.getUTCHours()
+ var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'
+
+ switch (token) {
+ case 'a':
+ case 'aa':
+ return localize.dayPeriod(dayPeriodEnumValue, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ case 'aaa':
+ return localize
+ .dayPeriod(dayPeriodEnumValue, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ .toLowerCase()
+ case 'aaaaa':
+ return localize.dayPeriod(dayPeriodEnumValue, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ case 'aaaa':
+ default:
+ return localize.dayPeriod(dayPeriodEnumValue, {
+ width: 'wide',
+ context: 'formatting'
+ })
+ }
+ },
+
+ // AM, PM, midnight, noon
+ b: function(date, token, localize) {
+ var hours = date.getUTCHours()
+ var dayPeriodEnumValue
+ if (hours === 12) {
+ dayPeriodEnumValue = dayPeriodEnum.noon
+ } else if (hours === 0) {
+ dayPeriodEnumValue = dayPeriodEnum.midnight
+ } else {
+ dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'
+ }
+
+ switch (token) {
+ case 'b':
+ case 'bb':
+ return localize.dayPeriod(dayPeriodEnumValue, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ case 'bbb':
+ return localize
+ .dayPeriod(dayPeriodEnumValue, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ .toLowerCase()
+ case 'bbbbb':
+ return localize.dayPeriod(dayPeriodEnumValue, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ case 'bbbb':
+ default:
+ return localize.dayPeriod(dayPeriodEnumValue, {
+ width: 'wide',
+ context: 'formatting'
+ })
+ }
+ },
+
+ // in the morning, in the afternoon, in the evening, at night
+ B: function(date, token, localize) {
+ var hours = date.getUTCHours()
+ var dayPeriodEnumValue
+ if (hours >= 17) {
+ dayPeriodEnumValue = dayPeriodEnum.evening
+ } else if (hours >= 12) {
+ dayPeriodEnumValue = dayPeriodEnum.afternoon
+ } else if (hours >= 4) {
+ dayPeriodEnumValue = dayPeriodEnum.morning
+ } else {
+ dayPeriodEnumValue = dayPeriodEnum.night
+ }
+
+ switch (token) {
+ case 'B':
+ case 'BB':
+ case 'BBB':
+ return localize.dayPeriod(dayPeriodEnumValue, {
+ width: 'abbreviated',
+ context: 'formatting'
+ })
+ case 'BBBBB':
+ return localize.dayPeriod(dayPeriodEnumValue, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ case 'BBBB':
+ default:
+ return localize.dayPeriod(dayPeriodEnumValue, {
+ width: 'wide',
+ context: 'formatting'
+ })
+ }
+ },
+
+ // Hour [1-12]
+ h: function(date, token, localize) {
+ if (token === 'ho') {
+ var hours = date.getUTCHours() % 12
+ if (hours === 0) hours = 12
+ return localize.ordinalNumber(hours, { unit: 'hour' })
+ }
+
+ return lightFormatters.h(date, token)
+ },
+
+ // Hour [0-23]
+ H: function(date, token, localize) {
+ if (token === 'Ho') {
+ return localize.ordinalNumber(date.getUTCHours(), { unit: 'hour' })
+ }
+
+ return lightFormatters.H(date, token)
+ },
+
+ // Hour [0-11]
+ K: function(date, token, localize) {
+ var hours = date.getUTCHours() % 12
+
+ if (token === 'Ko') {
+ return localize.ordinalNumber(hours, { unit: 'hour' })
+ }
+
+ return addLeadingZeros(hours, token.length)
+ },
+
+ // Hour [1-24]
+ k: function(date, token, localize) {
+ var hours = date.getUTCHours()
+ if (hours === 0) hours = 24
+
+ if (token === 'ko') {
+ return localize.ordinalNumber(hours, { unit: 'hour' })
+ }
+
+ return addLeadingZeros(hours, token.length)
+ },
+
+ // Minute
+ m: function(date, token, localize) {
+ if (token === 'mo') {
+ return localize.ordinalNumber(date.getUTCMinutes(), { unit: 'minute' })
+ }
+
+ return lightFormatters.m(date, token)
+ },
+
+ // Second
+ s: function(date, token, localize) {
+ if (token === 'so') {
+ return localize.ordinalNumber(date.getUTCSeconds(), { unit: 'second' })
+ }
+
+ return lightFormatters.s(date, token)
+ },
+
+ // Fraction of second
+ S: function(date, token) {
+ return lightFormatters.S(date, token)
+ },
+
+ // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)
+ X: function(date, token, _localize, options) {
+ var originalDate = options._originalDate || date
+ var timezoneOffset = originalDate.getTimezoneOffset()
+
+ if (timezoneOffset === 0) {
+ return 'Z'
+ }
+
+ switch (token) {
+ // Hours and optional minutes
+ case 'X':
+ return formatTimezoneWithOptionalMinutes(timezoneOffset)
+
+ // Hours, minutes and optional seconds without `:` delimiter
+ // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
+ // so this token always has the same output as `XX`
+ case 'XXXX':
+ case 'XX': // Hours and minutes without `:` delimiter
+ return formatTimezone(timezoneOffset)
+
+ // Hours, minutes and optional seconds with `:` delimiter
+ // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
+ // so this token always has the same output as `XXX`
+ case 'XXXXX':
+ case 'XXX': // Hours and minutes with `:` delimiter
+ default:
+ return formatTimezone(timezoneOffset, ':')
+ }
+ },
+
+ // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
+ x: function(date, token, _localize, options) {
+ var originalDate = options._originalDate || date
+ var timezoneOffset = originalDate.getTimezoneOffset()
+
+ switch (token) {
+ // Hours and optional minutes
+ case 'x':
+ return formatTimezoneWithOptionalMinutes(timezoneOffset)
+
+ // Hours, minutes and optional seconds without `:` delimiter
+ // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
+ // so this token always has the same output as `xx`
+ case 'xxxx':
+ case 'xx': // Hours and minutes without `:` delimiter
+ return formatTimezone(timezoneOffset)
+
+ // Hours, minutes and optional seconds with `:` delimiter
+ // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
+ // so this token always has the same output as `xxx`
+ case 'xxxxx':
+ case 'xxx': // Hours and minutes with `:` delimiter
+ default:
+ return formatTimezone(timezoneOffset, ':')
+ }
+ },
+
+ // Timezone (GMT)
+ O: function(date, token, _localize, options) {
+ var originalDate = options._originalDate || date
+ var timezoneOffset = originalDate.getTimezoneOffset()
+
+ switch (token) {
+ // Short
+ case 'O':
+ case 'OO':
+ case 'OOO':
+ return 'GMT' + formatTimezoneShort(timezoneOffset, ':')
+ // Long
+ case 'OOOO':
+ default:
+ return 'GMT' + formatTimezone(timezoneOffset, ':')
+ }
+ },
+
+ // Timezone (specific non-location)
+ z: function(date, token, _localize, options) {
+ var originalDate = options._originalDate || date
+ var timezoneOffset = originalDate.getTimezoneOffset()
+
+ switch (token) {
+ // Short
+ case 'z':
+ case 'zz':
+ case 'zzz':
+ return 'GMT' + formatTimezoneShort(timezoneOffset, ':')
+ // Long
+ case 'zzzz':
+ default:
+ return 'GMT' + formatTimezone(timezoneOffset, ':')
+ }
+ },
+
+ // Seconds timestamp
+ t: function(date, token, _localize, options) {
+ var originalDate = options._originalDate || date
+ var timestamp = Math.floor(originalDate.getTime() / 1000)
+ return addLeadingZeros(timestamp, token.length)
+ },
+
+ // Milliseconds timestamp
+ T: function(date, token, _localize, options) {
+ var originalDate = options._originalDate || date
+ var timestamp = originalDate.getTime()
+ return addLeadingZeros(timestamp, token.length)
+ }
+}
+
+function formatTimezoneShort(offset, dirtyDelimiter) {
+ var sign = offset > 0 ? '-' : '+'
+ var absOffset = Math.abs(offset)
+ var hours = Math.floor(absOffset / 60)
+ var minutes = absOffset % 60
+ if (minutes === 0) {
+ return sign + String(hours)
+ }
+ var delimiter = dirtyDelimiter || ''
+ return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2)
+}
+
+function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {
+ if (offset % 60 === 0) {
+ var sign = offset > 0 ? '-' : '+'
+ return sign + addLeadingZeros(Math.abs(offset) / 60, 2)
+ }
+ return formatTimezone(offset, dirtyDelimiter)
+}
+
+function formatTimezone(offset, dirtyDelimiter) {
+ var delimiter = dirtyDelimiter || ''
+ var sign = offset > 0 ? '-' : '+'
+ var absOffset = Math.abs(offset)
+ var hours = addLeadingZeros(Math.floor(absOffset / 60), 2)
+ var minutes = addLeadingZeros(absOffset % 60, 2)
+ return sign + hours + delimiter + minutes
+}
+
+export default formatters
diff --git a/date-fns/src/_lib/format/lightFormatters/index.ts b/date-fns/src/_lib/format/lightFormatters/index.ts
new file mode 100644
index 0000000..9e7138e
--- /dev/null
+++ b/date-fns/src/_lib/format/lightFormatters/index.ts
@@ -0,0 +1,94 @@
+import addLeadingZeros from '../../addLeadingZeros/index'
+
+/*
+ * | | Unit | | Unit |
+ * |-----|--------------------------------|-----|--------------------------------|
+ * | a | AM, PM | A* | |
+ * | d | Day of month | D | |
+ * | h | Hour [1-12] | H | Hour [0-23] |
+ * | m | Minute | M | Month |
+ * | s | Second | S | Fraction of second |
+ * | y | Year (abs) | Y | |
+ *
+ * Letters marked by * are not implemented but reserved by Unicode standard.
+ */
+
+const formatters = {
+ // Year
+ y(date: Date, token: string): string {
+ // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens
+ // | Year | y | yy | yyy | yyyy | yyyyy |
+ // |----------|-------|----|-------|-------|-------|
+ // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |
+ // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |
+ // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |
+ // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |
+ // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |
+
+ const signedYear = date.getUTCFullYear()
+ // Returns 1 for 1 BC (which is year 0 in JavaScript)
+ const year = signedYear > 0 ? signedYear : 1 - signedYear
+ return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length)
+ },
+
+ // Month
+ M(date: Date, token: string): string {
+ const month = date.getUTCMonth()
+ return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2)
+ },
+
+ // Day of the month
+ d(date: Date, token: string): string {
+ return addLeadingZeros(date.getUTCDate(), token.length)
+ },
+
+ // AM or PM
+ a(date: Date, token: string): string {
+ const dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am'
+
+ switch (token) {
+ case 'a':
+ case 'aa':
+ return dayPeriodEnumValue.toUpperCase()
+ case 'aaa':
+ return dayPeriodEnumValue
+ case 'aaaaa':
+ return dayPeriodEnumValue[0]
+ case 'aaaa':
+ default:
+ return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.'
+ }
+ },
+
+ // Hour [1-12]
+ h(date: Date, token: string): string {
+ return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length)
+ },
+
+ // Hour [0-23]
+ H(date: Date, token: string): string {
+ return addLeadingZeros(date.getUTCHours(), token.length)
+ },
+
+ // Minute
+ m(date: Date, token: string): string {
+ return addLeadingZeros(date.getUTCMinutes(), token.length)
+ },
+
+ // Second
+ s(date: Date, token: string): string {
+ return addLeadingZeros(date.getUTCSeconds(), token.length)
+ },
+
+ // Fraction of second
+ S(date: Date, token: string): string {
+ const numberOfDigits = token.length
+ const milliseconds = date.getUTCMilliseconds()
+ const fractionalSeconds = Math.floor(
+ milliseconds * Math.pow(10, numberOfDigits - 3)
+ )
+ return addLeadingZeros(fractionalSeconds, token.length)
+ },
+}
+
+export default formatters
diff --git a/date-fns/src/_lib/format/longFormatters/index.js b/date-fns/src/_lib/format/longFormatters/index.js
new file mode 100644
index 0000000..ff84163
--- /dev/null
+++ b/date-fns/src/_lib/format/longFormatters/index.js
@@ -0,0 +1,66 @@
+function dateLongFormatter(pattern, formatLong) {
+ switch (pattern) {
+ case 'P':
+ return formatLong.date({ width: 'short' })
+ case 'PP':
+ return formatLong.date({ width: 'medium' })
+ case 'PPP':
+ return formatLong.date({ width: 'long' })
+ case 'PPPP':
+ default:
+ return formatLong.date({ width: 'full' })
+ }
+}
+
+function timeLongFormatter(pattern, formatLong) {
+ switch (pattern) {
+ case 'p':
+ return formatLong.time({ width: 'short' })
+ case 'pp':
+ return formatLong.time({ width: 'medium' })
+ case 'ppp':
+ return formatLong.time({ width: 'long' })
+ case 'pppp':
+ default:
+ return formatLong.time({ width: 'full' })
+ }
+}
+
+function dateTimeLongFormatter(pattern, formatLong) {
+ var matchResult = pattern.match(/(P+)(p+)?/)
+ var datePattern = matchResult[1]
+ var timePattern = matchResult[2]
+
+ if (!timePattern) {
+ return dateLongFormatter(pattern, formatLong)
+ }
+
+ var dateTimeFormat
+
+ switch (datePattern) {
+ case 'P':
+ dateTimeFormat = formatLong.dateTime({ width: 'short' })
+ break
+ case 'PP':
+ dateTimeFormat = formatLong.dateTime({ width: 'medium' })
+ break
+ case 'PPP':
+ dateTimeFormat = formatLong.dateTime({ width: 'long' })
+ break
+ case 'PPPP':
+ default:
+ dateTimeFormat = formatLong.dateTime({ width: 'full' })
+ break
+ }
+
+ return dateTimeFormat
+ .replace('{{date}}', dateLongFormatter(datePattern, formatLong))
+ .replace('{{time}}', timeLongFormatter(timePattern, formatLong))
+}
+
+var longFormatters = {
+ p: timeLongFormatter,
+ P: dateTimeLongFormatter
+}
+
+export default longFormatters
diff --git a/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js b/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js
new file mode 100644
index 0000000..0b637c4
--- /dev/null
+++ b/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js
@@ -0,0 +1,26 @@
+/**
+ * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.
+ * They usually appear for dates that denote time before the timezones were introduced
+ * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891
+ * and GMT+01:00:00 after that date)
+ *
+ * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,
+ * which would lead to incorrect calculations.
+ *
+ * This function returns the timezone offset in milliseconds that takes seconds in account.
+ */
+export default function getTimezoneOffsetInMilliseconds(date) {
+ const utcDate = new Date(
+ Date.UTC(
+ date.getFullYear(),
+ date.getMonth(),
+ date.getDate(),
+ date.getHours(),
+ date.getMinutes(),
+ date.getSeconds(),
+ date.getMilliseconds()
+ )
+ )
+ utcDate.setUTCFullYear(date.getFullYear())
+ return date.getTime() - utcDate.getTime()
+}
diff --git a/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/test.js b/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/test.js
new file mode 100644
index 0000000..821e16f
--- /dev/null
+++ b/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/test.js
@@ -0,0 +1,28 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getTimezoneOffsetInMilliseconds from '.'
+
+describe('getTimezoneOffsetInMilliseconds', function () {
+ it('works for a modern date', function () {
+ var date = new Date(2018, 0 /* Jan */, 1, 12, 34, 56, 789)
+ var result = date.getTime() - getTimezoneOffsetInMilliseconds(date)
+ var expectedResult = Date.UTC(2018, 0 /* Jan */, 1, 12, 34, 56, 789)
+ assert(result === expectedResult)
+ })
+
+ it('works for a date before standardized timezones', function () {
+ var date = new Date(1800, 0 /* Jan */, 1, 12, 34, 56, 789)
+ var result = date.getTime() - getTimezoneOffsetInMilliseconds(date)
+ var expectedResult = Date.UTC(1800, 0 /* Jan */, 1, 12, 34, 56, 789)
+ assert(result === expectedResult)
+ })
+
+ it('works for a date BC', function () {
+ var date = new Date(-500, 0 /* Jan */, 1, 12, 34, 56, 789)
+ var result = date.getTime() - getTimezoneOffsetInMilliseconds(date)
+ var expectedResult = Date.UTC(-500, 0 /* Jan */, 1, 12, 34, 56, 789)
+ assert(result === expectedResult)
+ })
+})
diff --git a/date-fns/src/_lib/getUTCDayOfYear/index.js b/date-fns/src/_lib/getUTCDayOfYear/index.js
new file mode 100644
index 0000000..37cdc0e
--- /dev/null
+++ b/date-fns/src/_lib/getUTCDayOfYear/index.js
@@ -0,0 +1,18 @@
+import toDate from '../../toDate/index'
+import requiredArgs from '../requiredArgs/index'
+
+var MILLISECONDS_IN_DAY = 86400000
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function getUTCDayOfYear(dirtyDate) {
+ requiredArgs(1, arguments)
+
+ var date = toDate(dirtyDate)
+ var timestamp = date.getTime()
+ date.setUTCMonth(0, 1)
+ date.setUTCHours(0, 0, 0, 0)
+ var startOfYearTimestamp = date.getTime()
+ var difference = timestamp - startOfYearTimestamp
+ return Math.floor(difference / MILLISECONDS_IN_DAY) + 1
+}
diff --git a/date-fns/src/_lib/getUTCDayOfYear/test.js b/date-fns/src/_lib/getUTCDayOfYear/test.js
new file mode 100644
index 0000000..b4f2963
--- /dev/null
+++ b/date-fns/src/_lib/getUTCDayOfYear/test.js
@@ -0,0 +1,36 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getUTCDayOfYear from '.'
+
+describe('getUTCDayOfYear', function() {
+ it('returns the day of the year of the given date', function() {
+ var result = getUTCDayOfYear(new Date(Date.UTC(2014, 6 /* Jul */, 2)))
+ assert(result === 183)
+ })
+
+ it('accepts a timestamp', function() {
+ var result = getUTCDayOfYear(
+ new Date(Date.UTC(2014, 0 /* Jan */, 2)).getTime()
+ )
+ assert(result === 2)
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setUTCFullYear(0, 11 /* Dec */, 31)
+ initialDate.setUTCHours(0, 0, 0, 0)
+ var result = getUTCDayOfYear(initialDate)
+ assert(result === 366)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ var result = getUTCDayOfYear(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getUTCDayOfYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/getUTCISOWeek/index.js b/date-fns/src/_lib/getUTCISOWeek/index.js
new file mode 100644
index 0000000..ab17ea2
--- /dev/null
+++ b/date-fns/src/_lib/getUTCISOWeek/index.js
@@ -0,0 +1,21 @@
+import toDate from '../../toDate/index'
+import startOfUTCISOWeek from '../startOfUTCISOWeek/index'
+import startOfUTCISOWeekYear from '../startOfUTCISOWeekYear/index'
+import requiredArgs from '../requiredArgs/index'
+
+var MILLISECONDS_IN_WEEK = 604800000
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function getUTCISOWeek(dirtyDate) {
+ requiredArgs(1, arguments)
+
+ var date = toDate(dirtyDate)
+ var diff =
+ startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime()
+
+ // Round the number of days to the nearest integer
+ // because the number of milliseconds in a week is not constant
+ // (e.g. it's different in the week of the daylight saving time clock shift)
+ return Math.round(diff / MILLISECONDS_IN_WEEK) + 1
+}
diff --git a/date-fns/src/_lib/getUTCISOWeek/test.js b/date-fns/src/_lib/getUTCISOWeek/test.js
new file mode 100644
index 0000000..29dc6b2
--- /dev/null
+++ b/date-fns/src/_lib/getUTCISOWeek/test.js
@@ -0,0 +1,58 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getUTCISOWeek from '.'
+
+describe('getUTCISOWeek', function() {
+ it('returns the ISO week of the given date', function() {
+ var result = getUTCISOWeek(new Date(Date.UTC(2005, 0 /* Jan */, 2)))
+ assert(result === 53)
+ })
+
+ it('accepts a timestamp', function() {
+ var result = getUTCISOWeek(
+ new Date(Date.UTC(2008, 11 /* Dec */, 29)).getTime()
+ )
+ assert(result === 1)
+ })
+
+ describe('edge cases', function() {
+ it('returns the ISO week at 1 January 2016', function() {
+ var result = getUTCISOWeek(new Date(Date.UTC(2016, 0 /* Jan */, 1)))
+ assert(result === 53)
+ })
+
+ it('returns the ISO week at 1 May 2016', function() {
+ var result = getUTCISOWeek(new Date(Date.UTC(2016, 4 /* May */, 1)))
+ assert(result === 17)
+ })
+
+ it('returns the ISO week at 2 May 2016', function() {
+ var result = getUTCISOWeek(new Date(Date.UTC(2016, 4 /* May */, 2)))
+ assert(result === 18)
+ })
+
+ it('returns the ISO week at 31 May 2016', function() {
+ var result = getUTCISOWeek(new Date(Date.UTC(2016, 4 /* May */, 31)))
+ assert(result === 22)
+ })
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setUTCFullYear(7, 11 /* Dec */, 30)
+ initialDate.setUTCHours(0, 0, 0, 0)
+ var result = getUTCISOWeek(initialDate)
+ assert(result === 52)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ var result = getUTCISOWeek(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getUTCISOWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/getUTCISOWeekYear/index.js b/date-fns/src/_lib/getUTCISOWeekYear/index.js
new file mode 100644
index 0000000..e098159
--- /dev/null
+++ b/date-fns/src/_lib/getUTCISOWeekYear/index.js
@@ -0,0 +1,30 @@
+import toDate from '../../toDate/index'
+import startOfUTCISOWeek from '../startOfUTCISOWeek/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function getUTCISOWeekYear(dirtyDate) {
+ requiredArgs(1, arguments)
+
+ var date = toDate(dirtyDate)
+ var year = date.getUTCFullYear()
+
+ var fourthOfJanuaryOfNextYear = new Date(0)
+ fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4)
+ fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0)
+ var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear)
+
+ var fourthOfJanuaryOfThisYear = new Date(0)
+ fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4)
+ fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0)
+ var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear)
+
+ if (date.getTime() >= startOfNextYear.getTime()) {
+ return year + 1
+ } else if (date.getTime() >= startOfThisYear.getTime()) {
+ return year
+ } else {
+ return year - 1
+ }
+}
diff --git a/date-fns/src/_lib/getUTCISOWeekYear/test.js b/date-fns/src/_lib/getUTCISOWeekYear/test.js
new file mode 100644
index 0000000..07aab97
--- /dev/null
+++ b/date-fns/src/_lib/getUTCISOWeekYear/test.js
@@ -0,0 +1,36 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getUTCISOWeekYear from '.'
+
+describe('getUTCISOWeekYear', function() {
+ it('returns the ISO week-numbering year of the given date', function() {
+ var result = getUTCISOWeekYear(new Date(Date.UTC(2007, 11 /* Dec */, 31)))
+ assert(result === 2008)
+ })
+
+ it('accepts a timestamp', function() {
+ var result = getUTCISOWeekYear(
+ new Date(Date.UTC(2005, 0 /* Jan */, 1)).getTime()
+ )
+ assert(result === 2004)
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setUTCFullYear(7, 11 /* Dec */, 31)
+ initialDate.setUTCHours(0, 0, 0, 0)
+ var result = getUTCISOWeekYear(initialDate)
+ assert(result === 8)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ var result = getUTCISOWeekYear(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getUTCISOWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/getUTCWeek/index.js b/date-fns/src/_lib/getUTCWeek/index.js
new file mode 100644
index 0000000..0b69ba2
--- /dev/null
+++ b/date-fns/src/_lib/getUTCWeek/index.js
@@ -0,0 +1,22 @@
+import toDate from '../../toDate/index'
+import startOfUTCWeek from '../startOfUTCWeek/index'
+import startOfUTCWeekYear from '../startOfUTCWeekYear/index'
+import requiredArgs from '../requiredArgs/index'
+
+var MILLISECONDS_IN_WEEK = 604800000
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function getUTCWeek(dirtyDate, options) {
+ requiredArgs(1, arguments)
+
+ var date = toDate(dirtyDate)
+ var diff =
+ startOfUTCWeek(date, options).getTime() -
+ startOfUTCWeekYear(date, options).getTime()
+
+ // Round the number of days to the nearest integer
+ // because the number of milliseconds in a week is not constant
+ // (e.g. it's different in the week of the daylight saving time clock shift)
+ return Math.round(diff / MILLISECONDS_IN_WEEK) + 1
+}
diff --git a/date-fns/src/_lib/getUTCWeek/test.js b/date-fns/src/_lib/getUTCWeek/test.js
new file mode 100644
index 0000000..0814368
--- /dev/null
+++ b/date-fns/src/_lib/getUTCWeek/test.js
@@ -0,0 +1,70 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getUTCWeek from '.'
+
+describe('getUTCWeek', function() {
+ it('returns the local week of year of the given date', function() {
+ var result = getUTCWeek(new Date(Date.UTC(2005, 0 /* Jan */, 2)))
+ assert(result === 2)
+ })
+
+ it('accepts a timestamp', function() {
+ var result = getUTCWeek(Date.UTC(2008, 11 /* Dec */, 29))
+ assert(result === 1)
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setUTCFullYear(7, 11 /* Dec */, 30)
+ initialDate.setUTCHours(0, 0, 0, 0)
+ var result = getUTCWeek(initialDate)
+ assert(result === 1)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ var result = getUTCWeek(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in locale', function() {
+ var date = new Date(Date.UTC(2005, 0 /* Jan */, 2))
+ var result = getUTCWeek(date, {
+ locale: {
+ options: { weekStartsOn: 1, firstWeekContainsDate: 4 }
+ }
+ })
+ assert(result === 53)
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ var date = new Date(Date.UTC(2005, 0 /* Jan */, 2))
+ var result = getUTCWeek(date, {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ locale: {
+ options: { weekStartsOn: 0, firstWeekContainsDate: 1 }
+ }
+ })
+ assert(result === 53)
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ var block = getUTCWeek.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ weekStartsOn: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function() {
+ var block = getUTCWeek.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ firstWeekContainsDate: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getUTCWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/getUTCWeekYear/index.js b/date-fns/src/_lib/getUTCWeekYear/index.js
new file mode 100644
index 0000000..1f561c7
--- /dev/null
+++ b/date-fns/src/_lib/getUTCWeekYear/index.js
@@ -0,0 +1,51 @@
+import toInteger from '../toInteger/index'
+import toDate from '../../toDate/index'
+import startOfUTCWeek from '../startOfUTCWeek/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function getUTCWeekYear(dirtyDate, dirtyOptions) {
+ requiredArgs(1, arguments)
+
+ var date = toDate(dirtyDate, dirtyOptions)
+ var year = date.getUTCFullYear()
+
+ var options = dirtyOptions || {}
+ var locale = options.locale
+ var localeFirstWeekContainsDate =
+ locale && locale.options && locale.options.firstWeekContainsDate
+ var defaultFirstWeekContainsDate =
+ localeFirstWeekContainsDate == null
+ ? 1
+ : toInteger(localeFirstWeekContainsDate)
+ var firstWeekContainsDate =
+ options.firstWeekContainsDate == null
+ ? defaultFirstWeekContainsDate
+ : toInteger(options.firstWeekContainsDate)
+
+ // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
+ if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
+ throw new RangeError(
+ 'firstWeekContainsDate must be between 1 and 7 inclusively'
+ )
+ }
+
+ var firstWeekOfNextYear = new Date(0)
+ firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate)
+ firstWeekOfNextYear.setUTCHours(0, 0, 0, 0)
+ var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions)
+
+ var firstWeekOfThisYear = new Date(0)
+ firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate)
+ firstWeekOfThisYear.setUTCHours(0, 0, 0, 0)
+ var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions)
+
+ if (date.getTime() >= startOfNextYear.getTime()) {
+ return year + 1
+ } else if (date.getTime() >= startOfThisYear.getTime()) {
+ return year
+ } else {
+ return year - 1
+ }
+}
diff --git a/date-fns/src/_lib/getUTCWeekYear/test.js b/date-fns/src/_lib/getUTCWeekYear/test.js
new file mode 100644
index 0000000..3b45fc4
--- /dev/null
+++ b/date-fns/src/_lib/getUTCWeekYear/test.js
@@ -0,0 +1,70 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getUTCWeekYear from '.'
+
+describe('getUTCWeekYear', function() {
+ it('returns the local week-numbering year of the given date', function() {
+ var result = getUTCWeekYear(new Date(Date.UTC(2004, 11 /* Dec */, 26)))
+ assert(result === 2005)
+ })
+
+ it('accepts a timestamp', function() {
+ var result = getUTCWeekYear(Date.UTC(2000, 11 /* Dec */, 30))
+ assert(result === 2000)
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setUTCFullYear(7, 11 /* Dec */, 31)
+ initialDate.setUTCHours(0, 0, 0, 0)
+ var result = getUTCWeekYear(initialDate)
+ assert(result === 8)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ var result = getUTCWeekYear(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in locale', function() {
+ var date = new Date(Date.UTC(2004, 11 /* Dec */, 26))
+ var result = getUTCWeekYear(date, {
+ locale: {
+ options: { weekStartsOn: 1, firstWeekContainsDate: 4 }
+ }
+ })
+ assert(result === 2004)
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ var date = new Date(Date.UTC(2004, 11 /* Dec */, 26))
+ var result = getUTCWeekYear(date, {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ locale: {
+ options: { weekStartsOn: 0, firstWeekContainsDate: 1 }
+ }
+ })
+ assert(result === 2004)
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ var block = getUTCWeekYear.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ weekStartsOn: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function() {
+ var block = getUTCWeekYear.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ firstWeekContainsDate: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getUTCWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/isSameUTCWeek/index.js b/date-fns/src/_lib/isSameUTCWeek/index.js
new file mode 100644
index 0000000..699806f
--- /dev/null
+++ b/date-fns/src/_lib/isSameUTCWeek/index.js
@@ -0,0 +1,13 @@
+import startOfUTCWeek from '../startOfUTCWeek/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function isSameUTCWeek(dirtyDateLeft, dirtyDateRight, options) {
+ requiredArgs(2, arguments)
+
+ var dateLeftStartOfWeek = startOfUTCWeek(dirtyDateLeft, options)
+ var dateRightStartOfWeek = startOfUTCWeek(dirtyDateRight, options)
+
+ return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime()
+}
diff --git a/date-fns/src/_lib/isSameUTCWeek/test.js b/date-fns/src/_lib/isSameUTCWeek/test.js
new file mode 100644
index 0000000..909d034
--- /dev/null
+++ b/date-fns/src/_lib/isSameUTCWeek/test.js
@@ -0,0 +1,111 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameUTCWeek from '.'
+
+describe('isSameUTCWeek', function() {
+ it('returns true if the given dates have the same week', function() {
+ var result = isSameUTCWeek(
+ new Date(Date.UTC(2014, 7 /* Aug */, 31)),
+ new Date(Date.UTC(2014, 8 /* Sep */, 4))
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different weeks', function() {
+ var result = isSameUTCWeek(
+ new Date(Date.UTC(2014, 7 /* Aug */, 30)),
+ new Date(Date.UTC(2014, 8 /* Sep */, 4))
+ )
+ assert(result === false)
+ })
+
+ it('allows to specify which day is the first day of the week', function() {
+ var result = isSameUTCWeek(
+ new Date(Date.UTC(2014, 7 /* Aug */, 31)),
+ new Date(Date.UTC(2014, 8 /* Sep */, 4)),
+ { weekStartsOn: 1 }
+ )
+ assert(result === false)
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function() {
+ var result = isSameUTCWeek(
+ new Date(Date.UTC(2014, 7 /* Aug */, 31)),
+ new Date(Date.UTC(2014, 8 /* Sep */, 4)),
+ {
+ locale: {
+ options: { weekStartsOn: 1 }
+ }
+ }
+ )
+ assert(result === false)
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ var result = isSameUTCWeek(
+ new Date(Date.UTC(2014, 7 /* Aug */, 31)),
+ new Date(Date.UTC(2014, 8 /* Sep */, 4)),
+ {
+ weekStartsOn: 1,
+ locale: {
+ options: { weekStartsOn: 0 }
+ }
+ }
+ )
+ assert(result === false)
+ })
+
+ it('implicitly converts options', function() {
+ var result = isSameUTCWeek(
+ new Date(Date.UTC(2014, 7 /* Aug */, 31)),
+ new Date(Date.UTC(2014, 8 /* Sep */, 4)),
+ { weekStartsOn: '1' }
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ var result = isSameUTCWeek(
+ Date.UTC(2014, 7 /* Aug */, 31),
+ Date.UTC(2014, 8 /* Sep */, 4)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ var result = isSameUTCWeek(
+ new Date(NaN),
+ new Date(Date.UTC(1989, 6 /* Jul */, 10))
+ )
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ var result = isSameUTCWeek(
+ new Date(Date.UTC(1987, 1 /* Feb */, 11)),
+ new Date(NaN)
+ )
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ var result = isSameUTCWeek(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ var block = isSameUTCWeek.bind(
+ null,
+ new Date(Date.UTC(2014, 7 /* Aug */, 31)),
+ new Date(Date.UTC(2014, 8 /* Sep */, 4)),
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isSameUTCWeek.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/protectedTokens/index.js b/date-fns/src/_lib/protectedTokens/index.js
new file mode 100644
index 0000000..c62313f
--- /dev/null
+++ b/date-fns/src/_lib/protectedTokens/index.js
@@ -0,0 +1,30 @@
+var protectedDayOfYearTokens = ['D', 'DD']
+var protectedWeekYearTokens = ['YY', 'YYYY']
+
+export function isProtectedDayOfYearToken(token) {
+ return protectedDayOfYearTokens.indexOf(token) !== -1
+}
+
+export function isProtectedWeekYearToken(token) {
+ return protectedWeekYearTokens.indexOf(token) !== -1
+}
+
+export function throwProtectedError(token, format, input) {
+ if (token === 'YYYY') {
+ throw new RangeError(
+ `Use \`yyyy\` instead of \`YYYY\` (in \`${format}\`) for formatting years to the input \`${input}\`; see: https://git.io/fxCyr`
+ )
+ } else if (token === 'YY') {
+ throw new RangeError(
+ `Use \`yy\` instead of \`YY\` (in \`${format}\`) for formatting years to the input \`${input}\`; see: https://git.io/fxCyr`
+ )
+ } else if (token === 'D') {
+ throw new RangeError(
+ `Use \`d\` instead of \`D\` (in \`${format}\`) for formatting days of the month to the input \`${input}\`; see: https://git.io/fxCyr`
+ )
+ } else if (token === 'DD') {
+ throw new RangeError(
+ `Use \`dd\` instead of \`DD\` (in \`${format}\`) for formatting days of the month to the input \`${input}\`; see: https://git.io/fxCyr`
+ )
+ }
+}
diff --git a/date-fns/src/_lib/requiredArgs/index.ts b/date-fns/src/_lib/requiredArgs/index.ts
new file mode 100644
index 0000000..bdbb950
--- /dev/null
+++ b/date-fns/src/_lib/requiredArgs/index.ts
@@ -0,0 +1,12 @@
+export default function requiredArgs(required: number, args: IArguments) {
+ if (args.length < required) {
+ throw new TypeError(
+ required +
+ ' argument' +
+ (required > 1 ? 's' : '') +
+ ' required, but only ' +
+ args.length +
+ ' present'
+ )
+ }
+}
diff --git a/date-fns/src/_lib/requiredArgs/test.js b/date-fns/src/_lib/requiredArgs/test.js
new file mode 100644
index 0000000..a6cbe4a
--- /dev/null
+++ b/date-fns/src/_lib/requiredArgs/test.js
@@ -0,0 +1,37 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import requiredArgs from '.'
+
+describe('requiredArgs', function () {
+ function wrapperFn(required) {
+ // $ExpectedMistake
+ return function () {
+ requiredArgs(required, arguments)
+ }
+ }
+ const twoArgsRequired = wrapperFn(2)
+
+ describe('with correct number of passed arguments', function () {
+ it('does not throw an error', function () {
+ assert.doesNotThrow(() => twoArgsRequired(1, 2))
+ })
+ })
+
+ describe('with wrong number of arguments', function () {
+ it('throws correct error message', function () {
+ assert.throws(
+ function () {
+ twoArgsRequired(1)
+ },
+ function (err) {
+ return (
+ err instanceof TypeError &&
+ err.message === '2 arguments required, but only 1 present'
+ )
+ }
+ )
+ })
+ })
+})
diff --git a/date-fns/src/_lib/setUTCDay/index.js b/date-fns/src/_lib/setUTCDay/index.js
new file mode 100644
index 0000000..6e4e472
--- /dev/null
+++ b/date-fns/src/_lib/setUTCDay/index.js
@@ -0,0 +1,38 @@
+import toInteger from '../toInteger/index'
+import toDate from '../../toDate/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {
+ requiredArgs(2, arguments)
+
+ var options = dirtyOptions || {}
+ var locale = options.locale
+ var localeWeekStartsOn =
+ locale && locale.options && locale.options.weekStartsOn
+ var defaultWeekStartsOn =
+ localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)
+ var weekStartsOn =
+ options.weekStartsOn == null
+ ? defaultWeekStartsOn
+ : toInteger(options.weekStartsOn)
+
+ // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')
+ }
+
+ var date = toDate(dirtyDate)
+ var day = toInteger(dirtyDay)
+
+ var currentDay = date.getUTCDay()
+
+ var remainder = day % 7
+ var dayIndex = (remainder + 7) % 7
+
+ var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay
+
+ date.setUTCDate(date.getUTCDate() + diff)
+ return date
+}
diff --git a/date-fns/src/_lib/setUTCDay/test.js b/date-fns/src/_lib/setUTCDay/test.js
new file mode 100644
index 0000000..a34074b
--- /dev/null
+++ b/date-fns/src/_lib/setUTCDay/test.js
@@ -0,0 +1,132 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setUTCDay from '.'
+
+describe('setUTCDay', function () {
+ it('sets the day of the week', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 0)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 31)))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 0, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 7)))
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 0, {
+ locale: {
+ options: { weekStartsOn: 1 },
+ },
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 7)))
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 0, {
+ weekStartsOn: 1,
+ locale: {
+ options: { weekStartsOn: 0 },
+ },
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 7)))
+ })
+
+ describe('the day index is more than 6', function () {
+ it('sets the day of the next week', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 8)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 8)))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 7, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 14)))
+ })
+
+ it('sets the day of another week in the future', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 14, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 21)))
+ })
+ })
+
+ describe('the day index is less than 0', function () {
+ it('sets the day of the last week', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), -6)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 25)))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), -7, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 31)))
+ })
+
+ it('set the day of another week in the past', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), -14, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 24)))
+ })
+ })
+
+ it('accepts a timestamp', function () {
+ var result = setUTCDay(
+ new Date(Date.UTC(2014, 8 /* Sep */, 1)).getTime(),
+ 3
+ )
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 3)))
+ })
+
+ it('converts a fractional number to an integer', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 0.9)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 31)))
+ })
+
+ it('implicitly converts number arguments', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), '0')
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 31)))
+ })
+
+ it('implicitly converts options', function () {
+ var result = setUTCDay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 0, {
+ weekStartsOn: '1',
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 7)))
+ })
+
+ it('does not mutate the original date', function () {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 1))
+ setUTCDay(date, 3)
+ assert.deepEqual(date, new Date(Date.UTC(2014, 8 /* Sep */, 1)))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ var result = setUTCDay(new Date(NaN), 0)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function () {
+ var result = setUTCDay(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ var block = setUTCDay.bind(null, new Date(2014, 8 /* Sep */, 1), 0, {
+ weekStartsOn: NaN,
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ assert.throws(setUTCDay.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/setUTCISODay/index.js b/date-fns/src/_lib/setUTCISODay/index.js
new file mode 100644
index 0000000..cbd2fbc
--- /dev/null
+++ b/date-fns/src/_lib/setUTCISODay/index.js
@@ -0,0 +1,27 @@
+import toInteger from '../toInteger/index'
+import toDate from '../../toDate/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function setUTCISODay(dirtyDate, dirtyDay) {
+ requiredArgs(2, arguments)
+
+ var day = toInteger(dirtyDay)
+
+ if (day % 7 === 0) {
+ day = day - 7
+ }
+
+ var weekStartsOn = 1
+ var date = toDate(dirtyDate)
+ var currentDay = date.getUTCDay()
+
+ var remainder = day % 7
+ var dayIndex = (remainder + 7) % 7
+
+ var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay
+
+ date.setUTCDate(date.getUTCDate() + diff)
+ return date
+}
diff --git a/date-fns/src/_lib/setUTCISODay/test.js b/date-fns/src/_lib/setUTCISODay/test.js
new file mode 100644
index 0000000..11b6019
--- /dev/null
+++ b/date-fns/src/_lib/setUTCISODay/test.js
@@ -0,0 +1,79 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setUTCISODay from '.'
+
+describe('setUTCISODay', function () {
+ it('sets the day of the ISO week', function () {
+ var result = setUTCISODay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 3)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 3)))
+ })
+
+ it('sets the day to Sunday of this ISO week if the index is 7', function () {
+ var result = setUTCISODay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 7)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 7)))
+ })
+
+ describe('the day index is more than 7', function () {
+ it('sets the day of the next ISO week', function () {
+ var result = setUTCISODay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 8)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 8)))
+ })
+
+ it('sets the day of another ISO week in the future', function () {
+ var result = setUTCISODay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 21)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 21)))
+ })
+ })
+
+ describe('the day index is less than 1', function () {
+ it('sets the day of the last ISO week', function () {
+ var result = setUTCISODay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 0)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 31)))
+ })
+
+ it('set the day of another ISO week in the past', function () {
+ var result = setUTCISODay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), -13)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 18)))
+ })
+ })
+
+ it('accepts a timestamp', function () {
+ var result = setUTCISODay(
+ new Date(Date.UTC(2014, 8 /* Sep */, 1)).getTime(),
+ 3
+ )
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 3)))
+ })
+
+ it('converts a fractional number to an integer', function () {
+ var result = setUTCISODay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), 3.33)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 3)))
+ })
+
+ it('implicitly converts number arguments', function () {
+ var result = setUTCISODay(new Date(Date.UTC(2014, 8 /* Sep */, 1)), '3')
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 3)))
+ })
+
+ it('does not mutate the original date', function () {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 1))
+ setUTCISODay(date, 3)
+ assert.deepEqual(date, new Date(Date.UTC(2014, 8 /* Sep */, 1)))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ var result = setUTCISODay(new Date(NaN), 3)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function () {
+ var result = setUTCISODay(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ assert.throws(setUTCISODay.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/setUTCISOWeek/index.js b/date-fns/src/_lib/setUTCISOWeek/index.js
new file mode 100644
index 0000000..99ce6da
--- /dev/null
+++ b/date-fns/src/_lib/setUTCISOWeek/index.js
@@ -0,0 +1,16 @@
+import toInteger from '../toInteger/index'
+import toDate from '../../toDate/index'
+import getUTCISOWeek from '../getUTCISOWeek/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {
+ requiredArgs(2, arguments)
+
+ var date = toDate(dirtyDate)
+ var isoWeek = toInteger(dirtyISOWeek)
+ var diff = getUTCISOWeek(date) - isoWeek
+ date.setUTCDate(date.getUTCDate() - diff * 7)
+ return date
+}
diff --git a/date-fns/src/_lib/setUTCISOWeek/test.js b/date-fns/src/_lib/setUTCISOWeek/test.js
new file mode 100644
index 0000000..07b7276
--- /dev/null
+++ b/date-fns/src/_lib/setUTCISOWeek/test.js
@@ -0,0 +1,61 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setUTCISOWeek from '.'
+
+describe('setUTCISOWeek', function() {
+ it('sets the ISO week', function() {
+ var result = setUTCISOWeek(new Date(Date.UTC(2004, 7 /* Aug */, 7)), 53)
+ assert.deepEqual(result, new Date(Date.UTC(2005, 0 /* Jan */, 1)))
+ })
+
+ it('accepts a timestamp', function() {
+ var result = setUTCISOWeek(
+ new Date(Date.UTC(2009, 11 /* Dec */, 2)).getTime(),
+ 1
+ )
+ assert.deepEqual(result, new Date(Date.UTC(2008, 11 /* Dec */, 31)))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ var result = setUTCISOWeek(new Date(Date.UTC(2004, 7 /* Aug */, 7)), 53.53)
+ assert.deepEqual(result, new Date(Date.UTC(2005, 0 /* Jan */, 1)))
+ })
+
+ it('implicitly converts number arguments', function() {
+ var result = setUTCISOWeek(new Date(Date.UTC(2004, 7 /* Aug */, 7)), '53')
+ assert.deepEqual(result, new Date(Date.UTC(2005, 0 /* Jan */, 1)))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(Date.UTC(2014, 6 /* Jul */, 2))
+ setUTCISOWeek(date, 52)
+ assert.deepEqual(date, new Date(Date.UTC(2014, 6 /* Jul */, 2)))
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setUTCFullYear(4, 0 /* Jan */, 4)
+ initialDate.setUTCHours(0, 0, 0, 0)
+ var expectedResult = new Date(0)
+ expectedResult.setUTCFullYear(4, 11 /* Dec */, 26)
+ expectedResult.setUTCHours(0, 0, 0, 0)
+ var result = setUTCISOWeek(initialDate, 52)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = setUTCISOWeek(new Date(NaN), 53)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ var result = setUTCISOWeek(new Date(2004, 7 /* Aug */, 7), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(setUTCISOWeek.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/setUTCWeek/index.js b/date-fns/src/_lib/setUTCWeek/index.js
new file mode 100644
index 0000000..606d817
--- /dev/null
+++ b/date-fns/src/_lib/setUTCWeek/index.js
@@ -0,0 +1,16 @@
+import toInteger from '../toInteger/index'
+import toDate from '../../toDate/index'
+import getUTCWeek from '../getUTCWeek/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function setUTCWeek(dirtyDate, dirtyWeek, options) {
+ requiredArgs(2, arguments)
+
+ var date = toDate(dirtyDate)
+ var week = toInteger(dirtyWeek)
+ var diff = getUTCWeek(date, options) - week
+ date.setUTCDate(date.getUTCDate() - diff * 7)
+ return date
+}
diff --git a/date-fns/src/_lib/setUTCWeek/test.js b/date-fns/src/_lib/setUTCWeek/test.js
new file mode 100644
index 0000000..58aea10
--- /dev/null
+++ b/date-fns/src/_lib/setUTCWeek/test.js
@@ -0,0 +1,95 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setUTCWeek from '.'
+
+describe('setUTCWeek', function() {
+ it('sets the local week', function() {
+ var result = setUTCWeek(new Date(Date.UTC(2005, 0 /* Jan */, 2)), 1)
+ assert.deepEqual(result, new Date(Date.UTC(2004, 11 /* Dec */, 26)))
+ })
+
+ it('accepts a timestamp', function() {
+ var result = setUTCWeek(Date.UTC(2009, 11 /* Dec */, 2), 1)
+ assert.deepEqual(result, new Date(Date.UTC(2008, 11 /* Dec */, 31)))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ var result = setUTCWeek(new Date(Date.UTC(2005, 0 /* Jan */, 2)), 1.1)
+ assert.deepEqual(result, new Date(Date.UTC(2004, 11 /* Dec */, 26)))
+ })
+
+ it('implicitly converts number arguments', function() {
+ var result = setUTCWeek(new Date(Date.UTC(2004, 7 /* Aug */, 7)), '53')
+ assert.deepEqual(result, new Date(Date.UTC(2005, 0 /* Jan */, 1)))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ setUTCWeek(date, 52)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 2))
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setUTCFullYear(4, 0 /* Jan */, 4)
+ initialDate.setUTCHours(0, 0, 0, 0)
+ var expectedResult = new Date(0)
+ expectedResult.setUTCFullYear(4, 11 /* Dec */, 19)
+ expectedResult.setUTCHours(0, 0, 0, 0)
+ var result = setUTCWeek(initialDate, 52)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = setUTCWeek(new Date(NaN), 53)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ var result = setUTCWeek(new Date(2004, 7 /* Aug */, 7), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in locale', function() {
+ var date = new Date(Date.UTC(2005, 0 /* Jan */, 2))
+ var result = setUTCWeek(date, 1, {
+ locale: {
+ options: { weekStartsOn: 1, firstWeekContainsDate: 4 }
+ }
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2004, 0 /* Jan */, 4)))
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ var date = new Date(Date.UTC(2005, 0 /* Jan */, 2))
+ var result = setUTCWeek(date, 1, {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ locale: {
+ options: { weekStartsOn: 0, firstWeekContainsDate: 1 }
+ }
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2004, 0 /* Jan */, 4)))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ var block = setUTCWeek.bind(null, new Date(2004, 7 /* Aug */, 7), 53, {
+ weekStartsOn: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function() {
+ var block = setUTCWeek.bind(null, new Date(2004, 7 /* Aug */, 7), 53, {
+ firstWeekContainsDate: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setUTCWeek.bind(null), TypeError)
+ assert.throws(setUTCWeek.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/startOfUTCISOWeek/index.js b/date-fns/src/_lib/startOfUTCISOWeek/index.js
new file mode 100644
index 0000000..4633c38
--- /dev/null
+++ b/date-fns/src/_lib/startOfUTCISOWeek/index.js
@@ -0,0 +1,18 @@
+import toDate from '../../toDate/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function startOfUTCISOWeek(dirtyDate) {
+ requiredArgs(1, arguments)
+
+ var weekStartsOn = 1
+
+ var date = toDate(dirtyDate)
+ var day = date.getUTCDay()
+ var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn
+
+ date.setUTCDate(date.getUTCDate() - diff)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/_lib/startOfUTCISOWeek/test.js b/date-fns/src/_lib/startOfUTCISOWeek/test.js
new file mode 100644
index 0000000..1c93535
--- /dev/null
+++ b/date-fns/src/_lib/startOfUTCISOWeek/test.js
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfUTCISOWeek from '.'
+
+describe('startOfUTCISOWeek', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of an ISO week', function() {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0))
+ var result = startOfUTCISOWeek(date)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 1)))
+ })
+
+ it('accepts a timestamp', function() {
+ var date = new Date(Date.UTC(2014, 1 /* Feb */, 11, 11, 55, 0)).getTime()
+ var result = startOfUTCISOWeek(date)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 1 /* Feb */, 10)))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0))
+ startOfUTCISOWeek(date)
+ assert.deepEqual(date, new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0)))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = startOfUTCISOWeek(new Date(NaN))
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfUTCISOWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/startOfUTCISOWeekYear/index.js b/date-fns/src/_lib/startOfUTCISOWeekYear/index.js
new file mode 100644
index 0000000..db3313c
--- /dev/null
+++ b/date-fns/src/_lib/startOfUTCISOWeekYear/index.js
@@ -0,0 +1,16 @@
+import getUTCISOWeekYear from '../getUTCISOWeekYear/index'
+import startOfUTCISOWeek from '../startOfUTCISOWeek/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function startOfUTCISOWeekYear(dirtyDate) {
+ requiredArgs(1, arguments)
+
+ var year = getUTCISOWeekYear(dirtyDate)
+ var fourthOfJanuary = new Date(0)
+ fourthOfJanuary.setUTCFullYear(year, 0, 4)
+ fourthOfJanuary.setUTCHours(0, 0, 0, 0)
+ var date = startOfUTCISOWeek(fourthOfJanuary)
+ return date
+}
diff --git a/date-fns/src/_lib/startOfUTCISOWeekYear/test.js b/date-fns/src/_lib/startOfUTCISOWeekYear/test.js
new file mode 100644
index 0000000..5d0485f
--- /dev/null
+++ b/date-fns/src/_lib/startOfUTCISOWeekYear/test.js
@@ -0,0 +1,58 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfUTCISOWeekYear from '.'
+
+describe('startOfUTCISOWeekYear', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of an ISO year', function() {
+ var result = startOfUTCISOWeekYear(
+ new Date(Date.UTC(2009, 0 /* Jan */, 1, 16, 0))
+ )
+ assert.deepEqual(
+ result,
+ new Date(Date.UTC(2008, 11 /* Dec */, 29, 0, 0, 0, 0))
+ )
+ })
+
+ it('accepts a timestamp', function() {
+ var result = startOfUTCISOWeekYear(
+ new Date(Date.UTC(2005, 0 /* Jan */, 1, 6, 0)).getTime()
+ )
+ assert.deepEqual(
+ result,
+ new Date(Date.UTC(2003, 11 /* Dec */, 29, 0, 0, 0, 0))
+ )
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(Date.UTC(2014, 6 /* Jul */, 2))
+ startOfUTCISOWeekYear(date)
+ assert.deepEqual(date, new Date(Date.UTC(2014, 6 /* Jul */, 2)))
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setUTCFullYear(9, 0 /* Jan */, 1)
+ initialDate.setUTCHours(0, 0, 0, 0)
+ var expectedResult = new Date(0)
+ expectedResult.setUTCFullYear(8, 11 /* Dec */, 29)
+ expectedResult.setUTCHours(0, 0, 0, 0)
+ var result = startOfUTCISOWeekYear(initialDate)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('correctly handles years in which 4 January is Sunday', function() {
+ var result = startOfUTCISOWeekYear(new Date(Date.UTC(2009, 6 /* Jul */, 2)))
+ assert.deepEqual(result, new Date(Date.UTC(2008, 11 /* Dec */, 29)))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = startOfUTCISOWeekYear(new Date(NaN))
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfUTCISOWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/startOfUTCWeek/index.js b/date-fns/src/_lib/startOfUTCWeek/index.js
new file mode 100644
index 0000000..fb5db75
--- /dev/null
+++ b/date-fns/src/_lib/startOfUTCWeek/index.js
@@ -0,0 +1,33 @@
+import toInteger from '../toInteger/index'
+import toDate from '../../toDate/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function startOfUTCWeek(dirtyDate, dirtyOptions) {
+ requiredArgs(1, arguments)
+
+ var options = dirtyOptions || {}
+ var locale = options.locale
+ var localeWeekStartsOn =
+ locale && locale.options && locale.options.weekStartsOn
+ var defaultWeekStartsOn =
+ localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)
+ var weekStartsOn =
+ options.weekStartsOn == null
+ ? defaultWeekStartsOn
+ : toInteger(options.weekStartsOn)
+
+ // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')
+ }
+
+ var date = toDate(dirtyDate)
+ var day = date.getUTCDay()
+ var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn
+
+ date.setUTCDate(date.getUTCDate() - diff)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/_lib/startOfUTCWeek/test.js b/date-fns/src/_lib/startOfUTCWeek/test.js
new file mode 100644
index 0000000..15680f0
--- /dev/null
+++ b/date-fns/src/_lib/startOfUTCWeek/test.js
@@ -0,0 +1,108 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfUTCWeek from '.'
+
+describe('startOfUTCWeek', function () {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of a week', function () {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0))
+ var result = startOfUTCWeek(date)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 31)))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0))
+ var result = startOfUTCWeek(date, { weekStartsOn: 1 })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 1)))
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function () {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0))
+ var result = startOfUTCWeek(date, {
+ locale: {
+ options: { weekStartsOn: 1 },
+ },
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 1)))
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function () {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0))
+ var result = startOfUTCWeek(date, {
+ weekStartsOn: 1,
+ locale: {
+ options: { weekStartsOn: 0 },
+ },
+ })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 1)))
+ })
+
+ it('implicitly converts options', function () {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0))
+ var result = startOfUTCWeek(date, { weekStartsOn: '1' })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 8 /* Sep */, 1)))
+ })
+
+ it('accepts a timestamp', function () {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0)).getTime()
+ var result = startOfUTCWeek(date)
+ assert.deepEqual(result, new Date(Date.UTC(2014, 7 /* Aug */, 31)))
+ })
+
+ it('does not mutate the original date', function () {
+ var date = new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0))
+ startOfUTCWeek(date)
+ assert.deepEqual(date, new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0)))
+ })
+
+ describe('edge cases', function () {
+ describe('when the given day is before the start of a week', function () {
+ it('it returns the start of a week', function () {
+ var date = new Date(Date.UTC(2014, 9 /* Oct */, 6))
+ var result = startOfUTCWeek(date, { weekStartsOn: 3 })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 9 /* Oct */, 1)))
+ })
+ })
+
+ describe('when the given day is the start of a week', function () {
+ it('it returns the start of a week', function () {
+ var date = new Date(Date.UTC(2014, 9 /* Oct */, 8))
+ var result = startOfUTCWeek(date, { weekStartsOn: 3 })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 9 /* Oct */, 8)))
+ })
+ })
+
+ describe('when the given day is after the start of a week', function () {
+ it('it returns the start of a week', function () {
+ var date = new Date(Date.UTC(2014, 9 /* Oct */, 10))
+ var result = startOfUTCWeek(date, { weekStartsOn: 3 })
+ assert.deepEqual(result, new Date(Date.UTC(2014, 9 /* Oct */, 8)))
+ })
+ })
+
+ it('handles the week at the start of a year', function () {
+ var date = new Date(Date.UTC(2014, 0 /* Jan */, 1))
+ var result = startOfUTCWeek(date)
+ assert.deepEqual(result, new Date(Date.UTC(2013, 11 /* Dec */, 29)))
+ })
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ var result = startOfUTCWeek(new Date(NaN))
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ var block = startOfUTCWeek.bind(
+ null,
+ new Date(Date.UTC(2014, 8 /* Sep */, 2, 11, 55, 0)),
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ assert.throws(startOfUTCWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/startOfUTCWeekYear/index.js b/date-fns/src/_lib/startOfUTCWeekYear/index.js
new file mode 100644
index 0000000..5b505db
--- /dev/null
+++ b/date-fns/src/_lib/startOfUTCWeekYear/index.js
@@ -0,0 +1,30 @@
+import toInteger from '../toInteger/index'
+import getUTCWeekYear from '../getUTCWeekYear/index'
+import startOfUTCWeek from '../startOfUTCWeek/index'
+import requiredArgs from '../requiredArgs/index'
+
+// This function will be a part of public API when UTC function will be implemented.
+// See issue: https://github.com/date-fns/date-fns/issues/376
+export default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {
+ requiredArgs(1, arguments)
+
+ var options = dirtyOptions || {}
+ var locale = options.locale
+ var localeFirstWeekContainsDate =
+ locale && locale.options && locale.options.firstWeekContainsDate
+ var defaultFirstWeekContainsDate =
+ localeFirstWeekContainsDate == null
+ ? 1
+ : toInteger(localeFirstWeekContainsDate)
+ var firstWeekContainsDate =
+ options.firstWeekContainsDate == null
+ ? defaultFirstWeekContainsDate
+ : toInteger(options.firstWeekContainsDate)
+
+ var year = getUTCWeekYear(dirtyDate, dirtyOptions)
+ var firstWeek = new Date(0)
+ firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate)
+ firstWeek.setUTCHours(0, 0, 0, 0)
+ var date = startOfUTCWeek(firstWeek, dirtyOptions)
+ return date
+}
diff --git a/date-fns/src/_lib/startOfUTCWeekYear/test.js b/date-fns/src/_lib/startOfUTCWeekYear/test.js
new file mode 100644
index 0000000..73bb518
--- /dev/null
+++ b/date-fns/src/_lib/startOfUTCWeekYear/test.js
@@ -0,0 +1,95 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfUTCWeekYear from '.'
+
+describe('startOfUTCWeekYear', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of a week year', function() {
+ var result = startOfUTCWeekYear(new Date(Date.UTC(2005, 6 /* Jul */, 2)))
+ assert.deepEqual(
+ result,
+ new Date(Date.UTC(2004, 11 /* Dec */, 26, 0, 0, 0, 0))
+ )
+ })
+
+ it('accepts a timestamp', function() {
+ var result = startOfUTCWeekYear(Date.UTC(2005, 0 /* Jan */, 1, 6, 0))
+ assert.deepEqual(
+ result,
+ new Date(Date.UTC(2004, 11 /* Dec */, 26, 0, 0, 0, 0))
+ )
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(Date.UTC(2014, 6 /* Jul */, 2))
+ startOfUTCWeekYear(date)
+ assert.deepEqual(date, new Date(Date.UTC(2014, 6 /* Jul */, 2)))
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setUTCFullYear(9, 0 /* Jan */, 1)
+ initialDate.setUTCHours(0, 0, 0, 0)
+ var expectedResult = new Date(0)
+ expectedResult.setUTCFullYear(8, 11 /* Dec */, 28)
+ expectedResult.setUTCHours(0, 0, 0, 0)
+ var result = startOfUTCWeekYear(initialDate)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = startOfUTCWeekYear(new Date(NaN))
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in locale', function() {
+ var date = new Date(Date.UTC(2005, 6 /* Jul */, 2))
+ var result = startOfUTCWeekYear(date, {
+ locale: {
+ options: { weekStartsOn: 1, firstWeekContainsDate: 4 }
+ }
+ })
+ assert.deepEqual(
+ result,
+ new Date(Date.UTC(2005, 0 /* Jan */, 3, 0, 0, 0, 0))
+ )
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ var date = new Date(2005, 6 /* Jul */, 2)
+ var result = startOfUTCWeekYear(date, {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ locale: {
+ options: { weekStartsOn: 0, firstWeekContainsDate: 1 }
+ }
+ })
+ assert.deepEqual(
+ result,
+ new Date(Date.UTC(2005, 0 /* Jan */, 3, 0, 0, 0, 0))
+ )
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ var block = startOfUTCWeekYear.bind(
+ null,
+ new Date(2007, 11 /* Dec */, 31),
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function() {
+ var block = startOfUTCWeekYear.bind(
+ null,
+ new Date(2007, 11 /* Dec */, 31),
+ { firstWeekContainsDate: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfUTCWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/_lib/test/index.ts b/date-fns/src/_lib/test/index.ts
new file mode 100644
index 0000000..ecd8f8c
--- /dev/null
+++ b/date-fns/src/_lib/test/index.ts
@@ -0,0 +1 @@
+export function assertType<T>(_: T) {}
diff --git a/date-fns/src/_lib/toInteger/index.ts b/date-fns/src/_lib/toInteger/index.ts
new file mode 100644
index 0000000..e9a9359
--- /dev/null
+++ b/date-fns/src/_lib/toInteger/index.ts
@@ -0,0 +1,13 @@
+export default function toInteger(dirtyNumber: unknown) {
+ if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {
+ return NaN
+ }
+
+ const number = Number(dirtyNumber)
+
+ if (isNaN(number)) {
+ return number
+ }
+
+ return number < 0 ? Math.ceil(number) : Math.floor(number)
+}
diff --git a/date-fns/src/_lib/toInteger/test.js b/date-fns/src/_lib/toInteger/test.js
new file mode 100644
index 0000000..6542890
--- /dev/null
+++ b/date-fns/src/_lib/toInteger/test.js
@@ -0,0 +1,64 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import toInteger from '.'
+
+describe('toInteger', function () {
+ it('truncates positive numbers', function () {
+ var result = toInteger(10.99)
+ assert(result === 10)
+ })
+
+ it('truncates negative numbers', function () {
+ var result = toInteger(-5.5)
+ assert(result === -5)
+ })
+
+ it('converts convertable strings', function () {
+ var result = toInteger('-10.75')
+ assert(result === -10)
+ })
+
+ it('returns NaN for non-convertable strings', function () {
+ var result = toInteger('Foobar')
+ assert(typeof result === 'number' && isNaN(result))
+ })
+
+ it('returns NaN for false', function () {
+ var result = toInteger(false)
+ assert(typeof result === 'number' && isNaN(result))
+ })
+
+ it('returns NaN for true', function () {
+ var result = toInteger(true)
+ assert(typeof result === 'number' && isNaN(result))
+ })
+
+ it('returns NaN for null', function () {
+ var result = toInteger(null)
+ assert(typeof result === 'number' && isNaN(result))
+ })
+
+ it('returns NaN for undefined', function () {
+ var result = toInteger(undefined)
+ assert(typeof result === 'number' && isNaN(result))
+ })
+
+ it('returns NaN for NaN', function () {
+ var result = toInteger(NaN)
+ assert(typeof result === 'number' && isNaN(result))
+ })
+
+ it('converts convertable objects', function () {
+ // eslint-disable-next-line no-new-wrappers
+ var result = toInteger(new Number(123))
+ assert(result === 123)
+ })
+
+ it('returns NaN for non-convertable objects', function () {
+ // eslint-disable-next-line no-new-wrappers
+ var result = toInteger({})
+ assert(typeof result === 'number' && isNaN(result))
+ })
+})
diff --git a/date-fns/src/add/benchmark.js b/date-fns/src/add/benchmark.js
new file mode 100644
index 0000000..20544ae
--- /dev/null
+++ b/date-fns/src/add/benchmark.js
@@ -0,0 +1,25 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import add from '.'
+import moment from 'moment'
+
+suite(
+ 'add',
+ function() {
+ benchmark('date-fns', function() {
+ return add(this.date, { hours: 5, minutes: 10 })
+ })
+
+ benchmark('Moment.js', function() {
+ return this.moment.add({ hours: 5, minutes: 10 }, 'seconds')
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ this.moment = moment()
+ }
+ }
+)
diff --git a/date-fns/src/add/index.d.ts b/date-fns/src/add/index.d.ts
new file mode 100644
index 0000000..f620aa0
--- /dev/null
+++ b/date-fns/src/add/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { add } from 'date-fns'
+export default add
diff --git a/date-fns/src/add/index.js.flow b/date-fns/src/add/index.js.flow
new file mode 100644
index 0000000..e79df7c
--- /dev/null
+++ b/date-fns/src/add/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, duration: Duration) => Date
diff --git a/date-fns/src/add/index.ts b/date-fns/src/add/index.ts
new file mode 100644
index 0000000..5a4f019
--- /dev/null
+++ b/date-fns/src/add/index.ts
@@ -0,0 +1,79 @@
+import addDays from '../addDays/index'
+import addMonths from '../addMonths/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import toInteger from '../_lib/toInteger/index'
+import { Duration } from '../types'
+
+/**
+ * @name add
+ * @category Common Helpers
+ * @summary Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.
+ *
+ * @description
+ * Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ *
+ * | Key | Description |
+ * |----------------|------------------------------------|
+ * | years | Amount of years to be added |
+ * | months | Amount of months to be added |
+ * | weeks | Amount of weeks to be added |
+ * | days | Amount of days to be added |
+ * | hours | Amount of hours to be added |
+ * | minutes | Amount of minutes to be added |
+ * | seconds | Amount of seconds to be added |
+ *
+ * All values default to 0
+ *
+ * @returns {Date} the new date with the seconds added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add the following duration to 1 September 2014, 10:19:50
+ * const result = add(new Date(2014, 8, 1, 10, 19, 50), {
+ * years: 2,
+ * months: 9,
+ * weeks: 1,
+ * days: 7,
+ * hours: 5,
+ * minutes: 9,
+ * seconds: 30,
+ * })
+ * //=> Thu Jun 15 2017 15:29:20
+ */
+export default function add(
+ dirtyDate: Date | number,
+ duration: Duration
+): Date {
+ requiredArgs(2, arguments)
+
+ if (!duration || typeof duration !== 'object') return new Date(NaN)
+
+ const years = 'years' in duration ? toInteger(duration.years) : 0
+ const months = 'months' in duration ? toInteger(duration.months) : 0
+ const weeks = 'weeks' in duration ? toInteger(duration.weeks) : 0
+ const days = 'days' in duration ? toInteger(duration.days) : 0
+ const hours = 'hours' in duration ? toInteger(duration.hours) : 0
+ const minutes = 'minutes' in duration ? toInteger(duration.minutes) : 0
+ const seconds = 'seconds' in duration ? toInteger(duration.seconds) : 0
+
+ // Add years and months
+ const date = toDate(dirtyDate)
+ const dateWithMonths =
+ months || years ? addMonths(date, months + years * 12) : date
+
+ // Add weeks and days
+ const dateWithDays =
+ days || weeks ? addDays(dateWithMonths, days + weeks * 7) : dateWithMonths
+
+ // Add days, hours, minutes and seconds
+ const minutesToAdd = minutes + hours * 60
+ const secondsToAdd = seconds + minutesToAdd * 60
+ const msToAdd = secondsToAdd * 1000
+ const finalDate = new Date(dateWithDays.getTime() + msToAdd)
+
+ return finalDate
+}
diff --git a/date-fns/src/add/test.ts b/date-fns/src/add/test.ts
new file mode 100644
index 0000000..8c8d7a9
--- /dev/null
+++ b/date-fns/src/add/test.ts
@@ -0,0 +1,99 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import add from '.'
+import { getDstTransitions } from '../../test/dst/tzOffsetTransitions'
+
+describe('add', function() {
+ it('adds the values from the given object', function() {
+ const result = add(new Date(2014, 8 /* Sep */, 1, 10, 19, 50), {
+ years: 2,
+ months: 9,
+ weeks: 1,
+ days: 7,
+ hours: 5,
+ minutes: 9,
+ seconds: 30
+ })
+ assert.deepStrictEqual(result, new Date(2017, 5 /* June */, 15, 15, 29, 20))
+ })
+
+ it('returns same date object when passed empty duration values', function() {
+ const result = add(new Date(2014, 8 /* Sep */, 1, 10).getTime(), {})
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 1, 10))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = add(new Date(2014, 8 /* Sep */, 1, 10).getTime(), {
+ hours: 4
+ })
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 1, 14))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = add(new Date(2014, 8 /* Sep */, 1, 10), { hours: 4.2 })
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 1, 14))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = add(new Date(2014, 8 /* Sep */, 1, 10), { hours: '4.2' })
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 1, 14))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1, 10)
+ add(date, { hours: 4 })
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 1, 10))
+ })
+
+ it('works well if the desired month has fewer days and the provided date is in the last day of a month', function() {
+ const date = new Date(2014, 11 /* Dec */, 31)
+ const result = add(date, { months: 9 })
+ assert.deepStrictEqual(result, new Date(2015, 8 /* Sep */, 30))
+ })
+
+ const dstTransitions = getDstTransitions(2017)
+ const dstOnly = dstTransitions.start && dstTransitions.end ? it : it.skip
+ const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || process.env.tz
+ const HOUR = 1000 * 60 * 60
+
+ dstOnly(
+ `works at DST-end boundary in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = dstTransitions.end
+ const result = add(date!, { hours: 1 })
+ assert.deepStrictEqual(result, new Date(date!.getTime() + HOUR))
+ }
+ )
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(-1, 10 /* Nov */, 30)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(0, 1 /* Feb */, 29)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = add(initialDate, { months: 3 })
+ assert.deepStrictEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = add(new Date(NaN), { hours: 5 })
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws RangeError exception if passed Number as duration', function() {
+ // @ts-expect-error
+ const result = add(new Date(2014, 8, 1), 'wut')
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(add.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(add.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/addBusinessDays/index.d.ts b/date-fns/src/addBusinessDays/index.d.ts
new file mode 100644
index 0000000..b1c084e
--- /dev/null
+++ b/date-fns/src/addBusinessDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addBusinessDays } from 'date-fns'
+export default addBusinessDays
diff --git a/date-fns/src/addBusinessDays/index.js.flow b/date-fns/src/addBusinessDays/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addBusinessDays/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addBusinessDays/index.ts b/date-fns/src/addBusinessDays/index.ts
new file mode 100644
index 0000000..0cfdf5c
--- /dev/null
+++ b/date-fns/src/addBusinessDays/index.ts
@@ -0,0 +1,67 @@
+import isWeekend from '../isWeekend/index'
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import isSunday from '../isSunday/index'
+import isSaturday from '../isSaturday/index'
+
+/**
+ * @name addBusinessDays
+ * @category Day Helpers
+ * @summary Add the specified number of business days (mon - fri) to the given date.
+ *
+ * @description
+ * Add the specified number of business days (mon - fri) to the given date, ignoring weekends.
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of business days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the business days added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 10 business days to 1 September 2014:
+ * const result = addBusinessDays(new Date(2014, 8, 1), 10)
+ * //=> Mon Sep 15 2014 00:00:00 (skipped weekend days)
+ */
+export default function addBusinessDays(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const startedOnWeekend = isWeekend(date)
+ const amount = toInteger(dirtyAmount)
+
+ if (isNaN(amount)) return new Date(NaN)
+
+ const hours = date.getHours()
+ const sign = amount < 0 ? -1 : 1
+ const fullWeeks = toInteger(amount / 5)
+
+ date.setDate(date.getDate() + fullWeeks * 7)
+
+ // Get remaining days not part of a full week
+ let restDays = Math.abs(amount % 5)
+
+ // Loops over remaining days
+ while (restDays > 0) {
+ date.setDate(date.getDate() + sign)
+ if (!isWeekend(date)) restDays -= 1
+ }
+
+ // If the date is a weekend day and we reduce a dividable of
+ // 5 from it, we land on a weekend date.
+ // To counter this, we add days accordingly to land on the next business day
+ if (startedOnWeekend && isWeekend(date) && amount !== 0) {
+ // If we're reducing days, we want to add days until we land on a weekday
+ // If we're adding days we want to reduce days until we land on a weekday
+ if (isSaturday(date)) date.setDate(date.getDate() + (sign < 0 ? 2 : -1))
+ if (isSunday(date)) date.setDate(date.getDate() + (sign < 0 ? 1 : -2))
+ }
+
+ // Restore hours to avoid DST lag
+ date.setHours(hours)
+
+ return date
+}
diff --git a/date-fns/src/addBusinessDays/test.ts b/date-fns/src/addBusinessDays/test.ts
new file mode 100644
index 0000000..e23bc11
--- /dev/null
+++ b/date-fns/src/addBusinessDays/test.ts
@@ -0,0 +1,95 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addBusinessDays from '.'
+
+describe('addBusinessDays', function() {
+ it('adds the given number of business days', function() {
+ const result = addBusinessDays(new Date(2014, 8 /* Sep */, 1), 10)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 15))
+ })
+
+ it('handles negative amount', function() {
+ const result = addBusinessDays(new Date(2014, 8 /* Sep */, 15), -10)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns the Monday when 1 day is added on the Friday', () => {
+ assert.deepStrictEqual(
+ addBusinessDays(new Date(2020, 0 /* Jan */, 10), 1), // Friday
+ new Date(2020, 0 /* Jan */, 13) // Monday
+ )
+ })
+
+ it('returns the Monday when 1 day is added on the Satuday', () => {
+ assert.deepStrictEqual(
+ addBusinessDays(new Date(2020, 0 /* Jan */, 11), 1), // Saturday
+ new Date(2020, 0 /* Jan */, 13) // Monday
+ )
+ })
+
+ it('returns the Monday when 1 day is added on the Sunday', () => {
+ assert.deepStrictEqual(
+ addBusinessDays(new Date(2020, 0 /* Jan */, 12), 1), // Sunday
+ new Date(2020, 0 /* Jan */, 13) // Monday
+ )
+ })
+
+ it('can handle a large number of business days', function() {
+ // @ts-ignore
+ if (typeof this.timeout === 'function') {
+ // @ts-ignore
+ this.timeout(500 /* 500 ms test timeout */)
+ }
+
+ const result = addBusinessDays(new Date(2014, 0 /* Jan */, 1), 3387885)
+ assert.deepStrictEqual(result, new Date(15000, 0 /* Jan */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addBusinessDays(new Date(2014, 8 /* Sep */, 1).getTime(), 10)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 15))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addBusinessDays(new Date(2014, 8 /* Sep */, 1), 10.5)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 15))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addBusinessDays(new Date(2014, 8 /* Sep */, 1), '10')
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 15))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ addBusinessDays(date, 11)
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addBusinessDays(new Date(NaN), 10)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addBusinessDays(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(addBusinessDays.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(addBusinessDays.bind(null, 1), TypeError)
+ })
+ it('starting from a weekend day should land on a weekday when reducing a divisible by 5', function() {
+ const substractResult = addBusinessDays(new Date(2019, 7, 18), -5)
+ assert.deepStrictEqual(substractResult, new Date(2019, 7, 12))
+
+ const addResult = addBusinessDays(new Date(2019, 7, 18), 5)
+ assert.deepStrictEqual(addResult, new Date(2019, 7, 23))
+ })
+})
diff --git a/date-fns/src/addDays/benchmark.js b/date-fns/src/addDays/benchmark.js
new file mode 100644
index 0000000..6501f56
--- /dev/null
+++ b/date-fns/src/addDays/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addDays from '.'
+import moment from 'moment'
+
+suite('addDays', function () {
+ benchmark('date-fns', function () {
+ return addDays(this.date, 7)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.add(7, 'days')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/addDays/index.d.ts b/date-fns/src/addDays/index.d.ts
new file mode 100644
index 0000000..fd7fb3d
--- /dev/null
+++ b/date-fns/src/addDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addDays } from 'date-fns'
+export default addDays
diff --git a/date-fns/src/addDays/index.js.flow b/date-fns/src/addDays/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addDays/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addDays/index.ts b/date-fns/src/addDays/index.ts
new file mode 100644
index 0000000..110ad51
--- /dev/null
+++ b/date-fns/src/addDays/index.ts
@@ -0,0 +1,44 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name addDays
+ * @category Day Helpers
+ * @summary Add the specified number of days to the given date.
+ *
+ * @description
+ * Add the specified number of days to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} - the new date with the days added
+ * @throws {TypeError} - 2 arguments required
+ *
+ * @example
+ * // Add 10 days to 1 September 2014:
+ * const result = addDays(new Date(2014, 8, 1), 10)
+ * //=> Thu Sep 11 2014 00:00:00
+ */
+export default function addDays(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const amount = toInteger(dirtyAmount)
+ if (isNaN(amount)) {
+ return new Date(NaN)
+ }
+ if (!amount) {
+ // If 0 days, no-op to avoid changing times in the hour before end of DST
+ return date
+ }
+ date.setDate(date.getDate() + amount)
+ return date
+}
diff --git a/date-fns/src/addDays/test.ts b/date-fns/src/addDays/test.ts
new file mode 100644
index 0000000..5795dcd
--- /dev/null
+++ b/date-fns/src/addDays/test.ts
@@ -0,0 +1,129 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addDays from '.'
+import { getDstTransitions } from '../../test/dst/tzOffsetTransitions'
+
+describe('addDays', function() {
+ it('adds the given number of days', function() {
+ const result = addDays(new Date(2014, 8 /* Sep */, 1), 10)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 11))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addDays(new Date(2014, 8 /* Sep */, 1).getTime(), 10)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 11))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addDays(new Date(2014, 8 /* Sep */, 1), 10.5)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 11))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addDays(new Date(2014, 8 /* Sep */, 1), '10')
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 11))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ addDays(date, 11)
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addDays(new Date(NaN), 10)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addDays(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ // @ts-expect-error
+ assert.throws(addDays.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(addDays.bind(null, 1), TypeError)
+ })
+
+ const dstTransitions = getDstTransitions(2017)
+ const dstOnly = dstTransitions.start && dstTransitions.end ? it : it.skip
+ const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || process.env.tz
+ const HOUR = 1000 * 60 * 60
+ const MINUTE = 1000 * 60
+ // It's usually 1 hour, but for some timezones, e.g. Australia/Lord_Howe, it is 30 minutes
+ const dstOffset = dstTransitions.start && dstTransitions.end ? ((dstTransitions.end.getTimezoneOffset() - dstTransitions.start.getTimezoneOffset()) * MINUTE) : NaN
+
+ dstOnly(
+ `works at DST-start boundary in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = dstTransitions.start
+ const result = addDays(date!, 1)
+ assert.deepStrictEqual(result, new Date(date!.getTime() + 24 * HOUR))
+ }
+ )
+
+ dstOnly(
+ `works at DST-start - 30 mins in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.start!.getTime() - 0.5 * HOUR)
+ const result = addDays(date, 1)
+ // started before the transition so will only be 23 hours later in local time
+ assert.deepStrictEqual(result, new Date(date.getTime() + 24 * HOUR - dstOffset))
+ }
+ )
+
+ dstOnly(
+ `works at DST-start - 60 mins in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.start!.getTime() - 1 * HOUR)
+ const result = addDays(date, 1)
+ // started before the transition so will only be 23 hours later in local time
+ assert.deepStrictEqual(result, new Date(date.getTime() + 24 * HOUR - dstOffset))
+ }
+ )
+
+ dstOnly(
+ `works at DST-end boundary in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = dstTransitions.end
+ const result = addDays(date!, 1)
+ assert.deepStrictEqual(result, new Date(date!.getTime() + 24 * HOUR))
+ }
+ )
+
+ dstOnly(
+ `works at DST-end - 30 mins in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.end!.getTime() - 0.5 * HOUR)
+ const result = addDays(date, 1)
+ // started before the transition so will be 25 hours later in local
+ // time because one hour repeats after DST ends.
+ assert.deepStrictEqual(result, new Date(date.getTime() + 24 * HOUR + dstOffset))
+ }
+ )
+
+ dstOnly(
+ `works at DST-end - 60 mins in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.end!.getTime() - 1 * HOUR)
+ const result = addDays(date, 1)
+ // started before the transition so will be 25 hours later in local
+ // time because one hour repeats after DST ends.
+ assert.deepStrictEqual(result, new Date(date.getTime() + 24 * HOUR + dstOffset))
+ }
+ )
+
+ dstOnly(
+ `doesn't mutate if zero increment is used: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.end!)
+ const result = addDays(date, 0)
+ assert.deepStrictEqual(result, date)
+ }
+ )
+})
diff --git a/date-fns/src/addHours/benchmark.js b/date-fns/src/addHours/benchmark.js
new file mode 100644
index 0000000..f706c9e
--- /dev/null
+++ b/date-fns/src/addHours/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addHours from '.'
+import moment from 'moment'
+
+suite('addHours', function () {
+ benchmark('date-fns', function () {
+ return addHours(this.date, 3)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.add(3, 'hours')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/addHours/index.d.ts b/date-fns/src/addHours/index.d.ts
new file mode 100644
index 0000000..b3b6066
--- /dev/null
+++ b/date-fns/src/addHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addHours } from 'date-fns'
+export default addHours
diff --git a/date-fns/src/addHours/index.js.flow b/date-fns/src/addHours/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addHours/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addHours/index.ts b/date-fns/src/addHours/index.ts
new file mode 100644
index 0000000..d7de0e3
--- /dev/null
+++ b/date-fns/src/addHours/index.ts
@@ -0,0 +1,37 @@
+import toInteger from '../_lib/toInteger/index'
+import addMilliseconds from '../addMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+const MILLISECONDS_IN_HOUR = 3600000
+
+/**
+ * @name addHours
+ * @category Hour Helpers
+ * @summary Add the specified number of hours to the given date.
+ *
+ * @description
+ * Add the specified number of hours to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the hours added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 2 hours to 10 July 2014 23:00:00:
+ * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)
+ * //=> Fri Jul 11 2014 01:00:00
+ */
+export default function addHours(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR)
+}
diff --git a/date-fns/src/addHours/test.ts b/date-fns/src/addHours/test.ts
new file mode 100644
index 0000000..c920a64
--- /dev/null
+++ b/date-fns/src/addHours/test.ts
@@ -0,0 +1,54 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addHours from '.'
+
+describe('addHours', function() {
+ it('adds the given numbers of hours', function() {
+ const result = addHours(new Date(2014, 6 /* Jul */, 10, 23, 0), 2)
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 11, 1, 0))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addHours(
+ new Date(2014, 6 /* Jul */, 10, 23, 0).getTime(),
+ 26
+ )
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 12, 1, 0))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addHours(new Date(2014, 6 /* Jul */, 10, 23, 0), 2.5)
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 11, 1, 0))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addHours(new Date(2014, 6 /* Jul */, 10, 23, 0), '2')
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 11, 1, 0))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 10, 23, 0)
+ addHours(date, 10)
+ assert.deepStrictEqual(date, new Date(2014, 6 /* Jul */, 10, 23, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addHours(new Date(NaN), 2)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addHours(new Date(2014, 6 /* Jul */, 10, 23, 0), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(addHours.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(addHours.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/addISOWeekYears/benchmark.js b/date-fns/src/addISOWeekYears/benchmark.js
new file mode 100644
index 0000000..c52596d
--- /dev/null
+++ b/date-fns/src/addISOWeekYears/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addISOWeekYears from '.'
+
+suite('addISOWeekYears', function () {
+ benchmark('date-fns', function () {
+ return addISOWeekYears(this.date, 7)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/addISOWeekYears/index.d.ts b/date-fns/src/addISOWeekYears/index.d.ts
new file mode 100644
index 0000000..e1e6e09
--- /dev/null
+++ b/date-fns/src/addISOWeekYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addISOWeekYears } from 'date-fns'
+export default addISOWeekYears
diff --git a/date-fns/src/addISOWeekYears/index.js.flow b/date-fns/src/addISOWeekYears/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addISOWeekYears/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addISOWeekYears/index.ts b/date-fns/src/addISOWeekYears/index.ts
new file mode 100644
index 0000000..297b613
--- /dev/null
+++ b/date-fns/src/addISOWeekYears/index.ts
@@ -0,0 +1,43 @@
+import toInteger from '../_lib/toInteger/index'
+import getISOWeekYear from '../getISOWeekYear/index'
+import setISOWeekYear from '../setISOWeekYear/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name addISOWeekYears
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Add the specified number of ISO week-numbering years to the given date.
+ *
+ * @description
+ * Add the specified number of ISO week-numbering years to the given date.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `addISOYears` to `addISOWeekYears`.
+ * "ISO week year" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ * This change makes the name consistent with
+ * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of ISO week-numbering years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the ISO week-numbering years added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 5 ISO week-numbering years to 2 July 2010:
+ * const result = addISOWeekYears(new Date(2010, 6, 2), 5)
+ * //=> Fri Jun 26 2015 00:00:00
+ */
+export default function addISOWeekYears(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return setISOWeekYear(dirtyDate, getISOWeekYear(dirtyDate) + amount)
+}
diff --git a/date-fns/src/addISOWeekYears/test.ts b/date-fns/src/addISOWeekYears/test.ts
new file mode 100644
index 0000000..a122d71
--- /dev/null
+++ b/date-fns/src/addISOWeekYears/test.ts
@@ -0,0 +1,64 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addISOWeekYears from '.'
+
+describe('addISOWeekYears', function() {
+ it('adds the given number of ISO week-numbering years', function() {
+ const result = addISOWeekYears(new Date(2010, 6 /* Jul */, 2), 5)
+ assert.deepStrictEqual(result, new Date(2015, 5 /* Jun */, 26))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addISOWeekYears(new Date(2014, 8 /* Sep */, 1).getTime(), 12)
+ assert.deepStrictEqual(result, new Date(2026, 7 /* Aug */, 31))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addISOWeekYears(new Date(2010, 6 /* Jul */, 2), 5.6)
+ assert.deepStrictEqual(result, new Date(2015, 5 /* Jun */, 26))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addISOWeekYears(new Date(2010, 6 /* Jul */, 2), '5')
+ assert.deepStrictEqual(result, new Date(2015, 5 /* Jun */, 26))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ addISOWeekYears(date, 12)
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(10, 6 /* Jul */, 2)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(15, 5 /* Jun */, 26)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = addISOWeekYears(initialDate, 5)
+ assert.deepStrictEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addISOWeekYears(new Date(NaN), 5)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addISOWeekYears(new Date(2010, 6 /* Jul */, 2), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(addISOWeekYears.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(addISOWeekYears.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/addMilliseconds/benchmark.js b/date-fns/src/addMilliseconds/benchmark.js
new file mode 100644
index 0000000..b7271d5
--- /dev/null
+++ b/date-fns/src/addMilliseconds/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addMilliseconds from '.'
+import moment from 'moment'
+
+suite('addMilliseconds', function () {
+ benchmark('date-fns', function () {
+ return addMilliseconds(this.date, 500)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.add(500, 'milliseconds')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/addMilliseconds/index.d.ts b/date-fns/src/addMilliseconds/index.d.ts
new file mode 100644
index 0000000..1afb956
--- /dev/null
+++ b/date-fns/src/addMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addMilliseconds } from 'date-fns'
+export default addMilliseconds
diff --git a/date-fns/src/addMilliseconds/index.js.flow b/date-fns/src/addMilliseconds/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addMilliseconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addMilliseconds/index.ts b/date-fns/src/addMilliseconds/index.ts
new file mode 100644
index 0000000..18aefe5
--- /dev/null
+++ b/date-fns/src/addMilliseconds/index.ts
@@ -0,0 +1,36 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name addMilliseconds
+ * @category Millisecond Helpers
+ * @summary Add the specified number of milliseconds to the given date.
+ *
+ * @description
+ * Add the specified number of milliseconds to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the milliseconds added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 750 milliseconds to 10 July 2014 12:45:30.000:
+ * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)
+ * //=> Thu Jul 10 2014 12:45:30.750
+ */
+export default function addMilliseconds(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const timestamp = toDate(dirtyDate).getTime()
+ const amount = toInteger(dirtyAmount)
+ return new Date(timestamp + amount)
+}
diff --git a/date-fns/src/addMilliseconds/test.ts b/date-fns/src/addMilliseconds/test.ts
new file mode 100644
index 0000000..997a5c6
--- /dev/null
+++ b/date-fns/src/addMilliseconds/test.ts
@@ -0,0 +1,80 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addMilliseconds from '.'
+
+describe('addMilliseconds', function() {
+ it('adds the given number of milliseconds', function() {
+ const result = addMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0),
+ 750
+ )
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 750)
+ )
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0).getTime(),
+ 500
+ )
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 500)
+ )
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0),
+ 750.75
+ )
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 750)
+ )
+ })
+
+ it('implicitly converts number arguments', function() {
+ const result = addMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 5),
+ //@ts-expect-error
+ '750'
+ )
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 755)
+ )
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0)
+ addMilliseconds(date, 250)
+ assert.deepStrictEqual(date, new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addMilliseconds(new Date(NaN), 750)
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0),
+ NaN
+ )
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ //@ts-expect-error
+ assert.throws(addMilliseconds.bind(null), TypeError)
+ //@ts-expect-error
+ assert.throws(addMilliseconds.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/addMinutes/benchmark.js b/date-fns/src/addMinutes/benchmark.js
new file mode 100644
index 0000000..281e06c
--- /dev/null
+++ b/date-fns/src/addMinutes/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addMinutes from '.'
+import moment from 'moment'
+
+suite('addMinutes', function () {
+ benchmark('date-fns', function () {
+ return addMinutes(this.date, 30)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.add(30, 'minutes')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/addMinutes/index.d.ts b/date-fns/src/addMinutes/index.d.ts
new file mode 100644
index 0000000..fcf15e5
--- /dev/null
+++ b/date-fns/src/addMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addMinutes } from 'date-fns'
+export default addMinutes
diff --git a/date-fns/src/addMinutes/index.js.flow b/date-fns/src/addMinutes/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addMinutes/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addMinutes/index.ts b/date-fns/src/addMinutes/index.ts
new file mode 100644
index 0000000..41ecc48
--- /dev/null
+++ b/date-fns/src/addMinutes/index.ts
@@ -0,0 +1,37 @@
+import toInteger from '../_lib/toInteger/index'
+import addMilliseconds from '../addMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+const MILLISECONDS_IN_MINUTE = 60000
+
+/**
+ * @name addMinutes
+ * @category Minute Helpers
+ * @summary Add the specified number of minutes to the given date.
+ *
+ * @description
+ * Add the specified number of minutes to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the minutes added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 30 minutes to 10 July 2014 12:00:00:
+ * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)
+ * //=> Thu Jul 10 2014 12:30:00
+ */
+export default function addMinutes(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE)
+}
diff --git a/date-fns/src/addMinutes/test.ts b/date-fns/src/addMinutes/test.ts
new file mode 100644
index 0000000..f4b515c
--- /dev/null
+++ b/date-fns/src/addMinutes/test.ts
@@ -0,0 +1,57 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addMinutes from '.'
+
+describe('addMinutes', function() {
+ it('adds the given number of minutes', function() {
+ const result = addMinutes(new Date(2014, 6 /* Jul */, 10, 12, 0), 30)
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 30))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addMinutes(
+ new Date(2014, 6 /* Jul */, 10, 12, 0).getTime(),
+ 20
+ )
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 20))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addMinutes(new Date(2014, 6 /* Jul */, 10, 12, 0), 30.99)
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 30))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addMinutes(new Date(2014, 6 /* Jul */, 10, 12, 5), '30')
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 35))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 10, 12, 0)
+ addMinutes(date, 25)
+ assert.deepStrictEqual(date, new Date(2014, 6 /* Jul */, 10, 12, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addMinutes(new Date(NaN), 30)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addMinutes(new Date(2014, 6 /* Jul */, 10, 12, 0), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(addMinutes.bind(null), TypeError)
+
+ // @ts-expect-error
+ assert.throws(addMinutes.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/addMonths/benchmark.js b/date-fns/src/addMonths/benchmark.js
new file mode 100644
index 0000000..13f5203
--- /dev/null
+++ b/date-fns/src/addMonths/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addMonths from '.'
+import moment from 'moment'
+
+suite('addMonths', function () {
+ benchmark('date-fns', function () {
+ return addMonths(this.date, 4)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.add(4, 'months')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/addMonths/index.d.ts b/date-fns/src/addMonths/index.d.ts
new file mode 100644
index 0000000..1308e13
--- /dev/null
+++ b/date-fns/src/addMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addMonths } from 'date-fns'
+export default addMonths
diff --git a/date-fns/src/addMonths/index.js.flow b/date-fns/src/addMonths/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addMonths/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addMonths/index.ts b/date-fns/src/addMonths/index.ts
new file mode 100644
index 0000000..7b34369
--- /dev/null
+++ b/date-fns/src/addMonths/index.ts
@@ -0,0 +1,74 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name addMonths
+ * @category Month Helpers
+ * @summary Add the specified number of months to the given date.
+ *
+ * @description
+ * Add the specified number of months to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the months added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 5 months to 1 September 2014:
+ * const result = addMonths(new Date(2014, 8, 1), 5)
+ * //=> Sun Feb 01 2015 00:00:00
+ */
+export default function addMonths(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const amount = toInteger(dirtyAmount)
+ if (isNaN(amount)) {
+ return new Date(NaN)
+ }
+ if (!amount) {
+ // If 0 months, no-op to avoid changing times in the hour before end of DST
+ return date
+ }
+ const dayOfMonth = date.getDate()
+
+ // The JS Date object supports date math by accepting out-of-bounds values for
+ // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and
+ // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we
+ // want except that dates will wrap around the end of a month, meaning that
+ // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So
+ // we'll default to the end of the desired month by adding 1 to the desired
+ // month and using a date of 0 to back up one day to the end of the desired
+ // month.
+ const endOfDesiredMonth = new Date(date.getTime())
+ endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0)
+ const daysInMonth = endOfDesiredMonth.getDate()
+ if (dayOfMonth >= daysInMonth) {
+ // If we're already at the end of the month, then this is the correct date
+ // and we're done.
+ return endOfDesiredMonth
+ } else {
+ // Otherwise, we now know that setting the original day-of-month value won't
+ // cause an overflow, so set the desired day-of-month. Note that we can't
+ // just set the date of `endOfDesiredMonth` because that object may have had
+ // its time changed in the unusual case where where a DST transition was on
+ // the last day of the month and its local time was in the hour skipped or
+ // repeated next to a DST transition. So we use `date` instead which is
+ // guaranteed to still have the original time.
+ date.setFullYear(
+ endOfDesiredMonth.getFullYear(),
+ endOfDesiredMonth.getMonth(),
+ dayOfMonth
+ )
+ return date
+ }
+}
diff --git a/date-fns/src/addMonths/test.ts b/date-fns/src/addMonths/test.ts
new file mode 100644
index 0000000..fb1afb6
--- /dev/null
+++ b/date-fns/src/addMonths/test.ts
@@ -0,0 +1,173 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addMonths from '.'
+import { getDstTransitions } from '../../test/dst/tzOffsetTransitions'
+
+describe('addMonths', function() {
+ it('adds the given number of months', function() {
+ const result = addMonths(new Date(2014, 8 /* Sep */, 1), 5)
+ assert.deepStrictEqual(result, new Date(2015, 1 /* Feb */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addMonths(new Date(2014, 8 /* Sep */, 1).getTime(), 12)
+ assert.deepStrictEqual(result, new Date(2015, 8 /* Sep */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addMonths(new Date(2014, 8 /* Sep */, 1), 5.75)
+ assert.deepStrictEqual(result, new Date(2015, 1 /* Feb */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addMonths(new Date(2014, 8 /* Sep */, 1), '5')
+ assert.deepStrictEqual(result, new Date(2015, 1 /* Feb */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ addMonths(date, 12)
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('works well if the desired month has fewer days and the provided date is in the last day of a month', function() {
+ const date = new Date(2014, 11 /* Dec */, 31)
+ const result = addMonths(date, 2)
+ assert.deepStrictEqual(result, new Date(2015, 1 /* Feb */, 28))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(0, 0 /* Jan */, 31)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(0, 1 /* Feb */, 29)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = addMonths(initialDate, 1)
+ assert.deepStrictEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addMonths(new Date(NaN), 5)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addMonths(new Date(2014, 8 /* Sep */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(addMonths.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(addMonths.bind(null, 1), TypeError)
+ })
+
+ const dstTransitions = getDstTransitions(2017)
+ const dstOnly = dstTransitions.start && dstTransitions.end ? it : it.skip
+ const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || process.env.tz
+ const HOUR = 1000 * 60 * 60
+ const override = (
+ base: Date,
+ year = base.getFullYear(),
+ month = base.getMonth(),
+ day = base.getDate(),
+ hour = base.getHours(),
+ minute = base.getMinutes()
+ ) => new Date(year, month, day, hour, minute)
+
+ dstOnly(
+ `works at DST-start boundary in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = dstTransitions.start
+ const result = addMonths(date!, 2)
+ assert.deepStrictEqual(
+ result,
+ override(date!, date!.getFullYear(), date!.getMonth() + 2)
+ )
+ }
+ )
+
+ dstOnly(
+ `works at DST-start - 30 mins in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.start!.getTime() - 0.5 * HOUR)
+ const result = addMonths(date, 2)
+ const expected = override(date, date.getFullYear(), date.getMonth() + 2)
+ assert.deepStrictEqual(result, expected)
+ }
+ )
+
+ dstOnly(
+ `works at DST-start - 60 mins in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.start!.getTime() - 1 * HOUR)
+ const result = addMonths(date, 2)
+ const expected = override(date, date.getFullYear(), date.getMonth() + 2)
+ assert.deepStrictEqual(result, expected)
+ }
+ )
+
+ dstOnly(
+ `works at DST-end boundary in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = dstTransitions.end
+ const result = addMonths(date!, 2)
+ assert.deepStrictEqual(
+ result,
+ override(
+ date!,
+ date!.getFullYear() + (date!.getMonth() >= 10 ? 1 : 0),
+ (date!.getMonth() + 2) % 12 // protect against wrap for Nov.
+ )
+ )
+ }
+ )
+
+ dstOnly(
+ `works at DST-end - 30 mins in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.end!.getTime() - 0.5 * HOUR)
+ const result = addMonths(date, 2)
+ assert.deepStrictEqual(
+ result,
+ override(
+ date,
+ date.getFullYear() + (date.getMonth() >= 10 ? 1 : 0),
+ (date.getMonth() + 2) % 12 // protect against wrap for Nov.
+ )
+ )
+ }
+ )
+
+ dstOnly(
+ `works at DST-end - 60 mins in local timezone: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.end!.getTime() - 1 * HOUR)
+ const result = addMonths(date, 2)
+ assert.deepStrictEqual(
+ result,
+ override(
+ date,
+ date.getFullYear() + (date.getMonth() >= 10 ? 1 : 0),
+ (date.getMonth() + 2) % 12 // protect against wrap for Nov.
+ )
+ )
+ }
+ )
+
+ dstOnly(
+ `doesn't mutate if zero increment is used: ${tz || '(unknown)'}`,
+ function() {
+ const date = new Date(dstTransitions.end!)
+ const result = addMonths(date, 0)
+ assert.deepStrictEqual(result, date)
+ }
+ )
+})
diff --git a/date-fns/src/addQuarters/benchmark.js b/date-fns/src/addQuarters/benchmark.js
new file mode 100644
index 0000000..8e90c2f
--- /dev/null
+++ b/date-fns/src/addQuarters/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addQuarters from '.'
+import moment from 'moment'
+
+suite('addQuarters', function () {
+ benchmark('date-fns', function () {
+ return addQuarters(this.date, 2)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.add(2, 'quarters')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/addQuarters/index.d.ts b/date-fns/src/addQuarters/index.d.ts
new file mode 100644
index 0000000..a046e67
--- /dev/null
+++ b/date-fns/src/addQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addQuarters } from 'date-fns'
+export default addQuarters
diff --git a/date-fns/src/addQuarters/index.js.flow b/date-fns/src/addQuarters/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addQuarters/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addQuarters/index.ts b/date-fns/src/addQuarters/index.ts
new file mode 100644
index 0000000..4eaebf0
--- /dev/null
+++ b/date-fns/src/addQuarters/index.ts
@@ -0,0 +1,36 @@
+import toInteger from '../_lib/toInteger/index'
+import addMonths from '../addMonths/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name addQuarters
+ * @category Quarter Helpers
+ * @summary Add the specified number of year quarters to the given date.
+ *
+ * @description
+ * Add the specified number of year quarters to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of quarters to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the quarters added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 1 quarter to 1 September 2014:
+ * const result = addQuarters(new Date(2014, 8, 1), 1)
+ * //=> Mon Dec 01 2014 00:00:00
+ */
+export default function addQuarters(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ const months = amount * 3
+ return addMonths(dirtyDate, months)
+}
diff --git a/date-fns/src/addQuarters/test.ts b/date-fns/src/addQuarters/test.ts
new file mode 100644
index 0000000..a09434e
--- /dev/null
+++ b/date-fns/src/addQuarters/test.ts
@@ -0,0 +1,70 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addQuarters from '.'
+
+describe('addQuarters', function() {
+ it('adds the given number of quarters', function() {
+ const result = addQuarters(new Date(2014, 8 /* Sep */, 1), 1)
+ assert.deepStrictEqual(result, new Date(2014, 11 /* Dec */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addQuarters(new Date(2014, 8 /* Sep */, 1).getTime(), 4)
+ assert.deepStrictEqual(result, new Date(2015, 8 /* Sep */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addQuarters(new Date(2014, 8 /* Sep */, 1), 1.91)
+ assert.deepStrictEqual(result, new Date(2014, 11 /* Dec */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addQuarters(new Date(2014, 8 /* Sep */, 1), '1')
+ assert.deepStrictEqual(result, new Date(2014, 11 /* Dec */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ addQuarters(date, 4)
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('works well if the desired month has fewer days and the provided date is in the last day of a month', function() {
+ const date = new Date(2014, 11 /* Dec */, 31)
+ const result = addQuarters(date, 3)
+ assert.deepStrictEqual(result, new Date(2015, 8 /* Sep */, 30))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(-1, 10 /* Nov */, 30)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(0, 1 /* Feb */, 29)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = addQuarters(initialDate, 1)
+ assert.deepStrictEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addQuarters(new Date(NaN), 1)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addQuarters(new Date(2014, 8 /* Sep */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(addQuarters.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(addQuarters.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/addSeconds/benchmark.js b/date-fns/src/addSeconds/benchmark.js
new file mode 100644
index 0000000..799bb3c
--- /dev/null
+++ b/date-fns/src/addSeconds/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addSeconds from '.'
+import moment from 'moment'
+
+suite('addSeconds', function () {
+ benchmark('date-fns', function () {
+ return addSeconds(this.date, 15)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.add(15, 'seconds')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/addSeconds/index.d.ts b/date-fns/src/addSeconds/index.d.ts
new file mode 100644
index 0000000..9b1e669
--- /dev/null
+++ b/date-fns/src/addSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addSeconds } from 'date-fns'
+export default addSeconds
diff --git a/date-fns/src/addSeconds/index.js.flow b/date-fns/src/addSeconds/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addSeconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addSeconds/index.ts b/date-fns/src/addSeconds/index.ts
new file mode 100644
index 0000000..c858a04
--- /dev/null
+++ b/date-fns/src/addSeconds/index.ts
@@ -0,0 +1,35 @@
+import toInteger from '../_lib/toInteger/index'
+import addMilliseconds from '../addMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name addSeconds
+ * @category Second Helpers
+ * @summary Add the specified number of seconds to the given date.
+ *
+ * @description
+ * Add the specified number of seconds to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the seconds added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 30 seconds to 10 July 2014 12:45:00:
+ * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)
+ * //=> Thu Jul 10 2014 12:45:30
+ */
+export default function addSeconds(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addMilliseconds(dirtyDate, amount * 1000)
+}
diff --git a/date-fns/src/addSeconds/test.ts b/date-fns/src/addSeconds/test.ts
new file mode 100644
index 0000000..86032ed
--- /dev/null
+++ b/date-fns/src/addSeconds/test.ts
@@ -0,0 +1,59 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addSeconds from '.'
+
+describe('addSeconds', function() {
+ it('adds the given number of seconds', function() {
+ const result = addSeconds(new Date(2014, 6 /* Jul */, 10, 12, 45, 0), 30)
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 30))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addSeconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 0).getTime(),
+ 20
+ )
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 20))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addSeconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 0),
+ 30.777
+ )
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 30))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addSeconds(new Date(2014, 6 /* Jul */, 10, 12, 45, 5), '30')
+ assert.deepStrictEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 35))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 10, 12, 45, 0)
+ addSeconds(date, 15)
+ assert.deepStrictEqual(date, new Date(2014, 6 /* Jul */, 10, 12, 45, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addSeconds(new Date(NaN), 30)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addSeconds(new Date(2014, 6 /* Jul */, 10, 12, 45, 0), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(addSeconds.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(addSeconds.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/addWeeks/benchmark.js b/date-fns/src/addWeeks/benchmark.js
new file mode 100644
index 0000000..a6dfed7
--- /dev/null
+++ b/date-fns/src/addWeeks/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addWeeks from '.'
+import moment from 'moment'
+
+suite('addWeeks', function () {
+ benchmark('date-fns', function () {
+ return addWeeks(this.date, 2)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.add(2, 'weeks')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/addWeeks/index.d.ts b/date-fns/src/addWeeks/index.d.ts
new file mode 100644
index 0000000..25bb83a
--- /dev/null
+++ b/date-fns/src/addWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addWeeks } from 'date-fns'
+export default addWeeks
diff --git a/date-fns/src/addWeeks/index.js.flow b/date-fns/src/addWeeks/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addWeeks/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addWeeks/index.ts b/date-fns/src/addWeeks/index.ts
new file mode 100644
index 0000000..0b52616
--- /dev/null
+++ b/date-fns/src/addWeeks/index.ts
@@ -0,0 +1,36 @@
+import toInteger from '../_lib/toInteger/index'
+import addDays from '../addDays/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name addWeeks
+ * @category Week Helpers
+ * @summary Add the specified number of weeks to the given date.
+ *
+ * @description
+ * Add the specified number of week to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the weeks added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 4 weeks to 1 September 2014:
+ * const result = addWeeks(new Date(2014, 8, 1), 4)
+ * //=> Mon Sep 29 2014 00:00:00
+ */
+export default function addWeeks(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ const days = amount * 7
+ return addDays(dirtyDate, days)
+}
diff --git a/date-fns/src/addWeeks/test.ts b/date-fns/src/addWeeks/test.ts
new file mode 100644
index 0000000..cd0b916
--- /dev/null
+++ b/date-fns/src/addWeeks/test.ts
@@ -0,0 +1,53 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addWeeks from '.'
+
+describe('addWeeks', function() {
+ it('adds the given number of weeks', function() {
+ const result = addWeeks(new Date(2014, 8 /* Sep */, 1), 4)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 29))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addWeeks(new Date(2014, 8 /* Sep */, 1).getTime(), 1)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 8))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addWeeks(new Date(2014, 8 /* Sep */, 1), 4.95)
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 29))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addWeeks(new Date(2014, 8 /* Sep */, 1), '4')
+ assert.deepStrictEqual(result, new Date(2014, 8 /* Sep */, 29))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ addWeeks(date, 2)
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addWeeks(new Date(NaN), 4)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addWeeks(new Date(2014, 8 /* Sep */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(addWeeks.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(addWeeks.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/addYears/benchmark.js b/date-fns/src/addYears/benchmark.js
new file mode 100644
index 0000000..26d8b99
--- /dev/null
+++ b/date-fns/src/addYears/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import addYears from '.'
+import moment from 'moment'
+
+suite('addYears', function () {
+ benchmark('date-fns', function () {
+ return addYears(this.date, 20)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.add(20, 'years')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/addYears/index.d.ts b/date-fns/src/addYears/index.d.ts
new file mode 100644
index 0000000..df7255f
--- /dev/null
+++ b/date-fns/src/addYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addYears } from 'date-fns'
+export default addYears
diff --git a/date-fns/src/addYears/index.js.flow b/date-fns/src/addYears/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/addYears/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/addYears/index.ts b/date-fns/src/addYears/index.ts
new file mode 100644
index 0000000..84e1b94
--- /dev/null
+++ b/date-fns/src/addYears/index.ts
@@ -0,0 +1,35 @@
+import toInteger from '../_lib/toInteger/index'
+import addMonths from '../addMonths/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name addYears
+ * @category Year Helpers
+ * @summary Add the specified number of years to the given date.
+ *
+ * @description
+ * Add the specified number of years to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the years added
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Add 5 years to 1 September 2014:
+ * const result = addYears(new Date(2014, 8, 1), 5)
+ * //=> Sun Sep 01 2019 00:00:00
+ */
+export default function addYears(
+ dirtyDate: Date | number,
+ dirtyAmount: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addMonths(dirtyDate, amount * 12)
+}
diff --git a/date-fns/src/addYears/test.ts b/date-fns/src/addYears/test.ts
new file mode 100644
index 0000000..30031f6
--- /dev/null
+++ b/date-fns/src/addYears/test.ts
@@ -0,0 +1,69 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import addYears from '.'
+
+describe('addYears', function() {
+ it('adds the given number of years', function() {
+ const result = addYears(new Date(2014, 8 /* Sep */, 1), 5)
+ assert.deepStrictEqual(result, new Date(2019, 8 /* Sep */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = addYears(new Date(2014, 8 /* Sep */, 1).getTime(), 12)
+ assert.deepStrictEqual(result, new Date(2026, 8 /* Sep */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = addYears(new Date(2014, 8 /* Sep */, 1), 5.555)
+ assert.deepStrictEqual(result, new Date(2019, 8 /* Sep */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = addYears(new Date(2014, 8 /* Sep */, 1), '5')
+ assert.deepStrictEqual(result, new Date(2019, 8 /* Sep */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ addYears(date, 12)
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('handles the leap years properly', function() {
+ const result = addYears(new Date(2016, 1 /* Feb */, 29), 1)
+ assert.deepStrictEqual(result, new Date(2017, 1 /* Feb */, 28))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(0, 1 /* Feb */, 29)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(1, 1 /* Feb */, 28)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = addYears(initialDate, 1)
+ assert.deepStrictEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = addYears(new Date(NaN), 5)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = addYears(new Date(2014, 8 /* Sep */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(addYears.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(addYears.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/areIntervalsOverlapping/index.d.ts b/date-fns/src/areIntervalsOverlapping/index.d.ts
new file mode 100644
index 0000000..8cc0fd1
--- /dev/null
+++ b/date-fns/src/areIntervalsOverlapping/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { areIntervalsOverlapping } from 'date-fns'
+export default areIntervalsOverlapping
diff --git a/date-fns/src/areIntervalsOverlapping/index.js.flow b/date-fns/src/areIntervalsOverlapping/index.js.flow
new file mode 100644
index 0000000..9cab45d
--- /dev/null
+++ b/date-fns/src/areIntervalsOverlapping/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ intervalLeft: Interval,
+ intervalRight: Interval,
+ options?: {
+ inclusive?: boolean,
+ }
+) => boolean
diff --git a/date-fns/src/areIntervalsOverlapping/index.ts b/date-fns/src/areIntervalsOverlapping/index.ts
new file mode 100644
index 0000000..3dfcbb4
--- /dev/null
+++ b/date-fns/src/areIntervalsOverlapping/index.ts
@@ -0,0 +1,117 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name areIntervalsOverlapping
+ * @category Interval Helpers
+ * @summary Is the given time interval overlapping with another time interval?
+ *
+ * @description
+ * Is the given time interval overlapping with another time interval? Adjacent intervals do not count as overlapping.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `areRangesOverlapping` to `areIntervalsOverlapping`.
+ * This change was made to mirror the use of the word "interval" in standard ISO 8601:2004 terminology:
+ *
+ * ```
+ * 2.1.3
+ * time interval
+ * part of the time axis limited by two instants
+ * ```
+ *
+ * Also, this function now accepts an object with `start` and `end` properties
+ * instead of two arguments as an interval.
+ * This function now throws `RangeError` if the start of the interval is after its end
+ * or if any date in the interval is `Invalid Date`.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ *
+ * areRangesOverlapping(
+ * new Date(2014, 0, 10), new Date(2014, 0, 20),
+ * new Date(2014, 0, 17), new Date(2014, 0, 21)
+ * )
+ *
+ * // v2.0.0 onward
+ *
+ * areIntervalsOverlapping(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }
+ * )
+ * ```
+ *
+ * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @param {Object} [options] - the object with options
+ * @param {Boolean} [options.inclusive=false] - whether the comparison is inclusive or not
+ * @returns {Boolean} whether the time intervals are overlapping
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // For overlapping time intervals:
+ * areIntervalsOverlapping(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }
+ * )
+ * //=> true
+ *
+ * @example
+ * // For non-overlapping time intervals:
+ * areIntervalsOverlapping(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ * { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }
+ * )
+ * //=> false
+ *
+ * @example
+ * // For adjacent time intervals:
+ * areIntervalsOverlapping(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ * { start: new Date(2014, 0, 20), end: new Date(2014, 0, 30) }
+ * )
+ * //=> false
+ *
+ * @example
+ * // Using the inclusive option:
+ * areIntervalsOverlapping(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ * { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) }
+ * )
+ * //=> false
+ * areIntervalsOverlapping(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ * { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) },
+ * { inclusive: true }
+ * )
+ * //=> true
+ */
+export default function areIntervalsOverlapping(
+ dirtyIntervalLeft: Interval,
+ dirtyIntervalRight: Interval,
+ options = { inclusive: false }
+): boolean {
+ requiredArgs(2, arguments)
+
+ const intervalLeft = dirtyIntervalLeft || {}
+ const intervalRight = dirtyIntervalRight || {}
+ const leftStartTime = toDate(intervalLeft.start).getTime()
+ const leftEndTime = toDate(intervalLeft.end).getTime()
+ const rightStartTime = toDate(intervalRight.start).getTime()
+ const rightEndTime = toDate(intervalRight.end).getTime()
+
+ // Throw an exception if start date is after end date or if any date is `Invalid Date`
+ if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {
+ throw new RangeError('Invalid interval')
+ }
+
+ if (options.inclusive) {
+ return leftStartTime <= rightEndTime && rightStartTime <= leftEndTime
+ }
+
+ return leftStartTime < rightEndTime && rightStartTime < leftEndTime
+}
diff --git a/date-fns/src/areIntervalsOverlapping/test.ts b/date-fns/src/areIntervalsOverlapping/test.ts
new file mode 100644
index 0000000..1ff7c32
--- /dev/null
+++ b/date-fns/src/areIntervalsOverlapping/test.ts
@@ -0,0 +1,253 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import areIntervalsOverlapping from '.'
+import context from 'assert'
+
+describe('areIntervalsOverlapping', function () {
+ const initialIntervalStart = new Date(2016, 10, 10, 13, 0, 0)
+ const initialIntervalEnd = new Date(2016, 11, 3, 15, 0, 0)
+
+ describe("when the time intervals don't overlap", function () {
+ it('returns false for a valid non overlapping interval before another interval', function () {
+ const earlierIntervalStart = new Date(2016, 9, 25)
+ const earlierIntervalEnd = new Date(2016, 10, 9)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: earlierIntervalStart, end: earlierIntervalEnd }
+ )
+ assert(isOverlapping === false)
+ })
+
+ it('returns false for a valid non overlapping interval after another interval', function () {
+ const laterIntervalStart = new Date(2016, 11, 4)
+ const laterIntervalEnd = new Date(2016, 11, 9)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: laterIntervalStart, end: laterIntervalEnd }
+ )
+ assert(isOverlapping === false)
+ })
+
+ it('returns false for a non overlapping same-day interval', function () {
+ const sameDayIntervalStart = new Date(2016, 11, 4, 9, 0, 0)
+ const sameDayIntervalEnd = new Date(2016, 11, 4, 18, 0, 0)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: sameDayIntervalStart, end: sameDayIntervalEnd }
+ )
+ assert(isOverlapping === false)
+ })
+
+ it('returns false for an interval differing by a few hours', function () {
+ const oneDayOverlappingIntervalStart = new Date(2016, 11, 3, 18, 0, 0)
+ const oneDayOverlappingIntervalEnd = new Date(2016, 11, 14, 13, 0, 0)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ {
+ start: oneDayOverlappingIntervalStart,
+ end: oneDayOverlappingIntervalEnd,
+ }
+ )
+ assert(isOverlapping === false)
+ })
+
+ it("returns false for an interval with the same startDateTime as the initial time intervals's endDateTime", function () {
+ const oneDayOverlapIntervalStart = new Date(2016, 11, 3, 15, 0, 0)
+ const oneDayOverlapIntervalEnd = new Date(2016, 11, 14, 13, 0, 0)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: oneDayOverlapIntervalStart, end: oneDayOverlapIntervalEnd }
+ )
+ assert(isOverlapping === false)
+ })
+
+ it("returns false for an interval with the same endDateTime as the initial time interval's startDateTime", function () {
+ const oneDayOverlapIntervalStart = new Date(2016, 10, 3, 15, 0, 0)
+ const oneDayOverlapIntervalEnd = new Date(2016, 10, 10, 13, 0, 0)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: oneDayOverlapIntervalStart, end: oneDayOverlapIntervalEnd }
+ )
+ assert(isOverlapping === false)
+ })
+ })
+
+ describe('when the time intervals overlap', function () {
+ it('returns true for an interval included within another interval', function () {
+ const includedIntervalStart = new Date(2016, 10, 14)
+ const includedIntervalEnd = new Date(2016, 10, 14)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: includedIntervalStart, end: includedIntervalEnd }
+ )
+ assert(isOverlapping === true)
+ })
+
+ it('returns true for an interval overlapping at the end', function () {
+ const endOverlappingIntervalStart = new Date(2016, 10, 5)
+ const endOverlappingIntervalEnd = new Date(2016, 10, 14)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: endOverlappingIntervalStart, end: endOverlappingIntervalEnd }
+ )
+ assert(isOverlapping === true)
+ })
+
+ it('returns true for an interval overlapping at the beginning', function () {
+ const startOverlappingIntervalStart = new Date(2016, 10, 20)
+ const startOverlappingIntervalEnd = new Date(2016, 11, 14)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ {
+ start: startOverlappingIntervalStart,
+ end: startOverlappingIntervalEnd,
+ }
+ )
+ assert(isOverlapping === true)
+ })
+
+ it('returns true for an interval including another interval', function () {
+ const includingIntervalStart = new Date(2016, 10, 5)
+ const includingIntervalEnd = new Date(2016, 11, 15)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: includingIntervalStart, end: includingIntervalEnd }
+ )
+ assert(isOverlapping === true)
+ })
+ })
+
+ it('accepts timestamp', function () {
+ const initialIntervalStart = new Date(2016, 10, 10, 13, 0, 0).getTime()
+ const initialIntervalEnd = new Date(2016, 11, 3, 15, 0, 0).getTime()
+
+ const endOverlappingIntervalStart = new Date(2016, 10, 5).getTime()
+ const endOverlappingIntervalEnd = new Date(2016, 10, 14).getTime()
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: endOverlappingIntervalStart, end: endOverlappingIntervalEnd }
+ )
+ assert(isOverlapping === true)
+ })
+
+ it('throws an exception if the start date of the initial time interval is after the end date', function () {
+ const block = areIntervalsOverlapping.bind(
+ null,
+ { start: new Date(2016, 10, 7), end: new Date(2016, 10, 3) },
+ { start: new Date(2016, 10, 5), end: new Date(2016, 10, 15) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date of the compared time interval is after the end date', function () {
+ const block = areIntervalsOverlapping.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(2016, 10, 7) },
+ { start: new Date(2016, 10, 15), end: new Date(2016, 10, 5) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the initial interval is undefined', function () {
+ // @ts-expect-error
+ const block = areIntervalsOverlapping.bind(null, undefined, {
+ start: new Date(2016, 10, 5),
+ end: new Date(2016, 10, 15),
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the compared interval is undefined', function () {
+ // @ts-expect-error
+ const block = areIntervalsOverlapping.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(2016, 10, 7) },
+ undefined
+ )
+ assert.throws(block, RangeError)
+ })
+
+ describe('when the inclusive option is true', function () {
+ it("returns true for an interval with the same startDateTime as the initial time interval's endDateTime", function () {
+ const oneDayOverlapIntervalStart = new Date(2016, 11, 3, 15, 0, 0)
+ const oneDayOverlapIntervalEnd = new Date(2016, 11, 14, 13, 0, 0)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: oneDayOverlapIntervalStart, end: oneDayOverlapIntervalEnd },
+ { inclusive: true }
+ )
+ assert(isOverlapping)
+ })
+
+ it("returns true for an interval with the same endDateTime as the initial time interval's startDateTime", function () {
+ const oneDayOverlapIntervalStart = new Date(2016, 10, 3, 15, 0, 0)
+ const oneDayOverlapIntervalEnd = new Date(2016, 10, 10, 13, 0, 0)
+
+ const isOverlapping = areIntervalsOverlapping(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: oneDayOverlapIntervalStart, end: oneDayOverlapIntervalEnd },
+ { inclusive: true }
+ )
+ assert(isOverlapping)
+ })
+ })
+
+ describe('one of the dates is `Invalid Date`', function () {
+ it('throws an exception if the start date of the initial time interval is `Invalid Date`', function () {
+ const block = areIntervalsOverlapping.bind(
+ null,
+ { start: new Date(NaN), end: new Date(2016, 10, 3) },
+ { start: new Date(2016, 10, 5), end: new Date(2016, 10, 15) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date of the initial time interval is `Invalid Date`', function () {
+ const block = areIntervalsOverlapping.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(NaN) },
+ { start: new Date(2016, 10, 5), end: new Date(2016, 10, 15) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date of the compared time interval is `Invalid Date`', function () {
+ const block = areIntervalsOverlapping.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(2016, 10, 7) },
+ { start: new Date(NaN), end: new Date(2016, 10, 5) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date of the compared time interval is `Invalid Date`', function () {
+ const block = areIntervalsOverlapping.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(2016, 10, 7) },
+ { start: new Date(2016, 10, 5), end: new Date(NaN) }
+ )
+ assert.throws(block, RangeError)
+ })
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ // @ts-expect-error
+ assert.throws(areIntervalsOverlapping.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(areIntervalsOverlapping.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/closestIndexTo/benchmark.js b/date-fns/src/closestIndexTo/benchmark.js
new file mode 100644
index 0000000..c9a91a3
--- /dev/null
+++ b/date-fns/src/closestIndexTo/benchmark.js
@@ -0,0 +1,19 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import closestIndexTo from '.'
+
+suite('closestIndexTo', function () {
+ benchmark('date-fns', function () {
+ return closestIndexTo(this.date, this.array)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.array = [
+ new Date(this.date.getTime() + 604800001),
+ new Date(this.date.getTime() - 604800000)
+ ]
+ }
+})
diff --git a/date-fns/src/closestIndexTo/index.d.ts b/date-fns/src/closestIndexTo/index.d.ts
new file mode 100644
index 0000000..672d132
--- /dev/null
+++ b/date-fns/src/closestIndexTo/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { closestIndexTo } from 'date-fns'
+export default closestIndexTo
diff --git a/date-fns/src/closestIndexTo/index.js b/date-fns/src/closestIndexTo/index.js
new file mode 100644
index 0000000..2b6b73c
--- /dev/null
+++ b/date-fns/src/closestIndexTo/index.js
@@ -0,0 +1,79 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name closestIndexTo
+ * @category Common Helpers
+ * @summary Return an index of the closest date from the array comparing to the given date.
+ *
+ * @description
+ * Return an index of the closest date from the array comparing to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - Now, `closestIndexTo` doesn't throw an exception
+ * when the second argument is not an array, and returns Invalid Date instead.
+ *
+ * @param {Date|Number} dateToCompare - the date to compare with
+ * @param {Date[]|Number[]} datesArray - the array to search
+ * @returns {Number} an index of the date closest to the given date
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Which date is closer to 6 September 2015?
+ * var dateToCompare = new Date(2015, 8, 6)
+ * var datesArray = [
+ * new Date(2015, 0, 1),
+ * new Date(2016, 0, 1),
+ * new Date(2017, 0, 1)
+ * ]
+ * var result = closestIndexTo(dateToCompare, datesArray)
+ * //=> 1
+ */
+export default function closestIndexTo(dirtyDateToCompare, dirtyDatesArray) {
+ requiredArgs(2, arguments)
+
+ var dateToCompare = toDate(dirtyDateToCompare)
+
+ if (isNaN(dateToCompare)) {
+ return NaN
+ }
+
+ var timeToCompare = dateToCompare.getTime()
+
+ var datesArray
+ // `dirtyDatesArray` is undefined or null
+ if (dirtyDatesArray == null) {
+ datesArray = []
+
+ // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method
+ } else if (typeof dirtyDatesArray.forEach === 'function') {
+ datesArray = dirtyDatesArray
+
+ // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array
+ } else {
+ datesArray = Array.prototype.slice.call(dirtyDatesArray)
+ }
+
+ var result
+ var minDistance
+ datesArray.forEach(function(dirtyDate, index) {
+ var currentDate = toDate(dirtyDate)
+
+ if (isNaN(currentDate)) {
+ result = NaN
+ minDistance = NaN
+ return
+ }
+
+ var distance = Math.abs(timeToCompare - currentDate.getTime())
+ if (result == null || distance < minDistance) {
+ result = index
+ minDistance = distance
+ }
+ })
+
+ return result
+}
diff --git a/date-fns/src/closestIndexTo/index.js.flow b/date-fns/src/closestIndexTo/index.js.flow
new file mode 100644
index 0000000..335e082
--- /dev/null
+++ b/date-fns/src/closestIndexTo/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateToCompare: Date | number,
+ datesArray: (Date | number)[]
+) => number
diff --git a/date-fns/src/closestIndexTo/test.js b/date-fns/src/closestIndexTo/test.js
new file mode 100644
index 0000000..d070c4c
--- /dev/null
+++ b/date-fns/src/closestIndexTo/test.js
@@ -0,0 +1,102 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import closestIndexTo from '.'
+
+describe('closestIndexTo', function() {
+ it('returns the date index from the given array closest to the given date', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var result = closestIndexTo(date, [
+ new Date(2015, 7 /* Aug */, 31),
+ new Date(2012, 6 /* Jul */, 2)
+ ])
+ assert.equal(result, 0)
+ })
+
+ it('works if the closest date from the given array is before the given date', function() {
+ var date = new Date(2014, 6 /* Jul */, 2, 6, 30, 4, 500)
+ var result = closestIndexTo(date, [
+ new Date(2014, 6 /* Jul */, 2, 6, 30, 5, 900),
+ new Date(2014, 6 /* Jul */, 2, 6, 30, 3, 900),
+ new Date(2014, 6 /* Jul */, 2, 6, 30, 10)
+ ])
+ assert.equal(result, 1)
+ })
+
+ it('accepts timestamps', function() {
+ var date = new Date(2014, 6 /* Jul */, 2).getTime()
+ var result = closestIndexTo(date, [
+ new Date(2015, 7 /* Aug */, 31).getTime(),
+ new Date(2012, 6 /* Jul */, 2).getTime()
+ ])
+ assert.equal(result, 0)
+ })
+
+ it('returns undefined if the given array is empty', function() {
+ var date = new Date(2014, 6 /* Jul */, 2).getTime()
+ var result = closestIndexTo(date, [])
+ assert(result == null)
+ })
+
+ it('returns NaN if the given date is `Invalid Date`', function() {
+ var date = new Date(NaN)
+ var result = closestIndexTo(date, [
+ new Date(2015, 7 /* Aug */, 31),
+ new Date(2012, 6 /* Jul */, 2)
+ ])
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if any date in the given array is `Invalid Date`', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var result = closestIndexTo(date, [
+ new Date(2015, 7 /* Aug */, 31),
+ new Date(NaN),
+ new Date(2012, 6 /* Jul */, 2)
+ ])
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if any value in the given array is undefined', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var result = closestIndexTo(date, [
+ new Date(2015, 7 /* Aug */, 31),
+ // $ExpectedMistake
+ undefined,
+ new Date(2012, 6 /* Jul */, 2)
+ ])
+ assert(isNaN(result))
+ })
+
+ it('converts Array-like objects into Array', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var object = {
+ '0': new Date(2015, 7 /* Aug */, 31),
+ '1': new Date(2012, 6 /* Jul */, 2),
+ length: 2
+ }
+ // $ExpectedMistake
+ var result = closestIndexTo(date, object)
+ assert.equal(result, 0)
+ })
+
+ it('converts undefined into empty array', function() {
+ var date = new Date(2014, 6 /* Jul */, 2).getTime()
+ // $ExpectedMistake
+ var result = closestIndexTo(date, undefined)
+ assert(result == null)
+ })
+
+ it('converts null into empty array', function() {
+ var date = new Date(2014, 6 /* Jul */, 2).getTime()
+ // $ExpectedMistake
+ var result = closestIndexTo(date, null)
+ assert(result == null)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(closestIndexTo.bind(null), TypeError)
+ assert.throws(closestIndexTo.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/closestTo/benchmark.js b/date-fns/src/closestTo/benchmark.js
new file mode 100644
index 0000000..79ab881
--- /dev/null
+++ b/date-fns/src/closestTo/benchmark.js
@@ -0,0 +1,19 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import closestTo from '.'
+
+suite('closestTo', function () {
+ benchmark('date-fns', function () {
+ return closestTo(this.date, this.array)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.array = [
+ new Date(this.date.getTime() + 604800001),
+ new Date(this.date.getTime() - 604800000)
+ ]
+ }
+})
diff --git a/date-fns/src/closestTo/index.d.ts b/date-fns/src/closestTo/index.d.ts
new file mode 100644
index 0000000..d4e084e
--- /dev/null
+++ b/date-fns/src/closestTo/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { closestTo } from 'date-fns'
+export default closestTo
diff --git a/date-fns/src/closestTo/index.js b/date-fns/src/closestTo/index.js
new file mode 100644
index 0000000..64bfff1
--- /dev/null
+++ b/date-fns/src/closestTo/index.js
@@ -0,0 +1,77 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name closestTo
+ * @category Common Helpers
+ * @summary Return a date from the array closest to the given date.
+ *
+ * @description
+ * Return a date from the array closest to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - Now, `closestTo` doesn't throw an exception
+ * when the second argument is not an array, and returns Invalid Date instead.
+ *
+ * @param {Date|Number} dateToCompare - the date to compare with
+ * @param {Date[]|Number[]} datesArray - the array to search
+ * @returns {Date} the date from the array closest to the given date
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030?
+ * var dateToCompare = new Date(2015, 8, 6)
+ * var result = closestTo(dateToCompare, [
+ * new Date(2000, 0, 1),
+ * new Date(2030, 0, 1)
+ * ])
+ * //=> Tue Jan 01 2030 00:00:00
+ */
+export default function closestTo(dirtyDateToCompare, dirtyDatesArray) {
+ requiredArgs(2, arguments)
+
+ var dateToCompare = toDate(dirtyDateToCompare)
+
+ if (isNaN(dateToCompare)) {
+ return new Date(NaN)
+ }
+
+ var timeToCompare = dateToCompare.getTime()
+
+ var datesArray
+ // `dirtyDatesArray` is undefined or null
+ if (dirtyDatesArray == null) {
+ datesArray = []
+
+ // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method
+ } else if (typeof dirtyDatesArray.forEach === 'function') {
+ datesArray = dirtyDatesArray
+
+ // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array
+ } else {
+ datesArray = Array.prototype.slice.call(dirtyDatesArray)
+ }
+
+ var result
+ var minDistance
+ datesArray.forEach(function(dirtyDate) {
+ var currentDate = toDate(dirtyDate)
+
+ if (isNaN(currentDate)) {
+ result = new Date(NaN)
+ minDistance = NaN
+ return
+ }
+
+ var distance = Math.abs(timeToCompare - currentDate.getTime())
+ if (result == null || distance < minDistance) {
+ result = currentDate
+ minDistance = distance
+ }
+ })
+
+ return result
+}
diff --git a/date-fns/src/closestTo/index.js.flow b/date-fns/src/closestTo/index.js.flow
new file mode 100644
index 0000000..318e080
--- /dev/null
+++ b/date-fns/src/closestTo/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateToCompare: Date | number,
+ datesArray: (Date | number)[]
+) => Date
diff --git a/date-fns/src/closestTo/test.js b/date-fns/src/closestTo/test.js
new file mode 100644
index 0000000..1924972
--- /dev/null
+++ b/date-fns/src/closestTo/test.js
@@ -0,0 +1,112 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import closestTo from '.'
+
+describe('closestTo', function() {
+ it('returns the date from the given array closest to the given date', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var result = closestTo(date, [
+ new Date(2015, 7 /* Aug */, 31),
+ new Date(2012, 6 /* Jul */, 2)
+ ])
+ assert.deepEqual(result, new Date(2015, 7 /* Aug */, 31))
+ })
+
+ it('works if the closest date from the given array is before the given date', function() {
+ var date = new Date(2014, 6 /* Jul */, 2, 6, 30, 4, 500)
+ var result = closestTo(date, [
+ new Date(2014, 6 /* Jul */, 2, 6, 30, 5, 900),
+ new Date(2014, 6 /* Jul */, 2, 6, 30, 3, 900),
+ new Date(2014, 6 /* Jul */, 2, 6, 30, 10)
+ ])
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 2, 6, 30, 3, 900))
+ })
+
+ it('accepts timestamps', function() {
+ var date = new Date(2014, 6 /* Jul */, 2).getTime()
+ var result = closestTo(date, [
+ new Date(2015, 7 /* Aug */, 31).getTime(),
+ new Date(2012, 6 /* Jul */, 2).getTime()
+ ])
+ assert.deepEqual(result, new Date(2015, 7 /* Aug */, 31))
+ })
+
+ it('returns undefined if the given array is empty', function() {
+ var date = new Date(2014, 6 /* Jul */, 2).getTime()
+ var result = closestTo(date, [])
+ assert(result == null)
+ })
+
+ it('returns `Invalid Date` if the given date is `Invalid Date`', function() {
+ var date = new Date(NaN)
+ var result = closestTo(date, [
+ new Date(2015, 7 /* Aug */, 31),
+ new Date(2012, 6 /* Jul */, 2)
+ ])
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if any date in the given array is `Invalid Date`', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var result = closestTo(date, [
+ new Date(2015, 7 /* Aug */, 31),
+ new Date(NaN),
+ new Date(2012, 6 /* Jul */, 2)
+ ])
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if any date in the given array is `Invalid Date`', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var result = closestTo(date, [
+ new Date(2015, 7 /* Aug */, 31),
+ new Date(NaN),
+ new Date(2012, 6 /* Jul */, 2)
+ ])
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if any value in the given array is undefined', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var result = closestTo(date, [
+ new Date(2015, 7 /* Aug */, 31),
+ // $ExpectedMistake
+ undefined,
+ new Date(2012, 6 /* Jul */, 2)
+ ])
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('converts Array-like objects into Array', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var object = {
+ '0': new Date(2015, 7 /* Aug */, 31),
+ '1': new Date(2012, 6 /* Jul */, 2),
+ length: 2
+ }
+ // $ExpectedMistake
+ var result = closestTo(date, object)
+ assert.deepEqual(result, new Date(2015, 7 /* Aug */, 31))
+ })
+
+ it('converts undefined into empty array', function() {
+ var date = new Date(2014, 6 /* Jul */, 2).getTime()
+ // $ExpectedMistake
+ var result = closestTo(date, undefined)
+ assert(result == null)
+ })
+
+ it('converts null into empty array', function() {
+ var date = new Date(2014, 6 /* Jul */, 2).getTime()
+ // $ExpectedMistake
+ var result = closestTo(date, null)
+ assert(result == null)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(closestTo.bind(null), TypeError)
+ assert.throws(closestTo.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/compareAsc/benchmark.js b/date-fns/src/compareAsc/benchmark.js
new file mode 100644
index 0000000..479f252
--- /dev/null
+++ b/date-fns/src/compareAsc/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import compareAsc from '.'
+
+suite('compareAsc', function () {
+ benchmark('date-fns', function () {
+ return compareAsc(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/compareAsc/index.d.ts b/date-fns/src/compareAsc/index.d.ts
new file mode 100644
index 0000000..ff920e6
--- /dev/null
+++ b/date-fns/src/compareAsc/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { compareAsc } from 'date-fns'
+export default compareAsc
diff --git a/date-fns/src/compareAsc/index.js.flow b/date-fns/src/compareAsc/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/compareAsc/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/compareAsc/index.ts b/date-fns/src/compareAsc/index.ts
new file mode 100644
index 0000000..0fa1fcb
--- /dev/null
+++ b/date-fns/src/compareAsc/index.ts
@@ -0,0 +1,59 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name compareAsc
+ * @category Common Helpers
+ * @summary Compare the two dates and return -1, 0 or 1.
+ *
+ * @description
+ * Compare the two dates and return 1 if the first date is after the second,
+ * -1 if the first date is before the second or 0 if dates are equal.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to compare
+ * @param {Date|Number} dateRight - the second date to compare
+ * @returns {Number} the result of the comparison
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Compare 11 February 1987 and 10 July 1989:
+ * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))
+ * //=> -1
+ *
+ * @example
+ * // Sort the array of dates:
+ * const result = [
+ * new Date(1995, 6, 2),
+ * new Date(1987, 1, 11),
+ * new Date(1989, 6, 10)
+ * ].sort(compareAsc)
+ * //=> [
+ * // Wed Feb 11 1987 00:00:00,
+ * // Mon Jul 10 1989 00:00:00,
+ * // Sun Jul 02 1995 00:00:00
+ * // ]
+ */
+export default function compareAsc(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+
+ const diff = dateLeft.getTime() - dateRight.getTime()
+
+ if (diff < 0) {
+ return -1
+ } else if (diff > 0) {
+ return 1
+ // Return 0 if diff is 0; return NaN if diff is NaN
+ } else {
+ return diff
+ }
+}
diff --git a/date-fns/src/compareAsc/test.ts b/date-fns/src/compareAsc/test.ts
new file mode 100644
index 0000000..c12c560
--- /dev/null
+++ b/date-fns/src/compareAsc/test.ts
@@ -0,0 +1,81 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import compareAsc from '.'
+
+describe('compareAsc', function() {
+ it('returns 0 if the given dates are equal', function() {
+ const result = compareAsc(
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === 0)
+ })
+
+ it('returns -1 if the first date is before the second one', function() {
+ const result = compareAsc(
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === -1)
+ })
+
+ it('returns 1 if the first date is after the second one', function() {
+ const result = compareAsc(
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === 1)
+ })
+
+ it('sorts the dates array in the chronological order when function is passed as the argument to Array.prototype.sort()', function() {
+ const unsortedArray = [
+ new Date(1995, 6 /* Jul */, 2),
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1989, 6 /* Jul */, 10)
+ ]
+
+ const sortedArray = [
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1995, 6 /* Jul */, 2)
+ ]
+
+
+ unsortedArray.sort(compareAsc)
+ const result = unsortedArray
+
+ assert.deepStrictEqual(result, sortedArray)
+ })
+
+ it('accepts timestamps', function() {
+ const result = compareAsc(
+ new Date(1987, 1 /* Feb */, 11).getTime(),
+ new Date(1989, 6 /* Jul */, 10).getTime()
+ )
+ assert(result === -1)
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function() {
+ const result = compareAsc(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function() {
+ const result = compareAsc(new Date(1989, 6 /* Jul */, 10), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function() {
+ const result = compareAsc(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ //@ts-expect-error
+ assert.throws(compareAsc.bind(null), TypeError)
+ //@ts-expect-error
+ assert.throws(compareAsc.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/compareDesc/benchmark.js b/date-fns/src/compareDesc/benchmark.js
new file mode 100644
index 0000000..c67d4bc
--- /dev/null
+++ b/date-fns/src/compareDesc/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import compareDesc from '.'
+
+suite('compareDesc', function () {
+ benchmark('date-fns', function () {
+ return compareDesc(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/compareDesc/index.d.ts b/date-fns/src/compareDesc/index.d.ts
new file mode 100644
index 0000000..673fab5
--- /dev/null
+++ b/date-fns/src/compareDesc/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { compareDesc } from 'date-fns'
+export default compareDesc
diff --git a/date-fns/src/compareDesc/index.js.flow b/date-fns/src/compareDesc/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/compareDesc/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/compareDesc/index.ts b/date-fns/src/compareDesc/index.ts
new file mode 100644
index 0000000..bdedfa9
--- /dev/null
+++ b/date-fns/src/compareDesc/index.ts
@@ -0,0 +1,59 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name compareDesc
+ * @category Common Helpers
+ * @summary Compare the two dates reverse chronologically and return -1, 0 or 1.
+ *
+ * @description
+ * Compare the two dates and return -1 if the first date is after the second,
+ * 1 if the first date is before the second or 0 if dates are equal.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to compare
+ * @param {Date|Number} dateRight - the second date to compare
+ * @returns {Number} the result of the comparison
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Compare 11 February 1987 and 10 July 1989 reverse chronologically:
+ * const result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10))
+ * //=> 1
+ *
+ * @example
+ * // Sort the array of dates in reverse chronological order:
+ * const result = [
+ * new Date(1995, 6, 2),
+ * new Date(1987, 1, 11),
+ * new Date(1989, 6, 10)
+ * ].sort(compareDesc)
+ * //=> [
+ * // Sun Jul 02 1995 00:00:00,
+ * // Mon Jul 10 1989 00:00:00,
+ * // Wed Feb 11 1987 00:00:00
+ * // ]
+ */
+export default function compareDesc(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+
+ const diff = dateLeft.getTime() - dateRight.getTime()
+
+ if (diff > 0) {
+ return -1
+ } else if (diff < 0) {
+ return 1
+ // Return 0 if diff is 0; return NaN if diff is NaN
+ } else {
+ return diff
+ }
+}
diff --git a/date-fns/src/compareDesc/test.ts b/date-fns/src/compareDesc/test.ts
new file mode 100644
index 0000000..1ecb557
--- /dev/null
+++ b/date-fns/src/compareDesc/test.ts
@@ -0,0 +1,80 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import compareDesc from '.'
+
+describe('compareDesc', function() {
+ it('returns 0 if the given dates are equal', function() {
+ const result = compareDesc(
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === 0)
+ })
+
+ it('returns 1 if the first date is before the second one', function() {
+ const result = compareDesc(
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === 1)
+ })
+
+ it('returns -1 if the first date is after the second one', function() {
+ const result = compareDesc(
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === -1)
+ })
+
+ it('sorts the dates array in the reverse chronological order when function is passed as the argument to Array.prototype.sort()', function() {
+ const unsortedArray = [
+ new Date(1995, 6 /* Jul */, 2),
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1989, 6 /* Jul */, 10)
+ ]
+
+ const sortedArray = [
+ new Date(1995, 6 /* Jul */, 2),
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ ]
+
+ unsortedArray.sort(compareDesc)
+ const result = unsortedArray
+
+ assert.deepStrictEqual(result, sortedArray)
+ })
+
+ it('accepts timestamps', function() {
+ const result = compareDesc(
+ new Date(1987, 1 /* Feb */, 11).getTime(),
+ new Date(1989, 6 /* Jul */, 10).getTime()
+ )
+ assert(result === 1)
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function() {
+ const result = compareDesc(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function() {
+ const result = compareDesc(new Date(1989, 6 /* Jul */, 10), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function() {
+ const result = compareDesc(new Date(1989, 6 /* Jul */, 10), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ //@ts-expect-error
+ assert.throws(compareDesc.bind(null), TypeError)
+ //@ts-expect-error
+ assert.throws(compareDesc.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/constants/index.d.ts b/date-fns/src/constants/index.d.ts
new file mode 100644
index 0000000..64e4bfa
--- /dev/null
+++ b/date-fns/src/constants/index.d.ts
@@ -0,0 +1,2 @@
+export const maxTime: number
+export const minTime: number
diff --git a/date-fns/src/constants/index.js.flow b/date-fns/src/constants/index.js.flow
new file mode 100644
index 0000000..d57a406
--- /dev/null
+++ b/date-fns/src/constants/index.js.flow
@@ -0,0 +1,4 @@
+// @flow
+
+declare export var maxTime: number
+declare export var minTime: number
diff --git a/date-fns/src/constants/index.ts b/date-fns/src/constants/index.ts
new file mode 100644
index 0000000..fc643b8
--- /dev/null
+++ b/date-fns/src/constants/index.ts
@@ -0,0 +1,119 @@
+/**
+ * Days in 1 week.
+ *
+ * @name daysInWeek
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const daysInWeek = 7
+
+/**
+ * Maximum allowed time.
+ *
+ * @name maxTime
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000
+
+/**
+ * Milliseconds in 1 minute
+ *
+ * @name millisecondsInMinute
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const millisecondsInMinute = 60000
+
+/**
+ * Milliseconds in 1 hour
+ *
+ * @name millisecondsInHour
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const millisecondsInHour = 3600000
+
+/**
+ * Milliseconds in 1 second
+ *
+ * @name millisecondsInSecond
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const millisecondsInSecond = 1000
+
+/**
+ * Minimum allowed time.
+ *
+ * @name minTime
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const minTime = -maxTime
+
+/**
+ * Minutes in 1 hour
+ *
+ * @name minutesInHour
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const minutesInHour = 60
+
+/**
+ * Months in 1 quarter
+ *
+ * @name monthsInQuarter
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const monthsInQuarter = 3
+
+/**
+ * Months in 1 year
+ *
+ * @name monthsInYear
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const monthsInYear = 12
+
+/**
+ * Quarters in 1 year
+ *
+ * @name quartersInYear
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const quartersInYear = 4
+
+/**
+ * Seconds in 1 hour
+ *
+ * @name secondsInHour
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const secondsInHour = 3600
+
+/**
+ * Seconds in 1 minute
+ *
+ * @name secondsInMinute
+ * @constant
+ * @type {number}
+ * @default
+ */
+export const secondsInMinute = 60
diff --git a/date-fns/src/daysToWeeks/index.d.ts b/date-fns/src/daysToWeeks/index.d.ts
new file mode 100644
index 0000000..666112f
--- /dev/null
+++ b/date-fns/src/daysToWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { daysToWeeks } from 'date-fns'
+export default daysToWeeks
diff --git a/date-fns/src/daysToWeeks/index.js.flow b/date-fns/src/daysToWeeks/index.js.flow
new file mode 100644
index 0000000..181aec6
--- /dev/null
+++ b/date-fns/src/daysToWeeks/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (days: number) => number
diff --git a/date-fns/src/daysToWeeks/index.ts b/date-fns/src/daysToWeeks/index.ts
new file mode 100644
index 0000000..b7b7efb
--- /dev/null
+++ b/date-fns/src/daysToWeeks/index.ts
@@ -0,0 +1,31 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { daysInWeek } from '../constants/index'
+
+/**
+ * @name daysToWeeks
+ * @category Conversion Helpers
+ * @summary Convert days to weeks.
+ *
+ * @description
+ * Convert a number of days to a full number of weeks.
+ *
+ * @param {number} days - number of days to be converted
+ *
+ * @returns {number} the number of days converted in weeks
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 14 days to weeks:
+ * const result = daysToWeeks(14)
+ * //=> 2
+ *
+ * @example
+ * // It uses floor rounding:
+ * const result = daysToWeeks(13)
+ * //=> 1
+ */
+export default function daysToWeeks(days: number): number {
+ requiredArgs(1, arguments)
+ const weeks = days / daysInWeek
+ return Math.floor(weeks)
+}
diff --git a/date-fns/src/daysToWeeks/test.ts b/date-fns/src/daysToWeeks/test.ts
new file mode 100644
index 0000000..837d60c
--- /dev/null
+++ b/date-fns/src/daysToWeeks/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import daysToWeeks from '.'
+
+describe('daysToWeeks', () => {
+ it('converts days to weeks', function () {
+ assert(daysToWeeks(7) === 1)
+ assert(daysToWeeks(14) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(daysToWeeks(8) === 1)
+ assert(daysToWeeks(6) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(daysToWeeks(7.5) === 1)
+ assert(daysToWeeks(0) === 0)
+ })
+}) \ No newline at end of file
diff --git a/date-fns/src/differenceInBusinessDays/index.d.ts b/date-fns/src/differenceInBusinessDays/index.d.ts
new file mode 100644
index 0000000..8decd89
--- /dev/null
+++ b/date-fns/src/differenceInBusinessDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInBusinessDays } from 'date-fns'
+export default differenceInBusinessDays
diff --git a/date-fns/src/differenceInBusinessDays/index.js.flow b/date-fns/src/differenceInBusinessDays/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInBusinessDays/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInBusinessDays/index.ts b/date-fns/src/differenceInBusinessDays/index.ts
new file mode 100644
index 0000000..46fd575
--- /dev/null
+++ b/date-fns/src/differenceInBusinessDays/index.ts
@@ -0,0 +1,62 @@
+import isValid from '../isValid/index'
+import isWeekend from '../isWeekend/index'
+import toDate from '../toDate/index'
+import differenceInCalendarDays from '../differenceInCalendarDays/index'
+import addDays from '../addDays/index'
+import isSameDay from '../isSameDay/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInBusinessDays
+ * @category Day Helpers
+ * @summary Get the number of business days between the given dates.
+ *
+ * @description
+ * Get the number of business day periods between the given dates.
+ * Business days being days that arent in the weekend.
+ * Like `differenceInCalendarDays`, the function removes the times from
+ * the dates before calculating the difference.
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of business days
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many business days are between
+ * // 10 January 2014 and 20 July 2014?
+ * var result = differenceInBusinessDays(
+ * new Date(2014, 6, 20),
+ * new Date(2014, 0, 10)
+ * )
+ * //=> 136
+ */
+export default function differenceInBusinessDays(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ let dateRight = toDate(dirtyDateRight)
+
+ if (!isValid(dateLeft) || !isValid(dateRight)) return NaN
+
+ const calendarDifference = differenceInCalendarDays(dateLeft, dateRight)
+ const sign = calendarDifference < 0 ? -1 : 1
+
+ const weeks = toInteger(calendarDifference / 7)
+
+ let result = weeks * 5
+ dateRight = addDays(dateRight, weeks * 7)
+
+ // the loop below will run at most 6 times to account for the remaining days that don't makeup a full week
+ while (!isSameDay(dateLeft, dateRight)) {
+ // sign is used to account for both negative and positive differences
+ result += isWeekend(dateRight) ? 0 : sign
+ dateRight = addDays(dateRight, sign)
+ }
+
+ return result === 0 ? 0 : result
+}
diff --git a/date-fns/src/differenceInBusinessDays/test.ts b/date-fns/src/differenceInBusinessDays/test.ts
new file mode 100644
index 0000000..f30e671
--- /dev/null
+++ b/date-fns/src/differenceInBusinessDays/test.ts
@@ -0,0 +1,141 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInBusinessDays from '.'
+
+describe('differenceInBusinessDays', function () {
+ it('returns the number of business days between the given dates, excluding weekends', function () {
+ const result = differenceInBusinessDays(
+ new Date(2014, 6 /* Jul */, 18),
+ new Date(2014, 0 /* Jan */, 10)
+ )
+ assert(result === 135)
+ })
+
+ it('can handle long ranges', function () {
+ // @ts-ignore
+ if (typeof this.timeout === 'function') {
+ // @ts-ignore
+ this.timeout(500 /* 500 ms test timeout */)
+ }
+ const result = differenceInBusinessDays(
+ new Date(15000, 0 /* Jan */, 1),
+ new Date(2014, 0 /* Jan */, 1)
+ )
+ assert(result === 3387885)
+ })
+
+ it('the same except given first date falls on a weekend', function () {
+ const result = differenceInBusinessDays(
+ new Date(2019, 6 /* Jul */, 20),
+ new Date(2019, 6 /* Jul */, 18)
+ )
+ assert(result === 2)
+ })
+
+ it('the same except given second date falls on a weekend', function () {
+ const result = differenceInBusinessDays(
+ new Date(2019, 6 /* Jul */, 23),
+ new Date(2019, 6 /* Jul */, 20)
+ )
+ assert(result === 1)
+ })
+
+ it('the same except both given dates fall on a weekend', function () {
+ const result = differenceInBusinessDays(
+ new Date(2019, 6 /* Jul */, 28),
+ new Date(2019, 6 /* Jul */, 20)
+ )
+ assert(result === 5)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInBusinessDays(
+ new Date(2014, 0 /* Jan */, 10),
+ new Date(2014, 6 /* Jul */, 20)
+ )
+ assert(result === -135)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInBusinessDays(
+ new Date(2014, 6, 18).getTime(),
+ new Date(2014, 0, 10).getTime()
+ )
+ assert(result === 135)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a day, but the given dates are in different calendar days', function () {
+ const result = differenceInBusinessDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 4, 23, 59)
+ )
+ assert(result === 1)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInBusinessDays(
+ new Date(2014, 8 /* Sep */, 4, 23, 59),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === -1)
+ })
+
+ it('the time values of the given dates are the same', function () {
+ const result = differenceInBusinessDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 4, 0, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInBusinessDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number) {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInBusinessDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInBusinessDays(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInBusinessDays(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInBusinessDays(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInBusinessDays.bind(null), TypeError)
+ assert.throws(differenceInBusinessDays.bind(null, 1), TypeError)
+ })
+ })
+})
diff --git a/date-fns/src/differenceInCalendarDays/benchmark.js b/date-fns/src/differenceInCalendarDays/benchmark.js
new file mode 100644
index 0000000..ed704ed
--- /dev/null
+++ b/date-fns/src/differenceInCalendarDays/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInCalendarDays from '.'
+
+suite('differenceInCalendarDays', function () {
+ benchmark('date-fns', function () {
+ return differenceInCalendarDays(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/differenceInCalendarDays/index.d.ts b/date-fns/src/differenceInCalendarDays/index.d.ts
new file mode 100644
index 0000000..384b796
--- /dev/null
+++ b/date-fns/src/differenceInCalendarDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarDays } from 'date-fns'
+export default differenceInCalendarDays
diff --git a/date-fns/src/differenceInCalendarDays/index.js.flow b/date-fns/src/differenceInCalendarDays/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInCalendarDays/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInCalendarDays/index.ts b/date-fns/src/differenceInCalendarDays/index.ts
new file mode 100644
index 0000000..488c4ca
--- /dev/null
+++ b/date-fns/src/differenceInCalendarDays/index.ts
@@ -0,0 +1,59 @@
+import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index'
+import startOfDay from '../startOfDay/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+const MILLISECONDS_IN_DAY = 86400000
+
+/**
+ * @name differenceInCalendarDays
+ * @category Day Helpers
+ * @summary Get the number of calendar days between the given dates.
+ *
+ * @description
+ * Get the number of calendar days between the given dates. This means that the times are removed
+ * from the dates and then the difference in days is calculated.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of calendar days
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many calendar days are between
+ * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?
+ * const result = differenceInCalendarDays(
+ * new Date(2012, 6, 2, 0, 0),
+ * new Date(2011, 6, 2, 23, 0)
+ * )
+ * //=> 366
+ * // How many calendar days are between
+ * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?
+ * const result = differenceInCalendarDays(
+ * new Date(2011, 6, 3, 0, 1),
+ * new Date(2011, 6, 2, 23, 59)
+ * )
+ * //=> 1
+ */
+export default function differenceInCalendarDays(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const startOfDayLeft = startOfDay(dirtyDateLeft)
+ const startOfDayRight = startOfDay(dirtyDateRight)
+
+ const timestampLeft =
+ startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft)
+ const timestampRight =
+ startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight)
+
+ // Round the number of days to the nearest integer
+ // because the number of milliseconds in a day is not constant
+ // (e.g. it's different in the day of the daylight saving time clock shift)
+ return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY)
+}
diff --git a/date-fns/src/differenceInCalendarDays/test.ts b/date-fns/src/differenceInCalendarDays/test.ts
new file mode 100644
index 0000000..c122d1a
--- /dev/null
+++ b/date-fns/src/differenceInCalendarDays/test.ts
@@ -0,0 +1,215 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInCalendarDays from '.'
+import { getDstTransitions } from '../../test/dst/tzOffsetTransitions'
+
+describe('differenceInCalendarDays', function () {
+ it('returns the number of calendar days between the given dates', function () {
+ const result = differenceInCalendarDays(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 366)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInCalendarDays(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -366)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInCalendarDays(
+ new Date(2014, 8 /* Sep */, 5, 18, 0).getTime(),
+ new Date(2014, 8 /* Sep */, 4, 6, 0).getTime()
+ )
+ assert(result === 1)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a day, but the given dates are in different calendar days', function () {
+ const result = differenceInCalendarDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 4, 23, 59)
+ )
+ assert(result === 1)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInCalendarDays(
+ new Date(2014, 8 /* Sep */, 4, 23, 59),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === -1)
+ })
+
+ it('the time values of the given the given dates are the same', function () {
+ const result = differenceInCalendarDays(
+ new Date(2014, 8 /* Sep */, 6, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('the given the given dates are the same', function () {
+ const result = differenceInCalendarDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInCalendarDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInCalendarDays(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInCalendarDays(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInCalendarDays(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInCalendarDays.bind(null), TypeError)
+ assert.throws(differenceInCalendarDays.bind(null, 1), TypeError)
+ })
+
+ // These tests were copy-pasted almost unchanged from DST tests for
+ // `differenceInDays`
+ const dstTransitions = getDstTransitions(2017)
+ const dstOnly = dstTransitions.start && dstTransitions.end ? it : it.skip
+ const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || process.env.tz
+ dstOnly(
+ `works across DST start & end in local timezone: ${tz || '(unknown)'}`,
+ function () {
+ const { start, end } = dstTransitions
+ const HOUR = 1000 * 60 * 60
+ const MINUTE = 1000 * 60
+ function sameTime(t1: Date, t2: Date): boolean {
+ return (
+ t1.getHours() === t2.getHours() &&
+ t1.getMinutes() === t2.getMinutes() &&
+ t1.getSeconds() === t2.getSeconds() &&
+ t1.getMilliseconds() === t2.getMilliseconds()
+ )
+ }
+
+ assert(start !== undefined)
+ assert(end !== undefined)
+
+ if (start === undefined || end === undefined) {
+ return
+ }
+
+ // It's usually 1 hour, but for some timezones, e.g. Australia/Lord_Howe, it is 30 minutes
+ const dstOffset =
+ (end.getTimezoneOffset() - start.getTimezoneOffset()) * MINUTE
+
+ // TEST DST START (SPRING)
+
+ // anchor to one hour before the boundary
+ {
+ const a = new Date(start.getTime() - HOUR) // 1 hour before DST
+ const b = new Date(a.getTime() + 24 * HOUR - dstOffset) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR - dstOffset) // 2 days later, same local time
+
+ assert(sameTime(a, b))
+ assert(sameTime(a, c))
+ assert(sameTime(b, c))
+ assert(differenceInCalendarDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInCalendarDays(b, a) === 1) // 23 hours -> 1 day
+ assert(differenceInCalendarDays(c, a) === 2) // 47 hours -> 2 days
+ }
+ // anchor exactly at the boundary
+ {
+ const a = start // exactly when DST starts
+ const b = new Date(a.getTime() + 24 * HOUR) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR) // 2 days later, same local time
+
+ assert(sameTime(a, b))
+ assert(sameTime(a, c))
+ assert(sameTime(b, c))
+ assert(differenceInCalendarDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInCalendarDays(b, a) === 1) // normal 24-hour day
+ assert(differenceInCalendarDays(c, a) === 2) // 2 normal 24-hour days
+ }
+
+ // TEST DST END (FALL)
+
+ // make sure that diffs across a "fall back" DST boundary won't report a full day
+ // until 25 hours have elapsed.
+ {
+ const a = new Date(end.getTime() - HOUR / 2) // 1 hour before Standard Time starts
+ const b = new Date(a.getTime() + 24 * HOUR + dstOffset - 15 * MINUTE) // 1 day later, 15 mins earlier local time
+ const c = new Date(a.getTime() + 48 * HOUR + dstOffset - 15 * MINUTE) // 2 days later, 15 mins earlier local time
+
+ assert(differenceInCalendarDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInCalendarDays(b, a) === 1) // 24.75 hours but 1 calendar days
+ assert(differenceInCalendarDays(c, a) === 2) // 49.75 hours but 2 calendar days
+ }
+ // anchor to one hour before the boundary
+ {
+ const a = new Date(end.getTime() - HOUR) // 1 hour before Standard Time starts
+ const b = new Date(a.getTime() + 24 * HOUR + dstOffset) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR + dstOffset) // 2 days later, same local time
+
+ assert(sameTime(a, b))
+ assert(sameTime(a, c))
+ assert(sameTime(b, c))
+ assert(differenceInCalendarDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInCalendarDays(b, a) === 1) // 25 hours -> 1 day
+ assert(differenceInCalendarDays(c, a) === 2) // 49 hours -> 2 days
+ }
+ // anchor to one hour after the boundary
+ {
+ const a = new Date(end.getTime() + HOUR) // 1 hour after Standard Time starts
+ const b = new Date(a.getTime() + 24 * HOUR) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR) // 2 days later, same local time
+
+ assert(sameTime(a, b))
+ assert(sameTime(a, c))
+ assert(sameTime(b, c))
+ assert(differenceInCalendarDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInCalendarDays(b, a) === 1) // normal 24-hour day
+ assert(differenceInCalendarDays(c, a) === 2) // 2 normal 24-hour days
+ }
+ // anchor exactly at the boundary
+ {
+ const a = end // exactly when Standard Time starts
+ const b = new Date(a.getTime() + 24 * HOUR) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR) // 2 days later, same local time
+ assert(differenceInCalendarDays(b, a) === 1) // normal 24-hour day
+ assert(differenceInCalendarDays(c, a) === 2) // 2 normal 24-hour days
+ }
+ }
+ )
+})
diff --git a/date-fns/src/differenceInCalendarISOWeekYears/benchmark.js b/date-fns/src/differenceInCalendarISOWeekYears/benchmark.js
new file mode 100644
index 0000000..9f06d40
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeekYears/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInCalendarISOWeekYears from '.'
+
+suite('differenceInCalendarISOWeekYears', function () {
+ benchmark('date-fns', function () {
+ return differenceInCalendarISOWeekYears(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/differenceInCalendarISOWeekYears/index.d.ts b/date-fns/src/differenceInCalendarISOWeekYears/index.d.ts
new file mode 100644
index 0000000..bd8325c
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeekYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarISOWeekYears } from 'date-fns'
+export default differenceInCalendarISOWeekYears
diff --git a/date-fns/src/differenceInCalendarISOWeekYears/index.js.flow b/date-fns/src/differenceInCalendarISOWeekYears/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeekYears/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInCalendarISOWeekYears/index.ts b/date-fns/src/differenceInCalendarISOWeekYears/index.ts
new file mode 100644
index 0000000..609657e
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeekYears/index.ts
@@ -0,0 +1,43 @@
+import getISOWeekYear from '../getISOWeekYear/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInCalendarISOWeekYears
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Get the number of calendar ISO week-numbering years between the given dates.
+ *
+ * @description
+ * Get the number of calendar ISO week-numbering years between the given dates.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `differenceInCalendarISOYears` to `differenceInCalendarISOWeekYears`.
+ * "ISO week year" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ * This change makes the name consistent with
+ * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of calendar ISO week-numbering years
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012?
+ * const result = differenceInCalendarISOWeekYears(
+ * new Date(2012, 0, 1),
+ * new Date(2010, 0, 1)
+ * )
+ * //=> 2
+ */
+export default function differenceInCalendarISOWeekYears(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ return getISOWeekYear(dirtyDateLeft) - getISOWeekYear(dirtyDateRight)
+}
diff --git a/date-fns/src/differenceInCalendarISOWeekYears/test.ts b/date-fns/src/differenceInCalendarISOWeekYears/test.ts
new file mode 100644
index 0000000..db38e28
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeekYears/test.ts
@@ -0,0 +1,118 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInCalendarISOWeekYears from '.'
+
+describe('differenceInCalendarISOWeekYears', function () {
+ it('returns the number of calendar ISO week-numbering years between the given dates', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -1)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(2014, 6 /* Jul */, 2).getTime(),
+ new Date(2010, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 4)
+ })
+
+ it('handles dates before 100 AD', function () {
+ const firstDate = new Date(0)
+ firstDate.setFullYear(14, 0 /* Jan */, 1)
+ firstDate.setHours(0, 0, 0, 0)
+ const secondDate = new Date(0)
+ secondDate.setFullYear(0, 0 /* Jan */, 1)
+ secondDate.setHours(0, 0, 0, 0)
+ const result = differenceInCalendarISOWeekYears(firstDate, secondDate)
+ assert(result === 15)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than an ISO year, but the given dates are in different calendar ISO years', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(2012, 0 /* Jan */, 2),
+ new Date(2012, 0 /* Jan */, 1)
+ )
+ assert(result === 1)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(2012, 0 /* Jan */, 1),
+ new Date(2012, 0 /* Jan */, 2)
+ )
+ assert(result === -1)
+ })
+
+ it('the ISO weeks and weekdays of the given dates are the same', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(2013, 11 /* Dec */, 30),
+ new Date(2012, 0 /* Jan */, 2)
+ )
+ assert(result === 2)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInCalendarISOWeekYears(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInCalendarISOWeekYears(
+ new Date(NaN),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInCalendarISOWeekYears.bind(null), TypeError)
+ assert.throws(differenceInCalendarISOWeekYears.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInCalendarISOWeeks/benchmark.js b/date-fns/src/differenceInCalendarISOWeeks/benchmark.js
new file mode 100644
index 0000000..a9f5243
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeeks/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInCalendarISOWeeks from '.'
+
+suite('differenceInCalendarISOWeeks', function () {
+ benchmark('date-fns', function () {
+ return differenceInCalendarISOWeeks(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/differenceInCalendarISOWeeks/index.d.ts b/date-fns/src/differenceInCalendarISOWeeks/index.d.ts
new file mode 100644
index 0000000..7364227
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarISOWeeks } from 'date-fns'
+export default differenceInCalendarISOWeeks
diff --git a/date-fns/src/differenceInCalendarISOWeeks/index.js.flow b/date-fns/src/differenceInCalendarISOWeeks/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeeks/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInCalendarISOWeeks/index.ts b/date-fns/src/differenceInCalendarISOWeeks/index.ts
new file mode 100644
index 0000000..d761914
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeeks/index.ts
@@ -0,0 +1,54 @@
+import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index'
+import startOfISOWeek from '../startOfISOWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+const MILLISECONDS_IN_WEEK = 604800000
+
+/**
+ * @name differenceInCalendarISOWeeks
+ * @category ISO Week Helpers
+ * @summary Get the number of calendar ISO weeks between the given dates.
+ *
+ * @description
+ * Get the number of calendar ISO weeks between the given dates.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of calendar ISO weeks
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014?
+ * const result = differenceInCalendarISOWeeks(
+ * new Date(2014, 6, 21),
+ * new Date(2014, 6, 6)
+ * )
+ * //=> 3
+ */
+export default function differenceInCalendarISOWeeks(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const startOfISOWeekLeft = startOfISOWeek(dirtyDateLeft)
+ const startOfISOWeekRight = startOfISOWeek(dirtyDateRight)
+
+ const timestampLeft =
+ startOfISOWeekLeft.getTime() -
+ getTimezoneOffsetInMilliseconds(startOfISOWeekLeft)
+ const timestampRight =
+ startOfISOWeekRight.getTime() -
+ getTimezoneOffsetInMilliseconds(startOfISOWeekRight)
+
+ // Round the number of days to the nearest integer
+ // because the number of milliseconds in a week is not constant
+ // (e.g. it's different in the week of the daylight saving time clock shift)
+ return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)
+}
diff --git a/date-fns/src/differenceInCalendarISOWeeks/test.ts b/date-fns/src/differenceInCalendarISOWeeks/test.ts
new file mode 100644
index 0000000..5318cad
--- /dev/null
+++ b/date-fns/src/differenceInCalendarISOWeeks/test.ts
@@ -0,0 +1,104 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInCalendarISOWeeks from '.'
+
+describe('differenceInCalendarISOWeeks', function () {
+ it('returns the number of calendar ISO weeks between the given dates', function () {
+ const result = differenceInCalendarISOWeeks(
+ new Date(2014, 6 /* Jul */, 8, 18, 0),
+ new Date(2014, 5 /* Jun */, 29, 6, 0)
+ )
+ assert(result === 2)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInCalendarISOWeeks(
+ new Date(2014, 5 /* Jun */, 29, 6, 0),
+ new Date(2014, 6 /* Jul */, 8, 18, 0)
+ )
+ assert(result === -2)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInCalendarISOWeeks(
+ new Date(2014, 6 /* Jul */, 12).getTime(),
+ new Date(2014, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 1)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than an ISO week, but the given dates are in different calendar ISO weeks', function () {
+ const result = differenceInCalendarISOWeeks(
+ new Date(2014, 6 /* Jul */, 7),
+ new Date(2014, 6 /* Jul */, 6)
+ )
+ assert(result === 1)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInCalendarISOWeeks(
+ new Date(2014, 6 /* Jul */, 6),
+ new Date(2014, 6 /* Jul */, 7)
+ )
+ assert(result === -1)
+ })
+
+ it('the days of weeks of the given dates are the same', function () {
+ const result = differenceInCalendarISOWeeks(
+ new Date(2014, 6 /* Jul */, 9),
+ new Date(2014, 6 /* Jul */, 2)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInCalendarISOWeeks(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInCalendarISOWeeks(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInCalendarISOWeeks(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInCalendarISOWeeks(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInCalendarISOWeeks(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInCalendarISOWeeks.bind(null), TypeError)
+ assert.throws(differenceInCalendarISOWeeks.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInCalendarMonths/benchmark.js b/date-fns/src/differenceInCalendarMonths/benchmark.js
new file mode 100644
index 0000000..7530bf0
--- /dev/null
+++ b/date-fns/src/differenceInCalendarMonths/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInCalendarMonths from '.'
+
+suite('differenceInCalendarMonths', function () {
+ benchmark('date-fns', function () {
+ return differenceInCalendarMonths(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/differenceInCalendarMonths/index.d.ts b/date-fns/src/differenceInCalendarMonths/index.d.ts
new file mode 100644
index 0000000..743bf76
--- /dev/null
+++ b/date-fns/src/differenceInCalendarMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarMonths } from 'date-fns'
+export default differenceInCalendarMonths
diff --git a/date-fns/src/differenceInCalendarMonths/index.js.flow b/date-fns/src/differenceInCalendarMonths/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInCalendarMonths/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInCalendarMonths/index.ts b/date-fns/src/differenceInCalendarMonths/index.ts
new file mode 100644
index 0000000..dcf1c44
--- /dev/null
+++ b/date-fns/src/differenceInCalendarMonths/index.ts
@@ -0,0 +1,42 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInCalendarMonths
+ * @category Month Helpers
+ * @summary Get the number of calendar months between the given dates.
+ *
+ * @description
+ * Get the number of calendar months between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of calendar months
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many calendar months are between 31 January 2014 and 1 September 2014?
+ * var result = differenceInCalendarMonths(
+ * new Date(2014, 8, 1),
+ * new Date(2014, 0, 31)
+ * )
+ * //=> 8
+ */
+export default function differenceInCalendarMonths(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+
+ const yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()
+ const monthDiff = dateLeft.getMonth() - dateRight.getMonth()
+
+ return yearDiff * 12 + monthDiff
+}
diff --git a/date-fns/src/differenceInCalendarMonths/test.ts b/date-fns/src/differenceInCalendarMonths/test.ts
new file mode 100644
index 0000000..9174c58
--- /dev/null
+++ b/date-fns/src/differenceInCalendarMonths/test.ts
@@ -0,0 +1,104 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInCalendarMonths from '.'
+
+describe('differenceInCalendarMonths', function () {
+ it('returns the number of calendar months between the given dates', function () {
+ const result = differenceInCalendarMonths(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 12)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInCalendarMonths(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -12)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInCalendarMonths(
+ new Date(2014, 7 /* Aug */, 2).getTime(),
+ new Date(2010, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 49)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a month, but the given dates are in different calendar months', function () {
+ const result = differenceInCalendarMonths(
+ new Date(2014, 8 /* Sep */, 1),
+ new Date(2014, 7 /* Aug */, 31)
+ )
+ assert(result === 1)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInCalendarMonths(
+ new Date(2014, 7 /* Aug */, 31),
+ new Date(2014, 8 /* Sep */, 1)
+ )
+ assert(result === -1)
+ })
+
+ it('the days of months of the given dates are the same', function () {
+ const result = differenceInCalendarMonths(
+ new Date(2014, 8 /* Sep */, 6),
+ new Date(2014, 7 /* Aug */, 6)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInCalendarMonths(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInCalendarMonths(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInCalendarMonths(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInCalendarMonths(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInCalendarMonths(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInCalendarMonths.bind(null), TypeError)
+ assert.throws(differenceInCalendarMonths.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInCalendarQuarters/benchmark.js b/date-fns/src/differenceInCalendarQuarters/benchmark.js
new file mode 100644
index 0000000..098a4ee
--- /dev/null
+++ b/date-fns/src/differenceInCalendarQuarters/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInCalendarQuarters from '.'
+
+suite('differenceInCalendarQuarters', function () {
+ benchmark('date-fns', function () {
+ return differenceInCalendarQuarters(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/differenceInCalendarQuarters/index.d.ts b/date-fns/src/differenceInCalendarQuarters/index.d.ts
new file mode 100644
index 0000000..177e072
--- /dev/null
+++ b/date-fns/src/differenceInCalendarQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarQuarters } from 'date-fns'
+export default differenceInCalendarQuarters
diff --git a/date-fns/src/differenceInCalendarQuarters/index.js.flow b/date-fns/src/differenceInCalendarQuarters/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInCalendarQuarters/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInCalendarQuarters/index.ts b/date-fns/src/differenceInCalendarQuarters/index.ts
new file mode 100644
index 0000000..d3569fd
--- /dev/null
+++ b/date-fns/src/differenceInCalendarQuarters/index.ts
@@ -0,0 +1,43 @@
+import getQuarter from '../getQuarter/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInCalendarQuarters
+ * @category Quarter Helpers
+ * @summary Get the number of calendar quarters between the given dates.
+ *
+ * @description
+ * Get the number of calendar quarters between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of calendar quarters
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many calendar quarters are between 31 December 2013 and 2 July 2014?
+ * var result = differenceInCalendarQuarters(
+ * new Date(2014, 6, 2),
+ * new Date(2013, 11, 31)
+ * )
+ * //=> 3
+ */
+export default function differenceInCalendarQuarters(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+
+ const yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()
+ const quarterDiff = getQuarter(dateLeft) - getQuarter(dateRight)
+
+ return yearDiff * 4 + quarterDiff
+}
diff --git a/date-fns/src/differenceInCalendarQuarters/test.ts b/date-fns/src/differenceInCalendarQuarters/test.ts
new file mode 100644
index 0000000..f889687
--- /dev/null
+++ b/date-fns/src/differenceInCalendarQuarters/test.ts
@@ -0,0 +1,104 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInCalendarQuarters from '.'
+
+describe('differenceInCalendarQuarters', function () {
+ it('returns the number of calendar quarters between the given dates', function () {
+ const result = differenceInCalendarQuarters(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 4)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInCalendarQuarters(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -4)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInCalendarQuarters(
+ new Date(2014, 9 /* Oct */, 2).getTime(),
+ new Date(2010, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 17)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a quarter, but the given dates are in different calendar quarters', function () {
+ const result = differenceInCalendarQuarters(
+ new Date(2014, 6 /* Jul */, 1),
+ new Date(2014, 5 /* Jun */, 30)
+ )
+ assert(result === 1)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInCalendarQuarters(
+ new Date(2014, 5 /* Jun */, 30),
+ new Date(2014, 6 /* Jul */, 1)
+ )
+ assert(result === -1)
+ })
+
+ it('the days of months of the given dates are the same', function () {
+ const result = differenceInCalendarQuarters(
+ new Date(2014, 3 /* Apr */, 6),
+ new Date(2014, 0 /* Jan */, 6)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInCalendarQuarters(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInCalendarQuarters(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInCalendarQuarters(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInCalendarQuarters(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInCalendarQuarters(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInCalendarQuarters.bind(null), TypeError)
+ assert.throws(differenceInCalendarQuarters.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInCalendarWeeks/benchmark.js b/date-fns/src/differenceInCalendarWeeks/benchmark.js
new file mode 100644
index 0000000..d014aee
--- /dev/null
+++ b/date-fns/src/differenceInCalendarWeeks/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInCalendarWeeks from '.'
+
+suite('differenceInCalendarWeeks', function () {
+ benchmark('date-fns', function () {
+ return differenceInCalendarWeeks(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/differenceInCalendarWeeks/index.d.ts b/date-fns/src/differenceInCalendarWeeks/index.d.ts
new file mode 100644
index 0000000..c370dd6
--- /dev/null
+++ b/date-fns/src/differenceInCalendarWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarWeeks } from 'date-fns'
+export default differenceInCalendarWeeks
diff --git a/date-fns/src/differenceInCalendarWeeks/index.js.flow b/date-fns/src/differenceInCalendarWeeks/index.js.flow
new file mode 100644
index 0000000..e4968a9
--- /dev/null
+++ b/date-fns/src/differenceInCalendarWeeks/index.js.flow
@@ -0,0 +1,59 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => number
diff --git a/date-fns/src/differenceInCalendarWeeks/index.ts b/date-fns/src/differenceInCalendarWeeks/index.ts
new file mode 100644
index 0000000..da15cb7
--- /dev/null
+++ b/date-fns/src/differenceInCalendarWeeks/index.ts
@@ -0,0 +1,67 @@
+import startOfWeek from '../startOfWeek/index'
+import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { LocaleOptions, WeekStartOptions } from '../types'
+
+const MILLISECONDS_IN_WEEK = 604800000
+
+/**
+ * @name differenceInCalendarWeeks
+ * @category Week Helpers
+ * @summary Get the number of calendar weeks between the given dates.
+ *
+ * @description
+ * Get the number of calendar weeks between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Number} the number of calendar weeks
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ *
+ * @example
+ * // How many calendar weeks are between 5 July 2014 and 20 July 2014?
+ * const result = differenceInCalendarWeeks(
+ * new Date(2014, 6, 20),
+ * new Date(2014, 6, 5)
+ * )
+ * //=> 3
+ *
+ * @example
+ * // If the week starts on Monday,
+ * // how many calendar weeks are between 5 July 2014 and 20 July 2014?
+ * const result = differenceInCalendarWeeks(
+ * new Date(2014, 6, 20),
+ * new Date(2014, 6, 5),
+ * { weekStartsOn: 1 }
+ * )
+ * //=> 2
+ */
+export default function differenceInCalendarWeeks(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number,
+ dirtyOptions?: LocaleOptions & WeekStartOptions
+): number {
+ requiredArgs(2, arguments)
+
+ const startOfWeekLeft = startOfWeek(dirtyDateLeft, dirtyOptions)
+ const startOfWeekRight = startOfWeek(dirtyDateRight, dirtyOptions)
+
+ const timestampLeft =
+ startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft)
+ const timestampRight =
+ startOfWeekRight.getTime() -
+ getTimezoneOffsetInMilliseconds(startOfWeekRight)
+
+ // Round the number of days to the nearest integer
+ // because the number of milliseconds in a week is not constant
+ // (e.g. it's different in the week of the daylight saving time clock shift)
+ return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)
+}
diff --git a/date-fns/src/differenceInCalendarWeeks/test.ts b/date-fns/src/differenceInCalendarWeeks/test.ts
new file mode 100644
index 0000000..8a1f6e2
--- /dev/null
+++ b/date-fns/src/differenceInCalendarWeeks/test.ts
@@ -0,0 +1,164 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInCalendarWeeks from '.'
+
+describe('differenceInCalendarWeeks', function () {
+ it('returns the number of calendar weeks between the given dates', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 6 /* Jul */, 8, 18, 0),
+ new Date(2014, 5 /* Jun */, 29, 6, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 6 /* Jul */, 8, 18, 0),
+ new Date(2014, 5 /* Jun */, 29, 6, 0),
+ { weekStartsOn: 1 }
+ )
+ assert(result === 2)
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 6 /* Jul */, 8, 18, 0),
+ new Date(2014, 5 /* Jun */, 29, 6, 0),
+ {
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 1 },
+ },
+ }
+ )
+ assert(result === 2)
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 6 /* Jul */, 8, 18, 0),
+ new Date(2014, 5 /* Jun */, 29, 6, 0),
+ {
+ weekStartsOn: 1,
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 0 },
+ },
+ }
+ )
+ assert(result === 2)
+ })
+
+ it('returns a positive number if the time value of the second date is smaller', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 6 /* Jul */, 8, 18, 0),
+ new Date(2014, 5 /* Jun */, 29, 6, 0),
+ // @ts-expect-error
+ { weekStartsOn: '1' }
+ )
+ assert(result === 2)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 5 /* Jun */, 29, 6, 0),
+ new Date(2014, 6 /* Jul */, 8, 18, 0)
+ )
+ assert(result === -1)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 6 /* Jul */, 12).getTime(),
+ new Date(2014, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 1)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a week, but the given dates are in different calendar weeks', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 6 /* Jul */, 6),
+ new Date(2014, 6 /* Jul */, 5)
+ )
+ assert(result === 1)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 6 /* Jul */, 5),
+ new Date(2014, 6 /* Jul */, 6)
+ )
+ assert(result === -1)
+ })
+
+ it('the days of weeks of the given dates are the same', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 6 /* Jul */, 9),
+ new Date(2014, 6 /* Jul */, 2)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInCalendarWeeks(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInCalendarWeeks(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInCalendarWeeks(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ // @ts-expect-error
+ const block = differenceInCalendarWeeks.bind(
+ null,
+ new Date(2014, 6 /* Jul */, 8, 18, 0),
+ new Date(2014, 5 /* Jun */, 29, 6, 0),
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInCalendarWeeks.bind(null), TypeError)
+ assert.throws(differenceInCalendarWeeks.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInCalendarYears/benchmark.js b/date-fns/src/differenceInCalendarYears/benchmark.js
new file mode 100644
index 0000000..74f42ba
--- /dev/null
+++ b/date-fns/src/differenceInCalendarYears/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInCalendarYears from '.'
+
+suite('differenceInCalendarYears', function () {
+ benchmark('date-fns', function () {
+ return differenceInCalendarYears(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/differenceInCalendarYears/index.d.ts b/date-fns/src/differenceInCalendarYears/index.d.ts
new file mode 100644
index 0000000..3692b07
--- /dev/null
+++ b/date-fns/src/differenceInCalendarYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarYears } from 'date-fns'
+export default differenceInCalendarYears
diff --git a/date-fns/src/differenceInCalendarYears/index.js.flow b/date-fns/src/differenceInCalendarYears/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInCalendarYears/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInCalendarYears/index.ts b/date-fns/src/differenceInCalendarYears/index.ts
new file mode 100644
index 0000000..586b0fd
--- /dev/null
+++ b/date-fns/src/differenceInCalendarYears/index.ts
@@ -0,0 +1,39 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInCalendarYears
+ * @category Year Helpers
+ * @summary Get the number of calendar years between the given dates.
+ *
+ * @description
+ * Get the number of calendar years between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of calendar years
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many calendar years are between 31 December 2013 and 11 February 2015?
+ * const result = differenceInCalendarYears(
+ * new Date(2015, 1, 11),
+ * new Date(2013, 11, 31)
+ * )
+ * //=> 2
+ */
+export default function differenceInCalendarYears(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+
+ return dateLeft.getFullYear() - dateRight.getFullYear()
+}
diff --git a/date-fns/src/differenceInCalendarYears/test.ts b/date-fns/src/differenceInCalendarYears/test.ts
new file mode 100644
index 0000000..7a27322
--- /dev/null
+++ b/date-fns/src/differenceInCalendarYears/test.ts
@@ -0,0 +1,105 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInCalendarYears from '.'
+
+describe('differenceInCalendarYears', function () {
+ it('returns the number of calendar years between the given dates', function () {
+ const result = differenceInCalendarYears(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInCalendarYears(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -1)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInCalendarYears(
+ new Date(2014, 6 /* Jul */, 2).getTime(),
+ new Date(2010, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 4)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a year, but the given dates are in different calendar years', function () {
+ const result = differenceInCalendarYears(
+ new Date(2015, 0 /* Jan */, 1),
+ new Date(2014, 11 /* Dec */, 31)
+ )
+ assert(result === 1)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInCalendarYears(
+ new Date(2014, 11 /* Dec */, 31),
+ new Date(2015, 0 /* Jan */, 1)
+ )
+ assert(result === -1)
+ })
+
+ it('the days and months of the given dates are the same', function () {
+ const result = differenceInCalendarYears(
+ new Date(2014, 8 /* Sep */, 5),
+ new Date(2012, 8 /* Sep */, 5)
+ )
+ assert(result === 2)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInCalendarYears(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInCalendarYears(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInCalendarYears(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInCalendarYears(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInCalendarYears(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInCalendarYears.bind(null), TypeError)
+ assert.throws(differenceInCalendarYears.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInDays/benchmark.js b/date-fns/src/differenceInDays/benchmark.js
new file mode 100644
index 0000000..2bc0f44
--- /dev/null
+++ b/date-fns/src/differenceInDays/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInDays from '.'
+import moment from 'moment'
+
+suite('differenceInDays', function () {
+ benchmark('date-fns', function () {
+ return differenceInDays(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.diff(this.momentB, 'day')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/differenceInDays/index.d.ts b/date-fns/src/differenceInDays/index.d.ts
new file mode 100644
index 0000000..de04cde
--- /dev/null
+++ b/date-fns/src/differenceInDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInDays } from 'date-fns'
+export default differenceInDays
diff --git a/date-fns/src/differenceInDays/index.js.flow b/date-fns/src/differenceInDays/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInDays/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInDays/index.ts b/date-fns/src/differenceInDays/index.ts
new file mode 100644
index 0000000..5851836
--- /dev/null
+++ b/date-fns/src/differenceInDays/index.ts
@@ -0,0 +1,104 @@
+import toDate from '../toDate/index'
+import differenceInCalendarDays from '../differenceInCalendarDays/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+// Like `compareAsc` but uses local time not UTC, which is needed
+// for accurate equality comparisons of UTC timestamps that end up
+// having the same representation in local time, e.g. one hour before
+// DST ends vs. the instant that DST ends.
+function compareLocalAsc(dateLeft: Date, dateRight: Date): number {
+ const diff =
+ dateLeft.getFullYear() - dateRight.getFullYear() ||
+ dateLeft.getMonth() - dateRight.getMonth() ||
+ dateLeft.getDate() - dateRight.getDate() ||
+ dateLeft.getHours() - dateRight.getHours() ||
+ dateLeft.getMinutes() - dateRight.getMinutes() ||
+ dateLeft.getSeconds() - dateRight.getSeconds() ||
+ dateLeft.getMilliseconds() - dateRight.getMilliseconds()
+
+ if (diff < 0) {
+ return -1
+ } else if (diff > 0) {
+ return 1
+ // Return 0 if diff is 0; return NaN if diff is NaN
+ } else {
+ return diff
+ }
+}
+
+/**
+ * @name differenceInDays
+ * @category Day Helpers
+ * @summary Get the number of full days between the given dates.
+ *
+ * @description
+ * Get the number of full day periods between two dates. Fractional days are
+ * truncated towards zero.
+ *
+ * One "full day" is the distance between a local time in one day to the same
+ * local time on the next or previous day. A full day can sometimes be less than
+ * or more than 24 hours if a daylight savings change happens between two dates.
+ *
+ * To ignore DST and only measure exact 24-hour periods, use this instead:
+ * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.
+ *
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of full days according to the local timezone
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many full days are between
+ * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?
+ * const result = differenceInDays(
+ * new Date(2012, 6, 2, 0, 0),
+ * new Date(2011, 6, 2, 23, 0)
+ * )
+ * //=> 365
+ * // How many full days are between
+ * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?
+ * const result = differenceInDays(
+ * new Date(2011, 6, 3, 0, 1),
+ * new Date(2011, 6, 2, 23, 59)
+ * )
+ * //=> 0
+ * // How many full days are between
+ * // 1 March 2020 0:00 and 1 June 2020 0:00 ?
+ * // Note: because local time is used, the
+ * // result will always be 92 days, even in
+ * // time zones where DST starts and the
+ * // period has only 92*24-1 hours.
+ * const result = differenceInDays(
+ * new Date(2020, 5, 1),
+ * new Date(2020, 2, 1)
+ * )
+//=> 92
+ */
+export default function differenceInDays(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+
+ const sign = compareLocalAsc(dateLeft, dateRight)
+ const difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight))
+
+ dateLeft.setDate(dateLeft.getDate() - sign * difference)
+
+ // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full
+ // If so, result must be decreased by 1 in absolute value
+ const isLastDayNotFull = Number(
+ compareLocalAsc(dateLeft, dateRight) === -sign
+ )
+ const result = sign * (difference - isLastDayNotFull)
+ // Prevent negative zero
+ return result === 0 ? 0 : result
+}
diff --git a/date-fns/src/differenceInDays/test.ts b/date-fns/src/differenceInDays/test.ts
new file mode 100644
index 0000000..4afa6f8
--- /dev/null
+++ b/date-fns/src/differenceInDays/test.ts
@@ -0,0 +1,214 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInDays from '.'
+import { getDstTransitions } from '../../test/dst/tzOffsetTransitions'
+
+describe('differenceInDays', function () {
+ it('returns the number of full days between the given dates', function () {
+ const result = differenceInDays(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 366)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInDays(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -366)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInDays(
+ new Date(2014, 8 /* Sep */, 5, 18, 0).getTime(),
+ new Date(2014, 8 /* Sep */, 4, 6, 0).getTime()
+ )
+ assert(result === 1)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a day, but the given dates are in different calendar days', function () {
+ const result = differenceInDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 4, 23, 59)
+ )
+ assert(result === 0)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInDays(
+ new Date(2014, 8 /* Sep */, 4, 23, 59),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('the time values of the given dates are the same', function () {
+ const result = differenceInDays(
+ new Date(2014, 8 /* Sep */, 6, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ const dstTransitions = getDstTransitions(2017)
+ const dstOnly = dstTransitions.start && dstTransitions.end ? it : it.skip
+ const tz =
+ Intl.DateTimeFormat().resolvedOptions().timeZone || process.env.tz
+ dstOnly(
+ `works across DST start & end in local timezone: ${tz || '(unknown)'}`,
+ function () {
+ const { start, end } = dstTransitions
+ const HOUR = 1000 * 60 * 60
+ const MINUTE = 1000 * 60
+ function sameTime(t1: Date, t2: Date): boolean {
+ return (
+ t1.getHours() === t2.getHours() &&
+ t1.getMinutes() === t2.getMinutes() &&
+ t1.getSeconds() === t2.getSeconds() &&
+ t1.getMilliseconds() === t2.getMilliseconds()
+ )
+ }
+
+ assert(start !== undefined)
+ assert(end !== undefined)
+
+ if (start === undefined || end === undefined) {
+ return
+ }
+
+ // It's usually 1 hour, but for some timezones, e.g. Australia/Lord_Howe, it is 30 minutes
+ const dstOffset =
+ (end.getTimezoneOffset() - start.getTimezoneOffset()) * MINUTE
+
+ // TEST DST START (SPRING)
+
+ // anchor to one hour before the boundary
+ {
+ const a = new Date(start.getTime() - HOUR) // 1 hour before DST
+ const b = new Date(a.getTime() + 24 * HOUR - dstOffset) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR - dstOffset) // 2 days later, same local time
+
+ assert(sameTime(a, b))
+ assert(sameTime(a, c))
+ assert(sameTime(b, c))
+ assert(differenceInDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInDays(b, a) === 1) // 23 hours -> 1 day
+ assert(differenceInDays(c, a) === 2) // 47 hours -> 2 days
+ }
+ // anchor exactly, the boundary
+ {
+ const a = start // exactly when DST starts
+ const b = new Date(a.getTime() + 24 * HOUR) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR) // 2 days later, same local time
+
+ assert(sameTime(a, b))
+ assert(sameTime(a, c))
+ assert(sameTime(b, c))
+ assert(differenceInDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInDays(b, a) === 1) // normal 24-hour day
+ assert(differenceInDays(c, a) === 2) // 2 normal 24-hour days
+ }
+
+ // TEST DST END (FALL)
+
+ // make sure that diffs across a "fall back" DST boundary won't report a full day
+ // until 25 hours have elapsed.
+ {
+ const a = new Date(end.getTime() - HOUR / 2) // 1 hour before Standard Time starts
+ const b = new Date(a.getTime() + 24 * HOUR + dstOffset - 15 * MINUTE) // 1 day later, 15 mins earlier local time
+ const c = new Date(a.getTime() + 48 * HOUR + dstOffset - 15 * MINUTE) // 2 days later, 15 mins earlier local time
+
+ assert(differenceInDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInDays(b, a) === 0) // 24.75 hours -> 0 full days (because hour lost to DST)
+ assert(differenceInDays(c, a) === 1) // 48.75 hours -> 1 full day (because hour lost to DST)
+ }
+ // anchor to one hour before the boundary
+ {
+ const a = new Date(end.getTime() - HOUR) // 1 hour before Standard Time start
+ const b = new Date(a.getTime() + 24 * HOUR + dstOffset) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR + dstOffset) // 2 days later, same local time
+
+ assert(sameTime(a, b))
+ assert(sameTime(a, c))
+ assert(sameTime(b, c))
+ assert(differenceInDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInDays(b, a) === 1) // 25 hours -> 1 day
+ assert(differenceInDays(c, a) === 2) // 49 hours -> 2 days
+ }
+ // anchor to one hour after the boundary
+ {
+ const a = new Date(end.getTime() + HOUR) // 1 hour after Standard Time start
+ const b = new Date(a.getTime() + 24 * HOUR) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR) // 2 days later, same local time
+
+ assert(sameTime(a, b))
+ assert(sameTime(a, c))
+ assert(sameTime(b, c))
+ assert(differenceInDays(c, b) === 1) // normal 24-hour day
+ assert(differenceInDays(b, a) === 1) // normal 24-hour day
+ assert(differenceInDays(c, a) === 2) // 2 normal 24-hour days
+ }
+ // anchor exactly at the boundary
+ {
+ const a = end // exactly when Standard Time starts
+ const b = new Date(a.getTime() + 24 * HOUR) // 1 day later, same local time
+ const c = new Date(a.getTime() + 48 * HOUR) // 2 days later, same local time
+ assert(differenceInDays(b, a) === 1) // normal 24-hour day
+ assert(differenceInDays(c, a) === 2) // 2 normal 24-hour days
+ }
+ }
+ )
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInDays(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInDays(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInDays(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInDays(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInDays.bind(null), TypeError)
+ assert.throws(differenceInDays.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInHours/benchmark.js b/date-fns/src/differenceInHours/benchmark.js
new file mode 100644
index 0000000..895a26b
--- /dev/null
+++ b/date-fns/src/differenceInHours/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInHours from '.'
+import moment from 'moment'
+
+suite('differenceInHours', function () {
+ benchmark('date-fns', function () {
+ return differenceInHours(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.diff(this.momentB, 'hour')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/differenceInHours/index.d.ts b/date-fns/src/differenceInHours/index.d.ts
new file mode 100644
index 0000000..4559ab9
--- /dev/null
+++ b/date-fns/src/differenceInHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInHours } from 'date-fns'
+export default differenceInHours
diff --git a/date-fns/src/differenceInHours/index.js.flow b/date-fns/src/differenceInHours/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInHours/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInHours/index.ts b/date-fns/src/differenceInHours/index.ts
new file mode 100644
index 0000000..3c940b1
--- /dev/null
+++ b/date-fns/src/differenceInHours/index.ts
@@ -0,0 +1,38 @@
+import differenceInMilliseconds from '../differenceInMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+const MILLISECONDS_IN_HOUR = 3600000
+
+/**
+ * @name differenceInHours
+ * @category Hour Helpers
+ * @summary Get the number of hours between the given dates.
+ *
+ * @description
+ * Get the number of hours between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of hours
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?
+ * var result = differenceInHours(
+ * new Date(2014, 6, 2, 19, 0),
+ * new Date(2014, 6, 2, 6, 50)
+ * )
+ * //=> 12
+ */
+export default function differenceInHours(dirtyDateLeft: Date | number, dirtyDateRight: Date | number): number {
+ requiredArgs(2, arguments)
+
+ const diff =
+ differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /
+ MILLISECONDS_IN_HOUR
+ return diff > 0 ? Math.floor(diff) : Math.ceil(diff)
+}
diff --git a/date-fns/src/differenceInHours/test.ts b/date-fns/src/differenceInHours/test.ts
new file mode 100644
index 0000000..303b7fa
--- /dev/null
+++ b/date-fns/src/differenceInHours/test.ts
@@ -0,0 +1,107 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import differenceInHours from '.'
+
+describe('differenceInHours', function() {
+ it('returns the number of hours between the given dates', function() {
+ const result = differenceInHours(
+ new Date(2014, 6 /* Jul */, 2, 20, 0),
+ new Date(2014, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 14)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function() {
+ const result = differenceInHours(
+ new Date(2014, 6 /* Jul */, 2, 6, 0),
+ new Date(2014, 6 /* Jul */, 2, 20, 0)
+ )
+ assert(result === -14)
+ })
+
+ it('accepts timestamps', function() {
+ const result = differenceInHours(
+ new Date(2014, 8 /* Sep */, 5, 18, 0).getTime(),
+ new Date(2014, 8 /* Sep */, 5, 6, 0).getTime()
+ )
+ assert(result === 12)
+ })
+
+ describe('edge cases', function() {
+ it('the difference is less than an hour, but the given dates are in different calendar hours', function() {
+ const result = differenceInHours(
+ new Date(2014, 8 /* Sep */, 5, 12),
+ new Date(2014, 8 /* Sep */, 5, 11, 59)
+ )
+ assert(result === 0)
+ })
+
+ it('the same for the swapped dates', function() {
+ const result = differenceInHours(
+ new Date(2014, 8 /* Sep */, 5, 11, 59),
+ new Date(2014, 8 /* Sep */, 5, 12)
+ )
+ assert(result === 0)
+ })
+
+ it('the difference is an integral number of hours', function() {
+ const result = differenceInHours(
+ new Date(2014, 8 /* Sep */, 5, 13, 0),
+ new Date(2014, 8 /* Sep */, 5, 12, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function() {
+ const result = differenceInHours(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInHours(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function() {
+ const result = differenceInHours(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function() {
+ const result = differenceInHours(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function() {
+ const result = differenceInHours(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ //@ts-expect-error
+ assert.throws(differenceInHours.bind(null), TypeError)
+ //@ts-expect-error
+ assert.throws(differenceInHours.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInISOWeekYears/benchmark.js b/date-fns/src/differenceInISOWeekYears/benchmark.js
new file mode 100644
index 0000000..bd3804e
--- /dev/null
+++ b/date-fns/src/differenceInISOWeekYears/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInISOWeekYears from '.'
+
+suite('differenceInISOWeekYears', function () {
+ benchmark('date-fns', function () {
+ return differenceInISOWeekYears(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/differenceInISOWeekYears/index.d.ts b/date-fns/src/differenceInISOWeekYears/index.d.ts
new file mode 100644
index 0000000..ce7cb57
--- /dev/null
+++ b/date-fns/src/differenceInISOWeekYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInISOWeekYears } from 'date-fns'
+export default differenceInISOWeekYears
diff --git a/date-fns/src/differenceInISOWeekYears/index.js.flow b/date-fns/src/differenceInISOWeekYears/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInISOWeekYears/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInISOWeekYears/index.ts b/date-fns/src/differenceInISOWeekYears/index.ts
new file mode 100644
index 0000000..75f268c
--- /dev/null
+++ b/date-fns/src/differenceInISOWeekYears/index.ts
@@ -0,0 +1,63 @@
+import toDate from '../toDate/index'
+import differenceInCalendarISOWeekYears from '../differenceInCalendarISOWeekYears/index'
+import compareAsc from '../compareAsc/index'
+import subISOWeekYears from '../subISOWeekYears/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInISOWeekYears
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Get the number of full ISO week-numbering years between the given dates.
+ *
+ * @description
+ * Get the number of full ISO week-numbering years between the given dates.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `differenceInISOYears` to `differenceInISOWeekYears`.
+ * "ISO week year" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ * This change makes the name consistent with
+ * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of full ISO week-numbering years
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012?
+ * var result = differenceInISOWeekYears(
+ * new Date(2012, 0, 1),
+ * new Date(2010, 0, 1)
+ * )
+ * //=> 1
+ */
+export default function differenceInISOWeekYears(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ let dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+
+ const sign = compareAsc(dateLeft, dateRight)
+ const difference = Math.abs(
+ differenceInCalendarISOWeekYears(dateLeft, dateRight)
+ )
+ dateLeft = subISOWeekYears(dateLeft, sign * difference)
+
+ // Math.abs(diff in full ISO years - diff in calendar ISO years) === 1
+ // if last calendar ISO year is not full
+ // If so, result must be decreased by 1 in absolute value
+ const isLastISOWeekYearNotFull = Number(
+ compareAsc(dateLeft, dateRight) === -sign
+ )
+ const result = sign * (difference - isLastISOWeekYearNotFull)
+ // Prevent negative zero
+ return result === 0 ? 0 : result
+}
diff --git a/date-fns/src/differenceInISOWeekYears/test.ts b/date-fns/src/differenceInISOWeekYears/test.ts
new file mode 100644
index 0000000..f4192ee
--- /dev/null
+++ b/date-fns/src/differenceInISOWeekYears/test.ts
@@ -0,0 +1,115 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInISOWeekYears from '.'
+
+describe('differenceInISOWeekYears', function () {
+ it('returns the number of full ISO week-numbering years between the given dates', function () {
+ const result = differenceInISOWeekYears(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInISOWeekYears(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -1)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInISOWeekYears(
+ new Date(2014, 6 /* Jul */, 2).getTime(),
+ new Date(2010, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 4)
+ })
+
+ it('handles dates before 100 AD', function () {
+ const firstDate = new Date(0)
+ firstDate.setFullYear(14, 0 /* Jan */, 1)
+ firstDate.setHours(0, 0, 0, 0)
+ const secondDate = new Date(0)
+ secondDate.setFullYear(0, 0 /* Jan */, 1)
+ secondDate.setHours(0, 0, 0, 0)
+ const result = differenceInISOWeekYears(firstDate, secondDate)
+ assert(result === 14)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than an ISO year, but the given dates are in different calendar years', function () {
+ const result = differenceInISOWeekYears(
+ new Date(2012, 0 /* Jan */, 2),
+ new Date(2012, 0 /* Jan */, 1)
+ )
+ assert(result === 0)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInISOWeekYears(
+ new Date(2012, 0 /* Jan */, 1),
+ new Date(2012, 0 /* Jan */, 2)
+ )
+ assert(result === 0)
+ })
+
+ it('the ISO weeks and weekdays of the given dates are the same', function () {
+ const result = differenceInISOWeekYears(
+ new Date(2013, 11 /* Dec */, 30),
+ new Date(2012, 0 /* Jan */, 2)
+ )
+ assert(result === 2)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInISOWeekYears(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInISOWeekYears(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInISOWeekYears(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInISOWeekYears(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInISOWeekYears(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInISOWeekYears.bind(null), TypeError)
+ assert.throws(differenceInISOWeekYears.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInMilliseconds/benchmark.js b/date-fns/src/differenceInMilliseconds/benchmark.js
new file mode 100644
index 0000000..ab4d05a
--- /dev/null
+++ b/date-fns/src/differenceInMilliseconds/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInMilliseconds from '.'
+import moment from 'moment'
+
+suite('differenceInMilliseconds', function () {
+ benchmark('date-fns', function () {
+ return differenceInMilliseconds(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.diff(this.momentB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/differenceInMilliseconds/index.d.ts b/date-fns/src/differenceInMilliseconds/index.d.ts
new file mode 100644
index 0000000..c72a3ab
--- /dev/null
+++ b/date-fns/src/differenceInMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInMilliseconds } from 'date-fns'
+export default differenceInMilliseconds
diff --git a/date-fns/src/differenceInMilliseconds/index.js.flow b/date-fns/src/differenceInMilliseconds/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInMilliseconds/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInMilliseconds/index.ts b/date-fns/src/differenceInMilliseconds/index.ts
new file mode 100644
index 0000000..a0fc552
--- /dev/null
+++ b/date-fns/src/differenceInMilliseconds/index.ts
@@ -0,0 +1,39 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInMilliseconds
+ * @category Millisecond Helpers
+ * @summary Get the number of milliseconds between the given dates.
+ *
+ * @description
+ * Get the number of milliseconds between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of milliseconds
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many milliseconds are between
+ * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?
+ * const result = differenceInMilliseconds(
+ * new Date(2014, 6, 2, 12, 30, 21, 700),
+ * new Date(2014, 6, 2, 12, 30, 20, 600)
+ * )
+ * //=> 1100
+ */
+export default function differenceInMilliseconds(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+ return dateLeft.getTime() - dateRight.getTime()
+}
diff --git a/date-fns/src/differenceInMilliseconds/test.ts b/date-fns/src/differenceInMilliseconds/test.ts
new file mode 100644
index 0000000..366c03b
--- /dev/null
+++ b/date-fns/src/differenceInMilliseconds/test.ts
@@ -0,0 +1,70 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInMilliseconds from '.'
+
+describe('differenceInMilliseconds', function () {
+ it('returns the number of milliseconds between the given dates', function () {
+ const result = differenceInMilliseconds(
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 20, 700),
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 20, 600)
+ )
+ assert(result === 100)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInMilliseconds(
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 20, 600),
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 20, 700)
+ )
+ assert(result === -100)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInMilliseconds(
+ new Date(2014, 8 /* Sep */, 5, 18, 30, 45, 500).getTime(),
+ new Date(2014, 8 /* Sep */, 5, 18, 30, 45, 500).getTime()
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInMilliseconds(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInMilliseconds(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInMilliseconds(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInMilliseconds(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInMilliseconds.bind(null), TypeError)
+ assert.throws(differenceInMilliseconds.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInMinutes/benchmark.js b/date-fns/src/differenceInMinutes/benchmark.js
new file mode 100644
index 0000000..8c77a49
--- /dev/null
+++ b/date-fns/src/differenceInMinutes/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInMinutes from '.'
+import moment from 'moment'
+
+suite('differenceInMinutes', function () {
+ benchmark('date-fns', function () {
+ return differenceInMinutes(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.diff(this.momentB, 'minute')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/differenceInMinutes/index.d.ts b/date-fns/src/differenceInMinutes/index.d.ts
new file mode 100644
index 0000000..28348fc
--- /dev/null
+++ b/date-fns/src/differenceInMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInMinutes } from 'date-fns'
+export default differenceInMinutes
diff --git a/date-fns/src/differenceInMinutes/index.js b/date-fns/src/differenceInMinutes/index.js
new file mode 100644
index 0000000..c1b103c
--- /dev/null
+++ b/date-fns/src/differenceInMinutes/index.js
@@ -0,0 +1,46 @@
+import differenceInMilliseconds from '../differenceInMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+var MILLISECONDS_IN_MINUTE = 60000
+
+/**
+ * @name differenceInMinutes
+ * @category Minute Helpers
+ * @summary Get the number of minutes between the given dates.
+ *
+ * @description
+ * Get the signed number of full (rounded towards 0) minutes between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of minutes
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?
+ * var result = differenceInMinutes(
+ * new Date(2014, 6, 2, 12, 20, 0),
+ * new Date(2014, 6, 2, 12, 7, 59)
+ * )
+ * //=> 12
+ *
+ * @example
+ * // How many minutes are from 10:01:59 to 10:00:00
+ * var result = differenceInMinutes(
+ * new Date(2000, 0, 1, 10, 0, 0),
+ * new Date(2000, 0, 1, 10, 1, 59)
+ * )
+ * //=> -1
+ */
+export default function differenceInMinutes(dirtyDateLeft, dirtyDateRight) {
+ requiredArgs(2, arguments)
+
+ var diff =
+ differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /
+ MILLISECONDS_IN_MINUTE
+ return diff > 0 ? Math.floor(diff) : Math.ceil(diff)
+}
diff --git a/date-fns/src/differenceInMinutes/index.js.flow b/date-fns/src/differenceInMinutes/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInMinutes/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInMinutes/test.js b/date-fns/src/differenceInMinutes/test.js
new file mode 100644
index 0000000..ff6a6c3
--- /dev/null
+++ b/date-fns/src/differenceInMinutes/test.js
@@ -0,0 +1,105 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInMinutes from '.'
+
+describe('differenceInMinutes', function() {
+ it('returns the number of minutes between the given dates', function() {
+ var result = differenceInMinutes(
+ new Date(2014, 6 /* Jul */, 2, 12, 20),
+ new Date(2014, 6 /* Jul */, 2, 12, 6)
+ )
+ assert(result === 14)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function() {
+ var result = differenceInMinutes(
+ new Date(2014, 6 /* Jul */, 2, 12, 6),
+ new Date(2014, 6 /* Jul */, 2, 12, 20)
+ )
+ assert(result === -14)
+ })
+
+ it('accepts timestamps', function() {
+ var result = differenceInMinutes(
+ new Date(2014, 8 /* Sep */, 5, 18, 45).getTime(),
+ new Date(2014, 8 /* Sep */, 5, 18, 15).getTime()
+ )
+ assert(result === 30)
+ })
+
+ describe('edge cases', function() {
+ it('the difference is less than a minute, but the given dates are in different calendar minutes', function() {
+ var result = differenceInMinutes(
+ new Date(2014, 8 /* Sep */, 5, 12, 12),
+ new Date(2014, 8 /* Sep */, 5, 12, 11, 59)
+ )
+ assert(result === 0)
+ })
+
+ it('the same for the swapped dates', function() {
+ var result = differenceInMinutes(
+ new Date(2014, 8 /* Sep */, 5, 12, 11, 59),
+ new Date(2014, 8 /* Sep */, 5, 12, 12)
+ )
+ assert(result === 0)
+ })
+
+ it('the difference is an integral number of minutes', function() {
+ var result = differenceInMinutes(
+ new Date(2014, 8 /* Sep */, 5, 12, 25),
+ new Date(2014, 8 /* Sep */, 5, 12, 15)
+ )
+ assert(result === 10)
+ })
+
+ it('the given dates are the same', function() {
+ var result = differenceInMinutes(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x) {
+ return x === 0 && 1 / x < 0
+ }
+
+ var result = differenceInMinutes(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ var resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function() {
+ var result = differenceInMinutes(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function() {
+ var result = differenceInMinutes(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function() {
+ var result = differenceInMinutes(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(differenceInMinutes.bind(null), TypeError)
+ assert.throws(differenceInMinutes.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInMonths/benchmark.js b/date-fns/src/differenceInMonths/benchmark.js
new file mode 100644
index 0000000..4c2f1c7
--- /dev/null
+++ b/date-fns/src/differenceInMonths/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInMonths from '.'
+import moment from 'moment'
+
+suite('differenceInMonths', function () {
+ benchmark('date-fns', function () {
+ return differenceInMonths(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.diff(this.momentB, 'month')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/differenceInMonths/index.d.ts b/date-fns/src/differenceInMonths/index.d.ts
new file mode 100644
index 0000000..8fbe977
--- /dev/null
+++ b/date-fns/src/differenceInMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInMonths } from 'date-fns'
+export default differenceInMonths
diff --git a/date-fns/src/differenceInMonths/index.js.flow b/date-fns/src/differenceInMonths/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInMonths/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInMonths/index.ts b/date-fns/src/differenceInMonths/index.ts
new file mode 100644
index 0000000..c8a5c14
--- /dev/null
+++ b/date-fns/src/differenceInMonths/index.ts
@@ -0,0 +1,72 @@
+import toDate from '../toDate/index'
+import differenceInCalendarMonths from '../differenceInCalendarMonths/index'
+import compareAsc from '../compareAsc/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import isLastDayOfMonth from '../isLastDayOfMonth/index'
+
+/**
+ * @name differenceInMonths
+ * @category Month Helpers
+ * @summary Get the number of full months between the given dates.
+ *
+ * @description
+ * Get the number of full months between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of full months
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many full months are between 31 January 2014 and 1 September 2014?
+ * var result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))
+ * //=> 7
+ */
+export default function differenceInMonths(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+
+ const sign = compareAsc(dateLeft, dateRight)
+ const difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight))
+ let result
+
+ // Check for the difference of less than month
+ if (difference < 1) {
+ result = 0
+ } else {
+ if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {
+ // This will check if the date is end of Feb and assign a higher end of month date
+ // to compare it with Jan
+ dateLeft.setDate(30)
+ }
+
+ dateLeft.setMonth(dateLeft.getMonth() - sign * difference)
+
+ // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full
+ // If so, result must be decreased by 1 in absolute value
+ let isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign
+
+ // Check for cases of one full calendar month
+ if (
+ isLastDayOfMonth(toDate(dirtyDateLeft)) &&
+ difference === 1 &&
+ compareAsc(dirtyDateLeft, dateRight) === 1
+ ) {
+ isLastMonthNotFull = false
+ }
+
+ result = sign * (difference - Number(isLastMonthNotFull))
+ }
+
+ // Prevent negative zero
+ return result === 0 ? 0 : result
+}
diff --git a/date-fns/src/differenceInMonths/test.ts b/date-fns/src/differenceInMonths/test.ts
new file mode 100644
index 0000000..edebb59
--- /dev/null
+++ b/date-fns/src/differenceInMonths/test.ts
@@ -0,0 +1,188 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInMonths from '.'
+
+describe('differenceInMonths', function () {
+ it('returns the number of full months between the given dates', function () {
+ const result = differenceInMonths(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 12)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInMonths(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -12)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInMonths(
+ new Date(2014, 7 /* Aug */, 2).getTime(),
+ new Date(2010, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 49)
+ })
+
+ describe('edge cases', function () {
+ it('it returns diff of 1 month between Feb 28 2021 and Jan 30 2021', function () {
+ const result = differenceInMonths(
+ new Date(2021, 1 /* Feb */, 28),
+ new Date(2021, 0 /* Jan */, 30)
+ )
+ assert(result === 1)
+ })
+
+ it('it returns diff of 1 month between Feb 28 2021 and Jan 31 2021', function () {
+ const result = differenceInMonths(
+ new Date(2021, 1 /* Feb */, 28),
+ new Date(2021, 0 /* Jan */, 31)
+ )
+ assert(result === 1)
+ })
+
+ it('it returns diff of 1 month between Nov, 30 2021 and Oct, 31 2021', function () {
+ const result = differenceInMonths(
+ new Date(2021, 10 /* Nov */, 30),
+ new Date(2021, 9 /* Oct */, 31)
+ )
+ assert(result === 1)
+ })
+
+ it('it returns diff of 1 month between Oct, 31 2021 and Sep, 30 2021', function () {
+ const result = differenceInMonths(
+ new Date(2021, 9 /* Oct */, 31),
+ new Date(2021, 8 /* Sep */, 30)
+ )
+ assert(result === 1)
+ })
+
+ it('it returns diff of 6 month between Oct, 31 2021 and Apr, 30 2021', function () {
+ const result = differenceInMonths(
+ new Date(2021, 9 /* Oct */, 31),
+ new Date(2021, 3 /* Apr */, 30)
+ )
+ assert(result === 6)
+ })
+
+ it('it returns diff of -1 month between Sep, 30 2021 and Oct, 31 2021', function () {
+ const result = differenceInMonths(
+ new Date(2021, 8 /* Sep */, 30),
+ new Date(2021, 9 /* Oct */, 31)
+ )
+ assert(result === -1)
+ })
+
+ it('the difference is less than a month, but the given dates are in different calendar months', function () {
+ const result = differenceInMonths(
+ new Date(2014, 7 /* Aug */, 1),
+ new Date(2014, 6 /* Jul */, 31)
+ )
+ assert(result === 0)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInMonths(
+ new Date(2014, 6 /* Jul */, 31),
+ new Date(2014, 7 /* Aug */, 1)
+ )
+ assert(result === 0)
+ })
+
+ it('the days of months of the given dates are the same', function () {
+ const result = differenceInMonths(
+ new Date(2014, 8 /* Sep */, 6),
+ new Date(2014, 7 /* Aug */, 6)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInMonths(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInMonths(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInMonths(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInMonths(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInMonths(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInMonths.bind(null), TypeError)
+ assert.throws(differenceInMonths.bind(null, 1), TypeError)
+ })
+
+ describe('edge cases', function () {
+ it('returns the number of full months between the given dates - end of Feb', function () {
+ assert(
+ differenceInMonths(
+ new Date(2012, 1 /* Feb */, 29, 9, 0, 0),
+ new Date(2012, 1 /* Feb */, 29, 10, 0, 0)
+ ) === 0
+ )
+ assert(
+ differenceInMonths(
+ new Date(2012, 1 /* Feb */, 28, 9, 0, 0),
+ new Date(2012, 1 /* Feb */, 29, 10, 0, 0)
+ ) === 0
+ )
+ assert(
+ differenceInMonths(
+ new Date(2012, 1 /* Feb */, 27, 9, 0, 0),
+ new Date(2012, 1 /* Feb */, 27, 10, 0, 0)
+ ) === 0
+ )
+ assert(
+ differenceInMonths(
+ new Date(2012, 1 /* Feb */, 28, 9, 0, 0),
+ new Date(2012, 1 /* Feb */, 28, 10, 0, 0)
+ ) === 0
+ )
+ })
+
+ assert(
+ differenceInMonths(
+ new Date(2021, 1 /* Feb */, 28, 7, 23, 7),
+ new Date(2021, 1 /* Feb */, 28, 7, 38, 18)
+ ) === 0
+ )
+ })
+})
diff --git a/date-fns/src/differenceInQuarters/benchmark.js b/date-fns/src/differenceInQuarters/benchmark.js
new file mode 100644
index 0000000..5210147
--- /dev/null
+++ b/date-fns/src/differenceInQuarters/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInQuarters from '.'
+import moment from 'moment'
+
+suite('differenceInQuarters', function () {
+ benchmark('date-fns', function () {
+ return differenceInQuarters(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.diff(this.momentB, 'quarter')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/differenceInQuarters/index.d.ts b/date-fns/src/differenceInQuarters/index.d.ts
new file mode 100644
index 0000000..9cc693b
--- /dev/null
+++ b/date-fns/src/differenceInQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInQuarters } from 'date-fns'
+export default differenceInQuarters
diff --git a/date-fns/src/differenceInQuarters/index.js.flow b/date-fns/src/differenceInQuarters/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInQuarters/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInQuarters/index.ts b/date-fns/src/differenceInQuarters/index.ts
new file mode 100644
index 0000000..b53a934
--- /dev/null
+++ b/date-fns/src/differenceInQuarters/index.ts
@@ -0,0 +1,34 @@
+import differenceInMonths from '../differenceInMonths/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInQuarters
+ * @category Quarter Helpers
+ * @summary Get the number of full quarters between the given dates.
+ *
+ * @description
+ * Get the number of full quarters between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of full quarters
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many full quarters are between 31 December 2013 and 2 July 2014?
+ * var result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))
+ * //=> 2
+ */
+export default function differenceInQuarters(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const diff = differenceInMonths(dirtyDateLeft, dirtyDateRight) / 3
+ return diff > 0 ? Math.floor(diff) : Math.ceil(diff)
+}
diff --git a/date-fns/src/differenceInQuarters/test.ts b/date-fns/src/differenceInQuarters/test.ts
new file mode 100644
index 0000000..2cdb8d0
--- /dev/null
+++ b/date-fns/src/differenceInQuarters/test.ts
@@ -0,0 +1,104 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInQuarters from '.'
+
+describe('differenceInQuarters', function () {
+ it('returns the number of full quarters between the given dates', function () {
+ const result = differenceInQuarters(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 4)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInQuarters(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -4)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInQuarters(
+ new Date(2014, 9 /* Oct */, 2).getTime(),
+ new Date(2010, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 17)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a quarter, but the given dates are in different calendar quarters', function () {
+ const result = differenceInQuarters(
+ new Date(2014, 6 /* Jul */, 1),
+ new Date(2014, 5 /* Jun */, 30)
+ )
+ assert(result === 0)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInQuarters(
+ new Date(2014, 5 /* Jun */, 30),
+ new Date(2014, 6 /* Jul */, 1)
+ )
+ assert(result === 0)
+ })
+
+ it('the days of months of the given dates are the same', function () {
+ const result = differenceInQuarters(
+ new Date(2014, 3 /* Apr */, 6),
+ new Date(2014, 0 /* Jan */, 6)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInQuarters(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInQuarters(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInQuarters(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInQuarters(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInQuarters(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInQuarters.bind(null), TypeError)
+ assert.throws(differenceInQuarters.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInSeconds/benchmark.js b/date-fns/src/differenceInSeconds/benchmark.js
new file mode 100644
index 0000000..ff52acf
--- /dev/null
+++ b/date-fns/src/differenceInSeconds/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInSeconds from '.'
+import moment from 'moment'
+
+suite('differenceInSeconds', function () {
+ benchmark('date-fns', function () {
+ return differenceInSeconds(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.diff(this.momentB, 'second')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/differenceInSeconds/index.d.ts b/date-fns/src/differenceInSeconds/index.d.ts
new file mode 100644
index 0000000..e317fe2
--- /dev/null
+++ b/date-fns/src/differenceInSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInSeconds } from 'date-fns'
+export default differenceInSeconds
diff --git a/date-fns/src/differenceInSeconds/index.js.flow b/date-fns/src/differenceInSeconds/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInSeconds/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInSeconds/index.ts b/date-fns/src/differenceInSeconds/index.ts
new file mode 100644
index 0000000..d76b0e3
--- /dev/null
+++ b/date-fns/src/differenceInSeconds/index.ts
@@ -0,0 +1,38 @@
+import differenceInMilliseconds from '../differenceInMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInSeconds
+ * @category Second Helpers
+ * @summary Get the number of seconds between the given dates.
+ *
+ * @description
+ * Get the number of seconds between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of seconds
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many seconds are between
+ * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?
+ * const result = differenceInSeconds(
+ * new Date(2014, 6, 2, 12, 30, 20, 0),
+ * new Date(2014, 6, 2, 12, 30, 7, 999)
+ * )
+ * //=> 12
+ */
+export default function differenceInSeconds(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000
+ return diff > 0 ? Math.floor(diff) : Math.ceil(diff)
+}
diff --git a/date-fns/src/differenceInSeconds/test.ts b/date-fns/src/differenceInSeconds/test.ts
new file mode 100644
index 0000000..8e40a32
--- /dev/null
+++ b/date-fns/src/differenceInSeconds/test.ts
@@ -0,0 +1,104 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInSeconds from '.'
+
+describe('differenceInSeconds', function () {
+ it('returns the number of seconds between the given dates', function () {
+ const result = differenceInSeconds(
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 20),
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 6)
+ )
+ assert(result === 14)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInSeconds(
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 6),
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 20)
+ )
+ assert(result === -14)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInSeconds(
+ new Date(2014, 8 /* Sep */, 5, 18, 30, 45).getTime(),
+ new Date(2014, 8 /* Sep */, 5, 18, 30, 15).getTime()
+ )
+ assert(result === 30)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a second, but the given dates are in different calendar seconds', function () {
+ const result = differenceInSeconds(
+ new Date(2014, 8 /* Sep */, 5, 12, 30, 12),
+ new Date(2014, 8 /* Sep */, 5, 12, 30, 11, 999)
+ )
+ assert(result === 0)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInSeconds(
+ new Date(2014, 8 /* Sep */, 5, 12, 30, 11, 999),
+ new Date(2014, 8 /* Sep */, 5, 12, 30, 12)
+ )
+ assert(result === 0)
+ })
+
+ it('the difference is an integral number of seconds', function () {
+ const result = differenceInSeconds(
+ new Date(2014, 8 /* Sep */, 5, 12, 30, 25),
+ new Date(2014, 8 /* Sep */, 5, 12, 30, 15)
+ )
+ assert(result === 10)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInSeconds(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInSeconds(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInSeconds(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInSeconds(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInSeconds(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInSeconds.bind(null), TypeError)
+ assert.throws(differenceInSeconds.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInWeeks/benchmark.js b/date-fns/src/differenceInWeeks/benchmark.js
new file mode 100644
index 0000000..c29909c
--- /dev/null
+++ b/date-fns/src/differenceInWeeks/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInWeeks from '.'
+import moment from 'moment'
+
+suite('differenceInWeeks', function () {
+ benchmark('date-fns', function () {
+ return differenceInWeeks(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.diff(this.momentB, 'week')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/differenceInWeeks/index.d.ts b/date-fns/src/differenceInWeeks/index.d.ts
new file mode 100644
index 0000000..a42614c
--- /dev/null
+++ b/date-fns/src/differenceInWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInWeeks } from 'date-fns'
+export default differenceInWeeks
diff --git a/date-fns/src/differenceInWeeks/index.js.flow b/date-fns/src/differenceInWeeks/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInWeeks/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInWeeks/index.ts b/date-fns/src/differenceInWeeks/index.ts
new file mode 100644
index 0000000..350da2f
--- /dev/null
+++ b/date-fns/src/differenceInWeeks/index.ts
@@ -0,0 +1,55 @@
+import differenceInDays from '../differenceInDays/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInWeeks
+ * @category Week Helpers
+ * @summary Get the number of full weeks between the given dates.
+ *
+ * @description
+ * Get the number of full weeks between two dates. Fractional weeks are
+ * truncated towards zero.
+ *
+ * One "full week" is the distance between a local time in one day to the same
+ * local time 7 days earlier or later. A full week can sometimes be less than
+ * or more than 7*24 hours if a daylight savings change happens between two dates.
+ *
+ * To ignore DST and only measure exact 7*24-hour periods, use this instead:
+ * `Math.floor(differenceInHours(dateLeft, dateRight)/(7*24))|0`.
+ *
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of full weeks
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many full weeks are between 5 July 2014 and 20 July 2014?
+ * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))
+ * //=> 2
+ *
+ * // How many full weeks are between
+ * // 1 March 2020 0:00 and 6 June 2020 0:00 ?
+ * // Note: because local time is used, the
+ * // result will always be 8 weeks (54 days),
+ * // even if DST starts and the period has
+ * // only 54*24-1 hours.
+ * const result = differenceInWeeks(
+ * new Date(2020, 5, 1),
+ * new Date(2020, 2, 6)
+ * )
+ * //=> 8
+ */
+export default function differenceInWeeks(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const diff = differenceInDays(dirtyDateLeft, dirtyDateRight) / 7
+ return diff > 0 ? Math.floor(diff) : Math.ceil(diff)
+}
diff --git a/date-fns/src/differenceInWeeks/test.ts b/date-fns/src/differenceInWeeks/test.ts
new file mode 100644
index 0000000..6e8e05e
--- /dev/null
+++ b/date-fns/src/differenceInWeeks/test.ts
@@ -0,0 +1,104 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInWeeks from '.'
+
+describe('differenceInWeeks', function () {
+ it('returns the number of full weeks between the given dates', function () {
+ const result = differenceInWeeks(
+ new Date(2014, 6 /* Jul */, 8, 18, 0),
+ new Date(2014, 5 /* Jun */, 29, 6, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInWeeks(
+ new Date(2014, 5 /* Jun */, 29, 6, 0),
+ new Date(2014, 6 /* Jul */, 8, 18, 0)
+ )
+ assert(result === -1)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInWeeks(
+ new Date(2014, 6 /* Jul */, 12).getTime(),
+ new Date(2014, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 1)
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a week, but the given dates are in different calendar weeks', function () {
+ const result = differenceInWeeks(
+ new Date(2014, 6 /* Jul */, 6),
+ new Date(2014, 6 /* Jul */, 5)
+ )
+ assert(result === 0)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInWeeks(
+ new Date(2014, 6 /* Jul */, 5),
+ new Date(2014, 6 /* Jul */, 6)
+ )
+ assert(result === 0)
+ })
+
+ it('days of weeks of the given dates are the same', function () {
+ const result = differenceInWeeks(
+ new Date(2014, 6 /* Jul */, 9),
+ new Date(2014, 6 /* Jul */, 2)
+ )
+ assert(result === 1)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInWeeks(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInWeeks(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInWeeks(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInWeeks(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInWeeks(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInWeeks.bind(null), TypeError)
+ assert.throws(differenceInWeeks.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/differenceInYears/benchmark.js b/date-fns/src/differenceInYears/benchmark.js
new file mode 100644
index 0000000..32e905c
--- /dev/null
+++ b/date-fns/src/differenceInYears/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import differenceInYears from '.'
+import moment from 'moment'
+
+suite('differenceInYears', function () {
+ benchmark('date-fns', function () {
+ return differenceInYears(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.diff(this.momentB, 'year')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/differenceInYears/index.d.ts b/date-fns/src/differenceInYears/index.d.ts
new file mode 100644
index 0000000..df839f6
--- /dev/null
+++ b/date-fns/src/differenceInYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInYears } from 'date-fns'
+export default differenceInYears
diff --git a/date-fns/src/differenceInYears/index.js.flow b/date-fns/src/differenceInYears/index.js.flow
new file mode 100644
index 0000000..c799819
--- /dev/null
+++ b/date-fns/src/differenceInYears/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => number
diff --git a/date-fns/src/differenceInYears/index.ts b/date-fns/src/differenceInYears/index.ts
new file mode 100644
index 0000000..111df3d
--- /dev/null
+++ b/date-fns/src/differenceInYears/index.ts
@@ -0,0 +1,51 @@
+import toDate from '../toDate/index'
+import differenceInCalendarYears from '../differenceInCalendarYears/index'
+import compareAsc from '../compareAsc/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name differenceInYears
+ * @category Year Helpers
+ * @summary Get the number of full years between the given dates.
+ *
+ * @description
+ * Get the number of full years between the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the later date
+ * @param {Date|Number} dateRight - the earlier date
+ * @returns {Number} the number of full years
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // How many full years are between 31 December 2013 and 11 February 2015?
+ * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))
+ * //=> 1
+ */
+export default function differenceInYears(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): number {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+
+ const sign = compareAsc(dateLeft, dateRight)
+ const difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight))
+
+ // Set both dates to a valid leap year for accurate comparison when dealing
+ // with leap days
+ dateLeft.setFullYear(1584)
+ dateRight.setFullYear(1584)
+
+ // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full
+ // If so, result must be decreased by 1 in absolute value
+ const isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign
+ const result = sign * (difference - Number(isLastYearNotFull))
+ // Prevent negative zero
+ return result === 0 ? 0 : result
+}
diff --git a/date-fns/src/differenceInYears/test.ts b/date-fns/src/differenceInYears/test.ts
new file mode 100644
index 0000000..60a3866
--- /dev/null
+++ b/date-fns/src/differenceInYears/test.ts
@@ -0,0 +1,146 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import differenceInYears from '.'
+
+describe('differenceInYears', function () {
+ it('returns the number of full years between the given dates', function () {
+ const result = differenceInYears(
+ new Date(2012, 6 /* Jul */, 2, 18, 0),
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('returns a negative number if the time value of the first date is smaller', function () {
+ const result = differenceInYears(
+ new Date(2011, 6 /* Jul */, 2, 6, 0),
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === -1)
+ })
+
+ it('accepts timestamps', function () {
+ const result = differenceInYears(
+ new Date(2014, 6 /* Jul */, 2).getTime(),
+ new Date(2010, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === 4)
+ })
+
+ describe('leap days', function () {
+ it('supports past dates with right side after leap day', () => {
+ const result = differenceInYears(
+ new Date(2004, 1 /* Feb */, 29, 0, 0),
+ new Date(2002, 2 /* Mar */, 1, 0, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('supports past dates with right side before leap day', () => {
+ const result = differenceInYears(
+ new Date(2004, 1 /* Feb */, 29, 0, 0),
+ new Date(2002, 1 /* Feb */, 28, 0, 0)
+ )
+ assert(result === 2)
+ })
+
+ it('supports future dates', () => {
+ const result = differenceInYears(
+ new Date(2004, 1 /* Feb */, 29, 0, 0),
+ new Date(2006, 2 /* Mar */, 1, 0, 0)
+ )
+ assert(result === -2)
+ })
+
+ it('supports equal dates of same year', () => {
+ const result = differenceInYears(
+ new Date(2004, 1 /* Feb */, 29, 0, 0),
+ new Date(2004, 1 /* Feb */, 29, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('supports equal dates of different years', () => {
+ const result = differenceInYears(
+ new Date(2008, 1 /* Feb */, 29, 0, 0),
+ new Date(2004, 1 /* Feb */, 29, 0, 0)
+ )
+ assert(result === 4)
+ })
+ })
+
+ describe('edge cases', function () {
+ it('the difference is less than a year, but the given dates are in different calendar years', function () {
+ const result = differenceInYears(
+ new Date(2015, 0 /* Jan */, 1),
+ new Date(2014, 11 /* Dec */, 31)
+ )
+ assert(result === 0)
+ })
+
+ it('the same for the swapped dates', function () {
+ const result = differenceInYears(
+ new Date(2014, 11 /* Dec */, 31),
+ new Date(2015, 0 /* Jan */, 1)
+ )
+ assert(result === 0)
+ })
+
+ it('the days and months of the given dates are the same', function () {
+ const result = differenceInYears(
+ new Date(2014, 8 /* Sep */, 5),
+ new Date(2012, 8 /* Sep */, 5)
+ )
+ assert(result === 2)
+ })
+
+ it('the given dates are the same', function () {
+ const result = differenceInYears(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === 0)
+ })
+
+ it('does not return -0 when the given dates are the same', () => {
+ function isNegativeZero(x: number): boolean {
+ return x === 0 && 1 / x < 0
+ }
+
+ const result = differenceInYears(
+ new Date(2014, 8 /* Sep */, 5, 0, 0),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+
+ const resultIsNegative = isNegativeZero(result)
+ assert(resultIsNegative === false)
+ })
+ })
+
+ it('returns NaN if the first date is `Invalid Date`', function () {
+ const result = differenceInYears(
+ new Date(NaN),
+ new Date(2017, 0 /* Jan */, 1)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the second date is `Invalid Date`', function () {
+ const result = differenceInYears(
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ )
+ assert(isNaN(result))
+ })
+
+ it('returns NaN if the both dates are `Invalid Date`', function () {
+ const result = differenceInYears(new Date(NaN), new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(differenceInYears.bind(null), TypeError)
+ assert.throws(differenceInYears.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/eachDayOfInterval/benchmark.js b/date-fns/src/eachDayOfInterval/benchmark.js
new file mode 100644
index 0000000..45d8e44
--- /dev/null
+++ b/date-fns/src/eachDayOfInterval/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import eachDayOfInterval from '.'
+
+suite('eachDayOfInterval', function () {
+ benchmark('date-fns', function () {
+ return eachDayOfInterval({start: this.dateA, end: this.dateB})
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/eachDayOfInterval/index.d.ts b/date-fns/src/eachDayOfInterval/index.d.ts
new file mode 100644
index 0000000..80fc0dc
--- /dev/null
+++ b/date-fns/src/eachDayOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachDayOfInterval } from 'date-fns'
+export default eachDayOfInterval
diff --git a/date-fns/src/eachDayOfInterval/index.js.flow b/date-fns/src/eachDayOfInterval/index.js.flow
new file mode 100644
index 0000000..5a9b8e4
--- /dev/null
+++ b/date-fns/src/eachDayOfInterval/index.js.flow
@@ -0,0 +1,57 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ interval: Interval,
+ options?: {
+ step?: number,
+ }
+) => Date[]
diff --git a/date-fns/src/eachDayOfInterval/index.ts b/date-fns/src/eachDayOfInterval/index.ts
new file mode 100644
index 0000000..fded968
--- /dev/null
+++ b/date-fns/src/eachDayOfInterval/index.ts
@@ -0,0 +1,98 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name eachDayOfInterval
+ * @category Interval Helpers
+ * @summary Return the array of dates within the specified time interval.
+ *
+ * @description
+ * Return the array of dates within the specified time interval.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `eachDay` to `eachDayOfInterval`.
+ * This change was made to mirror the use of the word "interval" in standard ISO 8601:2004 terminology:
+ *
+ * ```
+ * 2.1.3
+ * time interval
+ * part of the time axis limited by two instants
+ * ```
+ *
+ * Also, this function now accepts an object with `start` and `end` properties
+ * instead of two arguments as an interval.
+ * This function now throws `RangeError` if the start of the interval is after its end
+ * or if any date in the interval is `Invalid Date`.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ *
+ * eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))
+ *
+ * // v2.0.0 onward
+ *
+ * eachDayOfInterval(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }
+ * )
+ * ```
+ *
+ * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @param {Object} [options] - an object with options.
+ * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.
+ * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.step` must be a number greater than 1
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // Each day between 6 October 2014 and 10 October 2014:
+ * const result = eachDayOfInterval({
+ * start: new Date(2014, 9, 6),
+ * end: new Date(2014, 9, 10)
+ * })
+ * //=> [
+ * // Mon Oct 06 2014 00:00:00,
+ * // Tue Oct 07 2014 00:00:00,
+ * // Wed Oct 08 2014 00:00:00,
+ * // Thu Oct 09 2014 00:00:00,
+ * // Fri Oct 10 2014 00:00:00
+ * // ]
+ */
+export default function eachDayOfInterval(
+ dirtyInterval: Interval,
+ options?: { step?: number }
+): Date[] {
+ requiredArgs(1, arguments)
+
+ const interval = dirtyInterval || {}
+ const startDate = toDate(interval.start)
+ const endDate = toDate(interval.end)
+
+ const endTime = endDate.getTime()
+
+ // Throw an exception if start date is after end date or if any date is `Invalid Date`
+ if (!(startDate.getTime() <= endTime)) {
+ throw new RangeError('Invalid interval')
+ }
+
+ const dates = []
+
+ const currentDate = startDate
+ currentDate.setHours(0, 0, 0, 0)
+
+ const step = options && 'step' in options ? Number(options.step) : 1
+ if (step < 1 || isNaN(step))
+ throw new RangeError('`options.step` must be a number greater than 1')
+
+ while (currentDate.getTime() <= endTime) {
+ dates.push(toDate(currentDate))
+ currentDate.setDate(currentDate.getDate() + step)
+ currentDate.setHours(0, 0, 0, 0)
+ }
+
+ return dates
+}
diff --git a/date-fns/src/eachDayOfInterval/test.ts b/date-fns/src/eachDayOfInterval/test.ts
new file mode 100644
index 0000000..2ace8e1
--- /dev/null
+++ b/date-fns/src/eachDayOfInterval/test.ts
@@ -0,0 +1,137 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import eachDayOfInterval from '.'
+
+describe('eachDayOfInterval', () => {
+ it('returns an array with starts of days from the day of the start date to the day of the end date', () => {
+ const result = eachDayOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6),
+ end: new Date(2014, 9 /* Oct */, 12)
+ })
+ assert.deepStrictEqual(result, [
+ new Date(2014, 9 /* Oct */, 6),
+ new Date(2014, 9 /* Oct */, 7),
+ new Date(2014, 9 /* Oct */, 8),
+ new Date(2014, 9 /* Oct */, 9),
+ new Date(2014, 9 /* Oct */, 10),
+ new Date(2014, 9 /* Oct */, 11),
+ new Date(2014, 9 /* Oct */, 12)
+ ])
+ })
+
+ it('accepts timestamps', () => {
+ const result = eachDayOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6).getTime(),
+ end: new Date(2014, 9 /* Oct */, 12).getTime()
+ })
+ assert.deepStrictEqual(result, [
+ new Date(2014, 9 /* Oct */, 6),
+ new Date(2014, 9 /* Oct */, 7),
+ new Date(2014, 9 /* Oct */, 8),
+ new Date(2014, 9 /* Oct */, 9),
+ new Date(2014, 9 /* Oct */, 10),
+ new Date(2014, 9 /* Oct */, 11),
+ new Date(2014, 9 /* Oct */, 12)
+ ])
+ })
+
+ it('handles the dates that are not starts of days', () => {
+ const result = eachDayOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 6, 35),
+ end: new Date(2014, 9 /* Oct */, 12, 22, 15)
+ })
+ assert.deepStrictEqual(result, [
+ new Date(2014, 9 /* Oct */, 6),
+ new Date(2014, 9 /* Oct */, 7),
+ new Date(2014, 9 /* Oct */, 8),
+ new Date(2014, 9 /* Oct */, 9),
+ new Date(2014, 9 /* Oct */, 10),
+ new Date(2014, 9 /* Oct */, 11),
+ new Date(2014, 9 /* Oct */, 12)
+ ])
+ })
+
+ it('returns one day if the both arguments are on the same day', () => {
+ const result = eachDayOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 14),
+ end: new Date(2014, 9 /* Oct */, 6, 15)
+ })
+ assert.deepStrictEqual(result, [new Date(2014, 9 /* Oct */, 6)])
+ })
+
+ it('returns one day if the both arguments are the same', () => {
+ const result = eachDayOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 14),
+ end: new Date(2014, 9 /* Oct */, 6, 14)
+ })
+ assert.deepStrictEqual(result, [new Date(2014, 9 /* Oct */, 6)])
+ })
+
+ it('throws an exception if the start date is after the end date', () => {
+ const block = eachDayOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date is `Invalid Date`', () => {
+ var block = eachDayOfInterval.bind(null, {
+ start: new Date(NaN),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date is `Invalid Date`', () => {
+ var block = eachDayOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(NaN)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the interval is undefined', () => {
+ var block = eachDayOfInterval.bind(
+ null,
+ //@ts-expect-error
+ undefined
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ assert.throws(eachDayOfInterval.bind(null), TypeError)
+ })
+
+ describe('options.step', () => {
+ const interval = {
+ start: new Date(2014, 9 /* Oct */, 6),
+ end: new Date(2014, 9 /* Oct */, 13)
+ }
+
+ const stepError = /^RangeError: `options.step` must be a number greater than 1$/
+
+ it('returns an array with starts of days from the day of the start date to the day of the end date with the given step', () => {
+ const result = eachDayOfInterval(interval, { step: 3 })
+ assert.deepStrictEqual(result, [
+ new Date(2014, 9 /* Oct */, 6),
+ new Date(2014, 9 /* Oct */, 9),
+ new Date(2014, 9 /* Oct */, 12)
+ ])
+ })
+
+ it('throws TypeError error if `options.step` is less than 1', () => {
+ assert.throws(() => eachDayOfInterval(interval, { step: 0 }), stepError)
+ assert.throws(() => eachDayOfInterval(interval, { step: -3 }), stepError)
+ })
+
+ it('throws TypeError error if `options.step` is NaN', () => {
+ //@ts-expect-error
+ assert.throws(() => eachDayOfInterval(interval, { step: 'w' }), stepError)
+ assert.throws(() => eachDayOfInterval(interval, { step: NaN }), stepError)
+ })
+ })
+})
diff --git a/date-fns/src/eachHourOfInterval/benchmark.js b/date-fns/src/eachHourOfInterval/benchmark.js
new file mode 100644
index 0000000..c96c557
--- /dev/null
+++ b/date-fns/src/eachHourOfInterval/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import eachHourOfInterval from '.'
+
+suite(
+ 'eachHourOfInterval',
+ function() {
+ benchmark('date-fns', function() {
+ return eachHourOfInterval({ start: this.dateA, end: this.dateB })
+ })
+ },
+ {
+ setup: function() {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+ }
+)
diff --git a/date-fns/src/eachHourOfInterval/index.d.ts b/date-fns/src/eachHourOfInterval/index.d.ts
new file mode 100644
index 0000000..4c3addd
--- /dev/null
+++ b/date-fns/src/eachHourOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachHourOfInterval } from 'date-fns'
+export default eachHourOfInterval
diff --git a/date-fns/src/eachHourOfInterval/index.js.flow b/date-fns/src/eachHourOfInterval/index.js.flow
new file mode 100644
index 0000000..5a9b8e4
--- /dev/null
+++ b/date-fns/src/eachHourOfInterval/index.js.flow
@@ -0,0 +1,57 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ interval: Interval,
+ options?: {
+ step?: number,
+ }
+) => Date[]
diff --git a/date-fns/src/eachHourOfInterval/index.ts b/date-fns/src/eachHourOfInterval/index.ts
new file mode 100644
index 0000000..27ad6dc
--- /dev/null
+++ b/date-fns/src/eachHourOfInterval/index.ts
@@ -0,0 +1,69 @@
+import addHours from '../addHours/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { Interval, StepOptions } from '../types'
+
+/**
+ * @name eachHourOfInterval
+ * @category Interval Helpers
+ * @summary Return the array of hours within the specified time interval.
+ *
+ * @description
+ * Return the array of hours within the specified time interval.
+ *
+ * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @param {Object} [options] - an object with options.
+ * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.
+ * @returns {Date[]} the array with starts of hours from the hour of the interval start to the hour of the interval end
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.step` must be a number greater than 1
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // Each hour between 6 October 2014, 12:00 and 6 October 2014, 15:00
+ * var result = eachHourOfInterval({
+ * start: new Date(2014, 9, 6, 12),
+ * end: new Date(2014, 9, 6, 15)
+ * })
+ * //=> [
+ * // Mon Oct 06 2014 12:00:00,
+ * // Mon Oct 06 2014 13:00:00,
+ * // Mon Oct 06 2014 14:00:00,
+ * // Mon Oct 06 2014 15:00:00
+ * // ]
+ */
+export default function eachHourOfInterval(
+ dirtyInterval: Interval,
+ options?: StepOptions
+): Date[] {
+ requiredArgs(1, arguments)
+
+ const interval = dirtyInterval || {}
+ const startDate = toDate(interval.start)
+ const endDate = toDate(interval.end)
+
+ const startTime = startDate.getTime()
+ const endTime = endDate.getTime()
+
+ // Throw an exception if start date is after end date or if any date is `Invalid Date`
+ if (!(startTime <= endTime)) {
+ throw new RangeError('Invalid interval')
+ }
+
+ const dates = []
+
+ let currentDate = startDate
+ currentDate.setMinutes(0, 0, 0)
+
+ const step = options && 'step' in options ? Number(options.step) : 1
+ if (step < 1 || isNaN(step))
+ throw new RangeError('`options.step` must be a number greater than 1')
+
+ while (currentDate.getTime() <= endTime) {
+ dates.push(toDate(currentDate))
+ currentDate = addHours(currentDate, step)
+ }
+
+ return dates
+}
diff --git a/date-fns/src/eachHourOfInterval/test.ts b/date-fns/src/eachHourOfInterval/test.ts
new file mode 100644
index 0000000..4bdaa05
--- /dev/null
+++ b/date-fns/src/eachHourOfInterval/test.ts
@@ -0,0 +1,134 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import eachHourOfInterval from '.'
+
+describe('eachHourOfInterval', () => {
+ it('returns an array with starts of hours from the hour of the start date to the hour of the end date', () => {
+ const result = eachHourOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 12),
+ end: new Date(2014, 9 /* Oct */, 6, 15)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 9 /* Oct */, 6, 12),
+ new Date(2014, 9 /* Oct */, 6, 13),
+ new Date(2014, 9 /* Oct */, 6, 14),
+ new Date(2014, 9 /* Oct */, 6, 15)
+ ])
+ })
+
+ it('accepts timestamps', () => {
+ const result = eachHourOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 12).getTime(),
+ end: new Date(2014, 9 /* Oct */, 6, 15).getTime()
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 9 /* Oct */, 6, 12),
+ new Date(2014, 9 /* Oct */, 6, 13),
+ new Date(2014, 9 /* Oct */, 6, 14),
+ new Date(2014, 9 /* Oct */, 6, 15)
+ ])
+ })
+
+ it('handles the hours that are not starts of hours', () => {
+ const result = eachHourOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 12, 59, 59, 999),
+ end: new Date(2014, 9 /* Oct */, 6, 15, 59, 59, 999)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 9 /* Oct */, 6, 12),
+ new Date(2014, 9 /* Oct */, 6, 13),
+ new Date(2014, 9 /* Oct */, 6, 14),
+ new Date(2014, 9 /* Oct */, 6, 15)
+ ])
+ })
+
+ it('returns one hour if the both arguments are on the same hour', () => {
+ const result = eachHourOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 12, 35),
+ end: new Date(2014, 9 /* Oct */, 6, 12, 47)
+ })
+ assert.deepEqual(result, [new Date(2014, 9 /* Oct */, 6, 12)])
+ })
+
+ it('returns one hour if the both arguments are the same', () => {
+ const result = eachHourOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 12, 35),
+ end: new Date(2014, 9 /* Oct */, 6, 12, 35)
+ })
+ assert.deepEqual(result, [new Date(2014, 9 /* Oct */, 6, 12)])
+ })
+
+ it('throws an exception if the start date is after the end date', () => {
+ const block = eachHourOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12, 35, 0, 0, 1),
+ end: new Date(2014, 9 /* Oct */, 12, 35, 0, 0, 0)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date is `Invalid Date`', () => {
+ const block = eachHourOfInterval.bind(null, {
+ start: new Date(NaN),
+ end: new Date(2014, 9 /* Oct */, 6, 12)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date is `Invalid Date`', () => {
+ const block = eachHourOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12, 12),
+ end: new Date(NaN)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the interval is undefined', () => {
+ const block = eachHourOfInterval.bind(
+ null,
+ // $ExpectedMistake
+ undefined
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ assert.throws(eachHourOfInterval.bind(null), TypeError)
+ })
+
+ describe('options.step', () => {
+ const interval = {
+ start: new Date(2014, 9 /* Oct */, 6, 12),
+ end: new Date(2014, 9 /* Oct */, 6, 18)
+ }
+
+ const stepError = /^RangeError: `options.step` must be a number greater than 1$/
+
+ it('returns an array with starts of hours from the hour of the start date to the hour of the end date with the given step', () => {
+ const result = eachHourOfInterval(interval, { step: 3 })
+ assert.deepEqual(result, [
+ new Date(2014, 9 /* Oct */, 6, 12),
+ new Date(2014, 9 /* Oct */, 6, 15),
+ new Date(2014, 9 /* Oct */, 6, 18)
+ ])
+ })
+
+ it('throws TypeError error if `options.step` is less than 1', () => {
+ assert.throws(() => eachHourOfInterval(interval, { step: 0 }), stepError)
+ assert.throws(() => eachHourOfInterval(interval, { step: -3 }), stepError)
+ })
+
+ it('throws TypeError error if `options.step` is NaN', () => {
+ // $ExpectedMistake
+ assert.throws(
+ () => eachHourOfInterval(interval, { step: 'w' }),
+ stepError
+ )
+ assert.throws(
+ () => eachHourOfInterval(interval, { step: NaN }),
+ stepError
+ )
+ })
+ })
+})
diff --git a/date-fns/src/eachMinuteOfInterval/benchmark.js b/date-fns/src/eachMinuteOfInterval/benchmark.js
new file mode 100644
index 0000000..0277233
--- /dev/null
+++ b/date-fns/src/eachMinuteOfInterval/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import eachMinuteOfInterval from '.'
+
+suite(
+ 'eachMinuteOfInterval',
+ function() {
+ benchmark('date-fns', function() {
+ return eachMinuteOfInterval({ start: this.dateA, end: this.dateB })
+ })
+ },
+ {
+ setup: function() {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 300000)
+ }
+ }
+)
diff --git a/date-fns/src/eachMinuteOfInterval/index.d.ts b/date-fns/src/eachMinuteOfInterval/index.d.ts
new file mode 100644
index 0000000..f96a5e9
--- /dev/null
+++ b/date-fns/src/eachMinuteOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachMinuteOfInterval } from 'date-fns'
+export default eachMinuteOfInterval
diff --git a/date-fns/src/eachMinuteOfInterval/index.js.flow b/date-fns/src/eachMinuteOfInterval/index.js.flow
new file mode 100644
index 0000000..5a9b8e4
--- /dev/null
+++ b/date-fns/src/eachMinuteOfInterval/index.js.flow
@@ -0,0 +1,57 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ interval: Interval,
+ options?: {
+ step?: number,
+ }
+) => Date[]
diff --git a/date-fns/src/eachMinuteOfInterval/index.ts b/date-fns/src/eachMinuteOfInterval/index.ts
new file mode 100644
index 0000000..682b6c0
--- /dev/null
+++ b/date-fns/src/eachMinuteOfInterval/index.ts
@@ -0,0 +1,70 @@
+import addMinutes from '../addMinutes/index'
+import toDate from '../toDate/index'
+import startOfMinute from '../startOfMinute/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+import { Interval, StepOptions } from '../types'
+
+/**
+ * @name eachMinuteOfInterval
+ * @category Interval Helpers
+ * @summary Return the array of minutes within the specified time interval.
+ *
+ * @description
+ * Returns the array of minutes within the specified time interval.
+ *
+ * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @param {Object} [options] - an object with options.
+ * @param {Number} [options.step=1] - the step to increment by. The starts of minutes from the hour of the interval start to the hour of the interval end
+ * @throws {TypeError} 1 argument requie value should be more than 1.
+ * @returns {Date[]} the array withred
+ * @throws {RangeError} `options.step` must be a number equal or greater than 1
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // Each minute between 14 October 2020, 13:00 and 14 October 2020, 13:03
+ * const result = eachMinuteOfInterval({
+ * start: new Date(2014, 9, 14, 13),
+ * end: new Date(2014, 9, 14, 13, 3)
+ * })
+ * //=> [
+ * // Wed Oct 14 2014 13:00:00,
+ * // Wed Oct 14 2014 13:01:00,
+ * // Wed Oct 14 2014 13:02:00,
+ * // Wed Oct 14 2014 13:03:00
+ * // ]
+ */
+export default function eachMinuteOfInterval(
+ interval: Interval,
+ options?: StepOptions
+): Date[] {
+ requiredArgs(1, arguments)
+
+ const startDate = startOfMinute(toDate(interval.start))
+ const endDate = startOfMinute(toDate(interval.end))
+
+ const startTime = startDate.getTime()
+ const endTime = endDate.getTime()
+
+ if (startTime >= endTime) {
+ throw new RangeError('Invalid interval')
+ }
+
+ const dates = []
+
+ let currentDate = startDate
+
+ const step = options && 'step' in options ? Number(options.step) : 1
+ if (step < 1 || isNaN(step))
+ throw new RangeError(
+ '`options.step` must be a number equal or greater than 1'
+ )
+
+ while (currentDate.getTime() <= endTime) {
+ dates.push(toDate(currentDate))
+ currentDate = addMinutes(currentDate, step)
+ }
+
+ return dates
+}
diff --git a/date-fns/src/eachMinuteOfInterval/test.ts b/date-fns/src/eachMinuteOfInterval/test.ts
new file mode 100644
index 0000000..c4dab70
--- /dev/null
+++ b/date-fns/src/eachMinuteOfInterval/test.ts
@@ -0,0 +1,99 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+
+import eachMinuteOfInterval from '.'
+
+describe('eachMinuteOfInterval', () => {
+ it('should return an array of Date objects containing a Date for each minute between the interval', () => {
+ const result = eachMinuteOfInterval({
+ start: new Date(2020, 10, 14, 13, 0),
+ end: new Date(2020, 10, 14, 13, 5)
+ })
+
+ assert.deepEqual(result, [
+ new Date(2020, 10, 14, 13, 0),
+ new Date(2020, 10, 14, 13, 1),
+ new Date(2020, 10, 14, 13, 2),
+ new Date(2020, 10, 14, 13, 3),
+ new Date(2020, 10, 14, 13, 4),
+ new Date(2020, 10, 14, 13, 5)
+ ])
+ })
+
+ it('should handle all the minutes that are not in the begining', () => {
+ const result = eachMinuteOfInterval({
+ start: new Date(2020, 10, 14, 13, 0, 33),
+ end: new Date(2020, 10, 14, 13, 2)
+ })
+
+ assert.deepEqual(result[0], new Date(2020, 10, 14, 13))
+ assert.deepEqual(result[2], new Date(2020, 10, 14, 13, 2))
+ })
+
+ it('should accept timestamps', () => {
+ const start = new Date(2020, 10, 14, 13, 0).getTime()
+ const end = new Date(2020, 10, 14, 13, 2).getTime()
+
+ const result = eachMinuteOfInterval({
+ start,
+ end
+ })
+
+ assert.deepEqual(result, [
+ new Date(2020, 10, 14, 13, 0),
+ new Date(2020, 10, 14, 13, 1),
+ new Date(2020, 10, 14, 13, 2)
+ ])
+ })
+
+ it('throws an exception if the start date is after the end date', () => {
+ const block = eachMinuteOfInterval.bind(null, {
+ start: new Date(2014, 10, 14, 10),
+ end: new Date(2014, 10, 14, 5)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ describe('options.step', () => {
+ const interval = {
+ start: new Date(2020, 9, 14, 13, 1),
+ end: new Date(2020, 9, 14, 13, 7)
+ }
+
+ const stepError = /^RangeError: `options.step` must be a number equal or greater than 1$/
+
+ it('returns an array with starts of hours from the hour of the start date to the hour of the end date with the given step', () => {
+ const result = eachMinuteOfInterval(interval, { step: 3 })
+ assert.deepEqual(result, [
+ new Date(2020, 9, 14, 13, 1),
+ new Date(2020, 9, 14, 13, 4),
+ new Date(2020, 9, 14, 13, 7)
+ ])
+ })
+
+ it('throws TypeError error if `options.step` is less than 1', () => {
+ assert.throws(
+ () => eachMinuteOfInterval(interval, { step: 0 }),
+ stepError
+ )
+ assert.throws(
+ () => eachMinuteOfInterval(interval, { step: -3 }),
+ stepError
+ )
+ })
+
+ it('throws TypeError error if `options.step` is NaN', () => {
+ // $ExpectedMistake
+ assert.throws(
+ () => eachMinuteOfInterval(interval, { step: 'w' }),
+ stepError
+ )
+ assert.throws(
+ () => eachMinuteOfInterval(interval, { step: NaN }),
+ stepError
+ )
+ })
+ })
+})
diff --git a/date-fns/src/eachMonthOfInterval/index.d.ts b/date-fns/src/eachMonthOfInterval/index.d.ts
new file mode 100644
index 0000000..bda4a18
--- /dev/null
+++ b/date-fns/src/eachMonthOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachMonthOfInterval } from 'date-fns'
+export default eachMonthOfInterval
diff --git a/date-fns/src/eachMonthOfInterval/index.js.flow b/date-fns/src/eachMonthOfInterval/index.js.flow
new file mode 100644
index 0000000..30230a5
--- /dev/null
+++ b/date-fns/src/eachMonthOfInterval/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (interval: Interval) => Date[]
diff --git a/date-fns/src/eachMonthOfInterval/index.ts b/date-fns/src/eachMonthOfInterval/index.ts
new file mode 100644
index 0000000..f946338
--- /dev/null
+++ b/date-fns/src/eachMonthOfInterval/index.ts
@@ -0,0 +1,59 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name eachMonthOfInterval
+ * @category Interval Helpers
+ * @summary Return the array of months within the specified time interval.
+ *
+ * @description
+ * Return the array of months within the specified time interval.
+ *
+ * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @returns {Date[]} the array with starts of months from the month of the interval start to the month of the interval end
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // Each month between 6 February 2014 and 10 August 2014:
+ * var result = eachMonthOfInterval({
+ * start: new Date(2014, 1, 6),
+ * end: new Date(2014, 7, 10)
+ * })
+ * //=> [
+ * // Sat Feb 01 2014 00:00:00,
+ * // Sat Mar 01 2014 00:00:00,
+ * // Tue Apr 01 2014 00:00:00,
+ * // Thu May 01 2014 00:00:00,
+ * // Sun Jun 01 2014 00:00:00,
+ * // Tue Jul 01 2014 00:00:00,
+ * // Fri Aug 01 2014 00:00:00
+ * // ]
+ */
+export default function eachMonthOfInterval(dirtyInterval: Interval) {
+ requiredArgs(1, arguments)
+
+ const interval = dirtyInterval || {}
+ const startDate = toDate(interval.start)
+ const endDate = toDate(interval.end)
+
+ const endTime = endDate.getTime()
+ const dates = []
+
+ // Throw an exception if start date is after end date or if any date is `Invalid Date`
+ if (!(startDate.getTime() <= endTime)) {
+ throw new RangeError('Invalid interval')
+ }
+
+ const currentDate = startDate
+ currentDate.setHours(0, 0, 0, 0)
+ currentDate.setDate(1)
+
+ while (currentDate.getTime() <= endTime) {
+ dates.push(toDate(currentDate))
+ currentDate.setMonth(currentDate.getMonth() + 1)
+ }
+
+ return dates
+}
diff --git a/date-fns/src/eachMonthOfInterval/test.ts b/date-fns/src/eachMonthOfInterval/test.ts
new file mode 100644
index 0000000..45f58db
--- /dev/null
+++ b/date-fns/src/eachMonthOfInterval/test.ts
@@ -0,0 +1,120 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import eachMonthOfInterval from '.'
+
+describe('eachMonthOfInterval', function() {
+ it('returns an array with starts of months from the month of the start date to the month of the end date', function() {
+ const result = eachMonthOfInterval({
+ start: new Date(2014, 2 /* Mar */, 6),
+ end: new Date(2014, 7 /* Aug */, 12)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 2 /* Mar */, 1),
+ new Date(2014, 3 /* Apr */, 1),
+ new Date(2014, 4 /* May */, 1),
+ new Date(2014, 5 /* Jun */, 1),
+ new Date(2014, 6 /* Jul */, 1),
+ new Date(2014, 7 /* Aug */, 1)
+ ])
+ })
+
+ it('accepts timestamps', function() {
+ const result = eachMonthOfInterval({
+ start: new Date(2014, 2 /* Mar */, 6).getTime(),
+ end: new Date(2014, 7 /* Aug */, 12).getTime()
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 2 /* Mar */, 1),
+ new Date(2014, 3 /* Apr */, 1),
+ new Date(2014, 4 /* May */, 1),
+ new Date(2014, 5 /* Jun */, 1),
+ new Date(2014, 6 /* Jul */, 1),
+ new Date(2014, 7 /* Aug */, 1)
+ ])
+ })
+
+ it('handles the dates that are not starts of days', function() {
+ const result = eachMonthOfInterval({
+ start: new Date(2014, 2 /* Mar */, 6, 6, 35),
+ end: new Date(2014, 7 /* Aug */, 12, 22, 15)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 2 /* Mar */, 1),
+ new Date(2014, 3 /* Apr */, 1),
+ new Date(2014, 4 /* May */, 1),
+ new Date(2014, 5 /* Jun */, 1),
+ new Date(2014, 6 /* Jul */, 1),
+ new Date(2014, 7 /* Aug */, 1)
+ ])
+ })
+
+ it('handles the dates that are not containing days', function() {
+ const result = eachMonthOfInterval({
+ start: new Date(2014, 2 /* Mar */),
+ end: new Date(2014, 7 /* Aug */)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 2 /* Mar */, 1),
+ new Date(2014, 3 /* Apr */, 1),
+ new Date(2014, 4 /* May */, 1),
+ new Date(2014, 5 /* Jun */, 1),
+ new Date(2014, 6 /* Jul */, 1),
+ new Date(2014, 7 /* Aug */, 1)
+ ])
+ })
+
+ it('returns one month if the both arguments are on the same month', function() {
+ const result = eachMonthOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 14),
+ end: new Date(2014, 9 /* Oct */, 9, 15)
+ })
+ assert.deepEqual(result, [new Date(2014, 9 /* Oct */, 1)])
+ })
+
+ it('returns one month if the both arguments are the same', function() {
+ const result = eachMonthOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 14),
+ end: new Date(2014, 9 /* Oct */, 6, 14)
+ })
+ assert.deepEqual(result, [new Date(2014, 9 /* Oct */, 1)])
+ })
+
+ it('throws an exception if the start date is after the end date', function() {
+ const block = eachMonthOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date is `Invalid Date`', function() {
+ const block = eachMonthOfInterval.bind(null, {
+ start: new Date(NaN),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date is `Invalid Date`', function() {
+ const block = eachMonthOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(NaN)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the interval is undefined', function() {
+ const block = eachMonthOfInterval.bind(
+ null,
+ // $ExpectedMistake
+ undefined
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(eachMonthOfInterval.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/eachQuarterOfInterval/index.d.ts b/date-fns/src/eachQuarterOfInterval/index.d.ts
new file mode 100644
index 0000000..879b548
--- /dev/null
+++ b/date-fns/src/eachQuarterOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachQuarterOfInterval } from 'date-fns'
+export default eachQuarterOfInterval
diff --git a/date-fns/src/eachQuarterOfInterval/index.js.flow b/date-fns/src/eachQuarterOfInterval/index.js.flow
new file mode 100644
index 0000000..30230a5
--- /dev/null
+++ b/date-fns/src/eachQuarterOfInterval/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (interval: Interval) => Date[]
diff --git a/date-fns/src/eachQuarterOfInterval/index.ts b/date-fns/src/eachQuarterOfInterval/index.ts
new file mode 100644
index 0000000..cf70f20
--- /dev/null
+++ b/date-fns/src/eachQuarterOfInterval/index.ts
@@ -0,0 +1,61 @@
+import addQuarters from '../addQuarters/index'
+import startOfQuarter from '../startOfQuarter/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name eachQuarterOfInterval
+ * @category Interval Helpers
+ * @summary Return the array of quarters within the specified time interval.
+ *
+ * @description
+ * Return the array of quarters within the specified time interval.
+ *
+ * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @returns {Date[]} the array with starts of quarters from the quarter of the interval start to the quarter of the interval end
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // Each quarter within interval 6 February 2014 - 10 August 2014:
+ * var result = eachQuarterOfInterval({
+ * start: new Date(2014, 1, 6),
+ * end: new Date(2014, 7, 10)
+ * })
+ * //=> [
+ * // Wed Jan 01 2014 00:00:00,
+ * // Tue Apr 01 2014 00:00:00,
+ * // Tue Jul 01 2014 00:00:00,
+ * // ]
+ */
+export default function eachQuarterOfInterval(dirtyInterval: Interval): Date[] {
+ requiredArgs(1, arguments)
+
+ const interval = dirtyInterval || {}
+ const startDate = toDate(interval.start)
+ const endDate = toDate(interval.end)
+
+ var endTime = endDate.getTime()
+
+ // Throw an exception if start date is after end date or if any date is `Invalid Date`
+ if (!(startDate.getTime() <= endTime)) {
+ throw new RangeError('Invalid interval')
+ }
+
+ const startDateQuarter = startOfQuarter(startDate)
+ const endDateQuarter = startOfQuarter(endDate)
+
+ endTime = endDateQuarter.getTime()
+
+ const quarters = []
+
+ var currentQuarter = startDateQuarter
+
+ while (currentQuarter.getTime() <= endTime) {
+ quarters.push(toDate(currentQuarter))
+ currentQuarter = addQuarters(currentQuarter, 1)
+ }
+
+ return quarters
+}
diff --git a/date-fns/src/eachQuarterOfInterval/test.ts b/date-fns/src/eachQuarterOfInterval/test.ts
new file mode 100644
index 0000000..a9edbcb
--- /dev/null
+++ b/date-fns/src/eachQuarterOfInterval/test.ts
@@ -0,0 +1,108 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import eachQuarterOfInterval from '.'
+
+describe('eachQuarterOfInterval', function() {
+ it('returns an array with starts of quarters from the quarter of the start date to the quarter of the end date', function() {
+ const result = eachQuarterOfInterval({
+ start: new Date(2014, 2 /* Mar */, 6),
+ end: new Date(2014, 7 /* Aug */, 12)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 0 /* Jan */, 1),
+ new Date(2014, 3 /* Apr */, 1),
+ new Date(2014, 6 /* Jul */, 1)
+ ])
+ })
+
+ it('accepts timestamps', function() {
+ const result = eachQuarterOfInterval({
+ start: new Date(2014, 2 /* Mar */, 6).getTime(),
+ end: new Date(2014, 7 /* Aug */, 12).getTime()
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 0 /* Jan */, 1),
+ new Date(2014, 3 /* Apr */, 1),
+ new Date(2014, 6 /* Jul */, 1)
+ ])
+ })
+
+ it('handles the dates that are not starts of days', function() {
+ const result = eachQuarterOfInterval({
+ start: new Date(2014, 2 /* Mar */, 6, 6, 35),
+ end: new Date(2014, 7 /* Aug */, 12, 22, 15)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 0 /* Jan */, 1),
+ new Date(2014, 3 /* Apr */, 1),
+ new Date(2014, 6 /* Jul */, 1)
+ ])
+ })
+
+ it('handles the dates that are not containing days', function() {
+ const result = eachQuarterOfInterval({
+ start: new Date(2014, 2 /* Mar */),
+ end: new Date(2014, 7 /* Oct */)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 0 /* Jan */, 1),
+ new Date(2014, 3 /* Apr */, 1),
+ new Date(2014, 6 /* Jul */, 1)
+ ])
+ })
+
+ it('returns one quarter if the both arguments are on the same quarter', function() {
+ const result = eachQuarterOfInterval({
+ start: new Date(2014, 0 /* Jan */, 6, 14),
+ end: new Date(2014, 2 /* Feb */, 9, 15)
+ })
+ assert.deepEqual(result, [new Date(2014, 0 /* Jan */, 1)])
+ })
+
+ it('returns one quarter if the both arguments are the same', function() {
+ const result = eachQuarterOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 14),
+ end: new Date(2014, 9 /* Oct */, 6, 14)
+ })
+ assert.deepEqual(result, [new Date(2014, 9 /* Oct */, 1)])
+ })
+
+ it('throws an exception if the start date is after the end date', function() {
+ const block = eachQuarterOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date is `Invalid Date`', function() {
+ const block = eachQuarterOfInterval.bind(null, {
+ start: new Date(NaN),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date is `Invalid Date`', function() {
+ const block = eachQuarterOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(NaN)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the interval is undefined', function() {
+ const block = eachQuarterOfInterval.bind(
+ null,
+ // $ExpectedMistake
+ undefined
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(eachQuarterOfInterval.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/eachWeekOfInterval/benchmark.js b/date-fns/src/eachWeekOfInterval/benchmark.js
new file mode 100644
index 0000000..65e0830
--- /dev/null
+++ b/date-fns/src/eachWeekOfInterval/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import eachWeekOfInterval from '.'
+
+suite('eachWeekOfInterval', function () {
+ benchmark('date-fns', function () {
+ return eachWeekOfInterval({start: this.dateA, end: this.dateB})
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 4233600000)
+ }
+})
diff --git a/date-fns/src/eachWeekOfInterval/index.d.ts b/date-fns/src/eachWeekOfInterval/index.d.ts
new file mode 100644
index 0000000..24d1a8a
--- /dev/null
+++ b/date-fns/src/eachWeekOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachWeekOfInterval } from 'date-fns'
+export default eachWeekOfInterval
diff --git a/date-fns/src/eachWeekOfInterval/index.js.flow b/date-fns/src/eachWeekOfInterval/index.js.flow
new file mode 100644
index 0000000..bc8cd5a
--- /dev/null
+++ b/date-fns/src/eachWeekOfInterval/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ interval: Interval,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => Date[]
diff --git a/date-fns/src/eachWeekOfInterval/index.ts b/date-fns/src/eachWeekOfInterval/index.ts
new file mode 100644
index 0000000..1045dd9
--- /dev/null
+++ b/date-fns/src/eachWeekOfInterval/index.ts
@@ -0,0 +1,84 @@
+import { WeekStartOptions } from '../types'
+import addWeeks from '../addWeeks/index'
+import startOfWeek from '../startOfWeek/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name eachWeekOfInterval
+ * @category Interval Helpers
+ * @summary Return the array of weeks within the specified time interval.
+ *
+ * @description
+ * Return the array of weeks within the specified time interval.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Date[]} the array with starts of weeks from the week of the interval start to the week of the interval end
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.weekStartsOn` must be 0, 1, ..., 6
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // Each week within interval 6 October 2014 - 23 November 2014:
+ * var result = eachWeekOfInterval({
+ * start: new Date(2014, 9, 6),
+ * end: new Date(2014, 10, 23)
+ * })
+ * //=> [
+ * // Sun Oct 05 2014 00:00:00,
+ * // Sun Oct 12 2014 00:00:00,
+ * // Sun Oct 19 2014 00:00:00,
+ * // Sun Oct 26 2014 00:00:00,
+ * // Sun Nov 02 2014 00:00:00,
+ * // Sun Nov 09 2014 00:00:00,
+ * // Sun Nov 16 2014 00:00:00,
+ * // Sun Nov 23 2014 00:00:00
+ * // ]
+ */
+export default function eachWeekOfInterval(
+ dirtyInterval: Interval,
+ options?: WeekStartOptions
+): Date[] {
+ requiredArgs(1, arguments)
+
+ const interval = dirtyInterval || {}
+ const startDate = toDate(interval.start)
+ const endDate = toDate(interval.end)
+
+ var endTime = endDate.getTime()
+
+ // Throw an exception if start date is after end date or if any date is `Invalid Date`
+ if (!(startDate.getTime() <= endTime)) {
+ throw new RangeError('Invalid interval')
+ }
+
+ const startDateWeek = startOfWeek(startDate, options)
+ const endDateWeek = startOfWeek(endDate, options)
+
+ // Some timezones switch DST at midnight, making start of day unreliable in these timezones, 3pm is a safe bet
+ startDateWeek.setHours(15)
+ endDateWeek.setHours(15)
+
+ endTime = endDateWeek.getTime()
+
+ const weeks = []
+
+ let currentWeek = startDateWeek
+
+ while (currentWeek.getTime() <= endTime) {
+ currentWeek.setHours(0)
+ weeks.push(toDate(currentWeek))
+ currentWeek = addWeeks(currentWeek, 1)
+ currentWeek.setHours(15)
+ }
+
+ return weeks
+}
diff --git a/date-fns/src/eachWeekOfInterval/test.ts b/date-fns/src/eachWeekOfInterval/test.ts
new file mode 100644
index 0000000..4bcf5b1
--- /dev/null
+++ b/date-fns/src/eachWeekOfInterval/test.ts
@@ -0,0 +1,145 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import eachWeekOfInterval from '.'
+
+describe('eachWeekOfInterval', function() {
+ it('returns an array with starts of weeks from the week of the start date to the week of the end date', function() {
+ const result = eachWeekOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6),
+ end: new Date(2014, 10 /* Nov */, 23)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 9 /* Oct */, 5),
+ new Date(2014, 9 /* Oct */, 12),
+ new Date(2014, 9 /* Oct */, 19),
+ new Date(2014, 9 /* Oct */, 26),
+ new Date(2014, 10 /* Nov */, 2),
+ new Date(2014, 10 /* Nov */, 9),
+ new Date(2014, 10 /* Nov */, 16),
+ new Date(2014, 10 /* Nov */, 23)
+ ])
+ })
+
+ it('accepts timestamps', function() {
+ const result = eachWeekOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6).getTime(),
+ end: new Date(2014, 10 /* Nov */, 23).getTime()
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 9 /* Oct */, 5),
+ new Date(2014, 9 /* Oct */, 12),
+ new Date(2014, 9 /* Oct */, 19),
+ new Date(2014, 9 /* Oct */, 26),
+ new Date(2014, 10 /* Nov */, 2),
+ new Date(2014, 10 /* Nov */, 9),
+ new Date(2014, 10 /* Nov */, 16),
+ new Date(2014, 10 /* Nov */, 23)
+ ])
+ })
+
+ it('handles the dates that are not starts/ends of days and weeks', function() {
+ const result = eachWeekOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 6, 35),
+ end: new Date(2014, 10 /* Nov */, 25, 22, 16)
+ })
+ assert.deepEqual(result, [
+ new Date(2014, 9 /* Oct */, 5),
+ new Date(2014, 9 /* Oct */, 12),
+ new Date(2014, 9 /* Oct */, 19),
+ new Date(2014, 9 /* Oct */, 26),
+ new Date(2014, 10 /* Nov */, 2),
+ new Date(2014, 10 /* Nov */, 9),
+ new Date(2014, 10 /* Nov */, 16),
+ new Date(2014, 10 /* Nov */, 23)
+ ])
+ })
+
+ it('considers the weekStartsOn option', function() {
+ const result = eachWeekOfInterval(
+ {
+ start: new Date(2014, 9 /* Oct */, 6, 6, 35),
+ end: new Date(2014, 10 /* Nov */, 25, 22, 15)
+ },
+ { weekStartsOn: 2 }
+ )
+ assert.deepEqual(result, [
+ new Date(2014, 8 /* Sep */, 30),
+ new Date(2014, 9 /* Oct */, 7),
+ new Date(2014, 9 /* Oct */, 14),
+ new Date(2014, 9 /* Oct */, 21),
+ new Date(2014, 9 /* Oct */, 28),
+ new Date(2014, 10 /* Nov */, 4),
+ new Date(2014, 10 /* Nov */, 11),
+ new Date(2014, 10 /* Nov */, 18),
+ new Date(2014, 10 /* Nov */, 25)
+ ])
+ })
+
+ it('returns one week if the both arguments are on the same week', function() {
+ const result = eachWeekOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 14),
+ end: new Date(2014, 9 /* Oct */, 8, 15)
+ })
+ assert.deepEqual(result, [new Date(2014, 9 /* Oct */, 5)])
+ })
+
+ it('returns one day if the both arguments are the same', function() {
+ const result = eachWeekOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 14),
+ end: new Date(2014, 9 /* Oct */, 6, 14)
+ })
+ assert.deepEqual(result, [new Date(2014, 9 /* Oct */, 5)])
+ })
+
+ it('throws an exception if the start date is after the end date', function() {
+ const block = eachWeekOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date is `Invalid Date`', function() {
+ const block = eachWeekOfInterval.bind(null, {
+ start: new Date(NaN),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date is `Invalid Date`', function() {
+ const block = eachWeekOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(NaN)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the interval is undefined', function() {
+ const block = eachWeekOfInterval.bind(
+ null,
+ // $ExpectedMistake
+ undefined
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertible to 0, 1, ..., 6 or undefined', function() {
+ const block = eachWeekOfInterval.bind(
+ null,
+ {
+ start: new Date(2014, 9 /* Oct */, 6, 6, 35),
+ end: new Date(2014, 10 /* Nov */, 25, 22, 15)
+ },
+ // $ExpectedMistake
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(eachWeekOfInterval.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/eachWeekendOfInterval/benchmark.js b/date-fns/src/eachWeekendOfInterval/benchmark.js
new file mode 100755
index 0000000..df23caf
--- /dev/null
+++ b/date-fns/src/eachWeekendOfInterval/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import eachWeekendOfInterval from '.'
+
+suite('eachWeekendOfInterval', function () {
+ benchmark('date-fns', function () {
+ return eachWeekendOfInterval({start: this.dateStart, end: this.dateEnd})
+ })
+}, {
+ setup: function () {
+ this.dateStart = new Date(2022, 0, 1)
+ this.dateEnd = new Date(2022, 11, 31)
+ }
+})
diff --git a/date-fns/src/eachWeekendOfInterval/index.d.ts b/date-fns/src/eachWeekendOfInterval/index.d.ts
new file mode 100644
index 0000000..c0b3fea
--- /dev/null
+++ b/date-fns/src/eachWeekendOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachWeekendOfInterval } from 'date-fns'
+export default eachWeekendOfInterval
diff --git a/date-fns/src/eachWeekendOfInterval/index.js.flow b/date-fns/src/eachWeekendOfInterval/index.js.flow
new file mode 100755
index 0000000..30230a5
--- /dev/null
+++ b/date-fns/src/eachWeekendOfInterval/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (interval: Interval) => Date[]
diff --git a/date-fns/src/eachWeekendOfInterval/index.ts b/date-fns/src/eachWeekendOfInterval/index.ts
new file mode 100644
index 0000000..ffd2873
--- /dev/null
+++ b/date-fns/src/eachWeekendOfInterval/index.ts
@@ -0,0 +1,47 @@
+import eachDayOfInterval from '../eachDayOfInterval/index'
+import isSunday from '../isSunday/index'
+import isWeekend from '../isWeekend/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name eachWeekendOfInterval
+ * @category Interval Helpers
+ * @summary List all the Saturdays and Sundays in the given date interval.
+ *
+ * @description
+ * Get all the Saturdays and Sundays in the given date interval.
+ *
+ * @param {Interval} interval - the given interval. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @returns {Date[]} an array containing all the Saturdays and Sundays
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // Lists all Saturdays and Sundays in the given date interval
+ * const result = eachWeekendOfInterval({
+ * start: new Date(2018, 8, 17),
+ * end: new Date(2018, 8, 30)
+ * })
+ * //=> [
+ * // Sat Sep 22 2018 00:00:00,
+ * // Sun Sep 23 2018 00:00:00,
+ * // Sat Sep 29 2018 00:00:00,
+ * // Sun Sep 30 2018 00:00:00
+ * // ]
+ */
+export default function eachWeekendOfInterval(interval: Interval): Date[] {
+ requiredArgs(1, arguments)
+
+ const dateInterval = eachDayOfInterval(interval)
+ const weekends = []
+ let index = 0
+ while (index < dateInterval.length) {
+ const date = dateInterval[index++]
+ if (isWeekend(date)) {
+ weekends.push(date)
+ if (isSunday(date)) index = index + 5
+ }
+ }
+ return weekends
+}
diff --git a/date-fns/src/eachWeekendOfInterval/test.ts b/date-fns/src/eachWeekendOfInterval/test.ts
new file mode 100644
index 0000000..75df655
--- /dev/null
+++ b/date-fns/src/eachWeekendOfInterval/test.ts
@@ -0,0 +1,67 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import eachWeekendOfInterval from '.'
+
+describe('eachWeekendOfInterval', function () {
+ it('returns all weekends within the interval', function () {
+ const result = eachWeekendOfInterval({
+ start: new Date(2018, 8 /* Sept */, 17),
+ end: new Date(2018, 8 /* Sept */, 30)
+ })
+ assert.deepEqual(result, [
+ new Date(2018, 8 /* Sept */, 22),
+ new Date(2018, 8 /* Sept */, 23),
+ new Date(2018, 8 /* Sept */, 29),
+ new Date(2018, 8 /* Sept */, 30)
+ ])
+ })
+
+ it('returns all weekends within the interval when starting on a weekend', function () {
+ const result = eachWeekendOfInterval({
+ start: new Date(2018, 8 /* Sept */, 22),
+ end: new Date(2018, 8 /* Sept */, 30)
+ })
+ assert.deepEqual(result, [
+ new Date(2018, 8 /* Sept */, 22),
+ new Date(2018, 8 /* Sept */, 23),
+ new Date(2018, 8 /* Sept */, 29),
+ new Date(2018, 8 /* Sept */, 30)
+ ])
+ })
+
+ it('throws `RangeError` invalid interval start date is used', function () {
+ // $ExpectedMistake
+ const block = eachWeekendOfInterval.bind(null, {
+ start: new Date(NaN),
+ end: new Date(2019, 11 /* Dec */, 31)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` invalid interval end date is used', function () {
+ // $ExpectedMistake
+ const block = eachWeekendOfInterval.bind(null, {
+ start: new Date(2019, 0 /* Jan */, 1),
+ end: new Date(NaN)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ assert.throws(eachWeekendOfInterval, TypeError)
+ })
+
+ it('throws `RangeError` if start of an interval is after its end', function () {
+ const block = eachWeekendOfInterval.bind(
+ null,
+ // $ExpectedMistake
+ {
+ start: new Date(2018, 8 /* Sept */, 25),
+ end: new Date(2018, 8 /* Sept */, 6)
+ }
+ )
+ assert.throws(block, RangeError)
+ })
+})
diff --git a/date-fns/src/eachWeekendOfMonth/benchmark.js b/date-fns/src/eachWeekendOfMonth/benchmark.js
new file mode 100644
index 0000000..e5aa4a3
--- /dev/null
+++ b/date-fns/src/eachWeekendOfMonth/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import eachWeekendOfMonth from '.'
+
+suite('eachWeekendOfMonth', function () {
+ benchmark('date-fns', function () {
+ return eachWeekendOfMonth(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date(2020, 3, 20)
+ }
+})
diff --git a/date-fns/src/eachWeekendOfMonth/index.d.ts b/date-fns/src/eachWeekendOfMonth/index.d.ts
new file mode 100644
index 0000000..cb01c45
--- /dev/null
+++ b/date-fns/src/eachWeekendOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachWeekendOfMonth } from 'date-fns'
+export default eachWeekendOfMonth
diff --git a/date-fns/src/eachWeekendOfMonth/index.js.flow b/date-fns/src/eachWeekendOfMonth/index.js.flow
new file mode 100644
index 0000000..7073332
--- /dev/null
+++ b/date-fns/src/eachWeekendOfMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date[]
diff --git a/date-fns/src/eachWeekendOfMonth/index.ts b/date-fns/src/eachWeekendOfMonth/index.ts
new file mode 100644
index 0000000..1cfdfb7
--- /dev/null
+++ b/date-fns/src/eachWeekendOfMonth/index.ts
@@ -0,0 +1,42 @@
+import eachWeekendOfInterval from '../eachWeekendOfInterval/index'
+import startOfMonth from '../startOfMonth/index'
+import endOfMonth from '../endOfMonth/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name eachWeekendOfMonth
+ * @category Month Helpers
+ * @summary List all the Saturdays and Sundays in the given month.
+ *
+ * @description
+ * Get all the Saturdays and Sundays in the given month.
+ *
+ * @param {Date|Number} date - the given month
+ * @returns {Date[]} an array containing all the Saturdays and Sundays
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} The passed date is invalid
+ *
+ * @example
+ * // Lists all Saturdays and Sundays in the given month
+ * const result = eachWeekendOfMonth(new Date(2022, 1, 1))
+ * //=> [
+ * // Sat Feb 05 2022 00:00:00,
+ * // Sun Feb 06 2022 00:00:00,
+ * // Sat Feb 12 2022 00:00:00,
+ * // Sun Feb 13 2022 00:00:00,
+ * // Sat Feb 19 2022 00:00:00,
+ * // Sun Feb 20 2022 00:00:00,
+ * // Sat Feb 26 2022 00:00:00,
+ * // Sun Feb 27 2022 00:00:00
+ * // ]
+ */
+export default function eachWeekendOfMonth(dirtyDate: Date): Date[] {
+ requiredArgs(1, arguments)
+
+ const startDate = startOfMonth(dirtyDate)
+ if (isNaN(startDate.getTime()))
+ throw new RangeError('The passed date is invalid')
+
+ const endDate = endOfMonth(dirtyDate)
+ return eachWeekendOfInterval({ start: startDate, end: endDate })
+}
diff --git a/date-fns/src/eachWeekendOfMonth/test.ts b/date-fns/src/eachWeekendOfMonth/test.ts
new file mode 100644
index 0000000..018f2e6
--- /dev/null
+++ b/date-fns/src/eachWeekendOfMonth/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import eachWeekendOfMonth from '.'
+
+describe('eachWeekendOfMonth', () => {
+ it('returns all weekends of the given month', () => {
+ var result = eachWeekendOfMonth(new Date(2022, 1, 20))
+ assert.deepStrictEqual(result, [
+ new Date(2022, 1, 5),
+ new Date(2022, 1, 6),
+ new Date(2022, 1, 12),
+ new Date(2022, 1, 13),
+ new Date(2022, 1, 19),
+ new Date(2022, 1, 20),
+ new Date(2022, 1, 26),
+ new Date(2022, 1, 27)
+ ])
+ })
+
+ it('throws TypeError exception when passed less than 1 argument', () => {
+ // @ts-expect-error
+ assert.throws(eachWeekendOfMonth.bind(null), TypeError)
+ })
+
+ it('throws RangeError when the expected year is an invalid date', () => {
+ // @ts-expect-error
+ assert.throws(eachWeekendOfMonth.bind(1, NaN), RangeError)
+ })
+})
diff --git a/date-fns/src/eachWeekendOfYear/benchmark.js b/date-fns/src/eachWeekendOfYear/benchmark.js
new file mode 100644
index 0000000..c490d95
--- /dev/null
+++ b/date-fns/src/eachWeekendOfYear/benchmark.js
@@ -0,0 +1,14 @@
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import eachWeekendOfYear from '.'
+
+suite('eachWeekendOfYear', function () {
+ benchmark('date-fns', function () {
+ return eachWeekendOfYear(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date(2022, 7, 12)
+ }
+})
diff --git a/date-fns/src/eachWeekendOfYear/index.d.ts b/date-fns/src/eachWeekendOfYear/index.d.ts
new file mode 100644
index 0000000..7cda9d1
--- /dev/null
+++ b/date-fns/src/eachWeekendOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachWeekendOfYear } from 'date-fns'
+export default eachWeekendOfYear
diff --git a/date-fns/src/eachWeekendOfYear/index.js b/date-fns/src/eachWeekendOfYear/index.js
new file mode 100644
index 0000000..291e158
--- /dev/null
+++ b/date-fns/src/eachWeekendOfYear/index.js
@@ -0,0 +1,38 @@
+import eachWeekendOfInterval from '../eachWeekendOfInterval/index'
+import startOfYear from '../startOfYear/index'
+import endOfYear from '../endOfYear/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name eachWeekendOfYear
+ * @category Year Helpers
+ * @summary List all the Saturdays and Sundays in the year.
+ *
+ * @description
+ * Get all the Saturdays and Sundays in the year.
+ *
+ * @param {Date|Number} date - the given year
+ * @returns {Date[]} an array containing all the Saturdays and Sundays
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} The passed date is invalid
+ *
+ * @example
+ * // Lists all Saturdays and Sundays in the year
+ * var result = eachWeekendOfYear(new Date(2020, 1, 1))
+ * //=> [
+ * // Sat Jan 03 2020 00:00:00,
+ * // Sun Jan 04 2020 00:00:00,
+ * // ...
+ * // Sun Dec 27 2020 00:00:00
+ * // ]
+ * ]
+ */
+export default function eachWeekendOfYear(dirtyDate) {
+ requiredArgs(1, arguments)
+
+ var startDate = startOfYear(dirtyDate)
+ if (isNaN(startDate)) throw new RangeError('The passed date is invalid')
+
+ var endDate = endOfYear(dirtyDate)
+ return eachWeekendOfInterval({ start: startDate, end: endDate })
+}
diff --git a/date-fns/src/eachWeekendOfYear/index.js.flow b/date-fns/src/eachWeekendOfYear/index.js.flow
new file mode 100644
index 0000000..7073332
--- /dev/null
+++ b/date-fns/src/eachWeekendOfYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date[]
diff --git a/date-fns/src/eachWeekendOfYear/test.js b/date-fns/src/eachWeekendOfYear/test.js
new file mode 100644
index 0000000..81ebbfe
--- /dev/null
+++ b/date-fns/src/eachWeekendOfYear/test.js
@@ -0,0 +1,24 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import eachWeekendOfYear from '.'
+import isWeekend from '../isWeekend'
+
+describe('eachWeekendOfYear', () => {
+ it('returns all weekends of the given year', () => {
+ var result = eachWeekendOfYear(new Date(2020, 0, 1))
+ assert(result.length === 104)
+ assert(result.every(isWeekend))
+ assert.deepEqual(result[0], new Date(2020, 0, 4))
+ assert.deepEqual(result[103], new Date(2020, 11, 27))
+ })
+
+ it('throws TypeError exception when no argument is passed in', () => {
+ assert.throws(eachWeekendOfYear.bind(null), TypeError)
+ })
+
+ it('throws RangeError exception when date is invalid', () => {
+ assert.throws(eachWeekendOfYear.bind(null, new Date(NaN)), RangeError)
+ })
+})
diff --git a/date-fns/src/eachYearOfInterval/index.d.ts b/date-fns/src/eachYearOfInterval/index.d.ts
new file mode 100644
index 0000000..d6d5d5d
--- /dev/null
+++ b/date-fns/src/eachYearOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachYearOfInterval } from 'date-fns'
+export default eachYearOfInterval
diff --git a/date-fns/src/eachYearOfInterval/index.js b/date-fns/src/eachYearOfInterval/index.js
new file mode 100644
index 0000000..a1eaf50
--- /dev/null
+++ b/date-fns/src/eachYearOfInterval/index.js
@@ -0,0 +1,57 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name eachYearOfInterval
+ * @category Interval Helpers
+ * @summary Return the array of yearly timestamps within the specified time interval.
+ *
+ * @description
+ * Return the array of yearly timestamps within the specified time interval.
+ *
+ * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}
+ * @returns {Date[]} the array with starts of yearly timestamps from the month of the interval start to the month of the interval end
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // Each year between 6 February 2014 and 10 August 2017:
+ * var result = eachYearOfInterval({
+ * start: new Date(2014, 1, 6),
+ * end: new Date(2017, 7, 10)
+ * })
+ * //=> [
+ * // Wed Jan 01 2014 00:00:00,
+ * // Thu Jan 01 2015 00:00:00,
+ * // Fri Jan 01 2016 00:00:00,
+ * // Sun Jan 01 2017 00:00:00
+ * // ]
+ */
+export default function eachYearOfInterval(dirtyInterval) {
+ requiredArgs(1, arguments)
+
+ var interval = dirtyInterval || {}
+ var startDate = toDate(interval.start)
+ var endDate = toDate(interval.end)
+
+ var endTime = endDate.getTime()
+
+ // Throw an exception if start date is after end date or if any date is `Invalid Date`
+ if (!(startDate.getTime() <= endTime)) {
+ throw new RangeError('Invalid interval')
+ }
+
+ var dates = []
+
+ var currentDate = startDate
+ currentDate.setHours(0, 0, 0, 0)
+ currentDate.setMonth(0, 1)
+
+ while (currentDate.getTime() <= endTime) {
+ dates.push(toDate(currentDate))
+ currentDate.setFullYear(currentDate.getFullYear() + 1)
+ }
+
+ return dates
+}
diff --git a/date-fns/src/eachYearOfInterval/index.js.flow b/date-fns/src/eachYearOfInterval/index.js.flow
new file mode 100644
index 0000000..30230a5
--- /dev/null
+++ b/date-fns/src/eachYearOfInterval/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (interval: Interval) => Date[]
diff --git a/date-fns/src/eachYearOfInterval/test.js b/date-fns/src/eachYearOfInterval/test.js
new file mode 100644
index 0000000..2de5e8b
--- /dev/null
+++ b/date-fns/src/eachYearOfInterval/test.js
@@ -0,0 +1,105 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import eachYearOfInterval from '.'
+
+describe('eachYearOfInterval', function() {
+ it('returns an array with starts of days from the day of the start date to the day of the end date', function() {
+ var result = eachYearOfInterval({
+ start: new Date(2012, 9 /* Oct */, 6),
+ end: new Date(2017, 9 /* Oct */, 12)
+ })
+ assert.deepEqual(result, [
+ new Date(2012, 0 /* Jan */, 1),
+ new Date(2013, 0 /* Jan */, 1),
+ new Date(2014, 0 /* Jan */, 1),
+ new Date(2015, 0 /* Jan */, 1),
+ new Date(2016, 0 /* Jan */, 1),
+ new Date(2017, 0 /* Jan */, 1)
+ ])
+ })
+
+ it('accepts timestamps', function() {
+ var result = eachYearOfInterval({
+ start: new Date(2012, 9 /* Oct */, 6).getTime(),
+ end: new Date(2017, 9 /* Oct */, 12).getTime()
+ })
+ assert.deepEqual(result, [
+ new Date(2012, 0 /* Jan */, 1),
+ new Date(2013, 0 /* Jan */, 1),
+ new Date(2014, 0 /* Jan */, 1),
+ new Date(2015, 0 /* Jan */, 1),
+ new Date(2016, 0 /* Jan */, 1),
+ new Date(2017, 0 /* Jan */, 1)
+ ])
+ })
+
+ it('handles the dates that are not starts of days', function() {
+ var result = eachYearOfInterval({
+ start: new Date(2012, 9 /* Oct */, 6, 6, 35),
+ end: new Date(2017, 9 /* Oct */, 12, 22, 15)
+ })
+ assert.deepEqual(result, [
+ new Date(2012, 0 /* Jan */, 1),
+ new Date(2013, 0 /* Jan */, 1),
+ new Date(2014, 0 /* Jan */, 1),
+ new Date(2015, 0 /* Jan */, 1),
+ new Date(2016, 0 /* Jan */, 1),
+ new Date(2017, 0 /* Jan */, 1)
+ ])
+ })
+
+ it('returns one year if the both arguments are on the same year', function() {
+ var result = eachYearOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 14),
+ end: new Date(2014, 9 /* Oct */, 6, 15)
+ })
+ assert.deepEqual(result, [new Date(2014, 0 /* Jan */, 1)])
+ })
+
+ it('returns one year if the both arguments are the same', function() {
+ var result = eachYearOfInterval({
+ start: new Date(2014, 9 /* Oct */, 6, 14),
+ end: new Date(2014, 9 /* Oct */, 6, 14)
+ })
+ assert.deepEqual(result, [new Date(2014, 0 /* Jan */, 1)])
+ })
+
+ it('throws an exception if the start date is after the end date', function() {
+ var block = eachYearOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date is `Invalid Date`', function() {
+ var block = eachYearOfInterval.bind(null, {
+ start: new Date(NaN),
+ end: new Date(2014, 9 /* Oct */, 6)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date is `Invalid Date`', function() {
+ var block = eachYearOfInterval.bind(null, {
+ start: new Date(2014, 9 /* Oct */, 12),
+ end: new Date(NaN)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the interval is undefined', function() {
+ var block = eachYearOfInterval.bind(
+ null,
+ // $ExpectedMistake
+ undefined
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(eachYearOfInterval.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfDay/benchmark.js b/date-fns/src/endOfDay/benchmark.js
new file mode 100644
index 0000000..88cc738
--- /dev/null
+++ b/date-fns/src/endOfDay/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfDay from '.'
+import moment from 'moment'
+
+suite('endOfDay', function () {
+ benchmark('date-fns', function () {
+ return endOfDay(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.endOf('day')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/endOfDay/index.d.ts b/date-fns/src/endOfDay/index.d.ts
new file mode 100644
index 0000000..2ce6172
--- /dev/null
+++ b/date-fns/src/endOfDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfDay } from 'date-fns'
+export default endOfDay
diff --git a/date-fns/src/endOfDay/index.js.flow b/date-fns/src/endOfDay/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/endOfDay/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/endOfDay/index.ts b/date-fns/src/endOfDay/index.ts
new file mode 100644
index 0000000..e8fe6cc
--- /dev/null
+++ b/date-fns/src/endOfDay/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfDay
+ * @category Day Helpers
+ * @summary Return the end of a day for the given date.
+ *
+ * @description
+ * Return the end of a day for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of a day
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The end of a day for 2 September 2014 11:55:00:
+ * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Tue Sep 02 2014 23:59:59.999
+ */
+export default function endOfDay(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ date.setHours(23, 59, 59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfDay/test.ts b/date-fns/src/endOfDay/test.ts
new file mode 100644
index 0000000..9a9f2a8
--- /dev/null
+++ b/date-fns/src/endOfDay/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfDay from '.'
+
+describe('endOfDay', function() {
+ it('returns the date with the time set to 23:59:59.999', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = endOfDay(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 2, 23, 59, 59, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = endOfDay(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 2, 23, 59, 59, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ endOfDay(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfDay(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfDay.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfDecade/benchmark.js b/date-fns/src/endOfDecade/benchmark.js
new file mode 100644
index 0000000..43296e1
--- /dev/null
+++ b/date-fns/src/endOfDecade/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfDecade from '.'
+
+suite('endOfDecade', function () {
+ benchmark('date-fns', function () {
+ return endOfDecade(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/endOfDecade/index.d.ts b/date-fns/src/endOfDecade/index.d.ts
new file mode 100644
index 0000000..c723f13
--- /dev/null
+++ b/date-fns/src/endOfDecade/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfDecade } from 'date-fns'
+export default endOfDecade
diff --git a/date-fns/src/endOfDecade/index.js.flow b/date-fns/src/endOfDecade/index.js.flow
new file mode 100644
index 0000000..364a3bb
--- /dev/null
+++ b/date-fns/src/endOfDecade/index.js.flow
@@ -0,0 +1,57 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2,
+ }
+) => Date
diff --git a/date-fns/src/endOfDecade/index.ts b/date-fns/src/endOfDecade/index.ts
new file mode 100644
index 0000000..11c5ddb
--- /dev/null
+++ b/date-fns/src/endOfDecade/index.ts
@@ -0,0 +1,37 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfDecade
+ * @category Decade Helpers
+ * @summary Return the end of a decade for the given date.
+ *
+ * @description
+ * Return the end of a decade for the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of a decade
+ * @param {Object} [options] - an object with options.
+ * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2
+ *
+ * @example
+ * // The end of a decade for 12 May 1984 00:00:00:
+ * const result = endOfDecade(new Date(1984, 4, 12, 00, 00, 00))
+ * //=> Dec 31 1989 23:59:59.999
+ */
+export default function endOfDecade(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+ const decade = 9 + Math.floor(year / 10) * 10
+ date.setFullYear(decade, 11, 31)
+ date.setHours(23, 59, 59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfDecade/test.ts b/date-fns/src/endOfDecade/test.ts
new file mode 100644
index 0000000..6328154
--- /dev/null
+++ b/date-fns/src/endOfDecade/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfDecade from '.'
+
+describe('endOfDecade', function() {
+ it('returns the date with the time set to 23:59:59.999 and the date set to the last millisecond of a decade', function() {
+ const date = new Date(2017, 3 /* Apr */, 10, 0, 0, 0)
+ const result = endOfDecade(date)
+ assert.deepEqual(result, new Date(2019, 11 /* Dec */, 31, 23, 59, 59, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2007, 9 /* Oct */, 10, 0, 0, 0).getTime()
+ const result = endOfDecade(date)
+ assert.deepEqual(result, new Date(2009, 11 /* Dec */, 31, 23, 59, 59, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2038, 0 /* Jan */, 19, 3, 14, 8)
+ endOfDecade(date)
+ assert.deepEqual(date, new Date(2038, 0 /* Jan */, 19, 3, 14, 8))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfDecade(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfDecade.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfHour/benchmark.js b/date-fns/src/endOfHour/benchmark.js
new file mode 100644
index 0000000..096fbe0
--- /dev/null
+++ b/date-fns/src/endOfHour/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfHour from '.'
+import moment from 'moment'
+
+suite('endOfHour', function () {
+ benchmark('date-fns', function () {
+ return endOfHour(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.endOf('hour')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/endOfHour/index.d.ts b/date-fns/src/endOfHour/index.d.ts
new file mode 100644
index 0000000..10ab321
--- /dev/null
+++ b/date-fns/src/endOfHour/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfHour } from 'date-fns'
+export default endOfHour
diff --git a/date-fns/src/endOfHour/index.js.flow b/date-fns/src/endOfHour/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/endOfHour/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/endOfHour/index.ts b/date-fns/src/endOfHour/index.ts
new file mode 100644
index 0000000..2d0f5cd
--- /dev/null
+++ b/date-fns/src/endOfHour/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfHour
+ * @category Hour Helpers
+ * @summary Return the end of an hour for the given date.
+ *
+ * @description
+ * Return the end of an hour for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of an hour
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The end of an hour for 2 September 2014 11:55:00:
+ * const result = endOfHour(new Date(2014, 8, 2, 11, 55))
+ * //=> Tue Sep 02 2014 11:59:59.999
+ */
+export default function endOfHour(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ date.setMinutes(59, 59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfHour/test.ts b/date-fns/src/endOfHour/test.ts
new file mode 100644
index 0000000..d3f1ab4
--- /dev/null
+++ b/date-fns/src/endOfHour/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfHour from '.'
+
+describe('endOfHour', function() {
+ it('returns the date with the time set to the last millisecond before an hour ends', function() {
+ const date = new Date(2014, 11, 1, 22, 15)
+ const result = endOfHour(date)
+ assert.deepEqual(result, new Date(2014, 11, 1, 22, 59, 59, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = endOfHour(new Date(2014, 11, 1, 22, 15).getTime())
+ assert.deepEqual(result, new Date(2014, 11, 1, 22, 59, 59, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 11, 1, 22, 15)
+ endOfHour(date)
+ assert.deepEqual(date, new Date(2014, 11, 1, 22, 15))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfHour(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfHour.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfISOWeek/benchmark.js b/date-fns/src/endOfISOWeek/benchmark.js
new file mode 100644
index 0000000..5cea940
--- /dev/null
+++ b/date-fns/src/endOfISOWeek/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfISOWeek from '.'
+import moment from 'moment'
+
+suite('endOfISOWeek', function () {
+ benchmark('date-fns', function () {
+ return endOfISOWeek(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.endOf('isoWeek')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/endOfISOWeek/index.d.ts b/date-fns/src/endOfISOWeek/index.d.ts
new file mode 100644
index 0000000..10c3365
--- /dev/null
+++ b/date-fns/src/endOfISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfISOWeek } from 'date-fns'
+export default endOfISOWeek
diff --git a/date-fns/src/endOfISOWeek/index.js.flow b/date-fns/src/endOfISOWeek/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/endOfISOWeek/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/endOfISOWeek/index.ts b/date-fns/src/endOfISOWeek/index.ts
new file mode 100644
index 0000000..91ac05c
--- /dev/null
+++ b/date-fns/src/endOfISOWeek/index.ts
@@ -0,0 +1,32 @@
+import endOfWeek from '../endOfWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfISOWeek
+ * @category ISO Week Helpers
+ * @summary Return the end of an ISO week for the given date.
+ *
+ * @description
+ * Return the end of an ISO week for the given date.
+ * The result will be in the local timezone.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of an ISO week
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The end of an ISO week for 2 September 2014 11:55:00:
+ * var result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Sun Sep 07 2014 23:59:59.999
+ */
+export default function endOfISOWeek(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ return endOfWeek(dirtyDate, { weekStartsOn: 1 })
+}
diff --git a/date-fns/src/endOfISOWeek/test.ts b/date-fns/src/endOfISOWeek/test.ts
new file mode 100644
index 0000000..56f6531
--- /dev/null
+++ b/date-fns/src/endOfISOWeek/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfISOWeek from '.'
+
+describe('endOfISOWeek', function() {
+ it('returns the date with the time set to 23:59:59:999 and the date set to the last day of an ISO week', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = endOfISOWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7, 23, 59, 59, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 1 /* Feb */, 11, 11, 55, 0).getTime()
+ const result = endOfISOWeek(date)
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 16, 23, 59, 59, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ endOfISOWeek(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfISOWeek(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfISOWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfISOWeekYear/benchmark.js b/date-fns/src/endOfISOWeekYear/benchmark.js
new file mode 100644
index 0000000..89749ac
--- /dev/null
+++ b/date-fns/src/endOfISOWeekYear/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfISOWeekYear from '.'
+
+suite('endOfISOWeekYear', function () {
+ benchmark('date-fns', function () {
+ return endOfISOWeekYear(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/endOfISOWeekYear/index.d.ts b/date-fns/src/endOfISOWeekYear/index.d.ts
new file mode 100644
index 0000000..1878308
--- /dev/null
+++ b/date-fns/src/endOfISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfISOWeekYear } from 'date-fns'
+export default endOfISOWeekYear
diff --git a/date-fns/src/endOfISOWeekYear/index.js.flow b/date-fns/src/endOfISOWeekYear/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/endOfISOWeekYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/endOfISOWeekYear/index.ts b/date-fns/src/endOfISOWeekYear/index.ts
new file mode 100644
index 0000000..5454ba6
--- /dev/null
+++ b/date-fns/src/endOfISOWeekYear/index.ts
@@ -0,0 +1,45 @@
+import getISOWeekYear from '../getISOWeekYear/index'
+import startOfISOWeek from '../startOfISOWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfISOWeekYear
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Return the end of an ISO week-numbering year for the given date.
+ *
+ * @description
+ * Return the end of an ISO week-numbering year,
+ * which always starts 3 days before the year's first Thursday.
+ * The result will be in the local timezone.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `endOfISOYear` to `endOfISOWeekYear`.
+ * "ISO week year" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ * This change makes the name consistent with
+ * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of an ISO week-numbering year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The end of an ISO week-numbering year for 2 July 2005:
+ * const result = endOfISOWeekYear(new Date(2005, 6, 2))
+ * //=> Sun Jan 01 2006 23:59:59.999
+ */
+export default function endOfISOWeekYear(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const year = getISOWeekYear(dirtyDate)
+ const fourthOfJanuaryOfNextYear = new Date(0)
+ fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)
+ fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)
+ const date = startOfISOWeek(fourthOfJanuaryOfNextYear)
+ date.setMilliseconds(date.getMilliseconds() - 1)
+ return date
+}
diff --git a/date-fns/src/endOfISOWeekYear/test.ts b/date-fns/src/endOfISOWeekYear/test.ts
new file mode 100644
index 0000000..5a155c9
--- /dev/null
+++ b/date-fns/src/endOfISOWeekYear/test.ts
@@ -0,0 +1,46 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfISOWeekYear from '.'
+
+describe('endOfISOWeekYear', function() {
+ it('returns the date with the time set to 23:59:59.999 and the date set to the last day of an ISO year', function() {
+ const result = endOfISOWeekYear(new Date(2009, 0 /* Jan */, 1, 16, 0))
+ assert.deepEqual(result, new Date(2010, 0 /* Jan */, 3, 23, 59, 59, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = endOfISOWeekYear(
+ new Date(2005, 0 /* Jan */, 1, 6, 0).getTime()
+ )
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 2, 23, 59, 59, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 2)
+ endOfISOWeekYear(date)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 2))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(5, 0 /* Jan */, 4)
+ initialDate.setHours(16, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(6, 0 /* Jan */, 1)
+ expectedResult.setHours(23, 59, 59, 999)
+ const result = endOfISOWeekYear(initialDate)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfISOWeekYear(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfISOWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfMinute/benchmark.js b/date-fns/src/endOfMinute/benchmark.js
new file mode 100644
index 0000000..49b936c
--- /dev/null
+++ b/date-fns/src/endOfMinute/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfMinute from '.'
+import moment from 'moment'
+
+suite('endOfMinute', function () {
+ benchmark('date-fns', function () {
+ return endOfMinute(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.endOf('minute')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/endOfMinute/index.d.ts b/date-fns/src/endOfMinute/index.d.ts
new file mode 100644
index 0000000..82d1b5d
--- /dev/null
+++ b/date-fns/src/endOfMinute/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfMinute } from 'date-fns'
+export default endOfMinute
diff --git a/date-fns/src/endOfMinute/index.js.flow b/date-fns/src/endOfMinute/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/endOfMinute/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/endOfMinute/index.ts b/date-fns/src/endOfMinute/index.ts
new file mode 100644
index 0000000..5e28e69
--- /dev/null
+++ b/date-fns/src/endOfMinute/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfMinute
+ * @category Minute Helpers
+ * @summary Return the end of a minute for the given date.
+ *
+ * @description
+ * Return the end of a minute for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of a minute
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The end of a minute for 1 December 2014 22:15:45.400:
+ * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))
+ * //=> Mon Dec 01 2014 22:15:59.999
+ */
+export default function endOfMinute(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ date.setSeconds(59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfMinute/test.ts b/date-fns/src/endOfMinute/test.ts
new file mode 100644
index 0000000..13f19ee
--- /dev/null
+++ b/date-fns/src/endOfMinute/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfMinute from '.'
+
+describe('endOfMinute', function() {
+ it('returns the date with the time set to the last millisecond before a minute ends', function() {
+ const date = new Date(2014, 11, 1, 22, 15)
+ const result = endOfMinute(date)
+ assert.deepEqual(result, new Date(2014, 11, 1, 22, 15, 59, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = endOfMinute(new Date(2014, 11, 1, 22, 15).getTime())
+ assert.deepEqual(result, new Date(2014, 11, 1, 22, 15, 59, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 11, 1, 22, 15)
+ endOfMinute(date)
+ assert.deepEqual(date, new Date(2014, 11, 1, 22, 15))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfMinute(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfMinute.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfMonth/benchmark.js b/date-fns/src/endOfMonth/benchmark.js
new file mode 100644
index 0000000..30791dd
--- /dev/null
+++ b/date-fns/src/endOfMonth/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfMonth from '.'
+import moment from 'moment'
+
+suite('endOfMonth', function () {
+ benchmark('date-fns', function () {
+ return endOfMonth(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.endOf('month')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/endOfMonth/index.d.ts b/date-fns/src/endOfMonth/index.d.ts
new file mode 100644
index 0000000..59e7354
--- /dev/null
+++ b/date-fns/src/endOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfMonth } from 'date-fns'
+export default endOfMonth
diff --git a/date-fns/src/endOfMonth/index.js.flow b/date-fns/src/endOfMonth/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/endOfMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/endOfMonth/index.ts b/date-fns/src/endOfMonth/index.ts
new file mode 100644
index 0000000..e5b8f9c
--- /dev/null
+++ b/date-fns/src/endOfMonth/index.ts
@@ -0,0 +1,34 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfMonth
+ * @category Month Helpers
+ * @summary Return the end of a month for the given date.
+ *
+ * @description
+ * Return the end of a month for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of a month
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The end of a month for 2 September 2014 11:55:00:
+ * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Tue Sep 30 2014 23:59:59.999
+ */
+export default function endOfMonth(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const month = date.getMonth()
+ date.setFullYear(date.getFullYear(), month + 1, 0)
+ date.setHours(23, 59, 59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfMonth/test.ts b/date-fns/src/endOfMonth/test.ts
new file mode 100644
index 0000000..bdc8494
--- /dev/null
+++ b/date-fns/src/endOfMonth/test.ts
@@ -0,0 +1,52 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfMonth from '.'
+
+describe('endOfMonth', function() {
+ it('returns the date with the time set to 23:59:59.999 and the date set to the last day of a month', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = endOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30, 23, 59, 59, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = endOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30, 23, 59, 59, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ endOfMonth(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ describe('edge cases', function() {
+ it('works for last month in year', function() {
+ const date = new Date(2014, 11 /* Dec */, 1, 0, 0, 0)
+ const result = endOfMonth(date)
+ assert.deepEqual(
+ result,
+ new Date(2014, 11 /* Dec */, 31, 23, 59, 59, 999)
+ )
+ })
+
+ it('works for last day of month', function() {
+ const date = new Date(2014, 9 /* Oct */, 31)
+ const result = endOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */, 31, 23, 59, 59, 999))
+ })
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfMonth(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfMonth.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfQuarter/benchmark.js b/date-fns/src/endOfQuarter/benchmark.js
new file mode 100644
index 0000000..6ec16a5
--- /dev/null
+++ b/date-fns/src/endOfQuarter/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfQuarter from '.'
+import moment from 'moment'
+
+suite('endOfQuarter', function () {
+ benchmark('date-fns', function () {
+ return endOfQuarter(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.endOf('quarter')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/endOfQuarter/index.d.ts b/date-fns/src/endOfQuarter/index.d.ts
new file mode 100644
index 0000000..c91ac76
--- /dev/null
+++ b/date-fns/src/endOfQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfQuarter } from 'date-fns'
+export default endOfQuarter
diff --git a/date-fns/src/endOfQuarter/index.js.flow b/date-fns/src/endOfQuarter/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/endOfQuarter/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/endOfQuarter/index.ts b/date-fns/src/endOfQuarter/index.ts
new file mode 100644
index 0000000..f0ad8a3
--- /dev/null
+++ b/date-fns/src/endOfQuarter/index.ts
@@ -0,0 +1,35 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfQuarter
+ * @category Quarter Helpers
+ * @summary Return the end of a year quarter for the given date.
+ *
+ * @description
+ * Return the end of a year quarter for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of a quarter
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The end of a quarter for 2 September 2014 11:55:00:
+ * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Tue Sep 30 2014 23:59:59.999
+ */
+export default function endOfQuarter(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const currentMonth = date.getMonth()
+ const month = currentMonth - (currentMonth % 3) + 3
+ date.setMonth(month, 0)
+ date.setHours(23, 59, 59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfQuarter/test.ts b/date-fns/src/endOfQuarter/test.ts
new file mode 100644
index 0000000..11d2e5c
--- /dev/null
+++ b/date-fns/src/endOfQuarter/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfQuarter from '.'
+
+describe('endOfQuarter', function() {
+ it('returns the date with the time set to 23:59:59.999 and the date set to the last day of a quarter', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = endOfQuarter(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30, 23, 59, 59, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = endOfQuarter(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30, 23, 59, 59, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ endOfQuarter(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfQuarter(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfQuarter.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfSecond/benchmark.js b/date-fns/src/endOfSecond/benchmark.js
new file mode 100644
index 0000000..ce9cc65
--- /dev/null
+++ b/date-fns/src/endOfSecond/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfSecond from '.'
+import moment from 'moment'
+
+suite('endOfSecond', function () {
+ benchmark('date-fns', function () {
+ return endOfSecond(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.endOf('second')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/endOfSecond/index.d.ts b/date-fns/src/endOfSecond/index.d.ts
new file mode 100644
index 0000000..3af9fbd
--- /dev/null
+++ b/date-fns/src/endOfSecond/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfSecond } from 'date-fns'
+export default endOfSecond
diff --git a/date-fns/src/endOfSecond/index.js.flow b/date-fns/src/endOfSecond/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/endOfSecond/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/endOfSecond/index.ts b/date-fns/src/endOfSecond/index.ts
new file mode 100644
index 0000000..2f185be
--- /dev/null
+++ b/date-fns/src/endOfSecond/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfSecond
+ * @category Second Helpers
+ * @summary Return the end of a second for the given date.
+ *
+ * @description
+ * Return the end of a second for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of a second
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The end of a second for 1 December 2014 22:15:45.400:
+ * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))
+ * //=> Mon Dec 01 2014 22:15:45.999
+ */
+export default function endOfSecond(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ date.setMilliseconds(999)
+ return date
+}
diff --git a/date-fns/src/endOfSecond/test.ts b/date-fns/src/endOfSecond/test.ts
new file mode 100644
index 0000000..bd67ecd
--- /dev/null
+++ b/date-fns/src/endOfSecond/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfSecond from '.'
+
+describe('endOfSecond', function() {
+ it('returns the date with the time set to the last millisecond before a second ends', function() {
+ const date = new Date(2014, 11, 1, 22, 15, 30)
+ const result = endOfSecond(date)
+ assert.deepEqual(result, new Date(2014, 11, 1, 22, 15, 30, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45).getTime())
+ assert.deepEqual(result, new Date(2014, 11, 1, 22, 15, 45, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 11, 1, 22, 15, 15, 300)
+ endOfSecond(date)
+ assert.deepEqual(date, new Date(2014, 11, 1, 22, 15, 15, 300))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfSecond(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfSecond.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfToday/benchmark.js b/date-fns/src/endOfToday/benchmark.js
new file mode 100644
index 0000000..515c528
--- /dev/null
+++ b/date-fns/src/endOfToday/benchmark.js
@@ -0,0 +1,9 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfToday from '.'
+
+suite('endOfToday', () => {
+ benchmark('date-fns', () => endOfToday())
+})
diff --git a/date-fns/src/endOfToday/index.d.ts b/date-fns/src/endOfToday/index.d.ts
new file mode 100644
index 0000000..30de098
--- /dev/null
+++ b/date-fns/src/endOfToday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfToday } from 'date-fns'
+export default endOfToday
diff --git a/date-fns/src/endOfToday/index.js.flow b/date-fns/src/endOfToday/index.js.flow
new file mode 100644
index 0000000..26bde32
--- /dev/null
+++ b/date-fns/src/endOfToday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: () => Date
diff --git a/date-fns/src/endOfToday/index.ts b/date-fns/src/endOfToday/index.ts
new file mode 100644
index 0000000..9d0c180
--- /dev/null
+++ b/date-fns/src/endOfToday/index.ts
@@ -0,0 +1,28 @@
+import endOfDay from '../endOfDay/index'
+
+/**
+ * @name endOfToday
+ * @category Day Helpers
+ * @summary Return the end of today.
+ * @pure false
+ *
+ * @description
+ * Return the end of today.
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @returns {Date} the end of today
+ *
+ * @example
+ * // If today is 6 October 2014:
+ * var result = endOfToday()
+ * //=> Mon Oct 6 2014 23:59:59.999
+ */
+export default function endOfToday(): Date {
+ return endOfDay(Date.now())
+}
diff --git a/date-fns/src/endOfToday/test.ts b/date-fns/src/endOfToday/test.ts
new file mode 100644
index 0000000..8aa0e69
--- /dev/null
+++ b/date-fns/src/endOfToday/test.ts
@@ -0,0 +1,24 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon, { SinonFakeTimers } from 'sinon'
+import endOfToday from '.'
+
+describe('endOfToday', () => {
+ let clock: SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(
+ new Date(2014, 8 /* Sep */, 25, 14, 30, 45, 500).getTime()
+ )
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns the current date with the time settled to 23:59:59.999', () => {
+ const result = endOfToday()
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 25, 23, 59, 59, 999))
+ })
+})
diff --git a/date-fns/src/endOfTomorrow/benchmark.js b/date-fns/src/endOfTomorrow/benchmark.js
new file mode 100644
index 0000000..c2b7e6b
--- /dev/null
+++ b/date-fns/src/endOfTomorrow/benchmark.js
@@ -0,0 +1,9 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfTomorrow from '.'
+
+suite('endOfTomorrow', () => {
+ benchmark('date-fns', () => endOfTomorrow())
+})
diff --git a/date-fns/src/endOfTomorrow/index.d.ts b/date-fns/src/endOfTomorrow/index.d.ts
new file mode 100644
index 0000000..df5619e
--- /dev/null
+++ b/date-fns/src/endOfTomorrow/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfTomorrow } from 'date-fns'
+export default endOfTomorrow
diff --git a/date-fns/src/endOfTomorrow/index.js.flow b/date-fns/src/endOfTomorrow/index.js.flow
new file mode 100644
index 0000000..26bde32
--- /dev/null
+++ b/date-fns/src/endOfTomorrow/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: () => Date
diff --git a/date-fns/src/endOfTomorrow/index.ts b/date-fns/src/endOfTomorrow/index.ts
new file mode 100644
index 0000000..a196b1d
--- /dev/null
+++ b/date-fns/src/endOfTomorrow/index.ts
@@ -0,0 +1,34 @@
+/**
+ * @name endOfTomorrow
+ * @category Day Helpers
+ * @summary Return the end of tomorrow.
+ * @pure false
+ *
+ * @description
+ * Return the end of tomorrow.
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `new Date()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @returns {Date} the end of tomorrow
+ *
+ * @example
+ * // If today is 6 October 2014:
+ * const result = endOfTomorrow()
+ * //=> Tue Oct 7 2014 23:59:59.999
+ */
+export default function endOfTomorrow(): Date {
+ const now = new Date()
+ const year = now.getFullYear()
+ const month = now.getMonth()
+ const day = now.getDate()
+
+ const date = new Date(0)
+ date.setFullYear(year, month, day + 1)
+ date.setHours(23, 59, 59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfTomorrow/test.ts b/date-fns/src/endOfTomorrow/test.ts
new file mode 100644
index 0000000..01e5afe
--- /dev/null
+++ b/date-fns/src/endOfTomorrow/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import endOfTomorrow from '.'
+
+describe('endOfTomorrow', function() {
+ it('returns tomorrow with the time settled to 23:59:59.999', function() {
+ const clock = sinon.useFakeTimers(
+ new Date(2014, 8 /* Sep */, 25, 14, 30, 45, 500).getTime()
+ )
+
+ const result = endOfTomorrow()
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 26, 23, 59, 59, 999))
+
+ clock.restore()
+ })
+
+ it('handles dates before 100 AD', function() {
+ const now = new Date(0)
+ now.setFullYear(14, 8 /* Sep */, 25)
+ now.setHours(14, 30, 45, 500)
+ const clock = sinon.useFakeTimers(now.getTime())
+
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(14, 8 /* Sep */, 26)
+ expectedResult.setHours(23, 59, 59, 999)
+ const result = endOfTomorrow()
+ assert.deepEqual(result, expectedResult)
+
+ clock.restore()
+ })
+})
diff --git a/date-fns/src/endOfWeek/benchmark.js b/date-fns/src/endOfWeek/benchmark.js
new file mode 100644
index 0000000..4731dc7
--- /dev/null
+++ b/date-fns/src/endOfWeek/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfWeek from '.'
+import moment from 'moment'
+
+suite('endOfWeek', function () {
+ benchmark('date-fns', function () {
+ return endOfWeek(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.endOf('week')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/endOfWeek/index.d.ts b/date-fns/src/endOfWeek/index.d.ts
new file mode 100644
index 0000000..50a77a3
--- /dev/null
+++ b/date-fns/src/endOfWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfWeek } from 'date-fns'
+export default endOfWeek
diff --git a/date-fns/src/endOfWeek/index.js.flow b/date-fns/src/endOfWeek/index.js.flow
new file mode 100644
index 0000000..9285b67
--- /dev/null
+++ b/date-fns/src/endOfWeek/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => Date
diff --git a/date-fns/src/endOfWeek/index.ts b/date-fns/src/endOfWeek/index.ts
new file mode 100644
index 0000000..f04a6f0
--- /dev/null
+++ b/date-fns/src/endOfWeek/index.ts
@@ -0,0 +1,67 @@
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { LocaleOptions, WeekStartOptions } from '../types'
+
+/**
+ * @name endOfWeek
+ * @category Week Helpers
+ * @summary Return the end of a week for the given date.
+ *
+ * @description
+ * Return the end of a week for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Date} the end of a week
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ *
+ * @example
+ * // The end of a week for 2 September 2014 11:55:00:
+ * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Sat Sep 06 2014 23:59:59.999
+ *
+ * @example
+ * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:
+ * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })
+ * //=> Sun Sep 07 2014 23:59:59.999
+ */
+export default function endOfWeek(
+ dirtyDate: Date | number,
+ dirtyOptions?: LocaleOptions & WeekStartOptions
+): Date {
+ requiredArgs(1, arguments)
+
+ const options = dirtyOptions || {}
+
+ const locale = options.locale
+ const localeWeekStartsOn =
+ locale && locale.options && locale.options.weekStartsOn
+ const defaultWeekStartsOn =
+ localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)
+ const weekStartsOn =
+ options.weekStartsOn == null
+ ? defaultWeekStartsOn
+ : toInteger(options.weekStartsOn)
+
+ // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')
+ }
+
+ const date = toDate(dirtyDate)
+ const day = date.getDay()
+ const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)
+
+ date.setDate(date.getDate() + diff)
+ date.setHours(23, 59, 59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfWeek/test.ts b/date-fns/src/endOfWeek/test.ts
new file mode 100644
index 0000000..83e1e2c
--- /dev/null
+++ b/date-fns/src/endOfWeek/test.ts
@@ -0,0 +1,144 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import endOfWeek from '.'
+
+describe('endOfWeek', function () {
+ it('returns the date with the time set to 23:59:59:999 and the date set to the last day of a week', function () {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = endOfWeek(date)
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 8 /* Sep */, 6, 23, 59, 59, 999)
+ )
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = endOfWeek(date, { weekStartsOn: 1 })
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 8 /* Sep */, 7, 23, 59, 59, 999)
+ )
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function () {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = endOfWeek(date, {
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 1 },
+ },
+ })
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 8 /* Sep */, 7, 23, 59, 59, 999)
+ )
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function () {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = endOfWeek(date, {
+ weekStartsOn: 1,
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 0 },
+ },
+ })
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 8 /* Sep */, 7, 23, 59, 59, 999)
+ )
+ })
+
+ it('implicitly converts options', function () {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ // @ts-expect-error
+ var result = endOfWeek(date, { weekStartsOn: '1' })
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 8 /* Sep */, 7, 23, 59, 59, 999)
+ )
+ })
+
+ it('accepts a timestamp', function () {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ var result = endOfWeek(date)
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 8 /* Sep */, 6, 23, 59, 59, 999)
+ )
+ })
+
+ it('does not mutate the original date', function () {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ endOfWeek(date)
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ describe('edge cases', function () {
+ describe('when the given day is before the start of a week', function () {
+ it('it returns the end of a week', function () {
+ var date = new Date(2014, 9 /* Oct */, 6)
+ var result = endOfWeek(date, { weekStartsOn: 3 })
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 9 /* Oct */, 7, 23, 59, 59, 999)
+ )
+ })
+ })
+
+ describe('when the given day is the start of a week', function () {
+ it('it returns the end of a week', function () {
+ var date = new Date(2014, 9 /* Oct */, 8)
+ var result = endOfWeek(date, { weekStartsOn: 3 })
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 9 /* Oct */, 14, 23, 59, 59, 999)
+ )
+ })
+ })
+
+ describe('when the given day is after the start of a week', function () {
+ it('it returns the end of a week', function () {
+ var date = new Date(2014, 9 /* Oct */, 10)
+ var result = endOfWeek(date, { weekStartsOn: 3 })
+ assert.deepStrictEqual(
+ result,
+ new Date(2014, 9 /* Oct */, 14, 23, 59, 59, 999)
+ )
+ })
+ })
+
+ it('handles the week at the end of a year', function () {
+ var date = new Date(2014, 11 /* Dec */, 29)
+ var result = endOfWeek(date, { weekStartsOn: 5 })
+ assert.deepStrictEqual(
+ result,
+ new Date(2015, 0 /* Jan */, 1, 23, 59, 59, 999)
+ )
+ })
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ var result = endOfWeek(new Date(NaN))
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ // @ts-expect-error
+ var block = endOfWeek.bind(
+ null,
+ new Date(2014, 8 /* Sep */, 2, 11, 55, 0),
+ // $ExpectedMistake
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ // @ts-expect-error
+ assert.throws(endOfWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfYear/benchmark.js b/date-fns/src/endOfYear/benchmark.js
new file mode 100644
index 0000000..c39cc5c
--- /dev/null
+++ b/date-fns/src/endOfYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfYear from '.'
+import moment from 'moment'
+
+suite('endOfYear', function () {
+ benchmark('date-fns', function () {
+ return endOfYear(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.endOf('year')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/endOfYear/index.d.ts b/date-fns/src/endOfYear/index.d.ts
new file mode 100644
index 0000000..63d5191
--- /dev/null
+++ b/date-fns/src/endOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfYear } from 'date-fns'
+export default endOfYear
diff --git a/date-fns/src/endOfYear/index.js.flow b/date-fns/src/endOfYear/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/endOfYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/endOfYear/index.ts b/date-fns/src/endOfYear/index.ts
new file mode 100644
index 0000000..48034ee
--- /dev/null
+++ b/date-fns/src/endOfYear/index.ts
@@ -0,0 +1,34 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name endOfYear
+ * @category Year Helpers
+ * @summary Return the end of a year for the given date.
+ *
+ * @description
+ * Return the end of a year for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of a year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The end of a year for 2 September 2014 11:55:00:
+ * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))
+ * //=> Wed Dec 31 2014 23:59:59.999
+ */
+export default function endOfYear(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ var date = toDate(dirtyDate)
+ var year = date.getFullYear()
+ date.setFullYear(year + 1, 0, 0)
+ date.setHours(23, 59, 59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfYear/test.ts b/date-fns/src/endOfYear/test.ts
new file mode 100644
index 0000000..223dba8
--- /dev/null
+++ b/date-fns/src/endOfYear/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import endOfYear from '.'
+
+describe('endOfYear', function() {
+ it('returns the date with the time set to 23:59:59.999 and the date set to the last day of a year', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = endOfYear(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 31, 23, 59, 59, 999))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = endOfYear(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 31, 23, 59, 59, 999))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ endOfYear(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = endOfYear(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(endOfYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/endOfYesterday/benchmark.js b/date-fns/src/endOfYesterday/benchmark.js
new file mode 100644
index 0000000..e3681e5
--- /dev/null
+++ b/date-fns/src/endOfYesterday/benchmark.js
@@ -0,0 +1,9 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import endOfYesterday from '.'
+
+suite('endOfYesterday', () => {
+ benchmark('date-fns', () => endOfYesterday())
+})
diff --git a/date-fns/src/endOfYesterday/index.d.ts b/date-fns/src/endOfYesterday/index.d.ts
new file mode 100644
index 0000000..b06935b
--- /dev/null
+++ b/date-fns/src/endOfYesterday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfYesterday } from 'date-fns'
+export default endOfYesterday
diff --git a/date-fns/src/endOfYesterday/index.js.flow b/date-fns/src/endOfYesterday/index.js.flow
new file mode 100644
index 0000000..26bde32
--- /dev/null
+++ b/date-fns/src/endOfYesterday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: () => Date
diff --git a/date-fns/src/endOfYesterday/index.ts b/date-fns/src/endOfYesterday/index.ts
new file mode 100644
index 0000000..6207cc5
--- /dev/null
+++ b/date-fns/src/endOfYesterday/index.ts
@@ -0,0 +1,34 @@
+/**
+ * @name endOfYesterday
+ * @category Day Helpers
+ * @summary Return the end of yesterday.
+ * @pure false
+ *
+ * @description
+ * Return the end of yesterday.
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `new Date()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @returns {Date} the end of yesterday
+ *
+ * @example
+ * // If today is 6 October 2014:
+ * const result = endOfYesterday()
+ * //=> Sun Oct 5 2014 23:59:59.999
+ */
+export default function endOfYesterday(): Date {
+ const now = new Date()
+ const year = now.getFullYear()
+ const month = now.getMonth()
+ const day = now.getDate()
+
+ const date = new Date(0)
+ date.setFullYear(year, month, day - 1)
+ date.setHours(23, 59, 59, 999)
+ return date
+}
diff --git a/date-fns/src/endOfYesterday/test.ts b/date-fns/src/endOfYesterday/test.ts
new file mode 100644
index 0000000..4046e64
--- /dev/null
+++ b/date-fns/src/endOfYesterday/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import endOfYesterday from '.'
+
+describe('endOfYesterday', () => {
+ it('returns yesterday with the time settled to 23:59:59.999', () => {
+ const clock = sinon.useFakeTimers(
+ new Date(2014, 8 /* Sep */, 25, 14, 30, 45, 500).getTime()
+ )
+
+ const result = endOfYesterday()
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 24, 23, 59, 59, 999))
+
+ clock.restore()
+ })
+
+ it('handles dates before 100 AD', () => {
+ const now = new Date(0)
+ now.setFullYear(14, 8 /* Sep */, 25)
+ now.setHours(14, 30, 45, 500)
+ const clock = sinon.useFakeTimers(now.getTime())
+
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(14, 8 /* Sep */, 24)
+ expectedResult.setHours(23, 59, 59, 999)
+ const result = endOfYesterday()
+ assert.deepEqual(result, expectedResult)
+
+ clock.restore()
+ })
+})
diff --git a/date-fns/src/format/benchmark.js b/date-fns/src/format/benchmark.js
new file mode 100644
index 0000000..38a9f86
--- /dev/null
+++ b/date-fns/src/format/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import format from '.'
+import moment from 'moment'
+
+suite('format', function () {
+ benchmark('date-fns', function () {
+ return format(this.date, 'dddd, MMMM Do YYYY, h:mm:ss a')
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.format('dddd, MMMM Do YYYY, h:mm:ss a')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/format/index.d.ts b/date-fns/src/format/index.d.ts
new file mode 100644
index 0000000..06d38ce
--- /dev/null
+++ b/date-fns/src/format/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { format } from 'date-fns'
+export default format
diff --git a/date-fns/src/format/index.js b/date-fns/src/format/index.js
new file mode 100644
index 0000000..5a532ea
--- /dev/null
+++ b/date-fns/src/format/index.js
@@ -0,0 +1,471 @@
+import isValid from '../isValid/index'
+import defaultLocale from '../locale/en-US/index'
+import subMilliseconds from '../subMilliseconds/index'
+import toDate from '../toDate/index'
+import formatters from '../_lib/format/formatters/index'
+import longFormatters from '../_lib/format/longFormatters/index'
+import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index'
+import {
+ isProtectedDayOfYearToken,
+ isProtectedWeekYearToken,
+ throwProtectedError
+} from '../_lib/protectedTokens/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+// This RegExp consists of three parts separated by `|`:
+// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token
+// (one of the certain letters followed by `o`)
+// - (\w)\1* matches any sequences of the same letter
+// - '' matches two quote characters in a row
+// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),
+// except a single quote symbol, which ends the sequence.
+// Two quote characters do not end the sequence.
+// If there is no matching single quote
+// then the sequence will continue until the end of the string.
+// - . matches any single character unmatched by previous parts of the RegExps
+var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g
+
+// This RegExp catches symbols escaped by quotes, and also
+// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`
+var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g
+
+var escapedStringRegExp = /^'([^]*?)'?$/
+var doubleQuoteRegExp = /''/g
+var unescapedLatinCharacterRegExp = /[a-zA-Z]/
+
+/**
+ * @name format
+ * @category Common Helpers
+ * @summary Format the date.
+ *
+ * @description
+ * Return the formatted date string in the given format. The result may vary by locale.
+ *
+ * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.
+ * > See: https://git.io/fxCyr
+ *
+ * The characters wrapped between two single quotes characters (') are escaped.
+ * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.
+ * (see the last example)
+ *
+ * Format of the string is based on Unicode Technical Standard #35:
+ * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ * with a few additions (see note 7 below the table).
+ *
+ * Accepted patterns:
+ * | Unit | Pattern | Result examples | Notes |
+ * |---------------------------------|---------|-----------------------------------|-------|
+ * | Era | G..GGG | AD, BC | |
+ * | | GGGG | Anno Domini, Before Christ | 2 |
+ * | | GGGGG | A, B | |
+ * | Calendar year | y | 44, 1, 1900, 2017 | 5 |
+ * | | yo | 44th, 1st, 0th, 17th | 5,7 |
+ * | | yy | 44, 01, 00, 17 | 5 |
+ * | | yyy | 044, 001, 1900, 2017 | 5 |
+ * | | yyyy | 0044, 0001, 1900, 2017 | 5 |
+ * | | yyyyy | ... | 3,5 |
+ * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |
+ * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |
+ * | | YY | 44, 01, 00, 17 | 5,8 |
+ * | | YYY | 044, 001, 1900, 2017 | 5 |
+ * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |
+ * | | YYYYY | ... | 3,5 |
+ * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |
+ * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |
+ * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |
+ * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |
+ * | | RRRRR | ... | 3,5,7 |
+ * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |
+ * | | uu | -43, 01, 1900, 2017 | 5 |
+ * | | uuu | -043, 001, 1900, 2017 | 5 |
+ * | | uuuu | -0043, 0001, 1900, 2017 | 5 |
+ * | | uuuuu | ... | 3,5 |
+ * | Quarter (formatting) | Q | 1, 2, 3, 4 | |
+ * | | Qo | 1st, 2nd, 3rd, 4th | 7 |
+ * | | QQ | 01, 02, 03, 04 | |
+ * | | QQQ | Q1, Q2, Q3, Q4 | |
+ * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |
+ * | | QQQQQ | 1, 2, 3, 4 | 4 |
+ * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |
+ * | | qo | 1st, 2nd, 3rd, 4th | 7 |
+ * | | qq | 01, 02, 03, 04 | |
+ * | | qqq | Q1, Q2, Q3, Q4 | |
+ * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |
+ * | | qqqqq | 1, 2, 3, 4 | 4 |
+ * | Month (formatting) | M | 1, 2, ..., 12 | |
+ * | | Mo | 1st, 2nd, ..., 12th | 7 |
+ * | | MM | 01, 02, ..., 12 | |
+ * | | MMM | Jan, Feb, ..., Dec | |
+ * | | MMMM | January, February, ..., December | 2 |
+ * | | MMMMM | J, F, ..., D | |
+ * | Month (stand-alone) | L | 1, 2, ..., 12 | |
+ * | | Lo | 1st, 2nd, ..., 12th | 7 |
+ * | | LL | 01, 02, ..., 12 | |
+ * | | LLL | Jan, Feb, ..., Dec | |
+ * | | LLLL | January, February, ..., December | 2 |
+ * | | LLLLL | J, F, ..., D | |
+ * | Local week of year | w | 1, 2, ..., 53 | |
+ * | | wo | 1st, 2nd, ..., 53th | 7 |
+ * | | ww | 01, 02, ..., 53 | |
+ * | ISO week of year | I | 1, 2, ..., 53 | 7 |
+ * | | Io | 1st, 2nd, ..., 53th | 7 |
+ * | | II | 01, 02, ..., 53 | 7 |
+ * | Day of month | d | 1, 2, ..., 31 | |
+ * | | do | 1st, 2nd, ..., 31st | 7 |
+ * | | dd | 01, 02, ..., 31 | |
+ * | Day of year | D | 1, 2, ..., 365, 366 | 9 |
+ * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |
+ * | | DD | 01, 02, ..., 365, 366 | 9 |
+ * | | DDD | 001, 002, ..., 365, 366 | |
+ * | | DDDD | ... | 3 |
+ * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |
+ * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |
+ * | | EEEEE | M, T, W, T, F, S, S | |
+ * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |
+ * | | io | 1st, 2nd, ..., 7th | 7 |
+ * | | ii | 01, 02, ..., 07 | 7 |
+ * | | iii | Mon, Tue, Wed, ..., Sun | 7 |
+ * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |
+ * | | iiiii | M, T, W, T, F, S, S | 7 |
+ * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |
+ * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |
+ * | | eo | 2nd, 3rd, ..., 1st | 7 |
+ * | | ee | 02, 03, ..., 01 | |
+ * | | eee | Mon, Tue, Wed, ..., Sun | |
+ * | | eeee | Monday, Tuesday, ..., Sunday | 2 |
+ * | | eeeee | M, T, W, T, F, S, S | |
+ * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |
+ * | | co | 2nd, 3rd, ..., 1st | 7 |
+ * | | cc | 02, 03, ..., 01 | |
+ * | | ccc | Mon, Tue, Wed, ..., Sun | |
+ * | | cccc | Monday, Tuesday, ..., Sunday | 2 |
+ * | | ccccc | M, T, W, T, F, S, S | |
+ * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | AM, PM | a..aa | AM, PM | |
+ * | | aaa | am, pm | |
+ * | | aaaa | a.m., p.m. | 2 |
+ * | | aaaaa | a, p | |
+ * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |
+ * | | bbb | am, pm, noon, midnight | |
+ * | | bbbb | a.m., p.m., noon, midnight | 2 |
+ * | | bbbbb | a, p, n, mi | |
+ * | Flexible day period | B..BBB | at night, in the morning, ... | |
+ * | | BBBB | at night, in the morning, ... | 2 |
+ * | | BBBBB | at night, in the morning, ... | |
+ * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |
+ * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |
+ * | | hh | 01, 02, ..., 11, 12 | |
+ * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |
+ * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |
+ * | | HH | 00, 01, 02, ..., 23 | |
+ * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |
+ * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |
+ * | | KK | 01, 02, ..., 11, 00 | |
+ * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |
+ * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |
+ * | | kk | 24, 01, 02, ..., 23 | |
+ * | Minute | m | 0, 1, ..., 59 | |
+ * | | mo | 0th, 1st, ..., 59th | 7 |
+ * | | mm | 00, 01, ..., 59 | |
+ * | Second | s | 0, 1, ..., 59 | |
+ * | | so | 0th, 1st, ..., 59th | 7 |
+ * | | ss | 00, 01, ..., 59 | |
+ * | Fraction of second | S | 0, 1, ..., 9 | |
+ * | | SS | 00, 01, ..., 99 | |
+ * | | SSS | 000, 001, ..., 999 | |
+ * | | SSSS | ... | 3 |
+ * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |
+ * | | XX | -0800, +0530, Z | |
+ * | | XXX | -08:00, +05:30, Z | |
+ * | | XXXX | -0800, +0530, Z, +123456 | 2 |
+ * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |
+ * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |
+ * | | xx | -0800, +0530, +0000 | |
+ * | | xxx | -08:00, +05:30, +00:00 | 2 |
+ * | | xxxx | -0800, +0530, +0000, +123456 | |
+ * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |
+ * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |
+ * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |
+ * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |
+ * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |
+ * | Seconds timestamp | t | 512969520 | 7 |
+ * | | tt | ... | 3,7 |
+ * | Milliseconds timestamp | T | 512969520900 | 7 |
+ * | | TT | ... | 3,7 |
+ * | Long localized date | P | 04/29/1453 | 7 |
+ * | | PP | Apr 29, 1453 | 7 |
+ * | | PPP | April 29th, 1453 | 7 |
+ * | | PPPP | Friday, April 29th, 1453 | 2,7 |
+ * | Long localized time | p | 12:00 AM | 7 |
+ * | | pp | 12:00:00 AM | 7 |
+ * | | ppp | 12:00:00 AM GMT+2 | 7 |
+ * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |
+ * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |
+ * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |
+ * | | PPPppp | April 29th, 1453 at ... | 7 |
+ * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |
+ * Notes:
+ * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale
+ * are the same as "stand-alone" units, but are different in some languages.
+ * "Formatting" units are declined according to the rules of the language
+ * in the context of a date. "Stand-alone" units are always nominative singular:
+ *
+ * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`
+ *
+ * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`
+ *
+ * 2. Any sequence of the identical letters is a pattern, unless it is escaped by
+ * the single quote characters (see below).
+ * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)
+ * the output will be the same as default pattern for this unit, usually
+ * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units
+ * are marked with "2" in the last column of the table.
+ *
+ * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`
+ *
+ * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`
+ *
+ * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`
+ *
+ * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`
+ *
+ * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`
+ *
+ * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).
+ * The output will be padded with zeros to match the length of the pattern.
+ *
+ * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`
+ *
+ * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.
+ * These tokens represent the shortest form of the quarter.
+ *
+ * 5. The main difference between `y` and `u` patterns are B.C. years:
+ *
+ * | Year | `y` | `u` |
+ * |------|-----|-----|
+ * | AC 1 | 1 | 1 |
+ * | BC 1 | 1 | 0 |
+ * | BC 2 | 2 | -1 |
+ *
+ * Also `yy` always returns the last two digits of a year,
+ * while `uu` pads single digit years to 2 characters and returns other years unchanged:
+ *
+ * | Year | `yy` | `uu` |
+ * |------|------|------|
+ * | 1 | 01 | 01 |
+ * | 14 | 14 | 14 |
+ * | 376 | 76 | 376 |
+ * | 1453 | 53 | 1453 |
+ *
+ * The same difference is true for local and ISO week-numbering years (`Y` and `R`),
+ * except local week-numbering years are dependent on `options.weekStartsOn`
+ * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}
+ * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).
+ *
+ * 6. Specific non-location timezones are currently unavailable in `date-fns`,
+ * so right now these tokens fall back to GMT timezones.
+ *
+ * 7. These patterns are not in the Unicode Technical Standard #35:
+ * - `i`: ISO day of week
+ * - `I`: ISO week of year
+ * - `R`: ISO week-numbering year
+ * - `t`: seconds timestamp
+ * - `T`: milliseconds timestamp
+ * - `o`: ordinal number modifier
+ * - `P`: long localized date
+ * - `p`: long localized time
+ *
+ * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.
+ * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr
+ *
+ * 9. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.
+ * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The second argument is now required for the sake of explicitness.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ * format(new Date(2016, 0, 1))
+ *
+ * // v2.0.0 onward
+ * format(new Date(2016, 0, 1), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx")
+ * ```
+ *
+ * - New format string API for `format` function
+ * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).
+ * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.
+ *
+ * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.
+ *
+ * @param {Date|Number} date - the original date
+ * @param {String} format - the string of tokens
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is
+ * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;
+ * see: https://git.io/fxCyr
+ * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;
+ * see: https://git.io/fxCyr
+ * @returns {String} the formatted date string
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `date` must not be Invalid Date
+ * @throws {RangeError} `options.locale` must contain `localize` property
+ * @throws {RangeError} `options.locale` must contain `formatLong` property
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
+ * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} format string contains an unescaped latin alphabet character
+ *
+ * @example
+ * // Represent 11 February 2014 in middle-endian format:
+ * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')
+ * //=> '02/11/2014'
+ *
+ * @example
+ * // Represent 2 July 2014 in Esperanto:
+ * import { eoLocale } from 'date-fns/locale/eo'
+ * var result = format(new Date(2014, 6, 2), "do 'de' MMMM yyyy", {
+ * locale: eoLocale
+ * })
+ * //=> '2-a de julio 2014'
+ *
+ * @example
+ * // Escape string by single quote characters:
+ * var result = format(new Date(2014, 6, 2, 15), "h 'o''clock'")
+ * //=> "3 o'clock"
+ */
+export default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {
+ requiredArgs(2, arguments)
+
+ var formatStr = String(dirtyFormatStr)
+ var options = dirtyOptions || {}
+
+ var locale = options.locale || defaultLocale
+
+ var localeFirstWeekContainsDate =
+ locale.options && locale.options.firstWeekContainsDate
+ var defaultFirstWeekContainsDate =
+ localeFirstWeekContainsDate == null
+ ? 1
+ : toInteger(localeFirstWeekContainsDate)
+ var firstWeekContainsDate =
+ options.firstWeekContainsDate == null
+ ? defaultFirstWeekContainsDate
+ : toInteger(options.firstWeekContainsDate)
+
+ // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
+ if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
+ throw new RangeError(
+ 'firstWeekContainsDate must be between 1 and 7 inclusively'
+ )
+ }
+
+ var localeWeekStartsOn = locale.options && locale.options.weekStartsOn
+ var defaultWeekStartsOn =
+ localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)
+ var weekStartsOn =
+ options.weekStartsOn == null
+ ? defaultWeekStartsOn
+ : toInteger(options.weekStartsOn)
+
+ // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')
+ }
+
+ if (!locale.localize) {
+ throw new RangeError('locale must contain localize property')
+ }
+
+ if (!locale.formatLong) {
+ throw new RangeError('locale must contain formatLong property')
+ }
+
+ var originalDate = toDate(dirtyDate)
+
+ if (!isValid(originalDate)) {
+ throw new RangeError('Invalid time value')
+ }
+
+ // Convert the date in system timezone to the same date in UTC+00:00 timezone.
+ // This ensures that when UTC functions will be implemented, locales will be compatible with them.
+ // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376
+ var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)
+ var utcDate = subMilliseconds(originalDate, timezoneOffset)
+
+ var formatterOptions = {
+ firstWeekContainsDate: firstWeekContainsDate,
+ weekStartsOn: weekStartsOn,
+ locale: locale,
+ _originalDate: originalDate
+ }
+
+ var result = formatStr
+ .match(longFormattingTokensRegExp)
+ .map(function(substring) {
+ var firstCharacter = substring[0]
+ if (firstCharacter === 'p' || firstCharacter === 'P') {
+ var longFormatter = longFormatters[firstCharacter]
+ return longFormatter(substring, locale.formatLong, formatterOptions)
+ }
+ return substring
+ })
+ .join('')
+ .match(formattingTokensRegExp)
+ .map(function(substring) {
+ // Replace two single quote characters with one single quote character
+ if (substring === "''") {
+ return "'"
+ }
+
+ var firstCharacter = substring[0]
+ if (firstCharacter === "'") {
+ return cleanEscapedString(substring)
+ }
+
+ var formatter = formatters[firstCharacter]
+ if (formatter) {
+ if (
+ !options.useAdditionalWeekYearTokens &&
+ isProtectedWeekYearToken(substring)
+ ) {
+ throwProtectedError(substring, dirtyFormatStr, dirtyDate)
+ }
+ if (
+ !options.useAdditionalDayOfYearTokens &&
+ isProtectedDayOfYearToken(substring)
+ ) {
+ throwProtectedError(substring, dirtyFormatStr, dirtyDate)
+ }
+ return formatter(utcDate, substring, locale.localize, formatterOptions)
+ }
+
+ if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
+ throw new RangeError(
+ 'Format string contains an unescaped latin alphabet character `' +
+ firstCharacter +
+ '`'
+ )
+ }
+
+ return substring
+ })
+ .join('')
+
+ return result
+}
+
+function cleanEscapedString(input) {
+ return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'")
+}
diff --git a/date-fns/src/format/index.js.flow b/date-fns/src/format/index.js.flow
new file mode 100644
index 0000000..ca79393
--- /dev/null
+++ b/date-fns/src/format/index.js.flow
@@ -0,0 +1,62 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ format: string,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: number,
+ useAdditionalWeekYearTokens?: boolean,
+ useAdditionalDayOfYearTokens?: boolean,
+ }
+) => string
diff --git a/date-fns/src/format/test.js b/date-fns/src/format/test.js
new file mode 100644
index 0000000..97ad003
--- /dev/null
+++ b/date-fns/src/format/test.js
@@ -0,0 +1,813 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import format from '.'
+
+describe('format', function () {
+ var date = new Date(1986, 3 /* Apr */, 4, 10, 32, 55, 123)
+
+ var offset = date.getTimezoneOffset()
+ var absoluteOffset = Math.abs(offset)
+ var hours = Math.floor(absoluteOffset / 60)
+ var hoursLeadingZero = hours < 10 ? '0' : ''
+ var minutes = absoluteOffset % 60
+ var minutesLeadingZero = minutes < 10 ? '0' : ''
+ var sign = offset > 0 ? '-' : '+'
+
+ var timezone =
+ sign + hoursLeadingZero + hours + ':' + minutesLeadingZero + minutes
+ var timezoneShort = timezone.replace(':', '')
+ var timezoneWithOptionalMinutesShort =
+ minutes === 0 ? sign + hoursLeadingZero + hours : timezoneShort
+
+ var timezoneWithZ = offset === 0 ? 'Z' : timezone
+ var timezoneWithZShort = offset === 0 ? 'Z' : timezoneShort
+ var timezoneWithOptionalMinutesAndZShort =
+ offset === 0 ? 'Z' : timezoneWithOptionalMinutesShort
+
+ var timezoneGMTShort =
+ minutes === 0
+ ? 'GMT' + sign + hours
+ : 'GMT' + sign + hours + ':' + minutesLeadingZero + minutes
+ var timezoneGMT = 'GMT' + timezone
+
+ var timestamp = date.getTime().toString()
+ var secondsTimestamp = Math.floor(date.getTime() / 1000).toString()
+
+ it('accepts a timestamp', function () {
+ var date = new Date(2014, 3, 4).getTime()
+ assert(format(date, 'yyyy-MM-dd') === '2014-04-04')
+ })
+
+ it('escapes characters between the single quote characters', function () {
+ var result = format(date, "'yyyy-'MM-dd'THH:mm:ss.SSSX' yyyy-'MM-dd'")
+ assert(result === 'yyyy-04-04THH:mm:ss.SSSX 1986-MM-dd')
+ })
+
+ it('two single quote characters are transformed into a "real" single quote', function () {
+ var date = new Date(2014, 3, 4, 5)
+ assert(format(date, "''h 'o''clock'''") === "'5 o'clock'")
+ })
+
+ it('accepts new line charactor', function () {
+ var date = new Date(2014, 3, 4, 5)
+ assert.equal(format(date, "yyyy-MM-dd'\n'HH:mm:ss"), '2014-04-04\n05:00:00')
+ })
+
+ describe('ordinal numbers', function () {
+ it('ordinal day of an ordinal month', function () {
+ var result = format(date, "do 'day of the' Mo 'month of' yyyy")
+ assert(result === '4th day of the 4th month of 1986')
+ })
+
+ it('should return a correct ordinal number', function () {
+ var result = []
+ for (var i = 1; i <= 31; i++) {
+ result.push(format(new Date(2015, 0, i), 'do'))
+ }
+ var expected = [
+ '1st',
+ '2nd',
+ '3rd',
+ '4th',
+ '5th',
+ '6th',
+ '7th',
+ '8th',
+ '9th',
+ '10th',
+ '11th',
+ '12th',
+ '13th',
+ '14th',
+ '15th',
+ '16th',
+ '17th',
+ '18th',
+ '19th',
+ '20th',
+ '21st',
+ '22nd',
+ '23rd',
+ '24th',
+ '25th',
+ '26th',
+ '27th',
+ '28th',
+ '29th',
+ '30th',
+ '31st',
+ ]
+ assert.deepEqual(result, expected)
+ })
+ })
+
+ it('era', function () {
+ var result = format(date, 'G GG GGG GGGG GGGGG')
+ assert(result === 'AD AD AD Anno Domini A')
+ })
+
+ describe('year', function () {
+ describe('regular year', function () {
+ it('works as expected', function () {
+ var result = format(date, 'y yo yy yyy yyyy yyyyy')
+ assert(result === '1986 1986th 86 1986 1986 01986')
+ })
+
+ it('1 BC formats as 1', function () {
+ var date = new Date(0)
+ date.setFullYear(0, 0 /* Jan */, 1)
+ date.setHours(0, 0, 0, 0)
+ var result = format(date, 'y')
+ assert(result === '1')
+ })
+
+ it('2 BC formats as 2', function () {
+ var date = new Date(0)
+ date.setFullYear(-1, 0 /* Jan */, 1)
+ date.setHours(0, 0, 0, 0)
+ var result = format(date, 'y')
+ assert(result === '2')
+ })
+ })
+
+ describe('local week-numbering year', function () {
+ it('works as expected', function () {
+ var result = format(date, 'Y Yo YY YYY YYYY YYYYY', {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert(result === '1986 1986th 86 1986 1986 01986')
+ })
+
+ it('the first week of the next year', function () {
+ var result = format(new Date(2013, 11 /* Dec */, 29), 'YYYY', {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert(result === '2014')
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in options', function () {
+ var result = format(new Date(2013, 11 /* Dec */, 29), 'YYYY', {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ useAdditionalWeekYearTokens: true,
+ })
+ assert(result === '2013')
+ })
+
+ it('the first week of year', function () {
+ var result = format(new Date(2016, 0 /* Jan */, 1), 'YYYY', {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert(result === '2016')
+ })
+
+ it('1 BC formats as 1', function () {
+ var date = new Date(0)
+ date.setFullYear(0, 6 /* Jul */, 2)
+ date.setHours(0, 0, 0, 0)
+ var result = format(date, 'Y')
+ assert(result === '1')
+ })
+
+ it('2 BC formats as 2', function () {
+ var date = new Date(0)
+ date.setFullYear(-1, 6 /* Jul */, 2)
+ date.setHours(0, 0, 0, 0)
+ var result = format(date, 'Y')
+ assert(result === '2')
+ })
+ })
+
+ describe('ISO week-numbering year', function () {
+ it('works as expected', function () {
+ var result = format(date, 'R RR RRR RRRR RRRRR')
+ assert(result === '1986 1986 1986 1986 01986')
+ })
+
+ it('the first week of the next year', function () {
+ var result = format(new Date(2013, 11 /* Dec */, 30), 'RRRR')
+ assert(result === '2014')
+ })
+
+ it('the last week of the previous year', function () {
+ var result = format(new Date(2016, 0 /* Jan */, 1), 'RRRR')
+ assert(result === '2015')
+ })
+
+ it('1 BC formats as 0', function () {
+ var date = new Date(0)
+ date.setFullYear(0, 6 /* Jul */, 2)
+ date.setHours(0, 0, 0, 0)
+ var result = format(date, 'R')
+ assert(result === '0')
+ })
+
+ it('2 BC formats as -1', function () {
+ var date = new Date(0)
+ date.setFullYear(-1, 6 /* Jul */, 2)
+ date.setHours(0, 0, 0, 0)
+ var result = format(date, 'R')
+ assert(result === '-1')
+ })
+ })
+
+ describe('extended year', function () {
+ it('works as expected', function () {
+ var result = format(date, 'u uu uuu uuuu uuuuu')
+ assert(result === '1986 1986 1986 1986 01986')
+ })
+
+ it('1 BC formats as 0', function () {
+ var date = new Date(0)
+ date.setFullYear(0, 0, 1)
+ date.setHours(0, 0, 0, 0)
+ var result = format(date, 'u')
+ assert(result === '0')
+ })
+
+ it('2 BC formats as -1', function () {
+ var date = new Date(0)
+ date.setFullYear(-1, 0, 1)
+ date.setHours(0, 0, 0, 0)
+ var result = format(date, 'u')
+ assert(result === '-1')
+ })
+ })
+ })
+
+ describe('quarter', function () {
+ it('formatting quarter', function () {
+ var result = format(date, 'Q Qo QQ QQQ QQQQ QQQQQ')
+ assert(result === '2 2nd 02 Q2 2nd quarter 2')
+ })
+
+ it('stand-alone quarter', function () {
+ var result = format(date, 'q qo qq qqq qqqq qqqqq')
+ assert(result === '2 2nd 02 Q2 2nd quarter 2')
+ })
+
+ it('returns a correct quarter for each month', function () {
+ var result = []
+ for (var i = 0; i <= 11; i++) {
+ result.push(format(new Date(1986, i, 1), 'Q'))
+ }
+ var expected = [
+ '1',
+ '1',
+ '1',
+ '2',
+ '2',
+ '2',
+ '3',
+ '3',
+ '3',
+ '4',
+ '4',
+ '4',
+ ]
+ assert.deepEqual(result, expected)
+ })
+ })
+
+ describe('month', function () {
+ it('formatting month', function () {
+ var result = format(date, 'M Mo MM MMM MMMM MMMMM')
+ assert(result === '4 4th 04 Apr April A')
+ })
+
+ it('stand-alone month', function () {
+ var result = format(date, 'L Lo LL LLL LLLL LLLLL')
+ assert(result === '4 4th 04 Apr April A')
+ })
+ })
+
+ describe('week', function () {
+ describe('local week of year', function () {
+ it('works as expected', function () {
+ var date = new Date(1986, 3 /* Apr */, 6)
+ var result = format(date, 'w wo ww')
+ assert(result === '15 15th 15')
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in options', function () {
+ var date = new Date(1986, 3 /* Apr */, 6)
+ var result = format(date, 'w wo ww', {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ })
+ assert(result === '14 14th 14')
+ })
+ })
+
+ it('ISO week of year', function () {
+ var date = new Date(1986, 3 /* Apr */, 6)
+ var result = format(date, 'I Io II')
+ assert(result === '14 14th 14')
+ })
+ })
+
+ describe('day', function () {
+ it('date', function () {
+ var result = format(date, 'd do dd')
+ assert(result === '4 4th 04')
+ })
+
+ describe('day of year', function () {
+ it('works as expected', function () {
+ var result = format(date, 'D Do DD DDD DDDDD', {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert(result === '94 94th 94 094 00094')
+ })
+
+ it('returns a correct day number for the last day of a leap year', function () {
+ var result = format(
+ new Date(1992, 11 /* Dec */, 31, 23, 59, 59, 999),
+ 'D',
+ { useAdditionalDayOfYearTokens: true }
+ )
+ assert(result === '366')
+ })
+ })
+ })
+
+ describe('week day', function () {
+ describe('day of week', function () {
+ it('works as expected', function () {
+ var result = format(date, 'E EE EEE EEEE EEEEE EEEEEE')
+ assert(result === 'Fri Fri Fri Friday F Fr')
+ })
+ })
+
+ describe('ISO day of week', function () {
+ it('works as expected', function () {
+ var result = format(date, 'i io ii iii iiii iiiii iiiiii')
+ assert(result === '5 5th 05 Fri Friday F Fr')
+ })
+
+ it('returns a correct day of an ISO week', function () {
+ var result = []
+ for (var i = 1; i <= 7; i++) {
+ result.push(format(new Date(1986, 8 /* Sep */, i), 'i'))
+ }
+ var expected = ['1', '2', '3', '4', '5', '6', '7']
+ assert.deepEqual(result, expected)
+ })
+ })
+
+ describe('formatting day of week', function () {
+ it('works as expected', function () {
+ var result = format(date, 'e eo ee eee eeee eeeee eeeeee')
+ assert(result === '6 6th 06 Fri Friday F Fr')
+ })
+
+ it('by default, 1 is Sunday, 2 is Monday, ...', function () {
+ var result = []
+ for (var i = 7; i <= 13; i++) {
+ result.push(format(new Date(1986, 8 /* Sep */, i), 'e'))
+ }
+ var expected = ['1', '2', '3', '4', '5', '6', '7']
+ assert.deepEqual(result, expected)
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = []
+ for (var i = 1; i <= 7; i++) {
+ result.push(
+ format(new Date(1986, 8 /* Sep */, i), 'e', { weekStartsOn: 1 })
+ )
+ }
+ var expected = ['1', '2', '3', '4', '5', '6', '7']
+ assert.deepEqual(result, expected)
+ })
+ })
+
+ describe('stand-alone day of week', function () {
+ it('works as expected', function () {
+ var result = format(date, 'c co cc ccc cccc ccccc cccccc')
+ assert(result === '6 6th 06 Fri Friday F Fr')
+ })
+
+ it('by default, 1 is Sunday, 2 is Monday, ...', function () {
+ var result = []
+ for (var i = 7; i <= 13; i++) {
+ result.push(format(new Date(1986, 8 /* Sep */, i), 'c'))
+ }
+ var expected = ['1', '2', '3', '4', '5', '6', '7']
+ assert.deepEqual(result, expected)
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = []
+ for (var i = 1; i <= 7; i++) {
+ result.push(
+ format(new Date(1986, 8 /* Sep */, i), 'c', { weekStartsOn: 1 })
+ )
+ }
+ var expected = ['1', '2', '3', '4', '5', '6', '7']
+ assert.deepEqual(result, expected)
+ })
+ })
+ })
+
+ describe('day period and hour', function () {
+ it('hour [1-12]', function () {
+ var result = format(new Date(2018, 0 /* Jan */, 1, 0, 0, 0, 0), 'h ho hh')
+ assert(result === '12 12th 12')
+ })
+
+ it('hour [0-23]', function () {
+ var result = format(new Date(2018, 0 /* Jan */, 1, 0, 0, 0, 0), 'H Ho HH')
+ assert(result === '0 0th 00')
+ })
+
+ it('hour [0-11]', function () {
+ var result = format(new Date(2018, 0 /* Jan */, 1, 0, 0, 0, 0), 'K Ko KK')
+ assert(result === '0 0th 00')
+ })
+
+ it('hour [1-24]', function () {
+ var result = format(new Date(2018, 0 /* Jan */, 1, 0, 0, 0, 0), 'k ko kk')
+ assert(result === '24 24th 24')
+ })
+
+ describe('AM, PM', function () {
+ it('works as expected', function () {
+ var result = format(
+ new Date(2018, 0 /* Jan */, 1, 0, 0, 0, 0),
+ 'a aa aaa aaaa aaaaa'
+ )
+ assert(result === 'AM AM am a.m. a')
+ })
+
+ it('12 PM', function () {
+ var date = new Date(1986, 3 /* Apr */, 4, 12, 0, 0, 900)
+ assert(format(date, 'h H K k a') === '12 12 0 12 PM')
+ })
+
+ it('12 AM', function () {
+ var date = new Date(1986, 3 /* Apr */, 6, 0, 0, 0, 900)
+ assert(format(date, 'h H K k a') === '12 0 0 24 AM')
+ })
+ })
+
+ describe('AM, PM, noon, midnight', function () {
+ it('works as expected', function () {
+ var result = format(
+ new Date(1986, 3 /* Apr */, 6, 2, 0, 0, 900),
+ 'b bb bbb bbbb bbbbb'
+ )
+ assert(result === 'AM AM am a.m. a')
+ })
+
+ it('12 PM', function () {
+ var date = new Date(1986, 3 /* Apr */, 4, 12, 0, 0, 900)
+ assert(format(date, 'b bb bbb bbbb bbbbb') === 'noon noon noon noon n')
+ })
+
+ it('12 AM', function () {
+ var date = new Date(1986, 3 /* Apr */, 6, 0, 0, 0, 900)
+ assert(
+ format(date, 'b bb bbb bbbb bbbbb') ===
+ 'midnight midnight midnight midnight mi'
+ )
+ })
+ })
+
+ describe('flexible day periods', function () {
+ it('works as expected', function () {
+ var result = format(date, 'B, BB, BBB, BBBB, BBBBB')
+ assert(
+ result ===
+ 'in the morning, in the morning, in the morning, in the morning, in the morning'
+ )
+ })
+
+ it('12 PM', function () {
+ var date = new Date(1986, 3 /* Apr */, 4, 12, 0, 0, 900)
+ assert(format(date, 'h B') === '12 in the afternoon')
+ })
+
+ it('5 PM', function () {
+ var date = new Date(1986, 3 /* Apr */, 6, 17, 0, 0, 900)
+ assert(format(date, 'h B') === '5 in the evening')
+ })
+
+ it('12 AM', function () {
+ var date = new Date(1986, 3 /* Apr */, 6, 0, 0, 0, 900)
+ assert(format(date, 'h B') === '12 at night')
+ })
+
+ it('4 AM', function () {
+ var date = new Date(1986, 3 /* Apr */, 6, 4, 0, 0, 900)
+ assert(format(date, 'h B') === '4 in the morning')
+ })
+ })
+ })
+
+ it('minute', function () {
+ var result = format(date, 'm mo mm')
+ assert(result === '32 32nd 32')
+ })
+
+ describe('second', function () {
+ it('second', function () {
+ var result = format(date, 's so ss')
+ assert(result === '55 55th 55')
+ })
+
+ it('fractional seconds', function () {
+ var result = format(date, 'S SS SSS SSSS')
+ assert(result === '1 12 123 1230')
+ })
+ })
+
+ describe('time zone', function () {
+ it('ISO-8601 with Z', function () {
+ var result = format(date, 'X XX XXX XXXX XXXXX')
+ var expectedResult = [
+ timezoneWithOptionalMinutesAndZShort,
+ timezoneWithZShort,
+ timezoneWithZ,
+ timezoneWithZShort,
+ timezoneWithZ,
+ ].join(' ')
+ assert(result === expectedResult)
+ })
+
+ it('ISO-8601 without Z', function () {
+ var result = format(date, 'x xx xxx xxxx xxxxx')
+ var expectedResult = [
+ timezoneWithOptionalMinutesShort,
+ timezoneShort,
+ timezone,
+ timezoneShort,
+ timezone,
+ ].join(' ')
+ assert(result === expectedResult)
+ })
+
+ it('GMT', function () {
+ var result = format(date, 'O OO OOO OOOO')
+ var expectedResult = [
+ timezoneGMTShort,
+ timezoneGMTShort,
+ timezoneGMTShort,
+ timezoneGMT,
+ ].join(' ')
+ assert(result === expectedResult)
+ })
+
+ it('Specific non-location', function () {
+ var result = format(date, 'z zz zzz zzzz')
+ var expectedResult = [
+ timezoneGMTShort,
+ timezoneGMTShort,
+ timezoneGMTShort,
+ timezoneGMT,
+ ].join(' ')
+ assert(result === expectedResult)
+ })
+ })
+
+ describe('timestamp', function () {
+ it('seconds timestamp', function () {
+ var result = format(date, 't')
+ assert(result === secondsTimestamp)
+ })
+
+ it('milliseconds timestamp', function () {
+ var result = format(date, 'T')
+ assert(result === timestamp)
+ })
+ })
+
+ describe('long format', function () {
+ it('short date', function () {
+ var result = format(date, 'P')
+ assert(result === '04/04/1986')
+ })
+
+ it('medium date', function () {
+ var result = format(date, 'PP')
+ assert(result === 'Apr 4, 1986')
+ })
+
+ it('long date', function () {
+ var result = format(date, 'PPP')
+ assert(result === 'April 4th, 1986')
+ })
+
+ it('full date', function () {
+ var result = format(date, 'PPPP')
+ assert(result === 'Friday, April 4th, 1986')
+ })
+
+ it('short time', function () {
+ var result = format(date, 'p')
+ assert(result === '10:32 AM')
+ })
+
+ it('medium time', function () {
+ var result = format(date, 'pp')
+ assert(result === '10:32:55 AM')
+ })
+
+ it('long time', function () {
+ var result = format(date, 'ppp')
+ assert(result === '10:32:55 AM ' + timezoneGMTShort)
+ })
+
+ it('full time', function () {
+ var result = format(date, 'pppp')
+ assert(result === '10:32:55 AM ' + timezoneGMT)
+ })
+
+ it('short date + time', function () {
+ var result = format(date, 'Pp')
+ assert(result === '04/04/1986, 10:32 AM')
+ })
+
+ it('medium date + time', function () {
+ var result = format(date, 'PPpp')
+ assert(result === 'Apr 4, 1986, 10:32:55 AM')
+ })
+
+ it('long date + time', function () {
+ var result = format(date, 'PPPppp')
+ assert(result === 'April 4th, 1986 at 10:32:55 AM ' + timezoneGMTShort)
+ })
+
+ it('full date + time', function () {
+ var result = format(date, 'PPPPpppp')
+ assert(result === 'Friday, April 4th, 1986 at 10:32:55 AM ' + timezoneGMT)
+ })
+
+ it('allows arbitrary combination of date and time', function () {
+ var result = format(date, 'Ppppp')
+ assert(result === '04/04/1986, 10:32:55 AM ' + timezoneGMT)
+ })
+ })
+
+ describe('edge cases', function () {
+ it('throws RangeError if the time value is invalid', () => {
+ assert.throws(
+ format.bind(null, new Date(NaN), 'MMMM d, yyyy'),
+ RangeError
+ )
+ })
+
+ it('handles dates before 100 AD', function () {
+ var initialDate = new Date(0)
+ initialDate.setFullYear(7, 11 /* Dec */, 31)
+ initialDate.setHours(0, 0, 0, 0)
+ assert(format(initialDate, 'Y ww i') === '8 01 1')
+ })
+ })
+
+ it('implicitly converts `formatString`', function () {
+ // eslint-disable-next-line no-new-wrappers
+ var formatString = new String('yyyy-MM-dd')
+
+ var date = new Date(2014, 3, 4)
+
+ // $ExpectedMistake
+ assert(format(date, formatString) === '2014-04-04')
+ })
+
+ describe('custom locale', function () {
+ it('allows to pass a custom locale', function () {
+ var customLocale = {
+ localize: {
+ month: function () {
+ return 'works'
+ },
+ },
+ formatLong: {
+ date: function () {
+ return "'It' MMMM!"
+ },
+ },
+ }
+ // $ExpectedMistake
+ var result = format(date, 'PPPP', { locale: customLocale })
+ assert(result === 'It works!')
+ })
+
+ it("throws `RangeError` if `options.locale` doesn't have `localize` property", function () {
+ var customLocale = {
+ formatLong: {},
+ }
+ // $ExpectedMistake
+ var block = format.bind(null, date, 'yyyy-MM-dd', {
+ locale: customLocale,
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it("throws `RangeError` if `options.locale` doesn't have `formatLong` property", function () {
+ var customLocale = {
+ // $ExpectedMistake
+ localize: {},
+ }
+ // $ExpectedMistake
+ var block = format.bind(null, date, 'yyyy-MM-dd', {
+ locale: customLocale,
+ })
+ assert.throws(block, RangeError)
+ })
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ // $ExpectedMistake
+ var block = format.bind(null, new Date(2007, 11 /* Dec */, 31), 'yyyy', {
+ weekStartsOn: NaN,
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function () {
+ // $ExpectedMistake
+ var block = format.bind(null, new Date(2007, 11 /* Dec */, 31), 'yyyy', {
+ firstWeekContainsDate: NaN,
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws RangeError exception if the format string contains an unescaped latin alphabet character', function () {
+ assert.throws(format.bind(null, date, 'yyyy-MM-dd-nnnn'), RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(format.bind(null), TypeError)
+ assert.throws(format.bind(null, 1), TypeError)
+ })
+
+ describe('useAdditionalWeekYearTokens and useAdditionalDayOfYearTokens options', () => {
+ it('throws an error if D token is used', () => {
+ const block = format.bind(null, date, 'yyyy-MM-D')
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ /(Use `d` instead of `D` \(in `yyyy-MM-D`\) for formatting days of the month to the input `Fri Apr 04 1986 10:32:55).*(`; see: https:\/\/git.io\/fxCyr)/g
+ )
+ })
+
+ it('allows D token if useAdditionalDayOfYearTokens is set to true', () => {
+ const result = format(date, 'yyyy-MM-D', {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert.deepEqual(result, '1986-04-94')
+ })
+
+ it('throws an error if DD token is used', () => {
+ const block = format.bind(null, date, 'yyyy-MM-DD')
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ /(Use `dd` instead of `DD` \(in `yyyy-MM-DD`\) for formatting days of the month to the input `Fri Apr 04 1986 10:32:55).*(`; see: https:\/\/git.io\/fxCyr)/g
+ )
+ })
+
+ it('allows DD token if useAdditionalDayOfYearTokens is set to true', () => {
+ const result = format(date, 'yyyy-MM-DD', {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert.deepEqual(result, '1986-04-94')
+ })
+
+ it('throws an error if YY token is used', () => {
+ const block = format.bind(null, date, 'YY-MM-dd')
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ /(Use `yy` instead of `YY` \(in `YY-MM-dd`\) for formatting years to the input `Fri Apr 04 1986 10:32:55).*(`; see: https:\/\/git.io\/fxCyr)/g
+ )
+ })
+
+ it('allows YY token if useAdditionalWeekYearTokens is set to true', () => {
+ const result = format(date, 'YY-MM-dd', {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert.deepEqual(result, '86-04-04')
+ })
+
+ it('throws an error if YYYY token is used', () => {
+ const block = format.bind(null, date, 'YYYY-MM-dd')
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ /(Use `yyyy` instead of `YYYY` \(in `YYYY-MM-dd`\) for formatting years to the input `Fri Apr 04 1986 10:32:55).*(`; see: https:\/\/git.io\/fxCyr)/g
+ )
+ })
+
+ it('allows YYYY token if useAdditionalWeekYearTokens is set to true', () => {
+ const result = format(date, 'YYYY-MM-dd', {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert.deepEqual(result, '1986-04-04')
+ })
+ })
+})
diff --git a/date-fns/src/formatDistance/benchmark.js b/date-fns/src/formatDistance/benchmark.js
new file mode 100644
index 0000000..94f5ab0
--- /dev/null
+++ b/date-fns/src/formatDistance/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import formatDistance from '.'
+import moment from 'moment'
+
+suite('formatDistance', function () {
+ benchmark('date-fns', function () {
+ return formatDistance(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.from(this.momentB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/formatDistance/index.d.ts b/date-fns/src/formatDistance/index.d.ts
new file mode 100644
index 0000000..656c64a
--- /dev/null
+++ b/date-fns/src/formatDistance/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDistance } from 'date-fns'
+export default formatDistance
diff --git a/date-fns/src/formatDistance/index.js.flow b/date-fns/src/formatDistance/index.js.flow
new file mode 100644
index 0000000..b18d1ba
--- /dev/null
+++ b/date-fns/src/formatDistance/index.js.flow
@@ -0,0 +1,60 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ includeSeconds?: boolean,
+ addSuffix?: boolean,
+ locale?: Locale,
+ }
+) => string
diff --git a/date-fns/src/formatDistance/index.ts b/date-fns/src/formatDistance/index.ts
new file mode 100644
index 0000000..214087d
--- /dev/null
+++ b/date-fns/src/formatDistance/index.ts
@@ -0,0 +1,240 @@
+import compareAsc from '../compareAsc/index'
+import differenceInMonths from '../differenceInMonths/index'
+import differenceInSeconds from '../differenceInSeconds/index'
+import defaultLocale from '../locale/en-US/index'
+import toDate from '../toDate/index'
+import cloneObject from '../_lib/cloneObject/index'
+import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { LocaleOptions } from '../types';
+
+const MINUTES_IN_DAY = 1440
+const MINUTES_IN_ALMOST_TWO_DAYS = 2520
+const MINUTES_IN_MONTH = 43200
+const MINUTES_IN_TWO_MONTHS = 86400
+
+/**
+ * @name formatDistance
+ * @category Common Helpers
+ * @summary Return the distance between the given dates in words.
+ *
+ * @description
+ * Return the distance between the given dates in words.
+ *
+ * | Distance between dates | Result |
+ * |-------------------------------------------------------------------|---------------------|
+ * | 0 ... 30 secs | less than a minute |
+ * | 30 secs ... 1 min 30 secs | 1 minute |
+ * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |
+ * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |
+ * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |
+ * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |
+ * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |
+ * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |
+ * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |
+ * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |
+ * | 1 yr ... 1 yr 3 months | about 1 year |
+ * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |
+ * | 1 yr 9 months ... 2 yrs | almost 2 years |
+ * | N yrs ... N yrs 3 months | about N years |
+ * | N yrs 3 months ... N yrs 9 months | over N years |
+ * | N yrs 9 months ... N+1 yrs | almost N+1 years |
+ *
+ * With `options.includeSeconds == true`:
+ * | Distance between dates | Result |
+ * |------------------------|----------------------|
+ * | 0 secs ... 5 secs | less than 5 seconds |
+ * | 5 secs ... 10 secs | less than 10 seconds |
+ * | 10 secs ... 20 secs | less than 20 seconds |
+ * | 20 secs ... 40 secs | half a minute |
+ * | 40 secs ... 60 secs | less than a minute |
+ * | 60 secs ... 90 secs | 1 minute |
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `distanceInWords ` to `formatDistance`
+ * to make its name consistent with `format` and `formatRelative`.
+ *
+ * - The order of arguments is swapped to make the function
+ * consistent with `differenceIn...` functions.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ *
+ * distanceInWords(
+ * new Date(1986, 3, 4, 10, 32, 0),
+ * new Date(1986, 3, 4, 11, 32, 0),
+ * { addSuffix: true }
+ * ) //=> 'in about 1 hour'
+ *
+ * // v2.0.0 onward
+ *
+ * formatDistance(
+ * new Date(1986, 3, 4, 11, 32, 0),
+ * new Date(1986, 3, 4, 10, 32, 0),
+ * { addSuffix: true }
+ * ) //=> 'in about 1 hour'
+ * ```
+ *
+ * @param {Date|Number} date - the date
+ * @param {Date|Number} baseDate - the date to compare with
+ * @param {Object} [options] - an object with options.
+ * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed
+ * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @returns {String} the distance in words
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `date` must not be Invalid Date
+ * @throws {RangeError} `baseDate` must not be Invalid Date
+ * @throws {RangeError} `options.locale` must contain `formatDistance` property
+ *
+ * @example
+ * // What is the distance between 2 July 2014 and 1 January 2015?
+ * const result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))
+ * //=> '6 months'
+ *
+ * @example
+ * // What is the distance between 1 January 2015 00:00:15
+ * // and 1 January 2015 00:00:00, including seconds?
+ * const result = formatDistance(
+ * new Date(2015, 0, 1, 0, 0, 15),
+ * new Date(2015, 0, 1, 0, 0, 0),
+ * { includeSeconds: true }
+ * )
+ * //=> 'less than 20 seconds'
+ *
+ * @example
+ * // What is the distance from 1 January 2016
+ * // to 1 January 2015, with a suffix?
+ * const result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {
+ * addSuffix: true
+ * })
+ * //=> 'about 1 year ago'
+ *
+ * @example
+ * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?
+ * import { eoLocale } from 'date-fns/locale/eo'
+ * const result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {
+ * locale: eoLocale
+ * })
+ * //=> 'pli ol 1 jaro'
+ */
+
+
+export default function formatDistance(dirtyDate: Date | number, dirtyBaseDate: Date | number, options: LocaleOptions & { includeSeconds?: boolean, addSuffix?: boolean } = {}): string {
+ requiredArgs(2, arguments)
+
+ const locale = options.locale || defaultLocale
+
+ if (!locale.formatDistance) {
+ throw new RangeError('locale must contain formatDistance property')
+ }
+
+ const comparison = compareAsc(dirtyDate, dirtyBaseDate)
+
+ if (isNaN(comparison)) {
+ throw new RangeError('Invalid time value')
+ }
+
+ const localizeOptions = cloneObject(options)
+ localizeOptions.addSuffix = Boolean(options.addSuffix)
+ localizeOptions.comparison = comparison
+
+ let dateLeft
+ let dateRight
+ if (comparison > 0) {
+ dateLeft = toDate(dirtyBaseDate)
+ dateRight = toDate(dirtyDate)
+ } else {
+ dateLeft = toDate(dirtyDate)
+ dateRight = toDate(dirtyBaseDate)
+ }
+
+ const seconds = differenceInSeconds(dateRight, dateLeft)
+ const offsetInSeconds =
+ (getTimezoneOffsetInMilliseconds(dateRight) -
+ getTimezoneOffsetInMilliseconds(dateLeft)) /
+ 1000
+ const minutes = Math.round((seconds - offsetInSeconds) / 60)
+ let months
+
+ // 0 up to 2 mins
+ if (minutes < 2) {
+ if (options.includeSeconds) {
+ if (seconds < 5) {
+ return locale.formatDistance('lessThanXSeconds', 5, localizeOptions)
+ } else if (seconds < 10) {
+ return locale.formatDistance('lessThanXSeconds', 10, localizeOptions)
+ } else if (seconds < 20) {
+ return locale.formatDistance('lessThanXSeconds', 20, localizeOptions)
+ } else if (seconds < 40) {
+ return locale.formatDistance('halfAMinute', null, localizeOptions)
+ } else if (seconds < 60) {
+ return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)
+ } else {
+ return locale.formatDistance('xMinutes', 1, localizeOptions)
+ }
+ } else {
+ if (minutes === 0) {
+ return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)
+ } else {
+ return locale.formatDistance('xMinutes', minutes, localizeOptions)
+ }
+ }
+
+ // 2 mins up to 0.75 hrs
+ } else if (minutes < 45) {
+ return locale.formatDistance('xMinutes', minutes, localizeOptions)
+
+ // 0.75 hrs up to 1.5 hrs
+ } else if (minutes < 90) {
+ return locale.formatDistance('aboutXHours', 1, localizeOptions)
+
+ // 1.5 hrs up to 24 hrs
+ } else if (minutes < MINUTES_IN_DAY) {
+ const hours = Math.round(minutes / 60)
+ return locale.formatDistance('aboutXHours', hours, localizeOptions)
+
+ // 1 day up to 1.75 days
+ } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {
+ return locale.formatDistance('xDays', 1, localizeOptions)
+
+ // 1.75 days up to 30 days
+ } else if (minutes < MINUTES_IN_MONTH) {
+ const days = Math.round(minutes / MINUTES_IN_DAY)
+ return locale.formatDistance('xDays', days, localizeOptions)
+
+ // 1 month up to 2 months
+ } else if (minutes < MINUTES_IN_TWO_MONTHS) {
+ months = Math.round(minutes / MINUTES_IN_MONTH)
+ return locale.formatDistance('aboutXMonths', months, localizeOptions)
+ }
+
+ months = differenceInMonths(dateRight, dateLeft)
+
+ // 2 months up to 12 months
+ if (months < 12) {
+ const nearestMonth = Math.round(minutes / MINUTES_IN_MONTH)
+ return locale.formatDistance('xMonths', nearestMonth, localizeOptions)
+
+ // 1 year up to max Date
+ } else {
+ const monthsSinceStartOfYear = months % 12
+ const years = Math.floor(months / 12)
+
+ // N years up to 1 years 3 months
+ if (monthsSinceStartOfYear < 3) {
+ return locale.formatDistance('aboutXYears', years, localizeOptions)
+
+ // N years 3 months up to N years 9 months
+ } else if (monthsSinceStartOfYear < 9) {
+ return locale.formatDistance('overXYears', years, localizeOptions)
+
+ // N years 9 months up to N year 12 months
+ } else {
+ return locale.formatDistance('almostXYears', years + 1, localizeOptions)
+ }
+ }
+}
diff --git a/date-fns/src/formatDistance/test.ts b/date-fns/src/formatDistance/test.ts
new file mode 100644
index 0000000..2e2cfaa
--- /dev/null
+++ b/date-fns/src/formatDistance/test.ts
@@ -0,0 +1,299 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import formatDistance from '.'
+
+describe('formatDistance', function () {
+ describe('seconds', function () {
+ describe('when the includeSeconds option is true', function () {
+ it('less than 5 seconds', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 3),
+ { includeSeconds: true }
+ )
+ assert(result === 'less than 5 seconds')
+ })
+
+ it('less than 10 seconds', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 7),
+ { includeSeconds: true }
+ )
+ assert(result === 'less than 10 seconds')
+ })
+
+ it('less than 20 seconds', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 15),
+ { includeSeconds: true }
+ )
+ assert(result === 'less than 20 seconds')
+ })
+
+ it('half a minute', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 25),
+ { includeSeconds: true }
+ )
+ assert(result === 'half a minute')
+ })
+
+ it('less than a minute', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 45),
+ { includeSeconds: true }
+ )
+ assert(result === 'less than a minute')
+ })
+
+ it('1 minute', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 0),
+ { includeSeconds: true }
+ )
+ assert(result === '1 minute')
+ })
+ })
+ })
+
+ describe('minutes', function () {
+ it('less than a minute', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 20)
+ )
+ assert(result === 'less than a minute')
+ })
+
+ it('1 minute', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 50)
+ )
+ assert(result === '1 minute')
+ })
+
+ it('n minutes', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 34, 50)
+ )
+ assert(result === '3 minutes')
+ })
+ })
+
+ describe('hours', function () {
+ it('about 1 hour', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 11, 32, 0)
+ )
+ assert(result === 'about 1 hour')
+ })
+
+ it('about n hours', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 13, 32, 0)
+ )
+ assert(result === 'about 3 hours')
+ })
+ })
+
+ describe('days', function () {
+ it('1 day', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 5, 10, 32, 0)
+ )
+ assert(result === '1 day')
+ })
+
+ it('n days', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 7, 10, 32, 0)
+ )
+ assert(result === '3 days')
+ })
+ })
+
+ describe('months', function () {
+ it('about 1 month', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 4, 4, 10, 32, 0)
+ )
+ assert(result === 'about 1 month')
+ })
+
+ it('n months', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 6, 4, 10, 32, 0)
+ )
+ assert(result === '3 months')
+ })
+ })
+
+ describe('years', function () {
+ it('about 1 year', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1987, 3, 4, 10, 32, 0)
+ )
+ assert(result === 'about 1 year')
+ })
+
+ it('over 1 year', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1987, 9, 4, 10, 32, 0)
+ )
+ assert(result === 'over 1 year')
+ })
+
+ it('almost n years', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1989, 2, 4, 10, 32, 0)
+ )
+ assert(result === 'almost 3 years')
+ })
+
+ it('about n years', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1989, 3, 4, 10, 32, 0)
+ )
+ assert(result === 'about 3 years')
+ })
+
+ it('over n years', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1989, 9, 4, 10, 32, 0)
+ )
+ assert(result === 'over 3 years')
+ })
+ })
+
+ it('accepts timestamps', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0).getTime(),
+ new Date(1986, 3, 4, 11, 32, 0).getTime()
+ )
+ assert(result === 'about 1 hour')
+ })
+
+ describe('when the addSuffix option is true', function () {
+ it('adds a past suffix', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 25),
+ { includeSeconds: true, addSuffix: true }
+ )
+ assert(result === 'half a minute ago')
+ })
+
+ it('adds a future suffix', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 11, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { addSuffix: true }
+ )
+ assert(result === 'in about 1 hour')
+ })
+ })
+
+ describe('implicit conversion of options', function () {
+ it('`options.includeSeconds`', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 7),
+ // @ts-expect-error
+ { includeSeconds: 1 }
+ )
+ assert(result === 'less than 10 seconds')
+ })
+
+ it('`options.addSuffix`', function () {
+ const result = formatDistance(
+ new Date(1986, 3, 4, 11, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ // @ts-expect-error
+ { addSuffix: 1 }
+ )
+ assert(result === 'in about 1 hour')
+ })
+ })
+
+ describe('custom locale', function () {
+ it('can be passed to the function', function () {
+ function localizeDistance(token, count, options) {
+ assert(token === 'lessThanXSeconds')
+ assert(count === 5)
+ assert(options.addSuffix === true)
+ assert(options.comparison > 0)
+ return 'It works!'
+ }
+
+ const customLocale = {
+ formatDistance: localizeDistance,
+ }
+
+ const result = formatDistance(
+ new Date(1986, 3, 4, 10, 32, 3),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { includeSeconds: true, addSuffix: true, locale: customLocale }
+ )
+
+ assert(result === 'It works!')
+ })
+
+ describe('does not contain `formatDistance` property', function () {
+ it('throws `RangeError`', function () {
+ const customLocale = {}
+ const block = formatDistance.bind(
+ null,
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 3),
+ { includeSeconds: true, locale: customLocale }
+ )
+ assert.throws(block, RangeError)
+ })
+ })
+ })
+
+ it('throws RangeError if the first date is `Invalid Date`', function () {
+ assert.throws(
+ formatDistance.bind(null, new Date(NaN), new Date(1986, 3, 7, 10, 32, 0)),
+ RangeError
+ )
+ })
+
+ it('throws RangeError if the second date is `Invalid Date`', function () {
+ assert.throws(
+ formatDistance.bind(null, new Date(1986, 3, 4, 10, 32, 0), new Date(NaN)),
+ RangeError
+ )
+ })
+
+ it('throws RangeError if the both dates are `Invalid Date`', function () {
+ assert.throws(
+ formatDistance.bind(null, new Date(NaN), new Date(NaN)),
+ RangeError
+ )
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(formatDistance.bind(null), TypeError)
+ assert.throws(formatDistance.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/formatDistanceStrict/benchmark.js b/date-fns/src/formatDistanceStrict/benchmark.js
new file mode 100644
index 0000000..d468a03
--- /dev/null
+++ b/date-fns/src/formatDistanceStrict/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import formatDistanceStrict from '.'
+import moment from 'moment'
+
+suite('formatDistanceStrict', function () {
+ benchmark('date-fns', function () {
+ return formatDistanceStrict(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.from(this.momentB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/formatDistanceStrict/index.d.ts b/date-fns/src/formatDistanceStrict/index.d.ts
new file mode 100644
index 0000000..89cce20
--- /dev/null
+++ b/date-fns/src/formatDistanceStrict/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDistanceStrict } from 'date-fns'
+export default formatDistanceStrict
diff --git a/date-fns/src/formatDistanceStrict/index.js.flow b/date-fns/src/formatDistanceStrict/index.js.flow
new file mode 100644
index 0000000..26c4b15
--- /dev/null
+++ b/date-fns/src/formatDistanceStrict/index.js.flow
@@ -0,0 +1,61 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ addSuffix?: boolean,
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year',
+ roundingMethod?: 'floor' | 'ceil' | 'round',
+ locale?: Locale,
+ }
+) => string
diff --git a/date-fns/src/formatDistanceStrict/index.ts b/date-fns/src/formatDistanceStrict/index.ts
new file mode 100644
index 0000000..d792e73
--- /dev/null
+++ b/date-fns/src/formatDistanceStrict/index.ts
@@ -0,0 +1,283 @@
+import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index'
+import compareAsc from '../compareAsc/index'
+import toDate from '../toDate/index'
+import cloneObject from '../_lib/cloneObject/index'
+import defaultLocale from '../locale/en-US/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { LocaleOptions, Unit } from '../types';
+
+const MILLISECONDS_IN_MINUTE = 1000 * 60
+const MINUTES_IN_DAY = 60 * 24
+const MINUTES_IN_MONTH = MINUTES_IN_DAY * 30
+const MINUTES_IN_YEAR = MINUTES_IN_DAY * 365
+
+/**
+ * @name formatDistanceStrict
+ * @category Common Helpers
+ * @summary Return the distance between the given dates in words.
+ *
+ * @description
+ * Return the distance between the given dates in words, using strict units.
+ * This is like `formatDistance`, but does not use helpers like 'almost', 'over',
+ * 'less than' and the like.
+ *
+ * | Distance between dates | Result |
+ * |------------------------|---------------------|
+ * | 0 ... 59 secs | [0..59] seconds |
+ * | 1 ... 59 mins | [1..59] minutes |
+ * | 1 ... 23 hrs | [1..23] hours |
+ * | 1 ... 29 days | [1..29] days |
+ * | 1 ... 11 months | [1..11] months |
+ * | 1 ... N years | [1..N] years |
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `distanceInWordsStrict` to `formatDistanceStrict`
+ * to make its name consistent with `format` and `formatRelative`.
+ *
+ * - The order of arguments is swapped to make the function
+ * consistent with `differenceIn...` functions.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ *
+ * distanceInWordsStrict(
+ * new Date(2015, 0, 2),
+ * new Date(2014, 6, 2)
+ * ) //=> '6 months'
+ *
+ * // v2.0.0 onward
+ *
+ * formatDistanceStrict(
+ * new Date(2014, 6, 2),
+ * new Date(2015, 0, 2)
+ * ) //=> '6 months'
+ * ```
+ *
+ * - `partialMethod` option is renamed to `roundingMethod`.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ *
+ * distanceInWordsStrict(
+ * new Date(1986, 3, 4, 10, 32, 0),
+ * new Date(1986, 3, 4, 10, 33, 1),
+ * { partialMethod: 'ceil' }
+ * ) //=> '2 minutes'
+ *
+ * // v2.0.0 onward
+ *
+ * formatDistanceStrict(
+ * new Date(1986, 3, 4, 10, 33, 1),
+ * new Date(1986, 3, 4, 10, 32, 0),
+ * { roundingMethod: 'ceil' }
+ * ) //=> '2 minutes'
+ * ```
+ *
+ * - If `roundingMethod` is not specified, it now defaults to `round` instead of `floor`.
+ *
+ * - `unit` option now accepts one of the strings:
+ * 'second', 'minute', 'hour', 'day', 'month' or 'year' instead of 's', 'm', 'h', 'd', 'M' or 'Y'
+ *
+ * ```javascript
+ * // Before v2.0.0
+ *
+ * distanceInWordsStrict(
+ * new Date(1986, 3, 4, 10, 32, 0),
+ * new Date(1986, 3, 4, 10, 33, 1),
+ * { unit: 'm' }
+ * )
+ *
+ * // v2.0.0 onward
+ *
+ * formatDistanceStrict(
+ * new Date(1986, 3, 4, 10, 33, 1),
+ * new Date(1986, 3, 4, 10, 32, 0),
+ * { unit: 'minute' }
+ * )
+ * ```
+ *
+ * @param {Date|Number} date - the date
+ * @param {Date|Number} baseDate - the date to compare with
+ * @param {Object} [options] - an object with options.
+ * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first
+ * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit
+ * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @returns {String} the distance in words
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `date` must not be Invalid Date
+ * @throws {RangeError} `baseDate` must not be Invalid Date
+ * @throws {RangeError} `options.roundingMethod` must be 'floor', 'ceil' or 'round'
+ * @throws {RangeError} `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year'
+ * @throws {RangeError} `options.locale` must contain `formatDistance` property
+ *
+ * @example
+ * // What is the distance between 2 July 2014 and 1 January 2015?
+ * const result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2))
+ * //=> '6 months'
+ *
+ * @example
+ * // What is the distance between 1 January 2015 00:00:15
+ * // and 1 January 2015 00:00:00?
+ * const result = formatDistanceStrict(
+ * new Date(2015, 0, 1, 0, 0, 15),
+ * new Date(2015, 0, 1, 0, 0, 0)
+ * )
+ * //=> '15 seconds'
+ *
+ * @example
+ * // What is the distance from 1 January 2016
+ * // to 1 January 2015, with a suffix?
+ * const result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), {
+ * addSuffix: true
+ * })
+ * //=> '1 year ago'
+ *
+ * @example
+ * // What is the distance from 1 January 2016
+ * // to 1 January 2015, in minutes?
+ * const result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), {
+ * unit: 'minute'
+ * })
+ * //=> '525600 minutes'
+ *
+ * @example
+ * // What is the distance from 1 January 2015
+ * // to 28 January 2015, in months, rounded up?
+ * const result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), {
+ * unit: 'month',
+ * roundingMethod: 'ceil'
+ * })
+ * //=> '1 month'
+ *
+ * @example
+ * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?
+ * import { eoLocale } from 'date-fns/locale/eo'
+ * const result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), {
+ * locale: eoLocale
+ * })
+ * //=> '1 jaro'
+ */
+
+export default function formatDistanceStrict(
+ dirtyDate: Date | number,
+ dirtyBaseDate: Date | number,
+ options: LocaleOptions & {
+ addSuffix?: boolean,
+ unit?: Unit,
+ roundingMethod?: 'floor' | 'ceil' | 'round',
+ } = {}
+): string {
+ requiredArgs(2, arguments)
+
+ const locale = options.locale || defaultLocale
+
+ if (!locale.formatDistance) {
+ throw new RangeError('locale must contain localize.formatDistance property')
+ }
+
+ const comparison = compareAsc(dirtyDate, dirtyBaseDate)
+
+ if (isNaN(comparison)) {
+ throw new RangeError('Invalid time value')
+ }
+
+ const localizeOptions = cloneObject(options)
+ localizeOptions.addSuffix = Boolean(options.addSuffix)
+ localizeOptions.comparison = comparison
+
+ let dateLeft
+ let dateRight
+ if (comparison > 0) {
+ dateLeft = toDate(dirtyBaseDate)
+ dateRight = toDate(dirtyDate)
+ } else {
+ dateLeft = toDate(dirtyDate)
+ dateRight = toDate(dirtyBaseDate)
+ }
+
+ const roundingMethod =
+ options.roundingMethod == null ? 'round' : String(options.roundingMethod)
+ let roundingMethodFn
+
+ if (roundingMethod === 'floor') {
+ roundingMethodFn = Math.floor
+ } else if (roundingMethod === 'ceil') {
+ roundingMethodFn = Math.ceil
+ } else if (roundingMethod === 'round') {
+ roundingMethodFn = Math.round
+ } else {
+ throw new RangeError("roundingMethod must be 'floor', 'ceil' or 'round'")
+ }
+
+ const milliseconds = dateRight.getTime() - dateLeft.getTime()
+ const minutes = milliseconds / MILLISECONDS_IN_MINUTE
+
+ const timezoneOffset =
+ getTimezoneOffsetInMilliseconds(dateRight) -
+ getTimezoneOffsetInMilliseconds(dateLeft)
+
+ // Use DST-normalized difference in minutes for years, months and days;
+ // use regular difference in minutes for hours, minutes and seconds.
+ const dstNormalizedMinutes =
+ (milliseconds - timezoneOffset) / MILLISECONDS_IN_MINUTE
+
+ let unit
+ if (options.unit == null) {
+ if (minutes < 1) {
+ unit = 'second'
+ } else if (minutes < 60) {
+ unit = 'minute'
+ } else if (minutes < MINUTES_IN_DAY) {
+ unit = 'hour'
+ } else if (dstNormalizedMinutes < MINUTES_IN_MONTH) {
+ unit = 'day'
+ } else if (dstNormalizedMinutes < MINUTES_IN_YEAR) {
+ unit = 'month'
+ } else {
+ unit = 'year'
+ }
+ } else {
+ unit = String(options.unit)
+ }
+
+ // 0 up to 60 seconds
+ if (unit === 'second') {
+ const seconds = roundingMethodFn(milliseconds / 1000)
+ return locale.formatDistance('xSeconds', seconds, localizeOptions)
+
+ // 1 up to 60 mins
+ } else if (unit === 'minute') {
+ const roundedMinutes = roundingMethodFn(minutes)
+ return locale.formatDistance('xMinutes', roundedMinutes, localizeOptions)
+
+ // 1 up to 24 hours
+ } else if (unit === 'hour') {
+ const hours = roundingMethodFn(minutes / 60)
+ return locale.formatDistance('xHours', hours, localizeOptions)
+
+ // 1 up to 30 days
+ } else if (unit === 'day') {
+ const days = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_DAY)
+ return locale.formatDistance('xDays', days, localizeOptions)
+
+ // 1 up to 12 months
+ } else if (unit === 'month') {
+ const months = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_MONTH)
+ return months === 12 && options.unit !== 'month'
+ ? locale.formatDistance('xYears', 1, localizeOptions)
+ : locale.formatDistance('xMonths', months, localizeOptions)
+
+ // 1 year up to max Date
+ } else if (unit === 'year') {
+ const years = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_YEAR)
+ return locale.formatDistance('xYears', years, localizeOptions)
+ }
+
+ throw new RangeError(
+ "unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'"
+ )
+}
diff --git a/date-fns/src/formatDistanceStrict/test.ts b/date-fns/src/formatDistanceStrict/test.ts
new file mode 100644
index 0000000..52bb2bd
--- /dev/null
+++ b/date-fns/src/formatDistanceStrict/test.ts
@@ -0,0 +1,524 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import formatDistanceStrict from '.'
+
+describe('formatDistanceStrict', function () {
+ describe('seconds', function () {
+ describe('when no unit is set', function () {
+ it('0 seconds', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 5),
+ new Date(1986, 3, 4, 10, 32, 5)
+ )
+ assert(result === '0 seconds')
+ })
+
+ it('5 seconds', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 5)
+ )
+ assert(result === '5 seconds')
+ })
+ })
+ })
+
+ describe('minutes', function () {
+ it('1 minute', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 0)
+ )
+ assert(result === '1 minute')
+ })
+
+ it('n minutes', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 35, 0)
+ )
+ assert(result === '3 minutes')
+ })
+ })
+
+ describe('hours', function () {
+ it('1 hour', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 11, 32, 0)
+ )
+ assert(result === '1 hour')
+ })
+
+ it('n hours', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 13, 32, 0)
+ )
+ assert(result === '3 hours')
+ })
+ })
+
+ describe('days', function () {
+ it('1 day', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 5, 10, 32, 0)
+ )
+ assert(result === '1 day')
+ })
+
+ it('n days', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 7, 10, 32, 0)
+ )
+ assert(result === '3 days')
+ })
+ })
+
+ describe('months', function () {
+ it('1 month', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 4, 4, 10, 32, 0)
+ )
+ assert(result === '1 month')
+ })
+
+ it('n months', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 6, 4, 10, 32, 0)
+ )
+ assert(result === '3 months')
+ })
+ })
+
+ describe('years', function () {
+ it('returns `1 year` - see issue 2388', () => {
+ const result = formatDistanceStrict(
+ new Date(2015, 0, 2),
+ new Date(2016, 0, 1)
+ )
+ assert(result === '1 year')
+ })
+
+ it('returns `2 years` - see issue 2388', () => {
+ const result = formatDistanceStrict(
+ new Date(2014, 0, 2),
+ new Date(2016, 0, 1)
+ )
+ assert(result === '2 years')
+ })
+
+ it('1 year', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1987, 3, 4, 10, 32, 0)
+ )
+ assert(result === '1 year')
+ })
+
+ it('n years', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1991, 3, 4, 10, 32, 0)
+ )
+ assert(result === '5 years')
+ })
+ })
+
+ describe('when the unit option is supplied', function () {
+ describe('second', function () {
+ it('0 seconds', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'second' }
+ )
+ assert(result === '0 seconds')
+ })
+
+ it('5 seconds', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 5),
+ { unit: 'second' }
+ )
+ assert(result === '5 seconds')
+ })
+
+ it('120 seconds', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 34, 0),
+ { unit: 'second' }
+ )
+ assert(result === '120 seconds')
+ })
+ })
+
+ describe('minute', function () {
+ it('0 minutes', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'minute' }
+ )
+ assert(result === '0 minutes')
+ })
+
+ it('5 minutes', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 37, 0),
+ { unit: 'minute' }
+ )
+ assert(result === '5 minutes')
+ })
+
+ it('120 minutes', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 12, 32, 0),
+ { unit: 'minute' }
+ )
+ assert(result === '120 minutes')
+ })
+ })
+
+ describe('hour', function () {
+ it('0 hours', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'hour' }
+ )
+ assert(result === '0 hours')
+ })
+
+ it('5 hours', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 15, 32, 0),
+ { unit: 'hour' }
+ )
+ assert(result === '5 hours')
+ })
+
+ it('48 hours', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 6, 10, 32, 0),
+ { unit: 'hour' }
+ )
+ assert(result === '48 hours')
+ })
+ })
+
+ describe('day', function () {
+ it('0 days', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'day' }
+ )
+ assert(result === '0 days')
+ })
+
+ it('5 days', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 9, 10, 32, 0),
+ { unit: 'day' }
+ )
+ assert(result === '5 days')
+ })
+
+ it('60 days', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 5, 3, 10, 32, 0),
+ { unit: 'day' }
+ )
+ assert(result === '60 days')
+ })
+ })
+ describe('month', function () {
+ it('0 months', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'month' }
+ )
+ assert(result === '0 months')
+ })
+
+ it('5 months', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 7, 4, 10, 32, 0),
+ { unit: 'month' }
+ )
+ assert(result === '4 months')
+ })
+
+ it('12 months - see issue 2388', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 7, 4, 10, 32, 0),
+ new Date(1985, 7, 4, 10, 32, 0),
+ { unit: 'month' }
+ )
+ assert(result === '12 months')
+ })
+
+ it('24 months', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1988, 3, 4, 10, 32, 0),
+ { unit: 'month' }
+ )
+ assert(result === '24 months')
+ })
+ })
+
+ describe('year', function () {
+ it('0 years', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'year' }
+ )
+ assert(result === '0 years')
+ })
+
+ it('5 years', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1991, 3, 4, 15, 32, 0),
+ { unit: 'year' }
+ )
+ assert(result === '5 years')
+ })
+ })
+ })
+
+ it('accepts timestamps', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0).getTime(),
+ new Date(1986, 3, 4, 11, 32, 0).getTime()
+ )
+ assert(result === '1 hour')
+ })
+
+ describe('when the addSuffix option is true', function () {
+ it('adds a past suffix', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 25),
+ { addSuffix: true }
+ )
+ assert(result === '25 seconds ago')
+ })
+
+ it('adds a future suffix', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 11, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ { addSuffix: true }
+ )
+ assert(result === 'in 1 hour')
+ })
+ })
+
+ describe('when the roundingMethod option is supplied', function () {
+ it('default is "round"', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 59)
+ )
+ assert(result === '2 minutes')
+ })
+
+ it('"floor"', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 59),
+ { roundingMethod: 'floor' }
+ )
+ assert(result === '1 minute')
+ })
+
+ it('"ceil"', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 1),
+ { roundingMethod: 'ceil' }
+ )
+ assert(result === '2 minutes')
+ })
+
+ it('"round" (down)', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 29),
+ { roundingMethod: 'round' }
+ )
+ assert(result === '1 minute')
+ })
+
+ it('"round" (up)', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 30),
+ { roundingMethod: 'round' }
+ )
+ assert(result === '2 minutes')
+ })
+ })
+
+ describe('implicit conversion of options', function () {
+ it('`options.unit`', function () {
+ // eslint-disable-next-line no-new-wrappers
+ const unit = new String('year')
+
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 0),
+ // @ts-expect-error
+ { unit: unit }
+ )
+ assert(result === '0 years')
+ })
+
+ it('`options.addSuffix`', function () {
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 25),
+ // @ts-expect-error
+ { addSuffix: 1 }
+ )
+ assert(result === '25 seconds ago')
+ })
+
+ it('`options.ceil`', function () {
+ // eslint-disable-next-line no-new-wrappers
+ const roundingMethod = new String('ceil')
+
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 1),
+ // @ts-expect-error
+ { roundingMethod: roundingMethod }
+ )
+ assert(result === '2 minutes')
+ })
+ })
+
+ describe('custom locale', function () {
+ it('can be passed to the function', function () {
+ function localizeDistance(token: string, count: number, options: { addSuffix: boolean; comparison: number }) {
+ assert(token === 'xSeconds')
+ assert(count === 25)
+ assert(options.addSuffix === true)
+ assert(options.comparison < 0)
+ return 'It works!'
+ }
+
+ const customLocale = {
+ formatDistance: localizeDistance,
+ }
+
+ const result = formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 32, 25),
+ // @ts-expect-error
+ { addSuffix: true, locale: customLocale }
+ )
+
+ assert(result === 'It works!')
+ })
+
+ describe('does not contain `formatDistance` property', function () {
+ it('throws `RangeError`', function () {
+ const customLocale = {}
+ // @ts-expect-error
+ const block = formatDistanceStrict.bind(
+ null,
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 37, 0),
+ { unit: 'minute', locale: customLocale }
+ )
+ assert.throws(block, RangeError)
+ })
+ })
+ })
+
+ describe('edge cases', function () {
+ it('detects unit correctly for short months', function () {
+ const result = formatDistanceStrict(
+ new Date(2018, 1 /* Feb */, 1),
+ new Date(2018, 2 /* Mar */, 1)
+ )
+ assert(result === '28 days')
+ })
+ })
+
+ it('throws `RangeError` if the first date is `Invalid Date`', function () {
+ assert.throws(
+ formatDistanceStrict.bind(
+ null,
+ new Date(NaN),
+ new Date(1986, 3, 7, 10, 32, 0)
+ ),
+ RangeError
+ )
+ })
+
+ it('throws `RangeError` if the second date is `Invalid Date`', function () {
+ assert.throws(
+ formatDistanceStrict.bind(
+ null,
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(NaN)
+ ),
+ RangeError
+ )
+ })
+
+ it('throws `RangeError` if the both dates are `Invalid Date`', function () {
+ assert.throws(
+ formatDistanceStrict.bind(null, new Date(NaN), new Date(NaN)),
+ RangeError
+ )
+ })
+
+ it("throws `RangeError` if `options.roundingMethod` is not 'floor', 'ceil', 'round' or undefined", function () {
+ const block = () => formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 29),
+ // @ts-expect-error
+ { roundingMethod: 'foobar' }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it("throws `RangeError` if `options.unit` is not 's', 'm', 'h', 'd', 'M', 'Y' or undefined", function () {
+ const block = () => formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 3, 4, 10, 33, 29),
+ // @ts-expect-error
+ { unit: 'foobar' }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ // @ts-expect-error
+ assert.throws(formatDistanceStrict.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(formatDistanceStrict.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/formatDistanceToNow/benchmark.js b/date-fns/src/formatDistanceToNow/benchmark.js
new file mode 100644
index 0000000..8a6f444
--- /dev/null
+++ b/date-fns/src/formatDistanceToNow/benchmark.js
@@ -0,0 +1,25 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import moment from 'moment'
+import formatDistanceToNow from '.'
+
+suite(
+ 'formatDistanceToNow',
+ () => {
+ benchmark('date-fns', function() {
+ return formatDistanceToNow(this.date)
+ })
+
+ benchmark('Moment.js', function() {
+ return this.moment.toNow()
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ this.moment = moment()
+ }
+ }
+)
diff --git a/date-fns/src/formatDistanceToNow/index.d.ts b/date-fns/src/formatDistanceToNow/index.d.ts
new file mode 100644
index 0000000..1d8b750
--- /dev/null
+++ b/date-fns/src/formatDistanceToNow/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDistanceToNow } from 'date-fns'
+export default formatDistanceToNow
diff --git a/date-fns/src/formatDistanceToNow/index.js b/date-fns/src/formatDistanceToNow/index.js
new file mode 100644
index 0000000..1df29c1
--- /dev/null
+++ b/date-fns/src/formatDistanceToNow/index.js
@@ -0,0 +1,113 @@
+import distanceInWords from '../formatDistance/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name formatDistanceToNow
+ * @category Common Helpers
+ * @summary Return the distance between the given date and now in words.
+ * @pure false
+ *
+ * @description
+ * Return the distance between the given date and now in words.
+ *
+ * | Distance to now | Result |
+ * |-------------------------------------------------------------------|---------------------|
+ * | 0 ... 30 secs | less than a minute |
+ * | 30 secs ... 1 min 30 secs | 1 minute |
+ * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |
+ * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |
+ * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |
+ * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |
+ * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |
+ * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |
+ * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |
+ * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |
+ * | 1 yr ... 1 yr 3 months | about 1 year |
+ * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |
+ * | 1 yr 9 months ... 2 yrs | almost 2 years |
+ * | N yrs ... N yrs 3 months | about N years |
+ * | N yrs 3 months ... N yrs 9 months | over N years |
+ * | N yrs 9 months ... N+1 yrs | almost N+1 years |
+ *
+ * With `options.includeSeconds == true`:
+ * | Distance to now | Result |
+ * |---------------------|----------------------|
+ * | 0 secs ... 5 secs | less than 5 seconds |
+ * | 5 secs ... 10 secs | less than 10 seconds |
+ * | 10 secs ... 20 secs | less than 20 seconds |
+ * | 20 secs ... 40 secs | half a minute |
+ * | 40 secs ... 60 secs | less than a minute |
+ * | 60 secs ... 90 secs | 1 minute |
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `distanceInWordsToNow ` to `formatDistanceToNow`
+ * to make its name consistent with `format` and `formatRelative`.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ *
+ * distanceInWordsToNow(new Date(2014, 6, 2), { addSuffix: true })
+ * //=> 'in 6 months'
+ *
+ * // v2.0.0 onward
+ *
+ * formatDistanceToNow(new Date(2014, 6, 2), { addSuffix: true })
+ * //=> 'in 6 months'
+ * ```
+ *
+ * @param {Date|Number} date - the given date
+ * @param {Object} [options] - the object with options
+ * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed
+ * @param {Boolean} [options.addSuffix=false] - result specifies if now is earlier or later than the passed date
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @returns {String} the distance in words
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `date` must not be Invalid Date
+ * @throws {RangeError} `options.locale` must contain `formatDistance` property
+ *
+ * @example
+ * // If today is 1 January 2015, what is the distance to 2 July 2014?
+ * var result = formatDistanceToNow(
+ * new Date(2014, 6, 2)
+ * )
+ * //=> '6 months'
+ *
+ * @example
+ * // If now is 1 January 2015 00:00:00,
+ * // what is the distance to 1 January 2015 00:00:15, including seconds?
+ * var result = formatDistanceToNow(
+ * new Date(2015, 0, 1, 0, 0, 15),
+ * {includeSeconds: true}
+ * )
+ * //=> 'less than 20 seconds'
+ *
+ * @example
+ * // If today is 1 January 2015,
+ * // what is the distance to 1 January 2016, with a suffix?
+ * var result = formatDistanceToNow(
+ * new Date(2016, 0, 1),
+ * {addSuffix: true}
+ * )
+ * //=> 'in about 1 year'
+ *
+ * @example
+ * // If today is 1 January 2015,
+ * // what is the distance to 1 August 2016 in Esperanto?
+ * var eoLocale = require('date-fns/locale/eo')
+ * var result = formatDistanceToNow(
+ * new Date(2016, 7, 1),
+ * {locale: eoLocale}
+ * )
+ * //=> 'pli ol 1 jaro'
+ */
+export default function formatDistanceToNow(dirtyDate, dirtyOptions) {
+ requiredArgs(1, arguments)
+
+ return distanceInWords(dirtyDate, Date.now(), dirtyOptions)
+}
diff --git a/date-fns/src/formatDistanceToNow/index.js.flow b/date-fns/src/formatDistanceToNow/index.js.flow
new file mode 100644
index 0000000..08687be
--- /dev/null
+++ b/date-fns/src/formatDistanceToNow/index.js.flow
@@ -0,0 +1,59 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ includeSeconds?: boolean,
+ addSuffix?: boolean,
+ locale?: Locale,
+ }
+) => string
diff --git a/date-fns/src/formatDistanceToNow/test.js b/date-fns/src/formatDistanceToNow/test.js
new file mode 100644
index 0000000..5d85b18
--- /dev/null
+++ b/date-fns/src/formatDistanceToNow/test.js
@@ -0,0 +1,232 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import formatDistanceToNow from '.'
+
+describe('formatDistanceToNow', () => {
+ let clock
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(1986, 3, 4, 10, 32, 0).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ describe('seconds', () => {
+ describe('when the includeSeconds option is true', () => {
+ it('less than 5 seconds', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 31, 58), {
+ includeSeconds: true,
+ })
+ assert(result === 'less than 5 seconds')
+ })
+
+ it('less than 10 seconds', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 31, 52), {
+ includeSeconds: true,
+ })
+ assert(result === 'less than 10 seconds')
+ })
+
+ it('less than 20 seconds', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 31, 45), {
+ includeSeconds: true,
+ })
+ assert(result === 'less than 20 seconds')
+ })
+
+ it('half a minute', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 31, 35), {
+ includeSeconds: true,
+ })
+ assert(result === 'half a minute')
+ })
+
+ it('less than a minute', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 31, 15), {
+ includeSeconds: true,
+ })
+ assert(result === 'less than a minute')
+ })
+
+ it('1 minute', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 31, 0), {
+ includeSeconds: true,
+ })
+ assert(result === '1 minute')
+ })
+ })
+ })
+
+ describe('minutes', () => {
+ it('less than a minute', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 31, 40))
+ assert(result === 'less than a minute')
+ })
+
+ it('1 minute', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 31, 10))
+ assert(result === '1 minute')
+ })
+
+ it('n minutes', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 29, 10))
+ assert(result === '3 minutes')
+ })
+ })
+
+ describe('hours', () => {
+ it('about 1 hour', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 9, 32, 0))
+ assert(result === 'about 1 hour')
+ })
+
+ it('about n hours', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 7, 32, 0))
+ assert(result === 'about 3 hours')
+ })
+ })
+
+ describe('days', () => {
+ it('1 day', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 3, 10, 32, 0))
+ assert(result === '1 day')
+ })
+
+ it('n days', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 1, 10, 32, 0))
+ assert(result === '3 days')
+ })
+ })
+
+ describe('months', () => {
+ it('about 1 month', () => {
+ const result = formatDistanceToNow(new Date(1986, 2, 4, 10, 32, 0))
+ assert(result === 'about 1 month')
+ })
+
+ it('n months', () => {
+ const result = formatDistanceToNow(new Date(1986, 0, 4, 10, 32, 0))
+ assert(result === '3 months')
+ })
+ })
+
+ describe('years', () => {
+ it('about 1 year', () => {
+ const result = formatDistanceToNow(new Date(1985, 3, 4, 10, 32, 0))
+ assert(result === 'about 1 year')
+ })
+
+ it('over 1 year', () => {
+ const result = formatDistanceToNow(new Date(1984, 10, 4, 10, 32, 0))
+ assert(result === 'over 1 year')
+ })
+
+ it('almost n years', () => {
+ const result = formatDistanceToNow(new Date(1983, 4, 4, 10, 32, 0))
+ assert(result === 'almost 3 years')
+ })
+
+ it('about n years', () => {
+ const result = formatDistanceToNow(new Date(1983, 3, 4, 10, 32, 0))
+ assert(result === 'about 3 years')
+ })
+
+ it('over n years', () => {
+ const result = formatDistanceToNow(new Date(1982, 10, 4, 10, 32, 0))
+ assert(result === 'over 3 years')
+ })
+ })
+
+ it('accepts a timestamp', () => {
+ const result = formatDistanceToNow(
+ new Date(1986, 3, 4, 10, 31, 40).getTime()
+ )
+ assert(result === 'less than a minute')
+ })
+
+ describe('when the addSuffix option is true', () => {
+ it('adds a past suffix', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 10, 31, 35), {
+ includeSeconds: true,
+ addSuffix: true,
+ })
+ assert(result === 'half a minute ago')
+ })
+
+ it('adds a future suffix', () => {
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 11, 32, 0), {
+ addSuffix: true,
+ })
+ assert(result === 'in about 1 hour')
+ })
+ })
+
+ describe('implicit conversion of options', () => {
+ it('`options.includeSeconds`', () => {
+ const result = formatDistanceToNow(
+ new Date(1986, 3, 4, 10, 31, 52),
+ // $ExpectedMistake
+ { includeSeconds: 1 }
+ )
+ assert(result === 'less than 10 seconds')
+ })
+
+ it('`options.addSuffix`', () => {
+ const result = formatDistanceToNow(
+ new Date(1986, 3, 4, 11, 32, 0),
+ // $ExpectedMistake
+ { addSuffix: 1 }
+ )
+ assert(result === 'in about 1 hour')
+ })
+ })
+
+ describe('custom locale', () => {
+ it('can be passed to the function', () => {
+ function localizeDistance(token, count, options) {
+ assert(token === 'aboutXHours')
+ assert(count === 1)
+ assert(options.addSuffix === true)
+ assert(options.comparison > 0)
+ return 'It works!'
+ }
+
+ const customLocale = {
+ formatDistance: localizeDistance,
+ }
+
+ const result = formatDistanceToNow(new Date(1986, 3, 4, 11, 32, 0), {
+ addSuffix: true,
+ // $ExpectedMistake
+ locale: customLocale,
+ })
+
+ assert(result === 'It works!')
+ })
+
+ describe('does not contain `distanceInWords` property', () => {
+ it('throws `RangeError`', function () {
+ const customLocale = {}
+ const block = formatDistanceToNow.bind(
+ null,
+ // $ExpectedMistake
+ new Date(1986, 3, 4, 10, 32, 0),
+ { includeSeconds: true, locale: customLocale }
+ )
+ assert.throws(block, RangeError)
+ })
+ })
+ })
+
+ it('throws RangeError if the passed date is `Invalid Date`', function () {
+ assert.throws(formatDistanceToNow.bind(null, new Date(NaN)), RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ assert.throws(formatDistanceToNow.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/formatDistanceToNowStrict/benchmark.js b/date-fns/src/formatDistanceToNowStrict/benchmark.js
new file mode 100644
index 0000000..47d9e08
--- /dev/null
+++ b/date-fns/src/formatDistanceToNowStrict/benchmark.js
@@ -0,0 +1,25 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import formatDistanceToNowStrict from '.'
+import moment from 'moment'
+
+suite(
+ 'formatDistanceToNowStrict',
+ function() {
+ benchmark('date-fns', function() {
+ return formatDistanceToNowStrict(this.date)
+ })
+
+ benchmark('Moment.js', function() {
+ return this.moment.toNow()
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ this.moment = moment()
+ }
+ }
+)
diff --git a/date-fns/src/formatDistanceToNowStrict/index.d.ts b/date-fns/src/formatDistanceToNowStrict/index.d.ts
new file mode 100644
index 0000000..4f00e65
--- /dev/null
+++ b/date-fns/src/formatDistanceToNowStrict/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDistanceToNowStrict } from 'date-fns'
+export default formatDistanceToNowStrict
diff --git a/date-fns/src/formatDistanceToNowStrict/index.js b/date-fns/src/formatDistanceToNowStrict/index.js
new file mode 100644
index 0000000..2f61d88
--- /dev/null
+++ b/date-fns/src/formatDistanceToNowStrict/index.js
@@ -0,0 +1,82 @@
+import formatDistanceStrict from '../formatDistanceStrict/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name formatDistanceToNowStrict
+ * @category Common Helpers
+ * @summary Return the distance between the given date and now in words.
+ * @pure false
+ *
+ * @description
+ * Return the distance between the given dates in words, using strict units.
+ * This is like `formatDistance`, but does not use helpers like 'almost', 'over',
+ * 'less than' and the like.
+ *
+ * | Distance between dates | Result |
+ * |------------------------|---------------------|
+ * | 0 ... 59 secs | [0..59] seconds |
+ * | 1 ... 59 mins | [1..59] minutes |
+ * | 1 ... 23 hrs | [1..23] hours |
+ * | 1 ... 29 days | [1..29] days |
+ * | 1 ... 11 months | [1..11] months |
+ * | 1 ... N years | [1..N] years |
+ *
+ * @param {Date|Number} date - the given date
+ * @param {Object} [options] - an object with options.
+ * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first
+ * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit
+ * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @returns {String} the distance in words
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `date` must not be Invalid Date
+ * @throws {RangeError} `options.locale` must contain `formatDistance` property
+ *
+ * @example
+ * // If today is 1 January 2015, what is the distance to 2 July 2014?
+ * var result = formatDistanceToNowStrict(
+ * new Date(2014, 6, 2)
+ * )
+ * //=> '6 months'
+ *
+ * @example
+ * // If now is 1 January 2015 00:00:00,
+ * // what is the distance to 1 January 2015 00:00:15, including seconds?
+ * var result = formatDistanceToNowStrict(
+ * new Date(2015, 0, 1, 0, 0, 15)
+ * )
+ * //=> '20 seconds'
+ *
+ * @example
+ * // If today is 1 January 2015,
+ * // what is the distance to 1 January 2016, with a suffix?
+ * var result = formatDistanceToNowStrict(
+ * new Date(2016, 0, 1),
+ * {addSuffix: true}
+ * )
+ * //=> 'in 1 year'
+ *
+ * @example
+ * // If today is 28 January 2015,
+ * // what is the distance to 1 January 2015, in months, rounded up??
+ * var result = formatDistanceToNowStrict(new Date(2015, 0, 1), {
+ * unit: 'month',
+ * roundingMethod: 'ceil'
+ * })
+ * //=> '1 month'
+ *
+ * @example
+ * // If today is 1 January 2015,
+ * // what is the distance to 1 August 2016 in Esperanto?
+ * var eoLocale = require('date-fns/locale/eo')
+ * var result = formatDistanceToNowStrict(
+ * new Date(2016, 7, 1),
+ * {locale: eoLocale}
+ * )
+ * //=> '1 jaro'
+ */
+export default function formatDistanceToNowStrict(dirtyDate, dirtyOptions) {
+ requiredArgs(1, arguments)
+
+ return formatDistanceStrict(dirtyDate, Date.now(), dirtyOptions)
+}
diff --git a/date-fns/src/formatDistanceToNowStrict/index.js.flow b/date-fns/src/formatDistanceToNowStrict/index.js.flow
new file mode 100644
index 0000000..49fbade
--- /dev/null
+++ b/date-fns/src/formatDistanceToNowStrict/index.js.flow
@@ -0,0 +1,60 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ addSuffix?: boolean,
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year',
+ roundingMethod?: 'floor' | 'ceil' | 'round',
+ locale?: Locale,
+ }
+) => string
diff --git a/date-fns/src/formatDistanceToNowStrict/test.js b/date-fns/src/formatDistanceToNowStrict/test.js
new file mode 100644
index 0000000..016476f
--- /dev/null
+++ b/date-fns/src/formatDistanceToNowStrict/test.js
@@ -0,0 +1,422 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import sinon from 'sinon'
+import formatDistanceToNowStrict from '.'
+
+describe('formatDistanceToNowStrict', function () {
+ let clock
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(1986, 3, 4, 10, 32, 0).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ describe('seconds', function () {
+ describe('when no unit is set', function () {
+ it('0 seconds', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 32, 0))
+ assert(result === '0 seconds')
+ })
+
+ it('5 seconds', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 32, 5))
+ assert(result === '5 seconds')
+ })
+ })
+ })
+
+ describe('minutes', function () {
+ it('1 minute', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 33, 0))
+ assert(result === '1 minute')
+ })
+
+ it('n minutes', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 35, 0))
+ assert(result === '3 minutes')
+ })
+ })
+
+ describe('hours', function () {
+ it('1 hour', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 11, 32, 0))
+ assert(result === '1 hour')
+ })
+
+ it('n hours', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 13, 32, 0))
+ assert(result === '3 hours')
+ })
+ })
+
+ describe('days', function () {
+ it('1 day', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 5, 10, 32, 0))
+ assert(result === '1 day')
+ })
+
+ it('n days', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 7, 10, 32, 0))
+ assert(result === '3 days')
+ })
+ })
+
+ describe('months', function () {
+ it('1 month', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 4, 4, 10, 32, 0))
+ assert(result === '1 month')
+ })
+
+ it('n months', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 6, 4, 10, 32, 0))
+ assert(result === '3 months')
+ })
+ })
+
+ describe('years', function () {
+ it('1 year', function () {
+ var result = formatDistanceToNowStrict(new Date(1987, 3, 4, 10, 32, 0))
+ assert(result === '1 year')
+ })
+
+ it('n years', function () {
+ var result = formatDistanceToNowStrict(new Date(1991, 3, 4, 10, 32, 0))
+ assert(result === '5 years')
+ })
+ })
+
+ describe('when the unit option is supplied', function () {
+ describe('second', function () {
+ it('0 seconds', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'second' }
+ )
+ assert(result === '0 seconds')
+ })
+
+ it('5 seconds', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 32, 5),
+ { unit: 'second' }
+ )
+ assert(result === '5 seconds')
+ })
+
+ it('120 seconds', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 34, 0),
+ { unit: 'second' }
+ )
+ assert(result === '120 seconds')
+ })
+ })
+
+ describe('minute', function () {
+ it('0 minutes', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'minute' }
+ )
+ assert(result === '0 minutes')
+ })
+
+ it('5 minutes', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 37, 0),
+ { unit: 'minute' }
+ )
+ assert(result === '5 minutes')
+ })
+
+ it('120 minutes', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 12, 32, 0),
+ { unit: 'minute' }
+ )
+ assert(result === '120 minutes')
+ })
+ })
+
+ describe('hour', function () {
+ it('0 hours', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'hour' }
+ )
+ assert(result === '0 hours')
+ })
+
+ it('5 hours', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 15, 32, 0),
+ { unit: 'hour' }
+ )
+ assert(result === '5 hours')
+ })
+
+ it('48 hours', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 6, 10, 32, 0),
+ { unit: 'hour' }
+ )
+ assert(result === '48 hours')
+ })
+ })
+
+ describe('day', function () {
+ it('0 days', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'day' }
+ )
+ assert(result === '0 days')
+ })
+
+ it('5 days', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 9, 10, 32, 0),
+ { unit: 'day' }
+ )
+ assert(result === '5 days')
+ })
+
+ it('60 days', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 5, 3, 10, 32, 0),
+ { unit: 'day' }
+ )
+ assert(result === '60 days')
+ })
+ })
+ describe('month', function () {
+ it('0 months', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'month' }
+ )
+ assert(result === '0 months')
+ })
+
+ it('5 months', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 7, 4, 10, 32, 0),
+ { unit: 'month' }
+ )
+ assert(result === '4 months')
+ })
+
+ it('24 months', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1988, 3, 4, 10, 32, 0),
+ { unit: 'month' }
+ )
+ assert(result === '24 months')
+ })
+ })
+
+ describe('year', function () {
+ it('returns `1 year` - see issue 2388', () => {
+ const result = formatDistanceToNowStrict(
+ new Date(1985, 3, 4, 10, 32, 0)
+ )
+ assert(result === '1 year')
+ })
+
+ it('returns `2 years` - see issue 2388', () => {
+ const result = formatDistanceToNowStrict(
+ new Date(1984, 3, 4, 10, 32, 0)
+ )
+ assert(result === '2 years')
+ })
+
+ it('0 years', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ { unit: 'year' }
+ )
+ assert(result === '0 years')
+ })
+
+ it('5 years', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1991, 3, 4, 15, 32, 0),
+ { unit: 'year' }
+ )
+ assert(result === '5 years')
+ })
+ })
+ })
+
+ it('accepts timestamps', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 11, 32, 0).getTime()
+ )
+ assert(result === '1 hour')
+ })
+
+ describe('when the addSuffix option is true', function () {
+ it('adds a past suffix', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 31, 35), {
+ addSuffix: true,
+ })
+ assert(result === '25 seconds ago')
+ })
+
+ it('adds a future suffix', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 11, 32, 0), {
+ addSuffix: true,
+ })
+ assert(result === 'in 1 hour')
+ })
+ })
+
+ describe('when the roundingMethod option is supplied', function () {
+ it('default is "round"', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 33, 59))
+ assert(result === '2 minutes')
+ })
+
+ it('"floor"', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 33, 59), {
+ roundingMethod: 'floor',
+ })
+ assert(result === '1 minute')
+ })
+
+ it('"ceil"', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 33, 1), {
+ roundingMethod: 'ceil',
+ })
+ assert(result === '2 minutes')
+ })
+
+ it('"round" (down)', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 33, 29), {
+ roundingMethod: 'round',
+ })
+ assert(result === '1 minute')
+ })
+
+ it('"round" (up)', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 3, 4, 10, 33, 30), {
+ roundingMethod: 'round',
+ })
+ assert(result === '2 minutes')
+ })
+ })
+
+ describe('implicit conversion of options', function () {
+ it('`options.unit`', function () {
+ // eslint-disable-next-line no-new-wrappers
+ var unit = new String('year')
+
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ // $ExpectedMistake
+ { unit: unit }
+ )
+ assert(result === '0 years')
+ })
+
+ it('`options.addSuffix`', function () {
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 31, 35),
+ // $ExpectedMistake
+ { addSuffix: 1 }
+ )
+ assert(result === '25 seconds ago')
+ })
+
+ it('`options.ceil`', function () {
+ // eslint-disable-next-line no-new-wrappers
+ var roundingMethod = new String('ceil')
+
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 33, 1),
+ // $ExpectedMistake
+ { roundingMethod: roundingMethod }
+ )
+ assert(result === '2 minutes')
+ })
+ })
+
+ describe('custom locale', function () {
+ it('can be passed to the function', function () {
+ function localizeDistance(token, count, options) {
+ assert(token === 'xSeconds')
+ assert(count === 15)
+ assert(options.addSuffix === true)
+ assert(options.comparison < 0)
+ return 'It works!'
+ }
+
+ var customLocale = {
+ formatDistance: localizeDistance,
+ }
+
+ var result = formatDistanceToNowStrict(
+ new Date(1986, 3, 4, 10, 31, 45),
+ // $ExpectedMistake
+ { addSuffix: true, locale: customLocale }
+ )
+
+ assert(result === 'It works!')
+ })
+
+ describe('does not contain `formatDistance` property', function () {
+ it('throws `RangeError`', function () {
+ var customLocale = {}
+ var block = formatDistanceToNowStrict.bind(
+ null,
+ // $ExpectedMistake
+ new Date(1986, 3, 4, 10, 37, 0),
+ { unit: 'minute', locale: customLocale }
+ )
+ assert.throws(block, RangeError)
+ })
+ })
+ })
+
+ describe('edge cases', function () {
+ it('detects unit correctly for short months', function () {
+ var result = formatDistanceToNowStrict(new Date(1986, 2 /* Mar */, 7))
+ assert(result === '28 days')
+ })
+ })
+
+ it('throws `RangeError` if the date is `Invalid Date`', function () {
+ assert.throws(
+ formatDistanceToNowStrict.bind(null, new Date(NaN)),
+ RangeError
+ )
+ })
+
+ it("throws `RangeError` if `options.roundingMethod` is not 'floor', 'ceil', 'round' or undefined", function () {
+ var block = formatDistanceToNowStrict.bind(
+ null,
+ new Date(1986, 3, 4, 10, 33, 29),
+ // $ExpectedMistake
+ { roundingMethod: 'foobar' }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it("throws `RangeError` if `options.unit` is not 's', 'm', 'h', 'd', 'M', 'Y' or undefined", function () {
+ var block = formatDistanceToNowStrict.bind(
+ null,
+ new Date(1986, 3, 4, 10, 33, 29),
+ // $ExpectedMistake
+ { unit: 'foobar' }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 arguments', function () {
+ assert.throws(formatDistanceToNowStrict.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/formatDuration/index.d.ts b/date-fns/src/formatDuration/index.d.ts
new file mode 100644
index 0000000..be96776
--- /dev/null
+++ b/date-fns/src/formatDuration/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDuration } from 'date-fns'
+export default formatDuration
diff --git a/date-fns/src/formatDuration/index.js b/date-fns/src/formatDuration/index.js
new file mode 100644
index 0000000..c4130a6
--- /dev/null
+++ b/date-fns/src/formatDuration/index.js
@@ -0,0 +1,100 @@
+import defaultLocale from '../locale/en-US/index'
+
+const defaultFormat = [
+ 'years',
+ 'months',
+ 'weeks',
+ 'days',
+ 'hours',
+ 'minutes',
+ 'seconds',
+]
+
+/**
+ * @name formatDuration
+ * @category Common Helpers
+ * @summary Formats a duration in human-readable format
+ *
+ * @description
+ * Return human-readable duration string i.e. "9 months 2 days"
+ *
+ * @param {Duration} duration - the duration to format
+ * @param {Object} [options] - an object with options.
+
+ * @param {string[]} [options.format=['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']] - the array of units to format
+ * @param {boolean} [options.zero=false] - should be zeros be included in the output?
+ * @param {string} [options.delimiter=' '] - delimiter string
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @returns {string} the formatted date string
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Format full duration
+ * formatDuration({
+ * years: 2,
+ * months: 9,
+ * weeks: 1,
+ * days: 7,
+ * hours: 5,
+ * minutes: 9,
+ * seconds: 30
+ * })
+ * //=> '2 years 9 months 1 week 7 days 5 hours 9 minutes 30 seconds
+ *
+ * @example
+ * // Format partial duration
+ * formatDuration({ months: 9, days: 2 })
+ * //=> '9 months 2 days'
+ *
+ * @example
+ * // Customize the format
+ * formatDuration(
+ * {
+ * years: 2,
+ * months: 9,
+ * weeks: 1,
+ * days: 7,
+ * hours: 5,
+ * minutes: 9,
+ * seconds: 30
+ * },
+ * { format: ['months', 'weeks'] }
+ * ) === '9 months 1 week'
+ *
+ * @example
+ * // Customize the zeros presence
+ * formatDuration({ years: 0, months: 9 })
+ * //=> '9 months'
+ * formatDuration({ years: 0, months: 9 }, { zero: true })
+ * //=> '0 years 9 months'
+ *
+ * @example
+ * // Customize the delimiter
+ * formatDuration({ years: 2, months: 9, weeks: 3 }, { delimiter: ', ' })
+ * //=> '2 years, 9 months, 3 weeks'
+ */
+export default function formatDuration(duration, options) {
+ if (arguments.length < 1) {
+ throw new TypeError(
+ `1 argument required, but only ${arguments.length} present`
+ )
+ }
+
+ const format = options?.format || defaultFormat
+ const locale = options?.locale || defaultLocale
+ const zero = options?.zero || false
+ const delimiter = options?.delimiter || ' '
+
+ const result = format
+ .reduce((acc, unit) => {
+ const token = `x${unit.replace(/(^.)/, (m) => m.toUpperCase())}`
+ const addChunk =
+ typeof duration[unit] === 'number' && (zero || duration[unit])
+ return addChunk
+ ? acc.concat(locale.formatDistance(token, duration[unit]))
+ : acc
+ }, [])
+ .join(delimiter)
+
+ return result
+}
diff --git a/date-fns/src/formatDuration/index.js.flow b/date-fns/src/formatDuration/index.js.flow
new file mode 100644
index 0000000..022ea8e
--- /dev/null
+++ b/date-fns/src/formatDuration/index.js.flow
@@ -0,0 +1,60 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ duration: Duration,
+ options?: {
+ format?: string[],
+ zero?: boolean,
+ delimiter?: string,
+ locale?: Locale,
+ }
+) => string
diff --git a/date-fns/src/formatDuration/test.js b/date-fns/src/formatDuration/test.js
new file mode 100644
index 0000000..f9bb7af
--- /dev/null
+++ b/date-fns/src/formatDuration/test.js
@@ -0,0 +1,80 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import formatDuration from '.'
+
+describe('formatDuration', () => {
+ it('formats full duration', () => {
+ assert(
+ formatDuration({
+ years: 2,
+ months: 9,
+ weeks: 1,
+ days: 7,
+ hours: 5,
+ minutes: 9,
+ seconds: 30
+ }) === '2 years 9 months 1 week 7 days 5 hours 9 minutes 30 seconds'
+ )
+ })
+
+ it('formats partial duration', () => {
+ assert(formatDuration({ months: 9, days: 2 }) === '9 months 2 days')
+ })
+
+ it('allows to customize the format', () => {
+ assert(
+ formatDuration(
+ {
+ years: 2,
+ months: 9,
+ weeks: 1,
+ days: 7,
+ hours: 5,
+ minutes: 9,
+ seconds: 30
+ },
+ { format: ['months', 'weeks'] }
+ ) === '9 months 1 week'
+ )
+ })
+
+ it('does not include zeros by default', () => {
+ assert(
+ formatDuration({
+ years: 0,
+ months: 0,
+ weeks: 1,
+ days: 0,
+ hours: 0,
+ minutes: 0,
+ seconds: 0
+ }) === '1 week'
+ )
+ })
+
+ it('allows to include zeros', () => {
+ assert(
+ formatDuration(
+ {
+ years: 0,
+ months: 0,
+ weeks: 1,
+ days: 0,
+ hours: 0,
+ minutes: 0,
+ seconds: 0
+ },
+ { zero: true }
+ ) === '0 years 0 months 1 week 0 days 0 hours 0 minutes 0 seconds'
+ )
+ })
+
+ it('allows to customize the delimiter', () => {
+ assert(
+ formatDuration({ months: 9, days: 2 }, { delimiter: ', ' }) ===
+ '9 months, 2 days'
+ )
+ })
+})
diff --git a/date-fns/src/formatISO/index.d.ts b/date-fns/src/formatISO/index.d.ts
new file mode 100644
index 0000000..4ed5a00
--- /dev/null
+++ b/date-fns/src/formatISO/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatISO } from 'date-fns'
+export default formatISO
diff --git a/date-fns/src/formatISO/index.js b/date-fns/src/formatISO/index.js
new file mode 100644
index 0000000..e12288f
--- /dev/null
+++ b/date-fns/src/formatISO/index.js
@@ -0,0 +1,121 @@
+import toDate from '../toDate/index'
+import isValid from '../isValid/index'
+import addLeadingZeros from '../_lib/addLeadingZeros/index'
+
+/**
+ * @name formatISO
+ * @category Common Helpers
+ * @summary Format the date according to the ISO 8601 standard (http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).
+ *
+ * @description
+ * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.
+ *
+ * @param {Date|Number} date - the original date
+ * @param {Object} [options] - an object with options.
+ * @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.
+ * @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time with time zone, or both.
+ * @returns {String} the formatted date string
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `date` must not be Invalid Date
+ * @throws {RangeError} `options.format` must be 'extended' or 'basic'
+ * @throws {RangeError} `options.represenation` must be 'date', 'time' or 'complete'
+ *
+ * @example
+ * // Represent 18 September 2019 in ISO 8601 format (UTC):
+ * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))
+ * //=> '2019-09-18T19:00:52Z'
+ *
+ * @example
+ * // Represent 18 September 2019 in ISO 8601, short format (UTC):
+ * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })
+ * //=> '20190918T190052'
+ *
+ * @example
+ * // Represent 18 September 2019 in ISO 8601 format, date only:
+ * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })
+ * //=> '2019-09-18'
+ *
+ * @example
+ * // Represent 18 September 2019 in ISO 8601 format, time only (UTC):
+ * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })
+ * //=> '19:00:52Z'
+ */
+export default function formatISO(dirtyDate, dirtyOptions) {
+ if (arguments.length < 1) {
+ throw new TypeError(
+ `1 argument required, but only ${arguments.length} present`
+ )
+ }
+
+ const originalDate = toDate(dirtyDate)
+
+ if (!isValid(originalDate)) {
+ throw new RangeError('Invalid time value')
+ }
+
+ const options = dirtyOptions || {}
+ const format = options.format == null ? 'extended' : String(options.format)
+ const representation =
+ options.representation == null ? 'complete' : String(options.representation)
+
+ if (format !== 'extended' && format !== 'basic') {
+ throw new RangeError("format must be 'extended' or 'basic'")
+ }
+
+ if (
+ representation !== 'date' &&
+ representation !== 'time' &&
+ representation !== 'complete'
+ ) {
+ throw new RangeError("representation must be 'date', 'time', or 'complete'")
+ }
+
+ let result = ''
+ let tzOffset = ''
+
+ const dateDelimiter = format === 'extended' ? '-' : ''
+ const timeDelimiter = format === 'extended' ? ':' : ''
+
+ // Representation is either 'date' or 'complete'
+ if (representation !== 'time') {
+ const day = addLeadingZeros(originalDate.getDate(), 2)
+ const month = addLeadingZeros(originalDate.getMonth() + 1, 2)
+ const year = addLeadingZeros(originalDate.getFullYear(), 4)
+
+ // yyyyMMdd or yyyy-MM-dd.
+ result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`
+ }
+
+ // Representation is either 'time' or 'complete'
+ if (representation !== 'date') {
+ // Add the timezone.
+ const offset = originalDate.getTimezoneOffset()
+
+ if (offset !== 0) {
+ const absoluteOffset = Math.abs(offset)
+ const hourOffset = addLeadingZeros(Math.floor(absoluteOffset / 60), 2)
+ const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2)
+ // If less than 0, the sign is +, because it is ahead of time.
+ const sign = offset < 0 ? '+' : '-'
+
+ tzOffset = `${sign}${hourOffset}:${minuteOffset}`
+ } else {
+ tzOffset = 'Z'
+ }
+
+ const hour = addLeadingZeros(originalDate.getHours(), 2)
+ const minute = addLeadingZeros(originalDate.getMinutes(), 2)
+ const second = addLeadingZeros(originalDate.getSeconds(), 2)
+
+ // If there's also date, separate it with time with 'T'
+ const separator = result === '' ? '' : 'T'
+
+ // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.
+ const time = [hour, minute, second].join(timeDelimiter)
+
+ // HHmmss or HH:mm:ss.
+ result = `${result}${separator}${time}${tzOffset}`
+ }
+
+ return result
+}
diff --git a/date-fns/src/formatISO/index.js.flow b/date-fns/src/formatISO/index.js.flow
new file mode 100644
index 0000000..5d1e860
--- /dev/null
+++ b/date-fns/src/formatISO/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic',
+ representation?: 'complete' | 'date' | 'time',
+ }
+) => string
diff --git a/date-fns/src/formatISO/test.js b/date-fns/src/formatISO/test.js
new file mode 100644
index 0000000..08193eb
--- /dev/null
+++ b/date-fns/src/formatISO/test.js
@@ -0,0 +1,122 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import formatISO from '.'
+import addLeadingZeros from '../_lib/addLeadingZeros'
+
+// This makes sure we create the consistent offsets across timezones, no matter where these tests are ran.
+function generateOffset(originalDate) {
+ // Add the timezone.
+ let offset = ''
+ const tzOffset = originalDate.getTimezoneOffset()
+
+ if (tzOffset !== 0) {
+ const absoluteOffset = Math.abs(tzOffset)
+ const hourOffset = addLeadingZeros(Math.floor(absoluteOffset / 60), 2)
+ const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2)
+ // If less than 0, the sign is +, because it is ahead of time.
+ const sign = tzOffset < 0 ? '+' : '-'
+
+ offset = `${sign}${hourOffset}:${minuteOffset}`
+ } else {
+ offset = 'Z'
+ }
+
+ return offset
+}
+
+describe('formatISO', () => {
+ it('formats ISO-8601 extended format', () => {
+ const date = new Date(2019, 2 /* Mar */, 3, 19, 0, 52, 123)
+ const tzOffsetExtended = generateOffset(date)
+ assert(formatISO(date) === `2019-03-03T19:00:52${tzOffsetExtended}`)
+ })
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2019, 2 /* Mar */, 3, 19, 0, 52, 123).getTime()
+ const tzOffsetExtended = generateOffset(new Date(date))
+ assert(formatISO(date) === `2019-03-03T19:00:52${tzOffsetExtended}`)
+ })
+
+ it('formats ISO-8601 basic format', () => {
+ const date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ const tzOffsetBasic = generateOffset(date)
+ assert(
+ formatISO(date, { format: 'basic' }) === `20191004T123013${tzOffsetBasic}`
+ )
+ })
+
+ it('formats only date', () => {
+ const date = new Date(2019, 11 /* Dec */, 11, 1, 0, 0, 789)
+
+ assert(
+ formatISO(date, { representation: 'date', format: 'extended' }) ===
+ '2019-12-11'
+ )
+ assert(
+ formatISO(date, { representation: 'date', format: 'basic' }) ===
+ '20191211'
+ )
+ })
+
+ it('formats only time', () => {
+ const date = new Date(2019, 2 /* Mar */, 3, 19, 0, 52, 123)
+ const tzOffset = generateOffset(date)
+
+ assert(
+ formatISO(date, { representation: 'time', format: 'extended' }) ===
+ `19:00:52${tzOffset}`
+ )
+ assert(
+ formatISO(date, { representation: 'time', format: 'basic' }) ===
+ `190052${tzOffset}`
+ )
+ })
+
+ describe('implicitly converts options', function() {
+ it('`format`', function() {
+ // eslint-disable-next-line no-new-wrappers
+ var format = new String('basic')
+ var date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ const tzOffsetExtended = generateOffset(date)
+ // $ExpectedMistake
+ var result = formatISO(date, { format: format })
+ assert(result === `20191004T123013${tzOffsetExtended}`)
+ })
+
+ it('`representation`', function() {
+ // eslint-disable-next-line no-new-wrappers
+ var representation = new String('time')
+ var date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ const tzOffsetExtended = generateOffset(date)
+ // $ExpectedMistake
+ var result = formatISO(date, { representation: representation })
+ assert(result === `12:30:13${tzOffsetExtended}`)
+ })
+ })
+
+ it("throws `RangeError` if `options.format` is not 'extended' or 'basic'", function() {
+ // $ExpectedMistake
+ var block = formatISO.bind(null, new Date(2019, 2 /* Mar */, 3), {
+ format: 'something else'
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it("throws `RangeError` if `options.representation` is not 'date', 'time' or 'complete'", function() {
+ // $ExpectedMistake
+ var block = formatISO.bind(null, new Date(2019, 2 /* Mar */, 3), {
+ representation: 'something else'
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws RangeError if the time value is invalid', () => {
+ assert.throws(formatISO.bind(null, new Date(NaN)), RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(formatISO.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/formatISO9075/index.d.ts b/date-fns/src/formatISO9075/index.d.ts
new file mode 100644
index 0000000..cc8dc89
--- /dev/null
+++ b/date-fns/src/formatISO9075/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatISO9075 } from 'date-fns'
+export default formatISO9075
diff --git a/date-fns/src/formatISO9075/index.js b/date-fns/src/formatISO9075/index.js
new file mode 100644
index 0000000..2b6da7f
--- /dev/null
+++ b/date-fns/src/formatISO9075/index.js
@@ -0,0 +1,102 @@
+import toDate from '../toDate/index'
+import isValid from '../isValid/index'
+import addLeadingZeros from '../_lib/addLeadingZeros/index'
+
+/**
+ * @name formatISO9075
+ * @category Common Helpers
+ * @summary Format the date according to the ISO 9075 standard (https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_get-format).
+ *
+ * @description
+ * Return the formatted date string in ISO 9075 format. Options may be passed to control the parts and notations of the date.
+ *
+ * @param {Date|Number} date - the original date
+ * @param {Object} [options] - an object with options.
+ * @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.
+ * @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time, or both.
+ * @returns {String} the formatted date string
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `date` must not be Invalid Date
+ * @throws {RangeError} `options.format` must be 'extended' or 'basic'
+ * @throws {RangeError} `options.represenation` must be 'date', 'time' or 'complete'
+ *
+ * @example
+ * // Represent 18 September 2019 in ISO 9075 format:
+ * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52))
+ * //=> '2019-09-18 19:00:52'
+ *
+ * @example
+ * // Represent 18 September 2019 in ISO 9075, short format:
+ * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })
+ * //=> '20190918 190052'
+ *
+ * @example
+ * // Represent 18 September 2019 in ISO 9075 format, date only:
+ * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })
+ * //=> '2019-09-18'
+ *
+ * @example
+ * // Represent 18 September 2019 in ISO 9075 format, time only:
+ * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })
+ * //=> '19:00:52'
+ */
+export default function formatISO9075(dirtyDate, dirtyOptions) {
+ if (arguments.length < 1) {
+ throw new TypeError(
+ `1 argument required, but only ${arguments.length} present`
+ )
+ }
+
+ const originalDate = toDate(dirtyDate)
+
+ if (!isValid(originalDate)) {
+ throw new RangeError('Invalid time value')
+ }
+
+ const options = dirtyOptions || {}
+ const format = options.format == null ? 'extended' : String(options.format)
+ const representation =
+ options.representation == null ? 'complete' : String(options.representation)
+
+ if (format !== 'extended' && format !== 'basic') {
+ throw new RangeError("format must be 'extended' or 'basic'")
+ }
+
+ if (
+ representation !== 'date' &&
+ representation !== 'time' &&
+ representation !== 'complete'
+ ) {
+ throw new RangeError("representation must be 'date', 'time', or 'complete'")
+ }
+
+ let result = ''
+
+ const dateDelimiter = format === 'extended' ? '-' : ''
+ const timeDelimiter = format === 'extended' ? ':' : ''
+
+ // Representation is either 'date' or 'complete'
+ if (representation !== 'time') {
+ const day = addLeadingZeros(originalDate.getDate(), 2)
+ const month = addLeadingZeros(originalDate.getMonth() + 1, 2)
+ const year = addLeadingZeros(originalDate.getFullYear(), 4)
+
+ // yyyyMMdd or yyyy-MM-dd.
+ result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`
+ }
+
+ // Representation is either 'time' or 'complete'
+ if (representation !== 'date') {
+ const hour = addLeadingZeros(originalDate.getHours(), 2)
+ const minute = addLeadingZeros(originalDate.getMinutes(), 2)
+ const second = addLeadingZeros(originalDate.getSeconds(), 2)
+
+ // If there's also date, separate it with time with a space
+ const separator = result === '' ? '' : ' '
+
+ // HHmmss or HH:mm:ss.
+ result = `${result}${separator}${hour}${timeDelimiter}${minute}${timeDelimiter}${second}`
+ }
+
+ return result
+}
diff --git a/date-fns/src/formatISO9075/index.js.flow b/date-fns/src/formatISO9075/index.js.flow
new file mode 100644
index 0000000..5d1e860
--- /dev/null
+++ b/date-fns/src/formatISO9075/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic',
+ representation?: 'complete' | 'date' | 'time',
+ }
+) => string
diff --git a/date-fns/src/formatISO9075/test.js b/date-fns/src/formatISO9075/test.js
new file mode 100644
index 0000000..6362e50
--- /dev/null
+++ b/date-fns/src/formatISO9075/test.js
@@ -0,0 +1,90 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import formatISO9075 from '.'
+
+describe('formatISO9075', () => {
+ it('formats ISO-9075 extended date format', () => {
+ const date = new Date(2019, 2 /* Mar */, 3, 19, 0, 52, 123)
+ assert(formatISO9075(date) === '2019-03-03 19:00:52')
+ })
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2019, 2 /* Mar */, 3, 19, 0, 52, 123).getTime()
+ assert(formatISO9075(date) === '2019-03-03 19:00:52')
+ })
+
+ it('formats ISO-8601 basic date format', () => {
+ const date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ assert(formatISO9075(date, { format: 'basic' }) === '20191004 123013')
+ })
+
+ it('formats only date', () => {
+ const date = new Date(2019, 11 /* Dec */, 11, 1, 0, 0, 789)
+ assert(
+ formatISO9075(date, { representation: 'date', format: 'extended' }) ===
+ '2019-12-11'
+ )
+ assert(
+ formatISO9075(date, { representation: 'date', format: 'basic' }) ===
+ '20191211'
+ )
+ })
+
+ it('formats only time', () => {
+ const date = new Date(2019, 2 /* Mar */, 3, 19, 0, 52, 123)
+ assert(
+ formatISO9075(date, { representation: 'time', format: 'extended' }) ===
+ '19:00:52'
+ )
+ assert(
+ formatISO9075(date, { representation: 'time', format: 'basic' }) ===
+ '190052'
+ )
+ })
+
+ describe('implicitly converts options', function() {
+ it('`format`', function() {
+ // eslint-disable-next-line no-new-wrappers
+ var format = new String('basic')
+ var date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ // $ExpectedMistake
+ var result = formatISO9075(date, { format: format })
+ assert(result === '20191004 123013')
+ })
+
+ it('`representation`', function() {
+ // eslint-disable-next-line no-new-wrappers
+ var representation = new String('time')
+ var date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ // $ExpectedMistake
+ var result = formatISO9075(date, { representation: representation })
+ assert(result === '12:30:13')
+ })
+ })
+
+ it("throws `RangeError` if `options.format` is not 'extended' or 'basic'", function() {
+ // $ExpectedMistake
+ var block = formatISO9075.bind(null, new Date(2019, 2 /* Mar */, 3), {
+ format: 'something else'
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it("throws `RangeError` if `options.representation` is not 'date', 'time' or 'complete'", function() {
+ // $ExpectedMistake
+ var block = formatISO9075.bind(null, new Date(2019, 2 /* Mar */, 3), {
+ representation: 'something else'
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws RangeError if the time value is invalid', () => {
+ assert.throws(formatISO9075.bind(null, new Date(NaN)), RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(formatISO9075.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/formatISODuration/index.d.ts b/date-fns/src/formatISODuration/index.d.ts
new file mode 100644
index 0000000..dfbd333
--- /dev/null
+++ b/date-fns/src/formatISODuration/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatISODuration } from 'date-fns'
+export default formatISODuration
diff --git a/date-fns/src/formatISODuration/index.js b/date-fns/src/formatISODuration/index.js
new file mode 100644
index 0000000..0702457
--- /dev/null
+++ b/date-fns/src/formatISODuration/index.js
@@ -0,0 +1,46 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name formatISODuration
+ * @category Common Helpers
+ * @summary Format a duration object according as ISO 8601 duration string
+ *
+ * @description
+ * Format a duration object according to the ISO 8601 duration standard (https://www.digi.com/resources/documentation/digidocs/90001437-13/reference/r_iso_8601_duration_format.htm)
+ *
+ * @param {Duration} duration - the duration to format
+ *
+ * @returns {String} The ISO 8601 duration string
+ * @throws {TypeError} Requires 1 argument
+ * @throws {Error} Argument must be an object
+ *
+ * @example
+ * // Format the given duration as ISO 8601 string
+ * formatISODuration({
+ * years: 39,
+ * months: 2,
+ * days: 20,
+ * hours: 7,
+ * minutes: 5,
+ * seconds: 0
+ * })
+ * //=> 'P39Y2M20DT0H0M0S'
+ */
+
+export default function formatISODuration(duration) {
+ requiredArgs(1, arguments)
+
+ if (typeof duration !== 'object')
+ throw new Error('Duration must be an object')
+
+ const {
+ years = 0,
+ months = 0,
+ days = 0,
+ hours = 0,
+ minutes = 0,
+ seconds = 0
+ } = duration
+
+ return `P${years}Y${months}M${days}DT${hours}H${minutes}M${seconds}S`
+}
diff --git a/date-fns/src/formatISODuration/index.js.flow b/date-fns/src/formatISODuration/index.js.flow
new file mode 100644
index 0000000..3f8bb2c
--- /dev/null
+++ b/date-fns/src/formatISODuration/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (duration: Duration) => string
diff --git a/date-fns/src/formatISODuration/test.js b/date-fns/src/formatISODuration/test.js
new file mode 100644
index 0000000..ecea358
--- /dev/null
+++ b/date-fns/src/formatISODuration/test.js
@@ -0,0 +1,78 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import formatISODuration from '.'
+import intervalToDuration from '../intervalToDuration'
+
+describe('formatISODuration', function() {
+ it('Everything returns correct duration for arbitrary dates', function() {
+ const start = new Date(1929, 0, 15, 12, 0, 0)
+ const end = new Date(1968, 3, 4, 19, 5, 0)
+ const result = formatISODuration(intervalToDuration({ start, end }))
+
+ assert(result === 'P39Y2M20DT7H5M0S')
+ })
+ it('Everything returns P1Y1M1DT1H1M1S (1 of everything)', function() {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2021, 3, 2, 13, 1, 1)
+ const result = formatISODuration(intervalToDuration({ start, end }))
+
+ assert(result === 'P1Y1M1DT1H1M1S')
+ })
+ it('Returns P0Y0M0DT0H0M0S when the dates are the same', function() {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2020, 2, 1, 12, 0, 0)
+ const result = formatISODuration(intervalToDuration({ start, end }))
+
+ assert(result === 'P0Y0M0DT0H0M0S')
+ })
+ it('Seconds returns P0Y0M0DT0H0M1S (1 second)', function() {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2020, 2, 1, 12, 0, 1)
+ const result = formatISODuration(intervalToDuration({ start, end }))
+
+ assert(result === 'P0Y0M0DT0H0M1S')
+ })
+ it('Minutes returns P0Y0M0DT0H1M0S (1 minute)', function() {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2020, 2, 1, 12, 1, 0)
+ const result = formatISODuration(intervalToDuration({ start, end }))
+
+ assert(result === 'P0Y0M0DT0H1M0S')
+ })
+ it('Hours returns P0Y0M0DT1H0M0S (1 hour)', function() {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2020, 2, 1, 13, 0, 0)
+ const result = formatISODuration(intervalToDuration({ start, end }))
+
+ assert(result === 'P0Y0M0DT1H0M0S')
+ })
+ it('Days returns P0Y0M1DT0H0M0S (1 day)', function() {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2020, 2, 2, 12, 0, 0)
+ const result = formatISODuration(intervalToDuration({ start, end }))
+
+ assert(result === 'P0Y0M1DT0H0M0S')
+ })
+ it('Months returns P0Y1M0DT0H0M0S (1 month)', function() {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2020, 3, 1, 12, 0, 0)
+ const result = formatISODuration(intervalToDuration({ start, end }))
+
+ assert(result === 'P0Y1M0DT0H0M0S')
+ })
+ it('Years returns P1Y0M0DT0H0M1S (1 year)', function() {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2021, 2, 1, 12, 0, 0)
+ const result = formatISODuration(intervalToDuration({ start, end }))
+
+ assert(result === 'P1Y0M0DT0H0M0S')
+ })
+
+ it('returns P0Y0M0DT0H0M0S when given an empty object', function() {
+ const result = formatISODuration({})
+
+ assert(result === 'P0Y0M0DT0H0M0S')
+ })
+})
diff --git a/date-fns/src/formatRFC3339/index.d.ts b/date-fns/src/formatRFC3339/index.d.ts
new file mode 100644
index 0000000..2454cd2
--- /dev/null
+++ b/date-fns/src/formatRFC3339/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatRFC3339 } from 'date-fns'
+export default formatRFC3339
diff --git a/date-fns/src/formatRFC3339/index.js b/date-fns/src/formatRFC3339/index.js
new file mode 100644
index 0000000..7513ba4
--- /dev/null
+++ b/date-fns/src/formatRFC3339/index.js
@@ -0,0 +1,92 @@
+import toDate from '../toDate/index'
+import isValid from '../isValid/index'
+import addLeadingZeros from '../_lib/addLeadingZeros/index'
+import toInteger from '../_lib/toInteger/index'
+
+/**
+ * @name formatRFC3339
+ * @category Common Helpers
+ * @summary Format the date according to the RFC 3339 standard (https://tools.ietf.org/html/rfc3339#section-5.6).
+ *
+ * @description
+ * Return the formatted date string in RFC 3339 format. Options may be passed to control the parts and notations of the date.
+ *
+ * @param {Date|Number} date - the original date
+ * @param {Object} [options] - an object with options.
+ * @param {0|1|2|3} [options.fractionDigits=0] - number of digits after the decimal point after seconds
+ * @returns {String} the formatted date string
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `date` must not be Invalid Date
+ * @throws {RangeError} `options.fractionDigits` must be between 0 and 3
+ *
+ * @example
+ * // Represent 18 September 2019 in RFC 3339 format:
+ * const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52))
+ * //=> '2019-09-18T19:00:52Z'
+ *
+ * @example
+ * // Represent 18 September 2019 in RFC 3339 format, 2 digits of second fraction:
+ * const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52, 234), { fractionDigits: 2 })
+ * //=> '2019-09-18T19:00:52.23Z'
+ *
+ * @example
+ * // Represent 18 September 2019 in RFC 3339 format, 3 digits of second fraction
+ * const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52, 234), { fractionDigits: 3 })
+ * //=> '2019-09-18T19:00:52.234Z'
+ */
+export default function formatRFC3339(dirtyDate, dirtyOptions) {
+ if (arguments.length < 1) {
+ throw new TypeError(
+ `1 arguments required, but only ${arguments.length} present`
+ )
+ }
+
+ const originalDate = toDate(dirtyDate)
+
+ if (!isValid(originalDate)) {
+ throw new RangeError('Invalid time value')
+ }
+
+ const options = dirtyOptions || {}
+ const fractionDigits =
+ options.fractionDigits == null ? 0 : toInteger(options.fractionDigits)
+
+ // Test if fractionDigits is between 0 and 3 _and_ is not NaN
+ if (!(fractionDigits >= 0 && fractionDigits <= 3)) {
+ throw new RangeError('fractionDigits must be between 0 and 3 inclusively')
+ }
+
+ const day = addLeadingZeros(originalDate.getDate(), 2)
+ const month = addLeadingZeros(originalDate.getMonth() + 1, 2)
+ const year = originalDate.getFullYear()
+
+ const hour = addLeadingZeros(originalDate.getHours(), 2)
+ const minute = addLeadingZeros(originalDate.getMinutes(), 2)
+ const second = addLeadingZeros(originalDate.getSeconds(), 2)
+
+ let fractionalSecond = ''
+ if (fractionDigits > 0) {
+ const milliseconds = originalDate.getMilliseconds()
+ const fractionalSeconds = Math.floor(
+ milliseconds * Math.pow(10, fractionDigits - 3)
+ )
+ fractionalSecond = '.' + addLeadingZeros(fractionalSeconds, fractionDigits)
+ }
+
+ let offset = ''
+ const tzOffset = originalDate.getTimezoneOffset()
+
+ if (tzOffset !== 0) {
+ const absoluteOffset = Math.abs(tzOffset)
+ const hourOffset = addLeadingZeros(toInteger(absoluteOffset / 60), 2)
+ const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2)
+ // If less than 0, the sign is +, because it is ahead of time.
+ const sign = tzOffset < 0 ? '+' : '-'
+
+ offset = `${sign}${hourOffset}:${minuteOffset}`
+ } else {
+ offset = 'Z'
+ }
+
+ return `${year}-${month}-${day}T${hour}:${minute}:${second}${fractionalSecond}${offset}`
+}
diff --git a/date-fns/src/formatRFC3339/index.js.flow b/date-fns/src/formatRFC3339/index.js.flow
new file mode 100644
index 0000000..9bb2748
--- /dev/null
+++ b/date-fns/src/formatRFC3339/index.js.flow
@@ -0,0 +1,57 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ fractionDigits?: 0 | 1 | 2 | 3,
+ }
+) => string
diff --git a/date-fns/src/formatRFC3339/test.js b/date-fns/src/formatRFC3339/test.js
new file mode 100644
index 0000000..5d9e468
--- /dev/null
+++ b/date-fns/src/formatRFC3339/test.js
@@ -0,0 +1,81 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import formatRFC3339 from '.'
+import toInteger from '../_lib/toInteger/index'
+import addLeadingZeros from '../_lib/addLeadingZeros/index'
+
+// This makes sure we create the consistent offsets across timezones, no matter where these tests are ran.
+function generateOffset(date) {
+ let offset = ''
+ const tzOffset = date.getTimezoneOffset()
+
+ if (tzOffset !== 0) {
+ const absoluteOffset = Math.abs(tzOffset)
+ const hourOffset = addLeadingZeros(toInteger(absoluteOffset / 60), 2)
+ const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2)
+ // If less than 0, the sign is +, because it is ahead of time.
+ const sign = tzOffset < 0 ? '+' : '-'
+
+ offset = `${sign}${hourOffset}:${minuteOffset}`
+ } else {
+ offset = 'Z'
+ }
+
+ return offset
+}
+
+describe('formatRFC3339', () => {
+ it('formats RFC-3339 date string', () => {
+ var date = new Date(2019, 2 /* Mar */, 3, 19, 0, 52, 123)
+ assert(formatRFC3339(date) === `2019-03-03T19:00:52${generateOffset(date)}`)
+ })
+
+ it('accepts a timestamp', function() {
+ var date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ var time = date.getTime()
+ assert(formatRFC3339(time) === `2019-10-04T12:30:13${generateOffset(date)}`)
+ })
+
+ it('allows to specify digits of second fractions', function() {
+ var date = new Date(2019, 11 /* Dec */, 11, 1, 0, 0, 789)
+ assert(
+ formatRFC3339(date, { fractionDigits: 3 }) ===
+ `2019-12-11T01:00:00.789${generateOffset(date)}`
+ )
+ })
+
+ it('works when ms < 100', function() {
+ var date = new Date(2019, 11 /* Dec */, 11, 1, 0, 0, 12)
+ assert(
+ formatRFC3339(date, { fractionDigits: 2 }) ===
+ `2019-12-11T01:00:00.01${generateOffset(date)}`
+ )
+ })
+
+ it('implicitly converts options', function() {
+ var date = new Date(2019, 2 /* Mar */, 3, 19, 0, 52, 123)
+ // $ExpectedMistake
+ var result = formatRFC3339(date, {
+ fractionDigits: '2'
+ })
+ assert.equal(result, `2019-03-03T19:00:52.12${generateOffset(date)}`)
+ })
+
+ it('throws `RangeError` if `options.fractionDigits` is not convertable to 0, 1, 2, 3 or undefined', function() {
+ // $ExpectedMistake
+ var block = formatRFC3339.bind(null, new Date(2019, 2 /* Mar */, 3), {
+ fractionDigits: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws RangeError if the time value is invalid', () => {
+ assert.throws(formatRFC3339.bind(null, new Date(NaN)), RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(formatRFC3339.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/formatRFC7231/index.d.ts b/date-fns/src/formatRFC7231/index.d.ts
new file mode 100644
index 0000000..2caa714
--- /dev/null
+++ b/date-fns/src/formatRFC7231/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatRFC7231 } from 'date-fns'
+export default formatRFC7231
diff --git a/date-fns/src/formatRFC7231/index.js b/date-fns/src/formatRFC7231/index.js
new file mode 100644
index 0000000..3554e35
--- /dev/null
+++ b/date-fns/src/formatRFC7231/index.js
@@ -0,0 +1,64 @@
+import toDate from '../toDate/index'
+import isValid from '../isValid/index'
+import addLeadingZeros from '../_lib/addLeadingZeros/index'
+
+const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
+const months = [
+ 'Jan',
+ 'Feb',
+ 'Mar',
+ 'Apr',
+ 'May',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Oct',
+ 'Nov',
+ 'Dec'
+]
+
+/**
+ * @name formatRFC7231
+ * @category Common Helpers
+ * @summary Format the date according to the RFC 7231 standard (https://tools.ietf.org/html/rfc7231#section-7.1.1.1).
+ *
+ * @description
+ * Return the formatted date string in RFC 7231 format.
+ * The result will always be in UTC timezone.
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {String} the formatted date string
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `date` must not be Invalid Date
+ *
+ * @example
+ * // Represent 18 September 2019 in RFC 7231 format:
+ * const result = formatRFC7231(new Date(2019, 8, 18, 19, 0, 52))
+ * //=> 'Wed, 18 Sep 2019 19:00:52 GMT'
+ */
+export default function formatRFC7231(dirtyDate) {
+ if (arguments.length < 1) {
+ throw new TypeError(
+ `1 arguments required, but only ${arguments.length} present`
+ )
+ }
+
+ const originalDate = toDate(dirtyDate)
+
+ if (!isValid(originalDate)) {
+ throw new RangeError('Invalid time value')
+ }
+
+ const dayName = days[originalDate.getUTCDay()]
+ const dayOfMonth = addLeadingZeros(originalDate.getUTCDate(), 2)
+ const monthName = months[originalDate.getUTCMonth()]
+ const year = originalDate.getUTCFullYear()
+
+ const hour = addLeadingZeros(originalDate.getUTCHours(), 2)
+ const minute = addLeadingZeros(originalDate.getUTCMinutes(), 2)
+ const second = addLeadingZeros(originalDate.getUTCSeconds(), 2)
+
+ // Result variables.
+ return `${dayName}, ${dayOfMonth} ${monthName} ${year} ${hour}:${minute}:${second} GMT`
+}
diff --git a/date-fns/src/formatRFC7231/index.js.flow b/date-fns/src/formatRFC7231/index.js.flow
new file mode 100644
index 0000000..8462b25
--- /dev/null
+++ b/date-fns/src/formatRFC7231/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => string
diff --git a/date-fns/src/formatRFC7231/test.js b/date-fns/src/formatRFC7231/test.js
new file mode 100644
index 0000000..018bbc5
--- /dev/null
+++ b/date-fns/src/formatRFC7231/test.js
@@ -0,0 +1,25 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import formatRFC7231 from '.'
+
+describe('formatRFC7231', () => {
+ it('formats RFC-7231 date string', () => {
+ const date = new Date(Date.UTC(2019, 2, 3, 19, 0, 52))
+ assert(formatRFC7231(date) === 'Sun, 03 Mar 2019 19:00:52 GMT')
+ })
+
+ it('accepts a timestamp', () => {
+ const date = Date.UTC(2019, 9, 4, 12, 30, 13)
+ assert(formatRFC7231(date) === 'Fri, 04 Oct 2019 12:30:13 GMT')
+ })
+
+ it('throws RangeError if the time value is invalid', () => {
+ assert.throws(formatRFC7231.bind(null, new Date(NaN)), RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(formatRFC7231.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/formatRelative/benchmark.js b/date-fns/src/formatRelative/benchmark.js
new file mode 100644
index 0000000..be6f7b0
--- /dev/null
+++ b/date-fns/src/formatRelative/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import formatRelative from '.'
+import moment from 'moment'
+
+suite('formatRelative', function () {
+ benchmark('date-fns', function () {
+ return formatRelative(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.calendar(this.momentB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/formatRelative/index.d.ts b/date-fns/src/formatRelative/index.d.ts
new file mode 100644
index 0000000..1c5c739
--- /dev/null
+++ b/date-fns/src/formatRelative/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatRelative } from 'date-fns'
+export default formatRelative
diff --git a/date-fns/src/formatRelative/index.js.flow b/date-fns/src/formatRelative/index.js.flow
new file mode 100644
index 0000000..00280b2
--- /dev/null
+++ b/date-fns/src/formatRelative/index.js.flow
@@ -0,0 +1,59 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => string
diff --git a/date-fns/src/formatRelative/index.ts b/date-fns/src/formatRelative/index.ts
new file mode 100644
index 0000000..254c945
--- /dev/null
+++ b/date-fns/src/formatRelative/index.ts
@@ -0,0 +1,98 @@
+import differenceInCalendarDays from '../differenceInCalendarDays/index'
+import format from '../format/index'
+import defaultLocale from '../locale/en-US/index'
+import subMilliseconds from '../subMilliseconds/index'
+import toDate from '../toDate/index'
+import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { LocaleOptions, WeekStartOptions } from '../types'
+
+/**
+ * @name formatRelative
+ * @category Common Helpers
+ * @summary Represent the date in words relative to the given base date.
+ *
+ * @description
+ * Represent the date in words relative to the given base date.
+ *
+ * | Distance to the base date | Result |
+ * |---------------------------|---------------------------|
+ * | Previous 6 days | last Sunday at 04:30 AM |
+ * | Last day | yesterday at 04:30 AM |
+ * | Same day | today at 04:30 AM |
+ * | Next day | tomorrow at 04:30 AM |
+ * | Next 6 days | Sunday at 04:30 AM |
+ * | Other | 12/31/2017 |
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to format
+ * @param {Date|Number} baseDate - the date to compare with
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {String} the date in words
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `date` must not be Invalid Date
+ * @throws {RangeError} `baseDate` must not be Invalid Date
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ * @throws {RangeError} `options.locale` must contain `localize` property
+ * @throws {RangeError} `options.locale` must contain `formatLong` property
+ * @throws {RangeError} `options.locale` must contain `formatRelative` property
+ */
+export default function formatRelative(dirtyDate: Date | number, dirtyBaseDate: Date | number, dirtyOptions?: LocaleOptions & WeekStartOptions): string {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const baseDate = toDate(dirtyBaseDate)
+
+ const {
+ locale = defaultLocale,
+ weekStartsOn = 0,
+ } = dirtyOptions || {}
+
+ if (!locale.localize) {
+ throw new RangeError('locale must contain localize property')
+ }
+
+ if (!locale.formatLong) {
+ throw new RangeError('locale must contain formatLong property')
+ }
+
+ if (!locale.formatRelative) {
+ throw new RangeError('locale must contain formatRelative property')
+ }
+
+ const diff = differenceInCalendarDays(date, baseDate)
+
+ if (isNaN(diff)) {
+ throw new RangeError('Invalid time value')
+ }
+
+ let token
+ if (diff < -6) {
+ token = 'other'
+ } else if (diff < -1) {
+ token = 'lastWeek'
+ } else if (diff < 0) {
+ token = 'yesterday'
+ } else if (diff < 1) {
+ token = 'today'
+ } else if (diff < 2) {
+ token = 'tomorrow'
+ } else if (diff < 7) {
+ token = 'nextWeek'
+ } else {
+ token = 'other'
+ }
+
+ const utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))
+ const utcBaseDate = subMilliseconds(
+ baseDate,
+ getTimezoneOffsetInMilliseconds(baseDate)
+ )
+ const formatStr = locale.formatRelative(token, utcDate, utcBaseDate, { locale, weekStartsOn })
+ return format(date, formatStr, { locale, weekStartsOn })
+}
diff --git a/date-fns/src/formatRelative/test.ts b/date-fns/src/formatRelative/test.ts
new file mode 100644
index 0000000..608b67d
--- /dev/null
+++ b/date-fns/src/formatRelative/test.ts
@@ -0,0 +1,168 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import formatRelative from '.'
+
+describe('formatRelative', function () {
+ const baseDate = new Date(1986, 3 /* Apr */, 4, 10, 32, 0, 900)
+
+ it('accepts a timestamp', function () {
+ const date = new Date(2014, 3 /* Apr */, 4)
+ assert(formatRelative(date.getTime(), baseDate.getTime()) === '04/04/2014')
+ })
+
+ it('before the last week', function () {
+ const result = formatRelative(
+ new Date(1986, 2 /* Mar */, 28, 16, 50),
+ baseDate
+ )
+ assert(result === '03/28/1986')
+ })
+
+ it('last week', function () {
+ const result = formatRelative(new Date(1986, 3 /* Apr */, 1), baseDate)
+ assert(result === 'last Tuesday at 12:00 AM')
+ })
+
+ it('yesterday', function () {
+ const result = formatRelative(
+ new Date(1986, 3 /* Apr */, 3, 22, 22),
+ baseDate
+ )
+ assert(result === 'yesterday at 10:22 PM')
+ })
+
+ it('today', function () {
+ const result = formatRelative(
+ new Date(1986, 3 /* Apr */, 4, 16, 50),
+ baseDate
+ )
+ assert(result === 'today at 4:50 PM')
+ })
+
+ it('tomorrow', function () {
+ const result = formatRelative(new Date(1986, 3 /* Apr */, 5, 7, 30), baseDate)
+ assert(result === 'tomorrow at 7:30 AM')
+ })
+
+ it('next week', function () {
+ const result = formatRelative(new Date(1986, 3 /* Apr */, 6, 12, 0), baseDate)
+ assert(result === 'Sunday at 12:00 PM')
+ })
+
+ it('after the next week', function () {
+ const result = formatRelative(
+ new Date(1986, 3 /* Apr */, 11, 16, 50),
+ baseDate
+ )
+ assert(result === '04/11/1986')
+ })
+
+ describe('edge cases', function () {
+ it("throws RangeError if the date isn't valid", function () {
+ assert.throws(
+ formatRelative.bind(null, new Date(NaN), baseDate),
+ RangeError
+ )
+ })
+
+ it("throws RangeError if the base date isn't valid", function () {
+ assert.throws(
+ formatRelative.bind(
+ null,
+ new Date(2017, 0 /* Jan */, 1),
+ new Date(NaN)
+ ),
+ RangeError
+ )
+ })
+
+ it("throws RangeError if both dates aren't valid", function () {
+ assert.throws(
+ formatRelative.bind(null, new Date(NaN), new Date(NaN)),
+ RangeError
+ )
+ })
+
+ it('handles dates before 100 AD', function () {
+ const date = new Date(0)
+ date.setFullYear(7, 11 /* Dec */, 31)
+ date.setHours(0, 0, 0, 0)
+ assert(formatRelative(date, baseDate) === '12/31/0007')
+ })
+ })
+
+ describe('custom locale', function () {
+ it('allows to pass a custom locale', function () {
+ const customLocale = {
+ localize: {
+ month: function () {
+ return 'works'
+ }
+ },
+ formatLong: {
+ date: function () {
+ return "'It' MMMM"
+ }
+ },
+ formatRelative: function () {
+ return "P 'perfectly!'"
+ }
+ }
+ const result = formatRelative(
+ new Date(1986, 2 /* Mar */, 28, 16, 50),
+ baseDate,
+ // @ts-expect-error
+ { locale: customLocale }
+ )
+ assert(result === 'It works perfectly!')
+ })
+
+ it("throws `RangeError` if `options.locale` doesn't have `localize` property", function () {
+ const customLocale = {
+ formatLong: {},
+ formatRelative: function () {
+ return ''
+ }
+ }
+ // @ts-expect-error
+ const block = formatRelative.bind(null, new Date(2017, 0, 1), baseDate, {
+ locale: customLocale
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it("throws `RangeError` if `options.locale` doesn't have `formatLong` property", function () {
+ const customLocale = {
+ localize: {},
+ formatRelative: function () {
+ return ''
+ }
+ }
+ // @ts-expect-error
+ const block = formatRelative.bind(null, new Date(2017, 0, 1), baseDate, {
+ locale: customLocale
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it("throws `RangeError` if `options.locale` doesn't have `formatRelative` property", function () {
+ const customLocale = {
+ localize: {},
+ formatLong: {}
+ }
+ // @ts-expect-error
+ const block = formatRelative.bind(null, new Date(2017, 0, 1), baseDate, {
+ locale: customLocale
+ })
+ assert.throws(block, RangeError)
+ })
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ // @ts-expect-error
+ assert.throws(formatRelative.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(formatRelative.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/fp/_lib/convertToFP/index.js b/date-fns/src/fp/_lib/convertToFP/index.js
new file mode 100644
index 0000000..efe0af5
--- /dev/null
+++ b/date-fns/src/fp/_lib/convertToFP/index.js
@@ -0,0 +1,12 @@
+export default function convertToFP (fn, arity, a) {
+ a = a || []
+
+ if (a.length >= arity) {
+ return fn.apply(null, a.slice(0, arity).reverse())
+ }
+
+ return function () {
+ var args = Array.prototype.slice.call(arguments)
+ return convertToFP(fn, arity, a.concat(args))
+ }
+}
diff --git a/date-fns/src/fp/_lib/convertToFP/test.js b/date-fns/src/fp/_lib/convertToFP/test.js
new file mode 100644
index 0000000..e8224d7
--- /dev/null
+++ b/date-fns/src/fp/_lib/convertToFP/test.js
@@ -0,0 +1,69 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import convertToFP from '.'
+
+describe('convertToFP', function () {
+ function fn(a, b, c) {
+ return 'a b c'.replace('a', a).replace('b', b).replace('c', c)
+ }
+
+ describe('arity of converted function === arity of initial function', function () {
+ it('allows arguments to be curried (and reverses their order)', function () {
+ var fpFn = convertToFP(fn, 3)
+ assert(fpFn(3)(2)(1) === '1 2 3')
+ })
+
+ it('allows to group arguments', function () {
+ var fpFn = convertToFP(fn, 3)
+ assert(fpFn(3, 2)(1) === '1 2 3')
+ assert(fpFn(3)(2, 1) === '1 2 3')
+ })
+
+ it('allows the function to be called with all arguments in the reversed order', function () {
+ var fpFn = convertToFP(fn, 3)
+ assert(fpFn(3, 2, 1) === '1 2 3')
+ })
+
+ it('ignores calls without curried arguments', function () {
+ var fpFn = convertToFP(fn, 3)
+ assert(fpFn()()(3, 2)()()(1) === '1 2 3')
+ })
+
+ it('ignores extra curried arguments in the last group', function () {
+ var fpFn = convertToFP(fn, 3)
+ assert(fpFn(3, 2, 1, 0, -1, -2) === '1 2 3')
+ assert(fpFn(3)(2)(1, 0, -1, -2) === '1 2 3')
+ })
+ })
+
+ describe('arity of converted function < arity of initial function', function () {
+ it('calls the initial function with a short list of arguments', function () {
+ var fpFn = convertToFP(fn, 2)
+ assert(fpFn(2)(1) === '1 2 undefined')
+ assert(fpFn(2, 1) === '1 2 undefined')
+ })
+
+ it('ignores extra curried arguments in the last group', function () {
+ var fpFn = convertToFP(fn, 2)
+ assert(fpFn(3)(2, 1) === '2 3 undefined')
+ assert(fpFn(3, 2, 1) === '2 3 undefined')
+ })
+ })
+
+ describe('arity of converted function > arity of initial function', function () {
+ it('works, but ignores the extra arguments', function () {
+ var fpFn = convertToFP(fn, 4)
+ assert(fpFn(4)(3)(2)(1) === '1 2 3')
+ assert(fpFn(4, 3, 2, 1) === '1 2 3')
+ })
+ })
+
+ describe('arity of converted function === 0', function () {
+ it('returns the constant instead of function', function () {
+ var result = convertToFP(fn, 0)
+ assert(result === 'undefined undefined undefined')
+ })
+ })
+})
diff --git a/date-fns/src/fp/add/index.d.ts b/date-fns/src/fp/add/index.d.ts
new file mode 100644
index 0000000..f05edaa
--- /dev/null
+++ b/date-fns/src/fp/add/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { add } from 'date-fns/fp'
+export default add
diff --git a/date-fns/src/fp/add/index.js b/date-fns/src/fp/add/index.js
new file mode 100644
index 0000000..530bac6
--- /dev/null
+++ b/date-fns/src/fp/add/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../add/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var add = convertToFP(fn, 2)
+
+export default add
diff --git a/date-fns/src/fp/add/index.js.flow b/date-fns/src/fp/add/index.js.flow
new file mode 100644
index 0000000..3d4363b
--- /dev/null
+++ b/date-fns/src/fp/add/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Duration, Date | number, Date>
diff --git a/date-fns/src/fp/addBusinessDays/index.d.ts b/date-fns/src/fp/addBusinessDays/index.d.ts
new file mode 100644
index 0000000..dd3b869
--- /dev/null
+++ b/date-fns/src/fp/addBusinessDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addBusinessDays } from 'date-fns/fp'
+export default addBusinessDays
diff --git a/date-fns/src/fp/addBusinessDays/index.js b/date-fns/src/fp/addBusinessDays/index.js
new file mode 100644
index 0000000..d76f1c1
--- /dev/null
+++ b/date-fns/src/fp/addBusinessDays/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addBusinessDays/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addBusinessDays = convertToFP(fn, 2)
+
+export default addBusinessDays
diff --git a/date-fns/src/fp/addBusinessDays/index.js.flow b/date-fns/src/fp/addBusinessDays/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addBusinessDays/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addDays/index.d.ts b/date-fns/src/fp/addDays/index.d.ts
new file mode 100644
index 0000000..7ba1ace
--- /dev/null
+++ b/date-fns/src/fp/addDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addDays } from 'date-fns/fp'
+export default addDays
diff --git a/date-fns/src/fp/addDays/index.js b/date-fns/src/fp/addDays/index.js
new file mode 100644
index 0000000..6827194
--- /dev/null
+++ b/date-fns/src/fp/addDays/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addDays/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addDays = convertToFP(fn, 2)
+
+export default addDays
diff --git a/date-fns/src/fp/addDays/index.js.flow b/date-fns/src/fp/addDays/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addDays/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addHours/index.d.ts b/date-fns/src/fp/addHours/index.d.ts
new file mode 100644
index 0000000..9b66a88
--- /dev/null
+++ b/date-fns/src/fp/addHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addHours } from 'date-fns/fp'
+export default addHours
diff --git a/date-fns/src/fp/addHours/index.js b/date-fns/src/fp/addHours/index.js
new file mode 100644
index 0000000..04a3f27
--- /dev/null
+++ b/date-fns/src/fp/addHours/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addHours/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addHours = convertToFP(fn, 2)
+
+export default addHours
diff --git a/date-fns/src/fp/addHours/index.js.flow b/date-fns/src/fp/addHours/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addHours/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addISOWeekYears/index.d.ts b/date-fns/src/fp/addISOWeekYears/index.d.ts
new file mode 100644
index 0000000..01dab9b
--- /dev/null
+++ b/date-fns/src/fp/addISOWeekYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addISOWeekYears } from 'date-fns/fp'
+export default addISOWeekYears
diff --git a/date-fns/src/fp/addISOWeekYears/index.js b/date-fns/src/fp/addISOWeekYears/index.js
new file mode 100644
index 0000000..858f7fa
--- /dev/null
+++ b/date-fns/src/fp/addISOWeekYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addISOWeekYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addISOWeekYears = convertToFP(fn, 2)
+
+export default addISOWeekYears
diff --git a/date-fns/src/fp/addISOWeekYears/index.js.flow b/date-fns/src/fp/addISOWeekYears/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addISOWeekYears/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addMilliseconds/index.d.ts b/date-fns/src/fp/addMilliseconds/index.d.ts
new file mode 100644
index 0000000..7a93c90
--- /dev/null
+++ b/date-fns/src/fp/addMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addMilliseconds } from 'date-fns/fp'
+export default addMilliseconds
diff --git a/date-fns/src/fp/addMilliseconds/index.js b/date-fns/src/fp/addMilliseconds/index.js
new file mode 100644
index 0000000..c4ae505
--- /dev/null
+++ b/date-fns/src/fp/addMilliseconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addMilliseconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addMilliseconds = convertToFP(fn, 2)
+
+export default addMilliseconds
diff --git a/date-fns/src/fp/addMilliseconds/index.js.flow b/date-fns/src/fp/addMilliseconds/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addMilliseconds/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addMinutes/index.d.ts b/date-fns/src/fp/addMinutes/index.d.ts
new file mode 100644
index 0000000..fc7b670
--- /dev/null
+++ b/date-fns/src/fp/addMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addMinutes } from 'date-fns/fp'
+export default addMinutes
diff --git a/date-fns/src/fp/addMinutes/index.js b/date-fns/src/fp/addMinutes/index.js
new file mode 100644
index 0000000..1f0b5fe
--- /dev/null
+++ b/date-fns/src/fp/addMinutes/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addMinutes = convertToFP(fn, 2)
+
+export default addMinutes
diff --git a/date-fns/src/fp/addMinutes/index.js.flow b/date-fns/src/fp/addMinutes/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addMinutes/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addMonths/index.d.ts b/date-fns/src/fp/addMonths/index.d.ts
new file mode 100644
index 0000000..01f0e2d
--- /dev/null
+++ b/date-fns/src/fp/addMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addMonths } from 'date-fns/fp'
+export default addMonths
diff --git a/date-fns/src/fp/addMonths/index.js b/date-fns/src/fp/addMonths/index.js
new file mode 100644
index 0000000..eeb6a87
--- /dev/null
+++ b/date-fns/src/fp/addMonths/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addMonths/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addMonths = convertToFP(fn, 2)
+
+export default addMonths
diff --git a/date-fns/src/fp/addMonths/index.js.flow b/date-fns/src/fp/addMonths/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addMonths/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addQuarters/index.d.ts b/date-fns/src/fp/addQuarters/index.d.ts
new file mode 100644
index 0000000..f766d56
--- /dev/null
+++ b/date-fns/src/fp/addQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addQuarters } from 'date-fns/fp'
+export default addQuarters
diff --git a/date-fns/src/fp/addQuarters/index.js b/date-fns/src/fp/addQuarters/index.js
new file mode 100644
index 0000000..6e29d3e
--- /dev/null
+++ b/date-fns/src/fp/addQuarters/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addQuarters/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addQuarters = convertToFP(fn, 2)
+
+export default addQuarters
diff --git a/date-fns/src/fp/addQuarters/index.js.flow b/date-fns/src/fp/addQuarters/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addQuarters/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addSeconds/index.d.ts b/date-fns/src/fp/addSeconds/index.d.ts
new file mode 100644
index 0000000..5c7c41c
--- /dev/null
+++ b/date-fns/src/fp/addSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addSeconds } from 'date-fns/fp'
+export default addSeconds
diff --git a/date-fns/src/fp/addSeconds/index.js b/date-fns/src/fp/addSeconds/index.js
new file mode 100644
index 0000000..84d68f3
--- /dev/null
+++ b/date-fns/src/fp/addSeconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addSeconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addSeconds = convertToFP(fn, 2)
+
+export default addSeconds
diff --git a/date-fns/src/fp/addSeconds/index.js.flow b/date-fns/src/fp/addSeconds/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addSeconds/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addWeeks/index.d.ts b/date-fns/src/fp/addWeeks/index.d.ts
new file mode 100644
index 0000000..2703fef
--- /dev/null
+++ b/date-fns/src/fp/addWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addWeeks } from 'date-fns/fp'
+export default addWeeks
diff --git a/date-fns/src/fp/addWeeks/index.js b/date-fns/src/fp/addWeeks/index.js
new file mode 100644
index 0000000..f20ede2
--- /dev/null
+++ b/date-fns/src/fp/addWeeks/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addWeeks/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addWeeks = convertToFP(fn, 2)
+
+export default addWeeks
diff --git a/date-fns/src/fp/addWeeks/index.js.flow b/date-fns/src/fp/addWeeks/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addWeeks/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/addYears/index.d.ts b/date-fns/src/fp/addYears/index.d.ts
new file mode 100644
index 0000000..ff907d4
--- /dev/null
+++ b/date-fns/src/fp/addYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { addYears } from 'date-fns/fp'
+export default addYears
diff --git a/date-fns/src/fp/addYears/index.js b/date-fns/src/fp/addYears/index.js
new file mode 100644
index 0000000..f2f10c6
--- /dev/null
+++ b/date-fns/src/fp/addYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../addYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var addYears = convertToFP(fn, 2)
+
+export default addYears
diff --git a/date-fns/src/fp/addYears/index.js.flow b/date-fns/src/fp/addYears/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/addYears/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/areIntervalsOverlapping/index.d.ts b/date-fns/src/fp/areIntervalsOverlapping/index.d.ts
new file mode 100644
index 0000000..870f26b
--- /dev/null
+++ b/date-fns/src/fp/areIntervalsOverlapping/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { areIntervalsOverlapping } from 'date-fns/fp'
+export default areIntervalsOverlapping
diff --git a/date-fns/src/fp/areIntervalsOverlapping/index.js b/date-fns/src/fp/areIntervalsOverlapping/index.js
new file mode 100644
index 0000000..97c9ae4
--- /dev/null
+++ b/date-fns/src/fp/areIntervalsOverlapping/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../areIntervalsOverlapping/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var areIntervalsOverlapping = convertToFP(fn, 2)
+
+export default areIntervalsOverlapping
diff --git a/date-fns/src/fp/areIntervalsOverlapping/index.js.flow b/date-fns/src/fp/areIntervalsOverlapping/index.js.flow
new file mode 100644
index 0000000..cd39633
--- /dev/null
+++ b/date-fns/src/fp/areIntervalsOverlapping/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Interval, Interval, boolean>
diff --git a/date-fns/src/fp/areIntervalsOverlappingWithOptions/index.d.ts b/date-fns/src/fp/areIntervalsOverlappingWithOptions/index.d.ts
new file mode 100644
index 0000000..010890a
--- /dev/null
+++ b/date-fns/src/fp/areIntervalsOverlappingWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { areIntervalsOverlappingWithOptions } from 'date-fns/fp'
+export default areIntervalsOverlappingWithOptions
diff --git a/date-fns/src/fp/areIntervalsOverlappingWithOptions/index.js b/date-fns/src/fp/areIntervalsOverlappingWithOptions/index.js
new file mode 100644
index 0000000..3269510
--- /dev/null
+++ b/date-fns/src/fp/areIntervalsOverlappingWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../areIntervalsOverlapping/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var areIntervalsOverlappingWithOptions = convertToFP(fn, 3)
+
+export default areIntervalsOverlappingWithOptions
diff --git a/date-fns/src/fp/areIntervalsOverlappingWithOptions/index.js.flow b/date-fns/src/fp/areIntervalsOverlappingWithOptions/index.js.flow
new file mode 100644
index 0000000..67e7396
--- /dev/null
+++ b/date-fns/src/fp/areIntervalsOverlappingWithOptions/index.js.flow
@@ -0,0 +1,74 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ inclusive?: boolean,
+ },
+ Interval,
+ Interval,
+ boolean
+>
diff --git a/date-fns/src/fp/closestIndexTo/index.d.ts b/date-fns/src/fp/closestIndexTo/index.d.ts
new file mode 100644
index 0000000..562180d
--- /dev/null
+++ b/date-fns/src/fp/closestIndexTo/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { closestIndexTo } from 'date-fns/fp'
+export default closestIndexTo
diff --git a/date-fns/src/fp/closestIndexTo/index.js b/date-fns/src/fp/closestIndexTo/index.js
new file mode 100644
index 0000000..e448ad6
--- /dev/null
+++ b/date-fns/src/fp/closestIndexTo/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../closestIndexTo/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var closestIndexTo = convertToFP(fn, 2)
+
+export default closestIndexTo
diff --git a/date-fns/src/fp/closestIndexTo/index.js.flow b/date-fns/src/fp/closestIndexTo/index.js.flow
new file mode 100644
index 0000000..986c64e
--- /dev/null
+++ b/date-fns/src/fp/closestIndexTo/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<(Date | number)[], Date | number, number>
diff --git a/date-fns/src/fp/closestTo/index.d.ts b/date-fns/src/fp/closestTo/index.d.ts
new file mode 100644
index 0000000..44d10c3
--- /dev/null
+++ b/date-fns/src/fp/closestTo/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { closestTo } from 'date-fns/fp'
+export default closestTo
diff --git a/date-fns/src/fp/closestTo/index.js b/date-fns/src/fp/closestTo/index.js
new file mode 100644
index 0000000..fb0b8fc
--- /dev/null
+++ b/date-fns/src/fp/closestTo/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../closestTo/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var closestTo = convertToFP(fn, 2)
+
+export default closestTo
diff --git a/date-fns/src/fp/closestTo/index.js.flow b/date-fns/src/fp/closestTo/index.js.flow
new file mode 100644
index 0000000..89e8756
--- /dev/null
+++ b/date-fns/src/fp/closestTo/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<(Date | number)[], Date | number, Date>
diff --git a/date-fns/src/fp/compareAsc/index.d.ts b/date-fns/src/fp/compareAsc/index.d.ts
new file mode 100644
index 0000000..77d5c61
--- /dev/null
+++ b/date-fns/src/fp/compareAsc/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { compareAsc } from 'date-fns/fp'
+export default compareAsc
diff --git a/date-fns/src/fp/compareAsc/index.js b/date-fns/src/fp/compareAsc/index.js
new file mode 100644
index 0000000..74e13ff
--- /dev/null
+++ b/date-fns/src/fp/compareAsc/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../compareAsc/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var compareAsc = convertToFP(fn, 2)
+
+export default compareAsc
diff --git a/date-fns/src/fp/compareAsc/index.js.flow b/date-fns/src/fp/compareAsc/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/compareAsc/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/compareDesc/index.d.ts b/date-fns/src/fp/compareDesc/index.d.ts
new file mode 100644
index 0000000..df01367
--- /dev/null
+++ b/date-fns/src/fp/compareDesc/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { compareDesc } from 'date-fns/fp'
+export default compareDesc
diff --git a/date-fns/src/fp/compareDesc/index.js b/date-fns/src/fp/compareDesc/index.js
new file mode 100644
index 0000000..c455234
--- /dev/null
+++ b/date-fns/src/fp/compareDesc/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../compareDesc/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var compareDesc = convertToFP(fn, 2)
+
+export default compareDesc
diff --git a/date-fns/src/fp/compareDesc/index.js.flow b/date-fns/src/fp/compareDesc/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/compareDesc/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/daysToWeeks/index.d.ts b/date-fns/src/fp/daysToWeeks/index.d.ts
new file mode 100644
index 0000000..798a9e1
--- /dev/null
+++ b/date-fns/src/fp/daysToWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { daysToWeeks } from 'date-fns/fp'
+export default daysToWeeks
diff --git a/date-fns/src/fp/daysToWeeks/index.js b/date-fns/src/fp/daysToWeeks/index.js
new file mode 100644
index 0000000..058ab00
--- /dev/null
+++ b/date-fns/src/fp/daysToWeeks/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../daysToWeeks/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var daysToWeeks = convertToFP(fn, 1)
+
+export default daysToWeeks
diff --git a/date-fns/src/fp/daysToWeeks/index.js.flow b/date-fns/src/fp/daysToWeeks/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/daysToWeeks/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/differenceInBusinessDays/index.d.ts b/date-fns/src/fp/differenceInBusinessDays/index.d.ts
new file mode 100644
index 0000000..4ff9890
--- /dev/null
+++ b/date-fns/src/fp/differenceInBusinessDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInBusinessDays } from 'date-fns/fp'
+export default differenceInBusinessDays
diff --git a/date-fns/src/fp/differenceInBusinessDays/index.js b/date-fns/src/fp/differenceInBusinessDays/index.js
new file mode 100644
index 0000000..21c5bc7
--- /dev/null
+++ b/date-fns/src/fp/differenceInBusinessDays/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInBusinessDays/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInBusinessDays = convertToFP(fn, 2)
+
+export default differenceInBusinessDays
diff --git a/date-fns/src/fp/differenceInBusinessDays/index.js.flow b/date-fns/src/fp/differenceInBusinessDays/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInBusinessDays/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInCalendarDays/index.d.ts b/date-fns/src/fp/differenceInCalendarDays/index.d.ts
new file mode 100644
index 0000000..b6ae5f5
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarDays } from 'date-fns/fp'
+export default differenceInCalendarDays
diff --git a/date-fns/src/fp/differenceInCalendarDays/index.js b/date-fns/src/fp/differenceInCalendarDays/index.js
new file mode 100644
index 0000000..d99e50d
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarDays/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInCalendarDays/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInCalendarDays = convertToFP(fn, 2)
+
+export default differenceInCalendarDays
diff --git a/date-fns/src/fp/differenceInCalendarDays/index.js.flow b/date-fns/src/fp/differenceInCalendarDays/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarDays/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInCalendarISOWeekYears/index.d.ts b/date-fns/src/fp/differenceInCalendarISOWeekYears/index.d.ts
new file mode 100644
index 0000000..4e21998
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarISOWeekYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarISOWeekYears } from 'date-fns/fp'
+export default differenceInCalendarISOWeekYears
diff --git a/date-fns/src/fp/differenceInCalendarISOWeekYears/index.js b/date-fns/src/fp/differenceInCalendarISOWeekYears/index.js
new file mode 100644
index 0000000..42bb5e4
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarISOWeekYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInCalendarISOWeekYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInCalendarISOWeekYears = convertToFP(fn, 2)
+
+export default differenceInCalendarISOWeekYears
diff --git a/date-fns/src/fp/differenceInCalendarISOWeekYears/index.js.flow b/date-fns/src/fp/differenceInCalendarISOWeekYears/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarISOWeekYears/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInCalendarISOWeeks/index.d.ts b/date-fns/src/fp/differenceInCalendarISOWeeks/index.d.ts
new file mode 100644
index 0000000..7751c6f
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarISOWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarISOWeeks } from 'date-fns/fp'
+export default differenceInCalendarISOWeeks
diff --git a/date-fns/src/fp/differenceInCalendarISOWeeks/index.js b/date-fns/src/fp/differenceInCalendarISOWeeks/index.js
new file mode 100644
index 0000000..d8551a1
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarISOWeeks/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInCalendarISOWeeks/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInCalendarISOWeeks = convertToFP(fn, 2)
+
+export default differenceInCalendarISOWeeks
diff --git a/date-fns/src/fp/differenceInCalendarISOWeeks/index.js.flow b/date-fns/src/fp/differenceInCalendarISOWeeks/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarISOWeeks/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInCalendarMonths/index.d.ts b/date-fns/src/fp/differenceInCalendarMonths/index.d.ts
new file mode 100644
index 0000000..080ac92
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarMonths } from 'date-fns/fp'
+export default differenceInCalendarMonths
diff --git a/date-fns/src/fp/differenceInCalendarMonths/index.js b/date-fns/src/fp/differenceInCalendarMonths/index.js
new file mode 100644
index 0000000..12edc3c
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarMonths/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInCalendarMonths/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInCalendarMonths = convertToFP(fn, 2)
+
+export default differenceInCalendarMonths
diff --git a/date-fns/src/fp/differenceInCalendarMonths/index.js.flow b/date-fns/src/fp/differenceInCalendarMonths/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarMonths/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInCalendarQuarters/index.d.ts b/date-fns/src/fp/differenceInCalendarQuarters/index.d.ts
new file mode 100644
index 0000000..7b9208b
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarQuarters } from 'date-fns/fp'
+export default differenceInCalendarQuarters
diff --git a/date-fns/src/fp/differenceInCalendarQuarters/index.js b/date-fns/src/fp/differenceInCalendarQuarters/index.js
new file mode 100644
index 0000000..4c9417c
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarQuarters/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInCalendarQuarters/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInCalendarQuarters = convertToFP(fn, 2)
+
+export default differenceInCalendarQuarters
diff --git a/date-fns/src/fp/differenceInCalendarQuarters/index.js.flow b/date-fns/src/fp/differenceInCalendarQuarters/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarQuarters/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInCalendarWeeks/index.d.ts b/date-fns/src/fp/differenceInCalendarWeeks/index.d.ts
new file mode 100644
index 0000000..c64709a
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarWeeks } from 'date-fns/fp'
+export default differenceInCalendarWeeks
diff --git a/date-fns/src/fp/differenceInCalendarWeeks/index.js b/date-fns/src/fp/differenceInCalendarWeeks/index.js
new file mode 100644
index 0000000..61190aa
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarWeeks/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInCalendarWeeks/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInCalendarWeeks = convertToFP(fn, 2)
+
+export default differenceInCalendarWeeks
diff --git a/date-fns/src/fp/differenceInCalendarWeeks/index.js.flow b/date-fns/src/fp/differenceInCalendarWeeks/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarWeeks/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.d.ts b/date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.d.ts
new file mode 100644
index 0000000..344e205
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarWeeksWithOptions } from 'date-fns/fp'
+export default differenceInCalendarWeeksWithOptions
diff --git a/date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.js b/date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.js
new file mode 100644
index 0000000..1708945
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInCalendarWeeks/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInCalendarWeeksWithOptions = convertToFP(fn, 3)
+
+export default differenceInCalendarWeeksWithOptions
diff --git a/date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.js.flow b/date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.js.flow
new file mode 100644
index 0000000..9ee18fd
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarWeeksWithOptions/index.js.flow
@@ -0,0 +1,75 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date | number,
+ number
+>
diff --git a/date-fns/src/fp/differenceInCalendarYears/index.d.ts b/date-fns/src/fp/differenceInCalendarYears/index.d.ts
new file mode 100644
index 0000000..1390b1f
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInCalendarYears } from 'date-fns/fp'
+export default differenceInCalendarYears
diff --git a/date-fns/src/fp/differenceInCalendarYears/index.js b/date-fns/src/fp/differenceInCalendarYears/index.js
new file mode 100644
index 0000000..fad8b02
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInCalendarYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInCalendarYears = convertToFP(fn, 2)
+
+export default differenceInCalendarYears
diff --git a/date-fns/src/fp/differenceInCalendarYears/index.js.flow b/date-fns/src/fp/differenceInCalendarYears/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInCalendarYears/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInDays/index.d.ts b/date-fns/src/fp/differenceInDays/index.d.ts
new file mode 100644
index 0000000..b240c6e
--- /dev/null
+++ b/date-fns/src/fp/differenceInDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInDays } from 'date-fns/fp'
+export default differenceInDays
diff --git a/date-fns/src/fp/differenceInDays/index.js b/date-fns/src/fp/differenceInDays/index.js
new file mode 100644
index 0000000..ee7d0d9
--- /dev/null
+++ b/date-fns/src/fp/differenceInDays/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInDays/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInDays = convertToFP(fn, 2)
+
+export default differenceInDays
diff --git a/date-fns/src/fp/differenceInDays/index.js.flow b/date-fns/src/fp/differenceInDays/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInDays/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInHours/index.d.ts b/date-fns/src/fp/differenceInHours/index.d.ts
new file mode 100644
index 0000000..4cc2797
--- /dev/null
+++ b/date-fns/src/fp/differenceInHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInHours } from 'date-fns/fp'
+export default differenceInHours
diff --git a/date-fns/src/fp/differenceInHours/index.js b/date-fns/src/fp/differenceInHours/index.js
new file mode 100644
index 0000000..5686bb2
--- /dev/null
+++ b/date-fns/src/fp/differenceInHours/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInHours/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInHours = convertToFP(fn, 2)
+
+export default differenceInHours
diff --git a/date-fns/src/fp/differenceInHours/index.js.flow b/date-fns/src/fp/differenceInHours/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInHours/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInISOWeekYears/index.d.ts b/date-fns/src/fp/differenceInISOWeekYears/index.d.ts
new file mode 100644
index 0000000..634591a
--- /dev/null
+++ b/date-fns/src/fp/differenceInISOWeekYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInISOWeekYears } from 'date-fns/fp'
+export default differenceInISOWeekYears
diff --git a/date-fns/src/fp/differenceInISOWeekYears/index.js b/date-fns/src/fp/differenceInISOWeekYears/index.js
new file mode 100644
index 0000000..1a60642
--- /dev/null
+++ b/date-fns/src/fp/differenceInISOWeekYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInISOWeekYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInISOWeekYears = convertToFP(fn, 2)
+
+export default differenceInISOWeekYears
diff --git a/date-fns/src/fp/differenceInISOWeekYears/index.js.flow b/date-fns/src/fp/differenceInISOWeekYears/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInISOWeekYears/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInMilliseconds/index.d.ts b/date-fns/src/fp/differenceInMilliseconds/index.d.ts
new file mode 100644
index 0000000..23924cb
--- /dev/null
+++ b/date-fns/src/fp/differenceInMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInMilliseconds } from 'date-fns/fp'
+export default differenceInMilliseconds
diff --git a/date-fns/src/fp/differenceInMilliseconds/index.js b/date-fns/src/fp/differenceInMilliseconds/index.js
new file mode 100644
index 0000000..2d82792
--- /dev/null
+++ b/date-fns/src/fp/differenceInMilliseconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInMilliseconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInMilliseconds = convertToFP(fn, 2)
+
+export default differenceInMilliseconds
diff --git a/date-fns/src/fp/differenceInMilliseconds/index.js.flow b/date-fns/src/fp/differenceInMilliseconds/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInMilliseconds/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInMinutes/index.d.ts b/date-fns/src/fp/differenceInMinutes/index.d.ts
new file mode 100644
index 0000000..6d00d34
--- /dev/null
+++ b/date-fns/src/fp/differenceInMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInMinutes } from 'date-fns/fp'
+export default differenceInMinutes
diff --git a/date-fns/src/fp/differenceInMinutes/index.js b/date-fns/src/fp/differenceInMinutes/index.js
new file mode 100644
index 0000000..4184936
--- /dev/null
+++ b/date-fns/src/fp/differenceInMinutes/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInMinutes = convertToFP(fn, 2)
+
+export default differenceInMinutes
diff --git a/date-fns/src/fp/differenceInMinutes/index.js.flow b/date-fns/src/fp/differenceInMinutes/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInMinutes/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInMonths/index.d.ts b/date-fns/src/fp/differenceInMonths/index.d.ts
new file mode 100644
index 0000000..17bdd4e
--- /dev/null
+++ b/date-fns/src/fp/differenceInMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInMonths } from 'date-fns/fp'
+export default differenceInMonths
diff --git a/date-fns/src/fp/differenceInMonths/index.js b/date-fns/src/fp/differenceInMonths/index.js
new file mode 100644
index 0000000..ad89d12
--- /dev/null
+++ b/date-fns/src/fp/differenceInMonths/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInMonths/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInMonths = convertToFP(fn, 2)
+
+export default differenceInMonths
diff --git a/date-fns/src/fp/differenceInMonths/index.js.flow b/date-fns/src/fp/differenceInMonths/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInMonths/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInQuarters/index.d.ts b/date-fns/src/fp/differenceInQuarters/index.d.ts
new file mode 100644
index 0000000..649f21d
--- /dev/null
+++ b/date-fns/src/fp/differenceInQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInQuarters } from 'date-fns/fp'
+export default differenceInQuarters
diff --git a/date-fns/src/fp/differenceInQuarters/index.js b/date-fns/src/fp/differenceInQuarters/index.js
new file mode 100644
index 0000000..9283c20
--- /dev/null
+++ b/date-fns/src/fp/differenceInQuarters/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInQuarters/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInQuarters = convertToFP(fn, 2)
+
+export default differenceInQuarters
diff --git a/date-fns/src/fp/differenceInQuarters/index.js.flow b/date-fns/src/fp/differenceInQuarters/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInQuarters/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInSeconds/index.d.ts b/date-fns/src/fp/differenceInSeconds/index.d.ts
new file mode 100644
index 0000000..1dded51
--- /dev/null
+++ b/date-fns/src/fp/differenceInSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInSeconds } from 'date-fns/fp'
+export default differenceInSeconds
diff --git a/date-fns/src/fp/differenceInSeconds/index.js b/date-fns/src/fp/differenceInSeconds/index.js
new file mode 100644
index 0000000..408b754
--- /dev/null
+++ b/date-fns/src/fp/differenceInSeconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInSeconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInSeconds = convertToFP(fn, 2)
+
+export default differenceInSeconds
diff --git a/date-fns/src/fp/differenceInSeconds/index.js.flow b/date-fns/src/fp/differenceInSeconds/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInSeconds/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInWeeks/index.d.ts b/date-fns/src/fp/differenceInWeeks/index.d.ts
new file mode 100644
index 0000000..52d5220
--- /dev/null
+++ b/date-fns/src/fp/differenceInWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInWeeks } from 'date-fns/fp'
+export default differenceInWeeks
diff --git a/date-fns/src/fp/differenceInWeeks/index.js b/date-fns/src/fp/differenceInWeeks/index.js
new file mode 100644
index 0000000..ff0e3a4
--- /dev/null
+++ b/date-fns/src/fp/differenceInWeeks/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInWeeks/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInWeeks = convertToFP(fn, 2)
+
+export default differenceInWeeks
diff --git a/date-fns/src/fp/differenceInWeeks/index.js.flow b/date-fns/src/fp/differenceInWeeks/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInWeeks/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/differenceInYears/index.d.ts b/date-fns/src/fp/differenceInYears/index.d.ts
new file mode 100644
index 0000000..20fd164
--- /dev/null
+++ b/date-fns/src/fp/differenceInYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { differenceInYears } from 'date-fns/fp'
+export default differenceInYears
diff --git a/date-fns/src/fp/differenceInYears/index.js b/date-fns/src/fp/differenceInYears/index.js
new file mode 100644
index 0000000..cfa3274
--- /dev/null
+++ b/date-fns/src/fp/differenceInYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../differenceInYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var differenceInYears = convertToFP(fn, 2)
+
+export default differenceInYears
diff --git a/date-fns/src/fp/differenceInYears/index.js.flow b/date-fns/src/fp/differenceInYears/index.js.flow
new file mode 100644
index 0000000..78c45ae
--- /dev/null
+++ b/date-fns/src/fp/differenceInYears/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, number>
diff --git a/date-fns/src/fp/eachDayOfInterval/index.d.ts b/date-fns/src/fp/eachDayOfInterval/index.d.ts
new file mode 100644
index 0000000..e878e76
--- /dev/null
+++ b/date-fns/src/fp/eachDayOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachDayOfInterval } from 'date-fns/fp'
+export default eachDayOfInterval
diff --git a/date-fns/src/fp/eachDayOfInterval/index.js b/date-fns/src/fp/eachDayOfInterval/index.js
new file mode 100644
index 0000000..e10f89a
--- /dev/null
+++ b/date-fns/src/fp/eachDayOfInterval/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachDayOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachDayOfInterval = convertToFP(fn, 1)
+
+export default eachDayOfInterval
diff --git a/date-fns/src/fp/eachDayOfInterval/index.js.flow b/date-fns/src/fp/eachDayOfInterval/index.js.flow
new file mode 100644
index 0000000..c5f2d6a
--- /dev/null
+++ b/date-fns/src/fp/eachDayOfInterval/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Interval, Date[]>
diff --git a/date-fns/src/fp/eachDayOfIntervalWithOptions/index.d.ts b/date-fns/src/fp/eachDayOfIntervalWithOptions/index.d.ts
new file mode 100644
index 0000000..5862284
--- /dev/null
+++ b/date-fns/src/fp/eachDayOfIntervalWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachDayOfIntervalWithOptions } from 'date-fns/fp'
+export default eachDayOfIntervalWithOptions
diff --git a/date-fns/src/fp/eachDayOfIntervalWithOptions/index.js b/date-fns/src/fp/eachDayOfIntervalWithOptions/index.js
new file mode 100644
index 0000000..5f83f92
--- /dev/null
+++ b/date-fns/src/fp/eachDayOfIntervalWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachDayOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachDayOfIntervalWithOptions = convertToFP(fn, 2)
+
+export default eachDayOfIntervalWithOptions
diff --git a/date-fns/src/fp/eachDayOfIntervalWithOptions/index.js.flow b/date-fns/src/fp/eachDayOfIntervalWithOptions/index.js.flow
new file mode 100644
index 0000000..bedeb21
--- /dev/null
+++ b/date-fns/src/fp/eachDayOfIntervalWithOptions/index.js.flow
@@ -0,0 +1,64 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ step?: number,
+ },
+ Interval,
+ Date[]
+>
diff --git a/date-fns/src/fp/eachHourOfInterval/index.d.ts b/date-fns/src/fp/eachHourOfInterval/index.d.ts
new file mode 100644
index 0000000..055ab32
--- /dev/null
+++ b/date-fns/src/fp/eachHourOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachHourOfInterval } from 'date-fns/fp'
+export default eachHourOfInterval
diff --git a/date-fns/src/fp/eachHourOfInterval/index.js b/date-fns/src/fp/eachHourOfInterval/index.js
new file mode 100644
index 0000000..8025213
--- /dev/null
+++ b/date-fns/src/fp/eachHourOfInterval/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachHourOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachHourOfInterval = convertToFP(fn, 1)
+
+export default eachHourOfInterval
diff --git a/date-fns/src/fp/eachHourOfInterval/index.js.flow b/date-fns/src/fp/eachHourOfInterval/index.js.flow
new file mode 100644
index 0000000..c5f2d6a
--- /dev/null
+++ b/date-fns/src/fp/eachHourOfInterval/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Interval, Date[]>
diff --git a/date-fns/src/fp/eachHourOfIntervalWithOptions/index.d.ts b/date-fns/src/fp/eachHourOfIntervalWithOptions/index.d.ts
new file mode 100644
index 0000000..7b781f9
--- /dev/null
+++ b/date-fns/src/fp/eachHourOfIntervalWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachHourOfIntervalWithOptions } from 'date-fns/fp'
+export default eachHourOfIntervalWithOptions
diff --git a/date-fns/src/fp/eachHourOfIntervalWithOptions/index.js b/date-fns/src/fp/eachHourOfIntervalWithOptions/index.js
new file mode 100644
index 0000000..ab52bb3
--- /dev/null
+++ b/date-fns/src/fp/eachHourOfIntervalWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachHourOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachHourOfIntervalWithOptions = convertToFP(fn, 2)
+
+export default eachHourOfIntervalWithOptions
diff --git a/date-fns/src/fp/eachHourOfIntervalWithOptions/index.js.flow b/date-fns/src/fp/eachHourOfIntervalWithOptions/index.js.flow
new file mode 100644
index 0000000..bedeb21
--- /dev/null
+++ b/date-fns/src/fp/eachHourOfIntervalWithOptions/index.js.flow
@@ -0,0 +1,64 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ step?: number,
+ },
+ Interval,
+ Date[]
+>
diff --git a/date-fns/src/fp/eachMinuteOfInterval/index.d.ts b/date-fns/src/fp/eachMinuteOfInterval/index.d.ts
new file mode 100644
index 0000000..243185f
--- /dev/null
+++ b/date-fns/src/fp/eachMinuteOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachMinuteOfInterval } from 'date-fns/fp'
+export default eachMinuteOfInterval
diff --git a/date-fns/src/fp/eachMinuteOfInterval/index.js b/date-fns/src/fp/eachMinuteOfInterval/index.js
new file mode 100644
index 0000000..b56e0dd
--- /dev/null
+++ b/date-fns/src/fp/eachMinuteOfInterval/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachMinuteOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachMinuteOfInterval = convertToFP(fn, 1)
+
+export default eachMinuteOfInterval
diff --git a/date-fns/src/fp/eachMinuteOfInterval/index.js.flow b/date-fns/src/fp/eachMinuteOfInterval/index.js.flow
new file mode 100644
index 0000000..c5f2d6a
--- /dev/null
+++ b/date-fns/src/fp/eachMinuteOfInterval/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Interval, Date[]>
diff --git a/date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.d.ts b/date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.d.ts
new file mode 100644
index 0000000..716aa44
--- /dev/null
+++ b/date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachMinuteOfIntervalWithOptions } from 'date-fns/fp'
+export default eachMinuteOfIntervalWithOptions
diff --git a/date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.js b/date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.js
new file mode 100644
index 0000000..e4d6702
--- /dev/null
+++ b/date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachMinuteOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachMinuteOfIntervalWithOptions = convertToFP(fn, 2)
+
+export default eachMinuteOfIntervalWithOptions
diff --git a/date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.js.flow b/date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.js.flow
new file mode 100644
index 0000000..bedeb21
--- /dev/null
+++ b/date-fns/src/fp/eachMinuteOfIntervalWithOptions/index.js.flow
@@ -0,0 +1,64 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ step?: number,
+ },
+ Interval,
+ Date[]
+>
diff --git a/date-fns/src/fp/eachMonthOfInterval/index.d.ts b/date-fns/src/fp/eachMonthOfInterval/index.d.ts
new file mode 100644
index 0000000..1f3cae5
--- /dev/null
+++ b/date-fns/src/fp/eachMonthOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachMonthOfInterval } from 'date-fns/fp'
+export default eachMonthOfInterval
diff --git a/date-fns/src/fp/eachMonthOfInterval/index.js b/date-fns/src/fp/eachMonthOfInterval/index.js
new file mode 100644
index 0000000..91cf896
--- /dev/null
+++ b/date-fns/src/fp/eachMonthOfInterval/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachMonthOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachMonthOfInterval = convertToFP(fn, 1)
+
+export default eachMonthOfInterval
diff --git a/date-fns/src/fp/eachMonthOfInterval/index.js.flow b/date-fns/src/fp/eachMonthOfInterval/index.js.flow
new file mode 100644
index 0000000..c5f2d6a
--- /dev/null
+++ b/date-fns/src/fp/eachMonthOfInterval/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Interval, Date[]>
diff --git a/date-fns/src/fp/eachQuarterOfInterval/index.d.ts b/date-fns/src/fp/eachQuarterOfInterval/index.d.ts
new file mode 100644
index 0000000..8a81f63
--- /dev/null
+++ b/date-fns/src/fp/eachQuarterOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachQuarterOfInterval } from 'date-fns/fp'
+export default eachQuarterOfInterval
diff --git a/date-fns/src/fp/eachQuarterOfInterval/index.js b/date-fns/src/fp/eachQuarterOfInterval/index.js
new file mode 100644
index 0000000..ca236bc
--- /dev/null
+++ b/date-fns/src/fp/eachQuarterOfInterval/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachQuarterOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachQuarterOfInterval = convertToFP(fn, 1)
+
+export default eachQuarterOfInterval
diff --git a/date-fns/src/fp/eachQuarterOfInterval/index.js.flow b/date-fns/src/fp/eachQuarterOfInterval/index.js.flow
new file mode 100644
index 0000000..c5f2d6a
--- /dev/null
+++ b/date-fns/src/fp/eachQuarterOfInterval/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Interval, Date[]>
diff --git a/date-fns/src/fp/eachWeekOfInterval/index.d.ts b/date-fns/src/fp/eachWeekOfInterval/index.d.ts
new file mode 100644
index 0000000..ab5d4b4
--- /dev/null
+++ b/date-fns/src/fp/eachWeekOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachWeekOfInterval } from 'date-fns/fp'
+export default eachWeekOfInterval
diff --git a/date-fns/src/fp/eachWeekOfInterval/index.js b/date-fns/src/fp/eachWeekOfInterval/index.js
new file mode 100644
index 0000000..e6e9820
--- /dev/null
+++ b/date-fns/src/fp/eachWeekOfInterval/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachWeekOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachWeekOfInterval = convertToFP(fn, 1)
+
+export default eachWeekOfInterval
diff --git a/date-fns/src/fp/eachWeekOfInterval/index.js.flow b/date-fns/src/fp/eachWeekOfInterval/index.js.flow
new file mode 100644
index 0000000..c5f2d6a
--- /dev/null
+++ b/date-fns/src/fp/eachWeekOfInterval/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Interval, Date[]>
diff --git a/date-fns/src/fp/eachWeekOfIntervalWithOptions/index.d.ts b/date-fns/src/fp/eachWeekOfIntervalWithOptions/index.d.ts
new file mode 100644
index 0000000..def43ab
--- /dev/null
+++ b/date-fns/src/fp/eachWeekOfIntervalWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachWeekOfIntervalWithOptions } from 'date-fns/fp'
+export default eachWeekOfIntervalWithOptions
diff --git a/date-fns/src/fp/eachWeekOfIntervalWithOptions/index.js b/date-fns/src/fp/eachWeekOfIntervalWithOptions/index.js
new file mode 100644
index 0000000..396d3db
--- /dev/null
+++ b/date-fns/src/fp/eachWeekOfIntervalWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachWeekOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachWeekOfIntervalWithOptions = convertToFP(fn, 2)
+
+export default eachWeekOfIntervalWithOptions
diff --git a/date-fns/src/fp/eachWeekOfIntervalWithOptions/index.js.flow b/date-fns/src/fp/eachWeekOfIntervalWithOptions/index.js.flow
new file mode 100644
index 0000000..3aca218
--- /dev/null
+++ b/date-fns/src/fp/eachWeekOfIntervalWithOptions/index.js.flow
@@ -0,0 +1,65 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Interval,
+ Date[]
+>
diff --git a/date-fns/src/fp/eachWeekendOfInterval/index.d.ts b/date-fns/src/fp/eachWeekendOfInterval/index.d.ts
new file mode 100644
index 0000000..961eff7
--- /dev/null
+++ b/date-fns/src/fp/eachWeekendOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachWeekendOfInterval } from 'date-fns/fp'
+export default eachWeekendOfInterval
diff --git a/date-fns/src/fp/eachWeekendOfInterval/index.js b/date-fns/src/fp/eachWeekendOfInterval/index.js
new file mode 100644
index 0000000..85c2578
--- /dev/null
+++ b/date-fns/src/fp/eachWeekendOfInterval/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachWeekendOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachWeekendOfInterval = convertToFP(fn, 1)
+
+export default eachWeekendOfInterval
diff --git a/date-fns/src/fp/eachWeekendOfInterval/index.js.flow b/date-fns/src/fp/eachWeekendOfInterval/index.js.flow
new file mode 100644
index 0000000..c5f2d6a
--- /dev/null
+++ b/date-fns/src/fp/eachWeekendOfInterval/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Interval, Date[]>
diff --git a/date-fns/src/fp/eachWeekendOfMonth/index.d.ts b/date-fns/src/fp/eachWeekendOfMonth/index.d.ts
new file mode 100644
index 0000000..2501a05
--- /dev/null
+++ b/date-fns/src/fp/eachWeekendOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachWeekendOfMonth } from 'date-fns/fp'
+export default eachWeekendOfMonth
diff --git a/date-fns/src/fp/eachWeekendOfMonth/index.js b/date-fns/src/fp/eachWeekendOfMonth/index.js
new file mode 100644
index 0000000..c51f15c
--- /dev/null
+++ b/date-fns/src/fp/eachWeekendOfMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachWeekendOfMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachWeekendOfMonth = convertToFP(fn, 1)
+
+export default eachWeekendOfMonth
diff --git a/date-fns/src/fp/eachWeekendOfMonth/index.js.flow b/date-fns/src/fp/eachWeekendOfMonth/index.js.flow
new file mode 100644
index 0000000..9736b40
--- /dev/null
+++ b/date-fns/src/fp/eachWeekendOfMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date[]>
diff --git a/date-fns/src/fp/eachWeekendOfYear/index.d.ts b/date-fns/src/fp/eachWeekendOfYear/index.d.ts
new file mode 100644
index 0000000..8554541
--- /dev/null
+++ b/date-fns/src/fp/eachWeekendOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachWeekendOfYear } from 'date-fns/fp'
+export default eachWeekendOfYear
diff --git a/date-fns/src/fp/eachWeekendOfYear/index.js b/date-fns/src/fp/eachWeekendOfYear/index.js
new file mode 100644
index 0000000..176c513
--- /dev/null
+++ b/date-fns/src/fp/eachWeekendOfYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachWeekendOfYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachWeekendOfYear = convertToFP(fn, 1)
+
+export default eachWeekendOfYear
diff --git a/date-fns/src/fp/eachWeekendOfYear/index.js.flow b/date-fns/src/fp/eachWeekendOfYear/index.js.flow
new file mode 100644
index 0000000..9736b40
--- /dev/null
+++ b/date-fns/src/fp/eachWeekendOfYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date[]>
diff --git a/date-fns/src/fp/eachYearOfInterval/index.d.ts b/date-fns/src/fp/eachYearOfInterval/index.d.ts
new file mode 100644
index 0000000..51e093b
--- /dev/null
+++ b/date-fns/src/fp/eachYearOfInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eachYearOfInterval } from 'date-fns/fp'
+export default eachYearOfInterval
diff --git a/date-fns/src/fp/eachYearOfInterval/index.js b/date-fns/src/fp/eachYearOfInterval/index.js
new file mode 100644
index 0000000..9b4bc3f
--- /dev/null
+++ b/date-fns/src/fp/eachYearOfInterval/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../eachYearOfInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var eachYearOfInterval = convertToFP(fn, 1)
+
+export default eachYearOfInterval
diff --git a/date-fns/src/fp/eachYearOfInterval/index.js.flow b/date-fns/src/fp/eachYearOfInterval/index.js.flow
new file mode 100644
index 0000000..c5f2d6a
--- /dev/null
+++ b/date-fns/src/fp/eachYearOfInterval/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Interval, Date[]>
diff --git a/date-fns/src/fp/endOfDay/index.d.ts b/date-fns/src/fp/endOfDay/index.d.ts
new file mode 100644
index 0000000..2db665f
--- /dev/null
+++ b/date-fns/src/fp/endOfDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfDay } from 'date-fns/fp'
+export default endOfDay
diff --git a/date-fns/src/fp/endOfDay/index.js b/date-fns/src/fp/endOfDay/index.js
new file mode 100644
index 0000000..d4cd1c6
--- /dev/null
+++ b/date-fns/src/fp/endOfDay/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfDay/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfDay = convertToFP(fn, 1)
+
+export default endOfDay
diff --git a/date-fns/src/fp/endOfDay/index.js.flow b/date-fns/src/fp/endOfDay/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfDay/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfDecade/index.d.ts b/date-fns/src/fp/endOfDecade/index.d.ts
new file mode 100644
index 0000000..f3a7e8c
--- /dev/null
+++ b/date-fns/src/fp/endOfDecade/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfDecade } from 'date-fns/fp'
+export default endOfDecade
diff --git a/date-fns/src/fp/endOfDecade/index.js b/date-fns/src/fp/endOfDecade/index.js
new file mode 100644
index 0000000..7bd4446
--- /dev/null
+++ b/date-fns/src/fp/endOfDecade/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfDecade/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfDecade = convertToFP(fn, 1)
+
+export default endOfDecade
diff --git a/date-fns/src/fp/endOfDecade/index.js.flow b/date-fns/src/fp/endOfDecade/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfDecade/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfDecadeWithOptions/index.d.ts b/date-fns/src/fp/endOfDecadeWithOptions/index.d.ts
new file mode 100644
index 0000000..cad60da
--- /dev/null
+++ b/date-fns/src/fp/endOfDecadeWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfDecadeWithOptions } from 'date-fns/fp'
+export default endOfDecadeWithOptions
diff --git a/date-fns/src/fp/endOfDecadeWithOptions/index.js b/date-fns/src/fp/endOfDecadeWithOptions/index.js
new file mode 100644
index 0000000..fcef2a4
--- /dev/null
+++ b/date-fns/src/fp/endOfDecadeWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfDecade/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfDecadeWithOptions = convertToFP(fn, 2)
+
+export default endOfDecadeWithOptions
diff --git a/date-fns/src/fp/endOfDecadeWithOptions/index.js.flow b/date-fns/src/fp/endOfDecadeWithOptions/index.js.flow
new file mode 100644
index 0000000..4b6d0d4
--- /dev/null
+++ b/date-fns/src/fp/endOfDecadeWithOptions/index.js.flow
@@ -0,0 +1,64 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2,
+ },
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/endOfHour/index.d.ts b/date-fns/src/fp/endOfHour/index.d.ts
new file mode 100644
index 0000000..fb7b319
--- /dev/null
+++ b/date-fns/src/fp/endOfHour/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfHour } from 'date-fns/fp'
+export default endOfHour
diff --git a/date-fns/src/fp/endOfHour/index.js b/date-fns/src/fp/endOfHour/index.js
new file mode 100644
index 0000000..896ebf9
--- /dev/null
+++ b/date-fns/src/fp/endOfHour/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfHour/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfHour = convertToFP(fn, 1)
+
+export default endOfHour
diff --git a/date-fns/src/fp/endOfHour/index.js.flow b/date-fns/src/fp/endOfHour/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfHour/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfISOWeek/index.d.ts b/date-fns/src/fp/endOfISOWeek/index.d.ts
new file mode 100644
index 0000000..64f0b2e
--- /dev/null
+++ b/date-fns/src/fp/endOfISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfISOWeek } from 'date-fns/fp'
+export default endOfISOWeek
diff --git a/date-fns/src/fp/endOfISOWeek/index.js b/date-fns/src/fp/endOfISOWeek/index.js
new file mode 100644
index 0000000..12817f7
--- /dev/null
+++ b/date-fns/src/fp/endOfISOWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfISOWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfISOWeek = convertToFP(fn, 1)
+
+export default endOfISOWeek
diff --git a/date-fns/src/fp/endOfISOWeek/index.js.flow b/date-fns/src/fp/endOfISOWeek/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfISOWeek/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfISOWeekYear/index.d.ts b/date-fns/src/fp/endOfISOWeekYear/index.d.ts
new file mode 100644
index 0000000..9782d7f
--- /dev/null
+++ b/date-fns/src/fp/endOfISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfISOWeekYear } from 'date-fns/fp'
+export default endOfISOWeekYear
diff --git a/date-fns/src/fp/endOfISOWeekYear/index.js b/date-fns/src/fp/endOfISOWeekYear/index.js
new file mode 100644
index 0000000..e8dca89
--- /dev/null
+++ b/date-fns/src/fp/endOfISOWeekYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfISOWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfISOWeekYear = convertToFP(fn, 1)
+
+export default endOfISOWeekYear
diff --git a/date-fns/src/fp/endOfISOWeekYear/index.js.flow b/date-fns/src/fp/endOfISOWeekYear/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfISOWeekYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfMinute/index.d.ts b/date-fns/src/fp/endOfMinute/index.d.ts
new file mode 100644
index 0000000..78e8a19
--- /dev/null
+++ b/date-fns/src/fp/endOfMinute/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfMinute } from 'date-fns/fp'
+export default endOfMinute
diff --git a/date-fns/src/fp/endOfMinute/index.js b/date-fns/src/fp/endOfMinute/index.js
new file mode 100644
index 0000000..66489bd
--- /dev/null
+++ b/date-fns/src/fp/endOfMinute/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfMinute/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfMinute = convertToFP(fn, 1)
+
+export default endOfMinute
diff --git a/date-fns/src/fp/endOfMinute/index.js.flow b/date-fns/src/fp/endOfMinute/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfMinute/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfMonth/index.d.ts b/date-fns/src/fp/endOfMonth/index.d.ts
new file mode 100644
index 0000000..0c23957
--- /dev/null
+++ b/date-fns/src/fp/endOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfMonth } from 'date-fns/fp'
+export default endOfMonth
diff --git a/date-fns/src/fp/endOfMonth/index.js b/date-fns/src/fp/endOfMonth/index.js
new file mode 100644
index 0000000..6e54f05
--- /dev/null
+++ b/date-fns/src/fp/endOfMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfMonth = convertToFP(fn, 1)
+
+export default endOfMonth
diff --git a/date-fns/src/fp/endOfMonth/index.js.flow b/date-fns/src/fp/endOfMonth/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfQuarter/index.d.ts b/date-fns/src/fp/endOfQuarter/index.d.ts
new file mode 100644
index 0000000..24e729b
--- /dev/null
+++ b/date-fns/src/fp/endOfQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfQuarter } from 'date-fns/fp'
+export default endOfQuarter
diff --git a/date-fns/src/fp/endOfQuarter/index.js b/date-fns/src/fp/endOfQuarter/index.js
new file mode 100644
index 0000000..0f5dc0b
--- /dev/null
+++ b/date-fns/src/fp/endOfQuarter/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfQuarter/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfQuarter = convertToFP(fn, 1)
+
+export default endOfQuarter
diff --git a/date-fns/src/fp/endOfQuarter/index.js.flow b/date-fns/src/fp/endOfQuarter/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfQuarter/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfSecond/index.d.ts b/date-fns/src/fp/endOfSecond/index.d.ts
new file mode 100644
index 0000000..6b5d624
--- /dev/null
+++ b/date-fns/src/fp/endOfSecond/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfSecond } from 'date-fns/fp'
+export default endOfSecond
diff --git a/date-fns/src/fp/endOfSecond/index.js b/date-fns/src/fp/endOfSecond/index.js
new file mode 100644
index 0000000..6b58bd8
--- /dev/null
+++ b/date-fns/src/fp/endOfSecond/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfSecond/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfSecond = convertToFP(fn, 1)
+
+export default endOfSecond
diff --git a/date-fns/src/fp/endOfSecond/index.js.flow b/date-fns/src/fp/endOfSecond/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfSecond/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfWeek/index.d.ts b/date-fns/src/fp/endOfWeek/index.d.ts
new file mode 100644
index 0000000..0aa4d10
--- /dev/null
+++ b/date-fns/src/fp/endOfWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfWeek } from 'date-fns/fp'
+export default endOfWeek
diff --git a/date-fns/src/fp/endOfWeek/index.js b/date-fns/src/fp/endOfWeek/index.js
new file mode 100644
index 0000000..256588b
--- /dev/null
+++ b/date-fns/src/fp/endOfWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfWeek = convertToFP(fn, 1)
+
+export default endOfWeek
diff --git a/date-fns/src/fp/endOfWeek/index.js.flow b/date-fns/src/fp/endOfWeek/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfWeek/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/endOfWeekWithOptions/index.d.ts b/date-fns/src/fp/endOfWeekWithOptions/index.d.ts
new file mode 100644
index 0000000..0ddcbf6
--- /dev/null
+++ b/date-fns/src/fp/endOfWeekWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfWeekWithOptions } from 'date-fns/fp'
+export default endOfWeekWithOptions
diff --git a/date-fns/src/fp/endOfWeekWithOptions/index.js b/date-fns/src/fp/endOfWeekWithOptions/index.js
new file mode 100644
index 0000000..49fe42b
--- /dev/null
+++ b/date-fns/src/fp/endOfWeekWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfWeekWithOptions = convertToFP(fn, 2)
+
+export default endOfWeekWithOptions
diff --git a/date-fns/src/fp/endOfWeekWithOptions/index.js.flow b/date-fns/src/fp/endOfWeekWithOptions/index.js.flow
new file mode 100644
index 0000000..9821646
--- /dev/null
+++ b/date-fns/src/fp/endOfWeekWithOptions/index.js.flow
@@ -0,0 +1,65 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/endOfYear/index.d.ts b/date-fns/src/fp/endOfYear/index.d.ts
new file mode 100644
index 0000000..b4e5904
--- /dev/null
+++ b/date-fns/src/fp/endOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { endOfYear } from 'date-fns/fp'
+export default endOfYear
diff --git a/date-fns/src/fp/endOfYear/index.js b/date-fns/src/fp/endOfYear/index.js
new file mode 100644
index 0000000..a66dd9f
--- /dev/null
+++ b/date-fns/src/fp/endOfYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../endOfYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var endOfYear = convertToFP(fn, 1)
+
+export default endOfYear
diff --git a/date-fns/src/fp/endOfYear/index.js.flow b/date-fns/src/fp/endOfYear/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/endOfYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/format/index.d.ts b/date-fns/src/fp/format/index.d.ts
new file mode 100644
index 0000000..bf0c948
--- /dev/null
+++ b/date-fns/src/fp/format/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { format } from 'date-fns/fp'
+export default format
diff --git a/date-fns/src/fp/format/index.js b/date-fns/src/fp/format/index.js
new file mode 100644
index 0000000..6125b0a
--- /dev/null
+++ b/date-fns/src/fp/format/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../format/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var format = convertToFP(fn, 2)
+
+export default format
diff --git a/date-fns/src/fp/format/index.js.flow b/date-fns/src/fp/format/index.js.flow
new file mode 100644
index 0000000..013f277
--- /dev/null
+++ b/date-fns/src/fp/format/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<string, Date | number, string>
diff --git a/date-fns/src/fp/formatDistance/index.d.ts b/date-fns/src/fp/formatDistance/index.d.ts
new file mode 100644
index 0000000..029daa4
--- /dev/null
+++ b/date-fns/src/fp/formatDistance/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDistance } from 'date-fns/fp'
+export default formatDistance
diff --git a/date-fns/src/fp/formatDistance/index.js b/date-fns/src/fp/formatDistance/index.js
new file mode 100644
index 0000000..2b61a59
--- /dev/null
+++ b/date-fns/src/fp/formatDistance/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatDistance/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatDistance = convertToFP(fn, 2)
+
+export default formatDistance
diff --git a/date-fns/src/fp/formatDistance/index.js.flow b/date-fns/src/fp/formatDistance/index.js.flow
new file mode 100644
index 0000000..c4ef9a8
--- /dev/null
+++ b/date-fns/src/fp/formatDistance/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, string>
diff --git a/date-fns/src/fp/formatDistanceStrict/index.d.ts b/date-fns/src/fp/formatDistanceStrict/index.d.ts
new file mode 100644
index 0000000..dd41fb8
--- /dev/null
+++ b/date-fns/src/fp/formatDistanceStrict/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDistanceStrict } from 'date-fns/fp'
+export default formatDistanceStrict
diff --git a/date-fns/src/fp/formatDistanceStrict/index.js b/date-fns/src/fp/formatDistanceStrict/index.js
new file mode 100644
index 0000000..2fe195c
--- /dev/null
+++ b/date-fns/src/fp/formatDistanceStrict/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatDistanceStrict/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatDistanceStrict = convertToFP(fn, 2)
+
+export default formatDistanceStrict
diff --git a/date-fns/src/fp/formatDistanceStrict/index.js.flow b/date-fns/src/fp/formatDistanceStrict/index.js.flow
new file mode 100644
index 0000000..c4ef9a8
--- /dev/null
+++ b/date-fns/src/fp/formatDistanceStrict/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, string>
diff --git a/date-fns/src/fp/formatDistanceStrictWithOptions/index.d.ts b/date-fns/src/fp/formatDistanceStrictWithOptions/index.d.ts
new file mode 100644
index 0000000..2e626c4
--- /dev/null
+++ b/date-fns/src/fp/formatDistanceStrictWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDistanceStrictWithOptions } from 'date-fns/fp'
+export default formatDistanceStrictWithOptions
diff --git a/date-fns/src/fp/formatDistanceStrictWithOptions/index.js b/date-fns/src/fp/formatDistanceStrictWithOptions/index.js
new file mode 100644
index 0000000..e2494e4
--- /dev/null
+++ b/date-fns/src/fp/formatDistanceStrictWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatDistanceStrict/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatDistanceStrictWithOptions = convertToFP(fn, 3)
+
+export default formatDistanceStrictWithOptions
diff --git a/date-fns/src/fp/formatDistanceStrictWithOptions/index.js.flow b/date-fns/src/fp/formatDistanceStrictWithOptions/index.js.flow
new file mode 100644
index 0000000..b021da2
--- /dev/null
+++ b/date-fns/src/fp/formatDistanceStrictWithOptions/index.js.flow
@@ -0,0 +1,77 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ locale?: Locale,
+ roundingMethod?: 'floor' | 'ceil' | 'round',
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year',
+ addSuffix?: boolean,
+ },
+ Date | number,
+ Date | number,
+ string
+>
diff --git a/date-fns/src/fp/formatDistanceWithOptions/index.d.ts b/date-fns/src/fp/formatDistanceWithOptions/index.d.ts
new file mode 100644
index 0000000..62f0849
--- /dev/null
+++ b/date-fns/src/fp/formatDistanceWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDistanceWithOptions } from 'date-fns/fp'
+export default formatDistanceWithOptions
diff --git a/date-fns/src/fp/formatDistanceWithOptions/index.js b/date-fns/src/fp/formatDistanceWithOptions/index.js
new file mode 100644
index 0000000..8e97fdc
--- /dev/null
+++ b/date-fns/src/fp/formatDistanceWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatDistance/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatDistanceWithOptions = convertToFP(fn, 3)
+
+export default formatDistanceWithOptions
diff --git a/date-fns/src/fp/formatDistanceWithOptions/index.js.flow b/date-fns/src/fp/formatDistanceWithOptions/index.js.flow
new file mode 100644
index 0000000..5904311
--- /dev/null
+++ b/date-fns/src/fp/formatDistanceWithOptions/index.js.flow
@@ -0,0 +1,76 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ locale?: Locale,
+ addSuffix?: boolean,
+ includeSeconds?: boolean,
+ },
+ Date | number,
+ Date | number,
+ string
+>
diff --git a/date-fns/src/fp/formatDuration/index.d.ts b/date-fns/src/fp/formatDuration/index.d.ts
new file mode 100644
index 0000000..3b184cc
--- /dev/null
+++ b/date-fns/src/fp/formatDuration/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDuration } from 'date-fns/fp'
+export default formatDuration
diff --git a/date-fns/src/fp/formatDuration/index.js b/date-fns/src/fp/formatDuration/index.js
new file mode 100644
index 0000000..45dde95
--- /dev/null
+++ b/date-fns/src/fp/formatDuration/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatDuration/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatDuration = convertToFP(fn, 1)
+
+export default formatDuration
diff --git a/date-fns/src/fp/formatDuration/index.js.flow b/date-fns/src/fp/formatDuration/index.js.flow
new file mode 100644
index 0000000..da71564
--- /dev/null
+++ b/date-fns/src/fp/formatDuration/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Duration, string>
diff --git a/date-fns/src/fp/formatDurationWithOptions/index.d.ts b/date-fns/src/fp/formatDurationWithOptions/index.d.ts
new file mode 100644
index 0000000..6331517
--- /dev/null
+++ b/date-fns/src/fp/formatDurationWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatDurationWithOptions } from 'date-fns/fp'
+export default formatDurationWithOptions
diff --git a/date-fns/src/fp/formatDurationWithOptions/index.js b/date-fns/src/fp/formatDurationWithOptions/index.js
new file mode 100644
index 0000000..9add43f
--- /dev/null
+++ b/date-fns/src/fp/formatDurationWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatDuration/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatDurationWithOptions = convertToFP(fn, 2)
+
+export default formatDurationWithOptions
diff --git a/date-fns/src/fp/formatDurationWithOptions/index.js.flow b/date-fns/src/fp/formatDurationWithOptions/index.js.flow
new file mode 100644
index 0000000..72f2910
--- /dev/null
+++ b/date-fns/src/fp/formatDurationWithOptions/index.js.flow
@@ -0,0 +1,67 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ locale?: Locale,
+ delimiter?: string,
+ zero?: boolean,
+ format?: string[],
+ },
+ Duration,
+ string
+>
diff --git a/date-fns/src/fp/formatISO/index.d.ts b/date-fns/src/fp/formatISO/index.d.ts
new file mode 100644
index 0000000..6f3ba60
--- /dev/null
+++ b/date-fns/src/fp/formatISO/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatISO } from 'date-fns/fp'
+export default formatISO
diff --git a/date-fns/src/fp/formatISO/index.js b/date-fns/src/fp/formatISO/index.js
new file mode 100644
index 0000000..c59aeb5
--- /dev/null
+++ b/date-fns/src/fp/formatISO/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatISO/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatISO = convertToFP(fn, 1)
+
+export default formatISO
diff --git a/date-fns/src/fp/formatISO/index.js.flow b/date-fns/src/fp/formatISO/index.js.flow
new file mode 100644
index 0000000..a2b1a3a
--- /dev/null
+++ b/date-fns/src/fp/formatISO/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, string>
diff --git a/date-fns/src/fp/formatISO9075/index.d.ts b/date-fns/src/fp/formatISO9075/index.d.ts
new file mode 100644
index 0000000..171e2b7
--- /dev/null
+++ b/date-fns/src/fp/formatISO9075/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatISO9075 } from 'date-fns/fp'
+export default formatISO9075
diff --git a/date-fns/src/fp/formatISO9075/index.js b/date-fns/src/fp/formatISO9075/index.js
new file mode 100644
index 0000000..f7e3f44
--- /dev/null
+++ b/date-fns/src/fp/formatISO9075/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatISO9075/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatISO9075 = convertToFP(fn, 1)
+
+export default formatISO9075
diff --git a/date-fns/src/fp/formatISO9075/index.js.flow b/date-fns/src/fp/formatISO9075/index.js.flow
new file mode 100644
index 0000000..a2b1a3a
--- /dev/null
+++ b/date-fns/src/fp/formatISO9075/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, string>
diff --git a/date-fns/src/fp/formatISO9075WithOptions/index.d.ts b/date-fns/src/fp/formatISO9075WithOptions/index.d.ts
new file mode 100644
index 0000000..3000885
--- /dev/null
+++ b/date-fns/src/fp/formatISO9075WithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatISO9075WithOptions } from 'date-fns/fp'
+export default formatISO9075WithOptions
diff --git a/date-fns/src/fp/formatISO9075WithOptions/index.js b/date-fns/src/fp/formatISO9075WithOptions/index.js
new file mode 100644
index 0000000..aa642a6
--- /dev/null
+++ b/date-fns/src/fp/formatISO9075WithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatISO9075/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatISO9075WithOptions = convertToFP(fn, 2)
+
+export default formatISO9075WithOptions
diff --git a/date-fns/src/fp/formatISO9075WithOptions/index.js.flow b/date-fns/src/fp/formatISO9075WithOptions/index.js.flow
new file mode 100644
index 0000000..fd294f1
--- /dev/null
+++ b/date-fns/src/fp/formatISO9075WithOptions/index.js.flow
@@ -0,0 +1,65 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ representation?: 'complete' | 'date' | 'time',
+ format?: 'extended' | 'basic',
+ },
+ Date | number,
+ string
+>
diff --git a/date-fns/src/fp/formatISODuration/index.d.ts b/date-fns/src/fp/formatISODuration/index.d.ts
new file mode 100644
index 0000000..aedd086
--- /dev/null
+++ b/date-fns/src/fp/formatISODuration/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatISODuration } from 'date-fns/fp'
+export default formatISODuration
diff --git a/date-fns/src/fp/formatISODuration/index.js b/date-fns/src/fp/formatISODuration/index.js
new file mode 100644
index 0000000..21010c7
--- /dev/null
+++ b/date-fns/src/fp/formatISODuration/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatISODuration/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatISODuration = convertToFP(fn, 1)
+
+export default formatISODuration
diff --git a/date-fns/src/fp/formatISODuration/index.js.flow b/date-fns/src/fp/formatISODuration/index.js.flow
new file mode 100644
index 0000000..da71564
--- /dev/null
+++ b/date-fns/src/fp/formatISODuration/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Duration, string>
diff --git a/date-fns/src/fp/formatISOWithOptions/index.d.ts b/date-fns/src/fp/formatISOWithOptions/index.d.ts
new file mode 100644
index 0000000..286813e
--- /dev/null
+++ b/date-fns/src/fp/formatISOWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatISOWithOptions } from 'date-fns/fp'
+export default formatISOWithOptions
diff --git a/date-fns/src/fp/formatISOWithOptions/index.js b/date-fns/src/fp/formatISOWithOptions/index.js
new file mode 100644
index 0000000..273bc4c
--- /dev/null
+++ b/date-fns/src/fp/formatISOWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatISO/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatISOWithOptions = convertToFP(fn, 2)
+
+export default formatISOWithOptions
diff --git a/date-fns/src/fp/formatISOWithOptions/index.js.flow b/date-fns/src/fp/formatISOWithOptions/index.js.flow
new file mode 100644
index 0000000..fd294f1
--- /dev/null
+++ b/date-fns/src/fp/formatISOWithOptions/index.js.flow
@@ -0,0 +1,65 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ representation?: 'complete' | 'date' | 'time',
+ format?: 'extended' | 'basic',
+ },
+ Date | number,
+ string
+>
diff --git a/date-fns/src/fp/formatRFC3339/index.d.ts b/date-fns/src/fp/formatRFC3339/index.d.ts
new file mode 100644
index 0000000..c1ac827
--- /dev/null
+++ b/date-fns/src/fp/formatRFC3339/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatRFC3339 } from 'date-fns/fp'
+export default formatRFC3339
diff --git a/date-fns/src/fp/formatRFC3339/index.js b/date-fns/src/fp/formatRFC3339/index.js
new file mode 100644
index 0000000..f570155
--- /dev/null
+++ b/date-fns/src/fp/formatRFC3339/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatRFC3339/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatRFC3339 = convertToFP(fn, 1)
+
+export default formatRFC3339
diff --git a/date-fns/src/fp/formatRFC3339/index.js.flow b/date-fns/src/fp/formatRFC3339/index.js.flow
new file mode 100644
index 0000000..a2b1a3a
--- /dev/null
+++ b/date-fns/src/fp/formatRFC3339/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, string>
diff --git a/date-fns/src/fp/formatRFC3339WithOptions/index.d.ts b/date-fns/src/fp/formatRFC3339WithOptions/index.d.ts
new file mode 100644
index 0000000..b274531
--- /dev/null
+++ b/date-fns/src/fp/formatRFC3339WithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatRFC3339WithOptions } from 'date-fns/fp'
+export default formatRFC3339WithOptions
diff --git a/date-fns/src/fp/formatRFC3339WithOptions/index.js b/date-fns/src/fp/formatRFC3339WithOptions/index.js
new file mode 100644
index 0000000..6db8e3b
--- /dev/null
+++ b/date-fns/src/fp/formatRFC3339WithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatRFC3339/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatRFC3339WithOptions = convertToFP(fn, 2)
+
+export default formatRFC3339WithOptions
diff --git a/date-fns/src/fp/formatRFC3339WithOptions/index.js.flow b/date-fns/src/fp/formatRFC3339WithOptions/index.js.flow
new file mode 100644
index 0000000..77fba59
--- /dev/null
+++ b/date-fns/src/fp/formatRFC3339WithOptions/index.js.flow
@@ -0,0 +1,64 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ fractionDigits?: 0 | 1 | 2 | 3,
+ },
+ Date | number,
+ string
+>
diff --git a/date-fns/src/fp/formatRFC7231/index.d.ts b/date-fns/src/fp/formatRFC7231/index.d.ts
new file mode 100644
index 0000000..ca45e43
--- /dev/null
+++ b/date-fns/src/fp/formatRFC7231/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatRFC7231 } from 'date-fns/fp'
+export default formatRFC7231
diff --git a/date-fns/src/fp/formatRFC7231/index.js b/date-fns/src/fp/formatRFC7231/index.js
new file mode 100644
index 0000000..ef3b46f
--- /dev/null
+++ b/date-fns/src/fp/formatRFC7231/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatRFC7231/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatRFC7231 = convertToFP(fn, 1)
+
+export default formatRFC7231
diff --git a/date-fns/src/fp/formatRFC7231/index.js.flow b/date-fns/src/fp/formatRFC7231/index.js.flow
new file mode 100644
index 0000000..a2b1a3a
--- /dev/null
+++ b/date-fns/src/fp/formatRFC7231/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, string>
diff --git a/date-fns/src/fp/formatRelative/index.d.ts b/date-fns/src/fp/formatRelative/index.d.ts
new file mode 100644
index 0000000..927a300
--- /dev/null
+++ b/date-fns/src/fp/formatRelative/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatRelative } from 'date-fns/fp'
+export default formatRelative
diff --git a/date-fns/src/fp/formatRelative/index.js b/date-fns/src/fp/formatRelative/index.js
new file mode 100644
index 0000000..dc9e35f
--- /dev/null
+++ b/date-fns/src/fp/formatRelative/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatRelative/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatRelative = convertToFP(fn, 2)
+
+export default formatRelative
diff --git a/date-fns/src/fp/formatRelative/index.js.flow b/date-fns/src/fp/formatRelative/index.js.flow
new file mode 100644
index 0000000..c4ef9a8
--- /dev/null
+++ b/date-fns/src/fp/formatRelative/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, string>
diff --git a/date-fns/src/fp/formatRelativeWithOptions/index.d.ts b/date-fns/src/fp/formatRelativeWithOptions/index.d.ts
new file mode 100644
index 0000000..5bea41a
--- /dev/null
+++ b/date-fns/src/fp/formatRelativeWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatRelativeWithOptions } from 'date-fns/fp'
+export default formatRelativeWithOptions
diff --git a/date-fns/src/fp/formatRelativeWithOptions/index.js b/date-fns/src/fp/formatRelativeWithOptions/index.js
new file mode 100644
index 0000000..3ee8a1b
--- /dev/null
+++ b/date-fns/src/fp/formatRelativeWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../formatRelative/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatRelativeWithOptions = convertToFP(fn, 3)
+
+export default formatRelativeWithOptions
diff --git a/date-fns/src/fp/formatRelativeWithOptions/index.js.flow b/date-fns/src/fp/formatRelativeWithOptions/index.js.flow
new file mode 100644
index 0000000..cb51d97
--- /dev/null
+++ b/date-fns/src/fp/formatRelativeWithOptions/index.js.flow
@@ -0,0 +1,75 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date | number,
+ string
+>
diff --git a/date-fns/src/fp/formatWithOptions/index.d.ts b/date-fns/src/fp/formatWithOptions/index.d.ts
new file mode 100644
index 0000000..cd59897
--- /dev/null
+++ b/date-fns/src/fp/formatWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { formatWithOptions } from 'date-fns/fp'
+export default formatWithOptions
diff --git a/date-fns/src/fp/formatWithOptions/index.js b/date-fns/src/fp/formatWithOptions/index.js
new file mode 100644
index 0000000..9c0a819
--- /dev/null
+++ b/date-fns/src/fp/formatWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../format/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var formatWithOptions = convertToFP(fn, 3)
+
+export default formatWithOptions
diff --git a/date-fns/src/fp/formatWithOptions/index.js.flow b/date-fns/src/fp/formatWithOptions/index.js.flow
new file mode 100644
index 0000000..757f95a
--- /dev/null
+++ b/date-fns/src/fp/formatWithOptions/index.js.flow
@@ -0,0 +1,78 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ useAdditionalDayOfYearTokens?: boolean,
+ useAdditionalWeekYearTokens?: boolean,
+ firstWeekContainsDate?: number,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ string,
+ Date | number,
+ string
+>
diff --git a/date-fns/src/fp/fromUnixTime/index.d.ts b/date-fns/src/fp/fromUnixTime/index.d.ts
new file mode 100644
index 0000000..e6cbce3
--- /dev/null
+++ b/date-fns/src/fp/fromUnixTime/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { fromUnixTime } from 'date-fns/fp'
+export default fromUnixTime
diff --git a/date-fns/src/fp/fromUnixTime/index.js b/date-fns/src/fp/fromUnixTime/index.js
new file mode 100644
index 0000000..a0c8bf6
--- /dev/null
+++ b/date-fns/src/fp/fromUnixTime/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../fromUnixTime/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var fromUnixTime = convertToFP(fn, 1)
+
+export default fromUnixTime
diff --git a/date-fns/src/fp/fromUnixTime/index.js.flow b/date-fns/src/fp/fromUnixTime/index.js.flow
new file mode 100644
index 0000000..27fa886
--- /dev/null
+++ b/date-fns/src/fp/fromUnixTime/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, Date>
diff --git a/date-fns/src/fp/getDate/index.d.ts b/date-fns/src/fp/getDate/index.d.ts
new file mode 100644
index 0000000..879f12c
--- /dev/null
+++ b/date-fns/src/fp/getDate/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDate } from 'date-fns/fp'
+export default getDate
diff --git a/date-fns/src/fp/getDate/index.js b/date-fns/src/fp/getDate/index.js
new file mode 100644
index 0000000..57b92e6
--- /dev/null
+++ b/date-fns/src/fp/getDate/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getDate/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getDate = convertToFP(fn, 1)
+
+export default getDate
diff --git a/date-fns/src/fp/getDate/index.js.flow b/date-fns/src/fp/getDate/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getDate/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getDay/index.d.ts b/date-fns/src/fp/getDay/index.d.ts
new file mode 100644
index 0000000..e1bccbb
--- /dev/null
+++ b/date-fns/src/fp/getDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDay } from 'date-fns/fp'
+export default getDay
diff --git a/date-fns/src/fp/getDay/index.js b/date-fns/src/fp/getDay/index.js
new file mode 100644
index 0000000..a50b4c7
--- /dev/null
+++ b/date-fns/src/fp/getDay/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getDay/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getDay = convertToFP(fn, 1)
+
+export default getDay
diff --git a/date-fns/src/fp/getDay/index.js.flow b/date-fns/src/fp/getDay/index.js.flow
new file mode 100644
index 0000000..8971f41
--- /dev/null
+++ b/date-fns/src/fp/getDay/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, 0 | 1 | 2 | 3 | 4 | 5 | 6>
diff --git a/date-fns/src/fp/getDayOfYear/index.d.ts b/date-fns/src/fp/getDayOfYear/index.d.ts
new file mode 100644
index 0000000..ccc88e1
--- /dev/null
+++ b/date-fns/src/fp/getDayOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDayOfYear } from 'date-fns/fp'
+export default getDayOfYear
diff --git a/date-fns/src/fp/getDayOfYear/index.js b/date-fns/src/fp/getDayOfYear/index.js
new file mode 100644
index 0000000..601b20f
--- /dev/null
+++ b/date-fns/src/fp/getDayOfYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getDayOfYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getDayOfYear = convertToFP(fn, 1)
+
+export default getDayOfYear
diff --git a/date-fns/src/fp/getDayOfYear/index.js.flow b/date-fns/src/fp/getDayOfYear/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getDayOfYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getDaysInMonth/index.d.ts b/date-fns/src/fp/getDaysInMonth/index.d.ts
new file mode 100644
index 0000000..2ca8445
--- /dev/null
+++ b/date-fns/src/fp/getDaysInMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDaysInMonth } from 'date-fns/fp'
+export default getDaysInMonth
diff --git a/date-fns/src/fp/getDaysInMonth/index.js b/date-fns/src/fp/getDaysInMonth/index.js
new file mode 100644
index 0000000..b18dd45
--- /dev/null
+++ b/date-fns/src/fp/getDaysInMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getDaysInMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getDaysInMonth = convertToFP(fn, 1)
+
+export default getDaysInMonth
diff --git a/date-fns/src/fp/getDaysInMonth/index.js.flow b/date-fns/src/fp/getDaysInMonth/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getDaysInMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getDaysInYear/index.d.ts b/date-fns/src/fp/getDaysInYear/index.d.ts
new file mode 100644
index 0000000..599213f
--- /dev/null
+++ b/date-fns/src/fp/getDaysInYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDaysInYear } from 'date-fns/fp'
+export default getDaysInYear
diff --git a/date-fns/src/fp/getDaysInYear/index.js b/date-fns/src/fp/getDaysInYear/index.js
new file mode 100644
index 0000000..793b00d
--- /dev/null
+++ b/date-fns/src/fp/getDaysInYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getDaysInYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getDaysInYear = convertToFP(fn, 1)
+
+export default getDaysInYear
diff --git a/date-fns/src/fp/getDaysInYear/index.js.flow b/date-fns/src/fp/getDaysInYear/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getDaysInYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getDecade/index.d.ts b/date-fns/src/fp/getDecade/index.d.ts
new file mode 100644
index 0000000..ca1c9c5
--- /dev/null
+++ b/date-fns/src/fp/getDecade/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDecade } from 'date-fns/fp'
+export default getDecade
diff --git a/date-fns/src/fp/getDecade/index.js b/date-fns/src/fp/getDecade/index.js
new file mode 100644
index 0000000..6845b32
--- /dev/null
+++ b/date-fns/src/fp/getDecade/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getDecade/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getDecade = convertToFP(fn, 1)
+
+export default getDecade
diff --git a/date-fns/src/fp/getDecade/index.js.flow b/date-fns/src/fp/getDecade/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getDecade/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getHours/index.d.ts b/date-fns/src/fp/getHours/index.d.ts
new file mode 100644
index 0000000..9daea8a
--- /dev/null
+++ b/date-fns/src/fp/getHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getHours } from 'date-fns/fp'
+export default getHours
diff --git a/date-fns/src/fp/getHours/index.js b/date-fns/src/fp/getHours/index.js
new file mode 100644
index 0000000..107c1db
--- /dev/null
+++ b/date-fns/src/fp/getHours/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getHours/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getHours = convertToFP(fn, 1)
+
+export default getHours
diff --git a/date-fns/src/fp/getHours/index.js.flow b/date-fns/src/fp/getHours/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getHours/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getISODay/index.d.ts b/date-fns/src/fp/getISODay/index.d.ts
new file mode 100644
index 0000000..c85663e
--- /dev/null
+++ b/date-fns/src/fp/getISODay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getISODay } from 'date-fns/fp'
+export default getISODay
diff --git a/date-fns/src/fp/getISODay/index.js b/date-fns/src/fp/getISODay/index.js
new file mode 100644
index 0000000..f7e8751
--- /dev/null
+++ b/date-fns/src/fp/getISODay/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getISODay/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getISODay = convertToFP(fn, 1)
+
+export default getISODay
diff --git a/date-fns/src/fp/getISODay/index.js.flow b/date-fns/src/fp/getISODay/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getISODay/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getISOWeek/index.d.ts b/date-fns/src/fp/getISOWeek/index.d.ts
new file mode 100644
index 0000000..2574d71
--- /dev/null
+++ b/date-fns/src/fp/getISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getISOWeek } from 'date-fns/fp'
+export default getISOWeek
diff --git a/date-fns/src/fp/getISOWeek/index.js b/date-fns/src/fp/getISOWeek/index.js
new file mode 100644
index 0000000..00fc0bf
--- /dev/null
+++ b/date-fns/src/fp/getISOWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getISOWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getISOWeek = convertToFP(fn, 1)
+
+export default getISOWeek
diff --git a/date-fns/src/fp/getISOWeek/index.js.flow b/date-fns/src/fp/getISOWeek/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getISOWeek/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getISOWeekYear/index.d.ts b/date-fns/src/fp/getISOWeekYear/index.d.ts
new file mode 100644
index 0000000..b0cfad8
--- /dev/null
+++ b/date-fns/src/fp/getISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getISOWeekYear } from 'date-fns/fp'
+export default getISOWeekYear
diff --git a/date-fns/src/fp/getISOWeekYear/index.js b/date-fns/src/fp/getISOWeekYear/index.js
new file mode 100644
index 0000000..5ef6bad
--- /dev/null
+++ b/date-fns/src/fp/getISOWeekYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getISOWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getISOWeekYear = convertToFP(fn, 1)
+
+export default getISOWeekYear
diff --git a/date-fns/src/fp/getISOWeekYear/index.js.flow b/date-fns/src/fp/getISOWeekYear/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getISOWeekYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getISOWeeksInYear/index.d.ts b/date-fns/src/fp/getISOWeeksInYear/index.d.ts
new file mode 100644
index 0000000..3a1d6af
--- /dev/null
+++ b/date-fns/src/fp/getISOWeeksInYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getISOWeeksInYear } from 'date-fns/fp'
+export default getISOWeeksInYear
diff --git a/date-fns/src/fp/getISOWeeksInYear/index.js b/date-fns/src/fp/getISOWeeksInYear/index.js
new file mode 100644
index 0000000..c83b12c
--- /dev/null
+++ b/date-fns/src/fp/getISOWeeksInYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getISOWeeksInYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getISOWeeksInYear = convertToFP(fn, 1)
+
+export default getISOWeeksInYear
diff --git a/date-fns/src/fp/getISOWeeksInYear/index.js.flow b/date-fns/src/fp/getISOWeeksInYear/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getISOWeeksInYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getMilliseconds/index.d.ts b/date-fns/src/fp/getMilliseconds/index.d.ts
new file mode 100644
index 0000000..c125962
--- /dev/null
+++ b/date-fns/src/fp/getMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getMilliseconds } from 'date-fns/fp'
+export default getMilliseconds
diff --git a/date-fns/src/fp/getMilliseconds/index.js b/date-fns/src/fp/getMilliseconds/index.js
new file mode 100644
index 0000000..09a4e8c
--- /dev/null
+++ b/date-fns/src/fp/getMilliseconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getMilliseconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getMilliseconds = convertToFP(fn, 1)
+
+export default getMilliseconds
diff --git a/date-fns/src/fp/getMilliseconds/index.js.flow b/date-fns/src/fp/getMilliseconds/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getMilliseconds/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getMinutes/index.d.ts b/date-fns/src/fp/getMinutes/index.d.ts
new file mode 100644
index 0000000..14b6b04
--- /dev/null
+++ b/date-fns/src/fp/getMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getMinutes } from 'date-fns/fp'
+export default getMinutes
diff --git a/date-fns/src/fp/getMinutes/index.js b/date-fns/src/fp/getMinutes/index.js
new file mode 100644
index 0000000..9603744
--- /dev/null
+++ b/date-fns/src/fp/getMinutes/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getMinutes = convertToFP(fn, 1)
+
+export default getMinutes
diff --git a/date-fns/src/fp/getMinutes/index.js.flow b/date-fns/src/fp/getMinutes/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getMinutes/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getMonth/index.d.ts b/date-fns/src/fp/getMonth/index.d.ts
new file mode 100644
index 0000000..a7c696a
--- /dev/null
+++ b/date-fns/src/fp/getMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getMonth } from 'date-fns/fp'
+export default getMonth
diff --git a/date-fns/src/fp/getMonth/index.js b/date-fns/src/fp/getMonth/index.js
new file mode 100644
index 0000000..f80288a
--- /dev/null
+++ b/date-fns/src/fp/getMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getMonth = convertToFP(fn, 1)
+
+export default getMonth
diff --git a/date-fns/src/fp/getMonth/index.js.flow b/date-fns/src/fp/getMonth/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getOverlappingDaysInIntervals/index.d.ts b/date-fns/src/fp/getOverlappingDaysInIntervals/index.d.ts
new file mode 100644
index 0000000..de0b970
--- /dev/null
+++ b/date-fns/src/fp/getOverlappingDaysInIntervals/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getOverlappingDaysInIntervals } from 'date-fns/fp'
+export default getOverlappingDaysInIntervals
diff --git a/date-fns/src/fp/getOverlappingDaysInIntervals/index.js b/date-fns/src/fp/getOverlappingDaysInIntervals/index.js
new file mode 100644
index 0000000..9ac2f66
--- /dev/null
+++ b/date-fns/src/fp/getOverlappingDaysInIntervals/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getOverlappingDaysInIntervals/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getOverlappingDaysInIntervals = convertToFP(fn, 2)
+
+export default getOverlappingDaysInIntervals
diff --git a/date-fns/src/fp/getOverlappingDaysInIntervals/index.js.flow b/date-fns/src/fp/getOverlappingDaysInIntervals/index.js.flow
new file mode 100644
index 0000000..f640837
--- /dev/null
+++ b/date-fns/src/fp/getOverlappingDaysInIntervals/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Interval, Interval, number>
diff --git a/date-fns/src/fp/getQuarter/index.d.ts b/date-fns/src/fp/getQuarter/index.d.ts
new file mode 100644
index 0000000..50f13f6
--- /dev/null
+++ b/date-fns/src/fp/getQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getQuarter } from 'date-fns/fp'
+export default getQuarter
diff --git a/date-fns/src/fp/getQuarter/index.js b/date-fns/src/fp/getQuarter/index.js
new file mode 100644
index 0000000..722e70b
--- /dev/null
+++ b/date-fns/src/fp/getQuarter/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getQuarter/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getQuarter = convertToFP(fn, 1)
+
+export default getQuarter
diff --git a/date-fns/src/fp/getQuarter/index.js.flow b/date-fns/src/fp/getQuarter/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getQuarter/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getSeconds/index.d.ts b/date-fns/src/fp/getSeconds/index.d.ts
new file mode 100644
index 0000000..1f6c233
--- /dev/null
+++ b/date-fns/src/fp/getSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getSeconds } from 'date-fns/fp'
+export default getSeconds
diff --git a/date-fns/src/fp/getSeconds/index.js b/date-fns/src/fp/getSeconds/index.js
new file mode 100644
index 0000000..7fe1b75
--- /dev/null
+++ b/date-fns/src/fp/getSeconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getSeconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getSeconds = convertToFP(fn, 1)
+
+export default getSeconds
diff --git a/date-fns/src/fp/getSeconds/index.js.flow b/date-fns/src/fp/getSeconds/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getSeconds/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getTime/index.d.ts b/date-fns/src/fp/getTime/index.d.ts
new file mode 100644
index 0000000..7bfc8ce
--- /dev/null
+++ b/date-fns/src/fp/getTime/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getTime } from 'date-fns/fp'
+export default getTime
diff --git a/date-fns/src/fp/getTime/index.js b/date-fns/src/fp/getTime/index.js
new file mode 100644
index 0000000..7754b5d
--- /dev/null
+++ b/date-fns/src/fp/getTime/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getTime/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getTime = convertToFP(fn, 1)
+
+export default getTime
diff --git a/date-fns/src/fp/getTime/index.js.flow b/date-fns/src/fp/getTime/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getTime/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getUnixTime/index.d.ts b/date-fns/src/fp/getUnixTime/index.d.ts
new file mode 100644
index 0000000..7fb0dac
--- /dev/null
+++ b/date-fns/src/fp/getUnixTime/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getUnixTime } from 'date-fns/fp'
+export default getUnixTime
diff --git a/date-fns/src/fp/getUnixTime/index.js b/date-fns/src/fp/getUnixTime/index.js
new file mode 100644
index 0000000..d7e27b9
--- /dev/null
+++ b/date-fns/src/fp/getUnixTime/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getUnixTime/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getUnixTime = convertToFP(fn, 1)
+
+export default getUnixTime
diff --git a/date-fns/src/fp/getUnixTime/index.js.flow b/date-fns/src/fp/getUnixTime/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getUnixTime/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getWeek/index.d.ts b/date-fns/src/fp/getWeek/index.d.ts
new file mode 100644
index 0000000..2b3b4ee
--- /dev/null
+++ b/date-fns/src/fp/getWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeek } from 'date-fns/fp'
+export default getWeek
diff --git a/date-fns/src/fp/getWeek/index.js b/date-fns/src/fp/getWeek/index.js
new file mode 100644
index 0000000..a4197e5
--- /dev/null
+++ b/date-fns/src/fp/getWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getWeek = convertToFP(fn, 1)
+
+export default getWeek
diff --git a/date-fns/src/fp/getWeek/index.js.flow b/date-fns/src/fp/getWeek/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getWeek/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getWeekOfMonth/index.d.ts b/date-fns/src/fp/getWeekOfMonth/index.d.ts
new file mode 100644
index 0000000..1fd925f
--- /dev/null
+++ b/date-fns/src/fp/getWeekOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeekOfMonth } from 'date-fns/fp'
+export default getWeekOfMonth
diff --git a/date-fns/src/fp/getWeekOfMonth/index.js b/date-fns/src/fp/getWeekOfMonth/index.js
new file mode 100644
index 0000000..ad01383
--- /dev/null
+++ b/date-fns/src/fp/getWeekOfMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getWeekOfMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getWeekOfMonth = convertToFP(fn, 1)
+
+export default getWeekOfMonth
diff --git a/date-fns/src/fp/getWeekOfMonth/index.js.flow b/date-fns/src/fp/getWeekOfMonth/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getWeekOfMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getWeekOfMonthWithOptions/index.d.ts b/date-fns/src/fp/getWeekOfMonthWithOptions/index.d.ts
new file mode 100644
index 0000000..0bcf9e4
--- /dev/null
+++ b/date-fns/src/fp/getWeekOfMonthWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeekOfMonthWithOptions } from 'date-fns/fp'
+export default getWeekOfMonthWithOptions
diff --git a/date-fns/src/fp/getWeekOfMonthWithOptions/index.js b/date-fns/src/fp/getWeekOfMonthWithOptions/index.js
new file mode 100644
index 0000000..66297e5
--- /dev/null
+++ b/date-fns/src/fp/getWeekOfMonthWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getWeekOfMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getWeekOfMonthWithOptions = convertToFP(fn, 2)
+
+export default getWeekOfMonthWithOptions
diff --git a/date-fns/src/fp/getWeekOfMonthWithOptions/index.js.flow b/date-fns/src/fp/getWeekOfMonthWithOptions/index.js.flow
new file mode 100644
index 0000000..d1b5c20
--- /dev/null
+++ b/date-fns/src/fp/getWeekOfMonthWithOptions/index.js.flow
@@ -0,0 +1,65 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ number
+>
diff --git a/date-fns/src/fp/getWeekWithOptions/index.d.ts b/date-fns/src/fp/getWeekWithOptions/index.d.ts
new file mode 100644
index 0000000..6f2de40
--- /dev/null
+++ b/date-fns/src/fp/getWeekWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeekWithOptions } from 'date-fns/fp'
+export default getWeekWithOptions
diff --git a/date-fns/src/fp/getWeekWithOptions/index.js b/date-fns/src/fp/getWeekWithOptions/index.js
new file mode 100644
index 0000000..a7e0c84
--- /dev/null
+++ b/date-fns/src/fp/getWeekWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getWeekWithOptions = convertToFP(fn, 2)
+
+export default getWeekWithOptions
diff --git a/date-fns/src/fp/getWeekWithOptions/index.js.flow b/date-fns/src/fp/getWeekWithOptions/index.js.flow
new file mode 100644
index 0000000..970a659
--- /dev/null
+++ b/date-fns/src/fp/getWeekWithOptions/index.js.flow
@@ -0,0 +1,66 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ number
+>
diff --git a/date-fns/src/fp/getWeekYear/index.d.ts b/date-fns/src/fp/getWeekYear/index.d.ts
new file mode 100644
index 0000000..7cf37e0
--- /dev/null
+++ b/date-fns/src/fp/getWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeekYear } from 'date-fns/fp'
+export default getWeekYear
diff --git a/date-fns/src/fp/getWeekYear/index.js b/date-fns/src/fp/getWeekYear/index.js
new file mode 100644
index 0000000..7396dac
--- /dev/null
+++ b/date-fns/src/fp/getWeekYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getWeekYear = convertToFP(fn, 1)
+
+export default getWeekYear
diff --git a/date-fns/src/fp/getWeekYear/index.js.flow b/date-fns/src/fp/getWeekYear/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getWeekYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getWeekYearWithOptions/index.d.ts b/date-fns/src/fp/getWeekYearWithOptions/index.d.ts
new file mode 100644
index 0000000..d33a37a
--- /dev/null
+++ b/date-fns/src/fp/getWeekYearWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeekYearWithOptions } from 'date-fns/fp'
+export default getWeekYearWithOptions
diff --git a/date-fns/src/fp/getWeekYearWithOptions/index.js b/date-fns/src/fp/getWeekYearWithOptions/index.js
new file mode 100644
index 0000000..86888f0
--- /dev/null
+++ b/date-fns/src/fp/getWeekYearWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getWeekYearWithOptions = convertToFP(fn, 2)
+
+export default getWeekYearWithOptions
diff --git a/date-fns/src/fp/getWeekYearWithOptions/index.js.flow b/date-fns/src/fp/getWeekYearWithOptions/index.js.flow
new file mode 100644
index 0000000..970a659
--- /dev/null
+++ b/date-fns/src/fp/getWeekYearWithOptions/index.js.flow
@@ -0,0 +1,66 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ number
+>
diff --git a/date-fns/src/fp/getWeeksInMonth/index.d.ts b/date-fns/src/fp/getWeeksInMonth/index.d.ts
new file mode 100644
index 0000000..2de5a9c
--- /dev/null
+++ b/date-fns/src/fp/getWeeksInMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeeksInMonth } from 'date-fns/fp'
+export default getWeeksInMonth
diff --git a/date-fns/src/fp/getWeeksInMonth/index.js b/date-fns/src/fp/getWeeksInMonth/index.js
new file mode 100644
index 0000000..e757062
--- /dev/null
+++ b/date-fns/src/fp/getWeeksInMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getWeeksInMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getWeeksInMonth = convertToFP(fn, 1)
+
+export default getWeeksInMonth
diff --git a/date-fns/src/fp/getWeeksInMonth/index.js.flow b/date-fns/src/fp/getWeeksInMonth/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getWeeksInMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/getWeeksInMonthWithOptions/index.d.ts b/date-fns/src/fp/getWeeksInMonthWithOptions/index.d.ts
new file mode 100644
index 0000000..9016970
--- /dev/null
+++ b/date-fns/src/fp/getWeeksInMonthWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeeksInMonthWithOptions } from 'date-fns/fp'
+export default getWeeksInMonthWithOptions
diff --git a/date-fns/src/fp/getWeeksInMonthWithOptions/index.js b/date-fns/src/fp/getWeeksInMonthWithOptions/index.js
new file mode 100644
index 0000000..086072f
--- /dev/null
+++ b/date-fns/src/fp/getWeeksInMonthWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getWeeksInMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getWeeksInMonthWithOptions = convertToFP(fn, 2)
+
+export default getWeeksInMonthWithOptions
diff --git a/date-fns/src/fp/getWeeksInMonthWithOptions/index.js.flow b/date-fns/src/fp/getWeeksInMonthWithOptions/index.js.flow
new file mode 100644
index 0000000..d1b5c20
--- /dev/null
+++ b/date-fns/src/fp/getWeeksInMonthWithOptions/index.js.flow
@@ -0,0 +1,65 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ number
+>
diff --git a/date-fns/src/fp/getYear/index.d.ts b/date-fns/src/fp/getYear/index.d.ts
new file mode 100644
index 0000000..603dc71
--- /dev/null
+++ b/date-fns/src/fp/getYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getYear } from 'date-fns/fp'
+export default getYear
diff --git a/date-fns/src/fp/getYear/index.js b/date-fns/src/fp/getYear/index.js
new file mode 100644
index 0000000..60af7f3
--- /dev/null
+++ b/date-fns/src/fp/getYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../getYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var getYear = convertToFP(fn, 1)
+
+export default getYear
diff --git a/date-fns/src/fp/getYear/index.js.flow b/date-fns/src/fp/getYear/index.js.flow
new file mode 100644
index 0000000..7a34c65
--- /dev/null
+++ b/date-fns/src/fp/getYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, number>
diff --git a/date-fns/src/fp/hoursToMilliseconds/index.d.ts b/date-fns/src/fp/hoursToMilliseconds/index.d.ts
new file mode 100644
index 0000000..14caeac
--- /dev/null
+++ b/date-fns/src/fp/hoursToMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hoursToMilliseconds } from 'date-fns/fp'
+export default hoursToMilliseconds
diff --git a/date-fns/src/fp/hoursToMilliseconds/index.js b/date-fns/src/fp/hoursToMilliseconds/index.js
new file mode 100644
index 0000000..103efa8
--- /dev/null
+++ b/date-fns/src/fp/hoursToMilliseconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../hoursToMilliseconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var hoursToMilliseconds = convertToFP(fn, 1)
+
+export default hoursToMilliseconds
diff --git a/date-fns/src/fp/hoursToMilliseconds/index.js.flow b/date-fns/src/fp/hoursToMilliseconds/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/hoursToMilliseconds/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/hoursToMinutes/index.d.ts b/date-fns/src/fp/hoursToMinutes/index.d.ts
new file mode 100644
index 0000000..e834de4
--- /dev/null
+++ b/date-fns/src/fp/hoursToMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hoursToMinutes } from 'date-fns/fp'
+export default hoursToMinutes
diff --git a/date-fns/src/fp/hoursToMinutes/index.js b/date-fns/src/fp/hoursToMinutes/index.js
new file mode 100644
index 0000000..dd50115
--- /dev/null
+++ b/date-fns/src/fp/hoursToMinutes/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../hoursToMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var hoursToMinutes = convertToFP(fn, 1)
+
+export default hoursToMinutes
diff --git a/date-fns/src/fp/hoursToMinutes/index.js.flow b/date-fns/src/fp/hoursToMinutes/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/hoursToMinutes/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/hoursToSeconds/index.d.ts b/date-fns/src/fp/hoursToSeconds/index.d.ts
new file mode 100644
index 0000000..35a5bfd
--- /dev/null
+++ b/date-fns/src/fp/hoursToSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hoursToSeconds } from 'date-fns/fp'
+export default hoursToSeconds
diff --git a/date-fns/src/fp/hoursToSeconds/index.js b/date-fns/src/fp/hoursToSeconds/index.js
new file mode 100644
index 0000000..f24c47d
--- /dev/null
+++ b/date-fns/src/fp/hoursToSeconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../hoursToSeconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var hoursToSeconds = convertToFP(fn, 1)
+
+export default hoursToSeconds
diff --git a/date-fns/src/fp/hoursToSeconds/index.js.flow b/date-fns/src/fp/hoursToSeconds/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/hoursToSeconds/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/index.js b/date-fns/src/fp/index.js
new file mode 100644
index 0000000..2caa61c
--- /dev/null
+++ b/date-fns/src/fp/index.js
@@ -0,0 +1,241 @@
+// This file is generated automatically by `scripts/build/indices.js`. Please, don't change it.
+
+export { default as add } from './add/index'
+export { default as addBusinessDays } from './addBusinessDays/index'
+export { default as addDays } from './addDays/index'
+export { default as addHours } from './addHours/index'
+export { default as addISOWeekYears } from './addISOWeekYears/index'
+export { default as addMilliseconds } from './addMilliseconds/index'
+export { default as addMinutes } from './addMinutes/index'
+export { default as addMonths } from './addMonths/index'
+export { default as addQuarters } from './addQuarters/index'
+export { default as addSeconds } from './addSeconds/index'
+export { default as addWeeks } from './addWeeks/index'
+export { default as addYears } from './addYears/index'
+export { default as areIntervalsOverlapping } from './areIntervalsOverlapping/index'
+export { default as areIntervalsOverlappingWithOptions } from './areIntervalsOverlappingWithOptions/index'
+export { default as closestIndexTo } from './closestIndexTo/index'
+export { default as closestTo } from './closestTo/index'
+export { default as compareAsc } from './compareAsc/index'
+export { default as compareDesc } from './compareDesc/index'
+export { default as daysToWeeks } from './daysToWeeks/index'
+export { default as differenceInBusinessDays } from './differenceInBusinessDays/index'
+export { default as differenceInCalendarDays } from './differenceInCalendarDays/index'
+export { default as differenceInCalendarISOWeekYears } from './differenceInCalendarISOWeekYears/index'
+export { default as differenceInCalendarISOWeeks } from './differenceInCalendarISOWeeks/index'
+export { default as differenceInCalendarMonths } from './differenceInCalendarMonths/index'
+export { default as differenceInCalendarQuarters } from './differenceInCalendarQuarters/index'
+export { default as differenceInCalendarWeeks } from './differenceInCalendarWeeks/index'
+export { default as differenceInCalendarWeeksWithOptions } from './differenceInCalendarWeeksWithOptions/index'
+export { default as differenceInCalendarYears } from './differenceInCalendarYears/index'
+export { default as differenceInDays } from './differenceInDays/index'
+export { default as differenceInHours } from './differenceInHours/index'
+export { default as differenceInISOWeekYears } from './differenceInISOWeekYears/index'
+export { default as differenceInMilliseconds } from './differenceInMilliseconds/index'
+export { default as differenceInMinutes } from './differenceInMinutes/index'
+export { default as differenceInMonths } from './differenceInMonths/index'
+export { default as differenceInQuarters } from './differenceInQuarters/index'
+export { default as differenceInSeconds } from './differenceInSeconds/index'
+export { default as differenceInWeeks } from './differenceInWeeks/index'
+export { default as differenceInYears } from './differenceInYears/index'
+export { default as eachDayOfInterval } from './eachDayOfInterval/index'
+export { default as eachDayOfIntervalWithOptions } from './eachDayOfIntervalWithOptions/index'
+export { default as eachHourOfInterval } from './eachHourOfInterval/index'
+export { default as eachHourOfIntervalWithOptions } from './eachHourOfIntervalWithOptions/index'
+export { default as eachMinuteOfInterval } from './eachMinuteOfInterval/index'
+export { default as eachMinuteOfIntervalWithOptions } from './eachMinuteOfIntervalWithOptions/index'
+export { default as eachMonthOfInterval } from './eachMonthOfInterval/index'
+export { default as eachQuarterOfInterval } from './eachQuarterOfInterval/index'
+export { default as eachWeekOfInterval } from './eachWeekOfInterval/index'
+export { default as eachWeekOfIntervalWithOptions } from './eachWeekOfIntervalWithOptions/index'
+export { default as eachWeekendOfInterval } from './eachWeekendOfInterval/index'
+export { default as eachWeekendOfMonth } from './eachWeekendOfMonth/index'
+export { default as eachWeekendOfYear } from './eachWeekendOfYear/index'
+export { default as eachYearOfInterval } from './eachYearOfInterval/index'
+export { default as endOfDay } from './endOfDay/index'
+export { default as endOfDecade } from './endOfDecade/index'
+export { default as endOfDecadeWithOptions } from './endOfDecadeWithOptions/index'
+export { default as endOfHour } from './endOfHour/index'
+export { default as endOfISOWeek } from './endOfISOWeek/index'
+export { default as endOfISOWeekYear } from './endOfISOWeekYear/index'
+export { default as endOfMinute } from './endOfMinute/index'
+export { default as endOfMonth } from './endOfMonth/index'
+export { default as endOfQuarter } from './endOfQuarter/index'
+export { default as endOfSecond } from './endOfSecond/index'
+export { default as endOfWeek } from './endOfWeek/index'
+export { default as endOfWeekWithOptions } from './endOfWeekWithOptions/index'
+export { default as endOfYear } from './endOfYear/index'
+export { default as format } from './format/index'
+export { default as formatDistance } from './formatDistance/index'
+export { default as formatDistanceStrict } from './formatDistanceStrict/index'
+export { default as formatDistanceStrictWithOptions } from './formatDistanceStrictWithOptions/index'
+export { default as formatDistanceWithOptions } from './formatDistanceWithOptions/index'
+export { default as formatDuration } from './formatDuration/index'
+export { default as formatDurationWithOptions } from './formatDurationWithOptions/index'
+export { default as formatISO } from './formatISO/index'
+export { default as formatISO9075 } from './formatISO9075/index'
+export { default as formatISO9075WithOptions } from './formatISO9075WithOptions/index'
+export { default as formatISODuration } from './formatISODuration/index'
+export { default as formatISOWithOptions } from './formatISOWithOptions/index'
+export { default as formatRFC3339 } from './formatRFC3339/index'
+export { default as formatRFC3339WithOptions } from './formatRFC3339WithOptions/index'
+export { default as formatRFC7231 } from './formatRFC7231/index'
+export { default as formatRelative } from './formatRelative/index'
+export { default as formatRelativeWithOptions } from './formatRelativeWithOptions/index'
+export { default as formatWithOptions } from './formatWithOptions/index'
+export { default as fromUnixTime } from './fromUnixTime/index'
+export { default as getDate } from './getDate/index'
+export { default as getDay } from './getDay/index'
+export { default as getDayOfYear } from './getDayOfYear/index'
+export { default as getDaysInMonth } from './getDaysInMonth/index'
+export { default as getDaysInYear } from './getDaysInYear/index'
+export { default as getDecade } from './getDecade/index'
+export { default as getHours } from './getHours/index'
+export { default as getISODay } from './getISODay/index'
+export { default as getISOWeek } from './getISOWeek/index'
+export { default as getISOWeekYear } from './getISOWeekYear/index'
+export { default as getISOWeeksInYear } from './getISOWeeksInYear/index'
+export { default as getMilliseconds } from './getMilliseconds/index'
+export { default as getMinutes } from './getMinutes/index'
+export { default as getMonth } from './getMonth/index'
+export { default as getOverlappingDaysInIntervals } from './getOverlappingDaysInIntervals/index'
+export { default as getQuarter } from './getQuarter/index'
+export { default as getSeconds } from './getSeconds/index'
+export { default as getTime } from './getTime/index'
+export { default as getUnixTime } from './getUnixTime/index'
+export { default as getWeek } from './getWeek/index'
+export { default as getWeekOfMonth } from './getWeekOfMonth/index'
+export { default as getWeekOfMonthWithOptions } from './getWeekOfMonthWithOptions/index'
+export { default as getWeekWithOptions } from './getWeekWithOptions/index'
+export { default as getWeekYear } from './getWeekYear/index'
+export { default as getWeekYearWithOptions } from './getWeekYearWithOptions/index'
+export { default as getWeeksInMonth } from './getWeeksInMonth/index'
+export { default as getWeeksInMonthWithOptions } from './getWeeksInMonthWithOptions/index'
+export { default as getYear } from './getYear/index'
+export { default as hoursToMilliseconds } from './hoursToMilliseconds/index'
+export { default as hoursToMinutes } from './hoursToMinutes/index'
+export { default as hoursToSeconds } from './hoursToSeconds/index'
+export { default as intervalToDuration } from './intervalToDuration/index'
+export { default as intlFormat } from './intlFormat/index'
+export { default as isAfter } from './isAfter/index'
+export { default as isBefore } from './isBefore/index'
+export { default as isDate } from './isDate/index'
+export { default as isEqual } from './isEqual/index'
+export { default as isExists } from './isExists/index'
+export { default as isFirstDayOfMonth } from './isFirstDayOfMonth/index'
+export { default as isFriday } from './isFriday/index'
+export { default as isLastDayOfMonth } from './isLastDayOfMonth/index'
+export { default as isLeapYear } from './isLeapYear/index'
+export { default as isMatch } from './isMatch/index'
+export { default as isMatchWithOptions } from './isMatchWithOptions/index'
+export { default as isMonday } from './isMonday/index'
+export { default as isSameDay } from './isSameDay/index'
+export { default as isSameHour } from './isSameHour/index'
+export { default as isSameISOWeek } from './isSameISOWeek/index'
+export { default as isSameISOWeekYear } from './isSameISOWeekYear/index'
+export { default as isSameMinute } from './isSameMinute/index'
+export { default as isSameMonth } from './isSameMonth/index'
+export { default as isSameQuarter } from './isSameQuarter/index'
+export { default as isSameSecond } from './isSameSecond/index'
+export { default as isSameWeek } from './isSameWeek/index'
+export { default as isSameWeekWithOptions } from './isSameWeekWithOptions/index'
+export { default as isSameYear } from './isSameYear/index'
+export { default as isSaturday } from './isSaturday/index'
+export { default as isSunday } from './isSunday/index'
+export { default as isThursday } from './isThursday/index'
+export { default as isTuesday } from './isTuesday/index'
+export { default as isValid } from './isValid/index'
+export { default as isWednesday } from './isWednesday/index'
+export { default as isWeekend } from './isWeekend/index'
+export { default as isWithinInterval } from './isWithinInterval/index'
+export { default as lastDayOfDecade } from './lastDayOfDecade/index'
+export { default as lastDayOfISOWeek } from './lastDayOfISOWeek/index'
+export { default as lastDayOfISOWeekYear } from './lastDayOfISOWeekYear/index'
+export { default as lastDayOfMonth } from './lastDayOfMonth/index'
+export { default as lastDayOfQuarter } from './lastDayOfQuarter/index'
+export { default as lastDayOfQuarterWithOptions } from './lastDayOfQuarterWithOptions/index'
+export { default as lastDayOfWeek } from './lastDayOfWeek/index'
+export { default as lastDayOfWeekWithOptions } from './lastDayOfWeekWithOptions/index'
+export { default as lastDayOfYear } from './lastDayOfYear/index'
+export { default as lightFormat } from './lightFormat/index'
+export { default as max } from './max/index'
+export { default as milliseconds } from './milliseconds/index'
+export { default as millisecondsToHours } from './millisecondsToHours/index'
+export { default as millisecondsToMinutes } from './millisecondsToMinutes/index'
+export { default as millisecondsToSeconds } from './millisecondsToSeconds/index'
+export { default as min } from './min/index'
+export { default as minutesToHours } from './minutesToHours/index'
+export { default as minutesToMilliseconds } from './minutesToMilliseconds/index'
+export { default as minutesToSeconds } from './minutesToSeconds/index'
+export { default as monthsToQuarters } from './monthsToQuarters/index'
+export { default as monthsToYears } from './monthsToYears/index'
+export { default as nextDay } from './nextDay/index'
+export { default as nextFriday } from './nextFriday/index'
+export { default as nextMonday } from './nextMonday/index'
+export { default as nextSaturday } from './nextSaturday/index'
+export { default as nextSunday } from './nextSunday/index'
+export { default as nextThursday } from './nextThursday/index'
+export { default as nextTuesday } from './nextTuesday/index'
+export { default as nextWednesday } from './nextWednesday/index'
+export { default as parse } from './parse/index'
+export { default as parseISO } from './parseISO/index'
+export { default as parseISOWithOptions } from './parseISOWithOptions/index'
+export { default as parseJSON } from './parseJSON/index'
+export { default as parseWithOptions } from './parseWithOptions/index'
+export { default as quartersToMonths } from './quartersToMonths/index'
+export { default as quartersToYears } from './quartersToYears/index'
+export { default as roundToNearestMinutes } from './roundToNearestMinutes/index'
+export { default as roundToNearestMinutesWithOptions } from './roundToNearestMinutesWithOptions/index'
+export { default as secondsToHours } from './secondsToHours/index'
+export { default as secondsToMilliseconds } from './secondsToMilliseconds/index'
+export { default as secondsToMinutes } from './secondsToMinutes/index'
+export { default as set } from './set/index'
+export { default as setDate } from './setDate/index'
+export { default as setDay } from './setDay/index'
+export { default as setDayOfYear } from './setDayOfYear/index'
+export { default as setDayWithOptions } from './setDayWithOptions/index'
+export { default as setHours } from './setHours/index'
+export { default as setISODay } from './setISODay/index'
+export { default as setISOWeek } from './setISOWeek/index'
+export { default as setISOWeekYear } from './setISOWeekYear/index'
+export { default as setMilliseconds } from './setMilliseconds/index'
+export { default as setMinutes } from './setMinutes/index'
+export { default as setMonth } from './setMonth/index'
+export { default as setQuarter } from './setQuarter/index'
+export { default as setSeconds } from './setSeconds/index'
+export { default as setWeek } from './setWeek/index'
+export { default as setWeekWithOptions } from './setWeekWithOptions/index'
+export { default as setWeekYear } from './setWeekYear/index'
+export { default as setWeekYearWithOptions } from './setWeekYearWithOptions/index'
+export { default as setYear } from './setYear/index'
+export { default as startOfDay } from './startOfDay/index'
+export { default as startOfDecade } from './startOfDecade/index'
+export { default as startOfHour } from './startOfHour/index'
+export { default as startOfISOWeek } from './startOfISOWeek/index'
+export { default as startOfISOWeekYear } from './startOfISOWeekYear/index'
+export { default as startOfMinute } from './startOfMinute/index'
+export { default as startOfMonth } from './startOfMonth/index'
+export { default as startOfQuarter } from './startOfQuarter/index'
+export { default as startOfSecond } from './startOfSecond/index'
+export { default as startOfWeek } from './startOfWeek/index'
+export { default as startOfWeekWithOptions } from './startOfWeekWithOptions/index'
+export { default as startOfWeekYear } from './startOfWeekYear/index'
+export { default as startOfWeekYearWithOptions } from './startOfWeekYearWithOptions/index'
+export { default as startOfYear } from './startOfYear/index'
+export { default as sub } from './sub/index'
+export { default as subBusinessDays } from './subBusinessDays/index'
+export { default as subDays } from './subDays/index'
+export { default as subHours } from './subHours/index'
+export { default as subISOWeekYears } from './subISOWeekYears/index'
+export { default as subMilliseconds } from './subMilliseconds/index'
+export { default as subMinutes } from './subMinutes/index'
+export { default as subMonths } from './subMonths/index'
+export { default as subQuarters } from './subQuarters/index'
+export { default as subSeconds } from './subSeconds/index'
+export { default as subWeeks } from './subWeeks/index'
+export { default as subYears } from './subYears/index'
+export { default as toDate } from './toDate/index'
+export { default as weeksToDays } from './weeksToDays/index'
+export { default as yearsToMonths } from './yearsToMonths/index'
+export { default as yearsToQuarters } from './yearsToQuarters/index'
+export * from '../constants/index'
diff --git a/date-fns/src/fp/index.js.flow b/date-fns/src/fp/index.js.flow
new file mode 100644
index 0000000..1db8a1d
--- /dev/null
+++ b/date-fns/src/fp/index.js.flow
@@ -0,0 +1,625 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+type CurriedFn4<A, B, C, D, R> = <A>(
+ a: A
+) =>
+ | CurriedFn3<B, C, D, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) =>
+ | CurriedFn2<C, D, R>
+ | (<A, B, C>(
+ a: A,
+ b: B,
+ c: C
+ ) => CurriedFn1<D, R> | (<A, B, C, D>(a: A, b: B, c: C, d: D) => R)))
+
+declare module.exports: {
+ add: CurriedFn2<Duration, Date | number, Date>,
+ addBusinessDays: CurriedFn2<number, Date | number, Date>,
+ addDays: CurriedFn2<number, Date | number, Date>,
+ addHours: CurriedFn2<number, Date | number, Date>,
+ addISOWeekYears: CurriedFn2<number, Date | number, Date>,
+ addMilliseconds: CurriedFn2<number, Date | number, Date>,
+ addMinutes: CurriedFn2<number, Date | number, Date>,
+ addMonths: CurriedFn2<number, Date | number, Date>,
+ addQuarters: CurriedFn2<number, Date | number, Date>,
+ addSeconds: CurriedFn2<number, Date | number, Date>,
+ addWeeks: CurriedFn2<number, Date | number, Date>,
+ addYears: CurriedFn2<number, Date | number, Date>,
+ areIntervalsOverlapping: CurriedFn2<Interval, Interval, boolean>,
+ areIntervalsOverlappingWithOptions: CurriedFn3<
+ {
+ inclusive?: boolean,
+ },
+ Interval,
+ Interval,
+ boolean
+ >,
+ closestIndexTo: CurriedFn2<(Date | number)[], Date | number, number>,
+ closestTo: CurriedFn2<(Date | number)[], Date | number, Date>,
+ compareAsc: CurriedFn2<Date | number, Date | number, number>,
+ compareDesc: CurriedFn2<Date | number, Date | number, number>,
+ daysToWeeks: CurriedFn1<number, number>,
+ differenceInBusinessDays: CurriedFn2<Date | number, Date | number, number>,
+ differenceInCalendarDays: CurriedFn2<Date | number, Date | number, number>,
+ differenceInCalendarISOWeeks: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >,
+ differenceInCalendarISOWeekYears: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >,
+ differenceInCalendarMonths: CurriedFn2<Date | number, Date | number, number>,
+ differenceInCalendarQuarters: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >,
+ differenceInCalendarWeeks: CurriedFn2<Date | number, Date | number, number>,
+ differenceInCalendarWeeksWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date | number,
+ number
+ >,
+ differenceInCalendarYears: CurriedFn2<Date | number, Date | number, number>,
+ differenceInDays: CurriedFn2<Date | number, Date | number, number>,
+ differenceInHours: CurriedFn2<Date | number, Date | number, number>,
+ differenceInISOWeekYears: CurriedFn2<Date | number, Date | number, number>,
+ differenceInMilliseconds: CurriedFn2<Date | number, Date | number, number>,
+ differenceInMinutes: CurriedFn2<Date | number, Date | number, number>,
+ differenceInMonths: CurriedFn2<Date | number, Date | number, number>,
+ differenceInQuarters: CurriedFn2<Date | number, Date | number, number>,
+ differenceInSeconds: CurriedFn2<Date | number, Date | number, number>,
+ differenceInWeeks: CurriedFn2<Date | number, Date | number, number>,
+ differenceInYears: CurriedFn2<Date | number, Date | number, number>,
+ eachDayOfInterval: CurriedFn1<Interval, Date[]>,
+ eachDayOfIntervalWithOptions: CurriedFn2<
+ {
+ step?: number,
+ },
+ Interval,
+ Date[]
+ >,
+ eachHourOfInterval: CurriedFn1<Interval, Date[]>,
+ eachHourOfIntervalWithOptions: CurriedFn2<
+ {
+ step?: number,
+ },
+ Interval,
+ Date[]
+ >,
+ eachMinuteOfInterval: CurriedFn1<Interval, Date[]>,
+ eachMinuteOfIntervalWithOptions: CurriedFn2<
+ {
+ step?: number,
+ },
+ Interval,
+ Date[]
+ >,
+ eachMonthOfInterval: CurriedFn1<Interval, Date[]>,
+ eachQuarterOfInterval: CurriedFn1<Interval, Date[]>,
+ eachWeekendOfInterval: CurriedFn1<Interval, Date[]>,
+ eachWeekendOfMonth: CurriedFn1<Date | number, Date[]>,
+ eachWeekendOfYear: CurriedFn1<Date | number, Date[]>,
+ eachWeekOfInterval: CurriedFn1<Interval, Date[]>,
+ eachWeekOfIntervalWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Interval,
+ Date[]
+ >,
+ eachYearOfInterval: CurriedFn1<Interval, Date[]>,
+ endOfDay: CurriedFn1<Date | number, Date>,
+ endOfDecade: CurriedFn1<Date | number, Date>,
+ endOfDecadeWithOptions: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2,
+ },
+ Date | number,
+ Date
+ >,
+ endOfHour: CurriedFn1<Date | number, Date>,
+ endOfISOWeek: CurriedFn1<Date | number, Date>,
+ endOfISOWeekYear: CurriedFn1<Date | number, Date>,
+ endOfMinute: CurriedFn1<Date | number, Date>,
+ endOfMonth: CurriedFn1<Date | number, Date>,
+ endOfQuarter: CurriedFn1<Date | number, Date>,
+ endOfSecond: CurriedFn1<Date | number, Date>,
+ endOfWeek: CurriedFn1<Date | number, Date>,
+ endOfWeekWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date
+ >,
+ endOfYear: CurriedFn1<Date | number, Date>,
+ format: CurriedFn2<string, Date | number, string>,
+ formatDistance: CurriedFn2<Date | number, Date | number, string>,
+ formatDistanceStrict: CurriedFn2<Date | number, Date | number, string>,
+ formatDistanceStrictWithOptions: CurriedFn3<
+ {
+ locale?: Locale,
+ roundingMethod?: 'floor' | 'ceil' | 'round',
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year',
+ addSuffix?: boolean,
+ },
+ Date | number,
+ Date | number,
+ string
+ >,
+ formatDistanceWithOptions: CurriedFn3<
+ {
+ locale?: Locale,
+ addSuffix?: boolean,
+ includeSeconds?: boolean,
+ },
+ Date | number,
+ Date | number,
+ string
+ >,
+ formatDuration: CurriedFn1<Duration, string>,
+ formatDurationWithOptions: CurriedFn2<
+ {
+ locale?: Locale,
+ delimiter?: string,
+ zero?: boolean,
+ format?: string[],
+ },
+ Duration,
+ string
+ >,
+ formatISO: CurriedFn1<Date | number, string>,
+ formatISO9075: CurriedFn1<Date | number, string>,
+ formatISO9075WithOptions: CurriedFn2<
+ {
+ representation?: 'complete' | 'date' | 'time',
+ format?: 'extended' | 'basic',
+ },
+ Date | number,
+ string
+ >,
+ formatISODuration: CurriedFn1<Duration, string>,
+ formatISOWithOptions: CurriedFn2<
+ {
+ representation?: 'complete' | 'date' | 'time',
+ format?: 'extended' | 'basic',
+ },
+ Date | number,
+ string
+ >,
+ formatRelative: CurriedFn2<Date | number, Date | number, string>,
+ formatRelativeWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date | number,
+ string
+ >,
+ formatRFC3339: CurriedFn1<Date | number, string>,
+ formatRFC3339WithOptions: CurriedFn2<
+ {
+ fractionDigits?: 0 | 1 | 2 | 3,
+ },
+ Date | number,
+ string
+ >,
+ formatRFC7231: CurriedFn1<Date | number, string>,
+ formatWithOptions: CurriedFn3<
+ {
+ useAdditionalDayOfYearTokens?: boolean,
+ useAdditionalWeekYearTokens?: boolean,
+ firstWeekContainsDate?: number,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ string,
+ Date | number,
+ string
+ >,
+ fromUnixTime: CurriedFn1<number, Date>,
+ getDate: CurriedFn1<Date | number, number>,
+ getDay: CurriedFn1<Date | number, 0 | 1 | 2 | 3 | 4 | 5 | 6>,
+ getDayOfYear: CurriedFn1<Date | number, number>,
+ getDaysInMonth: CurriedFn1<Date | number, number>,
+ getDaysInYear: CurriedFn1<Date | number, number>,
+ getDecade: CurriedFn1<Date | number, number>,
+ getHours: CurriedFn1<Date | number, number>,
+ getISODay: CurriedFn1<Date | number, number>,
+ getISOWeek: CurriedFn1<Date | number, number>,
+ getISOWeeksInYear: CurriedFn1<Date | number, number>,
+ getISOWeekYear: CurriedFn1<Date | number, number>,
+ getMilliseconds: CurriedFn1<Date | number, number>,
+ getMinutes: CurriedFn1<Date | number, number>,
+ getMonth: CurriedFn1<Date | number, number>,
+ getOverlappingDaysInIntervals: CurriedFn2<Interval, Interval, number>,
+ getQuarter: CurriedFn1<Date | number, number>,
+ getSeconds: CurriedFn1<Date | number, number>,
+ getTime: CurriedFn1<Date | number, number>,
+ getUnixTime: CurriedFn1<Date | number, number>,
+ getWeek: CurriedFn1<Date | number, number>,
+ getWeekOfMonth: CurriedFn1<Date | number, number>,
+ getWeekOfMonthWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ number
+ >,
+ getWeeksInMonth: CurriedFn1<Date | number, number>,
+ getWeeksInMonthWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ number
+ >,
+ getWeekWithOptions: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ number
+ >,
+ getWeekYear: CurriedFn1<Date | number, number>,
+ getWeekYearWithOptions: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ number
+ >,
+ getYear: CurriedFn1<Date | number, number>,
+ hoursToMilliseconds: CurriedFn1<number, number>,
+ hoursToMinutes: CurriedFn1<number, number>,
+ hoursToSeconds: CurriedFn1<number, number>,
+ intervalToDuration: CurriedFn1<Interval, Duration>,
+ intlFormat: CurriedFn3<
+ {
+ locale?: string | string[],
+ },
+ {
+ timeZone?: string,
+ hour12?: boolean,
+ formatMatcher?: 'basic' | 'best fit',
+ timeZoneName?: 'short' | 'long',
+ second?: 'numeric' | '2-digit',
+ minute?: 'numeric' | '2-digit',
+ hour?: 'numeric' | '2-digit',
+ day?: 'numeric' | '2-digit',
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long',
+ year?: 'numeric' | '2-digit',
+ era?: 'narrow' | 'short' | 'long',
+ weekday?: 'narrow' | 'short' | 'long',
+ localeMatcher?: 'lookup' | 'best fit',
+ },
+ Date | number,
+ string
+ >,
+ isAfter: CurriedFn2<Date | number, Date | number, boolean>,
+ isBefore: CurriedFn2<Date | number, Date | number, boolean>,
+ isDate: CurriedFn1<any, boolean>,
+ isEqual: CurriedFn2<Date | number, Date | number, boolean>,
+ isExists: CurriedFn3<number, number, number, boolean>,
+ isFirstDayOfMonth: CurriedFn1<Date | number, boolean>,
+ isFriday: CurriedFn1<Date | number, boolean>,
+ isLastDayOfMonth: CurriedFn1<Date | number, boolean>,
+ isLeapYear: CurriedFn1<Date | number, boolean>,
+ isMatch: CurriedFn2<string, string, boolean>,
+ isMatchWithOptions: CurriedFn3<
+ {
+ useAdditionalDayOfYearTokens?: boolean,
+ useAdditionalWeekYearTokens?: boolean,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ string,
+ string,
+ boolean
+ >,
+ isMonday: CurriedFn1<Date | number, boolean>,
+ isSameDay: CurriedFn2<Date | number, Date | number, boolean>,
+ isSameHour: CurriedFn2<Date | number, Date | number, boolean>,
+ isSameISOWeek: CurriedFn2<Date | number, Date | number, boolean>,
+ isSameISOWeekYear: CurriedFn2<Date | number, Date | number, boolean>,
+ isSameMinute: CurriedFn2<Date | number, Date | number, boolean>,
+ isSameMonth: CurriedFn2<Date | number, Date | number, boolean>,
+ isSameQuarter: CurriedFn2<Date | number, Date | number, boolean>,
+ isSameSecond: CurriedFn2<Date | number, Date | number, boolean>,
+ isSameWeek: CurriedFn2<Date | number, Date | number, boolean>,
+ isSameWeekWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date | number,
+ boolean
+ >,
+ isSameYear: CurriedFn2<Date | number, Date | number, boolean>,
+ isSaturday: CurriedFn1<Date | number, boolean>,
+ isSunday: CurriedFn1<Date | number, boolean>,
+ isThursday: CurriedFn1<Date | number, boolean>,
+ isTuesday: CurriedFn1<Date | number, boolean>,
+ isValid: CurriedFn1<any, boolean>,
+ isWednesday: CurriedFn1<Date | number, boolean>,
+ isWeekend: CurriedFn1<Date | number, boolean>,
+ isWithinInterval: CurriedFn2<Interval, Date | number, boolean>,
+ lastDayOfDecade: CurriedFn1<Date | number, Date>,
+ lastDayOfISOWeek: CurriedFn1<Date | number, Date>,
+ lastDayOfISOWeekYear: CurriedFn1<Date | number, Date>,
+ lastDayOfMonth: CurriedFn1<Date | number, Date>,
+ lastDayOfQuarter: CurriedFn1<Date | number, Date>,
+ lastDayOfQuarterWithOptions: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2,
+ },
+ Date | number,
+ Date
+ >,
+ lastDayOfWeek: CurriedFn1<Date | number, Date>,
+ lastDayOfWeekWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date
+ >,
+ lastDayOfYear: CurriedFn1<Date | number, Date>,
+ lightFormat: CurriedFn2<string, Date | number, string>,
+ max: CurriedFn1<(Date | number)[], Date>,
+ milliseconds: CurriedFn1<Duration, number>,
+ millisecondsToHours: CurriedFn1<number, number>,
+ millisecondsToMinutes: CurriedFn1<number, number>,
+ millisecondsToSeconds: CurriedFn1<number, number>,
+ min: CurriedFn1<(Date | number)[], Date>,
+ minutesToHours: CurriedFn1<number, number>,
+ minutesToMilliseconds: CurriedFn1<number, number>,
+ minutesToSeconds: CurriedFn1<number, number>,
+ monthsToQuarters: CurriedFn1<number, number>,
+ monthsToYears: CurriedFn1<number, number>,
+ nextDay: CurriedFn2<Day, Date | number, Date>,
+ nextFriday: CurriedFn1<Date | number, Date>,
+ nextMonday: CurriedFn1<Date | number, Date>,
+ nextSaturday: CurriedFn1<Date | number, Date>,
+ nextSunday: CurriedFn1<Date | number, Date>,
+ nextThursday: CurriedFn1<Date | number, Date>,
+ nextTuesday: CurriedFn1<Date | number, Date>,
+ nextWednesday: CurriedFn1<Date | number, Date>,
+ parse: CurriedFn3<Date | number, string, string, Date>,
+ parseISO: CurriedFn1<string, Date>,
+ parseISOWithOptions: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2,
+ },
+ string,
+ Date
+ >,
+ parseJSON: CurriedFn1<string | number | Date, Date>,
+ parseWithOptions: CurriedFn4<
+ {
+ useAdditionalDayOfYearTokens?: boolean,
+ useAdditionalWeekYearTokens?: boolean,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ string,
+ string,
+ Date
+ >,
+ quartersToMonths: CurriedFn1<number, number>,
+ quartersToYears: CurriedFn1<number, number>,
+ roundToNearestMinutes: CurriedFn1<Date | number, Date>,
+ roundToNearestMinutesWithOptions: CurriedFn2<
+ {
+ nearestTo?: number,
+ },
+ Date | number,
+ Date
+ >,
+ secondsToHours: CurriedFn1<number, number>,
+ secondsToMilliseconds: CurriedFn1<number, number>,
+ secondsToMinutes: CurriedFn1<number, number>,
+ set: CurriedFn2<
+ {
+ milliseconds?: number,
+ seconds?: number,
+ minutes?: number,
+ hours?: number,
+ date?: number,
+ month?: number,
+ year?: number,
+ },
+ Date | number,
+ Date
+ >,
+ setDate: CurriedFn2<number, Date | number, Date>,
+ setDay: CurriedFn2<number, Date | number, Date>,
+ setDayOfYear: CurriedFn2<number, Date | number, Date>,
+ setDayWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ number,
+ Date | number,
+ Date
+ >,
+ setHours: CurriedFn2<number, Date | number, Date>,
+ setISODay: CurriedFn2<number, Date | number, Date>,
+ setISOWeek: CurriedFn2<number, Date | number, Date>,
+ setISOWeekYear: CurriedFn2<number, Date | number, Date>,
+ setMilliseconds: CurriedFn2<number, Date | number, Date>,
+ setMinutes: CurriedFn2<number, Date | number, Date>,
+ setMonth: CurriedFn2<number, Date | number, Date>,
+ setQuarter: CurriedFn2<number, Date | number, Date>,
+ setSeconds: CurriedFn2<number, Date | number, Date>,
+ setWeek: CurriedFn2<number, Date | number, Date>,
+ setWeekWithOptions: CurriedFn3<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ number,
+ Date | number,
+ Date
+ >,
+ setWeekYear: CurriedFn2<number, Date | number, Date>,
+ setWeekYearWithOptions: CurriedFn3<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ number,
+ Date | number,
+ Date
+ >,
+ setYear: CurriedFn2<number, Date | number, Date>,
+ startOfDay: CurriedFn1<Date | number, Date>,
+ startOfDecade: CurriedFn1<Date | number, Date>,
+ startOfHour: CurriedFn1<Date | number, Date>,
+ startOfISOWeek: CurriedFn1<Date | number, Date>,
+ startOfISOWeekYear: CurriedFn1<Date | number, Date>,
+ startOfMinute: CurriedFn1<Date | number, Date>,
+ startOfMonth: CurriedFn1<Date | number, Date>,
+ startOfQuarter: CurriedFn1<Date | number, Date>,
+ startOfSecond: CurriedFn1<Date | number, Date>,
+ startOfWeek: CurriedFn1<Date | number, Date>,
+ startOfWeekWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date
+ >,
+ startOfWeekYear: CurriedFn1<Date | number, Date>,
+ startOfWeekYearWithOptions: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date
+ >,
+ startOfYear: CurriedFn1<Date | number, Date>,
+ sub: CurriedFn2<Duration, Date | number, Date>,
+ subBusinessDays: CurriedFn2<number, Date | number, Date>,
+ subDays: CurriedFn2<number, Date | number, Date>,
+ subHours: CurriedFn2<number, Date | number, Date>,
+ subISOWeekYears: CurriedFn2<number, Date | number, Date>,
+ subMilliseconds: CurriedFn2<number, Date | number, Date>,
+ subMinutes: CurriedFn2<number, Date | number, Date>,
+ subMonths: CurriedFn2<number, Date | number, Date>,
+ subQuarters: CurriedFn2<number, Date | number, Date>,
+ subSeconds: CurriedFn2<number, Date | number, Date>,
+ subWeeks: CurriedFn2<number, Date | number, Date>,
+ subYears: CurriedFn2<number, Date | number, Date>,
+ toDate: CurriedFn1<Date | number, Date>,
+ weeksToDays: CurriedFn1<number, number>,
+ yearsToMonths: CurriedFn1<number, number>,
+ yearsToQuarters: CurriedFn1<number, number>,
+ daysInWeek: number,
+ maxTime: number,
+ millisecondsInMinute: number,
+ millisecondsInHour: number,
+ millisecondsInSecond: number,
+ minTime: number,
+ minutesInHour: number,
+ monthsInQuarter: number,
+ monthsInYear: number,
+ quartersInYear: number,
+ secondsInHour: number,
+ secondsInMinute: number,
+}
diff --git a/date-fns/src/fp/intervalToDuration/index.d.ts b/date-fns/src/fp/intervalToDuration/index.d.ts
new file mode 100644
index 0000000..4b2381d
--- /dev/null
+++ b/date-fns/src/fp/intervalToDuration/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { intervalToDuration } from 'date-fns/fp'
+export default intervalToDuration
diff --git a/date-fns/src/fp/intervalToDuration/index.js b/date-fns/src/fp/intervalToDuration/index.js
new file mode 100644
index 0000000..d596acc
--- /dev/null
+++ b/date-fns/src/fp/intervalToDuration/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../intervalToDuration/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var intervalToDuration = convertToFP(fn, 1)
+
+export default intervalToDuration
diff --git a/date-fns/src/fp/intervalToDuration/index.js.flow b/date-fns/src/fp/intervalToDuration/index.js.flow
new file mode 100644
index 0000000..88f6ff0
--- /dev/null
+++ b/date-fns/src/fp/intervalToDuration/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Interval, Duration>
diff --git a/date-fns/src/fp/intlFormat/index.d.ts b/date-fns/src/fp/intlFormat/index.d.ts
new file mode 100644
index 0000000..38f78a7
--- /dev/null
+++ b/date-fns/src/fp/intlFormat/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { intlFormat } from 'date-fns/fp'
+export default intlFormat
diff --git a/date-fns/src/fp/intlFormat/index.js b/date-fns/src/fp/intlFormat/index.js
new file mode 100644
index 0000000..8bd9e7c
--- /dev/null
+++ b/date-fns/src/fp/intlFormat/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../intlFormat/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var intlFormat = convertToFP(fn, 3)
+
+export default intlFormat
diff --git a/date-fns/src/fp/intlFormat/index.js.flow b/date-fns/src/fp/intlFormat/index.js.flow
new file mode 100644
index 0000000..c104dcf
--- /dev/null
+++ b/date-fns/src/fp/intlFormat/index.js.flow
@@ -0,0 +1,88 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ locale?: string | string[],
+ },
+ {
+ timeZone?: string,
+ hour12?: boolean,
+ formatMatcher?: 'basic' | 'best fit',
+ timeZoneName?: 'short' | 'long',
+ second?: 'numeric' | '2-digit',
+ minute?: 'numeric' | '2-digit',
+ hour?: 'numeric' | '2-digit',
+ day?: 'numeric' | '2-digit',
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long',
+ year?: 'numeric' | '2-digit',
+ era?: 'narrow' | 'short' | 'long',
+ weekday?: 'narrow' | 'short' | 'long',
+ localeMatcher?: 'lookup' | 'best fit',
+ },
+ Date | number,
+ string
+>
diff --git a/date-fns/src/fp/isAfter/index.d.ts b/date-fns/src/fp/isAfter/index.d.ts
new file mode 100644
index 0000000..de8ba72
--- /dev/null
+++ b/date-fns/src/fp/isAfter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isAfter } from 'date-fns/fp'
+export default isAfter
diff --git a/date-fns/src/fp/isAfter/index.js b/date-fns/src/fp/isAfter/index.js
new file mode 100644
index 0000000..a754322
--- /dev/null
+++ b/date-fns/src/fp/isAfter/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isAfter/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isAfter = convertToFP(fn, 2)
+
+export default isAfter
diff --git a/date-fns/src/fp/isAfter/index.js.flow b/date-fns/src/fp/isAfter/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isAfter/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isBefore/index.d.ts b/date-fns/src/fp/isBefore/index.d.ts
new file mode 100644
index 0000000..d289198
--- /dev/null
+++ b/date-fns/src/fp/isBefore/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isBefore } from 'date-fns/fp'
+export default isBefore
diff --git a/date-fns/src/fp/isBefore/index.js b/date-fns/src/fp/isBefore/index.js
new file mode 100644
index 0000000..4b9ec17
--- /dev/null
+++ b/date-fns/src/fp/isBefore/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isBefore/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isBefore = convertToFP(fn, 2)
+
+export default isBefore
diff --git a/date-fns/src/fp/isBefore/index.js.flow b/date-fns/src/fp/isBefore/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isBefore/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isDate/index.d.ts b/date-fns/src/fp/isDate/index.d.ts
new file mode 100644
index 0000000..6f120ce
--- /dev/null
+++ b/date-fns/src/fp/isDate/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isDate } from 'date-fns/fp'
+export default isDate
diff --git a/date-fns/src/fp/isDate/index.js b/date-fns/src/fp/isDate/index.js
new file mode 100644
index 0000000..77f01e7
--- /dev/null
+++ b/date-fns/src/fp/isDate/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isDate/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isDate = convertToFP(fn, 1)
+
+export default isDate
diff --git a/date-fns/src/fp/isDate/index.js.flow b/date-fns/src/fp/isDate/index.js.flow
new file mode 100644
index 0000000..62e70e2
--- /dev/null
+++ b/date-fns/src/fp/isDate/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<any, boolean>
diff --git a/date-fns/src/fp/isEqual/index.d.ts b/date-fns/src/fp/isEqual/index.d.ts
new file mode 100644
index 0000000..b21d398
--- /dev/null
+++ b/date-fns/src/fp/isEqual/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isEqual } from 'date-fns/fp'
+export default isEqual
diff --git a/date-fns/src/fp/isEqual/index.js b/date-fns/src/fp/isEqual/index.js
new file mode 100644
index 0000000..bdc4dec
--- /dev/null
+++ b/date-fns/src/fp/isEqual/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isEqual/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isEqual = convertToFP(fn, 2)
+
+export default isEqual
diff --git a/date-fns/src/fp/isEqual/index.js.flow b/date-fns/src/fp/isEqual/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isEqual/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isExists/index.d.ts b/date-fns/src/fp/isExists/index.d.ts
new file mode 100644
index 0000000..e4ccb78
--- /dev/null
+++ b/date-fns/src/fp/isExists/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isExists } from 'date-fns/fp'
+export default isExists
diff --git a/date-fns/src/fp/isExists/index.js b/date-fns/src/fp/isExists/index.js
new file mode 100644
index 0000000..70789f2
--- /dev/null
+++ b/date-fns/src/fp/isExists/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isExists/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isExists = convertToFP(fn, 3)
+
+export default isExists
diff --git a/date-fns/src/fp/isExists/index.js.flow b/date-fns/src/fp/isExists/index.js.flow
new file mode 100644
index 0000000..2af9fe9
--- /dev/null
+++ b/date-fns/src/fp/isExists/index.js.flow
@@ -0,0 +1,67 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<number, number, number, boolean>
diff --git a/date-fns/src/fp/isFirstDayOfMonth/index.d.ts b/date-fns/src/fp/isFirstDayOfMonth/index.d.ts
new file mode 100644
index 0000000..e097310
--- /dev/null
+++ b/date-fns/src/fp/isFirstDayOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isFirstDayOfMonth } from 'date-fns/fp'
+export default isFirstDayOfMonth
diff --git a/date-fns/src/fp/isFirstDayOfMonth/index.js b/date-fns/src/fp/isFirstDayOfMonth/index.js
new file mode 100644
index 0000000..84365f8
--- /dev/null
+++ b/date-fns/src/fp/isFirstDayOfMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isFirstDayOfMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isFirstDayOfMonth = convertToFP(fn, 1)
+
+export default isFirstDayOfMonth
diff --git a/date-fns/src/fp/isFirstDayOfMonth/index.js.flow b/date-fns/src/fp/isFirstDayOfMonth/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isFirstDayOfMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isFriday/index.d.ts b/date-fns/src/fp/isFriday/index.d.ts
new file mode 100644
index 0000000..cdab1b1
--- /dev/null
+++ b/date-fns/src/fp/isFriday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isFriday } from 'date-fns/fp'
+export default isFriday
diff --git a/date-fns/src/fp/isFriday/index.js b/date-fns/src/fp/isFriday/index.js
new file mode 100644
index 0000000..01314a7
--- /dev/null
+++ b/date-fns/src/fp/isFriday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isFriday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isFriday = convertToFP(fn, 1)
+
+export default isFriday
diff --git a/date-fns/src/fp/isFriday/index.js.flow b/date-fns/src/fp/isFriday/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isFriday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isLastDayOfMonth/index.d.ts b/date-fns/src/fp/isLastDayOfMonth/index.d.ts
new file mode 100644
index 0000000..33750f0
--- /dev/null
+++ b/date-fns/src/fp/isLastDayOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isLastDayOfMonth } from 'date-fns/fp'
+export default isLastDayOfMonth
diff --git a/date-fns/src/fp/isLastDayOfMonth/index.js b/date-fns/src/fp/isLastDayOfMonth/index.js
new file mode 100644
index 0000000..58bf400
--- /dev/null
+++ b/date-fns/src/fp/isLastDayOfMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isLastDayOfMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isLastDayOfMonth = convertToFP(fn, 1)
+
+export default isLastDayOfMonth
diff --git a/date-fns/src/fp/isLastDayOfMonth/index.js.flow b/date-fns/src/fp/isLastDayOfMonth/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isLastDayOfMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isLeapYear/index.d.ts b/date-fns/src/fp/isLeapYear/index.d.ts
new file mode 100644
index 0000000..c92bce3
--- /dev/null
+++ b/date-fns/src/fp/isLeapYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isLeapYear } from 'date-fns/fp'
+export default isLeapYear
diff --git a/date-fns/src/fp/isLeapYear/index.js b/date-fns/src/fp/isLeapYear/index.js
new file mode 100644
index 0000000..babf413
--- /dev/null
+++ b/date-fns/src/fp/isLeapYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isLeapYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isLeapYear = convertToFP(fn, 1)
+
+export default isLeapYear
diff --git a/date-fns/src/fp/isLeapYear/index.js.flow b/date-fns/src/fp/isLeapYear/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isLeapYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isMatch/index.d.ts b/date-fns/src/fp/isMatch/index.d.ts
new file mode 100644
index 0000000..5085afa
--- /dev/null
+++ b/date-fns/src/fp/isMatch/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isMatch } from 'date-fns/fp'
+export default isMatch
diff --git a/date-fns/src/fp/isMatch/index.js b/date-fns/src/fp/isMatch/index.js
new file mode 100644
index 0000000..95e8e25
--- /dev/null
+++ b/date-fns/src/fp/isMatch/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isMatch/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isMatch = convertToFP(fn, 2)
+
+export default isMatch
diff --git a/date-fns/src/fp/isMatch/index.js.flow b/date-fns/src/fp/isMatch/index.js.flow
new file mode 100644
index 0000000..9eb7ae0
--- /dev/null
+++ b/date-fns/src/fp/isMatch/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<string, string, boolean>
diff --git a/date-fns/src/fp/isMatchWithOptions/index.d.ts b/date-fns/src/fp/isMatchWithOptions/index.d.ts
new file mode 100644
index 0000000..4645250
--- /dev/null
+++ b/date-fns/src/fp/isMatchWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isMatchWithOptions } from 'date-fns/fp'
+export default isMatchWithOptions
diff --git a/date-fns/src/fp/isMatchWithOptions/index.js b/date-fns/src/fp/isMatchWithOptions/index.js
new file mode 100644
index 0000000..a894b20
--- /dev/null
+++ b/date-fns/src/fp/isMatchWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isMatch/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isMatchWithOptions = convertToFP(fn, 3)
+
+export default isMatchWithOptions
diff --git a/date-fns/src/fp/isMatchWithOptions/index.js.flow b/date-fns/src/fp/isMatchWithOptions/index.js.flow
new file mode 100644
index 0000000..5b2b869
--- /dev/null
+++ b/date-fns/src/fp/isMatchWithOptions/index.js.flow
@@ -0,0 +1,78 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ useAdditionalDayOfYearTokens?: boolean,
+ useAdditionalWeekYearTokens?: boolean,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ string,
+ string,
+ boolean
+>
diff --git a/date-fns/src/fp/isMonday/index.d.ts b/date-fns/src/fp/isMonday/index.d.ts
new file mode 100644
index 0000000..550bbb0
--- /dev/null
+++ b/date-fns/src/fp/isMonday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isMonday } from 'date-fns/fp'
+export default isMonday
diff --git a/date-fns/src/fp/isMonday/index.js b/date-fns/src/fp/isMonday/index.js
new file mode 100644
index 0000000..e801cce
--- /dev/null
+++ b/date-fns/src/fp/isMonday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isMonday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isMonday = convertToFP(fn, 1)
+
+export default isMonday
diff --git a/date-fns/src/fp/isMonday/index.js.flow b/date-fns/src/fp/isMonday/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isMonday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isSameDay/index.d.ts b/date-fns/src/fp/isSameDay/index.d.ts
new file mode 100644
index 0000000..d7c74c7
--- /dev/null
+++ b/date-fns/src/fp/isSameDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameDay } from 'date-fns/fp'
+export default isSameDay
diff --git a/date-fns/src/fp/isSameDay/index.js b/date-fns/src/fp/isSameDay/index.js
new file mode 100644
index 0000000..cefc370
--- /dev/null
+++ b/date-fns/src/fp/isSameDay/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameDay/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameDay = convertToFP(fn, 2)
+
+export default isSameDay
diff --git a/date-fns/src/fp/isSameDay/index.js.flow b/date-fns/src/fp/isSameDay/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameDay/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSameHour/index.d.ts b/date-fns/src/fp/isSameHour/index.d.ts
new file mode 100644
index 0000000..ff4dacb
--- /dev/null
+++ b/date-fns/src/fp/isSameHour/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameHour } from 'date-fns/fp'
+export default isSameHour
diff --git a/date-fns/src/fp/isSameHour/index.js b/date-fns/src/fp/isSameHour/index.js
new file mode 100644
index 0000000..5412fb3
--- /dev/null
+++ b/date-fns/src/fp/isSameHour/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameHour/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameHour = convertToFP(fn, 2)
+
+export default isSameHour
diff --git a/date-fns/src/fp/isSameHour/index.js.flow b/date-fns/src/fp/isSameHour/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameHour/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSameISOWeek/index.d.ts b/date-fns/src/fp/isSameISOWeek/index.d.ts
new file mode 100644
index 0000000..41c5426
--- /dev/null
+++ b/date-fns/src/fp/isSameISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameISOWeek } from 'date-fns/fp'
+export default isSameISOWeek
diff --git a/date-fns/src/fp/isSameISOWeek/index.js b/date-fns/src/fp/isSameISOWeek/index.js
new file mode 100644
index 0000000..5d80c9c
--- /dev/null
+++ b/date-fns/src/fp/isSameISOWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameISOWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameISOWeek = convertToFP(fn, 2)
+
+export default isSameISOWeek
diff --git a/date-fns/src/fp/isSameISOWeek/index.js.flow b/date-fns/src/fp/isSameISOWeek/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameISOWeek/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSameISOWeekYear/index.d.ts b/date-fns/src/fp/isSameISOWeekYear/index.d.ts
new file mode 100644
index 0000000..f9f65c0
--- /dev/null
+++ b/date-fns/src/fp/isSameISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameISOWeekYear } from 'date-fns/fp'
+export default isSameISOWeekYear
diff --git a/date-fns/src/fp/isSameISOWeekYear/index.js b/date-fns/src/fp/isSameISOWeekYear/index.js
new file mode 100644
index 0000000..0a14d31
--- /dev/null
+++ b/date-fns/src/fp/isSameISOWeekYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameISOWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameISOWeekYear = convertToFP(fn, 2)
+
+export default isSameISOWeekYear
diff --git a/date-fns/src/fp/isSameISOWeekYear/index.js.flow b/date-fns/src/fp/isSameISOWeekYear/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameISOWeekYear/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSameMinute/index.d.ts b/date-fns/src/fp/isSameMinute/index.d.ts
new file mode 100644
index 0000000..b19be2a
--- /dev/null
+++ b/date-fns/src/fp/isSameMinute/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameMinute } from 'date-fns/fp'
+export default isSameMinute
diff --git a/date-fns/src/fp/isSameMinute/index.js b/date-fns/src/fp/isSameMinute/index.js
new file mode 100644
index 0000000..f664f96
--- /dev/null
+++ b/date-fns/src/fp/isSameMinute/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameMinute/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameMinute = convertToFP(fn, 2)
+
+export default isSameMinute
diff --git a/date-fns/src/fp/isSameMinute/index.js.flow b/date-fns/src/fp/isSameMinute/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameMinute/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSameMonth/index.d.ts b/date-fns/src/fp/isSameMonth/index.d.ts
new file mode 100644
index 0000000..1c29c87
--- /dev/null
+++ b/date-fns/src/fp/isSameMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameMonth } from 'date-fns/fp'
+export default isSameMonth
diff --git a/date-fns/src/fp/isSameMonth/index.js b/date-fns/src/fp/isSameMonth/index.js
new file mode 100644
index 0000000..0479c45
--- /dev/null
+++ b/date-fns/src/fp/isSameMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameMonth = convertToFP(fn, 2)
+
+export default isSameMonth
diff --git a/date-fns/src/fp/isSameMonth/index.js.flow b/date-fns/src/fp/isSameMonth/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameMonth/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSameQuarter/index.d.ts b/date-fns/src/fp/isSameQuarter/index.d.ts
new file mode 100644
index 0000000..6fe36a5
--- /dev/null
+++ b/date-fns/src/fp/isSameQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameQuarter } from 'date-fns/fp'
+export default isSameQuarter
diff --git a/date-fns/src/fp/isSameQuarter/index.js b/date-fns/src/fp/isSameQuarter/index.js
new file mode 100644
index 0000000..1fcb783
--- /dev/null
+++ b/date-fns/src/fp/isSameQuarter/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameQuarter/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameQuarter = convertToFP(fn, 2)
+
+export default isSameQuarter
diff --git a/date-fns/src/fp/isSameQuarter/index.js.flow b/date-fns/src/fp/isSameQuarter/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameQuarter/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSameSecond/index.d.ts b/date-fns/src/fp/isSameSecond/index.d.ts
new file mode 100644
index 0000000..b65413a
--- /dev/null
+++ b/date-fns/src/fp/isSameSecond/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameSecond } from 'date-fns/fp'
+export default isSameSecond
diff --git a/date-fns/src/fp/isSameSecond/index.js b/date-fns/src/fp/isSameSecond/index.js
new file mode 100644
index 0000000..976a012
--- /dev/null
+++ b/date-fns/src/fp/isSameSecond/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameSecond/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameSecond = convertToFP(fn, 2)
+
+export default isSameSecond
diff --git a/date-fns/src/fp/isSameSecond/index.js.flow b/date-fns/src/fp/isSameSecond/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameSecond/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSameWeek/index.d.ts b/date-fns/src/fp/isSameWeek/index.d.ts
new file mode 100644
index 0000000..e6b37fa
--- /dev/null
+++ b/date-fns/src/fp/isSameWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameWeek } from 'date-fns/fp'
+export default isSameWeek
diff --git a/date-fns/src/fp/isSameWeek/index.js b/date-fns/src/fp/isSameWeek/index.js
new file mode 100644
index 0000000..043f63e
--- /dev/null
+++ b/date-fns/src/fp/isSameWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameWeek = convertToFP(fn, 2)
+
+export default isSameWeek
diff --git a/date-fns/src/fp/isSameWeek/index.js.flow b/date-fns/src/fp/isSameWeek/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameWeek/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSameWeekWithOptions/index.d.ts b/date-fns/src/fp/isSameWeekWithOptions/index.d.ts
new file mode 100644
index 0000000..240b654
--- /dev/null
+++ b/date-fns/src/fp/isSameWeekWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameWeekWithOptions } from 'date-fns/fp'
+export default isSameWeekWithOptions
diff --git a/date-fns/src/fp/isSameWeekWithOptions/index.js b/date-fns/src/fp/isSameWeekWithOptions/index.js
new file mode 100644
index 0000000..a05210f
--- /dev/null
+++ b/date-fns/src/fp/isSameWeekWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameWeekWithOptions = convertToFP(fn, 3)
+
+export default isSameWeekWithOptions
diff --git a/date-fns/src/fp/isSameWeekWithOptions/index.js.flow b/date-fns/src/fp/isSameWeekWithOptions/index.js.flow
new file mode 100644
index 0000000..154b894
--- /dev/null
+++ b/date-fns/src/fp/isSameWeekWithOptions/index.js.flow
@@ -0,0 +1,75 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date | number,
+ boolean
+>
diff --git a/date-fns/src/fp/isSameYear/index.d.ts b/date-fns/src/fp/isSameYear/index.d.ts
new file mode 100644
index 0000000..da9db07
--- /dev/null
+++ b/date-fns/src/fp/isSameYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameYear } from 'date-fns/fp'
+export default isSameYear
diff --git a/date-fns/src/fp/isSameYear/index.js b/date-fns/src/fp/isSameYear/index.js
new file mode 100644
index 0000000..06b5ec4
--- /dev/null
+++ b/date-fns/src/fp/isSameYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSameYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSameYear = convertToFP(fn, 2)
+
+export default isSameYear
diff --git a/date-fns/src/fp/isSameYear/index.js.flow b/date-fns/src/fp/isSameYear/index.js.flow
new file mode 100644
index 0000000..38638c4
--- /dev/null
+++ b/date-fns/src/fp/isSameYear/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Date | number, Date | number, boolean>
diff --git a/date-fns/src/fp/isSaturday/index.d.ts b/date-fns/src/fp/isSaturday/index.d.ts
new file mode 100644
index 0000000..d6c100a
--- /dev/null
+++ b/date-fns/src/fp/isSaturday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSaturday } from 'date-fns/fp'
+export default isSaturday
diff --git a/date-fns/src/fp/isSaturday/index.js b/date-fns/src/fp/isSaturday/index.js
new file mode 100644
index 0000000..7fb3394
--- /dev/null
+++ b/date-fns/src/fp/isSaturday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSaturday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSaturday = convertToFP(fn, 1)
+
+export default isSaturday
diff --git a/date-fns/src/fp/isSaturday/index.js.flow b/date-fns/src/fp/isSaturday/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isSaturday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isSunday/index.d.ts b/date-fns/src/fp/isSunday/index.d.ts
new file mode 100644
index 0000000..d5ff84f
--- /dev/null
+++ b/date-fns/src/fp/isSunday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSunday } from 'date-fns/fp'
+export default isSunday
diff --git a/date-fns/src/fp/isSunday/index.js b/date-fns/src/fp/isSunday/index.js
new file mode 100644
index 0000000..b37f29f
--- /dev/null
+++ b/date-fns/src/fp/isSunday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isSunday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isSunday = convertToFP(fn, 1)
+
+export default isSunday
diff --git a/date-fns/src/fp/isSunday/index.js.flow b/date-fns/src/fp/isSunday/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isSunday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isThursday/index.d.ts b/date-fns/src/fp/isThursday/index.d.ts
new file mode 100644
index 0000000..5f7c57c
--- /dev/null
+++ b/date-fns/src/fp/isThursday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThursday } from 'date-fns/fp'
+export default isThursday
diff --git a/date-fns/src/fp/isThursday/index.js b/date-fns/src/fp/isThursday/index.js
new file mode 100644
index 0000000..d5c87d1
--- /dev/null
+++ b/date-fns/src/fp/isThursday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isThursday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isThursday = convertToFP(fn, 1)
+
+export default isThursday
diff --git a/date-fns/src/fp/isThursday/index.js.flow b/date-fns/src/fp/isThursday/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isThursday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isTuesday/index.d.ts b/date-fns/src/fp/isTuesday/index.d.ts
new file mode 100644
index 0000000..3a652b6
--- /dev/null
+++ b/date-fns/src/fp/isTuesday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isTuesday } from 'date-fns/fp'
+export default isTuesday
diff --git a/date-fns/src/fp/isTuesday/index.js b/date-fns/src/fp/isTuesday/index.js
new file mode 100644
index 0000000..d7da6f0
--- /dev/null
+++ b/date-fns/src/fp/isTuesday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isTuesday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isTuesday = convertToFP(fn, 1)
+
+export default isTuesday
diff --git a/date-fns/src/fp/isTuesday/index.js.flow b/date-fns/src/fp/isTuesday/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isTuesday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isValid/index.d.ts b/date-fns/src/fp/isValid/index.d.ts
new file mode 100644
index 0000000..42a8432
--- /dev/null
+++ b/date-fns/src/fp/isValid/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isValid } from 'date-fns/fp'
+export default isValid
diff --git a/date-fns/src/fp/isValid/index.js b/date-fns/src/fp/isValid/index.js
new file mode 100644
index 0000000..da5b3d2
--- /dev/null
+++ b/date-fns/src/fp/isValid/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isValid/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isValid = convertToFP(fn, 1)
+
+export default isValid
diff --git a/date-fns/src/fp/isValid/index.js.flow b/date-fns/src/fp/isValid/index.js.flow
new file mode 100644
index 0000000..62e70e2
--- /dev/null
+++ b/date-fns/src/fp/isValid/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<any, boolean>
diff --git a/date-fns/src/fp/isWednesday/index.d.ts b/date-fns/src/fp/isWednesday/index.d.ts
new file mode 100644
index 0000000..9752d6a
--- /dev/null
+++ b/date-fns/src/fp/isWednesday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isWednesday } from 'date-fns/fp'
+export default isWednesday
diff --git a/date-fns/src/fp/isWednesday/index.js b/date-fns/src/fp/isWednesday/index.js
new file mode 100644
index 0000000..b2fa123
--- /dev/null
+++ b/date-fns/src/fp/isWednesday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isWednesday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isWednesday = convertToFP(fn, 1)
+
+export default isWednesday
diff --git a/date-fns/src/fp/isWednesday/index.js.flow b/date-fns/src/fp/isWednesday/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isWednesday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isWeekend/index.d.ts b/date-fns/src/fp/isWeekend/index.d.ts
new file mode 100644
index 0000000..ff6c8a3
--- /dev/null
+++ b/date-fns/src/fp/isWeekend/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isWeekend } from 'date-fns/fp'
+export default isWeekend
diff --git a/date-fns/src/fp/isWeekend/index.js b/date-fns/src/fp/isWeekend/index.js
new file mode 100644
index 0000000..31a08f3
--- /dev/null
+++ b/date-fns/src/fp/isWeekend/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isWeekend/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isWeekend = convertToFP(fn, 1)
+
+export default isWeekend
diff --git a/date-fns/src/fp/isWeekend/index.js.flow b/date-fns/src/fp/isWeekend/index.js.flow
new file mode 100644
index 0000000..8f53be6
--- /dev/null
+++ b/date-fns/src/fp/isWeekend/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, boolean>
diff --git a/date-fns/src/fp/isWithinInterval/index.d.ts b/date-fns/src/fp/isWithinInterval/index.d.ts
new file mode 100644
index 0000000..c3b3c9b
--- /dev/null
+++ b/date-fns/src/fp/isWithinInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isWithinInterval } from 'date-fns/fp'
+export default isWithinInterval
diff --git a/date-fns/src/fp/isWithinInterval/index.js b/date-fns/src/fp/isWithinInterval/index.js
new file mode 100644
index 0000000..88167ff
--- /dev/null
+++ b/date-fns/src/fp/isWithinInterval/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../isWithinInterval/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var isWithinInterval = convertToFP(fn, 2)
+
+export default isWithinInterval
diff --git a/date-fns/src/fp/isWithinInterval/index.js.flow b/date-fns/src/fp/isWithinInterval/index.js.flow
new file mode 100644
index 0000000..8b45a5e
--- /dev/null
+++ b/date-fns/src/fp/isWithinInterval/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Interval, Date | number, boolean>
diff --git a/date-fns/src/fp/lastDayOfDecade/index.d.ts b/date-fns/src/fp/lastDayOfDecade/index.d.ts
new file mode 100644
index 0000000..6b32f46
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfDecade/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfDecade } from 'date-fns/fp'
+export default lastDayOfDecade
diff --git a/date-fns/src/fp/lastDayOfDecade/index.js b/date-fns/src/fp/lastDayOfDecade/index.js
new file mode 100644
index 0000000..e2afa78
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfDecade/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lastDayOfDecade/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lastDayOfDecade = convertToFP(fn, 1)
+
+export default lastDayOfDecade
diff --git a/date-fns/src/fp/lastDayOfDecade/index.js.flow b/date-fns/src/fp/lastDayOfDecade/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfDecade/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/lastDayOfISOWeek/index.d.ts b/date-fns/src/fp/lastDayOfISOWeek/index.d.ts
new file mode 100644
index 0000000..13d7cbe
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfISOWeek } from 'date-fns/fp'
+export default lastDayOfISOWeek
diff --git a/date-fns/src/fp/lastDayOfISOWeek/index.js b/date-fns/src/fp/lastDayOfISOWeek/index.js
new file mode 100644
index 0000000..3c03939
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfISOWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lastDayOfISOWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lastDayOfISOWeek = convertToFP(fn, 1)
+
+export default lastDayOfISOWeek
diff --git a/date-fns/src/fp/lastDayOfISOWeek/index.js.flow b/date-fns/src/fp/lastDayOfISOWeek/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfISOWeek/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/lastDayOfISOWeekYear/index.d.ts b/date-fns/src/fp/lastDayOfISOWeekYear/index.d.ts
new file mode 100644
index 0000000..8e75ca7
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfISOWeekYear } from 'date-fns/fp'
+export default lastDayOfISOWeekYear
diff --git a/date-fns/src/fp/lastDayOfISOWeekYear/index.js b/date-fns/src/fp/lastDayOfISOWeekYear/index.js
new file mode 100644
index 0000000..7227cb1
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfISOWeekYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lastDayOfISOWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lastDayOfISOWeekYear = convertToFP(fn, 1)
+
+export default lastDayOfISOWeekYear
diff --git a/date-fns/src/fp/lastDayOfISOWeekYear/index.js.flow b/date-fns/src/fp/lastDayOfISOWeekYear/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfISOWeekYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/lastDayOfMonth/index.d.ts b/date-fns/src/fp/lastDayOfMonth/index.d.ts
new file mode 100644
index 0000000..1a65a14
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfMonth } from 'date-fns/fp'
+export default lastDayOfMonth
diff --git a/date-fns/src/fp/lastDayOfMonth/index.js b/date-fns/src/fp/lastDayOfMonth/index.js
new file mode 100644
index 0000000..1da2a17
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lastDayOfMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lastDayOfMonth = convertToFP(fn, 1)
+
+export default lastDayOfMonth
diff --git a/date-fns/src/fp/lastDayOfMonth/index.js.flow b/date-fns/src/fp/lastDayOfMonth/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/lastDayOfQuarter/index.d.ts b/date-fns/src/fp/lastDayOfQuarter/index.d.ts
new file mode 100644
index 0000000..27f41a8
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfQuarter } from 'date-fns/fp'
+export default lastDayOfQuarter
diff --git a/date-fns/src/fp/lastDayOfQuarter/index.js b/date-fns/src/fp/lastDayOfQuarter/index.js
new file mode 100644
index 0000000..c8b7f6b
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfQuarter/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lastDayOfQuarter/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lastDayOfQuarter = convertToFP(fn, 1)
+
+export default lastDayOfQuarter
diff --git a/date-fns/src/fp/lastDayOfQuarter/index.js.flow b/date-fns/src/fp/lastDayOfQuarter/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfQuarter/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/lastDayOfQuarterWithOptions/index.d.ts b/date-fns/src/fp/lastDayOfQuarterWithOptions/index.d.ts
new file mode 100644
index 0000000..4327d12
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfQuarterWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfQuarterWithOptions } from 'date-fns/fp'
+export default lastDayOfQuarterWithOptions
diff --git a/date-fns/src/fp/lastDayOfQuarterWithOptions/index.js b/date-fns/src/fp/lastDayOfQuarterWithOptions/index.js
new file mode 100644
index 0000000..a6ef4bd
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfQuarterWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lastDayOfQuarter/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lastDayOfQuarterWithOptions = convertToFP(fn, 2)
+
+export default lastDayOfQuarterWithOptions
diff --git a/date-fns/src/fp/lastDayOfQuarterWithOptions/index.js.flow b/date-fns/src/fp/lastDayOfQuarterWithOptions/index.js.flow
new file mode 100644
index 0000000..4b6d0d4
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfQuarterWithOptions/index.js.flow
@@ -0,0 +1,64 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2,
+ },
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/lastDayOfWeek/index.d.ts b/date-fns/src/fp/lastDayOfWeek/index.d.ts
new file mode 100644
index 0000000..0d79da7
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfWeek } from 'date-fns/fp'
+export default lastDayOfWeek
diff --git a/date-fns/src/fp/lastDayOfWeek/index.js b/date-fns/src/fp/lastDayOfWeek/index.js
new file mode 100644
index 0000000..0407263
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lastDayOfWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lastDayOfWeek = convertToFP(fn, 1)
+
+export default lastDayOfWeek
diff --git a/date-fns/src/fp/lastDayOfWeek/index.js.flow b/date-fns/src/fp/lastDayOfWeek/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfWeek/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/lastDayOfWeekWithOptions/index.d.ts b/date-fns/src/fp/lastDayOfWeekWithOptions/index.d.ts
new file mode 100644
index 0000000..5719524
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfWeekWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfWeekWithOptions } from 'date-fns/fp'
+export default lastDayOfWeekWithOptions
diff --git a/date-fns/src/fp/lastDayOfWeekWithOptions/index.js b/date-fns/src/fp/lastDayOfWeekWithOptions/index.js
new file mode 100644
index 0000000..4d758bb
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfWeekWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lastDayOfWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lastDayOfWeekWithOptions = convertToFP(fn, 2)
+
+export default lastDayOfWeekWithOptions
diff --git a/date-fns/src/fp/lastDayOfWeekWithOptions/index.js.flow b/date-fns/src/fp/lastDayOfWeekWithOptions/index.js.flow
new file mode 100644
index 0000000..9821646
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfWeekWithOptions/index.js.flow
@@ -0,0 +1,65 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/lastDayOfYear/index.d.ts b/date-fns/src/fp/lastDayOfYear/index.d.ts
new file mode 100644
index 0000000..340473e
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfYear } from 'date-fns/fp'
+export default lastDayOfYear
diff --git a/date-fns/src/fp/lastDayOfYear/index.js b/date-fns/src/fp/lastDayOfYear/index.js
new file mode 100644
index 0000000..faf5d62
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lastDayOfYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lastDayOfYear = convertToFP(fn, 1)
+
+export default lastDayOfYear
diff --git a/date-fns/src/fp/lastDayOfYear/index.js.flow b/date-fns/src/fp/lastDayOfYear/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/lastDayOfYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/lightFormat/index.d.ts b/date-fns/src/fp/lightFormat/index.d.ts
new file mode 100644
index 0000000..843b7fd
--- /dev/null
+++ b/date-fns/src/fp/lightFormat/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lightFormat } from 'date-fns/fp'
+export default lightFormat
diff --git a/date-fns/src/fp/lightFormat/index.js b/date-fns/src/fp/lightFormat/index.js
new file mode 100644
index 0000000..da69f3c
--- /dev/null
+++ b/date-fns/src/fp/lightFormat/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../lightFormat/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var lightFormat = convertToFP(fn, 2)
+
+export default lightFormat
diff --git a/date-fns/src/fp/lightFormat/index.js.flow b/date-fns/src/fp/lightFormat/index.js.flow
new file mode 100644
index 0000000..013f277
--- /dev/null
+++ b/date-fns/src/fp/lightFormat/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<string, Date | number, string>
diff --git a/date-fns/src/fp/max/index.d.ts b/date-fns/src/fp/max/index.d.ts
new file mode 100644
index 0000000..000bf1d
--- /dev/null
+++ b/date-fns/src/fp/max/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { max } from 'date-fns/fp'
+export default max
diff --git a/date-fns/src/fp/max/index.js b/date-fns/src/fp/max/index.js
new file mode 100644
index 0000000..388ee28
--- /dev/null
+++ b/date-fns/src/fp/max/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../max/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var max = convertToFP(fn, 1)
+
+export default max
diff --git a/date-fns/src/fp/max/index.js.flow b/date-fns/src/fp/max/index.js.flow
new file mode 100644
index 0000000..dc66689
--- /dev/null
+++ b/date-fns/src/fp/max/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<(Date | number)[], Date>
diff --git a/date-fns/src/fp/milliseconds/index.d.ts b/date-fns/src/fp/milliseconds/index.d.ts
new file mode 100644
index 0000000..2552885
--- /dev/null
+++ b/date-fns/src/fp/milliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { milliseconds } from 'date-fns/fp'
+export default milliseconds
diff --git a/date-fns/src/fp/milliseconds/index.js b/date-fns/src/fp/milliseconds/index.js
new file mode 100644
index 0000000..3cd2b2c
--- /dev/null
+++ b/date-fns/src/fp/milliseconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../milliseconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var milliseconds = convertToFP(fn, 1)
+
+export default milliseconds
diff --git a/date-fns/src/fp/milliseconds/index.js.flow b/date-fns/src/fp/milliseconds/index.js.flow
new file mode 100644
index 0000000..a025a67
--- /dev/null
+++ b/date-fns/src/fp/milliseconds/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Duration, number>
diff --git a/date-fns/src/fp/millisecondsToHours/index.d.ts b/date-fns/src/fp/millisecondsToHours/index.d.ts
new file mode 100644
index 0000000..0ee6863
--- /dev/null
+++ b/date-fns/src/fp/millisecondsToHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { millisecondsToHours } from 'date-fns/fp'
+export default millisecondsToHours
diff --git a/date-fns/src/fp/millisecondsToHours/index.js b/date-fns/src/fp/millisecondsToHours/index.js
new file mode 100644
index 0000000..8d74476
--- /dev/null
+++ b/date-fns/src/fp/millisecondsToHours/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../millisecondsToHours/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var millisecondsToHours = convertToFP(fn, 1)
+
+export default millisecondsToHours
diff --git a/date-fns/src/fp/millisecondsToHours/index.js.flow b/date-fns/src/fp/millisecondsToHours/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/millisecondsToHours/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/millisecondsToMinutes/index.d.ts b/date-fns/src/fp/millisecondsToMinutes/index.d.ts
new file mode 100644
index 0000000..de84700
--- /dev/null
+++ b/date-fns/src/fp/millisecondsToMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { millisecondsToMinutes } from 'date-fns/fp'
+export default millisecondsToMinutes
diff --git a/date-fns/src/fp/millisecondsToMinutes/index.js b/date-fns/src/fp/millisecondsToMinutes/index.js
new file mode 100644
index 0000000..d9c64f1
--- /dev/null
+++ b/date-fns/src/fp/millisecondsToMinutes/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../millisecondsToMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var millisecondsToMinutes = convertToFP(fn, 1)
+
+export default millisecondsToMinutes
diff --git a/date-fns/src/fp/millisecondsToMinutes/index.js.flow b/date-fns/src/fp/millisecondsToMinutes/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/millisecondsToMinutes/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/millisecondsToSeconds/index.d.ts b/date-fns/src/fp/millisecondsToSeconds/index.d.ts
new file mode 100644
index 0000000..99736c4
--- /dev/null
+++ b/date-fns/src/fp/millisecondsToSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { millisecondsToSeconds } from 'date-fns/fp'
+export default millisecondsToSeconds
diff --git a/date-fns/src/fp/millisecondsToSeconds/index.js b/date-fns/src/fp/millisecondsToSeconds/index.js
new file mode 100644
index 0000000..3d59f18
--- /dev/null
+++ b/date-fns/src/fp/millisecondsToSeconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../millisecondsToSeconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var millisecondsToSeconds = convertToFP(fn, 1)
+
+export default millisecondsToSeconds
diff --git a/date-fns/src/fp/millisecondsToSeconds/index.js.flow b/date-fns/src/fp/millisecondsToSeconds/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/millisecondsToSeconds/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/min/index.d.ts b/date-fns/src/fp/min/index.d.ts
new file mode 100644
index 0000000..b666165
--- /dev/null
+++ b/date-fns/src/fp/min/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { min } from 'date-fns/fp'
+export default min
diff --git a/date-fns/src/fp/min/index.js b/date-fns/src/fp/min/index.js
new file mode 100644
index 0000000..70bd2f1
--- /dev/null
+++ b/date-fns/src/fp/min/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../min/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var min = convertToFP(fn, 1)
+
+export default min
diff --git a/date-fns/src/fp/min/index.js.flow b/date-fns/src/fp/min/index.js.flow
new file mode 100644
index 0000000..dc66689
--- /dev/null
+++ b/date-fns/src/fp/min/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<(Date | number)[], Date>
diff --git a/date-fns/src/fp/minutesToHours/index.d.ts b/date-fns/src/fp/minutesToHours/index.d.ts
new file mode 100644
index 0000000..15aeb30
--- /dev/null
+++ b/date-fns/src/fp/minutesToHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { minutesToHours } from 'date-fns/fp'
+export default minutesToHours
diff --git a/date-fns/src/fp/minutesToHours/index.js b/date-fns/src/fp/minutesToHours/index.js
new file mode 100644
index 0000000..d125abc
--- /dev/null
+++ b/date-fns/src/fp/minutesToHours/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../minutesToHours/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var minutesToHours = convertToFP(fn, 1)
+
+export default minutesToHours
diff --git a/date-fns/src/fp/minutesToHours/index.js.flow b/date-fns/src/fp/minutesToHours/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/minutesToHours/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/minutesToMilliseconds/index.d.ts b/date-fns/src/fp/minutesToMilliseconds/index.d.ts
new file mode 100644
index 0000000..0b19d01
--- /dev/null
+++ b/date-fns/src/fp/minutesToMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { minutesToMilliseconds } from 'date-fns/fp'
+export default minutesToMilliseconds
diff --git a/date-fns/src/fp/minutesToMilliseconds/index.js b/date-fns/src/fp/minutesToMilliseconds/index.js
new file mode 100644
index 0000000..1c54f4f
--- /dev/null
+++ b/date-fns/src/fp/minutesToMilliseconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../minutesToMilliseconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var minutesToMilliseconds = convertToFP(fn, 1)
+
+export default minutesToMilliseconds
diff --git a/date-fns/src/fp/minutesToMilliseconds/index.js.flow b/date-fns/src/fp/minutesToMilliseconds/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/minutesToMilliseconds/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/minutesToSeconds/index.d.ts b/date-fns/src/fp/minutesToSeconds/index.d.ts
new file mode 100644
index 0000000..bc47b3f
--- /dev/null
+++ b/date-fns/src/fp/minutesToSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { minutesToSeconds } from 'date-fns/fp'
+export default minutesToSeconds
diff --git a/date-fns/src/fp/minutesToSeconds/index.js b/date-fns/src/fp/minutesToSeconds/index.js
new file mode 100644
index 0000000..cd15bc1
--- /dev/null
+++ b/date-fns/src/fp/minutesToSeconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../minutesToSeconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var minutesToSeconds = convertToFP(fn, 1)
+
+export default minutesToSeconds
diff --git a/date-fns/src/fp/minutesToSeconds/index.js.flow b/date-fns/src/fp/minutesToSeconds/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/minutesToSeconds/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/monthsToQuarters/index.d.ts b/date-fns/src/fp/monthsToQuarters/index.d.ts
new file mode 100644
index 0000000..05ae53c
--- /dev/null
+++ b/date-fns/src/fp/monthsToQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { monthsToQuarters } from 'date-fns/fp'
+export default monthsToQuarters
diff --git a/date-fns/src/fp/monthsToQuarters/index.js b/date-fns/src/fp/monthsToQuarters/index.js
new file mode 100644
index 0000000..a06e630
--- /dev/null
+++ b/date-fns/src/fp/monthsToQuarters/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../monthsToQuarters/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var monthsToQuarters = convertToFP(fn, 1)
+
+export default monthsToQuarters
diff --git a/date-fns/src/fp/monthsToQuarters/index.js.flow b/date-fns/src/fp/monthsToQuarters/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/monthsToQuarters/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/monthsToYears/index.d.ts b/date-fns/src/fp/monthsToYears/index.d.ts
new file mode 100644
index 0000000..bc5f113
--- /dev/null
+++ b/date-fns/src/fp/monthsToYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { monthsToYears } from 'date-fns/fp'
+export default monthsToYears
diff --git a/date-fns/src/fp/monthsToYears/index.js b/date-fns/src/fp/monthsToYears/index.js
new file mode 100644
index 0000000..771bfa9
--- /dev/null
+++ b/date-fns/src/fp/monthsToYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../monthsToYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var monthsToYears = convertToFP(fn, 1)
+
+export default monthsToYears
diff --git a/date-fns/src/fp/monthsToYears/index.js.flow b/date-fns/src/fp/monthsToYears/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/monthsToYears/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/nextDay/index.d.ts b/date-fns/src/fp/nextDay/index.d.ts
new file mode 100644
index 0000000..dc6cd80
--- /dev/null
+++ b/date-fns/src/fp/nextDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextDay } from 'date-fns/fp'
+export default nextDay
diff --git a/date-fns/src/fp/nextDay/index.js b/date-fns/src/fp/nextDay/index.js
new file mode 100644
index 0000000..78f62f4
--- /dev/null
+++ b/date-fns/src/fp/nextDay/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../nextDay/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var nextDay = convertToFP(fn, 2)
+
+export default nextDay
diff --git a/date-fns/src/fp/nextDay/index.js.flow b/date-fns/src/fp/nextDay/index.js.flow
new file mode 100644
index 0000000..3d001b2
--- /dev/null
+++ b/date-fns/src/fp/nextDay/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Day, Date | number, Date>
diff --git a/date-fns/src/fp/nextFriday/index.d.ts b/date-fns/src/fp/nextFriday/index.d.ts
new file mode 100644
index 0000000..48e88cc
--- /dev/null
+++ b/date-fns/src/fp/nextFriday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextFriday } from 'date-fns/fp'
+export default nextFriday
diff --git a/date-fns/src/fp/nextFriday/index.js b/date-fns/src/fp/nextFriday/index.js
new file mode 100644
index 0000000..277d482
--- /dev/null
+++ b/date-fns/src/fp/nextFriday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../nextFriday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var nextFriday = convertToFP(fn, 1)
+
+export default nextFriday
diff --git a/date-fns/src/fp/nextFriday/index.js.flow b/date-fns/src/fp/nextFriday/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/nextFriday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/nextMonday/index.d.ts b/date-fns/src/fp/nextMonday/index.d.ts
new file mode 100644
index 0000000..50926c4
--- /dev/null
+++ b/date-fns/src/fp/nextMonday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextMonday } from 'date-fns/fp'
+export default nextMonday
diff --git a/date-fns/src/fp/nextMonday/index.js b/date-fns/src/fp/nextMonday/index.js
new file mode 100644
index 0000000..a09c1e0
--- /dev/null
+++ b/date-fns/src/fp/nextMonday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../nextMonday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var nextMonday = convertToFP(fn, 1)
+
+export default nextMonday
diff --git a/date-fns/src/fp/nextMonday/index.js.flow b/date-fns/src/fp/nextMonday/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/nextMonday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/nextSaturday/index.d.ts b/date-fns/src/fp/nextSaturday/index.d.ts
new file mode 100644
index 0000000..5774aa5
--- /dev/null
+++ b/date-fns/src/fp/nextSaturday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextSaturday } from 'date-fns/fp'
+export default nextSaturday
diff --git a/date-fns/src/fp/nextSaturday/index.js b/date-fns/src/fp/nextSaturday/index.js
new file mode 100644
index 0000000..145813f
--- /dev/null
+++ b/date-fns/src/fp/nextSaturday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../nextSaturday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var nextSaturday = convertToFP(fn, 1)
+
+export default nextSaturday
diff --git a/date-fns/src/fp/nextSaturday/index.js.flow b/date-fns/src/fp/nextSaturday/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/nextSaturday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/nextSunday/index.d.ts b/date-fns/src/fp/nextSunday/index.d.ts
new file mode 100644
index 0000000..acd1202
--- /dev/null
+++ b/date-fns/src/fp/nextSunday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextSunday } from 'date-fns/fp'
+export default nextSunday
diff --git a/date-fns/src/fp/nextSunday/index.js b/date-fns/src/fp/nextSunday/index.js
new file mode 100644
index 0000000..cb21ec9
--- /dev/null
+++ b/date-fns/src/fp/nextSunday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../nextSunday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var nextSunday = convertToFP(fn, 1)
+
+export default nextSunday
diff --git a/date-fns/src/fp/nextSunday/index.js.flow b/date-fns/src/fp/nextSunday/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/nextSunday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/nextThursday/index.d.ts b/date-fns/src/fp/nextThursday/index.d.ts
new file mode 100644
index 0000000..1f2dcf0
--- /dev/null
+++ b/date-fns/src/fp/nextThursday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextThursday } from 'date-fns/fp'
+export default nextThursday
diff --git a/date-fns/src/fp/nextThursday/index.js b/date-fns/src/fp/nextThursday/index.js
new file mode 100644
index 0000000..9e22adf
--- /dev/null
+++ b/date-fns/src/fp/nextThursday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../nextThursday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var nextThursday = convertToFP(fn, 1)
+
+export default nextThursday
diff --git a/date-fns/src/fp/nextThursday/index.js.flow b/date-fns/src/fp/nextThursday/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/nextThursday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/nextTuesday/index.d.ts b/date-fns/src/fp/nextTuesday/index.d.ts
new file mode 100644
index 0000000..4842cc0
--- /dev/null
+++ b/date-fns/src/fp/nextTuesday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextTuesday } from 'date-fns/fp'
+export default nextTuesday
diff --git a/date-fns/src/fp/nextTuesday/index.js b/date-fns/src/fp/nextTuesday/index.js
new file mode 100644
index 0000000..648bcc8
--- /dev/null
+++ b/date-fns/src/fp/nextTuesday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../nextTuesday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var nextTuesday = convertToFP(fn, 1)
+
+export default nextTuesday
diff --git a/date-fns/src/fp/nextTuesday/index.js.flow b/date-fns/src/fp/nextTuesday/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/nextTuesday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/nextWednesday/index.d.ts b/date-fns/src/fp/nextWednesday/index.d.ts
new file mode 100644
index 0000000..800d5a5
--- /dev/null
+++ b/date-fns/src/fp/nextWednesday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextWednesday } from 'date-fns/fp'
+export default nextWednesday
diff --git a/date-fns/src/fp/nextWednesday/index.js b/date-fns/src/fp/nextWednesday/index.js
new file mode 100644
index 0000000..007100f
--- /dev/null
+++ b/date-fns/src/fp/nextWednesday/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../nextWednesday/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var nextWednesday = convertToFP(fn, 1)
+
+export default nextWednesday
diff --git a/date-fns/src/fp/nextWednesday/index.js.flow b/date-fns/src/fp/nextWednesday/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/nextWednesday/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/parse/index.d.ts b/date-fns/src/fp/parse/index.d.ts
new file mode 100644
index 0000000..0d42228
--- /dev/null
+++ b/date-fns/src/fp/parse/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { parse } from 'date-fns/fp'
+export default parse
diff --git a/date-fns/src/fp/parse/index.js b/date-fns/src/fp/parse/index.js
new file mode 100644
index 0000000..3a34a83
--- /dev/null
+++ b/date-fns/src/fp/parse/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../parse/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var parse = convertToFP(fn, 3)
+
+export default parse
diff --git a/date-fns/src/fp/parse/index.js.flow b/date-fns/src/fp/parse/index.js.flow
new file mode 100644
index 0000000..7146666
--- /dev/null
+++ b/date-fns/src/fp/parse/index.js.flow
@@ -0,0 +1,67 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<Date | number, string, string, Date>
diff --git a/date-fns/src/fp/parseISO/index.d.ts b/date-fns/src/fp/parseISO/index.d.ts
new file mode 100644
index 0000000..f89741c
--- /dev/null
+++ b/date-fns/src/fp/parseISO/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { parseISO } from 'date-fns/fp'
+export default parseISO
diff --git a/date-fns/src/fp/parseISO/index.js b/date-fns/src/fp/parseISO/index.js
new file mode 100644
index 0000000..2b6c652
--- /dev/null
+++ b/date-fns/src/fp/parseISO/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../parseISO/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var parseISO = convertToFP(fn, 1)
+
+export default parseISO
diff --git a/date-fns/src/fp/parseISO/index.js.flow b/date-fns/src/fp/parseISO/index.js.flow
new file mode 100644
index 0000000..4d84593
--- /dev/null
+++ b/date-fns/src/fp/parseISO/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<string, Date>
diff --git a/date-fns/src/fp/parseISOWithOptions/index.d.ts b/date-fns/src/fp/parseISOWithOptions/index.d.ts
new file mode 100644
index 0000000..b90cbd3
--- /dev/null
+++ b/date-fns/src/fp/parseISOWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { parseISOWithOptions } from 'date-fns/fp'
+export default parseISOWithOptions
diff --git a/date-fns/src/fp/parseISOWithOptions/index.js b/date-fns/src/fp/parseISOWithOptions/index.js
new file mode 100644
index 0000000..8927125
--- /dev/null
+++ b/date-fns/src/fp/parseISOWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../parseISO/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var parseISOWithOptions = convertToFP(fn, 2)
+
+export default parseISOWithOptions
diff --git a/date-fns/src/fp/parseISOWithOptions/index.js.flow b/date-fns/src/fp/parseISOWithOptions/index.js.flow
new file mode 100644
index 0000000..d2d80ca
--- /dev/null
+++ b/date-fns/src/fp/parseISOWithOptions/index.js.flow
@@ -0,0 +1,64 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2,
+ },
+ string,
+ Date
+>
diff --git a/date-fns/src/fp/parseJSON/index.d.ts b/date-fns/src/fp/parseJSON/index.d.ts
new file mode 100644
index 0000000..dd64334
--- /dev/null
+++ b/date-fns/src/fp/parseJSON/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { parseJSON } from 'date-fns/fp'
+export default parseJSON
diff --git a/date-fns/src/fp/parseJSON/index.js b/date-fns/src/fp/parseJSON/index.js
new file mode 100644
index 0000000..115c5e8
--- /dev/null
+++ b/date-fns/src/fp/parseJSON/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../parseJSON/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var parseJSON = convertToFP(fn, 1)
+
+export default parseJSON
diff --git a/date-fns/src/fp/parseJSON/index.js.flow b/date-fns/src/fp/parseJSON/index.js.flow
new file mode 100644
index 0000000..9b7f47a
--- /dev/null
+++ b/date-fns/src/fp/parseJSON/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<string | number | Date, Date>
diff --git a/date-fns/src/fp/parseWithOptions/index.d.ts b/date-fns/src/fp/parseWithOptions/index.d.ts
new file mode 100644
index 0000000..d33b4ae
--- /dev/null
+++ b/date-fns/src/fp/parseWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { parseWithOptions } from 'date-fns/fp'
+export default parseWithOptions
diff --git a/date-fns/src/fp/parseWithOptions/index.js b/date-fns/src/fp/parseWithOptions/index.js
new file mode 100644
index 0000000..1a4d39a
--- /dev/null
+++ b/date-fns/src/fp/parseWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../parse/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var parseWithOptions = convertToFP(fn, 4)
+
+export default parseWithOptions
diff --git a/date-fns/src/fp/parseWithOptions/index.js.flow b/date-fns/src/fp/parseWithOptions/index.js.flow
new file mode 100644
index 0000000..e767e62
--- /dev/null
+++ b/date-fns/src/fp/parseWithOptions/index.js.flow
@@ -0,0 +1,94 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+type CurriedFn4<A, B, C, D, R> = <A>(
+ a: A
+) =>
+ | CurriedFn3<B, C, D, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) =>
+ | CurriedFn2<C, D, R>
+ | (<A, B, C>(
+ a: A,
+ b: B,
+ c: C
+ ) => CurriedFn1<D, R> | (<A, B, C, D>(a: A, b: B, c: C, d: D) => R)))
+
+declare module.exports: CurriedFn4<
+ {
+ useAdditionalDayOfYearTokens?: boolean,
+ useAdditionalWeekYearTokens?: boolean,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ string,
+ string,
+ Date
+>
diff --git a/date-fns/src/fp/quartersToMonths/index.d.ts b/date-fns/src/fp/quartersToMonths/index.d.ts
new file mode 100644
index 0000000..07220e8
--- /dev/null
+++ b/date-fns/src/fp/quartersToMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { quartersToMonths } from 'date-fns/fp'
+export default quartersToMonths
diff --git a/date-fns/src/fp/quartersToMonths/index.js b/date-fns/src/fp/quartersToMonths/index.js
new file mode 100644
index 0000000..d804e23
--- /dev/null
+++ b/date-fns/src/fp/quartersToMonths/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../quartersToMonths/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var quartersToMonths = convertToFP(fn, 1)
+
+export default quartersToMonths
diff --git a/date-fns/src/fp/quartersToMonths/index.js.flow b/date-fns/src/fp/quartersToMonths/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/quartersToMonths/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/quartersToYears/index.d.ts b/date-fns/src/fp/quartersToYears/index.d.ts
new file mode 100644
index 0000000..6613aeb
--- /dev/null
+++ b/date-fns/src/fp/quartersToYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { quartersToYears } from 'date-fns/fp'
+export default quartersToYears
diff --git a/date-fns/src/fp/quartersToYears/index.js b/date-fns/src/fp/quartersToYears/index.js
new file mode 100644
index 0000000..9d28be7
--- /dev/null
+++ b/date-fns/src/fp/quartersToYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../quartersToYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var quartersToYears = convertToFP(fn, 1)
+
+export default quartersToYears
diff --git a/date-fns/src/fp/quartersToYears/index.js.flow b/date-fns/src/fp/quartersToYears/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/quartersToYears/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/roundToNearestMinutes/index.d.ts b/date-fns/src/fp/roundToNearestMinutes/index.d.ts
new file mode 100644
index 0000000..7777ce2
--- /dev/null
+++ b/date-fns/src/fp/roundToNearestMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { roundToNearestMinutes } from 'date-fns/fp'
+export default roundToNearestMinutes
diff --git a/date-fns/src/fp/roundToNearestMinutes/index.js b/date-fns/src/fp/roundToNearestMinutes/index.js
new file mode 100644
index 0000000..b2e0264
--- /dev/null
+++ b/date-fns/src/fp/roundToNearestMinutes/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../roundToNearestMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var roundToNearestMinutes = convertToFP(fn, 1)
+
+export default roundToNearestMinutes
diff --git a/date-fns/src/fp/roundToNearestMinutes/index.js.flow b/date-fns/src/fp/roundToNearestMinutes/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/roundToNearestMinutes/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/roundToNearestMinutesWithOptions/index.d.ts b/date-fns/src/fp/roundToNearestMinutesWithOptions/index.d.ts
new file mode 100644
index 0000000..fcd4df4
--- /dev/null
+++ b/date-fns/src/fp/roundToNearestMinutesWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { roundToNearestMinutesWithOptions } from 'date-fns/fp'
+export default roundToNearestMinutesWithOptions
diff --git a/date-fns/src/fp/roundToNearestMinutesWithOptions/index.js b/date-fns/src/fp/roundToNearestMinutesWithOptions/index.js
new file mode 100644
index 0000000..921eacc
--- /dev/null
+++ b/date-fns/src/fp/roundToNearestMinutesWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../roundToNearestMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var roundToNearestMinutesWithOptions = convertToFP(fn, 2)
+
+export default roundToNearestMinutesWithOptions
diff --git a/date-fns/src/fp/roundToNearestMinutesWithOptions/index.js.flow b/date-fns/src/fp/roundToNearestMinutesWithOptions/index.js.flow
new file mode 100644
index 0000000..b19bdb5
--- /dev/null
+++ b/date-fns/src/fp/roundToNearestMinutesWithOptions/index.js.flow
@@ -0,0 +1,64 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ nearestTo?: number,
+ },
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/secondsToHours/index.d.ts b/date-fns/src/fp/secondsToHours/index.d.ts
new file mode 100644
index 0000000..931f3a7
--- /dev/null
+++ b/date-fns/src/fp/secondsToHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { secondsToHours } from 'date-fns/fp'
+export default secondsToHours
diff --git a/date-fns/src/fp/secondsToHours/index.js b/date-fns/src/fp/secondsToHours/index.js
new file mode 100644
index 0000000..3e789d6
--- /dev/null
+++ b/date-fns/src/fp/secondsToHours/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../secondsToHours/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var secondsToHours = convertToFP(fn, 1)
+
+export default secondsToHours
diff --git a/date-fns/src/fp/secondsToHours/index.js.flow b/date-fns/src/fp/secondsToHours/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/secondsToHours/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/secondsToMilliseconds/index.d.ts b/date-fns/src/fp/secondsToMilliseconds/index.d.ts
new file mode 100644
index 0000000..98df8f2
--- /dev/null
+++ b/date-fns/src/fp/secondsToMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { secondsToMilliseconds } from 'date-fns/fp'
+export default secondsToMilliseconds
diff --git a/date-fns/src/fp/secondsToMilliseconds/index.js b/date-fns/src/fp/secondsToMilliseconds/index.js
new file mode 100644
index 0000000..daafff0
--- /dev/null
+++ b/date-fns/src/fp/secondsToMilliseconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../secondsToMilliseconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var secondsToMilliseconds = convertToFP(fn, 1)
+
+export default secondsToMilliseconds
diff --git a/date-fns/src/fp/secondsToMilliseconds/index.js.flow b/date-fns/src/fp/secondsToMilliseconds/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/secondsToMilliseconds/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/secondsToMinutes/index.d.ts b/date-fns/src/fp/secondsToMinutes/index.d.ts
new file mode 100644
index 0000000..e22b528
--- /dev/null
+++ b/date-fns/src/fp/secondsToMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { secondsToMinutes } from 'date-fns/fp'
+export default secondsToMinutes
diff --git a/date-fns/src/fp/secondsToMinutes/index.js b/date-fns/src/fp/secondsToMinutes/index.js
new file mode 100644
index 0000000..9aacc97
--- /dev/null
+++ b/date-fns/src/fp/secondsToMinutes/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../secondsToMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var secondsToMinutes = convertToFP(fn, 1)
+
+export default secondsToMinutes
diff --git a/date-fns/src/fp/secondsToMinutes/index.js.flow b/date-fns/src/fp/secondsToMinutes/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/secondsToMinutes/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/set/index.d.ts b/date-fns/src/fp/set/index.d.ts
new file mode 100644
index 0000000..601f00b
--- /dev/null
+++ b/date-fns/src/fp/set/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { set } from 'date-fns/fp'
+export default set
diff --git a/date-fns/src/fp/set/index.js b/date-fns/src/fp/set/index.js
new file mode 100644
index 0000000..8a17025
--- /dev/null
+++ b/date-fns/src/fp/set/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../set/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var set = convertToFP(fn, 2)
+
+export default set
diff --git a/date-fns/src/fp/set/index.js.flow b/date-fns/src/fp/set/index.js.flow
new file mode 100644
index 0000000..ccc5aca
--- /dev/null
+++ b/date-fns/src/fp/set/index.js.flow
@@ -0,0 +1,70 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ milliseconds?: number,
+ seconds?: number,
+ minutes?: number,
+ hours?: number,
+ date?: number,
+ month?: number,
+ year?: number,
+ },
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/setDate/index.d.ts b/date-fns/src/fp/setDate/index.d.ts
new file mode 100644
index 0000000..1d6343e
--- /dev/null
+++ b/date-fns/src/fp/setDate/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setDate } from 'date-fns/fp'
+export default setDate
diff --git a/date-fns/src/fp/setDate/index.js b/date-fns/src/fp/setDate/index.js
new file mode 100644
index 0000000..6548221
--- /dev/null
+++ b/date-fns/src/fp/setDate/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setDate/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setDate = convertToFP(fn, 2)
+
+export default setDate
diff --git a/date-fns/src/fp/setDate/index.js.flow b/date-fns/src/fp/setDate/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setDate/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setDay/index.d.ts b/date-fns/src/fp/setDay/index.d.ts
new file mode 100644
index 0000000..aa37dd9
--- /dev/null
+++ b/date-fns/src/fp/setDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setDay } from 'date-fns/fp'
+export default setDay
diff --git a/date-fns/src/fp/setDay/index.js b/date-fns/src/fp/setDay/index.js
new file mode 100644
index 0000000..3a7b804
--- /dev/null
+++ b/date-fns/src/fp/setDay/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setDay/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setDay = convertToFP(fn, 2)
+
+export default setDay
diff --git a/date-fns/src/fp/setDay/index.js.flow b/date-fns/src/fp/setDay/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setDay/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setDayOfYear/index.d.ts b/date-fns/src/fp/setDayOfYear/index.d.ts
new file mode 100644
index 0000000..4453a59
--- /dev/null
+++ b/date-fns/src/fp/setDayOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setDayOfYear } from 'date-fns/fp'
+export default setDayOfYear
diff --git a/date-fns/src/fp/setDayOfYear/index.js b/date-fns/src/fp/setDayOfYear/index.js
new file mode 100644
index 0000000..f1af2c7
--- /dev/null
+++ b/date-fns/src/fp/setDayOfYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setDayOfYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setDayOfYear = convertToFP(fn, 2)
+
+export default setDayOfYear
diff --git a/date-fns/src/fp/setDayOfYear/index.js.flow b/date-fns/src/fp/setDayOfYear/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setDayOfYear/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setDayWithOptions/index.d.ts b/date-fns/src/fp/setDayWithOptions/index.d.ts
new file mode 100644
index 0000000..537c230
--- /dev/null
+++ b/date-fns/src/fp/setDayWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setDayWithOptions } from 'date-fns/fp'
+export default setDayWithOptions
diff --git a/date-fns/src/fp/setDayWithOptions/index.js b/date-fns/src/fp/setDayWithOptions/index.js
new file mode 100644
index 0000000..44a02c6
--- /dev/null
+++ b/date-fns/src/fp/setDayWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setDay/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setDayWithOptions = convertToFP(fn, 3)
+
+export default setDayWithOptions
diff --git a/date-fns/src/fp/setDayWithOptions/index.js.flow b/date-fns/src/fp/setDayWithOptions/index.js.flow
new file mode 100644
index 0000000..62d0e5e
--- /dev/null
+++ b/date-fns/src/fp/setDayWithOptions/index.js.flow
@@ -0,0 +1,75 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ number,
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/setHours/index.d.ts b/date-fns/src/fp/setHours/index.d.ts
new file mode 100644
index 0000000..4ca8a06
--- /dev/null
+++ b/date-fns/src/fp/setHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setHours } from 'date-fns/fp'
+export default setHours
diff --git a/date-fns/src/fp/setHours/index.js b/date-fns/src/fp/setHours/index.js
new file mode 100644
index 0000000..81688bf
--- /dev/null
+++ b/date-fns/src/fp/setHours/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setHours/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setHours = convertToFP(fn, 2)
+
+export default setHours
diff --git a/date-fns/src/fp/setHours/index.js.flow b/date-fns/src/fp/setHours/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setHours/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setISODay/index.d.ts b/date-fns/src/fp/setISODay/index.d.ts
new file mode 100644
index 0000000..7319d5a
--- /dev/null
+++ b/date-fns/src/fp/setISODay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setISODay } from 'date-fns/fp'
+export default setISODay
diff --git a/date-fns/src/fp/setISODay/index.js b/date-fns/src/fp/setISODay/index.js
new file mode 100644
index 0000000..0807db1
--- /dev/null
+++ b/date-fns/src/fp/setISODay/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setISODay/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setISODay = convertToFP(fn, 2)
+
+export default setISODay
diff --git a/date-fns/src/fp/setISODay/index.js.flow b/date-fns/src/fp/setISODay/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setISODay/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setISOWeek/index.d.ts b/date-fns/src/fp/setISOWeek/index.d.ts
new file mode 100644
index 0000000..ca354ce
--- /dev/null
+++ b/date-fns/src/fp/setISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setISOWeek } from 'date-fns/fp'
+export default setISOWeek
diff --git a/date-fns/src/fp/setISOWeek/index.js b/date-fns/src/fp/setISOWeek/index.js
new file mode 100644
index 0000000..e7823d2
--- /dev/null
+++ b/date-fns/src/fp/setISOWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setISOWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setISOWeek = convertToFP(fn, 2)
+
+export default setISOWeek
diff --git a/date-fns/src/fp/setISOWeek/index.js.flow b/date-fns/src/fp/setISOWeek/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setISOWeek/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setISOWeekYear/index.d.ts b/date-fns/src/fp/setISOWeekYear/index.d.ts
new file mode 100644
index 0000000..7e1fc21
--- /dev/null
+++ b/date-fns/src/fp/setISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setISOWeekYear } from 'date-fns/fp'
+export default setISOWeekYear
diff --git a/date-fns/src/fp/setISOWeekYear/index.js b/date-fns/src/fp/setISOWeekYear/index.js
new file mode 100644
index 0000000..94234f1
--- /dev/null
+++ b/date-fns/src/fp/setISOWeekYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setISOWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setISOWeekYear = convertToFP(fn, 2)
+
+export default setISOWeekYear
diff --git a/date-fns/src/fp/setISOWeekYear/index.js.flow b/date-fns/src/fp/setISOWeekYear/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setISOWeekYear/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setMilliseconds/index.d.ts b/date-fns/src/fp/setMilliseconds/index.d.ts
new file mode 100644
index 0000000..0ee89fa
--- /dev/null
+++ b/date-fns/src/fp/setMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setMilliseconds } from 'date-fns/fp'
+export default setMilliseconds
diff --git a/date-fns/src/fp/setMilliseconds/index.js b/date-fns/src/fp/setMilliseconds/index.js
new file mode 100644
index 0000000..32e1a47
--- /dev/null
+++ b/date-fns/src/fp/setMilliseconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setMilliseconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setMilliseconds = convertToFP(fn, 2)
+
+export default setMilliseconds
diff --git a/date-fns/src/fp/setMilliseconds/index.js.flow b/date-fns/src/fp/setMilliseconds/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setMilliseconds/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setMinutes/index.d.ts b/date-fns/src/fp/setMinutes/index.d.ts
new file mode 100644
index 0000000..9e8d636
--- /dev/null
+++ b/date-fns/src/fp/setMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setMinutes } from 'date-fns/fp'
+export default setMinutes
diff --git a/date-fns/src/fp/setMinutes/index.js b/date-fns/src/fp/setMinutes/index.js
new file mode 100644
index 0000000..a22b6c1
--- /dev/null
+++ b/date-fns/src/fp/setMinutes/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setMinutes = convertToFP(fn, 2)
+
+export default setMinutes
diff --git a/date-fns/src/fp/setMinutes/index.js.flow b/date-fns/src/fp/setMinutes/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setMinutes/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setMonth/index.d.ts b/date-fns/src/fp/setMonth/index.d.ts
new file mode 100644
index 0000000..c9647b1
--- /dev/null
+++ b/date-fns/src/fp/setMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setMonth } from 'date-fns/fp'
+export default setMonth
diff --git a/date-fns/src/fp/setMonth/index.js b/date-fns/src/fp/setMonth/index.js
new file mode 100644
index 0000000..16de856
--- /dev/null
+++ b/date-fns/src/fp/setMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setMonth = convertToFP(fn, 2)
+
+export default setMonth
diff --git a/date-fns/src/fp/setMonth/index.js.flow b/date-fns/src/fp/setMonth/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setMonth/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setQuarter/index.d.ts b/date-fns/src/fp/setQuarter/index.d.ts
new file mode 100644
index 0000000..b94ff08
--- /dev/null
+++ b/date-fns/src/fp/setQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setQuarter } from 'date-fns/fp'
+export default setQuarter
diff --git a/date-fns/src/fp/setQuarter/index.js b/date-fns/src/fp/setQuarter/index.js
new file mode 100644
index 0000000..8834f9f
--- /dev/null
+++ b/date-fns/src/fp/setQuarter/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setQuarter/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setQuarter = convertToFP(fn, 2)
+
+export default setQuarter
diff --git a/date-fns/src/fp/setQuarter/index.js.flow b/date-fns/src/fp/setQuarter/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setQuarter/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setSeconds/index.d.ts b/date-fns/src/fp/setSeconds/index.d.ts
new file mode 100644
index 0000000..fbfa77e
--- /dev/null
+++ b/date-fns/src/fp/setSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setSeconds } from 'date-fns/fp'
+export default setSeconds
diff --git a/date-fns/src/fp/setSeconds/index.js b/date-fns/src/fp/setSeconds/index.js
new file mode 100644
index 0000000..2568487
--- /dev/null
+++ b/date-fns/src/fp/setSeconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setSeconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setSeconds = convertToFP(fn, 2)
+
+export default setSeconds
diff --git a/date-fns/src/fp/setSeconds/index.js.flow b/date-fns/src/fp/setSeconds/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setSeconds/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setWeek/index.d.ts b/date-fns/src/fp/setWeek/index.d.ts
new file mode 100644
index 0000000..d9edcaa
--- /dev/null
+++ b/date-fns/src/fp/setWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setWeek } from 'date-fns/fp'
+export default setWeek
diff --git a/date-fns/src/fp/setWeek/index.js b/date-fns/src/fp/setWeek/index.js
new file mode 100644
index 0000000..b1788fc
--- /dev/null
+++ b/date-fns/src/fp/setWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setWeek = convertToFP(fn, 2)
+
+export default setWeek
diff --git a/date-fns/src/fp/setWeek/index.js.flow b/date-fns/src/fp/setWeek/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setWeek/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setWeekWithOptions/index.d.ts b/date-fns/src/fp/setWeekWithOptions/index.d.ts
new file mode 100644
index 0000000..2971c7a
--- /dev/null
+++ b/date-fns/src/fp/setWeekWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setWeekWithOptions } from 'date-fns/fp'
+export default setWeekWithOptions
diff --git a/date-fns/src/fp/setWeekWithOptions/index.js b/date-fns/src/fp/setWeekWithOptions/index.js
new file mode 100644
index 0000000..bbbb2ea
--- /dev/null
+++ b/date-fns/src/fp/setWeekWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setWeekWithOptions = convertToFP(fn, 3)
+
+export default setWeekWithOptions
diff --git a/date-fns/src/fp/setWeekWithOptions/index.js.flow b/date-fns/src/fp/setWeekWithOptions/index.js.flow
new file mode 100644
index 0000000..ffea29c
--- /dev/null
+++ b/date-fns/src/fp/setWeekWithOptions/index.js.flow
@@ -0,0 +1,76 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ number,
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/setWeekYear/index.d.ts b/date-fns/src/fp/setWeekYear/index.d.ts
new file mode 100644
index 0000000..7d2c6cc
--- /dev/null
+++ b/date-fns/src/fp/setWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setWeekYear } from 'date-fns/fp'
+export default setWeekYear
diff --git a/date-fns/src/fp/setWeekYear/index.js b/date-fns/src/fp/setWeekYear/index.js
new file mode 100644
index 0000000..2b34888
--- /dev/null
+++ b/date-fns/src/fp/setWeekYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setWeekYear = convertToFP(fn, 2)
+
+export default setWeekYear
diff --git a/date-fns/src/fp/setWeekYear/index.js.flow b/date-fns/src/fp/setWeekYear/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setWeekYear/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/setWeekYearWithOptions/index.d.ts b/date-fns/src/fp/setWeekYearWithOptions/index.d.ts
new file mode 100644
index 0000000..5d52f8f
--- /dev/null
+++ b/date-fns/src/fp/setWeekYearWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setWeekYearWithOptions } from 'date-fns/fp'
+export default setWeekYearWithOptions
diff --git a/date-fns/src/fp/setWeekYearWithOptions/index.js b/date-fns/src/fp/setWeekYearWithOptions/index.js
new file mode 100644
index 0000000..2f13647
--- /dev/null
+++ b/date-fns/src/fp/setWeekYearWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setWeekYearWithOptions = convertToFP(fn, 3)
+
+export default setWeekYearWithOptions
diff --git a/date-fns/src/fp/setWeekYearWithOptions/index.js.flow b/date-fns/src/fp/setWeekYearWithOptions/index.js.flow
new file mode 100644
index 0000000..ffea29c
--- /dev/null
+++ b/date-fns/src/fp/setWeekYearWithOptions/index.js.flow
@@ -0,0 +1,76 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+type CurriedFn3<A, B, C, R> = <A>(
+ a: A
+) =>
+ | CurriedFn2<B, C, R>
+ | (<A, B>(
+ a: A,
+ b: B
+ ) => CurriedFn1<C, R> | (<A, B, C>(a: A, b: B, c: C) => R))
+
+declare module.exports: CurriedFn3<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ number,
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/setYear/index.d.ts b/date-fns/src/fp/setYear/index.d.ts
new file mode 100644
index 0000000..be24ce0
--- /dev/null
+++ b/date-fns/src/fp/setYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setYear } from 'date-fns/fp'
+export default setYear
diff --git a/date-fns/src/fp/setYear/index.js b/date-fns/src/fp/setYear/index.js
new file mode 100644
index 0000000..edd0e1c
--- /dev/null
+++ b/date-fns/src/fp/setYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../setYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var setYear = convertToFP(fn, 2)
+
+export default setYear
diff --git a/date-fns/src/fp/setYear/index.js.flow b/date-fns/src/fp/setYear/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/setYear/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/startOfDay/index.d.ts b/date-fns/src/fp/startOfDay/index.d.ts
new file mode 100644
index 0000000..fed6b05
--- /dev/null
+++ b/date-fns/src/fp/startOfDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfDay } from 'date-fns/fp'
+export default startOfDay
diff --git a/date-fns/src/fp/startOfDay/index.js b/date-fns/src/fp/startOfDay/index.js
new file mode 100644
index 0000000..2347aef
--- /dev/null
+++ b/date-fns/src/fp/startOfDay/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfDay/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfDay = convertToFP(fn, 1)
+
+export default startOfDay
diff --git a/date-fns/src/fp/startOfDay/index.js.flow b/date-fns/src/fp/startOfDay/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfDay/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfDecade/index.d.ts b/date-fns/src/fp/startOfDecade/index.d.ts
new file mode 100644
index 0000000..127c156
--- /dev/null
+++ b/date-fns/src/fp/startOfDecade/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfDecade } from 'date-fns/fp'
+export default startOfDecade
diff --git a/date-fns/src/fp/startOfDecade/index.js b/date-fns/src/fp/startOfDecade/index.js
new file mode 100644
index 0000000..a051c74
--- /dev/null
+++ b/date-fns/src/fp/startOfDecade/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfDecade/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfDecade = convertToFP(fn, 1)
+
+export default startOfDecade
diff --git a/date-fns/src/fp/startOfDecade/index.js.flow b/date-fns/src/fp/startOfDecade/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfDecade/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfHour/index.d.ts b/date-fns/src/fp/startOfHour/index.d.ts
new file mode 100644
index 0000000..9a1905e
--- /dev/null
+++ b/date-fns/src/fp/startOfHour/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfHour } from 'date-fns/fp'
+export default startOfHour
diff --git a/date-fns/src/fp/startOfHour/index.js b/date-fns/src/fp/startOfHour/index.js
new file mode 100644
index 0000000..33d20e6
--- /dev/null
+++ b/date-fns/src/fp/startOfHour/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfHour/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfHour = convertToFP(fn, 1)
+
+export default startOfHour
diff --git a/date-fns/src/fp/startOfHour/index.js.flow b/date-fns/src/fp/startOfHour/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfHour/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfISOWeek/index.d.ts b/date-fns/src/fp/startOfISOWeek/index.d.ts
new file mode 100644
index 0000000..008f896
--- /dev/null
+++ b/date-fns/src/fp/startOfISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfISOWeek } from 'date-fns/fp'
+export default startOfISOWeek
diff --git a/date-fns/src/fp/startOfISOWeek/index.js b/date-fns/src/fp/startOfISOWeek/index.js
new file mode 100644
index 0000000..e84f988
--- /dev/null
+++ b/date-fns/src/fp/startOfISOWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfISOWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfISOWeek = convertToFP(fn, 1)
+
+export default startOfISOWeek
diff --git a/date-fns/src/fp/startOfISOWeek/index.js.flow b/date-fns/src/fp/startOfISOWeek/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfISOWeek/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfISOWeekYear/index.d.ts b/date-fns/src/fp/startOfISOWeekYear/index.d.ts
new file mode 100644
index 0000000..aab0b5a
--- /dev/null
+++ b/date-fns/src/fp/startOfISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfISOWeekYear } from 'date-fns/fp'
+export default startOfISOWeekYear
diff --git a/date-fns/src/fp/startOfISOWeekYear/index.js b/date-fns/src/fp/startOfISOWeekYear/index.js
new file mode 100644
index 0000000..e33f0ed
--- /dev/null
+++ b/date-fns/src/fp/startOfISOWeekYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfISOWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfISOWeekYear = convertToFP(fn, 1)
+
+export default startOfISOWeekYear
diff --git a/date-fns/src/fp/startOfISOWeekYear/index.js.flow b/date-fns/src/fp/startOfISOWeekYear/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfISOWeekYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfMinute/index.d.ts b/date-fns/src/fp/startOfMinute/index.d.ts
new file mode 100644
index 0000000..013f3a4
--- /dev/null
+++ b/date-fns/src/fp/startOfMinute/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfMinute } from 'date-fns/fp'
+export default startOfMinute
diff --git a/date-fns/src/fp/startOfMinute/index.js b/date-fns/src/fp/startOfMinute/index.js
new file mode 100644
index 0000000..e7d001d
--- /dev/null
+++ b/date-fns/src/fp/startOfMinute/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfMinute/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfMinute = convertToFP(fn, 1)
+
+export default startOfMinute
diff --git a/date-fns/src/fp/startOfMinute/index.js.flow b/date-fns/src/fp/startOfMinute/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfMinute/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfMonth/index.d.ts b/date-fns/src/fp/startOfMonth/index.d.ts
new file mode 100644
index 0000000..edbb15f
--- /dev/null
+++ b/date-fns/src/fp/startOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfMonth } from 'date-fns/fp'
+export default startOfMonth
diff --git a/date-fns/src/fp/startOfMonth/index.js b/date-fns/src/fp/startOfMonth/index.js
new file mode 100644
index 0000000..fafef31
--- /dev/null
+++ b/date-fns/src/fp/startOfMonth/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfMonth/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfMonth = convertToFP(fn, 1)
+
+export default startOfMonth
diff --git a/date-fns/src/fp/startOfMonth/index.js.flow b/date-fns/src/fp/startOfMonth/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfMonth/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfQuarter/index.d.ts b/date-fns/src/fp/startOfQuarter/index.d.ts
new file mode 100644
index 0000000..1c3b602
--- /dev/null
+++ b/date-fns/src/fp/startOfQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfQuarter } from 'date-fns/fp'
+export default startOfQuarter
diff --git a/date-fns/src/fp/startOfQuarter/index.js b/date-fns/src/fp/startOfQuarter/index.js
new file mode 100644
index 0000000..8a57f8f
--- /dev/null
+++ b/date-fns/src/fp/startOfQuarter/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfQuarter/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfQuarter = convertToFP(fn, 1)
+
+export default startOfQuarter
diff --git a/date-fns/src/fp/startOfQuarter/index.js.flow b/date-fns/src/fp/startOfQuarter/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfQuarter/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfSecond/index.d.ts b/date-fns/src/fp/startOfSecond/index.d.ts
new file mode 100644
index 0000000..866aa6f
--- /dev/null
+++ b/date-fns/src/fp/startOfSecond/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfSecond } from 'date-fns/fp'
+export default startOfSecond
diff --git a/date-fns/src/fp/startOfSecond/index.js b/date-fns/src/fp/startOfSecond/index.js
new file mode 100644
index 0000000..91548ab
--- /dev/null
+++ b/date-fns/src/fp/startOfSecond/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfSecond/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfSecond = convertToFP(fn, 1)
+
+export default startOfSecond
diff --git a/date-fns/src/fp/startOfSecond/index.js.flow b/date-fns/src/fp/startOfSecond/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfSecond/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfWeek/index.d.ts b/date-fns/src/fp/startOfWeek/index.d.ts
new file mode 100644
index 0000000..ab17841
--- /dev/null
+++ b/date-fns/src/fp/startOfWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfWeek } from 'date-fns/fp'
+export default startOfWeek
diff --git a/date-fns/src/fp/startOfWeek/index.js b/date-fns/src/fp/startOfWeek/index.js
new file mode 100644
index 0000000..7de56af
--- /dev/null
+++ b/date-fns/src/fp/startOfWeek/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfWeek = convertToFP(fn, 1)
+
+export default startOfWeek
diff --git a/date-fns/src/fp/startOfWeek/index.js.flow b/date-fns/src/fp/startOfWeek/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfWeek/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfWeekWithOptions/index.d.ts b/date-fns/src/fp/startOfWeekWithOptions/index.d.ts
new file mode 100644
index 0000000..0bd5568
--- /dev/null
+++ b/date-fns/src/fp/startOfWeekWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfWeekWithOptions } from 'date-fns/fp'
+export default startOfWeekWithOptions
diff --git a/date-fns/src/fp/startOfWeekWithOptions/index.js b/date-fns/src/fp/startOfWeekWithOptions/index.js
new file mode 100644
index 0000000..22b45ed
--- /dev/null
+++ b/date-fns/src/fp/startOfWeekWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfWeek/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfWeekWithOptions = convertToFP(fn, 2)
+
+export default startOfWeekWithOptions
diff --git a/date-fns/src/fp/startOfWeekWithOptions/index.js.flow b/date-fns/src/fp/startOfWeekWithOptions/index.js.flow
new file mode 100644
index 0000000..9821646
--- /dev/null
+++ b/date-fns/src/fp/startOfWeekWithOptions/index.js.flow
@@ -0,0 +1,65 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/startOfWeekYear/index.d.ts b/date-fns/src/fp/startOfWeekYear/index.d.ts
new file mode 100644
index 0000000..17ce1cb
--- /dev/null
+++ b/date-fns/src/fp/startOfWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfWeekYear } from 'date-fns/fp'
+export default startOfWeekYear
diff --git a/date-fns/src/fp/startOfWeekYear/index.js b/date-fns/src/fp/startOfWeekYear/index.js
new file mode 100644
index 0000000..aeb28a6
--- /dev/null
+++ b/date-fns/src/fp/startOfWeekYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfWeekYear = convertToFP(fn, 1)
+
+export default startOfWeekYear
diff --git a/date-fns/src/fp/startOfWeekYear/index.js.flow b/date-fns/src/fp/startOfWeekYear/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfWeekYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/startOfWeekYearWithOptions/index.d.ts b/date-fns/src/fp/startOfWeekYearWithOptions/index.d.ts
new file mode 100644
index 0000000..26f9e80
--- /dev/null
+++ b/date-fns/src/fp/startOfWeekYearWithOptions/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfWeekYearWithOptions } from 'date-fns/fp'
+export default startOfWeekYearWithOptions
diff --git a/date-fns/src/fp/startOfWeekYearWithOptions/index.js b/date-fns/src/fp/startOfWeekYearWithOptions/index.js
new file mode 100644
index 0000000..a2c4107
--- /dev/null
+++ b/date-fns/src/fp/startOfWeekYearWithOptions/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfWeekYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfWeekYearWithOptions = convertToFP(fn, 2)
+
+export default startOfWeekYearWithOptions
diff --git a/date-fns/src/fp/startOfWeekYearWithOptions/index.js.flow b/date-fns/src/fp/startOfWeekYearWithOptions/index.js.flow
new file mode 100644
index 0000000..236eaa5
--- /dev/null
+++ b/date-fns/src/fp/startOfWeekYearWithOptions/index.js.flow
@@ -0,0 +1,66 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ locale?: Locale,
+ },
+ Date | number,
+ Date
+>
diff --git a/date-fns/src/fp/startOfYear/index.d.ts b/date-fns/src/fp/startOfYear/index.d.ts
new file mode 100644
index 0000000..6e94924
--- /dev/null
+++ b/date-fns/src/fp/startOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfYear } from 'date-fns/fp'
+export default startOfYear
diff --git a/date-fns/src/fp/startOfYear/index.js b/date-fns/src/fp/startOfYear/index.js
new file mode 100644
index 0000000..2f7559b
--- /dev/null
+++ b/date-fns/src/fp/startOfYear/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../startOfYear/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var startOfYear = convertToFP(fn, 1)
+
+export default startOfYear
diff --git a/date-fns/src/fp/startOfYear/index.js.flow b/date-fns/src/fp/startOfYear/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/startOfYear/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/sub/index.d.ts b/date-fns/src/fp/sub/index.d.ts
new file mode 100644
index 0000000..c50f32f
--- /dev/null
+++ b/date-fns/src/fp/sub/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { sub } from 'date-fns/fp'
+export default sub
diff --git a/date-fns/src/fp/sub/index.js b/date-fns/src/fp/sub/index.js
new file mode 100644
index 0000000..cc93525
--- /dev/null
+++ b/date-fns/src/fp/sub/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../sub/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var sub = convertToFP(fn, 2)
+
+export default sub
diff --git a/date-fns/src/fp/sub/index.js.flow b/date-fns/src/fp/sub/index.js.flow
new file mode 100644
index 0000000..3d4363b
--- /dev/null
+++ b/date-fns/src/fp/sub/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<Duration, Date | number, Date>
diff --git a/date-fns/src/fp/subBusinessDays/index.d.ts b/date-fns/src/fp/subBusinessDays/index.d.ts
new file mode 100644
index 0000000..6f7c95a
--- /dev/null
+++ b/date-fns/src/fp/subBusinessDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subBusinessDays } from 'date-fns/fp'
+export default subBusinessDays
diff --git a/date-fns/src/fp/subBusinessDays/index.js b/date-fns/src/fp/subBusinessDays/index.js
new file mode 100644
index 0000000..805c008
--- /dev/null
+++ b/date-fns/src/fp/subBusinessDays/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subBusinessDays/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subBusinessDays = convertToFP(fn, 2)
+
+export default subBusinessDays
diff --git a/date-fns/src/fp/subBusinessDays/index.js.flow b/date-fns/src/fp/subBusinessDays/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subBusinessDays/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subDays/index.d.ts b/date-fns/src/fp/subDays/index.d.ts
new file mode 100644
index 0000000..8a72d43
--- /dev/null
+++ b/date-fns/src/fp/subDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subDays } from 'date-fns/fp'
+export default subDays
diff --git a/date-fns/src/fp/subDays/index.js b/date-fns/src/fp/subDays/index.js
new file mode 100644
index 0000000..2b5d109
--- /dev/null
+++ b/date-fns/src/fp/subDays/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subDays/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subDays = convertToFP(fn, 2)
+
+export default subDays
diff --git a/date-fns/src/fp/subDays/index.js.flow b/date-fns/src/fp/subDays/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subDays/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subHours/index.d.ts b/date-fns/src/fp/subHours/index.d.ts
new file mode 100644
index 0000000..6fcfa1f
--- /dev/null
+++ b/date-fns/src/fp/subHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subHours } from 'date-fns/fp'
+export default subHours
diff --git a/date-fns/src/fp/subHours/index.js b/date-fns/src/fp/subHours/index.js
new file mode 100644
index 0000000..6048270
--- /dev/null
+++ b/date-fns/src/fp/subHours/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subHours/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subHours = convertToFP(fn, 2)
+
+export default subHours
diff --git a/date-fns/src/fp/subHours/index.js.flow b/date-fns/src/fp/subHours/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subHours/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subISOWeekYears/index.d.ts b/date-fns/src/fp/subISOWeekYears/index.d.ts
new file mode 100644
index 0000000..430fca4
--- /dev/null
+++ b/date-fns/src/fp/subISOWeekYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subISOWeekYears } from 'date-fns/fp'
+export default subISOWeekYears
diff --git a/date-fns/src/fp/subISOWeekYears/index.js b/date-fns/src/fp/subISOWeekYears/index.js
new file mode 100644
index 0000000..af21ed1
--- /dev/null
+++ b/date-fns/src/fp/subISOWeekYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subISOWeekYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subISOWeekYears = convertToFP(fn, 2)
+
+export default subISOWeekYears
diff --git a/date-fns/src/fp/subISOWeekYears/index.js.flow b/date-fns/src/fp/subISOWeekYears/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subISOWeekYears/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subMilliseconds/index.d.ts b/date-fns/src/fp/subMilliseconds/index.d.ts
new file mode 100644
index 0000000..9310a1c
--- /dev/null
+++ b/date-fns/src/fp/subMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subMilliseconds } from 'date-fns/fp'
+export default subMilliseconds
diff --git a/date-fns/src/fp/subMilliseconds/index.js b/date-fns/src/fp/subMilliseconds/index.js
new file mode 100644
index 0000000..4d1cfb4
--- /dev/null
+++ b/date-fns/src/fp/subMilliseconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subMilliseconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subMilliseconds = convertToFP(fn, 2)
+
+export default subMilliseconds
diff --git a/date-fns/src/fp/subMilliseconds/index.js.flow b/date-fns/src/fp/subMilliseconds/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subMilliseconds/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subMinutes/index.d.ts b/date-fns/src/fp/subMinutes/index.d.ts
new file mode 100644
index 0000000..0b7db10
--- /dev/null
+++ b/date-fns/src/fp/subMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subMinutes } from 'date-fns/fp'
+export default subMinutes
diff --git a/date-fns/src/fp/subMinutes/index.js b/date-fns/src/fp/subMinutes/index.js
new file mode 100644
index 0000000..de68341
--- /dev/null
+++ b/date-fns/src/fp/subMinutes/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subMinutes/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subMinutes = convertToFP(fn, 2)
+
+export default subMinutes
diff --git a/date-fns/src/fp/subMinutes/index.js.flow b/date-fns/src/fp/subMinutes/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subMinutes/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subMonths/index.d.ts b/date-fns/src/fp/subMonths/index.d.ts
new file mode 100644
index 0000000..3d03d27
--- /dev/null
+++ b/date-fns/src/fp/subMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subMonths } from 'date-fns/fp'
+export default subMonths
diff --git a/date-fns/src/fp/subMonths/index.js b/date-fns/src/fp/subMonths/index.js
new file mode 100644
index 0000000..328a912
--- /dev/null
+++ b/date-fns/src/fp/subMonths/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subMonths/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subMonths = convertToFP(fn, 2)
+
+export default subMonths
diff --git a/date-fns/src/fp/subMonths/index.js.flow b/date-fns/src/fp/subMonths/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subMonths/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subQuarters/index.d.ts b/date-fns/src/fp/subQuarters/index.d.ts
new file mode 100644
index 0000000..6362cec
--- /dev/null
+++ b/date-fns/src/fp/subQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subQuarters } from 'date-fns/fp'
+export default subQuarters
diff --git a/date-fns/src/fp/subQuarters/index.js b/date-fns/src/fp/subQuarters/index.js
new file mode 100644
index 0000000..ae7cfd7
--- /dev/null
+++ b/date-fns/src/fp/subQuarters/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subQuarters/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subQuarters = convertToFP(fn, 2)
+
+export default subQuarters
diff --git a/date-fns/src/fp/subQuarters/index.js.flow b/date-fns/src/fp/subQuarters/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subQuarters/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subSeconds/index.d.ts b/date-fns/src/fp/subSeconds/index.d.ts
new file mode 100644
index 0000000..c5c6635
--- /dev/null
+++ b/date-fns/src/fp/subSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subSeconds } from 'date-fns/fp'
+export default subSeconds
diff --git a/date-fns/src/fp/subSeconds/index.js b/date-fns/src/fp/subSeconds/index.js
new file mode 100644
index 0000000..5e70757
--- /dev/null
+++ b/date-fns/src/fp/subSeconds/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subSeconds/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subSeconds = convertToFP(fn, 2)
+
+export default subSeconds
diff --git a/date-fns/src/fp/subSeconds/index.js.flow b/date-fns/src/fp/subSeconds/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subSeconds/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subWeeks/index.d.ts b/date-fns/src/fp/subWeeks/index.d.ts
new file mode 100644
index 0000000..18eebcb
--- /dev/null
+++ b/date-fns/src/fp/subWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subWeeks } from 'date-fns/fp'
+export default subWeeks
diff --git a/date-fns/src/fp/subWeeks/index.js b/date-fns/src/fp/subWeeks/index.js
new file mode 100644
index 0000000..496a43a
--- /dev/null
+++ b/date-fns/src/fp/subWeeks/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subWeeks/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subWeeks = convertToFP(fn, 2)
+
+export default subWeeks
diff --git a/date-fns/src/fp/subWeeks/index.js.flow b/date-fns/src/fp/subWeeks/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subWeeks/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/subYears/index.d.ts b/date-fns/src/fp/subYears/index.d.ts
new file mode 100644
index 0000000..55abb01
--- /dev/null
+++ b/date-fns/src/fp/subYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subYears } from 'date-fns/fp'
+export default subYears
diff --git a/date-fns/src/fp/subYears/index.js b/date-fns/src/fp/subYears/index.js
new file mode 100644
index 0000000..5ae0b22
--- /dev/null
+++ b/date-fns/src/fp/subYears/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../subYears/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var subYears = convertToFP(fn, 2)
+
+export default subYears
diff --git a/date-fns/src/fp/subYears/index.js.flow b/date-fns/src/fp/subYears/index.js.flow
new file mode 100644
index 0000000..75c22e2
--- /dev/null
+++ b/date-fns/src/fp/subYears/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+type CurriedFn2<A, B, R> = <A>(
+ a: A
+) => CurriedFn1<B, R> | (<A, B>(a: A, b: B) => R)
+
+declare module.exports: CurriedFn2<number, Date | number, Date>
diff --git a/date-fns/src/fp/test.js b/date-fns/src/fp/test.js
new file mode 100644
index 0000000..cb69259
--- /dev/null
+++ b/date-fns/src/fp/test.js
@@ -0,0 +1,1045 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import * as fp from '.'
+
+describe('FP functions', function() {
+ it('addDays', function() {
+ var result = fp.addDays(10)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 11))
+ })
+
+ it('addHours', function() {
+ var result = fp.addHours(2)(new Date(2014, 6 /* Jul */, 10, 23, 0))
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 11, 1, 0))
+ })
+
+ it('addISOWeekYears', function() {
+ var result = fp.addISOWeekYears(5)(new Date(2010, 6 /* Jul */, 2))
+ assert.deepEqual(result, new Date(2015, 5 /* Jun */, 26))
+ })
+
+ it('addMilliseconds', function() {
+ var result = fp.addMilliseconds(750)(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0)
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 750))
+ })
+
+ it('addMinutes', function() {
+ var result = fp.addMinutes(30)(new Date(2014, 6 /* Jul */, 10, 12, 0))
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 30))
+ })
+
+ it('addMonths', function() {
+ var result = fp.addMonths(5)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2015, 1 /* Feb */, 1))
+ })
+
+ it('addQuarters', function() {
+ var result = fp.addQuarters(1)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 1))
+ })
+
+ it('addSeconds', function() {
+ var result = fp.addSeconds(30)(new Date(2014, 6 /* Jul */, 10, 12, 45, 0))
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 30))
+ })
+
+ it('addWeeks', function() {
+ var result = fp.addWeeks(4)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 29))
+ })
+
+ it('addYears', function() {
+ var result = fp.addYears(5)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2019, 8 /* Sep */, 1))
+ })
+
+ it('areIntervalsOverlapping', function() {
+ var leftInterval = {
+ start: new Date(2016, 10, 10, 13, 0, 0),
+ end: new Date(2016, 11, 3, 15, 0, 0)
+ }
+ var rightInterval = {
+ start: new Date(2016, 10, 14),
+ end: new Date(2016, 10, 14)
+ }
+
+ var result = fp.areIntervalsOverlapping(rightInterval)(leftInterval)
+ assert(result === true)
+ })
+
+ it('closestIndexTo', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var result = fp.closestIndexTo([
+ new Date(2015, 7 /* Aug */, 31),
+ new Date(2012, 6 /* Jul */, 2)
+ ])(date)
+ assert.equal(result, 0)
+ })
+
+ it('closestTo', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ var result = fp.closestTo([
+ new Date(2015, 7 /* Aug */, 31),
+ new Date(2012, 6 /* Jul */, 2)
+ ])(date)
+ assert.deepEqual(result, new Date(2015, 7 /* Aug */, 31))
+ })
+
+ it('compareAsc', function() {
+ var result = fp.compareAsc(new Date(1989, 6 /* Jul */, 10))(
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === -1)
+ })
+
+ it('compareDesc', function() {
+ var result = fp.compareDesc(new Date(1989, 6 /* Jul */, 10))(
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === 1)
+ })
+
+ it('differenceInCalendarDays', function() {
+ var result = fp.differenceInCalendarDays(
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )(new Date(2012, 6 /* Jul */, 2, 18, 0))
+ assert(result === 366)
+ })
+
+ it('differenceInCalendarISOWeeks', function() {
+ var result = fp.differenceInCalendarISOWeeks(
+ new Date(2014, 5 /* Jun */, 29, 6, 0)
+ )(new Date(2014, 6 /* Jul */, 8, 18, 0))
+ assert(result === 2)
+ })
+
+ it('differenceInCalendarISOWeekYears', function() {
+ var result = fp.differenceInCalendarISOWeekYears(
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )(new Date(2012, 6 /* Jul */, 2, 18, 0))
+ assert(result === 1)
+ })
+
+ it('differenceInCalendarMonths', function() {
+ var result = fp.differenceInCalendarMonths(
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )(new Date(2012, 6 /* Jul */, 2, 18, 0))
+ assert(result === 12)
+ })
+
+ it('differenceInCalendarQuarters', function() {
+ var result = fp.differenceInCalendarQuarters(
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )(new Date(2012, 6 /* Jul */, 2, 18, 0))
+ assert(result === 4)
+ })
+
+ it('differenceInCalendarWeeks', function() {
+ var result = fp.differenceInCalendarWeeks(
+ new Date(2014, 5 /* Jun */, 29, 6, 0)
+ )(new Date(2014, 6 /* Jul */, 8, 18, 0))
+ assert(result === 1)
+ })
+
+ it('differenceInCalendarWeeksWithOptions', function() {
+ var result = fp.differenceInCalendarWeeksWithOptions({ weekStartsOn: 1 })(
+ new Date(2014, 5 /* Jun */, 29, 6, 0)
+ )(new Date(2014, 6 /* Jul */, 8, 18, 0))
+ assert(result === 2)
+ })
+
+ it('differenceInCalendarYears', function() {
+ var result = fp.differenceInCalendarYears(
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )(new Date(2012, 6 /* Jul */, 2, 18, 0))
+ assert(result === 1)
+ })
+
+ it('differenceInDays', function() {
+ var result = fp.differenceInDays(new Date(2011, 6 /* Jul */, 2, 6, 0))(
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === 366)
+ })
+
+ it('differenceInHours', function() {
+ var result = fp.differenceInHours(new Date(2014, 6 /* Jul */, 2, 6, 0))(
+ new Date(2014, 6 /* Jul */, 2, 20, 0)
+ )
+ assert(result === 14)
+ })
+
+ it('differenceInISOWeekYears', function() {
+ var result = fp.differenceInISOWeekYears(
+ new Date(2011, 6 /* Jul */, 2, 6, 0)
+ )(new Date(2012, 6 /* Jul */, 2, 18, 0))
+ assert(result === 1)
+ })
+
+ it('differenceInMilliseconds', function() {
+ var result = fp.differenceInMilliseconds(
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 20, 600)
+ )(new Date(2014, 6 /* Jul */, 2, 12, 30, 20, 700))
+ assert(result === 100)
+ })
+
+ it('differenceInMinutes', function() {
+ var result = fp.differenceInMinutes(new Date(2014, 6 /* Jul */, 2, 12, 6))(
+ new Date(2014, 6 /* Jul */, 2, 12, 20)
+ )
+ assert(result === 14)
+ })
+
+ it('differenceInMonths', function() {
+ var result = fp.differenceInMonths(new Date(2011, 6 /* Jul */, 2, 6, 0))(
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === 12)
+ })
+
+ it('differenceInQuarters', function() {
+ var result = fp.differenceInQuarters(new Date(2011, 6 /* Jul */, 2, 6, 0))(
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === 4)
+ })
+
+ it('differenceInSeconds', function() {
+ var result = fp.differenceInSeconds(
+ new Date(2014, 6 /* Jul */, 2, 12, 30, 6)
+ )(new Date(2014, 6 /* Jul */, 2, 12, 30, 20))
+ assert(result === 14)
+ })
+
+ it('differenceInWeeks', function() {
+ var result = fp.differenceInWeeks(new Date(2014, 5 /* Jun */, 29, 6, 0))(
+ new Date(2014, 6 /* Jul */, 8, 18, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('differenceInYears', function() {
+ var result = fp.differenceInYears(new Date(2011, 6 /* Jul */, 2, 6, 0))(
+ new Date(2012, 6 /* Jul */, 2, 18, 0)
+ )
+ assert(result === 1)
+ })
+
+ it('eachDayOfInterval', function() {
+ var interval = {
+ start: new Date(2014, 9 /* Oct */, 6),
+ end: new Date(2014, 9 /* Oct */, 12)
+ }
+ var result = fp.eachDayOfInterval(interval)
+ assert.deepEqual(result, [
+ new Date(2014, 9 /* Oct */, 6),
+ new Date(2014, 9 /* Oct */, 7),
+ new Date(2014, 9 /* Oct */, 8),
+ new Date(2014, 9 /* Oct */, 9),
+ new Date(2014, 9 /* Oct */, 10),
+ new Date(2014, 9 /* Oct */, 11),
+ new Date(2014, 9 /* Oct */, 12)
+ ])
+ })
+
+ it('eachWeekOfInterval', function() {
+ var interval = {
+ start: new Date(2014, 9 /* Oct */, 6),
+ end: new Date(2014, 10 /* Nov */, 23)
+ }
+ var result = fp.eachWeekOfInterval(interval)
+ assert.deepEqual(result, [
+ new Date(2014, 9 /* Oct */, 5),
+ new Date(2014, 9 /* Oct */, 12),
+ new Date(2014, 9 /* Oct */, 19),
+ new Date(2014, 9 /* Oct */, 26),
+ new Date(2014, 10 /* Nov */, 2),
+ new Date(2014, 10 /* Nov */, 9),
+ new Date(2014, 10 /* Nov */, 16),
+ new Date(2014, 10 /* Nov */, 23)
+ ])
+ })
+
+ it('eachWeekOfIntervalWithOptions', function() {
+ var interval = {
+ start: new Date(2014, 9 /* Oct */, 6),
+ end: new Date(2014, 10 /* Nov */, 23)
+ }
+ var result = fp.eachWeekOfIntervalWithOptions({ weekStartsOn: 2 })(interval)
+ assert.deepEqual(result, [
+ new Date(2014, 8 /* Sep */, 30),
+ new Date(2014, 9 /* Oct */, 7),
+ new Date(2014, 9 /* Oct */, 14),
+ new Date(2014, 9 /* Oct */, 21),
+ new Date(2014, 9 /* Oct */, 28),
+ new Date(2014, 10 /* Nov */, 4),
+ new Date(2014, 10 /* Nov */, 11),
+ new Date(2014, 10 /* Nov */, 18)
+ ])
+ })
+
+ it('endOfDay', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.endOfDay(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 2, 23, 59, 59, 999))
+ })
+
+ it('endOfHour', function() {
+ var date = new Date(2014, 11, 1, 22, 15)
+ var result = fp.endOfHour(date)
+ assert.deepEqual(result, new Date(2014, 11, 1, 22, 59, 59, 999))
+ })
+
+ it('endOfISOWeek', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.endOfISOWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7, 23, 59, 59, 999))
+ })
+
+ it('endOfISOWeekYear', function() {
+ var result = fp.endOfISOWeekYear(new Date(2009, 0 /* Jan */, 1, 16, 0))
+ assert.deepEqual(result, new Date(2010, 0 /* Jan */, 3, 23, 59, 59, 999))
+ })
+
+ it('endOfMinute', function() {
+ var date = new Date(2014, 11, 1, 22, 15)
+ var result = fp.endOfMinute(date)
+ assert.deepEqual(result, new Date(2014, 11, 1, 22, 15, 59, 999))
+ })
+
+ it('endOfMonth', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.endOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30, 23, 59, 59, 999))
+ })
+
+ it('endOfQuarter', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.endOfQuarter(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30, 23, 59, 59, 999))
+ })
+
+ it('endOfSecond', function() {
+ var date = new Date(2014, 11, 1, 22, 15, 30)
+ var result = fp.endOfSecond(date)
+ assert.deepEqual(result, new Date(2014, 11, 1, 22, 15, 30, 999))
+ })
+
+ it('endOfWeek', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.endOfWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 6, 23, 59, 59, 999))
+ })
+
+ it('endOfWeekWithOptions', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.endOfWeekWithOptions({ weekStartsOn: 2 })(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 8, 23, 59, 59, 999))
+ })
+
+ it('endOfYear', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.endOfYear(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 31, 23, 59, 59, 999))
+ })
+
+ it('format', function() {
+ var date = new Date(2014, 3, 4)
+ var result = fp.format('yyyy-MM-dd')(date)
+ assert(result === '2014-04-04')
+ })
+
+ it('formatWithOptions', function() {
+ var date = new Date(2014, 3, 4)
+ var result = fp.formatWithOptions({})('yyyy-MM-dd')(date)
+ assert(result === '2014-04-04')
+ })
+
+ it('formatDistance', function() {
+ var result = fp.formatDistance(new Date(1986, 3, 4, 10, 34, 50))(
+ new Date(1986, 3, 4, 10, 32, 0)
+ )
+ assert(result === '3 minutes')
+ })
+
+ it('formatDistanceWithOptions', function() {
+ var result = fp.formatDistanceWithOptions({ includeSeconds: true })(
+ new Date(1986, 3, 4, 10, 32, 3)
+ )(new Date(1986, 3, 4, 10, 32, 0))
+ assert(result === 'less than 5 seconds')
+ })
+
+ it('formatDistanceStrict', function() {
+ var result = fp.formatDistanceStrict(new Date(1986, 3, 7, 10, 32, 0))(
+ new Date(1986, 3, 4, 10, 32, 0)
+ )
+ assert(result === '3 days')
+ })
+
+ it('formatDistanceStrictWithOptions', function() {
+ var result = fp.formatDistanceStrictWithOptions({ addSuffix: true })(
+ new Date(1986, 3, 4, 10, 32, 0)
+ )(new Date(1986, 3, 4, 11, 32, 0))
+ assert(result === 'in 1 hour')
+ })
+
+ it('formatRelative', function() {
+ var result = fp.formatRelative(new Date(1986, 3 /* Apr */, 4, 10, 32))(
+ new Date(1986, 2 /* Mar */, 28, 16, 50)
+ )
+ assert(result === '03/28/1986')
+ })
+
+ it('formatRelativeWithOptions', function() {
+ var result = fp.formatRelativeWithOptions({})(
+ new Date(1986, 3 /* Apr */, 4, 10, 32)
+ )(new Date(1986, 2 /* Mar */, 28, 16, 50))
+ assert(result === '03/28/1986')
+ })
+
+ it('fromUnixTime', function() {
+ var result = fp.fromUnixTime(1330515499)
+ assert(result.getTime() === 1330515499000)
+ })
+
+ it('getDate', function() {
+ var result = fp.getDate(new Date(2012, 1 /* Feb */, 29))
+ assert(result === 29)
+ })
+
+ it('getDay', function() {
+ var result = fp.getDay(new Date(2012, 1 /* Feb */, 29))
+ assert(result === 3)
+ })
+
+ it('getDayOfYear', function() {
+ var result = fp.getDayOfYear(new Date(2014, 6 /* Jul */, 2))
+ assert(result === 183)
+ })
+
+ it('getDaysInMonth', function() {
+ var result = fp.getDaysInMonth(new Date(2100, 1 /* Feb */, 11))
+ assert(result === 28)
+ })
+
+ it('getDaysInYear', function() {
+ var result = fp.getDaysInYear(new Date(2012, 6 /* Jul */, 2))
+ assert(result === 366)
+ })
+
+ it('getHours', function() {
+ var result = fp.getHours(new Date(2012, 1 /* Feb */, 29, 11, 45))
+ assert(result === 11)
+ })
+
+ it('getISODay', function() {
+ var result = fp.getISODay(new Date(2012, 1 /* Feb */, 29))
+ assert(result === 3)
+ })
+
+ it('getISOWeek', function() {
+ var result = fp.getISOWeek(new Date(2005, 0 /* Jan */, 2))
+ assert(result === 53)
+ })
+
+ it('getISOWeeksInYear', function() {
+ var result = fp.getISOWeeksInYear(new Date(2015, 1 /* Feb */, 11))
+ assert(result === 53)
+ })
+
+ it('getISOWeekYear', function() {
+ var result = fp.getISOWeekYear(new Date(2007, 11 /* Dec */, 31))
+ assert(result === 2008)
+ })
+
+ it('getMilliseconds', function() {
+ var result = fp.getMilliseconds(
+ new Date(2012, 1 /* Feb */, 29, 11, 45, 5, 123)
+ )
+ assert(result === 123)
+ })
+
+ it('getMinutes', function() {
+ var result = fp.getMinutes(new Date(2012, 1 /* Feb */, 29, 11, 45, 5))
+ assert(result === 45)
+ })
+
+ it('getMonth', function() {
+ var result = fp.getMonth(new Date(2012, 1 /* Feb */, 29))
+ assert(result === 1)
+ })
+
+ it('getOverlappingDaysInIntervals', function() {
+ var leftInterval = {
+ start: new Date(2016, 10, 10, 13, 0, 0),
+ end: new Date(2016, 11, 3, 15, 0, 0)
+ }
+ var rightInterval = {
+ start: new Date(2016, 10, 5),
+ end: new Date(2016, 11, 15)
+ }
+ var numOverlappingDays = fp.getOverlappingDaysInIntervals(rightInterval)(
+ leftInterval
+ )
+ assert(numOverlappingDays === 24)
+ })
+
+ it('getQuarter', function() {
+ var result = fp.getQuarter(new Date(2014, 6 /* Jul */, 2))
+ assert(result === 3)
+ })
+
+ it('getSeconds', function() {
+ var result = fp.getSeconds(new Date(2012, 1 /* Feb */, 29, 11, 45, 5, 123))
+ assert(result === 5)
+ })
+
+ it('getTime', function() {
+ var timestamp = 1483228800000
+ var result = fp.getTime(new Date(timestamp))
+ assert(result === timestamp)
+ })
+
+ it('getWeek', function() {
+ var result = fp.getWeek(new Date(2005, 0 /* Jan */, 2))
+ assert(result === 2)
+ })
+
+ it('getWeeksInMonth', function() {
+ var result = fp.getWeeksInMonth(new Date(2017, 3 /* Apr */, 8, 18, 0))
+ assert(result === 6)
+ })
+
+ it('getWeeksInMonthWithOptions', function() {
+ var result = fp.getWeeksInMonthWithOptions({})(
+ new Date(2017, 3 /* Apr */, 8, 18, 0)
+ )
+ assert(result === 6)
+ })
+
+ it('getWeekOfMonth', function() {
+ var result = fp.getWeekOfMonth(new Date(2017, 10 /* Nov */, 15))
+ assert(result === 3)
+ })
+
+ it('getWeekOfMonthWithOptions', function() {
+ var result = fp.getWeekOfMonthWithOptions({ weekStartsOn: 1 })(
+ new Date(2017, 9 /* Oct */, 1)
+ )
+ assert(result === 1)
+ })
+
+ it('getWeekYear', function() {
+ var result = fp.getWeekYear(new Date(2004, 11 /* Dec */, 26))
+ assert(result === 2005)
+ })
+
+ it('getWeekYearWithOptions', function() {
+ var result = fp.getWeekYearWithOptions({
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4
+ })(new Date(2004, 11 /* Dec */, 26))
+ assert(result === 2004)
+ })
+
+ it('getYear', function() {
+ var result = fp.getYear(new Date(2014, 6 /* Jul */, 2))
+ assert(result === 2014)
+ })
+
+ it('isAfter', function() {
+ var result = fp.isAfter(new Date(1987, 1 /* Feb */, 11))(
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === true)
+ })
+
+ it('isBefore', function() {
+ var result = fp.isBefore(new Date(1989, 6 /* Jul */, 10))(
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === true)
+ })
+
+ it('isEqual', function() {
+ var result = fp.isEqual(new Date(1987, 1 /* Feb */, 11))(
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === true)
+ })
+
+ it('isFirstDayOfMonth', function() {
+ var result = fp.isFirstDayOfMonth(new Date(2014, 9 /* Oct */, 1))
+ assert(result === true)
+ })
+
+ it('isFriday', function() {
+ var result = fp.isFriday(new Date(2014, 8 /* Sep */, 26))
+ assert(result === true)
+ })
+
+ it('isLastDayOfMonth', function() {
+ var result = fp.isLastDayOfMonth(new Date(2014, 9 /* Oct */, 31))
+ assert(result === true)
+ })
+
+ it('isLeapYear', function() {
+ var result = fp.isLeapYear(new Date(2012, 6 /* Jul */, 2))
+ assert(result === true)
+ })
+
+ it('isMonday', function() {
+ var result = fp.isMonday(new Date(2014, 8 /* Sep */, 22))
+ assert(result === true)
+ })
+
+ it('isSameDay', function() {
+ var result = fp.isSameDay(new Date(2014, 8 /* Sep */, 4, 18, 0))(
+ new Date(2014, 8 /* Sep */, 4, 6, 0)
+ )
+ assert(result === true)
+ })
+
+ it('isSameHour', function() {
+ var result = fp.isSameHour(new Date(2014, 8 /* Sep */, 4, 6, 30))(
+ new Date(2014, 8 /* Sep */, 4, 6, 0)
+ )
+ assert(result === true)
+ })
+
+ it('isSameISOWeek', function() {
+ var result = fp.isSameISOWeek(new Date(2014, 8 /* Sep */, 7))(
+ new Date(2014, 8 /* Sep */, 1)
+ )
+ assert(result === true)
+ })
+
+ it('isSameISOWeekYear', function() {
+ var result = fp.isSameISOWeekYear(new Date(2005, 0 /* Jan */, 2))(
+ new Date(2003, 11 /* Dec */, 29)
+ )
+ assert(result === true)
+ })
+
+ it('isSameMinute', function() {
+ var result = fp.isSameMinute(new Date(2014, 8 /* Sep */, 4, 6, 30, 15))(
+ new Date(2014, 8 /* Sep */, 4, 6, 30)
+ )
+ assert(result === true)
+ })
+
+ it('isSameMonth', function() {
+ var result = fp.isSameMonth(new Date(2014, 8 /* Sep */, 25))(
+ new Date(2014, 8 /* Sep */, 2)
+ )
+ assert(result === true)
+ })
+
+ it('isSameQuarter', function() {
+ var result = fp.isSameQuarter(new Date(2014, 2 /* Mar */, 8))(
+ new Date(2014, 0 /* Jan */, 1)
+ )
+ assert(result === true)
+ })
+
+ it('isSameSecond', function() {
+ var result = fp.isSameSecond(
+ new Date(2014, 8 /* Sep */, 4, 6, 30, 15, 500)
+ )(new Date(2014, 8 /* Sep */, 4, 6, 30, 15))
+ assert(result === true)
+ })
+
+ it('isSameWeek', function() {
+ var result = fp.isSameWeek(new Date(2014, 8 /* Sep */, 4))(
+ new Date(2014, 7 /* Aug */, 31)
+ )
+ assert(result === true)
+ })
+
+ it('isSameWeekWithOptions', function() {
+ var result = fp.isSameWeekWithOptions({ weekStartsOn: 1 })(
+ new Date(2014, 8 /* Sep */, 4)
+ )(new Date(2014, 7 /* Aug */, 31))
+ assert(result === false)
+ })
+
+ it('isSameYear', function() {
+ var result = fp.isSameYear(new Date(2014, 8 /* Sep */, 25))(
+ new Date(2014, 8 /* Sep */, 2)
+ )
+ assert(result === true)
+ })
+
+ it('isSaturday', function() {
+ var result = fp.isSaturday(new Date(2014, 8 /* Sep */, 27))
+ assert(result === true)
+ })
+
+ it('isSunday', function() {
+ var result = fp.isSunday(new Date(2014, 8 /* Sep */, 21))
+ assert(result === true)
+ })
+
+ it('isThursday', function() {
+ var result = fp.isThursday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === true)
+ })
+
+ it('isTuesday', function() {
+ var result = fp.isTuesday(new Date(2014, 8 /* Sep */, 23))
+ assert(result === true)
+ })
+
+ it('isValid', function() {
+ var result = fp.isValid(new Date())
+ assert(result === true)
+ })
+
+ it('isWednesday', function() {
+ var result = fp.isWednesday(new Date(2014, 8 /* Sep */, 24))
+ assert(result === true)
+ })
+
+ it('isWeekend', function() {
+ var result = fp.isWeekend(new Date(2014, 9 /* Oct */, 5))
+ assert(result === true)
+ })
+
+ it('isWithinInterval', function() {
+ var interval = {
+ start: new Date(2014, 8 /* Sep */, 1),
+ end: new Date(2014, 11 /* Dec */, 31)
+ }
+ var result = fp.isWithinInterval(interval)(new Date(2014, 9 /* Oct */, 31))
+ assert(result === true)
+ })
+
+ it('lastDayOfISOWeek', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.lastDayOfISOWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('lastDayOfISOWeekYear', function() {
+ var result = fp.lastDayOfISOWeekYear(new Date(2009, 0 /* Jan */, 1, 16, 0))
+ assert.deepEqual(result, new Date(2010, 0 /* Jan */, 3))
+ })
+
+ it('lastDayOfMonth', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.lastDayOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('lastDayOfQuarter', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.lastDayOfQuarter(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('lastDayOfWeek', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.lastDayOfWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 6))
+ })
+
+ it('lastDayOfWeekWithOptions', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.lastDayOfWeekWithOptions({ weekStartsOn: 1 })(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('lastDayOfYear', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.lastDayOfYear(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 31))
+ })
+
+ it('max', function() {
+ var result = fp.max([
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ ])
+ assert.deepEqual(result, new Date(1989, 6 /* Jul */, 10))
+ })
+
+ it('min', function() {
+ var result = fp.min([
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ ])
+ assert.deepEqual(result, new Date(1987, 1 /* Feb */, 11))
+ })
+
+ it('parse', function() {
+ var baseDate = new Date(1986, 3 /* Apr */, 4, 10, 32, 0, 900)
+ var result = fp.parse(baseDate)("yyyyMMdd'T'HHmmss")('20161105T040404')
+ assert.deepEqual(result, new Date(2016, 10 /* Nov */, 5, 4, 4, 4, 0))
+ })
+
+ it('parseWithOptions', function() {
+ var baseDate = new Date(1986, 3 /* Apr */, 4, 10, 32, 0, 900)
+ var result = fp.parseWithOptions({})(baseDate)("yyyyMMdd'T'HHmmss")(
+ '20161105T040404'
+ )
+ assert.deepEqual(result, new Date(2016, 10 /* Nov */, 5, 4, 4, 4, 0))
+ })
+
+ it('roundToNearestMinutes', function() {
+ var result = fp.roundToNearestMinutes(
+ new Date(2014, 6 /* Jul */, 10, 12, 11, 34, 99)
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 12))
+ })
+
+ it('roundToNearestMinutesWithOptions', function() {
+ const resultA = fp.roundToNearestMinutesWithOptions({ nearestTo: 5 })(
+ new Date(2014, 6 /* Jul */, 10, 12, 11, 34, 99)
+ )
+ assert.deepEqual(resultA, new Date(2014, 6 /* Jul */, 10, 12, 10))
+
+ const resultB = fp.roundToNearestMinutesWithOptions({})(
+ new Date(2014, 6 /* Jul */, 10, 12, 11, 34, 99)
+ )
+ assert.deepEqual(resultB, new Date(2014, 6 /* Jul */, 10, 12, 12))
+ })
+
+ it('setDate', function() {
+ var result = fp.setDate(30)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('setDay', function() {
+ var result = fp.setDay(0)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 31))
+ })
+
+ it('setDayOfYear', function() {
+ var result = fp.setDayOfYear(2)(new Date(2014, 6 /* Jul */, 2))
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 2))
+ })
+
+ it('setHours', function() {
+ var result = fp.setHours(4)(new Date(2014, 8 /* Sep */, 1, 11, 30))
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 4, 30))
+ })
+
+ it('setISODay', function() {
+ var result = fp.setISODay(3)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 3))
+ })
+
+ it('setISOWeek', function() {
+ var result = fp.setISOWeek(53)(new Date(2004, 7 /* Aug */, 7))
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 1))
+ })
+
+ it('setISOWeekYear', function() {
+ var result = fp.setISOWeekYear(2007)(new Date(2008, 11 /* Dec */, 29))
+ assert.deepEqual(result, new Date(2007, 0 /* Jan */, 1))
+ })
+
+ it('setMilliseconds', function() {
+ var result = fp.setMilliseconds(300)(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500)
+ )
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 300))
+ })
+
+ it('setMinutes', function() {
+ var result = fp.setMinutes(45)(new Date(2014, 8 /* Sep */, 1, 11, 30, 40))
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 45, 40))
+ })
+
+ it('setMonth', function() {
+ var result = fp.setMonth(1)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 1))
+ })
+
+ it('setQuarter', function() {
+ var result = fp.setQuarter(1)(new Date(2014, 6 /* Jul */, 2))
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 2))
+ })
+
+ it('setSeconds', function() {
+ var result = fp.setSeconds(45)(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500)
+ )
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 45, 500))
+ })
+
+ it('setWeek', function() {
+ var result = fp.setWeek(1)(new Date(2005, 0 /* Jan */, 2))
+ assert.deepEqual(result, new Date(2004, 11 /* Dec */, 26))
+ })
+
+ it('setWeekWithOptions', function() {
+ var result = fp.setWeekWithOptions({
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4
+ })(1)(new Date(2005, 0 /* Jan */, 2))
+ assert.deepEqual(result, new Date(2004, 0 /* Jan */, 4))
+ })
+
+ it('setWeekYear', function() {
+ var result = fp.setWeekYear(2004)(new Date(2010, 0 /* Jan */, 2))
+ assert.deepEqual(result, new Date(2004, 0 /* Jan */, 3))
+ })
+
+ it('setWeekYearWithOptions', function() {
+ var result = fp.setWeekYearWithOptions({
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4
+ })(2004)(new Date(2010, 0 /* Jan */, 2))
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 1))
+ })
+
+ it('setYear', function() {
+ var result = fp.setYear(2013)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2013, 8 /* Sep */, 1))
+ })
+
+ it('startOfDay', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.startOfDay(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 2, 0, 0, 0, 0))
+ })
+
+ it('startOfHour', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55)
+ var result = fp.startOfHour(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 2, 11))
+ })
+
+ it('startOfISOWeek', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.startOfISOWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('startOfISOWeekYear', function() {
+ var result = fp.startOfISOWeekYear(new Date(2009, 0 /* Jan */, 1, 16, 0))
+ assert.deepEqual(result, new Date(2008, 11 /* Dec */, 29, 0, 0, 0, 0))
+ })
+
+ it('startOfMinute', function() {
+ var date = new Date(2014, 11 /* Dec */, 1, 22, 15, 45, 400)
+ var result = fp.startOfMinute(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 1, 22, 15))
+ })
+
+ it('startOfMonth', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.startOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('startOfQuarter', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.startOfQuarter(date)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 1))
+ })
+
+ it('startOfSecond', function() {
+ var date = new Date(2014, 11 /* Dec */, 1, 22, 15, 45, 400)
+ var result = fp.startOfSecond(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 1, 22, 15, 45))
+ })
+
+ it('startOfWeek', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.startOfWeek(date)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 31))
+ })
+
+ it('startOfWeekWithOptions', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.startOfWeekWithOptions({ weekStartsOn: 1 })(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('startOfWeekYear', function() {
+ var result = fp.startOfWeekYear(new Date(2005, 6 /* Jul */, 2))
+ assert.deepEqual(result, new Date(2004, 11 /* Dec */, 26, 0, 0, 0, 0))
+ })
+
+ it('startOfWeekYearWithOptions', function() {
+ var result = fp.startOfWeekYearWithOptions({
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4
+ })(new Date(2005, 6 /* Jul */, 2))
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 3, 0, 0, 0, 0))
+ })
+
+ it('startOfYear', function() {
+ var date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ var result = fp.startOfYear(date)
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 1, 0, 0, 0, 0))
+ })
+
+ it('subDays', function() {
+ var result = fp.subDays(10)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 22))
+ })
+
+ it('subHours', function() {
+ var result = fp.subHours(2)(new Date(2014, 6 /* Jul */, 11, 1, 0))
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 23, 0))
+ })
+
+ it('subISOWeekYears', function() {
+ var result = fp.subISOWeekYears(5)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2009, 7 /* Aug */, 31))
+ })
+
+ it('subMilliseconds', function() {
+ var result = fp.subMilliseconds(750)(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0)
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 29, 250))
+ })
+
+ it('subMinutes', function() {
+ var result = fp.subMinutes(30)(new Date(2014, 6 /* Jul */, 10, 12, 0))
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 11, 30))
+ })
+
+ it('subMonths', function() {
+ var result = fp.subMonths(5)(new Date(2015, 1 /* Feb */, 1))
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('subQuarters', function() {
+ var result = fp.subQuarters(3)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2013, 11 /* Dec */, 1))
+ })
+
+ it('subSeconds', function() {
+ var result = fp.subSeconds(30)(new Date(2014, 6 /* Jul */, 10, 12, 45, 0))
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 44, 30))
+ })
+
+ it('subWeeks', function() {
+ var result = fp.subWeeks(4)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 4))
+ })
+
+ it('subYears', function() {
+ var result = fp.subYears(5)(new Date(2014, 8 /* Sep */, 1))
+ assert.deepEqual(result, new Date(2009, 8 /* Sep */, 1))
+ })
+
+ it('parseISO', function() {
+ var result = fp.parseISO('2014-10-25T13:46:20+07:00')
+ assert.deepEqual(result, new Date('2014-10-25T13:46:20+07:00'))
+ })
+
+ it('parseISOWithOptions', function() {
+ var result = fp.parseISOWithOptions({ additionalDigits: 0 })('+12340702')
+ assert.deepEqual(result, new Date(1234, 6 /* Jul */, 2))
+ })
+})
diff --git a/date-fns/src/fp/toDate/index.d.ts b/date-fns/src/fp/toDate/index.d.ts
new file mode 100644
index 0000000..2bbca80
--- /dev/null
+++ b/date-fns/src/fp/toDate/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { toDate } from 'date-fns/fp'
+export default toDate
diff --git a/date-fns/src/fp/toDate/index.js b/date-fns/src/fp/toDate/index.js
new file mode 100644
index 0000000..7cb0cb0
--- /dev/null
+++ b/date-fns/src/fp/toDate/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../toDate/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var toDate = convertToFP(fn, 1)
+
+export default toDate
diff --git a/date-fns/src/fp/toDate/index.js.flow b/date-fns/src/fp/toDate/index.js.flow
new file mode 100644
index 0000000..1fc072e
--- /dev/null
+++ b/date-fns/src/fp/toDate/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<Date | number, Date>
diff --git a/date-fns/src/fp/weeksToDays/index.d.ts b/date-fns/src/fp/weeksToDays/index.d.ts
new file mode 100644
index 0000000..df68239
--- /dev/null
+++ b/date-fns/src/fp/weeksToDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { weeksToDays } from 'date-fns/fp'
+export default weeksToDays
diff --git a/date-fns/src/fp/weeksToDays/index.js b/date-fns/src/fp/weeksToDays/index.js
new file mode 100644
index 0000000..1b42884
--- /dev/null
+++ b/date-fns/src/fp/weeksToDays/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../weeksToDays/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var weeksToDays = convertToFP(fn, 1)
+
+export default weeksToDays
diff --git a/date-fns/src/fp/weeksToDays/index.js.flow b/date-fns/src/fp/weeksToDays/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/weeksToDays/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/yearsToMonths/index.d.ts b/date-fns/src/fp/yearsToMonths/index.d.ts
new file mode 100644
index 0000000..39cd773
--- /dev/null
+++ b/date-fns/src/fp/yearsToMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { yearsToMonths } from 'date-fns/fp'
+export default yearsToMonths
diff --git a/date-fns/src/fp/yearsToMonths/index.js b/date-fns/src/fp/yearsToMonths/index.js
new file mode 100644
index 0000000..0a58b71
--- /dev/null
+++ b/date-fns/src/fp/yearsToMonths/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../yearsToMonths/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var yearsToMonths = convertToFP(fn, 1)
+
+export default yearsToMonths
diff --git a/date-fns/src/fp/yearsToMonths/index.js.flow b/date-fns/src/fp/yearsToMonths/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/yearsToMonths/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fp/yearsToQuarters/index.d.ts b/date-fns/src/fp/yearsToQuarters/index.d.ts
new file mode 100644
index 0000000..cbb664d
--- /dev/null
+++ b/date-fns/src/fp/yearsToQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { yearsToQuarters } from 'date-fns/fp'
+export default yearsToQuarters
diff --git a/date-fns/src/fp/yearsToQuarters/index.js b/date-fns/src/fp/yearsToQuarters/index.js
new file mode 100644
index 0000000..e9051b5
--- /dev/null
+++ b/date-fns/src/fp/yearsToQuarters/index.js
@@ -0,0 +1,8 @@
+// This file is generated automatically by `scripts/build/fp.js`. Please, don't change it.
+
+import fn from '../../yearsToQuarters/index'
+import convertToFP from '../_lib/convertToFP/index'
+
+var yearsToQuarters = convertToFP(fn, 1)
+
+export default yearsToQuarters
diff --git a/date-fns/src/fp/yearsToQuarters/index.js.flow b/date-fns/src/fp/yearsToQuarters/index.js.flow
new file mode 100644
index 0000000..aa51b5f
--- /dev/null
+++ b/date-fns/src/fp/yearsToQuarters/index.js.flow
@@ -0,0 +1,54 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+type CurriedFn1<A, R> = <A>(a: A) => R
+
+declare module.exports: CurriedFn1<number, number>
diff --git a/date-fns/src/fromUnixTime/index.d.ts b/date-fns/src/fromUnixTime/index.d.ts
new file mode 100644
index 0000000..a88920d
--- /dev/null
+++ b/date-fns/src/fromUnixTime/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { fromUnixTime } from 'date-fns'
+export default fromUnixTime
diff --git a/date-fns/src/fromUnixTime/index.js b/date-fns/src/fromUnixTime/index.js
new file mode 100644
index 0000000..f3b2f82
--- /dev/null
+++ b/date-fns/src/fromUnixTime/index.js
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name fromUnixTime
+ * @category Timestamp Helpers
+ * @summary Create a date from a Unix timestamp.
+ *
+ * @description
+ * Create a date from a Unix timestamp.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Number} unixTime - the given Unix timestamp
+ * @returns {Date} the date
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Create the date 29 February 2012 11:45:05:
+ * var result = fromUnixTime(1330515905)
+ * //=> Wed Feb 29 2012 11:45:05
+ */
+export default function fromUnixTime(dirtyUnixTime) {
+ requiredArgs(1, arguments)
+
+ var unixTime = toInteger(dirtyUnixTime)
+
+ return toDate(unixTime * 1000)
+}
diff --git a/date-fns/src/fromUnixTime/index.js.flow b/date-fns/src/fromUnixTime/index.js.flow
new file mode 100644
index 0000000..a286bdf
--- /dev/null
+++ b/date-fns/src/fromUnixTime/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (unixTime: number) => Date
diff --git a/date-fns/src/fromUnixTime/test.js b/date-fns/src/fromUnixTime/test.js
new file mode 100644
index 0000000..a5b529f
--- /dev/null
+++ b/date-fns/src/fromUnixTime/test.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import fromUnixTime from '.'
+
+describe('fromUnixTime', function() {
+ it('returns the date derived from the given UNIX timestamp', function() {
+ var result = fromUnixTime(1330515499)
+ assert(result.getTime() === 1330515499000)
+ })
+
+ it('returns invalid if the given timestamp is invalid', function() {
+ var result = fromUnixTime(NaN)
+ assert(isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(fromUnixTime.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getDate/benchmark.js b/date-fns/src/getDate/benchmark.js
new file mode 100644
index 0000000..e59b2a9
--- /dev/null
+++ b/date-fns/src/getDate/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getDate from '.'
+import moment from 'moment'
+
+suite('getDate', function () {
+ benchmark('date-fns', function () {
+ return getDate(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.date()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getDate/index.d.ts b/date-fns/src/getDate/index.d.ts
new file mode 100644
index 0000000..cb86441
--- /dev/null
+++ b/date-fns/src/getDate/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDate } from 'date-fns'
+export default getDate
diff --git a/date-fns/src/getDate/index.js.flow b/date-fns/src/getDate/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getDate/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getDate/index.ts b/date-fns/src/getDate/index.ts
new file mode 100644
index 0000000..4db3697
--- /dev/null
+++ b/date-fns/src/getDate/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getDate
+ * @category Day Helpers
+ * @summary Get the day of the month of the given date.
+ *
+ * @description
+ * Get the day of the month of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the day of month
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which day of the month is 29 February 2012?
+ * const result = getDate(new Date(2012, 1, 29))
+ * //=> 29
+ */
+export default function getDate(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const dayOfMonth = date.getDate()
+ return dayOfMonth
+}
diff --git a/date-fns/src/getDate/test.ts b/date-fns/src/getDate/test.ts
new file mode 100644
index 0000000..c2ed37e
--- /dev/null
+++ b/date-fns/src/getDate/test.ts
@@ -0,0 +1,26 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getDate from '.'
+
+describe('getDate', function() {
+ it('returns the day of the month of the given date', function() {
+ const result = getDate(new Date(2012, 1 /* Feb */, 29))
+ assert(result === 29)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getDate(new Date(2014, 11 /* Dec */, 31).getTime())
+ assert(result === 31)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getDate(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getDate.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getDay/benchmark.js b/date-fns/src/getDay/benchmark.js
new file mode 100644
index 0000000..1d3bbd5
--- /dev/null
+++ b/date-fns/src/getDay/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getDay from '.'
+import moment from 'moment'
+
+suite('getDay', function () {
+ benchmark('date-fns', function () {
+ return getDay(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.day()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getDay/index.d.ts b/date-fns/src/getDay/index.d.ts
new file mode 100644
index 0000000..5ea22c0
--- /dev/null
+++ b/date-fns/src/getDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDay } from 'date-fns'
+export default getDay
diff --git a/date-fns/src/getDay/index.js.flow b/date-fns/src/getDay/index.js.flow
new file mode 100644
index 0000000..6ff2a54
--- /dev/null
+++ b/date-fns/src/getDay/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => 0 | 1 | 2 | 3 | 4 | 5 | 6
diff --git a/date-fns/src/getDay/index.ts b/date-fns/src/getDay/index.ts
new file mode 100644
index 0000000..becc949
--- /dev/null
+++ b/date-fns/src/getDay/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getDay
+ * @category Weekday Helpers
+ * @summary Get the day of the week of the given date.
+ *
+ * @description
+ * Get the day of the week of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {0|1|2|3|4|5|6} the day of week, 0 represents Sunday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which day of the week is 29 February 2012?
+ * const result = getDay(new Date(2012, 1, 29))
+ * //=> 3
+ */
+export default function getDay(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const day = date.getDay()
+ return day
+}
diff --git a/date-fns/src/getDay/test.ts b/date-fns/src/getDay/test.ts
new file mode 100644
index 0000000..fdd1078
--- /dev/null
+++ b/date-fns/src/getDay/test.ts
@@ -0,0 +1,26 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getDay from '.'
+
+describe('getDay', function() {
+ it('returns the day of the week of the given date', function() {
+ const result = getDay(new Date(2012, 1 /* Feb */, 29))
+ assert(result === 3)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getDay(new Date(2014, 5 /* Jun */, 1).getTime())
+ assert(result === 0)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getDay(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getDay.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getDayOfYear/benchmark.js b/date-fns/src/getDayOfYear/benchmark.js
new file mode 100644
index 0000000..4179185
--- /dev/null
+++ b/date-fns/src/getDayOfYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getDayOfYear from '.'
+import moment from 'moment'
+
+suite('getDayOfYear', function () {
+ benchmark('date-fns', function () {
+ return getDayOfYear(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.dayOfYear()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getDayOfYear/index.d.ts b/date-fns/src/getDayOfYear/index.d.ts
new file mode 100644
index 0000000..ec58442
--- /dev/null
+++ b/date-fns/src/getDayOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDayOfYear } from 'date-fns'
+export default getDayOfYear
diff --git a/date-fns/src/getDayOfYear/index.js.flow b/date-fns/src/getDayOfYear/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getDayOfYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getDayOfYear/index.ts b/date-fns/src/getDayOfYear/index.ts
new file mode 100644
index 0000000..e43dd02
--- /dev/null
+++ b/date-fns/src/getDayOfYear/index.ts
@@ -0,0 +1,34 @@
+import toDate from '../toDate/index'
+import startOfYear from '../startOfYear/index'
+import differenceInCalendarDays from '../differenceInCalendarDays/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getDayOfYear
+ * @category Day Helpers
+ * @summary Get the day of the year of the given date.
+ *
+ * @description
+ * Get the day of the year of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the day of year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which day of the year is 2 July 2014?
+ * const result = getDayOfYear(new Date(2014, 6, 2))
+ * //=> 183
+ */
+export default function getDayOfYear(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const diff = differenceInCalendarDays(date, startOfYear(date))
+ const dayOfYear = diff + 1
+ return dayOfYear
+}
diff --git a/date-fns/src/getDayOfYear/test.ts b/date-fns/src/getDayOfYear/test.ts
new file mode 100644
index 0000000..527c0a5
--- /dev/null
+++ b/date-fns/src/getDayOfYear/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getDayOfYear from '.'
+
+describe('getDayOfYear', function() {
+ it('returns the day of the year of the given date', function() {
+ const result = getDayOfYear(new Date(2014, 6 /* Jul */, 2))
+ assert(result === 183)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getDayOfYear(new Date(2014, 0 /* Jan */, 2).getTime())
+ assert(result === 2)
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(0, 11 /* Dec */, 31)
+ initialDate.setHours(0, 0, 0, 0)
+ const result = getDayOfYear(initialDate)
+ assert(result === 366)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getDayOfYear(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getDayOfYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getDaysInMonth/benchmark.js b/date-fns/src/getDaysInMonth/benchmark.js
new file mode 100644
index 0000000..2e2eb87
--- /dev/null
+++ b/date-fns/src/getDaysInMonth/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getDaysInMonth from '.'
+import moment from 'moment'
+
+suite('getDaysInMonth', function () {
+ benchmark('date-fns', function () {
+ return getDaysInMonth(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.daysInMonth()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getDaysInMonth/index.d.ts b/date-fns/src/getDaysInMonth/index.d.ts
new file mode 100644
index 0000000..6b69dae
--- /dev/null
+++ b/date-fns/src/getDaysInMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDaysInMonth } from 'date-fns'
+export default getDaysInMonth
diff --git a/date-fns/src/getDaysInMonth/index.js.flow b/date-fns/src/getDaysInMonth/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getDaysInMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getDaysInMonth/index.ts b/date-fns/src/getDaysInMonth/index.ts
new file mode 100644
index 0000000..f0959bb
--- /dev/null
+++ b/date-fns/src/getDaysInMonth/index.ts
@@ -0,0 +1,35 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getDaysInMonth
+ * @category Month Helpers
+ * @summary Get the number of days in a month of the given date.
+ *
+ * @description
+ * Get the number of days in a month of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the number of days in a month
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // How many days are in February 2000?
+ * const result = getDaysInMonth(new Date(2000, 1))
+ * //=> 29
+ */
+export default function getDaysInMonth(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+ const monthIndex = date.getMonth()
+ const lastDayOfMonth = new Date(0)
+ lastDayOfMonth.setFullYear(year, monthIndex + 1, 0)
+ lastDayOfMonth.setHours(0, 0, 0, 0)
+ return lastDayOfMonth.getDate()
+}
diff --git a/date-fns/src/getDaysInMonth/test.ts b/date-fns/src/getDaysInMonth/test.ts
new file mode 100644
index 0000000..02c35f4
--- /dev/null
+++ b/date-fns/src/getDaysInMonth/test.ts
@@ -0,0 +1,40 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getDaysInMonth from '.'
+
+describe('getDaysInMonth', function() {
+ it('returns the number of days in the month of the given date', function() {
+ const result = getDaysInMonth(new Date(2100, 1 /* Feb */, 11))
+ assert(result === 28)
+ })
+
+ it('works for the February of a leap year', function() {
+ const result = getDaysInMonth(new Date(2000, 1 /* Feb */, 11))
+ assert(result === 29)
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 6 /* Jul */, 2).getTime()
+ const result = getDaysInMonth(date)
+ assert(result === 31)
+ })
+
+ it('handles dates before 100 AD', function() {
+ const date = new Date(0)
+ date.setFullYear(0, 1 /* Feb */, 15)
+ date.setHours(0, 0, 0, 0)
+ const result = getDaysInMonth(date)
+ assert(result === 29)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getDaysInMonth(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getDaysInMonth.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getDaysInYear/benchmark.js b/date-fns/src/getDaysInYear/benchmark.js
new file mode 100644
index 0000000..b076dc8
--- /dev/null
+++ b/date-fns/src/getDaysInYear/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getDaysInYear from '.'
+
+suite('getDaysInYear', function () {
+ benchmark('date-fns', function () {
+ return getDaysInYear(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/getDaysInYear/index.d.ts b/date-fns/src/getDaysInYear/index.d.ts
new file mode 100644
index 0000000..053d44b
--- /dev/null
+++ b/date-fns/src/getDaysInYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDaysInYear } from 'date-fns'
+export default getDaysInYear
diff --git a/date-fns/src/getDaysInYear/index.js.flow b/date-fns/src/getDaysInYear/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getDaysInYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getDaysInYear/index.ts b/date-fns/src/getDaysInYear/index.ts
new file mode 100644
index 0000000..c374a8f
--- /dev/null
+++ b/date-fns/src/getDaysInYear/index.ts
@@ -0,0 +1,36 @@
+import toDate from '../toDate/index'
+import isLeapYear from '../isLeapYear/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getDaysInYear
+ * @category Year Helpers
+ * @summary Get the number of days in a year of the given date.
+ *
+ * @description
+ * Get the number of days in a year of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the number of days in a year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // How many days are in 2012?
+ * const result = getDaysInYear(new Date(2012, 0, 1))
+ * //=> 366
+ */
+export default function getDaysInYear(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+
+ if (String(new Date(date)) === 'Invalid Date') {
+ return NaN
+ }
+
+ return isLeapYear(date) ? 366 : 365
+}
diff --git a/date-fns/src/getDaysInYear/test.ts b/date-fns/src/getDaysInYear/test.ts
new file mode 100644
index 0000000..8cf2918
--- /dev/null
+++ b/date-fns/src/getDaysInYear/test.ts
@@ -0,0 +1,42 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getDaysInYear from '.'
+
+describe('getDaysInYear', function() {
+ it('returns the number of days in the year of the given date', function() {
+ const result = getDaysInYear(new Date(2014, 6 /* Jul */, 2))
+ assert(result === 365)
+ })
+
+ it('works for a leap year', function() {
+ const result = getDaysInYear(new Date(2012, 6 /* Jul */, 2))
+ assert(result === 366)
+ })
+
+ it('works for the years divisible by 100 but not by 400', function() {
+ const result = getDaysInYear(new Date(2100, 6 /* Jul */, 2))
+ assert(result === 365)
+ })
+
+ it('works for the years divisible by 400', function() {
+ const result = getDaysInYear(new Date(2000, 6 /* Jul */, 2))
+ assert(result === 366)
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2012, 6 /* Jul */, 2).getTime()
+ const result = getDaysInYear(date)
+ assert(result === 366)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getDaysInYear(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getDaysInYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getDecade/benchmark.js b/date-fns/src/getDecade/benchmark.js
new file mode 100644
index 0000000..bc0dc18
--- /dev/null
+++ b/date-fns/src/getDecade/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getDecade from '.'
+import moment from 'moment'
+
+suite('getDecade', function () {
+ benchmark('date-fns', function () {
+ return getDecade(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return Math.floor(this.moment.year() / 10) * 10
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getDecade/index.d.ts b/date-fns/src/getDecade/index.d.ts
new file mode 100644
index 0000000..dfa8961
--- /dev/null
+++ b/date-fns/src/getDecade/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getDecade } from 'date-fns'
+export default getDecade
diff --git a/date-fns/src/getDecade/index.js.flow b/date-fns/src/getDecade/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getDecade/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getDecade/index.ts b/date-fns/src/getDecade/index.ts
new file mode 100644
index 0000000..fa89270
--- /dev/null
+++ b/date-fns/src/getDecade/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getDecade
+ * @category Decade Helpers
+ * @summary Get the decade of the given date.
+ *
+ * @description
+ * Get the decade of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the year of decade
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which decade belongs 27 November 1942?
+ * const result = getDecade(new Date(1942, 10, 27))
+ * //=> 1940
+ */
+export default function getDecade(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+ const decade = Math.floor(year / 10) * 10
+ return decade
+}
diff --git a/date-fns/src/getDecade/test.ts b/date-fns/src/getDecade/test.ts
new file mode 100644
index 0000000..8e93bb7
--- /dev/null
+++ b/date-fns/src/getDecade/test.ts
@@ -0,0 +1,26 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getDecade from '.'
+
+describe('getDecade', function() {
+ it('returns the decade for a the given date', function() {
+ const result = getDecade(new Date(1971, 10 /* Nov */, 8))
+ assert(result === 1970)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getDecade(new Date(1969, 6 /* Jul */, 20).getTime())
+ assert(result === 1960)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getDecade(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getDecade.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getHours/benchmark.js b/date-fns/src/getHours/benchmark.js
new file mode 100644
index 0000000..c50326e
--- /dev/null
+++ b/date-fns/src/getHours/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getHours from '.'
+import moment from 'moment'
+
+suite('getHours', function () {
+ benchmark('date-fns', function () {
+ return getHours(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.hours()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getHours/index.d.ts b/date-fns/src/getHours/index.d.ts
new file mode 100644
index 0000000..1ef4909
--- /dev/null
+++ b/date-fns/src/getHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getHours } from 'date-fns'
+export default getHours
diff --git a/date-fns/src/getHours/index.js.flow b/date-fns/src/getHours/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getHours/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getHours/index.ts b/date-fns/src/getHours/index.ts
new file mode 100644
index 0000000..ed69c73
--- /dev/null
+++ b/date-fns/src/getHours/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getHours
+ * @category Hour Helpers
+ * @summary Get the hours of the given date.
+ *
+ * @description
+ * Get the hours of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the hours
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Get the hours of 29 February 2012 11:45:00:
+ * const result = getHours(new Date(2012, 1, 29, 11, 45))
+ * //=> 11
+ */
+export default function getHours(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const hours = date.getHours()
+ return hours
+}
diff --git a/date-fns/src/getHours/test.ts b/date-fns/src/getHours/test.ts
new file mode 100644
index 0000000..5b8082b
--- /dev/null
+++ b/date-fns/src/getHours/test.ts
@@ -0,0 +1,26 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getHours from '.'
+
+describe('getHours', function() {
+ it('returns the hours of the given date', function() {
+ const result = getHours(new Date(2012, 1 /* Feb */, 29, 11, 45))
+ assert(result === 11)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getHours(new Date(2014, 3 /* Apr */, 2, 23, 30).getTime())
+ assert(result === 23)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getHours(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getHours.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getISODay/benchmark.js b/date-fns/src/getISODay/benchmark.js
new file mode 100644
index 0000000..cb9a406
--- /dev/null
+++ b/date-fns/src/getISODay/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getISODay from '.'
+import moment from 'moment'
+
+suite('getISODay', function () {
+ benchmark('date-fns', function () {
+ return getISODay(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.isoWeekday()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getISODay/index.d.ts b/date-fns/src/getISODay/index.d.ts
new file mode 100644
index 0000000..fef7587
--- /dev/null
+++ b/date-fns/src/getISODay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getISODay } from 'date-fns'
+export default getISODay
diff --git a/date-fns/src/getISODay/index.js.flow b/date-fns/src/getISODay/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getISODay/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getISODay/index.ts b/date-fns/src/getISODay/index.ts
new file mode 100644
index 0000000..24e5c5b
--- /dev/null
+++ b/date-fns/src/getISODay/index.ts
@@ -0,0 +1,39 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getISODay
+ * @category Weekday Helpers
+ * @summary Get the day of the ISO week of the given date.
+ *
+ * @description
+ * Get the day of the ISO week of the given date,
+ * which is 7 for Sunday, 1 for Monday etc.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the day of ISO week
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which day of the ISO week is 26 February 2012?
+ * const result = getISODay(new Date(2012, 1, 26))
+ * //=> 7
+ */
+export default function getISODay(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ let day = date.getDay()
+
+ if (day === 0) {
+ day = 7
+ }
+
+ return day
+}
diff --git a/date-fns/src/getISODay/test.ts b/date-fns/src/getISODay/test.ts
new file mode 100644
index 0000000..79a72fd
--- /dev/null
+++ b/date-fns/src/getISODay/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getISODay from '.'
+
+describe('getISODay', function() {
+ it('returns the day of the ISO week of the given date', function() {
+ const result = getISODay(new Date(2012, 1 /* Feb */, 29))
+ assert(result === 3)
+ })
+
+ it('returns 7 if the given day is Sunday', function() {
+ const result = getISODay(new Date(2014, 5 /* Jun */, 1))
+ assert(result === 7)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getISODay(new Date(2014, 5 /* Jun */, 1).getTime())
+ assert(result === 7)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getISODay(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getISODay.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getISOWeek/benchmark.js b/date-fns/src/getISOWeek/benchmark.js
new file mode 100644
index 0000000..33e863a
--- /dev/null
+++ b/date-fns/src/getISOWeek/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getISOWeek from '.'
+import moment from 'moment'
+
+suite('getISOWeek', function () {
+ benchmark('date-fns', function () {
+ return getISOWeek(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.isoWeek()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getISOWeek/index.d.ts b/date-fns/src/getISOWeek/index.d.ts
new file mode 100644
index 0000000..f24419b
--- /dev/null
+++ b/date-fns/src/getISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getISOWeek } from 'date-fns'
+export default getISOWeek
diff --git a/date-fns/src/getISOWeek/index.js.flow b/date-fns/src/getISOWeek/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getISOWeek/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getISOWeek/index.ts b/date-fns/src/getISOWeek/index.ts
new file mode 100644
index 0000000..b4635e9
--- /dev/null
+++ b/date-fns/src/getISOWeek/index.ts
@@ -0,0 +1,41 @@
+import toDate from '../toDate/index'
+import startOfISOWeek from '../startOfISOWeek/index'
+import startOfISOWeekYear from '../startOfISOWeekYear/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+const MILLISECONDS_IN_WEEK = 604800000
+
+/**
+ * @name getISOWeek
+ * @category ISO Week Helpers
+ * @summary Get the ISO week of the given date.
+ *
+ * @description
+ * Get the ISO week of the given date.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the ISO week
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which week of the ISO-week numbering year is 2 January 2005?
+ * const result = getISOWeek(new Date(2005, 0, 2))
+ * //=> 53
+ */
+export default function getISOWeek(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime()
+
+ // Round the number of days to the nearest integer
+ // because the number of milliseconds in a week is not constant
+ // (e.g. it's different in the week of the daylight saving time clock shift)
+ return Math.round(diff / MILLISECONDS_IN_WEEK) + 1
+}
diff --git a/date-fns/src/getISOWeek/test.ts b/date-fns/src/getISOWeek/test.ts
new file mode 100644
index 0000000..10a739b
--- /dev/null
+++ b/date-fns/src/getISOWeek/test.ts
@@ -0,0 +1,56 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getISOWeek from '.'
+
+describe('getISOWeek', function() {
+ it('returns the ISO week of the given date', function() {
+ const result = getISOWeek(new Date(2005, 0 /* Jan */, 2))
+ assert(result === 53)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getISOWeek(new Date(2008, 11 /* Dec */, 29).getTime())
+ assert(result === 1)
+ })
+
+ describe('edge cases', function() {
+ it('returns the ISO week at 1 January 2016', function() {
+ const result = getISOWeek(new Date(2016, 0 /* Jan */, 1))
+ assert(result === 53)
+ })
+
+ it('returns the ISO week at 1 May 2016', function() {
+ const result = getISOWeek(new Date(2016, 4 /* May */, 1))
+ assert(result === 17)
+ })
+
+ it('returns the ISO week at 2 May 2016', function() {
+ const result = getISOWeek(new Date(2016, 4 /* May */, 2))
+ assert(result === 18)
+ })
+
+ it('returns the ISO week at 31 May 2016', function() {
+ const result = getISOWeek(new Date(2016, 4 /* May */, 31))
+ assert(result === 22)
+ })
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(7, 11 /* Dec */, 30)
+ initialDate.setHours(0, 0, 0, 0)
+ const result = getISOWeek(initialDate)
+ assert(result === 52)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getISOWeek(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getISOWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getISOWeekYear/benchmark.js b/date-fns/src/getISOWeekYear/benchmark.js
new file mode 100644
index 0000000..6261d01
--- /dev/null
+++ b/date-fns/src/getISOWeekYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getISOWeekYear from '.'
+import moment from 'moment'
+
+suite('getISOWeekYear', function () {
+ benchmark('date-fns', function () {
+ return getISOWeekYear(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.isoWeekYear()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getISOWeekYear/index.d.ts b/date-fns/src/getISOWeekYear/index.d.ts
new file mode 100644
index 0000000..018d0c8
--- /dev/null
+++ b/date-fns/src/getISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getISOWeekYear } from 'date-fns'
+export default getISOWeekYear
diff --git a/date-fns/src/getISOWeekYear/index.js.flow b/date-fns/src/getISOWeekYear/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getISOWeekYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getISOWeekYear/index.ts b/date-fns/src/getISOWeekYear/index.ts
new file mode 100644
index 0000000..84366cf
--- /dev/null
+++ b/date-fns/src/getISOWeekYear/index.ts
@@ -0,0 +1,57 @@
+import toDate from '../toDate/index'
+import startOfISOWeek from '../startOfISOWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getISOWeekYear
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Get the ISO week-numbering year of the given date.
+ *
+ * @description
+ * Get the ISO week-numbering year of the given date,
+ * which always starts 3 days before the year's first Thursday.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `getISOYear` to `getISOWeekYear`.
+ * "ISO week year" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ * This change makes the name consistent with
+ * locale-dependent week-numbering year helpers, e.g., `getWeekYear`.
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the ISO week-numbering year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which ISO-week numbering year is 2 January 2005?
+ * const result = getISOWeekYear(new Date(2005, 0, 2))
+ * //=> 2004
+ */
+export default function getISOWeekYear(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+
+ const fourthOfJanuaryOfNextYear = new Date(0)
+ fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)
+ fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)
+ const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear)
+
+ const fourthOfJanuaryOfThisYear = new Date(0)
+ fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4)
+ fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0)
+ const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear)
+
+ if (date.getTime() >= startOfNextYear.getTime()) {
+ return year + 1
+ } else if (date.getTime() >= startOfThisYear.getTime()) {
+ return year
+ } else {
+ return year - 1
+ }
+}
diff --git a/date-fns/src/getISOWeekYear/test.ts b/date-fns/src/getISOWeekYear/test.ts
new file mode 100644
index 0000000..64a05db
--- /dev/null
+++ b/date-fns/src/getISOWeekYear/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getISOWeekYear from '.'
+
+describe('getISOWeekYear', function() {
+ it('returns the ISO week-numbering year of the given date', function() {
+ const result = getISOWeekYear(new Date(2007, 11 /* Dec */, 31))
+ assert(result === 2008)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getISOWeekYear(new Date(2005, 0 /* Jan */, 1).getTime())
+ assert(result === 2004)
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(7, 11 /* Dec */, 31)
+ initialDate.setHours(0, 0, 0, 0)
+ const result = getISOWeekYear(initialDate)
+ assert(result === 8)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getISOWeekYear(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getISOWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getISOWeeksInYear/benchmark.js b/date-fns/src/getISOWeeksInYear/benchmark.js
new file mode 100644
index 0000000..ad36737
--- /dev/null
+++ b/date-fns/src/getISOWeeksInYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getISOWeeksInYear from '.'
+import moment from 'moment'
+
+suite('getISOWeeksInYear', function () {
+ benchmark('date-fns', function () {
+ return getISOWeeksInYear(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.isoWeeksInYear()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getISOWeeksInYear/index.d.ts b/date-fns/src/getISOWeeksInYear/index.d.ts
new file mode 100644
index 0000000..5d3ee66
--- /dev/null
+++ b/date-fns/src/getISOWeeksInYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getISOWeeksInYear } from 'date-fns'
+export default getISOWeeksInYear
diff --git a/date-fns/src/getISOWeeksInYear/index.js.flow b/date-fns/src/getISOWeeksInYear/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getISOWeeksInYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getISOWeeksInYear/index.ts b/date-fns/src/getISOWeeksInYear/index.ts
new file mode 100644
index 0000000..698abdf
--- /dev/null
+++ b/date-fns/src/getISOWeeksInYear/index.ts
@@ -0,0 +1,40 @@
+import startOfISOWeekYear from '../startOfISOWeekYear/index'
+import addWeeks from '../addWeeks/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+const MILLISECONDS_IN_WEEK = 604800000
+
+/**
+ * @name getISOWeeksInYear
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Get the number of weeks in an ISO week-numbering year of the given date.
+ *
+ * @description
+ * Get the number of weeks in an ISO week-numbering year of the given date.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the number of ISO weeks in a year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // How many weeks are in ISO week-numbering year 2015?
+ * const result = getISOWeeksInYear(new Date(2015, 1, 11))
+ * //=> 53
+ */
+export default function getISOWeeksInYear(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const thisYear = startOfISOWeekYear(dirtyDate)
+ const nextYear = startOfISOWeekYear(addWeeks(thisYear, 60))
+ const diff = nextYear.valueOf() - thisYear.valueOf()
+ // Round the number of weeks to the nearest integer
+ // because the number of milliseconds in a week is not constant
+ // (e.g. it's different in the week of the daylight saving time clock shift)
+ return Math.round(diff / MILLISECONDS_IN_WEEK)
+}
diff --git a/date-fns/src/getISOWeeksInYear/test.ts b/date-fns/src/getISOWeeksInYear/test.ts
new file mode 100644
index 0000000..043409a
--- /dev/null
+++ b/date-fns/src/getISOWeeksInYear/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getISOWeeksInYear from '.'
+
+describe('getISOWeeksInYear', function() {
+ it('returns the number of ISO weeks in the ISO week-numbering year of the given date', function() {
+ const result = getISOWeeksInYear(new Date(2015, 1 /* Feb */, 11))
+ assert(result === 53)
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2003, 11 /* Dec */, 30).getTime()
+ const result = getISOWeeksInYear(date)
+ assert(result === 53)
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(4, 0 /* Jan */, 4)
+ initialDate.setHours(0, 0, 0, 0)
+ const result = getISOWeeksInYear(initialDate)
+ assert(result === 53)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getISOWeeksInYear(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getISOWeeksInYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getMilliseconds/benchmark.js b/date-fns/src/getMilliseconds/benchmark.js
new file mode 100644
index 0000000..4aa97d8
--- /dev/null
+++ b/date-fns/src/getMilliseconds/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getMilliseconds from '.'
+import moment from 'moment'
+
+suite('getMilliseconds', function () {
+ benchmark('date-fns', function () {
+ return getMilliseconds(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.milliseconds()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getMilliseconds/index.d.ts b/date-fns/src/getMilliseconds/index.d.ts
new file mode 100644
index 0000000..7476168
--- /dev/null
+++ b/date-fns/src/getMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getMilliseconds } from 'date-fns'
+export default getMilliseconds
diff --git a/date-fns/src/getMilliseconds/index.js.flow b/date-fns/src/getMilliseconds/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getMilliseconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getMilliseconds/index.ts b/date-fns/src/getMilliseconds/index.ts
new file mode 100644
index 0000000..bd3803d
--- /dev/null
+++ b/date-fns/src/getMilliseconds/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getMilliseconds
+ * @category Millisecond Helpers
+ * @summary Get the milliseconds of the given date.
+ *
+ * @description
+ * Get the milliseconds of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the milliseconds
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Get the milliseconds of 29 February 2012 11:45:05.123:
+ * const result = getMilliseconds(new Date(2012, 1, 29, 11, 45, 5, 123))
+ * //=> 123
+ */
+export default function getMilliseconds(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const milliseconds = date.getMilliseconds()
+ return milliseconds
+}
diff --git a/date-fns/src/getMilliseconds/test.ts b/date-fns/src/getMilliseconds/test.ts
new file mode 100644
index 0000000..428e113
--- /dev/null
+++ b/date-fns/src/getMilliseconds/test.ts
@@ -0,0 +1,30 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getMilliseconds from '.'
+
+describe('getMilliseconds', function() {
+ it('returns the milliseconds of the given date', function() {
+ const result = getMilliseconds(
+ new Date(2012, 1 /* Feb */, 29, 11, 45, 5, 123)
+ )
+ assert(result === 123)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getMilliseconds(
+ new Date(2014, 3 /* Apr */, 2, 23, 30, 42, 500).getTime()
+ )
+ assert(result === 500)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getMilliseconds(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getMilliseconds.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getMinutes/benchmark.js b/date-fns/src/getMinutes/benchmark.js
new file mode 100644
index 0000000..1bd822d
--- /dev/null
+++ b/date-fns/src/getMinutes/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getMinutes from '.'
+import moment from 'moment'
+
+suite('getMinutes', function () {
+ benchmark('date-fns', function () {
+ return getMinutes(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.minutes()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getMinutes/index.d.ts b/date-fns/src/getMinutes/index.d.ts
new file mode 100644
index 0000000..e6a9284
--- /dev/null
+++ b/date-fns/src/getMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getMinutes } from 'date-fns'
+export default getMinutes
diff --git a/date-fns/src/getMinutes/index.js.flow b/date-fns/src/getMinutes/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getMinutes/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getMinutes/index.ts b/date-fns/src/getMinutes/index.ts
new file mode 100644
index 0000000..12bdab7
--- /dev/null
+++ b/date-fns/src/getMinutes/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getMinutes
+ * @category Minute Helpers
+ * @summary Get the minutes of the given date.
+ *
+ * @description
+ * Get the minutes of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the minutes
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Get the minutes of 29 February 2012 11:45:05:
+ * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))
+ * //=> 45
+ */
+export default function getMinutes(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const minutes = date.getMinutes()
+ return minutes
+}
diff --git a/date-fns/src/getMinutes/test.ts b/date-fns/src/getMinutes/test.ts
new file mode 100644
index 0000000..f47e3cf
--- /dev/null
+++ b/date-fns/src/getMinutes/test.ts
@@ -0,0 +1,26 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getMinutes from '.'
+
+describe('getMinutes', function() {
+ it('returns the minutes of the given date', function() {
+ const result = getMinutes(new Date(2012, 1 /* Feb */, 29, 11, 45, 5))
+ assert(result === 45)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getMinutes(new Date(2014, 3 /* Apr */, 2, 23, 30).getTime())
+ assert(result === 30)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getMinutes(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getMinutes.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getMonth/benchmark.js b/date-fns/src/getMonth/benchmark.js
new file mode 100644
index 0000000..5c4ba43
--- /dev/null
+++ b/date-fns/src/getMonth/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getMonth from '.'
+import moment from 'moment'
+
+suite('getMonth', function () {
+ benchmark('date-fns', function () {
+ return getMonth(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.month()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getMonth/index.d.ts b/date-fns/src/getMonth/index.d.ts
new file mode 100644
index 0000000..e0b6217
--- /dev/null
+++ b/date-fns/src/getMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getMonth } from 'date-fns'
+export default getMonth
diff --git a/date-fns/src/getMonth/index.js.flow b/date-fns/src/getMonth/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getMonth/index.ts b/date-fns/src/getMonth/index.ts
new file mode 100644
index 0000000..d7b4571
--- /dev/null
+++ b/date-fns/src/getMonth/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getMonth
+ * @category Month Helpers
+ * @summary Get the month of the given date.
+ *
+ * @description
+ * Get the month of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the month
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which month is 29 February 2012?
+ * const result = getMonth(new Date(2012, 1, 29))
+ * //=> 1
+ */
+export default function getMonth(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const month = date.getMonth()
+ return month
+}
diff --git a/date-fns/src/getMonth/test.ts b/date-fns/src/getMonth/test.ts
new file mode 100644
index 0000000..a34f2a2
--- /dev/null
+++ b/date-fns/src/getMonth/test.ts
@@ -0,0 +1,26 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getMonth from '.'
+
+describe('getMonth', function() {
+ it('returns the month of the given date', function() {
+ const result = getMonth(new Date(2012, 1 /* Feb */, 29))
+ assert(result === 1)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getMonth(new Date(2014, 3 /* Apr */, 2).getTime())
+ assert(result === 3)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getMonth(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getMonth.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getOverlappingDaysInIntervals/index.d.ts b/date-fns/src/getOverlappingDaysInIntervals/index.d.ts
new file mode 100644
index 0000000..e309ff9
--- /dev/null
+++ b/date-fns/src/getOverlappingDaysInIntervals/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getOverlappingDaysInIntervals } from 'date-fns'
+export default getOverlappingDaysInIntervals
diff --git a/date-fns/src/getOverlappingDaysInIntervals/index.js.flow b/date-fns/src/getOverlappingDaysInIntervals/index.js.flow
new file mode 100644
index 0000000..9c0f272
--- /dev/null
+++ b/date-fns/src/getOverlappingDaysInIntervals/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ intervalLeft: Interval,
+ intervalRight: Interval
+) => number
diff --git a/date-fns/src/getOverlappingDaysInIntervals/index.ts b/date-fns/src/getOverlappingDaysInIntervals/index.ts
new file mode 100644
index 0000000..aa5dc63
--- /dev/null
+++ b/date-fns/src/getOverlappingDaysInIntervals/index.ts
@@ -0,0 +1,106 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { Interval } from '../types'
+
+const MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000
+
+/**
+ * @name getOverlappingDaysInIntervals
+ * @category Interval Helpers
+ * @summary Get the number of days that overlap in two time intervals
+ *
+ * @description
+ * Get the number of days that overlap in two time intervals
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `getOverlappingDaysInRanges` to `getOverlappingDaysInIntervals`.
+ * This change was made to mirror the use of the word "interval" in standard ISO 8601:2004 terminology:
+ *
+ * ```
+ * 2.1.3
+ * time interval
+ * part of the time axis limited by two instants
+ * ```
+ *
+ * Also, this function now accepts an object with `start` and `end` properties
+ * instead of two arguments as an interval.
+ * This function now throws `RangeError` if the start of the interval is after its end
+ * or if any date in the interval is `Invalid Date`.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ *
+ * getOverlappingDaysInRanges(
+ * new Date(2014, 0, 10), new Date(2014, 0, 20),
+ * new Date(2014, 0, 17), new Date(2014, 0, 21)
+ * )
+ *
+ * // v2.0.0 onward
+ *
+ * getOverlappingDaysInIntervals(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }
+ * )
+ * ```
+ *
+ * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/Interval}
+ * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/Interval}
+ * @returns {Number} the number of days that overlap in two time intervals
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // For overlapping time intervals adds 1 for each started overlapping day:
+ * getOverlappingDaysInIntervals(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }
+ * )
+ * //=> 3
+ *
+ * @example
+ * // For non-overlapping time intervals returns 0:
+ * getOverlappingDaysInIntervals(
+ * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
+ * { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }
+ * )
+ * //=> 0
+ */
+
+export default function getOverlappingDaysInIntervals(
+ dirtyIntervalLeft: Interval,
+ dirtyIntervalRight: Interval
+): number {
+ requiredArgs(2, arguments)
+
+ const intervalLeft = dirtyIntervalLeft || {}
+ const intervalRight = dirtyIntervalRight || {}
+ const leftStartTime = toDate(intervalLeft.start).getTime()
+ const leftEndTime = toDate(intervalLeft.end).getTime()
+ const rightStartTime = toDate(intervalRight.start).getTime()
+ const rightEndTime = toDate(intervalRight.end).getTime()
+
+ // Throw an exception if start date is after end date or if any date is `Invalid Date`
+ if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {
+ throw new RangeError('Invalid interval')
+ }
+
+ const isOverlapping =
+ leftStartTime < rightEndTime && rightStartTime < leftEndTime
+
+ if (!isOverlapping) {
+ return 0
+ }
+
+ const overlapStartDate =
+ rightStartTime < leftStartTime ? leftStartTime : rightStartTime
+
+ const overlapEndDate = rightEndTime > leftEndTime ? leftEndTime : rightEndTime
+
+ const differenceInMs = overlapEndDate - overlapStartDate
+
+ return Math.ceil(differenceInMs / MILLISECONDS_IN_DAY)
+}
diff --git a/date-fns/src/getOverlappingDaysInIntervals/test.ts b/date-fns/src/getOverlappingDaysInIntervals/test.ts
new file mode 100644
index 0000000..b39672f
--- /dev/null
+++ b/date-fns/src/getOverlappingDaysInIntervals/test.ts
@@ -0,0 +1,240 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getOverlappingDaysInIntervals from '.'
+
+describe('getOverlappingDaysInIntervals', function() {
+ const initialIntervalStart = new Date(2016, 10, 10, 13, 0, 0)
+ const initialIntervalEnd = new Date(2016, 11, 3, 15, 0, 0)
+
+ describe("when the time intervals don't overlap", function() {
+ it('returns 0 for a valid non overlapping interval before another interval', function() {
+ const earlierIntervalStart = new Date(2016, 9, 25)
+ const earlierIntervalEnd = new Date(2016, 10, 9)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: earlierIntervalStart, end: earlierIntervalEnd }
+ )
+ assert(numOverlappingDays === 0)
+ })
+
+ it('returns 0 for a valid non overlapping interval after another interval', function() {
+ const laterIntervalStart = new Date(2016, 11, 4)
+ const laterIntervalEnd = new Date(2016, 11, 9)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: laterIntervalStart, end: laterIntervalEnd }
+ )
+ assert(numOverlappingDays === 0)
+ })
+
+ it('returns 0 for a non overlapping same-day interval', function() {
+ const sameDayIntervalStart = new Date(2016, 11, 4, 9, 0, 0)
+ const sameDayIntervalEnd = new Date(2016, 11, 4, 18, 0, 0)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: sameDayIntervalStart, end: sameDayIntervalEnd }
+ )
+ assert(numOverlappingDays === 0)
+ })
+
+ it('returns 0 for an interval differing by a few hours', function() {
+ const oneDayOverlappingIntervalStart = new Date(2016, 11, 3, 18, 0, 0)
+ const oneDayOverlappingIntervalEnd = new Date(2016, 11, 14, 13, 0, 0)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ {
+ start: oneDayOverlappingIntervalStart,
+ end: oneDayOverlappingIntervalEnd
+ }
+ )
+ assert(numOverlappingDays === 0)
+ })
+
+ it("returns 0 for an interval with the same startDateTime as the initial time intervals's endDateTime", function() {
+ const oneDayOverlapIntervalStart = new Date(2016, 11, 3, 15, 0, 0)
+ const oneDayOverlapIntervalEnd = new Date(2016, 11, 14, 13, 0, 0)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: oneDayOverlapIntervalStart, end: oneDayOverlapIntervalEnd }
+ )
+ assert(numOverlappingDays === 0)
+ })
+
+ it("returns 0 for an interval with the same endDateTime as the initial time interval's startDateTime", function() {
+ const oneDayOverlapIntervalStart = new Date(2016, 10, 3, 15, 0, 0)
+ const oneDayOverlapIntervalEnd = new Date(2016, 10, 10, 13, 0, 0)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: oneDayOverlapIntervalStart, end: oneDayOverlapIntervalEnd }
+ )
+ assert(numOverlappingDays === 0)
+ })
+ })
+
+ describe('when the time intervals overlap', function() {
+ it('rounds up the result to include each started overlapping day', function() {
+ const includedIntervalStart = new Date(2016, 10, 14, 9, 0, 0)
+ const includedIntervalEnd = new Date(2016, 10, 15, 18, 0, 0)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: includedIntervalStart, end: includedIntervalEnd }
+ )
+ assert(numOverlappingDays === 2)
+ })
+
+ it('returns the correct value for an interval included within another interval', function() {
+ const includedIntervalStart = new Date(2016, 10, 14)
+ const includedIntervalEnd = new Date(2016, 10, 15)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: includedIntervalStart, end: includedIntervalEnd }
+ )
+ assert(numOverlappingDays === 1)
+ })
+
+ it('returns the correct value for an interval overlapping at the end', function() {
+ const endOverlappingIntervalStart = new Date(2016, 10, 5)
+ const endOverlappingIntervalEnd = new Date(2016, 10, 14)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: endOverlappingIntervalStart, end: endOverlappingIntervalEnd }
+ )
+ assert(numOverlappingDays === 4)
+ })
+
+ it('returns the correct value for an interval overlapping at the beginning', function() {
+ const startOverlappingIntervalStart = new Date(2016, 10, 20)
+ const startOverlappingIntervalEnd = new Date(2016, 11, 14)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ {
+ start: startOverlappingIntervalStart,
+ end: startOverlappingIntervalEnd
+ }
+ )
+ assert(numOverlappingDays === 14)
+ })
+
+ it('returns the correct value for an interval including another interval', function() {
+ const includingIntervalStart = new Date(2016, 10, 5)
+ const includingIntervalEnd = new Date(2016, 11, 15)
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: includingIntervalStart, end: includingIntervalEnd }
+ )
+ assert(numOverlappingDays === 24)
+ })
+ })
+
+ it('accepts a timestamp', function() {
+ const initialIntervalStart = new Date(2016, 10, 10, 13, 0, 0).getTime()
+ const initialIntervalEnd = new Date(2016, 11, 3, 15, 0, 0).getTime()
+
+ const endOverlappingIntervalStart = new Date(2016, 10, 5).getTime()
+ const endOverlappingIntervalEnd = new Date(2016, 10, 14).getTime()
+
+ const numOverlappingDays = getOverlappingDaysInIntervals(
+ { start: initialIntervalStart, end: initialIntervalEnd },
+ { start: endOverlappingIntervalStart, end: endOverlappingIntervalEnd }
+ )
+ assert(numOverlappingDays === 4)
+ })
+
+ it('throws an exception if the start date of the initial time interval is after the end date', function() {
+ const block = getOverlappingDaysInIntervals.bind(
+ null,
+ { start: new Date(2016, 10, 7), end: new Date(2016, 10, 3) },
+ { start: new Date(2016, 10, 5), end: new Date(2016, 10, 15) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date of the compared time interval is after the end date', function() {
+ const block = getOverlappingDaysInIntervals.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(2016, 10, 7) },
+ { start: new Date(2016, 10, 15), end: new Date(2016, 10, 5) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the initial interval is undefined', function() {
+ const block = getOverlappingDaysInIntervals.bind(
+ null,
+ // $ExpectedMistake
+ //@ts-expect-error
+ undefined,
+ { start: new Date(2016, 10, 5), end: new Date(2016, 10, 15) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the compared interval is undefined', function() {
+ const block = getOverlappingDaysInIntervals.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(2016, 10, 7) },
+ // $ExpectedMistake
+ //@ts-expect-error
+ undefined
+ )
+ assert.throws(block, RangeError)
+ })
+
+ describe('one of the dates is `Invalid Date`', function() {
+ it('throws an exception if the start date of the initial time interval is `Invalid Date`', function() {
+ const block = getOverlappingDaysInIntervals.bind(
+ null,
+ { start: new Date(NaN), end: new Date(2016, 10, 3) },
+ { start: new Date(2016, 10, 5), end: new Date(2016, 10, 15) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date of the initial time interval is `Invalid Date`', function() {
+ const block = getOverlappingDaysInIntervals.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(NaN) },
+ { start: new Date(2016, 10, 5), end: new Date(2016, 10, 15) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the start date of the compared time interval is `Invalid Date`', function() {
+ const block = getOverlappingDaysInIntervals.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(2016, 10, 7) },
+ { start: new Date(NaN), end: new Date(2016, 10, 5) }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date of the compared time interval is `Invalid Date`', function() {
+ const block = getOverlappingDaysInIntervals.bind(
+ null,
+ { start: new Date(2016, 10, 3), end: new Date(2016, 10, 7) },
+ { start: new Date(2016, 10, 5), end: new Date(NaN) }
+ )
+ assert.throws(block, RangeError)
+ })
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(getOverlappingDaysInIntervals.bind(null), TypeError)
+ // $ExpectedMistake
+ //@ts-expect-error
+ assert.throws(getOverlappingDaysInIntervals.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/getQuarter/benchmark.js b/date-fns/src/getQuarter/benchmark.js
new file mode 100644
index 0000000..d83e7c2
--- /dev/null
+++ b/date-fns/src/getQuarter/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getQuarter from '.'
+import moment from 'moment'
+
+suite('getQuarter', function () {
+ benchmark('date-fns', function () {
+ return getQuarter(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.quarter()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getQuarter/index.d.ts b/date-fns/src/getQuarter/index.d.ts
new file mode 100644
index 0000000..6434ba0
--- /dev/null
+++ b/date-fns/src/getQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getQuarter } from 'date-fns'
+export default getQuarter
diff --git a/date-fns/src/getQuarter/index.js.flow b/date-fns/src/getQuarter/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getQuarter/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getQuarter/index.ts b/date-fns/src/getQuarter/index.ts
new file mode 100644
index 0000000..2dc72f3
--- /dev/null
+++ b/date-fns/src/getQuarter/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getQuarter
+ * @category Quarter Helpers
+ * @summary Get the year quarter of the given date.
+ *
+ * @description
+ * Get the year quarter of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the quarter
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which quarter is 2 July 2014?
+ * const result = getQuarter(new Date(2014, 6, 2))
+ * //=> 3
+ */
+export default function getQuarter(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const quarter = Math.floor(date.getMonth() / 3) + 1
+ return quarter
+}
diff --git a/date-fns/src/getQuarter/test.ts b/date-fns/src/getQuarter/test.ts
new file mode 100644
index 0000000..9876622
--- /dev/null
+++ b/date-fns/src/getQuarter/test.ts
@@ -0,0 +1,26 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getQuarter from '.'
+
+describe('getQuarter', function() {
+ it('returns the quarter of the given date', function() {
+ const result = getQuarter(new Date(2014, 6 /* Jul */, 2))
+ assert(result === 3)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getQuarter(new Date(2014, 3 /* Apr */, 2).getTime())
+ assert(result === 2)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getQuarter(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getQuarter.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getSeconds/benchmark.js b/date-fns/src/getSeconds/benchmark.js
new file mode 100644
index 0000000..239fbe7
--- /dev/null
+++ b/date-fns/src/getSeconds/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getSeconds from '.'
+import moment from 'moment'
+
+suite('getSeconds', function () {
+ benchmark('date-fns', function () {
+ return getSeconds(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.seconds()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getSeconds/index.d.ts b/date-fns/src/getSeconds/index.d.ts
new file mode 100644
index 0000000..7b60944
--- /dev/null
+++ b/date-fns/src/getSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getSeconds } from 'date-fns'
+export default getSeconds
diff --git a/date-fns/src/getSeconds/index.js.flow b/date-fns/src/getSeconds/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getSeconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getSeconds/index.ts b/date-fns/src/getSeconds/index.ts
new file mode 100644
index 0000000..58ba042
--- /dev/null
+++ b/date-fns/src/getSeconds/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getSeconds
+ * @category Second Helpers
+ * @summary Get the seconds of the given date.
+ *
+ * @description
+ * Get the seconds of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the seconds
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Get the seconds of 29 February 2012 11:45:05.123:
+ * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))
+ * //=> 5
+ */
+export default function getSeconds(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const seconds = date.getSeconds()
+ return seconds
+}
diff --git a/date-fns/src/getSeconds/test.ts b/date-fns/src/getSeconds/test.ts
new file mode 100644
index 0000000..bcc1c38
--- /dev/null
+++ b/date-fns/src/getSeconds/test.ts
@@ -0,0 +1,28 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getSeconds from '.'
+
+describe('getSeconds', function() {
+ it('returns the seconds of the given date', function() {
+ const result = getSeconds(new Date(2012, 1 /* Feb */, 29, 11, 45, 5, 123))
+ assert(result === 5)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getSeconds(
+ new Date(2014, 3 /* Apr */, 2, 23, 30, 42).getTime()
+ )
+ assert(result === 42)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getSeconds(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getSeconds.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getTime/benchmark.js b/date-fns/src/getTime/benchmark.js
new file mode 100644
index 0000000..8a65fd9
--- /dev/null
+++ b/date-fns/src/getTime/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getTime from '.'
+import moment from 'moment'
+
+suite('getTime', function () {
+ benchmark('date-fns', function () {
+ return getTime(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.valueOf()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getTime/index.d.ts b/date-fns/src/getTime/index.d.ts
new file mode 100644
index 0000000..87c958e
--- /dev/null
+++ b/date-fns/src/getTime/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getTime } from 'date-fns'
+export default getTime
diff --git a/date-fns/src/getTime/index.js.flow b/date-fns/src/getTime/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getTime/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getTime/index.ts b/date-fns/src/getTime/index.ts
new file mode 100644
index 0000000..09dffb3
--- /dev/null
+++ b/date-fns/src/getTime/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getTime
+ * @category Timestamp Helpers
+ * @summary Get the milliseconds timestamp of the given date.
+ *
+ * @description
+ * Get the milliseconds timestamp of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the timestamp
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Get the timestamp of 29 February 2012 11:45:05.123:
+ * const result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))
+ * //=> 1330515905123
+ */
+export default function getTime(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const timestamp = date.getTime()
+ return timestamp
+}
diff --git a/date-fns/src/getTime/test.ts b/date-fns/src/getTime/test.ts
new file mode 100644
index 0000000..56bab04
--- /dev/null
+++ b/date-fns/src/getTime/test.ts
@@ -0,0 +1,28 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getTime from '.'
+
+describe('getTime', function() {
+ it('returns the timestamp of the given date', function() {
+ const timestamp = 1483228800000
+ const result = getTime(new Date(timestamp))
+ assert(result === timestamp)
+ })
+
+ it('accepts a timestamp (and returns it unchanged)', function() {
+ const timestamp = 804643200000
+ const result = getTime(timestamp)
+ assert(result === timestamp)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getTime(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getTime.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getUnixTime/benchmark.js b/date-fns/src/getUnixTime/benchmark.js
new file mode 100644
index 0000000..dcb0ae0
--- /dev/null
+++ b/date-fns/src/getUnixTime/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getUnixTime from '.'
+import moment from 'moment'
+
+suite('getTime', function () {
+ benchmark('date-fns', function () {
+ return getUnixTime(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.unix()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getUnixTime/index.d.ts b/date-fns/src/getUnixTime/index.d.ts
new file mode 100644
index 0000000..8f85a12
--- /dev/null
+++ b/date-fns/src/getUnixTime/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getUnixTime } from 'date-fns'
+export default getUnixTime
diff --git a/date-fns/src/getUnixTime/index.js.flow b/date-fns/src/getUnixTime/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getUnixTime/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getUnixTime/index.ts b/date-fns/src/getUnixTime/index.ts
new file mode 100644
index 0000000..0577542
--- /dev/null
+++ b/date-fns/src/getUnixTime/index.ts
@@ -0,0 +1,29 @@
+import getTime from '../getTime/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getUnixTime
+ * @category Timestamp Helpers
+ * @summary Get the seconds timestamp of the given date.
+ *
+ * @description
+ * Get the seconds timestamp of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the timestamp
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Get the timestamp of 29 February 2012 11:45:05 CET:
+ * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))
+ * //=> 1330512305
+ */
+export default function getUnixTime(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ return Math.floor(getTime(dirtyDate) / 1000)
+}
diff --git a/date-fns/src/getUnixTime/test.ts b/date-fns/src/getUnixTime/test.ts
new file mode 100644
index 0000000..6109677
--- /dev/null
+++ b/date-fns/src/getUnixTime/test.ts
@@ -0,0 +1,28 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getUnixTime from '.'
+
+describe('getUnixTime', function() {
+ it('returns the timestamp of the given date', function() {
+ const timestamp = 1483228800000
+ const result = getUnixTime(new Date(timestamp))
+ assert(result === Math.floor(timestamp / 1000))
+ })
+
+ it('accepts a timestamp (and returns it unchanged)', function() {
+ const timestamp = 804643200000
+ const result = getUnixTime(timestamp)
+ assert(result === Math.floor(timestamp / 1000))
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getUnixTime(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getUnixTime.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getWeek/index.d.ts b/date-fns/src/getWeek/index.d.ts
new file mode 100644
index 0000000..dfa1327
--- /dev/null
+++ b/date-fns/src/getWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeek } from 'date-fns'
+export default getWeek
diff --git a/date-fns/src/getWeek/index.js.flow b/date-fns/src/getWeek/index.js.flow
new file mode 100644
index 0000000..2c948ae
--- /dev/null
+++ b/date-fns/src/getWeek/index.js.flow
@@ -0,0 +1,59 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+) => number
diff --git a/date-fns/src/getWeek/index.ts b/date-fns/src/getWeek/index.ts
new file mode 100644
index 0000000..af13a84
--- /dev/null
+++ b/date-fns/src/getWeek/index.ts
@@ -0,0 +1,64 @@
+import startOfWeek from '../startOfWeek/index'
+import startOfWeekYear from '../startOfWeekYear/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { LocaleOptions, WeekStartOptions, FirstWeekContainsDateOptions } from '../types'
+
+const MILLISECONDS_IN_WEEK = 604800000
+
+/**
+ * @name getWeek
+ * @category Week Helpers
+ * @summary Get the local week index of the given date.
+ *
+ * @description
+ * Get the local week index of the given date.
+ * The exact calculation depends on the values of
+ * `options.weekStartsOn` (which is the index of the first day of the week)
+ * and `options.firstWeekContainsDate` (which is the day of January, which is always in
+ * the first week of the week-numbering year)
+ *
+ * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year
+ * @returns {Number} the week
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
+ *
+ * @example
+ * // Which week of the local week numbering year is 2 January 2005 with default options?
+ * const result = getISOWeek(new Date(2005, 0, 2))
+ * //=> 2
+ *
+ * // Which week of the local week numbering year is 2 January 2005,
+ * // if Monday is the first day of the week,
+ * // and the first week of the year always contains 4 January?
+ * const result = getISOWeek(new Date(2005, 0, 2), {
+ * weekStartsOn: 1,
+ * firstWeekContainsDate: 4
+ * })
+ * //=> 53
+ */
+
+export default function getWeek(dirtyDate: Date | number, options?: LocaleOptions & WeekStartOptions & FirstWeekContainsDateOptions): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const diff =
+ startOfWeek(date, options).getTime() -
+ startOfWeekYear(date, options).getTime()
+
+ // Round the number of days to the nearest integer
+ // because the number of milliseconds in a week is not constant
+ // (e.g. it's different in the week of the daylight saving time clock shift)
+ return Math.round(diff / MILLISECONDS_IN_WEEK) + 1
+}
diff --git a/date-fns/src/getWeek/test.ts b/date-fns/src/getWeek/test.ts
new file mode 100644
index 0000000..48baf41
--- /dev/null
+++ b/date-fns/src/getWeek/test.ts
@@ -0,0 +1,73 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getWeek from '.'
+
+describe('getWeek', function () {
+ it('returns the local week of year of the given date', function () {
+ const result = getWeek(new Date(2005, 0 /* Jan */, 2))
+ assert(result === 2)
+ })
+
+ it('accepts a timestamp', function () {
+ const result = getWeek(new Date(2008, 11 /* Dec */, 29).getTime())
+ assert(result === 1)
+ })
+
+ it('handles dates before 100 AD', function () {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(7, 11 /* Dec */, 30)
+ initialDate.setHours(0, 0, 0, 0)
+ const result = getWeek(initialDate)
+ assert(result === 1)
+ })
+
+ it('returns NaN if the given date is invalid', function () {
+ const result = getWeek(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in locale', function () {
+ const date = new Date(2005, 0 /* Jan */, 2)
+ // @ts-expect-error
+ const result = getWeek(date, {
+ locale: {
+ options: { weekStartsOn: 1, firstWeekContainsDate: 4 }
+ }
+ })
+ assert(result === 53)
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function () {
+ const date = new Date(2005, 0 /* Jan */, 2)
+ const result = getWeek(date, {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 0, firstWeekContainsDate: 1 }
+ }
+ })
+ assert(result === 53)
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ // @ts-expect-error
+ const block = getWeek.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ weekStartsOn: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function () {
+ // @ts-expect-error
+ const block = getWeek.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ firstWeekContainsDate: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ assert.throws(getWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getWeekOfMonth/benchmark.js b/date-fns/src/getWeekOfMonth/benchmark.js
new file mode 100644
index 0000000..a7384b6
--- /dev/null
+++ b/date-fns/src/getWeekOfMonth/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getWeekOfMonth from '.'
+
+suite('getWeekOfMonth', function () {
+ benchmark('date-fns', function () {
+ return getWeekOfMonth(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/getWeekOfMonth/index.d.ts b/date-fns/src/getWeekOfMonth/index.d.ts
new file mode 100644
index 0000000..781b2ad
--- /dev/null
+++ b/date-fns/src/getWeekOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeekOfMonth } from 'date-fns'
+export default getWeekOfMonth
diff --git a/date-fns/src/getWeekOfMonth/index.js b/date-fns/src/getWeekOfMonth/index.js
new file mode 100644
index 0000000..1c69d86
--- /dev/null
+++ b/date-fns/src/getWeekOfMonth/index.js
@@ -0,0 +1,72 @@
+import getDate from '../getDate/index'
+import getDay from '../getDay/index'
+import startOfMonth from '../startOfMonth/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getWeekOfMonth
+ * @category Week Helpers
+ * @summary Get the week of the month of the given date.
+ *
+ * @description
+ * Get the week of the month of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Number} the week of month
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ *
+ * @example
+ * // Which week of the month is 9 November 2017?
+ * var result = getWeekOfMonth(new Date(2017, 10, 9))
+ * //=> 2
+ */
+export default function getWeekOfMonth(date, dirtyOptions) {
+ requiredArgs(1, arguments)
+
+ var options = dirtyOptions || {}
+ var locale = options.locale
+ var localeWeekStartsOn =
+ locale && locale.options && locale.options.weekStartsOn
+ var defaultWeekStartsOn =
+ localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)
+ var weekStartsOn =
+ options.weekStartsOn == null
+ ? defaultWeekStartsOn
+ : toInteger(options.weekStartsOn)
+
+ // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')
+ }
+
+ var currentDayOfMonth = getDate(date)
+ if (isNaN(currentDayOfMonth)) {
+ return currentDayOfMonth
+ }
+
+ var startWeekDay = getDay(startOfMonth(date))
+ var lastDayOfFirstWeek = 0
+
+ if (startWeekDay >= weekStartsOn) {
+ lastDayOfFirstWeek = weekStartsOn + 7 - startWeekDay
+ } else {
+ lastDayOfFirstWeek = weekStartsOn - startWeekDay
+ }
+
+ var weekNumber = 1
+
+ if (currentDayOfMonth > lastDayOfFirstWeek) {
+ var remainingDaysAfterFirstWeek = currentDayOfMonth - lastDayOfFirstWeek
+ weekNumber = weekNumber + Math.ceil(remainingDaysAfterFirstWeek / 7)
+ }
+ return weekNumber
+}
diff --git a/date-fns/src/getWeekOfMonth/index.js.flow b/date-fns/src/getWeekOfMonth/index.js.flow
new file mode 100644
index 0000000..1115f28
--- /dev/null
+++ b/date-fns/src/getWeekOfMonth/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => number
diff --git a/date-fns/src/getWeekOfMonth/test.js b/date-fns/src/getWeekOfMonth/test.js
new file mode 100644
index 0000000..5996cae
--- /dev/null
+++ b/date-fns/src/getWeekOfMonth/test.js
@@ -0,0 +1,84 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getWeekOfMonth from '.'
+
+describe('getWeekOfMonth', function () {
+ it('returns the week of the month of the given date', function () {
+ var result = getWeekOfMonth(new Date(2017, 10 /* Nov */, 15))
+ assert(result === 3)
+ })
+
+ describe('edge cases', function () {
+ describe('when the given day is the first of a month', function () {
+ it('returns the week of the month of the given date', function () {
+ var result = getWeekOfMonth(new Date(2017, 10 /* Nov */, 1))
+ assert(result === 1)
+ })
+ })
+
+ describe('when the given day is the last of a month #1', function () {
+ it('returns the week of the month of the given date', function () {
+ var result = getWeekOfMonth(new Date(2017, 10 /* Nov */, 30))
+ assert(result === 5)
+ })
+ })
+
+ describe('when the given day is the last of a month #2', function () {
+ it('returns the week of the month of the given date', function () {
+ var result = getWeekOfMonth(new Date(2017, 9 /* Oct */, 31))
+ assert(result === 5)
+ })
+ })
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = getWeekOfMonth(new Date(2017, 9 /* Oct */, 1), {
+ weekStartsOn: 1,
+ })
+ assert(result === 1)
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function () {
+ var result = getWeekOfMonth(new Date(2017, 9 /* Oct */, 31), {
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 1 },
+ },
+ })
+ assert(result === 6)
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function () {
+ var result = getWeekOfMonth(new Date(2017, 10 /* Nov */, 13), {
+ weekStartsOn: 1,
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 0 },
+ },
+ })
+ assert(result === 3)
+ })
+
+ it('accepts a timestamp', function () {
+ var result = getWeekOfMonth(new Date(2017, 10 /* Nov */, 1).getTime())
+ assert(result === 1)
+ })
+
+ it('returns NaN if the given date is invalid', function () {
+ var result = getWeekOfMonth(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ assert.throws(getWeekOfMonth.bind(null), TypeError)
+ })
+
+ it('returns the week of the month of the given date, when the given date is sunday', function () {
+ var result = getWeekOfMonth(new Date(2019, 4 /* May */, 5), {
+ weekStartsOn: 1,
+ })
+ assert(result === 1)
+ })
+})
diff --git a/date-fns/src/getWeekYear/index.d.ts b/date-fns/src/getWeekYear/index.d.ts
new file mode 100644
index 0000000..c8fc528
--- /dev/null
+++ b/date-fns/src/getWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeekYear } from 'date-fns'
+export default getWeekYear
diff --git a/date-fns/src/getWeekYear/index.js.flow b/date-fns/src/getWeekYear/index.js.flow
new file mode 100644
index 0000000..2c948ae
--- /dev/null
+++ b/date-fns/src/getWeekYear/index.js.flow
@@ -0,0 +1,59 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+) => number
diff --git a/date-fns/src/getWeekYear/index.ts b/date-fns/src/getWeekYear/index.ts
new file mode 100644
index 0000000..649b8d1
--- /dev/null
+++ b/date-fns/src/getWeekYear/index.ts
@@ -0,0 +1,98 @@
+import startOfWeek from '../startOfWeek/index'
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import {
+ WeekStartOptions,
+ LocaleOptions,
+ FirstWeekContainsDateOptions,
+} from '../types'
+
+/**
+ * @name getWeekYear
+ * @category Week-Numbering Year Helpers
+ * @summary Get the local week-numbering year of the given date.
+ *
+ * @description
+ * Get the local week-numbering year of the given date.
+ * The exact calculation depends on the values of
+ * `options.weekStartsOn` (which is the index of the first day of the week)
+ * and `options.firstWeekContainsDate` (which is the day of January, which is always in
+ * the first week of the week-numbering year)
+ *
+ * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year
+ * @returns {Number} the local week-numbering year
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
+ *
+ * @example
+ * // Which week numbering year is 26 December 2004 with the default settings?
+ * const result = getWeekYear(new Date(2004, 11, 26))
+ * //=> 2005
+ *
+ * @example
+ * // Which week numbering year is 26 December 2004 if week starts on Saturday?
+ * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })
+ * //=> 2004
+ *
+ * @example
+ * // Which week numbering year is 26 December 2004 if the first week contains 4 January?
+ * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })
+ * //=> 2004
+ */
+export default function getWeekYear(
+ dirtyDate: Date | number,
+ options?: LocaleOptions & WeekStartOptions & FirstWeekContainsDateOptions
+): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+
+ const localeFirstWeekContainsDate =
+ options?.locale?.options?.firstWeekContainsDate
+ const defaultFirstWeekContainsDate =
+ localeFirstWeekContainsDate == null
+ ? 1
+ : toInteger(localeFirstWeekContainsDate)
+ const firstWeekContainsDate =
+ options?.firstWeekContainsDate == null
+ ? defaultFirstWeekContainsDate
+ : toInteger(options.firstWeekContainsDate)
+
+ // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
+ if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
+ throw new RangeError(
+ 'firstWeekContainsDate must be between 1 and 7 inclusively'
+ )
+ }
+
+ const firstWeekOfNextYear = new Date(0)
+ firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate)
+ firstWeekOfNextYear.setHours(0, 0, 0, 0)
+ const startOfNextYear = startOfWeek(firstWeekOfNextYear, options)
+
+ const firstWeekOfThisYear = new Date(0)
+ firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate)
+ firstWeekOfThisYear.setHours(0, 0, 0, 0)
+ const startOfThisYear = startOfWeek(firstWeekOfThisYear, options)
+
+ if (date.getTime() >= startOfNextYear.getTime()) {
+ return year + 1
+ } else if (date.getTime() >= startOfThisYear.getTime()) {
+ return year
+ } else {
+ return year - 1
+ }
+}
diff --git a/date-fns/src/getWeekYear/test.ts b/date-fns/src/getWeekYear/test.ts
new file mode 100644
index 0000000..0f8bf54
--- /dev/null
+++ b/date-fns/src/getWeekYear/test.ts
@@ -0,0 +1,75 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import getWeekYear from '.'
+
+describe('getWeekYear', () => {
+ it('returns the local week-numbering year of the given date', () => {
+ const result = getWeekYear(new Date(2004, 11 /* Dec */, 26))
+ assert(result === 2005)
+ })
+
+ it('accepts a timestamp', () => {
+ const result = getWeekYear(new Date(2000, 11 /* Dec */, 30).getTime())
+ assert(result === 2000)
+ })
+
+ it('handles dates before 100 AD', () => {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(7, 11 /* Dec */, 31)
+ initialDate.setHours(0, 0, 0, 0)
+ const result = getWeekYear(initialDate)
+ assert(result === 8)
+ })
+
+ it('returns NaN if the given date is invalid', () => {
+ const result = getWeekYear(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in locale', () => {
+ const date = new Date(2004, 11 /* Dec */, 26)
+ const result = getWeekYear(date, {
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 1, firstWeekContainsDate: 4 },
+ },
+ })
+ assert(result === 2004)
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', () => {
+ const date = new Date(2004, 11 /* Dec */, 26)
+ const result = getWeekYear(date, {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 0, firstWeekContainsDate: 1 },
+ },
+ })
+ assert(result === 2004)
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', () => {
+ // @ts-expect-error
+ const block = getWeekYear.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ weekStartsOn: NaN,
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', () => {
+ // @ts-expect-error
+ const block = getWeekYear.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ firstWeekContainsDate: NaN,
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ // @ts-expect-error
+ assert.throws(getWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getWeeksInMonth/index.d.ts b/date-fns/src/getWeeksInMonth/index.d.ts
new file mode 100644
index 0000000..e6ffaaa
--- /dev/null
+++ b/date-fns/src/getWeeksInMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getWeeksInMonth } from 'date-fns'
+export default getWeeksInMonth
diff --git a/date-fns/src/getWeeksInMonth/index.js.flow b/date-fns/src/getWeeksInMonth/index.js.flow
new file mode 100644
index 0000000..1115f28
--- /dev/null
+++ b/date-fns/src/getWeeksInMonth/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => number
diff --git a/date-fns/src/getWeeksInMonth/index.ts b/date-fns/src/getWeeksInMonth/index.ts
new file mode 100644
index 0000000..288ca59
--- /dev/null
+++ b/date-fns/src/getWeeksInMonth/index.ts
@@ -0,0 +1,51 @@
+import differenceInCalendarWeeks from '../differenceInCalendarWeeks/index'
+import lastDayOfMonth from '../lastDayOfMonth/index'
+import startOfMonth from '../startOfMonth/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { LocaleOptions, WeekStartOptions } from '../types'
+
+/**
+ * @name getWeeksInMonth
+ * @category Week Helpers
+ * @summary Get the number of calendar weeks a month spans.
+ *
+ * @description
+ * Get the number of calendar weeks the month in the given date spans.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Number} the number of calendar weeks
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ *
+ * @example
+ * // How many calendar weeks does February 2015 span?
+ * const result = getWeeksInMonth(new Date(2015, 1, 8))
+ * //=> 4
+ *
+ * @example
+ * // If the week starts on Monday,
+ * // how many calendar weeks does July 2017 span?
+ * const result = getWeeksInMonth(new Date(2017, 6, 5), { weekStartsOn: 1 })
+ * //=> 6
+ */
+export default function getWeeksInMonth(
+ date: Date | number,
+ options?: LocaleOptions & WeekStartOptions
+): number {
+ requiredArgs(1, arguments)
+
+ return (
+ differenceInCalendarWeeks(
+ lastDayOfMonth(date),
+ startOfMonth(date),
+ options
+ ) + 1
+ )
+}
diff --git a/date-fns/src/getWeeksInMonth/test.ts b/date-fns/src/getWeeksInMonth/test.ts
new file mode 100644
index 0000000..e8b1db4
--- /dev/null
+++ b/date-fns/src/getWeeksInMonth/test.ts
@@ -0,0 +1,71 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import getWeeksInMonth from '.'
+
+describe('getWeeksInMonth', function() {
+ it('returns the number of calendar weeks the month in the given date spans', function() {
+ const result = getWeeksInMonth(new Date(2015, 1 /* Feb */, 8, 18, 0))
+ assert(result === 4)
+ })
+
+ it('allows to specify which day is the first day of the week', function() {
+ const result = getWeeksInMonth(new Date(2015, 1 /* Feb */, 8, 18, 0), {
+ weekStartsOn: 1
+ })
+ assert(result === 5)
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function() {
+ const result = getWeeksInMonth(new Date(2015, 1 /* Feb */, 8, 18, 0), {
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 1 }
+ }
+ })
+ assert(result === 5)
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ const result = getWeeksInMonth(new Date(2015, 1 /* Feb */, 8, 18, 0), {
+ weekStartsOn: 1,
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 0 }
+ }
+ })
+ assert(result === 5)
+ })
+
+ it('accepts timestamps', function() {
+ const result = getWeeksInMonth(
+ new Date(2017, 3 /* Apr */, 8, 18, 0).getTime()
+ )
+ assert(result === 6)
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ getWeeksInMonth(date)
+ assert.deepStrictEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns NaN if the date is `Invalid Date`', function() {
+ const result = getWeeksInMonth(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ const block = getWeeksInMonth.bind(
+ null,
+ new Date(2014, 6 /* Jul */, 8, 18, 0),
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ // @ts-expect-error
+ assert.throws(getWeeksInMonth.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/getYear/benchmark.js b/date-fns/src/getYear/benchmark.js
new file mode 100644
index 0000000..7ce62a3
--- /dev/null
+++ b/date-fns/src/getYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import getYear from '.'
+import moment from 'moment'
+
+suite('getYear', function () {
+ benchmark('date-fns', function () {
+ return getYear(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.year()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/getYear/index.d.ts b/date-fns/src/getYear/index.d.ts
new file mode 100644
index 0000000..3ef8154
--- /dev/null
+++ b/date-fns/src/getYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { getYear } from 'date-fns'
+export default getYear
diff --git a/date-fns/src/getYear/index.js.flow b/date-fns/src/getYear/index.js.flow
new file mode 100644
index 0000000..07bb012
--- /dev/null
+++ b/date-fns/src/getYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => number
diff --git a/date-fns/src/getYear/index.ts b/date-fns/src/getYear/index.ts
new file mode 100644
index 0000000..7fead17
--- /dev/null
+++ b/date-fns/src/getYear/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name getYear
+ * @category Year Helpers
+ * @summary Get the year of the given date.
+ *
+ * @description
+ * Get the year of the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the given date
+ * @returns {Number} the year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which year is 2 July 2014?
+ * const result = getYear(new Date(2014, 6, 2))
+ * //=> 2014
+ */
+export default function getYear(dirtyDate: Date | number): number {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+ return year
+}
diff --git a/date-fns/src/getYear/test.ts b/date-fns/src/getYear/test.ts
new file mode 100644
index 0000000..77d6fbc
--- /dev/null
+++ b/date-fns/src/getYear/test.ts
@@ -0,0 +1,26 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import getYear from '.'
+
+describe('getYear', function() {
+ it('returns the year of the given date', function() {
+ const result = getYear(new Date(2014, 6 /* Jul */, 2))
+ assert(result === 2014)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = getYear(new Date(2000, 3 /* Apr */, 2).getTime())
+ assert(result === 2000)
+ })
+
+ it('returns NaN if the given date is invalid', function() {
+ const result = getYear(new Date(NaN))
+ assert(isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(getYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/hoursToMilliseconds/index.d.ts b/date-fns/src/hoursToMilliseconds/index.d.ts
new file mode 100644
index 0000000..ed24a0d
--- /dev/null
+++ b/date-fns/src/hoursToMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hoursToMilliseconds } from 'date-fns'
+export default hoursToMilliseconds
diff --git a/date-fns/src/hoursToMilliseconds/index.js.flow b/date-fns/src/hoursToMilliseconds/index.js.flow
new file mode 100644
index 0000000..950ac71
--- /dev/null
+++ b/date-fns/src/hoursToMilliseconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (hours: number) => number
diff --git a/date-fns/src/hoursToMilliseconds/index.ts b/date-fns/src/hoursToMilliseconds/index.ts
new file mode 100644
index 0000000..e87c7a3
--- /dev/null
+++ b/date-fns/src/hoursToMilliseconds/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { millisecondsInHour } from '../constants/index'
+
+/**
+ * @name hoursToMilliseconds
+ * @category Conversion Helpers
+ * @summary Convert hours to milliseconds.
+ *
+ * @description
+ * Convert a number of hours to a full number of milliseconds.
+ *
+ * @param {number} hours - number of hours to be converted
+ *
+ * @returns {number} the number of hours converted to milliseconds
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 hours to milliseconds:
+ * const result = hoursToMilliseconds(2)
+ * //=> 7200000
+ */
+export default function hoursToMilliseconds(hours: number): number {
+ requiredArgs(1, arguments)
+ return Math.floor(hours * millisecondsInHour)
+}
diff --git a/date-fns/src/hoursToMilliseconds/test.ts b/date-fns/src/hoursToMilliseconds/test.ts
new file mode 100644
index 0000000..fdc426c
--- /dev/null
+++ b/date-fns/src/hoursToMilliseconds/test.ts
@@ -0,0 +1,20 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import hoursToMilliseconds from '.'
+
+describe('hoursToMilliseconds', function () {
+ it('converts hours to milliseconds', function () {
+ assert(hoursToMilliseconds(1) === 3600000)
+ assert(hoursToMilliseconds(2) === 7200000)
+ })
+
+ it('uses floor rounding', () => {
+ assert(hoursToMilliseconds(0.123456) === 444441)
+ })
+
+ it('handles border values', () => {
+ assert(hoursToMilliseconds(1.5) === 5400000)
+ assert(hoursToMilliseconds(0) === 0)
+ })
+})
diff --git a/date-fns/src/hoursToMinutes/index.d.ts b/date-fns/src/hoursToMinutes/index.d.ts
new file mode 100644
index 0000000..d0fbbbf
--- /dev/null
+++ b/date-fns/src/hoursToMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hoursToMinutes } from 'date-fns'
+export default hoursToMinutes
diff --git a/date-fns/src/hoursToMinutes/index.js.flow b/date-fns/src/hoursToMinutes/index.js.flow
new file mode 100644
index 0000000..950ac71
--- /dev/null
+++ b/date-fns/src/hoursToMinutes/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (hours: number) => number
diff --git a/date-fns/src/hoursToMinutes/index.ts b/date-fns/src/hoursToMinutes/index.ts
new file mode 100644
index 0000000..dcf61de
--- /dev/null
+++ b/date-fns/src/hoursToMinutes/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { minutesInHour } from '../constants/index'
+
+/**
+ * @name hoursToMinutes
+ * @category Conversion Helpers
+ * @summary Convert hours to minutes.
+ *
+ * @description
+ * Convert a number of hours to a full number of minutes.
+ *
+ * @param {number} hours - number of hours to be converted
+ *
+ * @returns {number} the number of hours converted in minutes
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 hours to minutes:
+ * const result = hoursToMinutes(2)
+ * //=> 120
+ */
+export default function hoursToMinutes(hours: number): number {
+ requiredArgs(1, arguments)
+ return Math.floor(hours * minutesInHour)
+}
diff --git a/date-fns/src/hoursToMinutes/test.ts b/date-fns/src/hoursToMinutes/test.ts
new file mode 100644
index 0000000..ead8b21
--- /dev/null
+++ b/date-fns/src/hoursToMinutes/test.ts
@@ -0,0 +1,20 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import hoursToMinutes from '.'
+
+describe('hoursToMinutes', function () {
+ it('converts hours to minutes', function () {
+ assert(hoursToMinutes(1) === 60)
+ assert(hoursToMinutes(2) === 120)
+ })
+
+ it('uses floor rounding', () => {
+ assert(hoursToMinutes(0.123) === 7)
+ })
+
+ it('handles border values', () => {
+ assert(hoursToMinutes(1.5) === 90)
+ assert(hoursToMinutes(0) === 0)
+ })
+})
diff --git a/date-fns/src/hoursToSeconds/index.d.ts b/date-fns/src/hoursToSeconds/index.d.ts
new file mode 100644
index 0000000..8544afb
--- /dev/null
+++ b/date-fns/src/hoursToSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hoursToSeconds } from 'date-fns'
+export default hoursToSeconds
diff --git a/date-fns/src/hoursToSeconds/index.js.flow b/date-fns/src/hoursToSeconds/index.js.flow
new file mode 100644
index 0000000..950ac71
--- /dev/null
+++ b/date-fns/src/hoursToSeconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (hours: number) => number
diff --git a/date-fns/src/hoursToSeconds/index.ts b/date-fns/src/hoursToSeconds/index.ts
new file mode 100644
index 0000000..3629880
--- /dev/null
+++ b/date-fns/src/hoursToSeconds/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { secondsInHour } from '../constants/index'
+
+/**
+ * @name hoursToSeconds
+ * @category Conversion Helpers
+ * @summary Convert hours to seconds.
+ *
+ * @description
+ * Convert a number of hours to a full number of seconds.
+ *
+ * @param {number} hours - number of hours to be converted
+ *
+ * @returns {number} the number of hours converted in seconds
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 hours to seconds:
+ * const result = hoursToSeconds(2)
+ * //=> 7200
+ */
+export default function hoursToSeconds(hours: number): number {
+ requiredArgs(1, arguments)
+ return Math.floor(hours * secondsInHour)
+}
diff --git a/date-fns/src/hoursToSeconds/test.ts b/date-fns/src/hoursToSeconds/test.ts
new file mode 100644
index 0000000..b2e129b
--- /dev/null
+++ b/date-fns/src/hoursToSeconds/test.ts
@@ -0,0 +1,20 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import hoursToSeconds from '.'
+
+describe('hoursToSeconds', function () {
+ it('converts hours to seconds', function () {
+ assert(hoursToSeconds(1) === 3600)
+ assert(hoursToSeconds(2) === 7200)
+ })
+
+ it('uses floor rounding', () => {
+ assert(hoursToSeconds(0.123) === 442)
+ })
+
+ it('handles border values', () => {
+ assert(hoursToSeconds(1.5) === 5400)
+ assert(hoursToSeconds(0) === 0)
+ })
+})
diff --git a/date-fns/src/index.js b/date-fns/src/index.js
new file mode 100644
index 0000000..45095f8
--- /dev/null
+++ b/date-fns/src/index.js
@@ -0,0 +1,230 @@
+// This file is generated automatically by `scripts/build/indices.js`. Please, don't change it.
+
+export { default as add } from './add/index'
+export { default as addBusinessDays } from './addBusinessDays/index'
+export { default as addDays } from './addDays/index'
+export { default as addHours } from './addHours/index'
+export { default as addISOWeekYears } from './addISOWeekYears/index'
+export { default as addMilliseconds } from './addMilliseconds/index'
+export { default as addMinutes } from './addMinutes/index'
+export { default as addMonths } from './addMonths/index'
+export { default as addQuarters } from './addQuarters/index'
+export { default as addSeconds } from './addSeconds/index'
+export { default as addWeeks } from './addWeeks/index'
+export { default as addYears } from './addYears/index'
+export { default as areIntervalsOverlapping } from './areIntervalsOverlapping/index'
+export { default as closestIndexTo } from './closestIndexTo/index'
+export { default as closestTo } from './closestTo/index'
+export { default as compareAsc } from './compareAsc/index'
+export { default as compareDesc } from './compareDesc/index'
+export { default as daysToWeeks } from './daysToWeeks/index'
+export { default as differenceInBusinessDays } from './differenceInBusinessDays/index'
+export { default as differenceInCalendarDays } from './differenceInCalendarDays/index'
+export { default as differenceInCalendarISOWeekYears } from './differenceInCalendarISOWeekYears/index'
+export { default as differenceInCalendarISOWeeks } from './differenceInCalendarISOWeeks/index'
+export { default as differenceInCalendarMonths } from './differenceInCalendarMonths/index'
+export { default as differenceInCalendarQuarters } from './differenceInCalendarQuarters/index'
+export { default as differenceInCalendarWeeks } from './differenceInCalendarWeeks/index'
+export { default as differenceInCalendarYears } from './differenceInCalendarYears/index'
+export { default as differenceInDays } from './differenceInDays/index'
+export { default as differenceInHours } from './differenceInHours/index'
+export { default as differenceInISOWeekYears } from './differenceInISOWeekYears/index'
+export { default as differenceInMilliseconds } from './differenceInMilliseconds/index'
+export { default as differenceInMinutes } from './differenceInMinutes/index'
+export { default as differenceInMonths } from './differenceInMonths/index'
+export { default as differenceInQuarters } from './differenceInQuarters/index'
+export { default as differenceInSeconds } from './differenceInSeconds/index'
+export { default as differenceInWeeks } from './differenceInWeeks/index'
+export { default as differenceInYears } from './differenceInYears/index'
+export { default as eachDayOfInterval } from './eachDayOfInterval/index'
+export { default as eachHourOfInterval } from './eachHourOfInterval/index'
+export { default as eachMinuteOfInterval } from './eachMinuteOfInterval/index'
+export { default as eachMonthOfInterval } from './eachMonthOfInterval/index'
+export { default as eachQuarterOfInterval } from './eachQuarterOfInterval/index'
+export { default as eachWeekOfInterval } from './eachWeekOfInterval/index'
+export { default as eachWeekendOfInterval } from './eachWeekendOfInterval/index'
+export { default as eachWeekendOfMonth } from './eachWeekendOfMonth/index'
+export { default as eachWeekendOfYear } from './eachWeekendOfYear/index'
+export { default as eachYearOfInterval } from './eachYearOfInterval/index'
+export { default as endOfDay } from './endOfDay/index'
+export { default as endOfDecade } from './endOfDecade/index'
+export { default as endOfHour } from './endOfHour/index'
+export { default as endOfISOWeek } from './endOfISOWeek/index'
+export { default as endOfISOWeekYear } from './endOfISOWeekYear/index'
+export { default as endOfMinute } from './endOfMinute/index'
+export { default as endOfMonth } from './endOfMonth/index'
+export { default as endOfQuarter } from './endOfQuarter/index'
+export { default as endOfSecond } from './endOfSecond/index'
+export { default as endOfToday } from './endOfToday/index'
+export { default as endOfTomorrow } from './endOfTomorrow/index'
+export { default as endOfWeek } from './endOfWeek/index'
+export { default as endOfYear } from './endOfYear/index'
+export { default as endOfYesterday } from './endOfYesterday/index'
+export { default as format } from './format/index'
+export { default as formatDistance } from './formatDistance/index'
+export { default as formatDistanceStrict } from './formatDistanceStrict/index'
+export { default as formatDistanceToNow } from './formatDistanceToNow/index'
+export { default as formatDistanceToNowStrict } from './formatDistanceToNowStrict/index'
+export { default as formatDuration } from './formatDuration/index'
+export { default as formatISO } from './formatISO/index'
+export { default as formatISO9075 } from './formatISO9075/index'
+export { default as formatISODuration } from './formatISODuration/index'
+export { default as formatRFC3339 } from './formatRFC3339/index'
+export { default as formatRFC7231 } from './formatRFC7231/index'
+export { default as formatRelative } from './formatRelative/index'
+export { default as fromUnixTime } from './fromUnixTime/index'
+export { default as getDate } from './getDate/index'
+export { default as getDay } from './getDay/index'
+export { default as getDayOfYear } from './getDayOfYear/index'
+export { default as getDaysInMonth } from './getDaysInMonth/index'
+export { default as getDaysInYear } from './getDaysInYear/index'
+export { default as getDecade } from './getDecade/index'
+export { default as getHours } from './getHours/index'
+export { default as getISODay } from './getISODay/index'
+export { default as getISOWeek } from './getISOWeek/index'
+export { default as getISOWeekYear } from './getISOWeekYear/index'
+export { default as getISOWeeksInYear } from './getISOWeeksInYear/index'
+export { default as getMilliseconds } from './getMilliseconds/index'
+export { default as getMinutes } from './getMinutes/index'
+export { default as getMonth } from './getMonth/index'
+export { default as getOverlappingDaysInIntervals } from './getOverlappingDaysInIntervals/index'
+export { default as getQuarter } from './getQuarter/index'
+export { default as getSeconds } from './getSeconds/index'
+export { default as getTime } from './getTime/index'
+export { default as getUnixTime } from './getUnixTime/index'
+export { default as getWeek } from './getWeek/index'
+export { default as getWeekOfMonth } from './getWeekOfMonth/index'
+export { default as getWeekYear } from './getWeekYear/index'
+export { default as getWeeksInMonth } from './getWeeksInMonth/index'
+export { default as getYear } from './getYear/index'
+export { default as hoursToMilliseconds } from './hoursToMilliseconds/index'
+export { default as hoursToMinutes } from './hoursToMinutes/index'
+export { default as hoursToSeconds } from './hoursToSeconds/index'
+export { default as intervalToDuration } from './intervalToDuration/index'
+export { default as intlFormat } from './intlFormat/index'
+export { default as isAfter } from './isAfter/index'
+export { default as isBefore } from './isBefore/index'
+export { default as isDate } from './isDate/index'
+export { default as isEqual } from './isEqual/index'
+export { default as isExists } from './isExists/index'
+export { default as isFirstDayOfMonth } from './isFirstDayOfMonth/index'
+export { default as isFriday } from './isFriday/index'
+export { default as isFuture } from './isFuture/index'
+export { default as isLastDayOfMonth } from './isLastDayOfMonth/index'
+export { default as isLeapYear } from './isLeapYear/index'
+export { default as isMatch } from './isMatch/index'
+export { default as isMonday } from './isMonday/index'
+export { default as isPast } from './isPast/index'
+export { default as isSameDay } from './isSameDay/index'
+export { default as isSameHour } from './isSameHour/index'
+export { default as isSameISOWeek } from './isSameISOWeek/index'
+export { default as isSameISOWeekYear } from './isSameISOWeekYear/index'
+export { default as isSameMinute } from './isSameMinute/index'
+export { default as isSameMonth } from './isSameMonth/index'
+export { default as isSameQuarter } from './isSameQuarter/index'
+export { default as isSameSecond } from './isSameSecond/index'
+export { default as isSameWeek } from './isSameWeek/index'
+export { default as isSameYear } from './isSameYear/index'
+export { default as isSaturday } from './isSaturday/index'
+export { default as isSunday } from './isSunday/index'
+export { default as isThisHour } from './isThisHour/index'
+export { default as isThisISOWeek } from './isThisISOWeek/index'
+export { default as isThisMinute } from './isThisMinute/index'
+export { default as isThisMonth } from './isThisMonth/index'
+export { default as isThisQuarter } from './isThisQuarter/index'
+export { default as isThisSecond } from './isThisSecond/index'
+export { default as isThisWeek } from './isThisWeek/index'
+export { default as isThisYear } from './isThisYear/index'
+export { default as isThursday } from './isThursday/index'
+export { default as isToday } from './isToday/index'
+export { default as isTomorrow } from './isTomorrow/index'
+export { default as isTuesday } from './isTuesday/index'
+export { default as isValid } from './isValid/index'
+export { default as isWednesday } from './isWednesday/index'
+export { default as isWeekend } from './isWeekend/index'
+export { default as isWithinInterval } from './isWithinInterval/index'
+export { default as isYesterday } from './isYesterday/index'
+export { default as lastDayOfDecade } from './lastDayOfDecade/index'
+export { default as lastDayOfISOWeek } from './lastDayOfISOWeek/index'
+export { default as lastDayOfISOWeekYear } from './lastDayOfISOWeekYear/index'
+export { default as lastDayOfMonth } from './lastDayOfMonth/index'
+export { default as lastDayOfQuarter } from './lastDayOfQuarter/index'
+export { default as lastDayOfWeek } from './lastDayOfWeek/index'
+export { default as lastDayOfYear } from './lastDayOfYear/index'
+export { default as lightFormat } from './lightFormat/index'
+export { default as max } from './max/index'
+export { default as milliseconds } from './milliseconds/index'
+export { default as millisecondsToHours } from './millisecondsToHours/index'
+export { default as millisecondsToMinutes } from './millisecondsToMinutes/index'
+export { default as millisecondsToSeconds } from './millisecondsToSeconds/index'
+export { default as min } from './min/index'
+export { default as minutesToHours } from './minutesToHours/index'
+export { default as minutesToMilliseconds } from './minutesToMilliseconds/index'
+export { default as minutesToSeconds } from './minutesToSeconds/index'
+export { default as monthsToQuarters } from './monthsToQuarters/index'
+export { default as monthsToYears } from './monthsToYears/index'
+export { default as nextDay } from './nextDay/index'
+export { default as nextFriday } from './nextFriday/index'
+export { default as nextMonday } from './nextMonday/index'
+export { default as nextSaturday } from './nextSaturday/index'
+export { default as nextSunday } from './nextSunday/index'
+export { default as nextThursday } from './nextThursday/index'
+export { default as nextTuesday } from './nextTuesday/index'
+export { default as nextWednesday } from './nextWednesday/index'
+export { default as parse } from './parse/index'
+export { default as parseISO } from './parseISO/index'
+export { default as parseJSON } from './parseJSON/index'
+export { default as quartersToMonths } from './quartersToMonths/index'
+export { default as quartersToYears } from './quartersToYears/index'
+export { default as roundToNearestMinutes } from './roundToNearestMinutes/index'
+export { default as secondsToHours } from './secondsToHours/index'
+export { default as secondsToMilliseconds } from './secondsToMilliseconds/index'
+export { default as secondsToMinutes } from './secondsToMinutes/index'
+export { default as set } from './set/index'
+export { default as setDate } from './setDate/index'
+export { default as setDay } from './setDay/index'
+export { default as setDayOfYear } from './setDayOfYear/index'
+export { default as setHours } from './setHours/index'
+export { default as setISODay } from './setISODay/index'
+export { default as setISOWeek } from './setISOWeek/index'
+export { default as setISOWeekYear } from './setISOWeekYear/index'
+export { default as setMilliseconds } from './setMilliseconds/index'
+export { default as setMinutes } from './setMinutes/index'
+export { default as setMonth } from './setMonth/index'
+export { default as setQuarter } from './setQuarter/index'
+export { default as setSeconds } from './setSeconds/index'
+export { default as setWeek } from './setWeek/index'
+export { default as setWeekYear } from './setWeekYear/index'
+export { default as setYear } from './setYear/index'
+export { default as startOfDay } from './startOfDay/index'
+export { default as startOfDecade } from './startOfDecade/index'
+export { default as startOfHour } from './startOfHour/index'
+export { default as startOfISOWeek } from './startOfISOWeek/index'
+export { default as startOfISOWeekYear } from './startOfISOWeekYear/index'
+export { default as startOfMinute } from './startOfMinute/index'
+export { default as startOfMonth } from './startOfMonth/index'
+export { default as startOfQuarter } from './startOfQuarter/index'
+export { default as startOfSecond } from './startOfSecond/index'
+export { default as startOfToday } from './startOfToday/index'
+export { default as startOfTomorrow } from './startOfTomorrow/index'
+export { default as startOfWeek } from './startOfWeek/index'
+export { default as startOfWeekYear } from './startOfWeekYear/index'
+export { default as startOfYear } from './startOfYear/index'
+export { default as startOfYesterday } from './startOfYesterday/index'
+export { default as sub } from './sub/index'
+export { default as subBusinessDays } from './subBusinessDays/index'
+export { default as subDays } from './subDays/index'
+export { default as subHours } from './subHours/index'
+export { default as subISOWeekYears } from './subISOWeekYears/index'
+export { default as subMilliseconds } from './subMilliseconds/index'
+export { default as subMinutes } from './subMinutes/index'
+export { default as subMonths } from './subMonths/index'
+export { default as subQuarters } from './subQuarters/index'
+export { default as subSeconds } from './subSeconds/index'
+export { default as subWeeks } from './subWeeks/index'
+export { default as subYears } from './subYears/index'
+export { default as toDate } from './toDate/index'
+export { default as weeksToDays } from './weeksToDays/index'
+export { default as yearsToMonths } from './yearsToMonths/index'
+export { default as yearsToQuarters } from './yearsToQuarters/index'
+export * from './constants/index'
diff --git a/date-fns/src/index.js.flow b/date-fns/src/index.js.flow
new file mode 100644
index 0000000..46beda9
--- /dev/null
+++ b/date-fns/src/index.js.flow
@@ -0,0 +1,860 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: {
+ add: (date: Date | number, duration: Duration) => Date,
+
+ addBusinessDays: (date: Date | number, amount: number) => Date,
+
+ addDays: (date: Date | number, amount: number) => Date,
+
+ addHours: (date: Date | number, amount: number) => Date,
+
+ addISOWeekYears: (date: Date | number, amount: number) => Date,
+
+ addMilliseconds: (date: Date | number, amount: number) => Date,
+
+ addMinutes: (date: Date | number, amount: number) => Date,
+
+ addMonths: (date: Date | number, amount: number) => Date,
+
+ addQuarters: (date: Date | number, amount: number) => Date,
+
+ addSeconds: (date: Date | number, amount: number) => Date,
+
+ addWeeks: (date: Date | number, amount: number) => Date,
+
+ addYears: (date: Date | number, amount: number) => Date,
+
+ areIntervalsOverlapping: (
+ intervalLeft: Interval,
+ intervalRight: Interval,
+ options?: {
+ inclusive?: boolean,
+ }
+ ) => boolean,
+
+ closestIndexTo: (
+ dateToCompare: Date | number,
+ datesArray: (Date | number)[]
+ ) => number,
+
+ closestTo: (
+ dateToCompare: Date | number,
+ datesArray: (Date | number)[]
+ ) => Date,
+
+ compareAsc: (dateLeft: Date | number, dateRight: Date | number) => number,
+
+ compareDesc: (dateLeft: Date | number, dateRight: Date | number) => number,
+
+ daysToWeeks: (days: number) => number,
+
+ differenceInBusinessDays: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInCalendarDays: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInCalendarISOWeeks: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInCalendarISOWeekYears: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInCalendarMonths: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInCalendarQuarters: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInCalendarWeeks: (
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => number,
+
+ differenceInCalendarYears: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInDays: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInHours: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInISOWeekYears: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInMilliseconds: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInMinutes: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInMonths: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInQuarters: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInSeconds: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInWeeks: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ differenceInYears: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => number,
+
+ eachDayOfInterval: (
+ interval: Interval,
+ options?: {
+ step?: number,
+ }
+ ) => Date[],
+
+ eachHourOfInterval: (
+ interval: Interval,
+ options?: {
+ step?: number,
+ }
+ ) => Date[],
+
+ eachMinuteOfInterval: (
+ interval: Interval,
+ options?: {
+ step?: number,
+ }
+ ) => Date[],
+
+ eachMonthOfInterval: (interval: Interval) => Date[],
+
+ eachQuarterOfInterval: (interval: Interval) => Date[],
+
+ eachWeekendOfInterval: (interval: Interval) => Date[],
+
+ eachWeekendOfMonth: (date: Date | number) => Date[],
+
+ eachWeekendOfYear: (date: Date | number) => Date[],
+
+ eachWeekOfInterval: (
+ interval: Interval,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => Date[],
+
+ eachYearOfInterval: (interval: Interval) => Date[],
+
+ endOfDay: (date: Date | number) => Date,
+
+ endOfDecade: (
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2,
+ }
+ ) => Date,
+
+ endOfHour: (date: Date | number) => Date,
+
+ endOfISOWeek: (date: Date | number) => Date,
+
+ endOfISOWeekYear: (date: Date | number) => Date,
+
+ endOfMinute: (date: Date | number) => Date,
+
+ endOfMonth: (date: Date | number) => Date,
+
+ endOfQuarter: (date: Date | number) => Date,
+
+ endOfSecond: (date: Date | number) => Date,
+
+ endOfToday: () => Date,
+
+ endOfTomorrow: () => Date,
+
+ endOfWeek: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => Date,
+
+ endOfYear: (date: Date | number) => Date,
+
+ endOfYesterday: () => Date,
+
+ format: (
+ date: Date | number,
+ format: string,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: number,
+ useAdditionalWeekYearTokens?: boolean,
+ useAdditionalDayOfYearTokens?: boolean,
+ }
+ ) => string,
+
+ formatDistance: (
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ includeSeconds?: boolean,
+ addSuffix?: boolean,
+ locale?: Locale,
+ }
+ ) => string,
+
+ formatDistanceStrict: (
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ addSuffix?: boolean,
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year',
+ roundingMethod?: 'floor' | 'ceil' | 'round',
+ locale?: Locale,
+ }
+ ) => string,
+
+ formatDistanceToNow: (
+ date: Date | number,
+ options?: {
+ includeSeconds?: boolean,
+ addSuffix?: boolean,
+ locale?: Locale,
+ }
+ ) => string,
+
+ formatDistanceToNowStrict: (
+ date: Date | number,
+ options?: {
+ addSuffix?: boolean,
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year',
+ roundingMethod?: 'floor' | 'ceil' | 'round',
+ locale?: Locale,
+ }
+ ) => string,
+
+ formatDuration: (
+ duration: Duration,
+ options?: {
+ format?: string[],
+ zero?: boolean,
+ delimiter?: string,
+ locale?: Locale,
+ }
+ ) => string,
+
+ formatISO: (
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic',
+ representation?: 'complete' | 'date' | 'time',
+ }
+ ) => string,
+
+ formatISO9075: (
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic',
+ representation?: 'complete' | 'date' | 'time',
+ }
+ ) => string,
+
+ formatISODuration: (duration: Duration) => string,
+
+ formatRelative: (
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => string,
+
+ formatRFC3339: (
+ date: Date | number,
+ options?: {
+ fractionDigits?: 0 | 1 | 2 | 3,
+ }
+ ) => string,
+
+ formatRFC7231: (date: Date | number) => string,
+
+ fromUnixTime: (unixTime: number) => Date,
+
+ getDate: (date: Date | number) => number,
+
+ getDay: (date: Date | number) => 0 | 1 | 2 | 3 | 4 | 5 | 6,
+
+ getDayOfYear: (date: Date | number) => number,
+
+ getDaysInMonth: (date: Date | number) => number,
+
+ getDaysInYear: (date: Date | number) => number,
+
+ getDecade: (date: Date | number) => number,
+
+ getHours: (date: Date | number) => number,
+
+ getISODay: (date: Date | number) => number,
+
+ getISOWeek: (date: Date | number) => number,
+
+ getISOWeeksInYear: (date: Date | number) => number,
+
+ getISOWeekYear: (date: Date | number) => number,
+
+ getMilliseconds: (date: Date | number) => number,
+
+ getMinutes: (date: Date | number) => number,
+
+ getMonth: (date: Date | number) => number,
+
+ getOverlappingDaysInIntervals: (
+ intervalLeft: Interval,
+ intervalRight: Interval
+ ) => number,
+
+ getQuarter: (date: Date | number) => number,
+
+ getSeconds: (date: Date | number) => number,
+
+ getTime: (date: Date | number) => number,
+
+ getUnixTime: (date: Date | number) => number,
+
+ getWeek: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+ ) => number,
+
+ getWeekOfMonth: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => number,
+
+ getWeeksInMonth: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => number,
+
+ getWeekYear: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+ ) => number,
+
+ getYear: (date: Date | number) => number,
+
+ hoursToMilliseconds: (hours: number) => number,
+
+ hoursToMinutes: (hours: number) => number,
+
+ hoursToSeconds: (hours: number) => number,
+
+ intervalToDuration: (interval: Interval) => Duration,
+
+ intlFormat: (
+ argument: Date | number,
+ formatOptions?: {
+ localeMatcher?: 'lookup' | 'best fit',
+ weekday?: 'narrow' | 'short' | 'long',
+ era?: 'narrow' | 'short' | 'long',
+ year?: 'numeric' | '2-digit',
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long',
+ day?: 'numeric' | '2-digit',
+ hour?: 'numeric' | '2-digit',
+ minute?: 'numeric' | '2-digit',
+ second?: 'numeric' | '2-digit',
+ timeZoneName?: 'short' | 'long',
+ formatMatcher?: 'basic' | 'best fit',
+ hour12?: boolean,
+ timeZone?: string,
+ },
+ localeOptions?: {
+ locale?: string | string[],
+ }
+ ) => string,
+
+ isAfter: (date: Date | number, dateToCompare: Date | number) => boolean,
+
+ isBefore: (date: Date | number, dateToCompare: Date | number) => boolean,
+
+ isDate: (value: any) => boolean,
+
+ isEqual: (dateLeft: Date | number, dateRight: Date | number) => boolean,
+
+ isExists: (year: number, month: number, day: number) => boolean,
+
+ isFirstDayOfMonth: (date: Date | number) => boolean,
+
+ isFriday: (date: Date | number) => boolean,
+
+ isFuture: (date: Date | number) => boolean,
+
+ isLastDayOfMonth: (date: Date | number) => boolean,
+
+ isLeapYear: (date: Date | number) => boolean,
+
+ isMatch: (
+ dateString: string,
+ formatString: string,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ useAdditionalWeekYearTokens?: boolean,
+ useAdditionalDayOfYearTokens?: boolean,
+ }
+ ) => boolean,
+
+ isMonday: (date: Date | number) => boolean,
+
+ isPast: (date: Date | number) => boolean,
+
+ isSameDay: (dateLeft: Date | number, dateRight: Date | number) => boolean,
+
+ isSameHour: (dateLeft: Date | number, dateRight: Date | number) => boolean,
+
+ isSameISOWeek: (dateLeft: Date | number, dateRight: Date | number) => boolean,
+
+ isSameISOWeekYear: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ) => boolean,
+
+ isSameMinute: (dateLeft: Date | number, dateRight: Date | number) => boolean,
+
+ isSameMonth: (dateLeft: Date | number, dateRight: Date | number) => boolean,
+
+ isSameQuarter: (dateLeft: Date | number, dateRight: Date | number) => boolean,
+
+ isSameSecond: (dateLeft: Date | number, dateRight: Date | number) => boolean,
+
+ isSameWeek: (
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => boolean,
+
+ isSameYear: (dateLeft: Date | number, dateRight: Date | number) => boolean,
+
+ isSaturday: (date: Date | number) => boolean,
+
+ isSunday: (date: Date | number) => boolean,
+
+ isThisHour: (date: Date | number) => boolean,
+
+ isThisISOWeek: (date: Date | number) => boolean,
+
+ isThisMinute: (date: Date | number) => boolean,
+
+ isThisMonth: (date: Date | number) => boolean,
+
+ isThisQuarter: (date: Date | number) => boolean,
+
+ isThisSecond: (date: Date | number) => boolean,
+
+ isThisWeek: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => boolean,
+
+ isThisYear: (date: Date | number) => boolean,
+
+ isThursday: (date: Date | number) => boolean,
+
+ isToday: (date: Date | number) => boolean,
+
+ isTomorrow: (date: Date | number) => boolean,
+
+ isTuesday: (date: Date | number) => boolean,
+
+ isValid: (date: any) => boolean,
+
+ isWednesday: (date: Date | number) => boolean,
+
+ isWeekend: (date: Date | number) => boolean,
+
+ isWithinInterval: (date: Date | number, interval: Interval) => boolean,
+
+ isYesterday: (date: Date | number) => boolean,
+
+ lastDayOfDecade: (date: Date | number) => Date,
+
+ lastDayOfISOWeek: (date: Date | number) => Date,
+
+ lastDayOfISOWeekYear: (date: Date | number) => Date,
+
+ lastDayOfMonth: (date: Date | number) => Date,
+
+ lastDayOfQuarter: (
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2,
+ }
+ ) => Date,
+
+ lastDayOfWeek: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => Date,
+
+ lastDayOfYear: (date: Date | number) => Date,
+
+ lightFormat: (date: Date | number, format: string) => string,
+
+ max: (datesArray: (Date | number)[]) => Date,
+
+ milliseconds: (duration: Duration) => number,
+
+ millisecondsToHours: (milliseconds: number) => number,
+
+ millisecondsToMinutes: (milliseconds: number) => number,
+
+ millisecondsToSeconds: (milliseconds: number) => number,
+
+ min: (datesArray: (Date | number)[]) => Date,
+
+ minutesToHours: (minutes: number) => number,
+
+ minutesToMilliseconds: (minutes: number) => number,
+
+ minutesToSeconds: (minutes: number) => number,
+
+ monthsToQuarters: (months: number) => number,
+
+ monthsToYears: (months: number) => number,
+
+ nextDay: (date: Date | number, day: Day) => Date,
+
+ nextFriday: (date: Date | number) => Date,
+
+ nextMonday: (date: Date | number) => Date,
+
+ nextSaturday: (date: Date | number) => Date,
+
+ nextSunday: (date: Date | number) => Date,
+
+ nextThursday: (date: Date | number) => Date,
+
+ nextTuesday: (date: Date | number) => Date,
+
+ nextWednesday: (date: Date | number) => Date,
+
+ parse: (
+ dateString: string,
+ formatString: string,
+ referenceDate: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ useAdditionalWeekYearTokens?: boolean,
+ useAdditionalDayOfYearTokens?: boolean,
+ }
+ ) => Date,
+
+ parseISO: (
+ argument: string,
+ options?: {
+ additionalDigits?: 0 | 1 | 2,
+ }
+ ) => Date,
+
+ parseJSON: (argument: string | number | Date) => Date,
+
+ quartersToMonths: (quarters: number) => number,
+
+ quartersToYears: (quarters: number) => number,
+
+ roundToNearestMinutes: (
+ date: Date | number,
+ options?: {
+ nearestTo?: number,
+ }
+ ) => Date,
+
+ secondsToHours: (seconds: number) => number,
+
+ secondsToMilliseconds: (seconds: number) => number,
+
+ secondsToMinutes: (seconds: number) => number,
+
+ set: (
+ date: Date | number,
+ values: {
+ year?: number,
+ month?: number,
+ date?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+ milliseconds?: number,
+ }
+ ) => Date,
+
+ setDate: (date: Date | number, dayOfMonth: number) => Date,
+
+ setDay: (
+ date: Date | number,
+ day: number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => Date,
+
+ setDayOfYear: (date: Date | number, dayOfYear: number) => Date,
+
+ setHours: (date: Date | number, hours: number) => Date,
+
+ setISODay: (date: Date | number, day: number) => Date,
+
+ setISOWeek: (date: Date | number, isoWeek: number) => Date,
+
+ setISOWeekYear: (date: Date | number, isoWeekYear: number) => Date,
+
+ setMilliseconds: (date: Date | number, milliseconds: number) => Date,
+
+ setMinutes: (date: Date | number, minutes: number) => Date,
+
+ setMonth: (date: Date | number, month: number) => Date,
+
+ setQuarter: (date: Date | number, quarter: number) => Date,
+
+ setSeconds: (date: Date | number, seconds: number) => Date,
+
+ setWeek: (
+ date: Date | number,
+ week: number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+ ) => Date,
+
+ setWeekYear: (
+ date: Date | number,
+ weekYear: number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+ ) => Date,
+
+ setYear: (date: Date | number, year: number) => Date,
+
+ startOfDay: (date: Date | number) => Date,
+
+ startOfDecade: (date: Date | number) => Date,
+
+ startOfHour: (date: Date | number) => Date,
+
+ startOfISOWeek: (date: Date | number) => Date,
+
+ startOfISOWeekYear: (date: Date | number) => Date,
+
+ startOfMinute: (date: Date | number) => Date,
+
+ startOfMonth: (date: Date | number) => Date,
+
+ startOfQuarter: (date: Date | number) => Date,
+
+ startOfSecond: (date: Date | number) => Date,
+
+ startOfToday: () => Date,
+
+ startOfTomorrow: () => Date,
+
+ startOfWeek: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+ ) => Date,
+
+ startOfWeekYear: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+ ) => Date,
+
+ startOfYear: (date: Date | number) => Date,
+
+ startOfYesterday: () => Date,
+
+ sub: (date: Date | number, duration: Duration) => Date,
+
+ subBusinessDays: (date: Date | number, amount: number) => Date,
+
+ subDays: (date: Date | number, amount: number) => Date,
+
+ subHours: (date: Date | number, amount: number) => Date,
+
+ subISOWeekYears: (date: Date | number, amount: number) => Date,
+
+ subMilliseconds: (date: Date | number, amount: number) => Date,
+
+ subMinutes: (date: Date | number, amount: number) => Date,
+
+ subMonths: (date: Date | number, amount: number) => Date,
+
+ subQuarters: (date: Date | number, amount: number) => Date,
+
+ subSeconds: (date: Date | number, amount: number) => Date,
+
+ subWeeks: (date: Date | number, amount: number) => Date,
+
+ subYears: (date: Date | number, amount: number) => Date,
+
+ toDate: (argument: Date | number) => Date,
+
+ weeksToDays: (weeks: number) => number,
+
+ yearsToMonths: (years: number) => number,
+
+ yearsToQuarters: (years: number) => number,
+
+ daysInWeek: number,
+
+ maxTime: number,
+
+ millisecondsInMinute: number,
+
+ millisecondsInHour: number,
+
+ millisecondsInSecond: number,
+
+ minTime: number,
+
+ minutesInHour: number,
+
+ monthsInQuarter: number,
+
+ monthsInYear: number,
+
+ quartersInYear: number,
+
+ secondsInHour: number,
+
+ secondsInMinute: number,
+}
diff --git a/date-fns/src/intervalToDuration/index.d.ts b/date-fns/src/intervalToDuration/index.d.ts
new file mode 100644
index 0000000..ce7bc76
--- /dev/null
+++ b/date-fns/src/intervalToDuration/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { intervalToDuration } from 'date-fns'
+export default intervalToDuration
diff --git a/date-fns/src/intervalToDuration/index.js.flow b/date-fns/src/intervalToDuration/index.js.flow
new file mode 100644
index 0000000..dbd61ee
--- /dev/null
+++ b/date-fns/src/intervalToDuration/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (interval: Interval) => Duration
diff --git a/date-fns/src/intervalToDuration/index.ts b/date-fns/src/intervalToDuration/index.ts
new file mode 100644
index 0000000..e2143aa
--- /dev/null
+++ b/date-fns/src/intervalToDuration/index.ts
@@ -0,0 +1,81 @@
+import compareAsc from '../compareAsc/index'
+import differenceInYears from '../differenceInYears/index'
+import differenceInMonths from '../differenceInMonths/index'
+import differenceInDays from '../differenceInDays/index'
+import differenceInHours from '../differenceInHours/index'
+import differenceInMinutes from '../differenceInMinutes/index'
+import differenceInSeconds from '../differenceInSeconds/index'
+import isValid from '../isValid/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import toDate from '../toDate/index'
+import sub from '../sub/index'
+
+/**
+ * @name intervalToDuration
+ * @category Common Helpers
+ * @summary Convert interval to duration
+ *
+ * @description
+ * Convert a interval object to a duration object.
+ *
+ * @param {Interval} interval - the interval to convert to duration
+ *
+ * @returns {Duration} The duration Object
+ * @throws {TypeError} Requires 2 arguments
+ * @throws {RangeError} `start` must not be Invalid Date
+ * @throws {RangeError} `end` must not be Invalid Date
+ *
+ * @example
+ * // Get the duration between January 15, 1929 and April 4, 1968.
+ * intervalToDuration({
+ * start: new Date(1929, 0, 15, 12, 0, 0),
+ * end: new Date(1968, 3, 4, 19, 5, 0)
+ * })
+ * // => { years: 39, months: 2, days: 20, hours: 7, minutes: 5, seconds: 0 }
+ */
+
+export default function intervalToDuration({ start, end }: Interval): Duration {
+ requiredArgs(1, arguments)
+
+ const dateLeft = toDate(start)
+ const dateRight = toDate(end)
+
+ if (!isValid(dateLeft)) {
+ throw new RangeError('Start Date is invalid')
+ }
+ if (!isValid(dateRight)) {
+ throw new RangeError('End Date is invalid')
+ }
+
+ const duration = {
+ years: 0,
+ months: 0,
+ days: 0,
+ hours: 0,
+ minutes: 0,
+ seconds: 0,
+ }
+
+ const sign = compareAsc(dateLeft, dateRight)
+
+ duration.years = Math.abs(differenceInYears(dateLeft, dateRight))
+
+ const remainingMonths = sub(dateLeft, { years: sign * duration.years })
+ duration.months = Math.abs(differenceInMonths(remainingMonths, dateRight))
+
+ const remainingDays = sub(remainingMonths, { months: sign * duration.months })
+ duration.days = Math.abs(differenceInDays(remainingDays, dateRight))
+
+ const remainingHours = sub(remainingDays, { days: sign * duration.days })
+ duration.hours = Math.abs(differenceInHours(remainingHours, dateRight))
+
+ const remainingMinutes = sub(remainingHours, { hours: sign * duration.hours })
+ duration.minutes = Math.abs(differenceInMinutes(remainingMinutes, dateRight))
+
+ const remainingSeconds = sub(remainingMinutes, {
+ minutes: sign * duration.minutes,
+ })
+ duration.seconds = Math.abs(differenceInSeconds(remainingSeconds, dateRight))
+
+ return duration
+}
diff --git a/date-fns/src/intervalToDuration/test.ts b/date-fns/src/intervalToDuration/test.ts
new file mode 100644
index 0000000..04f250b
--- /dev/null
+++ b/date-fns/src/intervalToDuration/test.ts
@@ -0,0 +1,116 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import intervalToDuration from '.'
+
+describe('intervalToDuration', function () {
+ it('returns correct duration for arbitrary dates', function () {
+ const start = new Date(1929, 0, 15, 12, 0, 0)
+ const end = new Date(1968, 3, 4, 19, 5, 0)
+ const result = intervalToDuration({ start, end })
+
+ assert.deepEqual(result, {
+ years: 39,
+ months: 2,
+ days: 20,
+ hours: 7,
+ minutes: 5,
+ seconds: 0,
+ })
+ })
+
+ it('returns correct duration (1 of everything)', function () {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2021, 3, 2, 13, 1, 1)
+ const result = intervalToDuration({ start, end })
+
+ assert.deepEqual(result, {
+ years: 1,
+ months: 1,
+ days: 1,
+ hours: 1,
+ minutes: 1,
+ seconds: 1,
+ })
+ })
+
+ it('returns duration of 0 when the dates are the same', function () {
+ const start = new Date(2020, 2, 1, 12, 0, 0)
+ const end = new Date(2020, 2, 1, 12, 0, 0)
+ const result = intervalToDuration({ start, end })
+
+ assert.deepEqual(result, {
+ years: 0,
+ months: 0,
+ days: 0,
+ hours: 0,
+ minutes: 0,
+ seconds: 0,
+ })
+ })
+
+ describe('edge cases', function () {
+ it('returns correct duration for dates in the end of Feb - issue 2255', function () {
+ assert.deepEqual(
+ intervalToDuration({
+ start: new Date(2012, 1 /* Feb */, 28, 9, 0, 0),
+ end: new Date(2012, 1 /* Feb */, 29, 10, 0, 0),
+ }),
+ {
+ years: 0,
+ months: 0,
+ days: 1,
+ hours: 1,
+ minutes: 0,
+ seconds: 0,
+ }
+ )
+
+ assert.deepEqual(
+ intervalToDuration({
+ start: new Date(2012, 1 /* Feb */, 29, 9, 0, 0),
+ end: new Date(2012, 1 /* Feb */, 29, 10, 0, 0),
+ }),
+ {
+ years: 0,
+ months: 0,
+ days: 0,
+ hours: 1,
+ minutes: 0,
+ seconds: 0,
+ }
+ )
+
+ assert.deepEqual(
+ intervalToDuration({
+ start: new Date(2012, 1 /* Feb */, 28, 9, 0, 0),
+ end: new Date(2012, 1 /* Feb */, 28, 10, 0, 0),
+ }),
+ {
+ years: 0,
+ months: 0,
+ days: 0,
+ hours: 1,
+ minutes: 0,
+ seconds: 0,
+ }
+ )
+
+ // Issue 2261
+ assert.deepEqual(
+ intervalToDuration({
+ start: new Date(2021, 1 /* Feb */, 28, 7, 23, 7),
+ end: new Date(2021, 1 /* Feb */, 28, 7, 38, 18),
+ }),
+ {
+ years: 0,
+ months: 0,
+ days: 0,
+ hours: 0,
+ minutes: 15,
+ seconds: 11,
+ }
+ )
+ })
+ })
+})
diff --git a/date-fns/src/intlFormat/index.d.ts b/date-fns/src/intlFormat/index.d.ts
new file mode 100644
index 0000000..fc29cf5
--- /dev/null
+++ b/date-fns/src/intlFormat/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { intlFormat } from 'date-fns'
+export default intlFormat
diff --git a/date-fns/src/intlFormat/index.js.flow b/date-fns/src/intlFormat/index.js.flow
new file mode 100644
index 0000000..adc0bb4
--- /dev/null
+++ b/date-fns/src/intlFormat/index.js.flow
@@ -0,0 +1,72 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ argument: Date | number,
+ formatOptions?: {
+ localeMatcher?: 'lookup' | 'best fit',
+ weekday?: 'narrow' | 'short' | 'long',
+ era?: 'narrow' | 'short' | 'long',
+ year?: 'numeric' | '2-digit',
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long',
+ day?: 'numeric' | '2-digit',
+ hour?: 'numeric' | '2-digit',
+ minute?: 'numeric' | '2-digit',
+ second?: 'numeric' | '2-digit',
+ timeZoneName?: 'short' | 'long',
+ formatMatcher?: 'basic' | 'best fit',
+ hour12?: boolean,
+ timeZone?: string,
+ },
+ localeOptions?: {
+ locale?: string | string[],
+ }
+) => string
diff --git a/date-fns/src/intlFormat/index.ts b/date-fns/src/intlFormat/index.ts
new file mode 100644
index 0000000..908a23b
--- /dev/null
+++ b/date-fns/src/intlFormat/index.ts
@@ -0,0 +1,116 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+
+type Locale = Intl.ResolvedDateTimeFormatOptions['locale']
+type FormatOptions = Intl.DateTimeFormatOptions
+type LocaleOptions = { locale: Locale | Locale[] }
+
+export default function intlFormat(date: Date): string
+export default function intlFormat(
+ date: Date,
+ localeOptions: LocaleOptions
+): string
+export default function intlFormat(
+ date: Date,
+ formatOptions: FormatOptions
+): string
+export default function intlFormat(
+ date: Date,
+ formatOptions: FormatOptions,
+ localeOptions: LocaleOptions
+): string
+
+/**
+ * @name intlFormat
+ * @category Common Helpers
+ * @summary Format the date with Intl.DateTimeFormat (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat).
+ *
+ * @description
+ * Return the formatted date string in the given format.
+ * The method uses [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) inside.
+ * formatOptions are the same as [`Intl.DateTimeFormat` options](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#using_options)
+ *
+ * > ⚠️ Please note that before Node version 13.0.0, only the locale data for en-US is available by default.
+ *
+ * @param {Date|Number} argument - the original date.
+ * @param {Object} [formatOptions] - an object with options.
+ * @param {'lookup'|'best fit'} [formatOptions.localeMatcher='best fit'] - locale selection algorithm.
+ * @param {'narrow'|'short'|'long'} [formatOptions.weekday] - representation the days of the week.
+ * @param {'narrow'|'short'|'long'} [formatOptions.era] - representation of eras.
+ * @param {'numeric'|'2-digit'} [formatOptions.year] - representation of years.
+ * @param {'numeric'|'2-digit'|'narrow'|'short'|'long'} [formatOptions.month='numeric'] - representation of month.
+ * @param {'numeric'|'2-digit'} [formatOptions.day='numeric'] - representation of day.
+ * @param {'numeric'|'2-digit'} [formatOptions.hour='numeric'] - representation of hours.
+ * @param {'numeric'|'2-digit'} [formatOptions.minute] - representation of minutes.
+ * @param {'numeric'|'2-digit'} [formatOptions.second] - representation of seconds.
+ * @param {'short'|'long'} [formatOptions.timeZoneName] - representation of names of time zones.
+ * @param {'basic'|'best fit'} [formatOptions.formatMatcher='best fit'] - format selection algorithm.
+ * @param {Boolean} [formatOptions.hour12] - determines whether to use 12-hour time format.
+ * @param {String} [formatOptions.timeZone] - the time zone to use.
+ * @param {Object} [localeOptions] - an object with locale.
+ * @param {String|String[]} [localeOptions.locale] - the locale code
+ * @returns {String} the formatted date string.
+ * @throws {TypeError} 1 argument required.
+ * @throws {RangeError} `date` must not be Invalid Date
+ *
+ * @example
+ * // Represent 10 October 2019 in German.
+ * // Convert the date with format's options and locale's options.
+ * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), {
+ * weekday: 'long',
+ * year: 'numeric',
+ * month: 'long',
+ * day: 'numeric',
+ * }, {
+ * locale: 'de-DE',
+ * })
+ * //=> Freitag, 4. Oktober 2019
+ *
+ * @example
+ * // Represent 10 October 2019.
+ * // Convert the date with format's options.
+ * const result = intlFormat.default(new Date(2019, 9, 4, 12, 30, 13, 456), {
+ * year: 'numeric',
+ * month: 'numeric',
+ * day: 'numeric',
+ * hour: 'numeric',
+ * })
+ * //=> 10/4/2019, 12 PM
+ *
+ * @example
+ * // Represent 10 October 2019 in Korean.
+ * // Convert the date with locale's options.
+ * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), {
+ * locale: 'ko-KR',
+ * })
+ * //=> 2019. 10. 4.
+ *
+ * @example
+ * // Represent 10 October 2019 in middle-endian format:
+ * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456))
+ * //=> 10/4/2019
+ */
+export default function intlFormat(
+ date: Date,
+ formatOrLocale?: FormatOptions | LocaleOptions,
+ localeOptions?: LocaleOptions
+): string {
+ requiredArgs(1, arguments)
+
+ let formatOptions: FormatOptions | undefined
+
+ if (isFormatOptions(formatOrLocale)) {
+ formatOptions = formatOrLocale
+ } else {
+ localeOptions = formatOrLocale
+ }
+
+ return new Intl.DateTimeFormat(localeOptions?.locale, formatOptions).format(
+ date
+ )
+}
+
+function isFormatOptions(
+ opts: LocaleOptions | FormatOptions | undefined
+): opts is FormatOptions {
+ return opts !== undefined && !('locale' in opts)
+}
diff --git a/date-fns/src/intlFormat/test.ts b/date-fns/src/intlFormat/test.ts
new file mode 100644
index 0000000..1c7c5f8
--- /dev/null
+++ b/date-fns/src/intlFormat/test.ts
@@ -0,0 +1,111 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import intlFormat from '.'
+
+// Before Node version 13.0.0, only the locale data for en-US is available by default.
+const hasFullICU = () => {
+ try {
+ const january = new Date(9e8)
+ const spanish = new Intl.DateTimeFormat('es', { month: 'long' })
+ return spanish.format(january) === 'enero'
+ } catch (err) {
+ return false
+ }
+}
+
+const fullICUOnly = hasFullICU() ? it : it.skip
+
+const getOperationSystemLocale = () => {
+ if (typeof process !== 'undefined') {
+ const ENV = process.env
+ const language = ENV.LC_ALL || ENV.LC_MESSAGES || ENV.LANG || ENV.LANGUAGE
+ return language?.split('.')[0].replace('_', '-')
+ } else {
+ return (
+ // @ts-expect-error
+ window.navigator.userLanguage ||
+ window.navigator.language ||
+ (window.navigator.languages || [])[0]
+ )
+ }
+}
+
+describe('intlFormat', () => {
+ describe('formats date', function () {
+ fullICUOnly(
+ "should work without format's options and locale's options",
+ function () {
+ const date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ const result = intlFormat(date)
+ const localeResult = intlFormat(date, {
+ locale: getOperationSystemLocale(),
+ })
+
+ assert(result === localeResult)
+ }
+ )
+
+ fullICUOnly("should work with only format's options", function () {
+ const date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ const formatOptions = {
+ year: 'numeric',
+ month: 'numeric',
+ day: 'numeric',
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ hour12: false,
+ timeZone: 'America/Los_Angeles',
+ }
+
+ const result = intlFormat(date, formatOptions)
+ const localeResult = intlFormat(date, formatOptions, {
+ locale: getOperationSystemLocale(),
+ })
+
+ assert(result === localeResult)
+ })
+
+ fullICUOnly("should work with only locale's options", function () {
+ const date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ // Korean uses year-month-day order
+ const localeOptions = {
+ locale: 'ko-KR',
+ }
+
+ const result = intlFormat(date, localeOptions)
+
+ assert(result === '2019. 10. 4.')
+ })
+
+ fullICUOnly(
+ "should work with format's options and locale's options",
+ function () {
+ const date = new Date(2019, 9 /* Oct */, 4, 12, 30, 13, 456)
+ const formatOptions = {
+ weekday: 'long',
+ year: 'numeric',
+ month: 'long',
+ day: 'numeric',
+ }
+ const localeOptions = {
+ locale: 'de-DE',
+ }
+
+ const result = intlFormat(date, formatOptions, localeOptions)
+
+ assert(result === 'Freitag, 4. Oktober 2019')
+ }
+ )
+ })
+
+ it('throws RangeError if the date value is invalid', () => {
+ assert.throws(intlFormat.bind(null, new Date(NaN)), RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ assert.throws(intlFormat.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isAfter/benchmark.js b/date-fns/src/isAfter/benchmark.js
new file mode 100644
index 0000000..6a9cbc0
--- /dev/null
+++ b/date-fns/src/isAfter/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isAfter from '.'
+import moment from 'moment'
+
+suite('isAfter', function () {
+ benchmark('date-fns', function () {
+ return isAfter(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isAfter(this.momentB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isAfter/index.d.ts b/date-fns/src/isAfter/index.d.ts
new file mode 100644
index 0000000..0ef024b
--- /dev/null
+++ b/date-fns/src/isAfter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isAfter } from 'date-fns'
+export default isAfter
diff --git a/date-fns/src/isAfter/index.js.flow b/date-fns/src/isAfter/index.js.flow
new file mode 100644
index 0000000..3cb525c
--- /dev/null
+++ b/date-fns/src/isAfter/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ dateToCompare: Date | number
+) => boolean
diff --git a/date-fns/src/isAfter/index.ts b/date-fns/src/isAfter/index.ts
new file mode 100644
index 0000000..b236d91
--- /dev/null
+++ b/date-fns/src/isAfter/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isAfter
+ * @category Common Helpers
+ * @summary Is the first date after the second one?
+ *
+ * @description
+ * Is the first date after the second one?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date that should be after the other one to return true
+ * @param {Date|Number} dateToCompare - the date to compare with
+ * @returns {Boolean} the first date is after the second date
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Is 10 July 1989 after 11 February 1987?
+ * var result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))
+ * //=> true
+ */
+export default function isAfter(dirtyDate: Date | number, dirtyDateToCompare: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const dateToCompare = toDate(dirtyDateToCompare)
+ return date.getTime() > dateToCompare.getTime()
+}
diff --git a/date-fns/src/isAfter/test.ts b/date-fns/src/isAfter/test.ts
new file mode 100644
index 0000000..ca1c99a
--- /dev/null
+++ b/date-fns/src/isAfter/test.ts
@@ -0,0 +1,59 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isAfter from '.'
+
+describe('isAfter', function() {
+ it('returns true if the first date is after the second one', function() {
+ const result = isAfter(
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is before the second one', function() {
+ const result = isAfter(
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === false)
+ })
+
+ it('returns false if the first date is equal to the second one', function() {
+ const result = isAfter(
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isAfter(
+ new Date(1989, 6 /* Jul */, 10).getTime(),
+ new Date(1987, 1 /* Feb */, 11).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isAfter(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isAfter(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isAfter(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isAfter.bind(null), TypeError)
+ assert.throws(isAfter.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isBefore/benchmark.js b/date-fns/src/isBefore/benchmark.js
new file mode 100644
index 0000000..d70f2e8
--- /dev/null
+++ b/date-fns/src/isBefore/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isBefore from '.'
+import moment from 'moment'
+
+suite('isBefore', function () {
+ benchmark('date-fns', function () {
+ return isBefore(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isBefore(this.momentB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isBefore/index.d.ts b/date-fns/src/isBefore/index.d.ts
new file mode 100644
index 0000000..127ed7e
--- /dev/null
+++ b/date-fns/src/isBefore/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isBefore } from 'date-fns'
+export default isBefore
diff --git a/date-fns/src/isBefore/index.js.flow b/date-fns/src/isBefore/index.js.flow
new file mode 100644
index 0000000..3cb525c
--- /dev/null
+++ b/date-fns/src/isBefore/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ dateToCompare: Date | number
+) => boolean
diff --git a/date-fns/src/isBefore/index.ts b/date-fns/src/isBefore/index.ts
new file mode 100644
index 0000000..344b887
--- /dev/null
+++ b/date-fns/src/isBefore/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isBefore
+ * @category Common Helpers
+ * @summary Is the first date before the second one?
+ *
+ * @description
+ * Is the first date before the second one?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date that should be before the other one to return true
+ * @param {Date|Number} dateToCompare - the date to compare with
+ * @returns {Boolean} the first date is before the second date
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Is 10 July 1989 before 11 February 1987?
+ * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))
+ * //=> false
+ */
+export default function isBefore(dirtyDate: Date | number, dirtyDateToCompare: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const dateToCompare = toDate(dirtyDateToCompare)
+ return date.getTime() < dateToCompare.getTime()
+}
diff --git a/date-fns/src/isBefore/test.ts b/date-fns/src/isBefore/test.ts
new file mode 100644
index 0000000..c4d0084
--- /dev/null
+++ b/date-fns/src/isBefore/test.ts
@@ -0,0 +1,59 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isBefore from '.'
+
+describe('isBefore', function() {
+ it('returns true if the first date is before the second one', function() {
+ const result = isBefore(
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is after the second one', function() {
+ const result = isBefore(
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === false)
+ })
+
+ it('returns false if the first date is equal to the second one', function() {
+ const result = isBefore(
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isBefore(
+ new Date(1987, 1 /* Feb */, 11).getTime(),
+ new Date(1989, 6 /* Jul */, 10).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isBefore(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isBefore(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isBefore(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isBefore.bind(null), TypeError)
+ assert.throws(isBefore.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isDate/index.d.ts b/date-fns/src/isDate/index.d.ts
new file mode 100644
index 0000000..518477e
--- /dev/null
+++ b/date-fns/src/isDate/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isDate } from 'date-fns'
+export default isDate
diff --git a/date-fns/src/isDate/index.js.flow b/date-fns/src/isDate/index.js.flow
new file mode 100644
index 0000000..cc97d41
--- /dev/null
+++ b/date-fns/src/isDate/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (value: any) => boolean
diff --git a/date-fns/src/isDate/index.ts b/date-fns/src/isDate/index.ts
new file mode 100644
index 0000000..450e008
--- /dev/null
+++ b/date-fns/src/isDate/index.ts
@@ -0,0 +1,47 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isDate
+ * @category Common Helpers
+ * @summary Is the given value a date?
+ *
+ * @description
+ * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {*} value - the value to check
+ * @returns {boolean} true if the given value is a date
+ * @throws {TypeError} 1 arguments required
+ *
+ * @example
+ * // For a valid date:
+ * const result = isDate(new Date())
+ * //=> true
+ *
+ * @example
+ * // For an invalid date:
+ * const result = isDate(new Date(NaN))
+ * //=> true
+ *
+ * @example
+ * // For some value:
+ * const result = isDate('2014-02-31')
+ * //=> false
+ *
+ * @example
+ * // For an object:
+ * const result = isDate({})
+ * //=> false
+ */
+export default function isDate(value: unknown): value is Date {
+ requiredArgs(1, arguments)
+
+ return (
+ value instanceof Date ||
+ (typeof value === 'object' &&
+ Object.prototype.toString.call(value) === '[object Date]')
+ )
+}
diff --git a/date-fns/src/isDate/test.ts b/date-fns/src/isDate/test.ts
new file mode 100644
index 0000000..7d87789
--- /dev/null
+++ b/date-fns/src/isDate/test.ts
@@ -0,0 +1,81 @@
+// @flow
+/* eslint-env mocha */
+/* global HTMLIFrameElement */
+
+import assert from 'assert'
+import { assertType } from '../_lib/test'
+import isDate from '.'
+
+describe('isDate', () => {
+ it('returns true if the given value is a date object', () => {
+ assert(isDate(new Date()))
+ })
+
+ it('returns true if the given value is an Invalid Date', () => {
+ assert(isDate(new Date(NaN)))
+ })
+
+ it('ensures that the passed argument is an instance of Date', () => {
+ const date: unknown = new Date()
+
+ if (isDate(date)) {
+ assertType<Date>(date)
+ } else {
+ assertType<unknown>(date)
+ }
+ })
+
+ describe('with date passed from another iframe', () => {
+ afterEach(() => {
+ const iframe = document.getElementById('iframe')
+ iframe && iframe.remove()
+ })
+
+ // Emulate web browser
+ if (!process.env.JEST_WORKER_ID) {
+ it('returns true for a date passed from another iframe', (done) => {
+ const iframe = document.createElement('iframe')
+ iframe.id = 'iframe'
+ iframe.addEventListener('load', () => {
+ execScript('window.date = new Date()') // eslint-disable-line no-implied-eval
+ // @ts-expect-error
+ assert(isDate(iframe.contentWindow.date))
+ // $ExpectedMistake sadly, but Flow doesn't know about Mocha's done
+ done()
+ })
+ if (!document.body) throw new Error('document.body is not defined')
+ document.body.appendChild(iframe)
+ })
+ }
+
+ function execScript(scriptText: string) {
+ const iframe = document.querySelector('iframe#iframe')
+ if (!iframe || !(iframe instanceof HTMLIFrameElement)) {
+ throw new Error("Can't execute the script because iframe isn't found")
+ }
+ const doc = iframe.contentDocument!
+ const script = doc.createElement('script')
+ script.innerText = scriptText
+ // @ts-expect-error
+ if (!(doc.body instanceof iframe.contentWindow.HTMLBodyElement)) {
+ throw new Error(
+ "Can't execute the script because iframe does not have body"
+ )
+ }
+ doc.body.append(script)
+ }
+ })
+
+ it('returns false if the given value is not a date object', () => {
+ assert(!isDate(new Date().getTime()))
+ assert(!isDate(new Date().toISOString()))
+ assert(!isDate({}))
+ assert(!isDate(null))
+ assert(!isDate(0))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ // @ts-expect-error
+ assert.throws(isDate.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isEqual/benchmark.js b/date-fns/src/isEqual/benchmark.js
new file mode 100644
index 0000000..c2276b6
--- /dev/null
+++ b/date-fns/src/isEqual/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isEqual from '.'
+import moment from 'moment'
+
+suite('isEqual', function () {
+ benchmark('date-fns', function () {
+ return isEqual(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isSame(this.momentB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isEqual/index.d.ts b/date-fns/src/isEqual/index.d.ts
new file mode 100644
index 0000000..87865db
--- /dev/null
+++ b/date-fns/src/isEqual/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isEqual } from 'date-fns'
+export default isEqual
diff --git a/date-fns/src/isEqual/index.js.flow b/date-fns/src/isEqual/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isEqual/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isEqual/index.ts b/date-fns/src/isEqual/index.ts
new file mode 100644
index 0000000..1157e62
--- /dev/null
+++ b/date-fns/src/isEqual/index.ts
@@ -0,0 +1,35 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isEqual
+ * @category Common Helpers
+ * @summary Are the given dates equal?
+ *
+ * @description
+ * Are the given dates equal?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to compare
+ * @param {Date|Number} dateRight - the second date to compare
+ * @returns {Boolean} the dates are equal
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?
+ * var result = isEqual(
+ * new Date(2014, 6, 2, 6, 30, 45, 0),
+ * new Date(2014, 6, 2, 6, 30, 45, 500)
+ * )
+ * //=> false
+ */
+export default function isEqual(dirtyLeftDate: Date | number, dirtyRightDate: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyLeftDate)
+ const dateRight = toDate(dirtyRightDate)
+ return dateLeft.getTime() === dateRight.getTime()
+}
diff --git a/date-fns/src/isEqual/test.ts b/date-fns/src/isEqual/test.ts
new file mode 100644
index 0000000..111ae4c
--- /dev/null
+++ b/date-fns/src/isEqual/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isEqual from '.'
+
+describe('isEqual', function() {
+ it('returns true if the given dates are equal', function() {
+ const result = isEqual(
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates are not equal', function() {
+ const result = isEqual(
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isEqual(
+ new Date(1987, 1 /* Feb */, 11).getTime(),
+ new Date(1987, 1 /* Feb */, 11).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isEqual(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isEqual(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isEqual(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isEqual.bind(null), TypeError)
+ assert.throws(isEqual.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isExists/benchmark.js b/date-fns/src/isExists/benchmark.js
new file mode 100644
index 0000000..167c979
--- /dev/null
+++ b/date-fns/src/isExists/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isExists from '.'
+
+suite(
+ 'isExisting',
+ function() {
+ benchmark('date-fns', function() {
+ return isExists(this.invalidYear, this.invalidMonth, this.invalidDay)
+ })
+ },
+ {
+ setup: function() {
+ this.invalidYear = 2018
+ this.invalidMonth = 1
+ this.invalidDay = 31
+ }
+ }
+)
diff --git a/date-fns/src/isExists/index.d.ts b/date-fns/src/isExists/index.d.ts
new file mode 100644
index 0000000..af919be
--- /dev/null
+++ b/date-fns/src/isExists/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isExists } from 'date-fns'
+export default isExists
diff --git a/date-fns/src/isExists/index.js.flow b/date-fns/src/isExists/index.js.flow
new file mode 100644
index 0000000..810828e
--- /dev/null
+++ b/date-fns/src/isExists/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (year: number, month: number, day: number) => boolean
diff --git a/date-fns/src/isExists/index.ts b/date-fns/src/isExists/index.ts
new file mode 100644
index 0000000..a15e60a
--- /dev/null
+++ b/date-fns/src/isExists/index.ts
@@ -0,0 +1,38 @@
+/**
+ * @name isExists
+ * @category Common Helpers
+ * @summary Is the given date exists?
+ *
+ * @description
+ * Checks if the given arguments convert to an existing date.
+ *
+ * @param {Number} year of the date to check
+ * @param {Number} month of the date to check
+ * @param {Number} day of the date to check
+ * @returns {Boolean} the date exists
+ * @throws {TypeError} 3 arguments required
+ *
+ * @example
+ * // For the valid date:
+ * var result = isExists(2018, 0, 31)
+ * //=> true
+ *
+ * @example
+ * // For the invalid date:
+ * var result = isExists(2018, 1, 31)
+ * //=> false
+ */
+export default function isExists(year: number, month: number, day: number): boolean {
+ if (arguments.length < 3) {
+ throw new TypeError(
+ '3 argument required, but only ' + arguments.length + ' present'
+ )
+ }
+
+ const date = new Date(year, month, day)
+ return (
+ date.getFullYear() === year &&
+ date.getMonth() === month &&
+ date.getDate() === day
+ )
+}
diff --git a/date-fns/src/isExists/test.ts b/date-fns/src/isExists/test.ts
new file mode 100644
index 0000000..3df2470
--- /dev/null
+++ b/date-fns/src/isExists/test.ts
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isExists from '.'
+
+describe('isValid', function() {
+ it('returns true if the given date is valid', function() {
+ const result = isExists(2018, 0, 31)
+ assert(result === true)
+ })
+
+ it('returns false if the given date is invalid', function() {
+ const result = isExists(2018, 1 /* Feb */, 31)
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 3 arguments', function() {
+ assert.throws(isExists.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isFirstDayOfMonth/benchmark.js b/date-fns/src/isFirstDayOfMonth/benchmark.js
new file mode 100644
index 0000000..df8db56
--- /dev/null
+++ b/date-fns/src/isFirstDayOfMonth/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isFirstDayOfMonth from '.'
+
+suite('isFirstDayOfMonth', function () {
+ benchmark('date-fns', function () {
+ return isFirstDayOfMonth(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isFirstDayOfMonth/index.d.ts b/date-fns/src/isFirstDayOfMonth/index.d.ts
new file mode 100644
index 0000000..6c1a314
--- /dev/null
+++ b/date-fns/src/isFirstDayOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isFirstDayOfMonth } from 'date-fns'
+export default isFirstDayOfMonth
diff --git a/date-fns/src/isFirstDayOfMonth/index.js.flow b/date-fns/src/isFirstDayOfMonth/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isFirstDayOfMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isFirstDayOfMonth/index.ts b/date-fns/src/isFirstDayOfMonth/index.ts
new file mode 100644
index 0000000..e6fcfb1
--- /dev/null
+++ b/date-fns/src/isFirstDayOfMonth/index.ts
@@ -0,0 +1,29 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isFirstDayOfMonth
+ * @category Month Helpers
+ * @summary Is the given date the first day of a month?
+ *
+ * @description
+ * Is the given date the first day of a month?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is the first day of a month
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 1 September 2014 the first day of a month?
+ * var result = isFirstDayOfMonth(new Date(2014, 8, 1))
+ * //=> true
+ */
+export default function isFirstDayOfMonth(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(dirtyDate).getDate() === 1
+}
diff --git a/date-fns/src/isFirstDayOfMonth/test.ts b/date-fns/src/isFirstDayOfMonth/test.ts
new file mode 100644
index 0000000..29c5476
--- /dev/null
+++ b/date-fns/src/isFirstDayOfMonth/test.ts
@@ -0,0 +1,32 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isFirstDayOfMonth from '.'
+
+describe('isFirstDayOfMonth', function() {
+ it('returns true if the given date is in the last day of month', function() {
+ const result = isFirstDayOfMonth(new Date(2014, 9 /* Oct */, 1))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not in the last day of month', function() {
+ const result = isFirstDayOfMonth(new Date(2014, 9 /* Oct */, 2))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 9 /* Oct */, 1).getTime()
+ const result = isFirstDayOfMonth(date)
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isFirstDayOfMonth(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isFirstDayOfMonth.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isFriday/benchmark.js b/date-fns/src/isFriday/benchmark.js
new file mode 100644
index 0000000..edeab4d
--- /dev/null
+++ b/date-fns/src/isFriday/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isFriday from '.'
+
+suite('isFriday', function () {
+ benchmark('date-fns', function () {
+ return isFriday(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isFriday/index.d.ts b/date-fns/src/isFriday/index.d.ts
new file mode 100644
index 0000000..17ac2ef
--- /dev/null
+++ b/date-fns/src/isFriday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isFriday } from 'date-fns'
+export default isFriday
diff --git a/date-fns/src/isFriday/index.js.flow b/date-fns/src/isFriday/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isFriday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isFriday/index.ts b/date-fns/src/isFriday/index.ts
new file mode 100644
index 0000000..9194a2e
--- /dev/null
+++ b/date-fns/src/isFriday/index.ts
@@ -0,0 +1,29 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isFriday
+ * @category Weekday Helpers
+ * @summary Is the given date Friday?
+ *
+ * @description
+ * Is the given date Friday?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is Friday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 26 September 2014 Friday?
+ * var result = isFriday(new Date(2014, 8, 26))
+ * //=> true
+ */
+export default function isFriday(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(dirtyDate).getDay() === 5
+}
diff --git a/date-fns/src/isFriday/test.ts b/date-fns/src/isFriday/test.ts
new file mode 100644
index 0000000..3eae119
--- /dev/null
+++ b/date-fns/src/isFriday/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isFriday from '.'
+
+describe('isFriday', function() {
+ it('returns true if the given date is Friday', function() {
+ const result = isFriday(new Date(2014, 8 /* Sep */, 26))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not Friday', function() {
+ const result = isFriday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isFriday(new Date(2014, 1 /* Feb */, 14).getTime())
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isFriday(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isFriday.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isFuture/benchmark.js b/date-fns/src/isFuture/benchmark.js
new file mode 100644
index 0000000..d04fd1a
--- /dev/null
+++ b/date-fns/src/isFuture/benchmark.js
@@ -0,0 +1,19 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isFuture from '.'
+
+suite(
+ 'isFuture',
+ () => {
+ benchmark('date-fns', function() {
+ return isFuture(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isFuture/index.d.ts b/date-fns/src/isFuture/index.d.ts
new file mode 100644
index 0000000..4cb82e8
--- /dev/null
+++ b/date-fns/src/isFuture/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isFuture } from 'date-fns'
+export default isFuture
diff --git a/date-fns/src/isFuture/index.js.flow b/date-fns/src/isFuture/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isFuture/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isFuture/index.ts b/date-fns/src/isFuture/index.ts
new file mode 100644
index 0000000..16ba1c9
--- /dev/null
+++ b/date-fns/src/isFuture/index.ts
@@ -0,0 +1,33 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isFuture
+ * @category Common Helpers
+ * @summary Is the given date in the future?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the future?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in the future
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If today is 6 October 2014, is 31 December 2014 in the future?
+ * var result = isFuture(new Date(2014, 11, 31))
+ * //=> true
+ */
+export default function isFuture(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(dirtyDate).getTime() > Date.now()
+}
diff --git a/date-fns/src/isFuture/test.ts b/date-fns/src/isFuture/test.ts
new file mode 100644
index 0000000..bec205f
--- /dev/null
+++ b/date-fns/src/isFuture/test.ts
@@ -0,0 +1,41 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import sinon from 'sinon'
+import isFuture from '.'
+
+describe('isFuture', () => {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Sep */, 25).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date is in the future', () => {
+ const result = isFuture(new Date(2014, 9 /* Oct */, 31))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is in the past', () => {
+ const result = isFuture(new Date(2014, 8 /* Sep */, 1))
+ assert(result === false)
+ })
+
+ it('returns false if the given date is now', () => {
+ const result = isFuture(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const result = isFuture(new Date(2014, 9 /* Oct */, 31).getTime())
+ assert(result === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ assert.throws(isFuture.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isLastDayOfMonth/benchmark.js b/date-fns/src/isLastDayOfMonth/benchmark.js
new file mode 100644
index 0000000..6ce43bc
--- /dev/null
+++ b/date-fns/src/isLastDayOfMonth/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isLastDayOfMonth from '.'
+
+suite('isLastDayOfMonth', function () {
+ benchmark('date-fns', function () {
+ return isLastDayOfMonth(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isLastDayOfMonth/index.d.ts b/date-fns/src/isLastDayOfMonth/index.d.ts
new file mode 100644
index 0000000..665cb7d
--- /dev/null
+++ b/date-fns/src/isLastDayOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isLastDayOfMonth } from 'date-fns'
+export default isLastDayOfMonth
diff --git a/date-fns/src/isLastDayOfMonth/index.js.flow b/date-fns/src/isLastDayOfMonth/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isLastDayOfMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isLastDayOfMonth/index.ts b/date-fns/src/isLastDayOfMonth/index.ts
new file mode 100644
index 0000000..d16fc18
--- /dev/null
+++ b/date-fns/src/isLastDayOfMonth/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import endOfDay from '../endOfDay/index'
+import endOfMonth from '../endOfMonth/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isLastDayOfMonth
+ * @category Month Helpers
+ * @summary Is the given date the last day of a month?
+ *
+ * @description
+ * Is the given date the last day of a month?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is the last day of a month
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 28 February 2014 the last day of a month?
+ * var result = isLastDayOfMonth(new Date(2014, 1, 28))
+ * //=> true
+ */
+export default function isLastDayOfMonth(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ return endOfDay(date).getTime() === endOfMonth(date).getTime()
+}
diff --git a/date-fns/src/isLastDayOfMonth/test.ts b/date-fns/src/isLastDayOfMonth/test.ts
new file mode 100644
index 0000000..4e20216
--- /dev/null
+++ b/date-fns/src/isLastDayOfMonth/test.ts
@@ -0,0 +1,32 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isLastDayOfMonth from '.'
+
+describe('isLastDayOfMonth', function() {
+ it('returns true if the given date is in the last day of month', function() {
+ const result = isLastDayOfMonth(new Date(2014, 9 /* Oct */, 31))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not in the last day of month', function() {
+ const result = isLastDayOfMonth(new Date(2014, 9 /* Oct */, 30))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ var date = new Date(2014, 9 /* Oct */, 31).getTime()
+ const result = isLastDayOfMonth(date)
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isLastDayOfMonth(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isLastDayOfMonth.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isLeapYear/benchmark.js b/date-fns/src/isLeapYear/benchmark.js
new file mode 100644
index 0000000..ede4681
--- /dev/null
+++ b/date-fns/src/isLeapYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isLeapYear from '.'
+import moment from 'moment'
+
+suite('isLeapYear', function () {
+ benchmark('date-fns', function () {
+ return isLeapYear(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.isLeapYear()
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/isLeapYear/index.d.ts b/date-fns/src/isLeapYear/index.d.ts
new file mode 100644
index 0000000..c08ad8a
--- /dev/null
+++ b/date-fns/src/isLeapYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isLeapYear } from 'date-fns'
+export default isLeapYear
diff --git a/date-fns/src/isLeapYear/index.js.flow b/date-fns/src/isLeapYear/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isLeapYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isLeapYear/index.ts b/date-fns/src/isLeapYear/index.ts
new file mode 100644
index 0000000..e3a0a27
--- /dev/null
+++ b/date-fns/src/isLeapYear/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isLeapYear
+ * @category Year Helpers
+ * @summary Is the given date in the leap year?
+ *
+ * @description
+ * Is the given date in the leap year?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in the leap year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 1 September 2012 in the leap year?
+ * var result = isLeapYear(new Date(2012, 8, 1))
+ * //=> true
+ */
+export default function isLeapYear(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+ return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)
+}
diff --git a/date-fns/src/isLeapYear/test.ts b/date-fns/src/isLeapYear/test.ts
new file mode 100644
index 0000000..95f5cc5
--- /dev/null
+++ b/date-fns/src/isLeapYear/test.ts
@@ -0,0 +1,42 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isLeapYear from '.'
+
+describe('isLeapYear', function() {
+ it('returns true if the given date is in the leap year', function() {
+ const result = isLeapYear(new Date(2012, 6 /* Jul */, 2))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not in the leap year', function() {
+ const result = isLeapYear(new Date(2014, 6 /* Jul */, 2))
+ assert(result === false)
+ })
+
+ it('works for the years divisible by 100 but not by 400', function() {
+ const result = isLeapYear(new Date(2100, 6 /* Jul */, 2))
+ assert(result === false)
+ })
+
+ it('works for the years divisible by 400', function() {
+ const result = isLeapYear(new Date(2000, 6 /* Jul */, 2))
+ assert(result === true)
+ })
+
+ it('accepts a timestamp', function() {
+ var date = new Date(2012, 6 /* Jul */, 2).getTime()
+ const result = isLeapYear(date)
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isLeapYear(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isLeapYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isMatch/index.d.ts b/date-fns/src/isMatch/index.d.ts
new file mode 100644
index 0000000..e0c3fa5
--- /dev/null
+++ b/date-fns/src/isMatch/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isMatch } from 'date-fns'
+export default isMatch
diff --git a/date-fns/src/isMatch/index.js b/date-fns/src/isMatch/index.js
new file mode 100644
index 0000000..55caded
--- /dev/null
+++ b/date-fns/src/isMatch/index.js
@@ -0,0 +1,300 @@
+import parse from '../parse/index'
+import isValid from '../isValid/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isMatch
+ * @category Common Helpers
+ * @summary validates the date string against given formats
+ *
+ * @description
+ * Return the true if given date is string correct against the given format else
+ * will return false.
+ *
+ * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.
+ * > See: https://git.io/fxCyr
+ *
+ * The characters in the format string wrapped between two single quotes characters (') are escaped.
+ * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.
+ *
+ * Format of the format string is based on Unicode Technical Standard #35:
+ * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ * with a few additions (see note 5 below the table).
+ *
+ * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited
+ * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:
+ *
+ * ```javascript
+ * isMatch('23 AM', 'HH a')
+ * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time
+ * ```
+ *
+ * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true
+ *
+ * Accepted format string patterns:
+ * | Unit |Prior| Pattern | Result examples | Notes |
+ * |---------------------------------|-----|---------|-----------------------------------|-------|
+ * | Era | 140 | G..GGG | AD, BC | |
+ * | | | GGGG | Anno Domini, Before Christ | 2 |
+ * | | | GGGGG | A, B | |
+ * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |
+ * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |
+ * | | | yy | 44, 01, 00, 17 | 4 |
+ * | | | yyy | 044, 001, 123, 999 | 4 |
+ * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |
+ * | | | yyyyy | ... | 2,4 |
+ * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |
+ * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |
+ * | | | YY | 44, 01, 00, 17 | 4,6 |
+ * | | | YYY | 044, 001, 123, 999 | 4 |
+ * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |
+ * | | | YYYYY | ... | 2,4 |
+ * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |
+ * | | | RR | -43, 01, 00, 17 | 4,5 |
+ * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |
+ * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |
+ * | | | RRRRR | ... | 2,4,5 |
+ * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |
+ * | | | uu | -43, 01, 99, -99 | 4 |
+ * | | | uuu | -043, 001, 123, 999, -999 | 4 |
+ * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |
+ * | | | uuuuu | ... | 2,4 |
+ * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |
+ * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |
+ * | | | QQ | 01, 02, 03, 04 | |
+ * | | | QQQ | Q1, Q2, Q3, Q4 | |
+ * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |
+ * | | | QQQQQ | 1, 2, 3, 4 | 4 |
+ * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |
+ * | | | qo | 1st, 2nd, 3rd, 4th | 5 |
+ * | | | qq | 01, 02, 03, 04 | |
+ * | | | qqq | Q1, Q2, Q3, Q4 | |
+ * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |
+ * | | | qqqqq | 1, 2, 3, 4 | 3 |
+ * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |
+ * | | | Mo | 1st, 2nd, ..., 12th | 5 |
+ * | | | MM | 01, 02, ..., 12 | |
+ * | | | MMM | Jan, Feb, ..., Dec | |
+ * | | | MMMM | January, February, ..., December | 2 |
+ * | | | MMMMM | J, F, ..., D | |
+ * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |
+ * | | | Lo | 1st, 2nd, ..., 12th | 5 |
+ * | | | LL | 01, 02, ..., 12 | |
+ * | | | LLL | Jan, Feb, ..., Dec | |
+ * | | | LLLL | January, February, ..., December | 2 |
+ * | | | LLLLL | J, F, ..., D | |
+ * | Local week of year | 100 | w | 1, 2, ..., 53 | |
+ * | | | wo | 1st, 2nd, ..., 53th | 5 |
+ * | | | ww | 01, 02, ..., 53 | |
+ * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |
+ * | | | Io | 1st, 2nd, ..., 53th | 5 |
+ * | | | II | 01, 02, ..., 53 | 5 |
+ * | Day of month | 90 | d | 1, 2, ..., 31 | |
+ * | | | do | 1st, 2nd, ..., 31st | 5 |
+ * | | | dd | 01, 02, ..., 31 | |
+ * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |
+ * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |
+ * | | | DD | 01, 02, ..., 365, 366 | 7 |
+ * | | | DDD | 001, 002, ..., 365, 366 | |
+ * | | | DDDD | ... | 2 |
+ * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Su | |
+ * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |
+ * | | | EEEEE | M, T, W, T, F, S, S | |
+ * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |
+ * | | | io | 1st, 2nd, ..., 7th | 5 |
+ * | | | ii | 01, 02, ..., 07 | 5 |
+ * | | | iii | Mon, Tue, Wed, ..., Su | 5 |
+ * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |
+ * | | | iiiii | M, T, W, T, F, S, S | 5 |
+ * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 |
+ * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |
+ * | | | eo | 2nd, 3rd, ..., 1st | 5 |
+ * | | | ee | 02, 03, ..., 01 | |
+ * | | | eee | Mon, Tue, Wed, ..., Su | |
+ * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |
+ * | | | eeeee | M, T, W, T, F, S, S | |
+ * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |
+ * | | | co | 2nd, 3rd, ..., 1st | 5 |
+ * | | | cc | 02, 03, ..., 01 | |
+ * | | | ccc | Mon, Tue, Wed, ..., Su | |
+ * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |
+ * | | | ccccc | M, T, W, T, F, S, S | |
+ * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | AM, PM | 80 | a..aaa | AM, PM | |
+ * | | | aaaa | a.m., p.m. | 2 |
+ * | | | aaaaa | a, p | |
+ * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |
+ * | | | bbbb | a.m., p.m., noon, midnight | 2 |
+ * | | | bbbbb | a, p, n, mi | |
+ * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |
+ * | | | BBBB | at night, in the morning, ... | 2 |
+ * | | | BBBBB | at night, in the morning, ... | |
+ * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |
+ * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |
+ * | | | hh | 01, 02, ..., 11, 12 | |
+ * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |
+ * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |
+ * | | | HH | 00, 01, 02, ..., 23 | |
+ * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |
+ * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |
+ * | | | KK | 01, 02, ..., 11, 00 | |
+ * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |
+ * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |
+ * | | | kk | 24, 01, 02, ..., 23 | |
+ * | Minute | 60 | m | 0, 1, ..., 59 | |
+ * | | | mo | 0th, 1st, ..., 59th | 5 |
+ * | | | mm | 00, 01, ..., 59 | |
+ * | Second | 50 | s | 0, 1, ..., 59 | |
+ * | | | so | 0th, 1st, ..., 59th | 5 |
+ * | | | ss | 00, 01, ..., 59 | |
+ * | Seconds timestamp | 40 | t | 512969520 | |
+ * | | | tt | ... | 2 |
+ * | Fraction of second | 30 | S | 0, 1, ..., 9 | |
+ * | | | SS | 00, 01, ..., 99 | |
+ * | | | SSS | 000, 0001, ..., 999 | |
+ * | | | SSSS | ... | 2 |
+ * | Milliseconds timestamp | 20 | T | 512969520900 | |
+ * | | | TT | ... | 2 |
+ * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |
+ * | | | XX | -0800, +0530, Z | |
+ * | | | XXX | -08:00, +05:30, Z | |
+ * | | | XXXX | -0800, +0530, Z, +123456 | 2 |
+ * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |
+ * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |
+ * | | | xx | -0800, +0530, +0000 | |
+ * | | | xxx | -08:00, +05:30, +00:00 | 2 |
+ * | | | xxxx | -0800, +0530, +0000, +123456 | |
+ * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |
+ * | Long localized date | NA | P | 05/29/1453 | 5,8 |
+ * | | | PP | May 29, 1453 | |
+ * | | | PPP | May 29th, 1453 | |
+ * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |
+ * | Long localized time | NA | p | 12:00 AM | 5,8 |
+ * | | | pp | 12:00:00 AM | |
+ * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |
+ * | | | PPpp | May 29, 1453, 12:00:00 AM | |
+ * | | | PPPpp | May 29th, 1453 at ... | |
+ * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |
+ * Notes:
+ * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale
+ * are the same as "stand-alone" units, but are different in some languages.
+ * "Formatting" units are declined according to the rules of the language
+ * in the context of a date. "Stand-alone" units are always nominative singular.
+ * In `format` function, they will produce different result:
+ *
+ * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`
+ *
+ * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`
+ *
+ * `isMatch` will try to match both formatting and stand-alone units interchangably.
+ *
+ * 2. Any sequence of the identical letters is a pattern, unless it is escaped by
+ * the single quote characters (see below).
+ * If the sequence is longer than listed in table:
+ * - for numerical units (`yyyyyyyy`) `isMatch` will try to match a number
+ * as wide as the sequence
+ * - for text units (`MMMMMMMM`) `isMatch` will try to match the widest variation of the unit.
+ * These variations are marked with "2" in the last column of the table.
+ *
+ * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.
+ * These tokens represent the shortest form of the quarter.
+ *
+ * 4. The main difference between `y` and `u` patterns are B.C. years:
+ *
+ * | Year | `y` | `u` |
+ * |------|-----|-----|
+ * | AC 1 | 1 | 1 |
+ * | BC 1 | 1 | 0 |
+ * | BC 2 | 2 | -1 |
+ *
+ * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:
+ *
+ * `isMatch('50', 'yy') //=> true`
+ *
+ * `isMatch('75', 'yy') //=> true`
+ *
+ * while `uu` will use the year as is:
+ *
+ * `isMatch('50', 'uu') //=> true`
+ *
+ * `isMatch('75', 'uu') //=> true`
+ *
+ * The same difference is true for local and ISO week-numbering years (`Y` and `R`),
+ * except local week-numbering years are dependent on `options.weekStartsOn`
+ * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}
+ * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).
+ *
+ * 5. These patterns are not in the Unicode Technical Standard #35:
+ * - `i`: ISO day of week
+ * - `I`: ISO week of year
+ * - `R`: ISO week-numbering year
+ * - `o`: ordinal number modifier
+ * - `P`: long localized date
+ * - `p`: long localized time
+ *
+ * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.
+ * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr
+ *
+ * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.
+ * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr
+ *
+ * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based
+ * on the given locale.
+ *
+ * using `en-US` locale: `P` => `MM/dd/yyyy`
+ * using `en-US` locale: `p` => `hh:mm a`
+ * using `pt-BR` locale: `P` => `dd/MM/yyyy`
+ * using `pt-BR` locale: `p` => `HH:mm`
+ *
+ * Values will be checked in the descending order of its unit's priority.
+ * Units of an equal priority overwrite each other in the order of appearance.
+ *
+ * If no values of higher priority are matched (e.g. when matching string 'January 1st' without a year),
+ * the values will be taken from today's using `new Date()` date which works as a context of parsing.
+ *
+ * The result may vary by locale.
+ *
+ * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.
+ *
+ *
+ *
+ * @param {String} dateString - the date string to verify
+ * @param {String} formatString - the string of tokens
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year
+ * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;
+ * see: https://git.io/fxCyr
+ * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;
+ * see: https://git.io/fxCyr
+ * @returns {Boolean}
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
+ * @throws {RangeError} `options.locale` must contain `match` property
+ * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years; see: https://git.io/fxCyr
+ * @throws {RangeError} use `yy` instead of `YY` for formatting years; see: https://git.io/fxCyr
+ * @throws {RangeError} use `d` instead of `D` for formatting days of the month; see: https://git.io/fxCyr
+ * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month; see: https://git.io/fxCyr
+ * @throws {RangeError} format string contains an unescaped latin alphabet character
+ *
+ * @example
+ * // Match 11 February 2014 from middle-endian format:
+ * var result = isMatch('02/11/2014', 'MM/dd/yyyy')
+ * //=> true
+ *
+ * @example
+ * // Match 28th of February in Esperanto locale in the context of 2010 year:
+ * import eo from 'date-fns/locale/eo'
+ * var result = isMatch('28-a de februaro', "do 'de' MMMM", {
+ * locale: eo
+ * })
+ * //=> true
+ */
+export default function isMatch(dateString, formatString, dirtyOptions) {
+ requiredArgs(2, arguments)
+ return isValid(parse(dateString, formatString, new Date(), dirtyOptions))
+}
diff --git a/date-fns/src/isMatch/index.js.flow b/date-fns/src/isMatch/index.js.flow
new file mode 100644
index 0000000..c27d35a
--- /dev/null
+++ b/date-fns/src/isMatch/index.js.flow
@@ -0,0 +1,62 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateString: string,
+ formatString: string,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ useAdditionalWeekYearTokens?: boolean,
+ useAdditionalDayOfYearTokens?: boolean,
+ }
+) => boolean
diff --git a/date-fns/src/isMatch/test.js b/date-fns/src/isMatch/test.js
new file mode 100644
index 0000000..dfe6e10
--- /dev/null
+++ b/date-fns/src/isMatch/test.js
@@ -0,0 +1,24 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isMatch from '.'
+import eo from '../locale/eo'
+
+describe('isMatch', function() {
+ it('accepts a dd-MM-yyyy format against 22-02-1998', function() {
+ assert(isMatch('22-02-1998', 'dd-MM-yyyy'))
+ })
+
+ it('reject a yyyy-dd-MM format against 22-02-1998', function() {
+ assert(!isMatch('22-02-1998', 'yyyy-dd-MM'))
+ })
+
+ it('accepts a date & format with locale', function() {
+ assert(
+ isMatch('28-a de februaro', "do 'de' MMMM", {
+ locale: eo
+ })
+ )
+ })
+})
diff --git a/date-fns/src/isMonday/benchmark.js b/date-fns/src/isMonday/benchmark.js
new file mode 100644
index 0000000..590451b
--- /dev/null
+++ b/date-fns/src/isMonday/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isMonday from '.'
+
+suite('isMonday', function () {
+ benchmark('date-fns', function () {
+ return isMonday(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isMonday/index.d.ts b/date-fns/src/isMonday/index.d.ts
new file mode 100644
index 0000000..dee60ac
--- /dev/null
+++ b/date-fns/src/isMonday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isMonday } from 'date-fns'
+export default isMonday
diff --git a/date-fns/src/isMonday/index.js.flow b/date-fns/src/isMonday/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isMonday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isMonday/index.ts b/date-fns/src/isMonday/index.ts
new file mode 100644
index 0000000..95241d5
--- /dev/null
+++ b/date-fns/src/isMonday/index.ts
@@ -0,0 +1,29 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isMonday
+ * @category Weekday Helpers
+ * @summary Is the given date Monday?
+ *
+ * @description
+ * Is the given date Monday?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is Monday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 22 September 2014 Monday?
+ * var result = isMonday(new Date(2014, 8, 22))
+ * //=> true
+ */
+export default function isMonday(date: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(date).getDay() === 1
+}
diff --git a/date-fns/src/isMonday/test.ts b/date-fns/src/isMonday/test.ts
new file mode 100644
index 0000000..72eac8f
--- /dev/null
+++ b/date-fns/src/isMonday/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isMonday from '.'
+
+describe('isMonday', function() {
+ it('returns true if the given date is Monday', function() {
+ const result = isMonday(new Date(2014, 8 /* Sep */, 22))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not Monday', function() {
+ const result = isMonday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isMonday(new Date(2014, 1 /* Feb */, 10).getTime())
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isMonday(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isMonday.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isPast/benchmark.js b/date-fns/src/isPast/benchmark.js
new file mode 100644
index 0000000..d5403bd
--- /dev/null
+++ b/date-fns/src/isPast/benchmark.js
@@ -0,0 +1,19 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isPast from '.'
+
+suite(
+ 'isPast',
+ () => {
+ benchmark('date-fns', function() {
+ return isPast(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isPast/index.d.ts b/date-fns/src/isPast/index.d.ts
new file mode 100644
index 0000000..8ae92ca
--- /dev/null
+++ b/date-fns/src/isPast/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isPast } from 'date-fns'
+export default isPast
diff --git a/date-fns/src/isPast/index.js.flow b/date-fns/src/isPast/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isPast/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isPast/index.ts b/date-fns/src/isPast/index.ts
new file mode 100644
index 0000000..b0c251e
--- /dev/null
+++ b/date-fns/src/isPast/index.ts
@@ -0,0 +1,33 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isPast
+ * @category Common Helpers
+ * @summary Is the given date in the past?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the past?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in the past
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If today is 6 October 2014, is 2 July 2014 in the past?
+ * var result = isPast(new Date(2014, 6, 2))
+ * //=> true
+ */
+export default function isPast(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(dirtyDate).getTime() < Date.now()
+}
diff --git a/date-fns/src/isPast/test.ts b/date-fns/src/isPast/test.ts
new file mode 100644
index 0000000..eb3a947
--- /dev/null
+++ b/date-fns/src/isPast/test.ts
@@ -0,0 +1,42 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isPast from '.'
+
+describe('isPast', () => {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Sep */, 25).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date is in the past', () => {
+ const result = isPast(new Date(2014, 6 /* Jul */, 2))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is in the future', () => {
+ const result = isPast(new Date(2014, 11 /* Dec */, 31))
+ assert(result === false)
+ })
+
+ it('returns false if the given date is now', () => {
+ const result = isPast(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const result = isPast(new Date(2014, 6 /* Jul */, 2).getTime())
+ assert(result === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ // @ts-expect-error
+ assert.throws(isPast.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameDay/benchmark.js b/date-fns/src/isSameDay/benchmark.js
new file mode 100644
index 0000000..d68232f
--- /dev/null
+++ b/date-fns/src/isSameDay/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameDay from '.'
+import moment from 'moment'
+
+suite('isSameDay', function () {
+ benchmark('date-fns', function () {
+ return isSameDay(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isSame(this.momentB, 'day')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isSameDay/index.d.ts b/date-fns/src/isSameDay/index.d.ts
new file mode 100644
index 0000000..c4c2d55
--- /dev/null
+++ b/date-fns/src/isSameDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameDay } from 'date-fns'
+export default isSameDay
diff --git a/date-fns/src/isSameDay/index.js.flow b/date-fns/src/isSameDay/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isSameDay/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isSameDay/index.ts b/date-fns/src/isSameDay/index.ts
new file mode 100644
index 0000000..6b42679
--- /dev/null
+++ b/date-fns/src/isSameDay/index.ts
@@ -0,0 +1,33 @@
+import startOfDay from '../startOfDay/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSameDay
+ * @category Day Helpers
+ * @summary Are the given dates in the same day?
+ *
+ * @description
+ * Are the given dates in the same day?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @returns {Boolean} the dates are in the same day
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?
+ * var result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))
+ * //=> true
+ */
+export default function isSameDay(dirtyDateLeft: Date | number, dirtyDateRight: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeftStartOfDay = startOfDay(dirtyDateLeft)
+ const dateRightStartOfDay = startOfDay(dirtyDateRight)
+
+ return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime()
+}
diff --git a/date-fns/src/isSameDay/test.ts b/date-fns/src/isSameDay/test.ts
new file mode 100644
index 0000000..ff90d55
--- /dev/null
+++ b/date-fns/src/isSameDay/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameDay from '.'
+
+describe('isSameDay', function() {
+ it('returns true if the given dates have the same day', function() {
+ const result = isSameDay(
+ new Date(2014, 8 /* Sep */, 4, 6, 0),
+ new Date(2014, 8 /* Sep */, 4, 18, 0)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different days', function() {
+ const result = isSameDay(
+ new Date(2014, 8 /* Sep */, 4, 23, 59),
+ new Date(2014, 8 /* Sep */, 5, 0, 0)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSameDay(
+ new Date(2014, 8 /* Sep */, 4, 6, 0).getTime(),
+ new Date(2014, 8 /* Sep */, 4, 18, 0).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isSameDay(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isSameDay(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isSameDay(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isSameDay.bind(null), TypeError)
+ assert.throws(isSameDay.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameHour/benchmark.js b/date-fns/src/isSameHour/benchmark.js
new file mode 100644
index 0000000..c21d8c1
--- /dev/null
+++ b/date-fns/src/isSameHour/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameHour from '.'
+import moment from 'moment'
+
+suite('isSameHour', function () {
+ benchmark('date-fns', function () {
+ return isSameHour(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isSame(this.momentB, 'hour')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isSameHour/index.d.ts b/date-fns/src/isSameHour/index.d.ts
new file mode 100644
index 0000000..78d4662
--- /dev/null
+++ b/date-fns/src/isSameHour/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameHour } from 'date-fns'
+export default isSameHour
diff --git a/date-fns/src/isSameHour/index.js.flow b/date-fns/src/isSameHour/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isSameHour/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isSameHour/index.ts b/date-fns/src/isSameHour/index.ts
new file mode 100644
index 0000000..d6e362e
--- /dev/null
+++ b/date-fns/src/isSameHour/index.ts
@@ -0,0 +1,33 @@
+import startOfHour from '../startOfHour/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSameHour
+ * @category Hour Helpers
+ * @summary Are the given dates in the same hour?
+ *
+ * @description
+ * Are the given dates in the same hour?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @returns {Boolean} the dates are in the same hour
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour?
+ * var result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30))
+ * //=> true
+ */
+export default function isSameHour(dirtyDateLeft: Date | number, dirtyDateRight: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeftStartOfHour = startOfHour(dirtyDateLeft)
+ const dateRightStartOfHour = startOfHour(dirtyDateRight)
+
+ return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime()
+}
diff --git a/date-fns/src/isSameHour/test.ts b/date-fns/src/isSameHour/test.ts
new file mode 100644
index 0000000..dbbe3e2
--- /dev/null
+++ b/date-fns/src/isSameHour/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameHour from '.'
+
+describe('isSameHour', function() {
+ it('returns true if the given dates have the same hour', function() {
+ const result = isSameHour(
+ new Date(2014, 8 /* Sep */, 4, 6, 0),
+ new Date(2014, 8 /* Sep */, 4, 6, 30)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different hours', function() {
+ const result = isSameHour(
+ new Date(2014, 8 /* Sep */, 4, 6, 0),
+ new Date(2014, 8 /* Sep */, 4, 5, 0)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSameHour(
+ new Date(2014, 8 /* Sep */, 4, 18, 0).getTime(),
+ new Date(2014, 8 /* Sep */, 4, 18, 45).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isSameHour(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isSameHour(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isSameHour(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isSameHour.bind(null), TypeError)
+ assert.throws(isSameHour.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameISOWeek/benchmark.js b/date-fns/src/isSameISOWeek/benchmark.js
new file mode 100644
index 0000000..51b9a1f
--- /dev/null
+++ b/date-fns/src/isSameISOWeek/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameISOWeek from '.'
+
+suite('isSameISOWeek', function () {
+ benchmark('date-fns', function () {
+ return isSameISOWeek(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/isSameISOWeek/index.d.ts b/date-fns/src/isSameISOWeek/index.d.ts
new file mode 100644
index 0000000..566ed8b
--- /dev/null
+++ b/date-fns/src/isSameISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameISOWeek } from 'date-fns'
+export default isSameISOWeek
diff --git a/date-fns/src/isSameISOWeek/index.js.flow b/date-fns/src/isSameISOWeek/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isSameISOWeek/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isSameISOWeek/index.ts b/date-fns/src/isSameISOWeek/index.ts
new file mode 100644
index 0000000..0643dd9
--- /dev/null
+++ b/date-fns/src/isSameISOWeek/index.ts
@@ -0,0 +1,32 @@
+import isSameWeek from '../isSameWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSameISOWeek
+ * @category ISO Week Helpers
+ * @summary Are the given dates in the same ISO week?
+ *
+ * @description
+ * Are the given dates in the same ISO week?
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @returns {Boolean} the dates are in the same ISO week
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 1 September 2014 and 7 September 2014 in the same ISO week?
+ * var result = isSameISOWeek(new Date(2014, 8, 1), new Date(2014, 8, 7))
+ * //=> true
+ */
+export default function isSameISOWeek(dirtyDateLeft: Date | number, dirtyDateRight: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ return isSameWeek(dirtyDateLeft, dirtyDateRight, { weekStartsOn: 1 })
+}
diff --git a/date-fns/src/isSameISOWeek/test.ts b/date-fns/src/isSameISOWeek/test.ts
new file mode 100644
index 0000000..a1877ff
--- /dev/null
+++ b/date-fns/src/isSameISOWeek/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameISOWeek from '.'
+
+describe('isSameISOWeek', function() {
+ it('returns true if the given dates have the same ISO week', function() {
+ const result = isSameISOWeek(
+ new Date(2014, 8 /* Sep */, 1),
+ new Date(2014, 8 /* Sep */, 7)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different ISO weeks', function() {
+ const result = isSameISOWeek(
+ new Date(2014, 8 /* Sep */, 1),
+ new Date(2014, 8 /* Sep */, 14)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSameISOWeek(
+ new Date(2014, 5 /* Jun */, 30).getTime(),
+ new Date(2014, 6 /* Jul */, 2).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isSameISOWeek(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isSameISOWeek(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isSameISOWeek(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isSameISOWeek.bind(null), TypeError)
+ assert.throws(isSameISOWeek.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameISOWeekYear/benchmark.js b/date-fns/src/isSameISOWeekYear/benchmark.js
new file mode 100644
index 0000000..ca906f6
--- /dev/null
+++ b/date-fns/src/isSameISOWeekYear/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameISOWeekYear from '.'
+
+suite('isSameISOWeekYear', function () {
+ benchmark('date-fns', function () {
+ return isSameISOWeekYear(this.dateA, this.dateB)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ }
+})
diff --git a/date-fns/src/isSameISOWeekYear/index.d.ts b/date-fns/src/isSameISOWeekYear/index.d.ts
new file mode 100644
index 0000000..e796092
--- /dev/null
+++ b/date-fns/src/isSameISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameISOWeekYear } from 'date-fns'
+export default isSameISOWeekYear
diff --git a/date-fns/src/isSameISOWeekYear/index.js.flow b/date-fns/src/isSameISOWeekYear/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isSameISOWeekYear/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isSameISOWeekYear/index.ts b/date-fns/src/isSameISOWeekYear/index.ts
new file mode 100644
index 0000000..bd82edf
--- /dev/null
+++ b/date-fns/src/isSameISOWeekYear/index.ts
@@ -0,0 +1,40 @@
+import startOfISOWeekYear from '../startOfISOWeekYear/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSameISOWeekYear
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Are the given dates in the same ISO week-numbering year?
+ *
+ * @description
+ * Are the given dates in the same ISO week-numbering year?
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `isSameISOYear` to `isSameISOWeekYear`.
+ * "ISO week year" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ * This change makes the name consistent with
+ * locale-dependent week-numbering year helpers, e.g., `getWeekYear`.
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @returns {Boolean} the dates are in the same ISO week-numbering year
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 29 December 2003 and 2 January 2005 in the same ISO week-numbering year?
+ * var result = isSameISOWeekYear(new Date(2003, 11, 29), new Date(2005, 0, 2))
+ * //=> true
+ */
+export default function isSameISOWeekYear(dirtyDateLeft: Date | number, dirtyDateRight: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeftStartOfYear = startOfISOWeekYear(dirtyDateLeft)
+ const dateRightStartOfYear = startOfISOWeekYear(dirtyDateRight)
+
+ return dateLeftStartOfYear.getTime() === dateRightStartOfYear.getTime()
+}
diff --git a/date-fns/src/isSameISOWeekYear/test.ts b/date-fns/src/isSameISOWeekYear/test.ts
new file mode 100644
index 0000000..f5ac28f
--- /dev/null
+++ b/date-fns/src/isSameISOWeekYear/test.ts
@@ -0,0 +1,68 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameISOWeekYear from '.'
+
+describe('isSameISOWeekYear', function() {
+ it('returns true if the given dates have the same ISO week-numbering year', function() {
+ const result = isSameISOWeekYear(
+ new Date(2003, 11 /* Dec */, 29),
+ new Date(2005, 0 /* Jan */, 2)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different ISO week-numbering years', function() {
+ const result = isSameISOWeekYear(
+ new Date(2014, 11 /* Dec */, 28),
+ new Date(2014, 11 /* Dec */, 29)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSameISOWeekYear(
+ new Date(2003, 11 /* Dec */, 29).getTime(),
+ new Date(2005, 0 /* Jan */, 2).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('handles dates before 100 AD', function() {
+ const firstDate = new Date(0)
+ firstDate.setFullYear(5, 0 /* Jan */, 1)
+ firstDate.setHours(0, 0, 0, 0)
+ const secondDate = new Date(0)
+ secondDate.setFullYear(5, 0 /* Jan */, 2)
+ secondDate.setHours(0, 0, 0, 0)
+ const result = isSameISOWeekYear(firstDate, secondDate)
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isSameISOWeekYear(
+ new Date(NaN),
+ new Date(1989, 6 /* Jul */, 10)
+ )
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isSameISOWeekYear(
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(NaN)
+ )
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isSameISOWeekYear(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isSameISOWeekYear.bind(null), TypeError)
+ assert.throws(isSameISOWeekYear.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameMinute/benchmark.js b/date-fns/src/isSameMinute/benchmark.js
new file mode 100644
index 0000000..a9cca50
--- /dev/null
+++ b/date-fns/src/isSameMinute/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameMinute from '.'
+import moment from 'moment'
+
+suite('isSameMinute', function () {
+ benchmark('date-fns', function () {
+ return isSameMinute(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isSame(this.momentB, 'minute')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isSameMinute/index.d.ts b/date-fns/src/isSameMinute/index.d.ts
new file mode 100644
index 0000000..c26acef
--- /dev/null
+++ b/date-fns/src/isSameMinute/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameMinute } from 'date-fns'
+export default isSameMinute
diff --git a/date-fns/src/isSameMinute/index.js.flow b/date-fns/src/isSameMinute/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isSameMinute/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isSameMinute/index.ts b/date-fns/src/isSameMinute/index.ts
new file mode 100644
index 0000000..0885846
--- /dev/null
+++ b/date-fns/src/isSameMinute/index.ts
@@ -0,0 +1,37 @@
+import startOfMinute from '../startOfMinute/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSameMinute
+ * @category Minute Helpers
+ * @summary Are the given dates in the same minute?
+ *
+ * @description
+ * Are the given dates in the same minute?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @returns {Boolean} the dates are in the same minute
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 4 September 2014 06:30:00 and 4 September 2014 06:30:15
+ * // in the same minute?
+ * var result = isSameMinute(
+ * new Date(2014, 8, 4, 6, 30),
+ * new Date(2014, 8, 4, 6, 30, 15)
+ * )
+ * //=> true
+ */
+export default function isSameMinute(dirtyDateLeft: Date | number, dirtyDateRight: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeftStartOfMinute = startOfMinute(dirtyDateLeft)
+ const dateRightStartOfMinute = startOfMinute(dirtyDateRight)
+
+ return dateLeftStartOfMinute.getTime() === dateRightStartOfMinute.getTime()
+}
diff --git a/date-fns/src/isSameMinute/test.ts b/date-fns/src/isSameMinute/test.ts
new file mode 100644
index 0000000..a103ed9
--- /dev/null
+++ b/date-fns/src/isSameMinute/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameMinute from '.'
+
+describe('isSameMinute', function() {
+ it('returns true if the given dates have the same minute', function() {
+ const result = isSameMinute(
+ new Date(2014, 8 /* Sep */, 4, 6, 30),
+ new Date(2014, 8 /* Sep */, 4, 6, 30, 15)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different minutes', function() {
+ const result = isSameMinute(
+ new Date(2014, 8 /* Sep */, 4, 6, 30, 59),
+ new Date(2014, 8 /* Sep */, 4, 6, 31)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSameMinute(
+ new Date(2014, 8 /* Sep */, 4, 18, 45).getTime(),
+ new Date(2014, 8 /* Sep */, 4, 18, 45, 30).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isSameMinute(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isSameMinute(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isSameMinute(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isSameMinute.bind(null), TypeError)
+ assert.throws(isSameMinute.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameMonth/benchmark.js b/date-fns/src/isSameMonth/benchmark.js
new file mode 100644
index 0000000..dec2530
--- /dev/null
+++ b/date-fns/src/isSameMonth/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameMonth from '.'
+import moment from 'moment'
+
+suite('isSameMonth', function () {
+ benchmark('date-fns', function () {
+ return isSameMonth(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isSame(this.momentB, 'month')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isSameMonth/index.d.ts b/date-fns/src/isSameMonth/index.d.ts
new file mode 100644
index 0000000..bd0e886
--- /dev/null
+++ b/date-fns/src/isSameMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameMonth } from 'date-fns'
+export default isSameMonth
diff --git a/date-fns/src/isSameMonth/index.js.flow b/date-fns/src/isSameMonth/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isSameMonth/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isSameMonth/index.ts b/date-fns/src/isSameMonth/index.ts
new file mode 100644
index 0000000..65058b1
--- /dev/null
+++ b/date-fns/src/isSameMonth/index.ts
@@ -0,0 +1,35 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSameMonth
+ * @category Month Helpers
+ * @summary Are the given dates in the same month?
+ *
+ * @description
+ * Are the given dates in the same month?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @returns {Boolean} the dates are in the same month
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 2 September 2014 and 25 September 2014 in the same month?
+ * var result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))
+ * //=> true
+ */
+export default function isSameMonth(dirtyDateLeft: Date | number, dirtyDateRight: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+ return (
+ dateLeft.getFullYear() === dateRight.getFullYear() &&
+ dateLeft.getMonth() === dateRight.getMonth()
+ )
+}
diff --git a/date-fns/src/isSameMonth/test.ts b/date-fns/src/isSameMonth/test.ts
new file mode 100644
index 0000000..23a8152
--- /dev/null
+++ b/date-fns/src/isSameMonth/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameMonth from '.'
+
+describe('isSameMonth', function() {
+ it('returns true if the given dates have the same month (and year)', function() {
+ const result = isSameMonth(
+ new Date(2014, 8 /* Sep */, 2),
+ new Date(2014, 8 /* Sep */, 25)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different months', function() {
+ const result = isSameMonth(
+ new Date(2014, 8 /* Sep */, 2),
+ new Date(2013, 8 /* Sep */, 25)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSameMonth(
+ new Date(2014, 8 /* Sep */, 2).getTime(),
+ new Date(2014, 8 /* Sep */, 25).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isSameMonth(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isSameMonth(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isSameMonth(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isSameMonth.bind(null), TypeError)
+ assert.throws(isSameMonth.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameQuarter/benchmark.js b/date-fns/src/isSameQuarter/benchmark.js
new file mode 100644
index 0000000..ad6b2f4
--- /dev/null
+++ b/date-fns/src/isSameQuarter/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameQuarter from '.'
+import moment from 'moment'
+
+suite('isSameQuarter', function () {
+ benchmark('date-fns', function () {
+ return isSameQuarter(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isSame(this.momentB, 'quarter')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isSameQuarter/index.d.ts b/date-fns/src/isSameQuarter/index.d.ts
new file mode 100644
index 0000000..584660a
--- /dev/null
+++ b/date-fns/src/isSameQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameQuarter } from 'date-fns'
+export default isSameQuarter
diff --git a/date-fns/src/isSameQuarter/index.js.flow b/date-fns/src/isSameQuarter/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isSameQuarter/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isSameQuarter/index.ts b/date-fns/src/isSameQuarter/index.ts
new file mode 100644
index 0000000..84d84d4
--- /dev/null
+++ b/date-fns/src/isSameQuarter/index.ts
@@ -0,0 +1,33 @@
+import startOfQuarter from '../startOfQuarter/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSameQuarter
+ * @category Quarter Helpers
+ * @summary Are the given dates in the same year quarter?
+ *
+ * @description
+ * Are the given dates in the same year quarter?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @returns {Boolean} the dates are in the same quarter
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 1 January 2014 and 8 March 2014 in the same quarter?
+ * var result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))
+ * //=> true
+ */
+export default function isSameQuarter(dirtyDateLeft: Date | number, dirtyDateRight: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeftStartOfQuarter = startOfQuarter(dirtyDateLeft)
+ const dateRightStartOfQuarter = startOfQuarter(dirtyDateRight)
+
+ return dateLeftStartOfQuarter.getTime() === dateRightStartOfQuarter.getTime()
+}
diff --git a/date-fns/src/isSameQuarter/test.ts b/date-fns/src/isSameQuarter/test.ts
new file mode 100644
index 0000000..67fd437
--- /dev/null
+++ b/date-fns/src/isSameQuarter/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameQuarter from '.'
+
+describe('isSameQuarter', function() {
+ it('returns true if the given dates have the same quarter (and year)', function() {
+ const result = isSameQuarter(
+ new Date(2014, 0 /* Jan */, 1),
+ new Date(2014, 2 /* Mar */, 8)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different quarters', function() {
+ const result = isSameQuarter(
+ new Date(2014, 0 /* Jan */, 1),
+ new Date(2013, 8 /* Sep */, 25)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSameQuarter(
+ new Date(2014, 6 /* Jul */, 2).getTime(),
+ new Date(2014, 8 /* Sep */, 25).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isSameQuarter(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isSameQuarter(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isSameQuarter(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isSameQuarter.bind(null), TypeError)
+ assert.throws(isSameQuarter.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameSecond/benchmark.js b/date-fns/src/isSameSecond/benchmark.js
new file mode 100644
index 0000000..2bc1b69
--- /dev/null
+++ b/date-fns/src/isSameSecond/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameSecond from '.'
+import moment from 'moment'
+
+suite('isSameSecond', function () {
+ benchmark('date-fns', function () {
+ return isSameSecond(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isSame(this.momentB, 'second')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isSameSecond/index.d.ts b/date-fns/src/isSameSecond/index.d.ts
new file mode 100644
index 0000000..982464e
--- /dev/null
+++ b/date-fns/src/isSameSecond/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameSecond } from 'date-fns'
+export default isSameSecond
diff --git a/date-fns/src/isSameSecond/index.js.flow b/date-fns/src/isSameSecond/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isSameSecond/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isSameSecond/index.ts b/date-fns/src/isSameSecond/index.ts
new file mode 100644
index 0000000..cc53cf4
--- /dev/null
+++ b/date-fns/src/isSameSecond/index.ts
@@ -0,0 +1,37 @@
+import startOfSecond from '../startOfSecond/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSameSecond
+ * @category Second Helpers
+ * @summary Are the given dates in the same second?
+ *
+ * @description
+ * Are the given dates in the same second?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @returns {Boolean} the dates are in the same second
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500
+ * // in the same second?
+ * var result = isSameSecond(
+ * new Date(2014, 8, 4, 6, 30, 15),
+ * new Date(2014, 8, 4, 6, 30, 15, 500)
+ * )
+ * //=> true
+ */
+export default function isSameSecond(dirtyDateLeft: Date | number, dirtyDateRight: Date | number): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeftStartOfSecond = startOfSecond(dirtyDateLeft)
+ const dateRightStartOfSecond = startOfSecond(dirtyDateRight)
+
+ return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime()
+}
diff --git a/date-fns/src/isSameSecond/test.ts b/date-fns/src/isSameSecond/test.ts
new file mode 100644
index 0000000..4a23595
--- /dev/null
+++ b/date-fns/src/isSameSecond/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameSecond from '.'
+
+describe('isSameSecond', function() {
+ it('returns true if the given dates have the same second', function() {
+ const result = isSameSecond(
+ new Date(2014, 8 /* Sep */, 4, 6, 30, 15),
+ new Date(2014, 8 /* Sep */, 4, 6, 30, 15, 500)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different seconds', function() {
+ const result = isSameSecond(
+ new Date(2014, 8 /* Sep */, 4, 6, 30, 58, 999),
+ new Date(2014, 8 /* Sep */, 4, 6, 30, 59)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSameSecond(
+ new Date(2014, 8 /* Sep */, 4, 18, 45, 30).getTime(),
+ new Date(2014, 8 /* Sep */, 4, 18, 45, 30, 400).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isSameSecond(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isSameSecond(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isSameSecond(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isSameSecond.bind(null), TypeError)
+ assert.throws(isSameSecond.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameWeek/benchmark.js b/date-fns/src/isSameWeek/benchmark.js
new file mode 100644
index 0000000..55eabd5
--- /dev/null
+++ b/date-fns/src/isSameWeek/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameWeek from '.'
+import moment from 'moment'
+
+suite('isSameWeek', function () {
+ benchmark('date-fns', function () {
+ return isSameWeek(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isSame(this.momentB, 'week')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isSameWeek/index.d.ts b/date-fns/src/isSameWeek/index.d.ts
new file mode 100644
index 0000000..b27f5f6
--- /dev/null
+++ b/date-fns/src/isSameWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameWeek } from 'date-fns'
+export default isSameWeek
diff --git a/date-fns/src/isSameWeek/index.js.flow b/date-fns/src/isSameWeek/index.js.flow
new file mode 100644
index 0000000..2ba3f16
--- /dev/null
+++ b/date-fns/src/isSameWeek/index.js.flow
@@ -0,0 +1,59 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => boolean
diff --git a/date-fns/src/isSameWeek/index.ts b/date-fns/src/isSameWeek/index.ts
new file mode 100644
index 0000000..692d8b7
--- /dev/null
+++ b/date-fns/src/isSameWeek/index.ts
@@ -0,0 +1,50 @@
+import startOfWeek from '../startOfWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { WeekStartOptions, LocaleOptions } from '../types'
+
+/**
+ * @name isSameWeek
+ * @category Week Helpers
+ * @summary Are the given dates in the same week?
+ *
+ * @description
+ * Are the given dates in the same week?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Boolean} the dates are in the same week
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ *
+ * @example
+ * // Are 31 August 2014 and 4 September 2014 in the same week?
+ * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))
+ * //=> true
+ *
+ * @example
+ * // If week starts with Monday,
+ * // are 31 August 2014 and 4 September 2014 in the same week?
+ * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), {
+ * weekStartsOn: 1
+ * })
+ * //=> false
+ */
+export default function isSameWeek(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number,
+ dirtyOptions?: LocaleOptions & WeekStartOptions
+): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeftStartOfWeek = startOfWeek(dirtyDateLeft, dirtyOptions)
+ const dateRightStartOfWeek = startOfWeek(dirtyDateRight, dirtyOptions)
+
+ return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime()
+}
diff --git a/date-fns/src/isSameWeek/test.ts b/date-fns/src/isSameWeek/test.ts
new file mode 100644
index 0000000..26f5a02
--- /dev/null
+++ b/date-fns/src/isSameWeek/test.ts
@@ -0,0 +1,109 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameWeek from '.'
+
+describe('isSameWeek', function() {
+ it('returns true if the given dates have the same week', function() {
+ const result = isSameWeek(
+ new Date(2014, 7 /* Aug */, 31),
+ new Date(2014, 8 /* Sep */, 4)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different weeks', function() {
+ const result = isSameWeek(
+ new Date(2014, 7 /* Aug */, 30),
+ new Date(2014, 8 /* Sep */, 4)
+ )
+ assert(result === false)
+ })
+
+ it('allows to specify which day is the first day of the week', function() {
+ const result = isSameWeek(
+ new Date(2014, 7 /* Aug */, 31),
+ new Date(2014, 8 /* Sep */, 4),
+ { weekStartsOn: 1 }
+ )
+ assert(result === false)
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function() {
+ const result = isSameWeek(
+ new Date(2014, 7 /* Aug */, 31),
+ new Date(2014, 8 /* Sep */, 4),
+ {
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 1 }
+ }
+ }
+ )
+ assert(result === false)
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ const result = isSameWeek(
+ new Date(2014, 7 /* Aug */, 31),
+ new Date(2014, 8 /* Sep */, 4),
+ {
+ weekStartsOn: 1,
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 0 }
+ }
+ }
+ )
+ assert(result === false)
+ })
+
+ it('implicitly converts options', function() {
+ const result = isSameWeek(
+ new Date(2014, 7 /* Aug */, 31),
+ new Date(2014, 8 /* Sep */, 4),
+ // @ts-expect-error
+ { weekStartsOn: '1' }
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSameWeek(
+ new Date(2014, 7 /* Aug */, 31).getTime(),
+ new Date(2014, 8 /* Sep */, 4).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function() {
+ const result = isSameWeek(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function() {
+ const result = isSameWeek(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function() {
+ const result = isSameWeek(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ const block = isSameWeek.bind(
+ null,
+ new Date(2014, 7 /* Aug */, 31),
+ new Date(2014, 8 /* Sep */, 4),
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(isSameWeek.bind(null), TypeError)
+ assert.throws(isSameWeek.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSameYear/benchmark.js b/date-fns/src/isSameYear/benchmark.js
new file mode 100644
index 0000000..751ce3c
--- /dev/null
+++ b/date-fns/src/isSameYear/benchmark.js
@@ -0,0 +1,23 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSameYear from '.'
+import moment from 'moment'
+
+suite('isSameYear', function () {
+ benchmark('date-fns', function () {
+ return isSameYear(this.dateA, this.dateB)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isSame(this.momentB, 'year')
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isSameYear/index.d.ts b/date-fns/src/isSameYear/index.d.ts
new file mode 100644
index 0000000..c729e19
--- /dev/null
+++ b/date-fns/src/isSameYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSameYear } from 'date-fns'
+export default isSameYear
diff --git a/date-fns/src/isSameYear/index.js.flow b/date-fns/src/isSameYear/index.js.flow
new file mode 100644
index 0000000..55ea578
--- /dev/null
+++ b/date-fns/src/isSameYear/index.js.flow
@@ -0,0 +1,55 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateLeft: Date | number,
+ dateRight: Date | number
+) => boolean
diff --git a/date-fns/src/isSameYear/index.ts b/date-fns/src/isSameYear/index.ts
new file mode 100644
index 0000000..8c0f4e5
--- /dev/null
+++ b/date-fns/src/isSameYear/index.ts
@@ -0,0 +1,35 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSameYear
+ * @category Year Helpers
+ * @summary Are the given dates in the same year?
+ *
+ * @description
+ * Are the given dates in the same year?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} dateLeft - the first date to check
+ * @param {Date|Number} dateRight - the second date to check
+ * @returns {Boolean} the dates are in the same year
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Are 2 September 2014 and 25 September 2014 in the same year?
+ * var result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))
+ * //=> true
+ */
+export default function isSameYear(
+ dirtyDateLeft: Date | number,
+ dirtyDateRight: Date | number
+): boolean {
+ requiredArgs(2, arguments)
+
+ const dateLeft = toDate(dirtyDateLeft)
+ const dateRight = toDate(dirtyDateRight)
+ return dateLeft.getFullYear() === dateRight.getFullYear()
+}
diff --git a/date-fns/src/isSameYear/test.ts b/date-fns/src/isSameYear/test.ts
new file mode 100644
index 0000000..1348827
--- /dev/null
+++ b/date-fns/src/isSameYear/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSameYear from '.'
+
+describe('isSameYear', function () {
+ it('returns true if the given dates have the same year', function () {
+ const result = isSameYear(
+ new Date(2014, 8 /* Sep */, 2),
+ new Date(2014, 8 /* Sep */, 25)
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the given dates have different years', function () {
+ const result = isSameYear(
+ new Date(2014, 8 /* Sep */, 2),
+ new Date(2013, 8 /* Sep */, 25)
+ )
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function () {
+ const result = isSameYear(
+ new Date(2014, 8 /* Sep */, 2).getTime(),
+ new Date(2014, 8 /* Sep */, 25).getTime()
+ )
+ assert(result === true)
+ })
+
+ it('returns false if the first date is `Invalid Date`', function () {
+ const result = isSameYear(new Date(NaN), new Date(1989, 6 /* Jul */, 10))
+ assert(result === false)
+ })
+
+ it('returns false if the second date is `Invalid Date`', function () {
+ const result = isSameYear(new Date(1987, 1 /* Feb */, 11), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('returns false if the both dates are `Invalid Date`', function () {
+ const result = isSameYear(new Date(NaN), new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(isSameYear.bind(null), TypeError)
+ assert.throws(isSameYear.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isSaturday/benchmark.js b/date-fns/src/isSaturday/benchmark.js
new file mode 100644
index 0000000..336f2fc
--- /dev/null
+++ b/date-fns/src/isSaturday/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSaturday from '.'
+
+suite('isSaturday', function () {
+ benchmark('date-fns', function () {
+ return isSaturday(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isSaturday/index.d.ts b/date-fns/src/isSaturday/index.d.ts
new file mode 100644
index 0000000..ac5ccb3
--- /dev/null
+++ b/date-fns/src/isSaturday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSaturday } from 'date-fns'
+export default isSaturday
diff --git a/date-fns/src/isSaturday/index.js.flow b/date-fns/src/isSaturday/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isSaturday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isSaturday/index.ts b/date-fns/src/isSaturday/index.ts
new file mode 100644
index 0000000..5195c40
--- /dev/null
+++ b/date-fns/src/isSaturday/index.ts
@@ -0,0 +1,29 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSaturday
+ * @category Weekday Helpers
+ * @summary Is the given date Saturday?
+ *
+ * @description
+ * Is the given date Saturday?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is Saturday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 27 September 2014 Saturday?
+ * var result = isSaturday(new Date(2014, 8, 27))
+ * //=> true
+ */
+export default function isSaturday(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(dirtyDate).getDay() === 6
+}
diff --git a/date-fns/src/isSaturday/test.ts b/date-fns/src/isSaturday/test.ts
new file mode 100644
index 0000000..223d775
--- /dev/null
+++ b/date-fns/src/isSaturday/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSaturday from '.'
+
+describe('isSaturday', function() {
+ it('returns true if the given date is Saturday', function() {
+ const result = isSaturday(new Date(2014, 8 /* Sep */, 27))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not Saturday', function() {
+ const result = isSaturday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSaturday(new Date(2014, 1 /* Feb */, 15).getTime())
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isSaturday(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isSaturday.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isSunday/benchmark.js b/date-fns/src/isSunday/benchmark.js
new file mode 100644
index 0000000..9b65eb2
--- /dev/null
+++ b/date-fns/src/isSunday/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isSunday from '.'
+
+suite('isSunday', function () {
+ benchmark('date-fns', function () {
+ return isSunday(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isSunday/index.d.ts b/date-fns/src/isSunday/index.d.ts
new file mode 100644
index 0000000..5830086
--- /dev/null
+++ b/date-fns/src/isSunday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isSunday } from 'date-fns'
+export default isSunday
diff --git a/date-fns/src/isSunday/index.js.flow b/date-fns/src/isSunday/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isSunday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isSunday/index.ts b/date-fns/src/isSunday/index.ts
new file mode 100644
index 0000000..cc3eba7
--- /dev/null
+++ b/date-fns/src/isSunday/index.ts
@@ -0,0 +1,29 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isSunday
+ * @category Weekday Helpers
+ * @summary Is the given date Sunday?
+ *
+ * @description
+ * Is the given date Sunday?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is Sunday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 21 September 2014 Sunday?
+ * var result = isSunday(new Date(2014, 8, 21))
+ * //=> true
+ */
+export default function isSunday(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(dirtyDate).getDay() === 0
+}
diff --git a/date-fns/src/isSunday/test.ts b/date-fns/src/isSunday/test.ts
new file mode 100644
index 0000000..8e68e20
--- /dev/null
+++ b/date-fns/src/isSunday/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isSunday from '.'
+
+describe('isSunday', function() {
+ it('returns true if the given date is Sunday', function() {
+ const result = isSunday(new Date(2014, 8 /* Sep */, 21))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not Sunday', function() {
+ const result = isSunday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isSunday(new Date(2014, 1 /* Feb */, 9).getTime())
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isSunday(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isSunday.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isThisHour/benchmark.js b/date-fns/src/isThisHour/benchmark.js
new file mode 100644
index 0000000..6f52e52
--- /dev/null
+++ b/date-fns/src/isThisHour/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+
+/* global suite, benchmark */
+
+import isThisHour from '.'
+
+suite(
+ 'isThisHour',
+ () => {
+ benchmark('date-fns', function() {
+ return isThisHour(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isThisHour/index.d.ts b/date-fns/src/isThisHour/index.d.ts
new file mode 100644
index 0000000..1009e42
--- /dev/null
+++ b/date-fns/src/isThisHour/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThisHour } from 'date-fns'
+export default isThisHour
diff --git a/date-fns/src/isThisHour/index.js.flow b/date-fns/src/isThisHour/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isThisHour/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isThisHour/index.ts b/date-fns/src/isThisHour/index.ts
new file mode 100644
index 0000000..976be6d
--- /dev/null
+++ b/date-fns/src/isThisHour/index.ts
@@ -0,0 +1,34 @@
+import isSameHour from '../isSameHour/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isThisHour
+ * @category Hour Helpers
+ * @summary Is the given date in the same hour as the current date?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the same hour as the current date?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in this hour
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If now is 25 September 2014 18:30:15.500,
+ * // is 25 September 2014 18:00:00 in this hour?
+ * var result = isThisHour(new Date(2014, 8, 25, 18))
+ * //=> true
+ */
+export default function isThisHour(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameHour(Date.now(), dirtyDate)
+}
diff --git a/date-fns/src/isThisHour/test.ts b/date-fns/src/isThisHour/test.ts
new file mode 100644
index 0000000..ec82710
--- /dev/null
+++ b/date-fns/src/isThisHour/test.ts
@@ -0,0 +1,39 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isThisHour from '.'
+
+describe('isThisHour', () => {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(
+ new Date(2014, 8 /* Sep */, 25, 18, 30, 15, 500).getTime()
+ )
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date and the current date have the same hour', () => {
+ const date = new Date(2014, 8 /* Sep */, 25, 18)
+ assert(isThisHour(date) === true)
+ })
+
+ it('returns false if the given date and the current date have different hours', () => {
+ const date = new Date(2014, 8 /* Sep */, 25, 19)
+ assert(isThisHour(date) === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2014, 8 /* Sep */, 25, 18, 45).getTime()
+ assert(isThisHour(date) === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ // @ts-expect-error
+ assert.throws(isThisHour.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isThisISOWeek/benchmark.js b/date-fns/src/isThisISOWeek/benchmark.js
new file mode 100644
index 0000000..d036d61
--- /dev/null
+++ b/date-fns/src/isThisISOWeek/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+
+/* global suite, benchmark */
+
+import isThisISOWeek from '.'
+
+suite(
+ 'isThisISOWeek',
+ () => {
+ benchmark('date-fns', function() {
+ return isThisISOWeek(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isThisISOWeek/index.d.ts b/date-fns/src/isThisISOWeek/index.d.ts
new file mode 100644
index 0000000..4fb42e8
--- /dev/null
+++ b/date-fns/src/isThisISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThisISOWeek } from 'date-fns'
+export default isThisISOWeek
diff --git a/date-fns/src/isThisISOWeek/index.js.flow b/date-fns/src/isThisISOWeek/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isThisISOWeek/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isThisISOWeek/index.ts b/date-fns/src/isThisISOWeek/index.ts
new file mode 100644
index 0000000..6841b50
--- /dev/null
+++ b/date-fns/src/isThisISOWeek/index.ts
@@ -0,0 +1,36 @@
+import isSameISOWeek from '../isSameISOWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isThisISOWeek
+ * @category ISO Week Helpers
+ * @summary Is the given date in the same ISO week as the current date?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the same ISO week as the current date?
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in this ISO week
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If today is 25 September 2014, is 22 September 2014 in this ISO week?
+ * var result = isThisISOWeek(new Date(2014, 8, 22))
+ * //=> true
+ */
+
+export default function isThisISOWeek(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameISOWeek(dirtyDate, Date.now())
+}
diff --git a/date-fns/src/isThisISOWeek/test.ts b/date-fns/src/isThisISOWeek/test.ts
new file mode 100644
index 0000000..0fe319e
--- /dev/null
+++ b/date-fns/src/isThisISOWeek/test.ts
@@ -0,0 +1,36 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isThisISOWeek from '.'
+
+describe('isSameISOWeek', () => {
+ let clock
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Sep */, 25).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date and the current date have the same ISO week', () => {
+ const date = new Date(2014, 8 /* Sep */, 22)
+ assert(isThisISOWeek(date) === true)
+ })
+
+ it('returns false if the given date and the current date have different ISO weeks', () => {
+ const date = new Date(2014, 8 /* Sep */, 21)
+ assert(isThisISOWeek(date) === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2014, 8 /* Sep */, 29).getTime()
+ assert(isThisISOWeek(date) === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isThisISOWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isThisMinute/benchmark.js b/date-fns/src/isThisMinute/benchmark.js
new file mode 100644
index 0000000..9801f3a
--- /dev/null
+++ b/date-fns/src/isThisMinute/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+
+/* global suite, benchmark */
+
+import isThisMinute from '.'
+
+suite(
+ 'isThisMinute',
+ () => {
+ benchmark('date-fns', function() {
+ return isThisMinute(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isThisMinute/index.d.ts b/date-fns/src/isThisMinute/index.d.ts
new file mode 100644
index 0000000..ca1430d
--- /dev/null
+++ b/date-fns/src/isThisMinute/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThisMinute } from 'date-fns'
+export default isThisMinute
diff --git a/date-fns/src/isThisMinute/index.js.flow b/date-fns/src/isThisMinute/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isThisMinute/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isThisMinute/index.ts b/date-fns/src/isThisMinute/index.ts
new file mode 100644
index 0000000..0606945
--- /dev/null
+++ b/date-fns/src/isThisMinute/index.ts
@@ -0,0 +1,35 @@
+import isSameMinute from '../isSameMinute/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isThisMinute
+ * @category Minute Helpers
+ * @summary Is the given date in the same minute as the current date?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the same minute as the current date?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in this minute
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If now is 25 September 2014 18:30:15.500,
+ * // is 25 September 2014 18:30:00 in this minute?
+ * var result = isThisMinute(new Date(2014, 8, 25, 18, 30))
+ * //=> true
+ */
+
+export default function isThisMinute(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameMinute(Date.now(), dirtyDate)
+}
diff --git a/date-fns/src/isThisMinute/test.ts b/date-fns/src/isThisMinute/test.ts
new file mode 100644
index 0000000..e395020
--- /dev/null
+++ b/date-fns/src/isThisMinute/test.ts
@@ -0,0 +1,39 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isThisMinute from '.'
+
+describe('isThisMinute', () => {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(
+ new Date(2014, 8 /* Sep */, 25, 18, 30, 15, 500).getTime()
+ )
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date and the current date have the same minute', () => {
+ const date = new Date(2014, 8 /* Sep */, 25, 18, 30)
+ assert(isThisMinute(date) === true)
+ })
+
+ it('returns false if the given date and the current date have different minutes', () => {
+ const date = new Date(2014, 8 /* Sep */, 25, 18, 31)
+ assert(isThisMinute(date) === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2014, 8 /* Sep */, 25, 18, 30, 30).getTime()
+ assert(isThisMinute(date) === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ // @ts-expect-error
+ assert.throws(isThisMinute.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isThisMonth/benchmark.js b/date-fns/src/isThisMonth/benchmark.js
new file mode 100644
index 0000000..d3deed0
--- /dev/null
+++ b/date-fns/src/isThisMonth/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+
+/* global suite, benchmark */
+
+import isThisMonth from '.'
+
+suite(
+ 'isThisMonth',
+ () => {
+ benchmark('date-fns', function() {
+ return isThisMonth(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isThisMonth/index.d.ts b/date-fns/src/isThisMonth/index.d.ts
new file mode 100644
index 0000000..eaf72fd
--- /dev/null
+++ b/date-fns/src/isThisMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThisMonth } from 'date-fns'
+export default isThisMonth
diff --git a/date-fns/src/isThisMonth/index.js.flow b/date-fns/src/isThisMonth/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isThisMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isThisMonth/index.ts b/date-fns/src/isThisMonth/index.ts
new file mode 100644
index 0000000..3079dc1
--- /dev/null
+++ b/date-fns/src/isThisMonth/index.ts
@@ -0,0 +1,34 @@
+import isSameMonth from '../isSameMonth/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isThisMonth
+ * @category Month Helpers
+ * @summary Is the given date in the same month as the current date?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the same month as the current date?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in this month
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If today is 25 September 2014, is 15 September 2014 in this month?
+ * var result = isThisMonth(new Date(2014, 8, 15))
+ * //=> true
+ */
+
+export default function isThisMonth(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameMonth(Date.now(), dirtyDate)
+}
diff --git a/date-fns/src/isThisMonth/test.ts b/date-fns/src/isThisMonth/test.ts
new file mode 100644
index 0000000..4c9d651
--- /dev/null
+++ b/date-fns/src/isThisMonth/test.ts
@@ -0,0 +1,37 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isThisMonth from '.'
+
+describe('isThisMonth', () => {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Sep */, 25).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date and the current date have the same month (and year)', () => {
+ const date = new Date(2014, 8 /* Sep */, 15)
+ assert(isThisMonth(date) === true)
+ })
+
+ it('returns false if the given date and the current date have different months', () => {
+ const date = new Date(2013, 7 /* Aug */, 31)
+ assert(isThisMonth(date) === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2014, 8 /* Sep */, 30).getTime()
+ assert(isThisMonth(date) === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ // @ts-expect-error
+ assert.throws(isThisMonth.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isThisQuarter/benchmark.js b/date-fns/src/isThisQuarter/benchmark.js
new file mode 100644
index 0000000..2c0db5c
--- /dev/null
+++ b/date-fns/src/isThisQuarter/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+
+/* global suite, benchmark */
+
+import isThisQuarter from '.'
+
+suite(
+ 'isThisQuarter',
+ () => {
+ benchmark('date-fns', function() {
+ return isThisQuarter(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isThisQuarter/index.d.ts b/date-fns/src/isThisQuarter/index.d.ts
new file mode 100644
index 0000000..8c25708
--- /dev/null
+++ b/date-fns/src/isThisQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThisQuarter } from 'date-fns'
+export default isThisQuarter
diff --git a/date-fns/src/isThisQuarter/index.js.flow b/date-fns/src/isThisQuarter/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isThisQuarter/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isThisQuarter/index.ts b/date-fns/src/isThisQuarter/index.ts
new file mode 100644
index 0000000..2d22060
--- /dev/null
+++ b/date-fns/src/isThisQuarter/index.ts
@@ -0,0 +1,33 @@
+import isSameQuarter from '../isSameQuarter/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isThisQuarter
+ * @category Quarter Helpers
+ * @summary Is the given date in the same quarter as the current date?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the same quarter as the current date?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in this quarter
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If today is 25 September 2014, is 2 July 2014 in this quarter?
+ * var result = isThisQuarter(new Date(2014, 6, 2))
+ * //=> true
+ */
+export default function isThisQuarter(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameQuarter(Date.now(), dirtyDate)
+}
diff --git a/date-fns/src/isThisQuarter/test.ts b/date-fns/src/isThisQuarter/test.ts
new file mode 100644
index 0000000..1a4b77f
--- /dev/null
+++ b/date-fns/src/isThisQuarter/test.ts
@@ -0,0 +1,37 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isThisQuarter from '.'
+
+describe('isThisQuarter', function() {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(function() {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Sep */, 25).getTime())
+ })
+
+ afterEach(function() {
+ clock.restore()
+ })
+
+ it('returns true if the given date and the current date have the same quarter (and year)', function() {
+ const date = new Date(2014, 6 /* Jul */, 2)
+ assert(isThisQuarter(date) === true)
+ })
+
+ it('returns false if the given date and the current date have different quarters', function() {
+ const date = new Date(2014, 1 /* Feb */, 11)
+ assert(isThisQuarter(date) === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 6 /* Jul */, 2).getTime()
+ assert(isThisQuarter(date) === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ // @ts-expect-error
+ assert.throws(isThisQuarter.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isThisSecond/benchmark.js b/date-fns/src/isThisSecond/benchmark.js
new file mode 100644
index 0000000..4fd274b
--- /dev/null
+++ b/date-fns/src/isThisSecond/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+
+/* global suite, benchmark */
+
+import isThisSecond from '.'
+
+suite(
+ 'isThisSecond',
+ () => {
+ benchmark('date-fns', function() {
+ return isThisSecond(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isThisSecond/index.d.ts b/date-fns/src/isThisSecond/index.d.ts
new file mode 100644
index 0000000..9d45da1
--- /dev/null
+++ b/date-fns/src/isThisSecond/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThisSecond } from 'date-fns'
+export default isThisSecond
diff --git a/date-fns/src/isThisSecond/index.js.flow b/date-fns/src/isThisSecond/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isThisSecond/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isThisSecond/index.ts b/date-fns/src/isThisSecond/index.ts
new file mode 100644
index 0000000..61488c6
--- /dev/null
+++ b/date-fns/src/isThisSecond/index.ts
@@ -0,0 +1,34 @@
+import isSameSecond from '../isSameSecond/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isThisSecond
+ * @category Second Helpers
+ * @summary Is the given date in the same second as the current date?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the same second as the current date?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in this second
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If now is 25 September 2014 18:30:15.500,
+ * // is 25 September 2014 18:30:15.000 in this second?
+ * var result = isThisSecond(new Date(2014, 8, 25, 18, 30, 15))
+ * //=> true
+ */
+export default function isThisSecond(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameSecond(Date.now(), dirtyDate)
+}
diff --git a/date-fns/src/isThisSecond/test.ts b/date-fns/src/isThisSecond/test.ts
new file mode 100644
index 0000000..125542a
--- /dev/null
+++ b/date-fns/src/isThisSecond/test.ts
@@ -0,0 +1,39 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isThisSecond from '.'
+
+describe('isThisSecond', () => {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(
+ new Date(2014, 8 /* Sep */, 25, 18, 30, 15, 500).getTime()
+ )
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date and the current date have the same second', () => {
+ const date = new Date(2014, 8 /* Sep */, 25, 18, 30, 15)
+ assert(isThisSecond(date) === true)
+ })
+
+ it('returns false if the given date and the current date have different seconds', () => {
+ const date = new Date(2014, 8 /* Sep */, 25, 18, 30, 16)
+ assert(isThisSecond(date) === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2014, 8 /* Sep */, 25, 18, 30, 15, 250).getTime()
+ assert(isThisSecond(date) === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ // @ts-expect-error
+ assert.throws(isThisSecond.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isThisWeek/benchmark.js b/date-fns/src/isThisWeek/benchmark.js
new file mode 100644
index 0000000..ac9676f
--- /dev/null
+++ b/date-fns/src/isThisWeek/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+
+/* global suite, benchmark */
+
+import isThisWeek from '.'
+
+suite(
+ 'isThisWeek',
+ () => {
+ benchmark('date-fns', function() {
+ return isThisWeek(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isThisWeek/index.d.ts b/date-fns/src/isThisWeek/index.d.ts
new file mode 100644
index 0000000..b22ba53
--- /dev/null
+++ b/date-fns/src/isThisWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThisWeek } from 'date-fns'
+export default isThisWeek
diff --git a/date-fns/src/isThisWeek/index.js.flow b/date-fns/src/isThisWeek/index.js.flow
new file mode 100644
index 0000000..579c74a
--- /dev/null
+++ b/date-fns/src/isThisWeek/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => boolean
diff --git a/date-fns/src/isThisWeek/index.ts b/date-fns/src/isThisWeek/index.ts
new file mode 100644
index 0000000..4d08327
--- /dev/null
+++ b/date-fns/src/isThisWeek/index.ts
@@ -0,0 +1,48 @@
+import isSameWeek from '../isSameWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { LocaleOptions, WeekStartOptions } from '../types'
+
+/**
+ * @name isThisWeek
+ * @category Week Helpers
+ * @summary Is the given date in the same week as the current date?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the same week as the current date?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @param {Object} [options] - the object with options
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Boolean} the date is in this week
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ *
+ * @example
+ * // If today is 25 September 2014, is 21 September 2014 in this week?
+ * var result = isThisWeek(new Date(2014, 8, 21))
+ * //=> true
+ *
+ * @example
+ * // If today is 25 September 2014 and week starts with Monday
+ * // is 21 September 2014 in this week?
+ * var result = isThisWeek(new Date(2014, 8, 21), { weekStartsOn: 1 })
+ * //=> false
+ */
+
+export default function isThisWeek(
+ dirtyDate: Date | number,
+ options?: LocaleOptions & WeekStartOptions
+): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameWeek(dirtyDate, Date.now(), options)
+}
diff --git a/date-fns/src/isThisWeek/test.ts b/date-fns/src/isThisWeek/test.ts
new file mode 100644
index 0000000..e6e323d
--- /dev/null
+++ b/date-fns/src/isThisWeek/test.ts
@@ -0,0 +1,42 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isThisWeek from '.'
+
+describe('isThisWeek', () => {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Sep */, 25).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date and the current date have the same week', () => {
+ const date = new Date(2014, 8 /* Sep */, 21)
+ assert(isThisWeek(date) === true)
+ })
+
+ it('returns false if the given date and the current date have different weeks', () => {
+ const date = new Date(2014, 8 /* Sep */, 29)
+ assert(isThisWeek(date) === false)
+ })
+
+ it('allows to specify which day is the first day of the week', () => {
+ const date = new Date(2014, 8 /* Sep */, 28)
+ assert(isThisWeek(date, { weekStartsOn: 1 }) === true)
+ })
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2014, 8 /* Sep */, 21).getTime()
+ assert(isThisWeek(date) === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ // @ts-expect-error
+ assert.throws(isThisWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isThisYear/benchmark.js b/date-fns/src/isThisYear/benchmark.js
new file mode 100644
index 0000000..7dab3f6
--- /dev/null
+++ b/date-fns/src/isThisYear/benchmark.js
@@ -0,0 +1,19 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isThisYear from '.'
+
+suite(
+ 'isThisYear',
+ () => {
+ benchmark('date-fns', function() {
+ return isThisYear(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isThisYear/index.d.ts b/date-fns/src/isThisYear/index.d.ts
new file mode 100644
index 0000000..b95f1be
--- /dev/null
+++ b/date-fns/src/isThisYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThisYear } from 'date-fns'
+export default isThisYear
diff --git a/date-fns/src/isThisYear/index.js.flow b/date-fns/src/isThisYear/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isThisYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isThisYear/index.ts b/date-fns/src/isThisYear/index.ts
new file mode 100644
index 0000000..bcab724
--- /dev/null
+++ b/date-fns/src/isThisYear/index.ts
@@ -0,0 +1,33 @@
+import isSameYear from '../isSameYear/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isThisYear
+ * @category Year Helpers
+ * @summary Is the given date in the same year as the current date?
+ * @pure false
+ *
+ * @description
+ * Is the given date in the same year as the current date?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is in this year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If today is 25 September 2014, is 2 July 2014 in this year?
+ * var result = isThisYear(new Date(2014, 6, 2))
+ * //=> true
+ */
+export default function isThisYear(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameYear(dirtyDate, Date.now())
+}
diff --git a/date-fns/src/isThisYear/test.ts b/date-fns/src/isThisYear/test.ts
new file mode 100644
index 0000000..8e9bc79
--- /dev/null
+++ b/date-fns/src/isThisYear/test.ts
@@ -0,0 +1,37 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isThisYear from '.'
+
+describe('isThisYear', () => {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Sep */, 25).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date and the current date have the same year', () => {
+ const date = new Date(2014, 6 /* Jul */, 2)
+ assert(isThisYear(date) === true)
+ })
+
+ it('returns false if the given date and the current date have different years', () => {
+ const date = new Date(2015, 6 /* Jul */, 2)
+ assert(isThisYear(date) === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2014, 6 /* Jul */, 2).getTime()
+ assert(isThisYear(date) === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ // @ts-expect-error
+ assert.throws(isThisYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isThursday/benchmark.js b/date-fns/src/isThursday/benchmark.js
new file mode 100644
index 0000000..0f86b64
--- /dev/null
+++ b/date-fns/src/isThursday/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isThursday from '.'
+
+suite('isThursday', function () {
+ benchmark('date-fns', function () {
+ return isThursday(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isThursday/index.d.ts b/date-fns/src/isThursday/index.d.ts
new file mode 100644
index 0000000..2f25237
--- /dev/null
+++ b/date-fns/src/isThursday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isThursday } from 'date-fns'
+export default isThursday
diff --git a/date-fns/src/isThursday/index.js.flow b/date-fns/src/isThursday/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isThursday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isThursday/index.ts b/date-fns/src/isThursday/index.ts
new file mode 100644
index 0000000..bb35618
--- /dev/null
+++ b/date-fns/src/isThursday/index.ts
@@ -0,0 +1,29 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isThursday
+ * @category Weekday Helpers
+ * @summary Is the given date Thursday?
+ *
+ * @description
+ * Is the given date Thursday?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is Thursday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 25 September 2014 Thursday?
+ * var result = isThursday(new Date(2014, 8, 25))
+ * //=> true
+ */
+export default function isThursday(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(dirtyDate).getDay() === 4
+}
diff --git a/date-fns/src/isThursday/test.ts b/date-fns/src/isThursday/test.ts
new file mode 100644
index 0000000..a51bf0f
--- /dev/null
+++ b/date-fns/src/isThursday/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isThursday from '.'
+
+describe('isThursday', function() {
+ it('returns true if the given date is Thursday', function() {
+ const result = isThursday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not Thursday', function() {
+ const result = isThursday(new Date(2014, 8 /* Sep */, 24))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isThursday(new Date(2014, 1 /* Feb */, 13).getTime())
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isThursday(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isThursday.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isToday/benchmark.js b/date-fns/src/isToday/benchmark.js
new file mode 100644
index 0000000..e31d41a
--- /dev/null
+++ b/date-fns/src/isToday/benchmark.js
@@ -0,0 +1,19 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isToday from '.'
+
+suite(
+ 'isToday',
+ () => {
+ benchmark('date-fns', function() {
+ return isToday(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isToday/index.d.ts b/date-fns/src/isToday/index.d.ts
new file mode 100644
index 0000000..ed0cd15
--- /dev/null
+++ b/date-fns/src/isToday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isToday } from 'date-fns'
+export default isToday
diff --git a/date-fns/src/isToday/index.js.flow b/date-fns/src/isToday/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isToday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isToday/index.ts b/date-fns/src/isToday/index.ts
new file mode 100644
index 0000000..91514d1
--- /dev/null
+++ b/date-fns/src/isToday/index.ts
@@ -0,0 +1,33 @@
+import isSameDay from '../isSameDay/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isToday
+ * @category Day Helpers
+ * @summary Is the given date today?
+ * @pure false
+ *
+ * @description
+ * Is the given date today?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is today
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If today is 6 October 2014, is 6 October 14:00:00 today?
+ * var result = isToday(new Date(2014, 9, 6, 14, 0))
+ * //=> true
+ */
+export default function isToday(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameDay(dirtyDate, Date.now())
+}
diff --git a/date-fns/src/isToday/test.ts b/date-fns/src/isToday/test.ts
new file mode 100644
index 0000000..c68191f
--- /dev/null
+++ b/date-fns/src/isToday/test.ts
@@ -0,0 +1,37 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isToday from '.'
+
+describe('isToday', function() {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(function() {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Sep */, 25).getTime())
+ })
+
+ afterEach(function() {
+ clock.restore()
+ })
+
+ it('returns true if the given date is today', function() {
+ const result = isToday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not today', function() {
+ const result = isToday(new Date(2014, 8 /* Sep */, 26))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isToday(new Date(2014, 8 /* Sep */, 25).getTime())
+ assert(result === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ // @ts-expect-error
+ assert.throws(isToday.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isTomorrow/benchmark.js b/date-fns/src/isTomorrow/benchmark.js
new file mode 100644
index 0000000..b15319b
--- /dev/null
+++ b/date-fns/src/isTomorrow/benchmark.js
@@ -0,0 +1,19 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isTomorrow from '.'
+
+suite(
+ 'isTomorrow',
+ () => {
+ benchmark('date-fns', function() {
+ return isTomorrow(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isTomorrow/index.d.ts b/date-fns/src/isTomorrow/index.d.ts
new file mode 100644
index 0000000..b9c9115
--- /dev/null
+++ b/date-fns/src/isTomorrow/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isTomorrow } from 'date-fns'
+export default isTomorrow
diff --git a/date-fns/src/isTomorrow/index.js.flow b/date-fns/src/isTomorrow/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isTomorrow/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isTomorrow/index.ts b/date-fns/src/isTomorrow/index.ts
new file mode 100644
index 0000000..e7169c9
--- /dev/null
+++ b/date-fns/src/isTomorrow/index.ts
@@ -0,0 +1,34 @@
+import addDays from '../addDays/index'
+import isSameDay from '../isSameDay/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isTomorrow
+ * @category Day Helpers
+ * @summary Is the given date tomorrow?
+ * @pure false
+ *
+ * @description
+ * Is the given date tomorrow?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is tomorrow
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If today is 6 October 2014, is 7 October 14:00:00 tomorrow?
+ * var result = isTomorrow(new Date(2014, 9, 7, 14, 0))
+ * //=> true
+ */
+export default function isTomorrow(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameDay(dirtyDate, addDays(Date.now(), 1))
+}
diff --git a/date-fns/src/isTomorrow/test.ts b/date-fns/src/isTomorrow/test.ts
new file mode 100644
index 0000000..b442c8a
--- /dev/null
+++ b/date-fns/src/isTomorrow/test.ts
@@ -0,0 +1,37 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import isTomorrow from '.'
+
+describe('isTomorrow', () => {
+ let clock: sinon.SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Aug */, 25).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date is tomorrow', () => {
+ const result = isTomorrow(new Date(2014, 8 /* Sep */, 26))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not tomorrow', () => {
+ const result = isTomorrow(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const result = isTomorrow(new Date(2014, 8 /* Sep */, 26).getTime())
+ assert(result === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ // @ts-expect-error
+ assert.throws(isTomorrow.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isTuesday/benchmark.js b/date-fns/src/isTuesday/benchmark.js
new file mode 100644
index 0000000..344e24b
--- /dev/null
+++ b/date-fns/src/isTuesday/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isTuesday from '.'
+
+suite('isTuesday', function () {
+ benchmark('date-fns', function () {
+ return isTuesday(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isTuesday/index.d.ts b/date-fns/src/isTuesday/index.d.ts
new file mode 100644
index 0000000..87c7ceb
--- /dev/null
+++ b/date-fns/src/isTuesday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isTuesday } from 'date-fns'
+export default isTuesday
diff --git a/date-fns/src/isTuesday/index.js.flow b/date-fns/src/isTuesday/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isTuesday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isTuesday/index.ts b/date-fns/src/isTuesday/index.ts
new file mode 100644
index 0000000..7b534ff
--- /dev/null
+++ b/date-fns/src/isTuesday/index.ts
@@ -0,0 +1,29 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isTuesday
+ * @category Weekday Helpers
+ * @summary Is the given date Tuesday?
+ *
+ * @description
+ * Is the given date Tuesday?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is Tuesday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 23 September 2014 Tuesday?
+ * var result = isTuesday(new Date(2014, 8, 23))
+ * //=> true
+ */
+export default function isTuesday(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(dirtyDate).getDay() === 2
+}
diff --git a/date-fns/src/isTuesday/test.ts b/date-fns/src/isTuesday/test.ts
new file mode 100644
index 0000000..45335a5
--- /dev/null
+++ b/date-fns/src/isTuesday/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isTuesday from '.'
+
+describe('isTuesday', function() {
+ it('returns true if the given date is Tuesday', function() {
+ const result = isTuesday(new Date(2014, 8 /* Sep */, 23))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not Tuesday', function() {
+ const result = isTuesday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isTuesday(new Date(2014, 1 /* Feb */, 11).getTime())
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isTuesday(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isTuesday.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isValid/benchmark.js b/date-fns/src/isValid/benchmark.js
new file mode 100644
index 0000000..c935bc8
--- /dev/null
+++ b/date-fns/src/isValid/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isValid from '.'
+import moment from 'moment'
+
+suite('isValid', function () {
+ benchmark('date-fns', function () {
+ return isValid(this.invalidDate)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.invalidMoment.isValid()
+ })
+}, {
+ setup: function () {
+ this.invalidDate = new Date(NaN)
+ this.invalidMoment = moment(new Date(NaN))
+ }
+})
diff --git a/date-fns/src/isValid/index.d.ts b/date-fns/src/isValid/index.d.ts
new file mode 100644
index 0000000..26ad11d
--- /dev/null
+++ b/date-fns/src/isValid/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isValid } from 'date-fns'
+export default isValid
diff --git a/date-fns/src/isValid/index.js b/date-fns/src/isValid/index.js
new file mode 100644
index 0000000..854c97e
--- /dev/null
+++ b/date-fns/src/isValid/index.js
@@ -0,0 +1,66 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isValid
+ * @category Common Helpers
+ * @summary Is the given date valid?
+ *
+ * @description
+ * Returns false if argument is Invalid Date and true otherwise.
+ * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}
+ * Invalid Date is a Date, whose time value is NaN.
+ *
+ * Time value of Date: http://es5.github.io/#x15.9.1.1
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - Now `isValid` doesn't throw an exception
+ * if the first argument is not an instance of Date.
+ * Instead, argument is converted beforehand using `toDate`.
+ *
+ * Examples:
+ *
+ * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |
+ * |---------------------------|---------------|---------------|
+ * | `new Date()` | `true` | `true` |
+ * | `new Date('2016-01-01')` | `true` | `true` |
+ * | `new Date('')` | `false` | `false` |
+ * | `new Date(1488370835081)` | `true` | `true` |
+ * | `new Date(NaN)` | `false` | `false` |
+ * | `'2016-01-01'` | `TypeError` | `false` |
+ * | `''` | `TypeError` | `false` |
+ * | `1488370835081` | `TypeError` | `true` |
+ * | `NaN` | `TypeError` | `false` |
+ *
+ * We introduce this change to make *date-fns* consistent with ECMAScript behavior
+ * that try to coerce arguments to the expected type
+ * (which is also the case with other *date-fns* functions).
+ *
+ * @param {*} date - the date to check
+ * @returns {Boolean} the date is valid
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // For the valid date:
+ * var result = isValid(new Date(2014, 1, 31))
+ * //=> true
+ *
+ * @example
+ * // For the value, convertable into a date:
+ * var result = isValid(1393804800000)
+ * //=> true
+ *
+ * @example
+ * // For the invalid date:
+ * var result = isValid(new Date(''))
+ * //=> false
+ */
+export default function isValid(dirtyDate) {
+ requiredArgs(1, arguments)
+
+ var date = toDate(dirtyDate)
+ return !isNaN(date)
+}
diff --git a/date-fns/src/isValid/index.js.flow b/date-fns/src/isValid/index.js.flow
new file mode 100644
index 0000000..5bae5e0
--- /dev/null
+++ b/date-fns/src/isValid/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: any) => boolean
diff --git a/date-fns/src/isValid/test.js b/date-fns/src/isValid/test.js
new file mode 100644
index 0000000..95cb078
--- /dev/null
+++ b/date-fns/src/isValid/test.js
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isValid from '.'
+
+describe('isValid', function() {
+ it('returns true if the given date is valid', function() {
+ var result = isValid(new Date())
+ assert(result === true)
+ })
+
+ it('returns false if the given date is invalid', function() {
+ var result = isValid(new Date(''))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ assert(isValid(new Date(2014, 1 /* Feb */, 11).getTime()) === true)
+ assert(isValid(NaN) === false)
+ })
+
+ it('treats null as an invalid date', function() {
+ var result = isValid(null)
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(isValid.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isWednesday/benchmark.js b/date-fns/src/isWednesday/benchmark.js
new file mode 100644
index 0000000..80a6c1e
--- /dev/null
+++ b/date-fns/src/isWednesday/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isWednesday from '.'
+
+suite('isWednesday', function () {
+ benchmark('date-fns', function () {
+ return isWednesday(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isWednesday/index.d.ts b/date-fns/src/isWednesday/index.d.ts
new file mode 100644
index 0000000..e517a93
--- /dev/null
+++ b/date-fns/src/isWednesday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isWednesday } from 'date-fns'
+export default isWednesday
diff --git a/date-fns/src/isWednesday/index.js.flow b/date-fns/src/isWednesday/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isWednesday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isWednesday/index.ts b/date-fns/src/isWednesday/index.ts
new file mode 100644
index 0000000..f5bf434
--- /dev/null
+++ b/date-fns/src/isWednesday/index.ts
@@ -0,0 +1,29 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isWednesday
+ * @category Weekday Helpers
+ * @summary Is the given date Wednesday?
+ *
+ * @description
+ * Is the given date Wednesday?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is Wednesday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Is 24 September 2014 Wednesday?
+ * const result = isWednesday(new Date(2014, 8, 24))
+ * //=> true
+ */
+export default function isWednesday(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return toDate(dirtyDate).getDay() === 3
+}
diff --git a/date-fns/src/isWednesday/test.ts b/date-fns/src/isWednesday/test.ts
new file mode 100644
index 0000000..c4b1a7a
--- /dev/null
+++ b/date-fns/src/isWednesday/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isWednesday from '.'
+
+describe('isWednesday', function () {
+ it('returns true if the given date is Wednesday', function () {
+ const result = isWednesday(new Date(2014, 8 /* Sep */, 24))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not Wednesday', function () {
+ const result = isWednesday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function () {
+ const result = isWednesday(new Date(2014, 1 /* Feb */, 12).getTime())
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function () {
+ const result = isWednesday(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ assert.throws(isWednesday.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isWeekend/benchmark.js b/date-fns/src/isWeekend/benchmark.js
new file mode 100644
index 0000000..3152276
--- /dev/null
+++ b/date-fns/src/isWeekend/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isWeekend from '.'
+
+suite('isWeekend', function () {
+ benchmark('date-fns', function () {
+ return isWeekend(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/isWeekend/index.d.ts b/date-fns/src/isWeekend/index.d.ts
new file mode 100644
index 0000000..3e54f31
--- /dev/null
+++ b/date-fns/src/isWeekend/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isWeekend } from 'date-fns'
+export default isWeekend
diff --git a/date-fns/src/isWeekend/index.js.flow b/date-fns/src/isWeekend/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isWeekend/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isWeekend/index.ts b/date-fns/src/isWeekend/index.ts
new file mode 100644
index 0000000..9eebd6b
--- /dev/null
+++ b/date-fns/src/isWeekend/index.ts
@@ -0,0 +1,31 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isWeekend
+ * @category Weekday Helpers
+ * @summary Does the given date fall on a weekend?
+ *
+ * @description
+ * Does the given date fall on a weekend?
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date falls on a weekend
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Does 5 October 2014 fall on a weekend?
+ * const result = isWeekend(new Date(2014, 9, 5))
+ * //=> true
+ */
+export default function isWeekend(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const day = date.getDay()
+ return day === 0 || day === 6
+}
diff --git a/date-fns/src/isWeekend/test.ts b/date-fns/src/isWeekend/test.ts
new file mode 100644
index 0000000..750ecaa
--- /dev/null
+++ b/date-fns/src/isWeekend/test.ts
@@ -0,0 +1,31 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import isWeekend from '.'
+
+describe('isWeekend', function () {
+ it('returns true if the given date is in a weekend', function () {
+ const result = isWeekend(new Date(2014, 9 /* Oct */, 5))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not in a weekend', function () {
+ const result = isWeekend(new Date(2014, 9 /* Oct */, 6))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function () {
+ const result = isWeekend(new Date(2014, 9 /* Oct */, 5).getTime())
+ assert(result === true)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function () {
+ const result = isWeekend(new Date(NaN))
+ assert(result === false)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ assert.throws(isWeekend.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/isWithinInterval/benchmark.js b/date-fns/src/isWithinInterval/benchmark.js
new file mode 100644
index 0000000..e672457
--- /dev/null
+++ b/date-fns/src/isWithinInterval/benchmark.js
@@ -0,0 +1,25 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isWithinInterval from '.'
+import moment from 'moment'
+
+suite('isWithinInterval', function () {
+ benchmark('date-fns', function () {
+ return isWithinInterval(this.dateA, {start: this.dateB, end: this.dateC})
+ })
+
+ benchmark('Moment.js', function () {
+ return this.momentA.isBetween(this.momentB, this.momentC)
+ })
+}, {
+ setup: function () {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() - 604800000)
+ this.momentB = this.momentA.clone().subtract(7, 'days')
+ this.dateC = new Date(this.dateA.getTime() + 604800000)
+ this.momentC = this.momentA.clone().add(7, 'days')
+ }
+})
diff --git a/date-fns/src/isWithinInterval/index.d.ts b/date-fns/src/isWithinInterval/index.d.ts
new file mode 100644
index 0000000..17339db
--- /dev/null
+++ b/date-fns/src/isWithinInterval/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isWithinInterval } from 'date-fns'
+export default isWithinInterval
diff --git a/date-fns/src/isWithinInterval/index.js.flow b/date-fns/src/isWithinInterval/index.js.flow
new file mode 100644
index 0000000..f870053
--- /dev/null
+++ b/date-fns/src/isWithinInterval/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, interval: Interval) => boolean
diff --git a/date-fns/src/isWithinInterval/index.ts b/date-fns/src/isWithinInterval/index.ts
new file mode 100644
index 0000000..c6af6a0
--- /dev/null
+++ b/date-fns/src/isWithinInterval/index.ts
@@ -0,0 +1,91 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { Interval } from '../types'
+
+/**
+ * @name isWithinInterval
+ * @category Interval Helpers
+ * @summary Is the given date within the interval?
+ *
+ * @description
+ * Is the given date within the interval? (Including start and end.)
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `isWithinRange` to `isWithinInterval`.
+ * This change was made to mirror the use of the word "interval" in standard ISO 8601:2004 terminology:
+ *
+ * ```
+ * 2.1.3
+ * time interval
+ * part of the time axis limited by two instants
+ * ```
+ *
+ * Also, this function now accepts an object with `start` and `end` properties
+ * instead of two arguments as an interval.
+ * This function now throws `RangeError` if the start of the interval is after its end
+ * or if any date in the interval is `Invalid Date`.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ *
+ * isWithinRange(
+ * new Date(2014, 0, 3),
+ * new Date(2014, 0, 1), new Date(2014, 0, 7)
+ * )
+ *
+ * // v2.0.0 onward
+ *
+ * isWithinInterval(
+ * new Date(2014, 0, 3),
+ * { start: new Date(2014, 0, 1), end: new Date(2014, 0, 7) }
+ * )
+ * ```
+ *
+ * @param {Date|Number} date - the date to check
+ * @param {Interval} interval - the interval to check
+ * @returns {Boolean} the date is within the interval
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} The start of an interval cannot be after its end
+ * @throws {RangeError} Date in interval cannot be `Invalid Date`
+ *
+ * @example
+ * // For the date within the interval:
+ * isWithinInterval(new Date(2014, 0, 3), {
+ * start: new Date(2014, 0, 1),
+ * end: new Date(2014, 0, 7)
+ * })
+ * //=> true
+ *
+ * @example
+ * // For the date outside of the interval:
+ * isWithinInterval(new Date(2014, 0, 10), {
+ * start: new Date(2014, 0, 1),
+ * end: new Date(2014, 0, 7)
+ * })
+ * //=> false
+ *
+ * @example
+ * // For date equal to interval start:
+ * isWithinInterval(date, { start, end: date }) // => true
+ *
+ * @example
+ * // For date equal to interval end:
+ * isWithinInterval(date, { start: date, end }) // => true
+ */
+export default function isWithinInterval(dirtyDate: Date | number, interval: Interval): boolean {
+ requiredArgs(2, arguments)
+
+ const time = toDate(dirtyDate).getTime()
+ const startTime = toDate(interval.start).getTime()
+ const endTime = toDate(interval.end).getTime()
+
+ // Throw an exception if start date is after end date or if any date is `Invalid Date`
+ if (!(startTime <= endTime)) {
+ throw new RangeError('Invalid interval')
+ }
+
+ return time >= startTime && time <= endTime
+}
diff --git a/date-fns/src/isWithinInterval/test.ts b/date-fns/src/isWithinInterval/test.ts
new file mode 100644
index 0000000..b7ebe1f
--- /dev/null
+++ b/date-fns/src/isWithinInterval/test.ts
@@ -0,0 +1,104 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import isWithinInterval from '.'
+
+describe('isWithinInterval', function() {
+ it('returns true if the given date in within the given interval', function() {
+ const result = isWithinInterval(new Date(2014, 9 /* Oct */, 31), {
+ start: new Date(2014, 8 /* Sep */, 1),
+ end: new Date(2014, 11 /* Dec */, 31)
+ })
+ assert(result === true)
+ })
+
+ it('returns true if the given date has same time as the left boundary of the interval', function() {
+ const result = isWithinInterval(new Date(2014, 8 /* Sep */, 1), {
+ start: new Date(2014, 8 /* Sep */, 1),
+ end: new Date(2014, 11 /* Dec */, 31)
+ })
+ assert(result === true)
+ })
+
+ it('returns true if the given date has same time as the right boundary of the interval', function() {
+ const result = isWithinInterval(new Date(2014, 11 /* Dec */, 31), {
+ start: new Date(2014, 8 /* Sep */, 1),
+ end: new Date(2014, 11 /* Dec */, 31)
+ })
+ assert(result === true)
+ })
+
+ it('returns true if the given date and the both boundaries are the same', function() {
+ const result = isWithinInterval(new Date(2014, 11 /* Dec */, 31), {
+ start: new Date(2014, 11 /* Dec */, 31),
+ end: new Date(2014, 11 /* Dec */, 31)
+ })
+ assert(result === true)
+ })
+
+ it('returns false if the given date is outside of the interval', function() {
+ const result = isWithinInterval(new Date(2014, 1 /* Feb */, 11), {
+ start: new Date(2014, 8 /* Sep */, 1),
+ end: new Date(2014, 11 /* Dec */, 31)
+ })
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', function() {
+ const result = isWithinInterval(new Date(2014, 9 /* Oct */, 31).getTime(), {
+ start: new Date(2014, 8 /* Sep */, 1).getTime(),
+ end: new Date(2014, 11 /* Dec */, 31).getTime()
+ })
+ assert(result === true)
+ })
+
+ it('throws an exception if the start date is after the end date', function() {
+ const block = isWithinInterval.bind(null, new Date(2014, 9 /* Oct */, 31), {
+ start: new Date(2014, 11 /* Dec */, 31),
+ end: new Date(2014, 8 /* Sep */, 1)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the interval is undefined', function() {
+ // @ts-expect-error
+ const block = isWithinInterval.bind(
+ null,
+ new Date(2014, 9 /* Oct */, 31),
+ undefined
+ )
+ assert.throws(block, TypeError)
+ })
+
+ it('returns false if the given date is `Invalid Date`', function() {
+ const result = isWithinInterval(new Date(NaN), {
+ start: new Date(2014, 8 /* Sep */, 1),
+ end: new Date(2014, 11 /* Dec */, 31)
+ })
+ assert(result === false)
+ })
+
+ it('throws an exception if the start date is `Invalid Date`', function() {
+ const block = isWithinInterval.bind(null, new Date(2014, 9 /* Oct */, 31), {
+ start: new Date(NaN),
+ end: new Date(2014, 8 /* Sep */, 1)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws an exception if the end date is `Invalid Date`', function() {
+ const block = isWithinInterval.bind(null, new Date(2014, 9 /* Oct */, 31), {
+ start: new Date(2014, 11 /* Dec */, 31),
+ end: new Date(NaN)
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ // @ts-expect-error
+ assert.throws(isWithinInterval.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(isWithinInterval.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/isYesterday/benchmark.js b/date-fns/src/isYesterday/benchmark.js
new file mode 100644
index 0000000..2e333b4
--- /dev/null
+++ b/date-fns/src/isYesterday/benchmark.js
@@ -0,0 +1,19 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import isYesterday from '.'
+
+suite(
+ 'isYesterday',
+ () => {
+ benchmark('date-fns', function() {
+ return isYesterday(this.date)
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ }
+ }
+)
diff --git a/date-fns/src/isYesterday/index.d.ts b/date-fns/src/isYesterday/index.d.ts
new file mode 100644
index 0000000..b10c635
--- /dev/null
+++ b/date-fns/src/isYesterday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { isYesterday } from 'date-fns'
+export default isYesterday
diff --git a/date-fns/src/isYesterday/index.js.flow b/date-fns/src/isYesterday/index.js.flow
new file mode 100644
index 0000000..d3f01ee
--- /dev/null
+++ b/date-fns/src/isYesterday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => boolean
diff --git a/date-fns/src/isYesterday/index.ts b/date-fns/src/isYesterday/index.ts
new file mode 100644
index 0000000..0946fd9
--- /dev/null
+++ b/date-fns/src/isYesterday/index.ts
@@ -0,0 +1,34 @@
+import isSameDay from '../isSameDay/index'
+import subDays from '../subDays/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name isYesterday
+ * @category Day Helpers
+ * @summary Is the given date yesterday?
+ * @pure false
+ *
+ * @description
+ * Is the given date yesterday?
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to check
+ * @returns {Boolean} the date is yesterday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // If today is 6 October 2014, is 5 October 14:00:00 yesterday?
+ * var result = isYesterday(new Date(2014, 9, 5, 14, 0))
+ * //=> true
+ */
+export default function isYesterday(dirtyDate: Date | number): boolean {
+ requiredArgs(1, arguments)
+
+ return isSameDay(dirtyDate, subDays(Date.now(), 1))
+}
diff --git a/date-fns/src/isYesterday/test.ts b/date-fns/src/isYesterday/test.ts
new file mode 100644
index 0000000..4c79b72
--- /dev/null
+++ b/date-fns/src/isYesterday/test.ts
@@ -0,0 +1,38 @@
+// @flow
+/* eslint-env mocha */
+
+import { SinonFakeTimers } from 'sinon'
+import assert from 'assert'
+import sinon from 'sinon'
+import isYesterday from '.'
+
+describe('isYesterday', () => {
+ let clock: SinonFakeTimers
+ beforeEach(() => {
+ clock = sinon.useFakeTimers(new Date(2014, 8 /* Aug */, 25).getTime())
+ })
+
+ afterEach(() => {
+ clock.restore()
+ })
+
+ it('returns true if the given date is yesterday', () => {
+ const result = isYesterday(new Date(2014, 8 /* Sep */, 24))
+ assert(result === true)
+ })
+
+ it('returns false if the given date is not yesterday', () => {
+ const result = isYesterday(new Date(2014, 8 /* Sep */, 25))
+ assert(result === false)
+ })
+
+ it('accepts a timestamp', () => {
+ const result = isYesterday(new Date(2014, 8 /* Sep */, 24).getTime())
+ assert(result === true)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ // @ts-expect-error
+ assert.throws(isYesterday.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/lastDayOfDecade/benchmark.js b/date-fns/src/lastDayOfDecade/benchmark.js
new file mode 100644
index 0000000..c683eca
--- /dev/null
+++ b/date-fns/src/lastDayOfDecade/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import lastDayOfDecade from '.'
+
+suite('lastDayOfYear', function () {
+ benchmark('date-fns', function () {
+ return lastDayOfDecade(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/lastDayOfDecade/index.d.ts b/date-fns/src/lastDayOfDecade/index.d.ts
new file mode 100644
index 0000000..05b0306
--- /dev/null
+++ b/date-fns/src/lastDayOfDecade/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfDecade } from 'date-fns'
+export default lastDayOfDecade
diff --git a/date-fns/src/lastDayOfDecade/index.js.flow b/date-fns/src/lastDayOfDecade/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/lastDayOfDecade/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/lastDayOfDecade/index.ts b/date-fns/src/lastDayOfDecade/index.ts
new file mode 100644
index 0000000..7a50164
--- /dev/null
+++ b/date-fns/src/lastDayOfDecade/index.ts
@@ -0,0 +1,34 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name lastDayOfDecade
+ * @category Decade Helpers
+ * @summary Return the last day of a decade for the given date.
+ *
+ * @description
+ * Return the last day of a decade for the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the last day of a decade
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The last day of a decade for 21 December 2012 21:12:00:
+ * var result = lastDayOfDecade(new Date(2012, 11, 21, 21, 12, 00))
+ * //=> Wed Dec 31 2019 00:00:00
+ */
+export default function lastDayOfDecade(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+ const decade = 9 + Math.floor(year / 10) * 10
+ date.setFullYear(decade + 1, 0, 0)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/lastDayOfDecade/test.ts b/date-fns/src/lastDayOfDecade/test.ts
new file mode 100644
index 0000000..75c241e
--- /dev/null
+++ b/date-fns/src/lastDayOfDecade/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import lastDayOfDecade from '.'
+
+describe('lastDayOfDecade', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the last day of a decade', function() {
+ const date = new Date(1985, 9 /* Oct */, 20)
+ const result = lastDayOfDecade(date)
+ assert.deepEqual(result, new Date(1989, 11 /* Dec */, 31))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(1975, 0 /* Jan */, 19).getTime()
+ const result = lastDayOfDecade(date)
+ assert.deepEqual(result, new Date(1979, 11 /* Dec */, 31))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2013, 3 /* Apr */, 23)
+ lastDayOfDecade(date)
+ assert.deepEqual(date, new Date(2013, 3 /* Apr */, 23))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = lastDayOfDecade(new Date(NaN))
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(lastDayOfDecade.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/lastDayOfISOWeek/benchmark.js b/date-fns/src/lastDayOfISOWeek/benchmark.js
new file mode 100644
index 0000000..198dd8e
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeek/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import lastDayOfISOWeek from '.'
+
+suite('lastDayOfISOWeek', function () {
+ benchmark('date-fns', function () {
+ return lastDayOfISOWeek(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/lastDayOfISOWeek/index.d.ts b/date-fns/src/lastDayOfISOWeek/index.d.ts
new file mode 100644
index 0000000..e2533d6
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfISOWeek } from 'date-fns'
+export default lastDayOfISOWeek
diff --git a/date-fns/src/lastDayOfISOWeek/index.js.flow b/date-fns/src/lastDayOfISOWeek/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeek/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/lastDayOfISOWeek/index.ts b/date-fns/src/lastDayOfISOWeek/index.ts
new file mode 100644
index 0000000..dd856f3
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeek/index.ts
@@ -0,0 +1,32 @@
+import lastDayOfWeek from '../lastDayOfWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name lastDayOfISOWeek
+ * @category ISO Week Helpers
+ * @summary Return the last day of an ISO week for the given date.
+ *
+ * @description
+ * Return the last day of an ISO week for the given date.
+ * The result will be in the local timezone.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the last day of an ISO week
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The last day of an ISO week for 2 September 2014 11:55:00:
+ * var result = lastDayOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Sun Sep 07 2014 00:00:00
+ */
+export default function lastDayOfISOWeek(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ return lastDayOfWeek(dirtyDate, { weekStartsOn: 1 })
+}
diff --git a/date-fns/src/lastDayOfISOWeek/test.ts b/date-fns/src/lastDayOfISOWeek/test.ts
new file mode 100644
index 0000000..947fcb4
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeek/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import lastDayOfISOWeek from '.'
+
+describe('lastDayOfISOWeek', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the last day of an ISO week', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = lastDayOfISOWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 1 /* Feb */, 11, 11, 55, 0).getTime()
+ const result = lastDayOfISOWeek(date)
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 16))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ lastDayOfISOWeek(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = lastDayOfISOWeek(new Date(NaN))
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(lastDayOfISOWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/lastDayOfISOWeekYear/benchmark.js b/date-fns/src/lastDayOfISOWeekYear/benchmark.js
new file mode 100644
index 0000000..9623d55
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeekYear/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import lastDayOfISOWeekYear from '.'
+
+suite('lastDayOfISOWeekYear', function () {
+ benchmark('date-fns', function () {
+ return lastDayOfISOWeekYear(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/lastDayOfISOWeekYear/index.d.ts b/date-fns/src/lastDayOfISOWeekYear/index.d.ts
new file mode 100644
index 0000000..b30859a
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfISOWeekYear } from 'date-fns'
+export default lastDayOfISOWeekYear
diff --git a/date-fns/src/lastDayOfISOWeekYear/index.js.flow b/date-fns/src/lastDayOfISOWeekYear/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeekYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/lastDayOfISOWeekYear/index.ts b/date-fns/src/lastDayOfISOWeekYear/index.ts
new file mode 100644
index 0000000..425095f
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeekYear/index.ts
@@ -0,0 +1,45 @@
+import getISOWeekYear from '../getISOWeekYear/index'
+import startOfISOWeek from '../startOfISOWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name lastDayOfISOWeekYear
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Return the last day of an ISO week-numbering year for the given date.
+ *
+ * @description
+ * Return the last day of an ISO week-numbering year,
+ * which always starts 3 days before the year's first Thursday.
+ * The result will be in the local timezone.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `lastDayOfISOYear` to `lastDayOfISOWeekYear`.
+ * "ISO week year" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ * This change makes the name consistent with
+ * locale-dependent week-numbering year helpers, e.g., `getWeekYear`.
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the end of an ISO week-numbering year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The last day of an ISO week-numbering year for 2 July 2005:
+ * var result = lastDayOfISOWeekYear(new Date(2005, 6, 2))
+ * //=> Sun Jan 01 2006 00:00:00
+ */
+export default function lastDayOfISOWeekYear(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const year = getISOWeekYear(dirtyDate)
+ const fourthOfJanuary = new Date(0)
+ fourthOfJanuary.setFullYear(year + 1, 0, 4)
+ fourthOfJanuary.setHours(0, 0, 0, 0)
+ const date = startOfISOWeek(fourthOfJanuary)
+ date.setDate(date.getDate() - 1)
+ return date
+}
diff --git a/date-fns/src/lastDayOfISOWeekYear/test.ts b/date-fns/src/lastDayOfISOWeekYear/test.ts
new file mode 100644
index 0000000..9a06b16
--- /dev/null
+++ b/date-fns/src/lastDayOfISOWeekYear/test.ts
@@ -0,0 +1,45 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import lastDayOfISOWeekYear from '.'
+
+describe('lastDayOfISOWeekYear', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the last day of an ISO year', function() {
+ const result = lastDayOfISOWeekYear(new Date(2009, 0 /* Jan */, 1, 16, 0))
+ assert.deepEqual(result, new Date(2010, 0 /* Jan */, 3))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = lastDayOfISOWeekYear(
+ new Date(2005, 0 /* Jan */, 1, 6, 0).getTime()
+ )
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 2))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 2)
+ lastDayOfISOWeekYear(date)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 2))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(5, 0 /* Jan */, 4)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(6, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = lastDayOfISOWeekYear(initialDate)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = lastDayOfISOWeekYear(new Date(NaN))
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(lastDayOfISOWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/lastDayOfMonth/benchmark.js b/date-fns/src/lastDayOfMonth/benchmark.js
new file mode 100644
index 0000000..beddb74
--- /dev/null
+++ b/date-fns/src/lastDayOfMonth/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import lastDayOfMonth from '.'
+
+suite('lastDayOfMonth', function () {
+ benchmark('date-fns', function () {
+ return lastDayOfMonth(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/lastDayOfMonth/index.d.ts b/date-fns/src/lastDayOfMonth/index.d.ts
new file mode 100644
index 0000000..4db559b
--- /dev/null
+++ b/date-fns/src/lastDayOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfMonth } from 'date-fns'
+export default lastDayOfMonth
diff --git a/date-fns/src/lastDayOfMonth/index.js.flow b/date-fns/src/lastDayOfMonth/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/lastDayOfMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/lastDayOfMonth/index.ts b/date-fns/src/lastDayOfMonth/index.ts
new file mode 100644
index 0000000..1b97a13
--- /dev/null
+++ b/date-fns/src/lastDayOfMonth/index.ts
@@ -0,0 +1,34 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name lastDayOfMonth
+ * @category Month Helpers
+ * @summary Return the last day of a month for the given date.
+ *
+ * @description
+ * Return the last day of a month for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the last day of a month
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The last day of a month for 2 September 2014 11:55:00:
+ * var result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Tue Sep 30 2014 00:00:00
+ */
+export default function lastDayOfMonth(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const month = date.getMonth()
+ date.setFullYear(date.getFullYear(), month + 1, 0)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/lastDayOfMonth/test.ts b/date-fns/src/lastDayOfMonth/test.ts
new file mode 100644
index 0000000..3c63b4b
--- /dev/null
+++ b/date-fns/src/lastDayOfMonth/test.ts
@@ -0,0 +1,48 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import lastDayOfMonth from '.'
+
+describe('lastDayOfMonth', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the last day of a month', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = lastDayOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 7 /* Aug */, 2, 11, 55, 0).getTime()
+ const result = lastDayOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 31))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ lastDayOfMonth(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ describe('edge cases', function() {
+ it('works for the February of a leap year', function() {
+ const date = new Date(2012, 1 /* Feb */, 11, 11, 55, 0)
+ const result = lastDayOfMonth(date)
+ assert.deepEqual(result, new Date(2012, 1 /* Feb */, 29))
+ })
+
+ it('works for the February of a non-leap year', function() {
+ const date = new Date(2014, 1 /* Feb */, 11, 11, 55, 0)
+ const result = lastDayOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 28))
+ })
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = lastDayOfMonth(new Date(NaN))
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(lastDayOfMonth.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/lastDayOfQuarter/benchmark.js b/date-fns/src/lastDayOfQuarter/benchmark.js
new file mode 100644
index 0000000..72d5780
--- /dev/null
+++ b/date-fns/src/lastDayOfQuarter/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import lastDayOfQuarter from '.'
+
+suite('lastDayOfQuarter', function () {
+ benchmark('date-fns', function () {
+ return lastDayOfQuarter(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/lastDayOfQuarter/index.d.ts b/date-fns/src/lastDayOfQuarter/index.d.ts
new file mode 100644
index 0000000..3387b64
--- /dev/null
+++ b/date-fns/src/lastDayOfQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfQuarter } from 'date-fns'
+export default lastDayOfQuarter
diff --git a/date-fns/src/lastDayOfQuarter/index.js.flow b/date-fns/src/lastDayOfQuarter/index.js.flow
new file mode 100644
index 0000000..364a3bb
--- /dev/null
+++ b/date-fns/src/lastDayOfQuarter/index.js.flow
@@ -0,0 +1,57 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2,
+ }
+) => Date
diff --git a/date-fns/src/lastDayOfQuarter/index.ts b/date-fns/src/lastDayOfQuarter/index.ts
new file mode 100644
index 0000000..578cf12
--- /dev/null
+++ b/date-fns/src/lastDayOfQuarter/index.ts
@@ -0,0 +1,38 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name lastDayOfQuarter
+ * @category Quarter Helpers
+ * @summary Return the last day of a year quarter for the given date.
+ *
+ * @description
+ * Return the last day of a year quarter for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @param {Object} [options] - an object with options.
+ * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}
+ * @returns {Date} the last day of a quarter
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2
+ *
+ * @example
+ * // The last day of a quarter for 2 September 2014 11:55:00:
+ * var result = lastDayOfQuarter(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Tue Sep 30 2014 00:00:00
+ */
+export default function lastDayOfQuarter(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const currentMonth = date.getMonth()
+ const month = currentMonth - (currentMonth % 3) + 3
+ date.setMonth(month, 0)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/lastDayOfQuarter/test.ts b/date-fns/src/lastDayOfQuarter/test.ts
new file mode 100644
index 0000000..0812953
--- /dev/null
+++ b/date-fns/src/lastDayOfQuarter/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import lastDayOfQuarter from '.'
+
+describe('lastDayOfQuarter', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the last day of a quarter', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = lastDayOfQuarter(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = lastDayOfQuarter(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ lastDayOfQuarter(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = lastDayOfQuarter(new Date(NaN))
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(lastDayOfQuarter.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/lastDayOfWeek/benchmark.js b/date-fns/src/lastDayOfWeek/benchmark.js
new file mode 100644
index 0000000..52dfdec
--- /dev/null
+++ b/date-fns/src/lastDayOfWeek/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import lastDayOfWeek from '.'
+
+suite('lastDayOfWeek', function () {
+ benchmark('date-fns', function () {
+ return lastDayOfWeek(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/lastDayOfWeek/index.d.ts b/date-fns/src/lastDayOfWeek/index.d.ts
new file mode 100644
index 0000000..d29b9bf
--- /dev/null
+++ b/date-fns/src/lastDayOfWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfWeek } from 'date-fns'
+export default lastDayOfWeek
diff --git a/date-fns/src/lastDayOfWeek/index.js.flow b/date-fns/src/lastDayOfWeek/index.js.flow
new file mode 100644
index 0000000..9285b67
--- /dev/null
+++ b/date-fns/src/lastDayOfWeek/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => Date
diff --git a/date-fns/src/lastDayOfWeek/index.ts b/date-fns/src/lastDayOfWeek/index.ts
new file mode 100644
index 0000000..781d8b2
--- /dev/null
+++ b/date-fns/src/lastDayOfWeek/index.ts
@@ -0,0 +1,66 @@
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { LocaleOptions, WeekStartOptions } from '../types'
+
+/**
+ * @name lastDayOfWeek
+ * @category Week Helpers
+ * @summary Return the last day of a week for the given date.
+ *
+ * @description
+ * Return the last day of a week for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Date} the last day of a week
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ *
+ * @example
+ * // The last day of a week for 2 September 2014 11:55:00:
+ * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Sat Sep 06 2014 00:00:00
+ *
+ * @example
+ * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00:
+ * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })
+ * //=> Sun Sep 07 2014 00:00:00
+ */
+export default function lastDayOfWeek(
+ dirtyDate: Date | number,
+ dirtyOptions?: LocaleOptions & WeekStartOptions
+): Date {
+ requiredArgs(1, arguments)
+
+ const options = dirtyOptions || {}
+ const locale = options.locale
+ const localeWeekStartsOn =
+ locale && locale.options && locale.options.weekStartsOn
+ const defaultWeekStartsOn =
+ localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)
+ const weekStartsOn =
+ options.weekStartsOn == null
+ ? defaultWeekStartsOn
+ : toInteger(options.weekStartsOn)
+
+ // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6')
+ }
+
+ const date = toDate(dirtyDate)
+ const day = date.getDay()
+ const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)
+
+ date.setHours(0, 0, 0, 0)
+ date.setDate(date.getDate() + diff)
+ return date
+}
diff --git a/date-fns/src/lastDayOfWeek/test.ts b/date-fns/src/lastDayOfWeek/test.ts
new file mode 100644
index 0000000..99b1307
--- /dev/null
+++ b/date-fns/src/lastDayOfWeek/test.ts
@@ -0,0 +1,111 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import lastDayOfWeek from '.'
+
+describe('lastDayOfWeek', function () {
+ it('returns the date with the time set to 00:00:00 and the date set to the last day of a week', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = lastDayOfWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 6))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = lastDayOfWeek(date, { weekStartsOn: 1 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = lastDayOfWeek(date, {
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 1 },
+ },
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = lastDayOfWeek(date, {
+ weekStartsOn: 1,
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 0 },
+ },
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('implicitly converts options', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ // @ts-expect-error
+ const result = lastDayOfWeek(date, { weekStartsOn: '1' })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('accepts a timestamp', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = lastDayOfWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 6))
+ })
+
+ it('does not mutate the original date', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ lastDayOfWeek(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ describe('edge cases', function () {
+ describe('when the given day is before the start of a week', function () {
+ it('it returns the last day of a week', function () {
+ const date = new Date(2014, 9 /* Oct */, 6)
+ const result = lastDayOfWeek(date, { weekStartsOn: 3 })
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */, 7))
+ })
+ })
+
+ describe('when the given day is the start of a week', function () {
+ it('it returns the last day of a week', function () {
+ const date = new Date(2014, 9 /* Oct */, 8)
+ const result = lastDayOfWeek(date, { weekStartsOn: 3 })
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */, 14))
+ })
+ })
+
+ describe('when the given day is after the start of a week', function () {
+ it('it returns the last day of a week', function () {
+ const date = new Date(2014, 9 /* Oct */, 10)
+ const result = lastDayOfWeek(date, { weekStartsOn: 3 })
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */, 14))
+ })
+ })
+
+ it('handles the week at the end of a year', function () {
+ const date = new Date(2014, 11 /* Dec */, 29)
+ const result = lastDayOfWeek(date, { weekStartsOn: 5 })
+ assert.deepEqual(result, new Date(2015, 0 /* Jan */, 1))
+ })
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ const result = lastDayOfWeek(new Date(NaN))
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ const block = lastDayOfWeek.bind(
+ null,
+ new Date(2014, 8 /* Sep */, 2, 11, 55, 0),
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ assert.throws(lastDayOfWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/lastDayOfYear/benchmark.js b/date-fns/src/lastDayOfYear/benchmark.js
new file mode 100644
index 0000000..9d55f10
--- /dev/null
+++ b/date-fns/src/lastDayOfYear/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import lastDayOfYear from '.'
+
+suite('lastDayOfYear', function () {
+ benchmark('date-fns', function () {
+ return lastDayOfYear(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/lastDayOfYear/index.d.ts b/date-fns/src/lastDayOfYear/index.d.ts
new file mode 100644
index 0000000..a90dc0d
--- /dev/null
+++ b/date-fns/src/lastDayOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lastDayOfYear } from 'date-fns'
+export default lastDayOfYear
diff --git a/date-fns/src/lastDayOfYear/index.js.flow b/date-fns/src/lastDayOfYear/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/lastDayOfYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/lastDayOfYear/index.ts b/date-fns/src/lastDayOfYear/index.ts
new file mode 100644
index 0000000..f82c61c
--- /dev/null
+++ b/date-fns/src/lastDayOfYear/index.ts
@@ -0,0 +1,34 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name lastDayOfYear
+ * @category Year Helpers
+ * @summary Return the last day of a year for the given date.
+ *
+ * @description
+ * Return the last day of a year for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the last day of a year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The last day of a year for 2 September 2014 11:55:00:
+ * var result = lastDayOfYear(new Date(2014, 8, 2, 11, 55, 00))
+ * //=> Wed Dec 31 2014 00:00:00
+ */
+export default function lastDayOfYear(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+ date.setFullYear(year + 1, 0, 0)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/lastDayOfYear/test.ts b/date-fns/src/lastDayOfYear/test.ts
new file mode 100644
index 0000000..33997c9
--- /dev/null
+++ b/date-fns/src/lastDayOfYear/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import lastDayOfYear from '.'
+
+describe('lastDayOfYear', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the last day of a year', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = lastDayOfYear(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 31))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = lastDayOfYear(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 31))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ lastDayOfYear(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = lastDayOfYear(new Date(NaN))
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(lastDayOfYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/lightFormat/index.d.ts b/date-fns/src/lightFormat/index.d.ts
new file mode 100644
index 0000000..4aa361b
--- /dev/null
+++ b/date-fns/src/lightFormat/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lightFormat } from 'date-fns'
+export default lightFormat
diff --git a/date-fns/src/lightFormat/index.js.flow b/date-fns/src/lightFormat/index.js.flow
new file mode 100644
index 0000000..818d9c4
--- /dev/null
+++ b/date-fns/src/lightFormat/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, format: string) => string
diff --git a/date-fns/src/lightFormat/index.ts b/date-fns/src/lightFormat/index.ts
new file mode 100644
index 0000000..a16a127
--- /dev/null
+++ b/date-fns/src/lightFormat/index.ts
@@ -0,0 +1,144 @@
+import toDate from '../toDate/index'
+import formatters from '../_lib/format/lightFormatters/index'
+import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index'
+import isValid from '../isValid/index'
+import subMilliseconds from '../subMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+// This RegExp consists of three parts separated by `|`:
+// - (\w)\1* matches any sequences of the same letter
+// - '' matches two quote characters in a row
+// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),
+// except a single quote symbol, which ends the sequence.
+// Two quote characters do not end the sequence.
+// If there is no matching single quote
+// then the sequence will continue until the end of the string.
+// - . matches any single character unmatched by previous parts of the RegExps
+const formattingTokensRegExp = /(\w)\1*|''|'(''|[^'])+('|$)|./g
+
+const escapedStringRegExp = /^'([^]*?)'?$/
+const doubleQuoteRegExp = /''/g
+const unescapedLatinCharacterRegExp = /[a-zA-Z]/
+
+/**
+ * @name lightFormat
+ * @category Common Helpers
+ * @summary Format the date.
+ *
+ * @description
+ * Return the formatted date string in the given format. Unlike `format`,
+ * `lightFormat` doesn't use locales and outputs date using the most popular tokens.
+ *
+ * > ⚠️ Please note that the `lightFormat` tokens differ from Moment.js and other libraries.
+ * > See: https://git.io/fxCyr
+ *
+ * The characters wrapped between two single quotes characters (') are escaped.
+ * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.
+ *
+ * Format of the string is based on Unicode Technical Standard #35:
+ * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ *
+ * Accepted patterns:
+ * | Unit | Pattern | Result examples |
+ * |---------------------------------|---------|-----------------------------------|
+ * | AM, PM | a..aaa | AM, PM |
+ * | | aaaa | a.m., p.m. |
+ * | | aaaaa | a, p |
+ * | Calendar year | y | 44, 1, 1900, 2017 |
+ * | | yy | 44, 01, 00, 17 |
+ * | | yyy | 044, 001, 000, 017 |
+ * | | yyyy | 0044, 0001, 1900, 2017 |
+ * | Month (formatting) | M | 1, 2, ..., 12 |
+ * | | MM | 01, 02, ..., 12 |
+ * | Day of month | d | 1, 2, ..., 31 |
+ * | | dd | 01, 02, ..., 31 |
+ * | Hour [1-12] | h | 1, 2, ..., 11, 12 |
+ * | | hh | 01, 02, ..., 11, 12 |
+ * | Hour [0-23] | H | 0, 1, 2, ..., 23 |
+ * | | HH | 00, 01, 02, ..., 23 |
+ * | Minute | m | 0, 1, ..., 59 |
+ * | | mm | 00, 01, ..., 59 |
+ * | Second | s | 0, 1, ..., 59 |
+ * | | ss | 00, 01, ..., 59 |
+ * | Fraction of second | S | 0, 1, ..., 9 |
+ * | | SS | 00, 01, ..., 99 |
+ * | | SSS | 000, 0001, ..., 999 |
+ * | | SSSS | ... |
+ *
+ * @param {Date|Number} date - the original date
+ * @param {String} format - the string of tokens
+ * @returns {String} the formatted date string
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} format string contains an unescaped latin alphabet character
+ *
+ * @example
+ * const result = lightFormat(new Date(2014, 1, 11), 'yyyy-MM-dd')
+ * //=> '2014-02-11'
+ */
+
+type Token = keyof typeof formatters
+
+export default function lightFormat(
+ dirtyDate: Date | number,
+ formatStr: string
+): string {
+ requiredArgs(2, arguments)
+
+ const originalDate = toDate(dirtyDate)
+
+ if (!isValid(originalDate)) {
+ throw new RangeError('Invalid time value')
+ }
+
+ // Convert the date in system timezone to the same date in UTC+00:00 timezone.
+ // This ensures that when UTC functions will be implemented, locales will be compatible with them.
+ // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376
+ const timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)
+ const utcDate = subMilliseconds(originalDate, timezoneOffset)
+
+ const tokens = formatStr.match(formattingTokensRegExp)
+
+ // The only case when formattingTokensRegExp doesn't match the string is when it's empty
+ if (!tokens) return ''
+
+ const result = tokens
+ .map((substring) => {
+ // Replace two single quote characters with one single quote character
+ if (substring === "''") {
+ return "'"
+ }
+
+ const firstCharacter = substring[0]
+ if (firstCharacter === "'") {
+ return cleanEscapedString(substring)
+ }
+
+ const formatter = formatters[firstCharacter as Token]
+ if (formatter) {
+ return formatter(utcDate, substring)
+ }
+
+ if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
+ throw new RangeError(
+ 'Format string contains an unescaped latin alphabet character `' +
+ firstCharacter +
+ '`'
+ )
+ }
+
+ return substring
+ })
+ .join('')
+
+ return result
+}
+
+function cleanEscapedString(input: string) {
+ const matches = input.match(escapedStringRegExp)
+
+ if (!matches) {
+ return input
+ }
+
+ return matches[1].replace(doubleQuoteRegExp, "'")
+}
diff --git a/date-fns/src/lightFormat/test.ts b/date-fns/src/lightFormat/test.ts
new file mode 100644
index 0000000..13a8fd8
--- /dev/null
+++ b/date-fns/src/lightFormat/test.ts
@@ -0,0 +1,158 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import lightFormat from '.'
+
+describe('lightFormat', () => {
+ const date = new Date(1986, 3 /* Apr */, 4, 10, 32, 55, 123)
+
+ it('accepts a timestamp', () => {
+ const date = new Date(2014, 3, 4).getTime()
+ assert(lightFormat(date, 'yyyy-MM-dd') === '2014-04-04')
+ })
+
+ it('escapes characters between the single quote characters', () => {
+ const result = lightFormat(date, "'yyyy-'MM-dd'D yyyy-'MM-dd'")
+ assert(result === 'yyyy-04-04D yyyy-04-04')
+ })
+
+ it('two single quote characters are transformed into a "real" single quote', () => {
+ const date = new Date(2014, 3, 4, 5)
+ assert(lightFormat(date, "''h 'o''clock'''") === "'5 o'clock'")
+ })
+
+ it('accepts new line charactor', function () {
+ const date = new Date(2014, 3, 4, 5)
+ assert.equal(
+ lightFormat(date, "yyyy-MM-dd'\n'HH:mm:ss"),
+ '2014-04-04\n05:00:00'
+ )
+ })
+
+ describe('year', () => {
+ describe('regular year', () => {
+ it('works as expected', () => {
+ const result = lightFormat(date, 'y yy yyy yyyy yyyyy')
+ assert(result === '1986 86 1986 1986 01986')
+ })
+
+ it('1 BC formats as 1', () => {
+ const date = new Date(0)
+ date.setFullYear(0 /* Jan */, 1)
+ date.setHours(0, 0, 0, 0)
+ const result = lightFormat(date, 'y')
+ assert(result === '1')
+ })
+
+ it('2 BC formats as 2', () => {
+ const date = new Date(0)
+ date.setFullYear(-1, 0 /* Jan */, 1)
+ date.setHours(0, 0, 0, 0)
+ const result = lightFormat(date, 'y')
+ assert(result === '2')
+ })
+ })
+ })
+
+ describe('month', () => {
+ it('formatting month', () => {
+ const result = lightFormat(date, 'M MM')
+ assert(result === '4 04')
+ })
+ })
+
+ describe('day', () => {
+ it('date', () => {
+ const result = lightFormat(date, 'd dd')
+ assert(result === '4 04')
+ })
+ })
+
+ describe('hour', () => {
+ it('hour [1-12]', () => {
+ const result = lightFormat(
+ new Date(2018, 0 /* Jan */, 1, 0, 0, 0, 0),
+ 'h hh'
+ )
+ assert(result === '12 12')
+ })
+
+ it('hour [0-23]', () => {
+ const result = lightFormat(
+ new Date(2018, 0 /* Jan */, 1, 0, 0, 0, 0),
+ 'H HH'
+ )
+ assert(result === '0 00')
+ })
+
+ describe('AM, PM', () => {
+ it('works as expected', () => {
+ const result = lightFormat(
+ new Date(2018, 0 /* Jan */, 1, 0, 0, 0, 0),
+ 'a aa aaa aaaa aaaaa'
+ )
+ assert(result === 'AM AM am a.m. a')
+ })
+
+ it('12 PM', () => {
+ const date = new Date(1986, 3 /* Apr */, 4, 12, 0, 0, 900)
+ assert(lightFormat(date, 'h H a') === '12 12 PM')
+ })
+
+ it('12 AM', () => {
+ const date = new Date(1986, 3 /* Apr */, 6, 0, 0, 0, 900)
+ assert(lightFormat(date, 'h H a') === '12 0 AM')
+ })
+ })
+ })
+
+ it('minute', () => {
+ const result = lightFormat(date, 'm mm')
+ assert(result === '32 32')
+ })
+
+ describe('second', () => {
+ it('second', () => {
+ const result = lightFormat(date, 's ss')
+ assert(result === '55 55')
+ })
+ })
+
+ it('fractional seconds', function () {
+ const result = lightFormat(date, 'S SS SSS SSSS')
+ assert(result === '1 12 123 1230')
+ })
+
+ it('returns empty string when the format is an empty string', () => {
+ assert(lightFormat(Date.now(), '') === '')
+ })
+
+ it("throws RangeError if the date isn't valid", () => {
+ assert.throws(
+ lightFormat.bind(null, new Date(NaN), 'MMMM d, yyyy'),
+ RangeError
+ )
+ })
+
+ it('implicitly converts `formatString`', () => {
+ // eslint-disable-next-line no-new-wrappers
+ const formatString = new String('yyyy-MM-dd')
+
+ const date = new Date(2014, 3, 4)
+
+ // @ts-expect-error
+ assert(lightFormat(date, formatString) === '2014-04-04')
+ })
+
+ it('throws RangeError exception if the format string contains an unescaped latin alphabet character', function () {
+ assert.throws(lightFormat.bind(null, date, 'yyyy-MM-dd-nnnn'), RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', () => {
+ // @ts-expect-error
+ assert.throws(lightFormat.bind(null), TypeError)
+ // @ts-expect-error
+ assert.throws(lightFormat.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/locale/_lib/buildFormatLongFn/index.js b/date-fns/src/locale/_lib/buildFormatLongFn/index.js
new file mode 100644
index 0000000..44da3fc
--- /dev/null
+++ b/date-fns/src/locale/_lib/buildFormatLongFn/index.js
@@ -0,0 +1,8 @@
+export default function buildFormatLongFn (args) {
+ return function (dirtyOptions) {
+ var options = dirtyOptions || {}
+ var width = options.width ? String(options.width) : args.defaultWidth
+ var format = args.formats[width] || args.formats[args.defaultWidth]
+ return format
+ }
+}
diff --git a/date-fns/src/locale/_lib/buildLocalizeFn/index.js b/date-fns/src/locale/_lib/buildLocalizeFn/index.js
new file mode 100644
index 0000000..360d8a7
--- /dev/null
+++ b/date-fns/src/locale/_lib/buildLocalizeFn/index.js
@@ -0,0 +1,23 @@
+export default function buildLocalizeFn(args) {
+ return function(dirtyIndex, dirtyOptions) {
+ var options = dirtyOptions || {}
+
+ var context = options.context ? String(options.context) : 'standalone'
+
+ var valuesArray
+ if (context === 'formatting' && args.formattingValues) {
+ const defaultWidth = args.defaultFormattingWidth || args.defaultWidth
+ const width = options.width ? String(options.width) : defaultWidth
+ valuesArray =
+ args.formattingValues[width] || args.formattingValues[defaultWidth]
+ } else {
+ const defaultWidth = args.defaultWidth
+ const width = options.width ? String(options.width) : args.defaultWidth
+ valuesArray = args.values[width] || args.values[defaultWidth]
+ }
+ var index = args.argumentCallback
+ ? args.argumentCallback(dirtyIndex)
+ : dirtyIndex
+ return valuesArray[index]
+ }
+}
diff --git a/date-fns/src/locale/_lib/buildMatchFn/index.js b/date-fns/src/locale/_lib/buildMatchFn/index.js
new file mode 100644
index 0000000..a5bd529
--- /dev/null
+++ b/date-fns/src/locale/_lib/buildMatchFn/index.js
@@ -0,0 +1,56 @@
+export default function buildMatchFn(args) {
+ return function(dirtyString, dirtyOptions) {
+ var string = String(dirtyString)
+ var options = dirtyOptions || {}
+ var width = options.width
+
+ var matchPattern =
+ (width && args.matchPatterns[width]) ||
+ args.matchPatterns[args.defaultMatchWidth]
+ var matchResult = string.match(matchPattern)
+
+ if (!matchResult) {
+ return null
+ }
+ var matchedString = matchResult[0]
+
+ var parsePatterns =
+ (width && args.parsePatterns[width]) ||
+ args.parsePatterns[args.defaultParseWidth]
+
+ var value
+ if (Object.prototype.toString.call(parsePatterns) === '[object Array]') {
+ value = findIndex(parsePatterns, function(pattern) {
+ return pattern.test(matchedString)
+ })
+ } else {
+ value = findKey(parsePatterns, function(pattern) {
+ return pattern.test(matchedString)
+ })
+ }
+
+ value = args.valueCallback ? args.valueCallback(value) : value
+ value = options.valueCallback ? options.valueCallback(value) : value
+
+ return {
+ value: value,
+ rest: string.slice(matchedString.length)
+ }
+ }
+}
+
+function findKey(object, predicate) {
+ for (var key in object) {
+ if (object.hasOwnProperty(key) && predicate(object[key])) {
+ return key
+ }
+ }
+}
+
+function findIndex(array, predicate) {
+ for (var key = 0; key < array.length; key++) {
+ if (predicate(array[key])) {
+ return key
+ }
+ }
+}
diff --git a/date-fns/src/locale/_lib/buildMatchPatternFn/index.js b/date-fns/src/locale/_lib/buildMatchPatternFn/index.js
new file mode 100644
index 0000000..faaabed
--- /dev/null
+++ b/date-fns/src/locale/_lib/buildMatchPatternFn/index.js
@@ -0,0 +1,24 @@
+export default function buildMatchPatternFn (args) {
+ return function (dirtyString, dirtyOptions) {
+ var string = String(dirtyString)
+ var options = dirtyOptions || {}
+
+ var matchResult = string.match(args.matchPattern)
+ if (!matchResult) {
+ return null
+ }
+ var matchedString = matchResult[0]
+
+ var parseResult = string.match(args.parsePattern)
+ if (!parseResult) {
+ return null
+ }
+ var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]
+ value = options.valueCallback ? options.valueCallback(value) : value
+
+ return {
+ value: value,
+ rest: string.slice(matchedString.length)
+ }
+ }
+}
diff --git a/date-fns/src/locale/af/_lib/formatDistance/index.js b/date-fns/src/locale/af/_lib/formatDistance/index.js
new file mode 100644
index 0000000..0d51321
--- /dev/null
+++ b/date-fns/src/locale/af/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: "minder as 'n sekonde",
+ other: 'minder as {{count}} sekondes'
+ },
+
+ xSeconds: {
+ one: '1 sekonde',
+ other: '{{count}} sekondes'
+ },
+
+ halfAMinute: "'n halwe minuut",
+
+ lessThanXMinutes: {
+ one: "minder as 'n minuut",
+ other: 'minder as {{count}} minute'
+ },
+
+ xMinutes: {
+ one: "'n minuut",
+ other: '{{count}} minute'
+ },
+
+ aboutXHours: {
+ one: 'ongeveer 1 uur',
+ other: 'ongeveer {{count}} ure'
+ },
+
+ xHours: {
+ one: '1 uur',
+ other: '{{count}} ure'
+ },
+
+ xDays: {
+ one: '1 dag',
+ other: '{{count}} dae'
+ },
+
+ aboutXWeeks: {
+ one: 'ongeveer 1 week',
+ other: 'ongeveer {{count}} weke'
+ },
+
+ xWeeks: {
+ one: '1 week',
+ other: '{{count}} weke'
+ },
+
+ aboutXMonths: {
+ one: 'ongeveer 1 maand',
+ other: 'ongeveer {{count}} maande'
+ },
+
+ xMonths: {
+ one: '1 maand',
+ other: '{{count}} maande'
+ },
+
+ aboutXYears: {
+ one: 'ongeveer 1 jaar',
+ other: 'ongeveer {{count}} jaar'
+ },
+
+ xYears: {
+ one: '1 jaar',
+ other: '{{count}} jaar'
+ },
+
+ overXYears: {
+ one: 'meer as 1 jaar',
+ other: 'meer as {{count}} jaar'
+ },
+
+ almostXYears: {
+ one: 'byna 1 jaar',
+ other: 'byna {{count}} jaar'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'oor ' + result
+ } else {
+ return result + ' gelede'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/af/_lib/formatLong/index.js b/date-fns/src/locale/af/_lib/formatLong/index.js
new file mode 100644
index 0000000..1420aa8
--- /dev/null
+++ b/date-fns/src/locale/af/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'yyyy/MM/dd'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'om' {{time}}",
+ long: "{{date}} 'om' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/af/_lib/formatRelative/index.js b/date-fns/src/locale/af/_lib/formatRelative/index.js
new file mode 100644
index 0000000..8568a82
--- /dev/null
+++ b/date-fns/src/locale/af/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'verlede' eeee 'om' p",
+ yesterday: "'gister om' p",
+ today: "'vandag om' p",
+ tomorrow: "'môre om' p",
+ nextWeek: "eeee 'om' p",
+ other: 'P'
+}
+
+export default function formatRelative(token) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/af/_lib/localize/index.js b/date-fns/src/locale/af/_lib/localize/index.js
new file mode 100644
index 0000000..77e06b9
--- /dev/null
+++ b/date-fns/src/locale/af/_lib/localize/index.js
@@ -0,0 +1,176 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['vC', 'nC'],
+ abbreviated: ['vC', 'nC'],
+ wide: ['voor Christus', 'na Christus']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['K1', 'K2', 'K3', 'K4'],
+ wide: ['1ste kwartaal', '2de kwartaal', '3de kwartaal', '4de kwartaal']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Jan',
+ 'Feb',
+ 'Mrt',
+ 'Apr',
+ 'Mei',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Okt',
+ 'Nov',
+ 'Des'
+ ],
+ wide: [
+ 'Januarie',
+ 'Februarie',
+ 'Maart',
+ 'April',
+ 'Mei',
+ 'Junie',
+ 'Julie',
+ 'Augustus',
+ 'September',
+ 'Oktober',
+ 'November',
+ 'Desember'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'D', 'W', 'D', 'V', 'S'],
+ short: ['So', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Sa'],
+ abbreviated: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
+ wide: [
+ 'Sondag',
+ 'Maandag',
+ 'Dinsdag',
+ 'Woensdag',
+ 'Donderdag',
+ 'Vrydag',
+ 'Saterdag'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'vm',
+ pm: 'nm',
+ midnight: 'middernag',
+ noon: 'middaguur',
+ morning: 'oggend',
+ afternoon: 'middag',
+ evening: 'laat middag',
+ night: 'aand'
+ },
+ abbreviated: {
+ am: 'vm',
+ pm: 'nm',
+ midnight: 'middernag',
+ noon: 'middaguur',
+ morning: 'oggend',
+ afternoon: 'middag',
+ evening: 'laat middag',
+ night: 'aand'
+ },
+ wide: {
+ am: 'vm',
+ pm: 'nm',
+ midnight: 'middernag',
+ noon: 'middaguur',
+ morning: 'oggend',
+ afternoon: 'middag',
+ evening: 'laat middag',
+ night: 'aand'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'vm',
+ pm: 'nm',
+ midnight: 'middernag',
+ noon: 'uur die middag',
+ morning: 'uur die oggend',
+ afternoon: 'uur die middag',
+ evening: 'uur die aand',
+ night: 'uur die aand'
+ },
+ abbreviated: {
+ am: 'vm',
+ pm: 'nm',
+ midnight: 'middernag',
+ noon: 'uur die middag',
+ morning: 'uur die oggend',
+ afternoon: 'uur die middag',
+ evening: 'uur die aand',
+ night: 'uur die aand'
+ },
+ wide: {
+ am: 'vm',
+ pm: 'nm',
+ midnight: 'middernag',
+ noon: 'uur die middag',
+ morning: 'uur die oggend',
+ afternoon: 'uur die middag',
+ evening: 'uur die aand',
+ night: 'uur die aand'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ var rem100 = number % 100
+ if (rem100 < 20) {
+ switch (rem100) {
+ case 1:
+ case 8:
+ return number + 'ste'
+ default:
+ return number + 'de'
+ }
+ }
+ return number + 'ste'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/af/_lib/match/index.js b/date-fns/src/locale/af/_lib/match/index.js
new file mode 100644
index 0000000..e5cb7a0
--- /dev/null
+++ b/date-fns/src/locale/af/_lib/match/index.js
@@ -0,0 +1,136 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(ste|de)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^([vn]\.? ?C\.?)/,
+ abbreviated: /^([vn]\. ?C\.?)/,
+ wide: /^((voor|na) Christus)/
+}
+var parseEraPatterns = {
+ any: [/^v/, /^n/]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^K[1234]/i,
+ wide: /^[1234](st|d)e kwartaal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(Jan|Feb|Mrt|Apr|Mei|Jun|Jul|Aug|Sep|Okt|Nov|Dec)\.?/i,
+ wide: /^(Januarie|Februarie|Maart|April|Mei|Junie|Julie|Augustus|September|Oktober|November|Desember)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^J/i,
+ /^F/i,
+ /^M/i,
+ /^A/i,
+ /^M/i,
+ /^J/i,
+ /^J/i,
+ /^A/i,
+ /^S/i,
+ /^O/i,
+ /^N/i,
+ /^D/i
+ ],
+ any: [
+ /^Jan/i,
+ /^Feb/i,
+ /^Mrt/i,
+ /^Apr/i,
+ /^Mei/i,
+ /^Jun/i,
+ /^Jul/i,
+ /^Aug/i,
+ /^Sep/i,
+ /^Okt/i,
+ /^Nov/i,
+ /^Dec/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smdwv]/i,
+ short: /^(So|Ma|Di|Wo|Do|Vr|Sa)/i,
+ abbreviated: /^(Son|Maa|Din|Woe|Don|Vry|Sat)/i,
+ wide: /^(Sondag|Maandag|Dinsdag|Woensdag|Donderdag|Vrydag|Saterdag)/i
+}
+var parseDayPatterns = {
+ narrow: [/^S/i, /^M/i, /^D/i, /^W/i, /^D/i, /^V/i, /^S/i],
+ any: [/^So/i, /^Ma/i, /^Di/i, /^Wo/i, /^Do/i, /^Vr/i, /^Sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(vm|nm|middernag|(?:uur )?die (oggend|middag|aand))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^vm/i,
+ pm: /^nm/i,
+ midnight: /^middernag/i,
+ noon: /^middaguur/i,
+ morning: /oggend/i,
+ afternoon: /middag/i,
+ evening: /laat middag/i,
+ night: /aand/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/af/index.d.ts b/date-fns/src/locale/af/index.d.ts
new file mode 100644
index 0000000..fb278e6
--- /dev/null
+++ b/date-fns/src/locale/af/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { af } from 'date-fns/locale'
+export default af
diff --git a/date-fns/src/locale/af/index.js b/date-fns/src/locale/af/index.js
new file mode 100644
index 0000000..205b983
--- /dev/null
+++ b/date-fns/src/locale/af/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Afrikaans locale.
+ * @language Afrikaans
+ * @iso-639-2 afr
+ * @author Marnus Weststrate [@marnusw]{@link https://github.com/marnusw}
+ */
+var locale = {
+ code: 'af',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/af/index.js.flow b/date-fns/src/locale/af/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/af/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/af/snapshot.md b/date-fns/src/locale/af/snapshot.md
new file mode 100644
index 0000000..968212c
--- /dev/null
+++ b/date-fns/src/locale/af/snapshot.md
@@ -0,0 +1,304 @@
+# Afrikaans (af) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987ste | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5de | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987ste | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5de | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1ste | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2de | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1ste kwartaal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2de kwartaal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1ste | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2de | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1ste kwartaal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2de kwartaal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2de | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7de | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Februarie | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Julie | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2de | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7de | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Februarie | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Julie | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1ste | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49ste | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1ste | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ste | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11de | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28ste | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42ste | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365ste | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vry | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vry | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vry | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vrydag | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1ste | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5de | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vry | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vrydag | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2de | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6de | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vry | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vrydag | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2de | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6de | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vry | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vrydag | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Vr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | uur die oggend | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | uur die middag | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | uur die oggend | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | uur die middag | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | uur die oggend | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | uur die middag | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | uur die oggend | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | uur die middag | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | uur die oggend | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | uur die middag | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | uur die aand | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11de | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11de | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11de | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ste | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11de | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11de | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11de | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ste | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1ste | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55ste | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1ste | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55ste | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987/02/11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453/05/29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 Februarie 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Woensdag, 11 Februarie 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sondag, 29 Mei 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987/02/11, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453/05/29, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Feb 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 Februarie 1987 om 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453 om 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Woensdag, 11 Februarie 1987 om 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sondag, 29 Mei 1453 om 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------- | ---------------------- | -------------------------- |
+| 2006-01-01T00:00:00.000Z | ongeveer 6 jaar | ongeveer 6 jaar | oor ongeveer 6 jaar |
+| 2005-01-01T00:00:00.000Z | ongeveer 5 jaar | ongeveer 5 jaar | oor ongeveer 5 jaar |
+| 2004-01-01T00:00:00.000Z | ongeveer 4 jaar | ongeveer 4 jaar | oor ongeveer 4 jaar |
+| 2003-01-01T00:00:00.000Z | ongeveer 3 jaar | ongeveer 3 jaar | oor ongeveer 3 jaar |
+| 2002-01-01T00:00:00.000Z | ongeveer 2 jaar | ongeveer 2 jaar | oor ongeveer 2 jaar |
+| 2001-06-01T00:00:00.000Z | meer as 1 jaar | meer as 1 jaar | oor meer as 1 jaar |
+| 2001-02-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | oor ongeveer 1 jaar |
+| 2001-01-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | oor ongeveer 1 jaar |
+| 2000-06-01T00:00:00.000Z | 5 maande | 5 maande | oor 5 maande |
+| 2000-03-01T00:00:00.000Z | 2 maande | 2 maande | oor 2 maande |
+| 2000-02-01T00:00:00.000Z | ongeveer 1 maand | ongeveer 1 maand | oor ongeveer 1 maand |
+| 2000-01-15T00:00:00.000Z | 14 dae | 14 dae | oor 14 dae |
+| 2000-01-02T00:00:00.000Z | 1 dag | 1 dag | oor 1 dag |
+| 2000-01-01T06:00:00.000Z | ongeveer 6 ure | ongeveer 6 ure | oor ongeveer 6 ure |
+| 2000-01-01T01:00:00.000Z | ongeveer 1 uur | ongeveer 1 uur | oor ongeveer 1 uur |
+| 2000-01-01T00:45:00.000Z | ongeveer 1 uur | ongeveer 1 uur | oor ongeveer 1 uur |
+| 2000-01-01T00:30:00.000Z | 30 minute | 30 minute | oor 30 minute |
+| 2000-01-01T00:15:00.000Z | 15 minute | 15 minute | oor 15 minute |
+| 2000-01-01T00:01:00.000Z | 'n minuut | 'n minuut | oor 'n minuut |
+| 2000-01-01T00:00:25.000Z | minder as 'n minuut | 'n halwe minuut | oor minder as 'n minuut |
+| 2000-01-01T00:00:15.000Z | minder as 'n minuut | minder as 20 sekondes | oor minder as 'n minuut |
+| 2000-01-01T00:00:05.000Z | minder as 'n minuut | minder as 10 sekondes | oor minder as 'n minuut |
+| 2000-01-01T00:00:00.000Z | minder as 'n minuut | minder as 5 sekondes | minder as 'n minuut gelede |
+| 1999-12-31T23:59:55.000Z | minder as 'n minuut | minder as 10 sekondes | minder as 'n minuut gelede |
+| 1999-12-31T23:59:45.000Z | minder as 'n minuut | minder as 20 sekondes | minder as 'n minuut gelede |
+| 1999-12-31T23:59:35.000Z | minder as 'n minuut | 'n halwe minuut | minder as 'n minuut gelede |
+| 1999-12-31T23:59:00.000Z | 'n minuut | 'n minuut | 'n minuut gelede |
+| 1999-12-31T23:45:00.000Z | 15 minute | 15 minute | 15 minute gelede |
+| 1999-12-31T23:30:00.000Z | 30 minute | 30 minute | 30 minute gelede |
+| 1999-12-31T23:15:00.000Z | ongeveer 1 uur | ongeveer 1 uur | ongeveer 1 uur gelede |
+| 1999-12-31T23:00:00.000Z | ongeveer 1 uur | ongeveer 1 uur | ongeveer 1 uur gelede |
+| 1999-12-31T18:00:00.000Z | ongeveer 6 ure | ongeveer 6 ure | ongeveer 6 ure gelede |
+| 1999-12-30T00:00:00.000Z | 2 dae | 2 dae | 2 dae gelede |
+| 1999-12-15T00:00:00.000Z | 17 dae | 17 dae | 17 dae gelede |
+| 1999-12-01T00:00:00.000Z | ongeveer 1 maand | ongeveer 1 maand | ongeveer 1 maand gelede |
+| 1999-11-01T00:00:00.000Z | 2 maande | 2 maande | 2 maande gelede |
+| 1999-06-01T00:00:00.000Z | 7 maande | 7 maande | 7 maande gelede |
+| 1999-01-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | ongeveer 1 jaar gelede |
+| 1998-12-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | ongeveer 1 jaar gelede |
+| 1998-06-01T00:00:00.000Z | meer as 1 jaar | meer as 1 jaar | meer as 1 jaar gelede |
+| 1998-01-01T00:00:00.000Z | ongeveer 2 jaar | ongeveer 2 jaar | ongeveer 2 jaar gelede |
+| 1997-01-01T00:00:00.000Z | ongeveer 3 jaar | ongeveer 3 jaar | ongeveer 3 jaar gelede |
+| 1996-01-01T00:00:00.000Z | ongeveer 4 jaar | ongeveer 4 jaar | ongeveer 4 jaar gelede |
+| 1995-01-01T00:00:00.000Z | ongeveer 5 jaar | ongeveer 5 jaar | ongeveer 5 jaar gelede |
+| 1994-01-01T00:00:00.000Z | ongeveer 6 jaar | ongeveer 6 jaar | ongeveer 6 jaar gelede |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 jaar | oor 6 jaar | 52608 ure |
+| 2005-01-01T00:00:00.000Z | 5 jaar | oor 5 jaar | 43848 ure |
+| 2004-01-01T00:00:00.000Z | 4 jaar | oor 4 jaar | 35064 ure |
+| 2003-01-01T00:00:00.000Z | 3 jaar | oor 3 jaar | 26304 ure |
+| 2002-01-01T00:00:00.000Z | 2 jaar | oor 2 jaar | 17544 ure |
+| 2001-06-01T00:00:00.000Z | 1 jaar | oor 1 jaar | 12408 ure |
+| 2001-02-01T00:00:00.000Z | 1 jaar | oor 1 jaar | 9528 ure |
+| 2001-01-01T00:00:00.000Z | 1 jaar | oor 1 jaar | 8784 ure |
+| 2000-06-01T00:00:00.000Z | 5 maande | oor 5 maande | 3648 ure |
+| 2000-03-01T00:00:00.000Z | 2 maande | oor 2 maande | 1440 ure |
+| 2000-02-01T00:00:00.000Z | 1 maand | oor 1 maand | 744 ure |
+| 2000-01-15T00:00:00.000Z | 14 dae | oor 14 dae | 336 ure |
+| 2000-01-02T00:00:00.000Z | 1 dag | oor 1 dag | 24 ure |
+| 2000-01-01T06:00:00.000Z | 6 ure | oor 6 ure | 6 ure |
+| 2000-01-01T01:00:00.000Z | 1 uur | oor 1 uur | 1 uur |
+| 2000-01-01T00:45:00.000Z | 45 minute | oor 45 minute | 1 uur |
+| 2000-01-01T00:30:00.000Z | 30 minute | oor 30 minute | 1 uur |
+| 2000-01-01T00:15:00.000Z | 15 minute | oor 15 minute | 0 ure |
+| 2000-01-01T00:01:00.000Z | 'n minuut | oor 'n minuut | 0 ure |
+| 2000-01-01T00:00:25.000Z | 25 sekondes | oor 25 sekondes | 0 ure |
+| 2000-01-01T00:00:15.000Z | 15 sekondes | oor 15 sekondes | 0 ure |
+| 2000-01-01T00:00:05.000Z | 5 sekondes | oor 5 sekondes | 0 ure |
+| 2000-01-01T00:00:00.000Z | 0 sekondes | 0 sekondes gelede | 0 ure |
+| 1999-12-31T23:59:55.000Z | 5 sekondes | 5 sekondes gelede | 0 ure |
+| 1999-12-31T23:59:45.000Z | 15 sekondes | 15 sekondes gelede | 0 ure |
+| 1999-12-31T23:59:35.000Z | 25 sekondes | 25 sekondes gelede | 0 ure |
+| 1999-12-31T23:59:00.000Z | 'n minuut | 'n minuut gelede | 0 ure |
+| 1999-12-31T23:45:00.000Z | 15 minute | 15 minute gelede | 0 ure |
+| 1999-12-31T23:30:00.000Z | 30 minute | 30 minute gelede | 1 uur |
+| 1999-12-31T23:15:00.000Z | 45 minute | 45 minute gelede | 1 uur |
+| 1999-12-31T23:00:00.000Z | 1 uur | 1 uur gelede | 1 uur |
+| 1999-12-31T18:00:00.000Z | 6 ure | 6 ure gelede | 6 ure |
+| 1999-12-30T00:00:00.000Z | 2 dae | 2 dae gelede | 48 ure |
+| 1999-12-15T00:00:00.000Z | 17 dae | 17 dae gelede | 408 ure |
+| 1999-12-01T00:00:00.000Z | 1 maand | 1 maand gelede | 744 ure |
+| 1999-11-01T00:00:00.000Z | 2 maande | 2 maande gelede | 1464 ure |
+| 1999-06-01T00:00:00.000Z | 7 maande | 7 maande gelede | 5136 ure |
+| 1999-01-01T00:00:00.000Z | 1 jaar | 1 jaar gelede | 8760 ure |
+| 1998-12-01T00:00:00.000Z | 1 jaar | 1 jaar gelede | 9504 ure |
+| 1998-06-01T00:00:00.000Z | 2 jaar | 2 jaar gelede | 13896 ure |
+| 1998-01-01T00:00:00.000Z | 2 jaar | 2 jaar gelede | 17520 ure |
+| 1997-01-01T00:00:00.000Z | 3 jaar | 3 jaar gelede | 26280 ure |
+| 1996-01-01T00:00:00.000Z | 4 jaar | 4 jaar gelede | 35064 ure |
+| 1995-01-01T00:00:00.000Z | 5 jaar | 5 jaar gelede | 43824 ure |
+| 1994-01-01T00:00:00.000Z | 6 jaar | 6 jaar gelede | 52584 ure |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------ |
+| 2000-01-10T00:00:00.000Z | 2000/01/10 |
+| 2000-01-05T00:00:00.000Z | Woensdag om 00:00 |
+| 2000-01-02T00:00:00.000Z | môre om 00:00 |
+| 2000-01-01T00:00:00.000Z | vandag om 00:00 |
+| 1999-12-31T00:00:00.000Z | gister om 00:00 |
+| 1999-12-27T00:00:00.000Z | verlede Maandag om 00:00 |
+| 1999-12-21T00:00:00.000Z | 1999/12/21 |
diff --git a/date-fns/src/locale/ar-DZ/_lib/formatDistance/index.js b/date-fns/src/locale/ar-DZ/_lib/formatDistance/index.js
new file mode 100644
index 0000000..bcdb373
--- /dev/null
+++ b/date-fns/src/locale/ar-DZ/_lib/formatDistance/index.js
@@ -0,0 +1,135 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'أقل من ثانية واحدة',
+ two: 'أقل من ثانتين',
+ threeToTen: 'أقل من {{count}} ثواني',
+ other: 'أقل من {{count}} ثانية'
+ },
+
+ xSeconds: {
+ one: 'ثانية واحدة',
+ two: 'ثانتين',
+ threeToTen: '{{count}} ثواني',
+ other: '{{count}} ثانية'
+ },
+
+ halfAMinute: 'نصف دقيقة',
+
+ lessThanXMinutes: {
+ one: 'أقل من دقيقة',
+ two: 'أقل من دقيقتين',
+ threeToTen: 'أقل من {{count}} دقائق',
+ other: 'أقل من {{count}} دقيقة'
+ },
+
+ xMinutes: {
+ one: 'دقيقة واحدة',
+ two: 'دقيقتين',
+ threeToTen: '{{count}} دقائق',
+ other: '{{count}} دقيقة'
+ },
+
+ aboutXHours: {
+ one: 'ساعة واحدة تقريباً',
+ two: 'ساعتين تقريباً',
+ threeToTen: '{{count}} ساعات تقريباً',
+ other: '{{count}} ساعة تقريباً'
+ },
+
+ xHours: {
+ one: 'ساعة واحدة',
+ two: 'ساعتين',
+ threeToTen: '{{count}} ساعات',
+ other: '{{count}} ساعة'
+ },
+
+ xDays: {
+ one: 'يوم واحد',
+ two: 'يومين',
+ threeToTen: '{{count}} أيام',
+ other: '{{count}} يوم'
+ },
+
+ aboutXWeeks: {
+ one: 'أسبوع واحد تقريباً',
+ two: 'أسبوعين تقريباً',
+ threeToTen: '{{count}} أسابيع تقريباً',
+ other: '{{count}} أسبوع تقريباً'
+ },
+
+ xWeeks: {
+ one: 'أسبوع واحد',
+ two: 'أسبوعين',
+ threeToTen: '{{count}} أسابيع',
+ other: '{{count}} أسبوع'
+ },
+
+ aboutXMonths: {
+ one: 'شهر واحد تقريباً',
+ two: 'شهرين تقريباً',
+ threeToTen: '{{count}} أشهر تقريباً',
+ other: '{{count}} شهر تقريباً'
+ },
+
+ xMonths: {
+ one: 'شهر واحد',
+ two: 'شهرين',
+ threeToTen: '{{count}} أشهر',
+ other: '{{count}} شهر'
+ },
+
+ aboutXYears: {
+ one: 'عام واحد تقريباً',
+ two: 'عامين تقريباً',
+ threeToTen: '{{count}} أعوام تقريباً',
+ other: '{{count}} عام تقريباً'
+ },
+
+ xYears: {
+ one: 'عام واحد',
+ two: 'عامين',
+ threeToTen: '{{count}} أعوام',
+ other: '{{count}} عام'
+ },
+
+ overXYears: {
+ one: 'أكثر من عام',
+ two: 'أكثر من عامين',
+ threeToTen: 'أكثر من {{count}} أعوام',
+ other: 'أكثر من {{count}} عام'
+ },
+
+ almostXYears: {
+ one: 'عام واحد تقريباً',
+ two: 'عامين تقريباً',
+ threeToTen: '{{count}} أعوام تقريباً',
+ other: '{{count}} عام تقريباً'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else if (count === 2) {
+ result = formatDistanceLocale[token].two
+ } else if (count <= 10) {
+ result = formatDistanceLocale[token].threeToTen.replace('{{count}}', count)
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'في خلال ' + result
+ } else {
+ return 'منذ ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ar-DZ/_lib/formatLong/index.js b/date-fns/src/locale/ar-DZ/_lib/formatLong/index.js
new file mode 100644
index 0000000..a65ad56
--- /dev/null
+++ b/date-fns/src/locale/ar-DZ/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'MM/dd/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'عند' {{time}}",
+ long: "{{date}} 'عند' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ar-DZ/_lib/formatRelative/index.js b/date-fns/src/locale/ar-DZ/_lib/formatRelative/index.js
new file mode 100644
index 0000000..9276495
--- /dev/null
+++ b/date-fns/src/locale/ar-DZ/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'أخر' eeee 'عند' p",
+ yesterday: "'أمس عند' p",
+ today: "'اليوم عند' p",
+ tomorrow: "'غداً عند' p",
+ nextWeek: "eeee 'عند' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ar-DZ/_lib/localize/index.js b/date-fns/src/locale/ar-DZ/_lib/localize/index.js
new file mode 100644
index 0000000..0a8c733
--- /dev/null
+++ b/date-fns/src/locale/ar-DZ/_lib/localize/index.js
@@ -0,0 +1,163 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['ق', 'ب'],
+ abbreviated: ['ق.م.', 'ب.م.'],
+ wide: ['قبل الميلاد', 'بعد الميلاد']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['ر1', 'ر2', 'ر3', 'ر4'],
+ wide: ['الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع']
+}
+
+var monthValues = {
+ narrow: ['ج', 'ف', 'م', 'أ', 'م', 'ج', 'ج', 'أ', 'س', 'أ', 'ن', 'د'],
+ abbreviated: [
+ 'جانـ',
+ 'فيفـ',
+ 'مارس',
+ 'أفريل',
+ 'مايـ',
+ 'جوانـ',
+ 'جويـ',
+ 'أوت',
+ 'سبتـ',
+ 'أكتـ',
+ 'نوفـ',
+ 'ديسـ'
+ ],
+ wide: [
+ 'جانفي',
+ 'فيفري',
+ 'مارس',
+ 'أفريل',
+ 'ماي',
+ 'جوان',
+ 'جويلية',
+ 'أوت',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+ ]
+}
+
+var dayValues = {
+ narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+ short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
+ abbreviated: ['أحد', 'اثنـ', 'ثلا', 'أربـ', 'خميـ', 'جمعة', 'سبت'],
+ wide: [
+ 'الأحد',
+ 'الاثنين',
+ 'الثلاثاء',
+ 'الأربعاء',
+ 'الخميس',
+ 'الجمعة',
+ 'السبت'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'ن',
+ noon: 'ظ',
+ morning: 'صباحاً',
+ afternoon: 'بعد الظهر',
+ evening: 'مساءاً',
+ night: 'ليلاً'
+ },
+ abbreviated: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ morning: 'صباحاً',
+ afternoon: 'بعد الظهر',
+ evening: 'مساءاً',
+ night: 'ليلاً'
+ },
+ wide: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ morning: 'صباحاً',
+ afternoon: 'بعد الظهر',
+ evening: 'مساءاً',
+ night: 'ليلاً'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'ن',
+ noon: 'ظ',
+ morning: 'في الصباح',
+ afternoon: 'بعد الظـهر',
+ evening: 'في المساء',
+ night: 'في الليل'
+ },
+ abbreviated: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ morning: 'في الصباح',
+ evening: 'في المساء',
+ night: 'في الليل'
+ },
+ wide: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ afternoon: 'بعد الظـهر',
+ evening: 'في المساء',
+ night: 'في الليل'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ return String(dirtyNumber)
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ar-DZ/_lib/match/index.js b/date-fns/src/locale/ar-DZ/_lib/match/index.js
new file mode 100644
index 0000000..98e270c
--- /dev/null
+++ b/date-fns/src/locale/ar-DZ/_lib/match/index.js
@@ -0,0 +1,147 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ق|ب)/i,
+ abbreviated: /^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,
+ wide: /^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i
+}
+var parseEraPatterns = {
+ any: [/^قبل/i, /^بعد/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^ر[1234]/i,
+ wide: /^الربع [1234]/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[جفمأسند]/i,
+ abbreviated: /^(جان|فيف|مار|أفر|ماي|جوا|جوي|أوت|سبت|أكت|نوف|ديس)/i,
+ wide: /^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/i
+}
+
+var parseMonthPatterns = {
+ narrow: [
+ /^ج/i,
+ /^ف/i,
+ /^م/i,
+ /^أ/i,
+ /^م/i,
+ /^ج/i,
+ /^ج/i,
+ /^أ/i,
+ /^س/i,
+ /^أ/i,
+ /^ن/i,
+ /^د/i
+ ],
+ any: [
+ /^جان/i,
+ /^فيف/i,
+ /^مار/i,
+ /^أفر/i,
+ /^ماي/i,
+ /^جوا/i,
+ /^جوي/i,
+ /^أوت/i,
+ /^سبت/i,
+ /^أكت/i,
+ /^نوف/i,
+ /^ديس/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[حنثرخجس]/i,
+ short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,
+ abbreviated: /^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,
+ wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i
+}
+var parseDayPatterns = {
+ narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],
+ wide: [
+ /^الأحد/i,
+ /^الاثنين/i,
+ /^الثلاثاء/i,
+ /^الأربعاء/i,
+ /^الخميس/i,
+ /^الجمعة/i,
+ /^السبت/i
+ ],
+ any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
+ any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mi/i,
+ noon: /^no/i,
+ morning: /morning/i,
+ afternoon: /afternoon/i,
+ evening: /evening/i,
+ night: /night/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ar-DZ/index.d.ts b/date-fns/src/locale/ar-DZ/index.d.ts
new file mode 100644
index 0000000..97f47f1
--- /dev/null
+++ b/date-fns/src/locale/ar-DZ/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { arDZ } from 'date-fns/locale'
+export default arDZ
diff --git a/date-fns/src/locale/ar-DZ/index.js b/date-fns/src/locale/ar-DZ/index.js
new file mode 100644
index 0000000..173a706
--- /dev/null
+++ b/date-fns/src/locale/ar-DZ/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Arabic locale (Algerian Arabic).
+ * @language Algerian Arabic
+ * @iso-639-2 ara
+ * @author Badreddine Boumaza [@badre429]{@link https://github.com/badre429}
+ * @author Ahmed ElShahat [@elshahat]{@link https://github.com/elshahat}
+ */
+var locale = {
+ code: 'ar-DZ',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1,
+ },
+}
+
+export default locale
diff --git a/date-fns/src/locale/ar-DZ/index.js.flow b/date-fns/src/locale/ar-DZ/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ar-DZ/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ar-DZ/snapshot.md b/date-fns/src/locale/ar-DZ/snapshot.md
new file mode 100644
index 0000000..ca2403f
--- /dev/null
+++ b/date-fns/src/locale/ar-DZ/snapshot.md
@@ -0,0 +1,304 @@
+# Algerian Arabic (ar-DZ) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | ر1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ر2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | الربع الأول | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | الربع الثاني | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | ر1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ر2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | الربع الأول | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | الربع الثاني | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | فيفـ | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | جويـ | Invalid Date |
+| | MMMM | 2019-02-11T12:13:14.015Z | فيفري | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | جويلية | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ج | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | فيفـ | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | جويـ | Invalid Date |
+| | LLLL | 2019-02-11T12:13:14.015Z | فيفري | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | جويلية | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ج | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49 | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | الاثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | اثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | الاثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | اثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | الاثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | اثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | الاثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | اثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aaa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aaaa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bbb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bbbb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | بعد الظـهر | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | بعد الظـهر | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 02/11/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | فيفـ 11, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | مايـ 29, 1453 | Invalid Date |
+| | PPP | 1987-02-11T12:13:14.015Z | فيفري 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | الأربعاء, فيفري 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | الأحد, ماي 29, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59 م | Invalid Date |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 م | Invalid Date |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 م GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 م GMT+0 | Invalid Date |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 م GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 م GMT+00:00 | Invalid Date |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 02/11/1987, 12:13 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453, 11:59 م | Invalid Date |
+| | PPpp | 1987-02-11T12:13:14.015Z | فيفـ 11, 1987, 12:13:14 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | مايـ 29, 1453, 11:59:59 م | Invalid Date |
+| | PPPppp | 1987-02-11T12:13:14.015Z | فيفري 11, 1987 عند 12:13:14 م GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453 عند 11:59:59 م GMT+0 | Invalid Date |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | الأربعاء, فيفري 11, 1987 عند 12:13:14 م GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | الأحد, ماي 29, 1453 عند 11:59:59 م GMT+00:00 | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | -------------------------- |
+| 2006-01-01T00:00:00.000Z | 6 أعوام تقريباً | 6 أعوام تقريباً | في خلال 6 أعوام تقريباً |
+| 2005-01-01T00:00:00.000Z | 5 أعوام تقريباً | 5 أعوام تقريباً | في خلال 5 أعوام تقريباً |
+| 2004-01-01T00:00:00.000Z | 4 أعوام تقريباً | 4 أعوام تقريباً | في خلال 4 أعوام تقريباً |
+| 2003-01-01T00:00:00.000Z | 3 أعوام تقريباً | 3 أعوام تقريباً | في خلال 3 أعوام تقريباً |
+| 2002-01-01T00:00:00.000Z | عامين تقريباً | عامين تقريباً | في خلال عامين تقريباً |
+| 2001-06-01T00:00:00.000Z | أكثر من عام | أكثر من عام | في خلال أكثر من عام |
+| 2001-02-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | في خلال عام واحد تقريباً |
+| 2001-01-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | في خلال عام واحد تقريباً |
+| 2000-06-01T00:00:00.000Z | 5 أشهر | 5 أشهر | في خلال 5 أشهر |
+| 2000-03-01T00:00:00.000Z | شهرين | شهرين | في خلال شهرين |
+| 2000-02-01T00:00:00.000Z | شهر واحد تقريباً | شهر واحد تقريباً | في خلال شهر واحد تقريباً |
+| 2000-01-15T00:00:00.000Z | 14 يوم | 14 يوم | في خلال 14 يوم |
+| 2000-01-02T00:00:00.000Z | يوم واحد | يوم واحد | في خلال يوم واحد |
+| 2000-01-01T06:00:00.000Z | 6 ساعات تقريباً | 6 ساعات تقريباً | في خلال 6 ساعات تقريباً |
+| 2000-01-01T01:00:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | في خلال ساعة واحدة تقريباً |
+| 2000-01-01T00:45:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | في خلال ساعة واحدة تقريباً |
+| 2000-01-01T00:30:00.000Z | 30 دقيقة | 30 دقيقة | في خلال 30 دقيقة |
+| 2000-01-01T00:15:00.000Z | 15 دقيقة | 15 دقيقة | في خلال 15 دقيقة |
+| 2000-01-01T00:01:00.000Z | دقيقة واحدة | دقيقة واحدة | في خلال دقيقة واحدة |
+| 2000-01-01T00:00:25.000Z | أقل من دقيقة | نصف دقيقة | في خلال أقل من دقيقة |
+| 2000-01-01T00:00:15.000Z | أقل من دقيقة | أقل من 20 ثانية | في خلال أقل من دقيقة |
+| 2000-01-01T00:00:05.000Z | أقل من دقيقة | أقل من 10 ثواني | في خلال أقل من دقيقة |
+| 2000-01-01T00:00:00.000Z | أقل من دقيقة | أقل من 5 ثواني | منذ أقل من دقيقة |
+| 1999-12-31T23:59:55.000Z | أقل من دقيقة | أقل من 10 ثواني | منذ أقل من دقيقة |
+| 1999-12-31T23:59:45.000Z | أقل من دقيقة | أقل من 20 ثانية | منذ أقل من دقيقة |
+| 1999-12-31T23:59:35.000Z | أقل من دقيقة | نصف دقيقة | منذ أقل من دقيقة |
+| 1999-12-31T23:59:00.000Z | دقيقة واحدة | دقيقة واحدة | منذ دقيقة واحدة |
+| 1999-12-31T23:45:00.000Z | 15 دقيقة | 15 دقيقة | منذ 15 دقيقة |
+| 1999-12-31T23:30:00.000Z | 30 دقيقة | 30 دقيقة | منذ 30 دقيقة |
+| 1999-12-31T23:15:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | منذ ساعة واحدة تقريباً |
+| 1999-12-31T23:00:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | منذ ساعة واحدة تقريباً |
+| 1999-12-31T18:00:00.000Z | 6 ساعات تقريباً | 6 ساعات تقريباً | منذ 6 ساعات تقريباً |
+| 1999-12-30T00:00:00.000Z | يومين | يومين | منذ يومين |
+| 1999-12-15T00:00:00.000Z | 17 يوم | 17 يوم | منذ 17 يوم |
+| 1999-12-01T00:00:00.000Z | شهر واحد تقريباً | شهر واحد تقريباً | منذ شهر واحد تقريباً |
+| 1999-11-01T00:00:00.000Z | شهرين | شهرين | منذ شهرين |
+| 1999-06-01T00:00:00.000Z | 7 أشهر | 7 أشهر | منذ 7 أشهر |
+| 1999-01-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | منذ عام واحد تقريباً |
+| 1998-12-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | منذ عام واحد تقريباً |
+| 1998-06-01T00:00:00.000Z | أكثر من عام | أكثر من عام | منذ أكثر من عام |
+| 1998-01-01T00:00:00.000Z | عامين تقريباً | عامين تقريباً | منذ عامين تقريباً |
+| 1997-01-01T00:00:00.000Z | 3 أعوام تقريباً | 3 أعوام تقريباً | منذ 3 أعوام تقريباً |
+| 1996-01-01T00:00:00.000Z | 4 أعوام تقريباً | 4 أعوام تقريباً | منذ 4 أعوام تقريباً |
+| 1995-01-01T00:00:00.000Z | 5 أعوام تقريباً | 5 أعوام تقريباً | منذ 5 أعوام تقريباً |
+| 1994-01-01T00:00:00.000Z | 6 أعوام تقريباً | 6 أعوام تقريباً | منذ 6 أعوام تقريباً |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 أعوام | في خلال 6 أعوام | 52608 ساعة |
+| 2005-01-01T00:00:00.000Z | 5 أعوام | في خلال 5 أعوام | 43848 ساعة |
+| 2004-01-01T00:00:00.000Z | 4 أعوام | في خلال 4 أعوام | 35064 ساعة |
+| 2003-01-01T00:00:00.000Z | 3 أعوام | في خلال 3 أعوام | 26304 ساعة |
+| 2002-01-01T00:00:00.000Z | عامين | في خلال عامين | 17544 ساعة |
+| 2001-06-01T00:00:00.000Z | عام واحد | في خلال عام واحد | 12408 ساعة |
+| 2001-02-01T00:00:00.000Z | عام واحد | في خلال عام واحد | 9528 ساعة |
+| 2001-01-01T00:00:00.000Z | عام واحد | في خلال عام واحد | 8784 ساعة |
+| 2000-06-01T00:00:00.000Z | 5 أشهر | في خلال 5 أشهر | 3648 ساعة |
+| 2000-03-01T00:00:00.000Z | شهرين | في خلال شهرين | 1440 ساعة |
+| 2000-02-01T00:00:00.000Z | شهر واحد | في خلال شهر واحد | 744 ساعة |
+| 2000-01-15T00:00:00.000Z | 14 يوم | في خلال 14 يوم | 336 ساعة |
+| 2000-01-02T00:00:00.000Z | يوم واحد | في خلال يوم واحد | 24 ساعة |
+| 2000-01-01T06:00:00.000Z | 6 ساعات | في خلال 6 ساعات | 6 ساعات |
+| 2000-01-01T01:00:00.000Z | ساعة واحدة | في خلال ساعة واحدة | ساعة واحدة |
+| 2000-01-01T00:45:00.000Z | 45 دقيقة | في خلال 45 دقيقة | ساعة واحدة |
+| 2000-01-01T00:30:00.000Z | 30 دقيقة | في خلال 30 دقيقة | ساعة واحدة |
+| 2000-01-01T00:15:00.000Z | 15 دقيقة | في خلال 15 دقيقة | 0 ساعات |
+| 2000-01-01T00:01:00.000Z | دقيقة واحدة | في خلال دقيقة واحدة | 0 ساعات |
+| 2000-01-01T00:00:25.000Z | 25 ثانية | في خلال 25 ثانية | 0 ساعات |
+| 2000-01-01T00:00:15.000Z | 15 ثانية | في خلال 15 ثانية | 0 ساعات |
+| 2000-01-01T00:00:05.000Z | 5 ثواني | في خلال 5 ثواني | 0 ساعات |
+| 2000-01-01T00:00:00.000Z | 0 ثواني | منذ 0 ثواني | 0 ساعات |
+| 1999-12-31T23:59:55.000Z | 5 ثواني | منذ 5 ثواني | 0 ساعات |
+| 1999-12-31T23:59:45.000Z | 15 ثانية | منذ 15 ثانية | 0 ساعات |
+| 1999-12-31T23:59:35.000Z | 25 ثانية | منذ 25 ثانية | 0 ساعات |
+| 1999-12-31T23:59:00.000Z | دقيقة واحدة | منذ دقيقة واحدة | 0 ساعات |
+| 1999-12-31T23:45:00.000Z | 15 دقيقة | منذ 15 دقيقة | 0 ساعات |
+| 1999-12-31T23:30:00.000Z | 30 دقيقة | منذ 30 دقيقة | ساعة واحدة |
+| 1999-12-31T23:15:00.000Z | 45 دقيقة | منذ 45 دقيقة | ساعة واحدة |
+| 1999-12-31T23:00:00.000Z | ساعة واحدة | منذ ساعة واحدة | ساعة واحدة |
+| 1999-12-31T18:00:00.000Z | 6 ساعات | منذ 6 ساعات | 6 ساعات |
+| 1999-12-30T00:00:00.000Z | يومين | منذ يومين | 48 ساعة |
+| 1999-12-15T00:00:00.000Z | 17 يوم | منذ 17 يوم | 408 ساعة |
+| 1999-12-01T00:00:00.000Z | شهر واحد | منذ شهر واحد | 744 ساعة |
+| 1999-11-01T00:00:00.000Z | شهرين | منذ شهرين | 1464 ساعة |
+| 1999-06-01T00:00:00.000Z | 7 أشهر | منذ 7 أشهر | 5136 ساعة |
+| 1999-01-01T00:00:00.000Z | عام واحد | منذ عام واحد | 8760 ساعة |
+| 1998-12-01T00:00:00.000Z | عام واحد | منذ عام واحد | 9504 ساعة |
+| 1998-06-01T00:00:00.000Z | عامين | منذ عامين | 13896 ساعة |
+| 1998-01-01T00:00:00.000Z | عامين | منذ عامين | 17520 ساعة |
+| 1997-01-01T00:00:00.000Z | 3 أعوام | منذ 3 أعوام | 26280 ساعة |
+| 1996-01-01T00:00:00.000Z | 4 أعوام | منذ 4 أعوام | 35064 ساعة |
+| 1995-01-01T00:00:00.000Z | 5 أعوام | منذ 5 أعوام | 43824 ساعة |
+| 1994-01-01T00:00:00.000Z | 6 أعوام | منذ 6 أعوام | 52584 ساعة |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 01/10/2000 |
+| 2000-01-05T00:00:00.000Z | الأربعاء عند 12:00 ص |
+| 2000-01-02T00:00:00.000Z | غداً عند 12:00 ص |
+| 2000-01-01T00:00:00.000Z | اليوم عند 12:00 ص |
+| 1999-12-31T00:00:00.000Z | أمس عند 12:00 ص |
+| 1999-12-27T00:00:00.000Z | أخر الاثنين عند 12:00 ص |
+| 1999-12-21T00:00:00.000Z | 12/21/1999 |
diff --git a/date-fns/src/locale/ar-MA/_lib/formatDistance/index.js b/date-fns/src/locale/ar-MA/_lib/formatDistance/index.js
new file mode 100644
index 0000000..bcdb373
--- /dev/null
+++ b/date-fns/src/locale/ar-MA/_lib/formatDistance/index.js
@@ -0,0 +1,135 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'أقل من ثانية واحدة',
+ two: 'أقل من ثانتين',
+ threeToTen: 'أقل من {{count}} ثواني',
+ other: 'أقل من {{count}} ثانية'
+ },
+
+ xSeconds: {
+ one: 'ثانية واحدة',
+ two: 'ثانتين',
+ threeToTen: '{{count}} ثواني',
+ other: '{{count}} ثانية'
+ },
+
+ halfAMinute: 'نصف دقيقة',
+
+ lessThanXMinutes: {
+ one: 'أقل من دقيقة',
+ two: 'أقل من دقيقتين',
+ threeToTen: 'أقل من {{count}} دقائق',
+ other: 'أقل من {{count}} دقيقة'
+ },
+
+ xMinutes: {
+ one: 'دقيقة واحدة',
+ two: 'دقيقتين',
+ threeToTen: '{{count}} دقائق',
+ other: '{{count}} دقيقة'
+ },
+
+ aboutXHours: {
+ one: 'ساعة واحدة تقريباً',
+ two: 'ساعتين تقريباً',
+ threeToTen: '{{count}} ساعات تقريباً',
+ other: '{{count}} ساعة تقريباً'
+ },
+
+ xHours: {
+ one: 'ساعة واحدة',
+ two: 'ساعتين',
+ threeToTen: '{{count}} ساعات',
+ other: '{{count}} ساعة'
+ },
+
+ xDays: {
+ one: 'يوم واحد',
+ two: 'يومين',
+ threeToTen: '{{count}} أيام',
+ other: '{{count}} يوم'
+ },
+
+ aboutXWeeks: {
+ one: 'أسبوع واحد تقريباً',
+ two: 'أسبوعين تقريباً',
+ threeToTen: '{{count}} أسابيع تقريباً',
+ other: '{{count}} أسبوع تقريباً'
+ },
+
+ xWeeks: {
+ one: 'أسبوع واحد',
+ two: 'أسبوعين',
+ threeToTen: '{{count}} أسابيع',
+ other: '{{count}} أسبوع'
+ },
+
+ aboutXMonths: {
+ one: 'شهر واحد تقريباً',
+ two: 'شهرين تقريباً',
+ threeToTen: '{{count}} أشهر تقريباً',
+ other: '{{count}} شهر تقريباً'
+ },
+
+ xMonths: {
+ one: 'شهر واحد',
+ two: 'شهرين',
+ threeToTen: '{{count}} أشهر',
+ other: '{{count}} شهر'
+ },
+
+ aboutXYears: {
+ one: 'عام واحد تقريباً',
+ two: 'عامين تقريباً',
+ threeToTen: '{{count}} أعوام تقريباً',
+ other: '{{count}} عام تقريباً'
+ },
+
+ xYears: {
+ one: 'عام واحد',
+ two: 'عامين',
+ threeToTen: '{{count}} أعوام',
+ other: '{{count}} عام'
+ },
+
+ overXYears: {
+ one: 'أكثر من عام',
+ two: 'أكثر من عامين',
+ threeToTen: 'أكثر من {{count}} أعوام',
+ other: 'أكثر من {{count}} عام'
+ },
+
+ almostXYears: {
+ one: 'عام واحد تقريباً',
+ two: 'عامين تقريباً',
+ threeToTen: '{{count}} أعوام تقريباً',
+ other: '{{count}} عام تقريباً'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else if (count === 2) {
+ result = formatDistanceLocale[token].two
+ } else if (count <= 10) {
+ result = formatDistanceLocale[token].threeToTen.replace('{{count}}', count)
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'في خلال ' + result
+ } else {
+ return 'منذ ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ar-MA/_lib/formatLong/index.js b/date-fns/src/locale/ar-MA/_lib/formatLong/index.js
new file mode 100644
index 0000000..a65ad56
--- /dev/null
+++ b/date-fns/src/locale/ar-MA/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'MM/dd/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'عند' {{time}}",
+ long: "{{date}} 'عند' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ar-MA/_lib/formatRelative/index.js b/date-fns/src/locale/ar-MA/_lib/formatRelative/index.js
new file mode 100644
index 0000000..9276495
--- /dev/null
+++ b/date-fns/src/locale/ar-MA/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'أخر' eeee 'عند' p",
+ yesterday: "'أمس عند' p",
+ today: "'اليوم عند' p",
+ tomorrow: "'غداً عند' p",
+ nextWeek: "eeee 'عند' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ar-MA/_lib/localize/index.js b/date-fns/src/locale/ar-MA/_lib/localize/index.js
new file mode 100644
index 0000000..f165992
--- /dev/null
+++ b/date-fns/src/locale/ar-MA/_lib/localize/index.js
@@ -0,0 +1,163 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['ق', 'ب'],
+ abbreviated: ['ق.م.', 'ب.م.'],
+ wide: ['قبل الميلاد', 'بعد الميلاد']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['ر1', 'ر2', 'ر3', 'ر4'],
+ wide: ['الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع']
+}
+
+var monthValues = {
+ narrow: ['ي', 'ف', 'م', 'أ', 'م', 'ي', 'ي', 'غ', 'ش', 'أ', 'ن', 'د'],
+ abbreviated: [
+ 'ينا',
+ 'فبر',
+ 'مارس',
+ 'أبريل',
+ 'ماي',
+ 'يونـ',
+ 'يولـ',
+ 'غشت',
+ 'شتنـ',
+ 'أكتـ',
+ 'نونـ',
+ 'دجنـ'
+ ],
+ wide: [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'ماي',
+ 'يونيو',
+ 'يوليوز',
+ 'غشت',
+ 'شتنبر',
+ 'أكتوبر',
+ 'نونبر',
+ 'دجنبر'
+ ]
+}
+
+var dayValues = {
+ narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+ short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
+ abbreviated: ['أحد', 'اثنـ', 'ثلا', 'أربـ', 'خميـ', 'جمعة', 'سبت'],
+ wide: [
+ 'الأحد',
+ 'الإثنين',
+ 'الثلاثاء',
+ 'الأربعاء',
+ 'الخميس',
+ 'الجمعة',
+ 'السبت'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'ن',
+ noon: 'ظ',
+ morning: 'صباحاً',
+ afternoon: 'بعد الظهر',
+ evening: 'مساءاً',
+ night: 'ليلاً'
+ },
+ abbreviated: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ morning: 'صباحاً',
+ afternoon: 'بعد الظهر',
+ evening: 'مساءاً',
+ night: 'ليلاً'
+ },
+ wide: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ morning: 'صباحاً',
+ afternoon: 'بعد الظهر',
+ evening: 'مساءاً',
+ night: 'ليلاً'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'ن',
+ noon: 'ظ',
+ morning: 'في الصباح',
+ afternoon: 'بعد الظـهر',
+ evening: 'في المساء',
+ night: 'في الليل'
+ },
+ abbreviated: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ morning: 'في الصباح',
+ evening: 'في المساء',
+ night: 'في الليل'
+ },
+ wide: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ afternoon: 'بعد الظـهر',
+ evening: 'في المساء',
+ night: 'في الليل'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ return String(dirtyNumber)
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ar-MA/_lib/match/index.js b/date-fns/src/locale/ar-MA/_lib/match/index.js
new file mode 100644
index 0000000..62c87a5
--- /dev/null
+++ b/date-fns/src/locale/ar-MA/_lib/match/index.js
@@ -0,0 +1,146 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ق|ب)/i,
+ abbreviated: /^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,
+ wide: /^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i
+}
+var parseEraPatterns = {
+ any: [/^قبل/i, /^بعد/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^ر[1234]/i,
+ wide: /^الربع [1234]/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[يفمأمسند]/i,
+ abbreviated: /^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i,
+ wide: /^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^ي/i,
+ /^ف/i,
+ /^م/i,
+ /^أ/i,
+ /^م/i,
+ /^ي/i,
+ /^ي/i,
+ /^غ/i,
+ /^ش/i,
+ /^أ/i,
+ /^ن/i,
+ /^د/i
+ ],
+ any: [
+ /^ين/i,
+ /^فب/i,
+ /^مار/i,
+ /^أب/i,
+ /^ماي/i,
+ /^يون/i,
+ /^يول/i,
+ /^غشت/i,
+ /^ش/i,
+ /^أك/i,
+ /^ن/i,
+ /^د/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[حنثرخجس]/i,
+ short: /^(أحد|إثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,
+ abbreviated: /^(أحد|إثن|ثلا|أرب|خمي|جمعة|سبت)/i,
+ wide: /^(الأحد|الإثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i
+}
+var parseDayPatterns = {
+ narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],
+ wide: [
+ /^الأحد/i,
+ /^الإثنين/i,
+ /^الثلاثاء/i,
+ /^الأربعاء/i,
+ /^الخميس/i,
+ /^الجمعة/i,
+ /^السبت/i
+ ],
+ any: [/^أح/i, /^إث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
+ any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mi/i,
+ noon: /^no/i,
+ morning: /morning/i,
+ afternoon: /afternoon/i,
+ evening: /evening/i,
+ night: /night/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ar-MA/index.d.ts b/date-fns/src/locale/ar-MA/index.d.ts
new file mode 100644
index 0000000..b12ae41
--- /dev/null
+++ b/date-fns/src/locale/ar-MA/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { arMA } from 'date-fns/locale'
+export default arMA
diff --git a/date-fns/src/locale/ar-MA/index.js b/date-fns/src/locale/ar-MA/index.js
new file mode 100644
index 0000000..0f9acc3
--- /dev/null
+++ b/date-fns/src/locale/ar-MA/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Arabic locale (Moroccan Arabic).
+ * @language Moroccan Arabic
+ * @iso-639-2 ara
+ * @author Achraf Rrami [@rramiachraf]{@link https://github.com/rramiachraf}
+ */
+var locale = {
+ code: 'ar-MA',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ // Monday is 1
+ weekStartsOn: 1,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ar-MA/index.js.flow b/date-fns/src/locale/ar-MA/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ar-MA/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ar-MA/snapshot.md b/date-fns/src/locale/ar-MA/snapshot.md
new file mode 100644
index 0000000..ccb0c1c
--- /dev/null
+++ b/date-fns/src/locale/ar-MA/snapshot.md
@@ -0,0 +1,304 @@
+# Moroccan Arabic (ar-MA) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | ر1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ر2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | الربع الأول | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | الربع الثاني | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | ر1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ر2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | الربع الأول | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | الربع الثاني | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | فبر | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | يولـ | Invalid Date |
+| | MMMM | 2019-02-11T12:13:14.015Z | فبراير | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | يوليوز | Invalid Date |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ي | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | فبر | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | يولـ | Invalid Date |
+| | LLLL | 2019-02-11T12:13:14.015Z | فبراير | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | يوليوز | Invalid Date |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ي | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | الإثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | اثنين | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | الإثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | اثنين | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | الإثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | اثنين | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | الإثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | اثنين | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aaa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aaaa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bbb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bbbb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | بعد الظـهر | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | بعد الظـهر | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 02/11/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | فبر 11, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | فبراير 11, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | الأربعاء, فبراير 11, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | الأحد, ماي 29, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59 م | Invalid Date |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 م | Invalid Date |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 م GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 م GMT+0 | Invalid Date |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 م GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 م GMT+00:00 | Invalid Date |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 02/11/1987, 12:13 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453, 11:59 م | Invalid Date |
+| | PPpp | 1987-02-11T12:13:14.015Z | فبر 11, 1987, 12:13:14 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453, 11:59:59 م | Invalid Date |
+| | PPPppp | 1987-02-11T12:13:14.015Z | فبراير 11, 1987 عند 12:13:14 م GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453 عند 11:59:59 م GMT+0 | Invalid Date |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | الأربعاء, فبراير 11, 1987 عند 12:13:14 م GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | الأحد, ماي 29, 1453 عند 11:59:59 م GMT+00:00 | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | -------------------------- |
+| 2006-01-01T00:00:00.000Z | 6 أعوام تقريباً | 6 أعوام تقريباً | في خلال 6 أعوام تقريباً |
+| 2005-01-01T00:00:00.000Z | 5 أعوام تقريباً | 5 أعوام تقريباً | في خلال 5 أعوام تقريباً |
+| 2004-01-01T00:00:00.000Z | 4 أعوام تقريباً | 4 أعوام تقريباً | في خلال 4 أعوام تقريباً |
+| 2003-01-01T00:00:00.000Z | 3 أعوام تقريباً | 3 أعوام تقريباً | في خلال 3 أعوام تقريباً |
+| 2002-01-01T00:00:00.000Z | عامين تقريباً | عامين تقريباً | في خلال عامين تقريباً |
+| 2001-06-01T00:00:00.000Z | أكثر من عام | أكثر من عام | في خلال أكثر من عام |
+| 2001-02-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | في خلال عام واحد تقريباً |
+| 2001-01-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | في خلال عام واحد تقريباً |
+| 2000-06-01T00:00:00.000Z | 5 أشهر | 5 أشهر | في خلال 5 أشهر |
+| 2000-03-01T00:00:00.000Z | شهرين | شهرين | في خلال شهرين |
+| 2000-02-01T00:00:00.000Z | شهر واحد تقريباً | شهر واحد تقريباً | في خلال شهر واحد تقريباً |
+| 2000-01-15T00:00:00.000Z | 14 يوم | 14 يوم | في خلال 14 يوم |
+| 2000-01-02T00:00:00.000Z | يوم واحد | يوم واحد | في خلال يوم واحد |
+| 2000-01-01T06:00:00.000Z | 6 ساعات تقريباً | 6 ساعات تقريباً | في خلال 6 ساعات تقريباً |
+| 2000-01-01T01:00:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | في خلال ساعة واحدة تقريباً |
+| 2000-01-01T00:45:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | في خلال ساعة واحدة تقريباً |
+| 2000-01-01T00:30:00.000Z | 30 دقيقة | 30 دقيقة | في خلال 30 دقيقة |
+| 2000-01-01T00:15:00.000Z | 15 دقيقة | 15 دقيقة | في خلال 15 دقيقة |
+| 2000-01-01T00:01:00.000Z | دقيقة واحدة | دقيقة واحدة | في خلال دقيقة واحدة |
+| 2000-01-01T00:00:25.000Z | أقل من دقيقة | نصف دقيقة | في خلال أقل من دقيقة |
+| 2000-01-01T00:00:15.000Z | أقل من دقيقة | أقل من 20 ثانية | في خلال أقل من دقيقة |
+| 2000-01-01T00:00:05.000Z | أقل من دقيقة | أقل من 10 ثواني | في خلال أقل من دقيقة |
+| 2000-01-01T00:00:00.000Z | أقل من دقيقة | أقل من 5 ثواني | منذ أقل من دقيقة |
+| 1999-12-31T23:59:55.000Z | أقل من دقيقة | أقل من 10 ثواني | منذ أقل من دقيقة |
+| 1999-12-31T23:59:45.000Z | أقل من دقيقة | أقل من 20 ثانية | منذ أقل من دقيقة |
+| 1999-12-31T23:59:35.000Z | أقل من دقيقة | نصف دقيقة | منذ أقل من دقيقة |
+| 1999-12-31T23:59:00.000Z | دقيقة واحدة | دقيقة واحدة | منذ دقيقة واحدة |
+| 1999-12-31T23:45:00.000Z | 15 دقيقة | 15 دقيقة | منذ 15 دقيقة |
+| 1999-12-31T23:30:00.000Z | 30 دقيقة | 30 دقيقة | منذ 30 دقيقة |
+| 1999-12-31T23:15:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | منذ ساعة واحدة تقريباً |
+| 1999-12-31T23:00:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | منذ ساعة واحدة تقريباً |
+| 1999-12-31T18:00:00.000Z | 6 ساعات تقريباً | 6 ساعات تقريباً | منذ 6 ساعات تقريباً |
+| 1999-12-30T00:00:00.000Z | يومين | يومين | منذ يومين |
+| 1999-12-15T00:00:00.000Z | 17 يوم | 17 يوم | منذ 17 يوم |
+| 1999-12-01T00:00:00.000Z | شهر واحد تقريباً | شهر واحد تقريباً | منذ شهر واحد تقريباً |
+| 1999-11-01T00:00:00.000Z | شهرين | شهرين | منذ شهرين |
+| 1999-06-01T00:00:00.000Z | 7 أشهر | 7 أشهر | منذ 7 أشهر |
+| 1999-01-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | منذ عام واحد تقريباً |
+| 1998-12-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | منذ عام واحد تقريباً |
+| 1998-06-01T00:00:00.000Z | أكثر من عام | أكثر من عام | منذ أكثر من عام |
+| 1998-01-01T00:00:00.000Z | عامين تقريباً | عامين تقريباً | منذ عامين تقريباً |
+| 1997-01-01T00:00:00.000Z | 3 أعوام تقريباً | 3 أعوام تقريباً | منذ 3 أعوام تقريباً |
+| 1996-01-01T00:00:00.000Z | 4 أعوام تقريباً | 4 أعوام تقريباً | منذ 4 أعوام تقريباً |
+| 1995-01-01T00:00:00.000Z | 5 أعوام تقريباً | 5 أعوام تقريباً | منذ 5 أعوام تقريباً |
+| 1994-01-01T00:00:00.000Z | 6 أعوام تقريباً | 6 أعوام تقريباً | منذ 6 أعوام تقريباً |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 أعوام | في خلال 6 أعوام | 52608 ساعة |
+| 2005-01-01T00:00:00.000Z | 5 أعوام | في خلال 5 أعوام | 43848 ساعة |
+| 2004-01-01T00:00:00.000Z | 4 أعوام | في خلال 4 أعوام | 35064 ساعة |
+| 2003-01-01T00:00:00.000Z | 3 أعوام | في خلال 3 أعوام | 26304 ساعة |
+| 2002-01-01T00:00:00.000Z | عامين | في خلال عامين | 17544 ساعة |
+| 2001-06-01T00:00:00.000Z | عام واحد | في خلال عام واحد | 12408 ساعة |
+| 2001-02-01T00:00:00.000Z | عام واحد | في خلال عام واحد | 9528 ساعة |
+| 2001-01-01T00:00:00.000Z | عام واحد | في خلال عام واحد | 8784 ساعة |
+| 2000-06-01T00:00:00.000Z | 5 أشهر | في خلال 5 أشهر | 3648 ساعة |
+| 2000-03-01T00:00:00.000Z | شهرين | في خلال شهرين | 1440 ساعة |
+| 2000-02-01T00:00:00.000Z | شهر واحد | في خلال شهر واحد | 744 ساعة |
+| 2000-01-15T00:00:00.000Z | 14 يوم | في خلال 14 يوم | 336 ساعة |
+| 2000-01-02T00:00:00.000Z | يوم واحد | في خلال يوم واحد | 24 ساعة |
+| 2000-01-01T06:00:00.000Z | 6 ساعات | في خلال 6 ساعات | 6 ساعات |
+| 2000-01-01T01:00:00.000Z | ساعة واحدة | في خلال ساعة واحدة | ساعة واحدة |
+| 2000-01-01T00:45:00.000Z | 45 دقيقة | في خلال 45 دقيقة | ساعة واحدة |
+| 2000-01-01T00:30:00.000Z | 30 دقيقة | في خلال 30 دقيقة | ساعة واحدة |
+| 2000-01-01T00:15:00.000Z | 15 دقيقة | في خلال 15 دقيقة | 0 ساعات |
+| 2000-01-01T00:01:00.000Z | دقيقة واحدة | في خلال دقيقة واحدة | 0 ساعات |
+| 2000-01-01T00:00:25.000Z | 25 ثانية | في خلال 25 ثانية | 0 ساعات |
+| 2000-01-01T00:00:15.000Z | 15 ثانية | في خلال 15 ثانية | 0 ساعات |
+| 2000-01-01T00:00:05.000Z | 5 ثواني | في خلال 5 ثواني | 0 ساعات |
+| 2000-01-01T00:00:00.000Z | 0 ثواني | منذ 0 ثواني | 0 ساعات |
+| 1999-12-31T23:59:55.000Z | 5 ثواني | منذ 5 ثواني | 0 ساعات |
+| 1999-12-31T23:59:45.000Z | 15 ثانية | منذ 15 ثانية | 0 ساعات |
+| 1999-12-31T23:59:35.000Z | 25 ثانية | منذ 25 ثانية | 0 ساعات |
+| 1999-12-31T23:59:00.000Z | دقيقة واحدة | منذ دقيقة واحدة | 0 ساعات |
+| 1999-12-31T23:45:00.000Z | 15 دقيقة | منذ 15 دقيقة | 0 ساعات |
+| 1999-12-31T23:30:00.000Z | 30 دقيقة | منذ 30 دقيقة | ساعة واحدة |
+| 1999-12-31T23:15:00.000Z | 45 دقيقة | منذ 45 دقيقة | ساعة واحدة |
+| 1999-12-31T23:00:00.000Z | ساعة واحدة | منذ ساعة واحدة | ساعة واحدة |
+| 1999-12-31T18:00:00.000Z | 6 ساعات | منذ 6 ساعات | 6 ساعات |
+| 1999-12-30T00:00:00.000Z | يومين | منذ يومين | 48 ساعة |
+| 1999-12-15T00:00:00.000Z | 17 يوم | منذ 17 يوم | 408 ساعة |
+| 1999-12-01T00:00:00.000Z | شهر واحد | منذ شهر واحد | 744 ساعة |
+| 1999-11-01T00:00:00.000Z | شهرين | منذ شهرين | 1464 ساعة |
+| 1999-06-01T00:00:00.000Z | 7 أشهر | منذ 7 أشهر | 5136 ساعة |
+| 1999-01-01T00:00:00.000Z | عام واحد | منذ عام واحد | 8760 ساعة |
+| 1998-12-01T00:00:00.000Z | عام واحد | منذ عام واحد | 9504 ساعة |
+| 1998-06-01T00:00:00.000Z | عامين | منذ عامين | 13896 ساعة |
+| 1998-01-01T00:00:00.000Z | عامين | منذ عامين | 17520 ساعة |
+| 1997-01-01T00:00:00.000Z | 3 أعوام | منذ 3 أعوام | 26280 ساعة |
+| 1996-01-01T00:00:00.000Z | 4 أعوام | منذ 4 أعوام | 35064 ساعة |
+| 1995-01-01T00:00:00.000Z | 5 أعوام | منذ 5 أعوام | 43824 ساعة |
+| 1994-01-01T00:00:00.000Z | 6 أعوام | منذ 6 أعوام | 52584 ساعة |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 01/10/2000 |
+| 2000-01-05T00:00:00.000Z | الأربعاء عند 12:00 ص |
+| 2000-01-02T00:00:00.000Z | غداً عند 12:00 ص |
+| 2000-01-01T00:00:00.000Z | اليوم عند 12:00 ص |
+| 1999-12-31T00:00:00.000Z | أمس عند 12:00 ص |
+| 1999-12-27T00:00:00.000Z | أخر الإثنين عند 12:00 ص |
+| 1999-12-21T00:00:00.000Z | 12/21/1999 |
diff --git a/date-fns/src/locale/ar-SA/_lib/formatDistance/index.js b/date-fns/src/locale/ar-SA/_lib/formatDistance/index.js
new file mode 100644
index 0000000..bcdb373
--- /dev/null
+++ b/date-fns/src/locale/ar-SA/_lib/formatDistance/index.js
@@ -0,0 +1,135 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'أقل من ثانية واحدة',
+ two: 'أقل من ثانتين',
+ threeToTen: 'أقل من {{count}} ثواني',
+ other: 'أقل من {{count}} ثانية'
+ },
+
+ xSeconds: {
+ one: 'ثانية واحدة',
+ two: 'ثانتين',
+ threeToTen: '{{count}} ثواني',
+ other: '{{count}} ثانية'
+ },
+
+ halfAMinute: 'نصف دقيقة',
+
+ lessThanXMinutes: {
+ one: 'أقل من دقيقة',
+ two: 'أقل من دقيقتين',
+ threeToTen: 'أقل من {{count}} دقائق',
+ other: 'أقل من {{count}} دقيقة'
+ },
+
+ xMinutes: {
+ one: 'دقيقة واحدة',
+ two: 'دقيقتين',
+ threeToTen: '{{count}} دقائق',
+ other: '{{count}} دقيقة'
+ },
+
+ aboutXHours: {
+ one: 'ساعة واحدة تقريباً',
+ two: 'ساعتين تقريباً',
+ threeToTen: '{{count}} ساعات تقريباً',
+ other: '{{count}} ساعة تقريباً'
+ },
+
+ xHours: {
+ one: 'ساعة واحدة',
+ two: 'ساعتين',
+ threeToTen: '{{count}} ساعات',
+ other: '{{count}} ساعة'
+ },
+
+ xDays: {
+ one: 'يوم واحد',
+ two: 'يومين',
+ threeToTen: '{{count}} أيام',
+ other: '{{count}} يوم'
+ },
+
+ aboutXWeeks: {
+ one: 'أسبوع واحد تقريباً',
+ two: 'أسبوعين تقريباً',
+ threeToTen: '{{count}} أسابيع تقريباً',
+ other: '{{count}} أسبوع تقريباً'
+ },
+
+ xWeeks: {
+ one: 'أسبوع واحد',
+ two: 'أسبوعين',
+ threeToTen: '{{count}} أسابيع',
+ other: '{{count}} أسبوع'
+ },
+
+ aboutXMonths: {
+ one: 'شهر واحد تقريباً',
+ two: 'شهرين تقريباً',
+ threeToTen: '{{count}} أشهر تقريباً',
+ other: '{{count}} شهر تقريباً'
+ },
+
+ xMonths: {
+ one: 'شهر واحد',
+ two: 'شهرين',
+ threeToTen: '{{count}} أشهر',
+ other: '{{count}} شهر'
+ },
+
+ aboutXYears: {
+ one: 'عام واحد تقريباً',
+ two: 'عامين تقريباً',
+ threeToTen: '{{count}} أعوام تقريباً',
+ other: '{{count}} عام تقريباً'
+ },
+
+ xYears: {
+ one: 'عام واحد',
+ two: 'عامين',
+ threeToTen: '{{count}} أعوام',
+ other: '{{count}} عام'
+ },
+
+ overXYears: {
+ one: 'أكثر من عام',
+ two: 'أكثر من عامين',
+ threeToTen: 'أكثر من {{count}} أعوام',
+ other: 'أكثر من {{count}} عام'
+ },
+
+ almostXYears: {
+ one: 'عام واحد تقريباً',
+ two: 'عامين تقريباً',
+ threeToTen: '{{count}} أعوام تقريباً',
+ other: '{{count}} عام تقريباً'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else if (count === 2) {
+ result = formatDistanceLocale[token].two
+ } else if (count <= 10) {
+ result = formatDistanceLocale[token].threeToTen.replace('{{count}}', count)
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'في خلال ' + result
+ } else {
+ return 'منذ ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ar-SA/_lib/formatLong/index.js b/date-fns/src/locale/ar-SA/_lib/formatLong/index.js
new file mode 100644
index 0000000..a65ad56
--- /dev/null
+++ b/date-fns/src/locale/ar-SA/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'MM/dd/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'عند' {{time}}",
+ long: "{{date}} 'عند' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ar-SA/_lib/formatRelative/index.js b/date-fns/src/locale/ar-SA/_lib/formatRelative/index.js
new file mode 100644
index 0000000..9276495
--- /dev/null
+++ b/date-fns/src/locale/ar-SA/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'أخر' eeee 'عند' p",
+ yesterday: "'أمس عند' p",
+ today: "'اليوم عند' p",
+ tomorrow: "'غداً عند' p",
+ nextWeek: "eeee 'عند' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ar-SA/_lib/localize/index.js b/date-fns/src/locale/ar-SA/_lib/localize/index.js
new file mode 100644
index 0000000..2d83b5c
--- /dev/null
+++ b/date-fns/src/locale/ar-SA/_lib/localize/index.js
@@ -0,0 +1,163 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['ق', 'ب'],
+ abbreviated: ['ق.م.', 'ب.م.'],
+ wide: ['قبل الميلاد', 'بعد الميلاد']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['ر1', 'ر2', 'ر3', 'ر4'],
+ wide: ['الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع']
+}
+
+var monthValues = {
+ narrow: ['ي', 'ف', 'م', 'أ', 'م', 'ي', 'ي', 'أ', 'س', 'أ', 'ن', 'د'],
+ abbreviated: [
+ 'ينا',
+ 'فبر',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونـ',
+ 'يولـ',
+ 'أغسـ',
+ 'سبتـ',
+ 'أكتـ',
+ 'نوفـ',
+ 'ديسـ'
+ ],
+ wide: [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونيو',
+ 'يوليو',
+ 'أغسطس',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+ ]
+}
+
+var dayValues = {
+ narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+ short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
+ abbreviated: ['أحد', 'اثنـ', 'ثلا', 'أربـ', 'خميـ', 'جمعة', 'سبت'],
+ wide: [
+ 'الأحد',
+ 'الاثنين',
+ 'الثلاثاء',
+ 'الأربعاء',
+ 'الخميس',
+ 'الجمعة',
+ 'السبت'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'ن',
+ noon: 'ظ',
+ morning: 'صباحاً',
+ afternoon: 'بعد الظهر',
+ evening: 'مساءاً',
+ night: 'ليلاً'
+ },
+ abbreviated: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ morning: 'صباحاً',
+ afternoon: 'بعد الظهر',
+ evening: 'مساءاً',
+ night: 'ليلاً'
+ },
+ wide: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ morning: 'صباحاً',
+ afternoon: 'بعد الظهر',
+ evening: 'مساءاً',
+ night: 'ليلاً'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'ن',
+ noon: 'ظ',
+ morning: 'في الصباح',
+ afternoon: 'بعد الظـهر',
+ evening: 'في المساء',
+ night: 'في الليل'
+ },
+ abbreviated: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ morning: 'في الصباح',
+ evening: 'في المساء',
+ night: 'في الليل'
+ },
+ wide: {
+ am: 'ص',
+ pm: 'م',
+ midnight: 'نصف الليل',
+ noon: 'ظهر',
+ afternoon: 'بعد الظـهر',
+ evening: 'في المساء',
+ night: 'في الليل'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ return String(dirtyNumber)
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ar-SA/_lib/match/index.js b/date-fns/src/locale/ar-SA/_lib/match/index.js
new file mode 100644
index 0000000..ad9a68d
--- /dev/null
+++ b/date-fns/src/locale/ar-SA/_lib/match/index.js
@@ -0,0 +1,146 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ق|ب)/i,
+ abbreviated: /^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,
+ wide: /^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i
+}
+var parseEraPatterns = {
+ any: [/^قبل/i, /^بعد/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^ر[1234]/i,
+ wide: /^الربع [1234]/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[يفمأمسند]/i,
+ abbreviated: /^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i,
+ wide: /^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^ي/i,
+ /^ف/i,
+ /^م/i,
+ /^أ/i,
+ /^م/i,
+ /^ي/i,
+ /^ي/i,
+ /^أ/i,
+ /^س/i,
+ /^أ/i,
+ /^ن/i,
+ /^د/i
+ ],
+ any: [
+ /^ين/i,
+ /^ف/i,
+ /^مار/i,
+ /^أب/i,
+ /^ماي/i,
+ /^يون/i,
+ /^يول/i,
+ /^أغ/i,
+ /^س/i,
+ /^أك/i,
+ /^ن/i,
+ /^د/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[حنثرخجس]/i,
+ short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,
+ abbreviated: /^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,
+ wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i
+}
+var parseDayPatterns = {
+ narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],
+ wide: [
+ /^الأحد/i,
+ /^الاثنين/i,
+ /^الثلاثاء/i,
+ /^الأربعاء/i,
+ /^الخميس/i,
+ /^الجمعة/i,
+ /^السبت/i
+ ],
+ any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
+ any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mi/i,
+ noon: /^no/i,
+ morning: /morning/i,
+ afternoon: /afternoon/i,
+ evening: /evening/i,
+ night: /night/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ar-SA/index.d.ts b/date-fns/src/locale/ar-SA/index.d.ts
new file mode 100644
index 0000000..e1a74a0
--- /dev/null
+++ b/date-fns/src/locale/ar-SA/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { arSA } from 'date-fns/locale'
+export default arSA
diff --git a/date-fns/src/locale/ar-SA/index.js b/date-fns/src/locale/ar-SA/index.js
new file mode 100644
index 0000000..bc8b674
--- /dev/null
+++ b/date-fns/src/locale/ar-SA/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Arabic locale (Sauid Arabic).
+ * @language Arabic
+ * @iso-639-2 ara
+ * @author Dhaifallah Alwadani [@dalwadani]{@link https://github.com/dalwadani}
+ */
+var locale = {
+ code: 'ar-SA',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ar-SA/index.js.flow b/date-fns/src/locale/ar-SA/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ar-SA/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ar-SA/snapshot.md b/date-fns/src/locale/ar-SA/snapshot.md
new file mode 100644
index 0000000..0f21930
--- /dev/null
+++ b/date-fns/src/locale/ar-SA/snapshot.md
@@ -0,0 +1,304 @@
+# Arabic (ar-SA) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | ر1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ر2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | الربع الأول | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | الربع الثاني | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | ر1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ر2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | الربع الأول | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | الربع الثاني | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | فبر | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | يولـ | Invalid Date |
+| | MMMM | 2019-02-11T12:13:14.015Z | فبراير | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | يوليو | Invalid Date |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ي | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | فبر | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | يولـ | Invalid Date |
+| | LLLL | 2019-02-11T12:13:14.015Z | فبراير | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | يوليو | Invalid Date |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ي | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49 | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | الاثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | اثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | الاثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | اثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | الاثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | اثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | اثنـ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | الاثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | الجمعة | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | ن | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | اثنين | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعة | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aaa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aaaa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bbb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bbbb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ص | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | م | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ص | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | بعد الظـهر | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | في الصباح | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | بعد الظـهر | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | في المساء | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | في الليل | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 02/11/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | فبر 11, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | مايو 29, 1453 | Invalid Date |
+| | PPP | 1987-02-11T12:13:14.015Z | فبراير 11, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | مايو 29, 1453 | Invalid Date |
+| | PPPP | 1987-02-11T12:13:14.015Z | الأربعاء, فبراير 11, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | الأحد, مايو 29, 1453 | Invalid Date |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59 م | Invalid Date |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 م | Invalid Date |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 م GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 م GMT+0 | Invalid Date |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 م GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 م GMT+00:00 | Invalid Date |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 02/11/1987, 12:13 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453, 11:59 م | Invalid Date |
+| | PPpp | 1987-02-11T12:13:14.015Z | فبر 11, 1987, 12:13:14 م | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | مايو 29, 1453, 11:59:59 م | Invalid Date |
+| | PPPppp | 1987-02-11T12:13:14.015Z | فبراير 11, 1987 عند 12:13:14 م GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | مايو 29, 1453 عند 11:59:59 م GMT+0 | Invalid Date |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | الأربعاء, فبراير 11, 1987 عند 12:13:14 م GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | الأحد, مايو 29, 1453 عند 11:59:59 م GMT+00:00 | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | -------------------------- |
+| 2006-01-01T00:00:00.000Z | 6 أعوام تقريباً | 6 أعوام تقريباً | في خلال 6 أعوام تقريباً |
+| 2005-01-01T00:00:00.000Z | 5 أعوام تقريباً | 5 أعوام تقريباً | في خلال 5 أعوام تقريباً |
+| 2004-01-01T00:00:00.000Z | 4 أعوام تقريباً | 4 أعوام تقريباً | في خلال 4 أعوام تقريباً |
+| 2003-01-01T00:00:00.000Z | 3 أعوام تقريباً | 3 أعوام تقريباً | في خلال 3 أعوام تقريباً |
+| 2002-01-01T00:00:00.000Z | عامين تقريباً | عامين تقريباً | في خلال عامين تقريباً |
+| 2001-06-01T00:00:00.000Z | أكثر من عام | أكثر من عام | في خلال أكثر من عام |
+| 2001-02-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | في خلال عام واحد تقريباً |
+| 2001-01-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | في خلال عام واحد تقريباً |
+| 2000-06-01T00:00:00.000Z | 5 أشهر | 5 أشهر | في خلال 5 أشهر |
+| 2000-03-01T00:00:00.000Z | شهرين | شهرين | في خلال شهرين |
+| 2000-02-01T00:00:00.000Z | شهر واحد تقريباً | شهر واحد تقريباً | في خلال شهر واحد تقريباً |
+| 2000-01-15T00:00:00.000Z | 14 يوم | 14 يوم | في خلال 14 يوم |
+| 2000-01-02T00:00:00.000Z | يوم واحد | يوم واحد | في خلال يوم واحد |
+| 2000-01-01T06:00:00.000Z | 6 ساعات تقريباً | 6 ساعات تقريباً | في خلال 6 ساعات تقريباً |
+| 2000-01-01T01:00:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | في خلال ساعة واحدة تقريباً |
+| 2000-01-01T00:45:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | في خلال ساعة واحدة تقريباً |
+| 2000-01-01T00:30:00.000Z | 30 دقيقة | 30 دقيقة | في خلال 30 دقيقة |
+| 2000-01-01T00:15:00.000Z | 15 دقيقة | 15 دقيقة | في خلال 15 دقيقة |
+| 2000-01-01T00:01:00.000Z | دقيقة واحدة | دقيقة واحدة | في خلال دقيقة واحدة |
+| 2000-01-01T00:00:25.000Z | أقل من دقيقة | نصف دقيقة | في خلال أقل من دقيقة |
+| 2000-01-01T00:00:15.000Z | أقل من دقيقة | أقل من 20 ثانية | في خلال أقل من دقيقة |
+| 2000-01-01T00:00:05.000Z | أقل من دقيقة | أقل من 10 ثواني | في خلال أقل من دقيقة |
+| 2000-01-01T00:00:00.000Z | أقل من دقيقة | أقل من 5 ثواني | منذ أقل من دقيقة |
+| 1999-12-31T23:59:55.000Z | أقل من دقيقة | أقل من 10 ثواني | منذ أقل من دقيقة |
+| 1999-12-31T23:59:45.000Z | أقل من دقيقة | أقل من 20 ثانية | منذ أقل من دقيقة |
+| 1999-12-31T23:59:35.000Z | أقل من دقيقة | نصف دقيقة | منذ أقل من دقيقة |
+| 1999-12-31T23:59:00.000Z | دقيقة واحدة | دقيقة واحدة | منذ دقيقة واحدة |
+| 1999-12-31T23:45:00.000Z | 15 دقيقة | 15 دقيقة | منذ 15 دقيقة |
+| 1999-12-31T23:30:00.000Z | 30 دقيقة | 30 دقيقة | منذ 30 دقيقة |
+| 1999-12-31T23:15:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | منذ ساعة واحدة تقريباً |
+| 1999-12-31T23:00:00.000Z | ساعة واحدة تقريباً | ساعة واحدة تقريباً | منذ ساعة واحدة تقريباً |
+| 1999-12-31T18:00:00.000Z | 6 ساعات تقريباً | 6 ساعات تقريباً | منذ 6 ساعات تقريباً |
+| 1999-12-30T00:00:00.000Z | يومين | يومين | منذ يومين |
+| 1999-12-15T00:00:00.000Z | 17 يوم | 17 يوم | منذ 17 يوم |
+| 1999-12-01T00:00:00.000Z | شهر واحد تقريباً | شهر واحد تقريباً | منذ شهر واحد تقريباً |
+| 1999-11-01T00:00:00.000Z | شهرين | شهرين | منذ شهرين |
+| 1999-06-01T00:00:00.000Z | 7 أشهر | 7 أشهر | منذ 7 أشهر |
+| 1999-01-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | منذ عام واحد تقريباً |
+| 1998-12-01T00:00:00.000Z | عام واحد تقريباً | عام واحد تقريباً | منذ عام واحد تقريباً |
+| 1998-06-01T00:00:00.000Z | أكثر من عام | أكثر من عام | منذ أكثر من عام |
+| 1998-01-01T00:00:00.000Z | عامين تقريباً | عامين تقريباً | منذ عامين تقريباً |
+| 1997-01-01T00:00:00.000Z | 3 أعوام تقريباً | 3 أعوام تقريباً | منذ 3 أعوام تقريباً |
+| 1996-01-01T00:00:00.000Z | 4 أعوام تقريباً | 4 أعوام تقريباً | منذ 4 أعوام تقريباً |
+| 1995-01-01T00:00:00.000Z | 5 أعوام تقريباً | 5 أعوام تقريباً | منذ 5 أعوام تقريباً |
+| 1994-01-01T00:00:00.000Z | 6 أعوام تقريباً | 6 أعوام تقريباً | منذ 6 أعوام تقريباً |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 أعوام | في خلال 6 أعوام | 52608 ساعة |
+| 2005-01-01T00:00:00.000Z | 5 أعوام | في خلال 5 أعوام | 43848 ساعة |
+| 2004-01-01T00:00:00.000Z | 4 أعوام | في خلال 4 أعوام | 35064 ساعة |
+| 2003-01-01T00:00:00.000Z | 3 أعوام | في خلال 3 أعوام | 26304 ساعة |
+| 2002-01-01T00:00:00.000Z | عامين | في خلال عامين | 17544 ساعة |
+| 2001-06-01T00:00:00.000Z | عام واحد | في خلال عام واحد | 12408 ساعة |
+| 2001-02-01T00:00:00.000Z | عام واحد | في خلال عام واحد | 9528 ساعة |
+| 2001-01-01T00:00:00.000Z | عام واحد | في خلال عام واحد | 8784 ساعة |
+| 2000-06-01T00:00:00.000Z | 5 أشهر | في خلال 5 أشهر | 3648 ساعة |
+| 2000-03-01T00:00:00.000Z | شهرين | في خلال شهرين | 1440 ساعة |
+| 2000-02-01T00:00:00.000Z | شهر واحد | في خلال شهر واحد | 744 ساعة |
+| 2000-01-15T00:00:00.000Z | 14 يوم | في خلال 14 يوم | 336 ساعة |
+| 2000-01-02T00:00:00.000Z | يوم واحد | في خلال يوم واحد | 24 ساعة |
+| 2000-01-01T06:00:00.000Z | 6 ساعات | في خلال 6 ساعات | 6 ساعات |
+| 2000-01-01T01:00:00.000Z | ساعة واحدة | في خلال ساعة واحدة | ساعة واحدة |
+| 2000-01-01T00:45:00.000Z | 45 دقيقة | في خلال 45 دقيقة | ساعة واحدة |
+| 2000-01-01T00:30:00.000Z | 30 دقيقة | في خلال 30 دقيقة | ساعة واحدة |
+| 2000-01-01T00:15:00.000Z | 15 دقيقة | في خلال 15 دقيقة | 0 ساعات |
+| 2000-01-01T00:01:00.000Z | دقيقة واحدة | في خلال دقيقة واحدة | 0 ساعات |
+| 2000-01-01T00:00:25.000Z | 25 ثانية | في خلال 25 ثانية | 0 ساعات |
+| 2000-01-01T00:00:15.000Z | 15 ثانية | في خلال 15 ثانية | 0 ساعات |
+| 2000-01-01T00:00:05.000Z | 5 ثواني | في خلال 5 ثواني | 0 ساعات |
+| 2000-01-01T00:00:00.000Z | 0 ثواني | منذ 0 ثواني | 0 ساعات |
+| 1999-12-31T23:59:55.000Z | 5 ثواني | منذ 5 ثواني | 0 ساعات |
+| 1999-12-31T23:59:45.000Z | 15 ثانية | منذ 15 ثانية | 0 ساعات |
+| 1999-12-31T23:59:35.000Z | 25 ثانية | منذ 25 ثانية | 0 ساعات |
+| 1999-12-31T23:59:00.000Z | دقيقة واحدة | منذ دقيقة واحدة | 0 ساعات |
+| 1999-12-31T23:45:00.000Z | 15 دقيقة | منذ 15 دقيقة | 0 ساعات |
+| 1999-12-31T23:30:00.000Z | 30 دقيقة | منذ 30 دقيقة | ساعة واحدة |
+| 1999-12-31T23:15:00.000Z | 45 دقيقة | منذ 45 دقيقة | ساعة واحدة |
+| 1999-12-31T23:00:00.000Z | ساعة واحدة | منذ ساعة واحدة | ساعة واحدة |
+| 1999-12-31T18:00:00.000Z | 6 ساعات | منذ 6 ساعات | 6 ساعات |
+| 1999-12-30T00:00:00.000Z | يومين | منذ يومين | 48 ساعة |
+| 1999-12-15T00:00:00.000Z | 17 يوم | منذ 17 يوم | 408 ساعة |
+| 1999-12-01T00:00:00.000Z | شهر واحد | منذ شهر واحد | 744 ساعة |
+| 1999-11-01T00:00:00.000Z | شهرين | منذ شهرين | 1464 ساعة |
+| 1999-06-01T00:00:00.000Z | 7 أشهر | منذ 7 أشهر | 5136 ساعة |
+| 1999-01-01T00:00:00.000Z | عام واحد | منذ عام واحد | 8760 ساعة |
+| 1998-12-01T00:00:00.000Z | عام واحد | منذ عام واحد | 9504 ساعة |
+| 1998-06-01T00:00:00.000Z | عامين | منذ عامين | 13896 ساعة |
+| 1998-01-01T00:00:00.000Z | عامين | منذ عامين | 17520 ساعة |
+| 1997-01-01T00:00:00.000Z | 3 أعوام | منذ 3 أعوام | 26280 ساعة |
+| 1996-01-01T00:00:00.000Z | 4 أعوام | منذ 4 أعوام | 35064 ساعة |
+| 1995-01-01T00:00:00.000Z | 5 أعوام | منذ 5 أعوام | 43824 ساعة |
+| 1994-01-01T00:00:00.000Z | 6 أعوام | منذ 6 أعوام | 52584 ساعة |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 01/10/2000 |
+| 2000-01-05T00:00:00.000Z | الأربعاء عند 12:00 ص |
+| 2000-01-02T00:00:00.000Z | غداً عند 12:00 ص |
+| 2000-01-01T00:00:00.000Z | اليوم عند 12:00 ص |
+| 1999-12-31T00:00:00.000Z | أمس عند 12:00 ص |
+| 1999-12-27T00:00:00.000Z | أخر الاثنين عند 12:00 ص |
+| 1999-12-21T00:00:00.000Z | 12/21/1999 |
diff --git a/date-fns/src/locale/ar/_lib/formatDistance/index.js b/date-fns/src/locale/ar/_lib/formatDistance/index.js
new file mode 100644
index 0000000..843ac71
--- /dev/null
+++ b/date-fns/src/locale/ar/_lib/formatDistance/index.js
@@ -0,0 +1,91 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'أقل من ثانية واحدة',
+ other: 'أقل من {{count}} ثواني'
+ },
+
+ xSeconds: {
+ one: 'ثانية واحدة',
+ other: '{{count}} ثواني'
+ },
+
+ halfAMinute: 'نصف دقيقة',
+
+ lessThanXMinutes: {
+ one: 'أقل من دقيقة',
+ other: 'أقل من {{count}} دقيقة'
+ },
+
+ xMinutes: {
+ one: 'دقيقة واحدة',
+ other: '{{count}} دقائق'
+ },
+
+ aboutXHours: {
+ one: 'ساعة واحدة تقريباً',
+ other: '{{count}} ساعات تقريباً'
+ },
+
+ xHours: {
+ one: 'ساعة واحدة',
+ other: '{{count}} ساعات'
+ },
+
+ xDays: {
+ one: 'يوم واحد',
+ other: '{{count}} أيام'
+ },
+
+ aboutXMonths: {
+ one: 'شهر واحد تقريباً',
+ other: '{{count}} أشهر تقريباً'
+ },
+
+ xMonths: {
+ one: 'شهر واحد',
+ other: '{{count}} أشهر'
+ },
+
+ aboutXYears: {
+ one: 'عام واحد تقريباً',
+ other: '{{count}} أعوام تقريباً'
+ },
+
+ xYears: {
+ one: 'عام واحد',
+ other: '{{count}} أعوام'
+ },
+
+ overXYears: {
+ one: 'أكثر من عام',
+ other: 'أكثر من {{count}} أعوام'
+ },
+
+ almostXYears: {
+ one: 'عام واحد تقريباً',
+ other: '{{count}} أعوام تقريباً'
+ }
+}
+
+export default function formatDistance (token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'في خلال ' + result
+ } else {
+ return 'منذ ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ar/_lib/formatLong/index.js b/date-fns/src/locale/ar/_lib/formatLong/index.js
new file mode 100644
index 0000000..2cf1867
--- /dev/null
+++ b/date-fns/src/locale/ar/_lib/formatLong/index.js
@@ -0,0 +1,12 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var formatLong = buildFormatLongFn({
+ LT: 'h:mm aa',
+ LTS: 'h:mm:ss aa',
+ L: 'MM/DD/YYYY',
+ LL: 'MMMM D YYYY',
+ LLL: 'MMMM D YYYY h:mm aa',
+ LLLL: 'dddd, MMMM D YYYY h:mm aa'
+})
+
+export default formatLong
diff --git a/date-fns/src/locale/ar/_lib/formatRelative/index.js b/date-fns/src/locale/ar/_lib/formatRelative/index.js
new file mode 100644
index 0000000..52ebbf1
--- /dev/null
+++ b/date-fns/src/locale/ar/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: '[last] dddd [at] LT',
+ yesterday: '[yesterday at] LT',
+ today: '[today at] LT',
+ tomorrow: '[tomorrow at] LT',
+ nextWeek: 'dddd [at] LT',
+ other: 'L'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ar/_lib/localize/index.js b/date-fns/src/locale/ar/_lib/localize/index.js
new file mode 100644
index 0000000..811e9e8
--- /dev/null
+++ b/date-fns/src/locale/ar/_lib/localize/index.js
@@ -0,0 +1,71 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+import buildLocalizeArrayFn from '../../../_lib/buildLocalizeArrayFn/index'
+
+var weekdayValues = {
+ narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+ short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
+ long: [
+ 'الأحد',
+ 'الاثنين',
+ 'الثلاثاء',
+ 'الأربعاء',
+ 'الخميس',
+ 'الجمعة',
+ 'السبت'
+ ]
+}
+
+var monthValues = {
+ short: [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونيو',
+ 'يوليو',
+ 'أغسطس',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+ ],
+ long: [
+ 'كانون الثاني يناير',
+ 'شباط فبراير',
+ 'آذار مارس',
+ 'نيسان أبريل',
+ 'أيار مايو',
+ 'حزيران يونيو',
+ 'تموز يوليو',
+ 'آب أغسطس',
+ 'أيلول سبتمبر',
+ 'تشرين الأول أكتوبر',
+ 'تشرين الثاني نوفمبر',
+ 'كانون الأول ديسمبر'
+ ]
+}
+
+var timeOfDayValues = {
+ uppercase: ['صباح', 'مساء'],
+ lowercase: ['ص', 'م'],
+ long: ['صباحاً', 'مساءً']
+}
+
+function ordinalNumber(dirtyNumber) {
+ return String(dirtyNumber)
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+ weekday: buildLocalizeFn(weekdayValues, 'long'),
+ weekdays: buildLocalizeArrayFn(weekdayValues, 'long'),
+ month: buildLocalizeFn(monthValues, 'long'),
+ months: buildLocalizeArrayFn(monthValues, 'long'),
+ timeOfDay: buildLocalizeFn(timeOfDayValues, 'long', function(hours) {
+ return hours / 12 >= 1 ? 1 : 0
+ }),
+ timesOfDay: buildLocalizeArrayFn(timeOfDayValues, 'long')
+}
+
+export default localize
diff --git a/date-fns/src/locale/ar/_lib/match/index.js b/date-fns/src/locale/ar/_lib/match/index.js
new file mode 100644
index 0000000..5a3f4c5
--- /dev/null
+++ b/date-fns/src/locale/ar/_lib/match/index.js
@@ -0,0 +1,60 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildParseFn from '../../../_lib/buildParseFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import parseDecimal from '../../../_lib/parseDecimal/index'
+
+var matchOrdinalNumbersPattern = /^(\d+)(th|st|nd|rd)?/i
+
+var matchWeekdaysPatterns = {
+ narrow: /^(su|mo|tu|we|th|fr|sa)/i,
+ short: /^(sun|mon|tue|wed|thu|fri|sat)/i,
+ long: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
+}
+
+var parseWeekdayPatterns = {
+ any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
+}
+
+var matchMonthsPatterns = {
+ short: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
+ long: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
+}
+
+var parseMonthPatterns = {
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^may/i,
+ /^jun/i,
+ /^jul/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchTimesOfDayPatterns = {
+ short: /^(am|pm)/i,
+ long: /^([ap]\.?\s?m\.?)/i
+}
+
+var parseTimeOfDayPatterns = {
+ any: [/^a/i, /^p/i]
+}
+
+var match = {
+ ordinalNumbers: buildMatchPatternFn(matchOrdinalNumbersPattern),
+ ordinalNumber: parseDecimal,
+ weekdays: buildMatchFn(matchWeekdaysPatterns, 'long'),
+ weekday: buildParseFn(parseWeekdayPatterns, 'any'),
+ months: buildMatchFn(matchMonthsPatterns, 'long'),
+ month: buildParseFn(parseMonthPatterns, 'any'),
+ timesOfDay: buildMatchFn(matchTimesOfDayPatterns, 'long'),
+ timeOfDay: buildParseFn(parseTimeOfDayPatterns, 'any')
+}
+
+export default match
diff --git a/date-fns/src/locale/ar/index.d.ts b/date-fns/src/locale/ar/index.d.ts
new file mode 100644
index 0000000..61adf3b
--- /dev/null
+++ b/date-fns/src/locale/ar/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ar } from 'date-fns/locale'
+export default ar
diff --git a/date-fns/src/locale/ar/index.js b/date-fns/src/locale/ar/index.js
new file mode 100644
index 0000000..efad6f7
--- /dev/null
+++ b/date-fns/src/locale/ar/index.js
@@ -0,0 +1,32 @@
+// import formatDistance from './_lib/formatDistance/index'
+// import formatLong from './_lib/formatLong/index'
+// import formatRelative from './_lib/formatRelative/index'
+// import localize from './_lib/localize/index'
+// import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Arabic locale (Modern Standard Arabic - Al-fussha).
+ * @language Modern Standard Arabic
+ * @iso-639-2 ara
+ * @author Abdallah Hassan [@AbdallahAHO]{@link https://github.com/AbdallahAHO}
+ */
+// var locale = {
+// code: 'ar',
+// formatDistance: formatDistance,
+// formatLong: formatLong,
+// formatRelative: formatRelative,
+// localize: localize,
+// match: match,
+// options: {
+// weekStartsOn: 6 /* Saturday */,
+// firstWeekContainsDate: 1
+// }
+// }
+
+// export default locale
+
+throw new Error(
+ 'ar locale is currently unavailable. Please check the progress of converting this locale to v2.0.0 in this issue on Github: TBA'
+)
diff --git a/date-fns/src/locale/ar/index.js.flow b/date-fns/src/locale/ar/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ar/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/az/_lib/formatDistance/index.js b/date-fns/src/locale/az/_lib/formatDistance/index.js
new file mode 100644
index 0000000..836a06b
--- /dev/null
+++ b/date-fns/src/locale/az/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'bir saniyədən az',
+ other: '{{count}} bir saniyədən az'
+ },
+
+ xSeconds: {
+ one: '1 saniyə',
+ other: '{{count}} saniyə'
+ },
+
+ halfAMinute: 'yarım dəqiqə',
+
+ lessThanXMinutes: {
+ one: 'bir dəqiqədən az',
+ other: '{{count}} bir dəqiqədən az'
+ },
+
+ xMinutes: {
+ one: 'bir dəqiqə',
+ other: '{{count}} dəqiqə'
+ },
+
+ aboutXHours: {
+ one: 'təxminən 1 saat',
+ other: 'təxminən {{count}} saat'
+ },
+
+ xHours: {
+ one: '1 saat',
+ other: '{{count}} saat'
+ },
+
+ xDays: {
+ one: '1 gün',
+ other: '{{count}} gün'
+ },
+
+ aboutXWeeks: {
+ one: 'təxminən 1 həftə',
+ other: 'təxminən {{count}} həftə'
+ },
+
+ xWeeks: {
+ one: '1 həftə',
+ other: '{{count}} həftə'
+ },
+
+ aboutXMonths: {
+ one: 'təxminən 1 ay',
+ other: 'təxminən {{count}} ay'
+ },
+
+ xMonths: {
+ one: '1 ay',
+ other: '{{count}} ay'
+ },
+
+ aboutXYears: {
+ one: 'təxminən 1 il',
+ other: 'təxminən {{count}} il'
+ },
+
+ xYears: {
+ one: '1 il',
+ other: '{{count}} il'
+ },
+
+ overXYears: {
+ one: '1 ildən çox',
+ other: '{{count}} ildən çox'
+ },
+
+ almostXYears: {
+ one: 'demək olar ki 1 il',
+ other: 'demək olar ki {{count}} il'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ var result
+
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + ' əvvəl'
+ } else {
+ return result + ' sonra'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/az/_lib/formatLong/index.js b/date-fns/src/locale/az/_lib/formatLong/index.js
new file mode 100644
index 0000000..baf216e
--- /dev/null
+++ b/date-fns/src/locale/az/_lib/formatLong/index.js
@@ -0,0 +1,39 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, do MMMM y 'il'",
+ long: "do MMMM y 'il'",
+ medium: "d MMM y 'il'",
+ short: 'dd.MM.yyyy'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+var dateTimeFormats = {
+ full: "{{date}} {{time}} - 'də'",
+ long: "{{date}} {{time}} - 'də'",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/az/_lib/formatRelative/index.js b/date-fns/src/locale/az/_lib/formatRelative/index.js
new file mode 100644
index 0000000..c9c1bc5
--- /dev/null
+++ b/date-fns/src/locale/az/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'sonuncu' eeee p -'də'",
+ yesterday: "'dünən' p -'də'",
+ today: "'bugün' p -'də'",
+ tomorrow: "'sabah' p -'də'",
+ nextWeek: "eeee p -'də'",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/az/_lib/localize/index.js b/date-fns/src/locale/az/_lib/localize/index.js
new file mode 100644
index 0000000..97bd29f
--- /dev/null
+++ b/date-fns/src/locale/az/_lib/localize/index.js
@@ -0,0 +1,194 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['B', 'A'],
+ abbreviated: ['BC', 'AD'],
+ wide: ["Hz. İsa'dan öncə", 'Anno Domini']
+}
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['K1', 'K2', 'K3', 'K4'],
+ wide: ['1ci kvartal', '2ci kvartal', '3cü kvartal', '4cü kvartal'] // Note: in English, the names of days of the week and months are capitalized.
+ // If you are making a new locale based on this one, check if the same is true for the language you're working on.
+ // Generally, formatted dates should look like they are in the middle of a sentence,
+ // e.g. in Spanish language the weekdays and months should be in the lowercase.
+}
+var monthValues = {
+ narrow: ['Y', 'F', 'M', 'A', 'M', 'I', 'I', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Yan',
+ 'Fev',
+ 'Mar',
+ 'Apr',
+ 'May',
+ 'İyun',
+ 'İyul',
+ 'Avq',
+ 'Sen',
+ 'Okt',
+ 'Noy',
+ 'Dek'
+ ],
+ wide: [
+ 'Yanvar',
+ 'Fevral',
+ 'Mart',
+ 'Aprel',
+ 'May',
+ 'İyun',
+ 'İyul',
+ 'Avqust',
+ 'Sentyabr',
+ 'Oktyabr',
+ 'Noyabr',
+ 'Dekabr'
+ ]
+}
+var dayValues = {
+ narrow: ['B.', 'B.e', 'Ç.a', 'Ç.', 'C.a', 'C.', 'Ş.'],
+ short: ['B.', 'B.e', 'Ç.a', 'Ç.', 'C.a', 'C.', 'Ş.'],
+ abbreviated: ['Baz', 'Baz.e', 'Çər.a', 'Çər', 'Cüm.a', 'Cüm', 'Şə'],
+ wide: [
+ 'Bazar',
+ 'Bazar ertəsi',
+ 'Çərşənbə axşamı',
+ 'Çərşənbə',
+ 'Cümə axşamı',
+ 'Cümə',
+ 'Şənbə'
+ ]
+}
+var dayPeriodValues = {
+ narrow: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'gecəyarı',
+ noon: 'gün',
+ morning: 'səhər',
+ afternoon: 'gündüz',
+ evening: 'axşam',
+ night: 'gecə'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'gecəyarı',
+ noon: 'gün',
+ morning: 'səhər',
+ afternoon: 'gündüz',
+ evening: 'axşam',
+ night: 'gecə'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'gecəyarı',
+ noon: 'gün',
+ morning: 'səhər',
+ afternoon: 'gündüz',
+ evening: 'axşam',
+ night: 'gecə'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'gecəyarı',
+ noon: 'gün',
+ morning: 'səhər',
+ afternoon: 'gündüz',
+ evening: 'axşam',
+ night: 'gecə'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'gecəyarı',
+ noon: 'gün',
+ morning: 'səhər',
+ afternoon: 'gündüz',
+ evening: 'axşam',
+ night: 'gecə'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'gecəyarı',
+ noon: 'gün',
+ morning: 'səhər',
+ afternoon: 'gündüz',
+ evening: 'axşam',
+ night: 'gecə'
+ }
+}
+
+var suffixes = {
+ 1: '-inci',
+ 5: '-inci',
+ 8: '-inci',
+ 70: '-inci',
+ 80: '-inci',
+ 2: '-nci',
+ 7: '-nci',
+ 20: '-nci',
+ 50: '-nci',
+ 3: '-üncü',
+ 4: '-üncü',
+ 100: '-üncü',
+ 6: '-ncı',
+ 9: '-uncu',
+ 10: '-uncu',
+ 30: '-uncu',
+ 60: '-ıncı',
+ 90: '-ıncı'
+}
+
+function getSuffix(number) {
+ if (number === 0) {
+ // special case for zero
+ return number + '-ıncı'
+ }
+ var a = number % 10,
+ b = (number % 100) - a,
+ c = number >= 100 ? 100 : null
+ return suffixes[a] || suffixes[b] || suffixes[c]
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+ var suffix = getSuffix(number)
+
+ return number + suffix
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/az/_lib/match/index.js b/date-fns/src/locale/az/_lib/match/index.js
new file mode 100644
index 0000000..853c316
--- /dev/null
+++ b/date-fns/src/locale/az/_lib/match/index.js
@@ -0,0 +1,166 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-?(ci|inci|nci|uncu|üncü|ncı))?/i
+var parseOrdinalNumberPattern = /\d+/i
+var matchEraPatterns = {
+ narrow: /^(b|a)$/i,
+ abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)$/i,
+ wide: /^(Hz. İsa'dan öncə|ümumi eradan əvvəl|anno domini|ümumi dövr)$/i
+}
+var parseEraPatterns = {
+ any: [/^b$/i, /^(a|c)$/i]
+}
+var matchQuarterPatterns = {
+ narrow: /^[1234]$/i,
+ abbreviated: /^K[1234]$/i,
+ wide: /^[1234](ci)? kvartal$/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+var matchMonthPatterns = {
+ narrow: /^[(?-i)yfmaisond]$/i,
+ abbreviated: /^(Yan|Fev|Mar|Apr|May|İyun|İyul|Avq|Sen|Okt|Noy|Dek)$/i,
+ wide: /^(Yanvar|Fevral|Mart|Aprel|May|İyun|İyul|Avgust|Sentyabr|Oktyabr|Noyabr|Dekabr)$/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^[(?-i)y]$/i,
+ /^[(?-i)f]$/i,
+ /^[(?-i)m]$/i,
+ /^[(?-i)a]$/i,
+ /^[(?-i)m]$/i,
+ /^[(?-i)i]$/i,
+ /^[(?-i)i]$/i,
+ /^[(?-i)a]$/i,
+ /^[(?-i)s]$/i,
+ /^[(?-i)o]$/i,
+ /^[(?-i)n]$/i,
+ /^[(?-i)d]$/i
+ ],
+ abbreviated: [
+ /^Yan$/i,
+ /^Fev$/i,
+ /^Mar$/i,
+ /^Apr$/i,
+ /^May$/i,
+ /^İyun$/i,
+ /^İyul$/i,
+ /^Avg$/i,
+ /^Sen$/i,
+ /^Okt$/i,
+ /^Noy$/i,
+ /^Dek$/i
+ ],
+ wide: [
+ /^Yanvar$/i,
+ /^Fevral$/i,
+ /^Mart$/i,
+ /^Aprel$/i,
+ /^May$/i,
+ /^İyun$/i,
+ /^İyul$/i,
+ /^Avgust$/i,
+ /^Sentyabr$/i,
+ /^Oktyabr$/i,
+ /^Noyabr$/i,
+ /^Dekabr$/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(B\.|B\.e|Ç\.a|Ç\.|C\.a|C\.|Ş\.)$/i,
+ short: /^(B\.|B\.e|Ç\.a|Ç\.|C\.a|C\.|Ş\.)$/i,
+ abbreviated: /^(Baz\.e|Çər|Çər\.a|Cüm|Cüm\.a|Şə)$/i,
+ wide: /^(Bazar|Bazar ertəsi|Çərşənbə axşamı|Çərşənbə|Cümə axşamı|Cümə|Şənbə)$/i
+}
+var parseDayPatterns = {
+ narrow: [
+ /^B\.$/i,
+ /^B\.e$/i,
+ /^Ç\.a$/i,
+ /^Ç\.$/i,
+ /^C\.a$/i,
+ /^C\.$/i,
+ /^Ş\.$/i
+ ],
+ abbreviated: [
+ /^Baz\.e$/i,
+ /^Çər$/i,
+ /^Çər\.a$/i,
+ /^Cüm$/i,
+ /^Cüm\.a$/i,
+ /^Şə$/i
+ ],
+ wide: [
+ /^Bazar$/i,
+ /^Bazar ertəsi$/i,
+ /^Çərşənbə axşamı$/i,
+ /^Çərşənbə$/i,
+ /^Cümə axşamı$/i,
+ /^Cümə$/i,
+ /^Şənbə$/i
+ ],
+ any: [/^B\.$/i, /^B\.e$/i, /^Ç\.a$/i, /^Ç\.$/i, /^C\.a$/i, /^C\.$/i, /^Ş\.$/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|gecəyarı|gün|səhər|gündüz|axşam|gecə)$/i,
+ any: /^(am|pm|a\.m\.|p\.m\.|AM|PM|gecəyarı|gün|səhər|gündüz|axşam|gecə)$/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a$/i,
+ pm: /^p$/i,
+ midnight: /^gecəyarı$/i,
+ noon: /^gün$/i,
+ morning: /səhər$/i,
+ afternoon: /gündüz$/i,
+ evening: /axşam$/i,
+ night: /gecə$/i
+ }
+}
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+export default match
diff --git a/date-fns/src/locale/az/index.d.ts b/date-fns/src/locale/az/index.d.ts
new file mode 100644
index 0000000..b2b2253
--- /dev/null
+++ b/date-fns/src/locale/az/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { az } from 'date-fns/locale'
+export default az
diff --git a/date-fns/src/locale/az/index.js b/date-fns/src/locale/az/index.js
new file mode 100644
index 0000000..20b836a
--- /dev/null
+++ b/date-fns/src/locale/az/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Azerbaijani locale.
+ * @language Azerbaijani
+ * @iso-639-2 aze
+ */
+
+var locale = {
+ code: 'az',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/az/index.js.flow b/date-fns/src/locale/az/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/az/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/az/snapshot.md b/date-fns/src/locale/az/snapshot.md
new file mode 100644
index 0000000..0f84be4
--- /dev/null
+++ b/date-fns/src/locale/az/snapshot.md
@@ -0,0 +1,304 @@
+# Azerbaijani (az) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-nci | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-inci | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-nci | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-inci | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-inci | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-nci | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1ci kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ci kvartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-inci | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-nci | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1ci kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ci kvartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-nci | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-nci | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Fev | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | İyul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Fevral | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | İyul | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-01-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | I | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-nci | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-nci | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Fev | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | İyul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Fevral | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | İyul | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-01-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | I | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-inci | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-inci | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-inci | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-inci | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-inci | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-inci | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-nci | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-inci | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Baz.e | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cüm | 2019-02-13T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Baz.e | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cüm | 2019-02-13T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Baz.e | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cüm | 2019-02-13T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Bazar ertəsi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cümə | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | B.e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C. | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | B.e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C. | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-inci | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-inci | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Baz.e | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cüm | 2019-02-13T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Bazar ertəsi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cümə | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | B.e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C. | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | B.e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C. | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-inci | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-inci | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Baz.e | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cüm | 2019-02-13T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Bazar ertəsi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cümə | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | B.e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C. | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | B.e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C. | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-inci | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-inci | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Baz.e | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cüm | 2019-02-13T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Bazar ertəsi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cümə | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | B.e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C. | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | B.e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C. | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | səhər | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | gündüz | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | axşam | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | gecə | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | səhər | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | gündüz | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | axşam | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | gecə | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | səhər | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | gündüz | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | axşam | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | gecə | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | səhər | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | gündüz | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | axşam | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | gecə | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | səhər | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | gündüz | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | axşam | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | gecə | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-inci | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-inci | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-inci | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-üncü | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-inci | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-inci | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-inci | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-üncü | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-inci | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-inci | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-inci | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-inci | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Fev 1987 il | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 il | Invalid Date |
+| | PPP | 1987-02-11T12:13:14.015Z | 11-inci Fevral 1987 il | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29-uncu May 1453 il | Invalid Date |
+| | PPPP | 1987-02-11T12:13:14.015Z | Çərşənbə, 11-inci Fevral 1987 il | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | Bazar, 29-uncu May 1453 il | Invalid Date |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Fev 1987 il, 12:13:14 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 il, 23:59:59 | Invalid Date |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11-inci Fevral 1987 il 12:13:14 GMT+0 - də | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29-uncu May 1453 il 23:59:59 GMT+0 - də | Invalid Date |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Çərşənbə, 11-inci Fevral 1987 il 12:13:14 GMT+00:00 - də | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | Bazar, 29-uncu May 1453 il 23:59:59 GMT+00:00 - də | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------- | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | təxminən 6 il | təxminən 6 il | təxminən 6 il əvvəl |
+| 2005-01-01T00:00:00.000Z | təxminən 5 il | təxminən 5 il | təxminən 5 il əvvəl |
+| 2004-01-01T00:00:00.000Z | təxminən 4 il | təxminən 4 il | təxminən 4 il əvvəl |
+| 2003-01-01T00:00:00.000Z | təxminən 3 il | təxminən 3 il | təxminən 3 il əvvəl |
+| 2002-01-01T00:00:00.000Z | təxminən 2 il | təxminən 2 il | təxminən 2 il əvvəl |
+| 2001-06-01T00:00:00.000Z | 1 ildən çox | 1 ildən çox | 1 ildən çox əvvəl |
+| 2001-02-01T00:00:00.000Z | təxminən 1 il | təxminən 1 il | təxminən 1 il əvvəl |
+| 2001-01-01T00:00:00.000Z | təxminən 1 il | təxminən 1 il | təxminən 1 il əvvəl |
+| 2000-06-01T00:00:00.000Z | 5 ay | 5 ay | 5 ay əvvəl |
+| 2000-03-01T00:00:00.000Z | 2 ay | 2 ay | 2 ay əvvəl |
+| 2000-02-01T00:00:00.000Z | təxminən 1 ay | təxminən 1 ay | təxminən 1 ay əvvəl |
+| 2000-01-15T00:00:00.000Z | 14 gün | 14 gün | 14 gün əvvəl |
+| 2000-01-02T00:00:00.000Z | 1 gün | 1 gün | 1 gün əvvəl |
+| 2000-01-01T06:00:00.000Z | təxminən 6 saat | təxminən 6 saat | təxminən 6 saat əvvəl |
+| 2000-01-01T01:00:00.000Z | təxminən 1 saat | təxminən 1 saat | təxminən 1 saat əvvəl |
+| 2000-01-01T00:45:00.000Z | təxminən 1 saat | təxminən 1 saat | təxminən 1 saat əvvəl |
+| 2000-01-01T00:30:00.000Z | 30 dəqiqə | 30 dəqiqə | 30 dəqiqə əvvəl |
+| 2000-01-01T00:15:00.000Z | 15 dəqiqə | 15 dəqiqə | 15 dəqiqə əvvəl |
+| 2000-01-01T00:01:00.000Z | bir dəqiqə | bir dəqiqə | bir dəqiqə əvvəl |
+| 2000-01-01T00:00:25.000Z | bir dəqiqədən az | yarım dəqiqə | bir dəqiqədən az əvvəl |
+| 2000-01-01T00:00:15.000Z | bir dəqiqədən az | 20 bir saniyədən az | bir dəqiqədən az əvvəl |
+| 2000-01-01T00:00:05.000Z | bir dəqiqədən az | 10 bir saniyədən az | bir dəqiqədən az əvvəl |
+| 2000-01-01T00:00:00.000Z | bir dəqiqədən az | 5 bir saniyədən az | bir dəqiqədən az sonra |
+| 1999-12-31T23:59:55.000Z | bir dəqiqədən az | 10 bir saniyədən az | bir dəqiqədən az sonra |
+| 1999-12-31T23:59:45.000Z | bir dəqiqədən az | 20 bir saniyədən az | bir dəqiqədən az sonra |
+| 1999-12-31T23:59:35.000Z | bir dəqiqədən az | yarım dəqiqə | bir dəqiqədən az sonra |
+| 1999-12-31T23:59:00.000Z | bir dəqiqə | bir dəqiqə | bir dəqiqə sonra |
+| 1999-12-31T23:45:00.000Z | 15 dəqiqə | 15 dəqiqə | 15 dəqiqə sonra |
+| 1999-12-31T23:30:00.000Z | 30 dəqiqə | 30 dəqiqə | 30 dəqiqə sonra |
+| 1999-12-31T23:15:00.000Z | təxminən 1 saat | təxminən 1 saat | təxminən 1 saat sonra |
+| 1999-12-31T23:00:00.000Z | təxminən 1 saat | təxminən 1 saat | təxminən 1 saat sonra |
+| 1999-12-31T18:00:00.000Z | təxminən 6 saat | təxminən 6 saat | təxminən 6 saat sonra |
+| 1999-12-30T00:00:00.000Z | 2 gün | 2 gün | 2 gün sonra |
+| 1999-12-15T00:00:00.000Z | 17 gün | 17 gün | 17 gün sonra |
+| 1999-12-01T00:00:00.000Z | təxminən 1 ay | təxminən 1 ay | təxminən 1 ay sonra |
+| 1999-11-01T00:00:00.000Z | 2 ay | 2 ay | 2 ay sonra |
+| 1999-06-01T00:00:00.000Z | 7 ay | 7 ay | 7 ay sonra |
+| 1999-01-01T00:00:00.000Z | təxminən 1 il | təxminən 1 il | təxminən 1 il sonra |
+| 1998-12-01T00:00:00.000Z | təxminən 1 il | təxminən 1 il | təxminən 1 il sonra |
+| 1998-06-01T00:00:00.000Z | 1 ildən çox | 1 ildən çox | 1 ildən çox sonra |
+| 1998-01-01T00:00:00.000Z | təxminən 2 il | təxminən 2 il | təxminən 2 il sonra |
+| 1997-01-01T00:00:00.000Z | təxminən 3 il | təxminən 3 il | təxminən 3 il sonra |
+| 1996-01-01T00:00:00.000Z | təxminən 4 il | təxminən 4 il | təxminən 4 il sonra |
+| 1995-01-01T00:00:00.000Z | təxminən 5 il | təxminən 5 il | təxminən 5 il sonra |
+| 1994-01-01T00:00:00.000Z | təxminən 6 il | təxminən 6 il | təxminən 6 il sonra |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 il | 6 il əvvəl | 52608 saat |
+| 2005-01-01T00:00:00.000Z | 5 il | 5 il əvvəl | 43848 saat |
+| 2004-01-01T00:00:00.000Z | 4 il | 4 il əvvəl | 35064 saat |
+| 2003-01-01T00:00:00.000Z | 3 il | 3 il əvvəl | 26304 saat |
+| 2002-01-01T00:00:00.000Z | 2 il | 2 il əvvəl | 17544 saat |
+| 2001-06-01T00:00:00.000Z | 1 il | 1 il əvvəl | 12408 saat |
+| 2001-02-01T00:00:00.000Z | 1 il | 1 il əvvəl | 9528 saat |
+| 2001-01-01T00:00:00.000Z | 1 il | 1 il əvvəl | 8784 saat |
+| 2000-06-01T00:00:00.000Z | 5 ay | 5 ay əvvəl | 3648 saat |
+| 2000-03-01T00:00:00.000Z | 2 ay | 2 ay əvvəl | 1440 saat |
+| 2000-02-01T00:00:00.000Z | 1 ay | 1 ay əvvəl | 744 saat |
+| 2000-01-15T00:00:00.000Z | 14 gün | 14 gün əvvəl | 336 saat |
+| 2000-01-02T00:00:00.000Z | 1 gün | 1 gün əvvəl | 24 saat |
+| 2000-01-01T06:00:00.000Z | 6 saat | 6 saat əvvəl | 6 saat |
+| 2000-01-01T01:00:00.000Z | 1 saat | 1 saat əvvəl | 1 saat |
+| 2000-01-01T00:45:00.000Z | 45 dəqiqə | 45 dəqiqə əvvəl | 1 saat |
+| 2000-01-01T00:30:00.000Z | 30 dəqiqə | 30 dəqiqə əvvəl | 1 saat |
+| 2000-01-01T00:15:00.000Z | 15 dəqiqə | 15 dəqiqə əvvəl | 0 saat |
+| 2000-01-01T00:01:00.000Z | bir dəqiqə | bir dəqiqə əvvəl | 0 saat |
+| 2000-01-01T00:00:25.000Z | 25 saniyə | 25 saniyə əvvəl | 0 saat |
+| 2000-01-01T00:00:15.000Z | 15 saniyə | 15 saniyə əvvəl | 0 saat |
+| 2000-01-01T00:00:05.000Z | 5 saniyə | 5 saniyə əvvəl | 0 saat |
+| 2000-01-01T00:00:00.000Z | 0 saniyə | 0 saniyə sonra | 0 saat |
+| 1999-12-31T23:59:55.000Z | 5 saniyə | 5 saniyə sonra | 0 saat |
+| 1999-12-31T23:59:45.000Z | 15 saniyə | 15 saniyə sonra | 0 saat |
+| 1999-12-31T23:59:35.000Z | 25 saniyə | 25 saniyə sonra | 0 saat |
+| 1999-12-31T23:59:00.000Z | bir dəqiqə | bir dəqiqə sonra | 0 saat |
+| 1999-12-31T23:45:00.000Z | 15 dəqiqə | 15 dəqiqə sonra | 0 saat |
+| 1999-12-31T23:30:00.000Z | 30 dəqiqə | 30 dəqiqə sonra | 1 saat |
+| 1999-12-31T23:15:00.000Z | 45 dəqiqə | 45 dəqiqə sonra | 1 saat |
+| 1999-12-31T23:00:00.000Z | 1 saat | 1 saat sonra | 1 saat |
+| 1999-12-31T18:00:00.000Z | 6 saat | 6 saat sonra | 6 saat |
+| 1999-12-30T00:00:00.000Z | 2 gün | 2 gün sonra | 48 saat |
+| 1999-12-15T00:00:00.000Z | 17 gün | 17 gün sonra | 408 saat |
+| 1999-12-01T00:00:00.000Z | 1 ay | 1 ay sonra | 744 saat |
+| 1999-11-01T00:00:00.000Z | 2 ay | 2 ay sonra | 1464 saat |
+| 1999-06-01T00:00:00.000Z | 7 ay | 7 ay sonra | 5136 saat |
+| 1999-01-01T00:00:00.000Z | 1 il | 1 il sonra | 8760 saat |
+| 1998-12-01T00:00:00.000Z | 1 il | 1 il sonra | 9504 saat |
+| 1998-06-01T00:00:00.000Z | 2 il | 2 il sonra | 13896 saat |
+| 1998-01-01T00:00:00.000Z | 2 il | 2 il sonra | 17520 saat |
+| 1997-01-01T00:00:00.000Z | 3 il | 3 il sonra | 26280 saat |
+| 1996-01-01T00:00:00.000Z | 4 il | 4 il sonra | 35064 saat |
+| 1995-01-01T00:00:00.000Z | 5 il | 5 il sonra | 43824 saat |
+| 1994-01-01T00:00:00.000Z | 6 il | 6 il sonra | 52584 saat |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | Çərşənbə 0:00 -də |
+| 2000-01-02T00:00:00.000Z | sabah 0:00 -də |
+| 2000-01-01T00:00:00.000Z | bugün 0:00 -də |
+| 1999-12-31T00:00:00.000Z | dünən 0:00 -də |
+| 1999-12-27T00:00:00.000Z | sonuncu Bazar ertəsi 0:00 -də |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/be/_lib/formatDistance/index.js b/date-fns/src/locale/be/_lib/formatDistance/index.js
new file mode 100644
index 0000000..b8e33dc
--- /dev/null
+++ b/date-fns/src/locale/be/_lib/formatDistance/index.js
@@ -0,0 +1,257 @@
+function declension(scheme, count) {
+ // scheme for count=1 exists
+ if (scheme.one !== undefined && count === 1) {
+ return scheme.one
+ }
+
+ var rem10 = count % 10
+ var rem100 = count % 100
+
+ // 1, 21, 31, ...
+ if (rem10 === 1 && rem100 !== 11) {
+ return scheme.singularNominative.replace('{{count}}', count)
+
+ // 2, 3, 4, 22, 23, 24, 32 ...
+ } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {
+ return scheme.singularGenitive.replace('{{count}}', count)
+
+ // 5, 6, 7, 8, 9, 10, 11, ...
+ } else {
+ return scheme.pluralGenitive.replace('{{count}}', count)
+ }
+}
+
+function buildLocalizeTokenFn(scheme) {
+ return function(count, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ if (scheme.future) {
+ return declension(scheme.future, count)
+ } else {
+ return 'праз ' + declension(scheme.regular, count)
+ }
+ } else {
+ if (scheme.past) {
+ return declension(scheme.past, count)
+ } else {
+ return declension(scheme.regular, count) + ' таму'
+ }
+ }
+ } else {
+ return declension(scheme.regular, count)
+ }
+ }
+}
+
+var formatDistanceLocale = {
+ lessThanXSeconds: buildLocalizeTokenFn({
+ regular: {
+ one: 'менш за секунду',
+ singularNominative: 'менш за {{count}} секунду',
+ singularGenitive: 'менш за {{count}} секунды',
+ pluralGenitive: 'менш за {{count}} секунд'
+ },
+ future: {
+ one: 'менш, чым праз секунду',
+ singularNominative: 'менш, чым праз {{count}} секунду',
+ singularGenitive: 'менш, чым праз {{count}} секунды',
+ pluralGenitive: 'менш, чым праз {{count}} секунд'
+ }
+ }),
+
+ xSeconds: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} секунда',
+ singularGenitive: '{{count}} секунды',
+ pluralGenitive: '{{count}} секунд'
+ },
+ past: {
+ singularNominative: '{{count}} секунду таму',
+ singularGenitive: '{{count}} секунды таму',
+ pluralGenitive: '{{count}} секунд таму'
+ },
+ future: {
+ singularNominative: 'праз {{count}} секунду',
+ singularGenitive: 'праз {{count}} секунды',
+ pluralGenitive: 'праз {{count}} секунд'
+ }
+ }),
+
+ halfAMinute: function(_, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'праз паўхвіліны'
+ } else {
+ return 'паўхвіліны таму'
+ }
+ }
+
+ return 'паўхвіліны'
+ },
+
+ lessThanXMinutes: buildLocalizeTokenFn({
+ regular: {
+ one: 'менш за хвіліну',
+ singularNominative: 'менш за {{count}} хвіліну',
+ singularGenitive: 'менш за {{count}} хвіліны',
+ pluralGenitive: 'менш за {{count}} хвілін'
+ },
+ future: {
+ one: 'менш, чым праз хвіліну',
+ singularNominative: 'менш, чым праз {{count}} хвіліну',
+ singularGenitive: 'менш, чым праз {{count}} хвіліны',
+ pluralGenitive: 'менш, чым праз {{count}} хвілін'
+ }
+ }),
+
+ xMinutes: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} хвіліна',
+ singularGenitive: '{{count}} хвіліны',
+ pluralGenitive: '{{count}} хвілін'
+ },
+ past: {
+ singularNominative: '{{count}} хвіліну таму',
+ singularGenitive: '{{count}} хвіліны таму',
+ pluralGenitive: '{{count}} хвілін таму'
+ },
+ future: {
+ singularNominative: 'праз {{count}} хвіліну',
+ singularGenitive: 'праз {{count}} хвіліны',
+ pluralGenitive: 'праз {{count}} хвілін'
+ }
+ }),
+
+ aboutXHours: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'каля {{count}} гадзіны',
+ singularGenitive: 'каля {{count}} гадзін',
+ pluralGenitive: 'каля {{count}} гадзін'
+ },
+ future: {
+ singularNominative: 'прыблізна праз {{count}} гадзіну',
+ singularGenitive: 'прыблізна праз {{count}} гадзіны',
+ pluralGenitive: 'прыблізна праз {{count}} гадзін'
+ }
+ }),
+
+ xHours: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} гадзіна',
+ singularGenitive: '{{count}} гадзіны',
+ pluralGenitive: '{{count}} гадзін'
+ },
+ past: {
+ singularNominative: '{{count}} гадзіну таму',
+ singularGenitive: '{{count}} гадзіны таму',
+ pluralGenitive: '{{count}} гадзін таму'
+ },
+ future: {
+ singularNominative: 'праз {{count}} гадзіну',
+ singularGenitive: 'праз {{count}} гадзіны',
+ pluralGenitive: 'праз {{count}} гадзін'
+ }
+ }),
+
+ xDays: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} дзень',
+ singularGenitive: '{{count}} дні',
+ pluralGenitive: '{{count}} дзён'
+ }
+ }),
+
+ aboutXWeeks: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'каля {{count}} месяца', // TODO
+ singularGenitive: 'каля {{count}} месяцаў', // TODO
+ pluralGenitive: 'каля {{count}} месяцаў' // TODO
+ },
+ future: {
+ singularNominative: 'прыблізна праз {{count}} месяц', // TODO
+ singularGenitive: 'прыблізна праз {{count}} месяцы', // TODO
+ pluralGenitive: 'прыблізна праз {{count}} месяцаў' // TODO
+ }
+ }),
+
+ xWeeks: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} месяц',
+ singularGenitive: '{{count}} месяцы',
+ pluralGenitive: '{{count}} месяцаў'
+ }
+ }),
+
+ aboutXMonths: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'каля {{count}} месяца',
+ singularGenitive: 'каля {{count}} месяцаў',
+ pluralGenitive: 'каля {{count}} месяцаў'
+ },
+ future: {
+ singularNominative: 'прыблізна праз {{count}} месяц',
+ singularGenitive: 'прыблізна праз {{count}} месяцы',
+ pluralGenitive: 'прыблізна праз {{count}} месяцаў'
+ }
+ }),
+
+ xMonths: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} месяц',
+ singularGenitive: '{{count}} месяцы',
+ pluralGenitive: '{{count}} месяцаў'
+ }
+ }),
+
+ aboutXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'каля {{count}} года',
+ singularGenitive: 'каля {{count}} гадоў',
+ pluralGenitive: 'каля {{count}} гадоў'
+ },
+ future: {
+ singularNominative: 'прыблізна праз {{count}} год',
+ singularGenitive: 'прыблізна праз {{count}} гады',
+ pluralGenitive: 'прыблізна праз {{count}} гадоў'
+ }
+ }),
+
+ xYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} год',
+ singularGenitive: '{{count}} гады',
+ pluralGenitive: '{{count}} гадоў'
+ }
+ }),
+
+ overXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'больш за {{count}} год',
+ singularGenitive: 'больш за {{count}} гады',
+ pluralGenitive: 'больш за {{count}} гадоў'
+ },
+ future: {
+ singularNominative: 'больш, чым праз {{count}} год',
+ singularGenitive: 'больш, чым праз {{count}} гады',
+ pluralGenitive: 'больш, чым праз {{count}} гадоў'
+ }
+ }),
+
+ almostXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'амаль {{count}} год',
+ singularGenitive: 'амаль {{count}} гады',
+ pluralGenitive: 'амаль {{count}} гадоў'
+ },
+ future: {
+ singularNominative: 'амаль праз {{count}} год',
+ singularGenitive: 'амаль праз {{count}} гады',
+ pluralGenitive: 'амаль праз {{count}} гадоў'
+ }
+ })
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ return formatDistanceLocale[token](count, options)
+}
diff --git a/date-fns/src/locale/be/_lib/formatLong/index.js b/date-fns/src/locale/be/_lib/formatLong/index.js
new file mode 100644
index 0000000..e3ac8dd
--- /dev/null
+++ b/date-fns/src/locale/be/_lib/formatLong/index.js
@@ -0,0 +1,38 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, d MMMM y 'г.'",
+ long: "d MMMM y 'г.'",
+ medium: "d MMM y 'г.'",
+ short: 'dd.MM.y'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ any: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'any'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/be/_lib/formatRelative/index.js b/date-fns/src/locale/be/_lib/formatRelative/index.js
new file mode 100644
index 0000000..5e2643c
--- /dev/null
+++ b/date-fns/src/locale/be/_lib/formatRelative/index.js
@@ -0,0 +1,82 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+var accusativeWeekdays = [
+ 'нядзелю',
+ 'панядзелак',
+ 'аўторак',
+ 'сераду',
+ 'чацвер',
+ 'пятніцу',
+ 'суботу'
+]
+
+function lastWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ switch (day) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return "'у мінулую " + weekday + " а' p"
+ case 1:
+ case 2:
+ case 4:
+ return "'у мінулы " + weekday + " а' p"
+ }
+}
+
+function thisWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ return "'у " + weekday + " а' p"
+}
+
+function nextWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ switch (day) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return "'у наступную " + weekday + " а' p"
+ case 1:
+ case 2:
+ case 4:
+ return "'у наступны " + weekday + " а' p"
+ }
+}
+
+var formatRelativeLocale = {
+ lastWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return lastWeek(day)
+ }
+ },
+ yesterday: "'учора а' p",
+ today: "'сёння а' p",
+ tomorrow: "'заўтра а' p",
+ nextWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return nextWeek(day)
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/be/_lib/localize/index.js b/date-fns/src/locale/be/_lib/localize/index.js
new file mode 100644
index 0000000..caeb8b0
--- /dev/null
+++ b/date-fns/src/locale/be/_lib/localize/index.js
@@ -0,0 +1,227 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['да н.э.', 'н.э.'],
+ abbreviated: ['да н. э.', 'н. э.'],
+ wide: ['да нашай эры', 'нашай эры']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1-ы кв.', '2-і кв.', '3-і кв.', '4-ы кв.'],
+ wide: ['1-ы квартал', '2-і квартал', '3-і квартал', '4-ы квартал']
+}
+
+var monthValues = {
+ narrow: ['С', 'Л', 'С', 'К', 'М', 'Ч', 'Л', 'Ж', 'В', 'К', 'Л', 'С'],
+ abbreviated: [
+ 'студз.',
+ 'лют.',
+ 'сак.',
+ 'крас.',
+ 'май',
+ 'чэрв.',
+ 'ліп.',
+ 'жн.',
+ 'вер.',
+ 'кастр.',
+ 'ліст.',
+ 'снеж.'
+ ],
+ wide: [
+ 'студзень',
+ 'люты',
+ 'сакавік',
+ 'красавік',
+ 'май',
+ 'чэрвень',
+ 'ліпень',
+ 'жнівень',
+ 'верасень',
+ 'кастрычнік',
+ 'лістапад',
+ 'снежань'
+ ]
+}
+var formattingMonthValues = {
+ narrow: ['С', 'Л', 'С', 'К', 'М', 'Ч', 'Л', 'Ж', 'В', 'К', 'Л', 'С'],
+ abbreviated: [
+ 'студз.',
+ 'лют.',
+ 'сак.',
+ 'крас.',
+ 'мая',
+ 'чэрв.',
+ 'ліп.',
+ 'жн.',
+ 'вер.',
+ 'кастр.',
+ 'ліст.',
+ 'снеж.'
+ ],
+ wide: [
+ 'студзеня',
+ 'лютага',
+ 'сакавіка',
+ 'красавіка',
+ 'мая',
+ 'чэрвеня',
+ 'ліпеня',
+ 'жніўня',
+ 'верасня',
+ 'кастрычніка',
+ 'лістапада',
+ 'снежня'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Н', 'П', 'А', 'С', 'Ч', 'П', 'С'],
+ short: ['нд', 'пн', 'аў', 'ср', 'чц', 'пт', 'сб'],
+ abbreviated: ['нядз', 'пан', 'аўт', 'сер', 'чац', 'пят', 'суб'],
+ wide: [
+ 'нядзеля',
+ 'панядзелак',
+ 'аўторак',
+ 'серада',
+ 'чацвер',
+ 'пятніца',
+ 'субота'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'поўн.',
+ noon: 'поўд.',
+ morning: 'ран.',
+ afternoon: 'дзень',
+ evening: 'веч.',
+ night: 'ноч'
+ },
+ abbreviated: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'поўн.',
+ noon: 'поўд.',
+ morning: 'ран.',
+ afternoon: 'дзень',
+ evening: 'веч.',
+ night: 'ноч'
+ },
+ wide: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'поўнач',
+ noon: 'поўдзень',
+ morning: 'раніца',
+ afternoon: 'дзень',
+ evening: 'вечар',
+ night: 'ноч'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'поўн.',
+ noon: 'поўд.',
+ morning: 'ран.',
+ afternoon: 'дня',
+ evening: 'веч.',
+ night: 'ночы'
+ },
+ abbreviated: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'поўн.',
+ noon: 'поўд.',
+ morning: 'ран.',
+ afternoon: 'дня',
+ evening: 'веч.',
+ night: 'ночы'
+ },
+ wide: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'поўнач',
+ noon: 'поўдзень',
+ morning: 'раніцы',
+ afternoon: 'дня',
+ evening: 'вечара',
+ night: 'ночы'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var number = Number(dirtyNumber)
+ var suffix
+
+ /** Though it's an incorrect ordinal form of a date we use it here for consistency with other similar locales (ru, uk)
+ * For date-month combinations should be used `d` formatter.
+ * Correct: `d MMMM` (4 верасня)
+ * Incorrect: `do MMMM` (4-га верасня)
+ *
+ * But following the consistency leads to mistakes for literal uses of `do` formatter (ordinal day of month).
+ * So for phrase "5th day of month" (`do дзень месяца`)
+ * library will produce: `5-га дзень месяца`
+ * but correct spelling should be: `5-ы дзень месяца`
+ *
+ * So I guess there should be a stand-alone and a formatting version of "day of month" formatters
+ */
+ if (unit === 'date') {
+ suffix = '-га'
+ } else if (unit === 'hour' || unit === 'minute' || unit === 'second') {
+ suffix = '-я'
+ } else {
+ suffix =
+ (number % 10 === 2 || number % 10 === 3) &&
+ (number % 100 !== 12 && number % 100 !== 13)
+ ? '-і'
+ : '-ы'
+ }
+
+ return number + suffix
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'any',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/be/_lib/match/index.js b/date-fns/src/locale/be/_lib/match/index.js
new file mode 100644
index 0000000..bb59653
--- /dev/null
+++ b/date-fns/src/locale/be/_lib/match/index.js
@@ -0,0 +1,138 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-?(е|я|га|і|ы|ае|ая|яя|шы|гі|ці|ты|мы))?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^((да )?н\.?\s?э\.?)/i,
+ abbreviated: /^((да )?н\.?\s?э\.?)/i,
+ wide: /^(да нашай эры|нашай эры|наша эра)/i
+}
+var parseEraPatterns = {
+ any: [/^д/i, /^н/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234](-?[ыі]?)? кв.?/i,
+ wide: /^[1234](-?[ыі]?)? квартал/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[слкмчжв]/i,
+ abbreviated: /^(студз|лют|сак|крас|ма[йя]|чэрв|ліп|жн|вер|кастр|ліст|снеж)\.?/i,
+ wide: /^(студзен[ья]|лют(ы|ага)|сакавіка?|красавіка?|ма[йя]|чэрвен[ья]|ліпен[ья]|жні(вень|ўня)|верас(ень|ня)|кастрычніка?|лістапада?|снеж(ань|ня))/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^с/i,
+ /^л/i,
+ /^с/i,
+ /^к/i,
+ /^м/i,
+ /^ч/i,
+ /^л/i,
+ /^ж/i,
+ /^в/i,
+ /^к/i,
+ /^л/i,
+ /^с/i
+ ],
+ any: [
+ /^ст/i,
+ /^лю/i,
+ /^са/i,
+ /^кр/i,
+ /^ма/i,
+ /^ч/i,
+ /^ліп/i,
+ /^ж/i,
+ /^в/i,
+ /^ка/i,
+ /^ліс/i,
+ /^сн/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[нпасч]/i,
+ short: /^(нд|ня|пн|па|аў|ат|ср|се|чц|ча|пт|пя|сб|су)\.?/i,
+ abbreviated: /^(нядз?|ндз|пнд|пан|аўт|срд|сер|чцв|чац|птн|пят|суб).?/i,
+ wide: /^(нядзел[яі]|панядзел(ак|ка)|аўтор(ак|ка)|серад[аы]|чацв(ер|ярга)|пятніц[аы]|субот[аы])/i
+}
+var parseDayPatterns = {
+ narrow: [/^н/i, /^п/i, /^а/i, /^с/i, /^ч/i, /^п/i, /^с/i],
+ any: [/^н/i, /^п[ан]/i, /^а/i, /^с[ер]/i, /^ч/i, /^п[ят]/i, /^с[уб]/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^([дп]п|поўн\.?|поўд\.?|ран\.?|дзень|дня|веч\.?|ночы?)/i,
+ abbreviated: /^([дп]п|поўн\.?|поўд\.?|ран\.?|дзень|дня|веч\.?|ночы?)/i,
+ wide: /^([дп]п|поўнач|поўдзень|раніц[аы]|дзень|дня|вечара?|ночы?)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^дп/i,
+ pm: /^пп/i,
+ midnight: /^поўн/i,
+ noon: /^поўд/i,
+ morning: /^р/i,
+ afternoon: /^д[зн]/i,
+ evening: /^в/i,
+ night: /^н/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/be/index.d.ts b/date-fns/src/locale/be/index.d.ts
new file mode 100644
index 0000000..d3cec40
--- /dev/null
+++ b/date-fns/src/locale/be/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { be } from 'date-fns/locale'
+export default be
diff --git a/date-fns/src/locale/be/index.js b/date-fns/src/locale/be/index.js
new file mode 100644
index 0000000..f35ef2b
--- /dev/null
+++ b/date-fns/src/locale/be/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Belarusian locale.
+ * @language Belarusian
+ * @iso-639-2 bel
+ * @author Kiryl Anokhin [@alyrik]{@link https://github.com/alyrik}
+ * @author Martin Wind [@arvigeus]{@link https://github.com/mawi12345}
+ */
+var locale = {
+ code: 'be',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/be/index.js.flow b/date-fns/src/locale/be/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/be/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/be/snapshot.md b/date-fns/src/locale/be/snapshot.md
new file mode 100644
index 0000000..f4f60b7
--- /dev/null
+++ b/date-fns/src/locale/be/snapshot.md
@@ -0,0 +1,304 @@
+# Belarusian (be) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | --------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-ы | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-ы | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-ы | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-ы | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-ы | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-і | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1-ы кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-і кв. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-ы квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-і квартал | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-ы | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-і | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1-ы кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-і кв. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-ы квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-і квартал | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-і | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ы | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | лют. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ліп. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | лютага | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ліпеня | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | Л | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Л | 2019-02-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-і | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ы | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | лют. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ліп. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | люты | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ліпень | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | Л | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Л | 2019-02-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-ы | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ы | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-ы | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ы | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-га | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-га | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-і | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-ы | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | пан | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пят | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | пан | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пят | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | пан | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пят | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | панядзелак | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пятніца | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-ы | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ы | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | пан | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пят | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | панядзелак | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пятніца | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-ы | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ы | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | пан | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пят | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | панядзелак | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пятніца | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-ы | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ы | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | пан | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пят | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | панядзелак | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пятніца | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ран. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночы | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ран. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночы | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ран. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночы | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | раніцы | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | вечара | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночы | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ран. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночы | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-я | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-я | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-я | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-я | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-я | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-я | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-я | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-я | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-я | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-я | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-я | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-я | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 лют. 1987 г. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мая 1453 г. | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 лютага 1987 г. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мая 1453 г. | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | серада, 11 лютага 1987 г. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | нядзеля, 29 мая 1453 г. | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 лют. 1987 г., 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мая 1453 г., 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 лютага 1987 г., 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 мая 1453 г., 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | серада, 11 лютага 1987 г., 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | нядзеля, 29 мая 1453 г., 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------- | ---------------------- | ------------------------ |
+| 2006-01-01T00:00:00.000Z | каля 6 гадоў | каля 6 гадоў | прыблізна праз 6 гадоў |
+| 2005-01-01T00:00:00.000Z | каля 5 гадоў | каля 5 гадоў | прыблізна праз 5 гадоў |
+| 2004-01-01T00:00:00.000Z | каля 4 гадоў | каля 4 гадоў | прыблізна праз 4 гады |
+| 2003-01-01T00:00:00.000Z | каля 3 гадоў | каля 3 гадоў | прыблізна праз 3 гады |
+| 2002-01-01T00:00:00.000Z | каля 2 гадоў | каля 2 гадоў | прыблізна праз 2 гады |
+| 2001-06-01T00:00:00.000Z | больш за 1 год | больш за 1 год | больш, чым праз 1 год |
+| 2001-02-01T00:00:00.000Z | каля 1 года | каля 1 года | прыблізна праз 1 год |
+| 2001-01-01T00:00:00.000Z | каля 1 года | каля 1 года | прыблізна праз 1 год |
+| 2000-06-01T00:00:00.000Z | 5 месяцаў | 5 месяцаў | праз 5 месяцаў |
+| 2000-03-01T00:00:00.000Z | 2 месяцы | 2 месяцы | праз 2 месяцы |
+| 2000-02-01T00:00:00.000Z | каля 1 месяца | каля 1 месяца | прыблізна праз 1 месяц |
+| 2000-01-15T00:00:00.000Z | 14 дзён | 14 дзён | праз 14 дзён |
+| 2000-01-02T00:00:00.000Z | 1 дзень | 1 дзень | праз 1 дзень |
+| 2000-01-01T06:00:00.000Z | каля 6 гадзін | каля 6 гадзін | прыблізна праз 6 гадзін |
+| 2000-01-01T01:00:00.000Z | каля 1 гадзіны | каля 1 гадзіны | прыблізна праз 1 гадзіну |
+| 2000-01-01T00:45:00.000Z | каля 1 гадзіны | каля 1 гадзіны | прыблізна праз 1 гадзіну |
+| 2000-01-01T00:30:00.000Z | 30 хвілін | 30 хвілін | праз 30 хвілін |
+| 2000-01-01T00:15:00.000Z | 15 хвілін | 15 хвілін | праз 15 хвілін |
+| 2000-01-01T00:01:00.000Z | 1 хвіліна | 1 хвіліна | праз 1 хвіліну |
+| 2000-01-01T00:00:25.000Z | менш за хвіліну | паўхвіліны | менш, чым праз хвіліну |
+| 2000-01-01T00:00:15.000Z | менш за хвіліну | менш за 20 секунд | менш, чым праз хвіліну |
+| 2000-01-01T00:00:05.000Z | менш за хвіліну | менш за 10 секунд | менш, чым праз хвіліну |
+| 2000-01-01T00:00:00.000Z | менш за хвіліну | менш за 5 секунд | менш за хвіліну таму |
+| 1999-12-31T23:59:55.000Z | менш за хвіліну | менш за 10 секунд | менш за хвіліну таму |
+| 1999-12-31T23:59:45.000Z | менш за хвіліну | менш за 20 секунд | менш за хвіліну таму |
+| 1999-12-31T23:59:35.000Z | менш за хвіліну | паўхвіліны | менш за хвіліну таму |
+| 1999-12-31T23:59:00.000Z | 1 хвіліна | 1 хвіліна | 1 хвіліну таму |
+| 1999-12-31T23:45:00.000Z | 15 хвілін | 15 хвілін | 15 хвілін таму |
+| 1999-12-31T23:30:00.000Z | 30 хвілін | 30 хвілін | 30 хвілін таму |
+| 1999-12-31T23:15:00.000Z | каля 1 гадзіны | каля 1 гадзіны | каля 1 гадзіны таму |
+| 1999-12-31T23:00:00.000Z | каля 1 гадзіны | каля 1 гадзіны | каля 1 гадзіны таму |
+| 1999-12-31T18:00:00.000Z | каля 6 гадзін | каля 6 гадзін | каля 6 гадзін таму |
+| 1999-12-30T00:00:00.000Z | 2 дні | 2 дні | 2 дні таму |
+| 1999-12-15T00:00:00.000Z | 17 дзён | 17 дзён | 17 дзён таму |
+| 1999-12-01T00:00:00.000Z | каля 1 месяца | каля 1 месяца | каля 1 месяца таму |
+| 1999-11-01T00:00:00.000Z | 2 месяцы | 2 месяцы | 2 месяцы таму |
+| 1999-06-01T00:00:00.000Z | 7 месяцаў | 7 месяцаў | 7 месяцаў таму |
+| 1999-01-01T00:00:00.000Z | каля 1 года | каля 1 года | каля 1 года таму |
+| 1998-12-01T00:00:00.000Z | каля 1 года | каля 1 года | каля 1 года таму |
+| 1998-06-01T00:00:00.000Z | больш за 1 год | больш за 1 год | больш за 1 год таму |
+| 1998-01-01T00:00:00.000Z | каля 2 гадоў | каля 2 гадоў | каля 2 гадоў таму |
+| 1997-01-01T00:00:00.000Z | каля 3 гадоў | каля 3 гадоў | каля 3 гадоў таму |
+| 1996-01-01T00:00:00.000Z | каля 4 гадоў | каля 4 гадоў | каля 4 гадоў таму |
+| 1995-01-01T00:00:00.000Z | каля 5 гадоў | каля 5 гадоў | каля 5 гадоў таму |
+| 1994-01-01T00:00:00.000Z | каля 6 гадоў | каля 6 гадоў | каля 6 гадоў таму |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 гадоў | праз 6 гадоў | 52608 гадзін |
+| 2005-01-01T00:00:00.000Z | 5 гадоў | праз 5 гадоў | 43848 гадзін |
+| 2004-01-01T00:00:00.000Z | 4 гады | праз 4 гады | 35064 гадзіны |
+| 2003-01-01T00:00:00.000Z | 3 гады | праз 3 гады | 26304 гадзіны |
+| 2002-01-01T00:00:00.000Z | 2 гады | праз 2 гады | 17544 гадзіны |
+| 2001-06-01T00:00:00.000Z | 1 год | праз 1 год | 12408 гадзін |
+| 2001-02-01T00:00:00.000Z | 1 год | праз 1 год | 9528 гадзін |
+| 2001-01-01T00:00:00.000Z | 1 год | праз 1 год | 8784 гадзіны |
+| 2000-06-01T00:00:00.000Z | 5 месяцаў | праз 5 месяцаў | 3648 гадзін |
+| 2000-03-01T00:00:00.000Z | 2 месяцы | праз 2 месяцы | 1440 гадзін |
+| 2000-02-01T00:00:00.000Z | 1 месяц | праз 1 месяц | 744 гадзіны |
+| 2000-01-15T00:00:00.000Z | 14 дзён | праз 14 дзён | 336 гадзін |
+| 2000-01-02T00:00:00.000Z | 1 дзень | праз 1 дзень | 24 гадзіны |
+| 2000-01-01T06:00:00.000Z | 6 гадзін | праз 6 гадзін | 6 гадзін |
+| 2000-01-01T01:00:00.000Z | 1 гадзіна | праз 1 гадзіну | 1 гадзіна |
+| 2000-01-01T00:45:00.000Z | 45 хвілін | праз 45 хвілін | 1 гадзіна |
+| 2000-01-01T00:30:00.000Z | 30 хвілін | праз 30 хвілін | 1 гадзіна |
+| 2000-01-01T00:15:00.000Z | 15 хвілін | праз 15 хвілін | 0 гадзін |
+| 2000-01-01T00:01:00.000Z | 1 хвіліна | праз 1 хвіліну | 0 гадзін |
+| 2000-01-01T00:00:25.000Z | 25 секунд | праз 25 секунд | 0 гадзін |
+| 2000-01-01T00:00:15.000Z | 15 секунд | праз 15 секунд | 0 гадзін |
+| 2000-01-01T00:00:05.000Z | 5 секунд | праз 5 секунд | 0 гадзін |
+| 2000-01-01T00:00:00.000Z | 0 секунд | 0 секунд таму | 0 гадзін |
+| 1999-12-31T23:59:55.000Z | 5 секунд | 5 секунд таму | 0 гадзін |
+| 1999-12-31T23:59:45.000Z | 15 секунд | 15 секунд таму | 0 гадзін |
+| 1999-12-31T23:59:35.000Z | 25 секунд | 25 секунд таму | 0 гадзін |
+| 1999-12-31T23:59:00.000Z | 1 хвіліна | 1 хвіліну таму | 0 гадзін |
+| 1999-12-31T23:45:00.000Z | 15 хвілін | 15 хвілін таму | 0 гадзін |
+| 1999-12-31T23:30:00.000Z | 30 хвілін | 30 хвілін таму | 1 гадзіна |
+| 1999-12-31T23:15:00.000Z | 45 хвілін | 45 хвілін таму | 1 гадзіна |
+| 1999-12-31T23:00:00.000Z | 1 гадзіна | 1 гадзіну таму | 1 гадзіна |
+| 1999-12-31T18:00:00.000Z | 6 гадзін | 6 гадзін таму | 6 гадзін |
+| 1999-12-30T00:00:00.000Z | 2 дні | 2 дні таму | 48 гадзін |
+| 1999-12-15T00:00:00.000Z | 17 дзён | 17 дзён таму | 408 гадзін |
+| 1999-12-01T00:00:00.000Z | 1 месяц | 1 месяц таму | 744 гадзіны |
+| 1999-11-01T00:00:00.000Z | 2 месяцы | 2 месяцы таму | 1464 гадзіны |
+| 1999-06-01T00:00:00.000Z | 7 месяцаў | 7 месяцаў таму | 5136 гадзін |
+| 1999-01-01T00:00:00.000Z | 1 год | 1 год таму | 8760 гадзін |
+| 1998-12-01T00:00:00.000Z | 1 год | 1 год таму | 9504 гадзіны |
+| 1998-06-01T00:00:00.000Z | 2 гады | 2 гады таму | 13896 гадзін |
+| 1998-01-01T00:00:00.000Z | 2 гады | 2 гады таму | 17520 гадзін |
+| 1997-01-01T00:00:00.000Z | 3 гады | 3 гады таму | 26280 гадзін |
+| 1996-01-01T00:00:00.000Z | 4 гады | 4 гады таму | 35064 гадзіны |
+| 1995-01-01T00:00:00.000Z | 5 гадоў | 5 гадоў таму | 43824 гадзіны |
+| 1994-01-01T00:00:00.000Z | 6 гадоў | 6 гадоў таму | 52584 гадзіны |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | у наступную сераду а 0:00 |
+| 2000-01-02T00:00:00.000Z | заўтра а 0:00 |
+| 2000-01-01T00:00:00.000Z | сёння а 0:00 |
+| 1999-12-31T00:00:00.000Z | учора а 0:00 |
+| 1999-12-27T00:00:00.000Z | у панядзелак а 0:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/bg/_lib/formatDistance/index.js b/date-fns/src/locale/bg/_lib/formatDistance/index.js
new file mode 100644
index 0000000..ea4221a
--- /dev/null
+++ b/date-fns/src/locale/bg/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'по-малко от секунда',
+ other: 'по-малко от {{count}} секунди'
+ },
+
+ xSeconds: {
+ one: '1 секунда',
+ other: '{{count}} секунди'
+ },
+
+ halfAMinute: 'половин минута',
+
+ lessThanXMinutes: {
+ one: 'по-малко от минута',
+ other: 'по-малко от {{count}} минути'
+ },
+
+ xMinutes: {
+ one: '1 минута',
+ other: '{{count}} минути'
+ },
+
+ aboutXHours: {
+ one: 'около час',
+ other: 'около {{count}} часа'
+ },
+
+ xHours: {
+ one: '1 час',
+ other: '{{count}} часа'
+ },
+
+ xDays: {
+ one: '1 ден',
+ other: '{{count}} дни'
+ },
+
+ aboutXWeeks: {
+ one: 'около седмица',
+ other: 'около {{count}} седмици'
+ },
+
+ xWeeks: {
+ one: '1 седмица',
+ other: '{{count}} седмици'
+ },
+
+ aboutXMonths: {
+ one: 'около месец',
+ other: 'около {{count}} месеца'
+ },
+
+ xMonths: {
+ one: '1 месец',
+ other: '{{count}} месеца'
+ },
+
+ aboutXYears: {
+ one: 'около година',
+ other: 'около {{count}} години'
+ },
+
+ xYears: {
+ one: '1 година',
+ other: '{{count}} години'
+ },
+
+ overXYears: {
+ one: 'над година',
+ other: 'над {{count}} години'
+ },
+
+ almostXYears: {
+ one: 'почти година',
+ other: 'почти {{count}} години'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'след ' + result
+ } else {
+ return 'преди ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/bg/_lib/formatLong/index.js b/date-fns/src/locale/bg/_lib/formatLong/index.js
new file mode 100644
index 0000000..bf70409
--- /dev/null
+++ b/date-fns/src/locale/bg/_lib/formatLong/index.js
@@ -0,0 +1,38 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, dd MMMM yyyy',
+ long: 'dd MMMM yyyy',
+ medium: 'dd MMM yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ any: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'any'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/bg/_lib/formatRelative/index.js b/date-fns/src/locale/bg/_lib/formatRelative/index.js
new file mode 100644
index 0000000..0e291c0
--- /dev/null
+++ b/date-fns/src/locale/bg/_lib/formatRelative/index.js
@@ -0,0 +1,88 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+// Adapted from the `ru` translation
+
+var weekdays = [
+ 'неделя',
+ 'понеделник',
+ 'вторник',
+ 'сряда',
+ 'четвъртък',
+ 'петък',
+ 'събота'
+]
+
+function lastWeek(day) {
+ var weekday = weekdays[day]
+
+ switch (day) {
+ case 0:
+ case 3:
+ case 6:
+ return "'миналата " + weekday + " в' p"
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return "'миналия " + weekday + " в' p"
+ }
+}
+
+function thisWeek(day) {
+ var weekday = weekdays[day]
+
+ if (day === 2 /* Tue */) {
+ return "'във " + weekday + " в' p"
+ } else {
+ return "'в " + weekday + " в' p"
+ }
+}
+
+function nextWeek(day) {
+ var weekday = weekdays[day]
+
+ switch (day) {
+ case 0:
+ case 3:
+ case 6:
+ return "'следващата " + weekday + " в' p"
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return "'следващия " + weekday + " в' p"
+ }
+}
+
+var formatRelativeLocale = {
+ lastWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return lastWeek(day)
+ }
+ },
+ yesterday: "'вчера в' p",
+ today: "'днес в' p",
+ tomorrow: "'утре в' p",
+ nextWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return nextWeek(day)
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/bg/_lib/localize/index.js b/date-fns/src/locale/bg/_lib/localize/index.js
new file mode 100644
index 0000000..5d98d2e
--- /dev/null
+++ b/date-fns/src/locale/bg/_lib/localize/index.js
@@ -0,0 +1,155 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['пр.н.е.', 'н.е.'],
+ abbreviated: ['преди н. е.', 'н. е.'],
+ wide: ['преди новата ера', 'новата ера']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1-во тримес.', '2-ро тримес.', '3-то тримес.', '4-то тримес.'],
+ wide: [
+ '1-во тримесечие',
+ '2-ро тримесечие',
+ '3-то тримесечие',
+ '4-то тримесечие'
+ ]
+}
+
+var monthValues = {
+ abbreviated: [
+ 'яну',
+ 'фев',
+ 'мар',
+ 'апр',
+ 'май',
+ 'юни',
+ 'юли',
+ 'авг',
+ 'сеп',
+ 'окт',
+ 'ное',
+ 'дек'
+ ],
+ wide: [
+ 'януари',
+ 'февруари',
+ 'март',
+ 'април',
+ 'май',
+ 'юни',
+ 'юли',
+ 'август',
+ 'септември',
+ 'октомври',
+ 'ноември',
+ 'декември'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Н', 'П', 'В', 'С', 'Ч', 'П', 'С'],
+ short: ['нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
+ abbreviated: ['нед', 'пон', 'вто', 'сря', 'чет', 'пет', 'съб'],
+ wide: [
+ 'неделя',
+ 'понеделник',
+ 'вторник',
+ 'сряда',
+ 'четвъртък',
+ 'петък',
+ 'събота'
+ ]
+}
+
+var dayPeriodValues = {
+ wide: {
+ am: 'преди обяд',
+ pm: 'след обяд',
+ midnight: 'в полунощ',
+ noon: 'на обяд',
+ morning: 'сутринта',
+ afternoon: 'следобед',
+ evening: 'вечерта',
+ night: 'през нощта'
+ }
+}
+
+function isFeminine(unit) {
+ return (
+ unit === 'year' || unit === 'week' || unit === 'minute' || unit === 'second'
+ )
+}
+
+function isNeuter(unit) {
+ return unit === 'quarter'
+}
+
+function numberWithSuffix(number, unit, masculine, feminine, neuter) {
+ var suffix = isNeuter(unit) ? neuter : isFeminine(unit) ? feminine : masculine
+ return number + '-' + suffix
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var number = Number(dirtyNumber)
+
+ if (number === 0) {
+ return numberWithSuffix(0, unit, 'ев', 'ева', 'ево')
+ } else if (number % 1000 === 0) {
+ return numberWithSuffix(number, unit, 'ен', 'на', 'но')
+ } else if (number % 100 === 0) {
+ return numberWithSuffix(number, unit, 'тен', 'тна', 'тно')
+ }
+
+ var rem100 = number % 100
+ if (rem100 > 20 || rem100 < 10) {
+ switch (rem100 % 10) {
+ case 1:
+ return numberWithSuffix(number, unit, 'ви', 'ва', 'во')
+ case 2:
+ return numberWithSuffix(number, unit, 'ри', 'ра', 'ро')
+ case 7:
+ case 8:
+ return numberWithSuffix(number, unit, 'ми', 'ма', 'мо')
+ }
+ }
+
+ return numberWithSuffix(number, unit, 'ти', 'та', 'то')
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/bg/_lib/match/index.js b/date-fns/src/locale/bg/_lib/match/index.js
new file mode 100644
index 0000000..bb0b71e
--- /dev/null
+++ b/date-fns/src/locale/bg/_lib/match/index.js
@@ -0,0 +1,123 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-?[врмт][аи]|-?т?(ен|на)|-?(ев|ева))?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^((пр)?н\.?\s?е\.?)/i,
+ abbreviated: /^((пр)?н\.?\s?е\.?)/i,
+ wide: /^(преди новата ера|новата ера|нова ера)/i
+}
+var parseEraPatterns = {
+ any: [/^п/i, /^н/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234](-?[врт]?o?)? тримес.?/i,
+ wide: /^[1234](-?[врт]?о?)? тримесечие/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchDayPatterns = {
+ narrow: /^[нпвсч]/i,
+ short: /^(нд|пн|вт|ср|чт|пт|сб)/i,
+ abbreviated: /^(нед|пон|вто|сря|чет|пет|съб)/i,
+ wide: /^(неделя|понеделник|вторник|сряда|четвъртък|петък|събота)/i
+}
+
+var parseDayPatterns = {
+ narrow: [/^н/i, /^п/i, /^в/i, /^с/i, /^ч/i, /^п/i, /^с/i],
+ any: [/^н[ед]/i, /^п[он]/i, /^вт/i, /^ср/i, /^ч[ет]/i, /^п[ет]/i, /^с[ъб]/i]
+}
+
+var matchMonthPatterns = {
+ abbreviated: /^(яну|фев|мар|апр|май|юни|юли|авг|сеп|окт|ное|дек)/i,
+ wide: /^(януари|февруари|март|април|май|юни|юли|август|септември|октомври|ноември|декември)/i
+}
+
+var parseMonthPatterns = {
+ any: [
+ /^я/i,
+ /^ф/i,
+ /^мар/i,
+ /^ап/i,
+ /^май/i,
+ /^юн/i,
+ /^юл/i,
+ /^ав/i,
+ /^се/i,
+ /^окт/i,
+ /^но/i,
+ /^де/i
+ ]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(преди о|след о|в по|на о|през|веч|сут|следо)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^преди о/i,
+ pm: /^след о/i,
+ midnight: /^в пол/i,
+ noon: /^на об/i,
+ morning: /^сут/i,
+ afternoon: /^следо/i,
+ evening: /^веч/i,
+ night: /^през н/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/bg/index.d.ts b/date-fns/src/locale/bg/index.d.ts
new file mode 100644
index 0000000..485fc59
--- /dev/null
+++ b/date-fns/src/locale/bg/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { bg } from 'date-fns/locale'
+export default bg
diff --git a/date-fns/src/locale/bg/index.js b/date-fns/src/locale/bg/index.js
new file mode 100644
index 0000000..3221b94
--- /dev/null
+++ b/date-fns/src/locale/bg/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Bulgarian locale.
+ * @language Bulgarian
+ * @iso-639-2 bul
+ * @author Nikolay Stoynov [@arvigeus]{@link https://github.com/arvigeus}
+ * @author Tsvetan Ovedenski [@fintara]{@link https://github.com/fintara}
+ */
+var locale = {
+ code: 'bg',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/bg/index.js.flow b/date-fns/src/locale/bg/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/bg/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/bg/snapshot.md b/date-fns/src/locale/bg/snapshot.md
new file mode 100644
index 0000000..329dbc2
--- /dev/null
+++ b/date-fns/src/locale/bg/snapshot.md
@@ -0,0 +1,304 @@
+# Bulgarian (bg) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-ма | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-та | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-ма | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-та | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-во | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2-ро | Invalid Date |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1-во тримес. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2-ро тримес. | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-во тримесечие | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ро тримесечие | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-во | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2-ро | Invalid Date |
+| | qqq | 2019-01-01T12:13:14.015Z | 1-во тримес. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2-ро тримес. | Invalid Date |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-во тримесечие | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ро тримесечие | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-ри | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ми | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | фев | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | юли | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | февруари | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | юли | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | февруари | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | юли | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-ри | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ми | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | фев | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | юли | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | февруари | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | юли | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | февруари | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | юли | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-ва | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ма | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-ва | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ма | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-ти | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-ми | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-ри | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-ти | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | понеделник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петък | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-ви | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ти | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | понеделник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петък | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-ви | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ти | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | понеделник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петък | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-ви | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ти | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | понеделник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петък | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| | aa | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| | aaa | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| | aaaa | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| | aaaaa | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| | bb | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| | bbb | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| | bbbb | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| | bbbbb | 2019-02-11T11:13:14.015Z | преди обяд | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | след обяд | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | преди обяд | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | сутринта | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | следобед | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | вечерта | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | през нощта | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | сутринта | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | следобед | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | вечерта | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | през нощта | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | сутринта | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | следобед | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | вечерта | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | през нощта | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | сутринта | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | следобед | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | вечерта | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | през нощта | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | сутринта | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | следобед | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | вечерта | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | през нощта | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-ти | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-ти | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-ти | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-ти | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-ти | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-ти | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-ти | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-ти | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-ва | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-та | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-ва | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-та | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 фев 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 май 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 февруари 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 май 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | сряда, 11 февруари 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | неделя, 29 май 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 фев 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 май 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 февруари 1987 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 май 1453 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | сряда, 11 февруари 1987 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | неделя, 29 май 1453 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ------------------------ |
+| 2006-01-01T00:00:00.000Z | около 6 години | около 6 години | след около 6 години |
+| 2005-01-01T00:00:00.000Z | около 5 години | около 5 години | след около 5 години |
+| 2004-01-01T00:00:00.000Z | около 4 години | около 4 години | след около 4 години |
+| 2003-01-01T00:00:00.000Z | около 3 години | около 3 години | след около 3 години |
+| 2002-01-01T00:00:00.000Z | около 2 години | около 2 години | след около 2 години |
+| 2001-06-01T00:00:00.000Z | над година | над година | след над година |
+| 2001-02-01T00:00:00.000Z | около година | около година | след около година |
+| 2001-01-01T00:00:00.000Z | около година | около година | след около година |
+| 2000-06-01T00:00:00.000Z | 5 месеца | 5 месеца | след 5 месеца |
+| 2000-03-01T00:00:00.000Z | 2 месеца | 2 месеца | след 2 месеца |
+| 2000-02-01T00:00:00.000Z | около месец | около месец | след около месец |
+| 2000-01-15T00:00:00.000Z | 14 дни | 14 дни | след 14 дни |
+| 2000-01-02T00:00:00.000Z | 1 ден | 1 ден | след 1 ден |
+| 2000-01-01T06:00:00.000Z | около 6 часа | около 6 часа | след около 6 часа |
+| 2000-01-01T01:00:00.000Z | около час | около час | след около час |
+| 2000-01-01T00:45:00.000Z | около час | около час | след около час |
+| 2000-01-01T00:30:00.000Z | 30 минути | 30 минути | след 30 минути |
+| 2000-01-01T00:15:00.000Z | 15 минути | 15 минути | след 15 минути |
+| 2000-01-01T00:01:00.000Z | 1 минута | 1 минута | след 1 минута |
+| 2000-01-01T00:00:25.000Z | по-малко от минута | половин минута | след по-малко от минута |
+| 2000-01-01T00:00:15.000Z | по-малко от минута | по-малко от 20 секунди | след по-малко от минута |
+| 2000-01-01T00:00:05.000Z | по-малко от минута | по-малко от 10 секунди | след по-малко от минута |
+| 2000-01-01T00:00:00.000Z | по-малко от минута | по-малко от 5 секунди | преди по-малко от минута |
+| 1999-12-31T23:59:55.000Z | по-малко от минута | по-малко от 10 секунди | преди по-малко от минута |
+| 1999-12-31T23:59:45.000Z | по-малко от минута | по-малко от 20 секунди | преди по-малко от минута |
+| 1999-12-31T23:59:35.000Z | по-малко от минута | половин минута | преди по-малко от минута |
+| 1999-12-31T23:59:00.000Z | 1 минута | 1 минута | преди 1 минута |
+| 1999-12-31T23:45:00.000Z | 15 минути | 15 минути | преди 15 минути |
+| 1999-12-31T23:30:00.000Z | 30 минути | 30 минути | преди 30 минути |
+| 1999-12-31T23:15:00.000Z | около час | около час | преди около час |
+| 1999-12-31T23:00:00.000Z | около час | около час | преди около час |
+| 1999-12-31T18:00:00.000Z | около 6 часа | около 6 часа | преди около 6 часа |
+| 1999-12-30T00:00:00.000Z | 2 дни | 2 дни | преди 2 дни |
+| 1999-12-15T00:00:00.000Z | 17 дни | 17 дни | преди 17 дни |
+| 1999-12-01T00:00:00.000Z | около месец | около месец | преди около месец |
+| 1999-11-01T00:00:00.000Z | 2 месеца | 2 месеца | преди 2 месеца |
+| 1999-06-01T00:00:00.000Z | 7 месеца | 7 месеца | преди 7 месеца |
+| 1999-01-01T00:00:00.000Z | около година | около година | преди около година |
+| 1998-12-01T00:00:00.000Z | около година | около година | преди около година |
+| 1998-06-01T00:00:00.000Z | над година | над година | преди над година |
+| 1998-01-01T00:00:00.000Z | около 2 години | около 2 години | преди около 2 години |
+| 1997-01-01T00:00:00.000Z | около 3 години | около 3 години | преди около 3 години |
+| 1996-01-01T00:00:00.000Z | около 4 години | около 4 години | преди около 4 години |
+| 1995-01-01T00:00:00.000Z | около 5 години | около 5 години | преди около 5 години |
+| 1994-01-01T00:00:00.000Z | около 6 години | около 6 години | преди около 6 години |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 години | след 6 години | 52608 часа |
+| 2005-01-01T00:00:00.000Z | 5 години | след 5 години | 43848 часа |
+| 2004-01-01T00:00:00.000Z | 4 години | след 4 години | 35064 часа |
+| 2003-01-01T00:00:00.000Z | 3 години | след 3 години | 26304 часа |
+| 2002-01-01T00:00:00.000Z | 2 години | след 2 години | 17544 часа |
+| 2001-06-01T00:00:00.000Z | 1 година | след 1 година | 12408 часа |
+| 2001-02-01T00:00:00.000Z | 1 година | след 1 година | 9528 часа |
+| 2001-01-01T00:00:00.000Z | 1 година | след 1 година | 8784 часа |
+| 2000-06-01T00:00:00.000Z | 5 месеца | след 5 месеца | 3648 часа |
+| 2000-03-01T00:00:00.000Z | 2 месеца | след 2 месеца | 1440 часа |
+| 2000-02-01T00:00:00.000Z | 1 месец | след 1 месец | 744 часа |
+| 2000-01-15T00:00:00.000Z | 14 дни | след 14 дни | 336 часа |
+| 2000-01-02T00:00:00.000Z | 1 ден | след 1 ден | 24 часа |
+| 2000-01-01T06:00:00.000Z | 6 часа | след 6 часа | 6 часа |
+| 2000-01-01T01:00:00.000Z | 1 час | след 1 час | 1 час |
+| 2000-01-01T00:45:00.000Z | 45 минути | след 45 минути | 1 час |
+| 2000-01-01T00:30:00.000Z | 30 минути | след 30 минути | 1 час |
+| 2000-01-01T00:15:00.000Z | 15 минути | след 15 минути | 0 часа |
+| 2000-01-01T00:01:00.000Z | 1 минута | след 1 минута | 0 часа |
+| 2000-01-01T00:00:25.000Z | 25 секунди | след 25 секунди | 0 часа |
+| 2000-01-01T00:00:15.000Z | 15 секунди | след 15 секунди | 0 часа |
+| 2000-01-01T00:00:05.000Z | 5 секунди | след 5 секунди | 0 часа |
+| 2000-01-01T00:00:00.000Z | 0 секунди | преди 0 секунди | 0 часа |
+| 1999-12-31T23:59:55.000Z | 5 секунди | преди 5 секунди | 0 часа |
+| 1999-12-31T23:59:45.000Z | 15 секунди | преди 15 секунди | 0 часа |
+| 1999-12-31T23:59:35.000Z | 25 секунди | преди 25 секунди | 0 часа |
+| 1999-12-31T23:59:00.000Z | 1 минута | преди 1 минута | 0 часа |
+| 1999-12-31T23:45:00.000Z | 15 минути | преди 15 минути | 0 часа |
+| 1999-12-31T23:30:00.000Z | 30 минути | преди 30 минути | 1 час |
+| 1999-12-31T23:15:00.000Z | 45 минути | преди 45 минути | 1 час |
+| 1999-12-31T23:00:00.000Z | 1 час | преди 1 час | 1 час |
+| 1999-12-31T18:00:00.000Z | 6 часа | преди 6 часа | 6 часа |
+| 1999-12-30T00:00:00.000Z | 2 дни | преди 2 дни | 48 часа |
+| 1999-12-15T00:00:00.000Z | 17 дни | преди 17 дни | 408 часа |
+| 1999-12-01T00:00:00.000Z | 1 месец | преди 1 месец | 744 часа |
+| 1999-11-01T00:00:00.000Z | 2 месеца | преди 2 месеца | 1464 часа |
+| 1999-06-01T00:00:00.000Z | 7 месеца | преди 7 месеца | 5136 часа |
+| 1999-01-01T00:00:00.000Z | 1 година | преди 1 година | 8760 часа |
+| 1998-12-01T00:00:00.000Z | 1 година | преди 1 година | 9504 часа |
+| 1998-06-01T00:00:00.000Z | 2 години | преди 2 години | 13896 часа |
+| 1998-01-01T00:00:00.000Z | 2 години | преди 2 години | 17520 часа |
+| 1997-01-01T00:00:00.000Z | 3 години | преди 3 години | 26280 часа |
+| 1996-01-01T00:00:00.000Z | 4 години | преди 4 години | 35064 часа |
+| 1995-01-01T00:00:00.000Z | 5 години | преди 5 години | 43824 часа |
+| 1994-01-01T00:00:00.000Z | 6 години | преди 6 години | 52584 часа |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | следващата сряда в 0:00 |
+| 2000-01-02T00:00:00.000Z | утре в 0:00 |
+| 2000-01-01T00:00:00.000Z | днес в 0:00 |
+| 1999-12-31T00:00:00.000Z | вчера в 0:00 |
+| 1999-12-27T00:00:00.000Z | в понеделник в 0:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/bn/_lib/formatDistance/index.js b/date-fns/src/locale/bn/_lib/formatDistance/index.js
new file mode 100644
index 0000000..79835f9
--- /dev/null
+++ b/date-fns/src/locale/bn/_lib/formatDistance/index.js
@@ -0,0 +1,106 @@
+import localize from '../localize/index'
+
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'প্রায় ১ সেকেন্ড',
+ other: 'প্রায় {{count}} সেকেন্ড'
+ },
+
+ xSeconds: {
+ one: '১ সেকেন্ড',
+ other: '{{count}} সেকেন্ড'
+ },
+
+ halfAMinute: 'আধ মিনিট',
+
+ lessThanXMinutes: {
+ one: 'প্রায় ১ মিনিট',
+ other: 'প্রায় {{count}} মিনিট'
+ },
+
+ xMinutes: {
+ one: '১ মিনিট',
+ other: '{{count}} মিনিট'
+ },
+
+ aboutXHours: {
+ one: 'প্রায় ১ ঘন্টা',
+ other: 'প্রায় {{count}} ঘন্টা'
+ },
+
+ xHours: {
+ one: '১ ঘন্টা',
+ other: '{{count}} ঘন্টা'
+ },
+
+ xDays: {
+ one: '১ দিন',
+ other: '{{count}} দিন'
+ },
+
+ aboutXWeeks: {
+ one: 'প্রায় ১ সপ্তাহ',
+ other: 'প্রায় {{count}} সপ্তাহ'
+ },
+
+ xWeeks: {
+ one: '১ সপ্তাহ',
+ other: '{{count}} সপ্তাহ'
+ },
+
+ aboutXMonths: {
+ one: 'প্রায় ১ মাস',
+ other: 'প্রায় {{count}} মাস'
+ },
+
+ xMonths: {
+ one: '১ মাস',
+ other: '{{count}} মাস'
+ },
+
+ aboutXYears: {
+ one: 'প্রায় ১ বছর',
+ other: 'প্রায় {{count}} বছর'
+ },
+
+ xYears: {
+ one: '১ বছর',
+ other: '{{count}} বছর'
+ },
+
+ overXYears: {
+ one: '১ বছরের বেশি',
+ other: '{{count}} বছরের বেশি'
+ },
+
+ almostXYears: {
+ one: 'প্রায় ১ বছর',
+ other: 'প্রায় {{count}} বছর'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace(
+ '{{count}}',
+ localize.numberToLocale(count)
+ )
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + ' এর মধ্যে'
+ } else {
+ return result + ' আগে'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/bn/_lib/formatLong/index.js b/date-fns/src/locale/bn/_lib/formatLong/index.js
new file mode 100644
index 0000000..59b7c24
--- /dev/null
+++ b/date-fns/src/locale/bn/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'MM/dd/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} {{time}} 'সময়'",
+ long: "{{date}} {{time}} 'সময়'",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/bn/_lib/formatRelative/index.js b/date-fns/src/locale/bn/_lib/formatRelative/index.js
new file mode 100644
index 0000000..69fdc9c
--- /dev/null
+++ b/date-fns/src/locale/bn/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'গত' eeee 'সময়' p",
+ yesterday: "'গতকাল' 'সময়' p",
+ today: "'আজ' 'সময়' p",
+ tomorrow: "'আগামীকাল' 'সময়' p",
+ nextWeek: "eeee 'সময়' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/bn/_lib/localize/index.js b/date-fns/src/locale/bn/_lib/localize/index.js
new file mode 100644
index 0000000..c704a96
--- /dev/null
+++ b/date-fns/src/locale/bn/_lib/localize/index.js
@@ -0,0 +1,265 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var numberValues = {
+ locale: {
+ '1': '১',
+ '2': '২',
+ '3': '৩',
+ '4': '৪',
+ '5': '৫',
+ '6': '৬',
+ '7': '৭',
+ '8': '৮',
+ '9': '৯',
+ '0': '০'
+ },
+ number: {
+ '১': '1',
+ '২': '2',
+ '৩': '3',
+ '৪': '4',
+ '৫': '5',
+ '৬': '6',
+ '৭': '7',
+ '৮': '8',
+ '৯': '9',
+ '০': '0'
+ }
+}
+
+var eraValues = {
+ narrow: ['খ্রিঃপূঃ', 'খ্রিঃ'],
+ abbreviated: ['খ্রিঃপূর্ব', 'খ্রিঃ'],
+ wide: ['খ্রিস্টপূর্ব', 'খ্রিস্টাব্দ']
+}
+
+var quarterValues = {
+ narrow: ['১', '২', '৩', '৪'],
+ abbreviated: ['১ত্রৈ', '২ত্রৈ', '৩ত্রৈ', '৪ত্রৈ'],
+ wide: ['১ম ত্রৈমাসিক', '২য় ত্রৈমাসিক', '৩য় ত্রৈমাসিক', '৪র্থ ত্রৈমাসিক']
+}
+
+var monthValues = {
+ narrow: [
+ 'জানু',
+ 'ফেব্রু',
+ 'মার্চ',
+ 'এপ্রিল',
+ 'মে',
+ 'জুন',
+ 'জুলাই',
+ 'আগস্ট',
+ 'সেপ্ট',
+ 'অক্টো',
+ 'নভে',
+ 'ডিসে'
+ ],
+ abbreviated: [
+ 'জানু',
+ 'ফেব্রু',
+ 'মার্চ',
+ 'এপ্রিল',
+ 'মে',
+ 'জুন',
+ 'জুলাই',
+ 'আগস্ট',
+ 'সেপ্ট',
+ 'অক্টো',
+ 'নভে',
+ 'ডিসে'
+ ],
+ wide: [
+ 'জানুয়ারি',
+ 'ফেব্রুয়ারি',
+ 'মার্চ',
+ 'এপ্রিল',
+ 'মে',
+ 'জুন',
+ 'জুলাই',
+ 'আগস্ট',
+ 'সেপ্টেম্বর',
+ 'অক্টোবর',
+ 'নভেম্বর',
+ 'ডিসেম্বর'
+ ]
+}
+
+var dayValues = {
+ narrow: ['র', 'সো', 'ম', 'বু', 'বৃ', 'শু', 'শ'],
+ short: ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহ', 'শুক্র', 'শনি'],
+ abbreviated: ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহ', 'শুক্র', 'শনি'],
+ wide: [
+ 'রবিবার',
+ 'সোমবার',
+ 'মঙ্গলবার',
+ 'বুধবার',
+ 'বৃহস্পতিবার ',
+ 'শুক্রবার',
+ 'শনিবার'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'পূ',
+ pm: 'অপ',
+ midnight: 'মধ্যরাত',
+ noon: 'মধ্যাহ্ন',
+ morning: 'সকাল',
+ afternoon: 'বিকাল',
+ evening: 'সন্ধ্যা',
+ night: 'রাত'
+ },
+ abbreviated: {
+ am: 'পূর্বাহ্ন',
+ pm: 'অপরাহ্ন',
+ midnight: 'মধ্যরাত',
+ noon: 'মধ্যাহ্ন',
+ morning: 'সকাল',
+ afternoon: 'বিকাল',
+ evening: 'সন্ধ্যা',
+ night: 'রাত'
+ },
+ wide: {
+ am: 'পূর্বাহ্ন',
+ pm: 'অপরাহ্ন',
+ midnight: 'মধ্যরাত',
+ noon: 'মধ্যাহ্ন',
+ morning: 'সকাল',
+ afternoon: 'বিকাল',
+ evening: 'সন্ধ্যা',
+ night: 'রাত'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'পূ',
+ pm: 'অপ',
+ midnight: 'মধ্যরাত',
+ noon: 'মধ্যাহ্ন',
+ morning: 'সকাল',
+ afternoon: 'বিকাল',
+ evening: 'সন্ধ্যা',
+ night: 'রাত'
+ },
+ abbreviated: {
+ am: 'পূর্বাহ্ন',
+ pm: 'অপরাহ্ন',
+ midnight: 'মধ্যরাত',
+ noon: 'মধ্যাহ্ন',
+ morning: 'সকাল',
+ afternoon: 'বিকাল',
+ evening: 'সন্ধ্যা',
+ night: 'রাত'
+ },
+ wide: {
+ am: 'পূর্বাহ্ন',
+ pm: 'অপরাহ্ন',
+ midnight: 'মধ্যরাত',
+ noon: 'মধ্যাহ্ন',
+ morning: 'সকাল',
+ afternoon: 'বিকাল',
+ evening: 'সন্ধ্যা',
+ night: 'রাত'
+ }
+}
+
+function dateOrdinalNumber(number, localeNumber) {
+ if (number > 18 && number <= 31) {
+ return localeNumber + 'শে'
+ } else {
+ switch (number) {
+ case 1:
+ return localeNumber + 'লা'
+ case 2:
+ case 3:
+ return localeNumber + 'রা'
+ case 4:
+ return localeNumber + 'ঠা'
+ default:
+ return localeNumber + 'ই'
+ }
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var number = localize.localeToNumber(dirtyNumber)
+ var localeNumber = localize.numberToLocale(number)
+ var unit = dirtyOptions.unit
+
+ if (unit === 'date') {
+ return dateOrdinalNumber(number, localeNumber)
+ }
+ if (number > 10 || number === 0) return localeNumber + 'তম'
+
+ var rem10 = number % 10
+ switch (rem10) {
+ case 2:
+ case 3:
+ return localeNumber + 'য়'
+ case 4:
+ return localeNumber + 'র্থ'
+ case 6:
+ return localeNumber + 'ষ্ঠ'
+ case 1:
+ case 5:
+ case 7:
+ case 8:
+ case 9:
+ case 0:
+ return localeNumber + 'ম'
+ }
+}
+
+function localeToNumber(locale) {
+ var number = locale.toString().replace(/[১২৩৪৫৬৭৮৯০]/g, function(match) {
+ return numberValues.number[match]
+ })
+ return Number(number)
+}
+
+function numberToLocale(number) {
+ return number.toString().replace(/\d/g, function(match) {
+ return numberValues.locale[match]
+ })
+}
+
+var localize = {
+ localeToNumber: localeToNumber,
+
+ numberToLocale: numberToLocale,
+
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/bn/_lib/match/index.js b/date-fns/src/locale/bn/_lib/match/index.js
new file mode 100644
index 0000000..d017815
--- /dev/null
+++ b/date-fns/src/locale/bn/_lib/match/index.js
@@ -0,0 +1,144 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(ম|য়|র্থ|ষ্ঠ|শে|ই|তম)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(খ্রিঃপূঃ|খ্রিঃ)/i,
+ abbreviated: /^(খ্রিঃপূর্ব|খ্রিঃ)/i,
+ wide: /^(খ্রিস্টপূর্ব|খ্রিস্টাব্দ)/i
+}
+var parseEraPatterns = {
+ narrow: [/^খ্রিঃপূঃ/i, /^খ্রিঃ/i],
+ abbreviated: [/^খ্রিঃপূর্ব/i, /^খ্রিঃ/i],
+ wide: [/^খ্রিস্টপূর্ব/i, /^খ্রিস্টাব্দ/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[১২৩৪]/i,
+ abbreviated: /^[১২৩৪]ত্রৈ/i,
+ wide: /^[১২৩৪](ম|য়|র্থ)? ত্রৈমাসিক/i
+}
+var parseQuarterPatterns = {
+ any: [/১/i, /২/i, /৩/i, /৪/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(জানু|ফেব্রু|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগস্ট|সেপ্ট|অক্টো|নভে|ডিসে)/i,
+ abbreviated: /^(জানু|ফেব্রু|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগস্ট|সেপ্ট|অক্টো|নভে|ডিসে)/i,
+ wide: /^(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগস্ট|সেপ্টেম্বর|অক্টোবর|নভেম্বর|ডিসেম্বর)/i
+}
+var parseMonthPatterns = {
+ any: [
+ /^জানু/i,
+ /^ফেব্রু/i,
+ /^মার্চ/i,
+ /^এপ্রিল/i,
+ /^মে/i,
+ /^জুন/i,
+ /^জুলাই/i,
+ /^আগস্ট/i,
+ /^সেপ্ট/i,
+ /^অক্টো/i,
+ /^নভে/i,
+ /^ডিসে/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(র|সো|ম|বু|বৃ|শু|শ)+/i,
+ short: /^(রবি|সোম|মঙ্গল|বুধ|বৃহ|শুক্র|শনি)+/i,
+ abbreviated: /^(রবি|সোম|মঙ্গল|বুধ|বৃহ|শুক্র|শনি)+/i,
+ wide: /^(রবিবার|সোমবার|মঙ্গলবার|বুধবার|বৃহস্পতিবার |শুক্রবার|শনিবার)+/i
+}
+var parseDayPatterns = {
+ narrow: [/^র/i, /^সো/i, /^ম/i, /^বু/i, /^বৃ/i, /^শু/i, /^শ/i],
+ short: [/^রবি/i, /^সোম/i, /^মঙ্গল/i, /^বুধ/i, /^বৃহ/i, /^শুক্র/i, /^শনি/i],
+ abbreviated: [
+ /^রবি/i,
+ /^সোম/i,
+ /^মঙ্গল/i,
+ /^বুধ/i,
+ /^বৃহ/i,
+ /^শুক্র/i,
+ /^শনি/i
+ ],
+ wide: [
+ /^রবিবার/i,
+ /^সোমবার/i,
+ /^মঙ্গলবার/i,
+ /^বুধবার/i,
+ /^বৃহস্পতিবার /i,
+ /^শুক্রবার/i,
+ /^শনিবার/i
+ ]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(পূ|অপ|মধ্যরাত|মধ্যাহ্ন|সকাল|বিকাল|সন্ধ্যা|রাত)/i,
+ abbreviated: /^(পূর্বাহ্ন|অপরাহ্ন|মধ্যরাত|মধ্যাহ্ন|সকাল|বিকাল|সন্ধ্যা|রাত)/i,
+ wide: /^(পূর্বাহ্ন|অপরাহ্ন|মধ্যরাত|মধ্যাহ্ন|সকাল|বিকাল|সন্ধ্যা|রাত)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^পূ/i,
+ pm: /^অপ/i,
+ midnight: /^মধ্যরাত/i,
+ noon: /^মধ্যাহ্ন/i,
+ morning: /সকাল/i,
+ afternoon: /বিকাল/i,
+ evening: /সন্ধ্যা/i,
+ night: /রাত/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/bn/index.d.ts b/date-fns/src/locale/bn/index.d.ts
new file mode 100644
index 0000000..9f9b38c
--- /dev/null
+++ b/date-fns/src/locale/bn/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { bn } from 'date-fns/locale'
+export default bn
diff --git a/date-fns/src/locale/bn/index.js b/date-fns/src/locale/bn/index.js
new file mode 100644
index 0000000..0be2d13
--- /dev/null
+++ b/date-fns/src/locale/bn/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Bengali locale.
+ * @language Bengali
+ * @iso-639-2 ben
+ * @author Touhidur Rahman [@touhidrahman]{@link https://github.com/touhidrahman}
+ * @author Farhad Yasir [@nutboltu]{@link https://github.com/nutboltu}
+ */
+var locale = {
+ code: 'bn',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/bn/index.js.flow b/date-fns/src/locale/bn/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/bn/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/bn/snapshot.md b/date-fns/src/locale/bn/snapshot.md
new file mode 100644
index 0000000..2505705
--- /dev/null
+++ b/date-fns/src/locale/bn/snapshot.md
@@ -0,0 +1,304 @@
+# Bengali (bn) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | ১৯৮৭তম | Invalid Date |
+| | | 0005-01-01T12:13:14.015Z | ৫ম | Invalid Date |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | ১৯৮৭তম | Invalid Date |
+| | | 0005-01-01T12:13:14.015Z | ৫ম | Invalid Date |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | ১ম | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | ২য় | Invalid Date |
+| | QQQ | 2019-01-01T12:13:14.015Z | ১ত্রৈ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ২ত্রৈ | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | ১ম ত্রৈমাসিক | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ২য় ত্রৈমাসিক | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | ১ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ২ | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | ১ম | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | ২য় | Invalid Date |
+| | qqq | 2019-01-01T12:13:14.015Z | ১ত্রৈ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ২ত্রৈ | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | ১ম ত্রৈমাসিক | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ২য় ত্রৈমাসিক | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | ২য় | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | ৭ম | Invalid Date |
+| | MMM | 2019-02-11T12:13:14.015Z | ফেব্রু | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | জুলাই | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | ফেব্রুয়ারি | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | জুলাই | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ফেব্রু | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | জুলাই | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | ২য় | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | ৭ম | Invalid Date |
+| | LLL | 2019-02-11T12:13:14.015Z | ফেব্রু | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | জুলাই | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | ফেব্রুয়ারি | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | জুলাই | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ফেব্রু | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | জুলাই | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | ১ম | Invalid Date |
+| | | 2019-12-01T12:13:14.015Z | ৪৯তম | Invalid Date |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | ১ম | Invalid Date |
+| | | 2019-12-01T12:13:14.015Z | ৪৮তম | Invalid Date |
+| Day of month | do | 2019-02-11T12:13:14.015Z | ১১ই | Invalid Date |
+| | | 2019-02-28T12:13:14.015Z | ২৮শে | Invalid Date |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | ৪২তম | Invalid Date |
+| | | 2019-12-31T12:13:14.015Z | ৩৬৫তম | Invalid Date |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | সোমবার | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্রবার | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | সো | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শু | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | ১ম | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ৫ম | Invalid Date |
+| | iii | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | সোমবার | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্রবার | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | সো | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শু | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | ২য় | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ৬ষ্ঠ | Invalid Date |
+| | eee | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | সোমবার | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্রবার | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | সো | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শু | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | ২য় | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ৬ষ্ঠ | Invalid Date |
+| | ccc | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | সোমবার | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্রবার | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | সো | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শু | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | সোম | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | শুক্র | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | পূ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূ | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপরাহ্ন | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূর্বাহ্ন | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | পূ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | অপ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | অপ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | পূ | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | সকাল | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | বিকাল | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | সন্ধ্যা | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | রাত | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | সকাল | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | বিকাল | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | সন্ধ্যা | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | রাত | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | সকাল | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | বিকাল | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | সন্ধ্যা | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | রাত | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | সকাল | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | বিকাল | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | সন্ধ্যা | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | রাত | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | সকাল | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | বিকাল | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | সন্ধ্যা | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | রাত | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | ১১তম | Invalid Date |
+| | | 2019-02-11T23:13:14.015Z | ১১তম | Invalid Date |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | ১১তম | Invalid Date |
+| | | 2019-02-11T23:13:14.015Z | ২৩তম | Invalid Date |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | ১১তম | Invalid Date |
+| | | 2019-02-11T23:13:14.015Z | ১১তম | Invalid Date |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | ১১তম | Invalid Date |
+| | | 2019-02-11T23:13:14.015Z | ২৩তম | Invalid Date |
+| Minute | mo | 2019-01-01T12:01:14.015Z | ১ম | Invalid Date |
+| | | 2019-04-01T12:55:14.015Z | ৫৫তম | Invalid Date |
+| Second | so | 2019-01-01T12:13:01.015Z | ১ম | Invalid Date |
+| | | 2019-04-01T12:13:55.015Z | ৫৫তম | Invalid Date |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 02/11/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | ফেব্রু 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | মে 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | ফেব্রুয়ারি ১১ই, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | মে ২৯শে, 1453 | Invalid Date |
+| | PPPP | 1987-02-11T12:13:14.015Z | বুধবার, ফেব্রুয়ারি ১১ই, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | রবিবার, মে ২৯শে, 1453 | Invalid Date |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 অপরাহ্ন | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 অপরাহ্ন | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 অপরাহ্ন | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 অপরাহ্ন | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 অপরাহ্ন GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 অপরাহ্ন GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 অপরাহ্ন GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 অপরাহ্ন GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 02/11/1987, 12:13 অপরাহ্ন | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453, 11:59 অপরাহ্ন | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | ফেব্রু 11, 1987, 12:13:14 অপরাহ্ন | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | মে 29, 1453, 11:59:59 অপরাহ্ন | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | ফেব্রুয়ারি ১১ই, 1987 12:13:14 অপরাহ্ন GMT+0 সময় | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | মে ২৯শে, 1453 11:59:59 অপরাহ্ন GMT+0 সময় | Invalid Date |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | বুধবার, ফেব্রুয়ারি ১১ই, 1987 12:13:14 অপরাহ্ন GMT+00:00 সময় | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | রবিবার, মে ২৯শে, 1453 11:59:59 অপরাহ্ন GMT+00:00 সময় | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------- | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | প্রায় ৬ বছর | প্রায় ৬ বছর | প্রায় ৬ বছর এর মধ্যে |
+| 2005-01-01T00:00:00.000Z | প্রায় ৫ বছর | প্রায় ৫ বছর | প্রায় ৫ বছর এর মধ্যে |
+| 2004-01-01T00:00:00.000Z | প্রায় ৪ বছর | প্রায় ৪ বছর | প্রায় ৪ বছর এর মধ্যে |
+| 2003-01-01T00:00:00.000Z | প্রায় ৩ বছর | প্রায় ৩ বছর | প্রায় ৩ বছর এর মধ্যে |
+| 2002-01-01T00:00:00.000Z | প্রায় ২ বছর | প্রায় ২ বছর | প্রায় ২ বছর এর মধ্যে |
+| 2001-06-01T00:00:00.000Z | ১ বছরের বেশি | ১ বছরের বেশি | ১ বছরের বেশি এর মধ্যে |
+| 2001-02-01T00:00:00.000Z | প্রায় ১ বছর | প্রায় ১ বছর | প্রায় ১ বছর এর মধ্যে |
+| 2001-01-01T00:00:00.000Z | প্রায় ১ বছর | প্রায় ১ বছর | প্রায় ১ বছর এর মধ্যে |
+| 2000-06-01T00:00:00.000Z | ৫ মাস | ৫ মাস | ৫ মাস এর মধ্যে |
+| 2000-03-01T00:00:00.000Z | ২ মাস | ২ মাস | ২ মাস এর মধ্যে |
+| 2000-02-01T00:00:00.000Z | প্রায় ১ মাস | প্রায় ১ মাস | প্রায় ১ মাস এর মধ্যে |
+| 2000-01-15T00:00:00.000Z | ১৪ দিন | ১৪ দিন | ১৪ দিন এর মধ্যে |
+| 2000-01-02T00:00:00.000Z | ১ দিন | ১ দিন | ১ দিন এর মধ্যে |
+| 2000-01-01T06:00:00.000Z | প্রায় ৬ ঘন্টা | প্রায় ৬ ঘন্টা | প্রায় ৬ ঘন্টা এর মধ্যে |
+| 2000-01-01T01:00:00.000Z | প্রায় ১ ঘন্টা | প্রায় ১ ঘন্টা | প্রায় ১ ঘন্টা এর মধ্যে |
+| 2000-01-01T00:45:00.000Z | প্রায় ১ ঘন্টা | প্রায় ১ ঘন্টা | প্রায় ১ ঘন্টা এর মধ্যে |
+| 2000-01-01T00:30:00.000Z | ৩০ মিনিট | ৩০ মিনিট | ৩০ মিনিট এর মধ্যে |
+| 2000-01-01T00:15:00.000Z | ১৫ মিনিট | ১৫ মিনিট | ১৫ মিনিট এর মধ্যে |
+| 2000-01-01T00:01:00.000Z | ১ মিনিট | ১ মিনিট | ১ মিনিট এর মধ্যে |
+| 2000-01-01T00:00:25.000Z | প্রায় ১ মিনিট | আধ মিনিট | প্রায় ১ মিনিট এর মধ্যে |
+| 2000-01-01T00:00:15.000Z | প্রায় ১ মিনিট | প্রায় ২০ সেকেন্ড | প্রায় ১ মিনিট এর মধ্যে |
+| 2000-01-01T00:00:05.000Z | প্রায় ১ মিনিট | প্রায় ১০ সেকেন্ড | প্রায় ১ মিনিট এর মধ্যে |
+| 2000-01-01T00:00:00.000Z | প্রায় ১ মিনিট | প্রায় ৫ সেকেন্ড | প্রায় ১ মিনিট আগে |
+| 1999-12-31T23:59:55.000Z | প্রায় ১ মিনিট | প্রায় ১০ সেকেন্ড | প্রায় ১ মিনিট আগে |
+| 1999-12-31T23:59:45.000Z | প্রায় ১ মিনিট | প্রায় ২০ সেকেন্ড | প্রায় ১ মিনিট আগে |
+| 1999-12-31T23:59:35.000Z | প্রায় ১ মিনিট | আধ মিনিট | প্রায় ১ মিনিট আগে |
+| 1999-12-31T23:59:00.000Z | ১ মিনিট | ১ মিনিট | ১ মিনিট আগে |
+| 1999-12-31T23:45:00.000Z | ১৫ মিনিট | ১৫ মিনিট | ১৫ মিনিট আগে |
+| 1999-12-31T23:30:00.000Z | ৩০ মিনিট | ৩০ মিনিট | ৩০ মিনিট আগে |
+| 1999-12-31T23:15:00.000Z | প্রায় ১ ঘন্টা | প্রায় ১ ঘন্টা | প্রায় ১ ঘন্টা আগে |
+| 1999-12-31T23:00:00.000Z | প্রায় ১ ঘন্টা | প্রায় ১ ঘন্টা | প্রায় ১ ঘন্টা আগে |
+| 1999-12-31T18:00:00.000Z | প্রায় ৬ ঘন্টা | প্রায় ৬ ঘন্টা | প্রায় ৬ ঘন্টা আগে |
+| 1999-12-30T00:00:00.000Z | ২ দিন | ২ দিন | ২ দিন আগে |
+| 1999-12-15T00:00:00.000Z | ১৭ দিন | ১৭ দিন | ১৭ দিন আগে |
+| 1999-12-01T00:00:00.000Z | প্রায় ১ মাস | প্রায় ১ মাস | প্রায় ১ মাস আগে |
+| 1999-11-01T00:00:00.000Z | ২ মাস | ২ মাস | ২ মাস আগে |
+| 1999-06-01T00:00:00.000Z | ৭ মাস | ৭ মাস | ৭ মাস আগে |
+| 1999-01-01T00:00:00.000Z | প্রায় ১ বছর | প্রায় ১ বছর | প্রায় ১ বছর আগে |
+| 1998-12-01T00:00:00.000Z | প্রায় ১ বছর | প্রায় ১ বছর | প্রায় ১ বছর আগে |
+| 1998-06-01T00:00:00.000Z | ১ বছরের বেশি | ১ বছরের বেশি | ১ বছরের বেশি আগে |
+| 1998-01-01T00:00:00.000Z | প্রায় ২ বছর | প্রায় ২ বছর | প্রায় ২ বছর আগে |
+| 1997-01-01T00:00:00.000Z | প্রায় ৩ বছর | প্রায় ৩ বছর | প্রায় ৩ বছর আগে |
+| 1996-01-01T00:00:00.000Z | প্রায় ৪ বছর | প্রায় ৪ বছর | প্রায় ৪ বছর আগে |
+| 1995-01-01T00:00:00.000Z | প্রায় ৫ বছর | প্রায় ৫ বছর | প্রায় ৫ বছর আগে |
+| 1994-01-01T00:00:00.000Z | প্রায় ৬ বছর | প্রায় ৬ বছর | প্রায় ৬ বছর আগে |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | ৬ বছর | ৬ বছর এর মধ্যে | ৫২৬০৮ ঘন্টা |
+| 2005-01-01T00:00:00.000Z | ৫ বছর | ৫ বছর এর মধ্যে | ৪৩৮৪৮ ঘন্টা |
+| 2004-01-01T00:00:00.000Z | ৪ বছর | ৪ বছর এর মধ্যে | ৩৫০৬৪ ঘন্টা |
+| 2003-01-01T00:00:00.000Z | ৩ বছর | ৩ বছর এর মধ্যে | ২৬৩০৪ ঘন্টা |
+| 2002-01-01T00:00:00.000Z | ২ বছর | ২ বছর এর মধ্যে | ১৭৫৪৪ ঘন্টা |
+| 2001-06-01T00:00:00.000Z | ১ বছর | ১ বছর এর মধ্যে | ১২৪০৮ ঘন্টা |
+| 2001-02-01T00:00:00.000Z | ১ বছর | ১ বছর এর মধ্যে | ৯৫২৮ ঘন্টা |
+| 2001-01-01T00:00:00.000Z | ১ বছর | ১ বছর এর মধ্যে | ৮৭৮৪ ঘন্টা |
+| 2000-06-01T00:00:00.000Z | ৫ মাস | ৫ মাস এর মধ্যে | ৩৬৪৮ ঘন্টা |
+| 2000-03-01T00:00:00.000Z | ২ মাস | ২ মাস এর মধ্যে | ১৪৪০ ঘন্টা |
+| 2000-02-01T00:00:00.000Z | ১ মাস | ১ মাস এর মধ্যে | ৭৪৪ ঘন্টা |
+| 2000-01-15T00:00:00.000Z | ১৪ দিন | ১৪ দিন এর মধ্যে | ৩৩৬ ঘন্টা |
+| 2000-01-02T00:00:00.000Z | ১ দিন | ১ দিন এর মধ্যে | ২৪ ঘন্টা |
+| 2000-01-01T06:00:00.000Z | ৬ ঘন্টা | ৬ ঘন্টা এর মধ্যে | ৬ ঘন্টা |
+| 2000-01-01T01:00:00.000Z | ১ ঘন্টা | ১ ঘন্টা এর মধ্যে | ১ ঘন্টা |
+| 2000-01-01T00:45:00.000Z | ৪৫ মিনিট | ৪৫ মিনিট এর মধ্যে | ১ ঘন্টা |
+| 2000-01-01T00:30:00.000Z | ৩০ মিনিট | ৩০ মিনিট এর মধ্যে | ১ ঘন্টা |
+| 2000-01-01T00:15:00.000Z | ১৫ মিনিট | ১৫ মিনিট এর মধ্যে | ০ ঘন্টা |
+| 2000-01-01T00:01:00.000Z | ১ মিনিট | ১ মিনিট এর মধ্যে | ০ ঘন্টা |
+| 2000-01-01T00:00:25.000Z | ২৫ সেকেন্ড | ২৫ সেকেন্ড এর মধ্যে | ০ ঘন্টা |
+| 2000-01-01T00:00:15.000Z | ১৫ সেকেন্ড | ১৫ সেকেন্ড এর মধ্যে | ০ ঘন্টা |
+| 2000-01-01T00:00:05.000Z | ৫ সেকেন্ড | ৫ সেকেন্ড এর মধ্যে | ০ ঘন্টা |
+| 2000-01-01T00:00:00.000Z | ০ সেকেন্ড | ০ সেকেন্ড আগে | ০ ঘন্টা |
+| 1999-12-31T23:59:55.000Z | ৫ সেকেন্ড | ৫ সেকেন্ড আগে | ০ ঘন্টা |
+| 1999-12-31T23:59:45.000Z | ১৫ সেকেন্ড | ১৫ সেকেন্ড আগে | ০ ঘন্টা |
+| 1999-12-31T23:59:35.000Z | ২৫ সেকেন্ড | ২৫ সেকেন্ড আগে | ০ ঘন্টা |
+| 1999-12-31T23:59:00.000Z | ১ মিনিট | ১ মিনিট আগে | ০ ঘন্টা |
+| 1999-12-31T23:45:00.000Z | ১৫ মিনিট | ১৫ মিনিট আগে | ০ ঘন্টা |
+| 1999-12-31T23:30:00.000Z | ৩০ মিনিট | ৩০ মিনিট আগে | ১ ঘন্টা |
+| 1999-12-31T23:15:00.000Z | ৪৫ মিনিট | ৪৫ মিনিট আগে | ১ ঘন্টা |
+| 1999-12-31T23:00:00.000Z | ১ ঘন্টা | ১ ঘন্টা আগে | ১ ঘন্টা |
+| 1999-12-31T18:00:00.000Z | ৬ ঘন্টা | ৬ ঘন্টা আগে | ৬ ঘন্টা |
+| 1999-12-30T00:00:00.000Z | ২ দিন | ২ দিন আগে | ৪৮ ঘন্টা |
+| 1999-12-15T00:00:00.000Z | ১৭ দিন | ১৭ দিন আগে | ৪০৮ ঘন্টা |
+| 1999-12-01T00:00:00.000Z | ১ মাস | ১ মাস আগে | ৭৪৪ ঘন্টা |
+| 1999-11-01T00:00:00.000Z | ২ মাস | ২ মাস আগে | ১৪৬৪ ঘন্টা |
+| 1999-06-01T00:00:00.000Z | ৭ মাস | ৭ মাস আগে | ৫১৩৬ ঘন্টা |
+| 1999-01-01T00:00:00.000Z | ১ বছর | ১ বছর আগে | ৮৭৬০ ঘন্টা |
+| 1998-12-01T00:00:00.000Z | ১ বছর | ১ বছর আগে | ৯৫০৪ ঘন্টা |
+| 1998-06-01T00:00:00.000Z | ২ বছর | ২ বছর আগে | ১৩৮৯৬ ঘন্টা |
+| 1998-01-01T00:00:00.000Z | ২ বছর | ২ বছর আগে | ১৭৫২০ ঘন্টা |
+| 1997-01-01T00:00:00.000Z | ৩ বছর | ৩ বছর আগে | ২৬২৮০ ঘন্টা |
+| 1996-01-01T00:00:00.000Z | ৪ বছর | ৪ বছর আগে | ৩৫০৬৪ ঘন্টা |
+| 1995-01-01T00:00:00.000Z | ৫ বছর | ৫ বছর আগে | ৪৩৮২৪ ঘন্টা |
+| 1994-01-01T00:00:00.000Z | ৬ বছর | ৬ বছর আগে | ৫২৫৮৪ ঘন্টা |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------------- |
+| 2000-01-10T00:00:00.000Z | 01/10/2000 |
+| 2000-01-05T00:00:00.000Z | বুধবার সময় 12:00 পূর্বাহ্ন |
+| 2000-01-02T00:00:00.000Z | আগামীকাল সময় 12:00 পূর্বাহ্ন |
+| 2000-01-01T00:00:00.000Z | আজ সময় 12:00 পূর্বাহ্ন |
+| 1999-12-31T00:00:00.000Z | গতকাল সময় 12:00 পূর্বাহ্ন |
+| 1999-12-27T00:00:00.000Z | গত সোমবার সময় 12:00 পূর্বাহ্ন |
+| 1999-12-21T00:00:00.000Z | 12/21/1999 |
diff --git a/date-fns/src/locale/ca/_lib/formatDistance/index.js b/date-fns/src/locale/ca/_lib/formatDistance/index.js
new file mode 100644
index 0000000..ebb8beb
--- /dev/null
+++ b/date-fns/src/locale/ca/_lib/formatDistance/index.js
@@ -0,0 +1,116 @@
+/**
+ * Davant de les xifres que es diuen amb vocal inicial, 1 i 11, s'apostrofen els articles el i la i la preposició de igual que si estiguessin escrits amb lletres.
+ * l'1 de juliol ('l'u')
+ * l'11 de novembre ('l'onze')
+ * l'11a clàusula del contracte ('l'onzena')
+ * la contractació d'11 jugadors ('d'onze')
+ * l'aval d'11.000 socis ('d'onze mil')
+ *
+ * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=apostrofaci%25F3+davant+xifres&action=Principal&method=detall_completa&numPagina=1&idHit=11236&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=11236&titol=apostrofaci%F3%20davant%20de%20xifres%20%2F%20apostrofaci%F3%20davant%20de%201%20i%2011&numeroResultat=1&clickLink=detall&tipusCerca=cerca.normes
+ */
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: "menys d'un segon",
+ eleven: "menys d'onze segons",
+ other: 'menys de {{count}} segons'
+ },
+
+ xSeconds: {
+ one: '1 segon',
+ other: '{{count}} segons'
+ },
+
+ halfAMinute: 'mig minut',
+
+ lessThanXMinutes: {
+ one: "menys d'un minut",
+ eleven: "menys d'onze minuts",
+ other: 'menys de {{count}} minuts'
+ },
+
+ xMinutes: {
+ one: '1 minut',
+ other: '{{count}} minuts'
+ },
+
+ aboutXHours: {
+ one: 'aproximadament una hora',
+ other: 'aproximadament {{count}} hores'
+ },
+
+ xHours: {
+ one: '1 hora',
+ other: '{{count}} hores'
+ },
+
+ xDays: {
+ one: '1 dia',
+ other: '{{count}} dies'
+ },
+
+ aboutXWeeks: {
+ one: 'aproximadament una setmana',
+ other: 'aproximadament {{count}} setmanes'
+ },
+
+ xWeeks: {
+ one: '1 setmana',
+ other: '{{count}} setmanes'
+ },
+
+ aboutXMonths: {
+ one: 'aproximadament un mes',
+ other: 'aproximadament {{count}} mesos'
+ },
+
+ xMonths: {
+ one: '1 mes',
+ other: '{{count}} mesos'
+ },
+
+ aboutXYears: {
+ one: 'aproximadament un any',
+ other: 'aproximadament {{count}} anys'
+ },
+
+ xYears: {
+ one: '1 any',
+ other: '{{count}} anys'
+ },
+
+ overXYears: {
+ one: "més d'un any",
+ eleven: "més d'onze anys",
+ other: 'més de {{count}} anys'
+ },
+
+ almostXYears: {
+ one: 'gairebé un any',
+ other: 'gairebé {{count}} anys'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else if (count === 11 && formatDistanceLocale[token].eleven) {
+ result = formatDistanceLocale[token].eleven
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'en ' + result
+ } else {
+ return 'fa ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ca/_lib/formatLong/index.js b/date-fns/src/locale/ca/_lib/formatLong/index.js
new file mode 100644
index 0000000..26d5834
--- /dev/null
+++ b/date-fns/src/locale/ca/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, d 'de' MMMM y",
+ long: "d 'de' MMMM y",
+ medium: 'd MMM y',
+ short: 'dd/MM/y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'a les' {{time}}",
+ long: "{{date}} 'a les' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ca/_lib/formatRelative/index.js b/date-fns/src/locale/ca/_lib/formatRelative/index.js
new file mode 100644
index 0000000..fbe5461
--- /dev/null
+++ b/date-fns/src/locale/ca/_lib/formatRelative/index.js
@@ -0,0 +1,24 @@
+var formatRelativeLocale = {
+ lastWeek: "'el' eeee 'passat a la' LT",
+ yesterday: "'ahir a la' p",
+ today: "'avui a la' p",
+ tomorrow: "'demà a la' p",
+ nextWeek: "eeee 'a la' p",
+ other: 'P'
+}
+
+var formatRelativeLocalePlural = {
+ lastWeek: "'el' eeee 'passat a les' p",
+ yesterday: "'ahir a les' p",
+ today: "'avui a les' p",
+ tomorrow: "'demà a les' p",
+ nextWeek: "eeee 'a les' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, date, _baseDate, _options) {
+ if (date.getUTCHours() !== 1) {
+ return formatRelativeLocalePlural[token]
+ }
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ca/_lib/localize/index.js b/date-fns/src/locale/ca/_lib/localize/index.js
new file mode 100644
index 0000000..7e39ff6
--- /dev/null
+++ b/date-fns/src/locale/ca/_lib/localize/index.js
@@ -0,0 +1,236 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+/**
+ * General information
+ * Reference: https://aplicacions.llengua.gencat.cat
+ * Reference: https://www.uoc.edu/portal/ca/servei-linguistic/convencions/abreviacions/simbols/simbols-habituals.html
+ */
+
+/**
+ * Abans de Crist: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=abans+de+crist&action=Principal&method=detall_completa&numPagina=1&idHit=6876&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=6876&titol=abans%20de%20Crist%20(abreviatura)%20/%20abans%20de%20Crist%20(sigla)&numeroResultat=1&clickLink=detall&tipusCerca=cerca.fitxes
+ * Desprest de Crist: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=despr%E9s+de+crist&action=Principal&method=detall_completa&numPagina=1&idHit=6879&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=6879&titol=despr%E9s%20de%20Crist%20(sigla)%20/%20despr%E9s%20de%20Crist%20(abreviatura)&numeroResultat=1&clickLink=detall&tipusCerca=cerca.fitxes
+ */
+var eraValues = {
+ narrow: ['aC', 'dC'],
+ abbreviated: ['a. de C.', 'd. de C.'],
+ wide: ['abans de Crist', 'després de Crist']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['T1', 'T2', 'T3', 'T4'],
+ wide: ['1r trimestre', '2n trimestre', '3r trimestre', '4t trimestre']
+}
+
+/**
+ * Dins d'un text convé fer servir la forma sencera dels mesos, ja que sempre és més clar el mot sencer que l'abreviatura, encara que aquesta sigui força coneguda.
+ * Cal reservar, doncs, les abreviatures per a les llistes o classificacions, els gràfics, les taules o quadres estadístics, els textos publicitaris, etc.
+ *
+ * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=abreviacions+mesos&action=Principal&method=detall_completa&numPagina=1&idHit=8402&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=8402&titol=abreviatures%20dels%20mesos%20de%20l%27any&numeroResultat=5&clickLink=detall&tipusCerca=cerca.fitxes
+ */
+var monthValues = {
+ narrow: [
+ 'GN',
+ 'FB',
+ 'MÇ',
+ 'AB',
+ 'MG',
+ 'JN',
+ 'JL',
+ 'AG',
+ 'ST',
+ 'OC',
+ 'NV',
+ 'DS'
+ ],
+ /**
+ * Les abreviatures dels mesos de l'any es formen seguint una de les normes generals de formació d'abreviatures.
+ * S'escriu la primera síl·laba i les consonants de la síl·laba següent anteriors a la primera vocal.
+ * Els mesos de març, maig i juny no s'abreugen perquè són paraules d'una sola síl·laba.
+ */
+ abbreviated: [
+ 'gen.',
+ 'febr.',
+ 'març',
+ 'abr.',
+ 'maig',
+ 'juny',
+ 'jul.',
+ 'ag.',
+ 'set.',
+ 'oct.',
+ 'nov.',
+ 'des.'
+ ],
+ wide: [
+ 'gener',
+ 'febrer',
+ 'març',
+ 'abril',
+ 'maig',
+ 'juny',
+ 'juliol',
+ 'agost',
+ 'setembre',
+ 'octubre',
+ 'novembre',
+ 'desembre'
+ ]
+}
+
+/**
+ * Les abreviatures dels dies de la setmana comencen totes amb la lletra d.
+ * Tot seguit porten la consonant següent a la i, excepte en el cas de dimarts, dimecres i diumenge, en què aquesta consonant és la m i, per tant, hi podria haver confusió.
+ * Per evitar-ho, s'ha substituït la m per una t (en el cas de dimarts), una c (en el cas de dimecres) i una g (en el cas de diumenge), respectivament.
+ *
+ * Seguint la norma general d'ús de les abreviatures, les dels dies de la setmana sempre porten punt final.
+ * Igualment, van amb la primera lletra en majúscula quan la paraula sencera també hi aniria.
+ * En canvi, van amb la primera lletra en minúscula quan la inicial de la paraula sencera també hi aniria.
+ *
+ * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=abreviatures+dies&action=Principal&method=detall_completa&numPagina=1&idHit=8387&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=8387&titol=abreviatures%20dels%20dies%20de%20la%20setmana&numeroResultat=1&clickLink=detall&tipusCerca=cerca.tot
+ */
+var dayValues = {
+ narrow: ['dg.', 'dl.', 'dt.', 'dm.', 'dj.', 'dv.', 'ds.'],
+ short: ['dg.', 'dl.', 'dt.', 'dm.', 'dj.', 'dv.', 'ds.'],
+ abbreviated: ['dg.', 'dl.', 'dt.', 'dm.', 'dj.', 'dv.', 'ds.'],
+ wide: [
+ 'diumenge',
+ 'dilluns',
+ 'dimarts',
+ 'dimecres',
+ 'dijous',
+ 'divendres',
+ 'dissabte'
+ ]
+}
+
+/**
+ * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?action=Principal&method=detall&input_cercar=parts+del+dia&numPagina=1&database=FITXES_PUB&idFont=12801&idHit=12801&tipusFont=Fitxes+de+l%27Optimot&numeroResultat=1&databases_avansada=&categories_avansada=&clickLink=detall&titol=Nom+de+les+parts+del+dia&tematica=&tipusCerca=cerca.fitxes
+ */
+var dayPeriodValues = {
+ narrow: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'mitjanit',
+ noon: 'migdia',
+ morning: 'matí',
+ afternoon: 'tarda',
+ evening: 'vespre',
+ night: 'nit'
+ },
+ abbreviated: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'mitjanit',
+ noon: 'migdia',
+ morning: 'matí',
+ afternoon: 'tarda',
+ evening: 'vespre',
+ night: 'nit'
+ },
+ wide: {
+ am: 'ante meridiem',
+ pm: 'post meridiem',
+ midnight: 'mitjanit',
+ noon: 'migdia',
+ morning: 'matí',
+ afternoon: 'tarda',
+ evening: 'vespre',
+ night: 'nit'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'de la mitjanit',
+ noon: 'del migdia',
+ morning: 'del matí',
+ afternoon: 'de la tarda',
+ evening: 'del vespre',
+ night: 'de la nit'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'de la mitjanit',
+ noon: 'del migdia',
+ morning: 'del matí',
+ afternoon: 'de la tarda',
+ evening: 'del vespre',
+ night: 'de la nit'
+ },
+ wide: {
+ am: 'ante meridiem',
+ pm: 'post meridiem',
+ midnight: 'de la mitjanit',
+ noon: 'del migdia',
+ morning: 'del matí',
+ afternoon: 'de la tarda',
+ evening: 'del vespre',
+ night: 'de la nit'
+ }
+}
+
+/**
+ * Quan van en singular, els nombres ordinals es representen, en forma d’abreviatura, amb la xifra seguida de l’última lletra del mot desplegat.
+ * És optatiu posar punt després de la lletra.
+ *
+ * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/pdf/abrevia.pdf#page=18
+ *
+ * @param {Number} dirtyNumber
+ * @param {Object} [_dirtyOptions]
+ */
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+ var rem100 = number % 100
+ if (rem100 > 20 || rem100 < 10) {
+ switch (rem100 % 10) {
+ case 1:
+ return number + 'r'
+ case 2:
+ return number + 'n'
+ case 3:
+ return number + 'r'
+ case 4:
+ return number + 't'
+ }
+ }
+ return number + 'è'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ca/_lib/match/index.js b/date-fns/src/locale/ca/_lib/match/index.js
new file mode 100644
index 0000000..0eee872
--- /dev/null
+++ b/date-fns/src/locale/ca/_lib/match/index.js
@@ -0,0 +1,163 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(è|r|n|r|t)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(aC|dC)/i,
+ abbreviated: /^(a. de C.|d. de C.)/i,
+ wide: /^(abans de Crist|despr[eé]s de Crist)/i
+}
+var parseEraPatterns = {
+ narrow: [/^aC/i, /^dC/i],
+ abbreviated: [/^(a. de C.)/i, /^(d. de C.)/i],
+ wide: [/^(abans de Crist)/i, /^(despr[eé]s de Crist)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^T[1234]/i,
+ wide: /^[1234](è|r|n|r|t)? trimestre/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(GN|FB|MÇ|AB|MG|JN|JL|AG|ST|OC|NV|DS)/i,
+ abbreviated: /^(gen.|febr.|març|abr.|maig|juny|jul.|ag.|set.|oct.|nov.|des.)/i,
+ wide: /^(gener|febrer|març|abril|maig|juny|juliol|agost|setembre|octubre|novembre|desembre)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^GN/i,
+ /^FB/i,
+ /^MÇ/i,
+ /^AB/i,
+ /^MG/i,
+ /^JN/i,
+ /^JL/i,
+ /^AG/i,
+ /^ST/i,
+ /^OC/i,
+ /^NV/i,
+ /^DS/i
+ ],
+ abbreviated: [
+ /^gen./i,
+ /^febr./i,
+ /^març/i,
+ /^abr./i,
+ /^maig/i,
+ /^juny/i,
+ /^jul./i,
+ /^ag./i,
+ /^set./i,
+ /^oct./i,
+ /^nov./i,
+ /^des./i
+ ],
+ wide: [
+ /^gener/i,
+ /^febrer/i,
+ /^març/i,
+ /^abril/i,
+ /^maig/i,
+ /^juny/i,
+ /^juliol/i,
+ /^agost/i,
+ /^setembre/i,
+ /^octubre/i,
+ /^novembre/i,
+ /^desembre/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(dg\.|dl\.|dt\.|dm\.|dj\.|dv\.|ds\.)/i,
+ short: /^(dg\.|dl\.|dt\.|dm\.|dj\.|dv\.|ds\.)/i,
+ abbreviated: /^(dg\.|dl\.|dt\.|dm\.|dj\.|dv\.|ds\.)/i,
+ wide: /^(diumenge|dilluns|dimarts|dimecres|dijous|divendres|dissabte)/i
+}
+var parseDayPatterns = {
+ narrow: [/^dg./i, /^dl./i, /^dt./i, /^dm./i, /^dj./i, /^dv./i, /^ds./i],
+ abbreviated: [/^dg./i, /^dl./i, /^dt./i, /^dm./i, /^dj./i, /^dv./i, /^ds./i],
+ wide: [
+ /^diumenge/i,
+ /^dilluns/i,
+ /^dimarts/i,
+ /^dimecres/i,
+ /^dijous/i,
+ /^divendres/i,
+ /^disssabte/i
+ ]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mn|md|(del|de la) (matí|tarda|vespre|nit))/i,
+ abbreviated: /^([ap]\.?\s?m\.?|mitjanit|migdia|(del|de la) (matí|tarda|vespre|nit))/i,
+ wide: /^(ante meridiem|post meridiem|mitjanit|migdia|(del|de la) (matí|tarda|vespre|nit))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mitjanit/i,
+ noon: /^migdia/i,
+ morning: /matí/i,
+ afternoon: /tarda/i,
+ evening: /vespre/i,
+ night: /nit/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ca/index.d.ts b/date-fns/src/locale/ca/index.d.ts
new file mode 100644
index 0000000..82742f7
--- /dev/null
+++ b/date-fns/src/locale/ca/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ca } from 'date-fns/locale'
+export default ca
diff --git a/date-fns/src/locale/ca/index.js b/date-fns/src/locale/ca/index.js
new file mode 100644
index 0000000..3498659
--- /dev/null
+++ b/date-fns/src/locale/ca/index.js
@@ -0,0 +1,31 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Catalan locale.
+ * @language Catalan
+ * @iso-639-2 cat
+ * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}
+ * @author Alex Vizcaino [@avizcaino]{@link https://github.com/avizcaino}
+ */
+var locale = {
+ code: 'ca',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
+
+// throw new Error('ca locale is currently unavailable. Please check the progress of converting this locale to v2.0.0 in this issue on Github: TBA')
diff --git a/date-fns/src/locale/ca/index.js.flow b/date-fns/src/locale/ca/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ca/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ca/snapshot.md b/date-fns/src/locale/ca/snapshot.md
new file mode 100644
index 0000000..9fa73c8
--- /dev/null
+++ b/date-fns/src/locale/ca/snapshot.md
@@ -0,0 +1,304 @@
+# Catalan (ca) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987è | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5è | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987è | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4t | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1r | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2n | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1r trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2n trimestre | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1r | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2n | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1r trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2n trimestre | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2n | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7è | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | febr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | febrer | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juliol | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | FB | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | JL | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2n | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7è | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | febr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | febrer | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juliol | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | FB | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | JL | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1r | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48è | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1r | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48è | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11è | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28è | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42n | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365è | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | dilluns | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | divendres | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | dl. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | dv. | Invalid Date |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1r | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5è | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | dilluns | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | divendres | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | dl. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | dv. | Invalid Date |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1r | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5è | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | dilluns | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | divendres | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | dl. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | dv. | Invalid Date |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1r | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5è | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | dilluns | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | divendres | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | dl. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dv. | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | dl. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | dv. | Invalid Date |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ante meridiem | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | post meridiem | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | post meridiem | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ante meridiem | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | am | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | am | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ante meridiem | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | post meridiem | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | post meridiem | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ante meridiem | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | am | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | am | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | del matí | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarda | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | del vespre | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la nit | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | del matí | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarda | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | del vespre | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la nit | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | del matí | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarda | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | del vespre | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la nit | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | del matí | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarda | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | del vespre | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la nit | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | del matí | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarda | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | del vespre | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la nit | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11è | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11è | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11è | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23r | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11è | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11è | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11è | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23r | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1r | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55è | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1r | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55è | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 febr. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 maig 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 de febrer 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 de maig 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | dimecres, 11 de febrer 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | diumenge, 29 de maig 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 febr. 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 maig 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 de febrer 1987 a les 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 de maig 1453 a les 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | dimecres, 11 de febrer 1987 a les 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | diumenge, 29 de maig 1453 a les 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------------- | ----------------------- | -------------------------- |
+| 2006-01-01T00:00:00.000Z | aproximadament 6 anys | aproximadament 6 anys | en aproximadament 6 anys |
+| 2005-01-01T00:00:00.000Z | aproximadament 5 anys | aproximadament 5 anys | en aproximadament 5 anys |
+| 2004-01-01T00:00:00.000Z | aproximadament 4 anys | aproximadament 4 anys | en aproximadament 4 anys |
+| 2003-01-01T00:00:00.000Z | aproximadament 3 anys | aproximadament 3 anys | en aproximadament 3 anys |
+| 2002-01-01T00:00:00.000Z | aproximadament 2 anys | aproximadament 2 anys | en aproximadament 2 anys |
+| 2001-06-01T00:00:00.000Z | més d'un any | més d'un any | en més d'un any |
+| 2001-02-01T00:00:00.000Z | aproximadament un any | aproximadament un any | en aproximadament un any |
+| 2001-01-01T00:00:00.000Z | aproximadament un any | aproximadament un any | en aproximadament un any |
+| 2000-06-01T00:00:00.000Z | 5 mesos | 5 mesos | en 5 mesos |
+| 2000-03-01T00:00:00.000Z | 2 mesos | 2 mesos | en 2 mesos |
+| 2000-02-01T00:00:00.000Z | aproximadament un mes | aproximadament un mes | en aproximadament un mes |
+| 2000-01-15T00:00:00.000Z | 14 dies | 14 dies | en 14 dies |
+| 2000-01-02T00:00:00.000Z | 1 dia | 1 dia | en 1 dia |
+| 2000-01-01T06:00:00.000Z | aproximadament 6 hores | aproximadament 6 hores | en aproximadament 6 hores |
+| 2000-01-01T01:00:00.000Z | aproximadament una hora | aproximadament una hora | en aproximadament una hora |
+| 2000-01-01T00:45:00.000Z | aproximadament una hora | aproximadament una hora | en aproximadament una hora |
+| 2000-01-01T00:30:00.000Z | 30 minuts | 30 minuts | en 30 minuts |
+| 2000-01-01T00:15:00.000Z | 15 minuts | 15 minuts | en 15 minuts |
+| 2000-01-01T00:01:00.000Z | 1 minut | 1 minut | en 1 minut |
+| 2000-01-01T00:00:25.000Z | menys d'un minut | mig minut | en menys d'un minut |
+| 2000-01-01T00:00:15.000Z | menys d'un minut | menys de 20 segons | en menys d'un minut |
+| 2000-01-01T00:00:05.000Z | menys d'un minut | menys de 10 segons | en menys d'un minut |
+| 2000-01-01T00:00:00.000Z | menys d'un minut | menys de 5 segons | fa menys d'un minut |
+| 1999-12-31T23:59:55.000Z | menys d'un minut | menys de 10 segons | fa menys d'un minut |
+| 1999-12-31T23:59:45.000Z | menys d'un minut | menys de 20 segons | fa menys d'un minut |
+| 1999-12-31T23:59:35.000Z | menys d'un minut | mig minut | fa menys d'un minut |
+| 1999-12-31T23:59:00.000Z | 1 minut | 1 minut | fa 1 minut |
+| 1999-12-31T23:45:00.000Z | 15 minuts | 15 minuts | fa 15 minuts |
+| 1999-12-31T23:30:00.000Z | 30 minuts | 30 minuts | fa 30 minuts |
+| 1999-12-31T23:15:00.000Z | aproximadament una hora | aproximadament una hora | fa aproximadament una hora |
+| 1999-12-31T23:00:00.000Z | aproximadament una hora | aproximadament una hora | fa aproximadament una hora |
+| 1999-12-31T18:00:00.000Z | aproximadament 6 hores | aproximadament 6 hores | fa aproximadament 6 hores |
+| 1999-12-30T00:00:00.000Z | 2 dies | 2 dies | fa 2 dies |
+| 1999-12-15T00:00:00.000Z | 17 dies | 17 dies | fa 17 dies |
+| 1999-12-01T00:00:00.000Z | aproximadament un mes | aproximadament un mes | fa aproximadament un mes |
+| 1999-11-01T00:00:00.000Z | 2 mesos | 2 mesos | fa 2 mesos |
+| 1999-06-01T00:00:00.000Z | 7 mesos | 7 mesos | fa 7 mesos |
+| 1999-01-01T00:00:00.000Z | aproximadament un any | aproximadament un any | fa aproximadament un any |
+| 1998-12-01T00:00:00.000Z | aproximadament un any | aproximadament un any | fa aproximadament un any |
+| 1998-06-01T00:00:00.000Z | més d'un any | més d'un any | fa més d'un any |
+| 1998-01-01T00:00:00.000Z | aproximadament 2 anys | aproximadament 2 anys | fa aproximadament 2 anys |
+| 1997-01-01T00:00:00.000Z | aproximadament 3 anys | aproximadament 3 anys | fa aproximadament 3 anys |
+| 1996-01-01T00:00:00.000Z | aproximadament 4 anys | aproximadament 4 anys | fa aproximadament 4 anys |
+| 1995-01-01T00:00:00.000Z | aproximadament 5 anys | aproximadament 5 anys | fa aproximadament 5 anys |
+| 1994-01-01T00:00:00.000Z | aproximadament 6 anys | aproximadament 6 anys | fa aproximadament 6 anys |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 anys | en 6 anys | 52608 hores |
+| 2005-01-01T00:00:00.000Z | 5 anys | en 5 anys | 43848 hores |
+| 2004-01-01T00:00:00.000Z | 4 anys | en 4 anys | 35064 hores |
+| 2003-01-01T00:00:00.000Z | 3 anys | en 3 anys | 26304 hores |
+| 2002-01-01T00:00:00.000Z | 2 anys | en 2 anys | 17544 hores |
+| 2001-06-01T00:00:00.000Z | 1 any | en 1 any | 12408 hores |
+| 2001-02-01T00:00:00.000Z | 1 any | en 1 any | 9528 hores |
+| 2001-01-01T00:00:00.000Z | 1 any | en 1 any | 8784 hores |
+| 2000-06-01T00:00:00.000Z | 5 mesos | en 5 mesos | 3648 hores |
+| 2000-03-01T00:00:00.000Z | 2 mesos | en 2 mesos | 1440 hores |
+| 2000-02-01T00:00:00.000Z | 1 mes | en 1 mes | 744 hores |
+| 2000-01-15T00:00:00.000Z | 14 dies | en 14 dies | 336 hores |
+| 2000-01-02T00:00:00.000Z | 1 dia | en 1 dia | 24 hores |
+| 2000-01-01T06:00:00.000Z | 6 hores | en 6 hores | 6 hores |
+| 2000-01-01T01:00:00.000Z | 1 hora | en 1 hora | 1 hora |
+| 2000-01-01T00:45:00.000Z | 45 minuts | en 45 minuts | 1 hora |
+| 2000-01-01T00:30:00.000Z | 30 minuts | en 30 minuts | 1 hora |
+| 2000-01-01T00:15:00.000Z | 15 minuts | en 15 minuts | 0 hores |
+| 2000-01-01T00:01:00.000Z | 1 minut | en 1 minut | 0 hores |
+| 2000-01-01T00:00:25.000Z | 25 segons | en 25 segons | 0 hores |
+| 2000-01-01T00:00:15.000Z | 15 segons | en 15 segons | 0 hores |
+| 2000-01-01T00:00:05.000Z | 5 segons | en 5 segons | 0 hores |
+| 2000-01-01T00:00:00.000Z | 0 segons | fa 0 segons | 0 hores |
+| 1999-12-31T23:59:55.000Z | 5 segons | fa 5 segons | 0 hores |
+| 1999-12-31T23:59:45.000Z | 15 segons | fa 15 segons | 0 hores |
+| 1999-12-31T23:59:35.000Z | 25 segons | fa 25 segons | 0 hores |
+| 1999-12-31T23:59:00.000Z | 1 minut | fa 1 minut | 0 hores |
+| 1999-12-31T23:45:00.000Z | 15 minuts | fa 15 minuts | 0 hores |
+| 1999-12-31T23:30:00.000Z | 30 minuts | fa 30 minuts | 1 hora |
+| 1999-12-31T23:15:00.000Z | 45 minuts | fa 45 minuts | 1 hora |
+| 1999-12-31T23:00:00.000Z | 1 hora | fa 1 hora | 1 hora |
+| 1999-12-31T18:00:00.000Z | 6 hores | fa 6 hores | 6 hores |
+| 1999-12-30T00:00:00.000Z | 2 dies | fa 2 dies | 48 hores |
+| 1999-12-15T00:00:00.000Z | 17 dies | fa 17 dies | 408 hores |
+| 1999-12-01T00:00:00.000Z | 1 mes | fa 1 mes | 744 hores |
+| 1999-11-01T00:00:00.000Z | 2 mesos | fa 2 mesos | 1464 hores |
+| 1999-06-01T00:00:00.000Z | 7 mesos | fa 7 mesos | 5136 hores |
+| 1999-01-01T00:00:00.000Z | 1 any | fa 1 any | 8760 hores |
+| 1998-12-01T00:00:00.000Z | 1 any | fa 1 any | 9504 hores |
+| 1998-06-01T00:00:00.000Z | 2 anys | fa 2 anys | 13896 hores |
+| 1998-01-01T00:00:00.000Z | 2 anys | fa 2 anys | 17520 hores |
+| 1997-01-01T00:00:00.000Z | 3 anys | fa 3 anys | 26280 hores |
+| 1996-01-01T00:00:00.000Z | 4 anys | fa 4 anys | 35064 hores |
+| 1995-01-01T00:00:00.000Z | 5 anys | fa 5 anys | 43824 hores |
+| 1994-01-01T00:00:00.000Z | 6 anys | fa 6 anys | 52584 hores |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | dimecres a les 00:00 |
+| 2000-01-02T00:00:00.000Z | demà a les 00:00 |
+| 2000-01-01T00:00:00.000Z | avui a les 00:00 |
+| 1999-12-31T00:00:00.000Z | ahir a les 00:00 |
+| 1999-12-27T00:00:00.000Z | el dilluns passat a les 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/cs/_lib/formatDistance/index.js b/date-fns/src/locale/cs/_lib/formatDistance/index.js
new file mode 100644
index 0000000..16f29a1
--- /dev/null
+++ b/date-fns/src/locale/cs/_lib/formatDistance/index.js
@@ -0,0 +1,318 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: {
+ regular: 'méně než vteřina',
+ past: 'před méně než vteřinou',
+ future: 'za méně než vteřinu'
+ },
+ few: {
+ regular: 'méně než {{count}} vteřiny',
+ past: 'před méně než {{count}} vteřinami',
+ future: 'za méně než {{count}} vteřiny'
+ },
+ many: {
+ regular: 'méně než {{count}} vteřin',
+ past: 'před méně než {{count}} vteřinami',
+ future: 'za méně než {{count}} vteřin'
+ }
+ },
+
+ xSeconds: {
+ one: {
+ regular: 'vteřina',
+ past: 'před vteřinou',
+ future: 'za vteřinu'
+ },
+ few: {
+ regular: '{{count}} vteřiny',
+ past: 'před {{count}} vteřinami',
+ future: 'za {{count}} vteřiny'
+ },
+ many: {
+ regular: '{{count}} vteřin',
+ past: 'před {{count}} vteřinami',
+ future: 'za {{count}} vteřin'
+ }
+ },
+
+ halfAMinute: {
+ other: {
+ regular: 'půl minuty',
+ past: 'před půl minutou',
+ future: 'za půl minuty'
+ }
+ },
+
+ lessThanXMinutes: {
+ one: {
+ regular: 'méně než minuta',
+ past: 'před méně než minutou',
+ future: 'za méně než minutu'
+ },
+ few: {
+ regular: 'méně než {{count}} minuty',
+ past: 'před méně než {{count}} minutami',
+ future: 'za méně než {{count}} minuty'
+ },
+ many: {
+ regular: 'méně než {{count}} minut',
+ past: 'před méně než {{count}} minutami',
+ future: 'za méně než {{count}} minut'
+ }
+ },
+
+ xMinutes: {
+ one: {
+ regular: 'minuta',
+ past: 'před minutou',
+ future: 'za minutu'
+ },
+ few: {
+ regular: '{{count}} minuty',
+ past: 'před {{count}} minutami',
+ future: 'za {{count}} minuty'
+ },
+ many: {
+ regular: '{{count}} minut',
+ past: 'před {{count}} minutami',
+ future: 'za {{count}} minut'
+ }
+ },
+
+ aboutXHours: {
+ one: {
+ regular: 'přibližně hodina',
+ past: 'přibližně před hodinou',
+ future: 'přibližně za hodinu'
+ },
+ few: {
+ regular: 'přibližně {{count}} hodiny',
+ past: 'přibližně před {{count}} hodinami',
+ future: 'přibližně za {{count}} hodiny'
+ },
+ many: {
+ regular: 'přibližně {{count}} hodin',
+ past: 'přibližně před {{count}} hodinami',
+ future: 'přibližně za {{count}} hodin'
+ }
+ },
+
+ xHours: {
+ one: {
+ regular: 'hodina',
+ past: 'před hodinou',
+ future: 'za hodinu'
+ },
+ few: {
+ regular: '{{count}} hodiny',
+ past: 'před {{count}} hodinami',
+ future: 'za {{count}} hodiny'
+ },
+ many: {
+ regular: '{{count}} hodin',
+ past: 'před {{count}} hodinami',
+ future: 'za {{count}} hodin'
+ }
+ },
+
+ xDays: {
+ one: {
+ regular: 'den',
+ past: 'před dnem',
+ future: 'za den'
+ },
+ few: {
+ regular: '{{count}} dny',
+ past: 'před {{count}} dny',
+ future: 'za {{count}} dny'
+ },
+ many: {
+ regular: '{{count}} dní',
+ past: 'před {{count}} dny',
+ future: 'za {{count}} dní'
+ }
+ },
+
+ aboutXWeeks: {
+ one: {
+ regular: 'přibližně týden',
+ past: 'přibližně před týdnem',
+ future: 'přibližně za týden'
+ },
+
+ few: {
+ regular: 'přibližně {{count}} týdny',
+ past: 'přibližně před {{count}} týdny',
+ future: 'přibližně za {{count}} týdny'
+ },
+
+ many: {
+ regular: 'přibližně {{count}} týdnů',
+ past: 'přibližně před {{count}} týdny',
+ future: 'přibližně za {{count}} týdnů'
+ }
+ },
+
+ xWeeks: {
+ one: {
+ regular: 'týden',
+ past: 'před týdnem',
+ future: 'za týden'
+ },
+
+ few: {
+ regular: '{{count}} týdny',
+ past: 'před {{count}} týdny',
+ future: 'za {{count}} týdny'
+ },
+
+ many: {
+ regular: '{{count}} týdnů',
+ past: 'před {{count}} týdny',
+ future: 'za {{count}} týdnů'
+ }
+ },
+
+ aboutXMonths: {
+ one: {
+ regular: 'přibližně měsíc',
+ past: 'přibližně před měsícem',
+ future: 'přibližně za měsíc'
+ },
+
+ few: {
+ regular: 'přibližně {{count}} měsíce',
+ past: 'přibližně před {{count}} měsíci',
+ future: 'přibližně za {{count}} měsíce'
+ },
+
+ many: {
+ regular: 'přibližně {{count}} měsíců',
+ past: 'přibližně před {{count}} měsíci',
+ future: 'přibližně za {{count}} měsíců'
+ }
+ },
+
+ xMonths: {
+ one: {
+ regular: 'měsíc',
+ past: 'před měsícem',
+ future: 'za měsíc'
+ },
+
+ few: {
+ regular: '{{count}} měsíce',
+ past: 'před {{count}} měsíci',
+ future: 'za {{count}} měsíce'
+ },
+
+ many: {
+ regular: '{{count}} měsíců',
+ past: 'před {{count}} měsíci',
+ future: 'za {{count}} měsíců'
+ }
+ },
+
+ aboutXYears: {
+ one: {
+ regular: 'přibližně rok',
+ past: 'přibližně před rokem',
+ future: 'přibližně za rok'
+ },
+ few: {
+ regular: 'přibližně {{count}} roky',
+ past: 'přibližně před {{count}} roky',
+ future: 'přibližně za {{count}} roky'
+ },
+ many: {
+ regular: 'přibližně {{count}} roků',
+ past: 'přibližně před {{count}} roky',
+ future: 'přibližně za {{count}} roků'
+ }
+ },
+
+ xYears: {
+ one: {
+ regular: 'rok',
+ past: 'před rokem',
+ future: 'za rok'
+ },
+ few: {
+ regular: '{{count}} roky',
+ past: 'před {{count}} roky',
+ future: 'za {{count}} roky'
+ },
+ many: {
+ regular: '{{count}} roků',
+ past: 'před {{count}} roky',
+ future: 'za {{count}} roků'
+ }
+ },
+
+ overXYears: {
+ one: {
+ regular: 'více než rok',
+ past: 'před více než rokem',
+ future: 'za více než rok'
+ },
+ few: {
+ regular: 'více než {{count}} roky',
+ past: 'před více než {{count}} roky',
+ future: 'za více než {{count}} roky'
+ },
+ many: {
+ regular: 'více než {{count}} roků',
+ past: 'před více než {{count}} roky',
+ future: 'za více než {{count}} roků'
+ }
+ },
+
+ almostXYears: {
+ one: {
+ regular: 'skoro rok',
+ past: 'skoro před rokem',
+ future: 'skoro za rok'
+ },
+ few: {
+ regular: 'skoro {{count}} roky',
+ past: 'skoro před {{count}} roky',
+ future: 'skoro za {{count}} roky'
+ },
+ many: {
+ regular: 'skoro {{count}} roků',
+ past: 'skoro před {{count}} roky',
+ future: 'skoro za {{count}} roků'
+ }
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ var scheme = formatDistanceLocale[token]
+
+ // cs pluralization
+ var pluralToken
+ if (typeof scheme.other === 'object') {
+ pluralToken = 'other'
+ } else if (count === 1) {
+ pluralToken = 'one'
+ } else if ((count > 1 && count < 5) || count === 0) {
+ pluralToken = 'few'
+ } else {
+ pluralToken = 'many'
+ }
+
+ // times
+ var suffixExist = options.addSuffix === true
+ var comparison = options.comparison
+ var timeToken
+ if (suffixExist && comparison === -1) {
+ timeToken = 'past'
+ } else if (suffixExist && comparison === 1) {
+ timeToken = 'future'
+ } else {
+ timeToken = 'regular'
+ }
+
+ return scheme[pluralToken][timeToken].replace('{{count}}', count)
+}
diff --git a/date-fns/src/locale/cs/_lib/formatLong/index.js b/date-fns/src/locale/cs/_lib/formatLong/index.js
new file mode 100644
index 0000000..c592d88
--- /dev/null
+++ b/date-fns/src/locale/cs/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d. MMMM yyyy',
+ long: 'd. MMMM yyyy',
+ medium: 'd. M. yyyy',
+ short: 'dd.MM.yyyy'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'v' {{time}}",
+ long: "{{date}} 'v' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/cs/_lib/formatRelative/index.js b/date-fns/src/locale/cs/_lib/formatRelative/index.js
new file mode 100644
index 0000000..34f80a8
--- /dev/null
+++ b/date-fns/src/locale/cs/_lib/formatRelative/index.js
@@ -0,0 +1,31 @@
+var accusativeWeekdays = [
+ 'neděli',
+ 'pondělí',
+ 'úterý',
+ 'středu',
+ 'čtvrtek',
+ 'pátek',
+ 'sobotu'
+]
+
+var formatRelativeLocale = {
+ lastWeek: "'poslední' eeee 've' p",
+ yesterday: "'včera v' p",
+ today: "'dnes v' p",
+ tomorrow: "'zítra v' p",
+ nextWeek: function(date, _baseDate, _options) {
+ var day = date.getUTCDay()
+ return "'v " + accusativeWeekdays[day] + " o' p"
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/cs/_lib/localize/index.js b/date-fns/src/locale/cs/_lib/localize/index.js
new file mode 100644
index 0000000..3bd8ee6
--- /dev/null
+++ b/date-fns/src/locale/cs/_lib/localize/index.js
@@ -0,0 +1,192 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['př. n. l.', 'n. l.'],
+ abbreviated: ['př. n. l.', 'n. l.'],
+ wide: ['před naším letopočtem', 'našeho letopočtu']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1. čtvrtletí', '2. čtvrtletí', '3. čtvrtletí', '4. čtvrtletí'],
+ wide: ['1. čtvrtletí', '2. čtvrtletí', '3. čtvrtletí', '4. čtvrtletí']
+}
+
+var monthValues = {
+ narrow: ['L', 'Ú', 'B', 'D', 'K', 'Č', 'Č', 'S', 'Z', 'Ř', 'L', 'P'],
+ abbreviated: [
+ 'led',
+ 'úno',
+ 'bře',
+ 'dub',
+ 'kvě',
+ 'čvn',
+ 'čvc',
+ 'srp',
+ 'zář',
+ 'říj',
+ 'lis',
+ 'pro'
+ ],
+ wide: [
+ 'leden',
+ 'únor',
+ 'březen',
+ 'duben',
+ 'květen',
+ 'červen',
+ 'červenec',
+ 'srpen',
+ 'září',
+ 'říjen',
+ 'listopad',
+ 'prosinec'
+ ]
+}
+var formattingMonthValues = {
+ narrow: ['L', 'Ú', 'B', 'D', 'K', 'Č', 'Č', 'S', 'Z', 'Ř', 'L', 'P'],
+ abbreviated: [
+ 'led',
+ 'úno',
+ 'bře',
+ 'dub',
+ 'kvě',
+ 'čvn',
+ 'čvc',
+ 'srp',
+ 'zář',
+ 'říj',
+ 'lis',
+ 'pro'
+ ],
+ wide: [
+ 'ledna',
+ 'února',
+ 'března',
+ 'dubna',
+ 'května',
+ 'června',
+ 'července',
+ 'srpna',
+ 'září',
+ 'října',
+ 'listopadu',
+ 'prosince'
+ ]
+}
+
+var dayValues = {
+ narrow: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
+ short: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
+ abbreviated: ['ned', 'pon', 'úte', 'stř', 'čtv', 'pát', 'sob'],
+ wide: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'dop.',
+ pm: 'odp.',
+ midnight: 'půlnoc',
+ noon: 'poledne',
+ morning: 'ráno',
+ afternoon: 'odpoledne',
+ evening: 'večer',
+ night: 'noc'
+ },
+ abbreviated: {
+ am: 'dop.',
+ pm: 'odp.',
+ midnight: 'půlnoc',
+ noon: 'poledne',
+ morning: 'ráno',
+ afternoon: 'odpoledne',
+ evening: 'večer',
+ night: 'noc'
+ },
+ wide: {
+ am: 'dopoledne',
+ pm: 'odpoledne',
+ midnight: 'půlnoc',
+ noon: 'poledne',
+ morning: 'ráno',
+ afternoon: 'odpoledne',
+ evening: 'večer',
+ night: 'noc'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'dop.',
+ pm: 'odp.',
+ midnight: 'půlnoc',
+ noon: 'poledne',
+ morning: 'ráno',
+ afternoon: 'odpoledne',
+ evening: 'večer',
+ night: 'noc'
+ },
+ abbreviated: {
+ am: 'dop.',
+ pm: 'odp.',
+ midnight: 'půlnoc',
+ noon: 'poledne',
+ morning: 'ráno',
+ afternoon: 'odpoledne',
+ evening: 'večer',
+ night: 'noc'
+ },
+ wide: {
+ am: 'dopoledne',
+ pm: 'odpoledne',
+ midnight: 'půlnoc',
+ noon: 'poledne',
+ morning: 'ráno',
+ afternoon: 'odpoledne',
+ evening: 'večer',
+ night: 'noc'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/cs/_lib/match/index.js b/date-fns/src/locale/cs/_lib/match/index.js
new file mode 100644
index 0000000..aaaaaa4
--- /dev/null
+++ b/date-fns/src/locale/cs/_lib/match/index.js
@@ -0,0 +1,139 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\.?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(p[řr]ed Kr\.|pred n\. l\.|po Kr\.|n\. l\.)/i,
+ abbreviated: /^(pe[řr]ed Kr\.|pe[řr]ed n\. l\.|po Kr\.|n\. l\.)/i,
+ wide: /^(p[řr]ed Kristem|pred na[šs][íi]m letopo[čc]tem|po Kristu|na[šs]eho letopo[čc]tu)/i
+}
+
+var parseEraPatterns = {
+ any: [/^p[řr]/i, /^(po|n)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234]\. [čc]tvrtlet[íi]/i,
+ wide: /^[1234]\. [čc]tvrtlet[íi]/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[lúubdkčcszřrlp]/i,
+ abbreviated: /^(led|[úu]no|b[řr]e|dub|kv[ěe]|[čc]vn|[čc]vc|srp|z[áa][řr]|[řr][íi]j|lis|pro)/i,
+ wide: /^(leden|ledna|[úu]nora?|b[řr]ezen|b[řr]ezna|duben|dubna|kv[ěe]ten|kv[ěe]tna|[čc]erven(ec|ce)?|[čc]ervna|srpen|srpna|z[áa][řr][íi]|[řr][íi]jen|[řr][íi]jna|listopad(a|u)?|prosinec|prosince)/i
+}
+
+var parseMonthPatterns = {
+ narrow: [
+ /^l/i,
+ /^[úu]/i,
+ /^b/i,
+ /^d/i,
+ /^k/i,
+ /^[čc]/i,
+ /^[čc]/i,
+ /^s/i,
+ /^z/i,
+ /^[řr]/i,
+ /^l/i,
+ /^p/i
+ ],
+ any: [
+ /^led/i,
+ /^[úu]n/i,
+ /^b[řr]e/i,
+ /^dub/i,
+ /^kv[ěe]/i,
+ /^[čc]vn|[čc]erven(?!\w)|[čc]ervna/i,
+ /^[čc]vc|[čc]erven(ec|ce)/i,
+ /^srp/i,
+ /^z[áa][řr]/i,
+ /^[řr][íi]j/i,
+ /^lis/i,
+ /^pro/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[npuúsčps]/i,
+ short: /^(ne|po|[úu]t|st|[čc]t|p[áa]|so)/i,
+ abbreviated: /^(ne|po|[úu]t|st|[čc]t|p[áa]|so)/i,
+ wide: /^(ned[ěe]le|pond[ěe]l[íi]|[úu]ter[ýy]|st[řr]eda|[čc]tvrtek|p[áa]tek|sobota)/i
+}
+
+var parseDayPatterns = {
+ narrow: [/^n/i, /^p/i, /^[úu]/i, /^s/i, /^[čc]/i, /^p/i, /^s/i],
+ any: [/^ne/i, /^po/i, /^ut/i, /^st/i, /^[čc]t/i, /^p/i, /^so/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^dopoledne|dop\.?|odpoledne|odp\.?|půlnoc|poledne|r[áa]no|odpoledne|ve[čc]er|(v )?noci/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^dop/i,
+ pm: /^odp/i,
+ midnight: /^p[ůu]lnoc/i,
+ noon: /^poledne/i,
+ morning: /r[áa]no/i,
+ afternoon: /odpoledne/i,
+ evening: /ve[čc]er/i,
+ night: /noc/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/cs/index.d.ts b/date-fns/src/locale/cs/index.d.ts
new file mode 100644
index 0000000..a17dd22
--- /dev/null
+++ b/date-fns/src/locale/cs/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { cs } from 'date-fns/locale'
+export default cs
diff --git a/date-fns/src/locale/cs/index.js b/date-fns/src/locale/cs/index.js
new file mode 100644
index 0000000..b878ce9
--- /dev/null
+++ b/date-fns/src/locale/cs/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Czech locale.
+ * @language Czech
+ * @iso-639-2 ces
+ * @author David Rus [@davidrus]{@link https://github.com/davidrus}
+ * @author Pavel Hrách [@SilenY]{@link https://github.com/SilenY}
+ * @author Jozef Bíroš [@JozefBiros]{@link https://github.com/JozefBiros}
+ */
+var locale = {
+ code: 'cs',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/cs/index.js.flow b/date-fns/src/locale/cs/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/cs/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/cs/snapshot.md b/date-fns/src/locale/cs/snapshot.md
new file mode 100644
index 0000000..9fa9d6e
--- /dev/null
+++ b/date-fns/src/locale/cs/snapshot.md
@@ -0,0 +1,304 @@
+# Czech (cs) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1. čtvrtletí | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. čtvrtletí | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. čtvrtletí | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. čtvrtletí | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1. čtvrtletí | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. čtvrtletí | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. čtvrtletí | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. čtvrtletí | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | úno | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | čvc | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | února | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | července | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | Ú | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Č | 2019-06-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | úno | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | čvc | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | únor | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | červenec | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | Ú | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Č | 2019-06-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pát | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pát | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pát | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | pondělí | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pátek | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | po | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pá | Invalid Date |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pá | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pát | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | pondělí | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pátek | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | po | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pá | Invalid Date |
+| | iiiiii | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pá | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pát | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | pondělí | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pátek | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | po | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pá | Invalid Date |
+| | eeeeee | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pá | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pát | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | pondělí | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pátek | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | po | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pá | Invalid Date |
+| | cccccc | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pá | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | dopoledne | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odpoledne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odpoledne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dopoledne | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | dopoledne | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odpoledne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odpoledne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dopoledne | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | odp. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odpoledne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | večer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noc | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odpoledne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | večer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noc | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odpoledne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | večer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noc | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odpoledne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | večer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noc | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | odpoledne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | večer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noc | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. 2. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 5. 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. února 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. května 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | středa, 11. února 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | neděle, 29. května 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. 2. 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 5. 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. února 1987 v 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. května 1453 v 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | středa, 11. února 1987 v 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | neděle, 29. května 1453 v 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------- | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | přibližně 6 roků | přibližně 6 roků | přibližně za 6 roků |
+| 2005-01-01T00:00:00.000Z | přibližně 5 roků | přibližně 5 roků | přibližně za 5 roků |
+| 2004-01-01T00:00:00.000Z | přibližně 4 roky | přibližně 4 roky | přibližně za 4 roky |
+| 2003-01-01T00:00:00.000Z | přibližně 3 roky | přibližně 3 roky | přibližně za 3 roky |
+| 2002-01-01T00:00:00.000Z | přibližně 2 roky | přibližně 2 roky | přibližně za 2 roky |
+| 2001-06-01T00:00:00.000Z | více než rok | více než rok | za více než rok |
+| 2001-02-01T00:00:00.000Z | přibližně rok | přibližně rok | přibližně za rok |
+| 2001-01-01T00:00:00.000Z | přibližně rok | přibližně rok | přibližně za rok |
+| 2000-06-01T00:00:00.000Z | 5 měsíců | 5 měsíců | za 5 měsíců |
+| 2000-03-01T00:00:00.000Z | 2 měsíce | 2 měsíce | za 2 měsíce |
+| 2000-02-01T00:00:00.000Z | přibližně měsíc | přibližně měsíc | přibližně za měsíc |
+| 2000-01-15T00:00:00.000Z | 14 dní | 14 dní | za 14 dní |
+| 2000-01-02T00:00:00.000Z | den | den | za den |
+| 2000-01-01T06:00:00.000Z | přibližně 6 hodin | přibližně 6 hodin | přibližně za 6 hodin |
+| 2000-01-01T01:00:00.000Z | přibližně hodina | přibližně hodina | přibližně za hodinu |
+| 2000-01-01T00:45:00.000Z | přibližně hodina | přibližně hodina | přibližně za hodinu |
+| 2000-01-01T00:30:00.000Z | 30 minut | 30 minut | za 30 minut |
+| 2000-01-01T00:15:00.000Z | 15 minut | 15 minut | za 15 minut |
+| 2000-01-01T00:01:00.000Z | minuta | minuta | za minutu |
+| 2000-01-01T00:00:25.000Z | méně než minuta | půl minuty | za méně než minutu |
+| 2000-01-01T00:00:15.000Z | méně než minuta | méně než 20 vteřin | za méně než minutu |
+| 2000-01-01T00:00:05.000Z | méně než minuta | méně než 10 vteřin | za méně než minutu |
+| 2000-01-01T00:00:00.000Z | méně než minuta | méně než 5 vteřin | méně než minuta |
+| 1999-12-31T23:59:55.000Z | méně než minuta | méně než 10 vteřin | před méně než minutou |
+| 1999-12-31T23:59:45.000Z | méně než minuta | méně než 20 vteřin | před méně než minutou |
+| 1999-12-31T23:59:35.000Z | méně než minuta | půl minuty | před méně než minutou |
+| 1999-12-31T23:59:00.000Z | minuta | minuta | před minutou |
+| 1999-12-31T23:45:00.000Z | 15 minut | 15 minut | před 15 minutami |
+| 1999-12-31T23:30:00.000Z | 30 minut | 30 minut | před 30 minutami |
+| 1999-12-31T23:15:00.000Z | přibližně hodina | přibližně hodina | přibližně před hodinou |
+| 1999-12-31T23:00:00.000Z | přibližně hodina | přibližně hodina | přibližně před hodinou |
+| 1999-12-31T18:00:00.000Z | přibližně 6 hodin | přibližně 6 hodin | přibližně před 6 hodinami |
+| 1999-12-30T00:00:00.000Z | 2 dny | 2 dny | před 2 dny |
+| 1999-12-15T00:00:00.000Z | 17 dní | 17 dní | před 17 dny |
+| 1999-12-01T00:00:00.000Z | přibližně měsíc | přibližně měsíc | přibližně před měsícem |
+| 1999-11-01T00:00:00.000Z | 2 měsíce | 2 měsíce | před 2 měsíci |
+| 1999-06-01T00:00:00.000Z | 7 měsíců | 7 měsíců | před 7 měsíci |
+| 1999-01-01T00:00:00.000Z | přibližně rok | přibližně rok | přibližně před rokem |
+| 1998-12-01T00:00:00.000Z | přibližně rok | přibližně rok | přibližně před rokem |
+| 1998-06-01T00:00:00.000Z | více než rok | více než rok | před více než rokem |
+| 1998-01-01T00:00:00.000Z | přibližně 2 roky | přibližně 2 roky | přibližně před 2 roky |
+| 1997-01-01T00:00:00.000Z | přibližně 3 roky | přibližně 3 roky | přibližně před 3 roky |
+| 1996-01-01T00:00:00.000Z | přibližně 4 roky | přibližně 4 roky | přibližně před 4 roky |
+| 1995-01-01T00:00:00.000Z | přibližně 5 roků | přibližně 5 roků | přibližně před 5 roky |
+| 1994-01-01T00:00:00.000Z | přibližně 6 roků | přibližně 6 roků | přibližně před 6 roky |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 roků | za 6 roků | 52608 hodin |
+| 2005-01-01T00:00:00.000Z | 5 roků | za 5 roků | 43848 hodin |
+| 2004-01-01T00:00:00.000Z | 4 roky | za 4 roky | 35064 hodin |
+| 2003-01-01T00:00:00.000Z | 3 roky | za 3 roky | 26304 hodin |
+| 2002-01-01T00:00:00.000Z | 2 roky | za 2 roky | 17544 hodin |
+| 2001-06-01T00:00:00.000Z | rok | za rok | 12408 hodin |
+| 2001-02-01T00:00:00.000Z | rok | za rok | 9528 hodin |
+| 2001-01-01T00:00:00.000Z | rok | za rok | 8784 hodin |
+| 2000-06-01T00:00:00.000Z | 5 měsíců | za 5 měsíců | 3648 hodin |
+| 2000-03-01T00:00:00.000Z | 2 měsíce | za 2 měsíce | 1440 hodin |
+| 2000-02-01T00:00:00.000Z | měsíc | za měsíc | 744 hodin |
+| 2000-01-15T00:00:00.000Z | 14 dní | za 14 dní | 336 hodin |
+| 2000-01-02T00:00:00.000Z | den | za den | 24 hodin |
+| 2000-01-01T06:00:00.000Z | 6 hodin | za 6 hodin | 6 hodin |
+| 2000-01-01T01:00:00.000Z | hodina | za hodinu | hodina |
+| 2000-01-01T00:45:00.000Z | 45 minut | za 45 minut | hodina |
+| 2000-01-01T00:30:00.000Z | 30 minut | za 30 minut | hodina |
+| 2000-01-01T00:15:00.000Z | 15 minut | za 15 minut | 0 hodiny |
+| 2000-01-01T00:01:00.000Z | minuta | za minutu | 0 hodiny |
+| 2000-01-01T00:00:25.000Z | 25 vteřin | za 25 vteřin | 0 hodiny |
+| 2000-01-01T00:00:15.000Z | 15 vteřin | za 15 vteřin | 0 hodiny |
+| 2000-01-01T00:00:05.000Z | 5 vteřin | za 5 vteřin | 0 hodiny |
+| 2000-01-01T00:00:00.000Z | 0 vteřiny | 0 vteřiny | 0 hodiny |
+| 1999-12-31T23:59:55.000Z | 5 vteřin | před 5 vteřinami | 0 hodiny |
+| 1999-12-31T23:59:45.000Z | 15 vteřin | před 15 vteřinami | 0 hodiny |
+| 1999-12-31T23:59:35.000Z | 25 vteřin | před 25 vteřinami | 0 hodiny |
+| 1999-12-31T23:59:00.000Z | minuta | před minutou | 0 hodiny |
+| 1999-12-31T23:45:00.000Z | 15 minut | před 15 minutami | 0 hodiny |
+| 1999-12-31T23:30:00.000Z | 30 minut | před 30 minutami | hodina |
+| 1999-12-31T23:15:00.000Z | 45 minut | před 45 minutami | hodina |
+| 1999-12-31T23:00:00.000Z | hodina | před hodinou | hodina |
+| 1999-12-31T18:00:00.000Z | 6 hodin | před 6 hodinami | 6 hodin |
+| 1999-12-30T00:00:00.000Z | 2 dny | před 2 dny | 48 hodin |
+| 1999-12-15T00:00:00.000Z | 17 dní | před 17 dny | 408 hodin |
+| 1999-12-01T00:00:00.000Z | měsíc | před měsícem | 744 hodin |
+| 1999-11-01T00:00:00.000Z | 2 měsíce | před 2 měsíci | 1464 hodin |
+| 1999-06-01T00:00:00.000Z | 7 měsíců | před 7 měsíci | 5136 hodin |
+| 1999-01-01T00:00:00.000Z | rok | před rokem | 8760 hodin |
+| 1998-12-01T00:00:00.000Z | rok | před rokem | 9504 hodin |
+| 1998-06-01T00:00:00.000Z | 2 roky | před 2 roky | 13896 hodin |
+| 1998-01-01T00:00:00.000Z | 2 roky | před 2 roky | 17520 hodin |
+| 1997-01-01T00:00:00.000Z | 3 roky | před 3 roky | 26280 hodin |
+| 1996-01-01T00:00:00.000Z | 4 roky | před 4 roky | 35064 hodin |
+| 1995-01-01T00:00:00.000Z | 5 roků | před 5 roky | 43824 hodin |
+| 1994-01-01T00:00:00.000Z | 6 roků | před 6 roky | 52584 hodin |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------ |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | v středu o 0:00 |
+| 2000-01-02T00:00:00.000Z | zítra v 0:00 |
+| 2000-01-01T00:00:00.000Z | dnes v 0:00 |
+| 1999-12-31T00:00:00.000Z | včera v 0:00 |
+| 1999-12-27T00:00:00.000Z | poslední pondělí ve 0:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/cy/_lib/formatDistance/index.js b/date-fns/src/locale/cy/_lib/formatDistance/index.js
new file mode 100644
index 0000000..6f0af31
--- /dev/null
+++ b/date-fns/src/locale/cy/_lib/formatDistance/index.js
@@ -0,0 +1,114 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'llai na eiliad',
+ other: 'llai na {{count}} eiliad'
+ },
+
+ xSeconds: {
+ one: '1 eiliad',
+ other: '{{count}} eiliad'
+ },
+
+ halfAMinute: 'hanner munud',
+
+ lessThanXMinutes: {
+ one: 'llai na munud',
+ two: 'llai na 2 funud',
+ other: 'llai na {{count}} munud'
+ },
+
+ xMinutes: {
+ one: '1 munud',
+ two: '2 funud',
+ other: '{{count}} munud'
+ },
+
+ aboutXHours: {
+ one: 'tua 1 awr',
+ other: 'tua {{count}} awr'
+ },
+
+ xHours: {
+ one: '1 awr',
+ other: '{{count}} awr'
+ },
+
+ xDays: {
+ one: '1 diwrnod',
+ two: '2 ddiwrnod',
+ other: '{{count}} diwrnod'
+ },
+
+ aboutXWeeks: {
+ one: 'tua 1 wythnos',
+ two: 'tua pythefnos',
+ other: 'tua {{count}} wythnos'
+ },
+
+ xWeeks: {
+ one: '1 wythnos',
+ two: 'pythefnos',
+ other: '{{count}} wythnos'
+ },
+
+ aboutXMonths: {
+ one: 'tua 1 mis',
+ two: 'tua 2 fis',
+ other: 'tua {{count}} mis'
+ },
+
+ xMonths: {
+ one: '1 mis',
+ two: '2 fis',
+ other: '{{count}} mis'
+ },
+
+ aboutXYears: {
+ one: 'tua 1 flwyddyn',
+ two: 'tua 2 flynedd',
+ other: 'tua {{count}} mlynedd'
+ },
+
+ xYears: {
+ one: '1 flwyddyn',
+ two: '2 flynedd',
+ other: '{{count}} mlynedd'
+ },
+
+ overXYears: {
+ one: 'dros 1 flwyddyn',
+ two: 'dros 2 flynedd',
+ other: 'dros {{count}} mlynedd'
+ },
+
+ almostXYears: {
+ one: 'bron 1 flwyddyn',
+ two: 'bron 2 flynedd',
+ other: 'bron {{count}} mlynedd'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else if (count === 2 && !!formatDistanceLocale[token].two) {
+ result = formatDistanceLocale[token].two
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'mewn ' + result
+ } else {
+ return result + ' yn ôl'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/cy/_lib/formatLong/index.js b/date-fns/src/locale/cy/_lib/formatLong/index.js
new file mode 100644
index 0000000..a77bdae
--- /dev/null
+++ b/date-fns/src/locale/cy/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'am' {{time}}",
+ long: "{{date}} 'am' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/cy/_lib/formatRelative/index.js b/date-fns/src/locale/cy/_lib/formatRelative/index.js
new file mode 100644
index 0000000..5764077
--- /dev/null
+++ b/date-fns/src/locale/cy/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'diwethaf am' p",
+ yesterday: "'ddoe am' p",
+ today: "'heddiw am' p",
+ tomorrow: "'yfory am' p",
+ nextWeek: "eeee 'am' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/cy/_lib/localize/index.js b/date-fns/src/locale/cy/_lib/localize/index.js
new file mode 100644
index 0000000..bf89501
--- /dev/null
+++ b/date-fns/src/locale/cy/_lib/localize/index.js
@@ -0,0 +1,204 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['C', 'O'],
+ abbreviated: ['CC', 'OC'],
+ wide: ['Cyn Crist', 'Ar ôl Crist']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Ch1', 'Ch2', 'Ch3', 'Ch4'],
+ wide: ['Chwarter 1af', '2ail chwarter', '3ydd chwarter', '4ydd chwarter']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['I', 'Ch', 'Ma', 'E', 'Mi', 'Me', 'G', 'A', 'Md', 'H', 'T', 'Rh'],
+ abbreviated: [
+ 'Ion',
+ 'Chwe',
+ 'Maw',
+ 'Ebr',
+ 'Mai',
+ 'Meh',
+ 'Gor',
+ 'Aws',
+ 'Med',
+ 'Hyd',
+ 'Tach',
+ 'Rhag'
+ ],
+ wide: [
+ 'Ionawr',
+ 'Chwefror',
+ 'Mawrth',
+ 'Ebrill',
+ 'Mai',
+ 'Mehefin',
+ 'Gorffennaf',
+ 'Awst',
+ 'Medi',
+ 'Hydref',
+ 'Tachwedd',
+ 'Rhagfyr'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'Ll', 'M', 'M', 'I', 'G', 'S'],
+ short: ['Su', 'Ll', 'Ma', 'Me', 'Ia', 'Gw', 'Sa'],
+ abbreviated: ['Sul', 'Llun', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
+ wide: [
+ 'dydd Sul',
+ 'dydd Llun',
+ 'dydd Mawrth',
+ 'dydd Mercher',
+ 'dydd Iau',
+ 'dydd Gwener',
+ 'dydd Sadwrn'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'b',
+ pm: 'h',
+ midnight: 'hn',
+ noon: 'hd',
+ morning: 'bore',
+ afternoon: 'prynhawn',
+ evening: "gyda'r nos",
+ night: 'nos'
+ },
+ abbreviated: {
+ am: 'yb',
+ pm: 'yh',
+ midnight: 'hanner nos',
+ noon: 'hanner dydd',
+ morning: 'bore',
+ afternoon: 'prynhawn',
+ evening: "gyda'r nos",
+ night: 'nos'
+ },
+ wide: {
+ am: 'y.b.',
+ pm: 'y.h.',
+ midnight: 'hanner nos',
+ noon: 'hanner dydd',
+ morning: 'bore',
+ afternoon: 'prynhawn',
+ evening: "gyda'r nos",
+ night: 'nos'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'b',
+ pm: 'h',
+ midnight: 'hn',
+ noon: 'hd',
+ morning: 'yn y bore',
+ afternoon: 'yn y prynhawn',
+ evening: "gyda'r nos",
+ night: 'yn y nos'
+ },
+ abbreviated: {
+ am: 'yb',
+ pm: 'yh',
+ midnight: 'hanner nos',
+ noon: 'hanner dydd',
+ morning: 'yn y bore',
+ afternoon: 'yn y prynhawn',
+ evening: "gyda'r nos",
+ night: 'yn y nos'
+ },
+ wide: {
+ am: 'y.b.',
+ pm: 'y.h.',
+ midnight: 'hanner nos',
+ noon: 'hanner dydd',
+ morning: 'yn y bore',
+ afternoon: 'yn y prynhawn',
+ evening: "gyda'r nos",
+ night: 'yn y nos'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ if (number < 20) {
+ switch (number) {
+ case 0:
+ return number + 'fed'
+ case 1:
+ return number + 'af'
+ case 2:
+ return number + 'ail'
+ case 3:
+ case 4:
+ return number + 'ydd'
+ case 5:
+ case 6:
+ return number + 'ed'
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 12:
+ case 15:
+ case 18:
+ return number + 'fed'
+ case 11:
+ case 13:
+ case 14:
+ case 16:
+ case 17:
+ case 19:
+ return number + 'eg'
+ }
+ } else if ((number >= 50 && number <= 60) || number === 80 || number >= 100) {
+ return number + 'fed'
+ }
+ return number + 'ain'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/cy/_lib/match/index.js b/date-fns/src/locale/cy/_lib/match/index.js
new file mode 100644
index 0000000..d2657ad
--- /dev/null
+++ b/date-fns/src/locale/cy/_lib/match/index.js
@@ -0,0 +1,147 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(af|ail|ydd|ed|fed|eg|ain)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(c|o)/i,
+ abbreviated: /^(c\.?\s?c\.?|o\.?\s?c\.?)/i,
+ wide: /^(cyn christ|ar ôl crist|ar ol crist)/i
+}
+var parseEraPatterns = {
+ wide: [/^c/i, /^(ar ôl crist|ar ol crist)/i],
+ any: [/^c/i, /^o/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^ch[1234]/i,
+ wide: /^(chwarter 1af)|([234](ail|ydd)? chwarter)/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(i|ch|m|e|g|a|h|t|rh)/i,
+ abbreviated: /^(ion|chwe|maw|ebr|mai|meh|gor|aws|med|hyd|tach|rhag)/i,
+ wide: /^(ionawr|chwefror|mawrth|ebrill|mai|mehefin|gorffennaf|awst|medi|hydref|tachwedd|rhagfyr)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^i/i,
+ /^ch/i,
+ /^m/i,
+ /^e/i,
+ /^m/i,
+ /^m/i,
+ /^g/i,
+ /^a/i,
+ /^m/i,
+ /^h/i,
+ /^t/i,
+ /^rh/i
+ ],
+ any: [
+ /^io/i,
+ /^ch/i,
+ /^maw/i,
+ /^e/i,
+ /^mai/i,
+ /^meh/i,
+ /^g/i,
+ /^a/i,
+ /^med/i,
+ /^h/i,
+ /^t/i,
+ /^rh/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(s|ll|m|i|g)/i,
+ short: /^(su|ll|ma|me|ia|gw|sa)/i,
+ abbreviated: /^(sul|llun|maw|mer|iau|gwe|sad)/i,
+ wide: /^dydd (sul|llun|mawrth|mercher|iau|gwener|sadwrn)/i
+}
+var parseDayPatterns = {
+ narrow: [/^s/i, /^ll/i, /^m/i, /^m/i, /^i/i, /^g/i, /^s/i],
+ wide: [
+ /^dydd su/i,
+ /^dydd ll/i,
+ /^dydd ma/i,
+ /^dydd me/i,
+ /^dydd i/i,
+ /^dydd g/i,
+ /^dydd sa/i
+ ],
+ any: [/^su/i, /^ll/i, /^ma/i, /^me/i, /^i/i, /^g/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(b|h|hn|hd|(yn y|y|yr|gyda'r) (bore|prynhawn|nos|hwyr))/i,
+ any: /^(y\.?\s?[bh]\.?|hanner nos|hanner dydd|(yn y|y|yr|gyda'r) (bore|prynhawn|nos|hwyr))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^b|(y\.?\s?b\.?)/i,
+ pm: /^h|(y\.?\s?h\.?)|(yr hwyr)/i,
+ midnight: /^hn|hanner nos/i,
+ noon: /^hd|hanner dydd/i,
+ morning: /bore/i,
+ afternoon: /prynhawn/i,
+ evening: /^gyda'r nos$/i,
+ night: /blah/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/cy/index.d.ts b/date-fns/src/locale/cy/index.d.ts
new file mode 100644
index 0000000..8c1286b
--- /dev/null
+++ b/date-fns/src/locale/cy/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { cy } from 'date-fns/locale'
+export default cy
diff --git a/date-fns/src/locale/cy/index.js b/date-fns/src/locale/cy/index.js
new file mode 100644
index 0000000..22167cf
--- /dev/null
+++ b/date-fns/src/locale/cy/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Welsh locale.
+ * @language Welsh
+ * @iso-639-2 cym
+ * @author Elwyn Malethan [@elmomalmo]{@link https://github.com/elmomalmo}
+ */
+var locale = {
+ code: 'cy',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/cy/index.js.flow b/date-fns/src/locale/cy/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/cy/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/cy/snapshot.md b/date-fns/src/locale/cy/snapshot.md
new file mode 100644
index 0000000..af13081
--- /dev/null
+++ b/date-fns/src/locale/cy/snapshot.md
@@ -0,0 +1,304 @@
+# Welsh (cy) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987fed | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5ed | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987fed | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5ed | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1af | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ail | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Ch1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Ch2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | Chwarter 1af | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ail chwarter | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1af | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ail | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Ch1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Ch2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | Chwarter 1af | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ail chwarter | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2ail | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7fed | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Chwe | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Gor | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Chwefror | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Gorffennaf | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | Ch | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | G | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2ail | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7fed | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Chwe | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Gor | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Chwefror | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Gorffennaf | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | Ch | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | G | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1af | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49ain | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1af | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ain | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11eg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28ain | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42ain | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365fed | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gwe | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gwe | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gwe | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | dydd Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dydd Gwener | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | Ll | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | G | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Ll | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gw | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1af | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ed | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gwe | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | dydd Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dydd Gwener | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | Ll | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | G | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Ll | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gw | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2ail | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6ed | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gwe | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | dydd Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dydd Gwener | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | Ll | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | G | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Ll | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gw | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2ail | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6ed | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gwe | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | dydd Llun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | dydd Gwener | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | Ll | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | G | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Ll | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Gw | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | y.b. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | y.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | y.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | y.b. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | b | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | h | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | h | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | b | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | yh | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yb | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | y.b. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | y.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | y.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | y.b. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | b | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | h | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | h | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | b | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | yn y bore | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yn y prynhawn | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | gyda'r nos | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yn y nos | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | yn y bore | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yn y prynhawn | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | gyda'r nos | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yn y nos | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | yn y bore | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yn y prynhawn | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | gyda'r nos | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yn y nos | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | yn y bore | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yn y prynhawn | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | gyda'r nos | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yn y nos | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | yn y bore | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | yn y prynhawn | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | gyda'r nos | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yn y nos | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11eg | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11eg | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11eg | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ain | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11eg | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11eg | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11eg | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ain | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1af | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55fed | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1af | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55fed | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Chwe 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 Chwefror 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | dydd Mercher, 11 Chwefror 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | dydd Sul, 29 Mai 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 yh | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 yh | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 yh | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 yh | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 yh GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 yh GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 yh GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 yh GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 yh | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 11:59 yh | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Chwe 1987, 12:13:14 yh | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mai 1453, 11:59:59 yh | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 Chwefror 1987 am 12:13:14 yh GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 Mai 1453 am 11:59:59 yh GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | dydd Mercher, 11 Chwefror 1987 am 12:13:14 yh GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | dydd Sul, 29 Mai 1453 am 11:59:59 yh GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------- | ---------------------- | --------------------- |
+| 2006-01-01T00:00:00.000Z | tua 6 mlynedd | tua 6 mlynedd | mewn tua 6 mlynedd |
+| 2005-01-01T00:00:00.000Z | tua 5 mlynedd | tua 5 mlynedd | mewn tua 5 mlynedd |
+| 2004-01-01T00:00:00.000Z | tua 4 mlynedd | tua 4 mlynedd | mewn tua 4 mlynedd |
+| 2003-01-01T00:00:00.000Z | tua 3 mlynedd | tua 3 mlynedd | mewn tua 3 mlynedd |
+| 2002-01-01T00:00:00.000Z | tua 2 flynedd | tua 2 flynedd | mewn tua 2 flynedd |
+| 2001-06-01T00:00:00.000Z | dros 1 flwyddyn | dros 1 flwyddyn | mewn dros 1 flwyddyn |
+| 2001-02-01T00:00:00.000Z | tua 1 flwyddyn | tua 1 flwyddyn | mewn tua 1 flwyddyn |
+| 2001-01-01T00:00:00.000Z | tua 1 flwyddyn | tua 1 flwyddyn | mewn tua 1 flwyddyn |
+| 2000-06-01T00:00:00.000Z | 5 mis | 5 mis | mewn 5 mis |
+| 2000-03-01T00:00:00.000Z | 2 fis | 2 fis | mewn 2 fis |
+| 2000-02-01T00:00:00.000Z | tua 1 mis | tua 1 mis | mewn tua 1 mis |
+| 2000-01-15T00:00:00.000Z | 14 diwrnod | 14 diwrnod | mewn 14 diwrnod |
+| 2000-01-02T00:00:00.000Z | 1 diwrnod | 1 diwrnod | mewn 1 diwrnod |
+| 2000-01-01T06:00:00.000Z | tua 6 awr | tua 6 awr | mewn tua 6 awr |
+| 2000-01-01T01:00:00.000Z | tua 1 awr | tua 1 awr | mewn tua 1 awr |
+| 2000-01-01T00:45:00.000Z | tua 1 awr | tua 1 awr | mewn tua 1 awr |
+| 2000-01-01T00:30:00.000Z | 30 munud | 30 munud | mewn 30 munud |
+| 2000-01-01T00:15:00.000Z | 15 munud | 15 munud | mewn 15 munud |
+| 2000-01-01T00:01:00.000Z | 1 munud | 1 munud | mewn 1 munud |
+| 2000-01-01T00:00:25.000Z | llai na munud | hanner munud | mewn llai na munud |
+| 2000-01-01T00:00:15.000Z | llai na munud | llai na 20 eiliad | mewn llai na munud |
+| 2000-01-01T00:00:05.000Z | llai na munud | llai na 10 eiliad | mewn llai na munud |
+| 2000-01-01T00:00:00.000Z | llai na munud | llai na 5 eiliad | llai na munud yn ôl |
+| 1999-12-31T23:59:55.000Z | llai na munud | llai na 10 eiliad | llai na munud yn ôl |
+| 1999-12-31T23:59:45.000Z | llai na munud | llai na 20 eiliad | llai na munud yn ôl |
+| 1999-12-31T23:59:35.000Z | llai na munud | hanner munud | llai na munud yn ôl |
+| 1999-12-31T23:59:00.000Z | 1 munud | 1 munud | 1 munud yn ôl |
+| 1999-12-31T23:45:00.000Z | 15 munud | 15 munud | 15 munud yn ôl |
+| 1999-12-31T23:30:00.000Z | 30 munud | 30 munud | 30 munud yn ôl |
+| 1999-12-31T23:15:00.000Z | tua 1 awr | tua 1 awr | tua 1 awr yn ôl |
+| 1999-12-31T23:00:00.000Z | tua 1 awr | tua 1 awr | tua 1 awr yn ôl |
+| 1999-12-31T18:00:00.000Z | tua 6 awr | tua 6 awr | tua 6 awr yn ôl |
+| 1999-12-30T00:00:00.000Z | 2 ddiwrnod | 2 ddiwrnod | 2 ddiwrnod yn ôl |
+| 1999-12-15T00:00:00.000Z | 17 diwrnod | 17 diwrnod | 17 diwrnod yn ôl |
+| 1999-12-01T00:00:00.000Z | tua 1 mis | tua 1 mis | tua 1 mis yn ôl |
+| 1999-11-01T00:00:00.000Z | 2 fis | 2 fis | 2 fis yn ôl |
+| 1999-06-01T00:00:00.000Z | 7 mis | 7 mis | 7 mis yn ôl |
+| 1999-01-01T00:00:00.000Z | tua 1 flwyddyn | tua 1 flwyddyn | tua 1 flwyddyn yn ôl |
+| 1998-12-01T00:00:00.000Z | tua 1 flwyddyn | tua 1 flwyddyn | tua 1 flwyddyn yn ôl |
+| 1998-06-01T00:00:00.000Z | dros 1 flwyddyn | dros 1 flwyddyn | dros 1 flwyddyn yn ôl |
+| 1998-01-01T00:00:00.000Z | tua 2 flynedd | tua 2 flynedd | tua 2 flynedd yn ôl |
+| 1997-01-01T00:00:00.000Z | tua 3 mlynedd | tua 3 mlynedd | tua 3 mlynedd yn ôl |
+| 1996-01-01T00:00:00.000Z | tua 4 mlynedd | tua 4 mlynedd | tua 4 mlynedd yn ôl |
+| 1995-01-01T00:00:00.000Z | tua 5 mlynedd | tua 5 mlynedd | tua 5 mlynedd yn ôl |
+| 1994-01-01T00:00:00.000Z | tua 6 mlynedd | tua 6 mlynedd | tua 6 mlynedd yn ôl |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 mlynedd | mewn 6 mlynedd | 52608 awr |
+| 2005-01-01T00:00:00.000Z | 5 mlynedd | mewn 5 mlynedd | 43848 awr |
+| 2004-01-01T00:00:00.000Z | 4 mlynedd | mewn 4 mlynedd | 35064 awr |
+| 2003-01-01T00:00:00.000Z | 3 mlynedd | mewn 3 mlynedd | 26304 awr |
+| 2002-01-01T00:00:00.000Z | 2 flynedd | mewn 2 flynedd | 17544 awr |
+| 2001-06-01T00:00:00.000Z | 1 flwyddyn | mewn 1 flwyddyn | 12408 awr |
+| 2001-02-01T00:00:00.000Z | 1 flwyddyn | mewn 1 flwyddyn | 9528 awr |
+| 2001-01-01T00:00:00.000Z | 1 flwyddyn | mewn 1 flwyddyn | 8784 awr |
+| 2000-06-01T00:00:00.000Z | 5 mis | mewn 5 mis | 3648 awr |
+| 2000-03-01T00:00:00.000Z | 2 fis | mewn 2 fis | 1440 awr |
+| 2000-02-01T00:00:00.000Z | 1 mis | mewn 1 mis | 744 awr |
+| 2000-01-15T00:00:00.000Z | 14 diwrnod | mewn 14 diwrnod | 336 awr |
+| 2000-01-02T00:00:00.000Z | 1 diwrnod | mewn 1 diwrnod | 24 awr |
+| 2000-01-01T06:00:00.000Z | 6 awr | mewn 6 awr | 6 awr |
+| 2000-01-01T01:00:00.000Z | 1 awr | mewn 1 awr | 1 awr |
+| 2000-01-01T00:45:00.000Z | 45 munud | mewn 45 munud | 1 awr |
+| 2000-01-01T00:30:00.000Z | 30 munud | mewn 30 munud | 1 awr |
+| 2000-01-01T00:15:00.000Z | 15 munud | mewn 15 munud | 0 awr |
+| 2000-01-01T00:01:00.000Z | 1 munud | mewn 1 munud | 0 awr |
+| 2000-01-01T00:00:25.000Z | 25 eiliad | mewn 25 eiliad | 0 awr |
+| 2000-01-01T00:00:15.000Z | 15 eiliad | mewn 15 eiliad | 0 awr |
+| 2000-01-01T00:00:05.000Z | 5 eiliad | mewn 5 eiliad | 0 awr |
+| 2000-01-01T00:00:00.000Z | 0 eiliad | 0 eiliad yn ôl | 0 awr |
+| 1999-12-31T23:59:55.000Z | 5 eiliad | 5 eiliad yn ôl | 0 awr |
+| 1999-12-31T23:59:45.000Z | 15 eiliad | 15 eiliad yn ôl | 0 awr |
+| 1999-12-31T23:59:35.000Z | 25 eiliad | 25 eiliad yn ôl | 0 awr |
+| 1999-12-31T23:59:00.000Z | 1 munud | 1 munud yn ôl | 0 awr |
+| 1999-12-31T23:45:00.000Z | 15 munud | 15 munud yn ôl | 0 awr |
+| 1999-12-31T23:30:00.000Z | 30 munud | 30 munud yn ôl | 1 awr |
+| 1999-12-31T23:15:00.000Z | 45 munud | 45 munud yn ôl | 1 awr |
+| 1999-12-31T23:00:00.000Z | 1 awr | 1 awr yn ôl | 1 awr |
+| 1999-12-31T18:00:00.000Z | 6 awr | 6 awr yn ôl | 6 awr |
+| 1999-12-30T00:00:00.000Z | 2 ddiwrnod | 2 ddiwrnod yn ôl | 48 awr |
+| 1999-12-15T00:00:00.000Z | 17 diwrnod | 17 diwrnod yn ôl | 408 awr |
+| 1999-12-01T00:00:00.000Z | 1 mis | 1 mis yn ôl | 744 awr |
+| 1999-11-01T00:00:00.000Z | 2 fis | 2 fis yn ôl | 1464 awr |
+| 1999-06-01T00:00:00.000Z | 7 mis | 7 mis yn ôl | 5136 awr |
+| 1999-01-01T00:00:00.000Z | 1 flwyddyn | 1 flwyddyn yn ôl | 8760 awr |
+| 1998-12-01T00:00:00.000Z | 1 flwyddyn | 1 flwyddyn yn ôl | 9504 awr |
+| 1998-06-01T00:00:00.000Z | 2 flynedd | 2 flynedd yn ôl | 13896 awr |
+| 1998-01-01T00:00:00.000Z | 2 flynedd | 2 flynedd yn ôl | 17520 awr |
+| 1997-01-01T00:00:00.000Z | 3 mlynedd | 3 mlynedd yn ôl | 26280 awr |
+| 1996-01-01T00:00:00.000Z | 4 mlynedd | 4 mlynedd yn ôl | 35064 awr |
+| 1995-01-01T00:00:00.000Z | 5 mlynedd | 5 mlynedd yn ôl | 43824 awr |
+| 1994-01-01T00:00:00.000Z | 6 mlynedd | 6 mlynedd yn ôl | 52584 awr |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------------ |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | dydd Mercher am 12:00 yb |
+| 2000-01-02T00:00:00.000Z | yfory am 12:00 yb |
+| 2000-01-01T00:00:00.000Z | heddiw am 12:00 yb |
+| 1999-12-31T00:00:00.000Z | ddoe am 12:00 yb |
+| 1999-12-27T00:00:00.000Z | dydd Llun diwethaf am 12:00 yb |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/da/_lib/formatDistance/index.js b/date-fns/src/locale/da/_lib/formatDistance/index.js
new file mode 100644
index 0000000..7eb8672
--- /dev/null
+++ b/date-fns/src/locale/da/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'mindre end ét sekund',
+ other: 'mindre end {{count}} sekunder'
+ },
+
+ xSeconds: {
+ one: '1 sekund',
+ other: '{{count}} sekunder'
+ },
+
+ halfAMinute: 'ét halvt minut',
+
+ lessThanXMinutes: {
+ one: 'mindre end ét minut',
+ other: 'mindre end {{count}} minutter'
+ },
+
+ xMinutes: {
+ one: '1 minut',
+ other: '{{count}} minutter'
+ },
+
+ aboutXHours: {
+ one: 'cirka 1 time',
+ other: 'cirka {{count}} timer'
+ },
+
+ xHours: {
+ one: '1 time',
+ other: '{{count}} timer'
+ },
+
+ xDays: {
+ one: '1 dag',
+ other: '{{count}} dage'
+ },
+
+ aboutXWeeks: {
+ one: 'cirka 1 uge',
+ other: 'cirka {{count}} uger'
+ },
+
+ xWeeks: {
+ one: '1 uge',
+ other: '{{count}} uger'
+ },
+
+ aboutXMonths: {
+ one: 'cirka 1 måned',
+ other: 'cirka {{count}} måneder'
+ },
+
+ xMonths: {
+ one: '1 måned',
+ other: '{{count}} måneder'
+ },
+
+ aboutXYears: {
+ one: 'cirka 1 år',
+ other: 'cirka {{count}} år'
+ },
+
+ xYears: {
+ one: '1 år',
+ other: '{{count}} år'
+ },
+
+ overXYears: {
+ one: 'over 1 år',
+ other: 'over {{count}} år'
+ },
+
+ almostXYears: {
+ one: 'næsten 1 år',
+ other: 'næsten {{count}} år'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'om ' + result
+ } else {
+ return result + ' siden'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/da/_lib/formatLong/index.js b/date-fns/src/locale/da/_lib/formatLong/index.js
new file mode 100644
index 0000000..4544f5d
--- /dev/null
+++ b/date-fns/src/locale/da/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE 'den' d. MMMM y",
+ long: 'd. MMMM y',
+ medium: 'd. MMM y',
+ short: 'dd/MM/y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'kl'. {{time}}",
+ long: "{{date}} 'kl'. {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/da/_lib/formatRelative/index.js b/date-fns/src/locale/da/_lib/formatRelative/index.js
new file mode 100644
index 0000000..85fab13
--- /dev/null
+++ b/date-fns/src/locale/da/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'sidste' eeee 'kl.' p",
+ yesterday: "'i går kl.' p",
+ today: "'i dag kl.' p",
+ tomorrow: "'i morgen kl.' p",
+ nextWeek: "'på' eeee 'kl.' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/da/_lib/localize/index.js b/date-fns/src/locale/da/_lib/localize/index.js
new file mode 100644
index 0000000..243315c
--- /dev/null
+++ b/date-fns/src/locale/da/_lib/localize/index.js
@@ -0,0 +1,162 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['fvt', 'vt'],
+ abbreviated: ['f.v.t.', 'v.t.'],
+ wide: ['før vesterlandsk tidsregning', 'vesterlandsk tidsregning']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1. kvt.', '2. kvt.', '3. kvt.', '4. kvt.'],
+ wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'jan.',
+ 'feb.',
+ 'mar.',
+ 'apr.',
+ 'maj',
+ 'jun.',
+ 'jul.',
+ 'aug.',
+ 'sep.',
+ 'okt.',
+ 'nov.',
+ 'dec.'
+ ],
+ wide: [
+ 'januar',
+ 'februar',
+ 'marts',
+ 'april',
+ 'maj',
+ 'juni',
+ 'juli',
+ 'august',
+ 'september',
+ 'oktober',
+ 'november',
+ 'december'
+ ]
+}
+
+// Note that 'Days - abbreviated - Formatting' has periods at the end.
+// https://www.unicode.org/cldr/charts/32/summary/da.html#1760
+// This makes grammatical sense in danish, as most abbreviations have periods.
+var dayValues = {
+ narrow: ['S', 'M', 'T', 'O', 'T', 'F', 'L'],
+ short: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],
+ abbreviated: ['søn.', 'man.', 'tir.', 'ons.', 'tor.', 'fre.', 'lør.'],
+ wide: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'midnat',
+ noon: 'middag',
+ morning: 'morgen',
+ afternoon: 'eftermiddag',
+ evening: 'aften',
+ night: 'nat'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'midnat',
+ noon: 'middag',
+ morning: 'morgen',
+ afternoon: 'eftermiddag',
+ evening: 'aften',
+ night: 'nat'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnat',
+ noon: 'middag',
+ morning: 'morgen',
+ afternoon: 'eftermiddag',
+ evening: 'aften',
+ night: 'nat'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'midnat',
+ noon: 'middag',
+ morning: 'om morgenen',
+ afternoon: 'om eftermiddagen',
+ evening: 'om aftenen',
+ night: 'om natten'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'midnat',
+ noon: 'middag',
+ morning: 'om morgenen',
+ afternoon: 'om eftermiddagen',
+ evening: 'om aftenen',
+ night: 'om natten'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnat',
+ noon: 'middag',
+ morning: 'om morgenen',
+ afternoon: 'om eftermiddagen',
+ evening: 'om aftenen',
+ night: 'om natten'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/da/_lib/match/index.js b/date-fns/src/locale/da/_lib/match/index.js
new file mode 100644
index 0000000..1972602
--- /dev/null
+++ b/date-fns/src/locale/da/_lib/match/index.js
@@ -0,0 +1,136 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(\.)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(fKr|fvt|eKr|vt)/i,
+ abbreviated: /^(f\.Kr\.?|f\.v\.t\.?|e\.Kr\.?|v\.t\.)/i,
+ wide: /^(f.Kr.|før vesterlandsk tidsregning|e.Kr.|vesterlandsk tidsregning)/i
+}
+var parseEraPatterns = {
+ any: [/^f/i, /^(v|e)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234]. kvt\./i,
+ wide: /^[1234]\.? kvartal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan.|feb.|mar.|apr.|maj|jun.|jul.|aug.|sep.|okt.|nov.|dec.)/i,
+ wide: /^(januar|februar|marts|april|maj|juni|juli|august|september|oktober|november|december)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^maj/i,
+ /^jun/i,
+ /^jul/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smtofl]/i,
+ short: /^(søn.|man.|tir.|ons.|tor.|fre.|lør.)/i,
+ abbreviated: /^(søn|man|tir|ons|tor|fre|lør)/i,
+ wide: /^(søndag|mandag|tirsdag|onsdag|torsdag|fredag|lørdag)/i
+}
+var parseDayPatterns = {
+ narrow: [/^s/i, /^m/i, /^t/i, /^o/i, /^t/i, /^f/i, /^l/i],
+ any: [/^s/i, /^m/i, /^ti/i, /^o/i, /^to/i, /^f/i, /^l/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|midnat|middag|(om) (morgenen|eftermiddagen|aftenen|natten))/i,
+ any: /^([ap]\.?\s?m\.?|midnat|middag|(om) (morgenen|eftermiddagen|aftenen|natten))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /midnat/i,
+ noon: /middag/i,
+ morning: /morgen/i,
+ afternoon: /eftermiddag/i,
+ evening: /aften/i,
+ night: /nat/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+export default match
diff --git a/date-fns/src/locale/da/index.d.ts b/date-fns/src/locale/da/index.d.ts
new file mode 100644
index 0000000..1cd188a
--- /dev/null
+++ b/date-fns/src/locale/da/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { da } from 'date-fns/locale'
+export default da
diff --git a/date-fns/src/locale/da/index.js b/date-fns/src/locale/da/index.js
new file mode 100644
index 0000000..201c3d1
--- /dev/null
+++ b/date-fns/src/locale/da/index.js
@@ -0,0 +1,31 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Danish locale.
+ * @language Danish
+ * @iso-639-2 dan
+ * @author Mathias Wøbbe [@MathiasKandelborg]{@link https://github.com/MathiasKandelborg}
+ * @author Anders B. Hansen [@Andersbiha]{@link https://github.com/Andersbiha}
+ * @author [@kgram]{@link https://github.com/kgram}
+ * @author [@stefanbugge]{@link https://github.com/stefanbugge}
+ */
+var locale = {
+ code: 'da',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/da/index.js.flow b/date-fns/src/locale/da/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/da/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/da/snapshot.md b/date-fns/src/locale/da/snapshot.md
new file mode 100644
index 0000000..a73d4b8
--- /dev/null
+++ b/date-fns/src/locale/da/snapshot.md
@@ -0,0 +1,304 @@
+# Danish (da) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1. kvt. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvt. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1. kvt. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvt. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | man. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fre. | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | man. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fre. | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | man. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fre. | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | mandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | ma | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fr | Invalid Date |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | man. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fre. | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | mandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | ma | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fr | Invalid Date |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | man. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fre. | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | mandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | ma | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fr | Invalid Date |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | man. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fre. | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | mandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | ma | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | fr | Invalid Date |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | om morgenen | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | om eftermiddagen | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | om aftenen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | om natten | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | om morgenen | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | om eftermiddagen | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | om aftenen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | om natten | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | om morgenen | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | om eftermiddagen | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | om aftenen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | om natten | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | om morgenen | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | om eftermiddagen | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | om aftenen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | om natten | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | om morgenen | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | om eftermiddagen | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | om aftenen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | om natten | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. feb. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | onsdag den 11. februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | søndag den 29. maj 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. feb. 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. februar 1987 kl. 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453 kl. 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | onsdag den 11. februar 1987 kl. 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | søndag den 29. maj 1453 kl. 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------- | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | cirka 6 år | cirka 6 år | om cirka 6 år |
+| 2005-01-01T00:00:00.000Z | cirka 5 år | cirka 5 år | om cirka 5 år |
+| 2004-01-01T00:00:00.000Z | cirka 4 år | cirka 4 år | om cirka 4 år |
+| 2003-01-01T00:00:00.000Z | cirka 3 år | cirka 3 år | om cirka 3 år |
+| 2002-01-01T00:00:00.000Z | cirka 2 år | cirka 2 år | om cirka 2 år |
+| 2001-06-01T00:00:00.000Z | over 1 år | over 1 år | om over 1 år |
+| 2001-02-01T00:00:00.000Z | cirka 1 år | cirka 1 år | om cirka 1 år |
+| 2001-01-01T00:00:00.000Z | cirka 1 år | cirka 1 år | om cirka 1 år |
+| 2000-06-01T00:00:00.000Z | 5 måneder | 5 måneder | om 5 måneder |
+| 2000-03-01T00:00:00.000Z | 2 måneder | 2 måneder | om 2 måneder |
+| 2000-02-01T00:00:00.000Z | cirka 1 måned | cirka 1 måned | om cirka 1 måned |
+| 2000-01-15T00:00:00.000Z | 14 dage | 14 dage | om 14 dage |
+| 2000-01-02T00:00:00.000Z | 1 dag | 1 dag | om 1 dag |
+| 2000-01-01T06:00:00.000Z | cirka 6 timer | cirka 6 timer | om cirka 6 timer |
+| 2000-01-01T01:00:00.000Z | cirka 1 time | cirka 1 time | om cirka 1 time |
+| 2000-01-01T00:45:00.000Z | cirka 1 time | cirka 1 time | om cirka 1 time |
+| 2000-01-01T00:30:00.000Z | 30 minutter | 30 minutter | om 30 minutter |
+| 2000-01-01T00:15:00.000Z | 15 minutter | 15 minutter | om 15 minutter |
+| 2000-01-01T00:01:00.000Z | 1 minut | 1 minut | om 1 minut |
+| 2000-01-01T00:00:25.000Z | mindre end ét minut | ét halvt minut | om mindre end ét minut |
+| 2000-01-01T00:00:15.000Z | mindre end ét minut | mindre end 20 sekunder | om mindre end ét minut |
+| 2000-01-01T00:00:05.000Z | mindre end ét minut | mindre end 10 sekunder | om mindre end ét minut |
+| 2000-01-01T00:00:00.000Z | mindre end ét minut | mindre end 5 sekunder | mindre end ét minut siden |
+| 1999-12-31T23:59:55.000Z | mindre end ét minut | mindre end 10 sekunder | mindre end ét minut siden |
+| 1999-12-31T23:59:45.000Z | mindre end ét minut | mindre end 20 sekunder | mindre end ét minut siden |
+| 1999-12-31T23:59:35.000Z | mindre end ét minut | ét halvt minut | mindre end ét minut siden |
+| 1999-12-31T23:59:00.000Z | 1 minut | 1 minut | 1 minut siden |
+| 1999-12-31T23:45:00.000Z | 15 minutter | 15 minutter | 15 minutter siden |
+| 1999-12-31T23:30:00.000Z | 30 minutter | 30 minutter | 30 minutter siden |
+| 1999-12-31T23:15:00.000Z | cirka 1 time | cirka 1 time | cirka 1 time siden |
+| 1999-12-31T23:00:00.000Z | cirka 1 time | cirka 1 time | cirka 1 time siden |
+| 1999-12-31T18:00:00.000Z | cirka 6 timer | cirka 6 timer | cirka 6 timer siden |
+| 1999-12-30T00:00:00.000Z | 2 dage | 2 dage | 2 dage siden |
+| 1999-12-15T00:00:00.000Z | 17 dage | 17 dage | 17 dage siden |
+| 1999-12-01T00:00:00.000Z | cirka 1 måned | cirka 1 måned | cirka 1 måned siden |
+| 1999-11-01T00:00:00.000Z | 2 måneder | 2 måneder | 2 måneder siden |
+| 1999-06-01T00:00:00.000Z | 7 måneder | 7 måneder | 7 måneder siden |
+| 1999-01-01T00:00:00.000Z | cirka 1 år | cirka 1 år | cirka 1 år siden |
+| 1998-12-01T00:00:00.000Z | cirka 1 år | cirka 1 år | cirka 1 år siden |
+| 1998-06-01T00:00:00.000Z | over 1 år | over 1 år | over 1 år siden |
+| 1998-01-01T00:00:00.000Z | cirka 2 år | cirka 2 år | cirka 2 år siden |
+| 1997-01-01T00:00:00.000Z | cirka 3 år | cirka 3 år | cirka 3 år siden |
+| 1996-01-01T00:00:00.000Z | cirka 4 år | cirka 4 år | cirka 4 år siden |
+| 1995-01-01T00:00:00.000Z | cirka 5 år | cirka 5 år | cirka 5 år siden |
+| 1994-01-01T00:00:00.000Z | cirka 6 år | cirka 6 år | cirka 6 år siden |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 år | om 6 år | 52608 timer |
+| 2005-01-01T00:00:00.000Z | 5 år | om 5 år | 43848 timer |
+| 2004-01-01T00:00:00.000Z | 4 år | om 4 år | 35064 timer |
+| 2003-01-01T00:00:00.000Z | 3 år | om 3 år | 26304 timer |
+| 2002-01-01T00:00:00.000Z | 2 år | om 2 år | 17544 timer |
+| 2001-06-01T00:00:00.000Z | 1 år | om 1 år | 12408 timer |
+| 2001-02-01T00:00:00.000Z | 1 år | om 1 år | 9528 timer |
+| 2001-01-01T00:00:00.000Z | 1 år | om 1 år | 8784 timer |
+| 2000-06-01T00:00:00.000Z | 5 måneder | om 5 måneder | 3648 timer |
+| 2000-03-01T00:00:00.000Z | 2 måneder | om 2 måneder | 1440 timer |
+| 2000-02-01T00:00:00.000Z | 1 måned | om 1 måned | 744 timer |
+| 2000-01-15T00:00:00.000Z | 14 dage | om 14 dage | 336 timer |
+| 2000-01-02T00:00:00.000Z | 1 dag | om 1 dag | 24 timer |
+| 2000-01-01T06:00:00.000Z | 6 timer | om 6 timer | 6 timer |
+| 2000-01-01T01:00:00.000Z | 1 time | om 1 time | 1 time |
+| 2000-01-01T00:45:00.000Z | 45 minutter | om 45 minutter | 1 time |
+| 2000-01-01T00:30:00.000Z | 30 minutter | om 30 minutter | 1 time |
+| 2000-01-01T00:15:00.000Z | 15 minutter | om 15 minutter | 0 timer |
+| 2000-01-01T00:01:00.000Z | 1 minut | om 1 minut | 0 timer |
+| 2000-01-01T00:00:25.000Z | 25 sekunder | om 25 sekunder | 0 timer |
+| 2000-01-01T00:00:15.000Z | 15 sekunder | om 15 sekunder | 0 timer |
+| 2000-01-01T00:00:05.000Z | 5 sekunder | om 5 sekunder | 0 timer |
+| 2000-01-01T00:00:00.000Z | 0 sekunder | 0 sekunder siden | 0 timer |
+| 1999-12-31T23:59:55.000Z | 5 sekunder | 5 sekunder siden | 0 timer |
+| 1999-12-31T23:59:45.000Z | 15 sekunder | 15 sekunder siden | 0 timer |
+| 1999-12-31T23:59:35.000Z | 25 sekunder | 25 sekunder siden | 0 timer |
+| 1999-12-31T23:59:00.000Z | 1 minut | 1 minut siden | 0 timer |
+| 1999-12-31T23:45:00.000Z | 15 minutter | 15 minutter siden | 0 timer |
+| 1999-12-31T23:30:00.000Z | 30 minutter | 30 minutter siden | 1 time |
+| 1999-12-31T23:15:00.000Z | 45 minutter | 45 minutter siden | 1 time |
+| 1999-12-31T23:00:00.000Z | 1 time | 1 time siden | 1 time |
+| 1999-12-31T18:00:00.000Z | 6 timer | 6 timer siden | 6 timer |
+| 1999-12-30T00:00:00.000Z | 2 dage | 2 dage siden | 48 timer |
+| 1999-12-15T00:00:00.000Z | 17 dage | 17 dage siden | 408 timer |
+| 1999-12-01T00:00:00.000Z | 1 måned | 1 måned siden | 744 timer |
+| 1999-11-01T00:00:00.000Z | 2 måneder | 2 måneder siden | 1464 timer |
+| 1999-06-01T00:00:00.000Z | 7 måneder | 7 måneder siden | 5136 timer |
+| 1999-01-01T00:00:00.000Z | 1 år | 1 år siden | 8760 timer |
+| 1998-12-01T00:00:00.000Z | 1 år | 1 år siden | 9504 timer |
+| 1998-06-01T00:00:00.000Z | 2 år | 2 år siden | 13896 timer |
+| 1998-01-01T00:00:00.000Z | 2 år | 2 år siden | 17520 timer |
+| 1997-01-01T00:00:00.000Z | 3 år | 3 år siden | 26280 timer |
+| 1996-01-01T00:00:00.000Z | 4 år | 4 år siden | 35064 timer |
+| 1995-01-01T00:00:00.000Z | 5 år | 5 år siden | 43824 timer |
+| 1994-01-01T00:00:00.000Z | 6 år | 6 år siden | 52584 timer |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | på onsdag kl. 00:00 |
+| 2000-01-02T00:00:00.000Z | i morgen kl. 00:00 |
+| 2000-01-01T00:00:00.000Z | i dag kl. 00:00 |
+| 1999-12-31T00:00:00.000Z | i går kl. 00:00 |
+| 1999-12-27T00:00:00.000Z | sidste mandag kl. 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/de-AT/_lib/localize/index.js b/date-fns/src/locale/de-AT/_lib/localize/index.js
new file mode 100644
index 0000000..2a7b0ff
--- /dev/null
+++ b/date-fns/src/locale/de-AT/_lib/localize/index.js
@@ -0,0 +1,172 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['v.Chr.', 'n.Chr.'],
+ abbreviated: ['v.Chr.', 'n.Chr.'],
+ wide: ['vor Christus', 'nach Christus'],
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal'],
+}
+
+// Note: in German, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Jän',
+ 'Feb',
+ 'Mär',
+ 'Apr',
+ 'Mai',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Okt',
+ 'Nov',
+ 'Dez',
+ ],
+ wide: [
+ 'Jänner',
+ 'Februar',
+ 'März',
+ 'April',
+ 'Mai',
+ 'Juni',
+ 'Juli',
+ 'August',
+ 'September',
+ 'Oktober',
+ 'November',
+ 'Dezember',
+ ],
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],
+ short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
+ abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],
+ wide: [
+ 'Sonntag',
+ 'Montag',
+ 'Dienstag',
+ 'Mittwoch',
+ 'Donnerstag',
+ 'Freitag',
+ 'Samstag',
+ ],
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/de.html#1881
+var dayPeriodValues = {
+ narrow: {
+ am: 'vm.',
+ pm: 'nm.',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'Morgen',
+ afternoon: 'Nachm.',
+ evening: 'Abend',
+ night: 'Nacht',
+ },
+ abbreviated: {
+ am: 'vorm.',
+ pm: 'nachm.',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'Morgen',
+ afternoon: 'Nachmittag',
+ evening: 'Abend',
+ night: 'Nacht',
+ },
+ wide: {
+ am: 'vormittags',
+ pm: 'nachmittags',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'Morgen',
+ afternoon: 'Nachmittag',
+ evening: 'Abend',
+ night: 'Nacht',
+ },
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'vm.',
+ pm: 'nm.',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'morgens',
+ afternoon: 'nachm.',
+ evening: 'abends',
+ night: 'nachts',
+ },
+ abbreviated: {
+ am: 'vorm.',
+ pm: 'nachm.',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'morgens',
+ afternoon: 'nachmittags',
+ evening: 'abends',
+ night: 'nachts',
+ },
+ wide: {
+ am: 'vormittags',
+ pm: 'nachmittags',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'morgens',
+ afternoon: 'nachmittags',
+ evening: 'abends',
+ night: 'nachts',
+ },
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide',
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function (quarter) {
+ return Number(quarter) - 1
+ },
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide',
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide',
+ }),
+}
+
+export default localize
diff --git a/date-fns/src/locale/de-AT/index.d.ts b/date-fns/src/locale/de-AT/index.d.ts
new file mode 100644
index 0000000..a7d6680
--- /dev/null
+++ b/date-fns/src/locale/de-AT/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { deAT } from 'date-fns/locale'
+export default deAT
diff --git a/date-fns/src/locale/de-AT/index.js b/date-fns/src/locale/de-AT/index.js
new file mode 100644
index 0000000..2e3f440
--- /dev/null
+++ b/date-fns/src/locale/de-AT/index.js
@@ -0,0 +1,29 @@
+import formatDistance from '../de/_lib/formatDistance/index'
+import formatLong from '../de/_lib/formatLong/index'
+import formatRelative from '../de/_lib/formatRelative/index'
+import match from '../de/_lib/match/index'
+// difference to 'de' locale
+import localize from './_lib/localize/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary German locale (Austria).
+ * @language German
+ * @iso-639-2 deu
+ * @author Christoph Tobias Stenglein [@cstenglein]{@link https://github.com/cstenglein}
+ */
+var locale = {
+ code: 'de-AT',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4,
+ },
+}
+
+export default locale
diff --git a/date-fns/src/locale/de-AT/index.js.flow b/date-fns/src/locale/de-AT/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/de-AT/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/de-AT/snapshot.md b/date-fns/src/locale/de-AT/snapshot.md
new file mode 100644
index 0000000..b0fb2f1
--- /dev/null
+++ b/date-fns/src/locale/de-AT/snapshot.md
@@ -0,0 +1,304 @@
+# German (de-AT) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. Quartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. Quartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. Quartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. Quartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Montag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freitag | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Montag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freitag | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Montag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freitag | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Montag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freitag | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | vormittags | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vormittags | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | vm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm. | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | vormittags | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vormittags | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | vm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm. | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. Feb. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. Mai. 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. Februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. Mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Mittwoch, 11. Februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sonntag, 29. Mai 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. Feb. 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. Mai. 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. Februar 1987 um 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. Mai 1453 um 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Mittwoch, 11. Februar 1987 um 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sonntag, 29. Mai 1453 um 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------------- | ----------------------- | ---------------------------- |
+| 2006-01-01T00:00:00.000Z | etwa 6 Jahre | etwa 6 Jahre | in etwa 6 Jahren |
+| 2005-01-01T00:00:00.000Z | etwa 5 Jahre | etwa 5 Jahre | in etwa 5 Jahren |
+| 2004-01-01T00:00:00.000Z | etwa 4 Jahre | etwa 4 Jahre | in etwa 4 Jahren |
+| 2003-01-01T00:00:00.000Z | etwa 3 Jahre | etwa 3 Jahre | in etwa 3 Jahren |
+| 2002-01-01T00:00:00.000Z | etwa 2 Jahre | etwa 2 Jahre | in etwa 2 Jahren |
+| 2001-06-01T00:00:00.000Z | mehr als ein Jahr | mehr als ein Jahr | in mehr als einem Jahr |
+| 2001-02-01T00:00:00.000Z | etwa ein Jahr | etwa ein Jahr | in etwa einem Jahr |
+| 2001-01-01T00:00:00.000Z | etwa ein Jahr | etwa ein Jahr | in etwa einem Jahr |
+| 2000-06-01T00:00:00.000Z | 5 Monate | 5 Monate | in 5 Monaten |
+| 2000-03-01T00:00:00.000Z | 2 Monate | 2 Monate | in 2 Monaten |
+| 2000-02-01T00:00:00.000Z | etwa ein Monat | etwa ein Monat | in etwa einem Monat |
+| 2000-01-15T00:00:00.000Z | 14 Tage | 14 Tage | in 14 Tagen |
+| 2000-01-02T00:00:00.000Z | ein Tag | ein Tag | in einem Tag |
+| 2000-01-01T06:00:00.000Z | etwa 6 Stunden | etwa 6 Stunden | in etwa 6 Stunden |
+| 2000-01-01T01:00:00.000Z | etwa eine Stunde | etwa eine Stunde | in etwa einer Stunde |
+| 2000-01-01T00:45:00.000Z | etwa eine Stunde | etwa eine Stunde | in etwa einer Stunde |
+| 2000-01-01T00:30:00.000Z | 30 Minuten | 30 Minuten | in 30 Minuten |
+| 2000-01-01T00:15:00.000Z | 15 Minuten | 15 Minuten | in 15 Minuten |
+| 2000-01-01T00:01:00.000Z | eine Minute | eine Minute | in einer Minute |
+| 2000-01-01T00:00:25.000Z | weniger als eine Minute | eine halbe Minute | in weniger als einer Minute |
+| 2000-01-01T00:00:15.000Z | weniger als eine Minute | weniger als 20 Sekunden | in weniger als einer Minute |
+| 2000-01-01T00:00:05.000Z | weniger als eine Minute | weniger als 10 Sekunden | in weniger als einer Minute |
+| 2000-01-01T00:00:00.000Z | weniger als eine Minute | weniger als 5 Sekunden | vor weniger als einer Minute |
+| 1999-12-31T23:59:55.000Z | weniger als eine Minute | weniger als 10 Sekunden | vor weniger als einer Minute |
+| 1999-12-31T23:59:45.000Z | weniger als eine Minute | weniger als 20 Sekunden | vor weniger als einer Minute |
+| 1999-12-31T23:59:35.000Z | weniger als eine Minute | eine halbe Minute | vor weniger als einer Minute |
+| 1999-12-31T23:59:00.000Z | eine Minute | eine Minute | vor einer Minute |
+| 1999-12-31T23:45:00.000Z | 15 Minuten | 15 Minuten | vor 15 Minuten |
+| 1999-12-31T23:30:00.000Z | 30 Minuten | 30 Minuten | vor 30 Minuten |
+| 1999-12-31T23:15:00.000Z | etwa eine Stunde | etwa eine Stunde | vor etwa einer Stunde |
+| 1999-12-31T23:00:00.000Z | etwa eine Stunde | etwa eine Stunde | vor etwa einer Stunde |
+| 1999-12-31T18:00:00.000Z | etwa 6 Stunden | etwa 6 Stunden | vor etwa 6 Stunden |
+| 1999-12-30T00:00:00.000Z | 2 Tage | 2 Tage | vor 2 Tagen |
+| 1999-12-15T00:00:00.000Z | 17 Tage | 17 Tage | vor 17 Tagen |
+| 1999-12-01T00:00:00.000Z | etwa ein Monat | etwa ein Monat | vor etwa einem Monat |
+| 1999-11-01T00:00:00.000Z | 2 Monate | 2 Monate | vor 2 Monaten |
+| 1999-06-01T00:00:00.000Z | 7 Monate | 7 Monate | vor 7 Monaten |
+| 1999-01-01T00:00:00.000Z | etwa ein Jahr | etwa ein Jahr | vor etwa einem Jahr |
+| 1998-12-01T00:00:00.000Z | etwa ein Jahr | etwa ein Jahr | vor etwa einem Jahr |
+| 1998-06-01T00:00:00.000Z | mehr als ein Jahr | mehr als ein Jahr | vor mehr als einem Jahr |
+| 1998-01-01T00:00:00.000Z | etwa 2 Jahre | etwa 2 Jahre | vor etwa 2 Jahren |
+| 1997-01-01T00:00:00.000Z | etwa 3 Jahre | etwa 3 Jahre | vor etwa 3 Jahren |
+| 1996-01-01T00:00:00.000Z | etwa 4 Jahre | etwa 4 Jahre | vor etwa 4 Jahren |
+| 1995-01-01T00:00:00.000Z | etwa 5 Jahre | etwa 5 Jahre | vor etwa 5 Jahren |
+| 1994-01-01T00:00:00.000Z | etwa 6 Jahre | etwa 6 Jahre | vor etwa 6 Jahren |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 Jahre | in 6 Jahren | 52608 Stunden |
+| 2005-01-01T00:00:00.000Z | 5 Jahre | in 5 Jahren | 43848 Stunden |
+| 2004-01-01T00:00:00.000Z | 4 Jahre | in 4 Jahren | 35064 Stunden |
+| 2003-01-01T00:00:00.000Z | 3 Jahre | in 3 Jahren | 26304 Stunden |
+| 2002-01-01T00:00:00.000Z | 2 Jahre | in 2 Jahren | 17544 Stunden |
+| 2001-06-01T00:00:00.000Z | ein Jahr | in einem Jahr | 12408 Stunden |
+| 2001-02-01T00:00:00.000Z | ein Jahr | in einem Jahr | 9528 Stunden |
+| 2001-01-01T00:00:00.000Z | ein Jahr | in einem Jahr | 8784 Stunden |
+| 2000-06-01T00:00:00.000Z | 5 Monate | in 5 Monaten | 3648 Stunden |
+| 2000-03-01T00:00:00.000Z | 2 Monate | in 2 Monaten | 1440 Stunden |
+| 2000-02-01T00:00:00.000Z | ein Monat | in einem Monat | 744 Stunden |
+| 2000-01-15T00:00:00.000Z | 14 Tage | in 14 Tagen | 336 Stunden |
+| 2000-01-02T00:00:00.000Z | ein Tag | in einem Tag | 24 Stunden |
+| 2000-01-01T06:00:00.000Z | 6 Stunden | in 6 Stunden | 6 Stunden |
+| 2000-01-01T01:00:00.000Z | eine Stunde | in einer Stunde | eine Stunde |
+| 2000-01-01T00:45:00.000Z | 45 Minuten | in 45 Minuten | eine Stunde |
+| 2000-01-01T00:30:00.000Z | 30 Minuten | in 30 Minuten | eine Stunde |
+| 2000-01-01T00:15:00.000Z | 15 Minuten | in 15 Minuten | 0 Stunden |
+| 2000-01-01T00:01:00.000Z | eine Minute | in einer Minute | 0 Stunden |
+| 2000-01-01T00:00:25.000Z | 25 Sekunden | in 25 Sekunden | 0 Stunden |
+| 2000-01-01T00:00:15.000Z | 15 Sekunden | in 15 Sekunden | 0 Stunden |
+| 2000-01-01T00:00:05.000Z | 5 Sekunden | in 5 Sekunden | 0 Stunden |
+| 2000-01-01T00:00:00.000Z | 0 Sekunden | vor 0 Sekunden | 0 Stunden |
+| 1999-12-31T23:59:55.000Z | 5 Sekunden | vor 5 Sekunden | 0 Stunden |
+| 1999-12-31T23:59:45.000Z | 15 Sekunden | vor 15 Sekunden | 0 Stunden |
+| 1999-12-31T23:59:35.000Z | 25 Sekunden | vor 25 Sekunden | 0 Stunden |
+| 1999-12-31T23:59:00.000Z | eine Minute | vor einer Minute | 0 Stunden |
+| 1999-12-31T23:45:00.000Z | 15 Minuten | vor 15 Minuten | 0 Stunden |
+| 1999-12-31T23:30:00.000Z | 30 Minuten | vor 30 Minuten | eine Stunde |
+| 1999-12-31T23:15:00.000Z | 45 Minuten | vor 45 Minuten | eine Stunde |
+| 1999-12-31T23:00:00.000Z | eine Stunde | vor einer Stunde | eine Stunde |
+| 1999-12-31T18:00:00.000Z | 6 Stunden | vor 6 Stunden | 6 Stunden |
+| 1999-12-30T00:00:00.000Z | 2 Tage | vor 2 Tagen | 48 Stunden |
+| 1999-12-15T00:00:00.000Z | 17 Tage | vor 17 Tagen | 408 Stunden |
+| 1999-12-01T00:00:00.000Z | ein Monat | vor einem Monat | 744 Stunden |
+| 1999-11-01T00:00:00.000Z | 2 Monate | vor 2 Monaten | 1464 Stunden |
+| 1999-06-01T00:00:00.000Z | 7 Monate | vor 7 Monaten | 5136 Stunden |
+| 1999-01-01T00:00:00.000Z | ein Jahr | vor einem Jahr | 8760 Stunden |
+| 1998-12-01T00:00:00.000Z | ein Jahr | vor einem Jahr | 9504 Stunden |
+| 1998-06-01T00:00:00.000Z | 2 Jahre | vor 2 Jahren | 13896 Stunden |
+| 1998-01-01T00:00:00.000Z | 2 Jahre | vor 2 Jahren | 17520 Stunden |
+| 1997-01-01T00:00:00.000Z | 3 Jahre | vor 3 Jahren | 26280 Stunden |
+| 1996-01-01T00:00:00.000Z | 4 Jahre | vor 4 Jahren | 35064 Stunden |
+| 1995-01-01T00:00:00.000Z | 5 Jahre | vor 5 Jahren | 43824 Stunden |
+| 1994-01-01T00:00:00.000Z | 6 Jahre | vor 6 Jahren | 52584 Stunden |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | Mittwoch um 00:00 |
+| 2000-01-02T00:00:00.000Z | morgen um 00:00 |
+| 2000-01-01T00:00:00.000Z | heute um 00:00 |
+| 1999-12-31T00:00:00.000Z | gestern um 00:00 |
+| 1999-12-27T00:00:00.000Z | letzten Montag um 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/de/_lib/formatDistance/index.js b/date-fns/src/locale/de/_lib/formatDistance/index.js
new file mode 100644
index 0000000..f1a1fc7
--- /dev/null
+++ b/date-fns/src/locale/de/_lib/formatDistance/index.js
@@ -0,0 +1,198 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ standalone: {
+ one: 'weniger als eine Sekunde',
+ other: 'weniger als {{count}} Sekunden'
+ },
+ withPreposition: {
+ one: 'weniger als einer Sekunde',
+ other: 'weniger als {{count}} Sekunden'
+ }
+ },
+
+ xSeconds: {
+ standalone: {
+ one: 'eine Sekunde',
+ other: '{{count}} Sekunden'
+ },
+ withPreposition: {
+ one: 'einer Sekunde',
+ other: '{{count}} Sekunden'
+ }
+ },
+
+ halfAMinute: {
+ standalone: 'eine halbe Minute',
+ withPreposition: 'einer halben Minute'
+ },
+
+ lessThanXMinutes: {
+ standalone: {
+ one: 'weniger als eine Minute',
+ other: 'weniger als {{count}} Minuten'
+ },
+ withPreposition: {
+ one: 'weniger als einer Minute',
+ other: 'weniger als {{count}} Minuten'
+ }
+ },
+
+ xMinutes: {
+ standalone: {
+ one: 'eine Minute',
+ other: '{{count}} Minuten'
+ },
+ withPreposition: {
+ one: 'einer Minute',
+ other: '{{count}} Minuten'
+ }
+ },
+
+ aboutXHours: {
+ standalone: {
+ one: 'etwa eine Stunde',
+ other: 'etwa {{count}} Stunden'
+ },
+ withPreposition: {
+ one: 'etwa einer Stunde',
+ other: 'etwa {{count}} Stunden'
+ }
+ },
+
+ xHours: {
+ standalone: {
+ one: 'eine Stunde',
+ other: '{{count}} Stunden'
+ },
+ withPreposition: {
+ one: 'einer Stunde',
+ other: '{{count}} Stunden'
+ }
+ },
+
+ xDays: {
+ standalone: {
+ one: 'ein Tag',
+ other: '{{count}} Tage'
+ },
+ withPreposition: {
+ one: 'einem Tag',
+ other: '{{count}} Tagen'
+ }
+ },
+
+ aboutXWeeks: {
+ standalone: {
+ one: 'etwa ein Woche',
+ other: 'etwa {{count}} Wochen'
+ },
+ withPreposition: {
+ one: 'etwa einem Woche',
+ other: 'etwa {{count}} Wochen'
+ }
+ },
+
+ xWeeks: {
+ standalone: {
+ one: 'ein Woche',
+ other: '{{count}} Wochen'
+ },
+ withPreposition: {
+ one: 'einem Woche',
+ other: '{{count}} Wochen'
+ }
+ },
+
+ aboutXMonths: {
+ standalone: {
+ one: 'etwa ein Monat',
+ other: 'etwa {{count}} Monate'
+ },
+ withPreposition: {
+ one: 'etwa einem Monat',
+ other: 'etwa {{count}} Monaten'
+ }
+ },
+
+ xMonths: {
+ standalone: {
+ one: 'ein Monat',
+ other: '{{count}} Monate'
+ },
+ withPreposition: {
+ one: 'einem Monat',
+ other: '{{count}} Monaten'
+ }
+ },
+
+ aboutXYears: {
+ standalone: {
+ one: 'etwa ein Jahr',
+ other: 'etwa {{count}} Jahre'
+ },
+ withPreposition: {
+ one: 'etwa einem Jahr',
+ other: 'etwa {{count}} Jahren'
+ }
+ },
+
+ xYears: {
+ standalone: {
+ one: 'ein Jahr',
+ other: '{{count}} Jahre'
+ },
+ withPreposition: {
+ one: 'einem Jahr',
+ other: '{{count}} Jahren'
+ }
+ },
+
+ overXYears: {
+ standalone: {
+ one: 'mehr als ein Jahr',
+ other: 'mehr als {{count}} Jahre'
+ },
+ withPreposition: {
+ one: 'mehr als einem Jahr',
+ other: 'mehr als {{count}} Jahren'
+ }
+ },
+
+ almostXYears: {
+ standalone: {
+ one: 'fast ein Jahr',
+ other: 'fast {{count}} Jahre'
+ },
+ withPreposition: {
+ one: 'fast einem Jahr',
+ other: 'fast {{count}} Jahren'
+ }
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var usageGroup = options.addSuffix
+ ? formatDistanceLocale[token].withPreposition
+ : formatDistanceLocale[token].standalone
+
+ var result
+ if (typeof usageGroup === 'string') {
+ result = usageGroup
+ } else if (count === 1) {
+ result = usageGroup.one
+ } else {
+ result = usageGroup.other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'in ' + result
+ } else {
+ return 'vor ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/de/_lib/formatLong/index.js b/date-fns/src/locale/de/_lib/formatLong/index.js
new file mode 100644
index 0000000..2cd721e
--- /dev/null
+++ b/date-fns/src/locale/de/_lib/formatLong/index.js
@@ -0,0 +1,42 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008
+var dateFormats = {
+ full: 'EEEE, do MMMM y', // Montag, 7. Januar 2018
+ long: 'do MMMM y', // 7. Januar 2018
+ medium: 'do MMM. y', // 7. Jan. 2018
+ short: 'dd.MM.y' // 07.01.2018
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'um' {{time}}",
+ long: "{{date}} 'um' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/de/_lib/formatRelative/index.js b/date-fns/src/locale/de/_lib/formatRelative/index.js
new file mode 100644
index 0000000..aa46933
--- /dev/null
+++ b/date-fns/src/locale/de/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'letzten' eeee 'um' p",
+ yesterday: "'gestern um' p",
+ today: "'heute um' p",
+ tomorrow: "'morgen um' p",
+ nextWeek: "eeee 'um' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/de/_lib/localize/index.js b/date-fns/src/locale/de/_lib/localize/index.js
new file mode 100644
index 0000000..cdafe27
--- /dev/null
+++ b/date-fns/src/locale/de/_lib/localize/index.js
@@ -0,0 +1,172 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['v.Chr.', 'n.Chr.'],
+ abbreviated: ['v.Chr.', 'n.Chr.'],
+ wide: ['vor Christus', 'nach Christus']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']
+}
+
+// Note: in German, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Jan',
+ 'Feb',
+ 'Mär',
+ 'Apr',
+ 'Mai',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Okt',
+ 'Nov',
+ 'Dez'
+ ],
+ wide: [
+ 'Januar',
+ 'Februar',
+ 'März',
+ 'April',
+ 'Mai',
+ 'Juni',
+ 'Juli',
+ 'August',
+ 'September',
+ 'Oktober',
+ 'November',
+ 'Dezember'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],
+ short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
+ abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],
+ wide: [
+ 'Sonntag',
+ 'Montag',
+ 'Dienstag',
+ 'Mittwoch',
+ 'Donnerstag',
+ 'Freitag',
+ 'Samstag'
+ ]
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/de.html#1881
+var dayPeriodValues = {
+ narrow: {
+ am: 'vm.',
+ pm: 'nm.',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'Morgen',
+ afternoon: 'Nachm.',
+ evening: 'Abend',
+ night: 'Nacht'
+ },
+ abbreviated: {
+ am: 'vorm.',
+ pm: 'nachm.',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'Morgen',
+ afternoon: 'Nachmittag',
+ evening: 'Abend',
+ night: 'Nacht'
+ },
+ wide: {
+ am: 'vormittags',
+ pm: 'nachmittags',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'Morgen',
+ afternoon: 'Nachmittag',
+ evening: 'Abend',
+ night: 'Nacht'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'vm.',
+ pm: 'nm.',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'morgens',
+ afternoon: 'nachm.',
+ evening: 'abends',
+ night: 'nachts'
+ },
+ abbreviated: {
+ am: 'vorm.',
+ pm: 'nachm.',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'morgens',
+ afternoon: 'nachmittags',
+ evening: 'abends',
+ night: 'nachts'
+ },
+ wide: {
+ am: 'vormittags',
+ pm: 'nachmittags',
+ midnight: 'Mitternacht',
+ noon: 'Mittag',
+ morning: 'morgens',
+ afternoon: 'nachmittags',
+ evening: 'abends',
+ night: 'nachts'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/de/_lib/match/index.js b/date-fns/src/locale/de/_lib/match/index.js
new file mode 100644
index 0000000..5f5df3c
--- /dev/null
+++ b/date-fns/src/locale/de/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(\.)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,
+ abbreviated: /^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,
+ wide: /^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i
+}
+var parseEraPatterns = {
+ any: [/^v/i, /^n/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](\.)? Quartal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mär|apr|mai|jun|jul|aug|sep|okt|nov|dez)/i,
+ wide: /^(januar|februar|märz|april|mai|juni|juli|august|september|oktober|november|dezember)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mär/i,
+ /^ap/i,
+ /^mai/i,
+ /^jun/i,
+ /^jul/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smdmf]/i,
+ short: /^(so|mo|di|mi|do|fr|sa)/i,
+ abbreviated: /^(son?|mon?|die?|mit?|don?|fre?|sam?)\.?/i,
+ wide: /^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i
+}
+var parseDayPatterns = {
+ any: [/^so/i, /^mo/i, /^di/i, /^mi/i, /^do/i, /^f/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(vm\.?|nm\.?|Mitternacht|Mittag|morgens|nachm\.?|abends|nachts)/i,
+ abbreviated: /^(vorm\.?|nachm\.?|Mitternacht|Mittag|morgens|nachm\.?|abends|nachts)/i,
+ wide: /^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^v/i,
+ pm: /^n/i,
+ midnight: /^Mitte/i,
+ noon: /^Mitta/i,
+ morning: /morgens/i,
+ afternoon: /nachmittags/i, // will never be matched. Afternoon is matched by `pm`
+ evening: /abends/i,
+ night: /nachts/i // will never be matched. Night is matched by `pm`
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/de/index.d.ts b/date-fns/src/locale/de/index.d.ts
new file mode 100644
index 0000000..ef552da
--- /dev/null
+++ b/date-fns/src/locale/de/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { de } from 'date-fns/locale'
+export default de
diff --git a/date-fns/src/locale/de/index.js b/date-fns/src/locale/de/index.js
new file mode 100644
index 0000000..f2ea556
--- /dev/null
+++ b/date-fns/src/locale/de/index.js
@@ -0,0 +1,32 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary German locale.
+ * @language German
+ * @iso-639-2 deu
+ * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}
+ * @author Asia [@asia-t]{@link https://github.com/asia-t}
+ * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}
+ * @author RomanErnst [@pex]{@link https://github.com/pex}
+ * @author Philipp Keck [@Philipp91]{@link https://github.com/Philipp91}
+ */
+var locale = {
+ code: 'de',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/de/index.js.flow b/date-fns/src/locale/de/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/de/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/de/snapshot.md b/date-fns/src/locale/de/snapshot.md
new file mode 100644
index 0000000..9264122
--- /dev/null
+++ b/date-fns/src/locale/de/snapshot.md
@@ -0,0 +1,304 @@
+# German (de) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. Quartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. Quartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. Quartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. Quartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Montag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freitag | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Montag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freitag | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Montag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freitag | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Montag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freitag | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | vormittags | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vormittags | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | vm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm. | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vorm. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | vormittags | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vormittags | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | vm. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | vm. | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachmittags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | morgens | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nachm. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | abends | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nachts | 2019-02-11T12:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. Feb. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. Mai. 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. Februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. Mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Mittwoch, 11. Februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sonntag, 29. Mai 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. Feb. 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. Mai. 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. Februar 1987 um 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. Mai 1453 um 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Mittwoch, 11. Februar 1987 um 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sonntag, 29. Mai 1453 um 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------------- | ----------------------- | ---------------------------- |
+| 2006-01-01T00:00:00.000Z | etwa 6 Jahre | etwa 6 Jahre | in etwa 6 Jahren |
+| 2005-01-01T00:00:00.000Z | etwa 5 Jahre | etwa 5 Jahre | in etwa 5 Jahren |
+| 2004-01-01T00:00:00.000Z | etwa 4 Jahre | etwa 4 Jahre | in etwa 4 Jahren |
+| 2003-01-01T00:00:00.000Z | etwa 3 Jahre | etwa 3 Jahre | in etwa 3 Jahren |
+| 2002-01-01T00:00:00.000Z | etwa 2 Jahre | etwa 2 Jahre | in etwa 2 Jahren |
+| 2001-06-01T00:00:00.000Z | mehr als ein Jahr | mehr als ein Jahr | in mehr als einem Jahr |
+| 2001-02-01T00:00:00.000Z | etwa ein Jahr | etwa ein Jahr | in etwa einem Jahr |
+| 2001-01-01T00:00:00.000Z | etwa ein Jahr | etwa ein Jahr | in etwa einem Jahr |
+| 2000-06-01T00:00:00.000Z | 5 Monate | 5 Monate | in 5 Monaten |
+| 2000-03-01T00:00:00.000Z | 2 Monate | 2 Monate | in 2 Monaten |
+| 2000-02-01T00:00:00.000Z | etwa ein Monat | etwa ein Monat | in etwa einem Monat |
+| 2000-01-15T00:00:00.000Z | 14 Tage | 14 Tage | in 14 Tagen |
+| 2000-01-02T00:00:00.000Z | ein Tag | ein Tag | in einem Tag |
+| 2000-01-01T06:00:00.000Z | etwa 6 Stunden | etwa 6 Stunden | in etwa 6 Stunden |
+| 2000-01-01T01:00:00.000Z | etwa eine Stunde | etwa eine Stunde | in etwa einer Stunde |
+| 2000-01-01T00:45:00.000Z | etwa eine Stunde | etwa eine Stunde | in etwa einer Stunde |
+| 2000-01-01T00:30:00.000Z | 30 Minuten | 30 Minuten | in 30 Minuten |
+| 2000-01-01T00:15:00.000Z | 15 Minuten | 15 Minuten | in 15 Minuten |
+| 2000-01-01T00:01:00.000Z | eine Minute | eine Minute | in einer Minute |
+| 2000-01-01T00:00:25.000Z | weniger als eine Minute | eine halbe Minute | in weniger als einer Minute |
+| 2000-01-01T00:00:15.000Z | weniger als eine Minute | weniger als 20 Sekunden | in weniger als einer Minute |
+| 2000-01-01T00:00:05.000Z | weniger als eine Minute | weniger als 10 Sekunden | in weniger als einer Minute |
+| 2000-01-01T00:00:00.000Z | weniger als eine Minute | weniger als 5 Sekunden | vor weniger als einer Minute |
+| 1999-12-31T23:59:55.000Z | weniger als eine Minute | weniger als 10 Sekunden | vor weniger als einer Minute |
+| 1999-12-31T23:59:45.000Z | weniger als eine Minute | weniger als 20 Sekunden | vor weniger als einer Minute |
+| 1999-12-31T23:59:35.000Z | weniger als eine Minute | eine halbe Minute | vor weniger als einer Minute |
+| 1999-12-31T23:59:00.000Z | eine Minute | eine Minute | vor einer Minute |
+| 1999-12-31T23:45:00.000Z | 15 Minuten | 15 Minuten | vor 15 Minuten |
+| 1999-12-31T23:30:00.000Z | 30 Minuten | 30 Minuten | vor 30 Minuten |
+| 1999-12-31T23:15:00.000Z | etwa eine Stunde | etwa eine Stunde | vor etwa einer Stunde |
+| 1999-12-31T23:00:00.000Z | etwa eine Stunde | etwa eine Stunde | vor etwa einer Stunde |
+| 1999-12-31T18:00:00.000Z | etwa 6 Stunden | etwa 6 Stunden | vor etwa 6 Stunden |
+| 1999-12-30T00:00:00.000Z | 2 Tage | 2 Tage | vor 2 Tagen |
+| 1999-12-15T00:00:00.000Z | 17 Tage | 17 Tage | vor 17 Tagen |
+| 1999-12-01T00:00:00.000Z | etwa ein Monat | etwa ein Monat | vor etwa einem Monat |
+| 1999-11-01T00:00:00.000Z | 2 Monate | 2 Monate | vor 2 Monaten |
+| 1999-06-01T00:00:00.000Z | 7 Monate | 7 Monate | vor 7 Monaten |
+| 1999-01-01T00:00:00.000Z | etwa ein Jahr | etwa ein Jahr | vor etwa einem Jahr |
+| 1998-12-01T00:00:00.000Z | etwa ein Jahr | etwa ein Jahr | vor etwa einem Jahr |
+| 1998-06-01T00:00:00.000Z | mehr als ein Jahr | mehr als ein Jahr | vor mehr als einem Jahr |
+| 1998-01-01T00:00:00.000Z | etwa 2 Jahre | etwa 2 Jahre | vor etwa 2 Jahren |
+| 1997-01-01T00:00:00.000Z | etwa 3 Jahre | etwa 3 Jahre | vor etwa 3 Jahren |
+| 1996-01-01T00:00:00.000Z | etwa 4 Jahre | etwa 4 Jahre | vor etwa 4 Jahren |
+| 1995-01-01T00:00:00.000Z | etwa 5 Jahre | etwa 5 Jahre | vor etwa 5 Jahren |
+| 1994-01-01T00:00:00.000Z | etwa 6 Jahre | etwa 6 Jahre | vor etwa 6 Jahren |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 Jahre | in 6 Jahren | 52608 Stunden |
+| 2005-01-01T00:00:00.000Z | 5 Jahre | in 5 Jahren | 43848 Stunden |
+| 2004-01-01T00:00:00.000Z | 4 Jahre | in 4 Jahren | 35064 Stunden |
+| 2003-01-01T00:00:00.000Z | 3 Jahre | in 3 Jahren | 26304 Stunden |
+| 2002-01-01T00:00:00.000Z | 2 Jahre | in 2 Jahren | 17544 Stunden |
+| 2001-06-01T00:00:00.000Z | ein Jahr | in einem Jahr | 12408 Stunden |
+| 2001-02-01T00:00:00.000Z | ein Jahr | in einem Jahr | 9528 Stunden |
+| 2001-01-01T00:00:00.000Z | ein Jahr | in einem Jahr | 8784 Stunden |
+| 2000-06-01T00:00:00.000Z | 5 Monate | in 5 Monaten | 3648 Stunden |
+| 2000-03-01T00:00:00.000Z | 2 Monate | in 2 Monaten | 1440 Stunden |
+| 2000-02-01T00:00:00.000Z | ein Monat | in einem Monat | 744 Stunden |
+| 2000-01-15T00:00:00.000Z | 14 Tage | in 14 Tagen | 336 Stunden |
+| 2000-01-02T00:00:00.000Z | ein Tag | in einem Tag | 24 Stunden |
+| 2000-01-01T06:00:00.000Z | 6 Stunden | in 6 Stunden | 6 Stunden |
+| 2000-01-01T01:00:00.000Z | eine Stunde | in einer Stunde | eine Stunde |
+| 2000-01-01T00:45:00.000Z | 45 Minuten | in 45 Minuten | eine Stunde |
+| 2000-01-01T00:30:00.000Z | 30 Minuten | in 30 Minuten | eine Stunde |
+| 2000-01-01T00:15:00.000Z | 15 Minuten | in 15 Minuten | 0 Stunden |
+| 2000-01-01T00:01:00.000Z | eine Minute | in einer Minute | 0 Stunden |
+| 2000-01-01T00:00:25.000Z | 25 Sekunden | in 25 Sekunden | 0 Stunden |
+| 2000-01-01T00:00:15.000Z | 15 Sekunden | in 15 Sekunden | 0 Stunden |
+| 2000-01-01T00:00:05.000Z | 5 Sekunden | in 5 Sekunden | 0 Stunden |
+| 2000-01-01T00:00:00.000Z | 0 Sekunden | vor 0 Sekunden | 0 Stunden |
+| 1999-12-31T23:59:55.000Z | 5 Sekunden | vor 5 Sekunden | 0 Stunden |
+| 1999-12-31T23:59:45.000Z | 15 Sekunden | vor 15 Sekunden | 0 Stunden |
+| 1999-12-31T23:59:35.000Z | 25 Sekunden | vor 25 Sekunden | 0 Stunden |
+| 1999-12-31T23:59:00.000Z | eine Minute | vor einer Minute | 0 Stunden |
+| 1999-12-31T23:45:00.000Z | 15 Minuten | vor 15 Minuten | 0 Stunden |
+| 1999-12-31T23:30:00.000Z | 30 Minuten | vor 30 Minuten | eine Stunde |
+| 1999-12-31T23:15:00.000Z | 45 Minuten | vor 45 Minuten | eine Stunde |
+| 1999-12-31T23:00:00.000Z | eine Stunde | vor einer Stunde | eine Stunde |
+| 1999-12-31T18:00:00.000Z | 6 Stunden | vor 6 Stunden | 6 Stunden |
+| 1999-12-30T00:00:00.000Z | 2 Tage | vor 2 Tagen | 48 Stunden |
+| 1999-12-15T00:00:00.000Z | 17 Tage | vor 17 Tagen | 408 Stunden |
+| 1999-12-01T00:00:00.000Z | ein Monat | vor einem Monat | 744 Stunden |
+| 1999-11-01T00:00:00.000Z | 2 Monate | vor 2 Monaten | 1464 Stunden |
+| 1999-06-01T00:00:00.000Z | 7 Monate | vor 7 Monaten | 5136 Stunden |
+| 1999-01-01T00:00:00.000Z | ein Jahr | vor einem Jahr | 8760 Stunden |
+| 1998-12-01T00:00:00.000Z | ein Jahr | vor einem Jahr | 9504 Stunden |
+| 1998-06-01T00:00:00.000Z | 2 Jahre | vor 2 Jahren | 13896 Stunden |
+| 1998-01-01T00:00:00.000Z | 2 Jahre | vor 2 Jahren | 17520 Stunden |
+| 1997-01-01T00:00:00.000Z | 3 Jahre | vor 3 Jahren | 26280 Stunden |
+| 1996-01-01T00:00:00.000Z | 4 Jahre | vor 4 Jahren | 35064 Stunden |
+| 1995-01-01T00:00:00.000Z | 5 Jahre | vor 5 Jahren | 43824 Stunden |
+| 1994-01-01T00:00:00.000Z | 6 Jahre | vor 6 Jahren | 52584 Stunden |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | Mittwoch um 00:00 |
+| 2000-01-02T00:00:00.000Z | morgen um 00:00 |
+| 2000-01-01T00:00:00.000Z | heute um 00:00 |
+| 1999-12-31T00:00:00.000Z | gestern um 00:00 |
+| 1999-12-27T00:00:00.000Z | letzten Montag um 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/el/_lib/formatDistance/index.js b/date-fns/src/locale/el/_lib/formatDistance/index.js
new file mode 100644
index 0000000..20f9cfc
--- /dev/null
+++ b/date-fns/src/locale/el/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'λιγότερο από ένα δευτερόλεπτο',
+ other: 'λιγότερο από {{count}} δευτερόλεπτα'
+ },
+
+ xSeconds: {
+ one: '1 δευτερόλεπτο',
+ other: '{{count}} δευτερόλεπτα'
+ },
+
+ halfAMinute: 'μισό λεπτό',
+
+ lessThanXMinutes: {
+ one: 'λιγότερο από ένα λεπτό',
+ other: 'λιγότερο από {{count}} λεπτά'
+ },
+
+ xMinutes: {
+ one: '1 λεπτό',
+ other: '{{count}} λεπτά'
+ },
+
+ aboutXHours: {
+ one: 'περίπου 1 ώρα',
+ other: 'περίπου {{count}} ώρες'
+ },
+
+ xHours: {
+ one: '1 ώρα',
+ other: '{{count}} ώρες'
+ },
+
+ xDays: {
+ one: '1 ημέρα',
+ other: '{{count}} ημέρες'
+ },
+
+ aboutXWeeks: {
+ one: 'περίπου 1 εβδομάδα',
+ other: 'περίπου {{count}} εβδομάδες'
+ },
+
+ xWeeks: {
+ one: '1 εβδομάδα',
+ other: '{{count}} εβδομάδες'
+ },
+
+ aboutXMonths: {
+ one: 'περίπου 1 μήνας',
+ other: 'περίπου {{count}} μήνες'
+ },
+
+ xMonths: {
+ one: '1 μήνας',
+ other: '{{count}} μήνες'
+ },
+
+ aboutXYears: {
+ one: 'περίπου 1 χρόνο',
+ other: 'περίπου {{count}} χρόνια'
+ },
+
+ xYears: {
+ one: '1 χρόνο',
+ other: '{{count}} χρόνια'
+ },
+
+ overXYears: {
+ one: 'πάνω από 1 χρόνο',
+ other: 'πάνω από {{count}} χρόνια'
+ },
+
+ almostXYears: {
+ one: 'περίπου 1 χρόνο',
+ other: 'περίπου {{count}} χρόνια'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'σε ' + result
+ } else {
+ return result + ' πριν'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/el/_lib/formatLong/index.js b/date-fns/src/locale/el/_lib/formatLong/index.js
new file mode 100644
index 0000000..b5237ba
--- /dev/null
+++ b/date-fns/src/locale/el/_lib/formatLong/index.js
@@ -0,0 +1,39 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM y',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'd/M/yy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} - {{time}}',
+ long: '{{date}} - {{time}}',
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/el/_lib/formatRelative/index.js b/date-fns/src/locale/el/_lib/formatRelative/index.js
new file mode 100644
index 0000000..6a1d8fe
--- /dev/null
+++ b/date-fns/src/locale/el/_lib/formatRelative/index.js
@@ -0,0 +1,23 @@
+var formatRelativeLocale = {
+ lastWeek: function(date) {
+ switch (date.getUTCDay()) {
+ case 6: //Σάββατο
+ return "'το προηγούμενο' eeee 'στις' p"
+ default:
+ return "'την προηγούμενη' eeee 'στις' p"
+ }
+ },
+ yesterday: "'χθες στις' p",
+ today: "'σήμερα στις' p",
+ tomorrow: "'αύριο στις' p",
+ nextWeek: "eeee 'στις' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') return format(date, baseDate, options)
+
+ return format
+}
diff --git a/date-fns/src/locale/el/_lib/localize/index.js b/date-fns/src/locale/el/_lib/localize/index.js
new file mode 100644
index 0000000..1b335fc
--- /dev/null
+++ b/date-fns/src/locale/el/_lib/localize/index.js
@@ -0,0 +1,178 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['πΧ', 'μΧ'],
+ abbreviated: ['π.Χ.', 'μ.Χ.'],
+ wide: ['προ Χριστού', 'μετά Χριστόν']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Τ1', 'Τ2', 'Τ3', 'Τ4'],
+ wide: ['1ο τρίμηνο', '2ο τρίμηνο', '3ο τρίμηνο', '4ο τρίμηνο']
+}
+
+var monthValues = {
+ narrow: ['Ι', 'Φ', 'Μ', 'Α', 'Μ', 'Ι', 'Ι', 'Α', 'Σ', 'Ο', 'Ν', 'Δ'],
+ abbreviated: [
+ 'Ιαν',
+ 'Φεβ',
+ 'Μάρ',
+ 'Απρ',
+ 'Μάι',
+ 'Ιούν',
+ 'Ιούλ',
+ 'Αύγ',
+ 'Σεπ',
+ 'Οκτ',
+ 'Νοέ',
+ 'Δεκ'
+ ],
+ wide: [
+ 'Ιανουάριος',
+ 'Φεβρουάριος',
+ 'Μάρτιος',
+ 'Απρίλιος',
+ 'Μάιος',
+ 'Ιούνιος',
+ 'Ιούλιος',
+ 'Αύγουστος',
+ 'Σεπτέμβριος',
+ 'Οκτώβριος',
+ 'Νοέμβριος',
+ 'Δεκέμβριος'
+ ]
+}
+
+var formattingMonthValues = {
+ narrow: ['Ι', 'Φ', 'Μ', 'Α', 'Μ', 'Ι', 'Ι', 'Α', 'Σ', 'Ο', 'Ν', 'Δ'],
+ abbreviated: [
+ 'Ιαν',
+ 'Φεβ',
+ 'Μαρ',
+ 'Απρ',
+ 'Μαΐ',
+ 'Ιουν',
+ 'Ιουλ',
+ 'Αυγ',
+ 'Σεπ',
+ 'Οκτ',
+ 'Νοε',
+ 'Δεκ'
+ ],
+ wide: [
+ 'Ιανουαρίου',
+ 'Φεβρουαρίου',
+ 'Μαρτίου',
+ 'Απριλίου',
+ 'Μαΐου',
+ 'Ιουνίου',
+ 'Ιουλίου',
+ 'Αυγούστου',
+ 'Σεπτεμβρίου',
+ 'Οκτωβρίου',
+ 'Νοεμβρίου',
+ 'Δεκεμβρίου'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Κ', 'Δ', 'T', 'Τ', 'Π', 'Π', 'Σ'],
+ short: ['Κυ', 'Δε', 'Τρ', 'Τε', 'Πέ', 'Πα', 'Σά'],
+ abbreviated: ['Κυρ', 'Δευ', 'Τρί', 'Τετ', 'Πέμ', 'Παρ', 'Σάβ'],
+ wide: [
+ 'Κυριακή',
+ 'Δευτέρα',
+ 'Τρίτη',
+ 'Τετάρτη',
+ 'Πέμπτη',
+ 'Παρασκευή',
+ 'Σάββατο'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'πμ',
+ pm: 'μμ',
+ midnight: 'μεσάνυχτα',
+ noon: 'μεσημέρι',
+ morning: 'πρωί',
+ afternoon: 'απόγευμα',
+ evening: 'βράδυ',
+ night: 'νύχτα'
+ },
+ abbreviated: {
+ am: 'π.μ.',
+ pm: 'μ.μ.',
+ midnight: 'μεσάνυχτα',
+ noon: 'μεσημέρι',
+ morning: 'πρωί',
+ afternoon: 'απόγευμα',
+ evening: 'βράδυ',
+ night: 'νύχτα'
+ },
+ wide: {
+ am: 'π.μ.',
+ pm: 'μ.μ.',
+ midnight: 'μεσάνυχτα',
+ noon: 'μεσημέρι',
+ morning: 'πρωί',
+ afternoon: 'απόγευμα',
+ evening: 'βράδυ',
+ night: 'νύχτα'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var suffix
+
+ if (unit === 'year' || unit === 'month') {
+ suffix = 'ος'
+ } else if (
+ unit === 'week' ||
+ unit === 'dayOfYear' ||
+ unit === 'day' ||
+ unit === 'hour' ||
+ unit === 'date'
+ ) {
+ suffix = 'η'
+ } else {
+ suffix = 'ο'
+ }
+
+ return dirtyNumber + suffix
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/el/_lib/match/index.js b/date-fns/src/locale/el/_lib/match/index.js
new file mode 100644
index 0000000..32d646e
--- /dev/null
+++ b/date-fns/src/locale/el/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(ος|η|ο)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(πΧ|μΧ)/i,
+ abbreviated: /^(π\.?\s?χ\.?|π\.?\s?κ\.?\s?χ\.?|μ\.?\s?χ\.?|κ\.?\s?χ\.?)/i,
+ wide: /^(προ Χριστο(ύ|υ)|πριν απ(ό|ο) την Κοιν(ή|η) Χρονολογ(ί|ι)α|μετ(ά|α) Χριστ(ό|ο)ν|Κοιν(ή|η) Χρονολογ(ί|ι)α)/i
+}
+var parseEraPatterns = {
+ any: [/^π/i, /^(μ|κ)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^τ[1234]/i,
+ wide: /^[1234]ο? τρ(ί|ι)μηνο/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[ιφμαμιιασονδ]/i,
+ abbreviated: /^(ιαν|φεβ|μ[άα]ρ|απρ|μ[άα][ιΐ]|ιο[ύυ]ν|ιο[ύυ]λ|α[ύυ]γ|σεπ|οκτ|νο[έε]|δεκ)/i,
+ wide: /^(μ[άα][ιΐ]|α[ύυ]γο[υύ]στ)(ος|ου)|(ιανου[άα]ρ|φεβρου[άα]ρ|μ[άα]ρτ|απρ[ίι]λ|ιο[ύυ]ν|ιο[ύυ]λ|σεπτ[έε]μβρ|οκτ[ώω]βρ|νο[έε]μβρ|δεκ[έε]μβρ)(ιος|ίου)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^ι/i,
+ /^φ/i,
+ /^μ/i,
+ /^α/i,
+ /^μ/i,
+ /^ι/i,
+ /^ι/i,
+ /^α/i,
+ /^σ/i,
+ /^ο/i,
+ /^ν/i,
+ /^δ/i
+ ],
+ any: [
+ /^ια/i,
+ /^φ/i,
+ /^μ[άα]ρ/i,
+ /^απ/i,
+ /^μ[άα][ιΐ]/i,
+ /^ιο[ύυ]ν/i,
+ /^ιο[ύυ]λ/i,
+ /^α[ύυ]/i,
+ /^σ/i,
+ /^ο/i,
+ /^ν/i,
+ /^δ/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[κδτπσ]/i,
+ short: /^(κυ|δε|τρ|τε|π[εέ]|π[αά]|σ[αά])/i,
+ abbreviated: /^(κυρ|δευ|τρι|τετ|πεμ|παρ|σαβ)/i,
+ wide: /^(κυριακ(ή|η)|δευτ(έ|ε)ρα|τρ(ί|ι)τη|τετ(ά|α)ρτη|π(έ|ε)μπτη|παρασκευ(ή|η)|σ(ά|α)ββατο)/i
+}
+var parseDayPatterns = {
+ narrow: [/^κ/i, /^δ/i, /^τ/i, /^τ/i, /^π/i, /^π/i, /^σ/i],
+ any: [/^κ/i, /^δ/i, /^τρ/i, /^τε/i, /^π[εέ]/i, /^π[αά]/i, /^σ/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(πμ|μμ|μεσ(ά|α)νυχτα|μεσημ(έ|ε)ρι|πρω(ί|ι)|απ(ό|ο)γευμα|βρ(ά|α)δυ|ν(ύ|υ)χτα)/i,
+ any: /^([πμ]\.?\s?μ\.?|μεσ(ά|α)νυχτα|μεσημ(έ|ε)ρι|πρω(ί|ι)|απ(ό|ο)γευμα|βρ(ά|α)δυ|ν(ύ|υ)χτα)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^πμ|π\.\s?μ\./i,
+ pm: /^μμ|μ\.\s?μ\./i,
+ midnight: /^μεσάν/i,
+ noon: /^μεσημ(έ|ε)/i,
+ morning: /πρω(ί|ι)/i,
+ afternoon: /απ(ό|ο)γευμα/i,
+ evening: /βρ(ά|α)δυ/i,
+ night: /ν(ύ|υ)χτα/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/el/index.d.ts b/date-fns/src/locale/el/index.d.ts
new file mode 100644
index 0000000..551ad06
--- /dev/null
+++ b/date-fns/src/locale/el/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { el } from 'date-fns/locale'
+export default el
diff --git a/date-fns/src/locale/el/index.js b/date-fns/src/locale/el/index.js
new file mode 100644
index 0000000..75d70aa
--- /dev/null
+++ b/date-fns/src/locale/el/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Greek locale.
+ * @language Greek
+ * @iso-639-2 ell
+ * @author Fanis Katsimpas [@fanixk]{@link https://github.com/fanixk}
+ * @author Theodoros Orfanidis [@teoulas]{@link https://github.com/teoulas}
+ */
+var locale = {
+ code: 'el',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/el/index.js.flow b/date-fns/src/locale/el/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/el/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/el/snapshot.md b/date-fns/src/locale/el/snapshot.md
new file mode 100644
index 0000000..c9f1b47
--- /dev/null
+++ b/date-fns/src/locale/el/snapshot.md
@@ -0,0 +1,304 @@
+# Greek (el) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987ος | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5ος | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987ος | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4ος | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1ο | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ο | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Τ1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Τ2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1ο τρίμηνο | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ο τρίμηνο | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1ο | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ο | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Τ1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Τ2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1ο τρίμηνο | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ο τρίμηνο | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2ος | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ος | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Φεβ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Ιουλ | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Φεβρουαρίου | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Ιουλίου | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | Φ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Ι | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2ος | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ος | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Φεβ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Ιούλ | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Φεβρουάριος | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Ιούλιος | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | Φ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Ι | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1η | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48η | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1η | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48η | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11η | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28η | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42η | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365η | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Δευ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρ | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Δευ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρ | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Δευ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρ | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Δευτέρα | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρασκευή | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | Δ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Π | 2019-02-14T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Δε | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Πα | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1η | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5η | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Δευ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρ | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Δευτέρα | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρασκευή | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | Δ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Π | 2019-02-14T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Δε | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Πα | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1η | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5η | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Δευ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρ | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Δευτέρα | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρασκευή | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | Δ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Π | 2019-02-14T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Δε | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Πα | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1η | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5η | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Δευ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρ | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Δευτέρα | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Παρασκευή | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | Δ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Π | 2019-02-14T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Δε | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Πα | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | πμ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μμ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μμ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | πμ | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μ.μ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | π.μ. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | πμ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | μμ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | μμ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | πμ | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | πρωί | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | απόγευμα | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | βράδυ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | νύχτα | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | πρωί | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | απόγευμα | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | βράδυ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | νύχτα | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | πρωί | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | απόγευμα | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | βράδυ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | νύχτα | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | πρωί | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | απόγευμα | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | βράδυ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | νύχτα | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | πρωί | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | απόγευμα | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | βράδυ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | νύχτα | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11η | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11η | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11η | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23η | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11η | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11η | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11η | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23η | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1ο | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55ο | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1ο | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55ο | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/2/87 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/53 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Φεβ 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Μαΐ 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 Φεβρουαρίου 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Μαΐου 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Τετάρτη, 11 Φεβρουαρίου 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Κυριακή, 29 Μαΐου 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 μ.μ. | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 μ.μ. | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 μ.μ. | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 μ.μ. | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 μ.μ. GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 μ.μ. GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 μ.μ. GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 μ.μ. GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/2/87, 12:13 μ.μ. | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/53, 11:59 μ.μ. | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Φεβ 1987, 12:13:14 μ.μ. | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Μαΐ 1453, 11:59:59 μ.μ. | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 Φεβρουαρίου 1987 - 12:13:14 μ.μ. GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 Μαΐου 1453 - 11:59:59 μ.μ. GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Τετάρτη, 11 Φεβρουαρίου 1987 - 12:13:14 μ.μ. GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Κυριακή, 29 Μαΐου 1453 - 11:59:59 μ.μ. GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------------- | ---------------------------- | --------------------------- |
+| 2006-01-01T00:00:00.000Z | περίπου 6 χρόνια | περίπου 6 χρόνια | σε περίπου 6 χρόνια |
+| 2005-01-01T00:00:00.000Z | περίπου 5 χρόνια | περίπου 5 χρόνια | σε περίπου 5 χρόνια |
+| 2004-01-01T00:00:00.000Z | περίπου 4 χρόνια | περίπου 4 χρόνια | σε περίπου 4 χρόνια |
+| 2003-01-01T00:00:00.000Z | περίπου 3 χρόνια | περίπου 3 χρόνια | σε περίπου 3 χρόνια |
+| 2002-01-01T00:00:00.000Z | περίπου 2 χρόνια | περίπου 2 χρόνια | σε περίπου 2 χρόνια |
+| 2001-06-01T00:00:00.000Z | πάνω από 1 χρόνο | πάνω από 1 χρόνο | σε πάνω από 1 χρόνο |
+| 2001-02-01T00:00:00.000Z | περίπου 1 χρόνο | περίπου 1 χρόνο | σε περίπου 1 χρόνο |
+| 2001-01-01T00:00:00.000Z | περίπου 1 χρόνο | περίπου 1 χρόνο | σε περίπου 1 χρόνο |
+| 2000-06-01T00:00:00.000Z | 5 μήνες | 5 μήνες | σε 5 μήνες |
+| 2000-03-01T00:00:00.000Z | 2 μήνες | 2 μήνες | σε 2 μήνες |
+| 2000-02-01T00:00:00.000Z | περίπου 1 μήνας | περίπου 1 μήνας | σε περίπου 1 μήνας |
+| 2000-01-15T00:00:00.000Z | 14 ημέρες | 14 ημέρες | σε 14 ημέρες |
+| 2000-01-02T00:00:00.000Z | 1 ημέρα | 1 ημέρα | σε 1 ημέρα |
+| 2000-01-01T06:00:00.000Z | περίπου 6 ώρες | περίπου 6 ώρες | σε περίπου 6 ώρες |
+| 2000-01-01T01:00:00.000Z | περίπου 1 ώρα | περίπου 1 ώρα | σε περίπου 1 ώρα |
+| 2000-01-01T00:45:00.000Z | περίπου 1 ώρα | περίπου 1 ώρα | σε περίπου 1 ώρα |
+| 2000-01-01T00:30:00.000Z | 30 λεπτά | 30 λεπτά | σε 30 λεπτά |
+| 2000-01-01T00:15:00.000Z | 15 λεπτά | 15 λεπτά | σε 15 λεπτά |
+| 2000-01-01T00:01:00.000Z | 1 λεπτό | 1 λεπτό | σε 1 λεπτό |
+| 2000-01-01T00:00:25.000Z | λιγότερο από ένα λεπτό | μισό λεπτό | σε λιγότερο από ένα λεπτό |
+| 2000-01-01T00:00:15.000Z | λιγότερο από ένα λεπτό | λιγότερο από 20 δευτερόλεπτα | σε λιγότερο από ένα λεπτό |
+| 2000-01-01T00:00:05.000Z | λιγότερο από ένα λεπτό | λιγότερο από 10 δευτερόλεπτα | σε λιγότερο από ένα λεπτό |
+| 2000-01-01T00:00:00.000Z | λιγότερο από ένα λεπτό | λιγότερο από 5 δευτερόλεπτα | λιγότερο από ένα λεπτό πριν |
+| 1999-12-31T23:59:55.000Z | λιγότερο από ένα λεπτό | λιγότερο από 10 δευτερόλεπτα | λιγότερο από ένα λεπτό πριν |
+| 1999-12-31T23:59:45.000Z | λιγότερο από ένα λεπτό | λιγότερο από 20 δευτερόλεπτα | λιγότερο από ένα λεπτό πριν |
+| 1999-12-31T23:59:35.000Z | λιγότερο από ένα λεπτό | μισό λεπτό | λιγότερο από ένα λεπτό πριν |
+| 1999-12-31T23:59:00.000Z | 1 λεπτό | 1 λεπτό | 1 λεπτό πριν |
+| 1999-12-31T23:45:00.000Z | 15 λεπτά | 15 λεπτά | 15 λεπτά πριν |
+| 1999-12-31T23:30:00.000Z | 30 λεπτά | 30 λεπτά | 30 λεπτά πριν |
+| 1999-12-31T23:15:00.000Z | περίπου 1 ώρα | περίπου 1 ώρα | περίπου 1 ώρα πριν |
+| 1999-12-31T23:00:00.000Z | περίπου 1 ώρα | περίπου 1 ώρα | περίπου 1 ώρα πριν |
+| 1999-12-31T18:00:00.000Z | περίπου 6 ώρες | περίπου 6 ώρες | περίπου 6 ώρες πριν |
+| 1999-12-30T00:00:00.000Z | 2 ημέρες | 2 ημέρες | 2 ημέρες πριν |
+| 1999-12-15T00:00:00.000Z | 17 ημέρες | 17 ημέρες | 17 ημέρες πριν |
+| 1999-12-01T00:00:00.000Z | περίπου 1 μήνας | περίπου 1 μήνας | περίπου 1 μήνας πριν |
+| 1999-11-01T00:00:00.000Z | 2 μήνες | 2 μήνες | 2 μήνες πριν |
+| 1999-06-01T00:00:00.000Z | 7 μήνες | 7 μήνες | 7 μήνες πριν |
+| 1999-01-01T00:00:00.000Z | περίπου 1 χρόνο | περίπου 1 χρόνο | περίπου 1 χρόνο πριν |
+| 1998-12-01T00:00:00.000Z | περίπου 1 χρόνο | περίπου 1 χρόνο | περίπου 1 χρόνο πριν |
+| 1998-06-01T00:00:00.000Z | πάνω από 1 χρόνο | πάνω από 1 χρόνο | πάνω από 1 χρόνο πριν |
+| 1998-01-01T00:00:00.000Z | περίπου 2 χρόνια | περίπου 2 χρόνια | περίπου 2 χρόνια πριν |
+| 1997-01-01T00:00:00.000Z | περίπου 3 χρόνια | περίπου 3 χρόνια | περίπου 3 χρόνια πριν |
+| 1996-01-01T00:00:00.000Z | περίπου 4 χρόνια | περίπου 4 χρόνια | περίπου 4 χρόνια πριν |
+| 1995-01-01T00:00:00.000Z | περίπου 5 χρόνια | περίπου 5 χρόνια | περίπου 5 χρόνια πριν |
+| 1994-01-01T00:00:00.000Z | περίπου 6 χρόνια | περίπου 6 χρόνια | περίπου 6 χρόνια πριν |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------------- | -------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 χρόνια | σε 6 χρόνια | 52608 ώρες |
+| 2005-01-01T00:00:00.000Z | 5 χρόνια | σε 5 χρόνια | 43848 ώρες |
+| 2004-01-01T00:00:00.000Z | 4 χρόνια | σε 4 χρόνια | 35064 ώρες |
+| 2003-01-01T00:00:00.000Z | 3 χρόνια | σε 3 χρόνια | 26304 ώρες |
+| 2002-01-01T00:00:00.000Z | 2 χρόνια | σε 2 χρόνια | 17544 ώρες |
+| 2001-06-01T00:00:00.000Z | 1 χρόνο | σε 1 χρόνο | 12408 ώρες |
+| 2001-02-01T00:00:00.000Z | 1 χρόνο | σε 1 χρόνο | 9528 ώρες |
+| 2001-01-01T00:00:00.000Z | 1 χρόνο | σε 1 χρόνο | 8784 ώρες |
+| 2000-06-01T00:00:00.000Z | 5 μήνες | σε 5 μήνες | 3648 ώρες |
+| 2000-03-01T00:00:00.000Z | 2 μήνες | σε 2 μήνες | 1440 ώρες |
+| 2000-02-01T00:00:00.000Z | 1 μήνας | σε 1 μήνας | 744 ώρες |
+| 2000-01-15T00:00:00.000Z | 14 ημέρες | σε 14 ημέρες | 336 ώρες |
+| 2000-01-02T00:00:00.000Z | 1 ημέρα | σε 1 ημέρα | 24 ώρες |
+| 2000-01-01T06:00:00.000Z | 6 ώρες | σε 6 ώρες | 6 ώρες |
+| 2000-01-01T01:00:00.000Z | 1 ώρα | σε 1 ώρα | 1 ώρα |
+| 2000-01-01T00:45:00.000Z | 45 λεπτά | σε 45 λεπτά | 1 ώρα |
+| 2000-01-01T00:30:00.000Z | 30 λεπτά | σε 30 λεπτά | 1 ώρα |
+| 2000-01-01T00:15:00.000Z | 15 λεπτά | σε 15 λεπτά | 0 ώρες |
+| 2000-01-01T00:01:00.000Z | 1 λεπτό | σε 1 λεπτό | 0 ώρες |
+| 2000-01-01T00:00:25.000Z | 25 δευτερόλεπτα | σε 25 δευτερόλεπτα | 0 ώρες |
+| 2000-01-01T00:00:15.000Z | 15 δευτερόλεπτα | σε 15 δευτερόλεπτα | 0 ώρες |
+| 2000-01-01T00:00:05.000Z | 5 δευτερόλεπτα | σε 5 δευτερόλεπτα | 0 ώρες |
+| 2000-01-01T00:00:00.000Z | 0 δευτερόλεπτα | 0 δευτερόλεπτα πριν | 0 ώρες |
+| 1999-12-31T23:59:55.000Z | 5 δευτερόλεπτα | 5 δευτερόλεπτα πριν | 0 ώρες |
+| 1999-12-31T23:59:45.000Z | 15 δευτερόλεπτα | 15 δευτερόλεπτα πριν | 0 ώρες |
+| 1999-12-31T23:59:35.000Z | 25 δευτερόλεπτα | 25 δευτερόλεπτα πριν | 0 ώρες |
+| 1999-12-31T23:59:00.000Z | 1 λεπτό | 1 λεπτό πριν | 0 ώρες |
+| 1999-12-31T23:45:00.000Z | 15 λεπτά | 15 λεπτά πριν | 0 ώρες |
+| 1999-12-31T23:30:00.000Z | 30 λεπτά | 30 λεπτά πριν | 1 ώρα |
+| 1999-12-31T23:15:00.000Z | 45 λεπτά | 45 λεπτά πριν | 1 ώρα |
+| 1999-12-31T23:00:00.000Z | 1 ώρα | 1 ώρα πριν | 1 ώρα |
+| 1999-12-31T18:00:00.000Z | 6 ώρες | 6 ώρες πριν | 6 ώρες |
+| 1999-12-30T00:00:00.000Z | 2 ημέρες | 2 ημέρες πριν | 48 ώρες |
+| 1999-12-15T00:00:00.000Z | 17 ημέρες | 17 ημέρες πριν | 408 ώρες |
+| 1999-12-01T00:00:00.000Z | 1 μήνας | 1 μήνας πριν | 744 ώρες |
+| 1999-11-01T00:00:00.000Z | 2 μήνες | 2 μήνες πριν | 1464 ώρες |
+| 1999-06-01T00:00:00.000Z | 7 μήνες | 7 μήνες πριν | 5136 ώρες |
+| 1999-01-01T00:00:00.000Z | 1 χρόνο | 1 χρόνο πριν | 8760 ώρες |
+| 1998-12-01T00:00:00.000Z | 1 χρόνο | 1 χρόνο πριν | 9504 ώρες |
+| 1998-06-01T00:00:00.000Z | 2 χρόνια | 2 χρόνια πριν | 13896 ώρες |
+| 1998-01-01T00:00:00.000Z | 2 χρόνια | 2 χρόνια πριν | 17520 ώρες |
+| 1997-01-01T00:00:00.000Z | 3 χρόνια | 3 χρόνια πριν | 26280 ώρες |
+| 1996-01-01T00:00:00.000Z | 4 χρόνια | 4 χρόνια πριν | 35064 ώρες |
+| 1995-01-01T00:00:00.000Z | 5 χρόνια | 5 χρόνια πριν | 43824 ώρες |
+| 1994-01-01T00:00:00.000Z | 6 χρόνια | 6 χρόνια πριν | 52584 ώρες |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | --------------------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/1/00 |
+| 2000-01-05T00:00:00.000Z | Τετάρτη στις 12:00 π.μ. |
+| 2000-01-02T00:00:00.000Z | αύριο στις 12:00 π.μ. |
+| 2000-01-01T00:00:00.000Z | σήμερα στις 12:00 π.μ. |
+| 1999-12-31T00:00:00.000Z | χθες στις 12:00 π.μ. |
+| 1999-12-27T00:00:00.000Z | την προηγούμενη Δευτέρα στις 12:00 π.μ. |
+| 1999-12-21T00:00:00.000Z | 21/12/99 |
diff --git a/date-fns/src/locale/en-AU/_lib/formatLong/index.js b/date-fns/src/locale/en-AU/_lib/formatLong/index.js
new file mode 100644
index 0000000..8e674cd
--- /dev/null
+++ b/date-fns/src/locale/en-AU/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'at' {{time}}",
+ long: "{{date}} 'at' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/en-AU/index.d.ts b/date-fns/src/locale/en-AU/index.d.ts
new file mode 100644
index 0000000..c1343a6
--- /dev/null
+++ b/date-fns/src/locale/en-AU/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { enAU } from 'date-fns/locale'
+export default enAU
diff --git a/date-fns/src/locale/en-AU/index.js b/date-fns/src/locale/en-AU/index.js
new file mode 100644
index 0000000..112306a
--- /dev/null
+++ b/date-fns/src/locale/en-AU/index.js
@@ -0,0 +1,28 @@
+import formatDistance from '../en-US/_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from '../en-US/_lib/formatRelative/index'
+import localize from '../en-US/_lib/localize/index'
+import match from '../en-US/_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary English locale (Australia).
+ * @language English
+ * @iso-639-2 eng
+ * @author Julien Malige [@JulienMalige]{@link https://github.com/JulienMalige}
+ */
+var locale = {
+ code: 'en-AU',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/en-AU/index.js.flow b/date-fns/src/locale/en-AU/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/en-AU/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/en-AU/snapshot.md b/date-fns/src/locale/en-AU/snapshot.md
new file mode 100644
index 0000000..75c0ff5
--- /dev/null
+++ b/date-fns/src/locale/en-AU/snapshot.md
@@ -0,0 +1,304 @@
+# English (en-AU) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987th | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987th | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4th | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11th | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28th | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365th | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1st | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55th | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1st | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55th | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 February 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Feb 1987, 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453, 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 February 1987 at 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 at 11:59:59 PM GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 at 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 at 11:59:59 PM GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | about 6 years | about 6 years | in about 6 years |
+| 2005-01-01T00:00:00.000Z | about 5 years | about 5 years | in about 5 years |
+| 2004-01-01T00:00:00.000Z | about 4 years | about 4 years | in about 4 years |
+| 2003-01-01T00:00:00.000Z | about 3 years | about 3 years | in about 3 years |
+| 2002-01-01T00:00:00.000Z | about 2 years | about 2 years | in about 2 years |
+| 2001-06-01T00:00:00.000Z | over 1 year | over 1 year | in over 1 year |
+| 2001-02-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2001-01-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2000-06-01T00:00:00.000Z | 5 months | 5 months | in 5 months |
+| 2000-03-01T00:00:00.000Z | 2 months | 2 months | in 2 months |
+| 2000-02-01T00:00:00.000Z | about 1 month | about 1 month | in about 1 month |
+| 2000-01-15T00:00:00.000Z | 14 days | 14 days | in 14 days |
+| 2000-01-02T00:00:00.000Z | 1 day | 1 day | in 1 day |
+| 2000-01-01T06:00:00.000Z | about 6 hours | about 6 hours | in about 6 hours |
+| 2000-01-01T01:00:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:45:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | in 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | in 15 minutes |
+| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | in 1 minute |
+| 2000-01-01T00:00:25.000Z | less than a minute | half a minute | in less than a minute |
+| 2000-01-01T00:00:15.000Z | less than a minute | less than 20 seconds | in less than a minute |
+| 2000-01-01T00:00:05.000Z | less than a minute | less than 10 seconds | in less than a minute |
+| 2000-01-01T00:00:00.000Z | less than a minute | less than 5 seconds | less than a minute ago |
+| 1999-12-31T23:59:55.000Z | less than a minute | less than 10 seconds | less than a minute ago |
+| 1999-12-31T23:59:45.000Z | less than a minute | less than 20 seconds | less than a minute ago |
+| 1999-12-31T23:59:35.000Z | less than a minute | half a minute | less than a minute ago |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | 1 minute ago |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | 15 minutes ago |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | 30 minutes ago |
+| 1999-12-31T23:15:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T23:00:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T18:00:00.000Z | about 6 hours | about 6 hours | about 6 hours ago |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days | 2 days ago |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days | 17 days ago |
+| 1999-12-01T00:00:00.000Z | about 1 month | about 1 month | about 1 month ago |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months | 2 months ago |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months | 7 months ago |
+| 1999-01-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-12-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-06-01T00:00:00.000Z | over 1 year | over 1 year | over 1 year ago |
+| 1998-01-01T00:00:00.000Z | about 2 years | about 2 years | about 2 years ago |
+| 1997-01-01T00:00:00.000Z | about 3 years | about 3 years | about 3 years ago |
+| 1996-01-01T00:00:00.000Z | about 4 years | about 4 years | about 4 years ago |
+| 1995-01-01T00:00:00.000Z | about 5 years | about 5 years | about 5 years ago |
+| 1994-01-01T00:00:00.000Z | about 6 years | about 6 years | about 6 years ago |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 years | in 6 years | 52608 hours |
+| 2005-01-01T00:00:00.000Z | 5 years | in 5 years | 43848 hours |
+| 2004-01-01T00:00:00.000Z | 4 years | in 4 years | 35064 hours |
+| 2003-01-01T00:00:00.000Z | 3 years | in 3 years | 26304 hours |
+| 2002-01-01T00:00:00.000Z | 2 years | in 2 years | 17544 hours |
+| 2001-06-01T00:00:00.000Z | 1 year | in 1 year | 12408 hours |
+| 2001-02-01T00:00:00.000Z | 1 year | in 1 year | 9528 hours |
+| 2001-01-01T00:00:00.000Z | 1 year | in 1 year | 8784 hours |
+| 2000-06-01T00:00:00.000Z | 5 months | in 5 months | 3648 hours |
+| 2000-03-01T00:00:00.000Z | 2 months | in 2 months | 1440 hours |
+| 2000-02-01T00:00:00.000Z | 1 month | in 1 month | 744 hours |
+| 2000-01-15T00:00:00.000Z | 14 days | in 14 days | 336 hours |
+| 2000-01-02T00:00:00.000Z | 1 day | in 1 day | 24 hours |
+| 2000-01-01T06:00:00.000Z | 6 hours | in 6 hours | 6 hours |
+| 2000-01-01T01:00:00.000Z | 1 hour | in 1 hour | 1 hour |
+| 2000-01-01T00:45:00.000Z | 45 minutes | in 45 minutes | 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | in 30 minutes | 1 hour |
+| 2000-01-01T00:15:00.000Z | 15 minutes | in 15 minutes | 0 hours |
+| 2000-01-01T00:01:00.000Z | 1 minute | in 1 minute | 0 hours |
+| 2000-01-01T00:00:25.000Z | 25 seconds | in 25 seconds | 0 hours |
+| 2000-01-01T00:00:15.000Z | 15 seconds | in 15 seconds | 0 hours |
+| 2000-01-01T00:00:05.000Z | 5 seconds | in 5 seconds | 0 hours |
+| 2000-01-01T00:00:00.000Z | 0 seconds | 0 seconds ago | 0 hours |
+| 1999-12-31T23:59:55.000Z | 5 seconds | 5 seconds ago | 0 hours |
+| 1999-12-31T23:59:45.000Z | 15 seconds | 15 seconds ago | 0 hours |
+| 1999-12-31T23:59:35.000Z | 25 seconds | 25 seconds ago | 0 hours |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute ago | 0 hours |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes ago | 0 hours |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes ago | 1 hour |
+| 1999-12-31T23:15:00.000Z | 45 minutes | 45 minutes ago | 1 hour |
+| 1999-12-31T23:00:00.000Z | 1 hour | 1 hour ago | 1 hour |
+| 1999-12-31T18:00:00.000Z | 6 hours | 6 hours ago | 6 hours |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days ago | 48 hours |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days ago | 408 hours |
+| 1999-12-01T00:00:00.000Z | 1 month | 1 month ago | 744 hours |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months ago | 1464 hours |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months ago | 5136 hours |
+| 1999-01-01T00:00:00.000Z | 1 year | 1 year ago | 8760 hours |
+| 1998-12-01T00:00:00.000Z | 1 year | 1 year ago | 9504 hours |
+| 1998-06-01T00:00:00.000Z | 2 years | 2 years ago | 13896 hours |
+| 1998-01-01T00:00:00.000Z | 2 years | 2 years ago | 17520 hours |
+| 1997-01-01T00:00:00.000Z | 3 years | 3 years ago | 26280 hours |
+| 1996-01-01T00:00:00.000Z | 4 years | 4 years ago | 35064 hours |
+| 1995-01-01T00:00:00.000Z | 5 years | 5 years ago | 43824 hours |
+| 1994-01-01T00:00:00.000Z | 6 years | 6 years ago | 52584 hours |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | Wednesday at 12:00 AM |
+| 2000-01-02T00:00:00.000Z | tomorrow at 12:00 AM |
+| 2000-01-01T00:00:00.000Z | today at 12:00 AM |
+| 1999-12-31T00:00:00.000Z | yesterday at 12:00 AM |
+| 1999-12-27T00:00:00.000Z | last Monday at 12:00 AM |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/en-CA/_lib/formatDistance/index.js b/date-fns/src/locale/en-CA/_lib/formatDistance/index.js
new file mode 100644
index 0000000..c818314
--- /dev/null
+++ b/date-fns/src/locale/en-CA/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'less than a second',
+ other: 'less than {{count}} seconds'
+ },
+
+ xSeconds: {
+ one: 'a second',
+ other: '{{count}} seconds'
+ },
+
+ halfAMinute: 'half a minute',
+
+ lessThanXMinutes: {
+ one: 'less than a minute',
+ other: 'less than {{count}} minutes'
+ },
+
+ xMinutes: {
+ one: 'a minute',
+ other: '{{count}} minutes'
+ },
+
+ aboutXHours: {
+ one: 'about an hour',
+ other: 'about {{count}} hours'
+ },
+
+ xHours: {
+ one: 'an hour',
+ other: '{{count}} hours'
+ },
+
+ xDays: {
+ one: 'a day',
+ other: '{{count}} days'
+ },
+
+ aboutXWeeks: {
+ one: 'about a week',
+ other: 'about {{count}} weeks'
+ },
+
+ xWeeks: {
+ one: 'a week',
+ other: '{{count}} weeks'
+ },
+
+ aboutXMonths: {
+ one: 'about a month',
+ other: 'about {{count}} months'
+ },
+
+ xMonths: {
+ one: 'a month',
+ other: '{{count}} months'
+ },
+
+ aboutXYears: {
+ one: 'about a year',
+ other: 'about {{count}} years'
+ },
+
+ xYears: {
+ one: 'a year',
+ other: '{{count}} years'
+ },
+
+ overXYears: {
+ one: 'over a year',
+ other: 'over {{count}} years'
+ },
+
+ almostXYears: {
+ one: 'almost a year',
+ other: 'almost {{count}} years'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'in ' + result
+ } else {
+ return result + ' ago'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/en-CA/_lib/formatLong/index.js b/date-fns/src/locale/en-CA/_lib/formatLong/index.js
new file mode 100644
index 0000000..7bcee0d
--- /dev/null
+++ b/date-fns/src/locale/en-CA/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, yyyy',
+ long: 'MMMM do, yyyy',
+ medium: 'MMM d, yyyy',
+ short: 'yyyy-MM-dd'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'at' {{time}}",
+ long: "{{date}} 'at' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/en-CA/index.d.ts b/date-fns/src/locale/en-CA/index.d.ts
new file mode 100644
index 0000000..e97efb4
--- /dev/null
+++ b/date-fns/src/locale/en-CA/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { enCA } from 'date-fns/locale'
+export default enCA
diff --git a/date-fns/src/locale/en-CA/index.js b/date-fns/src/locale/en-CA/index.js
new file mode 100644
index 0000000..863aa31
--- /dev/null
+++ b/date-fns/src/locale/en-CA/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from '../en-US/_lib/formatRelative/index'
+import localize from '../en-US/_lib/localize/index'
+import match from '../en-US/_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary English locale (Canada).
+ * @language English
+ * @iso-639-2 eng
+ * @author Mark Owsiak [@markowsiak]{@link https://github.com/markowsiak}
+ * @author Marco Imperatore [@mimperatore]{@link https://github.com/mimperatore}
+ */
+var locale = {
+ code: 'en-CA',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/en-CA/index.js.flow b/date-fns/src/locale/en-CA/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/en-CA/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/en-CA/snapshot.md b/date-fns/src/locale/en-CA/snapshot.md
new file mode 100644
index 0000000..4b8f145
--- /dev/null
+++ b/date-fns/src/locale/en-CA/snapshot.md
@@ -0,0 +1,304 @@
+# English (en-CA) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987th | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987th | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1st | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49th | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11th | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28th | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365th | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6th | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6th | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1st | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55th | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1st | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55th | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | Feb 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | May 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | February 11th, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | May 29th, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Wednesday, February 11th, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sunday, May 29th, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987-02-11, 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29, 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | Feb 11, 1987, 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | May 29, 1453, 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | February 11th, 1987 at 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | May 29th, 1453 at 11:59:59 PM GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Wednesday, February 11th, 1987 at 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sunday, May 29th, 1453 at 11:59:59 PM GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | about 6 years | about 6 years | in about 6 years |
+| 2005-01-01T00:00:00.000Z | about 5 years | about 5 years | in about 5 years |
+| 2004-01-01T00:00:00.000Z | about 4 years | about 4 years | in about 4 years |
+| 2003-01-01T00:00:00.000Z | about 3 years | about 3 years | in about 3 years |
+| 2002-01-01T00:00:00.000Z | about 2 years | about 2 years | in about 2 years |
+| 2001-06-01T00:00:00.000Z | over a year | over a year | in over a year |
+| 2001-02-01T00:00:00.000Z | about a year | about a year | in about a year |
+| 2001-01-01T00:00:00.000Z | about a year | about a year | in about a year |
+| 2000-06-01T00:00:00.000Z | 5 months | 5 months | in 5 months |
+| 2000-03-01T00:00:00.000Z | 2 months | 2 months | in 2 months |
+| 2000-02-01T00:00:00.000Z | about a month | about a month | in about a month |
+| 2000-01-15T00:00:00.000Z | 14 days | 14 days | in 14 days |
+| 2000-01-02T00:00:00.000Z | a day | a day | in a day |
+| 2000-01-01T06:00:00.000Z | about 6 hours | about 6 hours | in about 6 hours |
+| 2000-01-01T01:00:00.000Z | about an hour | about an hour | in about an hour |
+| 2000-01-01T00:45:00.000Z | about an hour | about an hour | in about an hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | in 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | in 15 minutes |
+| 2000-01-01T00:01:00.000Z | a minute | a minute | in a minute |
+| 2000-01-01T00:00:25.000Z | less than a minute | half a minute | in less than a minute |
+| 2000-01-01T00:00:15.000Z | less than a minute | less than 20 seconds | in less than a minute |
+| 2000-01-01T00:00:05.000Z | less than a minute | less than 10 seconds | in less than a minute |
+| 2000-01-01T00:00:00.000Z | less than a minute | less than 5 seconds | less than a minute ago |
+| 1999-12-31T23:59:55.000Z | less than a minute | less than 10 seconds | less than a minute ago |
+| 1999-12-31T23:59:45.000Z | less than a minute | less than 20 seconds | less than a minute ago |
+| 1999-12-31T23:59:35.000Z | less than a minute | half a minute | less than a minute ago |
+| 1999-12-31T23:59:00.000Z | a minute | a minute | a minute ago |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | 15 minutes ago |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | 30 minutes ago |
+| 1999-12-31T23:15:00.000Z | about an hour | about an hour | about an hour ago |
+| 1999-12-31T23:00:00.000Z | about an hour | about an hour | about an hour ago |
+| 1999-12-31T18:00:00.000Z | about 6 hours | about 6 hours | about 6 hours ago |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days | 2 days ago |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days | 17 days ago |
+| 1999-12-01T00:00:00.000Z | about a month | about a month | about a month ago |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months | 2 months ago |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months | 7 months ago |
+| 1999-01-01T00:00:00.000Z | about a year | about a year | about a year ago |
+| 1998-12-01T00:00:00.000Z | about a year | about a year | about a year ago |
+| 1998-06-01T00:00:00.000Z | over a year | over a year | over a year ago |
+| 1998-01-01T00:00:00.000Z | about 2 years | about 2 years | about 2 years ago |
+| 1997-01-01T00:00:00.000Z | about 3 years | about 3 years | about 3 years ago |
+| 1996-01-01T00:00:00.000Z | about 4 years | about 4 years | about 4 years ago |
+| 1995-01-01T00:00:00.000Z | about 5 years | about 5 years | about 5 years ago |
+| 1994-01-01T00:00:00.000Z | about 6 years | about 6 years | about 6 years ago |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 years | in 6 years | 52608 hours |
+| 2005-01-01T00:00:00.000Z | 5 years | in 5 years | 43848 hours |
+| 2004-01-01T00:00:00.000Z | 4 years | in 4 years | 35064 hours |
+| 2003-01-01T00:00:00.000Z | 3 years | in 3 years | 26304 hours |
+| 2002-01-01T00:00:00.000Z | 2 years | in 2 years | 17544 hours |
+| 2001-06-01T00:00:00.000Z | a year | in a year | 12408 hours |
+| 2001-02-01T00:00:00.000Z | a year | in a year | 9528 hours |
+| 2001-01-01T00:00:00.000Z | a year | in a year | 8784 hours |
+| 2000-06-01T00:00:00.000Z | 5 months | in 5 months | 3648 hours |
+| 2000-03-01T00:00:00.000Z | 2 months | in 2 months | 1440 hours |
+| 2000-02-01T00:00:00.000Z | a month | in a month | 744 hours |
+| 2000-01-15T00:00:00.000Z | 14 days | in 14 days | 336 hours |
+| 2000-01-02T00:00:00.000Z | a day | in a day | 24 hours |
+| 2000-01-01T06:00:00.000Z | 6 hours | in 6 hours | 6 hours |
+| 2000-01-01T01:00:00.000Z | an hour | in an hour | an hour |
+| 2000-01-01T00:45:00.000Z | 45 minutes | in 45 minutes | an hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | in 30 minutes | an hour |
+| 2000-01-01T00:15:00.000Z | 15 minutes | in 15 minutes | 0 hours |
+| 2000-01-01T00:01:00.000Z | a minute | in a minute | 0 hours |
+| 2000-01-01T00:00:25.000Z | 25 seconds | in 25 seconds | 0 hours |
+| 2000-01-01T00:00:15.000Z | 15 seconds | in 15 seconds | 0 hours |
+| 2000-01-01T00:00:05.000Z | 5 seconds | in 5 seconds | 0 hours |
+| 2000-01-01T00:00:00.000Z | 0 seconds | 0 seconds ago | 0 hours |
+| 1999-12-31T23:59:55.000Z | 5 seconds | 5 seconds ago | 0 hours |
+| 1999-12-31T23:59:45.000Z | 15 seconds | 15 seconds ago | 0 hours |
+| 1999-12-31T23:59:35.000Z | 25 seconds | 25 seconds ago | 0 hours |
+| 1999-12-31T23:59:00.000Z | a minute | a minute ago | 0 hours |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes ago | 0 hours |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes ago | an hour |
+| 1999-12-31T23:15:00.000Z | 45 minutes | 45 minutes ago | an hour |
+| 1999-12-31T23:00:00.000Z | an hour | an hour ago | an hour |
+| 1999-12-31T18:00:00.000Z | 6 hours | 6 hours ago | 6 hours |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days ago | 48 hours |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days ago | 408 hours |
+| 1999-12-01T00:00:00.000Z | a month | a month ago | 744 hours |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months ago | 1464 hours |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months ago | 5136 hours |
+| 1999-01-01T00:00:00.000Z | a year | a year ago | 8760 hours |
+| 1998-12-01T00:00:00.000Z | a year | a year ago | 9504 hours |
+| 1998-06-01T00:00:00.000Z | 2 years | 2 years ago | 13896 hours |
+| 1998-01-01T00:00:00.000Z | 2 years | 2 years ago | 17520 hours |
+| 1997-01-01T00:00:00.000Z | 3 years | 3 years ago | 26280 hours |
+| 1996-01-01T00:00:00.000Z | 4 years | 4 years ago | 35064 hours |
+| 1995-01-01T00:00:00.000Z | 5 years | 5 years ago | 43824 hours |
+| 1994-01-01T00:00:00.000Z | 6 years | 6 years ago | 52584 hours |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 2000-01-10 |
+| 2000-01-05T00:00:00.000Z | Wednesday at 12:00 AM |
+| 2000-01-02T00:00:00.000Z | tomorrow at 12:00 AM |
+| 2000-01-01T00:00:00.000Z | today at 12:00 AM |
+| 1999-12-31T00:00:00.000Z | yesterday at 12:00 AM |
+| 1999-12-27T00:00:00.000Z | last Monday at 12:00 AM |
+| 1999-12-21T00:00:00.000Z | 1999-12-21 |
diff --git a/date-fns/src/locale/en-GB/_lib/formatLong/index.js b/date-fns/src/locale/en-GB/_lib/formatLong/index.js
new file mode 100644
index 0000000..1dc1837
--- /dev/null
+++ b/date-fns/src/locale/en-GB/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'at' {{time}}",
+ long: "{{date}} 'at' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/en-GB/index.d.ts b/date-fns/src/locale/en-GB/index.d.ts
new file mode 100644
index 0000000..74fc784
--- /dev/null
+++ b/date-fns/src/locale/en-GB/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { enGB } from 'date-fns/locale'
+export default enGB
diff --git a/date-fns/src/locale/en-GB/index.js b/date-fns/src/locale/en-GB/index.js
new file mode 100644
index 0000000..1ab0ea0
--- /dev/null
+++ b/date-fns/src/locale/en-GB/index.js
@@ -0,0 +1,28 @@
+import formatDistance from '../en-US/_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from '../en-US/_lib/formatRelative/index'
+import localize from '../en-US/_lib/localize/index'
+import match from '../en-US/_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary English locale (United Kingdom).
+ * @language English
+ * @iso-639-2 eng
+ * @author Alex [@glintik]{@link https://github.com/glintik}
+ */
+var locale = {
+ code: 'en-GB',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/en-GB/index.js.flow b/date-fns/src/locale/en-GB/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/en-GB/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/en-GB/snapshot.md b/date-fns/src/locale/en-GB/snapshot.md
new file mode 100644
index 0000000..934e28d
--- /dev/null
+++ b/date-fns/src/locale/en-GB/snapshot.md
@@ -0,0 +1,304 @@
+# English (en-GB) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987th | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987th | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4th | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11th | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28th | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365th | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1st | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55th | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1st | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55th | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 February 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Feb 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 February 1987 at 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 at 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 at 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 at 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | about 6 years | about 6 years | in about 6 years |
+| 2005-01-01T00:00:00.000Z | about 5 years | about 5 years | in about 5 years |
+| 2004-01-01T00:00:00.000Z | about 4 years | about 4 years | in about 4 years |
+| 2003-01-01T00:00:00.000Z | about 3 years | about 3 years | in about 3 years |
+| 2002-01-01T00:00:00.000Z | about 2 years | about 2 years | in about 2 years |
+| 2001-06-01T00:00:00.000Z | over 1 year | over 1 year | in over 1 year |
+| 2001-02-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2001-01-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2000-06-01T00:00:00.000Z | 5 months | 5 months | in 5 months |
+| 2000-03-01T00:00:00.000Z | 2 months | 2 months | in 2 months |
+| 2000-02-01T00:00:00.000Z | about 1 month | about 1 month | in about 1 month |
+| 2000-01-15T00:00:00.000Z | 14 days | 14 days | in 14 days |
+| 2000-01-02T00:00:00.000Z | 1 day | 1 day | in 1 day |
+| 2000-01-01T06:00:00.000Z | about 6 hours | about 6 hours | in about 6 hours |
+| 2000-01-01T01:00:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:45:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | in 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | in 15 minutes |
+| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | in 1 minute |
+| 2000-01-01T00:00:25.000Z | less than a minute | half a minute | in less than a minute |
+| 2000-01-01T00:00:15.000Z | less than a minute | less than 20 seconds | in less than a minute |
+| 2000-01-01T00:00:05.000Z | less than a minute | less than 10 seconds | in less than a minute |
+| 2000-01-01T00:00:00.000Z | less than a minute | less than 5 seconds | less than a minute ago |
+| 1999-12-31T23:59:55.000Z | less than a minute | less than 10 seconds | less than a minute ago |
+| 1999-12-31T23:59:45.000Z | less than a minute | less than 20 seconds | less than a minute ago |
+| 1999-12-31T23:59:35.000Z | less than a minute | half a minute | less than a minute ago |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | 1 minute ago |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | 15 minutes ago |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | 30 minutes ago |
+| 1999-12-31T23:15:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T23:00:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T18:00:00.000Z | about 6 hours | about 6 hours | about 6 hours ago |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days | 2 days ago |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days | 17 days ago |
+| 1999-12-01T00:00:00.000Z | about 1 month | about 1 month | about 1 month ago |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months | 2 months ago |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months | 7 months ago |
+| 1999-01-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-12-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-06-01T00:00:00.000Z | over 1 year | over 1 year | over 1 year ago |
+| 1998-01-01T00:00:00.000Z | about 2 years | about 2 years | about 2 years ago |
+| 1997-01-01T00:00:00.000Z | about 3 years | about 3 years | about 3 years ago |
+| 1996-01-01T00:00:00.000Z | about 4 years | about 4 years | about 4 years ago |
+| 1995-01-01T00:00:00.000Z | about 5 years | about 5 years | about 5 years ago |
+| 1994-01-01T00:00:00.000Z | about 6 years | about 6 years | about 6 years ago |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 years | in 6 years | 52608 hours |
+| 2005-01-01T00:00:00.000Z | 5 years | in 5 years | 43848 hours |
+| 2004-01-01T00:00:00.000Z | 4 years | in 4 years | 35064 hours |
+| 2003-01-01T00:00:00.000Z | 3 years | in 3 years | 26304 hours |
+| 2002-01-01T00:00:00.000Z | 2 years | in 2 years | 17544 hours |
+| 2001-06-01T00:00:00.000Z | 1 year | in 1 year | 12408 hours |
+| 2001-02-01T00:00:00.000Z | 1 year | in 1 year | 9528 hours |
+| 2001-01-01T00:00:00.000Z | 1 year | in 1 year | 8784 hours |
+| 2000-06-01T00:00:00.000Z | 5 months | in 5 months | 3648 hours |
+| 2000-03-01T00:00:00.000Z | 2 months | in 2 months | 1440 hours |
+| 2000-02-01T00:00:00.000Z | 1 month | in 1 month | 744 hours |
+| 2000-01-15T00:00:00.000Z | 14 days | in 14 days | 336 hours |
+| 2000-01-02T00:00:00.000Z | 1 day | in 1 day | 24 hours |
+| 2000-01-01T06:00:00.000Z | 6 hours | in 6 hours | 6 hours |
+| 2000-01-01T01:00:00.000Z | 1 hour | in 1 hour | 1 hour |
+| 2000-01-01T00:45:00.000Z | 45 minutes | in 45 minutes | 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | in 30 minutes | 1 hour |
+| 2000-01-01T00:15:00.000Z | 15 minutes | in 15 minutes | 0 hours |
+| 2000-01-01T00:01:00.000Z | 1 minute | in 1 minute | 0 hours |
+| 2000-01-01T00:00:25.000Z | 25 seconds | in 25 seconds | 0 hours |
+| 2000-01-01T00:00:15.000Z | 15 seconds | in 15 seconds | 0 hours |
+| 2000-01-01T00:00:05.000Z | 5 seconds | in 5 seconds | 0 hours |
+| 2000-01-01T00:00:00.000Z | 0 seconds | 0 seconds ago | 0 hours |
+| 1999-12-31T23:59:55.000Z | 5 seconds | 5 seconds ago | 0 hours |
+| 1999-12-31T23:59:45.000Z | 15 seconds | 15 seconds ago | 0 hours |
+| 1999-12-31T23:59:35.000Z | 25 seconds | 25 seconds ago | 0 hours |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute ago | 0 hours |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes ago | 0 hours |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes ago | 1 hour |
+| 1999-12-31T23:15:00.000Z | 45 minutes | 45 minutes ago | 1 hour |
+| 1999-12-31T23:00:00.000Z | 1 hour | 1 hour ago | 1 hour |
+| 1999-12-31T18:00:00.000Z | 6 hours | 6 hours ago | 6 hours |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days ago | 48 hours |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days ago | 408 hours |
+| 1999-12-01T00:00:00.000Z | 1 month | 1 month ago | 744 hours |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months ago | 1464 hours |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months ago | 5136 hours |
+| 1999-01-01T00:00:00.000Z | 1 year | 1 year ago | 8760 hours |
+| 1998-12-01T00:00:00.000Z | 1 year | 1 year ago | 9504 hours |
+| 1998-06-01T00:00:00.000Z | 2 years | 2 years ago | 13896 hours |
+| 1998-01-01T00:00:00.000Z | 2 years | 2 years ago | 17520 hours |
+| 1997-01-01T00:00:00.000Z | 3 years | 3 years ago | 26280 hours |
+| 1996-01-01T00:00:00.000Z | 4 years | 4 years ago | 35064 hours |
+| 1995-01-01T00:00:00.000Z | 5 years | 5 years ago | 43824 hours |
+| 1994-01-01T00:00:00.000Z | 6 years | 6 years ago | 52584 hours |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | Wednesday at 00:00 |
+| 2000-01-02T00:00:00.000Z | tomorrow at 00:00 |
+| 2000-01-01T00:00:00.000Z | today at 00:00 |
+| 1999-12-31T00:00:00.000Z | yesterday at 00:00 |
+| 1999-12-27T00:00:00.000Z | last Monday at 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/en-IN/_lib/formatLong/index.js b/date-fns/src/locale/en-IN/_lib/formatLong/index.js
new file mode 100644
index 0000000..70aa51c
--- /dev/null
+++ b/date-fns/src/locale/en-IN/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM, yyyy',
+ medium: 'd MMM, yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'at' {{time}}",
+ long: "{{date}} 'at' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/en-IN/index.d.ts b/date-fns/src/locale/en-IN/index.d.ts
new file mode 100644
index 0000000..a1fc542
--- /dev/null
+++ b/date-fns/src/locale/en-IN/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { enIN } from 'date-fns/locale'
+export default enIN
diff --git a/date-fns/src/locale/en-IN/index.js b/date-fns/src/locale/en-IN/index.js
new file mode 100644
index 0000000..6ddfbcf
--- /dev/null
+++ b/date-fns/src/locale/en-IN/index.js
@@ -0,0 +1,28 @@
+import formatDistance from '../en-US/_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from '../en-US/_lib/formatRelative/index'
+import localize from '../en-US/_lib/localize/index'
+import match from '../en-US/_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary English locale (India).
+ * @language English
+ * @iso-639-2 eng
+ * @author Galeel Bhasha Satthar [@gbhasha]{@link https://github.com/gbhasha}
+ */
+var locale = {
+ code: 'en-IN',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1, // Monday is the first day of the week.
+ firstWeekContainsDate: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/en-IN/index.js.flow b/date-fns/src/locale/en-IN/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/en-IN/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/en-IN/snapshot.md b/date-fns/src/locale/en-IN/snapshot.md
new file mode 100644
index 0000000..d71ac5e
--- /dev/null
+++ b/date-fns/src/locale/en-IN/snapshot.md
@@ -0,0 +1,304 @@
+# English (en-IN) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987th | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987th | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4th | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11th | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28th | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365th | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1st | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55th | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1st | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55th | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Feb, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 February, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Feb, 1987, 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May, 1453, 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 February, 1987 at 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 May, 1453 at 11:59:59 PM GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 at 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 at 11:59:59 PM GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | about 6 years | about 6 years | in about 6 years |
+| 2005-01-01T00:00:00.000Z | about 5 years | about 5 years | in about 5 years |
+| 2004-01-01T00:00:00.000Z | about 4 years | about 4 years | in about 4 years |
+| 2003-01-01T00:00:00.000Z | about 3 years | about 3 years | in about 3 years |
+| 2002-01-01T00:00:00.000Z | about 2 years | about 2 years | in about 2 years |
+| 2001-06-01T00:00:00.000Z | over 1 year | over 1 year | in over 1 year |
+| 2001-02-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2001-01-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2000-06-01T00:00:00.000Z | 5 months | 5 months | in 5 months |
+| 2000-03-01T00:00:00.000Z | 2 months | 2 months | in 2 months |
+| 2000-02-01T00:00:00.000Z | about 1 month | about 1 month | in about 1 month |
+| 2000-01-15T00:00:00.000Z | 14 days | 14 days | in 14 days |
+| 2000-01-02T00:00:00.000Z | 1 day | 1 day | in 1 day |
+| 2000-01-01T06:00:00.000Z | about 6 hours | about 6 hours | in about 6 hours |
+| 2000-01-01T01:00:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:45:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | in 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | in 15 minutes |
+| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | in 1 minute |
+| 2000-01-01T00:00:25.000Z | less than a minute | half a minute | in less than a minute |
+| 2000-01-01T00:00:15.000Z | less than a minute | less than 20 seconds | in less than a minute |
+| 2000-01-01T00:00:05.000Z | less than a minute | less than 10 seconds | in less than a minute |
+| 2000-01-01T00:00:00.000Z | less than a minute | less than 5 seconds | less than a minute ago |
+| 1999-12-31T23:59:55.000Z | less than a minute | less than 10 seconds | less than a minute ago |
+| 1999-12-31T23:59:45.000Z | less than a minute | less than 20 seconds | less than a minute ago |
+| 1999-12-31T23:59:35.000Z | less than a minute | half a minute | less than a minute ago |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | 1 minute ago |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | 15 minutes ago |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | 30 minutes ago |
+| 1999-12-31T23:15:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T23:00:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T18:00:00.000Z | about 6 hours | about 6 hours | about 6 hours ago |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days | 2 days ago |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days | 17 days ago |
+| 1999-12-01T00:00:00.000Z | about 1 month | about 1 month | about 1 month ago |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months | 2 months ago |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months | 7 months ago |
+| 1999-01-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-12-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-06-01T00:00:00.000Z | over 1 year | over 1 year | over 1 year ago |
+| 1998-01-01T00:00:00.000Z | about 2 years | about 2 years | about 2 years ago |
+| 1997-01-01T00:00:00.000Z | about 3 years | about 3 years | about 3 years ago |
+| 1996-01-01T00:00:00.000Z | about 4 years | about 4 years | about 4 years ago |
+| 1995-01-01T00:00:00.000Z | about 5 years | about 5 years | about 5 years ago |
+| 1994-01-01T00:00:00.000Z | about 6 years | about 6 years | about 6 years ago |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 years | in 6 years | 52608 hours |
+| 2005-01-01T00:00:00.000Z | 5 years | in 5 years | 43848 hours |
+| 2004-01-01T00:00:00.000Z | 4 years | in 4 years | 35064 hours |
+| 2003-01-01T00:00:00.000Z | 3 years | in 3 years | 26304 hours |
+| 2002-01-01T00:00:00.000Z | 2 years | in 2 years | 17544 hours |
+| 2001-06-01T00:00:00.000Z | 1 year | in 1 year | 12408 hours |
+| 2001-02-01T00:00:00.000Z | 1 year | in 1 year | 9528 hours |
+| 2001-01-01T00:00:00.000Z | 1 year | in 1 year | 8784 hours |
+| 2000-06-01T00:00:00.000Z | 5 months | in 5 months | 3648 hours |
+| 2000-03-01T00:00:00.000Z | 2 months | in 2 months | 1440 hours |
+| 2000-02-01T00:00:00.000Z | 1 month | in 1 month | 744 hours |
+| 2000-01-15T00:00:00.000Z | 14 days | in 14 days | 336 hours |
+| 2000-01-02T00:00:00.000Z | 1 day | in 1 day | 24 hours |
+| 2000-01-01T06:00:00.000Z | 6 hours | in 6 hours | 6 hours |
+| 2000-01-01T01:00:00.000Z | 1 hour | in 1 hour | 1 hour |
+| 2000-01-01T00:45:00.000Z | 45 minutes | in 45 minutes | 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | in 30 minutes | 1 hour |
+| 2000-01-01T00:15:00.000Z | 15 minutes | in 15 minutes | 0 hours |
+| 2000-01-01T00:01:00.000Z | 1 minute | in 1 minute | 0 hours |
+| 2000-01-01T00:00:25.000Z | 25 seconds | in 25 seconds | 0 hours |
+| 2000-01-01T00:00:15.000Z | 15 seconds | in 15 seconds | 0 hours |
+| 2000-01-01T00:00:05.000Z | 5 seconds | in 5 seconds | 0 hours |
+| 2000-01-01T00:00:00.000Z | 0 seconds | 0 seconds ago | 0 hours |
+| 1999-12-31T23:59:55.000Z | 5 seconds | 5 seconds ago | 0 hours |
+| 1999-12-31T23:59:45.000Z | 15 seconds | 15 seconds ago | 0 hours |
+| 1999-12-31T23:59:35.000Z | 25 seconds | 25 seconds ago | 0 hours |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute ago | 0 hours |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes ago | 0 hours |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes ago | 1 hour |
+| 1999-12-31T23:15:00.000Z | 45 minutes | 45 minutes ago | 1 hour |
+| 1999-12-31T23:00:00.000Z | 1 hour | 1 hour ago | 1 hour |
+| 1999-12-31T18:00:00.000Z | 6 hours | 6 hours ago | 6 hours |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days ago | 48 hours |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days ago | 408 hours |
+| 1999-12-01T00:00:00.000Z | 1 month | 1 month ago | 744 hours |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months ago | 1464 hours |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months ago | 5136 hours |
+| 1999-01-01T00:00:00.000Z | 1 year | 1 year ago | 8760 hours |
+| 1998-12-01T00:00:00.000Z | 1 year | 1 year ago | 9504 hours |
+| 1998-06-01T00:00:00.000Z | 2 years | 2 years ago | 13896 hours |
+| 1998-01-01T00:00:00.000Z | 2 years | 2 years ago | 17520 hours |
+| 1997-01-01T00:00:00.000Z | 3 years | 3 years ago | 26280 hours |
+| 1996-01-01T00:00:00.000Z | 4 years | 4 years ago | 35064 hours |
+| 1995-01-01T00:00:00.000Z | 5 years | 5 years ago | 43824 hours |
+| 1994-01-01T00:00:00.000Z | 6 years | 6 years ago | 52584 hours |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | Wednesday at 12:00 AM |
+| 2000-01-02T00:00:00.000Z | tomorrow at 12:00 AM |
+| 2000-01-01T00:00:00.000Z | today at 12:00 AM |
+| 1999-12-31T00:00:00.000Z | yesterday at 12:00 AM |
+| 1999-12-27T00:00:00.000Z | last Monday at 12:00 AM |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/en-NZ/_lib/formatLong/index.js b/date-fns/src/locale/en-NZ/_lib/formatLong/index.js
new file mode 100644
index 0000000..8e674cd
--- /dev/null
+++ b/date-fns/src/locale/en-NZ/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'at' {{time}}",
+ long: "{{date}} 'at' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/en-NZ/index.d.ts b/date-fns/src/locale/en-NZ/index.d.ts
new file mode 100644
index 0000000..dbf083d
--- /dev/null
+++ b/date-fns/src/locale/en-NZ/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { enNZ } from 'date-fns/locale'
+export default enNZ
diff --git a/date-fns/src/locale/en-NZ/index.js b/date-fns/src/locale/en-NZ/index.js
new file mode 100644
index 0000000..95cac51
--- /dev/null
+++ b/date-fns/src/locale/en-NZ/index.js
@@ -0,0 +1,28 @@
+import formatDistance from '../en-US/_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from '../en-US/_lib/formatRelative/index'
+import localize from '../en-US/_lib/localize/index'
+import match from '../en-US/_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary English locale (New Zealand).
+ * @language English
+ * @iso-639-2 eng
+ * @author Murray Lucas [@muntact]{@link https://github.com/muntact}
+ */
+var locale = {
+ code: 'en-NZ',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/en-NZ/index.js.flow b/date-fns/src/locale/en-NZ/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/en-NZ/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/en-NZ/snapshot.md b/date-fns/src/locale/en-NZ/snapshot.md
new file mode 100644
index 0000000..237ed72
--- /dev/null
+++ b/date-fns/src/locale/en-NZ/snapshot.md
@@ -0,0 +1,304 @@
+# English (en-NZ) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987th | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987th | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4th | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11th | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28th | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365th | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1st | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55th | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1st | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55th | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 February 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Feb 1987, 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453, 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 February 1987 at 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 at 11:59:59 PM GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 at 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 at 11:59:59 PM GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | about 6 years | about 6 years | in about 6 years |
+| 2005-01-01T00:00:00.000Z | about 5 years | about 5 years | in about 5 years |
+| 2004-01-01T00:00:00.000Z | about 4 years | about 4 years | in about 4 years |
+| 2003-01-01T00:00:00.000Z | about 3 years | about 3 years | in about 3 years |
+| 2002-01-01T00:00:00.000Z | about 2 years | about 2 years | in about 2 years |
+| 2001-06-01T00:00:00.000Z | over 1 year | over 1 year | in over 1 year |
+| 2001-02-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2001-01-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2000-06-01T00:00:00.000Z | 5 months | 5 months | in 5 months |
+| 2000-03-01T00:00:00.000Z | 2 months | 2 months | in 2 months |
+| 2000-02-01T00:00:00.000Z | about 1 month | about 1 month | in about 1 month |
+| 2000-01-15T00:00:00.000Z | 14 days | 14 days | in 14 days |
+| 2000-01-02T00:00:00.000Z | 1 day | 1 day | in 1 day |
+| 2000-01-01T06:00:00.000Z | about 6 hours | about 6 hours | in about 6 hours |
+| 2000-01-01T01:00:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:45:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | in 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | in 15 minutes |
+| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | in 1 minute |
+| 2000-01-01T00:00:25.000Z | less than a minute | half a minute | in less than a minute |
+| 2000-01-01T00:00:15.000Z | less than a minute | less than 20 seconds | in less than a minute |
+| 2000-01-01T00:00:05.000Z | less than a minute | less than 10 seconds | in less than a minute |
+| 2000-01-01T00:00:00.000Z | less than a minute | less than 5 seconds | less than a minute ago |
+| 1999-12-31T23:59:55.000Z | less than a minute | less than 10 seconds | less than a minute ago |
+| 1999-12-31T23:59:45.000Z | less than a minute | less than 20 seconds | less than a minute ago |
+| 1999-12-31T23:59:35.000Z | less than a minute | half a minute | less than a minute ago |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | 1 minute ago |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | 15 minutes ago |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | 30 minutes ago |
+| 1999-12-31T23:15:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T23:00:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T18:00:00.000Z | about 6 hours | about 6 hours | about 6 hours ago |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days | 2 days ago |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days | 17 days ago |
+| 1999-12-01T00:00:00.000Z | about 1 month | about 1 month | about 1 month ago |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months | 2 months ago |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months | 7 months ago |
+| 1999-01-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-12-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-06-01T00:00:00.000Z | over 1 year | over 1 year | over 1 year ago |
+| 1998-01-01T00:00:00.000Z | about 2 years | about 2 years | about 2 years ago |
+| 1997-01-01T00:00:00.000Z | about 3 years | about 3 years | about 3 years ago |
+| 1996-01-01T00:00:00.000Z | about 4 years | about 4 years | about 4 years ago |
+| 1995-01-01T00:00:00.000Z | about 5 years | about 5 years | about 5 years ago |
+| 1994-01-01T00:00:00.000Z | about 6 years | about 6 years | about 6 years ago |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 years | in 6 years | 52608 hours |
+| 2005-01-01T00:00:00.000Z | 5 years | in 5 years | 43848 hours |
+| 2004-01-01T00:00:00.000Z | 4 years | in 4 years | 35064 hours |
+| 2003-01-01T00:00:00.000Z | 3 years | in 3 years | 26304 hours |
+| 2002-01-01T00:00:00.000Z | 2 years | in 2 years | 17544 hours |
+| 2001-06-01T00:00:00.000Z | 1 year | in 1 year | 12408 hours |
+| 2001-02-01T00:00:00.000Z | 1 year | in 1 year | 9528 hours |
+| 2001-01-01T00:00:00.000Z | 1 year | in 1 year | 8784 hours |
+| 2000-06-01T00:00:00.000Z | 5 months | in 5 months | 3648 hours |
+| 2000-03-01T00:00:00.000Z | 2 months | in 2 months | 1440 hours |
+| 2000-02-01T00:00:00.000Z | 1 month | in 1 month | 744 hours |
+| 2000-01-15T00:00:00.000Z | 14 days | in 14 days | 336 hours |
+| 2000-01-02T00:00:00.000Z | 1 day | in 1 day | 24 hours |
+| 2000-01-01T06:00:00.000Z | 6 hours | in 6 hours | 6 hours |
+| 2000-01-01T01:00:00.000Z | 1 hour | in 1 hour | 1 hour |
+| 2000-01-01T00:45:00.000Z | 45 minutes | in 45 minutes | 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | in 30 minutes | 1 hour |
+| 2000-01-01T00:15:00.000Z | 15 minutes | in 15 minutes | 0 hours |
+| 2000-01-01T00:01:00.000Z | 1 minute | in 1 minute | 0 hours |
+| 2000-01-01T00:00:25.000Z | 25 seconds | in 25 seconds | 0 hours |
+| 2000-01-01T00:00:15.000Z | 15 seconds | in 15 seconds | 0 hours |
+| 2000-01-01T00:00:05.000Z | 5 seconds | in 5 seconds | 0 hours |
+| 2000-01-01T00:00:00.000Z | 0 seconds | 0 seconds ago | 0 hours |
+| 1999-12-31T23:59:55.000Z | 5 seconds | 5 seconds ago | 0 hours |
+| 1999-12-31T23:59:45.000Z | 15 seconds | 15 seconds ago | 0 hours |
+| 1999-12-31T23:59:35.000Z | 25 seconds | 25 seconds ago | 0 hours |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute ago | 0 hours |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes ago | 0 hours |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes ago | 1 hour |
+| 1999-12-31T23:15:00.000Z | 45 minutes | 45 minutes ago | 1 hour |
+| 1999-12-31T23:00:00.000Z | 1 hour | 1 hour ago | 1 hour |
+| 1999-12-31T18:00:00.000Z | 6 hours | 6 hours ago | 6 hours |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days ago | 48 hours |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days ago | 408 hours |
+| 1999-12-01T00:00:00.000Z | 1 month | 1 month ago | 744 hours |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months ago | 1464 hours |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months ago | 5136 hours |
+| 1999-01-01T00:00:00.000Z | 1 year | 1 year ago | 8760 hours |
+| 1998-12-01T00:00:00.000Z | 1 year | 1 year ago | 9504 hours |
+| 1998-06-01T00:00:00.000Z | 2 years | 2 years ago | 13896 hours |
+| 1998-01-01T00:00:00.000Z | 2 years | 2 years ago | 17520 hours |
+| 1997-01-01T00:00:00.000Z | 3 years | 3 years ago | 26280 hours |
+| 1996-01-01T00:00:00.000Z | 4 years | 4 years ago | 35064 hours |
+| 1995-01-01T00:00:00.000Z | 5 years | 5 years ago | 43824 hours |
+| 1994-01-01T00:00:00.000Z | 6 years | 6 years ago | 52584 hours |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | Wednesday at 12:00 AM |
+| 2000-01-02T00:00:00.000Z | tomorrow at 12:00 AM |
+| 2000-01-01T00:00:00.000Z | today at 12:00 AM |
+| 1999-12-31T00:00:00.000Z | yesterday at 12:00 AM |
+| 1999-12-27T00:00:00.000Z | last Monday at 12:00 AM |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/en-US/_lib/formatDistance/index.js b/date-fns/src/locale/en-US/_lib/formatDistance/index.js
new file mode 100644
index 0000000..ebcde65
--- /dev/null
+++ b/date-fns/src/locale/en-US/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'less than a second',
+ other: 'less than {{count}} seconds'
+ },
+
+ xSeconds: {
+ one: '1 second',
+ other: '{{count}} seconds'
+ },
+
+ halfAMinute: 'half a minute',
+
+ lessThanXMinutes: {
+ one: 'less than a minute',
+ other: 'less than {{count}} minutes'
+ },
+
+ xMinutes: {
+ one: '1 minute',
+ other: '{{count}} minutes'
+ },
+
+ aboutXHours: {
+ one: 'about 1 hour',
+ other: 'about {{count}} hours'
+ },
+
+ xHours: {
+ one: '1 hour',
+ other: '{{count}} hours'
+ },
+
+ xDays: {
+ one: '1 day',
+ other: '{{count}} days'
+ },
+
+ aboutXWeeks: {
+ one: 'about 1 week',
+ other: 'about {{count}} weeks'
+ },
+
+ xWeeks: {
+ one: '1 week',
+ other: '{{count}} weeks'
+ },
+
+ aboutXMonths: {
+ one: 'about 1 month',
+ other: 'about {{count}} months'
+ },
+
+ xMonths: {
+ one: '1 month',
+ other: '{{count}} months'
+ },
+
+ aboutXYears: {
+ one: 'about 1 year',
+ other: 'about {{count}} years'
+ },
+
+ xYears: {
+ one: '1 year',
+ other: '{{count}} years'
+ },
+
+ overXYears: {
+ one: 'over 1 year',
+ other: 'over {{count}} years'
+ },
+
+ almostXYears: {
+ one: 'almost 1 year',
+ other: 'almost {{count}} years'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'in ' + result
+ } else {
+ return result + ' ago'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/en-US/_lib/formatLong/index.js b/date-fns/src/locale/en-US/_lib/formatLong/index.js
new file mode 100644
index 0000000..212cf21
--- /dev/null
+++ b/date-fns/src/locale/en-US/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'MM/dd/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'at' {{time}}",
+ long: "{{date}} 'at' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/en-US/_lib/formatRelative/index.js b/date-fns/src/locale/en-US/_lib/formatRelative/index.js
new file mode 100644
index 0000000..192af7d
--- /dev/null
+++ b/date-fns/src/locale/en-US/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'last' eeee 'at' p",
+ yesterday: "'yesterday at' p",
+ today: "'today at' p",
+ tomorrow: "'tomorrow at' p",
+ nextWeek: "eeee 'at' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/en-US/_lib/localize/index.js b/date-fns/src/locale/en-US/_lib/localize/index.js
new file mode 100644
index 0000000..1ffb8bf
--- /dev/null
+++ b/date-fns/src/locale/en-US/_lib/localize/index.js
@@ -0,0 +1,192 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['B', 'A'],
+ abbreviated: ['BC', 'AD'],
+ wide: ['Before Christ', 'Anno Domini']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Jan',
+ 'Feb',
+ 'Mar',
+ 'Apr',
+ 'May',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Oct',
+ 'Nov',
+ 'Dec'
+ ],
+ wide: [
+ 'January',
+ 'February',
+ 'March',
+ 'April',
+ 'May',
+ 'June',
+ 'July',
+ 'August',
+ 'September',
+ 'October',
+ 'November',
+ 'December'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
+ short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+ abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ wide: [
+ 'Sunday',
+ 'Monday',
+ 'Tuesday',
+ 'Wednesday',
+ 'Thursday',
+ 'Friday',
+ 'Saturday'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mi',
+ noon: 'n',
+ morning: 'morning',
+ afternoon: 'afternoon',
+ evening: 'evening',
+ night: 'night'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'morning',
+ afternoon: 'afternoon',
+ evening: 'evening',
+ night: 'night'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'morning',
+ afternoon: 'afternoon',
+ evening: 'evening',
+ night: 'night'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mi',
+ noon: 'n',
+ morning: 'in the morning',
+ afternoon: 'in the afternoon',
+ evening: 'in the evening',
+ night: 'at night'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'in the morning',
+ afternoon: 'in the afternoon',
+ evening: 'in the evening',
+ night: 'at night'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'in the morning',
+ afternoon: 'in the afternoon',
+ evening: 'in the evening',
+ night: 'at night'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ var rem100 = number % 100
+ if (rem100 > 20 || rem100 < 10) {
+ switch (rem100 % 10) {
+ case 1:
+ return number + 'st'
+ case 2:
+ return number + 'nd'
+ case 3:
+ return number + 'rd'
+ }
+ }
+ return number + 'th'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/en-US/_lib/match/index.js b/date-fns/src/locale/en-US/_lib/match/index.js
new file mode 100644
index 0000000..87acc8b
--- /dev/null
+++ b/date-fns/src/locale/en-US/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(b|a)/i,
+ abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
+ wide: /^(before christ|before common era|anno domini|common era)/i
+}
+var parseEraPatterns = {
+ any: [/^b/i, /^(a|c)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](th|st|nd|rd)? quarter/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
+ wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^may/i,
+ /^jun/i,
+ /^jul/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smtwf]/i,
+ short: /^(su|mo|tu|we|th|fr|sa)/i,
+ abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
+ wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
+}
+var parseDayPatterns = {
+ narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
+ any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
+ any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mi/i,
+ noon: /^no/i,
+ morning: /morning/i,
+ afternoon: /afternoon/i,
+ evening: /evening/i,
+ night: /night/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/en-US/index.d.ts b/date-fns/src/locale/en-US/index.d.ts
new file mode 100644
index 0000000..967f257
--- /dev/null
+++ b/date-fns/src/locale/en-US/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { enUS } from 'date-fns/locale'
+export default enUS
diff --git a/date-fns/src/locale/en-US/index.js b/date-fns/src/locale/en-US/index.js
new file mode 100644
index 0000000..944103c
--- /dev/null
+++ b/date-fns/src/locale/en-US/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary English locale (United States).
+ * @language English
+ * @iso-639-2 eng
+ * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}
+ * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}
+ */
+var locale = {
+ code: 'en-US',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/en-US/index.js.flow b/date-fns/src/locale/en-US/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/en-US/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/en-US/snapshot.md b/date-fns/src/locale/en-US/snapshot.md
new file mode 100644
index 0000000..19e6dcb
--- /dev/null
+++ b/date-fns/src/locale/en-US/snapshot.md
@@ -0,0 +1,304 @@
+# English (en-US) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987th | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987th | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1st | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49th | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11th | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28th | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365th | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6th | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6th | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1st | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55th | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1st | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55th | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 02/11/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | Feb 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | May 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | February 11th, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | May 29th, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Wednesday, February 11th, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sunday, May 29th, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 02/11/1987, 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453, 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | Feb 11, 1987, 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | May 29, 1453, 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | February 11th, 1987 at 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | May 29th, 1453 at 11:59:59 PM GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Wednesday, February 11th, 1987 at 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sunday, May 29th, 1453 at 11:59:59 PM GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | about 6 years | about 6 years | in about 6 years |
+| 2005-01-01T00:00:00.000Z | about 5 years | about 5 years | in about 5 years |
+| 2004-01-01T00:00:00.000Z | about 4 years | about 4 years | in about 4 years |
+| 2003-01-01T00:00:00.000Z | about 3 years | about 3 years | in about 3 years |
+| 2002-01-01T00:00:00.000Z | about 2 years | about 2 years | in about 2 years |
+| 2001-06-01T00:00:00.000Z | over 1 year | over 1 year | in over 1 year |
+| 2001-02-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2001-01-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2000-06-01T00:00:00.000Z | 5 months | 5 months | in 5 months |
+| 2000-03-01T00:00:00.000Z | 2 months | 2 months | in 2 months |
+| 2000-02-01T00:00:00.000Z | about 1 month | about 1 month | in about 1 month |
+| 2000-01-15T00:00:00.000Z | 14 days | 14 days | in 14 days |
+| 2000-01-02T00:00:00.000Z | 1 day | 1 day | in 1 day |
+| 2000-01-01T06:00:00.000Z | about 6 hours | about 6 hours | in about 6 hours |
+| 2000-01-01T01:00:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:45:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | in 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | in 15 minutes |
+| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | in 1 minute |
+| 2000-01-01T00:00:25.000Z | less than a minute | half a minute | in less than a minute |
+| 2000-01-01T00:00:15.000Z | less than a minute | less than 20 seconds | in less than a minute |
+| 2000-01-01T00:00:05.000Z | less than a minute | less than 10 seconds | in less than a minute |
+| 2000-01-01T00:00:00.000Z | less than a minute | less than 5 seconds | less than a minute ago |
+| 1999-12-31T23:59:55.000Z | less than a minute | less than 10 seconds | less than a minute ago |
+| 1999-12-31T23:59:45.000Z | less than a minute | less than 20 seconds | less than a minute ago |
+| 1999-12-31T23:59:35.000Z | less than a minute | half a minute | less than a minute ago |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | 1 minute ago |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | 15 minutes ago |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | 30 minutes ago |
+| 1999-12-31T23:15:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T23:00:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T18:00:00.000Z | about 6 hours | about 6 hours | about 6 hours ago |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days | 2 days ago |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days | 17 days ago |
+| 1999-12-01T00:00:00.000Z | about 1 month | about 1 month | about 1 month ago |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months | 2 months ago |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months | 7 months ago |
+| 1999-01-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-12-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-06-01T00:00:00.000Z | over 1 year | over 1 year | over 1 year ago |
+| 1998-01-01T00:00:00.000Z | about 2 years | about 2 years | about 2 years ago |
+| 1997-01-01T00:00:00.000Z | about 3 years | about 3 years | about 3 years ago |
+| 1996-01-01T00:00:00.000Z | about 4 years | about 4 years | about 4 years ago |
+| 1995-01-01T00:00:00.000Z | about 5 years | about 5 years | about 5 years ago |
+| 1994-01-01T00:00:00.000Z | about 6 years | about 6 years | about 6 years ago |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 years | in 6 years | 52608 hours |
+| 2005-01-01T00:00:00.000Z | 5 years | in 5 years | 43848 hours |
+| 2004-01-01T00:00:00.000Z | 4 years | in 4 years | 35064 hours |
+| 2003-01-01T00:00:00.000Z | 3 years | in 3 years | 26304 hours |
+| 2002-01-01T00:00:00.000Z | 2 years | in 2 years | 17544 hours |
+| 2001-06-01T00:00:00.000Z | 1 year | in 1 year | 12408 hours |
+| 2001-02-01T00:00:00.000Z | 1 year | in 1 year | 9528 hours |
+| 2001-01-01T00:00:00.000Z | 1 year | in 1 year | 8784 hours |
+| 2000-06-01T00:00:00.000Z | 5 months | in 5 months | 3648 hours |
+| 2000-03-01T00:00:00.000Z | 2 months | in 2 months | 1440 hours |
+| 2000-02-01T00:00:00.000Z | 1 month | in 1 month | 744 hours |
+| 2000-01-15T00:00:00.000Z | 14 days | in 14 days | 336 hours |
+| 2000-01-02T00:00:00.000Z | 1 day | in 1 day | 24 hours |
+| 2000-01-01T06:00:00.000Z | 6 hours | in 6 hours | 6 hours |
+| 2000-01-01T01:00:00.000Z | 1 hour | in 1 hour | 1 hour |
+| 2000-01-01T00:45:00.000Z | 45 minutes | in 45 minutes | 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | in 30 minutes | 1 hour |
+| 2000-01-01T00:15:00.000Z | 15 minutes | in 15 minutes | 0 hours |
+| 2000-01-01T00:01:00.000Z | 1 minute | in 1 minute | 0 hours |
+| 2000-01-01T00:00:25.000Z | 25 seconds | in 25 seconds | 0 hours |
+| 2000-01-01T00:00:15.000Z | 15 seconds | in 15 seconds | 0 hours |
+| 2000-01-01T00:00:05.000Z | 5 seconds | in 5 seconds | 0 hours |
+| 2000-01-01T00:00:00.000Z | 0 seconds | 0 seconds ago | 0 hours |
+| 1999-12-31T23:59:55.000Z | 5 seconds | 5 seconds ago | 0 hours |
+| 1999-12-31T23:59:45.000Z | 15 seconds | 15 seconds ago | 0 hours |
+| 1999-12-31T23:59:35.000Z | 25 seconds | 25 seconds ago | 0 hours |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute ago | 0 hours |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes ago | 0 hours |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes ago | 1 hour |
+| 1999-12-31T23:15:00.000Z | 45 minutes | 45 minutes ago | 1 hour |
+| 1999-12-31T23:00:00.000Z | 1 hour | 1 hour ago | 1 hour |
+| 1999-12-31T18:00:00.000Z | 6 hours | 6 hours ago | 6 hours |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days ago | 48 hours |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days ago | 408 hours |
+| 1999-12-01T00:00:00.000Z | 1 month | 1 month ago | 744 hours |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months ago | 1464 hours |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months ago | 5136 hours |
+| 1999-01-01T00:00:00.000Z | 1 year | 1 year ago | 8760 hours |
+| 1998-12-01T00:00:00.000Z | 1 year | 1 year ago | 9504 hours |
+| 1998-06-01T00:00:00.000Z | 2 years | 2 years ago | 13896 hours |
+| 1998-01-01T00:00:00.000Z | 2 years | 2 years ago | 17520 hours |
+| 1997-01-01T00:00:00.000Z | 3 years | 3 years ago | 26280 hours |
+| 1996-01-01T00:00:00.000Z | 4 years | 4 years ago | 35064 hours |
+| 1995-01-01T00:00:00.000Z | 5 years | 5 years ago | 43824 hours |
+| 1994-01-01T00:00:00.000Z | 6 years | 6 years ago | 52584 hours |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 01/10/2000 |
+| 2000-01-05T00:00:00.000Z | Wednesday at 12:00 AM |
+| 2000-01-02T00:00:00.000Z | tomorrow at 12:00 AM |
+| 2000-01-01T00:00:00.000Z | today at 12:00 AM |
+| 1999-12-31T00:00:00.000Z | yesterday at 12:00 AM |
+| 1999-12-27T00:00:00.000Z | last Monday at 12:00 AM |
+| 1999-12-21T00:00:00.000Z | 12/21/1999 |
diff --git a/date-fns/src/locale/en-ZA/_lib/formatLong/index.js b/date-fns/src/locale/en-ZA/_lib/formatLong/index.js
new file mode 100644
index 0000000..8e674cd
--- /dev/null
+++ b/date-fns/src/locale/en-ZA/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'at' {{time}}",
+ long: "{{date}} 'at' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/en-ZA/index.d.ts b/date-fns/src/locale/en-ZA/index.d.ts
new file mode 100644
index 0000000..ebdd1c8
--- /dev/null
+++ b/date-fns/src/locale/en-ZA/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { enZA } from 'date-fns/locale'
+export default enZA
diff --git a/date-fns/src/locale/en-ZA/index.js b/date-fns/src/locale/en-ZA/index.js
new file mode 100644
index 0000000..4d4f300
--- /dev/null
+++ b/date-fns/src/locale/en-ZA/index.js
@@ -0,0 +1,28 @@
+import formatDistance from '../en-US/_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from '../en-US/_lib/formatRelative/index'
+import localize from '../en-US/_lib/localize/index'
+import match from '../en-US/_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary English locale (South Africa).
+ * @language English
+ * @iso-639-2 eng
+ * @author Shaila Kavrakova [@shaykav]{@link https://github.com/shaykav}
+ */
+var locale = {
+ code: 'en-ZA',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0, // Sunday is the first day of the week.
+ firstWeekContainsDate: 1 // The week that contains Jan 1st is the first week of the year.
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/en-ZA/index.js.flow b/date-fns/src/locale/en-ZA/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/en-ZA/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/en-ZA/snapshot.md b/date-fns/src/locale/en-ZA/snapshot.md
new file mode 100644
index 0000000..e4eace2
--- /dev/null
+++ b/date-fns/src/locale/en-ZA/snapshot.md
@@ -0,0 +1,304 @@
+# English (en-ZA) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987th | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987th | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5th | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1st | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49th | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11th | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28th | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365th | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6th | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6th | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | at night | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1st | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55th | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1st | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55th | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 February 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Feb 1987, 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453, 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 February 1987 at 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 at 11:59:59 PM GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Wednesday, 11 February 1987 at 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sunday, 29 May 1453 at 11:59:59 PM GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | about 6 years | about 6 years | in about 6 years |
+| 2005-01-01T00:00:00.000Z | about 5 years | about 5 years | in about 5 years |
+| 2004-01-01T00:00:00.000Z | about 4 years | about 4 years | in about 4 years |
+| 2003-01-01T00:00:00.000Z | about 3 years | about 3 years | in about 3 years |
+| 2002-01-01T00:00:00.000Z | about 2 years | about 2 years | in about 2 years |
+| 2001-06-01T00:00:00.000Z | over 1 year | over 1 year | in over 1 year |
+| 2001-02-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2001-01-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
+| 2000-06-01T00:00:00.000Z | 5 months | 5 months | in 5 months |
+| 2000-03-01T00:00:00.000Z | 2 months | 2 months | in 2 months |
+| 2000-02-01T00:00:00.000Z | about 1 month | about 1 month | in about 1 month |
+| 2000-01-15T00:00:00.000Z | 14 days | 14 days | in 14 days |
+| 2000-01-02T00:00:00.000Z | 1 day | 1 day | in 1 day |
+| 2000-01-01T06:00:00.000Z | about 6 hours | about 6 hours | in about 6 hours |
+| 2000-01-01T01:00:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:45:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | in 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | in 15 minutes |
+| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | in 1 minute |
+| 2000-01-01T00:00:25.000Z | less than a minute | half a minute | in less than a minute |
+| 2000-01-01T00:00:15.000Z | less than a minute | less than 20 seconds | in less than a minute |
+| 2000-01-01T00:00:05.000Z | less than a minute | less than 10 seconds | in less than a minute |
+| 2000-01-01T00:00:00.000Z | less than a minute | less than 5 seconds | less than a minute ago |
+| 1999-12-31T23:59:55.000Z | less than a minute | less than 10 seconds | less than a minute ago |
+| 1999-12-31T23:59:45.000Z | less than a minute | less than 20 seconds | less than a minute ago |
+| 1999-12-31T23:59:35.000Z | less than a minute | half a minute | less than a minute ago |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | 1 minute ago |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | 15 minutes ago |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | 30 minutes ago |
+| 1999-12-31T23:15:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T23:00:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
+| 1999-12-31T18:00:00.000Z | about 6 hours | about 6 hours | about 6 hours ago |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days | 2 days ago |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days | 17 days ago |
+| 1999-12-01T00:00:00.000Z | about 1 month | about 1 month | about 1 month ago |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months | 2 months ago |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months | 7 months ago |
+| 1999-01-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-12-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
+| 1998-06-01T00:00:00.000Z | over 1 year | over 1 year | over 1 year ago |
+| 1998-01-01T00:00:00.000Z | about 2 years | about 2 years | about 2 years ago |
+| 1997-01-01T00:00:00.000Z | about 3 years | about 3 years | about 3 years ago |
+| 1996-01-01T00:00:00.000Z | about 4 years | about 4 years | about 4 years ago |
+| 1995-01-01T00:00:00.000Z | about 5 years | about 5 years | about 5 years ago |
+| 1994-01-01T00:00:00.000Z | about 6 years | about 6 years | about 6 years ago |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 years | in 6 years | 52608 hours |
+| 2005-01-01T00:00:00.000Z | 5 years | in 5 years | 43848 hours |
+| 2004-01-01T00:00:00.000Z | 4 years | in 4 years | 35064 hours |
+| 2003-01-01T00:00:00.000Z | 3 years | in 3 years | 26304 hours |
+| 2002-01-01T00:00:00.000Z | 2 years | in 2 years | 17544 hours |
+| 2001-06-01T00:00:00.000Z | 1 year | in 1 year | 12408 hours |
+| 2001-02-01T00:00:00.000Z | 1 year | in 1 year | 9528 hours |
+| 2001-01-01T00:00:00.000Z | 1 year | in 1 year | 8784 hours |
+| 2000-06-01T00:00:00.000Z | 5 months | in 5 months | 3648 hours |
+| 2000-03-01T00:00:00.000Z | 2 months | in 2 months | 1440 hours |
+| 2000-02-01T00:00:00.000Z | 1 month | in 1 month | 744 hours |
+| 2000-01-15T00:00:00.000Z | 14 days | in 14 days | 336 hours |
+| 2000-01-02T00:00:00.000Z | 1 day | in 1 day | 24 hours |
+| 2000-01-01T06:00:00.000Z | 6 hours | in 6 hours | 6 hours |
+| 2000-01-01T01:00:00.000Z | 1 hour | in 1 hour | 1 hour |
+| 2000-01-01T00:45:00.000Z | 45 minutes | in 45 minutes | 1 hour |
+| 2000-01-01T00:30:00.000Z | 30 minutes | in 30 minutes | 1 hour |
+| 2000-01-01T00:15:00.000Z | 15 minutes | in 15 minutes | 0 hours |
+| 2000-01-01T00:01:00.000Z | 1 minute | in 1 minute | 0 hours |
+| 2000-01-01T00:00:25.000Z | 25 seconds | in 25 seconds | 0 hours |
+| 2000-01-01T00:00:15.000Z | 15 seconds | in 15 seconds | 0 hours |
+| 2000-01-01T00:00:05.000Z | 5 seconds | in 5 seconds | 0 hours |
+| 2000-01-01T00:00:00.000Z | 0 seconds | 0 seconds ago | 0 hours |
+| 1999-12-31T23:59:55.000Z | 5 seconds | 5 seconds ago | 0 hours |
+| 1999-12-31T23:59:45.000Z | 15 seconds | 15 seconds ago | 0 hours |
+| 1999-12-31T23:59:35.000Z | 25 seconds | 25 seconds ago | 0 hours |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute ago | 0 hours |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes ago | 0 hours |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes ago | 1 hour |
+| 1999-12-31T23:15:00.000Z | 45 minutes | 45 minutes ago | 1 hour |
+| 1999-12-31T23:00:00.000Z | 1 hour | 1 hour ago | 1 hour |
+| 1999-12-31T18:00:00.000Z | 6 hours | 6 hours ago | 6 hours |
+| 1999-12-30T00:00:00.000Z | 2 days | 2 days ago | 48 hours |
+| 1999-12-15T00:00:00.000Z | 17 days | 17 days ago | 408 hours |
+| 1999-12-01T00:00:00.000Z | 1 month | 1 month ago | 744 hours |
+| 1999-11-01T00:00:00.000Z | 2 months | 2 months ago | 1464 hours |
+| 1999-06-01T00:00:00.000Z | 7 months | 7 months ago | 5136 hours |
+| 1999-01-01T00:00:00.000Z | 1 year | 1 year ago | 8760 hours |
+| 1998-12-01T00:00:00.000Z | 1 year | 1 year ago | 9504 hours |
+| 1998-06-01T00:00:00.000Z | 2 years | 2 years ago | 13896 hours |
+| 1998-01-01T00:00:00.000Z | 2 years | 2 years ago | 17520 hours |
+| 1997-01-01T00:00:00.000Z | 3 years | 3 years ago | 26280 hours |
+| 1996-01-01T00:00:00.000Z | 4 years | 4 years ago | 35064 hours |
+| 1995-01-01T00:00:00.000Z | 5 years | 5 years ago | 43824 hours |
+| 1994-01-01T00:00:00.000Z | 6 years | 6 years ago | 52584 hours |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | Wednesday at 12:00 AM |
+| 2000-01-02T00:00:00.000Z | tomorrow at 12:00 AM |
+| 2000-01-01T00:00:00.000Z | today at 12:00 AM |
+| 1999-12-31T00:00:00.000Z | yesterday at 12:00 AM |
+| 1999-12-27T00:00:00.000Z | last Monday at 12:00 AM |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/eo/_lib/formatDistance/index.js b/date-fns/src/locale/eo/_lib/formatDistance/index.js
new file mode 100644
index 0000000..bfadf02
--- /dev/null
+++ b/date-fns/src/locale/eo/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'malpli ol sekundo',
+ other: 'malpli ol {{count}} sekundoj'
+ },
+
+ xSeconds: {
+ one: '1 sekundo',
+ other: '{{count}} sekundoj'
+ },
+
+ halfAMinute: 'duonminuto',
+
+ lessThanXMinutes: {
+ one: 'malpli ol minuto',
+ other: 'malpli ol {{count}} minutoj'
+ },
+
+ xMinutes: {
+ one: '1 minuto',
+ other: '{{count}} minutoj'
+ },
+
+ aboutXHours: {
+ one: 'proksimume 1 horo',
+ other: 'proksimume {{count}} horoj'
+ },
+
+ xHours: {
+ one: '1 horo',
+ other: '{{count}} horoj'
+ },
+
+ xDays: {
+ one: '1 tago',
+ other: '{{count}} tagoj'
+ },
+
+ aboutXMonths: {
+ one: 'proksimume 1 monato',
+ other: 'proksimume {{count}} monatoj'
+ },
+
+ xWeeks: {
+ one: '1 semajno',
+ other: '{{count}} semajnoj'
+ },
+
+ aboutXWeeks: {
+ one: 'proksimume 1 semajno',
+ other: 'proksimume {{count}} semajnoj'
+ },
+
+ xMonths: {
+ one: '1 monato',
+ other: '{{count}} monatoj'
+ },
+
+ aboutXYears: {
+ one: 'proksimume 1 jaro',
+ other: 'proksimume {{count}} jaroj'
+ },
+
+ xYears: {
+ one: '1 jaro',
+ other: '{{count}} jaroj'
+ },
+
+ overXYears: {
+ one: 'pli ol 1 jaro',
+ other: 'pli ol {{count}} jaroj'
+ },
+
+ almostXYears: {
+ one: 'preskaŭ 1 jaro',
+ other: 'preskaŭ {{count}} jaroj'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'post ' + result
+ } else {
+ return 'antaŭ ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/eo/_lib/formatLong/index.js b/date-fns/src/locale/eo/_lib/formatLong/index.js
new file mode 100644
index 0000000..67e73a7
--- /dev/null
+++ b/date-fns/src/locale/eo/_lib/formatLong/index.js
@@ -0,0 +1,38 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, do 'de' MMMM y",
+ long: 'y-MMMM-dd',
+ medium: 'y-MMM-dd',
+ short: 'yyyy-MM-dd'
+}
+
+var timeFormats = {
+ full: "Ho 'horo kaj' m:ss zzzz",
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ any: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'any'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/eo/_lib/formatRelative/index.js b/date-fns/src/locale/eo/_lib/formatRelative/index.js
new file mode 100644
index 0000000..f9389e4
--- /dev/null
+++ b/date-fns/src/locale/eo/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'pasinta' eeee 'je' p",
+ yesterday: "'hieraŭ je' p",
+ today: "'hodiaŭ je' p",
+ tomorrow: "'morgaŭ je' p",
+ nextWeek: "eeee 'je' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/eo/_lib/localize/index.js b/date-fns/src/locale/eo/_lib/localize/index.js
new file mode 100644
index 0000000..d046d81
--- /dev/null
+++ b/date-fns/src/locale/eo/_lib/localize/index.js
@@ -0,0 +1,124 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['aK', 'pK'],
+ abbreviated: ['a.K.E.', 'p.K.E.'],
+ wide: ['antaŭ Komuna Erao', 'Komuna Erao']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['K1', 'K2', 'K3', 'K4'],
+ wide: ['1-a kvaronjaro', '2-a kvaronjaro', '3-a kvaronjaro', '4-a kvaronjaro']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'jan',
+ 'feb',
+ 'mar',
+ 'apr',
+ 'maj',
+ 'jun',
+ 'jul',
+ 'aŭg',
+ 'sep',
+ 'okt',
+ 'nov',
+ 'dec'
+ ],
+ wide: [
+ 'januaro',
+ 'februaro',
+ 'marto',
+ 'aprilo',
+ 'majo',
+ 'junio',
+ 'julio',
+ 'aŭgusto',
+ 'septembro',
+ 'oktobro',
+ 'novembro',
+ 'decembro'
+ ]
+}
+
+var dayValues = {
+ narrow: ['D', 'L', 'M', 'M', 'Ĵ', 'V', 'S'],
+ short: ['di', 'lu', 'ma', 'me', 'ĵa', 've', 'sa'],
+ abbreviated: ['dim', 'lun', 'mar', 'mer', 'ĵaŭ', 'ven', 'sab'],
+ wide: ['dimanĉo', 'lundo', 'mardo', 'merkredo', 'ĵaŭdo', 'vendredo', 'sabato']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'noktomezo',
+ noon: 'tagmezo',
+ morning: 'matene',
+ afternoon: 'posttagmeze',
+ evening: 'vespere',
+ night: 'nokte'
+ },
+ abbreviated: {
+ am: 'a.t.m.',
+ pm: 'p.t.m.',
+ midnight: 'noktomezo',
+ noon: 'tagmezo',
+ morning: 'matene',
+ afternoon: 'posttagmeze',
+ evening: 'vespere',
+ night: 'nokte'
+ },
+ wide: {
+ am: 'antaŭtagmeze',
+ pm: 'posttagmeze',
+ midnight: 'noktomezo',
+ noon: 'tagmezo',
+ morning: 'matene',
+ afternoon: 'posttagmeze',
+ evening: 'vespere',
+ night: 'nokte'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + '-a'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/eo/_lib/match/index.js b/date-fns/src/locale/eo/_lib/match/index.js
new file mode 100644
index 0000000..a194b0c
--- /dev/null
+++ b/date-fns/src/locale/eo/_lib/match/index.js
@@ -0,0 +1,138 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-?a)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^([ap]k)/i,
+ abbreviated: /^([ap]\.?\s?k\.?\s?e\.?)/i,
+ wide: /^((antaǔ |post )?komuna erao)/i
+}
+var parseEraPatterns = {
+ any: [/^a/i, /^[kp]/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^k[1234]/i,
+ wide: /^[1234](-?a)? kvaronjaro/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mar|apr|maj|jun|jul|a(ŭ|ux|uh|u)g|sep|okt|nov|dec)/i,
+ wide: /^(januaro|februaro|marto|aprilo|majo|junio|julio|a(ŭ|ux|uh|u)gusto|septembro|oktobro|novembro|decembro)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^maj/i,
+ /^jun/i,
+ /^jul/i,
+ /^a(u|ŭ)/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[dlmĵjvs]/i,
+ short: /^(di|lu|ma|me|(ĵ|jx|jh|j)a|ve|sa)/i,
+ abbreviated: /^(dim|lun|mar|mer|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)|ven|sab)/i,
+ wide: /^(diman(ĉ|cx|ch|c)o|lundo|mardo|merkredo|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)do|vendredo|sabato)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^(j|ĵ)/i, /^v/i, /^s/i],
+ any: [/^d/i, /^l/i, /^ma/i, /^me/i, /^(j|ĵ)/i, /^v/i, /^s/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^([ap]|(posttagmez|noktomez|tagmez|maten|vesper|nokt)[eo])/i,
+ abbreviated: /^([ap][.\s]?t[.\s]?m[.\s]?|(posttagmez|noktomez|tagmez|maten|vesper|nokt)[eo])/i,
+ wide: /^(anta(ŭ|ux)tagmez|posttagmez|noktomez|tagmez|maten|vesper|nokt)[eo]/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^noktom/i,
+ noon: /^t/i,
+ morning: /^m/i,
+ afternoon: /^posttagmeze/i,
+ evening: /^v/i,
+ night: /^n/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/eo/index.d.ts b/date-fns/src/locale/eo/index.d.ts
new file mode 100644
index 0000000..40716b3
--- /dev/null
+++ b/date-fns/src/locale/eo/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eo } from 'date-fns/locale'
+export default eo
diff --git a/date-fns/src/locale/eo/index.js b/date-fns/src/locale/eo/index.js
new file mode 100644
index 0000000..04adee5
--- /dev/null
+++ b/date-fns/src/locale/eo/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Esperanto locale.
+ * @language Esperanto
+ * @iso-639-2 epo
+ * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}
+ */
+var locale = {
+ code: 'eo',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/eo/index.js.flow b/date-fns/src/locale/eo/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/eo/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/eo/snapshot.md b/date-fns/src/locale/eo/snapshot.md
new file mode 100644
index 0000000..0e3e722
--- /dev/null
+++ b/date-fns/src/locale/eo/snapshot.md
@@ -0,0 +1,304 @@
+# Esperanto (eo) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-a | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-a | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-a | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4-a | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-a | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-a | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-a kvaronjaro | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-a kvaronjaro | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-a | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-a | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-a kvaronjaro | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-a kvaronjaro | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-a | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-a | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februaro | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julio | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-a | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-a | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februaro | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julio | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-a | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-a | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-a | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-a | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-a | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-a | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-a | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | lundo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredo | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-a | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | lundo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredo | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-a | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | lundo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredo | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-a | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | lundo | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredo | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | antaŭtagmeze | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | posttagmeze | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | posttagmeze | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | antaŭtagmeze | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.t.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.t.m. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | antaŭtagmeze | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | posttagmeze | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | posttagmeze | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | antaŭtagmeze | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | matene | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | posttagmeze | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vespere | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nokte | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | matene | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | posttagmeze | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vespere | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nokte | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | matene | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | posttagmeze | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vespere | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nokte | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | matene | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | posttagmeze | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vespere | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nokte | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | matene | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | posttagmeze | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | vespere | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nokte | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-a | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-a | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-a | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-a | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-a | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-a | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-a | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-a | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-a | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-a | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-a | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-a | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 1987-feb-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-maj-29 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987-februaro-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-majo-29 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | merkredo, 11-a de februaro 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | dimanĉo, 29-a de majo 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12-a horo kaj 13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23-a horo kaj 59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987-02-11 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 1987-feb-11 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-maj-29 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987-februaro-11 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453-majo-29 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | merkredo, 11-a de februaro 1987 12-a horo kaj 13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | dimanĉo, 29-a de majo 1453 23-a horo kaj 59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------- | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | proksimume 6 jaroj | proksimume 6 jaroj | post proksimume 6 jaroj |
+| 2005-01-01T00:00:00.000Z | proksimume 5 jaroj | proksimume 5 jaroj | post proksimume 5 jaroj |
+| 2004-01-01T00:00:00.000Z | proksimume 4 jaroj | proksimume 4 jaroj | post proksimume 4 jaroj |
+| 2003-01-01T00:00:00.000Z | proksimume 3 jaroj | proksimume 3 jaroj | post proksimume 3 jaroj |
+| 2002-01-01T00:00:00.000Z | proksimume 2 jaroj | proksimume 2 jaroj | post proksimume 2 jaroj |
+| 2001-06-01T00:00:00.000Z | pli ol 1 jaro | pli ol 1 jaro | post pli ol 1 jaro |
+| 2001-02-01T00:00:00.000Z | proksimume 1 jaro | proksimume 1 jaro | post proksimume 1 jaro |
+| 2001-01-01T00:00:00.000Z | proksimume 1 jaro | proksimume 1 jaro | post proksimume 1 jaro |
+| 2000-06-01T00:00:00.000Z | 5 monatoj | 5 monatoj | post 5 monatoj |
+| 2000-03-01T00:00:00.000Z | 2 monatoj | 2 monatoj | post 2 monatoj |
+| 2000-02-01T00:00:00.000Z | proksimume 1 monato | proksimume 1 monato | post proksimume 1 monato |
+| 2000-01-15T00:00:00.000Z | 14 tagoj | 14 tagoj | post 14 tagoj |
+| 2000-01-02T00:00:00.000Z | 1 tago | 1 tago | post 1 tago |
+| 2000-01-01T06:00:00.000Z | proksimume 6 horoj | proksimume 6 horoj | post proksimume 6 horoj |
+| 2000-01-01T01:00:00.000Z | proksimume 1 horo | proksimume 1 horo | post proksimume 1 horo |
+| 2000-01-01T00:45:00.000Z | proksimume 1 horo | proksimume 1 horo | post proksimume 1 horo |
+| 2000-01-01T00:30:00.000Z | 30 minutoj | 30 minutoj | post 30 minutoj |
+| 2000-01-01T00:15:00.000Z | 15 minutoj | 15 minutoj | post 15 minutoj |
+| 2000-01-01T00:01:00.000Z | 1 minuto | 1 minuto | post 1 minuto |
+| 2000-01-01T00:00:25.000Z | malpli ol minuto | duonminuto | post malpli ol minuto |
+| 2000-01-01T00:00:15.000Z | malpli ol minuto | malpli ol 20 sekundoj | post malpli ol minuto |
+| 2000-01-01T00:00:05.000Z | malpli ol minuto | malpli ol 10 sekundoj | post malpli ol minuto |
+| 2000-01-01T00:00:00.000Z | malpli ol minuto | malpli ol 5 sekundoj | antaŭ malpli ol minuto |
+| 1999-12-31T23:59:55.000Z | malpli ol minuto | malpli ol 10 sekundoj | antaŭ malpli ol minuto |
+| 1999-12-31T23:59:45.000Z | malpli ol minuto | malpli ol 20 sekundoj | antaŭ malpli ol minuto |
+| 1999-12-31T23:59:35.000Z | malpli ol minuto | duonminuto | antaŭ malpli ol minuto |
+| 1999-12-31T23:59:00.000Z | 1 minuto | 1 minuto | antaŭ 1 minuto |
+| 1999-12-31T23:45:00.000Z | 15 minutoj | 15 minutoj | antaŭ 15 minutoj |
+| 1999-12-31T23:30:00.000Z | 30 minutoj | 30 minutoj | antaŭ 30 minutoj |
+| 1999-12-31T23:15:00.000Z | proksimume 1 horo | proksimume 1 horo | antaŭ proksimume 1 horo |
+| 1999-12-31T23:00:00.000Z | proksimume 1 horo | proksimume 1 horo | antaŭ proksimume 1 horo |
+| 1999-12-31T18:00:00.000Z | proksimume 6 horoj | proksimume 6 horoj | antaŭ proksimume 6 horoj |
+| 1999-12-30T00:00:00.000Z | 2 tagoj | 2 tagoj | antaŭ 2 tagoj |
+| 1999-12-15T00:00:00.000Z | 17 tagoj | 17 tagoj | antaŭ 17 tagoj |
+| 1999-12-01T00:00:00.000Z | proksimume 1 monato | proksimume 1 monato | antaŭ proksimume 1 monato |
+| 1999-11-01T00:00:00.000Z | 2 monatoj | 2 monatoj | antaŭ 2 monatoj |
+| 1999-06-01T00:00:00.000Z | 7 monatoj | 7 monatoj | antaŭ 7 monatoj |
+| 1999-01-01T00:00:00.000Z | proksimume 1 jaro | proksimume 1 jaro | antaŭ proksimume 1 jaro |
+| 1998-12-01T00:00:00.000Z | proksimume 1 jaro | proksimume 1 jaro | antaŭ proksimume 1 jaro |
+| 1998-06-01T00:00:00.000Z | pli ol 1 jaro | pli ol 1 jaro | antaŭ pli ol 1 jaro |
+| 1998-01-01T00:00:00.000Z | proksimume 2 jaroj | proksimume 2 jaroj | antaŭ proksimume 2 jaroj |
+| 1997-01-01T00:00:00.000Z | proksimume 3 jaroj | proksimume 3 jaroj | antaŭ proksimume 3 jaroj |
+| 1996-01-01T00:00:00.000Z | proksimume 4 jaroj | proksimume 4 jaroj | antaŭ proksimume 4 jaroj |
+| 1995-01-01T00:00:00.000Z | proksimume 5 jaroj | proksimume 5 jaroj | antaŭ proksimume 5 jaroj |
+| 1994-01-01T00:00:00.000Z | proksimume 6 jaroj | proksimume 6 jaroj | antaŭ proksimume 6 jaroj |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 jaroj | post 6 jaroj | 52608 horoj |
+| 2005-01-01T00:00:00.000Z | 5 jaroj | post 5 jaroj | 43848 horoj |
+| 2004-01-01T00:00:00.000Z | 4 jaroj | post 4 jaroj | 35064 horoj |
+| 2003-01-01T00:00:00.000Z | 3 jaroj | post 3 jaroj | 26304 horoj |
+| 2002-01-01T00:00:00.000Z | 2 jaroj | post 2 jaroj | 17544 horoj |
+| 2001-06-01T00:00:00.000Z | 1 jaro | post 1 jaro | 12408 horoj |
+| 2001-02-01T00:00:00.000Z | 1 jaro | post 1 jaro | 9528 horoj |
+| 2001-01-01T00:00:00.000Z | 1 jaro | post 1 jaro | 8784 horoj |
+| 2000-06-01T00:00:00.000Z | 5 monatoj | post 5 monatoj | 3648 horoj |
+| 2000-03-01T00:00:00.000Z | 2 monatoj | post 2 monatoj | 1440 horoj |
+| 2000-02-01T00:00:00.000Z | 1 monato | post 1 monato | 744 horoj |
+| 2000-01-15T00:00:00.000Z | 14 tagoj | post 14 tagoj | 336 horoj |
+| 2000-01-02T00:00:00.000Z | 1 tago | post 1 tago | 24 horoj |
+| 2000-01-01T06:00:00.000Z | 6 horoj | post 6 horoj | 6 horoj |
+| 2000-01-01T01:00:00.000Z | 1 horo | post 1 horo | 1 horo |
+| 2000-01-01T00:45:00.000Z | 45 minutoj | post 45 minutoj | 1 horo |
+| 2000-01-01T00:30:00.000Z | 30 minutoj | post 30 minutoj | 1 horo |
+| 2000-01-01T00:15:00.000Z | 15 minutoj | post 15 minutoj | 0 horoj |
+| 2000-01-01T00:01:00.000Z | 1 minuto | post 1 minuto | 0 horoj |
+| 2000-01-01T00:00:25.000Z | 25 sekundoj | post 25 sekundoj | 0 horoj |
+| 2000-01-01T00:00:15.000Z | 15 sekundoj | post 15 sekundoj | 0 horoj |
+| 2000-01-01T00:00:05.000Z | 5 sekundoj | post 5 sekundoj | 0 horoj |
+| 2000-01-01T00:00:00.000Z | 0 sekundoj | antaŭ 0 sekundoj | 0 horoj |
+| 1999-12-31T23:59:55.000Z | 5 sekundoj | antaŭ 5 sekundoj | 0 horoj |
+| 1999-12-31T23:59:45.000Z | 15 sekundoj | antaŭ 15 sekundoj | 0 horoj |
+| 1999-12-31T23:59:35.000Z | 25 sekundoj | antaŭ 25 sekundoj | 0 horoj |
+| 1999-12-31T23:59:00.000Z | 1 minuto | antaŭ 1 minuto | 0 horoj |
+| 1999-12-31T23:45:00.000Z | 15 minutoj | antaŭ 15 minutoj | 0 horoj |
+| 1999-12-31T23:30:00.000Z | 30 minutoj | antaŭ 30 minutoj | 1 horo |
+| 1999-12-31T23:15:00.000Z | 45 minutoj | antaŭ 45 minutoj | 1 horo |
+| 1999-12-31T23:00:00.000Z | 1 horo | antaŭ 1 horo | 1 horo |
+| 1999-12-31T18:00:00.000Z | 6 horoj | antaŭ 6 horoj | 6 horoj |
+| 1999-12-30T00:00:00.000Z | 2 tagoj | antaŭ 2 tagoj | 48 horoj |
+| 1999-12-15T00:00:00.000Z | 17 tagoj | antaŭ 17 tagoj | 408 horoj |
+| 1999-12-01T00:00:00.000Z | 1 monato | antaŭ 1 monato | 744 horoj |
+| 1999-11-01T00:00:00.000Z | 2 monatoj | antaŭ 2 monatoj | 1464 horoj |
+| 1999-06-01T00:00:00.000Z | 7 monatoj | antaŭ 7 monatoj | 5136 horoj |
+| 1999-01-01T00:00:00.000Z | 1 jaro | antaŭ 1 jaro | 8760 horoj |
+| 1998-12-01T00:00:00.000Z | 1 jaro | antaŭ 1 jaro | 9504 horoj |
+| 1998-06-01T00:00:00.000Z | 2 jaroj | antaŭ 2 jaroj | 13896 horoj |
+| 1998-01-01T00:00:00.000Z | 2 jaroj | antaŭ 2 jaroj | 17520 horoj |
+| 1997-01-01T00:00:00.000Z | 3 jaroj | antaŭ 3 jaroj | 26280 horoj |
+| 1996-01-01T00:00:00.000Z | 4 jaroj | antaŭ 4 jaroj | 35064 horoj |
+| 1995-01-01T00:00:00.000Z | 5 jaroj | antaŭ 5 jaroj | 43824 horoj |
+| 1994-01-01T00:00:00.000Z | 6 jaroj | antaŭ 6 jaroj | 52584 horoj |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------- |
+| 2000-01-10T00:00:00.000Z | 2000-01-10 |
+| 2000-01-05T00:00:00.000Z | merkredo je 00:00 |
+| 2000-01-02T00:00:00.000Z | morgaŭ je 00:00 |
+| 2000-01-01T00:00:00.000Z | hodiaŭ je 00:00 |
+| 1999-12-31T00:00:00.000Z | hieraŭ je 00:00 |
+| 1999-12-27T00:00:00.000Z | pasinta lundo je 00:00 |
+| 1999-12-21T00:00:00.000Z | 1999-12-21 |
diff --git a/date-fns/src/locale/es/_lib/formatDistance/index.js b/date-fns/src/locale/es/_lib/formatDistance/index.js
new file mode 100644
index 0000000..512e30e
--- /dev/null
+++ b/date-fns/src/locale/es/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'menos de un segundo',
+ other: 'menos de {{count}} segundos'
+ },
+
+ xSeconds: {
+ one: '1 segundo',
+ other: '{{count}} segundos'
+ },
+
+ halfAMinute: 'medio minuto',
+
+ lessThanXMinutes: {
+ one: 'menos de un minuto',
+ other: 'menos de {{count}} minutos'
+ },
+
+ xMinutes: {
+ one: '1 minuto',
+ other: '{{count}} minutos'
+ },
+
+ aboutXHours: {
+ one: 'alrededor de 1 hora',
+ other: 'alrededor de {{count}} horas'
+ },
+
+ xHours: {
+ one: '1 hora',
+ other: '{{count}} horas'
+ },
+
+ xDays: {
+ one: '1 día',
+ other: '{{count}} días'
+ },
+
+ aboutXWeeks: {
+ one: 'alrededor de 1 semana',
+ other: 'alrededor de {{count}} semanas'
+ },
+
+ xWeeks: {
+ one: '1 semana',
+ other: '{{count}} semanas'
+ },
+
+ aboutXMonths: {
+ one: 'alrededor de 1 mes',
+ other: 'alrededor de {{count}} meses'
+ },
+
+ xMonths: {
+ one: '1 mes',
+ other: '{{count}} meses'
+ },
+
+ aboutXYears: {
+ one: 'alrededor de 1 año',
+ other: 'alrededor de {{count}} años'
+ },
+
+ xYears: {
+ one: '1 año',
+ other: '{{count}} años'
+ },
+
+ overXYears: {
+ one: 'más de 1 año',
+ other: 'más de {{count}} años'
+ },
+
+ almostXYears: {
+ one: 'casi 1 año',
+ other: 'casi {{count}} años'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'en ' + result
+ } else {
+ return 'hace ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/es/_lib/formatLong/index.js b/date-fns/src/locale/es/_lib/formatLong/index.js
new file mode 100644
index 0000000..3edd81e
--- /dev/null
+++ b/date-fns/src/locale/es/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, d 'de' MMMM 'de' y",
+ long: "d 'de' MMMM 'de' y",
+ medium: 'd MMM y',
+ short: 'dd/MM/y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'a las' {{time}}",
+ long: "{{date}} 'a las' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/es/_lib/formatRelative/index.js b/date-fns/src/locale/es/_lib/formatRelative/index.js
new file mode 100644
index 0000000..6323dc1
--- /dev/null
+++ b/date-fns/src/locale/es/_lib/formatRelative/index.js
@@ -0,0 +1,24 @@
+var formatRelativeLocale = {
+ lastWeek: "'el' eeee 'pasado a la' LT",
+ yesterday: "'ayer a la' p",
+ today: "'hoy a la' p",
+ tomorrow: "'mañana a la' p",
+ nextWeek: "eeee 'a la' p",
+ other: 'P'
+}
+
+var formatRelativeLocalePlural = {
+ lastWeek: "'el' eeee 'pasado a las' p",
+ yesterday: "'ayer a las' p",
+ today: "'hoy a las' p",
+ tomorrow: "'mañana a las' p",
+ nextWeek: "eeee 'a las' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, date, _baseDate, _options) {
+ if (date.getUTCHours() !== 1) {
+ return formatRelativeLocalePlural[token]
+ }
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/es/_lib/localize/index.js b/date-fns/src/locale/es/_lib/localize/index.js
new file mode 100644
index 0000000..ffdd1a9
--- /dev/null
+++ b/date-fns/src/locale/es/_lib/localize/index.js
@@ -0,0 +1,166 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['AC', 'DC'],
+ abbreviated: ['AC', 'DC'],
+ wide: ['antes de cristo', 'después de cristo']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['T1', 'T2', 'T3', 'T4'],
+ wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']
+}
+
+var monthValues = {
+ narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],
+ abbreviated: [
+ 'ene',
+ 'feb',
+ 'mar',
+ 'abr',
+ 'may',
+ 'jun',
+ 'jul',
+ 'ago',
+ 'sep',
+ 'oct',
+ 'nov',
+ 'dic'
+ ],
+ wide: [
+ 'enero',
+ 'febrero',
+ 'marzo',
+ 'abril',
+ 'mayo',
+ 'junio',
+ 'julio',
+ 'agosto',
+ 'septiembre',
+ 'octubre',
+ 'noviembre',
+ 'diciembre'
+ ]
+}
+
+var dayValues = {
+ narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],
+ short: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 'sa'],
+ abbreviated: ['dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb'],
+ wide: [
+ 'domingo',
+ 'lunes',
+ 'martes',
+ 'miércoles',
+ 'jueves',
+ 'viernes',
+ 'sábado'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mn',
+ noon: 'md',
+ morning: 'mañana',
+ afternoon: 'tarde',
+ evening: 'tarde',
+ night: 'noche'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'medianoche',
+ noon: 'mediodia',
+ morning: 'mañana',
+ afternoon: 'tarde',
+ evening: 'tarde',
+ night: 'noche'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'medianoche',
+ noon: 'mediodia',
+ morning: 'mañana',
+ afternoon: 'tarde',
+ evening: 'tarde',
+ night: 'noche'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mn',
+ noon: 'md',
+ morning: 'de la mañana',
+ afternoon: 'de la tarde',
+ evening: 'de la tarde',
+ night: 'de la noche'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'medianoche',
+ noon: 'mediodia',
+ morning: 'de la mañana',
+ afternoon: 'de la tarde',
+ evening: 'de la tarde',
+ night: 'de la noche'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'medianoche',
+ noon: 'mediodia',
+ morning: 'de la mañana',
+ afternoon: 'de la tarde',
+ evening: 'de la tarde',
+ night: 'de la noche'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + 'º'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/es/_lib/match/index.js b/date-fns/src/locale/es/_lib/match/index.js
new file mode 100644
index 0000000..3c9cf1a
--- /dev/null
+++ b/date-fns/src/locale/es/_lib/match/index.js
@@ -0,0 +1,141 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(º)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ac|dc|a|d)/i,
+ abbreviated: /^(a\.?\s?c\.?|a\.?\s?e\.?\s?c\.?|d\.?\s?c\.?|e\.?\s?c\.?)/i,
+ wide: /^(antes de cristo|antes de la era com[uú]n|despu[eé]s de cristo|era com[uú]n)/i
+}
+var parseEraPatterns = {
+ any: [/^ac/i, /^dc/i],
+ wide: [
+ /^(antes de cristo|antes de la era com[uú]n)/i,
+ /^(despu[eé]s de cristo|era com[uú]n)/i
+ ]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^T[1234]/i,
+ wide: /^[1234](º)? trimestre/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[efmajsond]/i,
+ abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,
+ wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^e/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^en/i,
+ /^feb/i,
+ /^mar/i,
+ /^abr/i,
+ /^may/i,
+ /^jun/i,
+ /^jul/i,
+ /^ago/i,
+ /^sep/i,
+ /^oct/i,
+ /^nov/i,
+ /^dic/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[dlmjvs]/i,
+ short: /^(do|lu|ma|mi|ju|vi|sa)/i,
+ abbreviated: /^(dom|lun|mar|mie|jue|vie|sab)/i,
+ wide: /^(domingo|lunes|martes|mi[ée]rcoles|jueves|viernes|s[áa]bado)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],
+ any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mn|md|(de la|a las) (mañana|tarde|noche))/i,
+ any: /^([ap]\.?\s?m\.?|medianoche|mediodia|(de la|a las) (mañana|tarde|noche))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mn/i,
+ noon: /^md/i,
+ morning: /mañana/i,
+ afternoon: /tarde/i,
+ evening: /tarde/i,
+ night: /noche/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/es/index.d.ts b/date-fns/src/locale/es/index.d.ts
new file mode 100644
index 0000000..8b0431e
--- /dev/null
+++ b/date-fns/src/locale/es/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { es } from 'date-fns/locale'
+export default es
diff --git a/date-fns/src/locale/es/index.js b/date-fns/src/locale/es/index.js
new file mode 100644
index 0000000..633fbe9
--- /dev/null
+++ b/date-fns/src/locale/es/index.js
@@ -0,0 +1,32 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Spanish locale.
+ * @language Spanish
+ * @iso-639-2 spa
+ * @author Juan Angosto [@juanangosto]{@link https://github.com/juanangosto}
+ * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}
+ * @author Fernando Agüero [@fjaguero]{@link https://github.com/fjaguero}
+ * @author Gastón Haro [@harogaston]{@link https://github.com/harogaston}
+ * @author Yago Carballo [@YagoCarballo]{@link https://github.com/YagoCarballo}
+ */
+var locale = {
+ code: 'es',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/es/index.js.flow b/date-fns/src/locale/es/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/es/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/es/snapshot.md b/date-fns/src/locale/es/snapshot.md
new file mode 100644
index 0000000..7b92b7d
--- /dev/null
+++ b/date-fns/src/locale/es/snapshot.md
@@ -0,0 +1,304 @@
+# Spanish (es) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | --------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987º | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5º | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987º | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5º | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | febrero | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julio | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-06-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | febrero | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julio | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-06-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28º | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42º | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365º | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vie | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vie | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vie | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | lunes | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | viernes | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vi | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vie | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | lunes | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | viernes | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vi | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vie | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | lunes | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | viernes | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vi | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vie | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | lunes | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | viernes | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vi | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | de la mañana | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la noche | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | de la mañana | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la noche | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | de la mañana | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la noche | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | de la mañana | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la noche | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | de la mañana | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | de la tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de la noche | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1º | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55º | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1º | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55º | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 may 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 de febrero de 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 de mayo de 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | miércoles, 11 de febrero de 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | domingo, 29 de mayo de 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 feb 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 may 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 de febrero de 1987 a las 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 de mayo de 1453 a las 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | miércoles, 11 de febrero de 1987 a las 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | domingo, 29 de mayo de 1453 a las 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------------------- | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | alrededor de 6 años | alrededor de 6 años | en alrededor de 6 años |
+| 2005-01-01T00:00:00.000Z | alrededor de 5 años | alrededor de 5 años | en alrededor de 5 años |
+| 2004-01-01T00:00:00.000Z | alrededor de 4 años | alrededor de 4 años | en alrededor de 4 años |
+| 2003-01-01T00:00:00.000Z | alrededor de 3 años | alrededor de 3 años | en alrededor de 3 años |
+| 2002-01-01T00:00:00.000Z | alrededor de 2 años | alrededor de 2 años | en alrededor de 2 años |
+| 2001-06-01T00:00:00.000Z | más de 1 año | más de 1 año | en más de 1 año |
+| 2001-02-01T00:00:00.000Z | alrededor de 1 año | alrededor de 1 año | en alrededor de 1 año |
+| 2001-01-01T00:00:00.000Z | alrededor de 1 año | alrededor de 1 año | en alrededor de 1 año |
+| 2000-06-01T00:00:00.000Z | 5 meses | 5 meses | en 5 meses |
+| 2000-03-01T00:00:00.000Z | 2 meses | 2 meses | en 2 meses |
+| 2000-02-01T00:00:00.000Z | alrededor de 1 mes | alrededor de 1 mes | en alrededor de 1 mes |
+| 2000-01-15T00:00:00.000Z | 14 días | 14 días | en 14 días |
+| 2000-01-02T00:00:00.000Z | 1 día | 1 día | en 1 día |
+| 2000-01-01T06:00:00.000Z | alrededor de 6 horas | alrededor de 6 horas | en alrededor de 6 horas |
+| 2000-01-01T01:00:00.000Z | alrededor de 1 hora | alrededor de 1 hora | en alrededor de 1 hora |
+| 2000-01-01T00:45:00.000Z | alrededor de 1 hora | alrededor de 1 hora | en alrededor de 1 hora |
+| 2000-01-01T00:30:00.000Z | 30 minutos | 30 minutos | en 30 minutos |
+| 2000-01-01T00:15:00.000Z | 15 minutos | 15 minutos | en 15 minutos |
+| 2000-01-01T00:01:00.000Z | 1 minuto | 1 minuto | en 1 minuto |
+| 2000-01-01T00:00:25.000Z | menos de un minuto | medio minuto | en menos de un minuto |
+| 2000-01-01T00:00:15.000Z | menos de un minuto | menos de 20 segundos | en menos de un minuto |
+| 2000-01-01T00:00:05.000Z | menos de un minuto | menos de 10 segundos | en menos de un minuto |
+| 2000-01-01T00:00:00.000Z | menos de un minuto | menos de 5 segundos | hace menos de un minuto |
+| 1999-12-31T23:59:55.000Z | menos de un minuto | menos de 10 segundos | hace menos de un minuto |
+| 1999-12-31T23:59:45.000Z | menos de un minuto | menos de 20 segundos | hace menos de un minuto |
+| 1999-12-31T23:59:35.000Z | menos de un minuto | medio minuto | hace menos de un minuto |
+| 1999-12-31T23:59:00.000Z | 1 minuto | 1 minuto | hace 1 minuto |
+| 1999-12-31T23:45:00.000Z | 15 minutos | 15 minutos | hace 15 minutos |
+| 1999-12-31T23:30:00.000Z | 30 minutos | 30 minutos | hace 30 minutos |
+| 1999-12-31T23:15:00.000Z | alrededor de 1 hora | alrededor de 1 hora | hace alrededor de 1 hora |
+| 1999-12-31T23:00:00.000Z | alrededor de 1 hora | alrededor de 1 hora | hace alrededor de 1 hora |
+| 1999-12-31T18:00:00.000Z | alrededor de 6 horas | alrededor de 6 horas | hace alrededor de 6 horas |
+| 1999-12-30T00:00:00.000Z | 2 días | 2 días | hace 2 días |
+| 1999-12-15T00:00:00.000Z | 17 días | 17 días | hace 17 días |
+| 1999-12-01T00:00:00.000Z | alrededor de 1 mes | alrededor de 1 mes | hace alrededor de 1 mes |
+| 1999-11-01T00:00:00.000Z | 2 meses | 2 meses | hace 2 meses |
+| 1999-06-01T00:00:00.000Z | 7 meses | 7 meses | hace 7 meses |
+| 1999-01-01T00:00:00.000Z | alrededor de 1 año | alrededor de 1 año | hace alrededor de 1 año |
+| 1998-12-01T00:00:00.000Z | alrededor de 1 año | alrededor de 1 año | hace alrededor de 1 año |
+| 1998-06-01T00:00:00.000Z | más de 1 año | más de 1 año | hace más de 1 año |
+| 1998-01-01T00:00:00.000Z | alrededor de 2 años | alrededor de 2 años | hace alrededor de 2 años |
+| 1997-01-01T00:00:00.000Z | alrededor de 3 años | alrededor de 3 años | hace alrededor de 3 años |
+| 1996-01-01T00:00:00.000Z | alrededor de 4 años | alrededor de 4 años | hace alrededor de 4 años |
+| 1995-01-01T00:00:00.000Z | alrededor de 5 años | alrededor de 5 años | hace alrededor de 5 años |
+| 1994-01-01T00:00:00.000Z | alrededor de 6 años | alrededor de 6 años | hace alrededor de 6 años |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 años | en 6 años | 52608 horas |
+| 2005-01-01T00:00:00.000Z | 5 años | en 5 años | 43848 horas |
+| 2004-01-01T00:00:00.000Z | 4 años | en 4 años | 35064 horas |
+| 2003-01-01T00:00:00.000Z | 3 años | en 3 años | 26304 horas |
+| 2002-01-01T00:00:00.000Z | 2 años | en 2 años | 17544 horas |
+| 2001-06-01T00:00:00.000Z | 1 año | en 1 año | 12408 horas |
+| 2001-02-01T00:00:00.000Z | 1 año | en 1 año | 9528 horas |
+| 2001-01-01T00:00:00.000Z | 1 año | en 1 año | 8784 horas |
+| 2000-06-01T00:00:00.000Z | 5 meses | en 5 meses | 3648 horas |
+| 2000-03-01T00:00:00.000Z | 2 meses | en 2 meses | 1440 horas |
+| 2000-02-01T00:00:00.000Z | 1 mes | en 1 mes | 744 horas |
+| 2000-01-15T00:00:00.000Z | 14 días | en 14 días | 336 horas |
+| 2000-01-02T00:00:00.000Z | 1 día | en 1 día | 24 horas |
+| 2000-01-01T06:00:00.000Z | 6 horas | en 6 horas | 6 horas |
+| 2000-01-01T01:00:00.000Z | 1 hora | en 1 hora | 1 hora |
+| 2000-01-01T00:45:00.000Z | 45 minutos | en 45 minutos | 1 hora |
+| 2000-01-01T00:30:00.000Z | 30 minutos | en 30 minutos | 1 hora |
+| 2000-01-01T00:15:00.000Z | 15 minutos | en 15 minutos | 0 horas |
+| 2000-01-01T00:01:00.000Z | 1 minuto | en 1 minuto | 0 horas |
+| 2000-01-01T00:00:25.000Z | 25 segundos | en 25 segundos | 0 horas |
+| 2000-01-01T00:00:15.000Z | 15 segundos | en 15 segundos | 0 horas |
+| 2000-01-01T00:00:05.000Z | 5 segundos | en 5 segundos | 0 horas |
+| 2000-01-01T00:00:00.000Z | 0 segundos | hace 0 segundos | 0 horas |
+| 1999-12-31T23:59:55.000Z | 5 segundos | hace 5 segundos | 0 horas |
+| 1999-12-31T23:59:45.000Z | 15 segundos | hace 15 segundos | 0 horas |
+| 1999-12-31T23:59:35.000Z | 25 segundos | hace 25 segundos | 0 horas |
+| 1999-12-31T23:59:00.000Z | 1 minuto | hace 1 minuto | 0 horas |
+| 1999-12-31T23:45:00.000Z | 15 minutos | hace 15 minutos | 0 horas |
+| 1999-12-31T23:30:00.000Z | 30 minutos | hace 30 minutos | 1 hora |
+| 1999-12-31T23:15:00.000Z | 45 minutos | hace 45 minutos | 1 hora |
+| 1999-12-31T23:00:00.000Z | 1 hora | hace 1 hora | 1 hora |
+| 1999-12-31T18:00:00.000Z | 6 horas | hace 6 horas | 6 horas |
+| 1999-12-30T00:00:00.000Z | 2 días | hace 2 días | 48 horas |
+| 1999-12-15T00:00:00.000Z | 17 días | hace 17 días | 408 horas |
+| 1999-12-01T00:00:00.000Z | 1 mes | hace 1 mes | 744 horas |
+| 1999-11-01T00:00:00.000Z | 2 meses | hace 2 meses | 1464 horas |
+| 1999-06-01T00:00:00.000Z | 7 meses | hace 7 meses | 5136 horas |
+| 1999-01-01T00:00:00.000Z | 1 año | hace 1 año | 8760 horas |
+| 1998-12-01T00:00:00.000Z | 1 año | hace 1 año | 9504 horas |
+| 1998-06-01T00:00:00.000Z | 2 años | hace 2 años | 13896 horas |
+| 1998-01-01T00:00:00.000Z | 2 años | hace 2 años | 17520 horas |
+| 1997-01-01T00:00:00.000Z | 3 años | hace 3 años | 26280 horas |
+| 1996-01-01T00:00:00.000Z | 4 años | hace 4 años | 35064 horas |
+| 1995-01-01T00:00:00.000Z | 5 años | hace 5 años | 43824 horas |
+| 1994-01-01T00:00:00.000Z | 6 años | hace 6 años | 52584 horas |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | --------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | miércoles a las 00:00 |
+| 2000-01-02T00:00:00.000Z | mañana a las 00:00 |
+| 2000-01-01T00:00:00.000Z | hoy a las 00:00 |
+| 1999-12-31T00:00:00.000Z | ayer a las 00:00 |
+| 1999-12-27T00:00:00.000Z | el lunes pasado a las 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/et/_lib/formatDistance/index.js b/date-fns/src/locale/et/_lib/formatDistance/index.js
new file mode 100644
index 0000000..1e4ed97
--- /dev/null
+++ b/date-fns/src/locale/et/_lib/formatDistance/index.js
@@ -0,0 +1,198 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ standalone: {
+ one: 'vähem kui üks sekund',
+ other: 'vähem kui {{count}} sekundit'
+ },
+ withPreposition: {
+ one: 'vähem kui ühe sekundi',
+ other: 'vähem kui {{count}} sekundi'
+ }
+ },
+
+ xSeconds: {
+ standalone: {
+ one: 'üks sekund',
+ other: '{{count}} sekundit'
+ },
+ withPreposition: {
+ one: 'ühe sekundi',
+ other: '{{count}} sekundi'
+ }
+ },
+
+ halfAMinute: {
+ standalone: 'pool minutit',
+ withPreposition: 'poole minuti'
+ },
+
+ lessThanXMinutes: {
+ standalone: {
+ one: 'vähem kui üks minut',
+ other: 'vähem kui {{count}} minutit'
+ },
+ withPreposition: {
+ one: 'vähem kui ühe minuti',
+ other: 'vähem kui {{count}} minuti'
+ }
+ },
+
+ xMinutes: {
+ standalone: {
+ one: 'üks minut',
+ other: '{{count}} minutit'
+ },
+ withPreposition: {
+ one: 'ühe minuti',
+ other: '{{count}} minuti'
+ }
+ },
+
+ aboutXHours: {
+ standalone: {
+ one: 'umbes üks tund',
+ other: 'umbes {{count}} tundi'
+ },
+ withPreposition: {
+ one: 'umbes ühe tunni',
+ other: 'umbes {{count}} tunni'
+ }
+ },
+
+ xHours: {
+ standalone: {
+ one: 'üks tund',
+ other: '{{count}} tundi'
+ },
+ withPreposition: {
+ one: 'ühe tunni',
+ other: '{{count}} tunni'
+ }
+ },
+
+ xDays: {
+ standalone: {
+ one: 'üks päev',
+ other: '{{count}} päeva'
+ },
+ withPreposition: {
+ one: 'ühe päeva',
+ other: '{{count}} päeva'
+ }
+ },
+
+ aboutXWeeks: {
+ standalone: {
+ one: 'umbes üks nädal',
+ other: 'umbes {{count}} nädalat'
+ },
+ withPreposition: {
+ one: 'umbes ühe nädala',
+ other: 'umbes {{count}} nädala'
+ }
+ },
+
+ xWeeks: {
+ standalone: {
+ one: 'üks nädal',
+ other: '{{count}} nädalat'
+ },
+ withPreposition: {
+ one: 'ühe nädala',
+ other: '{{count}} nädala'
+ }
+ },
+
+ aboutXMonths: {
+ standalone: {
+ one: 'umbes üks kuu',
+ other: 'umbes {{count}} kuud'
+ },
+ withPreposition: {
+ one: 'umbes ühe kuu',
+ other: 'umbes {{count}} kuu'
+ }
+ },
+
+ xMonths: {
+ standalone: {
+ one: 'üks kuu',
+ other: '{{count}} kuud'
+ },
+ withPreposition: {
+ one: 'ühe kuu',
+ other: '{{count}} kuu'
+ }
+ },
+
+ aboutXYears: {
+ standalone: {
+ one: 'umbes üks aasta',
+ other: 'umbes {{count}} aastat'
+ },
+ withPreposition: {
+ one: 'umbes ühe aasta',
+ other: 'umbes {{count}} aasta'
+ }
+ },
+
+ xYears: {
+ standalone: {
+ one: 'üks aasta',
+ other: '{{count}} aastat'
+ },
+ withPreposition: {
+ one: 'ühe aasta',
+ other: '{{count}} aasta'
+ }
+ },
+
+ overXYears: {
+ standalone: {
+ one: 'rohkem kui üks aasta',
+ other: 'rohkem kui {{count}} aastat'
+ },
+ withPreposition: {
+ one: 'rohkem kui ühe aasta',
+ other: 'rohkem kui {{count}} aasta'
+ }
+ },
+
+ almostXYears: {
+ standalone: {
+ one: 'peaaegu üks aasta',
+ other: 'peaaegu {{count}} aastat'
+ },
+ withPreposition: {
+ one: 'peaaegu ühe aasta',
+ other: 'peaaegu {{count}} aasta'
+ }
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var usageGroup = options.addSuffix
+ ? formatDistanceLocale[token].withPreposition
+ : formatDistanceLocale[token].standalone
+
+ var result
+ if (typeof usageGroup === 'string') {
+ result = usageGroup
+ } else if (count === 1) {
+ result = usageGroup.one
+ } else {
+ result = usageGroup.other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + ' pärast'
+ } else {
+ return result + ' eest'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/et/_lib/formatLong/index.js b/date-fns/src/locale/et/_lib/formatLong/index.js
new file mode 100644
index 0000000..c149b17
--- /dev/null
+++ b/date-fns/src/locale/et/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'eeee, d. MMMM y',
+ long: 'd. MMMM y',
+ medium: 'd. MMM y',
+ short: 'dd.MM.y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'kell' {{time}}",
+ long: "{{date}} 'kell' {{time}}",
+ medium: '{{date}}. {{time}}',
+ short: '{{date}}. {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/et/_lib/formatRelative/index.js b/date-fns/src/locale/et/_lib/formatRelative/index.js
new file mode 100644
index 0000000..50132f3
--- /dev/null
+++ b/date-fns/src/locale/et/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'eelmine' eeee 'kell' p",
+ yesterday: "'eile kell' p",
+ today: "'täna kell' p",
+ tomorrow: "'homme kell' p",
+ nextWeek: "'järgmine' eeee 'kell' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/et/_lib/localize/index.js b/date-fns/src/locale/et/_lib/localize/index.js
new file mode 100644
index 0000000..fac828f
--- /dev/null
+++ b/date-fns/src/locale/et/_lib/localize/index.js
@@ -0,0 +1,176 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['e.m.a', 'm.a.j'],
+ abbreviated: ['e.m.a', 'm.a.j'],
+ wide: ['enne meie ajaarvamist', 'meie ajaarvamise järgi']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['K1', 'K2', 'K3', 'K4'],
+ wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']
+}
+
+var monthValues = {
+ narrow: ['J', 'V', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'jaan',
+ 'veebr',
+ 'märts',
+ 'apr',
+ 'mai',
+ 'juuni',
+ 'juuli',
+ 'aug',
+ 'sept',
+ 'okt',
+ 'nov',
+ 'dets'
+ ],
+ wide: [
+ 'jaanuar',
+ 'veebruar',
+ 'märts',
+ 'aprill',
+ 'mai',
+ 'juuni',
+ 'juuli',
+ 'august',
+ 'september',
+ 'oktoober',
+ 'november',
+ 'detsember'
+ ]
+}
+
+var dayValues = {
+ narrow: ['P', 'E', 'T', 'K', 'N', 'R', 'L'],
+ short: ['P', 'E', 'T', 'K', 'N', 'R', 'L'],
+ abbreviated: [
+ 'pühap.',
+ 'esmasp.',
+ 'teisip.',
+ 'kolmap.',
+ 'neljap.',
+ 'reede.',
+ 'laup.'
+ ],
+ wide: [
+ 'pühapäev',
+ 'esmaspäev',
+ 'teisipäev',
+ 'kolmapäev',
+ 'neljapäev',
+ 'reede',
+ 'laupäev'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'kesköö',
+ noon: 'keskpäev',
+ morning: 'hommik',
+ afternoon: 'pärastlõuna',
+ evening: 'õhtu',
+ night: 'öö'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'kesköö',
+ noon: 'keskpäev',
+ morning: 'hommik',
+ afternoon: 'pärastlõuna',
+ evening: 'õhtu',
+ night: 'öö'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'kesköö',
+ noon: 'keskpäev',
+ morning: 'hommik',
+ afternoon: 'pärastlõuna',
+ evening: 'õhtu',
+ night: 'öö'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'keskööl',
+ noon: 'keskpäeval',
+ morning: 'hommikul',
+ afternoon: 'pärastlõunal',
+ evening: 'õhtul',
+ night: 'öösel'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'keskööl',
+ noon: 'keskpäeval',
+ morning: 'hommikul',
+ afternoon: 'pärastlõunal',
+ evening: 'õhtul',
+ night: 'öösel'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'keskööl',
+ noon: 'keskpäeval',
+ morning: 'hommikul',
+ afternoon: 'pärastlõunal',
+ evening: 'õhtul',
+ night: 'öösel'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ formattingValues: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ formattingValues: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ formattingValues: formattingDayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/et/_lib/match/index.js b/date-fns/src/locale/et/_lib/match/index.js
new file mode 100644
index 0000000..7f0cc5c
--- /dev/null
+++ b/date-fns/src/locale/et/_lib/match/index.js
@@ -0,0 +1,139 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^\d+\./i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(e\.m\.a|m\.a\.j|eKr|pKr)/i,
+ abbreviated: /^(e\.m\.a|m\.a\.j|eKr|pKr)/i,
+ wide: /^(enne meie ajaarvamist|meie ajaarvamise järgi|enne Kristust|pärast Kristust)/i
+}
+
+var parseEraPatterns = {
+ any: [/^e/i, /^(m|p)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^K[1234]/i,
+ wide: /^[1234](\.)? kvartal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jvmasond]/i,
+ abbreviated: /^('jaan|veebr|märts|apr|mai|juuni|juuli|aug|sept|okt|nov|dets')/i,
+ wide: /^('jaanuar|veebruar|märts|aprill|mai|juuni|juuli|august|september|oktoober|november|detsember')/i
+}
+
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^v/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^v/i,
+ /^mär/i,
+ /^ap/i,
+ /^mai/i,
+ /^jun/i,
+ /^jul/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[petknrl]/i,
+ short: /^[petknrl]/i,
+ abbreviated: /^(püh?|esm?|tei?|kolm?|nel?|ree?|laup?)\.?/i,
+ wide: /^('pühapäev|esmaspäev|teisipäev|kolmapäev|neljapäev|reede|laupäev')/i
+}
+
+var parseDayPatterns = {
+ any: [/^p/i, /^e/i, /^t/i, /^k/i, /^n/i, /^r/i, /^l/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(am|pm|kesköö|keskpäev|hommik|pärastlõuna|õhtu|öö)/i
+}
+
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^keskö/i,
+ noon: /^keskp/i,
+ morning: /hommik/i,
+ afternoon: /pärastlõuna/i,
+ evening: /õhtu/i,
+ night: /öö/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/et/index.d.ts b/date-fns/src/locale/et/index.d.ts
new file mode 100644
index 0000000..debd0b9
--- /dev/null
+++ b/date-fns/src/locale/et/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { et } from 'date-fns/locale'
+export default et
diff --git a/date-fns/src/locale/et/index.js b/date-fns/src/locale/et/index.js
new file mode 100644
index 0000000..af163e0
--- /dev/null
+++ b/date-fns/src/locale/et/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Estonian locale.
+ * @language Estonian
+ * @iso-639-2 est
+ * @author Priit Hansen [@HansenPriit]{@link https://github.com/priithansen}
+ */
+var locale = {
+ code: 'et',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/et/index.js.flow b/date-fns/src/locale/et/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/et/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/et/snapshot.md b/date-fns/src/locale/et/snapshot.md
new file mode 100644
index 0000000..9e4100b
--- /dev/null
+++ b/date-fns/src/locale/et/snapshot.md
@@ -0,0 +1,304 @@
+# Estonian (et) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | veebr | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juuli | Invalid Date |
+| | MMMM | 2019-02-11T12:13:14.015Z | veebruar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juuli | Invalid Date |
+| | MMMMM | 2019-02-11T12:13:14.015Z | V | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | veebr | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juuli | Invalid Date |
+| | LLLL | 2019-02-11T12:13:14.015Z | veebruar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juuli | Invalid Date |
+| | LLLLL | 2019-02-11T12:13:14.015Z | V | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | esmasp. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | reede. | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | esmasp. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | reede. | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | esmasp. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | reede. | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | esmaspäev | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | reede | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | E | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | R | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | E | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | R | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | esmasp. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | reede. | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | esmaspäev | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | reede | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | E | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | R | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | E | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | R | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | esmasp. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | reede. | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | esmaspäev | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | reede | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | E | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | R | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | E | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | R | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | esmasp. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | reede. | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | esmaspäev | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | reede | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | E | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | R | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | E | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | R | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | hommikul | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pärastlõunal | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | õhtul | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | öösel | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | hommikul | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pärastlõunal | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | õhtul | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | öösel | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | hommikul | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pärastlõunal | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | õhtul | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | öösel | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | hommikul | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pärastlõunal | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | õhtul | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | öösel | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | hommikul | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pärastlõunal | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | õhtul | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | öösel | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. veebr 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. veebruar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | kolmapäev, 11. veebruar 1987 | Errored |
+| | | 1453-05-29T23:59:59.999Z | pühapäev, 29. mai 1453 | Invalid Date |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987. 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453. 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. veebr 1987. 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453. 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. veebruar 1987 kell 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 kell 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | kolmapäev, 11. veebruar 1987 kell 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | pühapäev, 29. mai 1453 kell 23:59:59 GMT+00:00 | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------------------- | ---------------------- | --------------------------- |
+| 2006-01-01T00:00:00.000Z | umbes 6 aastat | umbes 6 aastat | umbes 6 aasta pärast |
+| 2005-01-01T00:00:00.000Z | umbes 5 aastat | umbes 5 aastat | umbes 5 aasta pärast |
+| 2004-01-01T00:00:00.000Z | umbes 4 aastat | umbes 4 aastat | umbes 4 aasta pärast |
+| 2003-01-01T00:00:00.000Z | umbes 3 aastat | umbes 3 aastat | umbes 3 aasta pärast |
+| 2002-01-01T00:00:00.000Z | umbes 2 aastat | umbes 2 aastat | umbes 2 aasta pärast |
+| 2001-06-01T00:00:00.000Z | rohkem kui üks aasta | rohkem kui üks aasta | rohkem kui ühe aasta pärast |
+| 2001-02-01T00:00:00.000Z | umbes üks aasta | umbes üks aasta | umbes ühe aasta pärast |
+| 2001-01-01T00:00:00.000Z | umbes üks aasta | umbes üks aasta | umbes ühe aasta pärast |
+| 2000-06-01T00:00:00.000Z | 5 kuud | 5 kuud | 5 kuu pärast |
+| 2000-03-01T00:00:00.000Z | 2 kuud | 2 kuud | 2 kuu pärast |
+| 2000-02-01T00:00:00.000Z | umbes üks kuu | umbes üks kuu | umbes ühe kuu pärast |
+| 2000-01-15T00:00:00.000Z | 14 päeva | 14 päeva | 14 päeva pärast |
+| 2000-01-02T00:00:00.000Z | üks päev | üks päev | ühe päeva pärast |
+| 2000-01-01T06:00:00.000Z | umbes 6 tundi | umbes 6 tundi | umbes 6 tunni pärast |
+| 2000-01-01T01:00:00.000Z | umbes üks tund | umbes üks tund | umbes ühe tunni pärast |
+| 2000-01-01T00:45:00.000Z | umbes üks tund | umbes üks tund | umbes ühe tunni pärast |
+| 2000-01-01T00:30:00.000Z | 30 minutit | 30 minutit | 30 minuti pärast |
+| 2000-01-01T00:15:00.000Z | 15 minutit | 15 minutit | 15 minuti pärast |
+| 2000-01-01T00:01:00.000Z | üks minut | üks minut | ühe minuti pärast |
+| 2000-01-01T00:00:25.000Z | vähem kui üks minut | pool minutit | vähem kui ühe minuti pärast |
+| 2000-01-01T00:00:15.000Z | vähem kui üks minut | vähem kui 20 sekundit | vähem kui ühe minuti pärast |
+| 2000-01-01T00:00:05.000Z | vähem kui üks minut | vähem kui 10 sekundit | vähem kui ühe minuti pärast |
+| 2000-01-01T00:00:00.000Z | vähem kui üks minut | vähem kui 5 sekundit | vähem kui ühe minuti eest |
+| 1999-12-31T23:59:55.000Z | vähem kui üks minut | vähem kui 10 sekundit | vähem kui ühe minuti eest |
+| 1999-12-31T23:59:45.000Z | vähem kui üks minut | vähem kui 20 sekundit | vähem kui ühe minuti eest |
+| 1999-12-31T23:59:35.000Z | vähem kui üks minut | pool minutit | vähem kui ühe minuti eest |
+| 1999-12-31T23:59:00.000Z | üks minut | üks minut | ühe minuti eest |
+| 1999-12-31T23:45:00.000Z | 15 minutit | 15 minutit | 15 minuti eest |
+| 1999-12-31T23:30:00.000Z | 30 minutit | 30 minutit | 30 minuti eest |
+| 1999-12-31T23:15:00.000Z | umbes üks tund | umbes üks tund | umbes ühe tunni eest |
+| 1999-12-31T23:00:00.000Z | umbes üks tund | umbes üks tund | umbes ühe tunni eest |
+| 1999-12-31T18:00:00.000Z | umbes 6 tundi | umbes 6 tundi | umbes 6 tunni eest |
+| 1999-12-30T00:00:00.000Z | 2 päeva | 2 päeva | 2 päeva eest |
+| 1999-12-15T00:00:00.000Z | 17 päeva | 17 päeva | 17 päeva eest |
+| 1999-12-01T00:00:00.000Z | umbes üks kuu | umbes üks kuu | umbes ühe kuu eest |
+| 1999-11-01T00:00:00.000Z | 2 kuud | 2 kuud | 2 kuu eest |
+| 1999-06-01T00:00:00.000Z | 7 kuud | 7 kuud | 7 kuu eest |
+| 1999-01-01T00:00:00.000Z | umbes üks aasta | umbes üks aasta | umbes ühe aasta eest |
+| 1998-12-01T00:00:00.000Z | umbes üks aasta | umbes üks aasta | umbes ühe aasta eest |
+| 1998-06-01T00:00:00.000Z | rohkem kui üks aasta | rohkem kui üks aasta | rohkem kui ühe aasta eest |
+| 1998-01-01T00:00:00.000Z | umbes 2 aastat | umbes 2 aastat | umbes 2 aasta eest |
+| 1997-01-01T00:00:00.000Z | umbes 3 aastat | umbes 3 aastat | umbes 3 aasta eest |
+| 1996-01-01T00:00:00.000Z | umbes 4 aastat | umbes 4 aastat | umbes 4 aasta eest |
+| 1995-01-01T00:00:00.000Z | umbes 5 aastat | umbes 5 aastat | umbes 5 aasta eest |
+| 1994-01-01T00:00:00.000Z | umbes 6 aastat | umbes 6 aastat | umbes 6 aasta eest |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 aastat | 6 aasta pärast | 52608 tundi |
+| 2005-01-01T00:00:00.000Z | 5 aastat | 5 aasta pärast | 43848 tundi |
+| 2004-01-01T00:00:00.000Z | 4 aastat | 4 aasta pärast | 35064 tundi |
+| 2003-01-01T00:00:00.000Z | 3 aastat | 3 aasta pärast | 26304 tundi |
+| 2002-01-01T00:00:00.000Z | 2 aastat | 2 aasta pärast | 17544 tundi |
+| 2001-06-01T00:00:00.000Z | üks aasta | ühe aasta pärast | 12408 tundi |
+| 2001-02-01T00:00:00.000Z | üks aasta | ühe aasta pärast | 9528 tundi |
+| 2001-01-01T00:00:00.000Z | üks aasta | ühe aasta pärast | 8784 tundi |
+| 2000-06-01T00:00:00.000Z | 5 kuud | 5 kuu pärast | 3648 tundi |
+| 2000-03-01T00:00:00.000Z | 2 kuud | 2 kuu pärast | 1440 tundi |
+| 2000-02-01T00:00:00.000Z | üks kuu | ühe kuu pärast | 744 tundi |
+| 2000-01-15T00:00:00.000Z | 14 päeva | 14 päeva pärast | 336 tundi |
+| 2000-01-02T00:00:00.000Z | üks päev | ühe päeva pärast | 24 tundi |
+| 2000-01-01T06:00:00.000Z | 6 tundi | 6 tunni pärast | 6 tundi |
+| 2000-01-01T01:00:00.000Z | üks tund | ühe tunni pärast | üks tund |
+| 2000-01-01T00:45:00.000Z | 45 minutit | 45 minuti pärast | üks tund |
+| 2000-01-01T00:30:00.000Z | 30 minutit | 30 minuti pärast | üks tund |
+| 2000-01-01T00:15:00.000Z | 15 minutit | 15 minuti pärast | 0 tundi |
+| 2000-01-01T00:01:00.000Z | üks minut | ühe minuti pärast | 0 tundi |
+| 2000-01-01T00:00:25.000Z | 25 sekundit | 25 sekundi pärast | 0 tundi |
+| 2000-01-01T00:00:15.000Z | 15 sekundit | 15 sekundi pärast | 0 tundi |
+| 2000-01-01T00:00:05.000Z | 5 sekundit | 5 sekundi pärast | 0 tundi |
+| 2000-01-01T00:00:00.000Z | 0 sekundit | 0 sekundi eest | 0 tundi |
+| 1999-12-31T23:59:55.000Z | 5 sekundit | 5 sekundi eest | 0 tundi |
+| 1999-12-31T23:59:45.000Z | 15 sekundit | 15 sekundi eest | 0 tundi |
+| 1999-12-31T23:59:35.000Z | 25 sekundit | 25 sekundi eest | 0 tundi |
+| 1999-12-31T23:59:00.000Z | üks minut | ühe minuti eest | 0 tundi |
+| 1999-12-31T23:45:00.000Z | 15 minutit | 15 minuti eest | 0 tundi |
+| 1999-12-31T23:30:00.000Z | 30 minutit | 30 minuti eest | üks tund |
+| 1999-12-31T23:15:00.000Z | 45 minutit | 45 minuti eest | üks tund |
+| 1999-12-31T23:00:00.000Z | üks tund | ühe tunni eest | üks tund |
+| 1999-12-31T18:00:00.000Z | 6 tundi | 6 tunni eest | 6 tundi |
+| 1999-12-30T00:00:00.000Z | 2 päeva | 2 päeva eest | 48 tundi |
+| 1999-12-15T00:00:00.000Z | 17 päeva | 17 päeva eest | 408 tundi |
+| 1999-12-01T00:00:00.000Z | üks kuu | ühe kuu eest | 744 tundi |
+| 1999-11-01T00:00:00.000Z | 2 kuud | 2 kuu eest | 1464 tundi |
+| 1999-06-01T00:00:00.000Z | 7 kuud | 7 kuu eest | 5136 tundi |
+| 1999-01-01T00:00:00.000Z | üks aasta | ühe aasta eest | 8760 tundi |
+| 1998-12-01T00:00:00.000Z | üks aasta | ühe aasta eest | 9504 tundi |
+| 1998-06-01T00:00:00.000Z | 2 aastat | 2 aasta eest | 13896 tundi |
+| 1998-01-01T00:00:00.000Z | 2 aastat | 2 aasta eest | 17520 tundi |
+| 1997-01-01T00:00:00.000Z | 3 aastat | 3 aasta eest | 26280 tundi |
+| 1996-01-01T00:00:00.000Z | 4 aastat | 4 aasta eest | 35064 tundi |
+| 1995-01-01T00:00:00.000Z | 5 aastat | 5 aasta eest | 43824 tundi |
+| 1994-01-01T00:00:00.000Z | 6 aastat | 6 aasta eest | 52584 tundi |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | järgmine kolmapäev kell 00:00 |
+| 2000-01-02T00:00:00.000Z | homme kell 00:00 |
+| 2000-01-01T00:00:00.000Z | täna kell 00:00 |
+| 1999-12-31T00:00:00.000Z | eile kell 00:00 |
+| 1999-12-27T00:00:00.000Z | eelmine esmaspäev kell 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/eu/_lib/formatDistance/index.js b/date-fns/src/locale/eu/_lib/formatDistance/index.js
new file mode 100644
index 0000000..b36bef9
--- /dev/null
+++ b/date-fns/src/locale/eu/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'segundo bat baino gutxiago',
+ other: '{{count}} segundo baino gutxiago'
+ },
+
+ xSeconds: {
+ one: '1 segundo',
+ other: '{{count}} segundo'
+ },
+
+ halfAMinute: 'minutu erdi',
+
+ lessThanXMinutes: {
+ one: 'minutu bat baino gutxiago',
+ other: '{{count}} minutu baino gutxiago'
+ },
+
+ xMinutes: {
+ one: '1 minutu',
+ other: '{{count}} minutu'
+ },
+
+ aboutXHours: {
+ one: '1 ordu gutxi gorabehera',
+ other: '{{count}} ordu gutxi gorabehera'
+ },
+
+ xHours: {
+ one: '1 ordu',
+ other: '{{count}} ordu'
+ },
+
+ xDays: {
+ one: '1 egun',
+ other: '{{count}} egun'
+ },
+
+ aboutXWeeks: {
+ one: 'aste 1 inguru',
+ other: '{{count}} aste inguru'
+ },
+
+ xWeeks: {
+ one: '1 aste',
+ other: '{{count}} astean'
+ },
+
+ aboutXMonths: {
+ one: '1 hilabete gutxi gorabehera',
+ other: '{{count}} hilabete gutxi gorabehera'
+ },
+
+ xMonths: {
+ one: '1 hilabete',
+ other: '{{count}} hilabete'
+ },
+
+ aboutXYears: {
+ one: '1 urte gutxi gorabehera',
+ other: '{{count}} urte gutxi gorabehera'
+ },
+
+ xYears: {
+ one: '1 urte',
+ other: '{{count}} urte'
+ },
+
+ overXYears: {
+ one: '1 urte baino gehiago',
+ other: '{{count}} urte baino gehiago'
+ },
+
+ almostXYears: {
+ one: 'ia 1 urte',
+ other: 'ia {{count}} urte'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'en ' + result
+ } else {
+ return 'duela ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/eu/_lib/formatLong/index.js b/date-fns/src/locale/eu/_lib/formatLong/index.js
new file mode 100644
index 0000000..7551df6
--- /dev/null
+++ b/date-fns/src/locale/eu/_lib/formatLong/index.js
@@ -0,0 +1,40 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, y'ko' MMMM'ren' d'a' y'ren'",
+ long: "y'ko' MMMM'ren' d'a'",
+ medium: 'y MMM d',
+ short: 'yy/MM/dd',
+}
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'tan' {{time}}",
+ long: "{{date}} 'tan' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/eu/_lib/formatRelative/index.js b/date-fns/src/locale/eu/_lib/formatRelative/index.js
new file mode 100644
index 0000000..4cf3407
--- /dev/null
+++ b/date-fns/src/locale/eu/_lib/formatRelative/index.js
@@ -0,0 +1,24 @@
+var formatRelativeLocale = {
+ lastWeek: "'joan den' eeee, LT",
+ yesterday: "'atzo,' p",
+ today: "'gaur,' p",
+ tomorrow: "'bihar,' p",
+ nextWeek: 'eeee, p',
+ other: 'P'
+}
+
+var formatRelativeLocalePlural = {
+ lastWeek: "'joan den' eeee, p",
+ yesterday: "'atzo,' p",
+ today: "'gaur,' p",
+ tomorrow: "'bihar,' p",
+ nextWeek: 'eeee, p',
+ other: 'P'
+}
+
+export default function formatRelative(token, date, _baseDate, _options) {
+ if (date.getUTCHours() !== 1) {
+ return formatRelativeLocalePlural[token]
+ }
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/eu/_lib/localize/index.js b/date-fns/src/locale/eu/_lib/localize/index.js
new file mode 100644
index 0000000..4244774
--- /dev/null
+++ b/date-fns/src/locale/eu/_lib/localize/index.js
@@ -0,0 +1,167 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['k.a.', 'k.o.'],
+ abbreviated: ['k.a.', 'k.o.'],
+ wide: ['kristo aurretik', 'kristo ondoren']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1H', '2H', '3H', '4H'],
+ wide: ['1. hiruhilekoa', '2. hiruhilekoa', '3. hiruhilekoa', '4. hiruhilekoa']
+}
+
+var monthValues = {
+ narrow: ['u', 'o', 'm', 'a', 'm', 'e', 'u', 'a', 'i', 'u', 'a', 'a'],
+ abbreviated: [
+ 'urt',
+ 'ots',
+ 'mar',
+ 'api',
+ 'mai',
+ 'eka',
+ 'uzt',
+ 'abu',
+ 'ira',
+ 'urr',
+ 'aza',
+ 'abe'
+ ],
+ wide: [
+ 'urtarrila',
+ 'otsaila',
+ 'martxoa',
+ 'apirila',
+ 'maiatza',
+ 'ekaina',
+ 'uztaila',
+ 'abuztua',
+ 'iraila',
+ 'urria',
+ 'azaroa',
+ 'abendua'
+ ]
+}
+
+var dayValues = {
+ narrow: ['i', 'a', 'a', 'a', 'o', 'o', 'l'],
+ short: ['ig', 'al', 'as', 'az', 'og', 'or', 'lr'],
+ abbreviated: ['iga', 'ast', 'ast', 'ast', 'ost', 'ost', 'lar'],
+ wide: [
+ 'igandea',
+ 'astelehena',
+ 'asteartea',
+ 'asteazkena',
+ 'osteguna',
+ 'ostirala',
+ 'larunbata'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'ge',
+ noon: 'eg',
+ morning: 'goiza',
+ afternoon: 'arratsaldea',
+ evening: 'arratsaldea',
+ night: 'gaua'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'gauerdia',
+ noon: 'eguerdia',
+ morning: 'goiza',
+ afternoon: 'arratsaldea',
+ evening: 'arratsaldea',
+ night: 'gaua'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'gauerdia',
+ noon: 'eguerdia',
+ morning: 'goiza',
+ afternoon: 'arratsaldea',
+ evening: 'arratsaldea',
+ night: 'gaua'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'ge',
+ noon: 'eg',
+ morning: 'goizean',
+ afternoon: 'arratsaldean',
+ evening: 'arratsaldean',
+ night: 'gauean'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'gauerdia',
+ noon: 'eguerdia',
+ morning: 'goizean',
+ afternoon: 'arratsaldean',
+ evening: 'arratsaldean',
+ night: 'gauean'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'gauerdia',
+ noon: 'eguerdia',
+ morning: 'goizean',
+ afternoon: 'arratsaldean',
+ evening: 'arratsaldean',
+ night: 'gauean'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/eu/_lib/match/index.js b/date-fns/src/locale/eu/_lib/match/index.js
new file mode 100644
index 0000000..049b51d
--- /dev/null
+++ b/date-fns/src/locale/eu/_lib/match/index.js
@@ -0,0 +1,159 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(.)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(k.a.|k.o.)/i,
+ abbreviated: /^(k.a.|k.o.)/i,
+ wide: /^(kristo aurretik|kristo ondoren)/i
+}
+var parseEraPatterns = {
+ narrow: [/^k.a./i, /^k.o./i],
+ abbreviated: [/^(k.a.)/i, /^(k.o.)/i],
+ wide: [/^(kristo aurretik)/i, /^(kristo ondoren)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234]H/i,
+ wide: /^[1234](.)? hiruhilekoa/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[uomaei]/i,
+ abbreviated: /^(urt|ots|mar|api|mai|eka|uzt|abu|ira|urr|aza|abe)/i,
+ wide: /^(urtarrila|otsaila|martxoa|apirila|maiatza|ekaina|uztaila|abuztua|iraila|urria|azaroa|abendua)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^u/i,
+ /^o/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^e/i,
+ /^u/i,
+ /^a/i,
+ /^i/i,
+ /^u/i,
+ /^a/i,
+ /^a/i
+ ],
+ any: [
+ /^urt/i,
+ /^ots/i,
+ /^mar/i,
+ /^api/i,
+ /^mai/i,
+ /^eka/i,
+ /^uzt/i,
+ /^abu/i,
+ /^ira/i,
+ /^urr/i,
+ /^aza/i,
+ /^abe/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[iaol]/i,
+ short: /^(ig|al|as|az|og|or|lr)/i,
+ abbreviated: /^(iga|ast|ast|ast|ost|ost|lar)/i,
+ wide: /^(igandea|astelehena|asteartea|asteazkena|osteguna|ostirala|larunbata)/i
+}
+var parseDayPatterns = {
+ narrow: [/^i/i, /^a/i, /^a/i, /^a/i, /^o/i, /^o/i, /^l/i],
+ short: [/^ig/i, /^al/i, /^as/i, /^az/i, /^og/i, /^or/i, /^lr/i],
+ abbreviated: [/^iga/i, /^ast/i, /^ast/i, /^ast/i, /^ost/i, /^ost/i, /^lar/i],
+ wide: [
+ /^igandea/i,
+ /^astelehena/i,
+ /^asteartea/i,
+ /^asteazkena/i,
+ /^osteguna/i,
+ /^ostirala/i,
+ /^larunbata/i
+ ]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|ge|eg|((goiza|goizean)|arratsaldea|(gaua|gauean)))/i,
+ any: /^([ap]\.?\s?m\.?|gauerdia|eguerdia|((goiza|goizean)|arratsaldea|(gaua|gauean)))/i
+}
+var parseDayPeriodPatterns = {
+ narrow: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^ge/i,
+ noon: /^eg/i,
+ morning: /goiz/i,
+ afternoon: /arratsaldea/i,
+ evening: /arratsaldea/i,
+ night: /gau/i
+ },
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^gauerdia/i,
+ noon: /^eguerdia/i,
+ morning: /goiz/i,
+ afternoon: /arratsaldea/i,
+ evening: /arratsaldea/i,
+ night: /gau/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/eu/index.d.ts b/date-fns/src/locale/eu/index.d.ts
new file mode 100644
index 0000000..ec84189
--- /dev/null
+++ b/date-fns/src/locale/eu/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { eu } from 'date-fns/locale'
+export default eu
diff --git a/date-fns/src/locale/eu/index.js b/date-fns/src/locale/eu/index.js
new file mode 100644
index 0000000..51dd659
--- /dev/null
+++ b/date-fns/src/locale/eu/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Basque locale.
+ * @language Basque
+ * @iso-639-2 eus
+ * @author Jacob Söderblom [@JacobSoderblom]{@link https://github.com/JacobSoderblom}
+ */
+var locale = {
+ code: 'eu',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/eu/index.js.flow b/date-fns/src/locale/eu/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/eu/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/eu/snapshot.md b/date-fns/src/locale/eu/snapshot.md
new file mode 100644
index 0000000..13f3146
--- /dev/null
+++ b/date-fns/src/locale/eu/snapshot.md
@@ -0,0 +1,304 @@
+# Basque (eu) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1H | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2H | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. hiruhilekoa | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. hiruhilekoa | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1H | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2H | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. hiruhilekoa | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. hiruhilekoa | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | ots | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | uzt | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | otsaila | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | uztaila | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | o | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | u | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | ots | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | uzt | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | otsaila | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | uztaila | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | o | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | u | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | ast | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ost | 2019-02-14T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | ast | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ost | 2019-02-14T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | ast | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ost | 2019-02-14T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | astelehena | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ostirala | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | o | 2019-02-14T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | al | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | or | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | ast | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ost | 2019-02-14T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | astelehena | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ostirala | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | o | 2019-02-14T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | al | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | or | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | ast | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ost | 2019-02-14T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | astelehena | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ostirala | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | o | 2019-02-14T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | al | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | or | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | ast | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ost | 2019-02-14T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | astelehena | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ostirala | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | o | 2019-02-14T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | al | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | or | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | goizean | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | gauean | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | goizean | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | gauean | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | goizean | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | gauean | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | goizean | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | gauean | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | goizean | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | arratsaldean | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | gauean | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 87/02/11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 53/05/29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 1987 ots 11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 mai 29 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987ko otsailaren 11a | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453ko maiatzaren 29a | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | asteazkena, 1987ko otsailaren 11a 1987ren | Errored |
+| | | 1453-05-29T23:59:59.999Z | igandea, 1453ko maiatzaren 29a 1453ren | Errored |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 87/02/11, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 53/05/29, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 1987 ots 11, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 mai 29, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987ko otsailaren 11a tan 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453ko maiatzaren 29a tan 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | asteazkena, 1987ko otsailaren 11a 1987ren tan 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | igandea, 1453ko maiatzaren 29a 1453ren tan 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------------------- | --------------------------- | --------------------------------- |
+| 2006-01-01T00:00:00.000Z | 6 urte gutxi gorabehera | 6 urte gutxi gorabehera | en 6 urte gutxi gorabehera |
+| 2005-01-01T00:00:00.000Z | 5 urte gutxi gorabehera | 5 urte gutxi gorabehera | en 5 urte gutxi gorabehera |
+| 2004-01-01T00:00:00.000Z | 4 urte gutxi gorabehera | 4 urte gutxi gorabehera | en 4 urte gutxi gorabehera |
+| 2003-01-01T00:00:00.000Z | 3 urte gutxi gorabehera | 3 urte gutxi gorabehera | en 3 urte gutxi gorabehera |
+| 2002-01-01T00:00:00.000Z | 2 urte gutxi gorabehera | 2 urte gutxi gorabehera | en 2 urte gutxi gorabehera |
+| 2001-06-01T00:00:00.000Z | 1 urte baino gehiago | 1 urte baino gehiago | en 1 urte baino gehiago |
+| 2001-02-01T00:00:00.000Z | 1 urte gutxi gorabehera | 1 urte gutxi gorabehera | en 1 urte gutxi gorabehera |
+| 2001-01-01T00:00:00.000Z | 1 urte gutxi gorabehera | 1 urte gutxi gorabehera | en 1 urte gutxi gorabehera |
+| 2000-06-01T00:00:00.000Z | 5 hilabete | 5 hilabete | en 5 hilabete |
+| 2000-03-01T00:00:00.000Z | 2 hilabete | 2 hilabete | en 2 hilabete |
+| 2000-02-01T00:00:00.000Z | 1 hilabete gutxi gorabehera | 1 hilabete gutxi gorabehera | en 1 hilabete gutxi gorabehera |
+| 2000-01-15T00:00:00.000Z | 14 egun | 14 egun | en 14 egun |
+| 2000-01-02T00:00:00.000Z | 1 egun | 1 egun | en 1 egun |
+| 2000-01-01T06:00:00.000Z | 6 ordu gutxi gorabehera | 6 ordu gutxi gorabehera | en 6 ordu gutxi gorabehera |
+| 2000-01-01T01:00:00.000Z | 1 ordu gutxi gorabehera | 1 ordu gutxi gorabehera | en 1 ordu gutxi gorabehera |
+| 2000-01-01T00:45:00.000Z | 1 ordu gutxi gorabehera | 1 ordu gutxi gorabehera | en 1 ordu gutxi gorabehera |
+| 2000-01-01T00:30:00.000Z | 30 minutu | 30 minutu | en 30 minutu |
+| 2000-01-01T00:15:00.000Z | 15 minutu | 15 minutu | en 15 minutu |
+| 2000-01-01T00:01:00.000Z | 1 minutu | 1 minutu | en 1 minutu |
+| 2000-01-01T00:00:25.000Z | minutu bat baino gutxiago | minutu erdi | en minutu bat baino gutxiago |
+| 2000-01-01T00:00:15.000Z | minutu bat baino gutxiago | 20 segundo baino gutxiago | en minutu bat baino gutxiago |
+| 2000-01-01T00:00:05.000Z | minutu bat baino gutxiago | 10 segundo baino gutxiago | en minutu bat baino gutxiago |
+| 2000-01-01T00:00:00.000Z | minutu bat baino gutxiago | 5 segundo baino gutxiago | duela minutu bat baino gutxiago |
+| 1999-12-31T23:59:55.000Z | minutu bat baino gutxiago | 10 segundo baino gutxiago | duela minutu bat baino gutxiago |
+| 1999-12-31T23:59:45.000Z | minutu bat baino gutxiago | 20 segundo baino gutxiago | duela minutu bat baino gutxiago |
+| 1999-12-31T23:59:35.000Z | minutu bat baino gutxiago | minutu erdi | duela minutu bat baino gutxiago |
+| 1999-12-31T23:59:00.000Z | 1 minutu | 1 minutu | duela 1 minutu |
+| 1999-12-31T23:45:00.000Z | 15 minutu | 15 minutu | duela 15 minutu |
+| 1999-12-31T23:30:00.000Z | 30 minutu | 30 minutu | duela 30 minutu |
+| 1999-12-31T23:15:00.000Z | 1 ordu gutxi gorabehera | 1 ordu gutxi gorabehera | duela 1 ordu gutxi gorabehera |
+| 1999-12-31T23:00:00.000Z | 1 ordu gutxi gorabehera | 1 ordu gutxi gorabehera | duela 1 ordu gutxi gorabehera |
+| 1999-12-31T18:00:00.000Z | 6 ordu gutxi gorabehera | 6 ordu gutxi gorabehera | duela 6 ordu gutxi gorabehera |
+| 1999-12-30T00:00:00.000Z | 2 egun | 2 egun | duela 2 egun |
+| 1999-12-15T00:00:00.000Z | 17 egun | 17 egun | duela 17 egun |
+| 1999-12-01T00:00:00.000Z | 1 hilabete gutxi gorabehera | 1 hilabete gutxi gorabehera | duela 1 hilabete gutxi gorabehera |
+| 1999-11-01T00:00:00.000Z | 2 hilabete | 2 hilabete | duela 2 hilabete |
+| 1999-06-01T00:00:00.000Z | 7 hilabete | 7 hilabete | duela 7 hilabete |
+| 1999-01-01T00:00:00.000Z | 1 urte gutxi gorabehera | 1 urte gutxi gorabehera | duela 1 urte gutxi gorabehera |
+| 1998-12-01T00:00:00.000Z | 1 urte gutxi gorabehera | 1 urte gutxi gorabehera | duela 1 urte gutxi gorabehera |
+| 1998-06-01T00:00:00.000Z | 1 urte baino gehiago | 1 urte baino gehiago | duela 1 urte baino gehiago |
+| 1998-01-01T00:00:00.000Z | 2 urte gutxi gorabehera | 2 urte gutxi gorabehera | duela 2 urte gutxi gorabehera |
+| 1997-01-01T00:00:00.000Z | 3 urte gutxi gorabehera | 3 urte gutxi gorabehera | duela 3 urte gutxi gorabehera |
+| 1996-01-01T00:00:00.000Z | 4 urte gutxi gorabehera | 4 urte gutxi gorabehera | duela 4 urte gutxi gorabehera |
+| 1995-01-01T00:00:00.000Z | 5 urte gutxi gorabehera | 5 urte gutxi gorabehera | duela 5 urte gutxi gorabehera |
+| 1994-01-01T00:00:00.000Z | 6 urte gutxi gorabehera | 6 urte gutxi gorabehera | duela 6 urte gutxi gorabehera |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 urte | en 6 urte | 52608 ordu |
+| 2005-01-01T00:00:00.000Z | 5 urte | en 5 urte | 43848 ordu |
+| 2004-01-01T00:00:00.000Z | 4 urte | en 4 urte | 35064 ordu |
+| 2003-01-01T00:00:00.000Z | 3 urte | en 3 urte | 26304 ordu |
+| 2002-01-01T00:00:00.000Z | 2 urte | en 2 urte | 17544 ordu |
+| 2001-06-01T00:00:00.000Z | 1 urte | en 1 urte | 12408 ordu |
+| 2001-02-01T00:00:00.000Z | 1 urte | en 1 urte | 9528 ordu |
+| 2001-01-01T00:00:00.000Z | 1 urte | en 1 urte | 8784 ordu |
+| 2000-06-01T00:00:00.000Z | 5 hilabete | en 5 hilabete | 3648 ordu |
+| 2000-03-01T00:00:00.000Z | 2 hilabete | en 2 hilabete | 1440 ordu |
+| 2000-02-01T00:00:00.000Z | 1 hilabete | en 1 hilabete | 744 ordu |
+| 2000-01-15T00:00:00.000Z | 14 egun | en 14 egun | 336 ordu |
+| 2000-01-02T00:00:00.000Z | 1 egun | en 1 egun | 24 ordu |
+| 2000-01-01T06:00:00.000Z | 6 ordu | en 6 ordu | 6 ordu |
+| 2000-01-01T01:00:00.000Z | 1 ordu | en 1 ordu | 1 ordu |
+| 2000-01-01T00:45:00.000Z | 45 minutu | en 45 minutu | 1 ordu |
+| 2000-01-01T00:30:00.000Z | 30 minutu | en 30 minutu | 1 ordu |
+| 2000-01-01T00:15:00.000Z | 15 minutu | en 15 minutu | 0 ordu |
+| 2000-01-01T00:01:00.000Z | 1 minutu | en 1 minutu | 0 ordu |
+| 2000-01-01T00:00:25.000Z | 25 segundo | en 25 segundo | 0 ordu |
+| 2000-01-01T00:00:15.000Z | 15 segundo | en 15 segundo | 0 ordu |
+| 2000-01-01T00:00:05.000Z | 5 segundo | en 5 segundo | 0 ordu |
+| 2000-01-01T00:00:00.000Z | 0 segundo | duela 0 segundo | 0 ordu |
+| 1999-12-31T23:59:55.000Z | 5 segundo | duela 5 segundo | 0 ordu |
+| 1999-12-31T23:59:45.000Z | 15 segundo | duela 15 segundo | 0 ordu |
+| 1999-12-31T23:59:35.000Z | 25 segundo | duela 25 segundo | 0 ordu |
+| 1999-12-31T23:59:00.000Z | 1 minutu | duela 1 minutu | 0 ordu |
+| 1999-12-31T23:45:00.000Z | 15 minutu | duela 15 minutu | 0 ordu |
+| 1999-12-31T23:30:00.000Z | 30 minutu | duela 30 minutu | 1 ordu |
+| 1999-12-31T23:15:00.000Z | 45 minutu | duela 45 minutu | 1 ordu |
+| 1999-12-31T23:00:00.000Z | 1 ordu | duela 1 ordu | 1 ordu |
+| 1999-12-31T18:00:00.000Z | 6 ordu | duela 6 ordu | 6 ordu |
+| 1999-12-30T00:00:00.000Z | 2 egun | duela 2 egun | 48 ordu |
+| 1999-12-15T00:00:00.000Z | 17 egun | duela 17 egun | 408 ordu |
+| 1999-12-01T00:00:00.000Z | 1 hilabete | duela 1 hilabete | 744 ordu |
+| 1999-11-01T00:00:00.000Z | 2 hilabete | duela 2 hilabete | 1464 ordu |
+| 1999-06-01T00:00:00.000Z | 7 hilabete | duela 7 hilabete | 5136 ordu |
+| 1999-01-01T00:00:00.000Z | 1 urte | duela 1 urte | 8760 ordu |
+| 1998-12-01T00:00:00.000Z | 1 urte | duela 1 urte | 9504 ordu |
+| 1998-06-01T00:00:00.000Z | 2 urte | duela 2 urte | 13896 ordu |
+| 1998-01-01T00:00:00.000Z | 2 urte | duela 2 urte | 17520 ordu |
+| 1997-01-01T00:00:00.000Z | 3 urte | duela 3 urte | 26280 ordu |
+| 1996-01-01T00:00:00.000Z | 4 urte | duela 4 urte | 35064 ordu |
+| 1995-01-01T00:00:00.000Z | 5 urte | duela 5 urte | 43824 ordu |
+| 1994-01-01T00:00:00.000Z | 6 urte | duela 6 urte | 52584 ordu |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------- |
+| 2000-01-10T00:00:00.000Z | 00/01/10 |
+| 2000-01-05T00:00:00.000Z | asteazkena, 00:00 |
+| 2000-01-02T00:00:00.000Z | bihar, 00:00 |
+| 2000-01-01T00:00:00.000Z | gaur, 00:00 |
+| 1999-12-31T00:00:00.000Z | atzo, 00:00 |
+| 1999-12-27T00:00:00.000Z | joan den astelehena, 00:00 |
+| 1999-12-21T00:00:00.000Z | 99/12/21 |
diff --git a/date-fns/src/locale/fa-IR/_lib/formatDistance/index.js b/date-fns/src/locale/fa-IR/_lib/formatDistance/index.js
new file mode 100644
index 0000000..e9ba208
--- /dev/null
+++ b/date-fns/src/locale/fa-IR/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'کمتر از یک ثانیه',
+ other: 'کمتر از {{count}} ثانیه'
+ },
+
+ xSeconds: {
+ one: '1 ثانیه',
+ other: '{{count}} ثانیه'
+ },
+
+ halfAMinute: 'نیم دقیقه',
+
+ lessThanXMinutes: {
+ one: 'کمتر از یک دقیقه',
+ other: 'کمتر از {{count}} دقیقه'
+ },
+
+ xMinutes: {
+ one: '1 دقیقه',
+ other: '{{count}} دقیقه'
+ },
+
+ aboutXHours: {
+ one: 'حدود 1 ساعت',
+ other: 'حدود {{count}} ساعت'
+ },
+
+ xHours: {
+ one: '1 ساعت',
+ other: '{{count}} ساعت'
+ },
+
+ xDays: {
+ one: '1 روز',
+ other: '{{count}} روز'
+ },
+
+ aboutXWeeks: {
+ one: 'حدود 1 هفته',
+ other: 'حدود {{count}} هفته'
+ },
+
+ xWeeks: {
+ one: '1 هفته',
+ other: '{{count}} هفته'
+ },
+
+ aboutXMonths: {
+ one: 'حدود 1 ماه',
+ other: 'حدود {{count}} ماه'
+ },
+
+ xMonths: {
+ one: '1 ماه',
+ other: '{{count}} ماه'
+ },
+
+ aboutXYears: {
+ one: 'حدود 1 سال',
+ other: 'حدود {{count}} سال'
+ },
+
+ xYears: {
+ one: '1 سال',
+ other: '{{count}} سال'
+ },
+
+ overXYears: {
+ one: 'بیشتر از 1 سال',
+ other: 'بیشتر از {{count}} سال'
+ },
+
+ almostXYears: {
+ one: 'نزدیک 1 سال',
+ other: 'نزدیک {{count}} سال'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'در ' + result
+ } else {
+ return result + ' قبل'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/fa-IR/_lib/formatLong/index.js b/date-fns/src/locale/fa-IR/_lib/formatLong/index.js
new file mode 100644
index 0000000..9fc97e4
--- /dev/null
+++ b/date-fns/src/locale/fa-IR/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE do MMMM y',
+ long: 'do MMMM y',
+ medium: 'd MMM y',
+ short: 'yyyy/MM/dd'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'در' {{time}}",
+ long: "{{date}} 'در' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/fa-IR/_lib/formatRelative/index.js b/date-fns/src/locale/fa-IR/_lib/formatRelative/index.js
new file mode 100644
index 0000000..34244e1
--- /dev/null
+++ b/date-fns/src/locale/fa-IR/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'گذشته در' p",
+ yesterday: "'دیروز در' p",
+ today: "'امروز در' p",
+ tomorrow: "'فردا در' p",
+ nextWeek: "eeee 'در' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/fa-IR/_lib/localize/index.js b/date-fns/src/locale/fa-IR/_lib/localize/index.js
new file mode 100644
index 0000000..e8f5de2
--- /dev/null
+++ b/date-fns/src/locale/fa-IR/_lib/localize/index.js
@@ -0,0 +1,169 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['ق', 'ب'],
+ abbreviated: ['ق.م.', 'ب.م.'],
+ wide: ['قبل از میلاد', 'بعد از میلاد']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['س‌م1', 'س‌م2', 'س‌م3', 'س‌م4'],
+ wide: ['سه‌ماهه 1', 'سه‌ماهه 2', 'سه‌ماهه 3', 'سه‌ماهه 4']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['ژ', 'ف', 'م', 'آ', 'م', 'ج', 'ج', 'آ', 'س', 'ا', 'ن', 'د'],
+ abbreviated: [
+ 'ژانـ',
+ 'فور',
+ 'مارس',
+ 'آپر',
+ 'می',
+ 'جون',
+ 'جولـ',
+ 'آگو',
+ 'سپتـ',
+ 'اکتـ',
+ 'نوامـ',
+ 'دسامـ'
+ ],
+ wide: [
+ 'ژانویه',
+ 'فوریه',
+ 'مارس',
+ 'آپریل',
+ 'می',
+ 'جون',
+ 'جولای',
+ 'آگوست',
+ 'سپتامبر',
+ 'اکتبر',
+ 'نوامبر',
+ 'دسامبر'
+ ]
+}
+
+var dayValues = {
+ narrow: ['ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش'],
+ short: ['1ش', '2ش', '3ش', '4ش', '5ش', 'ج', 'ش'],
+ abbreviated: [
+ 'یکشنبه',
+ 'دوشنبه',
+ 'سه‌شنبه',
+ 'چهارشنبه',
+ 'پنجشنبه',
+ 'جمعه',
+ 'شنبه'
+ ],
+ wide: ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ق',
+ pm: 'ب',
+ midnight: 'ن',
+ noon: 'ظ',
+ morning: 'ص',
+ afternoon: 'ب.ظ.',
+ evening: 'ع',
+ night: 'ش'
+ },
+ abbreviated: {
+ am: 'ق.ظ.',
+ pm: 'ب.ظ.',
+ midnight: 'نیمه‌شب',
+ noon: 'ظهر',
+ morning: 'صبح',
+ afternoon: 'بعدازظهر',
+ evening: 'عصر',
+ night: 'شب'
+ },
+ wide: {
+ am: 'قبل‌ازظهر',
+ pm: 'بعدازظهر',
+ midnight: 'نیمه‌شب',
+ noon: 'ظهر',
+ morning: 'صبح',
+ afternoon: 'بعدازظهر',
+ evening: 'عصر',
+ night: 'شب'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ق',
+ pm: 'ب',
+ midnight: 'ن',
+ noon: 'ظ',
+ morning: 'ص',
+ afternoon: 'ب.ظ.',
+ evening: 'ع',
+ night: 'ش'
+ },
+ abbreviated: {
+ am: 'ق.ظ.',
+ pm: 'ب.ظ.',
+ midnight: 'نیمه‌شب',
+ noon: 'ظهر',
+ morning: 'صبح',
+ afternoon: 'بعدازظهر',
+ evening: 'عصر',
+ night: 'شب'
+ },
+ wide: {
+ am: 'قبل‌ازظهر',
+ pm: 'بعدازظهر',
+ midnight: 'نیمه‌شب',
+ noon: 'ظهر',
+ morning: 'صبح',
+ afternoon: 'بعدازظهر',
+ evening: 'عصر',
+ night: 'شب'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ return String(dirtyNumber)
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/fa-IR/_lib/match/index.js b/date-fns/src/locale/fa-IR/_lib/match/index.js
new file mode 100644
index 0000000..e7ebd3f
--- /dev/null
+++ b/date-fns/src/locale/fa-IR/_lib/match/index.js
@@ -0,0 +1,146 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ق|ب)/i,
+ abbreviated: /^(ق\.?\s?م\.?|ق\.?\s?د\.?\s?م\.?|م\.?\s?|د\.?\s?م\.?)/i,
+ wide: /^(قبل از میلاد|قبل از دوران مشترک|میلادی|دوران مشترک|بعد از میلاد)/i
+}
+var parseEraPatterns = {
+ any: [/^قبل/i, /^بعد/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^س‌م[1234]/i,
+ wide: /^سه‌ماهه [1234]/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[جژفمآاماسند]/i,
+ abbreviated: /^(جنو|ژانـ|ژانویه|فوریه|فور|مارس|آوریل|آپر|مه|می|ژوئن|جون|جول|جولـ|ژوئیه|اوت|آگو|سپتمبر|سپتامبر|اکتبر|اکتوبر|نوامبر|نوامـ|دسامبر|دسامـ|دسم)/i,
+ wide: /^(ژانویه|جنوری|فبروری|فوریه|مارچ|مارس|آپریل|اپریل|ایپریل|آوریل|مه|می|ژوئن|جون|جولای|ژوئیه|آگست|اگست|آگوست|اوت|سپتمبر|سپتامبر|اکتبر|اکتوبر|نوامبر|نومبر|دسامبر|دسمبر)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^(ژ|ج)/i,
+ /^ف/i,
+ /^م/i,
+ /^(آ|ا)/i,
+ /^م/i,
+ /^(ژ|ج)/i,
+ /^(ج|ژ)/i,
+ /^(آ|ا)/i,
+ /^س/i,
+ /^ا/i,
+ /^ن/i,
+ /^د/i
+ ],
+ any: [
+ /^ژا/i,
+ /^ف/i,
+ /^ما/i,
+ /^آپ/i,
+ /^(می|مه)/i,
+ /^(ژوئن|جون)/i,
+ /^(ژوئی|جول)/i,
+ /^(اوت|آگ)/i,
+ /^س/i,
+ /^(اوک|اک)/i,
+ /^ن/i,
+ /^د/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[شیدسچپج]/i,
+ short: /^(ش|ج|1ش|2ش|3ش|4ش|5ش)/i,
+ abbreviated: /^(یکشنبه|دوشنبه|سه‌شنبه|چهارشنبه|پنج‌شنبه|جمعه|شنبه)/i,
+ wide: /^(یکشنبه|دوشنبه|سه‌شنبه|چهارشنبه|پنج‌شنبه|جمعه|شنبه)/i
+}
+var parseDayPatterns = {
+ narrow: [/^ی/i, /^دو/i, /^س/i, /^چ/i, /^پ/i, /^ج/i, /^ش/i],
+ any: [
+ /^(ی|1ش|یکشنبه)/i,
+ /^(د|2ش|دوشنبه)/i,
+ /^(س|3ش|سه‌شنبه)/i,
+ /^(چ|4ش|چهارشنبه)/i,
+ /^(پ|5ش|پنجشنبه)/i,
+ /^(ج|جمعه)/i,
+ /^(ش|شنبه)/i
+ ]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(ب|ق|ن|ظ|ص|ب.ظ.|ع|ش)/i,
+ abbreviated: /^(ق.ظ.|ب.ظ.|نیمه‌شب|ظهر|صبح|بعدازظهر|عصر|شب)/i,
+ wide: /^(قبل‌ازظهر|نیمه‌شب|ظهر|صبح|بعدازظهر|عصر|شب)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^(ق|ق.ظ.|قبل‌ازظهر)/i,
+ pm: /^(ب|ب.ظ.|بعدازظهر)/i,
+ midnight: /^(‌نیمه‌شب|ن)/i,
+ noon: /^(ظ|ظهر)/i,
+ morning: /(ص|صبح)/i,
+ afternoon: /(ب|ب.ظ.|بعدازظهر)/i,
+ evening: /(ع|عصر)/i,
+ night: /(ش|شب)/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/fa-IR/index.d.ts b/date-fns/src/locale/fa-IR/index.d.ts
new file mode 100644
index 0000000..2e6e4bb
--- /dev/null
+++ b/date-fns/src/locale/fa-IR/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { faIR } from 'date-fns/locale'
+export default faIR
diff --git a/date-fns/src/locale/fa-IR/index.js b/date-fns/src/locale/fa-IR/index.js
new file mode 100644
index 0000000..a09d202
--- /dev/null
+++ b/date-fns/src/locale/fa-IR/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Persian/Farsi locale (Iran).
+ * @language Persian
+ * @iso-639-2 ira
+ * @author Morteza Ziyae [@mort3za]{@link https://github.com/mort3za}
+ */
+var locale = {
+ code: 'fa-IR',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 6 /* Saturday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/fa-IR/index.js.flow b/date-fns/src/locale/fa-IR/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/fa-IR/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/fa-IR/snapshot.md b/date-fns/src/locale/fa-IR/snapshot.md
new file mode 100644
index 0000000..b4fbfcb
--- /dev/null
+++ b/date-fns/src/locale/fa-IR/snapshot.md
@@ -0,0 +1,304 @@
+# Persian (fa-IR) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-27T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | س‌م1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | س‌م2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | سه‌ماهه 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | سه‌ماهه 2 | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | س‌م1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | س‌م2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | سه‌ماهه 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | سه‌ماهه 2 | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | فور | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | جولـ | Invalid Date |
+| | MMMM | 2019-02-11T12:13:14.015Z | فوریه | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | جولای | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ج | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | فور | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | جولـ | Invalid Date |
+| | LLLL | 2019-02-11T12:13:14.015Z | فوریه | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | جولای | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ج | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-29T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49 | 2019-11-30T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-22T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-22T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-22T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-22T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | د | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-22T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | 2ش | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-22T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | د | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | 2ش | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 3 | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 7 | 2019-02-22T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-22T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-22T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | د | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-22T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | 2ش | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-22T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 3 | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 7 | 2019-02-22T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-22T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | دوشنبه | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جمعه | 2019-02-22T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | د | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-22T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | 2ش | 2019-02-18T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-22T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | قبل‌ازظهر | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | بعدازظهر | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | بعدازظهر | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | قبل‌ازظهر | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ق | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ب | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ب | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ق | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ب.ظ. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ق.ظ. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | قبل‌ازظهر | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | بعدازظهر | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | بعدازظهر | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | قبل‌ازظهر | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ق | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ب | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ب | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ق | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | صبح | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | بعدازظهر | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | عصر | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | شب | 2019-02-11T12:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | صبح | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | بعدازظهر | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | عصر | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | شب | 2019-02-11T12:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | صبح | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | بعدازظهر | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | عصر | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | شب | 2019-02-11T12:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | صبح | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | بعدازظهر | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | عصر | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | شب | 2019-02-11T12:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ص | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ب.ظ. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ع | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ش | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987/02/11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453/05/29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 فور 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 می 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 فوریه 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 می 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | چهارشنبه 11 فوریه 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | یکشنبه 29 می 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 ب.ظ. | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 ب.ظ. | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 ب.ظ. | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 ب.ظ. | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 ب.ظ. GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 ب.ظ. GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 ب.ظ. GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 ب.ظ. GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987/02/11, 12:13 ب.ظ. | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453/05/29, 11:59 ب.ظ. | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 فور 1987, 12:13:14 ب.ظ. | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 می 1453, 11:59:59 ب.ظ. | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 فوریه 1987 در 12:13:14 ب.ظ. GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 می 1453 در 11:59:59 ب.ظ. GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | چهارشنبه 11 فوریه 1987 در 12:13:14 ب.ظ. GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | یکشنبه 29 می 1453 در 11:59:59 ب.ظ. GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------- | ---------------------- | -------------------- |
+| 2006-01-01T00:00:00.000Z | حدود 6 سال | حدود 6 سال | در حدود 6 سال |
+| 2005-01-01T00:00:00.000Z | حدود 5 سال | حدود 5 سال | در حدود 5 سال |
+| 2004-01-01T00:00:00.000Z | حدود 4 سال | حدود 4 سال | در حدود 4 سال |
+| 2003-01-01T00:00:00.000Z | حدود 3 سال | حدود 3 سال | در حدود 3 سال |
+| 2002-01-01T00:00:00.000Z | حدود 2 سال | حدود 2 سال | در حدود 2 سال |
+| 2001-06-01T00:00:00.000Z | بیشتر از 1 سال | بیشتر از 1 سال | در بیشتر از 1 سال |
+| 2001-02-01T00:00:00.000Z | حدود 1 سال | حدود 1 سال | در حدود 1 سال |
+| 2001-01-01T00:00:00.000Z | حدود 1 سال | حدود 1 سال | در حدود 1 سال |
+| 2000-06-01T00:00:00.000Z | 5 ماه | 5 ماه | در 5 ماه |
+| 2000-03-01T00:00:00.000Z | 2 ماه | 2 ماه | در 2 ماه |
+| 2000-02-01T00:00:00.000Z | حدود 1 ماه | حدود 1 ماه | در حدود 1 ماه |
+| 2000-01-15T00:00:00.000Z | 14 روز | 14 روز | در 14 روز |
+| 2000-01-02T00:00:00.000Z | 1 روز | 1 روز | در 1 روز |
+| 2000-01-01T06:00:00.000Z | حدود 6 ساعت | حدود 6 ساعت | در حدود 6 ساعت |
+| 2000-01-01T01:00:00.000Z | حدود 1 ساعت | حدود 1 ساعت | در حدود 1 ساعت |
+| 2000-01-01T00:45:00.000Z | حدود 1 ساعت | حدود 1 ساعت | در حدود 1 ساعت |
+| 2000-01-01T00:30:00.000Z | 30 دقیقه | 30 دقیقه | در 30 دقیقه |
+| 2000-01-01T00:15:00.000Z | 15 دقیقه | 15 دقیقه | در 15 دقیقه |
+| 2000-01-01T00:01:00.000Z | 1 دقیقه | 1 دقیقه | در 1 دقیقه |
+| 2000-01-01T00:00:25.000Z | کمتر از یک دقیقه | نیم دقیقه | در کمتر از یک دقیقه |
+| 2000-01-01T00:00:15.000Z | کمتر از یک دقیقه | کمتر از 20 ثانیه | در کمتر از یک دقیقه |
+| 2000-01-01T00:00:05.000Z | کمتر از یک دقیقه | کمتر از 10 ثانیه | در کمتر از یک دقیقه |
+| 2000-01-01T00:00:00.000Z | کمتر از یک دقیقه | کمتر از 5 ثانیه | کمتر از یک دقیقه قبل |
+| 1999-12-31T23:59:55.000Z | کمتر از یک دقیقه | کمتر از 10 ثانیه | کمتر از یک دقیقه قبل |
+| 1999-12-31T23:59:45.000Z | کمتر از یک دقیقه | کمتر از 20 ثانیه | کمتر از یک دقیقه قبل |
+| 1999-12-31T23:59:35.000Z | کمتر از یک دقیقه | نیم دقیقه | کمتر از یک دقیقه قبل |
+| 1999-12-31T23:59:00.000Z | 1 دقیقه | 1 دقیقه | 1 دقیقه قبل |
+| 1999-12-31T23:45:00.000Z | 15 دقیقه | 15 دقیقه | 15 دقیقه قبل |
+| 1999-12-31T23:30:00.000Z | 30 دقیقه | 30 دقیقه | 30 دقیقه قبل |
+| 1999-12-31T23:15:00.000Z | حدود 1 ساعت | حدود 1 ساعت | حدود 1 ساعت قبل |
+| 1999-12-31T23:00:00.000Z | حدود 1 ساعت | حدود 1 ساعت | حدود 1 ساعت قبل |
+| 1999-12-31T18:00:00.000Z | حدود 6 ساعت | حدود 6 ساعت | حدود 6 ساعت قبل |
+| 1999-12-30T00:00:00.000Z | 2 روز | 2 روز | 2 روز قبل |
+| 1999-12-15T00:00:00.000Z | 17 روز | 17 روز | 17 روز قبل |
+| 1999-12-01T00:00:00.000Z | حدود 1 ماه | حدود 1 ماه | حدود 1 ماه قبل |
+| 1999-11-01T00:00:00.000Z | 2 ماه | 2 ماه | 2 ماه قبل |
+| 1999-06-01T00:00:00.000Z | 7 ماه | 7 ماه | 7 ماه قبل |
+| 1999-01-01T00:00:00.000Z | حدود 1 سال | حدود 1 سال | حدود 1 سال قبل |
+| 1998-12-01T00:00:00.000Z | حدود 1 سال | حدود 1 سال | حدود 1 سال قبل |
+| 1998-06-01T00:00:00.000Z | بیشتر از 1 سال | بیشتر از 1 سال | بیشتر از 1 سال قبل |
+| 1998-01-01T00:00:00.000Z | حدود 2 سال | حدود 2 سال | حدود 2 سال قبل |
+| 1997-01-01T00:00:00.000Z | حدود 3 سال | حدود 3 سال | حدود 3 سال قبل |
+| 1996-01-01T00:00:00.000Z | حدود 4 سال | حدود 4 سال | حدود 4 سال قبل |
+| 1995-01-01T00:00:00.000Z | حدود 5 سال | حدود 5 سال | حدود 5 سال قبل |
+| 1994-01-01T00:00:00.000Z | حدود 6 سال | حدود 6 سال | حدود 6 سال قبل |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | -------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 سال | در 6 سال | 52608 ساعت |
+| 2005-01-01T00:00:00.000Z | 5 سال | در 5 سال | 43848 ساعت |
+| 2004-01-01T00:00:00.000Z | 4 سال | در 4 سال | 35064 ساعت |
+| 2003-01-01T00:00:00.000Z | 3 سال | در 3 سال | 26304 ساعت |
+| 2002-01-01T00:00:00.000Z | 2 سال | در 2 سال | 17544 ساعت |
+| 2001-06-01T00:00:00.000Z | 1 سال | در 1 سال | 12408 ساعت |
+| 2001-02-01T00:00:00.000Z | 1 سال | در 1 سال | 9528 ساعت |
+| 2001-01-01T00:00:00.000Z | 1 سال | در 1 سال | 8784 ساعت |
+| 2000-06-01T00:00:00.000Z | 5 ماه | در 5 ماه | 3648 ساعت |
+| 2000-03-01T00:00:00.000Z | 2 ماه | در 2 ماه | 1440 ساعت |
+| 2000-02-01T00:00:00.000Z | 1 ماه | در 1 ماه | 744 ساعت |
+| 2000-01-15T00:00:00.000Z | 14 روز | در 14 روز | 336 ساعت |
+| 2000-01-02T00:00:00.000Z | 1 روز | در 1 روز | 24 ساعت |
+| 2000-01-01T06:00:00.000Z | 6 ساعت | در 6 ساعت | 6 ساعت |
+| 2000-01-01T01:00:00.000Z | 1 ساعت | در 1 ساعت | 1 ساعت |
+| 2000-01-01T00:45:00.000Z | 45 دقیقه | در 45 دقیقه | 1 ساعت |
+| 2000-01-01T00:30:00.000Z | 30 دقیقه | در 30 دقیقه | 1 ساعت |
+| 2000-01-01T00:15:00.000Z | 15 دقیقه | در 15 دقیقه | 0 ساعت |
+| 2000-01-01T00:01:00.000Z | 1 دقیقه | در 1 دقیقه | 0 ساعت |
+| 2000-01-01T00:00:25.000Z | 25 ثانیه | در 25 ثانیه | 0 ساعت |
+| 2000-01-01T00:00:15.000Z | 15 ثانیه | در 15 ثانیه | 0 ساعت |
+| 2000-01-01T00:00:05.000Z | 5 ثانیه | در 5 ثانیه | 0 ساعت |
+| 2000-01-01T00:00:00.000Z | 0 ثانیه | 0 ثانیه قبل | 0 ساعت |
+| 1999-12-31T23:59:55.000Z | 5 ثانیه | 5 ثانیه قبل | 0 ساعت |
+| 1999-12-31T23:59:45.000Z | 15 ثانیه | 15 ثانیه قبل | 0 ساعت |
+| 1999-12-31T23:59:35.000Z | 25 ثانیه | 25 ثانیه قبل | 0 ساعت |
+| 1999-12-31T23:59:00.000Z | 1 دقیقه | 1 دقیقه قبل | 0 ساعت |
+| 1999-12-31T23:45:00.000Z | 15 دقیقه | 15 دقیقه قبل | 0 ساعت |
+| 1999-12-31T23:30:00.000Z | 30 دقیقه | 30 دقیقه قبل | 1 ساعت |
+| 1999-12-31T23:15:00.000Z | 45 دقیقه | 45 دقیقه قبل | 1 ساعت |
+| 1999-12-31T23:00:00.000Z | 1 ساعت | 1 ساعت قبل | 1 ساعت |
+| 1999-12-31T18:00:00.000Z | 6 ساعت | 6 ساعت قبل | 6 ساعت |
+| 1999-12-30T00:00:00.000Z | 2 روز | 2 روز قبل | 48 ساعت |
+| 1999-12-15T00:00:00.000Z | 17 روز | 17 روز قبل | 408 ساعت |
+| 1999-12-01T00:00:00.000Z | 1 ماه | 1 ماه قبل | 744 ساعت |
+| 1999-11-01T00:00:00.000Z | 2 ماه | 2 ماه قبل | 1464 ساعت |
+| 1999-06-01T00:00:00.000Z | 7 ماه | 7 ماه قبل | 5136 ساعت |
+| 1999-01-01T00:00:00.000Z | 1 سال | 1 سال قبل | 8760 ساعت |
+| 1998-12-01T00:00:00.000Z | 1 سال | 1 سال قبل | 9504 ساعت |
+| 1998-06-01T00:00:00.000Z | 2 سال | 2 سال قبل | 13896 ساعت |
+| 1998-01-01T00:00:00.000Z | 2 سال | 2 سال قبل | 17520 ساعت |
+| 1997-01-01T00:00:00.000Z | 3 سال | 3 سال قبل | 26280 ساعت |
+| 1996-01-01T00:00:00.000Z | 4 سال | 4 سال قبل | 35064 ساعت |
+| 1995-01-01T00:00:00.000Z | 5 سال | 5 سال قبل | 43824 ساعت |
+| 1994-01-01T00:00:00.000Z | 6 سال | 6 سال قبل | 52584 ساعت |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------- |
+| 2000-01-10T00:00:00.000Z | 2000/01/10 |
+| 2000-01-05T00:00:00.000Z | چهارشنبه در 12:00 ق.ظ. |
+| 2000-01-02T00:00:00.000Z | فردا در 12:00 ق.ظ. |
+| 2000-01-01T00:00:00.000Z | امروز در 12:00 ق.ظ. |
+| 1999-12-31T00:00:00.000Z | دیروز در 12:00 ق.ظ. |
+| 1999-12-27T00:00:00.000Z | دوشنبه گذشته در 12:00 ق.ظ. |
+| 1999-12-21T00:00:00.000Z | 1999/12/21 |
diff --git a/date-fns/src/locale/fi/_lib/formatDistance/index.js b/date-fns/src/locale/fi/_lib/formatDistance/index.js
new file mode 100644
index 0000000..5ff6a48
--- /dev/null
+++ b/date-fns/src/locale/fi/_lib/formatDistance/index.js
@@ -0,0 +1,145 @@
+function futureSeconds(text) {
+ return text.replace(/sekuntia?/, 'sekunnin')
+}
+
+function futureMinutes(text) {
+ return text.replace(/minuuttia?/, 'minuutin')
+}
+
+function futureHours(text) {
+ return text.replace(/tuntia?/, 'tunnin')
+}
+
+function futureDays(text) {
+ return text.replace(/päivää?/, 'päivän')
+}
+
+function futureWeeks(text) {
+ return text.replace(/(viikko|viikkoa)/, 'viikon')
+}
+
+function futureMonths(text) {
+ return text.replace(/(kuukausi|kuukautta)/, 'kuukauden')
+}
+
+function futureYears(text) {
+ return text.replace(/(vuosi|vuotta)/, 'vuoden')
+}
+
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'alle sekunti',
+ other: 'alle {{count}} sekuntia',
+ futureTense: futureSeconds
+ },
+
+ xSeconds: {
+ one: 'sekunti',
+ other: '{{count}} sekuntia',
+ futureTense: futureSeconds
+ },
+
+ halfAMinute: {
+ one: 'puoli minuuttia',
+ other: 'puoli minuuttia',
+ futureTense: function(_text) {
+ return 'puolen minuutin'
+ }
+ },
+
+ lessThanXMinutes: {
+ one: 'alle minuutti',
+ other: 'alle {{count}} minuuttia',
+ futureTense: futureMinutes
+ },
+
+ xMinutes: {
+ one: 'minuutti',
+ other: '{{count}} minuuttia',
+ futureTense: futureMinutes
+ },
+
+ aboutXHours: {
+ one: 'noin tunti',
+ other: 'noin {{count}} tuntia',
+ futureTense: futureHours
+ },
+
+ xHours: {
+ one: 'tunti',
+ other: '{{count}} tuntia',
+ futureTense: futureHours
+ },
+
+ xDays: {
+ one: 'päivä',
+ other: '{{count}} päivää',
+ futureTense: futureDays
+ },
+
+ aboutXWeeks: {
+ one: 'noin viikko',
+ other: 'noin {{count}} viikkoa',
+ futureTense: futureWeeks
+ },
+
+ xWeeks: {
+ one: 'viikko',
+ other: '{{count}} viikkoa',
+ futureTense: futureWeeks
+ },
+
+ aboutXMonths: {
+ one: 'noin kuukausi',
+ other: 'noin {{count}} kuukautta',
+ futureTense: futureMonths
+ },
+
+ xMonths: {
+ one: 'kuukausi',
+ other: '{{count}} kuukautta',
+ futureTense: futureMonths
+ },
+
+ aboutXYears: {
+ one: 'noin vuosi',
+ other: 'noin {{count}} vuotta',
+ futureTense: futureYears
+ },
+
+ xYears: {
+ one: 'vuosi',
+ other: '{{count}} vuotta',
+ futureTense: futureYears
+ },
+
+ overXYears: {
+ one: 'yli vuosi',
+ other: 'yli {{count}} vuotta',
+ futureTense: futureYears
+ },
+
+ almostXYears: {
+ one: 'lähes vuosi',
+ other: 'lähes {{count}} vuotta',
+ futureTense: futureYears
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var distance = formatDistanceLocale[token]
+ var result =
+ count === 1 ? distance.one : distance.other.replace('{{count}}', count)
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return distance.futureTense(result) + ' kuluttua'
+ } else {
+ return result + ' sitten'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/fi/_lib/formatLong/index.js b/date-fns/src/locale/fi/_lib/formatLong/index.js
new file mode 100644
index 0000000..670ac7b
--- /dev/null
+++ b/date-fns/src/locale/fi/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'eeee d. MMMM y',
+ long: 'd. MMMM y',
+ medium: 'd. MMM y',
+ short: 'd.M.y'
+}
+
+var timeFormats = {
+ full: 'HH.mm.ss zzzz',
+ long: 'HH.mm.ss z',
+ medium: 'HH.mm.ss',
+ short: 'HH.mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'klo' {{time}}",
+ long: "{{date}} 'klo' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/fi/_lib/formatRelative/index.js b/date-fns/src/locale/fi/_lib/formatRelative/index.js
new file mode 100644
index 0000000..1b0cbe8
--- /dev/null
+++ b/date-fns/src/locale/fi/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'viime' eeee 'klo' p",
+ yesterday: "'eilen klo' p",
+ today: "'tänään klo' p",
+ tomorrow: "'huomenna klo' p",
+ nextWeek: "'ensi' eeee 'klo' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/fi/_lib/localize/index.js b/date-fns/src/locale/fi/_lib/localize/index.js
new file mode 100644
index 0000000..02f94c2
--- /dev/null
+++ b/date-fns/src/locale/fi/_lib/localize/index.js
@@ -0,0 +1,147 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['eaa.', 'jaa.'],
+ abbreviated: ['eaa.', 'jaa.'],
+ wide: ['ennen ajanlaskun alkua', 'jälkeen ajanlaskun alun']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1. kvartaali', '2. kvartaali', '3. kvartaali', '4. kvartaali']
+}
+
+var monthValues = {
+ narrow: ['T', 'H', 'M', 'H', 'T', 'K', 'H', 'E', 'S', 'L', 'M', 'J'],
+ abbreviated: [
+ 'tammi',
+ 'helmi',
+ 'maalis',
+ 'huhti',
+ 'touko',
+ 'kesä',
+ 'heinä',
+ 'elo',
+ 'syys',
+ 'loka',
+ 'marras',
+ 'joulu'
+ ],
+ wide: [
+ 'tammikuu',
+ 'helmikuu',
+ 'maaliskuu',
+ 'huhtikuu',
+ 'toukokuu',
+ 'kesäkuu',
+ 'heinäkuu',
+ 'elokuu',
+ 'syyskuu',
+ 'lokakuu',
+ 'marraskuu',
+ 'joulukuu'
+ ]
+}
+
+var formattingMonthValues = {
+ narrow: monthValues.narrow,
+ abbreviated: monthValues.abbreviated,
+ wide: monthValues.wide.map(name => name + 'ta')
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'T', 'K', 'T', 'P', 'L'],
+ short: ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'],
+ abbreviated: ['sunn.', 'maan.', 'tiis.', 'kesk.', 'torst.', 'perj.', 'la'],
+ wide: [
+ 'sunnuntai',
+ 'maanantai',
+ 'tiistai',
+ 'keskiviikko',
+ 'torstai',
+ 'perjantai',
+ 'lauantai'
+ ]
+}
+
+var formattingDayValues = {
+ narrow: dayValues.narrow,
+ short: dayValues.short,
+ abbreviated: dayValues.abbreviated,
+ wide: dayValues.wide.map(name => name + 'na')
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ap',
+ pm: 'ip',
+ midnight: 'keskiyö',
+ noon: 'keskipäivä',
+ morning: 'ap',
+ afternoon: 'ip',
+ evening: 'illalla',
+ night: 'yöllä'
+ },
+ abbreviated: {
+ am: 'ap',
+ pm: 'ip',
+ midnight: 'keskiyö',
+ noon: 'keskipäivä',
+ morning: 'ap',
+ afternoon: 'ip',
+ evening: 'illalla',
+ night: 'yöllä'
+ },
+ wide: {
+ am: 'ap',
+ pm: 'ip',
+ midnight: 'keskiyöllä',
+ noon: 'keskipäivällä',
+ morning: 'aamupäivällä',
+ afternoon: 'iltapäivällä',
+ evening: 'illalla',
+ night: 'yöllä'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ formattingValues: formattingMonthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ formattingValues: formattingDayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/fi/_lib/match/index.js b/date-fns/src/locale/fi/_lib/match/index.js
new file mode 100644
index 0000000..0717d41
--- /dev/null
+++ b/date-fns/src/locale/fi/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(\.)/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(e|j)/i,
+ abbreviated: /^(eaa.|jaa.)/i,
+ wide: /^(ennen ajanlaskun alkua|jälkeen ajanlaskun alun)/i
+}
+var parseEraPatterns = {
+ any: [/^e/i, /^j/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234]\.? kvartaali/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[thmkeslj]/i,
+ abbreviated: /^(tammi|helmi|maalis|huhti|touko|kesä|heinä|elo|syys|loka|marras|joulu)/i,
+ wide: /^(tammikuu|helmikuu|maaliskuu|huhtikuu|toukokuu|kesäkuu|heinäkuu|elokuu|syyskuu|lokakuu|marraskuu|joulukuu)(ta)?/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^t/i,
+ /^h/i,
+ /^m/i,
+ /^h/i,
+ /^t/i,
+ /^k/i,
+ /^h/i,
+ /^e/i,
+ /^s/i,
+ /^l/i,
+ /^m/i,
+ /^j/i
+ ],
+ any: [
+ /^ta/i,
+ /^hel/i,
+ /^maa/i,
+ /^hu/i,
+ /^to/i,
+ /^k/i,
+ /^hei/i,
+ /^e/i,
+ /^s/i,
+ /^l/i,
+ /^mar/i,
+ /^j/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smtkpl]/i,
+ short: /^(su|ma|ti|ke|to|pe|la)/i,
+ abbreviated: /^(sunn.|maan.|tiis.|kesk.|torst.|perj.|la)/i,
+ wide: /^(sunnuntai|maanantai|tiistai|keskiviikko|torstai|perjantai|lauantai)(na)?/i
+}
+var parseDayPatterns = {
+ narrow: [/^s/i, /^m/i, /^t/i, /^k/i, /^t/i, /^p/i, /^l/i],
+ any: [/^s/i, /^m/i, /^ti/i, /^k/i, /^to/i, /^p/i, /^l/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(ap|ip|keskiyö|keskipäivä|aamupäivällä|iltapäivällä|illalla|yöllä)/i,
+ any: /^(ap|ip|keskiyöllä|keskipäivällä|aamupäivällä|iltapäivällä|illalla|yöllä)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^ap/i,
+ pm: /^ip/i,
+ midnight: /^keskiyö/i,
+ noon: /^keskipäivä/i,
+ morning: /aamupäivällä/i,
+ afternoon: /iltapäivällä/i,
+ evening: /illalla/i,
+ night: /yöllä/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/fi/index.d.ts b/date-fns/src/locale/fi/index.d.ts
new file mode 100644
index 0000000..e400702
--- /dev/null
+++ b/date-fns/src/locale/fi/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { fi } from 'date-fns/locale'
+export default fi
diff --git a/date-fns/src/locale/fi/index.js b/date-fns/src/locale/fi/index.js
new file mode 100644
index 0000000..35e9287
--- /dev/null
+++ b/date-fns/src/locale/fi/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Finnish locale.
+ * @language Finnish
+ * @iso-639-2 fin
+ * @author Pyry-Samuli Lahti [@Pyppe]{@link https://github.com/Pyppe}
+ * @author Edo Rivai [@mikolajgrzyb]{@link https://github.com/mikolajgrzyb}
+ * @author Samu Juvonen [@sjuvonen]{@link https://github.com/sjuvonen}
+ */
+var locale = {
+ code: 'fi',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/fi/index.js.flow b/date-fns/src/locale/fi/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/fi/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/fi/snapshot.md b/date-fns/src/locale/fi/snapshot.md
new file mode 100644
index 0000000..29e621f
--- /dev/null
+++ b/date-fns/src/locale/fi/snapshot.md
@@ -0,0 +1,304 @@
+# Finnish (fi) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. kvartaali | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartaali | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. kvartaali | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartaali | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | helmi | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | heinä | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | helmikuuta | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | heinäkuuta | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | H | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | H | 2019-02-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | helmi | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | heinä | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | helmikuu | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | heinäkuu | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | H | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | H | 2019-02-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | maan. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perj. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | maan. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perj. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | maan. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perj. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | maanantaina | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perjantaina | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pe | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | maan. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perj. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | maanantaina | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perjantaina | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pe | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | maan. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perj. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | maanantaina | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perjantaina | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pe | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | maan. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perj. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | maanantai | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | perjantai | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pe | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | illalla | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yöllä | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | illalla | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yöllä | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | illalla | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yöllä | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | aamupäivällä | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | iltapäivällä | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | illalla | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yöllä | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ap | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ip | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | illalla | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | yöllä | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.2.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.5.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. helmi 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. touko 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. helmikuuta 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. toukokuuta 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | keskiviikkona 11. helmikuuta 1987 | Errored |
+| | | 1453-05-29T23:59:59.999Z | sunnuntaina 29. toukokuuta 1453 | Errored |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59.59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12.13.14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23.59.59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12.13.14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23.59.59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.2.1987 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.5.1453 23.59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. helmi 1987 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. touko 1453 23.59.59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. helmikuuta 1987 klo 12.13.14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. toukokuuta 1453 klo 23.59.59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | keskiviikkona 11. helmikuuta 1987 klo 12.13.14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | sunnuntaina 29. toukokuuta 1453 klo 23.59.59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------- | ---------------------- | ----------------------- |
+| 2006-01-01T00:00:00.000Z | noin 6 vuotta | noin 6 vuotta | noin 6 vuoden kuluttua |
+| 2005-01-01T00:00:00.000Z | noin 5 vuotta | noin 5 vuotta | noin 5 vuoden kuluttua |
+| 2004-01-01T00:00:00.000Z | noin 4 vuotta | noin 4 vuotta | noin 4 vuoden kuluttua |
+| 2003-01-01T00:00:00.000Z | noin 3 vuotta | noin 3 vuotta | noin 3 vuoden kuluttua |
+| 2002-01-01T00:00:00.000Z | noin 2 vuotta | noin 2 vuotta | noin 2 vuoden kuluttua |
+| 2001-06-01T00:00:00.000Z | yli vuosi | yli vuosi | yli vuoden kuluttua |
+| 2001-02-01T00:00:00.000Z | noin vuosi | noin vuosi | noin vuoden kuluttua |
+| 2001-01-01T00:00:00.000Z | noin vuosi | noin vuosi | noin vuoden kuluttua |
+| 2000-06-01T00:00:00.000Z | 5 kuukautta | 5 kuukautta | 5 kuukauden kuluttua |
+| 2000-03-01T00:00:00.000Z | 2 kuukautta | 2 kuukautta | 2 kuukauden kuluttua |
+| 2000-02-01T00:00:00.000Z | noin kuukausi | noin kuukausi | noin kuukauden kuluttua |
+| 2000-01-15T00:00:00.000Z | 14 päivää | 14 päivää | 14 päivän kuluttua |
+| 2000-01-02T00:00:00.000Z | päivä | päivä | päivän kuluttua |
+| 2000-01-01T06:00:00.000Z | noin 6 tuntia | noin 6 tuntia | noin 6 tunnin kuluttua |
+| 2000-01-01T01:00:00.000Z | noin tunti | noin tunti | noin tunnin kuluttua |
+| 2000-01-01T00:45:00.000Z | noin tunti | noin tunti | noin tunnin kuluttua |
+| 2000-01-01T00:30:00.000Z | 30 minuuttia | 30 minuuttia | 30 minuutin kuluttua |
+| 2000-01-01T00:15:00.000Z | 15 minuuttia | 15 minuuttia | 15 minuutin kuluttua |
+| 2000-01-01T00:01:00.000Z | minuutti | minuutti | minuutin kuluttua |
+| 2000-01-01T00:00:25.000Z | alle minuutti | puoli minuuttia | alle minuutin kuluttua |
+| 2000-01-01T00:00:15.000Z | alle minuutti | alle 20 sekuntia | alle minuutin kuluttua |
+| 2000-01-01T00:00:05.000Z | alle minuutti | alle 10 sekuntia | alle minuutin kuluttua |
+| 2000-01-01T00:00:00.000Z | alle minuutti | alle 5 sekuntia | alle minuutti sitten |
+| 1999-12-31T23:59:55.000Z | alle minuutti | alle 10 sekuntia | alle minuutti sitten |
+| 1999-12-31T23:59:45.000Z | alle minuutti | alle 20 sekuntia | alle minuutti sitten |
+| 1999-12-31T23:59:35.000Z | alle minuutti | puoli minuuttia | alle minuutti sitten |
+| 1999-12-31T23:59:00.000Z | minuutti | minuutti | minuutti sitten |
+| 1999-12-31T23:45:00.000Z | 15 minuuttia | 15 minuuttia | 15 minuuttia sitten |
+| 1999-12-31T23:30:00.000Z | 30 minuuttia | 30 minuuttia | 30 minuuttia sitten |
+| 1999-12-31T23:15:00.000Z | noin tunti | noin tunti | noin tunti sitten |
+| 1999-12-31T23:00:00.000Z | noin tunti | noin tunti | noin tunti sitten |
+| 1999-12-31T18:00:00.000Z | noin 6 tuntia | noin 6 tuntia | noin 6 tuntia sitten |
+| 1999-12-30T00:00:00.000Z | 2 päivää | 2 päivää | 2 päivää sitten |
+| 1999-12-15T00:00:00.000Z | 17 päivää | 17 päivää | 17 päivää sitten |
+| 1999-12-01T00:00:00.000Z | noin kuukausi | noin kuukausi | noin kuukausi sitten |
+| 1999-11-01T00:00:00.000Z | 2 kuukautta | 2 kuukautta | 2 kuukautta sitten |
+| 1999-06-01T00:00:00.000Z | 7 kuukautta | 7 kuukautta | 7 kuukautta sitten |
+| 1999-01-01T00:00:00.000Z | noin vuosi | noin vuosi | noin vuosi sitten |
+| 1998-12-01T00:00:00.000Z | noin vuosi | noin vuosi | noin vuosi sitten |
+| 1998-06-01T00:00:00.000Z | yli vuosi | yli vuosi | yli vuosi sitten |
+| 1998-01-01T00:00:00.000Z | noin 2 vuotta | noin 2 vuotta | noin 2 vuotta sitten |
+| 1997-01-01T00:00:00.000Z | noin 3 vuotta | noin 3 vuotta | noin 3 vuotta sitten |
+| 1996-01-01T00:00:00.000Z | noin 4 vuotta | noin 4 vuotta | noin 4 vuotta sitten |
+| 1995-01-01T00:00:00.000Z | noin 5 vuotta | noin 5 vuotta | noin 5 vuotta sitten |
+| 1994-01-01T00:00:00.000Z | noin 6 vuotta | noin 6 vuotta | noin 6 vuotta sitten |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------------ | -------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 vuotta | 6 vuoden kuluttua | 52608 tuntia |
+| 2005-01-01T00:00:00.000Z | 5 vuotta | 5 vuoden kuluttua | 43848 tuntia |
+| 2004-01-01T00:00:00.000Z | 4 vuotta | 4 vuoden kuluttua | 35064 tuntia |
+| 2003-01-01T00:00:00.000Z | 3 vuotta | 3 vuoden kuluttua | 26304 tuntia |
+| 2002-01-01T00:00:00.000Z | 2 vuotta | 2 vuoden kuluttua | 17544 tuntia |
+| 2001-06-01T00:00:00.000Z | vuosi | vuoden kuluttua | 12408 tuntia |
+| 2001-02-01T00:00:00.000Z | vuosi | vuoden kuluttua | 9528 tuntia |
+| 2001-01-01T00:00:00.000Z | vuosi | vuoden kuluttua | 8784 tuntia |
+| 2000-06-01T00:00:00.000Z | 5 kuukautta | 5 kuukauden kuluttua | 3648 tuntia |
+| 2000-03-01T00:00:00.000Z | 2 kuukautta | 2 kuukauden kuluttua | 1440 tuntia |
+| 2000-02-01T00:00:00.000Z | kuukausi | kuukauden kuluttua | 744 tuntia |
+| 2000-01-15T00:00:00.000Z | 14 päivää | 14 päivän kuluttua | 336 tuntia |
+| 2000-01-02T00:00:00.000Z | päivä | päivän kuluttua | 24 tuntia |
+| 2000-01-01T06:00:00.000Z | 6 tuntia | 6 tunnin kuluttua | 6 tuntia |
+| 2000-01-01T01:00:00.000Z | tunti | tunnin kuluttua | tunti |
+| 2000-01-01T00:45:00.000Z | 45 minuuttia | 45 minuutin kuluttua | tunti |
+| 2000-01-01T00:30:00.000Z | 30 minuuttia | 30 minuutin kuluttua | tunti |
+| 2000-01-01T00:15:00.000Z | 15 minuuttia | 15 minuutin kuluttua | 0 tuntia |
+| 2000-01-01T00:01:00.000Z | minuutti | minuutin kuluttua | 0 tuntia |
+| 2000-01-01T00:00:25.000Z | 25 sekuntia | 25 sekunnin kuluttua | 0 tuntia |
+| 2000-01-01T00:00:15.000Z | 15 sekuntia | 15 sekunnin kuluttua | 0 tuntia |
+| 2000-01-01T00:00:05.000Z | 5 sekuntia | 5 sekunnin kuluttua | 0 tuntia |
+| 2000-01-01T00:00:00.000Z | 0 sekuntia | 0 sekuntia sitten | 0 tuntia |
+| 1999-12-31T23:59:55.000Z | 5 sekuntia | 5 sekuntia sitten | 0 tuntia |
+| 1999-12-31T23:59:45.000Z | 15 sekuntia | 15 sekuntia sitten | 0 tuntia |
+| 1999-12-31T23:59:35.000Z | 25 sekuntia | 25 sekuntia sitten | 0 tuntia |
+| 1999-12-31T23:59:00.000Z | minuutti | minuutti sitten | 0 tuntia |
+| 1999-12-31T23:45:00.000Z | 15 minuuttia | 15 minuuttia sitten | 0 tuntia |
+| 1999-12-31T23:30:00.000Z | 30 minuuttia | 30 minuuttia sitten | tunti |
+| 1999-12-31T23:15:00.000Z | 45 minuuttia | 45 minuuttia sitten | tunti |
+| 1999-12-31T23:00:00.000Z | tunti | tunti sitten | tunti |
+| 1999-12-31T18:00:00.000Z | 6 tuntia | 6 tuntia sitten | 6 tuntia |
+| 1999-12-30T00:00:00.000Z | 2 päivää | 2 päivää sitten | 48 tuntia |
+| 1999-12-15T00:00:00.000Z | 17 päivää | 17 päivää sitten | 408 tuntia |
+| 1999-12-01T00:00:00.000Z | kuukausi | kuukausi sitten | 744 tuntia |
+| 1999-11-01T00:00:00.000Z | 2 kuukautta | 2 kuukautta sitten | 1464 tuntia |
+| 1999-06-01T00:00:00.000Z | 7 kuukautta | 7 kuukautta sitten | 5136 tuntia |
+| 1999-01-01T00:00:00.000Z | vuosi | vuosi sitten | 8760 tuntia |
+| 1998-12-01T00:00:00.000Z | vuosi | vuosi sitten | 9504 tuntia |
+| 1998-06-01T00:00:00.000Z | 2 vuotta | 2 vuotta sitten | 13896 tuntia |
+| 1998-01-01T00:00:00.000Z | 2 vuotta | 2 vuotta sitten | 17520 tuntia |
+| 1997-01-01T00:00:00.000Z | 3 vuotta | 3 vuotta sitten | 26280 tuntia |
+| 1996-01-01T00:00:00.000Z | 4 vuotta | 4 vuotta sitten | 35064 tuntia |
+| 1995-01-01T00:00:00.000Z | 5 vuotta | 5 vuotta sitten | 43824 tuntia |
+| 1994-01-01T00:00:00.000Z | 6 vuotta | 6 vuotta sitten | 52584 tuntia |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------------- |
+| 2000-01-10T00:00:00.000Z | 10.1.2000 |
+| 2000-01-05T00:00:00.000Z | ensi keskiviikkona klo 00.00 |
+| 2000-01-02T00:00:00.000Z | huomenna klo 00.00 |
+| 2000-01-01T00:00:00.000Z | tänään klo 00.00 |
+| 1999-12-31T00:00:00.000Z | eilen klo 00.00 |
+| 1999-12-27T00:00:00.000Z | viime maanantaina klo 00.00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/fil/_lib/formatDistance/index.js b/date-fns/src/locale/fil/_lib/formatDistance/index.js
new file mode 100644
index 0000000..4da5dfa
--- /dev/null
+++ b/date-fns/src/locale/fil/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'mas maliit sa isang segundo',
+ other: 'mas maliit sa {{count}} segundo'
+ },
+
+ xSeconds: {
+ one: '1 segundo',
+ other: '{{count}} segundo'
+ },
+
+ halfAMinute: 'kalahating minuto',
+
+ lessThanXMinutes: {
+ one: 'mas maliit sa isang minuto',
+ other: 'mas maliit sa {{count}} minuto'
+ },
+
+ xMinutes: {
+ one: '1 minuto',
+ other: '{{count}} minuto'
+ },
+
+ aboutXHours: {
+ one: 'mga 1 oras',
+ other: 'mga {{count}} oras'
+ },
+
+ xHours: {
+ one: '1 oras',
+ other: '{{count}} oras'
+ },
+
+ xDays: {
+ one: '1 araw',
+ other: '{{count}} araw'
+ },
+
+ aboutXWeeks: {
+ one: 'mga 1 buwan', // TODO
+ other: 'mga {{count}} buwan' // TODO
+ },
+
+ xWeeks: {
+ one: '1 buwan', // TODO
+ other: '{{count}} buwan' // TODO
+ },
+
+ aboutXMonths: {
+ one: 'mga 1 buwan',
+ other: 'mga {{count}} buwan'
+ },
+
+ xMonths: {
+ one: '1 buwan',
+ other: '{{count}} buwan'
+ },
+
+ aboutXYears: {
+ one: 'mga 1 taon',
+ other: 'mga {{count}} taon'
+ },
+
+ xYears: {
+ one: '1 taon',
+ other: '{{count}} taon'
+ },
+
+ overXYears: {
+ one: 'higit sa 1 taon',
+ other: 'higit sa {{count}} taon'
+ },
+
+ almostXYears: {
+ one: 'halos 1 taon',
+ other: 'halos {{count}} taon'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'sa loob ng ' + result
+ } else {
+ return result + ' ang nakalipas'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/fil/_lib/formatLong/index.js b/date-fns/src/locale/fil/_lib/formatLong/index.js
new file mode 100644
index 0000000..2cf1867
--- /dev/null
+++ b/date-fns/src/locale/fil/_lib/formatLong/index.js
@@ -0,0 +1,12 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var formatLong = buildFormatLongFn({
+ LT: 'h:mm aa',
+ LTS: 'h:mm:ss aa',
+ L: 'MM/DD/YYYY',
+ LL: 'MMMM D YYYY',
+ LLL: 'MMMM D YYYY h:mm aa',
+ LLLL: 'dddd, MMMM D YYYY h:mm aa'
+})
+
+export default formatLong
diff --git a/date-fns/src/locale/fil/_lib/formatRelative/index.js b/date-fns/src/locale/fil/_lib/formatRelative/index.js
new file mode 100644
index 0000000..52ebbf1
--- /dev/null
+++ b/date-fns/src/locale/fil/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: '[last] dddd [at] LT',
+ yesterday: '[yesterday at] LT',
+ today: '[today at] LT',
+ tomorrow: '[tomorrow at] LT',
+ nextWeek: 'dddd [at] LT',
+ other: 'L'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/fil/_lib/localize/index.js b/date-fns/src/locale/fil/_lib/localize/index.js
new file mode 100644
index 0000000..6be8e61
--- /dev/null
+++ b/date-fns/src/locale/fil/_lib/localize/index.js
@@ -0,0 +1,83 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+import buildLocalizeArrayFn from '../../../_lib/buildLocalizeArrayFn/index'
+
+var weekdayValues = {
+ narrow: ['Li', 'Lu', 'Ma', 'Mi', 'Hu', 'Bi', 'Sa'],
+ short: ['Lin', 'Lun', 'Mar', 'Miy', 'Huw', 'Biy', 'Sab'],
+ long: [
+ 'Linggo',
+ 'Lunes',
+ 'Martes',
+ 'Miyerkules',
+ 'Huwebes',
+ 'Biyernes',
+ 'Sabado'
+ ]
+}
+
+var monthValues = {
+ short: [
+ 'Ene',
+ 'Peb',
+ 'Mar',
+ 'Abr',
+ 'May',
+ 'Hun',
+ 'Hul',
+ 'Ago',
+ 'Set',
+ 'Okt',
+ 'Nob',
+ 'Dis'
+ ],
+ long: [
+ 'Enero',
+ 'Pebrero',
+ 'Marso',
+ 'Abril',
+ 'Mayo',
+ 'Hunyo',
+ 'Hulyo',
+ 'Agosto',
+ 'Setyembre',
+ 'Oktubre',
+ 'Nobyembre',
+ 'Disyembre'
+ ]
+}
+
+var timeOfDayValues = {
+ uppercase: ['NU', 'NT', 'NH', 'NG'],
+ lowercase: ['nu', 'nt', 'nh', 'ng'],
+ long: ['ng umaga', 'ng tanghali', 'ng hapon', 'ng gabi']
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return 'ika-' + number
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+ weekday: buildLocalizeFn(weekdayValues, 'long'),
+ weekdays: buildLocalizeArrayFn(weekdayValues, 'long'),
+ month: buildLocalizeFn(monthValues, 'long'),
+ months: buildLocalizeArrayFn(monthValues, 'long'),
+ timeOfDay: buildLocalizeFn(timeOfDayValues, 'long', function(hours) {
+ if (hours > 12) {
+ var modulo = hours % 12
+ if (modulo < 6) {
+ return 2
+ } else {
+ return 3
+ }
+ } else if (hours < 12) {
+ return 0
+ } else {
+ return 1
+ }
+ }),
+ timesOfDay: buildLocalizeArrayFn(timeOfDayValues, 'long')
+}
+
+export default localize
diff --git a/date-fns/src/locale/fil/_lib/match/index.js b/date-fns/src/locale/fil/_lib/match/index.js
new file mode 100644
index 0000000..5a3f4c5
--- /dev/null
+++ b/date-fns/src/locale/fil/_lib/match/index.js
@@ -0,0 +1,60 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildParseFn from '../../../_lib/buildParseFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import parseDecimal from '../../../_lib/parseDecimal/index'
+
+var matchOrdinalNumbersPattern = /^(\d+)(th|st|nd|rd)?/i
+
+var matchWeekdaysPatterns = {
+ narrow: /^(su|mo|tu|we|th|fr|sa)/i,
+ short: /^(sun|mon|tue|wed|thu|fri|sat)/i,
+ long: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
+}
+
+var parseWeekdayPatterns = {
+ any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
+}
+
+var matchMonthsPatterns = {
+ short: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
+ long: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
+}
+
+var parseMonthPatterns = {
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^may/i,
+ /^jun/i,
+ /^jul/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchTimesOfDayPatterns = {
+ short: /^(am|pm)/i,
+ long: /^([ap]\.?\s?m\.?)/i
+}
+
+var parseTimeOfDayPatterns = {
+ any: [/^a/i, /^p/i]
+}
+
+var match = {
+ ordinalNumbers: buildMatchPatternFn(matchOrdinalNumbersPattern),
+ ordinalNumber: parseDecimal,
+ weekdays: buildMatchFn(matchWeekdaysPatterns, 'long'),
+ weekday: buildParseFn(parseWeekdayPatterns, 'any'),
+ months: buildMatchFn(matchMonthsPatterns, 'long'),
+ month: buildParseFn(parseMonthPatterns, 'any'),
+ timesOfDay: buildMatchFn(matchTimesOfDayPatterns, 'long'),
+ timeOfDay: buildParseFn(parseTimeOfDayPatterns, 'any')
+}
+
+export default match
diff --git a/date-fns/src/locale/fil/index.d.ts b/date-fns/src/locale/fil/index.d.ts
new file mode 100644
index 0000000..edd13d6
--- /dev/null
+++ b/date-fns/src/locale/fil/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { fil } from 'date-fns/locale'
+export default fil
diff --git a/date-fns/src/locale/fil/index.js b/date-fns/src/locale/fil/index.js
new file mode 100644
index 0000000..63c9477
--- /dev/null
+++ b/date-fns/src/locale/fil/index.js
@@ -0,0 +1,32 @@
+// import formatDistance from './_lib/formatDistance/index'
+// import formatLong from './_lib/formatLong/index'
+// import formatRelative from './_lib/formatRelative/index'
+// import localize from './_lib/localize/index'
+// import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Filipino locale.
+ * @language Filipino
+ * @iso-639-2 fil
+ * @author Ian De La Cruz [@RIanDeLaCruz]{@link https://github.com/RIanDeLaCruz}
+ */
+// var locale = {
+// code: 'fil',
+// formatDistance: formatDistance,
+// formatLong: formatLong,
+// formatRelative: formatRelative,
+// localize: localize,
+// match: match,
+// options: {
+// weekStartsOn: 0 /* Sunday */,
+// firstWeekContainsDate: 1
+// }
+// }
+
+// export default locale
+
+throw new Error(
+ 'fil locale is currently unavailable. Please check the progress of converting this locale to v2.0.0 in this issue on Github: TBA'
+)
diff --git a/date-fns/src/locale/fil/index.js.flow b/date-fns/src/locale/fil/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/fil/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/fr-CA/_lib/formatLong/index.js b/date-fns/src/locale/fr-CA/_lib/formatLong/index.js
new file mode 100644
index 0000000..3810ebe
--- /dev/null
+++ b/date-fns/src/locale/fr-CA/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d MMMM y',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'yy-MM-dd'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'à' {{time}}",
+ long: "{{date}} 'à' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/fr-CA/index.d.ts b/date-fns/src/locale/fr-CA/index.d.ts
new file mode 100644
index 0000000..533b466
--- /dev/null
+++ b/date-fns/src/locale/fr-CA/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { frCA } from 'date-fns/locale'
+export default frCA
diff --git a/date-fns/src/locale/fr-CA/index.js b/date-fns/src/locale/fr-CA/index.js
new file mode 100644
index 0000000..1986220
--- /dev/null
+++ b/date-fns/src/locale/fr-CA/index.js
@@ -0,0 +1,35 @@
+// Same as fr
+import formatDistance from '../fr/_lib/formatDistance/index'
+import formatRelative from '../fr/_lib/formatRelative/index'
+import localize from '../fr/_lib/localize/index'
+import match from '../fr/_lib/match/index'
+
+// Unique for fr-CA
+import formatLong from './_lib/formatLong/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary French locale (Canada).
+ * @language French
+ * @iso-639-2 fra
+ * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}
+ * @author François B [@fbonzon]{@link https://github.com/fbonzon}
+ * @author Gabriele Petrioli [@gpetrioli]{@link https://github.com/gpetrioli}
+ */
+var locale = {
+ code: 'fr-CA',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+
+ // Unique for fr-CA
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/fr-CA/index.js.flow b/date-fns/src/locale/fr-CA/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/fr-CA/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/fr-CA/snapshot.md b/date-fns/src/locale/fr-CA/snapshot.md
new file mode 100644
index 0000000..4c471e8
--- /dev/null
+++ b/date-fns/src/locale/fr-CA/snapshot.md
@@ -0,0 +1,304 @@
+# French (fr-CA) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | --------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987ème | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5ème | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987ème | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5ème | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1er | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1er trim. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2ème trim. | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1er trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème trimestre | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | T1 | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | T2 | Invalid Date |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1er | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1er trim. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2ème trim. | Invalid Date |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1er trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème trimestre | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2ème | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ème | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | févr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juil. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | février | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juillet | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2ème | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ème | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | févr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juil. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | février | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juillet | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1ère | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49ème | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1ère | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ème | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11ème | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28ème | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42ème | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365ème | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1er | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ème | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2ème | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6ème | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2ème | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6ème | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | matin | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | matin | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | matin | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | matin | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | matin | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | matin | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | du matin | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de l’après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | du soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | du matin | 2019-02-11T04:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | mat. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ap.m. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | mat. | 2019-02-11T04:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11ème | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ème | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11ème | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ème | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1er | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55ème | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1er | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55ème | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 87-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 53-05-29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 févr. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 février 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | mercredi 11 février 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | dimanche 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 87-02-11, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 53-05-29, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 févr. 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 février 1987 à 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 à 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | mercredi 11 février 1987 à 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | dimanche 29 mai 1453 à 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | environ 6 ans | environ 6 ans | dans environ 6 ans |
+| 2005-01-01T00:00:00.000Z | environ 5 ans | environ 5 ans | dans environ 5 ans |
+| 2004-01-01T00:00:00.000Z | environ 4 ans | environ 4 ans | dans environ 4 ans |
+| 2003-01-01T00:00:00.000Z | environ 3 ans | environ 3 ans | dans environ 3 ans |
+| 2002-01-01T00:00:00.000Z | environ 2 ans | environ 2 ans | dans environ 2 ans |
+| 2001-06-01T00:00:00.000Z | plus d’un an | plus d’un an | dans plus d’un an |
+| 2001-02-01T00:00:00.000Z | environ 1 an | environ 1 an | dans environ 1 an |
+| 2001-01-01T00:00:00.000Z | environ 1 an | environ 1 an | dans environ 1 an |
+| 2000-06-01T00:00:00.000Z | 5 mois | 5 mois | dans 5 mois |
+| 2000-03-01T00:00:00.000Z | 2 mois | 2 mois | dans 2 mois |
+| 2000-02-01T00:00:00.000Z | environ 1 mois | environ 1 mois | dans environ 1 mois |
+| 2000-01-15T00:00:00.000Z | 14 jours | 14 jours | dans 14 jours |
+| 2000-01-02T00:00:00.000Z | 1 jour | 1 jour | dans 1 jour |
+| 2000-01-01T06:00:00.000Z | environ 6 heures | environ 6 heures | dans environ 6 heures |
+| 2000-01-01T01:00:00.000Z | environ 1 heure | environ 1 heure | dans environ 1 heure |
+| 2000-01-01T00:45:00.000Z | environ 1 heure | environ 1 heure | dans environ 1 heure |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | dans 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | dans 15 minutes |
+| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | dans 1 minute |
+| 2000-01-01T00:00:25.000Z | moins d’une minute | 30 secondes | dans moins d’une minute |
+| 2000-01-01T00:00:15.000Z | moins d’une minute | moins de 20 secondes | dans moins d’une minute |
+| 2000-01-01T00:00:05.000Z | moins d’une minute | moins de 10 secondes | dans moins d’une minute |
+| 2000-01-01T00:00:00.000Z | moins d’une minute | moins de 5 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:55.000Z | moins d’une minute | moins de 10 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:45.000Z | moins d’une minute | moins de 20 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:35.000Z | moins d’une minute | 30 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | il y a 1 minute |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | il y a 15 minutes |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | il y a 30 minutes |
+| 1999-12-31T23:15:00.000Z | environ 1 heure | environ 1 heure | il y a environ 1 heure |
+| 1999-12-31T23:00:00.000Z | environ 1 heure | environ 1 heure | il y a environ 1 heure |
+| 1999-12-31T18:00:00.000Z | environ 6 heures | environ 6 heures | il y a environ 6 heures |
+| 1999-12-30T00:00:00.000Z | 2 jours | 2 jours | il y a 2 jours |
+| 1999-12-15T00:00:00.000Z | 17 jours | 17 jours | il y a 17 jours |
+| 1999-12-01T00:00:00.000Z | environ 1 mois | environ 1 mois | il y a environ 1 mois |
+| 1999-11-01T00:00:00.000Z | 2 mois | 2 mois | il y a 2 mois |
+| 1999-06-01T00:00:00.000Z | 7 mois | 7 mois | il y a 7 mois |
+| 1999-01-01T00:00:00.000Z | environ 1 an | environ 1 an | il y a environ 1 an |
+| 1998-12-01T00:00:00.000Z | environ 1 an | environ 1 an | il y a environ 1 an |
+| 1998-06-01T00:00:00.000Z | plus d’un an | plus d’un an | il y a plus d’un an |
+| 1998-01-01T00:00:00.000Z | environ 2 ans | environ 2 ans | il y a environ 2 ans |
+| 1997-01-01T00:00:00.000Z | environ 3 ans | environ 3 ans | il y a environ 3 ans |
+| 1996-01-01T00:00:00.000Z | environ 4 ans | environ 4 ans | il y a environ 4 ans |
+| 1995-01-01T00:00:00.000Z | environ 5 ans | environ 5 ans | il y a environ 5 ans |
+| 1994-01-01T00:00:00.000Z | environ 6 ans | environ 6 ans | il y a environ 6 ans |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 ans | dans 6 ans | 52608 heures |
+| 2005-01-01T00:00:00.000Z | 5 ans | dans 5 ans | 43848 heures |
+| 2004-01-01T00:00:00.000Z | 4 ans | dans 4 ans | 35064 heures |
+| 2003-01-01T00:00:00.000Z | 3 ans | dans 3 ans | 26304 heures |
+| 2002-01-01T00:00:00.000Z | 2 ans | dans 2 ans | 17544 heures |
+| 2001-06-01T00:00:00.000Z | 1 an | dans 1 an | 12408 heures |
+| 2001-02-01T00:00:00.000Z | 1 an | dans 1 an | 9528 heures |
+| 2001-01-01T00:00:00.000Z | 1 an | dans 1 an | 8784 heures |
+| 2000-06-01T00:00:00.000Z | 5 mois | dans 5 mois | 3648 heures |
+| 2000-03-01T00:00:00.000Z | 2 mois | dans 2 mois | 1440 heures |
+| 2000-02-01T00:00:00.000Z | 1 mois | dans 1 mois | 744 heures |
+| 2000-01-15T00:00:00.000Z | 14 jours | dans 14 jours | 336 heures |
+| 2000-01-02T00:00:00.000Z | 1 jour | dans 1 jour | 24 heures |
+| 2000-01-01T06:00:00.000Z | 6 heures | dans 6 heures | 6 heures |
+| 2000-01-01T01:00:00.000Z | 1 heure | dans 1 heure | 1 heure |
+| 2000-01-01T00:45:00.000Z | 45 minutes | dans 45 minutes | 1 heure |
+| 2000-01-01T00:30:00.000Z | 30 minutes | dans 30 minutes | 1 heure |
+| 2000-01-01T00:15:00.000Z | 15 minutes | dans 15 minutes | 0 heures |
+| 2000-01-01T00:01:00.000Z | 1 minute | dans 1 minute | 0 heures |
+| 2000-01-01T00:00:25.000Z | 25 secondes | dans 25 secondes | 0 heures |
+| 2000-01-01T00:00:15.000Z | 15 secondes | dans 15 secondes | 0 heures |
+| 2000-01-01T00:00:05.000Z | 5 secondes | dans 5 secondes | 0 heures |
+| 2000-01-01T00:00:00.000Z | 0 secondes | il y a 0 secondes | 0 heures |
+| 1999-12-31T23:59:55.000Z | 5 secondes | il y a 5 secondes | 0 heures |
+| 1999-12-31T23:59:45.000Z | 15 secondes | il y a 15 secondes | 0 heures |
+| 1999-12-31T23:59:35.000Z | 25 secondes | il y a 25 secondes | 0 heures |
+| 1999-12-31T23:59:00.000Z | 1 minute | il y a 1 minute | 0 heures |
+| 1999-12-31T23:45:00.000Z | 15 minutes | il y a 15 minutes | 0 heures |
+| 1999-12-31T23:30:00.000Z | 30 minutes | il y a 30 minutes | 1 heure |
+| 1999-12-31T23:15:00.000Z | 45 minutes | il y a 45 minutes | 1 heure |
+| 1999-12-31T23:00:00.000Z | 1 heure | il y a 1 heure | 1 heure |
+| 1999-12-31T18:00:00.000Z | 6 heures | il y a 6 heures | 6 heures |
+| 1999-12-30T00:00:00.000Z | 2 jours | il y a 2 jours | 48 heures |
+| 1999-12-15T00:00:00.000Z | 17 jours | il y a 17 jours | 408 heures |
+| 1999-12-01T00:00:00.000Z | 1 mois | il y a 1 mois | 744 heures |
+| 1999-11-01T00:00:00.000Z | 2 mois | il y a 2 mois | 1464 heures |
+| 1999-06-01T00:00:00.000Z | 7 mois | il y a 7 mois | 5136 heures |
+| 1999-01-01T00:00:00.000Z | 1 an | il y a 1 an | 8760 heures |
+| 1998-12-01T00:00:00.000Z | 1 an | il y a 1 an | 9504 heures |
+| 1998-06-01T00:00:00.000Z | 2 ans | il y a 2 ans | 13896 heures |
+| 1998-01-01T00:00:00.000Z | 2 ans | il y a 2 ans | 17520 heures |
+| 1997-01-01T00:00:00.000Z | 3 ans | il y a 3 ans | 26280 heures |
+| 1996-01-01T00:00:00.000Z | 4 ans | il y a 4 ans | 35064 heures |
+| 1995-01-01T00:00:00.000Z | 5 ans | il y a 5 ans | 43824 heures |
+| 1994-01-01T00:00:00.000Z | 6 ans | il y a 6 ans | 52584 heures |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------- |
+| 2000-01-10T00:00:00.000Z | 00-01-10 |
+| 2000-01-05T00:00:00.000Z | mercredi prochain à 00:00 |
+| 2000-01-02T00:00:00.000Z | demain à 00:00 |
+| 2000-01-01T00:00:00.000Z | aujourd’hui à 00:00 |
+| 1999-12-31T00:00:00.000Z | hier à 00:00 |
+| 1999-12-27T00:00:00.000Z | lundi dernier à 00:00 |
+| 1999-12-21T00:00:00.000Z | 99-12-21 |
diff --git a/date-fns/src/locale/fr-CH/_lib/formatDistance/index.js b/date-fns/src/locale/fr-CH/_lib/formatDistance/index.js
new file mode 100644
index 0000000..e5bbf4f
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'moins d’une seconde',
+ other: 'moins de {{count}} secondes'
+ },
+
+ xSeconds: {
+ one: '1 seconde',
+ other: '{{count}} secondes'
+ },
+
+ halfAMinute: '30 secondes',
+
+ lessThanXMinutes: {
+ one: 'moins d’une minute',
+ other: 'moins de {{count}} minutes'
+ },
+
+ xMinutes: {
+ one: '1 minute',
+ other: '{{count}} minutes'
+ },
+
+ aboutXHours: {
+ one: 'environ 1 heure',
+ other: 'environ {{count}} heures'
+ },
+
+ xHours: {
+ one: '1 heure',
+ other: '{{count}} heures'
+ },
+
+ xDays: {
+ one: '1 jour',
+ other: '{{count}} jours'
+ },
+
+ aboutXWeeks: {
+ one: 'environ 1 semaine',
+ other: 'environ {{count}} semaines'
+ },
+
+ xWeeks: {
+ one: '1 semaine',
+ other: '{{count}} semaines'
+ },
+
+ aboutXMonths: {
+ one: 'environ 1 mois',
+ other: 'environ {{count}} mois'
+ },
+
+ xMonths: {
+ one: '1 mois',
+ other: '{{count}} mois'
+ },
+
+ aboutXYears: {
+ one: 'environ 1 an',
+ other: 'environ {{count}} ans'
+ },
+
+ xYears: {
+ one: '1 an',
+ other: '{{count}} ans'
+ },
+
+ overXYears: {
+ one: 'plus d’un an',
+ other: 'plus de {{count}} ans'
+ },
+
+ almostXYears: {
+ one: 'presqu’un an',
+ other: 'presque {{count}} ans'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'dans ' + result
+ } else {
+ return 'il y a ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/fr-CH/_lib/formatLong/index.js b/date-fns/src/locale/fr-CH/_lib/formatLong/index.js
new file mode 100644
index 0000000..16cdba1
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d MMMM y',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'dd.MM.y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'à' {{time}}",
+ long: "{{date}} 'à' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/fr-CH/_lib/formatRelative/index.js b/date-fns/src/locale/fr-CH/_lib/formatRelative/index.js
new file mode 100644
index 0000000..fff22de
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'la semaine dernière à' p",
+ yesterday: "'hier à' p",
+ today: "'aujourd’hui à' p",
+ tomorrow: "'demain à' p'",
+ nextWeek: "eeee 'la semaine prochaine à' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/fr-CH/_lib/formatters/index.js b/date-fns/src/locale/fr-CH/_lib/formatters/index.js
new file mode 100644
index 0000000..b270774
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/_lib/formatters/index.js
@@ -0,0 +1,17 @@
+var formatters = {}
+
+// Special case for day of month ordinals in long date format context:
+// 1er mars, 2 mars, 3 mars, …
+// See https://github.com/date-fns/date-fns/issues/437
+var monthsTokens = ['MMM', 'MMMM']
+monthsTokens.forEach(function (monthToken) {
+ formatters['Do ' + monthToken] = function (date, options) {
+ var commonFormatters = options.formatters
+ var dayOfMonthToken = date.getUTCDate() === 1 ? 'Do' : 'D'
+ var dayOfMonthFormatter = commonFormatters[dayOfMonthToken]
+ var monthFormatter = commonFormatters[monthToken]
+ return dayOfMonthFormatter(date, options) + ' ' + monthFormatter(date, options)
+ }
+})
+
+export default formatters
diff --git a/date-fns/src/locale/fr-CH/_lib/localize/index.js b/date-fns/src/locale/fr-CH/_lib/localize/index.js
new file mode 100644
index 0000000..01d52b3
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/_lib/localize/index.js
@@ -0,0 +1,155 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['av. J.-C', 'ap. J.-C'],
+ abbreviated: ['av. J.-C', 'ap. J.-C'],
+ wide: ['avant Jésus-Christ', 'après Jésus-Christ']
+}
+
+var quarterValues = {
+ narrow: ['T1', 'T2', 'T3', 'T4'],
+ abbreviated: ['1er trim.', '2ème trim.', '3ème trim.', '4ème trim.'],
+ wide: ['1er trimestre', '2ème trimestre', '3ème trimestre', '4ème trimestre']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'janv.',
+ 'févr.',
+ 'mars',
+ 'avr.',
+ 'mai',
+ 'juin',
+ 'juil.',
+ 'août',
+ 'sept.',
+ 'oct.',
+ 'nov.',
+ 'déc.'
+ ],
+ wide: [
+ 'janvier',
+ 'février',
+ 'mars',
+ 'avril',
+ 'mai',
+ 'juin',
+ 'juillet',
+ 'août',
+ 'septembre',
+ 'octobre',
+ 'novembre',
+ 'décembre'
+ ]
+}
+
+var dayValues = {
+ narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
+ short: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],
+ abbreviated: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
+ wide: [
+ 'dimanche',
+ 'lundi',
+ 'mardi',
+ 'mercredi',
+ 'jeudi',
+ 'vendredi',
+ 'samedi'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'minuit',
+ noon: 'midi',
+ morning: 'mat.',
+ afternoon: 'ap.m.',
+ evening: 'soir',
+ night: 'mat.'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'minuit',
+ noon: 'midi',
+ morning: 'matin',
+ afternoon: 'après-midi',
+ evening: 'soir',
+ night: 'matin'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'minuit',
+ noon: 'midi',
+ morning: 'du matin',
+ afternoon: 'de l’après-midi',
+ evening: 'du soir',
+ night: 'du matin'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var suffix
+
+ if (number === 0) {
+ return number
+ }
+
+ if (unit === 'year' || unit === 'hour' || unit === 'week') {
+ if (number === 1) {
+ suffix = 'ère'
+ } else {
+ suffix = 'ème'
+ }
+ } else {
+ if (number === 1) {
+ suffix = 'er'
+ } else {
+ suffix = 'ème'
+ }
+ }
+
+ return number + suffix
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/fr-CH/_lib/match/index.js b/date-fns/src/locale/fr-CH/_lib/match/index.js
new file mode 100644
index 0000000..e5c36f8
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(ième|ère|ème|er|e)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(av\.J\.C|ap\.J\.C|ap\.J\.-C)/i,
+ abbreviated: /^(av\.J\.-C|av\.J-C|apr\.J\.-C|apr\.J-C|ap\.J-C)/i,
+ wide: /^(avant Jésus-Christ|après Jésus-Christ)/i
+}
+var parseEraPatterns = {
+ any: [/^av/i, /^ap/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^t[1234]/i,
+ wide: /^[1234](er|ème|e)? trimestre/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(janv|févr|mars|avr|mai|juin|juill|juil|août|sept|oct|nov|déc)\.?/i,
+ wide: /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^av/i,
+ /^ma/i,
+ /^juin/i,
+ /^juil/i,
+ /^ao/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[lmjvsd]/i,
+ short: /^(di|lu|ma|me|je|ve|sa)/i,
+ abbreviated: /^(dim|lun|mar|mer|jeu|ven|sam)\.?/i,
+ wide: /^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],
+ any: [/^di/i, /^lu/i, /^ma/i, /^me/i, /^je/i, /^ve/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|minuit|midi|mat\.?|ap\.?m\.?|soir|nuit)/i,
+ any: /^([ap]\.?\s?m\.?|du matin|de l'après[-\s]midi|du soir|de la nuit)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^min/i,
+ noon: /^mid/i,
+ morning: /mat/i,
+ afternoon: /ap/i,
+ evening: /soir/i,
+ night: /nuit/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/fr-CH/index.d.ts b/date-fns/src/locale/fr-CH/index.d.ts
new file mode 100644
index 0000000..5fdd3c5
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { frCH } from 'date-fns/locale'
+export default frCH
diff --git a/date-fns/src/locale/fr-CH/index.js b/date-fns/src/locale/fr-CH/index.js
new file mode 100644
index 0000000..d153f05
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/index.js
@@ -0,0 +1,32 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary French locale.
+ * @language French
+ * @iso-639-2 fra
+ * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}
+ * @author François B [@fbonzon]{@link https://github.com/fbonzon}
+ * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}
+ * @author Alex Hoeing [@dcbn]{@link https://github.com/dcbn}
+ */
+
+var locale = {
+ code: 'fr-CH',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/fr-CH/index.js.flow b/date-fns/src/locale/fr-CH/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/fr-CH/snapshot.md b/date-fns/src/locale/fr-CH/snapshot.md
new file mode 100644
index 0000000..f92944e
--- /dev/null
+++ b/date-fns/src/locale/fr-CH/snapshot.md
@@ -0,0 +1,304 @@
+# French (fr-CH) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | --------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987ème | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5ème | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987ème | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4ème | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1er | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1er trim. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2ème trim. | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1er trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème trimestre | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | T1 | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | T2 | Invalid Date |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1er | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1er trim. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2ème trim. | Invalid Date |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1er trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème trimestre | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2ème | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ème | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | févr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juil. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | février | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juillet | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2ème | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ème | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | févr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juil. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | février | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juillet | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1ère | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ème | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1ère | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ème | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11ème | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28ème | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42ème | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365ème | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1er | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ème | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1er | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ème | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1er | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ème | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | matin | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | matin | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | matin | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | matin | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | matin | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | matin | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | du matin | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de l’après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | du soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | du matin | 2019-02-11T04:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | mat. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ap.m. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | mat. | 2019-02-11T04:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11ème | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ème | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11ème | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ème | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1er | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55ème | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1er | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55ème | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 févr. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 février 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | mercredi 11 février 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | dimanche 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 févr. 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 février 1987 à 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 à 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | mercredi 11 février 1987 à 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | dimanche 29 mai 1453 à 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | environ 6 ans | environ 6 ans | dans environ 6 ans |
+| 2005-01-01T00:00:00.000Z | environ 5 ans | environ 5 ans | dans environ 5 ans |
+| 2004-01-01T00:00:00.000Z | environ 4 ans | environ 4 ans | dans environ 4 ans |
+| 2003-01-01T00:00:00.000Z | environ 3 ans | environ 3 ans | dans environ 3 ans |
+| 2002-01-01T00:00:00.000Z | environ 2 ans | environ 2 ans | dans environ 2 ans |
+| 2001-06-01T00:00:00.000Z | plus d’un an | plus d’un an | dans plus d’un an |
+| 2001-02-01T00:00:00.000Z | environ 1 an | environ 1 an | dans environ 1 an |
+| 2001-01-01T00:00:00.000Z | environ 1 an | environ 1 an | dans environ 1 an |
+| 2000-06-01T00:00:00.000Z | 5 mois | 5 mois | dans 5 mois |
+| 2000-03-01T00:00:00.000Z | 2 mois | 2 mois | dans 2 mois |
+| 2000-02-01T00:00:00.000Z | environ 1 mois | environ 1 mois | dans environ 1 mois |
+| 2000-01-15T00:00:00.000Z | 14 jours | 14 jours | dans 14 jours |
+| 2000-01-02T00:00:00.000Z | 1 jour | 1 jour | dans 1 jour |
+| 2000-01-01T06:00:00.000Z | environ 6 heures | environ 6 heures | dans environ 6 heures |
+| 2000-01-01T01:00:00.000Z | environ 1 heure | environ 1 heure | dans environ 1 heure |
+| 2000-01-01T00:45:00.000Z | environ 1 heure | environ 1 heure | dans environ 1 heure |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | dans 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | dans 15 minutes |
+| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | dans 1 minute |
+| 2000-01-01T00:00:25.000Z | moins d’une minute | 30 secondes | dans moins d’une minute |
+| 2000-01-01T00:00:15.000Z | moins d’une minute | moins de 20 secondes | dans moins d’une minute |
+| 2000-01-01T00:00:05.000Z | moins d’une minute | moins de 10 secondes | dans moins d’une minute |
+| 2000-01-01T00:00:00.000Z | moins d’une minute | moins de 5 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:55.000Z | moins d’une minute | moins de 10 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:45.000Z | moins d’une minute | moins de 20 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:35.000Z | moins d’une minute | 30 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | il y a 1 minute |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | il y a 15 minutes |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | il y a 30 minutes |
+| 1999-12-31T23:15:00.000Z | environ 1 heure | environ 1 heure | il y a environ 1 heure |
+| 1999-12-31T23:00:00.000Z | environ 1 heure | environ 1 heure | il y a environ 1 heure |
+| 1999-12-31T18:00:00.000Z | environ 6 heures | environ 6 heures | il y a environ 6 heures |
+| 1999-12-30T00:00:00.000Z | 2 jours | 2 jours | il y a 2 jours |
+| 1999-12-15T00:00:00.000Z | 17 jours | 17 jours | il y a 17 jours |
+| 1999-12-01T00:00:00.000Z | environ 1 mois | environ 1 mois | il y a environ 1 mois |
+| 1999-11-01T00:00:00.000Z | 2 mois | 2 mois | il y a 2 mois |
+| 1999-06-01T00:00:00.000Z | 7 mois | 7 mois | il y a 7 mois |
+| 1999-01-01T00:00:00.000Z | environ 1 an | environ 1 an | il y a environ 1 an |
+| 1998-12-01T00:00:00.000Z | environ 1 an | environ 1 an | il y a environ 1 an |
+| 1998-06-01T00:00:00.000Z | plus d’un an | plus d’un an | il y a plus d’un an |
+| 1998-01-01T00:00:00.000Z | environ 2 ans | environ 2 ans | il y a environ 2 ans |
+| 1997-01-01T00:00:00.000Z | environ 3 ans | environ 3 ans | il y a environ 3 ans |
+| 1996-01-01T00:00:00.000Z | environ 4 ans | environ 4 ans | il y a environ 4 ans |
+| 1995-01-01T00:00:00.000Z | environ 5 ans | environ 5 ans | il y a environ 5 ans |
+| 1994-01-01T00:00:00.000Z | environ 6 ans | environ 6 ans | il y a environ 6 ans |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 ans | dans 6 ans | 52608 heures |
+| 2005-01-01T00:00:00.000Z | 5 ans | dans 5 ans | 43848 heures |
+| 2004-01-01T00:00:00.000Z | 4 ans | dans 4 ans | 35064 heures |
+| 2003-01-01T00:00:00.000Z | 3 ans | dans 3 ans | 26304 heures |
+| 2002-01-01T00:00:00.000Z | 2 ans | dans 2 ans | 17544 heures |
+| 2001-06-01T00:00:00.000Z | 1 an | dans 1 an | 12408 heures |
+| 2001-02-01T00:00:00.000Z | 1 an | dans 1 an | 9528 heures |
+| 2001-01-01T00:00:00.000Z | 1 an | dans 1 an | 8784 heures |
+| 2000-06-01T00:00:00.000Z | 5 mois | dans 5 mois | 3648 heures |
+| 2000-03-01T00:00:00.000Z | 2 mois | dans 2 mois | 1440 heures |
+| 2000-02-01T00:00:00.000Z | 1 mois | dans 1 mois | 744 heures |
+| 2000-01-15T00:00:00.000Z | 14 jours | dans 14 jours | 336 heures |
+| 2000-01-02T00:00:00.000Z | 1 jour | dans 1 jour | 24 heures |
+| 2000-01-01T06:00:00.000Z | 6 heures | dans 6 heures | 6 heures |
+| 2000-01-01T01:00:00.000Z | 1 heure | dans 1 heure | 1 heure |
+| 2000-01-01T00:45:00.000Z | 45 minutes | dans 45 minutes | 1 heure |
+| 2000-01-01T00:30:00.000Z | 30 minutes | dans 30 minutes | 1 heure |
+| 2000-01-01T00:15:00.000Z | 15 minutes | dans 15 minutes | 0 heures |
+| 2000-01-01T00:01:00.000Z | 1 minute | dans 1 minute | 0 heures |
+| 2000-01-01T00:00:25.000Z | 25 secondes | dans 25 secondes | 0 heures |
+| 2000-01-01T00:00:15.000Z | 15 secondes | dans 15 secondes | 0 heures |
+| 2000-01-01T00:00:05.000Z | 5 secondes | dans 5 secondes | 0 heures |
+| 2000-01-01T00:00:00.000Z | 0 secondes | il y a 0 secondes | 0 heures |
+| 1999-12-31T23:59:55.000Z | 5 secondes | il y a 5 secondes | 0 heures |
+| 1999-12-31T23:59:45.000Z | 15 secondes | il y a 15 secondes | 0 heures |
+| 1999-12-31T23:59:35.000Z | 25 secondes | il y a 25 secondes | 0 heures |
+| 1999-12-31T23:59:00.000Z | 1 minute | il y a 1 minute | 0 heures |
+| 1999-12-31T23:45:00.000Z | 15 minutes | il y a 15 minutes | 0 heures |
+| 1999-12-31T23:30:00.000Z | 30 minutes | il y a 30 minutes | 1 heure |
+| 1999-12-31T23:15:00.000Z | 45 minutes | il y a 45 minutes | 1 heure |
+| 1999-12-31T23:00:00.000Z | 1 heure | il y a 1 heure | 1 heure |
+| 1999-12-31T18:00:00.000Z | 6 heures | il y a 6 heures | 6 heures |
+| 1999-12-30T00:00:00.000Z | 2 jours | il y a 2 jours | 48 heures |
+| 1999-12-15T00:00:00.000Z | 17 jours | il y a 17 jours | 408 heures |
+| 1999-12-01T00:00:00.000Z | 1 mois | il y a 1 mois | 744 heures |
+| 1999-11-01T00:00:00.000Z | 2 mois | il y a 2 mois | 1464 heures |
+| 1999-06-01T00:00:00.000Z | 7 mois | il y a 7 mois | 5136 heures |
+| 1999-01-01T00:00:00.000Z | 1 an | il y a 1 an | 8760 heures |
+| 1998-12-01T00:00:00.000Z | 1 an | il y a 1 an | 9504 heures |
+| 1998-06-01T00:00:00.000Z | 2 ans | il y a 2 ans | 13896 heures |
+| 1998-01-01T00:00:00.000Z | 2 ans | il y a 2 ans | 17520 heures |
+| 1997-01-01T00:00:00.000Z | 3 ans | il y a 3 ans | 26280 heures |
+| 1996-01-01T00:00:00.000Z | 4 ans | il y a 4 ans | 35064 heures |
+| 1995-01-01T00:00:00.000Z | 5 ans | il y a 5 ans | 43824 heures |
+| 1994-01-01T00:00:00.000Z | 6 ans | il y a 6 ans | 52584 heures |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | mercredi la semaine prochaine à 00:00 |
+| 2000-01-02T00:00:00.000Z | demain à 00:00 |
+| 2000-01-01T00:00:00.000Z | aujourd’hui à 00:00 |
+| 1999-12-31T00:00:00.000Z | hier à 00:00 |
+| 1999-12-27T00:00:00.000Z | lundi la semaine dernière à 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/fr/_lib/formatDistance/index.js b/date-fns/src/locale/fr/_lib/formatDistance/index.js
new file mode 100644
index 0000000..e5bbf4f
--- /dev/null
+++ b/date-fns/src/locale/fr/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'moins d’une seconde',
+ other: 'moins de {{count}} secondes'
+ },
+
+ xSeconds: {
+ one: '1 seconde',
+ other: '{{count}} secondes'
+ },
+
+ halfAMinute: '30 secondes',
+
+ lessThanXMinutes: {
+ one: 'moins d’une minute',
+ other: 'moins de {{count}} minutes'
+ },
+
+ xMinutes: {
+ one: '1 minute',
+ other: '{{count}} minutes'
+ },
+
+ aboutXHours: {
+ one: 'environ 1 heure',
+ other: 'environ {{count}} heures'
+ },
+
+ xHours: {
+ one: '1 heure',
+ other: '{{count}} heures'
+ },
+
+ xDays: {
+ one: '1 jour',
+ other: '{{count}} jours'
+ },
+
+ aboutXWeeks: {
+ one: 'environ 1 semaine',
+ other: 'environ {{count}} semaines'
+ },
+
+ xWeeks: {
+ one: '1 semaine',
+ other: '{{count}} semaines'
+ },
+
+ aboutXMonths: {
+ one: 'environ 1 mois',
+ other: 'environ {{count}} mois'
+ },
+
+ xMonths: {
+ one: '1 mois',
+ other: '{{count}} mois'
+ },
+
+ aboutXYears: {
+ one: 'environ 1 an',
+ other: 'environ {{count}} ans'
+ },
+
+ xYears: {
+ one: '1 an',
+ other: '{{count}} ans'
+ },
+
+ overXYears: {
+ one: 'plus d’un an',
+ other: 'plus de {{count}} ans'
+ },
+
+ almostXYears: {
+ one: 'presqu’un an',
+ other: 'presque {{count}} ans'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'dans ' + result
+ } else {
+ return 'il y a ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/fr/_lib/formatLong/index.js b/date-fns/src/locale/fr/_lib/formatLong/index.js
new file mode 100644
index 0000000..509d10a
--- /dev/null
+++ b/date-fns/src/locale/fr/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d MMMM y',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'dd/MM/y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'à' {{time}}",
+ long: "{{date}} 'à' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/fr/_lib/formatRelative/index.js b/date-fns/src/locale/fr/_lib/formatRelative/index.js
new file mode 100644
index 0000000..c4905f3
--- /dev/null
+++ b/date-fns/src/locale/fr/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'dernier à' p",
+ yesterday: "'hier à' p",
+ today: "'aujourd’hui à' p",
+ tomorrow: "'demain à' p'",
+ nextWeek: "eeee 'prochain à' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/fr/_lib/formatters/index.js b/date-fns/src/locale/fr/_lib/formatters/index.js
new file mode 100644
index 0000000..b270774
--- /dev/null
+++ b/date-fns/src/locale/fr/_lib/formatters/index.js
@@ -0,0 +1,17 @@
+var formatters = {}
+
+// Special case for day of month ordinals in long date format context:
+// 1er mars, 2 mars, 3 mars, …
+// See https://github.com/date-fns/date-fns/issues/437
+var monthsTokens = ['MMM', 'MMMM']
+monthsTokens.forEach(function (monthToken) {
+ formatters['Do ' + monthToken] = function (date, options) {
+ var commonFormatters = options.formatters
+ var dayOfMonthToken = date.getUTCDate() === 1 ? 'Do' : 'D'
+ var dayOfMonthFormatter = commonFormatters[dayOfMonthToken]
+ var monthFormatter = commonFormatters[monthToken]
+ return dayOfMonthFormatter(date, options) + ' ' + monthFormatter(date, options)
+ }
+})
+
+export default formatters
diff --git a/date-fns/src/locale/fr/_lib/localize/index.js b/date-fns/src/locale/fr/_lib/localize/index.js
new file mode 100644
index 0000000..01d52b3
--- /dev/null
+++ b/date-fns/src/locale/fr/_lib/localize/index.js
@@ -0,0 +1,155 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['av. J.-C', 'ap. J.-C'],
+ abbreviated: ['av. J.-C', 'ap. J.-C'],
+ wide: ['avant Jésus-Christ', 'après Jésus-Christ']
+}
+
+var quarterValues = {
+ narrow: ['T1', 'T2', 'T3', 'T4'],
+ abbreviated: ['1er trim.', '2ème trim.', '3ème trim.', '4ème trim.'],
+ wide: ['1er trimestre', '2ème trimestre', '3ème trimestre', '4ème trimestre']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'janv.',
+ 'févr.',
+ 'mars',
+ 'avr.',
+ 'mai',
+ 'juin',
+ 'juil.',
+ 'août',
+ 'sept.',
+ 'oct.',
+ 'nov.',
+ 'déc.'
+ ],
+ wide: [
+ 'janvier',
+ 'février',
+ 'mars',
+ 'avril',
+ 'mai',
+ 'juin',
+ 'juillet',
+ 'août',
+ 'septembre',
+ 'octobre',
+ 'novembre',
+ 'décembre'
+ ]
+}
+
+var dayValues = {
+ narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
+ short: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],
+ abbreviated: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
+ wide: [
+ 'dimanche',
+ 'lundi',
+ 'mardi',
+ 'mercredi',
+ 'jeudi',
+ 'vendredi',
+ 'samedi'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'minuit',
+ noon: 'midi',
+ morning: 'mat.',
+ afternoon: 'ap.m.',
+ evening: 'soir',
+ night: 'mat.'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'minuit',
+ noon: 'midi',
+ morning: 'matin',
+ afternoon: 'après-midi',
+ evening: 'soir',
+ night: 'matin'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'minuit',
+ noon: 'midi',
+ morning: 'du matin',
+ afternoon: 'de l’après-midi',
+ evening: 'du soir',
+ night: 'du matin'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var suffix
+
+ if (number === 0) {
+ return number
+ }
+
+ if (unit === 'year' || unit === 'hour' || unit === 'week') {
+ if (number === 1) {
+ suffix = 'ère'
+ } else {
+ suffix = 'ème'
+ }
+ } else {
+ if (number === 1) {
+ suffix = 'er'
+ } else {
+ suffix = 'ème'
+ }
+ }
+
+ return number + suffix
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/fr/_lib/match/index.js b/date-fns/src/locale/fr/_lib/match/index.js
new file mode 100644
index 0000000..e5c36f8
--- /dev/null
+++ b/date-fns/src/locale/fr/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(ième|ère|ème|er|e)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(av\.J\.C|ap\.J\.C|ap\.J\.-C)/i,
+ abbreviated: /^(av\.J\.-C|av\.J-C|apr\.J\.-C|apr\.J-C|ap\.J-C)/i,
+ wide: /^(avant Jésus-Christ|après Jésus-Christ)/i
+}
+var parseEraPatterns = {
+ any: [/^av/i, /^ap/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^t[1234]/i,
+ wide: /^[1234](er|ème|e)? trimestre/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(janv|févr|mars|avr|mai|juin|juill|juil|août|sept|oct|nov|déc)\.?/i,
+ wide: /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^av/i,
+ /^ma/i,
+ /^juin/i,
+ /^juil/i,
+ /^ao/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[lmjvsd]/i,
+ short: /^(di|lu|ma|me|je|ve|sa)/i,
+ abbreviated: /^(dim|lun|mar|mer|jeu|ven|sam)\.?/i,
+ wide: /^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],
+ any: [/^di/i, /^lu/i, /^ma/i, /^me/i, /^je/i, /^ve/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|minuit|midi|mat\.?|ap\.?m\.?|soir|nuit)/i,
+ any: /^([ap]\.?\s?m\.?|du matin|de l'après[-\s]midi|du soir|de la nuit)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^min/i,
+ noon: /^mid/i,
+ morning: /mat/i,
+ afternoon: /ap/i,
+ evening: /soir/i,
+ night: /nuit/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/fr/index.d.ts b/date-fns/src/locale/fr/index.d.ts
new file mode 100644
index 0000000..5dc7fe0
--- /dev/null
+++ b/date-fns/src/locale/fr/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { fr } from 'date-fns/locale'
+export default fr
diff --git a/date-fns/src/locale/fr/index.js b/date-fns/src/locale/fr/index.js
new file mode 100644
index 0000000..34f9438
--- /dev/null
+++ b/date-fns/src/locale/fr/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary French locale.
+ * @language French
+ * @iso-639-2 fra
+ * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}
+ * @author François B [@fbonzon]{@link https://github.com/fbonzon}
+ */
+
+var locale = {
+ code: 'fr',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4,
+ },
+}
+
+export default locale
diff --git a/date-fns/src/locale/fr/index.js.flow b/date-fns/src/locale/fr/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/fr/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/fr/snapshot.md b/date-fns/src/locale/fr/snapshot.md
new file mode 100644
index 0000000..1edb19f
--- /dev/null
+++ b/date-fns/src/locale/fr/snapshot.md
@@ -0,0 +1,304 @@
+# French (fr) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | --------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987ème | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5ème | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987ème | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4ème | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1er | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1er trim. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2ème trim. | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1er trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème trimestre | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | T1 | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | T2 | Invalid Date |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1er | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1er trim. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2ème trim. | Invalid Date |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1er trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ème trimestre | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2ème | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ème | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | févr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juil. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | février | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juillet | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2ème | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ème | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | févr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juil. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | février | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juillet | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1ère | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ème | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1ère | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ème | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11ème | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28ème | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42ème | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365ème | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1er | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ème | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1er | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ème | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1er | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ème | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | lun. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | lundi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vendredi | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | matin | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | matin | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | matin | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | matin | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | matin | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | matin | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | du matin | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | de l’après-midi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | du soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | du matin | 2019-02-11T04:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | mat. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ap.m. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | soir | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | mat. | 2019-02-11T04:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11ème | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ème | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11ème | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11ème | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ème | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1er | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55ème | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1er | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55ème | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 févr. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 février 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | mercredi 11 février 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | dimanche 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 févr. 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 février 1987 à 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 à 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | mercredi 11 février 1987 à 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | dimanche 29 mai 1453 à 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | environ 6 ans | environ 6 ans | dans environ 6 ans |
+| 2005-01-01T00:00:00.000Z | environ 5 ans | environ 5 ans | dans environ 5 ans |
+| 2004-01-01T00:00:00.000Z | environ 4 ans | environ 4 ans | dans environ 4 ans |
+| 2003-01-01T00:00:00.000Z | environ 3 ans | environ 3 ans | dans environ 3 ans |
+| 2002-01-01T00:00:00.000Z | environ 2 ans | environ 2 ans | dans environ 2 ans |
+| 2001-06-01T00:00:00.000Z | plus d’un an | plus d’un an | dans plus d’un an |
+| 2001-02-01T00:00:00.000Z | environ 1 an | environ 1 an | dans environ 1 an |
+| 2001-01-01T00:00:00.000Z | environ 1 an | environ 1 an | dans environ 1 an |
+| 2000-06-01T00:00:00.000Z | 5 mois | 5 mois | dans 5 mois |
+| 2000-03-01T00:00:00.000Z | 2 mois | 2 mois | dans 2 mois |
+| 2000-02-01T00:00:00.000Z | environ 1 mois | environ 1 mois | dans environ 1 mois |
+| 2000-01-15T00:00:00.000Z | 14 jours | 14 jours | dans 14 jours |
+| 2000-01-02T00:00:00.000Z | 1 jour | 1 jour | dans 1 jour |
+| 2000-01-01T06:00:00.000Z | environ 6 heures | environ 6 heures | dans environ 6 heures |
+| 2000-01-01T01:00:00.000Z | environ 1 heure | environ 1 heure | dans environ 1 heure |
+| 2000-01-01T00:45:00.000Z | environ 1 heure | environ 1 heure | dans environ 1 heure |
+| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | dans 30 minutes |
+| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | dans 15 minutes |
+| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | dans 1 minute |
+| 2000-01-01T00:00:25.000Z | moins d’une minute | 30 secondes | dans moins d’une minute |
+| 2000-01-01T00:00:15.000Z | moins d’une minute | moins de 20 secondes | dans moins d’une minute |
+| 2000-01-01T00:00:05.000Z | moins d’une minute | moins de 10 secondes | dans moins d’une minute |
+| 2000-01-01T00:00:00.000Z | moins d’une minute | moins de 5 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:55.000Z | moins d’une minute | moins de 10 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:45.000Z | moins d’une minute | moins de 20 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:35.000Z | moins d’une minute | 30 secondes | il y a moins d’une minute |
+| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | il y a 1 minute |
+| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | il y a 15 minutes |
+| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | il y a 30 minutes |
+| 1999-12-31T23:15:00.000Z | environ 1 heure | environ 1 heure | il y a environ 1 heure |
+| 1999-12-31T23:00:00.000Z | environ 1 heure | environ 1 heure | il y a environ 1 heure |
+| 1999-12-31T18:00:00.000Z | environ 6 heures | environ 6 heures | il y a environ 6 heures |
+| 1999-12-30T00:00:00.000Z | 2 jours | 2 jours | il y a 2 jours |
+| 1999-12-15T00:00:00.000Z | 17 jours | 17 jours | il y a 17 jours |
+| 1999-12-01T00:00:00.000Z | environ 1 mois | environ 1 mois | il y a environ 1 mois |
+| 1999-11-01T00:00:00.000Z | 2 mois | 2 mois | il y a 2 mois |
+| 1999-06-01T00:00:00.000Z | 7 mois | 7 mois | il y a 7 mois |
+| 1999-01-01T00:00:00.000Z | environ 1 an | environ 1 an | il y a environ 1 an |
+| 1998-12-01T00:00:00.000Z | environ 1 an | environ 1 an | il y a environ 1 an |
+| 1998-06-01T00:00:00.000Z | plus d’un an | plus d’un an | il y a plus d’un an |
+| 1998-01-01T00:00:00.000Z | environ 2 ans | environ 2 ans | il y a environ 2 ans |
+| 1997-01-01T00:00:00.000Z | environ 3 ans | environ 3 ans | il y a environ 3 ans |
+| 1996-01-01T00:00:00.000Z | environ 4 ans | environ 4 ans | il y a environ 4 ans |
+| 1995-01-01T00:00:00.000Z | environ 5 ans | environ 5 ans | il y a environ 5 ans |
+| 1994-01-01T00:00:00.000Z | environ 6 ans | environ 6 ans | il y a environ 6 ans |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 ans | dans 6 ans | 52608 heures |
+| 2005-01-01T00:00:00.000Z | 5 ans | dans 5 ans | 43848 heures |
+| 2004-01-01T00:00:00.000Z | 4 ans | dans 4 ans | 35064 heures |
+| 2003-01-01T00:00:00.000Z | 3 ans | dans 3 ans | 26304 heures |
+| 2002-01-01T00:00:00.000Z | 2 ans | dans 2 ans | 17544 heures |
+| 2001-06-01T00:00:00.000Z | 1 an | dans 1 an | 12408 heures |
+| 2001-02-01T00:00:00.000Z | 1 an | dans 1 an | 9528 heures |
+| 2001-01-01T00:00:00.000Z | 1 an | dans 1 an | 8784 heures |
+| 2000-06-01T00:00:00.000Z | 5 mois | dans 5 mois | 3648 heures |
+| 2000-03-01T00:00:00.000Z | 2 mois | dans 2 mois | 1440 heures |
+| 2000-02-01T00:00:00.000Z | 1 mois | dans 1 mois | 744 heures |
+| 2000-01-15T00:00:00.000Z | 14 jours | dans 14 jours | 336 heures |
+| 2000-01-02T00:00:00.000Z | 1 jour | dans 1 jour | 24 heures |
+| 2000-01-01T06:00:00.000Z | 6 heures | dans 6 heures | 6 heures |
+| 2000-01-01T01:00:00.000Z | 1 heure | dans 1 heure | 1 heure |
+| 2000-01-01T00:45:00.000Z | 45 minutes | dans 45 minutes | 1 heure |
+| 2000-01-01T00:30:00.000Z | 30 minutes | dans 30 minutes | 1 heure |
+| 2000-01-01T00:15:00.000Z | 15 minutes | dans 15 minutes | 0 heures |
+| 2000-01-01T00:01:00.000Z | 1 minute | dans 1 minute | 0 heures |
+| 2000-01-01T00:00:25.000Z | 25 secondes | dans 25 secondes | 0 heures |
+| 2000-01-01T00:00:15.000Z | 15 secondes | dans 15 secondes | 0 heures |
+| 2000-01-01T00:00:05.000Z | 5 secondes | dans 5 secondes | 0 heures |
+| 2000-01-01T00:00:00.000Z | 0 secondes | il y a 0 secondes | 0 heures |
+| 1999-12-31T23:59:55.000Z | 5 secondes | il y a 5 secondes | 0 heures |
+| 1999-12-31T23:59:45.000Z | 15 secondes | il y a 15 secondes | 0 heures |
+| 1999-12-31T23:59:35.000Z | 25 secondes | il y a 25 secondes | 0 heures |
+| 1999-12-31T23:59:00.000Z | 1 minute | il y a 1 minute | 0 heures |
+| 1999-12-31T23:45:00.000Z | 15 minutes | il y a 15 minutes | 0 heures |
+| 1999-12-31T23:30:00.000Z | 30 minutes | il y a 30 minutes | 1 heure |
+| 1999-12-31T23:15:00.000Z | 45 minutes | il y a 45 minutes | 1 heure |
+| 1999-12-31T23:00:00.000Z | 1 heure | il y a 1 heure | 1 heure |
+| 1999-12-31T18:00:00.000Z | 6 heures | il y a 6 heures | 6 heures |
+| 1999-12-30T00:00:00.000Z | 2 jours | il y a 2 jours | 48 heures |
+| 1999-12-15T00:00:00.000Z | 17 jours | il y a 17 jours | 408 heures |
+| 1999-12-01T00:00:00.000Z | 1 mois | il y a 1 mois | 744 heures |
+| 1999-11-01T00:00:00.000Z | 2 mois | il y a 2 mois | 1464 heures |
+| 1999-06-01T00:00:00.000Z | 7 mois | il y a 7 mois | 5136 heures |
+| 1999-01-01T00:00:00.000Z | 1 an | il y a 1 an | 8760 heures |
+| 1998-12-01T00:00:00.000Z | 1 an | il y a 1 an | 9504 heures |
+| 1998-06-01T00:00:00.000Z | 2 ans | il y a 2 ans | 13896 heures |
+| 1998-01-01T00:00:00.000Z | 2 ans | il y a 2 ans | 17520 heures |
+| 1997-01-01T00:00:00.000Z | 3 ans | il y a 3 ans | 26280 heures |
+| 1996-01-01T00:00:00.000Z | 4 ans | il y a 4 ans | 35064 heures |
+| 1995-01-01T00:00:00.000Z | 5 ans | il y a 5 ans | 43824 heures |
+| 1994-01-01T00:00:00.000Z | 6 ans | il y a 6 ans | 52584 heures |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | mercredi prochain à 00:00 |
+| 2000-01-02T00:00:00.000Z | demain à 00:00 |
+| 2000-01-01T00:00:00.000Z | aujourd’hui à 00:00 |
+| 1999-12-31T00:00:00.000Z | hier à 00:00 |
+| 1999-12-27T00:00:00.000Z | lundi dernier à 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/gd/_lib/formatDistance/index.js b/date-fns/src/locale/gd/_lib/formatDistance/index.js
new file mode 100644
index 0000000..e24c2be
--- /dev/null
+++ b/date-fns/src/locale/gd/_lib/formatDistance/index.js
@@ -0,0 +1,115 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'nas lugha na diog',
+ other: 'nas lugha na {{count}} diogan'
+ },
+
+ xSeconds: {
+ one: '1 diog',
+ two: '2 dhiog',
+ twenty: '20 diog',
+ other: '{{count}} diogan'
+ },
+
+ halfAMinute: 'leth mhionaid',
+
+ lessThanXMinutes: {
+ one: 'nas lugha na mionaid',
+ other: 'nas lugha na {{count}} mionaidean'
+ },
+
+ xMinutes: {
+ one: '1 mionaid',
+ two: '2 mhionaid',
+ twenty: '20 mionaid',
+ other: '{{count}} mionaidean'
+ },
+
+ aboutXHours: {
+ one: 'mu uair de thìde',
+ other: 'mu {{count}} uairean de thìde'
+ },
+
+ xHours: {
+ one: '1 uair de thìde',
+ two: '2 uair de thìde',
+ twenty: '20 uair de thìde',
+ other: '{{count}} uairean de thìde'
+ },
+
+ xDays: {
+ one: '1 là',
+ other: '{{count}} là'
+ },
+
+ aboutXWeeks: {
+ one: 'mu 1 seachdain',
+ other: 'mu {{count}} seachdainean'
+ },
+
+ xWeeks: {
+ one: '1 seachdain',
+ other: '{{count}} seachdainean'
+ },
+
+ aboutXMonths: {
+ one: 'mu mhìos',
+ other: 'mu {{count}} mìosan'
+ },
+
+ xMonths: {
+ one: '1 mìos',
+ other: '{{count}} mìosan'
+ },
+
+ aboutXYears: {
+ one: 'mu bhliadhna',
+ other: 'mu {{count}} bliadhnaichean'
+ },
+
+ xYears: {
+ one: '1 bhliadhna',
+ other: '{{count}} bliadhna'
+ },
+
+ overXYears: {
+ one: 'còrr is bliadhna',
+ other: 'còrr is {{count}} bliadhnaichean'
+ },
+
+ almostXYears: {
+ one: 'cha mhòr bliadhna',
+ other: 'cha mhòr {{count}} bliadhnaichean'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else if (count === 2 && !!formatDistanceLocale[token].two) {
+ result = formatDistanceLocale[token].two
+ } else if (count === 9 && !!formatDistanceLocale[token].nine) {
+ result = formatDistanceLocale[token].nine
+ } else if (count === 20 && !!formatDistanceLocale[token].twenty) {
+ result = formatDistanceLocale[token].twenty
+ } else if (count === 30 && !!formatDistanceLocale[token].thirty) {
+ result = formatDistanceLocale[token].thirty
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'ann an ' + result
+ } else {
+ return 'o chionn ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/gd/_lib/formatLong/index.js b/date-fns/src/locale/gd/_lib/formatLong/index.js
new file mode 100644
index 0000000..24513da
--- /dev/null
+++ b/date-fns/src/locale/gd/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'MM/dd/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'aig' {{time}}",
+ long: "{{date}} 'aig' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/gd/_lib/formatRelative/index.js b/date-fns/src/locale/gd/_lib/formatRelative/index.js
new file mode 100644
index 0000000..ea9d357
--- /dev/null
+++ b/date-fns/src/locale/gd/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'mu dheireadh' eeee 'aig' p", //FIX
+ yesterday: "'an-dè aig' p",
+ today: "'an-diugh aig' p",
+ tomorrow: "'a-màireach aig' p",
+ nextWeek: "eeee 'aig' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/gd/_lib/localize/index.js b/date-fns/src/locale/gd/_lib/localize/index.js
new file mode 100644
index 0000000..6c29358
--- /dev/null
+++ b/date-fns/src/locale/gd/_lib/localize/index.js
@@ -0,0 +1,200 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['R', 'A'],
+ abbreviated: ['RC', 'AD'],
+ wide: ['ro Chrìosta', 'anno domini']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['C1', 'C2', 'C3', 'C4'],
+ wide: [
+ "a' chiad chairteal",
+ 'an dàrna cairteal',
+ 'an treas cairteal',
+ 'an ceathramh cairteal'
+ ]
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['F', 'G', 'M', 'G', 'C', 'Ò', 'I', 'L', 'S', 'D', 'S', 'D'],
+ abbreviated: [
+ 'Faoi',
+ 'Gear',
+ 'Màrt',
+ 'Gibl',
+ 'Cèit',
+ 'Ògmh',
+ 'Iuch',
+ 'Lùn',
+ 'Sult',
+ 'Dàmh',
+ 'Samh',
+ 'Dùbh'
+ ],
+ wide: [
+ 'Am Faoilleach',
+ 'An Gearran',
+ 'Am Màrt',
+ 'An Giblean',
+ 'An Cèitean',
+ 'An t-Ògmhios',
+ 'An t-Iuchar',
+ 'An Lùnastal',
+ 'An t-Sultain',
+ 'An Dàmhair',
+ 'An t-Samhain',
+ 'An Dùbhlachd'
+ ]
+}
+
+var dayValues = {
+ narrow: ['D', 'L', 'M', 'C', 'A', 'H', 'S'],
+ short: ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'],
+ abbreviated: ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
+ wide: [
+ 'Didòmhnaich',
+ 'Diluain',
+ 'Dimàirt',
+ 'Diciadain',
+ 'Diardaoin',
+ 'Dihaoine',
+ 'Disathairne'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'm',
+ pm: 'f',
+ midnight: 'm.o.',
+ noon: 'm.l.',
+ morning: 'madainn',
+ afternoon: 'feasgar',
+ evening: 'feasgar',
+ night: 'oidhche'
+ },
+ abbreviated: {
+ am: 'M.',
+ pm: 'F.',
+ midnight: 'meadhan oidhche',
+ noon: 'meadhan là',
+ morning: 'madainn',
+ afternoon: 'feasgar',
+ evening: 'feasgar',
+ night: 'oidhche'
+ },
+ wide: {
+ am: 'm.',
+ pm: 'f.',
+ midnight: 'meadhan oidhche',
+ noon: 'meadhan là',
+ morning: 'madainn',
+ afternoon: 'feasgar',
+ evening: 'feasgar',
+ night: 'oidhche'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'm',
+ pm: 'f',
+ midnight: 'm.o.',
+ noon: 'm.l.',
+ morning: 'sa mhadainn',
+ afternoon: 'feasgar',
+ evening: 'feasgar',
+ night: 'air an oidhche'
+ },
+ abbreviated: {
+ am: 'M.',
+ pm: 'F.',
+ midnight: 'meadhan oidhche',
+ noon: 'meadhan là',
+ morning: 'sa mhadainn',
+ afternoon: 'feasgar',
+ evening: 'feasgar',
+ night: 'air an oidhche'
+ },
+ wide: {
+ am: 'm.',
+ pm: 'f.',
+ midnight: 'meadhan oidhche',
+ noon: 'meadhan là',
+ morning: 'sa mhadainn',
+ afternoon: 'feasgar',
+ evening: 'feasgar',
+ night: 'air an oidhche'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ var rem100 = number % 100
+ if (rem100 > 20 || rem100 < 10) {
+ switch (rem100 % 10) {
+ case 1:
+ return number + 'd'
+ case 2:
+ return number + 'na'
+ }
+ }
+
+ if (rem100 === 12) {
+ return number + 'na'
+ }
+
+ return number + 'mh'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/gd/_lib/match/index.js b/date-fns/src/locale/gd/_lib/match/index.js
new file mode 100644
index 0000000..bb23794
--- /dev/null
+++ b/date-fns/src/locale/gd/_lib/match/index.js
@@ -0,0 +1,138 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(d|na|tr|mh)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(r|a)/i,
+ abbreviated: /^(r\.?\s?c\.?|r\.?\s?a\.?\s?c\.?|a\.?\s?d\.?|a\.?\s?c\.?)/i,
+ wide: /^(ro Chrìosta|ron aois choitchinn|anno domini|aois choitcheann)/i
+}
+var parseEraPatterns = {
+ any: [/^b/i, /^(a|c)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^c[1234]/i,
+ wide: /^[1234](cd|na|tr|mh)? cairteal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[fgmcòilsd]/i,
+ abbreviated: /^(faoi|gear|màrt|gibl|cèit|ògmh|iuch|lùn|sult|dàmh|samh|dùbh)/i,
+ wide: /^(am faoilleach|an gearran|am màrt|an giblean|an cèitean|an t-Ògmhios|an t-Iuchar|an lùnastal|an t-Sultain|an dàmhair|an t-Samhain|an dùbhlachd)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^f/i,
+ /^g/i,
+ /^m/i,
+ /^g/i,
+ /^c/i,
+ /^ò/i,
+ /^i/i,
+ /^l/i,
+ /^s/i,
+ /^d/i,
+ /^s/i,
+ /^d/i
+ ],
+ any: [
+ /^fa/i,
+ /^ge/i,
+ /^mà/i,
+ /^gi/i,
+ /^c/i,
+ /^ò/i,
+ /^i/i,
+ /^l/i,
+ /^su/i,
+ /^d/i,
+ /^sa/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[dlmcahs]/i,
+ short: /^(dò|lu|mà|ci|ar|ha|sa)/i,
+ abbreviated: /^(did|dil|dim|dic|dia|dih|dis)/i,
+ wide: /^(didòmhnaich|diluain|dimàirt|diciadain|diardaoin|dihaoine|disathairne)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^c/i, /^a/i, /^h/i, /^s/i],
+ any: [/^d/i, /^l/i, /^m/i, /^c/i, /^a/i, /^h/i, /^s/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mi|n|(san|aig) (madainn|feasgar|feasgar|oidhche))/i,
+ any: /^([ap]\.?\s?m\.?|meadhan oidhche|meadhan là|(san|aig) (madainn|feasgar|feasgar|oidhche))/i
+}
+
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^m/i,
+ pm: /^f/i,
+ midnight: /^meadhan oidhche/i,
+ noon: /^meadhan là/i,
+ morning: /sa mhadainn/i,
+ afternoon: /feasgar/i,
+ evening: /feasgar/i,
+ night: /air an oidhche/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/gd/index.d.ts b/date-fns/src/locale/gd/index.d.ts
new file mode 100644
index 0000000..2b24744
--- /dev/null
+++ b/date-fns/src/locale/gd/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { gd } from 'date-fns/locale'
+export default gd
diff --git a/date-fns/src/locale/gd/index.js b/date-fns/src/locale/gd/index.js
new file mode 100644
index 0000000..05e8cd4
--- /dev/null
+++ b/date-fns/src/locale/gd/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Scottish Gaelic.
+ * @language Scottish Gaelic
+ * @iso-639-2 gla
+ * @author Lee Driscoll [@leedriscoll]{@link https://github.com/leedriscoll}
+ */
+var locale = {
+ code: 'gd',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/gd/index.js.flow b/date-fns/src/locale/gd/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/gd/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/gd/snapshot.md b/date-fns/src/locale/gd/snapshot.md
new file mode 100644
index 0000000..0378d1b
--- /dev/null
+++ b/date-fns/src/locale/gd/snapshot.md
@@ -0,0 +1,304 @@
+# Scottish Gaelic (gd) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987mh | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5mh | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987mh | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5mh | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1d | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2na | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | C1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | C2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | a' chiad chairteal | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | an dàrna cairteal | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1d | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2na | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | C1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | C2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | a' chiad chairteal | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | an dàrna cairteal | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2na | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7mh | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Gear | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Iuch | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | An Gearran | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | An t-Iuchar | Invalid Date |
+| | MMMMM | 2019-02-11T12:13:14.015Z | G | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | I | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2na | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7mh | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Gear | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Iuch | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | An Gearran | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | An t-Iuchar | Invalid Date |
+| | LLLLL | 2019-02-11T12:13:14.015Z | G | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | I | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1d | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49mh | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1d | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48mh | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11mh | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28mh | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42na | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365mh | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Dil | 2019-02-10T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dih | 2019-02-10T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Dil | 2019-02-10T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dih | 2019-02-10T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Dil | 2019-02-10T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dih | 2019-02-10T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Diluain | 2019-02-10T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dihaoine | 2019-02-10T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | H | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ha | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1d | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5mh | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Dil | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dih | 2019-02-17T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Diluain | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dihaoine | 2019-02-17T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | H | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ha | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2na | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6mh | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Dil | 2019-02-10T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dih | 2019-02-10T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Diluain | 2019-02-10T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dihaoine | 2019-02-10T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | H | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ha | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2na | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6mh | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Dil | 2019-02-10T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dih | 2019-02-10T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Diluain | 2019-02-10T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Dihaoine | 2019-02-10T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | H | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ha | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | M. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | F. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | F. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | M. | Invalid Date |
+| | aa | 2019-02-11T11:13:14.015Z | M. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | F. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | F. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | M. | Invalid Date |
+| | aaa | 2019-02-11T11:13:14.015Z | m. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | f. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | f. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | m. | Invalid Date |
+| | aaaa | 2019-02-11T11:13:14.015Z | m. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | f. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | f. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | m. | Invalid Date |
+| | aaaaa | 2019-02-11T11:13:14.015Z | m | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | f | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | f | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | m | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | M. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | F. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | F. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | M. | Invalid Date |
+| | bb | 2019-02-11T11:13:14.015Z | M. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | F. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | F. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | M. | Invalid Date |
+| | bbb | 2019-02-11T11:13:14.015Z | m. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | f. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | f. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | m. | Invalid Date |
+| | bbbb | 2019-02-11T11:13:14.015Z | m. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | f. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | f. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | m. | Invalid Date |
+| | bbbbb | 2019-02-11T11:13:14.015Z | m | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | f | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | f | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | m | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | sa mhadainn | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | air an oidhche | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | sa mhadainn | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | air an oidhche | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | sa mhadainn | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | air an oidhche | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | sa mhadainn | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | air an oidhche | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | sa mhadainn | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | feasgar | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | air an oidhche | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11mh | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11mh | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11mh | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23mh | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11mh | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11mh | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11mh | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23mh | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1d | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55mh | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1d | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55mh | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 02/11/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | Gear 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Cèit 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | An Gearran 11mh, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | An Cèitean 29mh, 1453 | Invalid Date |
+| | PPPP | 1987-02-11T12:13:14.015Z | Diciadain, An Gearran 11mh, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | Didòmhnaich, An Cèitean 29mh, 1453 | Invalid Date |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 F. | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59 F. | Invalid Date |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 F. | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 F. | Invalid Date |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 F. GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 F. GMT+0 | Invalid Date |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 F. GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 F. GMT+00:00 | Invalid Date |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 02/11/1987, 12:13 F. | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453, 11:59 F. | Invalid Date |
+| | PPpp | 1987-02-11T12:13:14.015Z | Gear 11, 1987, 12:13:14 F. | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | Cèit 29, 1453, 11:59:59 F. | Invalid Date |
+| | PPPppp | 1987-02-11T12:13:14.015Z | An Gearran 11mh, 1987 aig 12:13:14 F. GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | An Cèitean 29mh, 1453 aig 11:59:59 F. GMT+0 | Invalid Date |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Diciadain, An Gearran 11mh, 1987 aig 12:13:14 F. GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | Didòmhnaich, An Cèitean 29mh, 1453 aig 11:59:59 F. GMT+00:00 | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------------- | ---------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | mu 6 bliadhnaichean | mu 6 bliadhnaichean | ann an mu 6 bliadhnaichean |
+| 2005-01-01T00:00:00.000Z | mu 5 bliadhnaichean | mu 5 bliadhnaichean | ann an mu 5 bliadhnaichean |
+| 2004-01-01T00:00:00.000Z | mu 4 bliadhnaichean | mu 4 bliadhnaichean | ann an mu 4 bliadhnaichean |
+| 2003-01-01T00:00:00.000Z | mu 3 bliadhnaichean | mu 3 bliadhnaichean | ann an mu 3 bliadhnaichean |
+| 2002-01-01T00:00:00.000Z | mu 2 bliadhnaichean | mu 2 bliadhnaichean | ann an mu 2 bliadhnaichean |
+| 2001-06-01T00:00:00.000Z | còrr is bliadhna | còrr is bliadhna | ann an còrr is bliadhna |
+| 2001-02-01T00:00:00.000Z | mu bhliadhna | mu bhliadhna | ann an mu bhliadhna |
+| 2001-01-01T00:00:00.000Z | mu bhliadhna | mu bhliadhna | ann an mu bhliadhna |
+| 2000-06-01T00:00:00.000Z | 5 mìosan | 5 mìosan | ann an 5 mìosan |
+| 2000-03-01T00:00:00.000Z | 2 mìosan | 2 mìosan | ann an 2 mìosan |
+| 2000-02-01T00:00:00.000Z | mu mhìos | mu mhìos | ann an mu mhìos |
+| 2000-01-15T00:00:00.000Z | 14 là | 14 là | ann an 14 là |
+| 2000-01-02T00:00:00.000Z | 1 là | 1 là | ann an 1 là |
+| 2000-01-01T06:00:00.000Z | mu 6 uairean de thìde | mu 6 uairean de thìde | ann an mu 6 uairean de thìde |
+| 2000-01-01T01:00:00.000Z | mu uair de thìde | mu uair de thìde | ann an mu uair de thìde |
+| 2000-01-01T00:45:00.000Z | mu uair de thìde | mu uair de thìde | ann an mu uair de thìde |
+| 2000-01-01T00:30:00.000Z | 30 mionaidean | 30 mionaidean | ann an 30 mionaidean |
+| 2000-01-01T00:15:00.000Z | 15 mionaidean | 15 mionaidean | ann an 15 mionaidean |
+| 2000-01-01T00:01:00.000Z | 1 mionaid | 1 mionaid | ann an 1 mionaid |
+| 2000-01-01T00:00:25.000Z | nas lugha na mionaid | leth mhionaid | ann an nas lugha na mionaid |
+| 2000-01-01T00:00:15.000Z | nas lugha na mionaid | nas lugha na 20 diogan | ann an nas lugha na mionaid |
+| 2000-01-01T00:00:05.000Z | nas lugha na mionaid | nas lugha na 10 diogan | ann an nas lugha na mionaid |
+| 2000-01-01T00:00:00.000Z | nas lugha na mionaid | nas lugha na 5 diogan | o chionn nas lugha na mionaid |
+| 1999-12-31T23:59:55.000Z | nas lugha na mionaid | nas lugha na 10 diogan | o chionn nas lugha na mionaid |
+| 1999-12-31T23:59:45.000Z | nas lugha na mionaid | nas lugha na 20 diogan | o chionn nas lugha na mionaid |
+| 1999-12-31T23:59:35.000Z | nas lugha na mionaid | leth mhionaid | o chionn nas lugha na mionaid |
+| 1999-12-31T23:59:00.000Z | 1 mionaid | 1 mionaid | o chionn 1 mionaid |
+| 1999-12-31T23:45:00.000Z | 15 mionaidean | 15 mionaidean | o chionn 15 mionaidean |
+| 1999-12-31T23:30:00.000Z | 30 mionaidean | 30 mionaidean | o chionn 30 mionaidean |
+| 1999-12-31T23:15:00.000Z | mu uair de thìde | mu uair de thìde | o chionn mu uair de thìde |
+| 1999-12-31T23:00:00.000Z | mu uair de thìde | mu uair de thìde | o chionn mu uair de thìde |
+| 1999-12-31T18:00:00.000Z | mu 6 uairean de thìde | mu 6 uairean de thìde | o chionn mu 6 uairean de thìde |
+| 1999-12-30T00:00:00.000Z | 2 là | 2 là | o chionn 2 là |
+| 1999-12-15T00:00:00.000Z | 17 là | 17 là | o chionn 17 là |
+| 1999-12-01T00:00:00.000Z | mu mhìos | mu mhìos | o chionn mu mhìos |
+| 1999-11-01T00:00:00.000Z | 2 mìosan | 2 mìosan | o chionn 2 mìosan |
+| 1999-06-01T00:00:00.000Z | 7 mìosan | 7 mìosan | o chionn 7 mìosan |
+| 1999-01-01T00:00:00.000Z | mu bhliadhna | mu bhliadhna | o chionn mu bhliadhna |
+| 1998-12-01T00:00:00.000Z | mu bhliadhna | mu bhliadhna | o chionn mu bhliadhna |
+| 1998-06-01T00:00:00.000Z | còrr is bliadhna | còrr is bliadhna | o chionn còrr is bliadhna |
+| 1998-01-01T00:00:00.000Z | mu 2 bliadhnaichean | mu 2 bliadhnaichean | o chionn mu 2 bliadhnaichean |
+| 1997-01-01T00:00:00.000Z | mu 3 bliadhnaichean | mu 3 bliadhnaichean | o chionn mu 3 bliadhnaichean |
+| 1996-01-01T00:00:00.000Z | mu 4 bliadhnaichean | mu 4 bliadhnaichean | o chionn mu 4 bliadhnaichean |
+| 1995-01-01T00:00:00.000Z | mu 5 bliadhnaichean | mu 5 bliadhnaichean | o chionn mu 5 bliadhnaichean |
+| 1994-01-01T00:00:00.000Z | mu 6 bliadhnaichean | mu 6 bliadhnaichean | o chionn mu 6 bliadhnaichean |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------------------ | --------------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 bliadhna | ann an 6 bliadhna | 52608 uairean de thìde |
+| 2005-01-01T00:00:00.000Z | 5 bliadhna | ann an 5 bliadhna | 43848 uairean de thìde |
+| 2004-01-01T00:00:00.000Z | 4 bliadhna | ann an 4 bliadhna | 35064 uairean de thìde |
+| 2003-01-01T00:00:00.000Z | 3 bliadhna | ann an 3 bliadhna | 26304 uairean de thìde |
+| 2002-01-01T00:00:00.000Z | 2 bliadhna | ann an 2 bliadhna | 17544 uairean de thìde |
+| 2001-06-01T00:00:00.000Z | 1 bhliadhna | ann an 1 bhliadhna | 12408 uairean de thìde |
+| 2001-02-01T00:00:00.000Z | 1 bhliadhna | ann an 1 bhliadhna | 9528 uairean de thìde |
+| 2001-01-01T00:00:00.000Z | 1 bhliadhna | ann an 1 bhliadhna | 8784 uairean de thìde |
+| 2000-06-01T00:00:00.000Z | 5 mìosan | ann an 5 mìosan | 3648 uairean de thìde |
+| 2000-03-01T00:00:00.000Z | 2 mìosan | ann an 2 mìosan | 1440 uairean de thìde |
+| 2000-02-01T00:00:00.000Z | 1 mìos | ann an 1 mìos | 744 uairean de thìde |
+| 2000-01-15T00:00:00.000Z | 14 là | ann an 14 là | 336 uairean de thìde |
+| 2000-01-02T00:00:00.000Z | 1 là | ann an 1 là | 24 uairean de thìde |
+| 2000-01-01T06:00:00.000Z | 6 uairean de thìde | ann an 6 uairean de thìde | 6 uairean de thìde |
+| 2000-01-01T01:00:00.000Z | 1 uair de thìde | ann an 1 uair de thìde | 1 uair de thìde |
+| 2000-01-01T00:45:00.000Z | 45 mionaidean | ann an 45 mionaidean | 1 uair de thìde |
+| 2000-01-01T00:30:00.000Z | 30 mionaidean | ann an 30 mionaidean | 1 uair de thìde |
+| 2000-01-01T00:15:00.000Z | 15 mionaidean | ann an 15 mionaidean | 0 uairean de thìde |
+| 2000-01-01T00:01:00.000Z | 1 mionaid | ann an 1 mionaid | 0 uairean de thìde |
+| 2000-01-01T00:00:25.000Z | 25 diogan | ann an 25 diogan | 0 uairean de thìde |
+| 2000-01-01T00:00:15.000Z | 15 diogan | ann an 15 diogan | 0 uairean de thìde |
+| 2000-01-01T00:00:05.000Z | 5 diogan | ann an 5 diogan | 0 uairean de thìde |
+| 2000-01-01T00:00:00.000Z | 0 diogan | o chionn 0 diogan | 0 uairean de thìde |
+| 1999-12-31T23:59:55.000Z | 5 diogan | o chionn 5 diogan | 0 uairean de thìde |
+| 1999-12-31T23:59:45.000Z | 15 diogan | o chionn 15 diogan | 0 uairean de thìde |
+| 1999-12-31T23:59:35.000Z | 25 diogan | o chionn 25 diogan | 0 uairean de thìde |
+| 1999-12-31T23:59:00.000Z | 1 mionaid | o chionn 1 mionaid | 0 uairean de thìde |
+| 1999-12-31T23:45:00.000Z | 15 mionaidean | o chionn 15 mionaidean | 0 uairean de thìde |
+| 1999-12-31T23:30:00.000Z | 30 mionaidean | o chionn 30 mionaidean | 1 uair de thìde |
+| 1999-12-31T23:15:00.000Z | 45 mionaidean | o chionn 45 mionaidean | 1 uair de thìde |
+| 1999-12-31T23:00:00.000Z | 1 uair de thìde | o chionn 1 uair de thìde | 1 uair de thìde |
+| 1999-12-31T18:00:00.000Z | 6 uairean de thìde | o chionn 6 uairean de thìde | 6 uairean de thìde |
+| 1999-12-30T00:00:00.000Z | 2 là | o chionn 2 là | 48 uairean de thìde |
+| 1999-12-15T00:00:00.000Z | 17 là | o chionn 17 là | 408 uairean de thìde |
+| 1999-12-01T00:00:00.000Z | 1 mìos | o chionn 1 mìos | 744 uairean de thìde |
+| 1999-11-01T00:00:00.000Z | 2 mìosan | o chionn 2 mìosan | 1464 uairean de thìde |
+| 1999-06-01T00:00:00.000Z | 7 mìosan | o chionn 7 mìosan | 5136 uairean de thìde |
+| 1999-01-01T00:00:00.000Z | 1 bhliadhna | o chionn 1 bhliadhna | 8760 uairean de thìde |
+| 1998-12-01T00:00:00.000Z | 1 bhliadhna | o chionn 1 bhliadhna | 9504 uairean de thìde |
+| 1998-06-01T00:00:00.000Z | 2 bliadhna | o chionn 2 bliadhna | 13896 uairean de thìde |
+| 1998-01-01T00:00:00.000Z | 2 bliadhna | o chionn 2 bliadhna | 17520 uairean de thìde |
+| 1997-01-01T00:00:00.000Z | 3 bliadhna | o chionn 3 bliadhna | 26280 uairean de thìde |
+| 1996-01-01T00:00:00.000Z | 4 bliadhna | o chionn 4 bliadhna | 35064 uairean de thìde |
+| 1995-01-01T00:00:00.000Z | 5 bliadhna | o chionn 5 bliadhna | 43824 uairean de thìde |
+| 1994-01-01T00:00:00.000Z | 6 bliadhna | o chionn 6 bliadhna | 52584 uairean de thìde |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | --------------------------------- |
+| 2000-01-10T00:00:00.000Z | 01/10/2000 |
+| 2000-01-05T00:00:00.000Z | Diciadain aig 12:00 M. |
+| 2000-01-02T00:00:00.000Z | a-màireach aig 12:00 M. |
+| 2000-01-01T00:00:00.000Z | an-diugh aig 12:00 M. |
+| 1999-12-31T00:00:00.000Z | an-dè aig 12:00 M. |
+| 1999-12-27T00:00:00.000Z | mu dheireadh Diluain aig 12:00 M. |
+| 1999-12-21T00:00:00.000Z | 12/21/1999 |
diff --git a/date-fns/src/locale/gl/_lib/formatDistance/index.js b/date-fns/src/locale/gl/_lib/formatDistance/index.js
new file mode 100644
index 0000000..dbb841f
--- /dev/null
+++ b/date-fns/src/locale/gl/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'menos dun segundo',
+ other: 'menos de {{count}} segundos'
+ },
+
+ xSeconds: {
+ one: '1 segundo',
+ other: '{{count}} segundos'
+ },
+
+ halfAMinute: 'medio minuto',
+
+ lessThanXMinutes: {
+ one: 'menos dun minuto',
+ other: 'menos de {{count}} minutos'
+ },
+
+ xMinutes: {
+ one: '1 minuto',
+ other: '{{count}} minutos'
+ },
+
+ aboutXHours: {
+ one: 'arredor dunha hora',
+ other: 'arredor de {{count}} horas'
+ },
+
+ xHours: {
+ one: '1 hora',
+ other: '{{count}} horas'
+ },
+
+ xDays: {
+ one: '1 día',
+ other: '{{count}} días'
+ },
+
+ aboutXWeeks: {
+ one: 'arredor dunha semana',
+ other: 'arredor de {{count}} semanas'
+ },
+
+ xWeeks: {
+ one: '1 semana',
+ other: '{{count}} semanas'
+ },
+
+ aboutXMonths: {
+ one: 'arredor de 1 mes',
+ other: 'arredor de {{count}} meses'
+ },
+
+ xMonths: {
+ one: '1 mes',
+ other: '{{count}} meses'
+ },
+
+ aboutXYears: {
+ one: 'arredor dun ano',
+ other: 'arredor de {{count}} anos'
+ },
+
+ xYears: {
+ one: '1 ano',
+ other: '{{count}} anos'
+ },
+
+ overXYears: {
+ one: 'máis dun ano',
+ other: 'máis de {{count}} anos'
+ },
+
+ almostXYears: {
+ one: 'case un ano',
+ other: 'case {{count}} anos'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'en ' + result
+ } else {
+ return 'hai ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/gl/_lib/formatLong/index.js b/date-fns/src/locale/gl/_lib/formatLong/index.js
new file mode 100644
index 0000000..e95cb7f
--- /dev/null
+++ b/date-fns/src/locale/gl/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, d 'de' MMMM y",
+ long: "d 'de' MMMM y",
+ medium: 'd MMM y',
+ short: 'dd/MM/y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'ás' {{time}}",
+ long: "{{date}} 'ás' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/gl/_lib/formatRelative/index.js b/date-fns/src/locale/gl/_lib/formatRelative/index.js
new file mode 100644
index 0000000..36f217f
--- /dev/null
+++ b/date-fns/src/locale/gl/_lib/formatRelative/index.js
@@ -0,0 +1,24 @@
+var formatRelativeLocale = {
+ lastWeek: "'o' eeee 'pasado á' LT",
+ yesterday: "'onte á' p",
+ today: "'hoxe á' p",
+ tomorrow: "'mañá á' p",
+ nextWeek: "eeee 'á' p",
+ other: 'P'
+}
+
+var formatRelativeLocalePlural = {
+ lastWeek: "'o' eeee 'pasado ás' p",
+ yesterday: "'onte ás' p",
+ today: "'hoxe ás' p",
+ tomorrow: "'mañá ás' p",
+ nextWeek: "eeee 'ás' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, date, _baseDate, _options) {
+ if (date.getUTCHours() !== 1) {
+ return formatRelativeLocalePlural[token]
+ }
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/gl/_lib/localize/index.js b/date-fns/src/locale/gl/_lib/localize/index.js
new file mode 100644
index 0000000..aea5255
--- /dev/null
+++ b/date-fns/src/locale/gl/_lib/localize/index.js
@@ -0,0 +1,158 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['AC', 'DC'],
+ abbreviated: ['AC', 'DC'],
+ wide: ['antes de cristo', 'despois de cristo']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['T1', 'T2', 'T3', 'T4'],
+ wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']
+}
+
+var monthValues = {
+ narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],
+ abbreviated: [
+ 'xan',
+ 'feb',
+ 'mar',
+ 'abr',
+ 'mai',
+ 'xun',
+ 'xul',
+ 'ago',
+ 'set',
+ 'out',
+ 'nov',
+ 'dec'
+ ],
+ wide: [
+ 'xaneiro',
+ 'febreiro',
+ 'marzo',
+ 'abril',
+ 'maio',
+ 'xuño',
+ 'xullo',
+ 'agosto',
+ 'setembro',
+ 'outubro',
+ 'novembro',
+ 'decembro'
+ ]
+}
+
+var dayValues = {
+ narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],
+ short: ['do', 'lu', 'ma', 'me', 'xo', 've', 'sa'],
+ abbreviated: ['dom', 'lun', 'mar', 'mer', 'xov', 'ven', 'sab'],
+ wide: ['domingo', 'luns', 'martes', 'mércores', 'xoves', 'venres', 'sábado']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mn',
+ noon: 'md',
+ morning: 'mañá',
+ afternoon: 'tarde',
+ evening: 'tarde',
+ night: 'noite'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'medianoite',
+ noon: 'mediodía',
+ morning: 'mañá',
+ afternoon: 'tarde',
+ evening: 'tardiña',
+ night: 'noite'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'medianoite',
+ noon: 'mediodía',
+ morning: 'mañá',
+ afternoon: 'tarde',
+ evening: 'tardiña',
+ night: 'noite'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mn',
+ noon: 'md',
+ morning: 'da mañá',
+ afternoon: 'da tarde',
+ evening: 'da tardiña',
+ night: 'da noite'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'medianoite',
+ noon: 'mediodía',
+ morning: 'da mañá',
+ afternoon: 'da tarde',
+ evening: 'da tardiña',
+ night: 'da noite'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'medianoite',
+ noon: 'mediodía',
+ morning: 'da mañá',
+ afternoon: 'da tarde',
+ evening: 'da tardiña',
+ night: 'da noite'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + 'º'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/gl/_lib/match/index.js b/date-fns/src/locale/gl/_lib/match/index.js
new file mode 100644
index 0000000..08a957c
--- /dev/null
+++ b/date-fns/src/locale/gl/_lib/match/index.js
@@ -0,0 +1,141 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(º)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ac|dc|a|d)/i,
+ abbreviated: /^(a\.?\s?c\.?|a\.?\s?e\.?\s?c\.?|d\.?\s?c\.?|e\.?\s?c\.?)/i,
+ wide: /^(antes de cristo|antes da era com[uú]n|despois de cristo|era com[uú]n)/i
+}
+var parseEraPatterns = {
+ any: [/^ac/i, /^dc/i],
+ wide: [
+ /^(antes de cristo|antes da era com[uú]n)/i,
+ /^(despois de cristo|era com[uú]n)/i
+ ]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^T[1234]/i,
+ wide: /^[1234](º)? trimestre/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[xfmasond]/i,
+ abbreviated: /^(xan|feb|mar|abr|mai|xun|xul|ago|set|out|nov|dec)/i,
+ wide: /^(xaneiro|febreiro|marzo|abril|maio|xuño|xullo|agosto|setembro|outubro|novembro|decembro)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^x/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^x/i,
+ /^x/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^xan/i,
+ /^feb/i,
+ /^mar/i,
+ /^abr/i,
+ /^mai/i,
+ /^xun/i,
+ /^xul/i,
+ /^ago/i,
+ /^set/i,
+ /^out/i,
+ /^nov/i,
+ /^dec/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[dlmxvs]/i,
+ short: /^(do|lu|ma|me|xo|ve|sa)/i,
+ abbreviated: /^(dom|lun|mar|mer|xov|ven|sab)/i,
+ wide: /^(domingo|luns|martes|m[eé]rcores|xoves|venres|s[áa]bado)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^x/i, /^v/i, /^s/i],
+ any: [/^do/i, /^lu/i, /^ma/i, /^me/i, /^xo/i, /^ve/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mn|md|(da|[aá]s) (mañ[aá]|tarde|noite))/i,
+ any: /^([ap]\.?\s?m\.?|medianoite|mediod[ií]a|(da|[aá]s) (mañ[aá]|tarde|noite))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mn/i,
+ noon: /^md/i,
+ morning: /mañ[aá]/i,
+ afternoon: /tarde/i,
+ evening: /tardiña/i,
+ night: /noite/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/gl/index.d.ts b/date-fns/src/locale/gl/index.d.ts
new file mode 100644
index 0000000..67954c6
--- /dev/null
+++ b/date-fns/src/locale/gl/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { gl } from 'date-fns/locale'
+export default gl
diff --git a/date-fns/src/locale/gl/index.js b/date-fns/src/locale/gl/index.js
new file mode 100644
index 0000000..67561fe
--- /dev/null
+++ b/date-fns/src/locale/gl/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Galician locale.
+ * @language Galician
+ * @iso-639-2 glg
+ * @author Alberto Doval - Cocodin Technology[@cocodinTech]{@link https://github.com/cocodinTech}
+ * @author Fidel Pita [@fidelpita]{@link https://github.com/fidelpita}
+ */
+var locale = {
+ code: 'gl',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/gl/index.js.flow b/date-fns/src/locale/gl/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/gl/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/gl/snapshot.md b/date-fns/src/locale/gl/snapshot.md
new file mode 100644
index 0000000..46fa888
--- /dev/null
+++ b/date-fns/src/locale/gl/snapshot.md
@@ -0,0 +1,304 @@
+# Galician (gl) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | --------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987º | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5º | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987º | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5º | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | xul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | febreiro | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | xullo | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | Invalid Date |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | xul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | febreiro | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | xullo | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | Invalid Date |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28º | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42º | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365º | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | luns | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | venres | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | luns | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | venres | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | luns | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | venres | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | luns | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | venres | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | lu | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ve | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | da mañá | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tardiña | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | da mañá | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tardiña | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | da mañá | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tardiña | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | da mañá | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tardiña | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | da mañá | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tardiña | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1º | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55º | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1º | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55º | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 de febreiro 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 de maio 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | mércores, 11 de febreiro 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | domingo, 29 de maio 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 feb 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 de febreiro 1987 ás 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 de maio 1453 ás 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | mércores, 11 de febreiro 1987 ás 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | domingo, 29 de maio 1453 ás 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | arredor de 6 anos | arredor de 6 anos | en arredor de 6 anos |
+| 2005-01-01T00:00:00.000Z | arredor de 5 anos | arredor de 5 anos | en arredor de 5 anos |
+| 2004-01-01T00:00:00.000Z | arredor de 4 anos | arredor de 4 anos | en arredor de 4 anos |
+| 2003-01-01T00:00:00.000Z | arredor de 3 anos | arredor de 3 anos | en arredor de 3 anos |
+| 2002-01-01T00:00:00.000Z | arredor de 2 anos | arredor de 2 anos | en arredor de 2 anos |
+| 2001-06-01T00:00:00.000Z | máis dun ano | máis dun ano | en máis dun ano |
+| 2001-02-01T00:00:00.000Z | arredor dun ano | arredor dun ano | en arredor dun ano |
+| 2001-01-01T00:00:00.000Z | arredor dun ano | arredor dun ano | en arredor dun ano |
+| 2000-06-01T00:00:00.000Z | 5 meses | 5 meses | en 5 meses |
+| 2000-03-01T00:00:00.000Z | 2 meses | 2 meses | en 2 meses |
+| 2000-02-01T00:00:00.000Z | arredor de 1 mes | arredor de 1 mes | en arredor de 1 mes |
+| 2000-01-15T00:00:00.000Z | 14 días | 14 días | en 14 días |
+| 2000-01-02T00:00:00.000Z | 1 día | 1 día | en 1 día |
+| 2000-01-01T06:00:00.000Z | arredor de 6 horas | arredor de 6 horas | en arredor de 6 horas |
+| 2000-01-01T01:00:00.000Z | arredor dunha hora | arredor dunha hora | en arredor dunha hora |
+| 2000-01-01T00:45:00.000Z | arredor dunha hora | arredor dunha hora | en arredor dunha hora |
+| 2000-01-01T00:30:00.000Z | 30 minutos | 30 minutos | en 30 minutos |
+| 2000-01-01T00:15:00.000Z | 15 minutos | 15 minutos | en 15 minutos |
+| 2000-01-01T00:01:00.000Z | 1 minuto | 1 minuto | en 1 minuto |
+| 2000-01-01T00:00:25.000Z | menos dun minuto | medio minuto | en menos dun minuto |
+| 2000-01-01T00:00:15.000Z | menos dun minuto | menos de 20 segundos | en menos dun minuto |
+| 2000-01-01T00:00:05.000Z | menos dun minuto | menos de 10 segundos | en menos dun minuto |
+| 2000-01-01T00:00:00.000Z | menos dun minuto | menos de 5 segundos | hai menos dun minuto |
+| 1999-12-31T23:59:55.000Z | menos dun minuto | menos de 10 segundos | hai menos dun minuto |
+| 1999-12-31T23:59:45.000Z | menos dun minuto | menos de 20 segundos | hai menos dun minuto |
+| 1999-12-31T23:59:35.000Z | menos dun minuto | medio minuto | hai menos dun minuto |
+| 1999-12-31T23:59:00.000Z | 1 minuto | 1 minuto | hai 1 minuto |
+| 1999-12-31T23:45:00.000Z | 15 minutos | 15 minutos | hai 15 minutos |
+| 1999-12-31T23:30:00.000Z | 30 minutos | 30 minutos | hai 30 minutos |
+| 1999-12-31T23:15:00.000Z | arredor dunha hora | arredor dunha hora | hai arredor dunha hora |
+| 1999-12-31T23:00:00.000Z | arredor dunha hora | arredor dunha hora | hai arredor dunha hora |
+| 1999-12-31T18:00:00.000Z | arredor de 6 horas | arredor de 6 horas | hai arredor de 6 horas |
+| 1999-12-30T00:00:00.000Z | 2 días | 2 días | hai 2 días |
+| 1999-12-15T00:00:00.000Z | 17 días | 17 días | hai 17 días |
+| 1999-12-01T00:00:00.000Z | arredor de 1 mes | arredor de 1 mes | hai arredor de 1 mes |
+| 1999-11-01T00:00:00.000Z | 2 meses | 2 meses | hai 2 meses |
+| 1999-06-01T00:00:00.000Z | 7 meses | 7 meses | hai 7 meses |
+| 1999-01-01T00:00:00.000Z | arredor dun ano | arredor dun ano | hai arredor dun ano |
+| 1998-12-01T00:00:00.000Z | arredor dun ano | arredor dun ano | hai arredor dun ano |
+| 1998-06-01T00:00:00.000Z | máis dun ano | máis dun ano | hai máis dun ano |
+| 1998-01-01T00:00:00.000Z | arredor de 2 anos | arredor de 2 anos | hai arredor de 2 anos |
+| 1997-01-01T00:00:00.000Z | arredor de 3 anos | arredor de 3 anos | hai arredor de 3 anos |
+| 1996-01-01T00:00:00.000Z | arredor de 4 anos | arredor de 4 anos | hai arredor de 4 anos |
+| 1995-01-01T00:00:00.000Z | arredor de 5 anos | arredor de 5 anos | hai arredor de 5 anos |
+| 1994-01-01T00:00:00.000Z | arredor de 6 anos | arredor de 6 anos | hai arredor de 6 anos |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 anos | en 6 anos | 52608 horas |
+| 2005-01-01T00:00:00.000Z | 5 anos | en 5 anos | 43848 horas |
+| 2004-01-01T00:00:00.000Z | 4 anos | en 4 anos | 35064 horas |
+| 2003-01-01T00:00:00.000Z | 3 anos | en 3 anos | 26304 horas |
+| 2002-01-01T00:00:00.000Z | 2 anos | en 2 anos | 17544 horas |
+| 2001-06-01T00:00:00.000Z | 1 ano | en 1 ano | 12408 horas |
+| 2001-02-01T00:00:00.000Z | 1 ano | en 1 ano | 9528 horas |
+| 2001-01-01T00:00:00.000Z | 1 ano | en 1 ano | 8784 horas |
+| 2000-06-01T00:00:00.000Z | 5 meses | en 5 meses | 3648 horas |
+| 2000-03-01T00:00:00.000Z | 2 meses | en 2 meses | 1440 horas |
+| 2000-02-01T00:00:00.000Z | 1 mes | en 1 mes | 744 horas |
+| 2000-01-15T00:00:00.000Z | 14 días | en 14 días | 336 horas |
+| 2000-01-02T00:00:00.000Z | 1 día | en 1 día | 24 horas |
+| 2000-01-01T06:00:00.000Z | 6 horas | en 6 horas | 6 horas |
+| 2000-01-01T01:00:00.000Z | 1 hora | en 1 hora | 1 hora |
+| 2000-01-01T00:45:00.000Z | 45 minutos | en 45 minutos | 1 hora |
+| 2000-01-01T00:30:00.000Z | 30 minutos | en 30 minutos | 1 hora |
+| 2000-01-01T00:15:00.000Z | 15 minutos | en 15 minutos | 0 horas |
+| 2000-01-01T00:01:00.000Z | 1 minuto | en 1 minuto | 0 horas |
+| 2000-01-01T00:00:25.000Z | 25 segundos | en 25 segundos | 0 horas |
+| 2000-01-01T00:00:15.000Z | 15 segundos | en 15 segundos | 0 horas |
+| 2000-01-01T00:00:05.000Z | 5 segundos | en 5 segundos | 0 horas |
+| 2000-01-01T00:00:00.000Z | 0 segundos | hai 0 segundos | 0 horas |
+| 1999-12-31T23:59:55.000Z | 5 segundos | hai 5 segundos | 0 horas |
+| 1999-12-31T23:59:45.000Z | 15 segundos | hai 15 segundos | 0 horas |
+| 1999-12-31T23:59:35.000Z | 25 segundos | hai 25 segundos | 0 horas |
+| 1999-12-31T23:59:00.000Z | 1 minuto | hai 1 minuto | 0 horas |
+| 1999-12-31T23:45:00.000Z | 15 minutos | hai 15 minutos | 0 horas |
+| 1999-12-31T23:30:00.000Z | 30 minutos | hai 30 minutos | 1 hora |
+| 1999-12-31T23:15:00.000Z | 45 minutos | hai 45 minutos | 1 hora |
+| 1999-12-31T23:00:00.000Z | 1 hora | hai 1 hora | 1 hora |
+| 1999-12-31T18:00:00.000Z | 6 horas | hai 6 horas | 6 horas |
+| 1999-12-30T00:00:00.000Z | 2 días | hai 2 días | 48 horas |
+| 1999-12-15T00:00:00.000Z | 17 días | hai 17 días | 408 horas |
+| 1999-12-01T00:00:00.000Z | 1 mes | hai 1 mes | 744 horas |
+| 1999-11-01T00:00:00.000Z | 2 meses | hai 2 meses | 1464 horas |
+| 1999-06-01T00:00:00.000Z | 7 meses | hai 7 meses | 5136 horas |
+| 1999-01-01T00:00:00.000Z | 1 ano | hai 1 ano | 8760 horas |
+| 1998-12-01T00:00:00.000Z | 1 ano | hai 1 ano | 9504 horas |
+| 1998-06-01T00:00:00.000Z | 2 anos | hai 2 anos | 13896 horas |
+| 1998-01-01T00:00:00.000Z | 2 anos | hai 2 anos | 17520 horas |
+| 1997-01-01T00:00:00.000Z | 3 anos | hai 3 anos | 26280 horas |
+| 1996-01-01T00:00:00.000Z | 4 anos | hai 4 anos | 35064 horas |
+| 1995-01-01T00:00:00.000Z | 5 anos | hai 5 anos | 43824 horas |
+| 1994-01-01T00:00:00.000Z | 6 anos | hai 6 anos | 52584 horas |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | mércores ás 00:00 |
+| 2000-01-02T00:00:00.000Z | mañá ás 00:00 |
+| 2000-01-01T00:00:00.000Z | hoxe ás 00:00 |
+| 1999-12-31T00:00:00.000Z | onte ás 00:00 |
+| 1999-12-27T00:00:00.000Z | o luns pasado ás 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/gu/_lib/formatDistance/index.js b/date-fns/src/locale/gu/_lib/formatDistance/index.js
new file mode 100644
index 0000000..1502cc3
--- /dev/null
+++ b/date-fns/src/locale/gu/_lib/formatDistance/index.js
@@ -0,0 +1,102 @@
+// Source: https://www.unicode.org/cldr/charts/32/summary/gu.html
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'હમણાં', // CLDR #1461
+ other: '​આશરે {{count}} સેકંડ'
+ },
+
+ xSeconds: {
+ one: '1 સેકંડ',
+ other: '{{count}} સેકંડ'
+ },
+
+ halfAMinute: 'અડધી મિનિટ',
+
+ lessThanXMinutes: {
+ one: 'આ મિનિટ', // CLDR #1448
+ other: '​આશરે {{count}} મિનિટ'
+ },
+
+ xMinutes: {
+ one: '1 મિનિટ',
+ other: '{{count}} મિનિટ'
+ },
+
+ aboutXHours: {
+ one: '​આશરે 1 કલાક',
+ other: '​આશરે {{count}} કલાક'
+ },
+
+ xHours: {
+ one: '1 કલાક',
+ other: '{{count}} કલાક'
+ },
+
+ xDays: {
+ one: '1 દિવસ',
+ other: '{{count}} દિવસ'
+ },
+
+ aboutXWeeks: {
+ one: 'આશરે 1 અઠવાડિયું',
+ other: 'આશરે {{count}} અઠવાડિયા'
+ },
+
+ xWeeks: {
+ one: '1 અઠવાડિયું',
+ other: '{{count}} અઠવાડિયા'
+ },
+
+ aboutXMonths: {
+ one: 'આશરે 1 મહિનો',
+ other: 'આશરે {{count}} મહિના'
+ },
+
+ xMonths: {
+ one: '1 મહિનો',
+ other: '{{count}} મહિના'
+ },
+
+ aboutXYears: {
+ one: 'આશરે 1 વર્ષ',
+ other: 'આશરે {{count}} વર્ષ'
+ },
+
+ xYears: {
+ one: '1 વર્ષ',
+ other: '{{count}} વર્ષ'
+ },
+
+ overXYears: {
+ one: '1 વર્ષથી વધુ',
+ other: '{{count}} વર્ષથી વધુ'
+ },
+
+ almostXYears: {
+ one: 'લગભગ 1 વર્ષ',
+ other: 'લગભગ {{count}} વર્ષ'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + 'માં'
+ } else {
+ return result + ' પહેલાં'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/gu/_lib/formatLong/index.js b/date-fns/src/locale/gu/_lib/formatLong/index.js
new file mode 100644
index 0000000..064953b
--- /dev/null
+++ b/date-fns/src/locale/gu/_lib/formatLong/index.js
@@ -0,0 +1,42 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+//Source: https://www.unicode.org/cldr/charts/32/summary/gu.html
+var dateFormats = {
+ full: 'EEEE, d MMMM, y', // CLDR #1825
+ long: 'd MMMM, y', // CLDR #1826
+ medium: 'd MMM, y', // CLDR #1827
+ short: 'd/M/yy' // CLDR #1828
+}
+
+var timeFormats = {
+ full: 'hh:mm:ss a zzzz', // CLDR #1829
+ long: 'hh:mm:ss a z', // CLDR #1830
+ medium: 'hh:mm:ss a', // CLDR #1831
+ short: 'hh:mm a' // CLDR #1832
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}', // CLDR #1833
+ long: '{{date}} {{time}}', // CLDR #1834
+ medium: '{{date}} {{time}}', // CLDR #1835
+ short: '{{date}} {{time}}' // CLDR #1836
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/gu/_lib/formatRelative/index.js b/date-fns/src/locale/gu/_lib/formatRelative/index.js
new file mode 100644
index 0000000..367399b
--- /dev/null
+++ b/date-fns/src/locale/gu/_lib/formatRelative/index.js
@@ -0,0 +1,14 @@
+// Source: https://www.unicode.org/cldr/charts/32/summary/gu.html
+
+var formatRelativeLocale = {
+ lastWeek: "'પાછલા' eeee p", // CLDR #1384
+ yesterday: "'ગઈકાલે' p", // CLDR #1409
+ today: "'આજે' p", // CLDR #1410
+ tomorrow: "'આવતીકાલે' p", // CLDR #1411
+ nextWeek: 'eeee p', // CLDR #1386
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/gu/_lib/localize/index.js b/date-fns/src/locale/gu/_lib/localize/index.js
new file mode 100644
index 0000000..690beaf
--- /dev/null
+++ b/date-fns/src/locale/gu/_lib/localize/index.js
@@ -0,0 +1,181 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+// https://www.unicode.org/cldr/charts/32/summary/gu.html
+// #1621 - #1630
+var eraValues = {
+ narrow: ['ઈસપૂ', 'ઈસ'],
+ abbreviated: ['ઈ.સ.પૂર્વે', 'ઈ.સ.'],
+ wide: ['ઈસવીસન પૂર્વે', 'ઈસવીસન']
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/gu.html
+// #1631 - #1654
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1લો ત્રિમાસ', '2જો ત્રિમાસ', '3જો ત્રિમાસ', '4થો ત્રિમાસ']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+
+// https://www.unicode.org/cldr/charts/32/summary/gu.html
+// #1655 - #1726
+var monthValues = {
+ narrow: ['જા', 'ફે', 'મા', 'એ', 'મે', 'જૂ', 'જુ', 'ઓ', 'સ', 'ઓ', 'ન', 'ડિ'],
+ abbreviated: [
+ 'જાન્યુ',
+ 'ફેબ્રુ',
+ 'માર્ચ',
+ 'એપ્રિલ',
+ 'મે',
+ 'જૂન',
+ 'જુલાઈ',
+ 'ઑગસ્ટ',
+ 'સપ્ટે',
+ 'ઓક્ટો',
+ 'નવે',
+ 'ડિસે'
+ ],
+ wide: [
+ 'જાન્યુઆરી',
+ 'ફેબ્રુઆરી',
+ 'માર્ચ',
+ 'એપ્રિલ',
+ 'મે',
+ 'જૂન',
+ 'જુલાઇ',
+ 'ઓગસ્ટ',
+ 'સપ્ટેમ્બર',
+ 'ઓક્ટોબર',
+ 'નવેમ્બર',
+ 'ડિસેમ્બર'
+ ]
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/gu.html
+// #1727 - #1768
+var dayValues = {
+ narrow: ['ર', 'સો', 'મં', 'બુ', 'ગુ', 'શુ', 'શ'],
+ short: ['ર', 'સો', 'મં', 'બુ', 'ગુ', 'શુ', 'શ'],
+ abbreviated: ['રવિ', 'સોમ', 'મંગળ', 'બુધ', 'ગુરુ', 'શુક્ર', 'શનિ'],
+ wide: [
+ 'રવિવાર' /* Sunday */,
+ 'સોમવાર' /* Monday */,
+ 'મંગળવાર' /* Tuesday */,
+ 'બુધવાર' /* Wednesday */,
+ 'ગુરુવાર' /* Thursday */,
+ 'શુક્રવાર' /* Friday */,
+ 'શનિવાર' /* Saturday */
+ ]
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/gu.html
+// #1783 - #1824
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'મ.રાત્રિ',
+ noon: 'બ.',
+ morning: 'સવારે',
+ afternoon: 'બપોરે',
+ evening: 'સાંજે',
+ night: 'રાત્રે'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: '​મધ્યરાત્રિ',
+ noon: 'બપોરે',
+ morning: 'સવારે',
+ afternoon: 'બપોરે',
+ evening: 'સાંજે',
+ night: 'રાત્રે'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: '​મધ્યરાત્રિ',
+ noon: 'બપોરે',
+ morning: 'સવારે',
+ afternoon: 'બપોરે',
+ evening: 'સાંજે',
+ night: 'રાત્રે'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'મ.રાત્રિ',
+ noon: 'બપોરે',
+ morning: 'સવારે',
+ afternoon: 'બપોરે',
+ evening: 'સાંજે',
+ night: 'રાત્રે'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'મધ્યરાત્રિ',
+ noon: 'બપોરે',
+ morning: 'સવારે',
+ afternoon: 'બપોરે',
+ evening: 'સાંજે',
+ night: 'રાત્રે'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: '​મધ્યરાત્રિ',
+ noon: 'બપોરે',
+ morning: 'સવારે',
+ afternoon: 'બપોરે',
+ evening: 'સાંજે',
+ night: 'રાત્રે'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+ return number
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/gu/_lib/match/index.js b/date-fns/src/locale/gu/_lib/match/index.js
new file mode 100644
index 0000000..5386ce3
--- /dev/null
+++ b/date-fns/src/locale/gu/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(લ|જ|થ|ઠ્ઠ|મ)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ઈસપૂ|ઈસ)/i,
+ abbreviated: /^(ઈ\.સ\.પૂર્વે|ઈ\.સ\.)/i,
+ wide: /^(ઈસવીસન\sપૂર્વે|ઈસવીસન)/i
+}
+var parseEraPatterns = {
+ any: [/^(ઈસપૂ|ઈસ)/i, /^(ઈ\.સ\.પૂર્વે|ઈ\.સ\.)/i, /^(ઈસવીસન\sપૂર્વે|ઈસવીસન)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](લો|જો|થો)? ત્રિમાસ/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[જાફેમાએમેજૂજુઓસઓનડિ]/i,
+ abbreviated: /^(જાન્યુ|ફેબ્રુ|માર્ચ|એપ્રિલ|મે|જૂન|જુલાઈ|ઑગસ્ટ|સપ્ટે|ઓક્ટો|નવે|ડિસે)/i,
+ wide: /^(જાન્યુઆરી|ફેબ્રુઆરી|માર્ચ|એપ્રિલ|મે|જૂન|જુલાઇ|ઓગસ્ટ|સપ્ટેમ્બર|ઓક્ટોબર|નવેમ્બર|ડિસેમ્બર)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^જા/i,
+ /^ફે/i,
+ /^મા/i,
+ /^એ/i,
+ /^મે/i,
+ /^જૂ/i,
+ /^જુ/i,
+ /^ઑગ/i,
+ /^સ/i,
+ /^ઓક્ટો/i,
+ /^ન/i,
+ /^ડિ/i
+ ],
+ any: [
+ /^જા/i,
+ /^ફે/i,
+ /^મા/i,
+ /^એ/i,
+ /^મે/i,
+ /^જૂ/i,
+ /^જુ/i,
+ /^ઑગ/i,
+ /^સ/i,
+ /^ઓક્ટો/i,
+ /^ન/i,
+ /^ડિ/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(ર|સો|મં|બુ|ગુ|શુ|શ)/i,
+ short: /^(ર|સો|મં|બુ|ગુ|શુ|શ)/i,
+ abbreviated: /^(રવિ|સોમ|મંગળ|બુધ|ગુરુ|શુક્ર|શનિ)/i,
+ wide: /^(રવિવાર|સોમવાર|મંગળવાર|બુધવાર|ગુરુવાર|શુક્રવાર|શનિવાર)/i
+}
+var parseDayPatterns = {
+ narrow: [/^ર/i, /^સો/i, /^મં/i, /^બુ/i, /^ગુ/i, /^શુ/i, /^શ/i],
+ any: [/^ર/i, /^સો/i, /^મં/i, /^બુ/i, /^ગુ/i, /^શુ/i, /^શ/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|મ\.?|સ|બ|સાં|રા)/i,
+ any: /^(a|p|મ\.?|સ|બ|સાં|રા)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^મ\.?/i,
+ noon: /^બ/i,
+ morning: /સ/i,
+ afternoon: /બ/i,
+ evening: /સાં/i,
+ night: /રા/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/gu/index.d.ts b/date-fns/src/locale/gu/index.d.ts
new file mode 100644
index 0000000..42642b6
--- /dev/null
+++ b/date-fns/src/locale/gu/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { gu } from 'date-fns/locale'
+export default gu
diff --git a/date-fns/src/locale/gu/index.js b/date-fns/src/locale/gu/index.js
new file mode 100644
index 0000000..69026da
--- /dev/null
+++ b/date-fns/src/locale/gu/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Gujarati locale (India).
+ * @language Gujarati
+ * @iso-639-2 guj
+ * @author Manaday Mavani [@ManadayM]{@link https://github.com/manadaym}
+ */
+var locale = {
+ code: 'gu',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/gu/index.js.flow b/date-fns/src/locale/gu/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/gu/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/gu/snapshot.md b/date-fns/src/locale/gu/snapshot.md
new file mode 100644
index 0000000..21353dd
--- /dev/null
+++ b/date-fns/src/locale/gu/snapshot.md
@@ -0,0 +1,304 @@
+# Gujarati (gu) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4 | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1લો ત્રિમાસ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2જો ત્રિમાસ | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1લો ત્રિમાસ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2જો ત્રિમાસ | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | ફેબ્રુ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | જુલાઈ | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | ફેબ્રુઆરી | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | જુલાઇ | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ફે | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | જુ | Invalid Date |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | ફેબ્રુ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | જુલાઈ | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | ફેબ્રુઆરી | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | જુલાઇ | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ફે | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | જુ | Invalid Date |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | સોમ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્ર | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | સોમ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્ર | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | સોમ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્ર | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | સોમવાર | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્રવાર | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | સો | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુ | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | સો | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુ | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | સોમ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્ર | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | સોમવાર | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્રવાર | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | સો | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુ | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | સો | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુ | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | સોમ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્ર | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | સોમવાર | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્રવાર | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | સો | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુ | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | સો | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુ | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | સોમ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્ર | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | સોમવાર | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુક્રવાર | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | સો | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુ | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | સો | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | શુ | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| | aa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| | aaa | 2019-02-11T11:13:14.015Z | am | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | am | Invalid Date |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| | bb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| | bbb | 2019-02-11T11:13:14.015Z | am | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | am | Invalid Date |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | સવારે | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | બપોરે | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | સાંજે | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | રાત્રે | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | સવારે | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | બપોરે | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | સાંજે | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | રાત્રે | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | સવારે | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | બપોરે | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | સાંજે | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | રાત્રે | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | સવારે | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | બપોરે | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | સાંજે | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | રાત્રે | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | સવારે | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | બપોરે | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | સાંજે | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | રાત્રે | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/2/87 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/53 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 ફેબ્રુ, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 મે, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 ફેબ્રુઆરી, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 મે, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | બુધવાર, 11 ફેબ્રુઆરી, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | રવિવાર, 29 મે, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 PM | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59 PM | Invalid Date |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 PM | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM | Invalid Date |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+0 | Invalid Date |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+00:00 | Invalid Date |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/2/87 12:13 PM | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29/5/53 11:59 PM | Invalid Date |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 ફેબ્રુ, 1987 12:13:14 PM | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29 મે, 1453 11:59:59 PM | Invalid Date |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 ફેબ્રુઆરી, 1987 12:13:14 PM GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29 મે, 1453 11:59:59 PM GMT+0 | Invalid Date |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | બુધવાર, 11 ફેબ્રુઆરી, 1987 12:13:14 PM GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | રવિવાર, 29 મે, 1453 11:59:59 PM GMT+00:00 | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------ | ---------------------- | ------------------- |
+| 2006-01-01T00:00:00.000Z | આશરે 6 વર્ષ | આશરે 6 વર્ષ | આશરે 6 વર્ષમાં |
+| 2005-01-01T00:00:00.000Z | આશરે 5 વર્ષ | આશરે 5 વર્ષ | આશરે 5 વર્ષમાં |
+| 2004-01-01T00:00:00.000Z | આશરે 4 વર્ષ | આશરે 4 વર્ષ | આશરે 4 વર્ષમાં |
+| 2003-01-01T00:00:00.000Z | આશરે 3 વર્ષ | આશરે 3 વર્ષ | આશરે 3 વર્ષમાં |
+| 2002-01-01T00:00:00.000Z | આશરે 2 વર્ષ | આશરે 2 વર્ષ | આશરે 2 વર્ષમાં |
+| 2001-06-01T00:00:00.000Z | 1 વર્ષથી વધુ | 1 વર્ષથી વધુ | 1 વર્ષથી વધુમાં |
+| 2001-02-01T00:00:00.000Z | આશરે 1 વર્ષ | આશરે 1 વર્ષ | આશરે 1 વર્ષમાં |
+| 2001-01-01T00:00:00.000Z | આશરે 1 વર્ષ | આશરે 1 વર્ષ | આશરે 1 વર્ષમાં |
+| 2000-06-01T00:00:00.000Z | 5 મહિના | 5 મહિના | 5 મહિનામાં |
+| 2000-03-01T00:00:00.000Z | 2 મહિના | 2 મહિના | 2 મહિનામાં |
+| 2000-02-01T00:00:00.000Z | આશરે 1 મહિનો | આશરે 1 મહિનો | આશરે 1 મહિનોમાં |
+| 2000-01-15T00:00:00.000Z | 14 દિવસ | 14 દિવસ | 14 દિવસમાં |
+| 2000-01-02T00:00:00.000Z | 1 દિવસ | 1 દિવસ | 1 દિવસમાં |
+| 2000-01-01T06:00:00.000Z | ​આશરે 6 કલાક | ​આશરે 6 કલાક | ​આશરે 6 કલાકમાં |
+| 2000-01-01T01:00:00.000Z | ​આશરે 1 કલાક | ​આશરે 1 કલાક | ​આશરે 1 કલાકમાં |
+| 2000-01-01T00:45:00.000Z | ​આશરે 1 કલાક | ​આશરે 1 કલાક | ​આશરે 1 કલાકમાં |
+| 2000-01-01T00:30:00.000Z | 30 મિનિટ | 30 મિનિટ | 30 મિનિટમાં |
+| 2000-01-01T00:15:00.000Z | 15 મિનિટ | 15 મિનિટ | 15 મિનિટમાં |
+| 2000-01-01T00:01:00.000Z | 1 મિનિટ | 1 મિનિટ | 1 મિનિટમાં |
+| 2000-01-01T00:00:25.000Z | આ મિનિટ | અડધી મિનિટ | આ મિનિટમાં |
+| 2000-01-01T00:00:15.000Z | આ મિનિટ | ​આશરે 20 સેકંડ | આ મિનિટમાં |
+| 2000-01-01T00:00:05.000Z | આ મિનિટ | ​આશરે 10 સેકંડ | આ મિનિટમાં |
+| 2000-01-01T00:00:00.000Z | આ મિનિટ | ​આશરે 5 સેકંડ | આ મિનિટ પહેલાં |
+| 1999-12-31T23:59:55.000Z | આ મિનિટ | ​આશરે 10 સેકંડ | આ મિનિટ પહેલાં |
+| 1999-12-31T23:59:45.000Z | આ મિનિટ | ​આશરે 20 સેકંડ | આ મિનિટ પહેલાં |
+| 1999-12-31T23:59:35.000Z | આ મિનિટ | અડધી મિનિટ | આ મિનિટ પહેલાં |
+| 1999-12-31T23:59:00.000Z | 1 મિનિટ | 1 મિનિટ | 1 મિનિટ પહેલાં |
+| 1999-12-31T23:45:00.000Z | 15 મિનિટ | 15 મિનિટ | 15 મિનિટ પહેલાં |
+| 1999-12-31T23:30:00.000Z | 30 મિનિટ | 30 મિનિટ | 30 મિનિટ પહેલાં |
+| 1999-12-31T23:15:00.000Z | ​આશરે 1 કલાક | ​આશરે 1 કલાક | ​આશરે 1 કલાક પહેલાં |
+| 1999-12-31T23:00:00.000Z | ​આશરે 1 કલાક | ​આશરે 1 કલાક | ​આશરે 1 કલાક પહેલાં |
+| 1999-12-31T18:00:00.000Z | ​આશરે 6 કલાક | ​આશરે 6 કલાક | ​આશરે 6 કલાક પહેલાં |
+| 1999-12-30T00:00:00.000Z | 2 દિવસ | 2 દિવસ | 2 દિવસ પહેલાં |
+| 1999-12-15T00:00:00.000Z | 17 દિવસ | 17 દિવસ | 17 દિવસ પહેલાં |
+| 1999-12-01T00:00:00.000Z | આશરે 1 મહિનો | આશરે 1 મહિનો | આશરે 1 મહિનો પહેલાં |
+| 1999-11-01T00:00:00.000Z | 2 મહિના | 2 મહિના | 2 મહિના પહેલાં |
+| 1999-06-01T00:00:00.000Z | 7 મહિના | 7 મહિના | 7 મહિના પહેલાં |
+| 1999-01-01T00:00:00.000Z | આશરે 1 વર્ષ | આશરે 1 વર્ષ | આશરે 1 વર્ષ પહેલાં |
+| 1998-12-01T00:00:00.000Z | આશરે 1 વર્ષ | આશરે 1 વર્ષ | આશરે 1 વર્ષ પહેલાં |
+| 1998-06-01T00:00:00.000Z | 1 વર્ષથી વધુ | 1 વર્ષથી વધુ | 1 વર્ષથી વધુ પહેલાં |
+| 1998-01-01T00:00:00.000Z | આશરે 2 વર્ષ | આશરે 2 વર્ષ | આશરે 2 વર્ષ પહેલાં |
+| 1997-01-01T00:00:00.000Z | આશરે 3 વર્ષ | આશરે 3 વર્ષ | આશરે 3 વર્ષ પહેલાં |
+| 1996-01-01T00:00:00.000Z | આશરે 4 વર્ષ | આશરે 4 વર્ષ | આશરે 4 વર્ષ પહેલાં |
+| 1995-01-01T00:00:00.000Z | આશરે 5 વર્ષ | આશરે 5 વર્ષ | આશરે 5 વર્ષ પહેલાં |
+| 1994-01-01T00:00:00.000Z | આશરે 6 વર્ષ | આશરે 6 વર્ષ | આશરે 6 વર્ષ પહેલાં |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | -------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 વર્ષ | 6 વર્ષમાં | 52608 કલાક |
+| 2005-01-01T00:00:00.000Z | 5 વર્ષ | 5 વર્ષમાં | 43848 કલાક |
+| 2004-01-01T00:00:00.000Z | 4 વર્ષ | 4 વર્ષમાં | 35064 કલાક |
+| 2003-01-01T00:00:00.000Z | 3 વર્ષ | 3 વર્ષમાં | 26304 કલાક |
+| 2002-01-01T00:00:00.000Z | 2 વર્ષ | 2 વર્ષમાં | 17544 કલાક |
+| 2001-06-01T00:00:00.000Z | 1 વર્ષ | 1 વર્ષમાં | 12408 કલાક |
+| 2001-02-01T00:00:00.000Z | 1 વર્ષ | 1 વર્ષમાં | 9528 કલાક |
+| 2001-01-01T00:00:00.000Z | 1 વર્ષ | 1 વર્ષમાં | 8784 કલાક |
+| 2000-06-01T00:00:00.000Z | 5 મહિના | 5 મહિનામાં | 3648 કલાક |
+| 2000-03-01T00:00:00.000Z | 2 મહિના | 2 મહિનામાં | 1440 કલાક |
+| 2000-02-01T00:00:00.000Z | 1 મહિનો | 1 મહિનોમાં | 744 કલાક |
+| 2000-01-15T00:00:00.000Z | 14 દિવસ | 14 દિવસમાં | 336 કલાક |
+| 2000-01-02T00:00:00.000Z | 1 દિવસ | 1 દિવસમાં | 24 કલાક |
+| 2000-01-01T06:00:00.000Z | 6 કલાક | 6 કલાકમાં | 6 કલાક |
+| 2000-01-01T01:00:00.000Z | 1 કલાક | 1 કલાકમાં | 1 કલાક |
+| 2000-01-01T00:45:00.000Z | 45 મિનિટ | 45 મિનિટમાં | 1 કલાક |
+| 2000-01-01T00:30:00.000Z | 30 મિનિટ | 30 મિનિટમાં | 1 કલાક |
+| 2000-01-01T00:15:00.000Z | 15 મિનિટ | 15 મિનિટમાં | 0 કલાક |
+| 2000-01-01T00:01:00.000Z | 1 મિનિટ | 1 મિનિટમાં | 0 કલાક |
+| 2000-01-01T00:00:25.000Z | 25 સેકંડ | 25 સેકંડમાં | 0 કલાક |
+| 2000-01-01T00:00:15.000Z | 15 સેકંડ | 15 સેકંડમાં | 0 કલાક |
+| 2000-01-01T00:00:05.000Z | 5 સેકંડ | 5 સેકંડમાં | 0 કલાક |
+| 2000-01-01T00:00:00.000Z | 0 સેકંડ | 0 સેકંડ પહેલાં | 0 કલાક |
+| 1999-12-31T23:59:55.000Z | 5 સેકંડ | 5 સેકંડ પહેલાં | 0 કલાક |
+| 1999-12-31T23:59:45.000Z | 15 સેકંડ | 15 સેકંડ પહેલાં | 0 કલાક |
+| 1999-12-31T23:59:35.000Z | 25 સેકંડ | 25 સેકંડ પહેલાં | 0 કલાક |
+| 1999-12-31T23:59:00.000Z | 1 મિનિટ | 1 મિનિટ પહેલાં | 0 કલાક |
+| 1999-12-31T23:45:00.000Z | 15 મિનિટ | 15 મિનિટ પહેલાં | 0 કલાક |
+| 1999-12-31T23:30:00.000Z | 30 મિનિટ | 30 મિનિટ પહેલાં | 1 કલાક |
+| 1999-12-31T23:15:00.000Z | 45 મિનિટ | 45 મિનિટ પહેલાં | 1 કલાક |
+| 1999-12-31T23:00:00.000Z | 1 કલાક | 1 કલાક પહેલાં | 1 કલાક |
+| 1999-12-31T18:00:00.000Z | 6 કલાક | 6 કલાક પહેલાં | 6 કલાક |
+| 1999-12-30T00:00:00.000Z | 2 દિવસ | 2 દિવસ પહેલાં | 48 કલાક |
+| 1999-12-15T00:00:00.000Z | 17 દિવસ | 17 દિવસ પહેલાં | 408 કલાક |
+| 1999-12-01T00:00:00.000Z | 1 મહિનો | 1 મહિનો પહેલાં | 744 કલાક |
+| 1999-11-01T00:00:00.000Z | 2 મહિના | 2 મહિના પહેલાં | 1464 કલાક |
+| 1999-06-01T00:00:00.000Z | 7 મહિના | 7 મહિના પહેલાં | 5136 કલાક |
+| 1999-01-01T00:00:00.000Z | 1 વર્ષ | 1 વર્ષ પહેલાં | 8760 કલાક |
+| 1998-12-01T00:00:00.000Z | 1 વર્ષ | 1 વર્ષ પહેલાં | 9504 કલાક |
+| 1998-06-01T00:00:00.000Z | 2 વર્ષ | 2 વર્ષ પહેલાં | 13896 કલાક |
+| 1998-01-01T00:00:00.000Z | 2 વર્ષ | 2 વર્ષ પહેલાં | 17520 કલાક |
+| 1997-01-01T00:00:00.000Z | 3 વર્ષ | 3 વર્ષ પહેલાં | 26280 કલાક |
+| 1996-01-01T00:00:00.000Z | 4 વર્ષ | 4 વર્ષ પહેલાં | 35064 કલાક |
+| 1995-01-01T00:00:00.000Z | 5 વર્ષ | 5 વર્ષ પહેલાં | 43824 કલાક |
+| 1994-01-01T00:00:00.000Z | 6 વર્ષ | 6 વર્ષ પહેલાં | 52584 કલાક |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | --------------------- |
+| 2000-01-10T00:00:00.000Z | 10/1/00 |
+| 2000-01-05T00:00:00.000Z | બુધવાર 12:00 AM |
+| 2000-01-02T00:00:00.000Z | આવતીકાલે 12:00 AM |
+| 2000-01-01T00:00:00.000Z | આજે 12:00 AM |
+| 1999-12-31T00:00:00.000Z | ગઈકાલે 12:00 AM |
+| 1999-12-27T00:00:00.000Z | પાછલા સોમવાર 12:00 AM |
+| 1999-12-21T00:00:00.000Z | 21/12/99 |
diff --git a/date-fns/src/locale/he/_lib/formatDistance/index.js b/date-fns/src/locale/he/_lib/formatDistance/index.js
new file mode 100644
index 0000000..a900cb0
--- /dev/null
+++ b/date-fns/src/locale/he/_lib/formatDistance/index.js
@@ -0,0 +1,131 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'פחות משנייה',
+ two: 'פחות משתי שניות',
+ other: 'פחות מ־{{count}} שניות'
+ },
+
+ xSeconds: {
+ one: 'שנייה',
+ two: 'שתי שניות',
+ other: '{{count}} שניות'
+ },
+
+ halfAMinute: 'חצי דקה',
+
+ lessThanXMinutes: {
+ one: 'פחות מדקה',
+ two: 'פחות משתי דקות',
+ other: 'פחות מ־{{count}} דקות'
+ },
+
+ xMinutes: {
+ one: 'דקה',
+ two: 'שתי דקות',
+ other: '{{count}} דקות'
+ },
+
+ aboutXHours: {
+ one: 'כשעה',
+ two: 'כשעתיים',
+ other: 'כ־{{count}} שעות'
+ },
+
+ xHours: {
+ one: 'שעה',
+ two: 'שעתיים',
+ other: '{{count}} שעות'
+ },
+
+ xDays: {
+ one: 'יום',
+ two: 'יומיים',
+ other: '{{count}} ימים'
+ },
+
+ aboutXWeeks: {
+ one: 'כשבוע',
+ two: 'כשבועיים',
+ other: 'כ־{{count}} שבועות'
+ },
+
+ xWeeks: {
+ one: 'שבוע',
+ two: 'שבועיים',
+ other: '{{count}} שבועות'
+ },
+
+ aboutXMonths: {
+ one: 'כחודש',
+ two: 'כחודשיים',
+ other: 'כ־{{count}} חודשים'
+ },
+
+ xMonths: {
+ one: 'חודש',
+ two: 'חודשיים',
+ other: '{{count}} חודשים'
+ },
+
+ aboutXYears: {
+ one: 'כשנה',
+ two: 'כשנתיים',
+ other: 'כ־{{count}} שנים'
+ },
+
+ xYears: {
+ one: 'שנה',
+ two: 'שנתיים',
+ other: '{{count}} שנים'
+ },
+
+ overXYears: {
+ one: 'יותר משנה',
+ two: 'יותר משנתיים',
+ other: 'יותר מ־{{count}} שנים'
+ },
+
+ almostXYears: {
+ one: 'כמעט שנה',
+ two: 'כמעט שנתיים',
+ other: 'כמעט {{count}} שנים'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ // Return word instead of `in one day` or `one day ago`
+ if (token === 'xDays' && options.addSuffix && count <= 2) {
+ var past = {
+ 1: 'אתמול',
+ 2: 'שלשום'
+ }
+ var future = {
+ 1: 'מחר',
+ 2: 'מחרתיים'
+ }
+ return options.comparison > 0 ? future[count] : past[count]
+ }
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else if (count === 2) {
+ result = formatDistanceLocale[token].two
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'בעוד ' + result
+ } else {
+ return 'לפני ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/he/_lib/formatLong/index.js b/date-fns/src/locale/he/_lib/formatLong/index.js
new file mode 100644
index 0000000..74ebc14
--- /dev/null
+++ b/date-fns/src/locale/he/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d בMMMM y',
+ long: 'd בMMMM y',
+ medium: 'd בMMM y',
+ short: 'd.M.y'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'בשעה' {{time}}",
+ long: "{{date}} 'בשעה' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/he/_lib/formatRelative/index.js b/date-fns/src/locale/he/_lib/formatRelative/index.js
new file mode 100644
index 0000000..3589cc3
--- /dev/null
+++ b/date-fns/src/locale/he/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'שעבר בשעה' p",
+ yesterday: "'אתמול בשעה' p",
+ today: "'היום בשעה' p",
+ tomorrow: "'מחר בשעה' p",
+ nextWeek: "eeee 'בשעה' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/he/_lib/localize/index.js b/date-fns/src/locale/he/_lib/localize/index.js
new file mode 100644
index 0000000..c06ba32
--- /dev/null
+++ b/date-fns/src/locale/he/_lib/localize/index.js
@@ -0,0 +1,209 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['לפנה״ס', 'לספירה'],
+ abbreviated: ['לפנה״ס', 'לספירה'],
+ wide: ['לפני הספירה', 'לספירה']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['רבעון 1', 'רבעון 2', 'רבעון 3', 'רבעון 4']
+}
+
+var monthValues = {
+ narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ abbreviated: [
+ 'ינו׳',
+ 'פבר׳',
+ 'מרץ',
+ 'אפר׳',
+ 'מאי',
+ 'יוני',
+ 'יולי',
+ 'אוג׳',
+ 'ספט׳',
+ 'אוק׳',
+ 'נוב׳',
+ 'דצמ׳'
+ ],
+ wide: [
+ 'ינואר',
+ 'פברואר',
+ 'מרץ',
+ 'אפריל',
+ 'מאי',
+ 'יוני',
+ 'יולי',
+ 'אוגוסט',
+ 'ספטמבר',
+ 'אוקטובר',
+ 'נובמבר',
+ 'דצמבר'
+ ]
+}
+
+var dayValues = {
+ narrow: ['א׳', 'ב׳', 'ג׳', 'ד׳', 'ה׳', 'ו׳', 'ש׳'],
+ short: ['א׳', 'ב׳', 'ג׳', 'ד׳', 'ה׳', 'ו׳', 'ש׳'],
+ abbreviated: [
+ 'יום א׳',
+ 'יום ב׳',
+ 'יום ג׳',
+ 'יום ד׳',
+ 'יום ה׳',
+ 'יום ו׳',
+ 'שבת'
+ ],
+ wide: [
+ 'יום ראשון',
+ 'יום שני',
+ 'יום שלישי',
+ 'יום רביעי',
+ 'יום חמישי',
+ 'יום שישי',
+ 'יום שבת'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'לפנה״צ',
+ pm: 'אחה״צ',
+ midnight: 'חצות',
+ noon: 'צהריים',
+ morning: 'בוקר',
+ afternoon: 'אחר הצהריים',
+ evening: 'ערב',
+ night: 'לילה'
+ },
+ abbreviated: {
+ am: 'לפנה״צ',
+ pm: 'אחה״צ',
+ midnight: 'חצות',
+ noon: 'צהריים',
+ morning: 'בוקר',
+ afternoon: 'אחר הצהריים',
+ evening: 'ערב',
+ night: 'לילה'
+ },
+ wide: {
+ am: 'לפנה״צ',
+ pm: 'אחה״צ',
+ midnight: 'חצות',
+ noon: 'צהריים',
+ morning: 'בוקר',
+ afternoon: 'אחר הצהריים',
+ evening: 'ערב',
+ night: 'לילה'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'לפנה״צ',
+ pm: 'אחה״צ',
+ midnight: 'חצות',
+ noon: 'צהריים',
+ morning: 'בבוקר',
+ afternoon: 'בצהריים',
+ evening: 'בערב',
+ night: 'בלילה'
+ },
+ abbreviated: {
+ am: 'לפנה״צ',
+ pm: 'אחה״צ',
+ midnight: 'חצות',
+ noon: 'צהריים',
+ morning: 'בבוקר',
+ afternoon: 'אחר הצהריים',
+ evening: 'בערב',
+ night: 'בלילה'
+ },
+ wide: {
+ am: 'לפנה״צ',
+ pm: 'אחה״צ',
+ midnight: 'חצות',
+ noon: 'צהריים',
+ morning: 'בבוקר',
+ afternoon: 'אחר הצהריים',
+ evening: 'בערב',
+ night: 'בלילה'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // We only show words till 10
+ if (number <= 0 || number > 10) return number
+
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+
+ var isFemale = ['year', 'hour', 'minute', 'second'].indexOf(unit) >= 0
+
+ var male = [
+ 'ראשון',
+ 'שני',
+ 'שלישי',
+ 'רביעי',
+ 'חמישי',
+ 'שישי',
+ 'שביעי',
+ 'שמיני',
+ 'תשיעי',
+ 'עשירי'
+ ]
+ var female = [
+ 'ראשונה',
+ 'שנייה',
+ 'שלישית',
+ 'רביעית',
+ 'חמישית',
+ 'שישית',
+ 'שביעית',
+ 'שמינית',
+ 'תשיעית',
+ 'עשירית'
+ ]
+
+ var index = number - 1
+ return isFemale ? female[index] : male[index]
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/he/_lib/match/index.js b/date-fns/src/locale/he/_lib/match/index.js
new file mode 100644
index 0000000..fa4dbb5
--- /dev/null
+++ b/date-fns/src/locale/he/_lib/match/index.js
@@ -0,0 +1,140 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+|(ראשון|שני|שלישי|רביעי|חמישי|שישי|שביעי|שמיני|תשיעי|עשירי|ראשונה|שנייה|שלישית|רביעית|חמישית|שישית|שביעית|שמינית|תשיעית|עשירית))/i
+var parseOrdinalNumberPattern = /^(\d+|רא|שנ|של|רב|ח|שי|שב|שמ|ת|ע)/i
+
+var matchEraPatterns = {
+ narrow: /^ל(ספירה|פנה״ס)/i,
+ abbreviated: /^ל(ספירה|פנה״ס)/i,
+ wide: /^ל(פני ה)?ספירה/i
+}
+var parseEraPatterns = {
+ any: [/^לפ/i, /^לס/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^רבעון [1234]/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^\d+/i,
+ abbreviated: /^(ינו|פבר|מרץ|אפר|מאי|יוני|יולי|אוג|ספט|אוק|נוב|דצמ)׳?/i,
+ wide: /^(ינואר|פברואר|מרץ|אפריל|מאי|יוני|יולי|אוגוסט|ספטמבר|אוקטובר|נובמבר|דצמבר)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^1$/i,
+ /^2/i,
+ /^3/i,
+ /^4/i,
+ /^5/i,
+ /^6/i,
+ /^7/i,
+ /^8/i,
+ /^9/i,
+ /^10/i,
+ /^11/i,
+ /^12/i
+ ],
+ any: [
+ /^ינ/i,
+ /^פ/i,
+ /^מר/i,
+ /^אפ/i,
+ /^מא/i,
+ /^יונ/i,
+ /^יול/i,
+ /^אוג/i,
+ /^ס/i,
+ /^אוק/i,
+ /^נ/i,
+ /^ד/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[אבגדהוש]׳/i,
+ short: /^[אבגדהוש]׳/i,
+ abbreviated: /^(שבת|יום (א|ב|ג|ד|ה|ו)׳)/i,
+ wide: /^יום (ראשון|שני|שלישי|רביעי|חמישי|שישי|שבת)/i
+}
+var parseDayPatterns = {
+ abbreviated: [/א׳$/i, /ב׳$/i, /ג׳$/i, /ד׳$/i, /ה׳$/i, /ו׳$/i, /^ש/i],
+ wide: [/ן$/i, /ני$/i, /לישי$/i, /עי$/i, /מישי$/i, /שישי$/i, /ת$/i],
+ any: [/^א/i, /^ב/i, /^ג/i, /^ד/i, /^ה/i, /^ו/i, /^ש/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(אחר ה|ב)?(חצות|צהריים|בוקר|ערב|לילה|אחה״צ|לפנה״צ)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^לפ/i,
+ pm: /^אחה/i,
+ midnight: /^ח/i,
+ noon: /^צ/i,
+ morning: /בוקר/i,
+ afternoon: /בצ|אחר/i,
+ evening: /ערב/i,
+ night: /לילה/i
+ }
+}
+
+var ordinalName = ['רא', 'שנ', 'של', 'רב', 'ח', 'שי', 'שב', 'שמ', 'ת', 'ע']
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ var number = parseInt(value, 10)
+ return isNaN(number) ? ordinalName.indexOf(value) + 1 : number
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/he/index.d.ts b/date-fns/src/locale/he/index.d.ts
new file mode 100644
index 0000000..33d6042
--- /dev/null
+++ b/date-fns/src/locale/he/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { he } from 'date-fns/locale'
+export default he
diff --git a/date-fns/src/locale/he/index.js b/date-fns/src/locale/he/index.js
new file mode 100644
index 0000000..3194b14
--- /dev/null
+++ b/date-fns/src/locale/he/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Hebrew locale.
+ * @language Hebrew
+ * @iso-639-2 heb
+ * @author Nir Lahad [@nirlah]{@link https://github.com/nirlah}
+ */
+var locale = {
+ code: 'he',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/he/index.js.flow b/date-fns/src/locale/he/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/he/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/he/snapshot.md b/date-fns/src/locale/he/snapshot.md
new file mode 100644
index 0000000..9ca3f24
--- /dev/null
+++ b/date-fns/src/locale/he/snapshot.md
@@ -0,0 +1,304 @@
+# Hebrew (he) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | חמישית | Invalid Date |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | חמישית | Invalid Date |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | ראשון | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | שני | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | רבעון 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | רבעון 2 | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | ראשון | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | שני | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | רבעון 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | רבעון 2 | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | שני | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | שביעי | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | פבר׳ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | יולי | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | פברואר | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | יולי | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | שני | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | שביעי | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | פבר׳ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | יולי | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | פברואר | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | יולי | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | ראשון | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49 | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | ראשון | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | יום ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום ו׳ | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | יום ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום ו׳ | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | יום ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום ו׳ | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | יום שני | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום שישי | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ו׳ | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ו׳ | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | ראשון | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | חמישי | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | יום ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום ו׳ | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | יום שני | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום שישי | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ו׳ | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ו׳ | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | שני | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | שישי | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | יום ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום ו׳ | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | יום שני | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום שישי | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ו׳ | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ו׳ | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | שני | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | שישי | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | יום ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום ו׳ | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | יום שני | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | יום שישי | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ו׳ | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | ב׳ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ו׳ | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | אחה״צ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | לפנה״צ | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | בבוקר | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחר הצהריים | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | בערב | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | בלילה | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | בבוקר | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחר הצהריים | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | בערב | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | בלילה | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | בבוקר | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחר הצהריים | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | בערב | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | בלילה | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | בבוקר | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | אחר הצהריים | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | בערב | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | בלילה | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | בבוקר | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | בצהריים | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | בערב | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | בלילה | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | ראשונה | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | ראשונה | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.2.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.5.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 בפבר׳ 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 במאי 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 בפברואר 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 במאי 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | יום רביעי, 11 בפברואר 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | יום ראשון, 29 במאי 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.2.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.5.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 בפבר׳ 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 במאי 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 בפברואר 1987 בשעה 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 במאי 1453 בשעה 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | יום רביעי, 11 בפברואר 1987 בשעה 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | יום ראשון, 29 במאי 1453 בשעה 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------- | ---------------------- | ----------------- |
+| 2006-01-01T00:00:00.000Z | כ־6 שנים | כ־6 שנים | בעוד כ־6 שנים |
+| 2005-01-01T00:00:00.000Z | כ־5 שנים | כ־5 שנים | בעוד כ־5 שנים |
+| 2004-01-01T00:00:00.000Z | כ־4 שנים | כ־4 שנים | בעוד כ־4 שנים |
+| 2003-01-01T00:00:00.000Z | כ־3 שנים | כ־3 שנים | בעוד כ־3 שנים |
+| 2002-01-01T00:00:00.000Z | כשנתיים | כשנתיים | בעוד כשנתיים |
+| 2001-06-01T00:00:00.000Z | יותר משנה | יותר משנה | בעוד יותר משנה |
+| 2001-02-01T00:00:00.000Z | כשנה | כשנה | בעוד כשנה |
+| 2001-01-01T00:00:00.000Z | כשנה | כשנה | בעוד כשנה |
+| 2000-06-01T00:00:00.000Z | 5 חודשים | 5 חודשים | בעוד 5 חודשים |
+| 2000-03-01T00:00:00.000Z | חודשיים | חודשיים | בעוד חודשיים |
+| 2000-02-01T00:00:00.000Z | כחודש | כחודש | בעוד כחודש |
+| 2000-01-15T00:00:00.000Z | 14 ימים | 14 ימים | בעוד 14 ימים |
+| 2000-01-02T00:00:00.000Z | יום | יום | מחר |
+| 2000-01-01T06:00:00.000Z | כ־6 שעות | כ־6 שעות | בעוד כ־6 שעות |
+| 2000-01-01T01:00:00.000Z | כשעה | כשעה | בעוד כשעה |
+| 2000-01-01T00:45:00.000Z | כשעה | כשעה | בעוד כשעה |
+| 2000-01-01T00:30:00.000Z | 30 דקות | 30 דקות | בעוד 30 דקות |
+| 2000-01-01T00:15:00.000Z | 15 דקות | 15 דקות | בעוד 15 דקות |
+| 2000-01-01T00:01:00.000Z | דקה | דקה | בעוד דקה |
+| 2000-01-01T00:00:25.000Z | פחות מדקה | חצי דקה | בעוד פחות מדקה |
+| 2000-01-01T00:00:15.000Z | פחות מדקה | פחות מ־20 שניות | בעוד פחות מדקה |
+| 2000-01-01T00:00:05.000Z | פחות מדקה | פחות מ־10 שניות | בעוד פחות מדקה |
+| 2000-01-01T00:00:00.000Z | פחות מדקה | פחות מ־5 שניות | לפני פחות מדקה |
+| 1999-12-31T23:59:55.000Z | פחות מדקה | פחות מ־10 שניות | לפני פחות מדקה |
+| 1999-12-31T23:59:45.000Z | פחות מדקה | פחות מ־20 שניות | לפני פחות מדקה |
+| 1999-12-31T23:59:35.000Z | פחות מדקה | חצי דקה | לפני פחות מדקה |
+| 1999-12-31T23:59:00.000Z | דקה | דקה | לפני דקה |
+| 1999-12-31T23:45:00.000Z | 15 דקות | 15 דקות | לפני 15 דקות |
+| 1999-12-31T23:30:00.000Z | 30 דקות | 30 דקות | לפני 30 דקות |
+| 1999-12-31T23:15:00.000Z | כשעה | כשעה | לפני כשעה |
+| 1999-12-31T23:00:00.000Z | כשעה | כשעה | לפני כשעה |
+| 1999-12-31T18:00:00.000Z | כ־6 שעות | כ־6 שעות | לפני כ־6 שעות |
+| 1999-12-30T00:00:00.000Z | יומיים | יומיים | שלשום |
+| 1999-12-15T00:00:00.000Z | 17 ימים | 17 ימים | לפני 17 ימים |
+| 1999-12-01T00:00:00.000Z | כחודש | כחודש | לפני כחודש |
+| 1999-11-01T00:00:00.000Z | חודשיים | חודשיים | לפני חודשיים |
+| 1999-06-01T00:00:00.000Z | 7 חודשים | 7 חודשים | לפני 7 חודשים |
+| 1999-01-01T00:00:00.000Z | כשנה | כשנה | לפני כשנה |
+| 1998-12-01T00:00:00.000Z | כשנה | כשנה | לפני כשנה |
+| 1998-06-01T00:00:00.000Z | יותר משנה | יותר משנה | לפני יותר משנה |
+| 1998-01-01T00:00:00.000Z | כשנתיים | כשנתיים | לפני כשנתיים |
+| 1997-01-01T00:00:00.000Z | כ־3 שנים | כ־3 שנים | לפני כ־3 שנים |
+| 1996-01-01T00:00:00.000Z | כ־4 שנים | כ־4 שנים | לפני כ־4 שנים |
+| 1995-01-01T00:00:00.000Z | כ־5 שנים | כ־5 שנים | לפני כ־5 שנים |
+| 1994-01-01T00:00:00.000Z | כ־6 שנים | כ־6 שנים | לפני כ־6 שנים |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | -------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 שנים | בעוד 6 שנים | 52608 שעות |
+| 2005-01-01T00:00:00.000Z | 5 שנים | בעוד 5 שנים | 43848 שעות |
+| 2004-01-01T00:00:00.000Z | 4 שנים | בעוד 4 שנים | 35064 שעות |
+| 2003-01-01T00:00:00.000Z | 3 שנים | בעוד 3 שנים | 26304 שעות |
+| 2002-01-01T00:00:00.000Z | שנתיים | בעוד שנתיים | 17544 שעות |
+| 2001-06-01T00:00:00.000Z | שנה | בעוד שנה | 12408 שעות |
+| 2001-02-01T00:00:00.000Z | שנה | בעוד שנה | 9528 שעות |
+| 2001-01-01T00:00:00.000Z | שנה | בעוד שנה | 8784 שעות |
+| 2000-06-01T00:00:00.000Z | 5 חודשים | בעוד 5 חודשים | 3648 שעות |
+| 2000-03-01T00:00:00.000Z | חודשיים | בעוד חודשיים | 1440 שעות |
+| 2000-02-01T00:00:00.000Z | חודש | בעוד חודש | 744 שעות |
+| 2000-01-15T00:00:00.000Z | 14 ימים | בעוד 14 ימים | 336 שעות |
+| 2000-01-02T00:00:00.000Z | יום | מחר | 24 שעות |
+| 2000-01-01T06:00:00.000Z | 6 שעות | בעוד 6 שעות | 6 שעות |
+| 2000-01-01T01:00:00.000Z | שעה | בעוד שעה | שעה |
+| 2000-01-01T00:45:00.000Z | 45 דקות | בעוד 45 דקות | שעה |
+| 2000-01-01T00:30:00.000Z | 30 דקות | בעוד 30 דקות | שעה |
+| 2000-01-01T00:15:00.000Z | 15 דקות | בעוד 15 דקות | 0 שעות |
+| 2000-01-01T00:01:00.000Z | דקה | בעוד דקה | 0 שעות |
+| 2000-01-01T00:00:25.000Z | 25 שניות | בעוד 25 שניות | 0 שעות |
+| 2000-01-01T00:00:15.000Z | 15 שניות | בעוד 15 שניות | 0 שעות |
+| 2000-01-01T00:00:05.000Z | 5 שניות | בעוד 5 שניות | 0 שעות |
+| 2000-01-01T00:00:00.000Z | 0 שניות | לפני 0 שניות | 0 שעות |
+| 1999-12-31T23:59:55.000Z | 5 שניות | לפני 5 שניות | 0 שעות |
+| 1999-12-31T23:59:45.000Z | 15 שניות | לפני 15 שניות | 0 שעות |
+| 1999-12-31T23:59:35.000Z | 25 שניות | לפני 25 שניות | 0 שעות |
+| 1999-12-31T23:59:00.000Z | דקה | לפני דקה | 0 שעות |
+| 1999-12-31T23:45:00.000Z | 15 דקות | לפני 15 דקות | 0 שעות |
+| 1999-12-31T23:30:00.000Z | 30 דקות | לפני 30 דקות | שעה |
+| 1999-12-31T23:15:00.000Z | 45 דקות | לפני 45 דקות | שעה |
+| 1999-12-31T23:00:00.000Z | שעה | לפני שעה | שעה |
+| 1999-12-31T18:00:00.000Z | 6 שעות | לפני 6 שעות | 6 שעות |
+| 1999-12-30T00:00:00.000Z | יומיים | שלשום | 48 שעות |
+| 1999-12-15T00:00:00.000Z | 17 ימים | לפני 17 ימים | 408 שעות |
+| 1999-12-01T00:00:00.000Z | חודש | לפני חודש | 744 שעות |
+| 1999-11-01T00:00:00.000Z | חודשיים | לפני חודשיים | 1464 שעות |
+| 1999-06-01T00:00:00.000Z | 7 חודשים | לפני 7 חודשים | 5136 שעות |
+| 1999-01-01T00:00:00.000Z | שנה | לפני שנה | 8760 שעות |
+| 1998-12-01T00:00:00.000Z | שנה | לפני שנה | 9504 שעות |
+| 1998-06-01T00:00:00.000Z | שנתיים | לפני שנתיים | 13896 שעות |
+| 1998-01-01T00:00:00.000Z | שנתיים | לפני שנתיים | 17520 שעות |
+| 1997-01-01T00:00:00.000Z | 3 שנים | לפני 3 שנים | 26280 שעות |
+| 1996-01-01T00:00:00.000Z | 4 שנים | לפני 4 שנים | 35064 שעות |
+| 1995-01-01T00:00:00.000Z | 5 שנים | לפני 5 שנים | 43824 שעות |
+| 1994-01-01T00:00:00.000Z | 6 שנים | לפני 6 שנים | 52584 שעות |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------- |
+| 2000-01-10T00:00:00.000Z | 10.1.2000 |
+| 2000-01-05T00:00:00.000Z | יום רביעי בשעה 0:00 |
+| 2000-01-02T00:00:00.000Z | מחר בשעה 0:00 |
+| 2000-01-01T00:00:00.000Z | היום בשעה 0:00 |
+| 1999-12-31T00:00:00.000Z | אתמול בשעה 0:00 |
+| 1999-12-27T00:00:00.000Z | יום שני שעבר בשעה 0:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/hi/_lib/formatDistance/index.js b/date-fns/src/locale/hi/_lib/formatDistance/index.js
new file mode 100644
index 0000000..8cdad47
--- /dev/null
+++ b/date-fns/src/locale/hi/_lib/formatDistance/index.js
@@ -0,0 +1,106 @@
+import localize from '../localize/index'
+// Source: https://www.unicode.org/cldr/charts/32/summary/hi.html
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: '१ सेकंड से कम', // CLDR #1310
+ other: '{{count}} सेकंड से कम'
+ },
+
+ xSeconds: {
+ one: '१ सेकंड',
+ other: '{{count}} सेकंड'
+ },
+
+ halfAMinute: 'आधा मिनट',
+
+ lessThanXMinutes: {
+ one: '१ मिनट से कम',
+ other: '{{count}} मिनट से कम'
+ },
+
+ xMinutes: {
+ one: '१ मिनट', // CLDR #1307
+ other: '{{count}} मिनट'
+ },
+
+ aboutXHours: {
+ one: 'लगभग १ घंटा',
+ other: 'लगभग {{count}} घंटे'
+ },
+
+ xHours: {
+ one: '१ घंटा', // CLDR #1304
+ other: '{{count}} घंटे' // CLDR #4467
+ },
+
+ xDays: {
+ one: '१ दिन', // CLDR #1286
+ other: '{{count}} दिन'
+ },
+
+ aboutXWeeks: {
+ one: 'लगभग १ सप्ताह',
+ other: 'लगभग {{count}} सप्ताह'
+ },
+
+ xWeeks: {
+ one: '१ सप्ताह',
+ other: '{{count}} सप्ताह'
+ },
+
+ aboutXMonths: {
+ one: 'लगभग १ महीना',
+ other: 'लगभग {{count}} महीने'
+ },
+
+ xMonths: {
+ one: '१ महीना',
+ other: '{{count}} महीने'
+ },
+
+ aboutXYears: {
+ one: 'लगभग १ वर्ष',
+ other: 'लगभग {{count}} वर्ष' // CLDR #4823
+ },
+
+ xYears: {
+ one: '१ वर्ष',
+ other: '{{count}} वर्ष'
+ },
+
+ overXYears: {
+ one: '१ वर्ष से अधिक',
+ other: '{{count}} वर्ष से अधिक'
+ },
+
+ almostXYears: {
+ one: 'लगभग १ वर्ष',
+ other: 'लगभग {{count}} वर्ष'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace(
+ '{{count}}',
+ localize.numberToLocale(count)
+ )
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + 'मे '
+ } else {
+ return result + ' पहले'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/hi/_lib/formatLong/index.js b/date-fns/src/locale/hi/_lib/formatLong/index.js
new file mode 100644
index 0000000..91a7b41
--- /dev/null
+++ b/date-fns/src/locale/hi/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, do MMMM, y', // CLDR #1787
+ long: 'do MMMM, y', // CLDR #1788
+ medium: 'd MMM, y', // CLDR #1789
+ short: 'dd/MM/yyyy' // CLDR #1790
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz', // CLDR #1791
+ long: 'h:mm:ss a z', // CLDR #1792
+ medium: 'h:mm:ss a', // CLDR #1793
+ short: 'h:mm a' // CLDR #1794
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'को' {{time}}", // CLDR #1795
+ long: "{{date}} 'को' {{time}}", // CLDR #1796
+ medium: '{{date}}, {{time}}', // CLDR #1797
+ short: '{{date}}, {{time}}' // CLDR #1798
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/hi/_lib/formatRelative/index.js b/date-fns/src/locale/hi/_lib/formatRelative/index.js
new file mode 100644
index 0000000..6098a56
--- /dev/null
+++ b/date-fns/src/locale/hi/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'पिछले' eeee p",
+ yesterday: "'कल' p",
+ today: "'आज' p",
+ tomorrow: "'कल' p",
+ nextWeek: "eeee 'को' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/hi/_lib/localize/index.js b/date-fns/src/locale/hi/_lib/localize/index.js
new file mode 100644
index 0000000..5d0b90c
--- /dev/null
+++ b/date-fns/src/locale/hi/_lib/localize/index.js
@@ -0,0 +1,244 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var numberValues = {
+ locale: {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+ },
+ number: {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+ }
+}
+
+// CLDR #1585 - #1592
+var eraValues = {
+ narrow: ['ईसा-पूर्व', 'ईस्वी'],
+ abbreviated: ['ईसा-पूर्व', 'ईस्वी'],
+ wide: ['ईसा-पूर्व', 'ईसवी सन']
+}
+// CLDR #1593 - #1616
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['ति1', 'ति2', 'ति3', 'ति4'],
+ wide: ['पहली तिमाही', 'दूसरी तिमाही', 'तीसरी तिमाही', 'चौथी तिमाही']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+// https://www.unicode.org/cldr/charts/32/summary/hi.html
+// CLDR #1617 - #1688
+var monthValues = {
+ narrow: [
+ 'ज',
+ 'फ़',
+ 'मा',
+ 'अ',
+ 'मई',
+ 'जू',
+ 'जु',
+ 'अग',
+ 'सि',
+ 'अक्तू',
+ 'न',
+ 'दि'
+ ],
+ abbreviated: [
+ 'जन',
+ 'फ़र',
+ 'मार्च',
+ 'अप्रैल',
+ 'मई',
+ 'जून',
+ 'जुल',
+ 'अग',
+ 'सित',
+ 'अक्तू',
+ 'नव',
+ 'दिस'
+ ],
+ wide: [
+ 'जनवरी',
+ 'फ़रवरी',
+ 'मार्च',
+ 'अप्रैल',
+ 'मई',
+ 'जून',
+ 'जुलाई',
+ 'अगस्त',
+ 'सितंबर',
+ 'अक्तूबर',
+ 'नवंबर',
+ 'दिसंबर'
+ ]
+}
+
+// CLDR #1689 - #1744
+var dayValues = {
+ narrow: ['र', 'सो', 'मं', 'बु', 'गु', 'शु', 'श'],
+ short: ['र', 'सो', 'मं', 'बु', 'गु', 'शु', 'श'],
+ abbreviated: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
+ wide: [
+ 'रविवार',
+ 'सोमवार',
+ 'मंगलवार',
+ 'बुधवार',
+ 'गुरुवार',
+ 'शुक्रवार',
+ 'शनिवार'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'पूर्वाह्न',
+ pm: 'अपराह्न',
+ midnight: 'मध्यरात्रि',
+ noon: 'दोपहर',
+ morning: 'सुबह',
+ afternoon: 'दोपहर',
+ evening: 'शाम',
+ night: 'रात'
+ },
+ abbreviated: {
+ am: 'पूर्वाह्न',
+ pm: 'अपराह्न',
+ midnight: 'मध्यरात्रि',
+ noon: 'दोपहर',
+ morning: 'सुबह',
+ afternoon: 'दोपहर',
+ evening: 'शाम',
+ night: 'रात'
+ },
+ wide: {
+ am: 'पूर्वाह्न',
+ pm: 'अपराह्न',
+ midnight: 'मध्यरात्रि',
+ noon: 'दोपहर',
+ morning: 'सुबह',
+ afternoon: 'दोपहर',
+ evening: 'शाम',
+ night: 'रात'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'पूर्वाह्न',
+ pm: 'अपराह्न',
+ midnight: 'मध्यरात्रि',
+ noon: 'दोपहर',
+ morning: 'सुबह',
+ afternoon: 'दोपहर',
+ evening: 'शाम',
+ night: 'रात'
+ },
+ abbreviated: {
+ am: 'पूर्वाह्न',
+ pm: 'अपराह्न',
+ midnight: 'मध्यरात्रि',
+ noon: 'दोपहर',
+ morning: 'सुबह',
+ afternoon: 'दोपहर',
+ evening: 'शाम',
+ night: 'रात'
+ },
+ wide: {
+ am: 'पूर्वाह्न',
+ pm: 'अपराह्न',
+ midnight: 'मध्यरात्रि',
+ noon: 'दोपहर',
+ morning: 'सुबह',
+ afternoon: 'दोपहर',
+ evening: 'शाम',
+ night: 'रात'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = localize.localeToNumber(dirtyNumber)
+ var localeNumber = localize.numberToLocale(number)
+
+ var rem10 = number % 10
+ switch (rem10) {
+ case 2:
+ case 3:
+ case 4:
+ case 6:
+ case 1:
+ case 5:
+ case 7:
+ case 8:
+ case 9:
+ case 0:
+ return localeNumber
+ }
+}
+
+function localeToNumber(locale) {
+ var number = locale.toString().replace(/[१२३४५६७८९०]/g, function(match) {
+ return numberValues.number[match]
+ })
+ return Number(number)
+}
+
+function numberToLocale(number) {
+ return number.toString().replace(/\d/g, function(match) {
+ return numberValues.locale[match]
+ })
+}
+
+var localize = {
+ localeToNumber: localeToNumber,
+ numberToLocale: numberToLocale,
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/hi/_lib/match/index.js b/date-fns/src/locale/hi/_lib/match/index.js
new file mode 100644
index 0000000..9ec15da
--- /dev/null
+++ b/date-fns/src/locale/hi/_lib/match/index.js
@@ -0,0 +1,136 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import localize from '../localize/index'
+
+var matchOrdinalNumberPattern = /^[०१२३४५६७८९]+/i
+var parseOrdinalNumberPattern = /^[०१२३४५६७८९]+/i
+
+var matchEraPatterns = {
+ narrow: /^(ईसा-पूर्व|ईस्वी)/i,
+ abbreviated: /^(ईसा\.?\s?पूर्व\.?|ईसा\.?)/i,
+ wide: /^(ईसा-पूर्व|ईसवी पूर्व|ईसवी सन|ईसवी)/i
+}
+var parseEraPatterns = {
+ any: [/^b/i, /^(a|c)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^ति[1234]/i,
+ wide: /^[1234](पहली|दूसरी|तीसरी|चौथी)? तिमाही/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[जफ़माअप्मईजूनजुअगसिअक्तनदि]/i,
+ abbreviated: /^(जन|फ़र|मार्च|अप्|मई|जून|जुल|अग|सित|अक्तू|नव|दिस)/i,
+ wide: /^(जनवरी|फ़रवरी|मार्च|अप्रैल|मई|जून|जुलाई|अगस्त|सितंबर|अक्तूबर|नवंबर|दिसंबर)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^ज/i,
+ /^फ़/i,
+ /^मा/i,
+ /^अप्/i,
+ /^मई/i,
+ /^जू/i,
+ /^जु/i,
+ /^अग/i,
+ /^सि/i,
+ /^अक्तू/i,
+ /^न/i,
+ /^दि/i
+ ],
+ any: [
+ /^जन/i,
+ /^फ़/i,
+ /^मा/i,
+ /^अप्/i,
+ /^मई/i,
+ /^जू/i,
+ /^जु/i,
+ /^अग/i,
+ /^सि/i,
+ /^अक्तू/i,
+ /^नव/i,
+ /^दिस/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[रविसोममंगलबुधगुरुशुक्रशनि]/i,
+ short: /^(रवि|सोम|मंगल|बुध|गुरु|शुक्र|शनि)/i,
+ abbreviated: /^(रवि|सोम|मंगल|बुध|गुरु|शुक्र|शनि)/i,
+ wide: /^(रविवार|सोमवार|मंगलवार|बुधवार|गुरुवार|शुक्रवार|शनिवार)/i
+}
+var parseDayPatterns = {
+ narrow: [/^रवि/i, /^सोम/i, /^मंगल/i, /^बुध/i, /^गुरु/i, /^शुक्र/i, /^शनि/i],
+ any: [/^रवि/i, /^सोम/i, /^मंगल/i, /^बुध/i, /^गुरु/i, /^शुक्र/i, /^शनि/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(पू|अ|म|द.\?|सु|दो|शा|रा)/i,
+ any: /^(पूर्वाह्न|अपराह्न|म|द.\?|सु|दो|शा|रा)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^पूर्वाह्न/i,
+ pm: /^अपराह्न/i,
+ midnight: /^मध्य/i,
+ noon: /^दो/i,
+ morning: /सु/i,
+ afternoon: /दो/i,
+ evening: /शा/i,
+ night: /रा/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: localize.localeToNumber
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/hi/index.d.ts b/date-fns/src/locale/hi/index.d.ts
new file mode 100644
index 0000000..089bdd9
--- /dev/null
+++ b/date-fns/src/locale/hi/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hi } from 'date-fns/locale'
+export default hi
diff --git a/date-fns/src/locale/hi/index.js b/date-fns/src/locale/hi/index.js
new file mode 100644
index 0000000..bec68d1
--- /dev/null
+++ b/date-fns/src/locale/hi/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Hindi locale (India).
+ * @language Hindi
+ * @iso-639-2 hin
+ * @author Mukesh Mandiwal [@mukeshmandiwal]{@link https://github.com/mukeshmandiwal}
+ */
+var locale = {
+ code: 'hi',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/hi/index.js.flow b/date-fns/src/locale/hi/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/hi/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/hi/snapshot.md b/date-fns/src/locale/hi/snapshot.md
new file mode 100644
index 0000000..172a55f
--- /dev/null
+++ b/date-fns/src/locale/hi/snapshot.md
@@ -0,0 +1,304 @@
+# Hindi (hi) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | १९८७ | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | ५ | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | १९८७ | 1987-01-04T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | ४ | 0004-01-04T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | १ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | २ | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | ति1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ति2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | पहली तिमाही | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | दूसरी तिमाही | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | १ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | २ | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | ति1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ति2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | पहली तिमाही | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | दूसरी तिमाही | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | २ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ७ | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | फ़र | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | जुल | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | फ़रवरी | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | जुलाई | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | फ़ | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | जु | Invalid Date |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | २ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ७ | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | फ़र | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | जुल | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | फ़रवरी | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | जुलाई | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | फ़ | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | जु | Invalid Date |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | १ | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | ४९ | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | १ | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | ४८ | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | ११ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | २८ | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | ४२ | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | ३६५ | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | सोम | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्र | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | सोम | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्र | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | सोम | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्र | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | सोमवार | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्रवार | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | सो | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | शु | Invalid Date |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | सो | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | शु | Invalid Date |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | १ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ५ | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | सोम | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्र | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | सोमवार | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्रवार | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | सो | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | शु | Invalid Date |
+| | iiiiii | 2019-02-11T12:13:14.015Z | सो | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | शु | Invalid Date |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | २ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ६ | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | सोम | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्र | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | सोमवार | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्रवार | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | सो | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | शु | Invalid Date |
+| | eeeeee | 2019-02-11T12:13:14.015Z | सो | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | शु | Invalid Date |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | २ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ६ | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | सोम | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्र | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | सोमवार | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | शुक्रवार | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | सो | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | शु | Invalid Date |
+| | cccccc | 2019-02-11T12:13:14.015Z | सो | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | शु | Invalid Date |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | पूर्वाह्न | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | पूर्वाह्न | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | अपराह्न | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | अपराह्न | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | पूर्वाह्न | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | सुबह | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | दोपहर | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | शाम | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | रात | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | सुबह | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | दोपहर | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | शाम | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | रात | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | सुबह | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | दोपहर | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | शाम | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | रात | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | सुबह | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | दोपहर | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | शाम | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | रात | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | सुबह | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | दोपहर | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | शाम | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | रात | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | ११ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ११ | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | ११ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | २३ | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | ११ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ११ | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | ११ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | २३ | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | १ | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | ५५ | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | १ | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | ५५ | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 फ़र, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 मई, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | ११ फ़रवरी, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | २९ मई, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | बुधवार, ११ फ़रवरी, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | रविवार, २९ मई, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 अपराह्न | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 अपराह्न | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 अपराह्न | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 अपराह्न | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 अपराह्न GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 अपराह्न GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 अपराह्न GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 अपराह्न GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 अपराह्न | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 11:59 अपराह्न | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 फ़र, 1987, 12:13:14 अपराह्न | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 मई, 1453, 11:59:59 अपराह्न | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | ११ फ़रवरी, 1987 को 12:13:14 अपराह्न GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | २९ मई, 1453 को 11:59:59 अपराह्न GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | बुधवार, ११ फ़रवरी, 1987 को 12:13:14 अपराह्न GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | रविवार, २९ मई, 1453 को 11:59:59 अपराह्न GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------------- | ---------------------- | ------------------- |
+| 2006-01-01T00:00:00.000Z | लगभग ६ वर्ष | लगभग ६ वर्ष | लगभग ६ वर्षमे |
+| 2005-01-01T00:00:00.000Z | लगभग ५ वर्ष | लगभग ५ वर्ष | लगभग ५ वर्षमे |
+| 2004-01-01T00:00:00.000Z | लगभग ४ वर्ष | लगभग ४ वर्ष | लगभग ४ वर्षमे |
+| 2003-01-01T00:00:00.000Z | लगभग ३ वर्ष | लगभग ३ वर्ष | लगभग ३ वर्षमे |
+| 2002-01-01T00:00:00.000Z | लगभग २ वर्ष | लगभग २ वर्ष | लगभग २ वर्षमे |
+| 2001-06-01T00:00:00.000Z | १ वर्ष से अधिक | १ वर्ष से अधिक | १ वर्ष से अधिकमे |
+| 2001-02-01T00:00:00.000Z | लगभग १ वर्ष | लगभग १ वर्ष | लगभग १ वर्षमे |
+| 2001-01-01T00:00:00.000Z | लगभग १ वर्ष | लगभग १ वर्ष | लगभग १ वर्षमे |
+| 2000-06-01T00:00:00.000Z | ५ महीने | ५ महीने | ५ महीनेमे |
+| 2000-03-01T00:00:00.000Z | २ महीने | २ महीने | २ महीनेमे |
+| 2000-02-01T00:00:00.000Z | लगभग १ महीना | लगभग १ महीना | लगभग १ महीनामे |
+| 2000-01-15T00:00:00.000Z | १४ दिन | १४ दिन | १४ दिनमे |
+| 2000-01-02T00:00:00.000Z | १ दिन | १ दिन | १ दिनमे |
+| 2000-01-01T06:00:00.000Z | लगभग ६ घंटे | लगभग ६ घंटे | लगभग ६ घंटेमे |
+| 2000-01-01T01:00:00.000Z | लगभग १ घंटा | लगभग १ घंटा | लगभग १ घंटामे |
+| 2000-01-01T00:45:00.000Z | लगभग १ घंटा | लगभग १ घंटा | लगभग १ घंटामे |
+| 2000-01-01T00:30:00.000Z | ३० मिनट | ३० मिनट | ३० मिनटमे |
+| 2000-01-01T00:15:00.000Z | १५ मिनट | १५ मिनट | १५ मिनटमे |
+| 2000-01-01T00:01:00.000Z | १ मिनट | १ मिनट | १ मिनटमे |
+| 2000-01-01T00:00:25.000Z | १ मिनट से कम | आधा मिनट | १ मिनट से कममे |
+| 2000-01-01T00:00:15.000Z | १ मिनट से कम | २० सेकंड से कम | १ मिनट से कममे |
+| 2000-01-01T00:00:05.000Z | १ मिनट से कम | १० सेकंड से कम | १ मिनट से कममे |
+| 2000-01-01T00:00:00.000Z | १ मिनट से कम | ५ सेकंड से कम | १ मिनट से कम पहले |
+| 1999-12-31T23:59:55.000Z | १ मिनट से कम | १० सेकंड से कम | १ मिनट से कम पहले |
+| 1999-12-31T23:59:45.000Z | १ मिनट से कम | २० सेकंड से कम | १ मिनट से कम पहले |
+| 1999-12-31T23:59:35.000Z | १ मिनट से कम | आधा मिनट | १ मिनट से कम पहले |
+| 1999-12-31T23:59:00.000Z | १ मिनट | १ मिनट | १ मिनट पहले |
+| 1999-12-31T23:45:00.000Z | १५ मिनट | १५ मिनट | १५ मिनट पहले |
+| 1999-12-31T23:30:00.000Z | ३० मिनट | ३० मिनट | ३० मिनट पहले |
+| 1999-12-31T23:15:00.000Z | लगभग १ घंटा | लगभग १ घंटा | लगभग १ घंटा पहले |
+| 1999-12-31T23:00:00.000Z | लगभग १ घंटा | लगभग १ घंटा | लगभग १ घंटा पहले |
+| 1999-12-31T18:00:00.000Z | लगभग ६ घंटे | लगभग ६ घंटे | लगभग ६ घंटे पहले |
+| 1999-12-30T00:00:00.000Z | २ दिन | २ दिन | २ दिन पहले |
+| 1999-12-15T00:00:00.000Z | १७ दिन | १७ दिन | १७ दिन पहले |
+| 1999-12-01T00:00:00.000Z | लगभग १ महीना | लगभग १ महीना | लगभग १ महीना पहले |
+| 1999-11-01T00:00:00.000Z | २ महीने | २ महीने | २ महीने पहले |
+| 1999-06-01T00:00:00.000Z | ७ महीने | ७ महीने | ७ महीने पहले |
+| 1999-01-01T00:00:00.000Z | लगभग १ वर्ष | लगभग १ वर्ष | लगभग १ वर्ष पहले |
+| 1998-12-01T00:00:00.000Z | लगभग १ वर्ष | लगभग १ वर्ष | लगभग १ वर्ष पहले |
+| 1998-06-01T00:00:00.000Z | १ वर्ष से अधिक | १ वर्ष से अधिक | १ वर्ष से अधिक पहले |
+| 1998-01-01T00:00:00.000Z | लगभग २ वर्ष | लगभग २ वर्ष | लगभग २ वर्ष पहले |
+| 1997-01-01T00:00:00.000Z | लगभग ३ वर्ष | लगभग ३ वर्ष | लगभग ३ वर्ष पहले |
+| 1996-01-01T00:00:00.000Z | लगभग ४ वर्ष | लगभग ४ वर्ष | लगभग ४ वर्ष पहले |
+| 1995-01-01T00:00:00.000Z | लगभग ५ वर्ष | लगभग ५ वर्ष | लगभग ५ वर्ष पहले |
+| 1994-01-01T00:00:00.000Z | लगभग ६ वर्ष | लगभग ६ वर्ष | लगभग ६ वर्ष पहले |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | -------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | ६ वर्ष | ६ वर्षमे | ५२६०८ घंटे |
+| 2005-01-01T00:00:00.000Z | ५ वर्ष | ५ वर्षमे | ४३८४८ घंटे |
+| 2004-01-01T00:00:00.000Z | ४ वर्ष | ४ वर्षमे | ३५०६४ घंटे |
+| 2003-01-01T00:00:00.000Z | ३ वर्ष | ३ वर्षमे | २६३०४ घंटे |
+| 2002-01-01T00:00:00.000Z | २ वर्ष | २ वर्षमे | १७५४४ घंटे |
+| 2001-06-01T00:00:00.000Z | १ वर्ष | १ वर्षमे | १२४०८ घंटे |
+| 2001-02-01T00:00:00.000Z | १ वर्ष | १ वर्षमे | ९५२८ घंटे |
+| 2001-01-01T00:00:00.000Z | १ वर्ष | १ वर्षमे | ८७८४ घंटे |
+| 2000-06-01T00:00:00.000Z | ५ महीने | ५ महीनेमे | ३६४८ घंटे |
+| 2000-03-01T00:00:00.000Z | २ महीने | २ महीनेमे | १४४० घंटे |
+| 2000-02-01T00:00:00.000Z | १ महीना | १ महीनामे | ७४४ घंटे |
+| 2000-01-15T00:00:00.000Z | १४ दिन | १४ दिनमे | ३३६ घंटे |
+| 2000-01-02T00:00:00.000Z | १ दिन | १ दिनमे | २४ घंटे |
+| 2000-01-01T06:00:00.000Z | ६ घंटे | ६ घंटेमे | ६ घंटे |
+| 2000-01-01T01:00:00.000Z | १ घंटा | १ घंटामे | १ घंटा |
+| 2000-01-01T00:45:00.000Z | ४५ मिनट | ४५ मिनटमे | १ घंटा |
+| 2000-01-01T00:30:00.000Z | ३० मिनट | ३० मिनटमे | १ घंटा |
+| 2000-01-01T00:15:00.000Z | १५ मिनट | १५ मिनटमे | ० घंटे |
+| 2000-01-01T00:01:00.000Z | १ मिनट | १ मिनटमे | ० घंटे |
+| 2000-01-01T00:00:25.000Z | २५ सेकंड | २५ सेकंडमे | ० घंटे |
+| 2000-01-01T00:00:15.000Z | १५ सेकंड | १५ सेकंडमे | ० घंटे |
+| 2000-01-01T00:00:05.000Z | ५ सेकंड | ५ सेकंडमे | ० घंटे |
+| 2000-01-01T00:00:00.000Z | ० सेकंड | ० सेकंड पहले | ० घंटे |
+| 1999-12-31T23:59:55.000Z | ५ सेकंड | ५ सेकंड पहले | ० घंटे |
+| 1999-12-31T23:59:45.000Z | १५ सेकंड | १५ सेकंड पहले | ० घंटे |
+| 1999-12-31T23:59:35.000Z | २५ सेकंड | २५ सेकंड पहले | ० घंटे |
+| 1999-12-31T23:59:00.000Z | १ मिनट | १ मिनट पहले | ० घंटे |
+| 1999-12-31T23:45:00.000Z | १५ मिनट | १५ मिनट पहले | ० घंटे |
+| 1999-12-31T23:30:00.000Z | ३० मिनट | ३० मिनट पहले | १ घंटा |
+| 1999-12-31T23:15:00.000Z | ४५ मिनट | ४५ मिनट पहले | १ घंटा |
+| 1999-12-31T23:00:00.000Z | १ घंटा | १ घंटा पहले | १ घंटा |
+| 1999-12-31T18:00:00.000Z | ६ घंटे | ६ घंटे पहले | ६ घंटे |
+| 1999-12-30T00:00:00.000Z | २ दिन | २ दिन पहले | ४८ घंटे |
+| 1999-12-15T00:00:00.000Z | १७ दिन | १७ दिन पहले | ४०८ घंटे |
+| 1999-12-01T00:00:00.000Z | १ महीना | १ महीना पहले | ७४४ घंटे |
+| 1999-11-01T00:00:00.000Z | २ महीने | २ महीने पहले | १४६४ घंटे |
+| 1999-06-01T00:00:00.000Z | ७ महीने | ७ महीने पहले | ५१३६ घंटे |
+| 1999-01-01T00:00:00.000Z | १ वर्ष | १ वर्ष पहले | ८७६० घंटे |
+| 1998-12-01T00:00:00.000Z | १ वर्ष | १ वर्ष पहले | ९५०४ घंटे |
+| 1998-06-01T00:00:00.000Z | २ वर्ष | २ वर्ष पहले | १३८९६ घंटे |
+| 1998-01-01T00:00:00.000Z | २ वर्ष | २ वर्ष पहले | १७५२० घंटे |
+| 1997-01-01T00:00:00.000Z | ३ वर्ष | ३ वर्ष पहले | २६२८० घंटे |
+| 1996-01-01T00:00:00.000Z | ४ वर्ष | ४ वर्ष पहले | ३५०६४ घंटे |
+| 1995-01-01T00:00:00.000Z | ५ वर्ष | ५ वर्ष पहले | ४३८२४ घंटे |
+| 1994-01-01T00:00:00.000Z | ६ वर्ष | ६ वर्ष पहले | ५२५८४ घंटे |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | बुधवार को 12:00 पूर्वाह्न |
+| 2000-01-02T00:00:00.000Z | कल 12:00 पूर्वाह्न |
+| 2000-01-01T00:00:00.000Z | आज 12:00 पूर्वाह्न |
+| 1999-12-31T00:00:00.000Z | कल 12:00 पूर्वाह्न |
+| 1999-12-27T00:00:00.000Z | पिछले सोमवार 12:00 पूर्वाह्न |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/hr/_lib/formatDistance/index.js b/date-fns/src/locale/hr/_lib/formatDistance/index.js
new file mode 100644
index 0000000..0076d08
--- /dev/null
+++ b/date-fns/src/locale/hr/_lib/formatDistance/index.js
@@ -0,0 +1,191 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: {
+ standalone: 'manje od 1 sekunde',
+ withPrepositionAgo: 'manje od 1 sekunde',
+ withPrepositionIn: 'manje od 1 sekundu'
+ },
+ dual: 'manje od {{count}} sekunde',
+ other: 'manje od {{count}} sekundi'
+ },
+
+ xSeconds: {
+ one: {
+ standalone: '1 sekunda',
+ withPrepositionAgo: '1 sekunde',
+ withPrepositionIn: '1 sekundu'
+ },
+ dual: '{{count}} sekunde',
+ other: '{{count}} sekundi'
+ },
+
+ halfAMinute: 'pola minute',
+
+ lessThanXMinutes: {
+ one: {
+ standalone: 'manje od 1 minute',
+ withPrepositionAgo: 'manje od 1 minute',
+ withPrepositionIn: 'manje od 1 minutu'
+ },
+ dual: 'manje od {{count}} minute',
+ other: 'manje od {{count}} minuta'
+ },
+
+ xMinutes: {
+ one: {
+ standalone: '1 minuta',
+ withPrepositionAgo: '1 minute',
+ withPrepositionIn: '1 minutu'
+ },
+ dual: '{{count}} minute',
+ other: '{{count}} minuta'
+ },
+
+ aboutXHours: {
+ one: {
+ standalone: 'oko 1 sat',
+ withPrepositionAgo: 'oko 1 sat',
+ withPrepositionIn: 'oko 1 sat'
+ },
+ dual: 'oko {{count}} sata',
+ other: 'oko {{count}} sati'
+ },
+
+ xHours: {
+ one: {
+ standalone: '1 sat',
+ withPrepositionAgo: '1 sat',
+ withPrepositionIn: '1 sat'
+ },
+ dual: '{{count}} sata',
+ other: '{{count}} sati'
+ },
+
+ xDays: {
+ one: {
+ standalone: '1 dan',
+ withPrepositionAgo: '1 dan',
+ withPrepositionIn: '1 dan'
+ },
+ dual: '{{count}} dana',
+ other: '{{count}} dana'
+ },
+
+ aboutXWeeks: {
+ one: {
+ standalone: 'oko 1 tjedan',
+ withPrepositionAgo: 'oko 1 tjedan',
+ withPrepositionIn: 'oko 1 tjedan'
+ },
+ dual: 'oko {{count}} tjedna',
+ other: 'oko {{count}} tjedana'
+ },
+
+ xWeeks: {
+ one: {
+ standalone: '1 tjedan',
+ withPrepositionAgo: '1 tjedan',
+ withPrepositionIn: '1 tjedan'
+ },
+ dual: '{{count}} tjedna',
+ other: '{{count}} tjedana'
+ },
+
+ aboutXMonths: {
+ one: {
+ standalone: 'oko 1 mjesec',
+ withPrepositionAgo: 'oko 1 mjesec',
+ withPrepositionIn: 'oko 1 mjesec'
+ },
+ dual: 'oko {{count}} mjeseca',
+ other: 'oko {{count}} mjeseci'
+ },
+
+ xMonths: {
+ one: {
+ standalone: '1 mjesec',
+ withPrepositionAgo: '1 mjesec',
+ withPrepositionIn: '1 mjesec'
+ },
+ dual: '{{count}} mjeseca',
+ other: '{{count}} mjeseci'
+ },
+
+ aboutXYears: {
+ one: {
+ standalone: 'oko 1 godinu',
+ withPrepositionAgo: 'oko 1 godinu',
+ withPrepositionIn: 'oko 1 godinu'
+ },
+ dual: 'oko {{count}} godine',
+ other: 'oko {{count}} godina'
+ },
+
+ xYears: {
+ one: {
+ standalone: '1 godina',
+ withPrepositionAgo: '1 godine',
+ withPrepositionIn: '1 godinu'
+ },
+ dual: '{{count}} godine',
+ other: '{{count}} godina'
+ },
+
+ overXYears: {
+ one: {
+ standalone: 'preko 1 godinu',
+ withPrepositionAgo: 'preko 1 godinu',
+ withPrepositionIn: 'preko 1 godinu'
+ },
+ dual: 'preko {{count}} godine',
+ other: 'preko {{count}} godina'
+ },
+
+ almostXYears: {
+ one: {
+ standalone: 'gotovo 1 godinu',
+ withPrepositionAgo: 'gotovo 1 godinu',
+ withPrepositionIn: 'gotovo 1 godinu'
+ },
+ dual: 'gotovo {{count}} godine',
+ other: 'gotovo {{count}} godina'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ result = formatDistanceLocale[token].one.withPrepositionIn
+ } else {
+ result = formatDistanceLocale[token].one.withPrepositionAgo
+ }
+ } else {
+ result = formatDistanceLocale[token].one.standalone
+ }
+ } else if (
+ count % 10 > 1 &&
+ count % 10 < 5 && // if last digit is between 2 and 4
+ String(count).substr(-2, 1) !== '1' // unless the 2nd to last digit is "1"
+ ) {
+ result = formatDistanceLocale[token].dual.replace('{{count}}', count)
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'za ' + result
+ } else {
+ return 'prije ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/hr/_lib/formatLong/index.js b/date-fns/src/locale/hr/_lib/formatLong/index.js
new file mode 100644
index 0000000..0d8e62f
--- /dev/null
+++ b/date-fns/src/locale/hr/_lib/formatLong/index.js
@@ -0,0 +1,39 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d. MMMM y.',
+ long: 'd. MMMM y.',
+ medium: 'd. MMM y.',
+ short: 'dd. MM. y.'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss (zzzz)',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'u' {{time}}",
+ long: "{{date}} 'u' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/hr/_lib/formatRelative/index.js b/date-fns/src/locale/hr/_lib/formatRelative/index.js
new file mode 100644
index 0000000..6f4ff43
--- /dev/null
+++ b/date-fns/src/locale/hr/_lib/formatRelative/index.js
@@ -0,0 +1,44 @@
+var formatRelativeLocale = {
+ lastWeek: function(date) {
+ var day = date.getUTCDay()
+
+ switch (day) {
+ case 0:
+ return "'prošlu nedjelju u' p"
+ case 3:
+ return "'prošlu srijedu u' p"
+ case 6:
+ return "'prošlu subotu u' p"
+ default:
+ return "'prošli' EEEE 'u' p"
+ }
+ },
+ yesterday: "'jučer u' p",
+ today: "'danas u' p",
+ tomorrow: "'sutra u' p",
+ nextWeek: function(date) {
+ var day = date.getUTCDay()
+
+ switch (day) {
+ case 0:
+ return "'iduću nedjelju u' p"
+ case 3:
+ return "'iduću srijedu u' p"
+ case 6:
+ return "'iduću subotu u' p"
+ default:
+ return "'prošli' EEEE 'u' p"
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, _baseDate, _options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/hr/_lib/localize/index.js b/date-fns/src/locale/hr/_lib/localize/index.js
new file mode 100644
index 0000000..76b64be
--- /dev/null
+++ b/date-fns/src/locale/hr/_lib/localize/index.js
@@ -0,0 +1,222 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return String(number).concat('.')
+}
+
+var eraValues = {
+ narrow: ['pr.n.e.', 'AD'],
+ abbreviated: ['pr. Kr.', 'po. Kr.'],
+ wide: ['Prije Krista', 'Poslije Krista']
+}
+
+var monthValues = {
+ narrow: [
+ '1.',
+ '2.',
+ '3.',
+ '4.',
+ '5.',
+ '6.',
+ '7.',
+ '8.',
+ '9.',
+ '10.',
+ '11.',
+ '12.'
+ ],
+ abbreviated: [
+ 'sij',
+ 'velj',
+ 'ožu',
+ 'tra',
+ 'svi',
+ 'lip',
+ 'srp',
+ 'kol',
+ 'ruj',
+ 'lis',
+ 'stu',
+ 'pro'
+ ],
+ wide: [
+ 'siječanj',
+ 'veljača',
+ 'ožujak',
+ 'travanj',
+ 'svibanj',
+ 'lipanj',
+ 'srpanj',
+ 'kolovoz',
+ 'rujan',
+ 'listopad',
+ 'studeni',
+ 'prosinac'
+ ]
+}
+
+var formattingMonthValues = {
+ narrow: [
+ '1.',
+ '2.',
+ '3.',
+ '4.',
+ '5.',
+ '6.',
+ '7.',
+ '8.',
+ '9.',
+ '10.',
+ '11.',
+ '12.'
+ ],
+ abbreviated: [
+ 'sij',
+ 'velj',
+ 'ožu',
+ 'tra',
+ 'svi',
+ 'lip',
+ 'srp',
+ 'kol',
+ 'ruj',
+ 'lis',
+ 'stu',
+ 'pro'
+ ],
+ wide: [
+ 'siječnja',
+ 'veljače',
+ 'ožujka',
+ 'travnja',
+ 'svibnja',
+ 'lipnja',
+ 'srpnja',
+ 'kolovoza',
+ 'rujna',
+ 'listopada',
+ 'studenog',
+ 'prosinca'
+ ]
+}
+
+var quarterValues = {
+ narrow: ['1.', '2.', '3.', '4.'],
+ abbreviated: ['1. kv.', '2. kv.', '3. kv.', '4. kv.'],
+ wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']
+}
+
+var dayValues = {
+ narrow: ['N', 'P', 'U', 'S', 'Č', 'P', 'S'],
+ short: ['ned', 'pon', 'uto', 'sri', 'čet', 'pet', 'sub'],
+ abbreviated: ['ned', 'pon', 'uto', 'sri', 'čet', 'pet', 'sub'],
+ wide: [
+ 'nedjelja',
+ 'ponedjeljak',
+ 'utorak',
+ 'srijeda',
+ 'četvrtak',
+ 'petak',
+ 'subota'
+ ]
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutro',
+ afternoon: 'popodne',
+ evening: 'navečer',
+ night: 'noću'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutro',
+ afternoon: 'popodne',
+ evening: 'navečer',
+ night: 'noću'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutro',
+ afternoon: 'poslije podne',
+ evening: 'navečer',
+ night: 'noću'
+ }
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutro',
+ afternoon: 'popodne',
+ evening: 'navečer',
+ night: 'noću'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutro',
+ afternoon: 'popodne',
+ evening: 'navečer',
+ night: 'noću'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutro',
+ afternoon: 'poslije podne',
+ evening: 'navečer',
+ night: 'noću'
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/hr/_lib/match/index.js b/date-fns/src/locale/hr/_lib/match/index.js
new file mode 100644
index 0000000..78cb630
--- /dev/null
+++ b/date-fns/src/locale/hr/_lib/match/index.js
@@ -0,0 +1,132 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\./i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(pr\.n\.e\.|AD)/i,
+ abbreviated: /^(pr\.\s?Kr\.|po\.\s?Kr\.)/i,
+ wide: /^(Prije Krista|prije nove ere|Poslije Krista|nova era)/i
+}
+var parseEraPatterns = {
+ any: [/^pr/i, /^(po|nova)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234]\.\s?kv\.?/i,
+ wide: /^[1234]\. kvartal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(10|11|12|[123456789])\./i,
+ abbreviated: /^(sij|velj|(ožu|ozu)|tra|svi|lip|srp|kol|ruj|lis|stu|pro)/i,
+ wide: /^((siječanj|siječnja|sijecanj|sijecnja)|(veljača|veljače|veljaca|veljace)|(ožujak|ožujka|ozujak|ozujka)|(travanj|travnja)|(svibanj|svibnja)|(lipanj|lipnja)|(srpanj|srpnja)|(kolovoz|kolovoza)|(rujan|rujna)|(listopad|listopada)|(studeni|studenog)|(prosinac|prosinca))/i
+}
+var parseMonthPatterns = {
+ narrow: [/(10|11|12|[123456789])/i],
+ abbreviated: [
+ /^sij/i,
+ /^velj/i,
+ /^(ožu|ozu)/i,
+ /^tra/i,
+ /^svi/i,
+ /^lip/i,
+ /^srp/i,
+ /^kol/i,
+ /^ruj/i,
+ /^lis/i,
+ /^stu/i,
+ /^pro/i
+ ],
+ wide: [
+ /^sij/i,
+ /^velj/i,
+ /^(ožu|ozu)/i,
+ /^tra/i,
+ /^svi/i,
+ /^lip/i,
+ /^srp/i,
+ /^kol/i,
+ /^ruj/i,
+ /^lis/i,
+ /^stu/i,
+ /^pro/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[npusčc]/i,
+ short: /^(ned|pon|uto|sri|(čet|cet)|pet|sub)/i,
+ abbreviated: /^(ned|pon|uto|sri|(čet|cet)|pet|sub)/i,
+ wide: /^(nedjelja|ponedjeljak|utorak|srijeda|(četvrtak|cetvrtak)|petak|subota)/i
+}
+var parseDayPatterns = {
+ narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
+ any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(am|pm|ponoc|ponoć|(po)?podne|navecer|navečer|noću|poslije podne|ujutro)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^pono/i,
+ noon: /^pod/i,
+ morning: /jutro/i,
+ afternoon: /(poslije\s|po)+podne/i,
+ evening: /(navece|naveče)/i,
+ night: /(nocu|noću)/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'wide'
+ }),
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/hr/index.d.ts b/date-fns/src/locale/hr/index.d.ts
new file mode 100644
index 0000000..025baa3
--- /dev/null
+++ b/date-fns/src/locale/hr/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hr } from 'date-fns/locale'
+export default hr
diff --git a/date-fns/src/locale/hr/index.js b/date-fns/src/locale/hr/index.js
new file mode 100644
index 0000000..e48232d
--- /dev/null
+++ b/date-fns/src/locale/hr/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Croatian locale.
+ * @language Croatian
+ * @iso-639-2 hrv
+ * @author Matija Marohnić [@silvenon]{@link https://github.com/silvenon}
+ * @author Manico [@manico]{@link https://github.com/manico}
+ * @author Ivan Jeržabek [@jerzabek]{@link https://github.com/jerzabek}
+ */
+var locale = {
+ code: 'hr',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/hr/index.js.flow b/date-fns/src/locale/hr/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/hr/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/hr/snapshot.md b/date-fns/src/locale/hr/snapshot.md
new file mode 100644
index 0000000..95bcd16
--- /dev/null
+++ b/date-fns/src/locale/hr/snapshot.md
@@ -0,0 +1,304 @@
+# Croatian (hr) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1. kv. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kv. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2. | Invalid Date |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1. kv. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kv. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | velj | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | srp | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | veljače | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | srpnja | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | 2. | 2019-01-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | velj | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | srp | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | veljača | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | srpanj | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | 2. | 2019-01-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | ponedjeljak | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | petak | Invalid Date |
+| | EEEEE | 2019-02-11T12:13:14.015Z | P | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | P | Invalid Date |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | ponedjeljak | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | petak | Invalid Date |
+| | iiiii | 2019-02-11T12:13:14.015Z | P | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | P | Invalid Date |
+| | iiiiii | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | ponedjeljak | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | petak | Invalid Date |
+| | eeeee | 2019-02-11T12:13:14.015Z | P | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | P | Invalid Date |
+| | eeeeee | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | ponedjeljak | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | petak | Invalid Date |
+| | ccccc | 2019-02-11T12:13:14.015Z | P | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | P | Invalid Date |
+| | cccccc | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ujutro | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popodne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | navečer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ujutro | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popodne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | navečer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ujutro | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popodne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | navečer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | ujutro | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | poslije podne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | navečer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ujutro | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popodne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | navečer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11. 02. 1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 05. 1453. | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. velj 1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. svi 1453. | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. veljače 1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. svibnja 1453. | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | srijeda, 11. veljače 1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | nedjelja, 29. svibnja 1453. | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 (GMT+00:00) | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 (GMT+00:00) | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11. 02. 1987. 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 05. 1453. 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. velj 1987. 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. svi 1453. 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. veljače 1987. u 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. svibnja 1453. u 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | srijeda, 11. veljače 1987. u 12:13:14 (GMT+00:00) | Errored |
+| | | 1453-05-29T23:59:59.999Z | nedjelja, 29. svibnja 1453. u 23:59:59 (GMT+00:00) | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------- | ---------------------- | ----------------------- |
+| 2006-01-01T00:00:00.000Z | oko 6 godina | oko 6 godina | za oko 6 godina |
+| 2005-01-01T00:00:00.000Z | oko 5 godina | oko 5 godina | za oko 5 godina |
+| 2004-01-01T00:00:00.000Z | oko 4 godine | oko 4 godine | za oko 4 godine |
+| 2003-01-01T00:00:00.000Z | oko 3 godine | oko 3 godine | za oko 3 godine |
+| 2002-01-01T00:00:00.000Z | oko 2 godine | oko 2 godine | za oko 2 godine |
+| 2001-06-01T00:00:00.000Z | preko 1 godinu | preko 1 godinu | za preko 1 godinu |
+| 2001-02-01T00:00:00.000Z | oko 1 godinu | oko 1 godinu | za oko 1 godinu |
+| 2001-01-01T00:00:00.000Z | oko 1 godinu | oko 1 godinu | za oko 1 godinu |
+| 2000-06-01T00:00:00.000Z | 5 mjeseci | 5 mjeseci | za 5 mjeseci |
+| 2000-03-01T00:00:00.000Z | 2 mjeseca | 2 mjeseca | za 2 mjeseca |
+| 2000-02-01T00:00:00.000Z | oko 1 mjesec | oko 1 mjesec | za oko 1 mjesec |
+| 2000-01-15T00:00:00.000Z | 14 dana | 14 dana | za 14 dana |
+| 2000-01-02T00:00:00.000Z | 1 dan | 1 dan | za 1 dan |
+| 2000-01-01T06:00:00.000Z | oko 6 sati | oko 6 sati | za oko 6 sati |
+| 2000-01-01T01:00:00.000Z | oko 1 sat | oko 1 sat | za oko 1 sat |
+| 2000-01-01T00:45:00.000Z | oko 1 sat | oko 1 sat | za oko 1 sat |
+| 2000-01-01T00:30:00.000Z | 30 minuta | 30 minuta | za 30 minuta |
+| 2000-01-01T00:15:00.000Z | 15 minuta | 15 minuta | za 15 minuta |
+| 2000-01-01T00:01:00.000Z | 1 minuta | 1 minuta | za 1 minutu |
+| 2000-01-01T00:00:25.000Z | manje od 1 minute | pola minute | za manje od 1 minutu |
+| 2000-01-01T00:00:15.000Z | manje od 1 minute | manje od 20 sekundi | za manje od 1 minutu |
+| 2000-01-01T00:00:05.000Z | manje od 1 minute | manje od 10 sekundi | za manje od 1 minutu |
+| 2000-01-01T00:00:00.000Z | manje od 1 minute | manje od 5 sekundi | prije manje od 1 minute |
+| 1999-12-31T23:59:55.000Z | manje od 1 minute | manje od 10 sekundi | prije manje od 1 minute |
+| 1999-12-31T23:59:45.000Z | manje od 1 minute | manje od 20 sekundi | prije manje od 1 minute |
+| 1999-12-31T23:59:35.000Z | manje od 1 minute | pola minute | prije manje od 1 minute |
+| 1999-12-31T23:59:00.000Z | 1 minuta | 1 minuta | prije 1 minute |
+| 1999-12-31T23:45:00.000Z | 15 minuta | 15 minuta | prije 15 minuta |
+| 1999-12-31T23:30:00.000Z | 30 minuta | 30 minuta | prije 30 minuta |
+| 1999-12-31T23:15:00.000Z | oko 1 sat | oko 1 sat | prije oko 1 sat |
+| 1999-12-31T23:00:00.000Z | oko 1 sat | oko 1 sat | prije oko 1 sat |
+| 1999-12-31T18:00:00.000Z | oko 6 sati | oko 6 sati | prije oko 6 sati |
+| 1999-12-30T00:00:00.000Z | 2 dana | 2 dana | prije 2 dana |
+| 1999-12-15T00:00:00.000Z | 17 dana | 17 dana | prije 17 dana |
+| 1999-12-01T00:00:00.000Z | oko 1 mjesec | oko 1 mjesec | prije oko 1 mjesec |
+| 1999-11-01T00:00:00.000Z | 2 mjeseca | 2 mjeseca | prije 2 mjeseca |
+| 1999-06-01T00:00:00.000Z | 7 mjeseci | 7 mjeseci | prije 7 mjeseci |
+| 1999-01-01T00:00:00.000Z | oko 1 godinu | oko 1 godinu | prije oko 1 godinu |
+| 1998-12-01T00:00:00.000Z | oko 1 godinu | oko 1 godinu | prije oko 1 godinu |
+| 1998-06-01T00:00:00.000Z | preko 1 godinu | preko 1 godinu | prije preko 1 godinu |
+| 1998-01-01T00:00:00.000Z | oko 2 godine | oko 2 godine | prije oko 2 godine |
+| 1997-01-01T00:00:00.000Z | oko 3 godine | oko 3 godine | prije oko 3 godine |
+| 1996-01-01T00:00:00.000Z | oko 4 godine | oko 4 godine | prije oko 4 godine |
+| 1995-01-01T00:00:00.000Z | oko 5 godina | oko 5 godina | prije oko 5 godina |
+| 1994-01-01T00:00:00.000Z | oko 6 godina | oko 6 godina | prije oko 6 godina |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 godina | za 6 godina | 52608 sati |
+| 2005-01-01T00:00:00.000Z | 5 godina | za 5 godina | 43848 sati |
+| 2004-01-01T00:00:00.000Z | 4 godine | za 4 godine | 35064 sata |
+| 2003-01-01T00:00:00.000Z | 3 godine | za 3 godine | 26304 sata |
+| 2002-01-01T00:00:00.000Z | 2 godine | za 2 godine | 17544 sata |
+| 2001-06-01T00:00:00.000Z | 1 godina | za 1 godinu | 12408 sati |
+| 2001-02-01T00:00:00.000Z | 1 godina | za 1 godinu | 9528 sati |
+| 2001-01-01T00:00:00.000Z | 1 godina | za 1 godinu | 8784 sata |
+| 2000-06-01T00:00:00.000Z | 5 mjeseci | za 5 mjeseci | 3648 sati |
+| 2000-03-01T00:00:00.000Z | 2 mjeseca | za 2 mjeseca | 1440 sati |
+| 2000-02-01T00:00:00.000Z | 1 mjesec | za 1 mjesec | 744 sata |
+| 2000-01-15T00:00:00.000Z | 14 dana | za 14 dana | 336 sati |
+| 2000-01-02T00:00:00.000Z | 1 dan | za 1 dan | 24 sata |
+| 2000-01-01T06:00:00.000Z | 6 sati | za 6 sati | 6 sati |
+| 2000-01-01T01:00:00.000Z | 1 sat | za 1 sat | 1 sat |
+| 2000-01-01T00:45:00.000Z | 45 minuta | za 45 minuta | 1 sat |
+| 2000-01-01T00:30:00.000Z | 30 minuta | za 30 minuta | 1 sat |
+| 2000-01-01T00:15:00.000Z | 15 minuta | za 15 minuta | 0 sati |
+| 2000-01-01T00:01:00.000Z | 1 minuta | za 1 minutu | 0 sati |
+| 2000-01-01T00:00:25.000Z | 25 sekundi | za 25 sekundi | 0 sati |
+| 2000-01-01T00:00:15.000Z | 15 sekundi | za 15 sekundi | 0 sati |
+| 2000-01-01T00:00:05.000Z | 5 sekundi | za 5 sekundi | 0 sati |
+| 2000-01-01T00:00:00.000Z | 0 sekundi | prije 0 sekundi | 0 sati |
+| 1999-12-31T23:59:55.000Z | 5 sekundi | prije 5 sekundi | 0 sati |
+| 1999-12-31T23:59:45.000Z | 15 sekundi | prije 15 sekundi | 0 sati |
+| 1999-12-31T23:59:35.000Z | 25 sekundi | prije 25 sekundi | 0 sati |
+| 1999-12-31T23:59:00.000Z | 1 minuta | prije 1 minute | 0 sati |
+| 1999-12-31T23:45:00.000Z | 15 minuta | prije 15 minuta | 0 sati |
+| 1999-12-31T23:30:00.000Z | 30 minuta | prije 30 minuta | 1 sat |
+| 1999-12-31T23:15:00.000Z | 45 minuta | prije 45 minuta | 1 sat |
+| 1999-12-31T23:00:00.000Z | 1 sat | prije 1 sat | 1 sat |
+| 1999-12-31T18:00:00.000Z | 6 sati | prije 6 sati | 6 sati |
+| 1999-12-30T00:00:00.000Z | 2 dana | prije 2 dana | 48 sati |
+| 1999-12-15T00:00:00.000Z | 17 dana | prije 17 dana | 408 sati |
+| 1999-12-01T00:00:00.000Z | 1 mjesec | prije 1 mjesec | 744 sata |
+| 1999-11-01T00:00:00.000Z | 2 mjeseca | prije 2 mjeseca | 1464 sata |
+| 1999-06-01T00:00:00.000Z | 7 mjeseci | prije 7 mjeseci | 5136 sati |
+| 1999-01-01T00:00:00.000Z | 1 godina | prije 1 godine | 8760 sati |
+| 1998-12-01T00:00:00.000Z | 1 godina | prije 1 godine | 9504 sata |
+| 1998-06-01T00:00:00.000Z | 2 godine | prije 2 godine | 13896 sati |
+| 1998-01-01T00:00:00.000Z | 2 godine | prije 2 godine | 17520 sati |
+| 1997-01-01T00:00:00.000Z | 3 godine | prije 3 godine | 26280 sati |
+| 1996-01-01T00:00:00.000Z | 4 godine | prije 4 godine | 35064 sata |
+| 1995-01-01T00:00:00.000Z | 5 godina | prije 5 godina | 43824 sata |
+| 1994-01-01T00:00:00.000Z | 6 godina | prije 6 godina | 52584 sata |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------- |
+| 2000-01-10T00:00:00.000Z | 10. 01. 2000. |
+| 2000-01-05T00:00:00.000Z | iduću srijedu u 00:00 |
+| 2000-01-02T00:00:00.000Z | sutra u 00:00 |
+| 2000-01-01T00:00:00.000Z | danas u 00:00 |
+| 1999-12-31T00:00:00.000Z | jučer u 00:00 |
+| 1999-12-27T00:00:00.000Z | prošli ponedjeljak u 00:00 |
+| 1999-12-21T00:00:00.000Z | 21. 12. 1999. |
diff --git a/date-fns/src/locale/ht/_lib/formatDistance/index.js b/date-fns/src/locale/ht/_lib/formatDistance/index.js
new file mode 100644
index 0000000..47fd416
--- /dev/null
+++ b/date-fns/src/locale/ht/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'mwens pase yon segond',
+ other: 'mwens pase {{count}} segond',
+ },
+
+ xSeconds: {
+ one: '1 segond',
+ other: '{{count}} segond',
+ },
+
+ halfAMinute: '30 segond',
+
+ lessThanXMinutes: {
+ one: 'mwens pase yon minit',
+ other: 'mwens pase {{count}} minit',
+ },
+
+ xMinutes: {
+ one: '1 minit',
+ other: '{{count}} minit',
+ },
+
+ aboutXHours: {
+ one: 'anviwon inè',
+ other: 'anviwon {{count}} è',
+ },
+
+ xHours: {
+ one: '1 lè',
+ other: '{{count}} lè',
+ },
+
+ xDays: {
+ one: '1 jou',
+ other: '{{count}} jou',
+ },
+
+ aboutXWeeks: {
+ one: 'anviwon 1 semèn',
+ other: 'anviwon {{count}} semèn',
+ },
+
+ xWeeks: {
+ one: '1 semèn',
+ other: '{{count}} semèn',
+ },
+
+ aboutXMonths: {
+ one: 'anviwon 1 mwa',
+ other: 'anviwon {{count}} mwa',
+ },
+
+ xMonths: {
+ one: '1 mwa',
+ other: '{{count}} mwa',
+ },
+
+ aboutXYears: {
+ one: 'anviwon 1 an',
+ other: 'anviwon {{count}} an',
+ },
+
+ xYears: {
+ one: '1 an',
+ other: '{{count}} an',
+ },
+
+ overXYears: {
+ one: 'plis pase 1 an',
+ other: 'plis pase {{count}} an',
+ },
+
+ almostXYears: {
+ one: 'prèske 1 an',
+ other: 'prèske {{count}} an',
+ },
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'nan ' + result
+ } else {
+ return 'sa fè ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ht/_lib/formatLong/index.js b/date-fns/src/locale/ht/_lib/formatLong/index.js
new file mode 100644
index 0000000..94972ec
--- /dev/null
+++ b/date-fns/src/locale/ht/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d MMMM y',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'dd/MM/y',
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm',
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'nan lè' {{time}}",
+ long: "{{date}} 'nan lè' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}',
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full',
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full',
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full',
+ }),
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ht/_lib/formatRelative/index.js b/date-fns/src/locale/ht/_lib/formatRelative/index.js
new file mode 100644
index 0000000..5de726c
--- /dev/null
+++ b/date-fns/src/locale/ht/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'pase nan lè' p",
+ yesterday: "'yè nan lè' p",
+ today: "'jodi a' p",
+ tomorrow: "'demen nan lè' p'",
+ nextWeek: "eeee 'pwochen nan lè' p",
+ other: 'P',
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ht/_lib/formatters/index.js b/date-fns/src/locale/ht/_lib/formatters/index.js
new file mode 100644
index 0000000..dfb0661
--- /dev/null
+++ b/date-fns/src/locale/ht/_lib/formatters/index.js
@@ -0,0 +1,19 @@
+var formatters = {}
+
+// Special case for day of month ordinals in long date format context:
+// 1er mars, 2 mars, 3 mars, …
+// See https://github.com/date-fns/date-fns/issues/437
+var monthsTokens = ['MMM', 'MMMM']
+monthsTokens.forEach(function (monthToken) {
+ formatters['Do ' + monthToken] = function (date, options) {
+ var commonFormatters = options.formatters
+ var dayOfMonthToken = date.getUTCDate() === 1 ? 'Do' : 'D'
+ var dayOfMonthFormatter = commonFormatters[dayOfMonthToken]
+ var monthFormatter = commonFormatters[monthToken]
+ return (
+ dayOfMonthFormatter(date, options) + ' ' + monthFormatter(date, options)
+ )
+ }
+})
+
+export default formatters
diff --git a/date-fns/src/locale/ht/_lib/localize/index.js b/date-fns/src/locale/ht/_lib/localize/index.js
new file mode 100644
index 0000000..a809fc6
--- /dev/null
+++ b/date-fns/src/locale/ht/_lib/localize/index.js
@@ -0,0 +1,147 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['av. J.-K', 'ap. J.-K'],
+ abbreviated: ['av. J.-K', 'ap. J.-K'],
+ wide: ['anvan Jezi Kris', 'apre Jezi Kris'],
+}
+
+var quarterValues = {
+ narrow: ['T1', 'T2', 'T3', 'T4'],
+ abbreviated: ['1ye trim.', '2yèm trim.', '3yèm trim.', '4yèm trim.'],
+ wide: ['1ye trimès', '2yèm trimès', '3yèm trimès', '4yèm trimès'],
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'O', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'janv.',
+ 'fevr.',
+ 'mas',
+ 'avr.',
+ 'me',
+ 'jen',
+ 'jiyè',
+ 'out',
+ 'sept.',
+ 'okt.',
+ 'nov.',
+ 'des.',
+ ],
+ wide: [
+ 'janvye',
+ 'fevrye',
+ 'mas',
+ 'avril',
+ 'me',
+ 'jen',
+ 'jiyè',
+ 'out',
+ 'septanm',
+ 'oktòb',
+ 'novanm',
+ 'desanm',
+ ],
+}
+
+var dayValues = {
+ narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
+ short: ['di', 'le', 'ma', 'mè', 'je', 'va', 'sa'],
+ abbreviated: ['dim.', 'len.', 'mad.', 'mèk.', 'jed.', 'van.', 'sam.'],
+ wide: ['dimanch', 'lendi', 'madi', 'mèkredi', 'jedi', 'vandredi', 'samdi'],
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'minwit',
+ noon: 'midi',
+ morning: 'mat.',
+ afternoon: 'ap.m.',
+ evening: 'swa',
+ night: 'mat.',
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'minwit',
+ noon: 'midi',
+ morning: 'maten',
+ afternoon: 'aprèmidi',
+ evening: 'swa',
+ night: 'maten',
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'minwit',
+ noon: 'midi',
+ morning: 'nan maten',
+ afternoon: 'nan aprèmidi',
+ evening: 'nan aswè',
+ night: 'nan maten',
+ },
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var suffix
+
+ if (number === 0) {
+ return number
+ }
+
+ if (unit === 'year' || unit === 'hour' || unit === 'week') {
+ if (number === 1) {
+ suffix = 'ye'
+ } else {
+ suffix = 'yèm'
+ }
+ } else {
+ if (number === 1) {
+ suffix = 'ye'
+ } else {
+ suffix = 'yèm'
+ }
+ }
+
+ return number + suffix
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide',
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function (quarter) {
+ return Number(quarter) - 1
+ },
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide',
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ }),
+}
+
+export default localize
diff --git a/date-fns/src/locale/ht/_lib/match/index.js b/date-fns/src/locale/ht/_lib/match/index.js
new file mode 100644
index 0000000..2248991
--- /dev/null
+++ b/date-fns/src/locale/ht/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(ye|yèm)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(av\.J\.K|ap\.J\.K|ap\.J\.-K)/i,
+ abbreviated: /^(av\.J\.-K|av\.J-K|apr\.J\.-K|apr\.J-K|ap\.J-K)/i,
+ wide: /^(avan Jezi Kris|apre Jezi Kris)/i,
+}
+var parseEraPatterns = {
+ any: [/^av/i, /^ap/i],
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^t[1234]/i,
+ wide: /^[1234](ye|yèm)? trimès/i,
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i],
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(janv|fevr|mas|avr|me|jen|jiyè|out|sept|okt|nov|des)\.?/i,
+ wide: /^(janvye|fevrye|mas|avril|me|jen|jiyè|out|septanm|oktòb|novanm|desanm)/i,
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^o/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i,
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^ma/i,
+ /^av/i,
+ /^me/i,
+ /^je/i,
+ /^ji/i,
+ /^ou/i,
+ /^s/i,
+ /^ok/i,
+ /^n/i,
+ /^d/i,
+ ],
+}
+
+var matchDayPatterns = {
+ narrow: /^[lmjvsd]/i,
+ short: /^(di|le|ma|me|je|va|sa)/i,
+ abbreviated: /^(dim|len|mad|mèk|jed|van|sam)\.?/i,
+ wide: /^(dimanch|lendi|madi|mèkredi|jedi|vandredi|samdi)/i,
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],
+ any: [/^di/i, /^le/i, /^ma/i, /^mè/i, /^je/i, /^va/i, /^sa/i],
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|minwit|midi|mat\.?|ap\.?m\.?|swa)/i,
+ any: /^([ap]\.?\s?m\.?|nan maten|nan aprèmidi|nan aswè)/i,
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^min/i,
+ noon: /^mid/i,
+ morning: /mat/i,
+ afternoon: /ap/i,
+ evening: /sw/i,
+ night: /nwit/i,
+ },
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function (value) {
+ return parseInt(value, 10)
+ },
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any',
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function (index) {
+ return index + 1
+ },
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any',
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any',
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any',
+ }),
+}
+
+export default match
diff --git a/date-fns/src/locale/ht/index.d.ts b/date-fns/src/locale/ht/index.d.ts
new file mode 100644
index 0000000..7362d75
--- /dev/null
+++ b/date-fns/src/locale/ht/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ht } from 'date-fns/locale'
+export default ht
diff --git a/date-fns/src/locale/ht/index.js b/date-fns/src/locale/ht/index.js
new file mode 100644
index 0000000..033406f
--- /dev/null
+++ b/date-fns/src/locale/ht/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Haitian Creole locale.
+ * @language Haitian Creole
+ * @iso-639-2 hat
+ * @author Rubens Mariuzzo [@rmariuzzo]{@link https://github.com/rmariuzzo}
+ * @author Watson Marcelain [@watsongm24]{@link https://github.com/watsongm24}
+ */
+
+var locale = {
+ code: 'ht',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4,
+ },
+}
+
+export default locale
diff --git a/date-fns/src/locale/ht/index.js.flow b/date-fns/src/locale/ht/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ht/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ht/snapshot.md b/date-fns/src/locale/ht/snapshot.md
new file mode 100644
index 0000000..9ffb330
--- /dev/null
+++ b/date-fns/src/locale/ht/snapshot.md
@@ -0,0 +1,304 @@
+# Haitian Creole (ht) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987yèm | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5yèm | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987yèm | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4yèm | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1ye | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2yèm | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1ye trim. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2yèm trim. | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1ye trimès | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2yèm trimès | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | T1 | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | T2 | Invalid Date |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1ye | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2yèm | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1ye trim. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2yèm trim. | Invalid Date |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1ye trimès | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2yèm trimès | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2yèm | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7yèm | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | fevr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jiyè | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | fevrye | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jiyè | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2yèm | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7yèm | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | fevr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jiyè | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | fevrye | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jiyè | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1ye | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48yèm | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1ye | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48yèm | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11yèm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28yèm | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42yèm | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365yèm | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | len. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | van. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | len. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | van. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | len. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | van. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | lendi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vandredi | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | le | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | va | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1ye | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5yèm | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | len. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | van. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | lendi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vandredi | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | le | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | va | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1ye | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5yèm | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | len. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | van. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | lendi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vandredi | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | le | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | va | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1ye | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5yèm | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | len. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | van. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | lendi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vandredi | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | le | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | va | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | maten | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | aprèmidi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | swa | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | maten | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | maten | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | aprèmidi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | swa | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | maten | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | maten | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | aprèmidi | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | swa | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | maten | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | nan maten | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nan aprèmidi | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nan aswè | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nan maten | 2019-02-11T04:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | mat. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ap.m. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | swa | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | mat. | 2019-02-11T04:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11yèm | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11yèm | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11yèm | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23yèm | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11yèm | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11yèm | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11yèm | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23yèm | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1ye | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55yèm | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1ye | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55yèm | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 fevr. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 me 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 fevrye 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 me 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | mèkredi 11 fevrye 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | dimanch 29 me 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 fevr. 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 me 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 fevrye 1987 nan lè 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 me 1453 nan lè 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | mèkredi 11 fevrye 1987 nan lè 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | dimanch 29 me 1453 nan lè 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------------------- | ---------------------- | -------------------------- |
+| 2006-01-01T00:00:00.000Z | anviwon 6 an | anviwon 6 an | nan anviwon 6 an |
+| 2005-01-01T00:00:00.000Z | anviwon 5 an | anviwon 5 an | nan anviwon 5 an |
+| 2004-01-01T00:00:00.000Z | anviwon 4 an | anviwon 4 an | nan anviwon 4 an |
+| 2003-01-01T00:00:00.000Z | anviwon 3 an | anviwon 3 an | nan anviwon 3 an |
+| 2002-01-01T00:00:00.000Z | anviwon 2 an | anviwon 2 an | nan anviwon 2 an |
+| 2001-06-01T00:00:00.000Z | plis pase 1 an | plis pase 1 an | nan plis pase 1 an |
+| 2001-02-01T00:00:00.000Z | anviwon 1 an | anviwon 1 an | nan anviwon 1 an |
+| 2001-01-01T00:00:00.000Z | anviwon 1 an | anviwon 1 an | nan anviwon 1 an |
+| 2000-06-01T00:00:00.000Z | 5 mwa | 5 mwa | nan 5 mwa |
+| 2000-03-01T00:00:00.000Z | 2 mwa | 2 mwa | nan 2 mwa |
+| 2000-02-01T00:00:00.000Z | anviwon 1 mwa | anviwon 1 mwa | nan anviwon 1 mwa |
+| 2000-01-15T00:00:00.000Z | 14 jou | 14 jou | nan 14 jou |
+| 2000-01-02T00:00:00.000Z | 1 jou | 1 jou | nan 1 jou |
+| 2000-01-01T06:00:00.000Z | anviwon 6 è | anviwon 6 è | nan anviwon 6 è |
+| 2000-01-01T01:00:00.000Z | anviwon inè | anviwon inè | nan anviwon inè |
+| 2000-01-01T00:45:00.000Z | anviwon inè | anviwon inè | nan anviwon inè |
+| 2000-01-01T00:30:00.000Z | 30 minit | 30 minit | nan 30 minit |
+| 2000-01-01T00:15:00.000Z | 15 minit | 15 minit | nan 15 minit |
+| 2000-01-01T00:01:00.000Z | 1 minit | 1 minit | nan 1 minit |
+| 2000-01-01T00:00:25.000Z | mwens pase yon minit | 30 segond | nan mwens pase yon minit |
+| 2000-01-01T00:00:15.000Z | mwens pase yon minit | mwens pase 20 segond | nan mwens pase yon minit |
+| 2000-01-01T00:00:05.000Z | mwens pase yon minit | mwens pase 10 segond | nan mwens pase yon minit |
+| 2000-01-01T00:00:00.000Z | mwens pase yon minit | mwens pase 5 segond | sa fè mwens pase yon minit |
+| 1999-12-31T23:59:55.000Z | mwens pase yon minit | mwens pase 10 segond | sa fè mwens pase yon minit |
+| 1999-12-31T23:59:45.000Z | mwens pase yon minit | mwens pase 20 segond | sa fè mwens pase yon minit |
+| 1999-12-31T23:59:35.000Z | mwens pase yon minit | 30 segond | sa fè mwens pase yon minit |
+| 1999-12-31T23:59:00.000Z | 1 minit | 1 minit | sa fè 1 minit |
+| 1999-12-31T23:45:00.000Z | 15 minit | 15 minit | sa fè 15 minit |
+| 1999-12-31T23:30:00.000Z | 30 minit | 30 minit | sa fè 30 minit |
+| 1999-12-31T23:15:00.000Z | anviwon inè | anviwon inè | sa fè anviwon inè |
+| 1999-12-31T23:00:00.000Z | anviwon inè | anviwon inè | sa fè anviwon inè |
+| 1999-12-31T18:00:00.000Z | anviwon 6 è | anviwon 6 è | sa fè anviwon 6 è |
+| 1999-12-30T00:00:00.000Z | 2 jou | 2 jou | sa fè 2 jou |
+| 1999-12-15T00:00:00.000Z | 17 jou | 17 jou | sa fè 17 jou |
+| 1999-12-01T00:00:00.000Z | anviwon 1 mwa | anviwon 1 mwa | sa fè anviwon 1 mwa |
+| 1999-11-01T00:00:00.000Z | 2 mwa | 2 mwa | sa fè 2 mwa |
+| 1999-06-01T00:00:00.000Z | 7 mwa | 7 mwa | sa fè 7 mwa |
+| 1999-01-01T00:00:00.000Z | anviwon 1 an | anviwon 1 an | sa fè anviwon 1 an |
+| 1998-12-01T00:00:00.000Z | anviwon 1 an | anviwon 1 an | sa fè anviwon 1 an |
+| 1998-06-01T00:00:00.000Z | plis pase 1 an | plis pase 1 an | sa fè plis pase 1 an |
+| 1998-01-01T00:00:00.000Z | anviwon 2 an | anviwon 2 an | sa fè anviwon 2 an |
+| 1997-01-01T00:00:00.000Z | anviwon 3 an | anviwon 3 an | sa fè anviwon 3 an |
+| 1996-01-01T00:00:00.000Z | anviwon 4 an | anviwon 4 an | sa fè anviwon 4 an |
+| 1995-01-01T00:00:00.000Z | anviwon 5 an | anviwon 5 an | sa fè anviwon 5 an |
+| 1994-01-01T00:00:00.000Z | anviwon 6 an | anviwon 6 an | sa fè anviwon 6 an |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 an | nan 6 an | 52608 lè |
+| 2005-01-01T00:00:00.000Z | 5 an | nan 5 an | 43848 lè |
+| 2004-01-01T00:00:00.000Z | 4 an | nan 4 an | 35064 lè |
+| 2003-01-01T00:00:00.000Z | 3 an | nan 3 an | 26304 lè |
+| 2002-01-01T00:00:00.000Z | 2 an | nan 2 an | 17544 lè |
+| 2001-06-01T00:00:00.000Z | 1 an | nan 1 an | 12408 lè |
+| 2001-02-01T00:00:00.000Z | 1 an | nan 1 an | 9528 lè |
+| 2001-01-01T00:00:00.000Z | 1 an | nan 1 an | 8784 lè |
+| 2000-06-01T00:00:00.000Z | 5 mwa | nan 5 mwa | 3648 lè |
+| 2000-03-01T00:00:00.000Z | 2 mwa | nan 2 mwa | 1440 lè |
+| 2000-02-01T00:00:00.000Z | 1 mwa | nan 1 mwa | 744 lè |
+| 2000-01-15T00:00:00.000Z | 14 jou | nan 14 jou | 336 lè |
+| 2000-01-02T00:00:00.000Z | 1 jou | nan 1 jou | 24 lè |
+| 2000-01-01T06:00:00.000Z | 6 lè | nan 6 lè | 6 lè |
+| 2000-01-01T01:00:00.000Z | 1 lè | nan 1 lè | 1 lè |
+| 2000-01-01T00:45:00.000Z | 45 minit | nan 45 minit | 1 lè |
+| 2000-01-01T00:30:00.000Z | 30 minit | nan 30 minit | 1 lè |
+| 2000-01-01T00:15:00.000Z | 15 minit | nan 15 minit | 0 lè |
+| 2000-01-01T00:01:00.000Z | 1 minit | nan 1 minit | 0 lè |
+| 2000-01-01T00:00:25.000Z | 25 segond | nan 25 segond | 0 lè |
+| 2000-01-01T00:00:15.000Z | 15 segond | nan 15 segond | 0 lè |
+| 2000-01-01T00:00:05.000Z | 5 segond | nan 5 segond | 0 lè |
+| 2000-01-01T00:00:00.000Z | 0 segond | sa fè 0 segond | 0 lè |
+| 1999-12-31T23:59:55.000Z | 5 segond | sa fè 5 segond | 0 lè |
+| 1999-12-31T23:59:45.000Z | 15 segond | sa fè 15 segond | 0 lè |
+| 1999-12-31T23:59:35.000Z | 25 segond | sa fè 25 segond | 0 lè |
+| 1999-12-31T23:59:00.000Z | 1 minit | sa fè 1 minit | 0 lè |
+| 1999-12-31T23:45:00.000Z | 15 minit | sa fè 15 minit | 0 lè |
+| 1999-12-31T23:30:00.000Z | 30 minit | sa fè 30 minit | 1 lè |
+| 1999-12-31T23:15:00.000Z | 45 minit | sa fè 45 minit | 1 lè |
+| 1999-12-31T23:00:00.000Z | 1 lè | sa fè 1 lè | 1 lè |
+| 1999-12-31T18:00:00.000Z | 6 lè | sa fè 6 lè | 6 lè |
+| 1999-12-30T00:00:00.000Z | 2 jou | sa fè 2 jou | 48 lè |
+| 1999-12-15T00:00:00.000Z | 17 jou | sa fè 17 jou | 408 lè |
+| 1999-12-01T00:00:00.000Z | 1 mwa | sa fè 1 mwa | 744 lè |
+| 1999-11-01T00:00:00.000Z | 2 mwa | sa fè 2 mwa | 1464 lè |
+| 1999-06-01T00:00:00.000Z | 7 mwa | sa fè 7 mwa | 5136 lè |
+| 1999-01-01T00:00:00.000Z | 1 an | sa fè 1 an | 8760 lè |
+| 1998-12-01T00:00:00.000Z | 1 an | sa fè 1 an | 9504 lè |
+| 1998-06-01T00:00:00.000Z | 2 an | sa fè 2 an | 13896 lè |
+| 1998-01-01T00:00:00.000Z | 2 an | sa fè 2 an | 17520 lè |
+| 1997-01-01T00:00:00.000Z | 3 an | sa fè 3 an | 26280 lè |
+| 1996-01-01T00:00:00.000Z | 4 an | sa fè 4 an | 35064 lè |
+| 1995-01-01T00:00:00.000Z | 5 an | sa fè 5 an | 43824 lè |
+| 1994-01-01T00:00:00.000Z | 6 an | sa fè 6 an | 52584 lè |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | mèkredi pwochen nan lè 00:00 |
+| 2000-01-02T00:00:00.000Z | demen nan lè 00:00 |
+| 2000-01-01T00:00:00.000Z | jodi a 00:00 |
+| 1999-12-31T00:00:00.000Z | yè nan lè 00:00 |
+| 1999-12-27T00:00:00.000Z | lendi pase nan lè 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/hu/_lib/formatDistance/index.js b/date-fns/src/locale/hu/_lib/formatDistance/index.js
new file mode 100644
index 0000000..97d3af2
--- /dev/null
+++ b/date-fns/src/locale/hu/_lib/formatDistance/index.js
@@ -0,0 +1,92 @@
+var translations = {
+ about: 'körülbelül',
+ over: 'több mint',
+ almost: 'majdnem',
+ lessthan: 'kevesebb mint'
+}
+
+const withoutSuffixes = {
+ xseconds: ' másodperc',
+ halfaminute: 'fél perc',
+ xminutes: ' perc',
+ xhours: ' óra',
+ xdays: ' nap',
+ xweeks: ' hét',
+ xmonths: ' hónap',
+ xyears: ' év'
+}
+
+const withSuffixes = {
+ xseconds: {
+ '-1': ' másodperccel ezelőtt',
+ '1': ' másodperc múlva',
+ '0': ' másodperce'
+ },
+ halfaminute: {
+ '-1': 'fél perccel ezelőtt',
+ '1': 'fél perc múlva',
+ '0': 'fél perce'
+ },
+ xminutes: {
+ '-1': ' perccel ezelőtt',
+ '1': ' perc múlva',
+ '0': ' perce'
+ },
+ xhours: {
+ '-1': ' órával ezelőtt',
+ '1': ' óra múlva',
+ '0': ' órája'
+ },
+ xdays: {
+ '-1': ' nappal ezelőtt',
+ '1': ' nap múlva',
+ '0': ' napja'
+ },
+ xweeks: {
+ '-1': ' héttel ezelőtt',
+ '1': ' hét múlva',
+ '0': ' hete'
+ },
+ xmonths: {
+ '-1': ' hónappal ezelőtt',
+ '1': ' hónap múlva',
+ '0': ' hónapja'
+ },
+ xyears: {
+ '-1': ' évvel ezelőtt',
+ '1': ' év múlva',
+ '0': ' éve'
+ }
+}
+
+function translate(number, addSuffix, key, comparison) {
+ const translated = addSuffix
+ ? withSuffixes[key][comparison]
+ : withoutSuffixes[key]
+
+ if (key === 'halfaminute') {
+ return translated
+ }
+
+ return number + translated
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ var adverb = token.match(/about|over|almost|lessthan/i)
+ var unit = token.replace(adverb, '')
+
+ var result
+ result = translate(
+ count,
+ options.addSuffix,
+ unit.toLowerCase(),
+ options.comparison
+ )
+
+ if (adverb) {
+ result = translations[adverb[0].toLowerCase()] + ' ' + result
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/hu/_lib/formatLong/index.js b/date-fns/src/locale/hu/_lib/formatLong/index.js
new file mode 100644
index 0000000..3dd9916
--- /dev/null
+++ b/date-fns/src/locale/hu/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'y. MMMM d., EEEE',
+ long: 'y. MMMM d.',
+ medium: 'y. MMM d.',
+ short: 'y. MM. dd.'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/hu/_lib/formatRelative/index.js b/date-fns/src/locale/hu/_lib/formatRelative/index.js
new file mode 100644
index 0000000..cfdea74
--- /dev/null
+++ b/date-fns/src/locale/hu/_lib/formatRelative/index.js
@@ -0,0 +1,40 @@
+var accusativeWeekdays = [
+ 'vasárnap',
+ 'hétfőn',
+ 'kedden',
+ 'szerdán',
+ 'csütörtökön',
+ 'pénteken',
+ 'szombaton'
+]
+
+function week(isFuture) {
+ return function(date, _baseDate, _options) {
+ var day = date.getUTCDay()
+ return (
+ (isFuture ? '' : "'múlt' ") +
+ "'" +
+ accusativeWeekdays[day] +
+ "'" +
+ " p'-kor'"
+ )
+ }
+}
+var formatRelativeLocale = {
+ lastWeek: week(false),
+ yesterday: "'tegnap' p'-kor'",
+ today: "'ma' p'-kor'",
+ tomorrow: "'holnap' p'-kor'",
+ nextWeek: week(true),
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/hu/_lib/localize/index.js b/date-fns/src/locale/hu/_lib/localize/index.js
new file mode 100644
index 0000000..fd1e8a2
--- /dev/null
+++ b/date-fns/src/locale/hu/_lib/localize/index.js
@@ -0,0 +1,140 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['ie.', 'isz.'],
+ abbreviated: ['i. e.', 'i. sz.'],
+ wide: ['Krisztus előtt', 'időszámításunk szerint']
+}
+
+var quarterValues = {
+ narrow: ['1.', '2.', '3.', '4.'],
+ abbreviated: ['1. n.év', '2. n.év', '3. n.év', '4. n.év'],
+ wide: ['1. negyedév', '2. negyedév', '3. negyedév', '4. negyedév']
+}
+
+var formattingQuarterValues = {
+ narrow: ['I.', 'II.', 'III.', 'IV.'],
+ abbreviated: ['I. n.év', 'II. n.év', 'III. n.év', 'IV. n.év'],
+ wide: ['I. negyedév', 'II. negyedév', 'III. negyedév', 'IV. negyedév']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'Á', 'M', 'J', 'J', 'A', 'Sz', 'O', 'N', 'D'],
+ abbreviated: [
+ 'jan.',
+ 'febr.',
+ 'márc.',
+ 'ápr.',
+ 'máj.',
+ 'jún.',
+ 'júl.',
+ 'aug.',
+ 'szept.',
+ 'okt.',
+ 'nov.',
+ 'dec.'
+ ],
+ wide: [
+ 'január',
+ 'február',
+ 'március',
+ 'április',
+ 'május',
+ 'június',
+ 'július',
+ 'augusztus',
+ 'szeptember',
+ 'október',
+ 'november',
+ 'december'
+ ]
+}
+
+var dayValues = {
+ narrow: ['V', 'H', 'K', 'Sz', 'Cs', 'P', 'Sz'],
+ short: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+ abbreviated: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+ wide: [
+ 'vasárnap',
+ 'hétfő',
+ 'kedd',
+ 'szerda',
+ 'csütörtök',
+ 'péntek',
+ 'szombat'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'de.',
+ pm: 'du.',
+ midnight: 'éjfél',
+ noon: 'dél',
+ morning: 'reggel',
+ afternoon: 'du.',
+ evening: 'este',
+ night: 'éjjel'
+ },
+ abbreviated: {
+ am: 'de.',
+ pm: 'du.',
+ midnight: 'éjfél',
+ noon: 'dél',
+ morning: 'reggel',
+ afternoon: 'du.',
+ evening: 'este',
+ night: 'éjjel'
+ },
+ wide: {
+ am: 'de.',
+ pm: 'du.',
+ midnight: 'éjfél',
+ noon: 'dél',
+ morning: 'reggel',
+ afternoon: 'délután',
+ evening: 'este',
+ night: 'éjjel'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingQuarterValues,
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/hu/_lib/match/index.js b/date-fns/src/locale/hu/_lib/match/index.js
new file mode 100644
index 0000000..0ac275c
--- /dev/null
+++ b/date-fns/src/locale/hu/_lib/match/index.js
@@ -0,0 +1,138 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\.?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ie\.|isz\.)/i,
+ abbreviated: /^(i\.\s?e\.?|b?\s?c\s?e|i\.\s?sz\.?)/i,
+ wide: /^(Krisztus előtt|időszámításunk előtt|időszámításunk szerint|i\. sz\.)/i
+}
+var parseEraPatterns = {
+ narrow: [/ie/i, /isz/i],
+ abbreviated: [/^(i\.?\s?e\.?|b\s?ce)/i, /^(i\.?\s?sz\.?|c\s?e)/i],
+ any: [/előtt/i, /(szerint|i. sz.)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]\.?/i,
+ abbreviated: /^[1234]?\.?\s?n\.év/i,
+ wide: /^([1234]|I|II|III|IV)?\.?\s?negyedév/i
+}
+var parseQuarterPatterns = {
+ any: [/1|I$/i, /2|II$/i, /3|III/i, /4|IV/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmaásond]|sz/i,
+ abbreviated: /^(jan\.?|febr\.?|márc\.?|ápr\.?|máj\.?|jún\.?|júl\.?|aug\.?|szept\.?|okt\.?|nov\.?|dec\.?)/i,
+ wide: /^(január|február|március|április|május|június|július|augusztus|szeptember|október|november|december)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a|á/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s|sz/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^már/i,
+ /^áp/i,
+ /^máj/i,
+ /^jún/i,
+ /^júl/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^([vhkpc]|sz|cs|sz)/i,
+ short: /^([vhkp]|sze|cs|szo)/i,
+ abbreviated: /^([vhkp]|sze|cs|szo)/i,
+ wide: /^(vasárnap|hétfő|kedd|szerda|csütörtök|péntek|szombat)/i
+}
+var parseDayPatterns = {
+ narrow: [/^v/i, /^h/i, /^k/i, /^sz/i, /^c/i, /^p/i, /^sz/i],
+ any: [/^v/i, /^h/i, /^k/i, /^sze/i, /^c/i, /^p/i, /^szo/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^((de|du)\.?|éjfél|délután|dél|reggel|este|éjjel)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^de\.?/i,
+ pm: /^du\.?/i,
+ midnight: /^éjf/i,
+ noon: /^dé/i,
+ morning: /reg/i,
+ afternoon: /^délu\.?/i,
+ evening: /es/i,
+ night: /éjj/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/hu/index.d.ts b/date-fns/src/locale/hu/index.d.ts
new file mode 100644
index 0000000..979baa6
--- /dev/null
+++ b/date-fns/src/locale/hu/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hu } from 'date-fns/locale'
+export default hu
diff --git a/date-fns/src/locale/hu/index.js b/date-fns/src/locale/hu/index.js
new file mode 100644
index 0000000..13e9cb4
--- /dev/null
+++ b/date-fns/src/locale/hu/index.js
@@ -0,0 +1,33 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ *
+ * @summary Hungarian locale.
+ * @language Hungarian
+ *
+ * @iso-639-2 hun
+ *
+ * @author Pavlo Shpak [@pshpak]{@link https://github.com/pshpak}
+ * @author Eduardo Pardo [@eduardopsll]{@link https://github.com/eduardopsll}
+ * @author Zoltan Szepesi [@twodcube]{@link https://github.com/twodcube}
+ */
+var locale = {
+ code: 'hu',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/hu/index.js.flow b/date-fns/src/locale/hu/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/hu/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/hu/snapshot.md b/date-fns/src/locale/hu/snapshot.md
new file mode 100644
index 0000000..848adac
--- /dev/null
+++ b/date-fns/src/locale/hu/snapshot.md
@@ -0,0 +1,304 @@
+# Hungarian (hu) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | I. n.év | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | II. n.év | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | I. negyedév | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | II. negyedév | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | I. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | II. | Invalid Date |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1. n.év | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. n.év | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. negyedév | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. negyedév | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | febr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | júl. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | február | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | július | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | febr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | júl. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | február | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | július | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | hétfő | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | péntek | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | hétfő | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | péntek | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | hétfő | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | péntek | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | hétfő | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | péntek | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | de. | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | reggel | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | este | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | éjjel | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | reggel | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | este | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | éjjel | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | reggel | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | este | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | éjjel | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | reggel | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | délután | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | este | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | éjjel | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | reggel | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | du. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | este | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | éjjel | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987. 02. 11. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453. 05. 29. | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 1987. febr. 11. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453. máj. 29. | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987. február 11. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453. május 29. | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 1987. február 11., szerda | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453. május 29., vasárnap | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987. 02. 11. 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453. 05. 29. 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 1987. febr. 11. 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453. máj. 29. 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987. február 11. 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453. május 29. 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 1987. február 11., szerda 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453. május 29., vasárnap 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------------------- | -------------------------- | ------------------------------- |
+| 2006-01-01T00:00:00.000Z | körülbelül 6 év | körülbelül 6 év | körülbelül 6 év múlva |
+| 2005-01-01T00:00:00.000Z | körülbelül 5 év | körülbelül 5 év | körülbelül 5 év múlva |
+| 2004-01-01T00:00:00.000Z | körülbelül 4 év | körülbelül 4 év | körülbelül 4 év múlva |
+| 2003-01-01T00:00:00.000Z | körülbelül 3 év | körülbelül 3 év | körülbelül 3 év múlva |
+| 2002-01-01T00:00:00.000Z | körülbelül 2 év | körülbelül 2 év | körülbelül 2 év múlva |
+| 2001-06-01T00:00:00.000Z | több mint 1 év | több mint 1 év | több mint 1 év múlva |
+| 2001-02-01T00:00:00.000Z | körülbelül 1 év | körülbelül 1 év | körülbelül 1 év múlva |
+| 2001-01-01T00:00:00.000Z | körülbelül 1 év | körülbelül 1 év | körülbelül 1 év múlva |
+| 2000-06-01T00:00:00.000Z | 5 hónap | 5 hónap | 5 hónap múlva |
+| 2000-03-01T00:00:00.000Z | 2 hónap | 2 hónap | 2 hónap múlva |
+| 2000-02-01T00:00:00.000Z | körülbelül 1 hónap | körülbelül 1 hónap | körülbelül 1 hónap múlva |
+| 2000-01-15T00:00:00.000Z | 14 nap | 14 nap | 14 nap múlva |
+| 2000-01-02T00:00:00.000Z | 1 nap | 1 nap | 1 nap múlva |
+| 2000-01-01T06:00:00.000Z | körülbelül 6 óra | körülbelül 6 óra | körülbelül 6 óra múlva |
+| 2000-01-01T01:00:00.000Z | körülbelül 1 óra | körülbelül 1 óra | körülbelül 1 óra múlva |
+| 2000-01-01T00:45:00.000Z | körülbelül 1 óra | körülbelül 1 óra | körülbelül 1 óra múlva |
+| 2000-01-01T00:30:00.000Z | 30 perc | 30 perc | 30 perc múlva |
+| 2000-01-01T00:15:00.000Z | 15 perc | 15 perc | 15 perc múlva |
+| 2000-01-01T00:01:00.000Z | 1 perc | 1 perc | 1 perc múlva |
+| 2000-01-01T00:00:25.000Z | kevesebb mint 1 perc | fél perc | kevesebb mint 1 perc múlva |
+| 2000-01-01T00:00:15.000Z | kevesebb mint 1 perc | kevesebb mint 20 másodperc | kevesebb mint 1 perc múlva |
+| 2000-01-01T00:00:05.000Z | kevesebb mint 1 perc | kevesebb mint 10 másodperc | kevesebb mint 1 perc múlva |
+| 2000-01-01T00:00:00.000Z | kevesebb mint 1 perc | kevesebb mint 5 másodperc | kevesebb mint 1 perce |
+| 1999-12-31T23:59:55.000Z | kevesebb mint 1 perc | kevesebb mint 10 másodperc | kevesebb mint 1 perccel ezelőtt |
+| 1999-12-31T23:59:45.000Z | kevesebb mint 1 perc | kevesebb mint 20 másodperc | kevesebb mint 1 perccel ezelőtt |
+| 1999-12-31T23:59:35.000Z | kevesebb mint 1 perc | fél perc | kevesebb mint 1 perccel ezelőtt |
+| 1999-12-31T23:59:00.000Z | 1 perc | 1 perc | 1 perccel ezelőtt |
+| 1999-12-31T23:45:00.000Z | 15 perc | 15 perc | 15 perccel ezelőtt |
+| 1999-12-31T23:30:00.000Z | 30 perc | 30 perc | 30 perccel ezelőtt |
+| 1999-12-31T23:15:00.000Z | körülbelül 1 óra | körülbelül 1 óra | körülbelül 1 órával ezelőtt |
+| 1999-12-31T23:00:00.000Z | körülbelül 1 óra | körülbelül 1 óra | körülbelül 1 órával ezelőtt |
+| 1999-12-31T18:00:00.000Z | körülbelül 6 óra | körülbelül 6 óra | körülbelül 6 órával ezelőtt |
+| 1999-12-30T00:00:00.000Z | 2 nap | 2 nap | 2 nappal ezelőtt |
+| 1999-12-15T00:00:00.000Z | 17 nap | 17 nap | 17 nappal ezelőtt |
+| 1999-12-01T00:00:00.000Z | körülbelül 1 hónap | körülbelül 1 hónap | körülbelül 1 hónappal ezelőtt |
+| 1999-11-01T00:00:00.000Z | 2 hónap | 2 hónap | 2 hónappal ezelőtt |
+| 1999-06-01T00:00:00.000Z | 7 hónap | 7 hónap | 7 hónappal ezelőtt |
+| 1999-01-01T00:00:00.000Z | körülbelül 1 év | körülbelül 1 év | körülbelül 1 évvel ezelőtt |
+| 1998-12-01T00:00:00.000Z | körülbelül 1 év | körülbelül 1 év | körülbelül 1 évvel ezelőtt |
+| 1998-06-01T00:00:00.000Z | több mint 1 év | több mint 1 év | több mint 1 évvel ezelőtt |
+| 1998-01-01T00:00:00.000Z | körülbelül 2 év | körülbelül 2 év | körülbelül 2 évvel ezelőtt |
+| 1997-01-01T00:00:00.000Z | körülbelül 3 év | körülbelül 3 év | körülbelül 3 évvel ezelőtt |
+| 1996-01-01T00:00:00.000Z | körülbelül 4 év | körülbelül 4 év | körülbelül 4 évvel ezelőtt |
+| 1995-01-01T00:00:00.000Z | körülbelül 5 év | körülbelül 5 év | körülbelül 5 évvel ezelőtt |
+| 1994-01-01T00:00:00.000Z | körülbelül 6 év | körülbelül 6 év | körülbelül 6 évvel ezelőtt |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------------ | ----------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 év | 6 év múlva | 52608 óra |
+| 2005-01-01T00:00:00.000Z | 5 év | 5 év múlva | 43848 óra |
+| 2004-01-01T00:00:00.000Z | 4 év | 4 év múlva | 35064 óra |
+| 2003-01-01T00:00:00.000Z | 3 év | 3 év múlva | 26304 óra |
+| 2002-01-01T00:00:00.000Z | 2 év | 2 év múlva | 17544 óra |
+| 2001-06-01T00:00:00.000Z | 1 év | 1 év múlva | 12408 óra |
+| 2001-02-01T00:00:00.000Z | 1 év | 1 év múlva | 9528 óra |
+| 2001-01-01T00:00:00.000Z | 1 év | 1 év múlva | 8784 óra |
+| 2000-06-01T00:00:00.000Z | 5 hónap | 5 hónap múlva | 3648 óra |
+| 2000-03-01T00:00:00.000Z | 2 hónap | 2 hónap múlva | 1440 óra |
+| 2000-02-01T00:00:00.000Z | 1 hónap | 1 hónap múlva | 744 óra |
+| 2000-01-15T00:00:00.000Z | 14 nap | 14 nap múlva | 336 óra |
+| 2000-01-02T00:00:00.000Z | 1 nap | 1 nap múlva | 24 óra |
+| 2000-01-01T06:00:00.000Z | 6 óra | 6 óra múlva | 6 óra |
+| 2000-01-01T01:00:00.000Z | 1 óra | 1 óra múlva | 1 óra |
+| 2000-01-01T00:45:00.000Z | 45 perc | 45 perc múlva | 1 óra |
+| 2000-01-01T00:30:00.000Z | 30 perc | 30 perc múlva | 1 óra |
+| 2000-01-01T00:15:00.000Z | 15 perc | 15 perc múlva | 0 óra |
+| 2000-01-01T00:01:00.000Z | 1 perc | 1 perc múlva | 0 óra |
+| 2000-01-01T00:00:25.000Z | 25 másodperc | 25 másodperc múlva | 0 óra |
+| 2000-01-01T00:00:15.000Z | 15 másodperc | 15 másodperc múlva | 0 óra |
+| 2000-01-01T00:00:05.000Z | 5 másodperc | 5 másodperc múlva | 0 óra |
+| 2000-01-01T00:00:00.000Z | 0 másodperc | 0 másodperce | 0 óra |
+| 1999-12-31T23:59:55.000Z | 5 másodperc | 5 másodperccel ezelőtt | 0 óra |
+| 1999-12-31T23:59:45.000Z | 15 másodperc | 15 másodperccel ezelőtt | 0 óra |
+| 1999-12-31T23:59:35.000Z | 25 másodperc | 25 másodperccel ezelőtt | 0 óra |
+| 1999-12-31T23:59:00.000Z | 1 perc | 1 perccel ezelőtt | 0 óra |
+| 1999-12-31T23:45:00.000Z | 15 perc | 15 perccel ezelőtt | 0 óra |
+| 1999-12-31T23:30:00.000Z | 30 perc | 30 perccel ezelőtt | 1 óra |
+| 1999-12-31T23:15:00.000Z | 45 perc | 45 perccel ezelőtt | 1 óra |
+| 1999-12-31T23:00:00.000Z | 1 óra | 1 órával ezelőtt | 1 óra |
+| 1999-12-31T18:00:00.000Z | 6 óra | 6 órával ezelőtt | 6 óra |
+| 1999-12-30T00:00:00.000Z | 2 nap | 2 nappal ezelőtt | 48 óra |
+| 1999-12-15T00:00:00.000Z | 17 nap | 17 nappal ezelőtt | 408 óra |
+| 1999-12-01T00:00:00.000Z | 1 hónap | 1 hónappal ezelőtt | 744 óra |
+| 1999-11-01T00:00:00.000Z | 2 hónap | 2 hónappal ezelőtt | 1464 óra |
+| 1999-06-01T00:00:00.000Z | 7 hónap | 7 hónappal ezelőtt | 5136 óra |
+| 1999-01-01T00:00:00.000Z | 1 év | 1 évvel ezelőtt | 8760 óra |
+| 1998-12-01T00:00:00.000Z | 1 év | 1 évvel ezelőtt | 9504 óra |
+| 1998-06-01T00:00:00.000Z | 2 év | 2 évvel ezelőtt | 13896 óra |
+| 1998-01-01T00:00:00.000Z | 2 év | 2 évvel ezelőtt | 17520 óra |
+| 1997-01-01T00:00:00.000Z | 3 év | 3 évvel ezelőtt | 26280 óra |
+| 1996-01-01T00:00:00.000Z | 4 év | 4 évvel ezelőtt | 35064 óra |
+| 1995-01-01T00:00:00.000Z | 5 év | 5 évvel ezelőtt | 43824 óra |
+| 1994-01-01T00:00:00.000Z | 6 év | 6 évvel ezelőtt | 52584 óra |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------- |
+| 2000-01-10T00:00:00.000Z | 2000. 01. 10. |
+| 2000-01-05T00:00:00.000Z | szerdán 0:00-kor |
+| 2000-01-02T00:00:00.000Z | holnap 0:00-kor |
+| 2000-01-01T00:00:00.000Z | ma 0:00-kor |
+| 1999-12-31T00:00:00.000Z | tegnap 0:00-kor |
+| 1999-12-27T00:00:00.000Z | múlt hétfőn 0:00-kor |
+| 1999-12-21T00:00:00.000Z | 1999. 12. 21. |
diff --git a/date-fns/src/locale/hy/_lib/formatDistance/index.js b/date-fns/src/locale/hy/_lib/formatDistance/index.js
new file mode 100644
index 0000000..1a13041
--- /dev/null
+++ b/date-fns/src/locale/hy/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'ավելի քիչ քան 1 վայրկյան',
+ other: 'ավելի քիչ քան {{count}} վայրկյան'
+ },
+
+ xSeconds: {
+ one: '1 վայրկյան',
+ other: '{{count}} վայրկյան'
+ },
+
+ halfAMinute: 'կես րոպե',
+
+ lessThanXMinutes: {
+ one: 'ավելի քիչ քան 1 րոպե',
+ other: 'ավելի քիչ քան {{count}} րոպե'
+ },
+
+ xMinutes: {
+ one: '1 րոպե',
+ other: '{{count}} րոպե'
+ },
+
+ aboutXHours: {
+ one: 'մոտ 1 ժամ',
+ other: 'մոտ {{count}} ժամ'
+ },
+
+ xHours: {
+ one: '1 ժամ',
+ other: '{{count}} ժամ'
+ },
+
+ xDays: {
+ one: '1 օր',
+ other: '{{count}} օր'
+ },
+
+ aboutXWeeks: {
+ one: 'մոտ 1 շաբաթ',
+ other: 'մոտ {{count}} շաբաթ'
+ },
+
+ xWeeks: {
+ one: '1 շաբաթ',
+ other: '{{count}} շաբաթ'
+ },
+
+ aboutXMonths: {
+ one: 'մոտ 1 ամիս',
+ other: 'մոտ {{count}} ամիս'
+ },
+
+ xMonths: {
+ one: '1 ամիս',
+ other: '{{count}} ամիս'
+ },
+
+ aboutXYears: {
+ one: 'մոտ 1 տարի',
+ other: 'մոտ {{count}} տարի'
+ },
+
+ xYears: {
+ one: '1 տարի',
+ other: '{{count}} տարի'
+ },
+
+ overXYears: {
+ one: 'ավելի քան 1 տարի',
+ other: 'ավելի քան {{count}} տարի'
+ },
+
+ almostXYears: {
+ one: 'համարյա 1 տարի',
+ other: 'համարյա {{count}} տարի'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ var result
+
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + ' հետո'
+ } else {
+ return result + ' առաջ'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/hy/_lib/formatLong/index.js b/date-fns/src/locale/hy/_lib/formatLong/index.js
new file mode 100644
index 0000000..ba7518c
--- /dev/null
+++ b/date-fns/src/locale/hy/_lib/formatLong/index.js
@@ -0,0 +1,36 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'd MMMM, y, EEEE',
+ long: 'd MMMM, y',
+ medium: 'd MMM, y',
+ short: 'dd.MM.yyyy'
+}
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+var dateTimeFormats = {
+ full: "{{date}} 'ժ․'{{time}}",
+ long: "{{date}} 'ժ․'{{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+export default formatLong
diff --git a/date-fns/src/locale/hy/_lib/formatRelative/index.js b/date-fns/src/locale/hy/_lib/formatRelative/index.js
new file mode 100644
index 0000000..60c8bf3
--- /dev/null
+++ b/date-fns/src/locale/hy/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'նախորդ' eeee p'֊ին'",
+ yesterday: "'երեկ' p'֊ին'",
+ today: "'այսօր' p'֊ին'",
+ tomorrow: "'վաղը' p'֊ին'",
+ nextWeek: "'հաջորդ' eeee p'֊ին'",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/hy/_lib/localize/index.js b/date-fns/src/locale/hy/_lib/localize/index.js
new file mode 100644
index 0000000..acd4bbb
--- /dev/null
+++ b/date-fns/src/locale/hy/_lib/localize/index.js
@@ -0,0 +1,179 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['Ք', 'Մ'],
+ abbreviated: ['ՔԱ', 'ՄԹ'],
+ wide: ['Քրիստոսից առաջ', 'Մեր թվարկության']
+}
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Ք1', 'Ք2', 'Ք3', 'Ք4'],
+ wide: ['1֊ին քառորդ', '2֊րդ քառորդ', '3֊րդ քառորդ', '4֊րդ քառորդ']
+}
+var monthValues = {
+ narrow: ['Հ', 'Փ', 'Մ', 'Ա', 'Մ', 'Հ', 'Հ', 'Օ', 'Ս', 'Հ', 'Ն', 'Դ'],
+ abbreviated: [
+ 'հուն',
+ 'փետ',
+ 'մար',
+ 'ապր',
+ 'մայ',
+ 'հուն',
+ 'հուլ',
+ 'օգս',
+ 'սեպ',
+ 'հոկ',
+ 'նոյ',
+ 'դեկ'
+ ],
+ wide: [
+ 'հունվար',
+ 'փետրվար',
+ 'մարտ',
+ 'ապրիլ',
+ 'մայիս',
+ 'հունիս',
+ 'հուլիս',
+ 'օգոստոս',
+ 'սեպտեմբեր',
+ 'հոկտեմբեր',
+ 'նոյեմբեր',
+ 'դեկտեմբեր'
+ ]
+}
+var dayValues = {
+ narrow: ['Կ', 'Ե', 'Ե', 'Չ', 'Հ', 'Ո', 'Շ'],
+ short: ['կր', 'եր', 'եք', 'չք', 'հգ', 'ուր', 'շբ'],
+ abbreviated: ['կիր', 'երկ', 'երք', 'չոր', 'հնգ', 'ուրբ', 'շաբ'],
+ wide: [
+ 'կիրակի',
+ 'երկուշաբթի',
+ 'երեքշաբթի',
+ 'չորեքշաբթի',
+ 'հինգշաբթի',
+ 'ուրբաթ',
+ 'շաբաթ'
+ ]
+}
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'կեսգշ',
+ noon: 'կեսօր',
+ morning: 'առավոտ',
+ afternoon: 'ցերեկ',
+ evening: 'երեկո',
+ night: 'գիշեր'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'կեսգիշեր',
+ noon: 'կեսօր',
+ morning: 'առավոտ',
+ afternoon: 'ցերեկ',
+ evening: 'երեկո',
+ night: 'գիշեր'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'կեսգիշեր',
+ noon: 'կեսօր',
+ morning: 'առավոտ',
+ afternoon: 'ցերեկ',
+ evening: 'երեկո',
+ night: 'գիշեր'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'կեսգշ',
+ noon: 'կեսօր',
+ morning: 'առավոտը',
+ afternoon: 'ցերեկը',
+ evening: 'երեկոյան',
+ night: 'գիշերը'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'կեսգիշերին',
+ noon: 'կեսօրին',
+ morning: 'առավոտը',
+ afternoon: 'ցերեկը',
+ evening: 'երեկոյան',
+ night: 'գիշերը'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'կեսգիշերին',
+ noon: 'կեսօրին',
+ morning: 'առավոտը',
+ afternoon: 'ցերեկը',
+ evening: 'երեկոյան',
+ night: 'գիշերը'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber) // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ var rem100 = number % 100
+
+ if (rem100 < 10) {
+ if (rem100 % 10 === 1) {
+ return number + '֊ին'
+ }
+ }
+
+ return number + '֊րդ'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/hy/_lib/match/index.js b/date-fns/src/locale/hy/_lib/match/index.js
new file mode 100644
index 0000000..3078402
--- /dev/null
+++ b/date-fns/src/locale/hy/_lib/match/index.js
@@ -0,0 +1,139 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)((-|֊)?(ին|րդ))?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(Ք|Մ)/i,
+ abbreviated: /^(Ք\.?\s?Ա\.?|Մ\.?\s?Թ\.?\s?Ա\.?|Մ\.?\s?Թ\.?|Ք\.?\s?Հ\.?)/i,
+ wide: /^(քրիստոսից առաջ|մեր թվարկությունից առաջ|մեր թվարկության|քրիստոսից հետո)/i
+}
+var parseEraPatterns = {
+ any: [/^(ք|մ)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^ք[1234]/i,
+ wide: /^[1234]((-|֊)?(ին|րդ)) քառորդ/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[հփմաօսնդ]/i,
+ abbreviated: /^(հուն|փետ|մար|ապր|մայ|հուն|հուլ|օգս|սեպ|հոկ|նոյ|դեկ)/i,
+ wide: /^(հունվար|փետրվար|մարտ|ապրիլ|մայիս|հունիս|հուլիս|օգոստոս|սեպտեմբեր|հոկտեմբեր|նոյեմբեր|դեկտեմբեր)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^հ/i,
+ /^փ/i,
+ /^մ/i,
+ /^ա/i,
+ /^մ/i,
+ /^հ/i,
+ /^հ/i,
+ /^օ/i,
+ /^ս/i,
+ /^հ/i,
+ /^ն/i,
+ /^դ/i
+ ],
+ any: [
+ /^հու/i,
+ /^փ/i,
+ /^մար/i,
+ /^ա/i,
+ /^մայ/i,
+ /^հուն/i,
+ /^հուլ/i,
+ /^օ/i,
+ /^ս/i,
+ /^հոկ/i,
+ /^ն/i,
+ /^դ/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[եչհոշկ]/i,
+ short: /^(կր|եր|եք|չք|հգ|ուր|շբ)/i,
+ abbreviated: /^(կիր|երկ|երք|չոր|հնգ|ուրբ|շաբ)/i,
+ wide: /^(կիրակի|երկուշաբթի|երեքշաբթի|չորեքշաբթի|հինգշաբթի|ուրբաթ|շաբաթ)/i
+}
+var parseDayPatterns = {
+ narrow: [/^կ/i, /^ե/i, /^ե/i, /^չ/i, /^հ/i, /^(ո|Ո)/, /^շ/i],
+ short: [/^կ/i, /^եր/i, /^եք/i, /^չ/i, /^հ/i, /^(ո|Ո)/, /^շ/i],
+ abbreviated: [/^կ/i, /^երկ/i, /^երք/i, /^չ/i, /^հ/i, /^(ո|Ո)/, /^շ/i],
+ wide: [/^կ/i, /^երկ/i, /^երե/i, /^չ/i, /^հ/i, /^(ո|Ո)/, /^շ/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^([ap]|կեսգշ|կեսօր|(առավոտը?|ցերեկը?|երեկո(յան)?|գիշերը?))/i,
+ any: /^([ap]\.?\s?m\.?|կեսգիշեր(ին)?|կեսօր(ին)?|(առավոտը?|ցերեկը?|երեկո(յան)?|գիշերը?))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /կեսգիշեր/i,
+ noon: /կեսօր/i,
+ morning: /առավոտ/i,
+ afternoon: /ցերեկ/i,
+ evening: /երեկո/i,
+ night: /գիշեր/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/hy/index.d.ts b/date-fns/src/locale/hy/index.d.ts
new file mode 100644
index 0000000..a79f29e
--- /dev/null
+++ b/date-fns/src/locale/hy/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { hy } from 'date-fns/locale'
+export default hy
diff --git a/date-fns/src/locale/hy/index.js b/date-fns/src/locale/hy/index.js
new file mode 100644
index 0000000..25a68f3
--- /dev/null
+++ b/date-fns/src/locale/hy/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Armenian locale
+ * @language Armenian
+ * @iso-639-2 arm
+ * @author Alex Igityan [@alexigityan]{@link https://github.com/alexigityan}
+ */
+
+var locale = {
+ code: 'hy',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/hy/index.js.flow b/date-fns/src/locale/hy/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/hy/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/hy/snapshot.md b/date-fns/src/locale/hy/snapshot.md
new file mode 100644
index 0000000..bd98019
--- /dev/null
+++ b/date-fns/src/locale/hy/snapshot.md
@@ -0,0 +1,304 @@
+# Armenian (hy) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987֊րդ | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5֊րդ | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987֊րդ | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5֊րդ | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1֊ին | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2֊րդ | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Ք1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Ք2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1֊ին քառորդ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2֊րդ քառորդ | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1֊ին | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2֊րդ | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Ք1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Ք2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1֊ին քառորդ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2֊րդ քառորդ | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2֊րդ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7֊րդ | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | փետ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | հուլ | 2019-01-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | փետրվար | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | հուլիս | 2019-01-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | Փ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Հ | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2֊րդ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7֊րդ | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | փետ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | հուլ | 2019-01-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | փետրվար | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | հուլիս | 2019-01-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | Փ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Հ | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1֊ին | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48֊րդ | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1֊ին | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48֊րդ | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11֊րդ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28֊րդ | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42֊րդ | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365֊րդ | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | երկ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբ | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | երկ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբ | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | երկ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբ | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | երկուշաբթի | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբաթ | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | Ե | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ո | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | եր | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուր | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1֊ին | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5֊րդ | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | երկ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբ | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | երկուշաբթի | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբաթ | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | Ե | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ո | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | եր | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուր | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1֊ին | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5֊րդ | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | երկ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբ | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | երկուշաբթի | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբաթ | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | Ե | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ո | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | եր | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուր | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1֊ին | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5֊րդ | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | երկ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբ | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | երկուշաբթի | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուրբաթ | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | Ե | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ո | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | եր | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ուր | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | առավոտը | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ցերեկը | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | երեկոյան | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | գիշերը | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | առավոտը | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ցերեկը | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | երեկոյան | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | գիշերը | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | առավոտը | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ցերեկը | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | երեկոյան | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | գիշերը | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | առավոտը | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ցերեկը | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | երեկոյան | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | գիշերը | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | առավոտը | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ցերեկը | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | երեկոյան | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | գիշերը | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11֊րդ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11֊րդ | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11֊րդ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23֊րդ | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11֊րդ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11֊րդ | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11֊րդ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23֊րդ | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1֊ին | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55֊րդ | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1֊ին | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55֊րդ | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 փետ, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 մայ, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 փետրվար, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 մայիս, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 11 փետրվար, 1987, չորեքշաբթի | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 մայիս, 1453, կիրակի | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 փետ, 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 մայ, 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 փետրվար, 1987 ժ․12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 մայիս, 1453 ժ․23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 11 փետրվար, 1987, չորեքշաբթի ժ․12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 մայիս, 1453, կիրակի ժ․23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------------------- | ------------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | մոտ 6 տարի | մոտ 6 տարի | մոտ 6 տարի հետո |
+| 2005-01-01T00:00:00.000Z | մոտ 5 տարի | մոտ 5 տարի | մոտ 5 տարի հետո |
+| 2004-01-01T00:00:00.000Z | մոտ 4 տարի | մոտ 4 տարի | մոտ 4 տարի հետո |
+| 2003-01-01T00:00:00.000Z | մոտ 3 տարի | մոտ 3 տարի | մոտ 3 տարի հետո |
+| 2002-01-01T00:00:00.000Z | մոտ 2 տարի | մոտ 2 տարի | մոտ 2 տարի հետո |
+| 2001-06-01T00:00:00.000Z | ավելի քան 1 տարի | ավելի քան 1 տարի | ավելի քան 1 տարի հետո |
+| 2001-02-01T00:00:00.000Z | մոտ 1 տարի | մոտ 1 տարի | մոտ 1 տարի հետո |
+| 2001-01-01T00:00:00.000Z | մոտ 1 տարի | մոտ 1 տարի | մոտ 1 տարի հետո |
+| 2000-06-01T00:00:00.000Z | 5 ամիս | 5 ամիս | 5 ամիս հետո |
+| 2000-03-01T00:00:00.000Z | 2 ամիս | 2 ամիս | 2 ամիս հետո |
+| 2000-02-01T00:00:00.000Z | մոտ 1 ամիս | մոտ 1 ամիս | մոտ 1 ամիս հետո |
+| 2000-01-15T00:00:00.000Z | 14 օր | 14 օր | 14 օր հետո |
+| 2000-01-02T00:00:00.000Z | 1 օր | 1 օր | 1 օր հետո |
+| 2000-01-01T06:00:00.000Z | մոտ 6 ժամ | մոտ 6 ժամ | մոտ 6 ժամ հետո |
+| 2000-01-01T01:00:00.000Z | մոտ 1 ժամ | մոտ 1 ժամ | մոտ 1 ժամ հետո |
+| 2000-01-01T00:45:00.000Z | մոտ 1 ժամ | մոտ 1 ժամ | մոտ 1 ժամ հետո |
+| 2000-01-01T00:30:00.000Z | 30 րոպե | 30 րոպե | 30 րոպե հետո |
+| 2000-01-01T00:15:00.000Z | 15 րոպե | 15 րոպե | 15 րոպե հետո |
+| 2000-01-01T00:01:00.000Z | 1 րոպե | 1 րոպե | 1 րոպե հետո |
+| 2000-01-01T00:00:25.000Z | ավելի քիչ քան 1 րոպե | կես րոպե | ավելի քիչ քան 1 րոպե հետո |
+| 2000-01-01T00:00:15.000Z | ավելի քիչ քան 1 րոպե | ավելի քիչ քան 20 վայրկյան | ավելի քիչ քան 1 րոպե հետո |
+| 2000-01-01T00:00:05.000Z | ավելի քիչ քան 1 րոպե | ավելի քիչ քան 10 վայրկյան | ավելի քիչ քան 1 րոպե հետո |
+| 2000-01-01T00:00:00.000Z | ավելի քիչ քան 1 րոպե | ավելի քիչ քան 5 վայրկյան | ավելի քիչ քան 1 րոպե առաջ |
+| 1999-12-31T23:59:55.000Z | ավելի քիչ քան 1 րոպե | ավելի քիչ քան 10 վայրկյան | ավելի քիչ քան 1 րոպե առաջ |
+| 1999-12-31T23:59:45.000Z | ավելի քիչ քան 1 րոպե | ավելի քիչ քան 20 վայրկյան | ավելի քիչ քան 1 րոպե առաջ |
+| 1999-12-31T23:59:35.000Z | ավելի քիչ քան 1 րոպե | կես րոպե | ավելի քիչ քան 1 րոպե առաջ |
+| 1999-12-31T23:59:00.000Z | 1 րոպե | 1 րոպե | 1 րոպե առաջ |
+| 1999-12-31T23:45:00.000Z | 15 րոպե | 15 րոպե | 15 րոպե առաջ |
+| 1999-12-31T23:30:00.000Z | 30 րոպե | 30 րոպե | 30 րոպե առաջ |
+| 1999-12-31T23:15:00.000Z | մոտ 1 ժամ | մոտ 1 ժամ | մոտ 1 ժամ առաջ |
+| 1999-12-31T23:00:00.000Z | մոտ 1 ժամ | մոտ 1 ժամ | մոտ 1 ժամ առաջ |
+| 1999-12-31T18:00:00.000Z | մոտ 6 ժամ | մոտ 6 ժամ | մոտ 6 ժամ առաջ |
+| 1999-12-30T00:00:00.000Z | 2 օր | 2 օր | 2 օր առաջ |
+| 1999-12-15T00:00:00.000Z | 17 օր | 17 օր | 17 օր առաջ |
+| 1999-12-01T00:00:00.000Z | մոտ 1 ամիս | մոտ 1 ամիս | մոտ 1 ամիս առաջ |
+| 1999-11-01T00:00:00.000Z | 2 ամիս | 2 ամիս | 2 ամիս առաջ |
+| 1999-06-01T00:00:00.000Z | 7 ամիս | 7 ամիս | 7 ամիս առաջ |
+| 1999-01-01T00:00:00.000Z | մոտ 1 տարի | մոտ 1 տարի | մոտ 1 տարի առաջ |
+| 1998-12-01T00:00:00.000Z | մոտ 1 տարի | մոտ 1 տարի | մոտ 1 տարի առաջ |
+| 1998-06-01T00:00:00.000Z | ավելի քան 1 տարի | ավելի քան 1 տարի | ավելի քան 1 տարի առաջ |
+| 1998-01-01T00:00:00.000Z | մոտ 2 տարի | մոտ 2 տարի | մոտ 2 տարի առաջ |
+| 1997-01-01T00:00:00.000Z | մոտ 3 տարի | մոտ 3 տարի | մոտ 3 տարի առաջ |
+| 1996-01-01T00:00:00.000Z | մոտ 4 տարի | մոտ 4 տարի | մոտ 4 տարի առաջ |
+| 1995-01-01T00:00:00.000Z | մոտ 5 տարի | մոտ 5 տարի | մոտ 5 տարի առաջ |
+| 1994-01-01T00:00:00.000Z | մոտ 6 տարի | մոտ 6 տարի | մոտ 6 տարի առաջ |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 տարի | 6 տարի հետո | 52608 ժամ |
+| 2005-01-01T00:00:00.000Z | 5 տարի | 5 տարի հետո | 43848 ժամ |
+| 2004-01-01T00:00:00.000Z | 4 տարի | 4 տարի հետո | 35064 ժամ |
+| 2003-01-01T00:00:00.000Z | 3 տարի | 3 տարի հետո | 26304 ժամ |
+| 2002-01-01T00:00:00.000Z | 2 տարի | 2 տարի հետո | 17544 ժամ |
+| 2001-06-01T00:00:00.000Z | 1 տարի | 1 տարի հետո | 12408 ժամ |
+| 2001-02-01T00:00:00.000Z | 1 տարի | 1 տարի հետո | 9528 ժամ |
+| 2001-01-01T00:00:00.000Z | 1 տարի | 1 տարի հետո | 8784 ժամ |
+| 2000-06-01T00:00:00.000Z | 5 ամիս | 5 ամիս հետո | 3648 ժամ |
+| 2000-03-01T00:00:00.000Z | 2 ամիս | 2 ամիս հետո | 1440 ժամ |
+| 2000-02-01T00:00:00.000Z | 1 ամիս | 1 ամիս հետո | 744 ժամ |
+| 2000-01-15T00:00:00.000Z | 14 օր | 14 օր հետո | 336 ժամ |
+| 2000-01-02T00:00:00.000Z | 1 օր | 1 օր հետո | 24 ժամ |
+| 2000-01-01T06:00:00.000Z | 6 ժամ | 6 ժամ հետո | 6 ժամ |
+| 2000-01-01T01:00:00.000Z | 1 ժամ | 1 ժամ հետո | 1 ժամ |
+| 2000-01-01T00:45:00.000Z | 45 րոպե | 45 րոպե հետո | 1 ժամ |
+| 2000-01-01T00:30:00.000Z | 30 րոպե | 30 րոպե հետո | 1 ժամ |
+| 2000-01-01T00:15:00.000Z | 15 րոպե | 15 րոպե հետո | 0 ժամ |
+| 2000-01-01T00:01:00.000Z | 1 րոպե | 1 րոպե հետո | 0 ժամ |
+| 2000-01-01T00:00:25.000Z | 25 վայրկյան | 25 վայրկյան հետո | 0 ժամ |
+| 2000-01-01T00:00:15.000Z | 15 վայրկյան | 15 վայրկյան հետո | 0 ժամ |
+| 2000-01-01T00:00:05.000Z | 5 վայրկյան | 5 վայրկյան հետո | 0 ժամ |
+| 2000-01-01T00:00:00.000Z | 0 վայրկյան | 0 վայրկյան առաջ | 0 ժամ |
+| 1999-12-31T23:59:55.000Z | 5 վայրկյան | 5 վայրկյան առաջ | 0 ժամ |
+| 1999-12-31T23:59:45.000Z | 15 վայրկյան | 15 վայրկյան առաջ | 0 ժամ |
+| 1999-12-31T23:59:35.000Z | 25 վայրկյան | 25 վայրկյան առաջ | 0 ժամ |
+| 1999-12-31T23:59:00.000Z | 1 րոպե | 1 րոպե առաջ | 0 ժամ |
+| 1999-12-31T23:45:00.000Z | 15 րոպե | 15 րոպե առաջ | 0 ժամ |
+| 1999-12-31T23:30:00.000Z | 30 րոպե | 30 րոպե առաջ | 1 ժամ |
+| 1999-12-31T23:15:00.000Z | 45 րոպե | 45 րոպե առաջ | 1 ժամ |
+| 1999-12-31T23:00:00.000Z | 1 ժամ | 1 ժամ առաջ | 1 ժամ |
+| 1999-12-31T18:00:00.000Z | 6 ժամ | 6 ժամ առաջ | 6 ժամ |
+| 1999-12-30T00:00:00.000Z | 2 օր | 2 օր առաջ | 48 ժամ |
+| 1999-12-15T00:00:00.000Z | 17 օր | 17 օր առաջ | 408 ժամ |
+| 1999-12-01T00:00:00.000Z | 1 ամիս | 1 ամիս առաջ | 744 ժամ |
+| 1999-11-01T00:00:00.000Z | 2 ամիս | 2 ամիս առաջ | 1464 ժամ |
+| 1999-06-01T00:00:00.000Z | 7 ամիս | 7 ամիս առաջ | 5136 ժամ |
+| 1999-01-01T00:00:00.000Z | 1 տարի | 1 տարի առաջ | 8760 ժամ |
+| 1998-12-01T00:00:00.000Z | 1 տարի | 1 տարի առաջ | 9504 ժամ |
+| 1998-06-01T00:00:00.000Z | 2 տարի | 2 տարի առաջ | 13896 ժամ |
+| 1998-01-01T00:00:00.000Z | 2 տարի | 2 տարի առաջ | 17520 ժամ |
+| 1997-01-01T00:00:00.000Z | 3 տարի | 3 տարի առաջ | 26280 ժամ |
+| 1996-01-01T00:00:00.000Z | 4 տարի | 4 տարի առաջ | 35064 ժամ |
+| 1995-01-01T00:00:00.000Z | 5 տարի | 5 տարի առաջ | 43824 ժամ |
+| 1994-01-01T00:00:00.000Z | 6 տարի | 6 տարի առաջ | 52584 ժամ |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | հաջորդ չորեքշաբթի 00:00֊ին |
+| 2000-01-02T00:00:00.000Z | վաղը 00:00֊ին |
+| 2000-01-01T00:00:00.000Z | այսօր 00:00֊ին |
+| 1999-12-31T00:00:00.000Z | երեկ 00:00֊ին |
+| 1999-12-27T00:00:00.000Z | նախորդ երկուշաբթի 00:00֊ին |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/id/_lib/formatDistance/index.js b/date-fns/src/locale/id/_lib/formatDistance/index.js
new file mode 100644
index 0000000..2c19c22
--- /dev/null
+++ b/date-fns/src/locale/id/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'kurang dari 1 detik',
+ other: 'kurang dari {{count}} detik'
+ },
+
+ xSeconds: {
+ one: '1 detik',
+ other: '{{count}} detik'
+ },
+
+ halfAMinute: 'setengah menit',
+
+ lessThanXMinutes: {
+ one: 'kurang dari 1 menit',
+ other: 'kurang dari {{count}} menit'
+ },
+
+ xMinutes: {
+ one: '1 menit',
+ other: '{{count}} menit'
+ },
+
+ aboutXHours: {
+ one: 'sekitar 1 jam',
+ other: 'sekitar {{count}} jam'
+ },
+
+ xHours: {
+ one: '1 jam',
+ other: '{{count}} jam'
+ },
+
+ xDays: {
+ one: '1 hari',
+ other: '{{count}} hari'
+ },
+
+ aboutXWeeks: {
+ one: 'sekitar 1 minggu',
+ other: 'sekitar {{count}} minggu'
+ },
+
+ xWeeks: {
+ one: '1 minggu',
+ other: '{{count}} minggu'
+ },
+
+ aboutXMonths: {
+ one: 'sekitar 1 bulan',
+ other: 'sekitar {{count}} bulan'
+ },
+
+ xMonths: {
+ one: '1 bulan',
+ other: '{{count}} bulan'
+ },
+
+ aboutXYears: {
+ one: 'sekitar 1 tahun',
+ other: 'sekitar {{count}} tahun'
+ },
+
+ xYears: {
+ one: '1 tahun',
+ other: '{{count}} tahun'
+ },
+
+ overXYears: {
+ one: 'lebih dari 1 tahun',
+ other: 'lebih dari {{count}} tahun'
+ },
+
+ almostXYears: {
+ one: 'hampir 1 tahun',
+ other: 'hampir {{count}} tahun'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'dalam waktu ' + result
+ } else {
+ return result + ' yang lalu'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/id/_lib/formatLong/index.js b/date-fns/src/locale/id/_lib/formatLong/index.js
new file mode 100644
index 0000000..d8ea107
--- /dev/null
+++ b/date-fns/src/locale/id/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'd/M/yyyy'
+}
+
+var timeFormats = {
+ full: 'HH.mm.ss',
+ long: 'HH.mm.ss',
+ medium: 'HH.mm',
+ short: 'HH.mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'pukul' {{time}}",
+ long: "{{date}} 'pukul' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/id/_lib/formatRelative/index.js b/date-fns/src/locale/id/_lib/formatRelative/index.js
new file mode 100644
index 0000000..ed8fa29
--- /dev/null
+++ b/date-fns/src/locale/id/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'lalu pukul' p",
+ yesterday: "'Kemarin pukul' p",
+ today: "'Hari ini pukul' p",
+ tomorrow: "'Besok pukul' p",
+ nextWeek: "eeee 'pukul' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/id/_lib/localize/index.js b/date-fns/src/locale/id/_lib/localize/index.js
new file mode 100644
index 0000000..5ab0723
--- /dev/null
+++ b/date-fns/src/locale/id/_lib/localize/index.js
@@ -0,0 +1,169 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+// All data for localization are taken from this page
+// https://www.unicode.org/cldr/charts/32/summary/id.html
+var eraValues = {
+ narrow: ['SM', 'M'],
+ abbreviated: ['SM', 'M'],
+ wide: ['Sebelum Masehi', 'Masehi']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['K1', 'K2', 'K3', 'K4'],
+ wide: ['Kuartal ke-1', 'Kuartal ke-2', 'Kuartal ke-3', 'Kuartal ke-4']
+}
+
+// Note: in Indonesian, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Jan',
+ 'Feb',
+ 'Mar',
+ 'Apr',
+ 'Mei',
+ 'Jun',
+ 'Jul',
+ 'Ags',
+ 'Sep',
+ 'Okt',
+ 'Nov',
+ 'Des'
+ ],
+ wide: [
+ 'Januari',
+ 'Februari',
+ 'Maret',
+ 'April',
+ 'Mei',
+ 'Juni',
+ 'Juli',
+ 'Agustus',
+ 'September',
+ 'Oktober',
+ 'November',
+ 'Desember'
+ ]
+}
+
+var dayValues = {
+ narrow: ['M', 'S', 'S', 'R', 'K', 'J', 'S'],
+ short: ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'],
+ abbreviated: ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'],
+ wide: ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'siang',
+ evening: 'sore',
+ night: 'malam'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'siang',
+ evening: 'sore',
+ night: 'malam'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'siang',
+ evening: 'sore',
+ night: 'malam'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'siang',
+ evening: 'sore',
+ night: 'malam'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'siang',
+ evening: 'sore',
+ night: 'malam'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'siang',
+ evening: 'sore',
+ night: 'malam'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // Can't use "pertama", "kedua" because can't be parsed
+ switch (number) {
+ default:
+ return 'ke-' + number
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/id/_lib/match/index.js b/date-fns/src/locale/id/_lib/match/index.js
new file mode 100644
index 0000000..2d49ac8
--- /dev/null
+++ b/date-fns/src/locale/id/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^ke-(\d+)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(sm|m)/i,
+ abbreviated: /^(s\.?\s?m\.?|s\.?\s?e\.?\s?u\.?|m\.?|e\.?\s?u\.?)/i,
+ wide: /^(sebelum masehi|sebelum era umum|masehi|era umum)/i
+}
+var parseEraPatterns = {
+ any: [/^s/i, /^(m|e)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^K-?\s[1234]/i,
+ wide: /^Kuartal ke-?\s?[1234]/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mar|apr|mei|jun|jul|agt|sep|okt|nov|des)/i,
+ wide: /^(januari|februari|maret|april|mei|juni|juli|agustus|september|oktober|november|desember)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^ma/i,
+ /^ap/i,
+ /^me/i,
+ /^jun/i,
+ /^jul/i,
+ /^ag/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[srkjm]/i,
+ short: /^(min|sen|sel|rab|kam|jum|sab)/i,
+ abbreviated: /^(min|sen|sel|rab|kam|jum|sab)/i,
+ wide: /^(minggu|senin|selasa|rabu|kamis|jumat|sabtu)/i
+}
+var parseDayPatterns = {
+ narrow: [/^m/i, /^s/i, /^s/i, /^r/i, /^k/i, /^j/i, /^s/i],
+ any: [/^m/i, /^sen/i, /^sel/i, /^r/i, /^k/i, /^j/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|tengah m|tengah h|(di(\swaktu)?) (pagi|siang|sore|malam))/i,
+ any: /^([ap]\.?\s?m\.?|tengah malam|tengah hari|(di(\swaktu)?) (pagi|siang|sore|malam))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^pm/i,
+ midnight: /^tengah m/i,
+ noon: /^tengah h/i,
+ morning: /pagi/i,
+ afternoon: /siang/i,
+ evening: /sore/i,
+ night: /malam/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/id/index.d.ts b/date-fns/src/locale/id/index.d.ts
new file mode 100644
index 0000000..2bf83f4
--- /dev/null
+++ b/date-fns/src/locale/id/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { id } from 'date-fns/locale'
+export default id
diff --git a/date-fns/src/locale/id/index.js b/date-fns/src/locale/id/index.js
new file mode 100644
index 0000000..ab331e8
--- /dev/null
+++ b/date-fns/src/locale/id/index.js
@@ -0,0 +1,31 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Indonesian locale.
+ * @language Indonesian
+ * @iso-639-2 ind
+ * @author Rahmat Budiharso [@rbudiharso]{@link https://github.com/rbudiharso}
+ * @author Benget Nata [@bentinata]{@link https://github.com/bentinata}
+ * @author Budi Irawan [@deerawan]{@link https://github.com/deerawan}
+ * @author Try Ajitiono [@imballinst]{@link https://github.com/imballinst}
+ */
+var locale = {
+ code: 'id',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/id/index.js.flow b/date-fns/src/locale/id/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/id/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/id/snapshot.md b/date-fns/src/locale/id/snapshot.md
new file mode 100644
index 0000000..e331679
--- /dev/null
+++ b/date-fns/src/locale/id/snapshot.md
@@ -0,0 +1,304 @@
+# Indonesian (id) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | ke-1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | ke-5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | ke-1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | ke-5 | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | ke-1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ke-2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | K1 | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | K2 | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | Kuartal ke-1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Kuartal ke-2 | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | ke-1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ke-2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | K1 | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | K2 | Invalid Date |
+| | qqqq | 2019-01-01T12:13:14.015Z | Kuartal ke-1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Kuartal ke-2 | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | ke-2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ke-7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | ke-2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ke-7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | ke-1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | ke-48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | ke-1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | ke-48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | ke-11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | ke-28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | ke-42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | ke-365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Senin | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jumat | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | S | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | ke-1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ke-5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Senin | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jumat | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | S | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | ke-1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ke-5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Senin | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jumat | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | S | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | ke-1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ke-5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Senin | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jumat | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | S | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Sen | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | pagi | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | siang | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | sore | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | malam | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | pagi | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | siang | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | sore | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | malam | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | pagi | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | siang | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | sore | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | malam | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | pagi | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | siang | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | sore | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | malam | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | pagi | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | siang | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | sore | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | malam | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | ke-11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ke-11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | ke-11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ke-23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | ke-11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ke-11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | ke-11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ke-23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | ke-1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | ke-55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | ke-1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | ke-55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/2/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 Februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Rabu, 11 Februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Minggu, 29 Mei 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59 | 1453-05-29T23:59:00.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59.59 | 1453-05-29T23:59:59.000Z |
+| | pppp | 1987-02-11T12:13:14.015Z | 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59.59 | 1453-05-29T23:59:59.000Z |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/2/1987, 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/1453, 23.59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Feb 1987, 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453, 23.59 | 1453-05-29T23:59:00.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 Februari 1987 pukul 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453 pukul 23.59.59 | 1453-05-29T23:59:59.000Z |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Rabu, 11 Februari 1987 pukul 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | Minggu, 29 Mei 1453 pukul 23.59.59 | 1453-05-29T23:59:59.000Z |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------- | ---------------------- | ------------------------------- |
+| 2006-01-01T00:00:00.000Z | sekitar 6 tahun | sekitar 6 tahun | dalam waktu sekitar 6 tahun |
+| 2005-01-01T00:00:00.000Z | sekitar 5 tahun | sekitar 5 tahun | dalam waktu sekitar 5 tahun |
+| 2004-01-01T00:00:00.000Z | sekitar 4 tahun | sekitar 4 tahun | dalam waktu sekitar 4 tahun |
+| 2003-01-01T00:00:00.000Z | sekitar 3 tahun | sekitar 3 tahun | dalam waktu sekitar 3 tahun |
+| 2002-01-01T00:00:00.000Z | sekitar 2 tahun | sekitar 2 tahun | dalam waktu sekitar 2 tahun |
+| 2001-06-01T00:00:00.000Z | lebih dari 1 tahun | lebih dari 1 tahun | dalam waktu lebih dari 1 tahun |
+| 2001-02-01T00:00:00.000Z | sekitar 1 tahun | sekitar 1 tahun | dalam waktu sekitar 1 tahun |
+| 2001-01-01T00:00:00.000Z | sekitar 1 tahun | sekitar 1 tahun | dalam waktu sekitar 1 tahun |
+| 2000-06-01T00:00:00.000Z | 5 bulan | 5 bulan | dalam waktu 5 bulan |
+| 2000-03-01T00:00:00.000Z | 2 bulan | 2 bulan | dalam waktu 2 bulan |
+| 2000-02-01T00:00:00.000Z | sekitar 1 bulan | sekitar 1 bulan | dalam waktu sekitar 1 bulan |
+| 2000-01-15T00:00:00.000Z | 14 hari | 14 hari | dalam waktu 14 hari |
+| 2000-01-02T00:00:00.000Z | 1 hari | 1 hari | dalam waktu 1 hari |
+| 2000-01-01T06:00:00.000Z | sekitar 6 jam | sekitar 6 jam | dalam waktu sekitar 6 jam |
+| 2000-01-01T01:00:00.000Z | sekitar 1 jam | sekitar 1 jam | dalam waktu sekitar 1 jam |
+| 2000-01-01T00:45:00.000Z | sekitar 1 jam | sekitar 1 jam | dalam waktu sekitar 1 jam |
+| 2000-01-01T00:30:00.000Z | 30 menit | 30 menit | dalam waktu 30 menit |
+| 2000-01-01T00:15:00.000Z | 15 menit | 15 menit | dalam waktu 15 menit |
+| 2000-01-01T00:01:00.000Z | 1 menit | 1 menit | dalam waktu 1 menit |
+| 2000-01-01T00:00:25.000Z | kurang dari 1 menit | setengah menit | dalam waktu kurang dari 1 menit |
+| 2000-01-01T00:00:15.000Z | kurang dari 1 menit | kurang dari 20 detik | dalam waktu kurang dari 1 menit |
+| 2000-01-01T00:00:05.000Z | kurang dari 1 menit | kurang dari 10 detik | dalam waktu kurang dari 1 menit |
+| 2000-01-01T00:00:00.000Z | kurang dari 1 menit | kurang dari 5 detik | kurang dari 1 menit yang lalu |
+| 1999-12-31T23:59:55.000Z | kurang dari 1 menit | kurang dari 10 detik | kurang dari 1 menit yang lalu |
+| 1999-12-31T23:59:45.000Z | kurang dari 1 menit | kurang dari 20 detik | kurang dari 1 menit yang lalu |
+| 1999-12-31T23:59:35.000Z | kurang dari 1 menit | setengah menit | kurang dari 1 menit yang lalu |
+| 1999-12-31T23:59:00.000Z | 1 menit | 1 menit | 1 menit yang lalu |
+| 1999-12-31T23:45:00.000Z | 15 menit | 15 menit | 15 menit yang lalu |
+| 1999-12-31T23:30:00.000Z | 30 menit | 30 menit | 30 menit yang lalu |
+| 1999-12-31T23:15:00.000Z | sekitar 1 jam | sekitar 1 jam | sekitar 1 jam yang lalu |
+| 1999-12-31T23:00:00.000Z | sekitar 1 jam | sekitar 1 jam | sekitar 1 jam yang lalu |
+| 1999-12-31T18:00:00.000Z | sekitar 6 jam | sekitar 6 jam | sekitar 6 jam yang lalu |
+| 1999-12-30T00:00:00.000Z | 2 hari | 2 hari | 2 hari yang lalu |
+| 1999-12-15T00:00:00.000Z | 17 hari | 17 hari | 17 hari yang lalu |
+| 1999-12-01T00:00:00.000Z | sekitar 1 bulan | sekitar 1 bulan | sekitar 1 bulan yang lalu |
+| 1999-11-01T00:00:00.000Z | 2 bulan | 2 bulan | 2 bulan yang lalu |
+| 1999-06-01T00:00:00.000Z | 7 bulan | 7 bulan | 7 bulan yang lalu |
+| 1999-01-01T00:00:00.000Z | sekitar 1 tahun | sekitar 1 tahun | sekitar 1 tahun yang lalu |
+| 1998-12-01T00:00:00.000Z | sekitar 1 tahun | sekitar 1 tahun | sekitar 1 tahun yang lalu |
+| 1998-06-01T00:00:00.000Z | lebih dari 1 tahun | lebih dari 1 tahun | lebih dari 1 tahun yang lalu |
+| 1998-01-01T00:00:00.000Z | sekitar 2 tahun | sekitar 2 tahun | sekitar 2 tahun yang lalu |
+| 1997-01-01T00:00:00.000Z | sekitar 3 tahun | sekitar 3 tahun | sekitar 3 tahun yang lalu |
+| 1996-01-01T00:00:00.000Z | sekitar 4 tahun | sekitar 4 tahun | sekitar 4 tahun yang lalu |
+| 1995-01-01T00:00:00.000Z | sekitar 5 tahun | sekitar 5 tahun | sekitar 5 tahun yang lalu |
+| 1994-01-01T00:00:00.000Z | sekitar 6 tahun | sekitar 6 tahun | sekitar 6 tahun yang lalu |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | -------- | -------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 tahun | dalam waktu 6 tahun | 52608 jam |
+| 2005-01-01T00:00:00.000Z | 5 tahun | dalam waktu 5 tahun | 43848 jam |
+| 2004-01-01T00:00:00.000Z | 4 tahun | dalam waktu 4 tahun | 35064 jam |
+| 2003-01-01T00:00:00.000Z | 3 tahun | dalam waktu 3 tahun | 26304 jam |
+| 2002-01-01T00:00:00.000Z | 2 tahun | dalam waktu 2 tahun | 17544 jam |
+| 2001-06-01T00:00:00.000Z | 1 tahun | dalam waktu 1 tahun | 12408 jam |
+| 2001-02-01T00:00:00.000Z | 1 tahun | dalam waktu 1 tahun | 9528 jam |
+| 2001-01-01T00:00:00.000Z | 1 tahun | dalam waktu 1 tahun | 8784 jam |
+| 2000-06-01T00:00:00.000Z | 5 bulan | dalam waktu 5 bulan | 3648 jam |
+| 2000-03-01T00:00:00.000Z | 2 bulan | dalam waktu 2 bulan | 1440 jam |
+| 2000-02-01T00:00:00.000Z | 1 bulan | dalam waktu 1 bulan | 744 jam |
+| 2000-01-15T00:00:00.000Z | 14 hari | dalam waktu 14 hari | 336 jam |
+| 2000-01-02T00:00:00.000Z | 1 hari | dalam waktu 1 hari | 24 jam |
+| 2000-01-01T06:00:00.000Z | 6 jam | dalam waktu 6 jam | 6 jam |
+| 2000-01-01T01:00:00.000Z | 1 jam | dalam waktu 1 jam | 1 jam |
+| 2000-01-01T00:45:00.000Z | 45 menit | dalam waktu 45 menit | 1 jam |
+| 2000-01-01T00:30:00.000Z | 30 menit | dalam waktu 30 menit | 1 jam |
+| 2000-01-01T00:15:00.000Z | 15 menit | dalam waktu 15 menit | 0 jam |
+| 2000-01-01T00:01:00.000Z | 1 menit | dalam waktu 1 menit | 0 jam |
+| 2000-01-01T00:00:25.000Z | 25 detik | dalam waktu 25 detik | 0 jam |
+| 2000-01-01T00:00:15.000Z | 15 detik | dalam waktu 15 detik | 0 jam |
+| 2000-01-01T00:00:05.000Z | 5 detik | dalam waktu 5 detik | 0 jam |
+| 2000-01-01T00:00:00.000Z | 0 detik | 0 detik yang lalu | 0 jam |
+| 1999-12-31T23:59:55.000Z | 5 detik | 5 detik yang lalu | 0 jam |
+| 1999-12-31T23:59:45.000Z | 15 detik | 15 detik yang lalu | 0 jam |
+| 1999-12-31T23:59:35.000Z | 25 detik | 25 detik yang lalu | 0 jam |
+| 1999-12-31T23:59:00.000Z | 1 menit | 1 menit yang lalu | 0 jam |
+| 1999-12-31T23:45:00.000Z | 15 menit | 15 menit yang lalu | 0 jam |
+| 1999-12-31T23:30:00.000Z | 30 menit | 30 menit yang lalu | 1 jam |
+| 1999-12-31T23:15:00.000Z | 45 menit | 45 menit yang lalu | 1 jam |
+| 1999-12-31T23:00:00.000Z | 1 jam | 1 jam yang lalu | 1 jam |
+| 1999-12-31T18:00:00.000Z | 6 jam | 6 jam yang lalu | 6 jam |
+| 1999-12-30T00:00:00.000Z | 2 hari | 2 hari yang lalu | 48 jam |
+| 1999-12-15T00:00:00.000Z | 17 hari | 17 hari yang lalu | 408 jam |
+| 1999-12-01T00:00:00.000Z | 1 bulan | 1 bulan yang lalu | 744 jam |
+| 1999-11-01T00:00:00.000Z | 2 bulan | 2 bulan yang lalu | 1464 jam |
+| 1999-06-01T00:00:00.000Z | 7 bulan | 7 bulan yang lalu | 5136 jam |
+| 1999-01-01T00:00:00.000Z | 1 tahun | 1 tahun yang lalu | 8760 jam |
+| 1998-12-01T00:00:00.000Z | 1 tahun | 1 tahun yang lalu | 9504 jam |
+| 1998-06-01T00:00:00.000Z | 2 tahun | 2 tahun yang lalu | 13896 jam |
+| 1998-01-01T00:00:00.000Z | 2 tahun | 2 tahun yang lalu | 17520 jam |
+| 1997-01-01T00:00:00.000Z | 3 tahun | 3 tahun yang lalu | 26280 jam |
+| 1996-01-01T00:00:00.000Z | 4 tahun | 4 tahun yang lalu | 35064 jam |
+| 1995-01-01T00:00:00.000Z | 5 tahun | 5 tahun yang lalu | 43824 jam |
+| 1994-01-01T00:00:00.000Z | 6 tahun | 6 tahun yang lalu | 52584 jam |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------- |
+| 2000-01-10T00:00:00.000Z | 10/1/2000 |
+| 2000-01-05T00:00:00.000Z | Rabu pukul 00.00 |
+| 2000-01-02T00:00:00.000Z | Besok pukul 00.00 |
+| 2000-01-01T00:00:00.000Z | Hari ini pukul 00.00 |
+| 1999-12-31T00:00:00.000Z | Kemarin pukul 00.00 |
+| 1999-12-27T00:00:00.000Z | Senin lalu pukul 00.00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/index.js b/date-fns/src/locale/index.js
new file mode 100644
index 0000000..dc56bfb
--- /dev/null
+++ b/date-fns/src/locale/index.js
@@ -0,0 +1,82 @@
+// This file is generated automatically by `scripts/build/indices.js`. Please, don't change it.
+
+export { default as af } from './af/index'
+export { default as arDZ } from './ar-DZ/index'
+export { default as arMA } from './ar-MA/index'
+export { default as arSA } from './ar-SA/index'
+export { default as az } from './az/index'
+export { default as be } from './be/index'
+export { default as bg } from './bg/index'
+export { default as bn } from './bn/index'
+export { default as ca } from './ca/index'
+export { default as cs } from './cs/index'
+export { default as cy } from './cy/index'
+export { default as da } from './da/index'
+export { default as de } from './de/index'
+export { default as deAT } from './de-AT/index'
+export { default as el } from './el/index'
+export { default as enAU } from './en-AU/index'
+export { default as enCA } from './en-CA/index'
+export { default as enGB } from './en-GB/index'
+export { default as enIN } from './en-IN/index'
+export { default as enNZ } from './en-NZ/index'
+export { default as enUS } from './en-US/index'
+export { default as enZA } from './en-ZA/index'
+export { default as eo } from './eo/index'
+export { default as es } from './es/index'
+export { default as et } from './et/index'
+export { default as eu } from './eu/index'
+export { default as faIR } from './fa-IR/index'
+export { default as fi } from './fi/index'
+export { default as fr } from './fr/index'
+export { default as frCA } from './fr-CA/index'
+export { default as frCH } from './fr-CH/index'
+export { default as gd } from './gd/index'
+export { default as gl } from './gl/index'
+export { default as gu } from './gu/index'
+export { default as he } from './he/index'
+export { default as hi } from './hi/index'
+export { default as hr } from './hr/index'
+export { default as ht } from './ht/index'
+export { default as hu } from './hu/index'
+export { default as hy } from './hy/index'
+export { default as id } from './id/index'
+export { default as is } from './is/index'
+export { default as it } from './it/index'
+export { default as ja } from './ja/index'
+export { default as ka } from './ka/index'
+export { default as kk } from './kk/index'
+export { default as kn } from './kn/index'
+export { default as ko } from './ko/index'
+export { default as lb } from './lb/index'
+export { default as lt } from './lt/index'
+export { default as lv } from './lv/index'
+export { default as mk } from './mk/index'
+export { default as mn } from './mn/index'
+export { default as ms } from './ms/index'
+export { default as mt } from './mt/index'
+export { default as nb } from './nb/index'
+export { default as nl } from './nl/index'
+export { default as nlBE } from './nl-BE/index'
+export { default as nn } from './nn/index'
+export { default as pl } from './pl/index'
+export { default as pt } from './pt/index'
+export { default as ptBR } from './pt-BR/index'
+export { default as ro } from './ro/index'
+export { default as ru } from './ru/index'
+export { default as sk } from './sk/index'
+export { default as sl } from './sl/index'
+export { default as sq } from './sq/index'
+export { default as sr } from './sr/index'
+export { default as srLatn } from './sr-Latn/index'
+export { default as sv } from './sv/index'
+export { default as ta } from './ta/index'
+export { default as te } from './te/index'
+export { default as th } from './th/index'
+export { default as tr } from './tr/index'
+export { default as ug } from './ug/index'
+export { default as uk } from './uk/index'
+export { default as uz } from './uz/index'
+export { default as vi } from './vi/index'
+export { default as zhCN } from './zh-CN/index'
+export { default as zhTW } from './zh-TW/index'
diff --git a/date-fns/src/locale/index.js.flow b/date-fns/src/locale/index.js.flow
new file mode 100644
index 0000000..4998a2e
--- /dev/null
+++ b/date-fns/src/locale/index.js.flow
@@ -0,0 +1,118 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: {
+ af: Locale,
+ ar: Locale,
+ arDZ: Locale,
+ arMA: Locale,
+ arSA: Locale,
+ az: Locale,
+ be: Locale,
+ bg: Locale,
+ bn: Locale,
+ ca: Locale,
+ cs: Locale,
+ cy: Locale,
+ da: Locale,
+ de: Locale,
+ deAT: Locale,
+ el: Locale,
+ enAU: Locale,
+ enCA: Locale,
+ enGB: Locale,
+ enIN: Locale,
+ enNZ: Locale,
+ enUS: Locale,
+ enZA: Locale,
+ eo: Locale,
+ es: Locale,
+ et: Locale,
+ eu: Locale,
+ faIR: Locale,
+ fi: Locale,
+ fil: Locale,
+ fr: Locale,
+ frCA: Locale,
+ frCH: Locale,
+ gd: Locale,
+ gl: Locale,
+ gu: Locale,
+ he: Locale,
+ hi: Locale,
+ hr: Locale,
+ ht: Locale,
+ hu: Locale,
+ hy: Locale,
+ id: Locale,
+ is: Locale,
+ it: Locale,
+ ja: Locale,
+ ka: Locale,
+ kk: Locale,
+ kn: Locale,
+ ko: Locale,
+ lb: Locale,
+ lt: Locale,
+ lv: Locale,
+ mk: Locale,
+ mn: Locale,
+ ms: Locale,
+ mt: Locale,
+ nb: Locale,
+ nl: Locale,
+ nlBE: Locale,
+ nn: Locale,
+ pl: Locale,
+ pt: Locale,
+ ptBR: Locale,
+ ro: Locale,
+ ru: Locale,
+ sk: Locale,
+ sl: Locale,
+ sq: Locale,
+ sr: Locale,
+ srLatn: Locale,
+ sv: Locale,
+ ta: Locale,
+ te: Locale,
+ th: Locale,
+ tr: Locale,
+ ug: Locale,
+ uk: Locale,
+ uz: Locale,
+ vi: Locale,
+ zhCN: Locale,
+ zhTW: Locale,
+}
diff --git a/date-fns/src/locale/is/_lib/formatDistance/index.js b/date-fns/src/locale/is/_lib/formatDistance/index.js
new file mode 100644
index 0000000..4a21daf
--- /dev/null
+++ b/date-fns/src/locale/is/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'minna en 1 sekúnda',
+ other: 'minna en {{count}} sekúndur'
+ },
+
+ xSeconds: {
+ one: '1 sekúnda',
+ other: '{{count}} sekúndur'
+ },
+
+ halfAMinute: 'hálf mínúta',
+
+ lessThanXMinutes: {
+ one: 'minna en 1 mínúta',
+ other: 'minna en {{count}} mínútur'
+ },
+
+ xMinutes: {
+ one: '1 mínúta',
+ other: '{{count}} mínútur'
+ },
+
+ aboutXHours: {
+ one: 'u.þ.b. 1 klukkustund',
+ other: 'u.þ.b. {{count}} klukkustundir'
+ },
+
+ xHours: {
+ one: '1 klukkustund',
+ other: '{{count}} klukkustundir'
+ },
+
+ xDays: {
+ one: '1 dagur',
+ other: '{{count}} dagar'
+ },
+
+ aboutXWeeks: {
+ one: 'um viku',
+ other: 'um {{count}} vikur'
+ },
+
+ xWeeks: {
+ one: '1 viku',
+ other: '{{count}} vikur'
+ },
+
+ aboutXMonths: {
+ one: 'u.þ.b. 1 mánuður',
+ other: 'u.þ.b. {{count}} mánuðir'
+ },
+
+ xMonths: {
+ one: '1 mánuður',
+ other: '{{count}} mánuðir'
+ },
+
+ aboutXYears: {
+ one: 'u.þ.b. 1 ár',
+ other: 'u.þ.b. {{count}} ár'
+ },
+
+ xYears: {
+ one: '1 ár',
+ other: '{{count}} ár'
+ },
+
+ overXYears: {
+ one: 'meira en 1 ár',
+ other: 'meira en {{count}} ár'
+ },
+
+ almostXYears: {
+ one: 'næstum 1 ár',
+ other: 'næstum {{count}} ár'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'í ' + result
+ } else {
+ return result + ' síðan'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/is/_lib/formatLong/index.js b/date-fns/src/locale/is/_lib/formatLong/index.js
new file mode 100644
index 0000000..5d67398
--- /dev/null
+++ b/date-fns/src/locale/is/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, do MMMM y',
+ long: 'do MMMM y',
+ medium: 'do MMM y',
+ short: 'd.MM.y'
+}
+
+var timeFormats = {
+ full: "'kl'. HH:mm:ss zzzz",
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'kl.' {{time}}",
+ long: "{{date}} 'kl.' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/is/_lib/formatRelative/index.js b/date-fns/src/locale/is/_lib/formatRelative/index.js
new file mode 100644
index 0000000..14de903
--- /dev/null
+++ b/date-fns/src/locale/is/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'síðasta' dddd 'kl.' p",
+ yesterday: "'í gær kl.' p",
+ today: "'í dag kl.' p",
+ tomorrow: "'á morgun kl.' p",
+ nextWeek: "dddd 'kl.' p",
+ other: 'L'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/is/_lib/localize/index.js b/date-fns/src/locale/is/_lib/localize/index.js
new file mode 100644
index 0000000..06fcc6d
--- /dev/null
+++ b/date-fns/src/locale/is/_lib/localize/index.js
@@ -0,0 +1,167 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['f.Kr.', 'e.Kr.'],
+ abbreviated: ['f.Kr.', 'e.Kr.'],
+ wide: ['fyrir Krist', 'eftir Krist']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1F', '2F', '3F', '4F'],
+ wide: ['1. fjórðungur', '2. fjórðungur', '3. fjórðungur', '4. fjórðungur']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'Á', 'S', 'Ó', 'N', 'D'],
+ abbreviated: [
+ 'jan.',
+ 'feb.',
+ 'mars',
+ 'apríl',
+ 'maí',
+ 'júní',
+ 'júlí',
+ 'ágúst',
+ 'sept.',
+ 'okt.',
+ 'nóv.',
+ 'des.'
+ ],
+ wide: [
+ 'janúar',
+ 'febrúar',
+ 'mars',
+ 'apríl',
+ 'maí',
+ 'júní',
+ 'júlí',
+ 'ágúst',
+ 'september',
+ 'október',
+ 'nóvember',
+ 'desember'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'Þ', 'M', 'F', 'F', 'L'],
+ short: ['Su', 'Má', 'Þr', 'Mi', 'Fi', 'Fö', 'La'],
+ abbreviated: ['sun.', 'mán.', 'þri.', 'mið.', 'fim.', 'fös.', 'lau'],
+ wide: [
+ 'sunnudagur',
+ 'mánudagur',
+ 'þriðjudagur',
+ 'miðvikudagur',
+ 'fimmtudagur',
+ 'föstudagur',
+ 'laugardagur'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'f',
+ pm: 'e',
+ midnight: 'miðnætti',
+ noon: 'hádegi',
+ morning: 'morgunn',
+ afternoon: 'síðdegi',
+ evening: 'kvöld',
+ night: 'nótt'
+ },
+ abbreviated: {
+ am: 'f.h.',
+ pm: 'e.h.',
+ midnight: 'miðnætti',
+ noon: 'hádegi',
+ morning: 'morgunn',
+ afternoon: 'síðdegi',
+ evening: 'kvöld',
+ night: 'nótt'
+ },
+ wide: {
+ am: 'fyrir hádegi',
+ pm: 'eftir hádegi',
+ midnight: 'miðnætti',
+ noon: 'hádegi',
+ morning: 'morgunn',
+ afternoon: 'síðdegi',
+ evening: 'kvöld',
+ night: 'nótt'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'f',
+ pm: 'e',
+ midnight: 'á miðnætti',
+ noon: 'á hádegi',
+ morning: 'að morgni',
+ afternoon: 'síðdegis',
+ evening: 'um kvöld',
+ night: 'um nótt'
+ },
+ abbreviated: {
+ am: 'f.h.',
+ pm: 'e.h.',
+ midnight: 'á miðnætti',
+ noon: 'á hádegi',
+ morning: 'að morgni',
+ afternoon: 'síðdegis',
+ evening: 'um kvöld',
+ night: 'um nótt'
+ },
+ wide: {
+ am: 'fyrir hádegi',
+ pm: 'eftir hádegi',
+ midnight: 'á miðnætti',
+ noon: 'á hádegi',
+ morning: 'að morgni',
+ afternoon: 'síðdegis',
+ evening: 'um kvöld',
+ night: 'um nótt'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/is/_lib/match/index.js b/date-fns/src/locale/is/_lib/match/index.js
new file mode 100644
index 0000000..889c7ca
--- /dev/null
+++ b/date-fns/src/locale/is/_lib/match/index.js
@@ -0,0 +1,141 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(f\.Kr\.|e\.Kr\.)/i,
+ abbreviated: /^(f\.Kr\.|e\.Kr\.)/i,
+ wide: /^(fyrir Krist|eftir Krist)/i
+}
+
+var parseEraPatterns = {
+ any: [/^(f\.Kr\.|e\.Kr\.)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234] fjórðungur/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmásónd]/i,
+ abbreviated: /^(jan\.|feb\.|mars\.|apríl\.|maí|júní|júlí|águst|sep\.|oct\.|nov\.|dec\.)/i,
+ wide: /^(januar|februar|mars|apríl|maí|júní|júlí|águst|september|október|nóvember|desember)/i
+}
+
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^á/i,
+ /^s/i,
+ /^ó/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^maí/i,
+ /^jún/i,
+ /^júl/i,
+ /^áu/i,
+ /^s/i,
+ /^ó/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smtwf]/i,
+ short: /^(su|má|þr|mi|fi|fö|la)/i,
+ abbreviated: /^(sun|mán|þri|mið|fim|fös|lau)\.?/i,
+ wide: /^(sunnudagur|mánudagur|þriðjudagur|miðvikudagur|fimmtudagur|föstudagur|laugardagur)/i
+}
+
+var parseDayPatterns = {
+ narrow: [/^s/i, /^m/i, /^þ/i, /^m/i, /^f/i, /^f/i, /^l/i],
+ any: [/^su/i, /^má/i, /^þr/i, /^mi/i, /^fi/i, /^fö/i, /^la/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(f|e|síðdegis|(á|að|um) (morgni|kvöld|nótt|miðnætti))/i,
+ any: /^(fyrir hádegi|eftir hádegi|[ef]\.?h\.?|síðdegis|morgunn|(á|að|um) (morgni|kvöld|nótt|miðnætti))/i
+}
+
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^f/i,
+ pm: /^e/i,
+ midnight: /^mi/i,
+ noon: /^há/i,
+ morning: /morgunn/i,
+ afternoon: /síðdegi/i,
+ evening: /kvöld/i,
+ night: /nótt/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/is/index.d.ts b/date-fns/src/locale/is/index.d.ts
new file mode 100644
index 0000000..0d12119
--- /dev/null
+++ b/date-fns/src/locale/is/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { is } from 'date-fns/locale'
+export default is
diff --git a/date-fns/src/locale/is/index.js b/date-fns/src/locale/is/index.js
new file mode 100644
index 0000000..0d46f93
--- /dev/null
+++ b/date-fns/src/locale/is/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Icelandic locale.
+ * @language Icelandic
+ * @iso-639-2 isl
+ * @author Derek Blank [@derekblank]{@link https://github.com/derekblank}
+ * @author Arnór Ýmir [@lamayg]{@link https://github.com/lamayg}
+ */
+var locale = {
+ code: 'is',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/is/index.js.flow b/date-fns/src/locale/is/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/is/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/is/snapshot.md b/date-fns/src/locale/is/snapshot.md
new file mode 100644
index 0000000..629dfc8
--- /dev/null
+++ b/date-fns/src/locale/is/snapshot.md
@@ -0,0 +1,304 @@
+# Icelandic (is) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | --------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | Invalid Date |
+| | | 0005-01-01T12:13:14.015Z | 5. | Invalid Date |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | Invalid Date |
+| | | 0005-01-01T12:13:14.015Z | 4. | Invalid Date |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2. | Invalid Date |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1F | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2F | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. fjórðungur | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2. fjórðungur | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2. | Invalid Date |
+| | qqq | 2019-01-01T12:13:14.015Z | 1F | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2F | Invalid Date |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. fjórðungur | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2. fjórðungur | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | 7. | Invalid Date |
+| | MMM | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | júlí | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | febrúar | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | júlí | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | 7. | Invalid Date |
+| | LLL | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | júlí | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | febrúar | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | júlí | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-12-01T12:13:14.015Z | 48. | Invalid Date |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-12-01T12:13:14.015Z | 48. | Invalid Date |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | Invalid Date |
+| | | 2019-02-28T12:13:14.015Z | 28. | Invalid Date |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | Invalid Date |
+| | | 2019-12-31T12:13:14.015Z | 365. | Invalid Date |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | mán. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fös. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | mán. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fös. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | mán. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fös. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | mánudagur | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | föstudagur | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-14T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Má | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fö | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | 5. | Invalid Date |
+| | iii | 2019-02-11T12:13:14.015Z | mán. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fös. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | mánudagur | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | föstudagur | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-14T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Má | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fö | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | 5. | Invalid Date |
+| | eee | 2019-02-11T12:13:14.015Z | mán. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fös. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | mánudagur | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | föstudagur | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-14T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Má | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fö | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | 5. | Invalid Date |
+| | ccc | 2019-02-11T12:13:14.015Z | mán. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fös. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | mánudagur | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | föstudagur | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-14T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Má | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fö | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | fyrir hádegi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | eftir hádegi | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | eftir hádegi | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fyrir hádegi | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | f | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | e | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | e | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | f | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | e.h. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | f.h. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | fyrir hádegi | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | eftir hádegi | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | eftir hádegi | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fyrir hádegi | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | f | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | e | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | e | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | f | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | að morgni | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | síðdegis | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | um kvöld | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | um nótt | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | að morgni | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | síðdegis | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | um kvöld | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | um nótt | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | að morgni | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | síðdegis | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | um kvöld | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | um nótt | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | að morgni | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | síðdegis | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | um kvöld | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | um nótt | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | að morgni | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | síðdegis | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | um kvöld | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | um nótt | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | Invalid Date |
+| | | 2019-02-11T23:13:14.015Z | 11. | Invalid Date |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | Invalid Date |
+| | | 2019-02-11T23:13:14.015Z | 23. | Invalid Date |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | Invalid Date |
+| | | 2019-02-11T23:13:14.015Z | 11. | Invalid Date |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | Invalid Date |
+| | | 2019-02-11T23:13:14.015Z | 23. | Invalid Date |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | Invalid Date |
+| | | 2019-04-01T12:55:14.015Z | 55. | Invalid Date |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | Invalid Date |
+| | | 2019-04-01T12:13:55.015Z | 55. | Invalid Date |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. feb. 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29. maí 1453 | Invalid Date |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. febrúar 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29. maí 1453 | Invalid Date |
+| | PPPP | 1987-02-11T12:13:14.015Z | miðvikudagur, 11. febrúar 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | sunnudagur, 29. maí 1453 | Invalid Date |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | kl. 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | kl. 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. feb. 1987 12:13:14 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29. maí 1453 23:59:59 | Invalid Date |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. febrúar 1987 kl. 12:13:14 GMT+0 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29. maí 1453 kl. 23:59:59 GMT+0 | Invalid Date |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | miðvikudagur, 11. febrúar 1987 kl. kl. 12:13:14 GMT+00:00 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | sunnudagur, 29. maí 1453 kl. kl. 23:59:59 GMT+00:00 | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------------- | ---------------------- | ---------------------------- |
+| 2006-01-01T00:00:00.000Z | u.þ.b. 6 ár | u.þ.b. 6 ár | í u.þ.b. 6 ár |
+| 2005-01-01T00:00:00.000Z | u.þ.b. 5 ár | u.þ.b. 5 ár | í u.þ.b. 5 ár |
+| 2004-01-01T00:00:00.000Z | u.þ.b. 4 ár | u.þ.b. 4 ár | í u.þ.b. 4 ár |
+| 2003-01-01T00:00:00.000Z | u.þ.b. 3 ár | u.þ.b. 3 ár | í u.þ.b. 3 ár |
+| 2002-01-01T00:00:00.000Z | u.þ.b. 2 ár | u.þ.b. 2 ár | í u.þ.b. 2 ár |
+| 2001-06-01T00:00:00.000Z | meira en 1 ár | meira en 1 ár | í meira en 1 ár |
+| 2001-02-01T00:00:00.000Z | u.þ.b. 1 ár | u.þ.b. 1 ár | í u.þ.b. 1 ár |
+| 2001-01-01T00:00:00.000Z | u.þ.b. 1 ár | u.þ.b. 1 ár | í u.þ.b. 1 ár |
+| 2000-06-01T00:00:00.000Z | 5 mánuðir | 5 mánuðir | í 5 mánuðir |
+| 2000-03-01T00:00:00.000Z | 2 mánuðir | 2 mánuðir | í 2 mánuðir |
+| 2000-02-01T00:00:00.000Z | u.þ.b. 1 mánuður | u.þ.b. 1 mánuður | í u.þ.b. 1 mánuður |
+| 2000-01-15T00:00:00.000Z | 14 dagar | 14 dagar | í 14 dagar |
+| 2000-01-02T00:00:00.000Z | 1 dagur | 1 dagur | í 1 dagur |
+| 2000-01-01T06:00:00.000Z | u.þ.b. 6 klukkustundir | u.þ.b. 6 klukkustundir | í u.þ.b. 6 klukkustundir |
+| 2000-01-01T01:00:00.000Z | u.þ.b. 1 klukkustund | u.þ.b. 1 klukkustund | í u.þ.b. 1 klukkustund |
+| 2000-01-01T00:45:00.000Z | u.þ.b. 1 klukkustund | u.þ.b. 1 klukkustund | í u.þ.b. 1 klukkustund |
+| 2000-01-01T00:30:00.000Z | 30 mínútur | 30 mínútur | í 30 mínútur |
+| 2000-01-01T00:15:00.000Z | 15 mínútur | 15 mínútur | í 15 mínútur |
+| 2000-01-01T00:01:00.000Z | 1 mínúta | 1 mínúta | í 1 mínúta |
+| 2000-01-01T00:00:25.000Z | minna en 1 mínúta | hálf mínúta | í minna en 1 mínúta |
+| 2000-01-01T00:00:15.000Z | minna en 1 mínúta | minna en 20 sekúndur | í minna en 1 mínúta |
+| 2000-01-01T00:00:05.000Z | minna en 1 mínúta | minna en 10 sekúndur | í minna en 1 mínúta |
+| 2000-01-01T00:00:00.000Z | minna en 1 mínúta | minna en 5 sekúndur | minna en 1 mínúta síðan |
+| 1999-12-31T23:59:55.000Z | minna en 1 mínúta | minna en 10 sekúndur | minna en 1 mínúta síðan |
+| 1999-12-31T23:59:45.000Z | minna en 1 mínúta | minna en 20 sekúndur | minna en 1 mínúta síðan |
+| 1999-12-31T23:59:35.000Z | minna en 1 mínúta | hálf mínúta | minna en 1 mínúta síðan |
+| 1999-12-31T23:59:00.000Z | 1 mínúta | 1 mínúta | 1 mínúta síðan |
+| 1999-12-31T23:45:00.000Z | 15 mínútur | 15 mínútur | 15 mínútur síðan |
+| 1999-12-31T23:30:00.000Z | 30 mínútur | 30 mínútur | 30 mínútur síðan |
+| 1999-12-31T23:15:00.000Z | u.þ.b. 1 klukkustund | u.þ.b. 1 klukkustund | u.þ.b. 1 klukkustund síðan |
+| 1999-12-31T23:00:00.000Z | u.þ.b. 1 klukkustund | u.þ.b. 1 klukkustund | u.þ.b. 1 klukkustund síðan |
+| 1999-12-31T18:00:00.000Z | u.þ.b. 6 klukkustundir | u.þ.b. 6 klukkustundir | u.þ.b. 6 klukkustundir síðan |
+| 1999-12-30T00:00:00.000Z | 2 dagar | 2 dagar | 2 dagar síðan |
+| 1999-12-15T00:00:00.000Z | 17 dagar | 17 dagar | 17 dagar síðan |
+| 1999-12-01T00:00:00.000Z | u.þ.b. 1 mánuður | u.þ.b. 1 mánuður | u.þ.b. 1 mánuður síðan |
+| 1999-11-01T00:00:00.000Z | 2 mánuðir | 2 mánuðir | 2 mánuðir síðan |
+| 1999-06-01T00:00:00.000Z | 7 mánuðir | 7 mánuðir | 7 mánuðir síðan |
+| 1999-01-01T00:00:00.000Z | u.þ.b. 1 ár | u.þ.b. 1 ár | u.þ.b. 1 ár síðan |
+| 1998-12-01T00:00:00.000Z | u.þ.b. 1 ár | u.þ.b. 1 ár | u.þ.b. 1 ár síðan |
+| 1998-06-01T00:00:00.000Z | meira en 1 ár | meira en 1 ár | meira en 1 ár síðan |
+| 1998-01-01T00:00:00.000Z | u.þ.b. 2 ár | u.þ.b. 2 ár | u.þ.b. 2 ár síðan |
+| 1997-01-01T00:00:00.000Z | u.þ.b. 3 ár | u.þ.b. 3 ár | u.þ.b. 3 ár síðan |
+| 1996-01-01T00:00:00.000Z | u.þ.b. 4 ár | u.þ.b. 4 ár | u.þ.b. 4 ár síðan |
+| 1995-01-01T00:00:00.000Z | u.þ.b. 5 ár | u.þ.b. 5 ár | u.þ.b. 5 ár síðan |
+| 1994-01-01T00:00:00.000Z | u.þ.b. 6 ár | u.þ.b. 6 ár | u.þ.b. 6 ár síðan |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------------- | --------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 ár | í 6 ár | 52608 klukkustundir |
+| 2005-01-01T00:00:00.000Z | 5 ár | í 5 ár | 43848 klukkustundir |
+| 2004-01-01T00:00:00.000Z | 4 ár | í 4 ár | 35064 klukkustundir |
+| 2003-01-01T00:00:00.000Z | 3 ár | í 3 ár | 26304 klukkustundir |
+| 2002-01-01T00:00:00.000Z | 2 ár | í 2 ár | 17544 klukkustundir |
+| 2001-06-01T00:00:00.000Z | 1 ár | í 1 ár | 12408 klukkustundir |
+| 2001-02-01T00:00:00.000Z | 1 ár | í 1 ár | 9528 klukkustundir |
+| 2001-01-01T00:00:00.000Z | 1 ár | í 1 ár | 8784 klukkustundir |
+| 2000-06-01T00:00:00.000Z | 5 mánuðir | í 5 mánuðir | 3648 klukkustundir |
+| 2000-03-01T00:00:00.000Z | 2 mánuðir | í 2 mánuðir | 1440 klukkustundir |
+| 2000-02-01T00:00:00.000Z | 1 mánuður | í 1 mánuður | 744 klukkustundir |
+| 2000-01-15T00:00:00.000Z | 14 dagar | í 14 dagar | 336 klukkustundir |
+| 2000-01-02T00:00:00.000Z | 1 dagur | í 1 dagur | 24 klukkustundir |
+| 2000-01-01T06:00:00.000Z | 6 klukkustundir | í 6 klukkustundir | 6 klukkustundir |
+| 2000-01-01T01:00:00.000Z | 1 klukkustund | í 1 klukkustund | 1 klukkustund |
+| 2000-01-01T00:45:00.000Z | 45 mínútur | í 45 mínútur | 1 klukkustund |
+| 2000-01-01T00:30:00.000Z | 30 mínútur | í 30 mínútur | 1 klukkustund |
+| 2000-01-01T00:15:00.000Z | 15 mínútur | í 15 mínútur | 0 klukkustundir |
+| 2000-01-01T00:01:00.000Z | 1 mínúta | í 1 mínúta | 0 klukkustundir |
+| 2000-01-01T00:00:25.000Z | 25 sekúndur | í 25 sekúndur | 0 klukkustundir |
+| 2000-01-01T00:00:15.000Z | 15 sekúndur | í 15 sekúndur | 0 klukkustundir |
+| 2000-01-01T00:00:05.000Z | 5 sekúndur | í 5 sekúndur | 0 klukkustundir |
+| 2000-01-01T00:00:00.000Z | 0 sekúndur | 0 sekúndur síðan | 0 klukkustundir |
+| 1999-12-31T23:59:55.000Z | 5 sekúndur | 5 sekúndur síðan | 0 klukkustundir |
+| 1999-12-31T23:59:45.000Z | 15 sekúndur | 15 sekúndur síðan | 0 klukkustundir |
+| 1999-12-31T23:59:35.000Z | 25 sekúndur | 25 sekúndur síðan | 0 klukkustundir |
+| 1999-12-31T23:59:00.000Z | 1 mínúta | 1 mínúta síðan | 0 klukkustundir |
+| 1999-12-31T23:45:00.000Z | 15 mínútur | 15 mínútur síðan | 0 klukkustundir |
+| 1999-12-31T23:30:00.000Z | 30 mínútur | 30 mínútur síðan | 1 klukkustund |
+| 1999-12-31T23:15:00.000Z | 45 mínútur | 45 mínútur síðan | 1 klukkustund |
+| 1999-12-31T23:00:00.000Z | 1 klukkustund | 1 klukkustund síðan | 1 klukkustund |
+| 1999-12-31T18:00:00.000Z | 6 klukkustundir | 6 klukkustundir síðan | 6 klukkustundir |
+| 1999-12-30T00:00:00.000Z | 2 dagar | 2 dagar síðan | 48 klukkustundir |
+| 1999-12-15T00:00:00.000Z | 17 dagar | 17 dagar síðan | 408 klukkustundir |
+| 1999-12-01T00:00:00.000Z | 1 mánuður | 1 mánuður síðan | 744 klukkustundir |
+| 1999-11-01T00:00:00.000Z | 2 mánuðir | 2 mánuðir síðan | 1464 klukkustundir |
+| 1999-06-01T00:00:00.000Z | 7 mánuðir | 7 mánuðir síðan | 5136 klukkustundir |
+| 1999-01-01T00:00:00.000Z | 1 ár | 1 ár síðan | 8760 klukkustundir |
+| 1998-12-01T00:00:00.000Z | 1 ár | 1 ár síðan | 9504 klukkustundir |
+| 1998-06-01T00:00:00.000Z | 2 ár | 2 ár síðan | 13896 klukkustundir |
+| 1998-01-01T00:00:00.000Z | 2 ár | 2 ár síðan | 17520 klukkustundir |
+| 1997-01-01T00:00:00.000Z | 3 ár | 3 ár síðan | 26280 klukkustundir |
+| 1996-01-01T00:00:00.000Z | 4 ár | 4 ár síðan | 35064 klukkustundir |
+| 1995-01-01T00:00:00.000Z | 5 ár | 5 ár síðan | 43824 klukkustundir |
+| 1994-01-01T00:00:00.000Z | 6 ár | 6 ár síðan | 52584 klukkustundir |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------- |
+| 2000-01-10T00:00:00.000Z | 1 |
+| 2000-01-05T00:00:00.000Z | 0005 kl. 00:00 |
+| 2000-01-02T00:00:00.000Z | á morgun kl. 00:00 |
+| 2000-01-01T00:00:00.000Z | í dag kl. 00:00 |
+| 1999-12-31T00:00:00.000Z | í gær kl. 00:00 |
+| 1999-12-27T00:00:00.000Z | síðasta 0027 kl. 00:00 |
+| 1999-12-21T00:00:00.000Z | 12 |
diff --git a/date-fns/src/locale/it/_lib/formatDistance/index.js b/date-fns/src/locale/it/_lib/formatDistance/index.js
new file mode 100644
index 0000000..be8b937
--- /dev/null
+++ b/date-fns/src/locale/it/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'meno di un secondo',
+ other: 'meno di {{count}} secondi'
+ },
+
+ xSeconds: {
+ one: 'un secondo',
+ other: '{{count}} secondi'
+ },
+
+ halfAMinute: 'alcuni secondi',
+
+ lessThanXMinutes: {
+ one: 'meno di un minuto',
+ other: 'meno di {{count}} minuti'
+ },
+
+ xMinutes: {
+ one: 'un minuto',
+ other: '{{count}} minuti'
+ },
+
+ aboutXHours: {
+ one: "circa un'ora",
+ other: 'circa {{count}} ore'
+ },
+
+ xHours: {
+ one: "un'ora",
+ other: '{{count}} ore'
+ },
+
+ xDays: {
+ one: 'un giorno',
+ other: '{{count}} giorni'
+ },
+
+ aboutXWeeks: {
+ one: 'circa una settimana',
+ other: 'circa {{count}} settimane'
+ },
+
+ xWeeks: {
+ one: 'una settimana',
+ other: '{{count}} settimane'
+ },
+
+ aboutXMonths: {
+ one: 'circa un mese',
+ other: 'circa {{count}} mesi'
+ },
+
+ xMonths: {
+ one: 'un mese',
+ other: '{{count}} mesi'
+ },
+
+ aboutXYears: {
+ one: 'circa un anno',
+ other: 'circa {{count}} anni'
+ },
+
+ xYears: {
+ one: 'un anno',
+ other: '{{count}} anni'
+ },
+
+ overXYears: {
+ one: 'più di un anno',
+ other: 'più di {{count}} anni'
+ },
+
+ almostXYears: {
+ one: 'quasi un anno',
+ other: 'quasi {{count}} anni'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'tra ' + result
+ } else {
+ return result + ' fa'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/it/_lib/formatLong/index.js b/date-fns/src/locale/it/_lib/formatLong/index.js
new file mode 100644
index 0000000..6a45204
--- /dev/null
+++ b/date-fns/src/locale/it/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d MMMM y',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'dd/MM/y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/it/_lib/formatRelative/index.js b/date-fns/src/locale/it/_lib/formatRelative/index.js
new file mode 100644
index 0000000..7258059
--- /dev/null
+++ b/date-fns/src/locale/it/_lib/formatRelative/index.js
@@ -0,0 +1,66 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+var weekdays = [
+ 'domenica',
+ 'lunedì',
+ 'martedì',
+ 'mercoledì',
+ 'giovedì',
+ 'venerdì',
+ 'sabato'
+]
+
+function lastWeek(day) {
+ switch (day) {
+ case 0:
+ return "'domenica scorsa alle' p"
+ default:
+ return "'" + weekdays[day] + " scorso alle' p"
+ }
+}
+
+function thisWeek(day) {
+ return "'" + weekdays[day] + " alle' p"
+}
+
+function nextWeek(day) {
+ switch (day) {
+ case 0:
+ return "'domenica prossima alle' p"
+ default:
+ return "'" + weekdays[day] + " prossimo alle' p"
+ }
+}
+
+var formatRelativeLocale = {
+ lastWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return lastWeek(day)
+ }
+ },
+ yesterday: "'ieri alle' p",
+ today: "'oggi alle' p",
+ tomorrow: "'domani alle' p",
+ nextWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return nextWeek(day)
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/it/_lib/localize/index.js b/date-fns/src/locale/it/_lib/localize/index.js
new file mode 100644
index 0000000..2707f5c
--- /dev/null
+++ b/date-fns/src/locale/it/_lib/localize/index.js
@@ -0,0 +1,166 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['aC', 'dC'],
+ abbreviated: ['a.C.', 'd.C.'],
+ wide: ['avanti Cristo', 'dopo Cristo']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['T1', 'T2', 'T3', 'T4'],
+ wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']
+}
+
+var monthValues = {
+ narrow: ['G', 'F', 'M', 'A', 'M', 'G', 'L', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'gen',
+ 'feb',
+ 'mar',
+ 'apr',
+ 'mag',
+ 'giu',
+ 'lug',
+ 'ago',
+ 'set',
+ 'ott',
+ 'nov',
+ 'dic'
+ ],
+ wide: [
+ 'gennaio',
+ 'febbraio',
+ 'marzo',
+ 'aprile',
+ 'maggio',
+ 'giugno',
+ 'luglio',
+ 'agosto',
+ 'settembre',
+ 'ottobre',
+ 'novembre',
+ 'dicembre'
+ ]
+}
+
+var dayValues = {
+ narrow: ['D', 'L', 'M', 'M', 'G', 'V', 'S'],
+ short: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],
+ abbreviated: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],
+ wide: [
+ 'domenica',
+ 'lunedì',
+ 'martedì',
+ 'mercoledì',
+ 'giovedì',
+ 'venerdì',
+ 'sabato'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'm.',
+ pm: 'p.',
+ midnight: 'mezzanotte',
+ noon: 'mezzogiorno',
+ morning: 'mattina',
+ afternoon: 'pomeriggio',
+ evening: 'sera',
+ night: 'notte'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'mezzanotte',
+ noon: 'mezzogiorno',
+ morning: 'mattina',
+ afternoon: 'pomeriggio',
+ evening: 'sera',
+ night: 'notte'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'mezzanotte',
+ noon: 'mezzogiorno',
+ morning: 'mattina',
+ afternoon: 'pomeriggio',
+ evening: 'sera',
+ night: 'notte'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'm.',
+ pm: 'p.',
+ midnight: 'mezzanotte',
+ noon: 'mezzogiorno',
+ morning: 'di mattina',
+ afternoon: 'del pomeriggio',
+ evening: 'di sera',
+ night: 'di notte'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'mezzanotte',
+ noon: 'mezzogiorno',
+ morning: 'di mattina',
+ afternoon: 'del pomeriggio',
+ evening: 'di sera',
+ night: 'di notte'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'mezzanotte',
+ noon: 'mezzogiorno',
+ morning: 'di mattina',
+ afternoon: 'del pomeriggio',
+ evening: 'di sera',
+ night: 'di notte'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + 'º'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/it/_lib/match/index.js b/date-fns/src/locale/it/_lib/match/index.js
new file mode 100644
index 0000000..fa4e057
--- /dev/null
+++ b/date-fns/src/locale/it/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(º)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(aC|dC)/i,
+ abbreviated: /^(a\.?\s?C\.?|a\.?\s?e\.?\s?v\.?|d\.?\s?C\.?|e\.?\s?v\.?)/i,
+ wide: /^(avanti Cristo|avanti Era Volgare|dopo Cristo|Era Volgare)/i
+}
+var parseEraPatterns = {
+ any: [/^a/i, /^(d|e)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^t[1234]/i,
+ wide: /^[1234](º)? trimestre/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[gfmalsond]/i,
+ abbreviated: /^(gen|feb|mar|apr|mag|giu|lug|ago|set|ott|nov|dic)/i,
+ wide: /^(gennaio|febbraio|marzo|aprile|maggio|giugno|luglio|agosto|settembre|ottobre|novembre|dicembre)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^g/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^g/i,
+ /^l/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ge/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^mag/i,
+ /^gi/i,
+ /^l/i,
+ /^ag/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[dlmgvs]/i,
+ short: /^(do|lu|ma|me|gi|ve|sa)/i,
+ abbreviated: /^(dom|lun|mar|mer|gio|ven|sab)/i,
+ wide: /^(domenica|luned[i|ì]|marted[i|ì]|mercoled[i|ì]|gioved[i|ì]|venerd[i|ì]|sabato)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^g/i, /^v/i, /^s/i],
+ any: [/^d/i, /^l/i, /^ma/i, /^me/i, /^g/i, /^v/i, /^s/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|m\.|p|mezzanotte|mezzogiorno|(di|del) (mattina|pomeriggio|sera|notte))/i,
+ any: /^([ap]\.?\s?m\.?|mezzanotte|mezzogiorno|(di|del) (mattina|pomeriggio|sera|notte))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mezza/i,
+ noon: /^mezzo/i,
+ morning: /mattina/i,
+ afternoon: /pomeriggio/i,
+ evening: /sera/i,
+ night: /notte/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/it/index.d.ts b/date-fns/src/locale/it/index.d.ts
new file mode 100644
index 0000000..6e0422e
--- /dev/null
+++ b/date-fns/src/locale/it/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { it } from 'date-fns/locale'
+export default it
diff --git a/date-fns/src/locale/it/index.js b/date-fns/src/locale/it/index.js
new file mode 100644
index 0000000..b7aeec0
--- /dev/null
+++ b/date-fns/src/locale/it/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Italian locale.
+ * @language Italian
+ * @iso-639-2 ita
+ * @author Alberto Restifo [@albertorestifo]{@link https://github.com/albertorestifo}
+ * @author Giovanni Polimeni [@giofilo]{@link https://github.com/giofilo}
+ * @author Vincenzo Carrese [@vin-car]{@link https://github.com/vin-car}
+ */
+var locale = {
+ code: 'it',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/it/index.js.flow b/date-fns/src/locale/it/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/it/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/it/snapshot.md b/date-fns/src/locale/it/snapshot.md
new file mode 100644
index 0000000..53f0aea
--- /dev/null
+++ b/date-fns/src/locale/it/snapshot.md
@@ -0,0 +1,304 @@
+# Italian (it) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | --------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987º | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5º | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987º | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4º | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | lug | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | febbraio | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | luglio | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | L | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | lug | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | febbraio | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | luglio | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | L | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28º | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42º | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365º | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | lunedì | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | venerdì | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | lun | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ven | Invalid Date |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | lunedì | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | venerdì | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | lun | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ven | Invalid Date |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | lunedì | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | venerdì | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | lun | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ven | Invalid Date |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ven | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | lunedì | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | venerdì | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | L | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | lun | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | ven | Invalid Date |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | p. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | m. | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | p. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | m. | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | di mattina | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | del pomeriggio | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | di sera | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | di notte | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | di mattina | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | del pomeriggio | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | di sera | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | di notte | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | di mattina | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | del pomeriggio | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | di sera | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | di notte | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | di mattina | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | del pomeriggio | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | di sera | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | di notte | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | di mattina | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | del pomeriggio | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | di sera | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | di notte | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1º | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55º | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1º | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55º | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mag 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 febbraio 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 maggio 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | mercoledì 11 febbraio 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | domenica 29 maggio 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 feb 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mag 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 febbraio 1987 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 maggio 1453 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | mercoledì 11 febbraio 1987 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | domenica 29 maggio 1453 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------- | ---------------------- | --------------------- |
+| 2006-01-01T00:00:00.000Z | circa 6 anni | circa 6 anni | tra circa 6 anni |
+| 2005-01-01T00:00:00.000Z | circa 5 anni | circa 5 anni | tra circa 5 anni |
+| 2004-01-01T00:00:00.000Z | circa 4 anni | circa 4 anni | tra circa 4 anni |
+| 2003-01-01T00:00:00.000Z | circa 3 anni | circa 3 anni | tra circa 3 anni |
+| 2002-01-01T00:00:00.000Z | circa 2 anni | circa 2 anni | tra circa 2 anni |
+| 2001-06-01T00:00:00.000Z | più di un anno | più di un anno | tra più di un anno |
+| 2001-02-01T00:00:00.000Z | circa un anno | circa un anno | tra circa un anno |
+| 2001-01-01T00:00:00.000Z | circa un anno | circa un anno | tra circa un anno |
+| 2000-06-01T00:00:00.000Z | 5 mesi | 5 mesi | tra 5 mesi |
+| 2000-03-01T00:00:00.000Z | 2 mesi | 2 mesi | tra 2 mesi |
+| 2000-02-01T00:00:00.000Z | circa un mese | circa un mese | tra circa un mese |
+| 2000-01-15T00:00:00.000Z | 14 giorni | 14 giorni | tra 14 giorni |
+| 2000-01-02T00:00:00.000Z | un giorno | un giorno | tra un giorno |
+| 2000-01-01T06:00:00.000Z | circa 6 ore | circa 6 ore | tra circa 6 ore |
+| 2000-01-01T01:00:00.000Z | circa un'ora | circa un'ora | tra circa un'ora |
+| 2000-01-01T00:45:00.000Z | circa un'ora | circa un'ora | tra circa un'ora |
+| 2000-01-01T00:30:00.000Z | 30 minuti | 30 minuti | tra 30 minuti |
+| 2000-01-01T00:15:00.000Z | 15 minuti | 15 minuti | tra 15 minuti |
+| 2000-01-01T00:01:00.000Z | un minuto | un minuto | tra un minuto |
+| 2000-01-01T00:00:25.000Z | meno di un minuto | alcuni secondi | tra meno di un minuto |
+| 2000-01-01T00:00:15.000Z | meno di un minuto | meno di 20 secondi | tra meno di un minuto |
+| 2000-01-01T00:00:05.000Z | meno di un minuto | meno di 10 secondi | tra meno di un minuto |
+| 2000-01-01T00:00:00.000Z | meno di un minuto | meno di 5 secondi | meno di un minuto fa |
+| 1999-12-31T23:59:55.000Z | meno di un minuto | meno di 10 secondi | meno di un minuto fa |
+| 1999-12-31T23:59:45.000Z | meno di un minuto | meno di 20 secondi | meno di un minuto fa |
+| 1999-12-31T23:59:35.000Z | meno di un minuto | alcuni secondi | meno di un minuto fa |
+| 1999-12-31T23:59:00.000Z | un minuto | un minuto | un minuto fa |
+| 1999-12-31T23:45:00.000Z | 15 minuti | 15 minuti | 15 minuti fa |
+| 1999-12-31T23:30:00.000Z | 30 minuti | 30 minuti | 30 minuti fa |
+| 1999-12-31T23:15:00.000Z | circa un'ora | circa un'ora | circa un'ora fa |
+| 1999-12-31T23:00:00.000Z | circa un'ora | circa un'ora | circa un'ora fa |
+| 1999-12-31T18:00:00.000Z | circa 6 ore | circa 6 ore | circa 6 ore fa |
+| 1999-12-30T00:00:00.000Z | 2 giorni | 2 giorni | 2 giorni fa |
+| 1999-12-15T00:00:00.000Z | 17 giorni | 17 giorni | 17 giorni fa |
+| 1999-12-01T00:00:00.000Z | circa un mese | circa un mese | circa un mese fa |
+| 1999-11-01T00:00:00.000Z | 2 mesi | 2 mesi | 2 mesi fa |
+| 1999-06-01T00:00:00.000Z | 7 mesi | 7 mesi | 7 mesi fa |
+| 1999-01-01T00:00:00.000Z | circa un anno | circa un anno | circa un anno fa |
+| 1998-12-01T00:00:00.000Z | circa un anno | circa un anno | circa un anno fa |
+| 1998-06-01T00:00:00.000Z | più di un anno | più di un anno | più di un anno fa |
+| 1998-01-01T00:00:00.000Z | circa 2 anni | circa 2 anni | circa 2 anni fa |
+| 1997-01-01T00:00:00.000Z | circa 3 anni | circa 3 anni | circa 3 anni fa |
+| 1996-01-01T00:00:00.000Z | circa 4 anni | circa 4 anni | circa 4 anni fa |
+| 1995-01-01T00:00:00.000Z | circa 5 anni | circa 5 anni | circa 5 anni fa |
+| 1994-01-01T00:00:00.000Z | circa 6 anni | circa 6 anni | circa 6 anni fa |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 anni | tra 6 anni | 52608 ore |
+| 2005-01-01T00:00:00.000Z | 5 anni | tra 5 anni | 43848 ore |
+| 2004-01-01T00:00:00.000Z | 4 anni | tra 4 anni | 35064 ore |
+| 2003-01-01T00:00:00.000Z | 3 anni | tra 3 anni | 26304 ore |
+| 2002-01-01T00:00:00.000Z | 2 anni | tra 2 anni | 17544 ore |
+| 2001-06-01T00:00:00.000Z | un anno | tra un anno | 12408 ore |
+| 2001-02-01T00:00:00.000Z | un anno | tra un anno | 9528 ore |
+| 2001-01-01T00:00:00.000Z | un anno | tra un anno | 8784 ore |
+| 2000-06-01T00:00:00.000Z | 5 mesi | tra 5 mesi | 3648 ore |
+| 2000-03-01T00:00:00.000Z | 2 mesi | tra 2 mesi | 1440 ore |
+| 2000-02-01T00:00:00.000Z | un mese | tra un mese | 744 ore |
+| 2000-01-15T00:00:00.000Z | 14 giorni | tra 14 giorni | 336 ore |
+| 2000-01-02T00:00:00.000Z | un giorno | tra un giorno | 24 ore |
+| 2000-01-01T06:00:00.000Z | 6 ore | tra 6 ore | 6 ore |
+| 2000-01-01T01:00:00.000Z | un'ora | tra un'ora | un'ora |
+| 2000-01-01T00:45:00.000Z | 45 minuti | tra 45 minuti | un'ora |
+| 2000-01-01T00:30:00.000Z | 30 minuti | tra 30 minuti | un'ora |
+| 2000-01-01T00:15:00.000Z | 15 minuti | tra 15 minuti | 0 ore |
+| 2000-01-01T00:01:00.000Z | un minuto | tra un minuto | 0 ore |
+| 2000-01-01T00:00:25.000Z | 25 secondi | tra 25 secondi | 0 ore |
+| 2000-01-01T00:00:15.000Z | 15 secondi | tra 15 secondi | 0 ore |
+| 2000-01-01T00:00:05.000Z | 5 secondi | tra 5 secondi | 0 ore |
+| 2000-01-01T00:00:00.000Z | 0 secondi | 0 secondi fa | 0 ore |
+| 1999-12-31T23:59:55.000Z | 5 secondi | 5 secondi fa | 0 ore |
+| 1999-12-31T23:59:45.000Z | 15 secondi | 15 secondi fa | 0 ore |
+| 1999-12-31T23:59:35.000Z | 25 secondi | 25 secondi fa | 0 ore |
+| 1999-12-31T23:59:00.000Z | un minuto | un minuto fa | 0 ore |
+| 1999-12-31T23:45:00.000Z | 15 minuti | 15 minuti fa | 0 ore |
+| 1999-12-31T23:30:00.000Z | 30 minuti | 30 minuti fa | un'ora |
+| 1999-12-31T23:15:00.000Z | 45 minuti | 45 minuti fa | un'ora |
+| 1999-12-31T23:00:00.000Z | un'ora | un'ora fa | un'ora |
+| 1999-12-31T18:00:00.000Z | 6 ore | 6 ore fa | 6 ore |
+| 1999-12-30T00:00:00.000Z | 2 giorni | 2 giorni fa | 48 ore |
+| 1999-12-15T00:00:00.000Z | 17 giorni | 17 giorni fa | 408 ore |
+| 1999-12-01T00:00:00.000Z | un mese | un mese fa | 744 ore |
+| 1999-11-01T00:00:00.000Z | 2 mesi | 2 mesi fa | 1464 ore |
+| 1999-06-01T00:00:00.000Z | 7 mesi | 7 mesi fa | 5136 ore |
+| 1999-01-01T00:00:00.000Z | un anno | un anno fa | 8760 ore |
+| 1998-12-01T00:00:00.000Z | un anno | un anno fa | 9504 ore |
+| 1998-06-01T00:00:00.000Z | 2 anni | 2 anni fa | 13896 ore |
+| 1998-01-01T00:00:00.000Z | 2 anni | 2 anni fa | 17520 ore |
+| 1997-01-01T00:00:00.000Z | 3 anni | 3 anni fa | 26280 ore |
+| 1996-01-01T00:00:00.000Z | 4 anni | 4 anni fa | 35064 ore |
+| 1995-01-01T00:00:00.000Z | 5 anni | 5 anni fa | 43824 ore |
+| 1994-01-01T00:00:00.000Z | 6 anni | 6 anni fa | 52584 ore |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | mercoledì prossimo alle 00:00 |
+| 2000-01-02T00:00:00.000Z | domani alle 00:00 |
+| 2000-01-01T00:00:00.000Z | oggi alle 00:00 |
+| 1999-12-31T00:00:00.000Z | ieri alle 00:00 |
+| 1999-12-27T00:00:00.000Z | lunedì alle 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/ja/_lib/formatDistance/index.js b/date-fns/src/locale/ja/_lib/formatDistance/index.js
new file mode 100644
index 0000000..e3f05e1
--- /dev/null
+++ b/date-fns/src/locale/ja/_lib/formatDistance/index.js
@@ -0,0 +1,116 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: '1秒未満',
+ other: '{{count}}秒未満',
+ oneWithSuffix: '約1秒',
+ otherWithSuffix: '約{{count}}秒'
+ },
+
+ xSeconds: {
+ one: '1秒',
+ other: '{{count}}秒'
+ },
+
+ halfAMinute: '30秒',
+
+ lessThanXMinutes: {
+ one: '1分未満',
+ other: '{{count}}分未満',
+ oneWithSuffix: '約1分',
+ otherWithSuffix: '約{{count}}分'
+ },
+
+ xMinutes: {
+ one: '1分',
+ other: '{{count}}分'
+ },
+
+ aboutXHours: {
+ one: '約1時間',
+ other: '約{{count}}時間'
+ },
+
+ xHours: {
+ one: '1時間',
+ other: '{{count}}時間'
+ },
+
+ xDays: {
+ one: '1日',
+ other: '{{count}}日'
+ },
+
+ aboutXWeeks: {
+ one: '約1週間',
+ other: '約{{count}}週間'
+ },
+
+ xWeeks: {
+ one: '1週間',
+ other: '{{count}}週間'
+ },
+
+ aboutXMonths: {
+ one: '約1か月',
+ other: '約{{count}}か月'
+ },
+
+ xMonths: {
+ one: '1か月',
+ other: '{{count}}か月'
+ },
+
+ aboutXYears: {
+ one: '約1年',
+ other: '約{{count}}年'
+ },
+
+ xYears: {
+ one: '1年',
+ other: '{{count}}年'
+ },
+
+ overXYears: {
+ one: '1年以上',
+ other: '{{count}}年以上'
+ },
+
+ almostXYears: {
+ one: '1年近く',
+ other: '{{count}}年近く'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ if (options.addSuffix && formatDistanceLocale[token].oneWithSuffix) {
+ result = formatDistanceLocale[token].oneWithSuffix
+ } else {
+ result = formatDistanceLocale[token].one
+ }
+ } else {
+ if (options.addSuffix && formatDistanceLocale[token].otherWithSuffix) {
+ result = formatDistanceLocale[token].otherWithSuffix.replace(
+ '{{count}}',
+ count
+ )
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + '後'
+ } else {
+ return result + '前'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ja/_lib/formatLong/index.js b/date-fns/src/locale/ja/_lib/formatLong/index.js
new file mode 100644
index 0000000..c1331de
--- /dev/null
+++ b/date-fns/src/locale/ja/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'y年M月d日EEEE',
+ long: 'y年M月d日',
+ medium: 'y/MM/dd',
+ short: 'y/MM/dd'
+}
+
+var timeFormats = {
+ full: 'H時mm分ss秒 zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ja/_lib/formatRelative/index.js b/date-fns/src/locale/ja/_lib/formatRelative/index.js
new file mode 100644
index 0000000..38c57b3
--- /dev/null
+++ b/date-fns/src/locale/ja/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: '先週のeeeeのp',
+ yesterday: '昨日のp',
+ today: '今日のp',
+ tomorrow: '明日のp',
+ nextWeek: '翌週のeeeeのp',
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ja/_lib/localize/index.js b/date-fns/src/locale/ja/_lib/localize/index.js
new file mode 100644
index 0000000..165e97c
--- /dev/null
+++ b/date-fns/src/locale/ja/_lib/localize/index.js
@@ -0,0 +1,180 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['BC', 'AC'],
+ abbreviated: ['紀元前', '西暦'],
+ wide: ['紀元前', '西暦'],
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['第1四半期', '第2四半期', '第3四半期', '第4四半期'],
+}
+
+var monthValues = {
+ narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ abbreviated: [
+ '1月',
+ '2月',
+ '3月',
+ '4月',
+ '5月',
+ '6月',
+ '7月',
+ '8月',
+ '9月',
+ '10月',
+ '11月',
+ '12月',
+ ],
+ wide: [
+ '1月',
+ '2月',
+ '3月',
+ '4月',
+ '5月',
+ '6月',
+ '7月',
+ '8月',
+ '9月',
+ '10月',
+ '11月',
+ '12月',
+ ],
+}
+
+var dayValues = {
+ narrow: ['日', '月', '火', '水', '木', '金', '土'],
+ short: ['日', '月', '火', '水', '木', '金', '土'],
+ abbreviated: ['日', '月', '火', '水', '木', '金', '土'],
+ wide: ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'],
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: '午前',
+ pm: '午後',
+ midnight: '深夜',
+ noon: '正午',
+ morning: '朝',
+ afternoon: '午後',
+ evening: '夜',
+ night: '深夜',
+ },
+ abbreviated: {
+ am: '午前',
+ pm: '午後',
+ midnight: '深夜',
+ noon: '正午',
+ morning: '朝',
+ afternoon: '午後',
+ evening: '夜',
+ night: '深夜',
+ },
+ wide: {
+ am: '午前',
+ pm: '午後',
+ midnight: '深夜',
+ noon: '正午',
+ morning: '朝',
+ afternoon: '午後',
+ evening: '夜',
+ night: '深夜',
+ },
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: '午前',
+ pm: '午後',
+ midnight: '深夜',
+ noon: '正午',
+ morning: '朝',
+ afternoon: '午後',
+ evening: '夜',
+ night: '深夜',
+ },
+ abbreviated: {
+ am: '午前',
+ pm: '午後',
+ midnight: '深夜',
+ noon: '正午',
+ morning: '朝',
+ afternoon: '午後',
+ evening: '夜',
+ night: '深夜',
+ },
+ wide: {
+ am: '午前',
+ pm: '午後',
+ midnight: '深夜',
+ noon: '正午',
+ morning: '朝',
+ afternoon: '午後',
+ evening: '夜',
+ night: '深夜',
+ },
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+
+ if (unit === 'date') {
+ return number + '日'
+ }
+
+ if (unit === 'year') {
+ return number + '年'
+ }
+
+ return number
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide',
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function (quarter) {
+ return Number(quarter) - 1
+ },
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide',
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide',
+ }),
+}
+
+export default localize
diff --git a/date-fns/src/locale/ja/_lib/match/index.js b/date-fns/src/locale/ja/_lib/match/index.js
new file mode 100644
index 0000000..0f14680
--- /dev/null
+++ b/date-fns/src/locale/ja/_lib/match/index.js
@@ -0,0 +1,122 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^第?\d+(日)?(年)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(B\.?C\.?|A\.?D\.?)/i,
+ abbreviated: /^(紀元[前後]|西暦)/i,
+ wide: /^(紀元[前後]|西暦)/i,
+}
+var parseEraPatterns = {
+ narrow: [/^B/i, /^A/i],
+ any: [/^(紀元前)/i, /^(西暦|紀元後)/i],
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^Q[1234]/i,
+ wide: /^第[1234一二三四1234]四半期/i,
+}
+var parseQuarterPatterns = {
+ any: [/(1|一|1)/i, /(2|二|2)/i, /(3|三|3)/i, /(4|四|4)/i],
+}
+
+var matchMonthPatterns = {
+ narrow: /^([123456789]|1[012])/,
+ abbreviated: /^([123456789]|1[012])月/i,
+ wide: /^([123456789]|1[012])月/i,
+}
+var parseMonthPatterns = {
+ any: [
+ /^1\D/,
+ /^2/,
+ /^3/,
+ /^4/,
+ /^5/,
+ /^6/,
+ /^7/,
+ /^8/,
+ /^9/,
+ /^10/,
+ /^11/,
+ /^12/,
+ ],
+}
+
+var matchDayPatterns = {
+ narrow: /^[日月火水木金土]/,
+ short: /^[日月火水木金土]/,
+ abbreviated: /^[日月火水木金土]/,
+ wide: /^[日月火水木金土]曜日/,
+}
+var parseDayPatterns = {
+ any: [/^日/, /^月/, /^火/, /^水/, /^木/, /^金/, /^土/],
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i,
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^(A|午前)/i,
+ pm: /^(P|午後)/i,
+ midnight: /^深夜|真夜中/i,
+ noon: /^正午/i,
+ morning: /^朝/i,
+ afternoon: /^午後/i,
+ evening: /^夜/i,
+ night: /^深夜/i,
+ },
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function (value) {
+ return parseInt(value, 10)
+ },
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any',
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function (index) {
+ return index + 1
+ },
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any',
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any',
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any',
+ }),
+}
+
+export default match
diff --git a/date-fns/src/locale/ja/index.d.ts b/date-fns/src/locale/ja/index.d.ts
new file mode 100644
index 0000000..dec4f9c
--- /dev/null
+++ b/date-fns/src/locale/ja/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ja } from 'date-fns/locale'
+export default ja
diff --git a/date-fns/src/locale/ja/index.js b/date-fns/src/locale/ja/index.js
new file mode 100644
index 0000000..251eda9
--- /dev/null
+++ b/date-fns/src/locale/ja/index.js
@@ -0,0 +1,32 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Japanese locale.
+ * @language Japanese
+ * @iso-639-2 jpn
+ * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}
+ * @author Yamagishi Kazutoshi [@ykzts]{@link https://github.com/ykzts}
+ * @author Luca Ban [@mesqueeb]{@link https://github.com/mesqueeb}
+ * @author Terrence Lam [@skyuplam]{@link https://github.com/skyuplam}
+ * @author Taiki IKeda [@so99ynoodles]{@link https://github.com/so99ynoodles}
+ */
+var locale = {
+ code: 'ja',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ja/index.js.flow b/date-fns/src/locale/ja/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ja/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ja/snapshot.md b/date-fns/src/locale/ja/snapshot.md
new file mode 100644
index 0000000..ed600e5
--- /dev/null
+++ b/date-fns/src/locale/ja/snapshot.md
@@ -0,0 +1,304 @@
+# Japanese (ja) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 年 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 年 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 年 | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 年 | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 第 1 四半期 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第 2 四半期 | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 第 1 四半期 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第 2 四半期 | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | 2 月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 月 | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | 2 月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 月 | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | 2 月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 月 | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | 2 月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 月 | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49 | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 日 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 日 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | 月曜日 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金曜日 | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | 月曜日 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金曜日 | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | 月曜日 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金曜日 | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | 月曜日 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金曜日 | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | 月 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 金 | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 午前 | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | 朝 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 夜 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 深夜 | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | 朝 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 夜 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 深夜 | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | 朝 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 夜 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 深夜 | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | 朝 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 夜 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 深夜 | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | 朝 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 午後 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 夜 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 深夜 | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987/02/11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453/05/29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 1987/02/11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453/05/29 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日水曜日 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日日曜日 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12 時 13 分 14 秒 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23 時 59 分 59 秒 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987/02/11 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453/05/29 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 1987/02/11 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453/05/29 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日水曜日 12 時 13 分 14 秒 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日日曜日 23 時 59 分 59 秒 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------- | ---------------------- | ----------------- |
+| 2006-01-01T00:00:00.000Z | 約 6 年 | 約 6 年 | 約 6 年後 |
+| 2005-01-01T00:00:00.000Z | 約 5 年 | 約 5 年 | 約 5 年後 |
+| 2004-01-01T00:00:00.000Z | 約 4 年 | 約 4 年 | 約 4 年後 |
+| 2003-01-01T00:00:00.000Z | 約 3 年 | 約 3 年 | 約 3 年後 |
+| 2002-01-01T00:00:00.000Z | 約 2 年 | 約 2 年 | 約 2 年後 |
+| 2001-06-01T00:00:00.000Z | 1 年以上 | 1 年以上 | 1 年以上後 |
+| 2001-02-01T00:00:00.000Z | 約 1 年 | 約 1 年 | 約 1 年後 |
+| 2001-01-01T00:00:00.000Z | 約 1 年 | 約 1 年 | 約 1 年後 |
+| 2000-06-01T00:00:00.000Z | 5 か月 | 5 か月 | 5 か月後 |
+| 2000-03-01T00:00:00.000Z | 2 か月 | 2 か月 | 2 か月後 |
+| 2000-02-01T00:00:00.000Z | 約 1 か月 | 約 1 か月 | 約 1 か月後 |
+| 2000-01-15T00:00:00.000Z | 14 日 | 14 日 | 14 日後 |
+| 2000-01-02T00:00:00.000Z | 1 日 | 1 日 | 1 日後 |
+| 2000-01-01T06:00:00.000Z | 約 6 時間 | 約 6 時間 | 約 6 時間後 |
+| 2000-01-01T01:00:00.000Z | 約 1 時間 | 約 1 時間 | 約 1 時間後 |
+| 2000-01-01T00:45:00.000Z | 約 1 時間 | 約 1 時間 | 約 1 時間後 |
+| 2000-01-01T00:30:00.000Z | 30 分 | 30 分 | 30 分後 |
+| 2000-01-01T00:15:00.000Z | 15 分 | 15 分 | 15 分後 |
+| 2000-01-01T00:01:00.000Z | 1 分 | 1 分 | 1 分後 |
+| 2000-01-01T00:00:25.000Z | 1 分未満 | 30 秒 | 約 1 分後 |
+| 2000-01-01T00:00:15.000Z | 1 分未満 | 20 秒未満 | 約 1 分後 |
+| 2000-01-01T00:00:05.000Z | 1 分未満 | 10 秒未満 | 約 1 分後 |
+| 2000-01-01T00:00:00.000Z | 1 分未満 | 5 秒未満 | 約 1 分前 |
+| 1999-12-31T23:59:55.000Z | 1 分未満 | 10 秒未満 | 約 1 分前 |
+| 1999-12-31T23:59:45.000Z | 1 分未満 | 20 秒未満 | 約 1 分前 |
+| 1999-12-31T23:59:35.000Z | 1 分未満 | 30 秒 | 約 1 分前 |
+| 1999-12-31T23:59:00.000Z | 1 分 | 1 分 | 1 分前 |
+| 1999-12-31T23:45:00.000Z | 15 分 | 15 分 | 15 分前 |
+| 1999-12-31T23:30:00.000Z | 30 分 | 30 分 | 30 分前 |
+| 1999-12-31T23:15:00.000Z | 約 1 時間 | 約 1 時間 | 約 1 時間前 |
+| 1999-12-31T23:00:00.000Z | 約 1 時間 | 約 1 時間 | 約 1 時間前 |
+| 1999-12-31T18:00:00.000Z | 約 6 時間 | 約 6 時間 | 約 6 時間前 |
+| 1999-12-30T00:00:00.000Z | 2 日 | 2 日 | 2 日前 |
+| 1999-12-15T00:00:00.000Z | 17 日 | 17 日 | 17 日前 |
+| 1999-12-01T00:00:00.000Z | 約 1 か月 | 約 1 か月 | 約 1 か月前 |
+| 1999-11-01T00:00:00.000Z | 2 か月 | 2 か月 | 2 か月前 |
+| 1999-06-01T00:00:00.000Z | 7 か月 | 7 か月 | 7 か月前 |
+| 1999-01-01T00:00:00.000Z | 約 1 年 | 約 1 年 | 約 1 年前 |
+| 1998-12-01T00:00:00.000Z | 約 1 年 | 約 1 年 | 約 1 年前 |
+| 1998-06-01T00:00:00.000Z | 1 年以上 | 1 年以上 | 1 年以上前 |
+| 1998-01-01T00:00:00.000Z | 約 2 年 | 約 2 年 | 約 2 年前 |
+| 1997-01-01T00:00:00.000Z | 約 3 年 | 約 3 年 | 約 3 年前 |
+| 1996-01-01T00:00:00.000Z | 約 4 年 | 約 4 年 | 約 4 年前 |
+| 1995-01-01T00:00:00.000Z | 約 5 年 | 約 5 年 | 約 5 年前 |
+| 1994-01-01T00:00:00.000Z | 約 6 年 | 約 6 年 | 約 6 年前 |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------ | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 年 | 6 年後 | 52608 時間 |
+| 2005-01-01T00:00:00.000Z | 5 年 | 5 年後 | 43848 時間 |
+| 2004-01-01T00:00:00.000Z | 4 年 | 4 年後 | 35064 時間 |
+| 2003-01-01T00:00:00.000Z | 3 年 | 3 年後 | 26304 時間 |
+| 2002-01-01T00:00:00.000Z | 2 年 | 2 年後 | 17544 時間 |
+| 2001-06-01T00:00:00.000Z | 1 年 | 1 年後 | 12408 時間 |
+| 2001-02-01T00:00:00.000Z | 1 年 | 1 年後 | 9528 時間 |
+| 2001-01-01T00:00:00.000Z | 1 年 | 1 年後 | 8784 時間 |
+| 2000-06-01T00:00:00.000Z | 5 か月 | 5 か月後 | 3648 時間 |
+| 2000-03-01T00:00:00.000Z | 2 か月 | 2 か月後 | 1440 時間 |
+| 2000-02-01T00:00:00.000Z | 1 か月 | 1 か月後 | 744 時間 |
+| 2000-01-15T00:00:00.000Z | 14 日 | 14 日後 | 336 時間 |
+| 2000-01-02T00:00:00.000Z | 1 日 | 1 日後 | 24 時間 |
+| 2000-01-01T06:00:00.000Z | 6 時間 | 6 時間後 | 6 時間 |
+| 2000-01-01T01:00:00.000Z | 1 時間 | 1 時間後 | 1 時間 |
+| 2000-01-01T00:45:00.000Z | 45 分 | 45 分後 | 1 時間 |
+| 2000-01-01T00:30:00.000Z | 30 分 | 30 分後 | 1 時間 |
+| 2000-01-01T00:15:00.000Z | 15 分 | 15 分後 | 0 時間 |
+| 2000-01-01T00:01:00.000Z | 1 分 | 1 分後 | 0 時間 |
+| 2000-01-01T00:00:25.000Z | 25 秒 | 25 秒後 | 0 時間 |
+| 2000-01-01T00:00:15.000Z | 15 秒 | 15 秒後 | 0 時間 |
+| 2000-01-01T00:00:05.000Z | 5 秒 | 5 秒後 | 0 時間 |
+| 2000-01-01T00:00:00.000Z | 0 秒 | 0 秒前 | 0 時間 |
+| 1999-12-31T23:59:55.000Z | 5 秒 | 5 秒前 | 0 時間 |
+| 1999-12-31T23:59:45.000Z | 15 秒 | 15 秒前 | 0 時間 |
+| 1999-12-31T23:59:35.000Z | 25 秒 | 25 秒前 | 0 時間 |
+| 1999-12-31T23:59:00.000Z | 1 分 | 1 分前 | 0 時間 |
+| 1999-12-31T23:45:00.000Z | 15 分 | 15 分前 | 0 時間 |
+| 1999-12-31T23:30:00.000Z | 30 分 | 30 分前 | 1 時間 |
+| 1999-12-31T23:15:00.000Z | 45 分 | 45 分前 | 1 時間 |
+| 1999-12-31T23:00:00.000Z | 1 時間 | 1 時間前 | 1 時間 |
+| 1999-12-31T18:00:00.000Z | 6 時間 | 6 時間前 | 6 時間 |
+| 1999-12-30T00:00:00.000Z | 2 日 | 2 日前 | 48 時間 |
+| 1999-12-15T00:00:00.000Z | 17 日 | 17 日前 | 408 時間 |
+| 1999-12-01T00:00:00.000Z | 1 か月 | 1 か月前 | 744 時間 |
+| 1999-11-01T00:00:00.000Z | 2 か月 | 2 か月前 | 1464 時間 |
+| 1999-06-01T00:00:00.000Z | 7 か月 | 7 か月前 | 5136 時間 |
+| 1999-01-01T00:00:00.000Z | 1 年 | 1 年前 | 8760 時間 |
+| 1998-12-01T00:00:00.000Z | 1 年 | 1 年前 | 9504 時間 |
+| 1998-06-01T00:00:00.000Z | 2 年 | 2 年前 | 13896 時間 |
+| 1998-01-01T00:00:00.000Z | 2 年 | 2 年前 | 17520 時間 |
+| 1997-01-01T00:00:00.000Z | 3 年 | 3 年前 | 26280 時間 |
+| 1996-01-01T00:00:00.000Z | 4 年 | 4 年前 | 35064 時間 |
+| 1995-01-01T00:00:00.000Z | 5 年 | 5 年前 | 43824 時間 |
+| 1994-01-01T00:00:00.000Z | 6 年 | 6 年前 | 52584 時間 |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------- |
+| 2000-01-10T00:00:00.000Z | 2000/01/10 |
+| 2000-01-05T00:00:00.000Z | 翌週の水曜日の 0:00 |
+| 2000-01-02T00:00:00.000Z | 明日の 0:00 |
+| 2000-01-01T00:00:00.000Z | 今日の 0:00 |
+| 1999-12-31T00:00:00.000Z | 昨日の 0:00 |
+| 1999-12-27T00:00:00.000Z | 先週の月曜日の 0:00 |
+| 1999-12-21T00:00:00.000Z | 1999/12/21 |
diff --git a/date-fns/src/locale/ka/_lib/formatDistance/index.js b/date-fns/src/locale/ka/_lib/formatDistance/index.js
new file mode 100644
index 0000000..717f353
--- /dev/null
+++ b/date-fns/src/locale/ka/_lib/formatDistance/index.js
@@ -0,0 +1,114 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ past: '{{count}} წამზე ნაკლები ხნის წინ',
+ present: '{{count}} წამზე ნაკლები',
+ future: '{{count}} წამზე ნაკლებში'
+ },
+
+ xSeconds: {
+ past: '{{count}} წამის წინ',
+ present: '{{count}} წამი',
+ future: '{{count}} წამში'
+ },
+
+ halfAMinute: {
+ past: 'ნახევარი წუთის წინ',
+ present: 'ნახევარი წუთი',
+ future: 'ნახევარი წუთში'
+ },
+
+ lessThanXMinutes: {
+ past: '{{count}} წუთზე ნაკლები ხნის წინ',
+ present: '{{count}} წუთზე ნაკლები',
+ future: '{{count}} წუთზე ნაკლებში'
+ },
+
+ xMinutes: {
+ past: '{{count}} წუთის წინ',
+ present: '{{count}} წუთი',
+ future: '{{count}} წუთში'
+ },
+
+ aboutXHours: {
+ past: 'დაახლოებით {{count}} საათის წინ',
+ present: 'დაახლოებით {{count}} საათი',
+ future: 'დაახლოებით {{count}} საათში'
+ },
+
+ xHours: {
+ past: '{{count}} საათის წინ',
+ present: '{{count}} საათი',
+ future: '{{count}} საათში'
+ },
+
+ xDays: {
+ past: '{{count}} დღის წინ',
+ present: '{{count}} დღე',
+ future: '{{count}} დღეში'
+ },
+
+ aboutXWeeks: {
+ past: 'დაახლოებით {{count}} კვირას წინ',
+ present: 'დაახლოებით {{count}} კვირა',
+ future: 'დაახლოებით {{count}} კვირაში'
+ },
+
+ xWeeks: {
+ past: '{{count}} კვირას კვირა',
+ present: '{{count}} კვირა',
+ future: '{{count}} კვირაში'
+ },
+
+ aboutXMonths: {
+ past: 'დაახლოებით {{count}} თვის წინ',
+ present: 'დაახლოებით {{count}} თვე',
+ future: 'დაახლოებით {{count}} თვეში'
+ },
+
+ xMonths: {
+ past: '{{count}} თვის წინ',
+ present: '{{count}} თვე',
+ future: '{{count}} თვეში'
+ },
+
+ aboutXYears: {
+ past: 'დაახლოებით {{count}} წლის წინ',
+ present: 'დაახლოებით {{count}} წელი',
+ future: 'დაახლოებით {{count}} წელში'
+ },
+
+ xYears: {
+ past: '{{count}} წლის წინ',
+ present: '{{count}} წელი',
+ future: '{{count}} წელში'
+ },
+
+ overXYears: {
+ past: '{{count}} წელზე მეტი ხნის წინ',
+ present: '{{count}} წელზე მეტი',
+ future: '{{count}} წელზე მეტი ხნის შემდეგ'
+ },
+
+ almostXYears: {
+ past: 'თითქმის {{count}} წლის წინ',
+ present: 'თითქმის {{count}} წელი',
+ future: 'თითქმის {{count}} წელში'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (options.addSuffix && options.comparison > 0) {
+ result = formatDistanceLocale[token].future.replace('{{count}}', count)
+ } else if (options.addSuffix && options.comparison <= 0) {
+ result = formatDistanceLocale[token].past.replace('{{count}}', count)
+ } else {
+ result = formatDistanceLocale[token].present.replace('{{count}}', count)
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ka/_lib/formatLong/index.js b/date-fns/src/locale/ka/_lib/formatLong/index.js
new file mode 100644
index 0000000..a310361
--- /dev/null
+++ b/date-fns/src/locale/ka/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, do MMMM, y',
+ long: 'do, MMMM, y',
+ medium: 'd, MMM, y',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} {{time}}'-ზე'",
+ long: "{{date}} {{time}}'-ზე'",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ka/_lib/formatRelative/index.js b/date-fns/src/locale/ka/_lib/formatRelative/index.js
new file mode 100644
index 0000000..e4f0ef0
--- /dev/null
+++ b/date-fns/src/locale/ka/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'წინა' eeee LT'-ზე'",
+ yesterday: "'გუშინ' LT'-ზე'",
+ today: "'დღეს' LT'-ზე'",
+ tomorrow: "'ხვალ' LT'-ზე'",
+ nextWeek: "'შემდეგი' eeee LT'-ზე'",
+ other: 'L'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ka/_lib/localize/index.js b/date-fns/src/locale/ka/_lib/localize/index.js
new file mode 100644
index 0000000..f658893
--- /dev/null
+++ b/date-fns/src/locale/ka/_lib/localize/index.js
@@ -0,0 +1,198 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['ჩ.წ-მდე', 'ჩ.წ'],
+ abbreviated: ['ჩვ.წ-მდე', 'ჩვ.წ'],
+ wide: ['ჩვენს წელთაღრიცხვამდე', 'ჩვენი წელთაღრიცხვით']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1-ლი კვ', '2-ე კვ', '3-ე კვ', '4-ე კვ'],
+ wide: ['1-ლი კვარტალი', '2-ე კვარტალი', '3-ე კვარტალი', '4-ე კვარტალი']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: [
+ 'ია',
+ 'თე',
+ 'მა',
+ 'აპ',
+ 'მს',
+ 'ვნ',
+ 'ვლ',
+ 'აგ',
+ 'სე',
+ 'ოქ',
+ 'ნო',
+ 'დე'
+ ],
+ abbreviated: [
+ 'იან',
+ 'თებ',
+ 'მარ',
+ 'აპრ',
+ 'მაი',
+ 'ივნ',
+ 'ივლ',
+ 'აგვ',
+ 'სექ',
+ 'ოქტ',
+ 'ნოე',
+ 'დეკ'
+ ],
+ wide: [
+ 'იანვარი',
+ 'თებერვალი',
+ 'მარტი',
+ 'აპრილი',
+ 'მაისი',
+ 'ივნისი',
+ 'ივლისი',
+ 'აგვისტო',
+ 'სექტემბერი',
+ 'ოქტომბერი',
+ 'ნოემბერი',
+ 'დეკემბერი'
+ ]
+}
+
+var dayValues = {
+ narrow: ['კვ', 'ორ', 'სა', 'ოთ', 'ხუ', 'პა', 'შა'],
+ short: ['კვი', 'ორშ', 'სამ', 'ოთხ', 'ხუთ', 'პარ', 'შაბ'],
+ abbreviated: ['კვი', 'ორშ', 'სამ', 'ოთხ', 'ხუთ', 'პარ', 'შაბ'],
+ wide: [
+ 'კვირა',
+ 'ორშაბათი',
+ 'სამშაბათი',
+ 'ოთხშაბათი',
+ 'ხუთშაბათი',
+ 'პარასკევი',
+ 'შაბათი'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'შუაღამე',
+ noon: 'შუადღე',
+ morning: 'დილა',
+ afternoon: 'საღამო',
+ evening: 'საღამო',
+ night: 'ღამე'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'შუაღამე',
+ noon: 'შუადღე',
+ morning: 'დილა',
+ afternoon: 'საღამო',
+ evening: 'საღამო',
+ night: 'ღამე'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'შუაღამე',
+ noon: 'შუადღე',
+ morning: 'დილა',
+ afternoon: 'საღამო',
+ evening: 'საღამო',
+ night: 'ღამე'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'შუაღამით',
+ noon: 'შუადღისას',
+ morning: 'დილით',
+ afternoon: 'ნაშუადღევს',
+ evening: 'საღამოს',
+ night: 'ღამით'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'შუაღამით',
+ noon: 'შუადღისას',
+ morning: 'დილით',
+ afternoon: 'ნაშუადღევს',
+ evening: 'საღამოს',
+ night: 'ღამით'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'შუაღამით',
+ noon: 'შუადღისას',
+ morning: 'დილით',
+ afternoon: 'ნაშუადღევს',
+ evening: 'საღამოს',
+ night: 'ღამით'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ if (number === 1) {
+ return number + '-ლი'
+ }
+
+ return number + '-ე'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ka/_lib/match/index.js b/date-fns/src/locale/ka/_lib/match/index.js
new file mode 100644
index 0000000..f7493d4
--- /dev/null
+++ b/date-fns/src/locale/ka/_lib/match/index.js
@@ -0,0 +1,121 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-ლი|-ე)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ჩვ?\.წ)/i,
+ abbreviated: /^(ჩვ?\.წ)/i,
+ wide: /^(ჩვენს წელთაღრიცხვამდე|ქრისტეშობამდე|ჩვენი წელთაღრიცხვით|ქრისტეშობიდან)/i
+}
+var parseEraPatterns = {
+ any: [
+ /^(ჩვენს წელთაღრიცხვამდე|ქრისტეშობამდე)/i,
+ /^(ჩვენი წელთაღრიცხვით|ქრისტეშობიდან)/i
+ ]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234]-(ლი|ე)? კვ/i,
+ wide: /^[1234]-(ლი|ე)? კვარტალი/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ any: /^(ია|თე|მა|აპ|მს|ვნ|ვლ|აგ|სე|ოქ|ნო|დე)/i
+}
+var parseMonthPatterns = {
+ any: [
+ /^ია/i,
+ /^თ/i,
+ /^მარ/i,
+ /^აპ/i,
+ /^მაი/i,
+ /^ი?ვნ/i,
+ /^ი?ვლ/i,
+ /^აგ/i,
+ /^ს/i,
+ /^ო/i,
+ /^ნ/i,
+ /^დ/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(კვ|ორ|სა|ოთ|ხუ|პა|შა)/i,
+ short: /^(კვი|ორშ|სამ|ოთხ|ხუთ|პარ|შაბ)/i,
+ long: /^(კვირა|ორშაბათი|სამშაბათი|ოთხშაბათი|ხუთშაბათი|პარასკევი|შაბათი)/i
+}
+var parseDayPatterns = {
+ any: [/^კვ/i, /^ორ/i, /^სა/i, /^ოთ/i, /^ხუ/i, /^პა/i, /^შა/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^([ap]\.?\s?m\.?|შუაღ|დილ)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^შუაღ/i,
+ noon: /^შუადღ/i,
+ morning: /^დილ/i,
+ afternoon: /ნაშუადღევს/i,
+ evening: /საღამო/i,
+ night: /ღამ/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ka/index.d.ts b/date-fns/src/locale/ka/index.d.ts
new file mode 100644
index 0000000..c0be71a
--- /dev/null
+++ b/date-fns/src/locale/ka/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ka } from 'date-fns/locale'
+export default ka
diff --git a/date-fns/src/locale/ka/index.js b/date-fns/src/locale/ka/index.js
new file mode 100644
index 0000000..f586bad
--- /dev/null
+++ b/date-fns/src/locale/ka/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Georgian locale.
+ * @language Georgian
+ * @iso-639-2 geo
+ * @author Lado Lomidze [@Landish]{@link https://github.com/Landish}
+ * @author Nick Shvelidze [@shvelo]{@link https://github.com/shvelo}
+ */
+var locale = {
+ code: 'ka',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ka/index.js.flow b/date-fns/src/locale/ka/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ka/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ka/snapshot.md b/date-fns/src/locale/ka/snapshot.md
new file mode 100644
index 0000000..4c878bf
--- /dev/null
+++ b/date-fns/src/locale/ka/snapshot.md
@@ -0,0 +1,304 @@
+# Georgian (ka) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-ე | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-ე | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-ე | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-ე | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-ლი | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ე | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1-ლი კვ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ე კვ | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-ლი კვარტალი | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ე კვარტალი | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-ლი | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ე | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1-ლი კვ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ე კვ | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-ლი კვარტალი | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ე კვარტალი | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-ე | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ე | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | თებ | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | ივლ | Invalid Date |
+| | MMMM | 2019-02-11T12:13:14.015Z | თებერვალი | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | ივლისი | Invalid Date |
+| | MMMMM | 2019-02-11T12:13:14.015Z | თე | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | ვლ | Invalid Date |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-ე | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ე | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | თებ | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | ივლ | Invalid Date |
+| | LLLL | 2019-02-11T12:13:14.015Z | თებერვალი | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | ივლისი | Invalid Date |
+| | LLLLL | 2019-02-11T12:13:14.015Z | თე | Invalid Date |
+| | | 2019-07-10T12:13:14.015Z | ვლ | Invalid Date |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-ლი | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ე | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-ლი | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ე | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-ე | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-ე | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-ე | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-ე | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | ორშ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარ | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | ორშ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარ | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | ორშ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარ | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | ორშაბათი | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარასკევი | Invalid Date |
+| | EEEEE | 2019-02-11T12:13:14.015Z | ორ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | პა | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | ორშ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | პარ | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-ლი | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ე | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | ორშ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარ | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | ორშაბათი | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარასკევი | Invalid Date |
+| | iiiii | 2019-02-11T12:13:14.015Z | ორ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | პა | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | ორშ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | პარ | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-ლი | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ე | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | ორშ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარ | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | ორშაბათი | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარასკევი | Invalid Date |
+| | eeeee | 2019-02-11T12:13:14.015Z | ორ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | პა | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | ორშ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | პარ | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-ლი | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ე | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | ორშ | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარ | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | ორშაბათი | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | პარასკევი | Invalid Date |
+| | ccccc | 2019-02-11T12:13:14.015Z | ორ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | პა | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | ორშ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | პარ | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | p | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | p | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | a | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | p | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | p | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | a | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | დილით | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | ნაშუადღევს | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | საღამოს | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ღამით | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | დილით | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | ნაშუადღევს | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | საღამოს | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ღამით | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | დილით | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | ნაშუადღევს | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | საღამოს | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ღამით | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | დილით | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | ნაშუადღევს | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | საღამოს | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ღამით | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | დილით | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | ნაშუადღევს | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | საღამოს | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ღამით | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-ე | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-ე | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-ე | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-ე | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-ე | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-ე | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-ე | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-ე | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-ლი | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-ე | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-ლი | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-ე | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11, თებ, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29, მაი, 1453 | Invalid Date |
+| | PPP | 1987-02-11T12:13:14.015Z | 11-ე, თებერვალი, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29-ე, მაისი, 1453 | Invalid Date |
+| | PPPP | 1987-02-11T12:13:14.015Z | ოთხშაბათი, 11-ე თებერვალი, 1987 | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | კვირა, 29-ე მაისი, 1453 | Invalid Date |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 PM | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 PM | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 11:59 PM | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11, თებ, 1987, 12:13:14 PM | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29, მაი, 1453, 11:59:59 PM | Invalid Date |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11-ე, თებერვალი, 1987 12:13:14 PM GMT+0-ზე | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | 29-ე, მაისი, 1453 11:59:59 PM GMT+0-ზე | Invalid Date |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | ოთხშაბათი, 11-ე თებერვალი, 1987 12:13:14 PM GMT+00:00-ზე | Invalid Date |
+| | | 1453-05-29T23:59:59.999Z | კვირა, 29-ე მაისი, 1453 11:59:59 PM GMT+00:00-ზე | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ------------------------ |
+| 2006-01-01T00:00:00.000Z | დაახლოებით 6 წელი | დაახლოებით 6 წელი | დაახლოებით 6 წელში |
+| 2005-01-01T00:00:00.000Z | დაახლოებით 5 წელი | დაახლოებით 5 წელი | დაახლოებით 5 წელში |
+| 2004-01-01T00:00:00.000Z | დაახლოებით 4 წელი | დაახლოებით 4 წელი | დაახლოებით 4 წელში |
+| 2003-01-01T00:00:00.000Z | დაახლოებით 3 წელი | დაახლოებით 3 წელი | დაახლოებით 3 წელში |
+| 2002-01-01T00:00:00.000Z | დაახლოებით 2 წელი | დაახლოებით 2 წელი | დაახლოებით 2 წელში |
+| 2001-06-01T00:00:00.000Z | 1 წელზე მეტი | 1 წელზე მეტი | 1 წელზე მეტი ხნის შემდეგ |
+| 2001-02-01T00:00:00.000Z | დაახლოებით 1 წელი | დაახლოებით 1 წელი | დაახლოებით 1 წელში |
+| 2001-01-01T00:00:00.000Z | დაახლოებით 1 წელი | დაახლოებით 1 წელი | დაახლოებით 1 წელში |
+| 2000-06-01T00:00:00.000Z | 5 თვე | 5 თვე | 5 თვეში |
+| 2000-03-01T00:00:00.000Z | 2 თვე | 2 თვე | 2 თვეში |
+| 2000-02-01T00:00:00.000Z | დაახლოებით 1 თვე | დაახლოებით 1 თვე | დაახლოებით 1 თვეში |
+| 2000-01-15T00:00:00.000Z | 14 დღე | 14 დღე | 14 დღეში |
+| 2000-01-02T00:00:00.000Z | 1 დღე | 1 დღე | 1 დღეში |
+| 2000-01-01T06:00:00.000Z | დაახლოებით 6 საათი | დაახლოებით 6 საათი | დაახლოებით 6 საათში |
+| 2000-01-01T01:00:00.000Z | დაახლოებით 1 საათი | დაახლოებით 1 საათი | დაახლოებით 1 საათში |
+| 2000-01-01T00:45:00.000Z | დაახლოებით 1 საათი | დაახლოებით 1 საათი | დაახლოებით 1 საათში |
+| 2000-01-01T00:30:00.000Z | 30 წუთი | 30 წუთი | 30 წუთში |
+| 2000-01-01T00:15:00.000Z | 15 წუთი | 15 წუთი | 15 წუთში |
+| 2000-01-01T00:01:00.000Z | 1 წუთი | 1 წუთი | 1 წუთში |
+| 2000-01-01T00:00:25.000Z | 1 წუთზე ნაკლები | ნახევარი წუთი | 1 წუთზე ნაკლებში |
+| 2000-01-01T00:00:15.000Z | 1 წუთზე ნაკლები | 20 წამზე ნაკლები | 1 წუთზე ნაკლებში |
+| 2000-01-01T00:00:05.000Z | 1 წუთზე ნაკლები | 10 წამზე ნაკლები | 1 წუთზე ნაკლებში |
+| 2000-01-01T00:00:00.000Z | 1 წუთზე ნაკლები | 5 წამზე ნაკლები | 1 წუთზე ნაკლები ხნის წინ |
+| 1999-12-31T23:59:55.000Z | 1 წუთზე ნაკლები | 10 წამზე ნაკლები | 1 წუთზე ნაკლები ხნის წინ |
+| 1999-12-31T23:59:45.000Z | 1 წუთზე ნაკლები | 20 წამზე ნაკლები | 1 წუთზე ნაკლები ხნის წინ |
+| 1999-12-31T23:59:35.000Z | 1 წუთზე ნაკლები | ნახევარი წუთი | 1 წუთზე ნაკლები ხნის წინ |
+| 1999-12-31T23:59:00.000Z | 1 წუთი | 1 წუთი | 1 წუთის წინ |
+| 1999-12-31T23:45:00.000Z | 15 წუთი | 15 წუთი | 15 წუთის წინ |
+| 1999-12-31T23:30:00.000Z | 30 წუთი | 30 წუთი | 30 წუთის წინ |
+| 1999-12-31T23:15:00.000Z | დაახლოებით 1 საათი | დაახლოებით 1 საათი | დაახლოებით 1 საათის წინ |
+| 1999-12-31T23:00:00.000Z | დაახლოებით 1 საათი | დაახლოებით 1 საათი | დაახლოებით 1 საათის წინ |
+| 1999-12-31T18:00:00.000Z | დაახლოებით 6 საათი | დაახლოებით 6 საათი | დაახლოებით 6 საათის წინ |
+| 1999-12-30T00:00:00.000Z | 2 დღე | 2 დღე | 2 დღის წინ |
+| 1999-12-15T00:00:00.000Z | 17 დღე | 17 დღე | 17 დღის წინ |
+| 1999-12-01T00:00:00.000Z | დაახლოებით 1 თვე | დაახლოებით 1 თვე | დაახლოებით 1 თვის წინ |
+| 1999-11-01T00:00:00.000Z | 2 თვე | 2 თვე | 2 თვის წინ |
+| 1999-06-01T00:00:00.000Z | 7 თვე | 7 თვე | 7 თვის წინ |
+| 1999-01-01T00:00:00.000Z | დაახლოებით 1 წელი | დაახლოებით 1 წელი | დაახლოებით 1 წლის წინ |
+| 1998-12-01T00:00:00.000Z | დაახლოებით 1 წელი | დაახლოებით 1 წელი | დაახლოებით 1 წლის წინ |
+| 1998-06-01T00:00:00.000Z | 1 წელზე მეტი | 1 წელზე მეტი | 1 წელზე მეტი ხნის წინ |
+| 1998-01-01T00:00:00.000Z | დაახლოებით 2 წელი | დაახლოებით 2 წელი | დაახლოებით 2 წლის წინ |
+| 1997-01-01T00:00:00.000Z | დაახლოებით 3 წელი | დაახლოებით 3 წელი | დაახლოებით 3 წლის წინ |
+| 1996-01-01T00:00:00.000Z | დაახლოებით 4 წელი | დაახლოებით 4 წელი | დაახლოებით 4 წლის წინ |
+| 1995-01-01T00:00:00.000Z | დაახლოებით 5 წელი | დაახლოებით 5 წელი | დაახლოებით 5 წლის წინ |
+| 1994-01-01T00:00:00.000Z | დაახლოებით 6 წელი | დაახლოებით 6 წელი | დაახლოებით 6 წლის წინ |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 წელი | 6 წელში | 52608 საათი |
+| 2005-01-01T00:00:00.000Z | 5 წელი | 5 წელში | 43848 საათი |
+| 2004-01-01T00:00:00.000Z | 4 წელი | 4 წელში | 35064 საათი |
+| 2003-01-01T00:00:00.000Z | 3 წელი | 3 წელში | 26304 საათი |
+| 2002-01-01T00:00:00.000Z | 2 წელი | 2 წელში | 17544 საათი |
+| 2001-06-01T00:00:00.000Z | 1 წელი | 1 წელში | 12408 საათი |
+| 2001-02-01T00:00:00.000Z | 1 წელი | 1 წელში | 9528 საათი |
+| 2001-01-01T00:00:00.000Z | 1 წელი | 1 წელში | 8784 საათი |
+| 2000-06-01T00:00:00.000Z | 5 თვე | 5 თვეში | 3648 საათი |
+| 2000-03-01T00:00:00.000Z | 2 თვე | 2 თვეში | 1440 საათი |
+| 2000-02-01T00:00:00.000Z | 1 თვე | 1 თვეში | 744 საათი |
+| 2000-01-15T00:00:00.000Z | 14 დღე | 14 დღეში | 336 საათი |
+| 2000-01-02T00:00:00.000Z | 1 დღე | 1 დღეში | 24 საათი |
+| 2000-01-01T06:00:00.000Z | 6 საათი | 6 საათში | 6 საათი |
+| 2000-01-01T01:00:00.000Z | 1 საათი | 1 საათში | 1 საათი |
+| 2000-01-01T00:45:00.000Z | 45 წუთი | 45 წუთში | 1 საათი |
+| 2000-01-01T00:30:00.000Z | 30 წუთი | 30 წუთში | 1 საათი |
+| 2000-01-01T00:15:00.000Z | 15 წუთი | 15 წუთში | 0 საათი |
+| 2000-01-01T00:01:00.000Z | 1 წუთი | 1 წუთში | 0 საათი |
+| 2000-01-01T00:00:25.000Z | 25 წამი | 25 წამში | 0 საათი |
+| 2000-01-01T00:00:15.000Z | 15 წამი | 15 წამში | 0 საათი |
+| 2000-01-01T00:00:05.000Z | 5 წამი | 5 წამში | 0 საათი |
+| 2000-01-01T00:00:00.000Z | 0 წამი | 0 წამის წინ | 0 საათი |
+| 1999-12-31T23:59:55.000Z | 5 წამი | 5 წამის წინ | 0 საათი |
+| 1999-12-31T23:59:45.000Z | 15 წამი | 15 წამის წინ | 0 საათი |
+| 1999-12-31T23:59:35.000Z | 25 წამი | 25 წამის წინ | 0 საათი |
+| 1999-12-31T23:59:00.000Z | 1 წუთი | 1 წუთის წინ | 0 საათი |
+| 1999-12-31T23:45:00.000Z | 15 წუთი | 15 წუთის წინ | 0 საათი |
+| 1999-12-31T23:30:00.000Z | 30 წუთი | 30 წუთის წინ | 1 საათი |
+| 1999-12-31T23:15:00.000Z | 45 წუთი | 45 წუთის წინ | 1 საათი |
+| 1999-12-31T23:00:00.000Z | 1 საათი | 1 საათის წინ | 1 საათი |
+| 1999-12-31T18:00:00.000Z | 6 საათი | 6 საათის წინ | 6 საათი |
+| 1999-12-30T00:00:00.000Z | 2 დღე | 2 დღის წინ | 48 საათი |
+| 1999-12-15T00:00:00.000Z | 17 დღე | 17 დღის წინ | 408 საათი |
+| 1999-12-01T00:00:00.000Z | 1 თვე | 1 თვის წინ | 744 საათი |
+| 1999-11-01T00:00:00.000Z | 2 თვე | 2 თვის წინ | 1464 საათი |
+| 1999-06-01T00:00:00.000Z | 7 თვე | 7 თვის წინ | 5136 საათი |
+| 1999-01-01T00:00:00.000Z | 1 წელი | 1 წლის წინ | 8760 საათი |
+| 1998-12-01T00:00:00.000Z | 1 წელი | 1 წლის წინ | 9504 საათი |
+| 1998-06-01T00:00:00.000Z | 2 წელი | 2 წლის წინ | 13896 საათი |
+| 1998-01-01T00:00:00.000Z | 2 წელი | 2 წლის წინ | 17520 საათი |
+| 1997-01-01T00:00:00.000Z | 3 წელი | 3 წლის წინ | 26280 საათი |
+| 1996-01-01T00:00:00.000Z | 4 წელი | 4 წლის წინ | 35064 საათი |
+| 1995-01-01T00:00:00.000Z | 5 წელი | 5 წლის წინ | 43824 საათი |
+| 1994-01-01T00:00:00.000Z | 6 წელი | 6 წლის წინ | 52584 საათი |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------------------- |
+| 2000-01-10T00:00:00.000Z | 1 |
+| 2000-01-05T00:00:00.000Z | შემდეგი ოთხშაბათი 1947030400000-ზე |
+| 2000-01-02T00:00:00.000Z | ხვალ 1946771200000-ზე |
+| 2000-01-01T00:00:00.000Z | დღეს 1946684800000-ზე |
+| 1999-12-31T00:00:00.000Z | გუშინ 12946598400000-ზე |
+| 1999-12-27T00:00:00.000Z | წინა ორშაბათი 12946252800000-ზე |
+| 1999-12-21T00:00:00.000Z | 12 |
diff --git a/date-fns/src/locale/kk/_lib/formatDistance/index.js b/date-fns/src/locale/kk/_lib/formatDistance/index.js
new file mode 100644
index 0000000..a5c38de
--- /dev/null
+++ b/date-fns/src/locale/kk/_lib/formatDistance/index.js
@@ -0,0 +1,246 @@
+function declension(scheme, count) {
+ // scheme for count=1 exists
+ if (scheme.one !== undefined && count === 1) {
+ return scheme.one
+ }
+
+ var rem10 = count % 10
+ var rem100 = count % 100
+
+ // 1, 21, 31, ...
+ if (rem10 === 1 && rem100 !== 11) {
+ return scheme.singularNominative.replace('{{count}}', count)
+
+ // 2, 3, 4, 22, 23, 24, 32 ...
+ } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {
+ return scheme.singularGenitive.replace('{{count}}', count)
+
+ // 5, 6, 7, 8, 9, 10, 11, ...
+ } else {
+ return scheme.pluralGenitive.replace('{{count}}', count)
+ }
+}
+
+function buildLocalizeTokenFn(scheme) {
+ return function(count, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ if (scheme.future) {
+ return declension(scheme.future, count)
+ } else {
+ return declension(scheme.regular, count) + ' кейін'
+ }
+ } else {
+ if (scheme.past) {
+ return declension(scheme.past, count)
+ } else {
+ return declension(scheme.regular, count) + ' бұрын'
+ }
+ }
+ } else {
+ return declension(scheme.regular, count)
+ }
+ }
+}
+
+var formatDistanceLocale = {
+ lessThanXSeconds: buildLocalizeTokenFn({
+ regular: {
+ one: '1 секундтан аз',
+ singularNominative: '{{count}} секундтан аз',
+ singularGenitive: '{{count}} секундтан аз',
+ pluralGenitive: '{{count}} секундтан аз'
+ },
+ future: {
+ one: 'бір секундтан кейін',
+ singularNominative: '{{count}} секундтан кейін',
+ singularGenitive: '{{count}} секундтан кейін',
+ pluralGenitive: '{{count}} секундтан кейін'
+ }
+ }),
+
+ xSeconds: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} секунд',
+ singularGenitive: '{{count}} секунд',
+ pluralGenitive: '{{count}} секунд'
+ },
+ past: {
+ singularNominative: '{{count}} секунд бұрын',
+ singularGenitive: '{{count}} секунд бұрын',
+ pluralGenitive: '{{count}} секунд бұрын'
+ },
+ future: {
+ singularNominative: '{{count}} секундтан кейін',
+ singularGenitive: '{{count}} секундтан кейін',
+ pluralGenitive: '{{count}} секундтан кейін'
+ }
+ }),
+
+ halfAMinute: function(_, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'жарты минут ішінде'
+ } else {
+ return 'жарты минут бұрын'
+ }
+ }
+
+ return 'жарты минут'
+ },
+
+ lessThanXMinutes: buildLocalizeTokenFn({
+ regular: {
+ one: '1 минуттан аз',
+ singularNominative: '{{count}} минуттан аз',
+ singularGenitive: '{{count}} минуттан аз',
+ pluralGenitive: '{{count}} минуттан аз'
+ },
+ future: {
+ one: 'минуттан кем ',
+ singularNominative: '{{count}} минуттан кем',
+ singularGenitive: '{{count}} минуттан кем',
+ pluralGenitive: '{{count}} минуттан кем'
+ }
+ }),
+
+ xMinutes: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} минут',
+ singularGenitive: '{{count}} минут',
+ pluralGenitive: '{{count}} минут'
+ },
+ past: {
+ singularNominative: '{{count}} минут бұрын',
+ singularGenitive: '{{count}} минут бұрын',
+ pluralGenitive: '{{count}} минут бұрын'
+ },
+ future: {
+ singularNominative: '{{count}} минуттан кейін',
+ singularGenitive: '{{count}} минуттан кейін',
+ pluralGenitive: '{{count}} минуттан кейін'
+ }
+ }),
+
+ aboutXHours: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'шамамен {{count}} сағат',
+ singularGenitive: 'шамамен {{count}} сағат',
+ pluralGenitive: 'шамамен {{count}} сағат'
+ },
+ future: {
+ singularNominative: 'шамамен {{count}} сағаттан кейін',
+ singularGenitive: 'шамамен {{count}} сағаттан кейін',
+ pluralGenitive: 'шамамен {{count}} сағаттан кейін'
+ }
+ }),
+
+ xHours: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} сағат',
+ singularGenitive: '{{count}} сағат',
+ pluralGenitive: '{{count}} сағат'
+ }
+ }),
+
+ xDays: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} күн',
+ singularGenitive: '{{count}} күн',
+ pluralGenitive: '{{count}} күн'
+ },
+ future: {
+ singularNominative: '{{count}} күннен кейін',
+ singularGenitive: '{{count}} күннен кейін',
+ pluralGenitive: '{{count}} күннен кейін'
+ }
+ }),
+
+ aboutXWeeks: {
+ one: 'шамамен 1 апта',
+ other: 'шамамен {{count}} апта'
+ },
+
+ xWeeks: {
+ one: '1 апта',
+ other: '{{count}} апта'
+ },
+
+ aboutXMonths: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'шамамен {{count}} ай',
+ singularGenitive: 'шамамен {{count}} ай',
+ pluralGenitive: 'шамамен {{count}} ай'
+ },
+ future: {
+ singularNominative: 'шамамен {{count}} айдан кейін',
+ singularGenitive: 'шамамен {{count}} айдан кейін',
+ pluralGenitive: 'шамамен {{count}} айдан кейін'
+ }
+ }),
+
+ xMonths: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} ай',
+ singularGenitive: '{{count}} ай',
+ pluralGenitive: '{{count}} ай'
+ }
+ }),
+
+ aboutXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'шамамен {{count}} жыл',
+ singularGenitive: 'шамамен {{count}} жыл',
+ pluralGenitive: 'шамамен {{count}} жыл'
+ },
+ future: {
+ singularNominative: 'шамамен {{count}} жылдан кейін',
+ singularGenitive: 'шамамен {{count}} жылдан кейін',
+ pluralGenitive: 'шамамен {{count}} жылдан кейін'
+ }
+ }),
+
+ xYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} жыл',
+ singularGenitive: '{{count}} жыл',
+ pluralGenitive: '{{count}} жыл'
+ },
+ future: {
+ singularNominative: '{{count}} жылдан кейін',
+ singularGenitive: '{{count}} жылдан кейін',
+ pluralGenitive: '{{count}} жылдан кейін'
+ }
+ }),
+
+ overXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} жылдан астам',
+ singularGenitive: '{{count}} жылдан астам',
+ pluralGenitive: '{{count}} жылдан астам'
+ },
+ future: {
+ singularNominative: '{{count}} жылдан астам',
+ singularGenitive: '{{count}} жылдан астам',
+ pluralGenitive: '{{count}} жылдан астам'
+ }
+ }),
+
+ almostXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} жылға жақын',
+ singularGenitive: '{{count}} жылға жақын',
+ pluralGenitive: '{{count}} жылға жақын'
+ },
+ future: {
+ singularNominative: '{{count}} жылдан кейін',
+ singularGenitive: '{{count}} жылдан кейін',
+ pluralGenitive: '{{count}} жылдан кейін'
+ }
+ })
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ return formatDistanceLocale[token](count, options)
+}
diff --git a/date-fns/src/locale/kk/_lib/formatLong/index.js b/date-fns/src/locale/kk/_lib/formatLong/index.js
new file mode 100644
index 0000000..83f9208
--- /dev/null
+++ b/date-fns/src/locale/kk/_lib/formatLong/index.js
@@ -0,0 +1,38 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, do MMMM y 'ж.'",
+ long: "do MMMM y 'ж.'",
+ medium: "d MMM y 'ж.'",
+ short: 'dd.MM.yyyy'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ any: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'any'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/kk/_lib/formatRelative/index.js b/date-fns/src/locale/kk/_lib/formatRelative/index.js
new file mode 100644
index 0000000..0ffadc3
--- /dev/null
+++ b/date-fns/src/locale/kk/_lib/formatRelative/index.js
@@ -0,0 +1,62 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+var accusativeWeekdays = [
+ 'жексенбіде',
+ 'дүйсенбіде',
+ 'сейсенбіде',
+ 'сәрсенбіде',
+ 'бейсенбіде',
+ 'жұмада',
+ 'сенбіде'
+]
+
+function lastWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ return "'өткен " + weekday + " сағат' p'-де'"
+}
+
+function thisWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ return "'" + weekday + " сағат' p'-де'"
+}
+
+function nextWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ return "'келесі " + weekday + " сағат' p'-де'"
+}
+
+var formatRelativeLocale = {
+ lastWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return lastWeek(day)
+ }
+ },
+ yesterday: "'кеше сағат' p'-де'",
+ today: "'бүгін сағат' p'-де'",
+ tomorrow: "'ертең сағат' p'-де'",
+ nextWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return nextWeek(day)
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/kk/_lib/localize/index.js b/date-fns/src/locale/kk/_lib/localize/index.js
new file mode 100644
index 0000000..eda70b2
--- /dev/null
+++ b/date-fns/src/locale/kk/_lib/localize/index.js
@@ -0,0 +1,203 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['б.з.д.', 'б.з.'],
+ abbreviated: ['б.з.д.', 'б.з.'],
+ wide: ['біздің заманымызға дейін', 'біздің заманымыз']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1-ші тоқ.', '2-ші тоқ.', '3-ші тоқ.', '4-ші тоқ.'],
+ wide: ['1-ші тоқсан', '2-ші тоқсан', '3-ші тоқсан', '4-ші тоқсан']
+}
+
+var monthValues = {
+ narrow: ['Қ', 'А', 'Н', 'С', 'М', 'М', 'Ш', 'Т', 'Қ', 'Қ', 'Қ', 'Ж'],
+ abbreviated: [
+ 'қаң',
+ 'ақп',
+ 'нау',
+ 'сәу',
+ 'мам',
+ 'мау',
+ 'шіл',
+ 'там',
+ 'қыр',
+ 'қаз',
+ 'қар',
+ 'жел'
+ ],
+ wide: [
+ 'қаңтар',
+ 'ақпан',
+ 'наурыз',
+ 'сәуір',
+ 'мамыр',
+ 'маусым',
+ 'шілде',
+ 'тамыз',
+ 'қыркүйек',
+ 'қазан',
+ 'қараша',
+ 'желтоқсан'
+ ]
+}
+var formattingMonthValues = {
+ narrow: ['Қ', 'А', 'Н', 'С', 'М', 'М', 'Ш', 'Т', 'Қ', 'Қ', 'Қ', 'Ж'],
+ abbreviated: [
+ 'қаң',
+ 'ақп',
+ 'нау',
+ 'сәу',
+ 'мам',
+ 'мау',
+ 'шіл',
+ 'там',
+ 'қыр',
+ 'қаз',
+ 'қар',
+ 'жел'
+ ],
+ wide: [
+ 'қаңтар',
+ 'ақпан',
+ 'наурыз',
+ 'сәуір',
+ 'мамыр',
+ 'маусым',
+ 'шілде',
+ 'тамыз',
+ 'қыркүйек',
+ 'қазан',
+ 'қараша',
+ 'желтоқсан'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Ж', 'Д', 'С', 'С', 'Б', 'Ж', 'С'],
+ short: ['жс', 'дс', 'сс', 'ср', 'бс', 'жм', 'сб'],
+ abbreviated: ['жс', 'дс', 'сс', 'ср', 'бс', 'жм', 'сб'],
+ wide: [
+ 'жексенбі',
+ 'дүйсенбі',
+ 'сейсенбі',
+ 'сәрсенбі',
+ 'бейсенбі',
+ 'жұма',
+ 'сенбі'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ТД',
+ pm: 'ТК',
+ midnight: 'түн ортасы',
+ noon: 'түс',
+ morning: 'таң',
+ afternoon: 'күндіз',
+ evening: 'кеш',
+ night: 'түн'
+ },
+ wide: {
+ am: 'ТД',
+ pm: 'ТК',
+ midnight: 'түн ортасы',
+ noon: 'түс',
+ morning: 'таң',
+ afternoon: 'күндіз',
+ evening: 'кеш',
+ night: 'түн'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ТД',
+ pm: 'ТК',
+ midnight: 'түн ортасында',
+ noon: 'түс',
+ morning: 'таң',
+ afternoon: 'күн',
+ evening: 'кеш',
+ night: 'түн'
+ },
+ wide: {
+ am: 'ТД',
+ pm: 'ТК',
+ midnight: 'түн ортасында',
+ noon: 'түсте',
+ morning: 'таңертең',
+ afternoon: 'күндіз',
+ evening: 'кеште',
+ night: 'түнде'
+ }
+}
+var suffixes = {
+ 0: '-ші',
+ 1: '-ші',
+ 2: '-ші',
+ 3: '-ші',
+ 4: '-ші',
+ 5: '-ші',
+ 6: '-шы',
+ 7: '-ші',
+ 8: '-ші',
+ 9: '-шы',
+ 10: '-шы',
+ 20: '-шы',
+ 30: '-шы',
+ 40: '-шы',
+ 50: '-ші',
+ 60: '-шы',
+ 70: '-ші',
+ 80: '-ші',
+ 90: '-шы',
+ 100: '-ші'
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ var a = number % 10
+ var b = number >= 100 ? 100 : null
+ return number + (suffixes[number] || suffixes[a] || suffixes[b])
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'any',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/kk/_lib/match/index.js b/date-fns/src/locale/kk/_lib/match/index.js
new file mode 100644
index 0000000..80bd558
--- /dev/null
+++ b/date-fns/src/locale/kk/_lib/match/index.js
@@ -0,0 +1,160 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-?(ші|шы))?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^((б )?з\.?\s?д\.?)/i,
+ abbreviated: /^((б )?з\.?\s?д\.?)/i,
+ wide: /^(біздің заманымызға дейін|біздің заманымыз|біздің заманымыздан)/i
+}
+var parseEraPatterns = {
+ any: [/^б/i, /^з/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234](-?ші)? тоқ.?/i,
+ wide: /^[1234](-?ші)? тоқсан/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(қ|а|н|с|м|мау|ш|т|қыр|қаз|қар|ж)/i,
+ abbreviated: /^(қаң|ақп|нау|сәу|мам|мау|шіл|там|қыр|қаз|қар|жел)/i,
+ wide: /^(қаңтар|ақпан|наурыз|сәуір|мамыр|маусым|шілде|тамыз|қыркүйек|қазан|қараша|желтоқсан)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^қ/i,
+ /^а/i,
+ /^н/i,
+ /^с/i,
+ /^м/i,
+ /^м/i,
+ /^ш/i,
+ /^т/i,
+ /^қ/i,
+ /^қ/i,
+ /^қ/i,
+ /^ж/i
+ ],
+ abbreviated: [
+ /^қаң/i,
+ /^ақп/i,
+ /^нау/i,
+ /^сәу/i,
+ /^мам/i,
+ /^мау/i,
+ /^шіл/i,
+ /^там/i,
+ /^қыр/i,
+ /^қаз/i,
+ /^қар/i,
+ /^жел/i
+ ],
+ any: [
+ /^қ/i,
+ /^а/i,
+ /^н/i,
+ /^с/i,
+ /^м/i,
+ /^м/i,
+ /^ш/i,
+ /^т/i,
+ /^қ/i,
+ /^қ/i,
+ /^қ/i,
+ /^ж/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(ж|д|с|с|б|ж|с)/i,
+ short: /^(жс|дс|сс|ср|бс|жм|сб)/i,
+ wide: /^(жексенбі|дүйсенбі|сейсенбі|сәрсенбі|бейсенбі|жұма|сенбі)/i
+}
+var parseDayPatterns = {
+ narrow: [/^ж/i, /^д/i, /^с/i, /^с/i, /^б/i, /^ж/i, /^с/i],
+ short: [/^жс/i, /^дс/i, /^сс/i, /^ср/i, /^бс/i, /^жм/i, /^сб/i],
+ any: [
+ /^ж[ек]/i,
+ /^д[үй]/i,
+ /^сe[й]/i,
+ /^сә[р]/i,
+ /^б[ей]/i,
+ /^ж[ұм]/i,
+ /^се[н]/i
+ ]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^Т\.?\s?[ДК]\.?|түн ортасында|((түсте|таңертең|таңда|таңертең|таңмен|таң|күндіз|күн|кеште|кеш|түнде|түн)\.?)/i,
+ wide: /^Т\.?\s?[ДК]\.?|түн ортасында|((түсте|таңертең|таңда|таңертең|таңмен|таң|күндіз|күн|кеште|кеш|түнде|түн)\.?)/i,
+ any: /^Т\.?\s?[ДК]\.?|түн ортасында|((түсте|таңертең|таңда|таңертең|таңмен|таң|күндіз|күн|кеште|кеш|түнде|түн)\.?)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^ТД/i,
+ pm: /^ТК/i,
+ midnight: /^түн орта/i,
+ noon: /^күндіз/i,
+ morning: /таң/i,
+ afternoon: /түс/i,
+ evening: /кеш/i,
+ night: /түн/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/kk/index.d.ts b/date-fns/src/locale/kk/index.d.ts
new file mode 100644
index 0000000..8ccf1a7
--- /dev/null
+++ b/date-fns/src/locale/kk/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { kk } from 'date-fns/locale'
+export default kk
diff --git a/date-fns/src/locale/kk/index.js b/date-fns/src/locale/kk/index.js
new file mode 100644
index 0000000..0dbe714
--- /dev/null
+++ b/date-fns/src/locale/kk/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Kazakh locale.
+ * @language Kazakh
+ * @iso-639-2 kaz
+ * @author Nikita Bayev [@drugoi]{@link https://github.com/drugoi}
+ */
+var locale = {
+ code: 'kk',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/kk/index.js.flow b/date-fns/src/locale/kk/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/kk/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/kk/snapshot.md b/date-fns/src/locale/kk/snapshot.md
new file mode 100644
index 0000000..1daa59a
--- /dev/null
+++ b/date-fns/src/locale/kk/snapshot.md
@@ -0,0 +1,304 @@
+# Kazakh (kk) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-ші | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-ші | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-ші | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-ші | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-ші | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ші | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1-ші тоқ. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ші тоқ. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-ші тоқсан | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ші тоқсан | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-ші | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ші | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1-ші тоқ. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ші тоқ. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-ші тоқсан | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ші тоқсан | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-ші | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ші | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | ақп | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | шіл | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | ақпан | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | шілде | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | А | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Ш | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-ші | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ші | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | ақп | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | шіл | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | ақпан | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | шілде | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | А | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Ш | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-ші | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ші | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-ші | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ші | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-ші | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-ші | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-ші | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-ші | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | дүйсенбі | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жұма | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | Д | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ж | 2019-02-17T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-ші | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ші | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | дүйсенбі | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жұма | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | Д | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ж | 2019-02-17T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-ші | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ші | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | дүйсенбі | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жұма | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | Д | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ж | 2019-02-17T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-ші | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ші | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | дүйсенбі | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жұма | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | Д | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ж | 2019-02-17T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | дс | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | жм | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | тд | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | тк | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | тк | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | тд | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | тд | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | тк | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | тк | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | тд | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ТК | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ТД | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | таңертең | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | күндіз | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | кеште | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | түнде | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | таңертең | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | күндіз | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | кеште | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | түнде | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | таңертең | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | күндіз | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | кеште | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | түнде | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | таңертең | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | күндіз | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | кеште | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | түнде | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | таң | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | күн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | кеш | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | түн | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-ші | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-ші | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-ші | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-ші | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-ші | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-ші | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-ші | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-ші | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-ші | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-ші | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-ші | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-ші | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 ақп 1987 ж. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мам 1453 ж. | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11-ші ақпан 1987 ж. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29-шы мамыр 1453 ж. | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | сәрсенбі, 11-ші ақпан 1987 ж. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | жексенбі, 29-шы мамыр 1453 ж. | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 ақп 1987 ж., 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мам 1453 ж., 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11-ші ақпан 1987 ж., 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29-шы мамыр 1453 ж., 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | сәрсенбі, 11-ші ақпан 1987 ж., 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | жексенбі, 29-шы мамыр 1453 ж., 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------- | ---------------------- | ------------------------ |
+| 2006-01-01T00:00:00.000Z | шамамен 6 жыл | шамамен 6 жыл | шамамен 6 жылдан кейін |
+| 2005-01-01T00:00:00.000Z | шамамен 5 жыл | шамамен 5 жыл | шамамен 5 жылдан кейін |
+| 2004-01-01T00:00:00.000Z | шамамен 4 жыл | шамамен 4 жыл | шамамен 4 жылдан кейін |
+| 2003-01-01T00:00:00.000Z | шамамен 3 жыл | шамамен 3 жыл | шамамен 3 жылдан кейін |
+| 2002-01-01T00:00:00.000Z | шамамен 2 жыл | шамамен 2 жыл | шамамен 2 жылдан кейін |
+| 2001-06-01T00:00:00.000Z | 1 жылдан астам | 1 жылдан астам | 1 жылдан астам |
+| 2001-02-01T00:00:00.000Z | шамамен 1 жыл | шамамен 1 жыл | шамамен 1 жылдан кейін |
+| 2001-01-01T00:00:00.000Z | шамамен 1 жыл | шамамен 1 жыл | шамамен 1 жылдан кейін |
+| 2000-06-01T00:00:00.000Z | 5 ай | 5 ай | 5 ай кейін |
+| 2000-03-01T00:00:00.000Z | 2 ай | 2 ай | 2 ай кейін |
+| 2000-02-01T00:00:00.000Z | шамамен 1 ай | шамамен 1 ай | шамамен 1 айдан кейін |
+| 2000-01-15T00:00:00.000Z | 14 күн | 14 күн | 14 күннен кейін |
+| 2000-01-02T00:00:00.000Z | 1 күн | 1 күн | 1 күннен кейін |
+| 2000-01-01T06:00:00.000Z | шамамен 6 сағат | шамамен 6 сағат | шамамен 6 сағаттан кейін |
+| 2000-01-01T01:00:00.000Z | шамамен 1 сағат | шамамен 1 сағат | шамамен 1 сағаттан кейін |
+| 2000-01-01T00:45:00.000Z | шамамен 1 сағат | шамамен 1 сағат | шамамен 1 сағаттан кейін |
+| 2000-01-01T00:30:00.000Z | 30 минут | 30 минут | 30 минуттан кейін |
+| 2000-01-01T00:15:00.000Z | 15 минут | 15 минут | 15 минуттан кейін |
+| 2000-01-01T00:01:00.000Z | 1 минут | 1 минут | 1 минуттан кейін |
+| 2000-01-01T00:00:25.000Z | 1 минуттан аз | жарты минут | минуттан кем |
+| 2000-01-01T00:00:15.000Z | 1 минуттан аз | 20 секундтан аз | минуттан кем |
+| 2000-01-01T00:00:05.000Z | 1 минуттан аз | 10 секундтан аз | минуттан кем |
+| 2000-01-01T00:00:00.000Z | 1 минуттан аз | 5 секундтан аз | 1 минуттан аз бұрын |
+| 1999-12-31T23:59:55.000Z | 1 минуттан аз | 10 секундтан аз | 1 минуттан аз бұрын |
+| 1999-12-31T23:59:45.000Z | 1 минуттан аз | 20 секундтан аз | 1 минуттан аз бұрын |
+| 1999-12-31T23:59:35.000Z | 1 минуттан аз | жарты минут | 1 минуттан аз бұрын |
+| 1999-12-31T23:59:00.000Z | 1 минут | 1 минут | 1 минут бұрын |
+| 1999-12-31T23:45:00.000Z | 15 минут | 15 минут | 15 минут бұрын |
+| 1999-12-31T23:30:00.000Z | 30 минут | 30 минут | 30 минут бұрын |
+| 1999-12-31T23:15:00.000Z | шамамен 1 сағат | шамамен 1 сағат | шамамен 1 сағат бұрын |
+| 1999-12-31T23:00:00.000Z | шамамен 1 сағат | шамамен 1 сағат | шамамен 1 сағат бұрын |
+| 1999-12-31T18:00:00.000Z | шамамен 6 сағат | шамамен 6 сағат | шамамен 6 сағат бұрын |
+| 1999-12-30T00:00:00.000Z | 2 күн | 2 күн | 2 күн бұрын |
+| 1999-12-15T00:00:00.000Z | 17 күн | 17 күн | 17 күн бұрын |
+| 1999-12-01T00:00:00.000Z | шамамен 1 ай | шамамен 1 ай | шамамен 1 ай бұрын |
+| 1999-11-01T00:00:00.000Z | 2 ай | 2 ай | 2 ай бұрын |
+| 1999-06-01T00:00:00.000Z | 7 ай | 7 ай | 7 ай бұрын |
+| 1999-01-01T00:00:00.000Z | шамамен 1 жыл | шамамен 1 жыл | шамамен 1 жыл бұрын |
+| 1998-12-01T00:00:00.000Z | шамамен 1 жыл | шамамен 1 жыл | шамамен 1 жыл бұрын |
+| 1998-06-01T00:00:00.000Z | 1 жылдан астам | 1 жылдан астам | 1 жылдан астам бұрын |
+| 1998-01-01T00:00:00.000Z | шамамен 2 жыл | шамамен 2 жыл | шамамен 2 жыл бұрын |
+| 1997-01-01T00:00:00.000Z | шамамен 3 жыл | шамамен 3 жыл | шамамен 3 жыл бұрын |
+| 1996-01-01T00:00:00.000Z | шамамен 4 жыл | шамамен 4 жыл | шамамен 4 жыл бұрын |
+| 1995-01-01T00:00:00.000Z | шамамен 5 жыл | шамамен 5 жыл | шамамен 5 жыл бұрын |
+| 1994-01-01T00:00:00.000Z | шамамен 6 жыл | шамамен 6 жыл | шамамен 6 жыл бұрын |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 жыл | 6 жылдан кейін | 52608 сағат |
+| 2005-01-01T00:00:00.000Z | 5 жыл | 5 жылдан кейін | 43848 сағат |
+| 2004-01-01T00:00:00.000Z | 4 жыл | 4 жылдан кейін | 35064 сағат |
+| 2003-01-01T00:00:00.000Z | 3 жыл | 3 жылдан кейін | 26304 сағат |
+| 2002-01-01T00:00:00.000Z | 2 жыл | 2 жылдан кейін | 17544 сағат |
+| 2001-06-01T00:00:00.000Z | 1 жыл | 1 жылдан кейін | 12408 сағат |
+| 2001-02-01T00:00:00.000Z | 1 жыл | 1 жылдан кейін | 9528 сағат |
+| 2001-01-01T00:00:00.000Z | 1 жыл | 1 жылдан кейін | 8784 сағат |
+| 2000-06-01T00:00:00.000Z | 5 ай | 5 ай кейін | 3648 сағат |
+| 2000-03-01T00:00:00.000Z | 2 ай | 2 ай кейін | 1440 сағат |
+| 2000-02-01T00:00:00.000Z | 1 ай | 1 ай кейін | 744 сағат |
+| 2000-01-15T00:00:00.000Z | 14 күн | 14 күннен кейін | 336 сағат |
+| 2000-01-02T00:00:00.000Z | 1 күн | 1 күннен кейін | 24 сағат |
+| 2000-01-01T06:00:00.000Z | 6 сағат | 6 сағат кейін | 6 сағат |
+| 2000-01-01T01:00:00.000Z | 1 сағат | 1 сағат кейін | 1 сағат |
+| 2000-01-01T00:45:00.000Z | 45 минут | 45 минуттан кейін | 1 сағат |
+| 2000-01-01T00:30:00.000Z | 30 минут | 30 минуттан кейін | 1 сағат |
+| 2000-01-01T00:15:00.000Z | 15 минут | 15 минуттан кейін | 0 сағат |
+| 2000-01-01T00:01:00.000Z | 1 минут | 1 минуттан кейін | 0 сағат |
+| 2000-01-01T00:00:25.000Z | 25 секунд | 25 секундтан кейін | 0 сағат |
+| 2000-01-01T00:00:15.000Z | 15 секунд | 15 секундтан кейін | 0 сағат |
+| 2000-01-01T00:00:05.000Z | 5 секунд | 5 секундтан кейін | 0 сағат |
+| 2000-01-01T00:00:00.000Z | 0 секунд | 0 секунд бұрын | 0 сағат |
+| 1999-12-31T23:59:55.000Z | 5 секунд | 5 секунд бұрын | 0 сағат |
+| 1999-12-31T23:59:45.000Z | 15 секунд | 15 секунд бұрын | 0 сағат |
+| 1999-12-31T23:59:35.000Z | 25 секунд | 25 секунд бұрын | 0 сағат |
+| 1999-12-31T23:59:00.000Z | 1 минут | 1 минут бұрын | 0 сағат |
+| 1999-12-31T23:45:00.000Z | 15 минут | 15 минут бұрын | 0 сағат |
+| 1999-12-31T23:30:00.000Z | 30 минут | 30 минут бұрын | 1 сағат |
+| 1999-12-31T23:15:00.000Z | 45 минут | 45 минут бұрын | 1 сағат |
+| 1999-12-31T23:00:00.000Z | 1 сағат | 1 сағат бұрын | 1 сағат |
+| 1999-12-31T18:00:00.000Z | 6 сағат | 6 сағат бұрын | 6 сағат |
+| 1999-12-30T00:00:00.000Z | 2 күн | 2 күн бұрын | 48 сағат |
+| 1999-12-15T00:00:00.000Z | 17 күн | 17 күн бұрын | 408 сағат |
+| 1999-12-01T00:00:00.000Z | 1 ай | 1 ай бұрын | 744 сағат |
+| 1999-11-01T00:00:00.000Z | 2 ай | 2 ай бұрын | 1464 сағат |
+| 1999-06-01T00:00:00.000Z | 7 ай | 7 ай бұрын | 5136 сағат |
+| 1999-01-01T00:00:00.000Z | 1 жыл | 1 жыл бұрын | 8760 сағат |
+| 1998-12-01T00:00:00.000Z | 1 жыл | 1 жыл бұрын | 9504 сағат |
+| 1998-06-01T00:00:00.000Z | 2 жыл | 2 жыл бұрын | 13896 сағат |
+| 1998-01-01T00:00:00.000Z | 2 жыл | 2 жыл бұрын | 17520 сағат |
+| 1997-01-01T00:00:00.000Z | 3 жыл | 3 жыл бұрын | 26280 сағат |
+| 1996-01-01T00:00:00.000Z | 4 жыл | 4 жыл бұрын | 35064 сағат |
+| 1995-01-01T00:00:00.000Z | 5 жыл | 5 жыл бұрын | 43824 сағат |
+| 1994-01-01T00:00:00.000Z | 6 жыл | 6 жыл бұрын | 52584 сағат |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | келесі сәрсенбіде сағат 0:00-де |
+| 2000-01-02T00:00:00.000Z | ертең сағат 0:00-де |
+| 2000-01-01T00:00:00.000Z | бүгін сағат 0:00-де |
+| 1999-12-31T00:00:00.000Z | кеше сағат 0:00-де |
+| 1999-12-27T00:00:00.000Z | дүйсенбіде сағат 0:00-де |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/kn/_lib/formatDistance/index.js b/date-fns/src/locale/kn/_lib/formatDistance/index.js
new file mode 100644
index 0000000..a658c64
--- /dev/null
+++ b/date-fns/src/locale/kn/_lib/formatDistance/index.js
@@ -0,0 +1,203 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: {
+ default: '1 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ',
+ future: '1 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ',
+ past: '1 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ'
+ },
+ other: {
+ default: '{{count}} ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ',
+ future: '{{count}} ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ',
+ past: '{{count}} ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ'
+ }
+ },
+
+ xSeconds: {
+ one: {
+ default: '1 ಸೆಕೆಂಡ್',
+ future: '1 ಸೆಕೆಂಡ್‌ನಲ್ಲಿ',
+ past: '1 ಸೆಕೆಂಡ್ ಹಿಂದೆ'
+ },
+ other: {
+ default: '{{count}} ಸೆಕೆಂಡುಗಳು',
+ future: '{{count}} ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ',
+ past: '{{count}} ಸೆಕೆಂಡ್ ಹಿಂದೆ'
+ }
+ },
+
+ halfAMinute: {
+ other: {
+ default: 'ಅರ್ಧ ನಿಮಿಷ',
+ future: 'ಅರ್ಧ ನಿಮಿಷದಲ್ಲಿ',
+ past: 'ಅರ್ಧ ನಿಮಿಷದ ಹಿಂದೆ'
+ }
+ },
+
+ lessThanXMinutes: {
+ one: {
+ default: '1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ',
+ future: '1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ',
+ past: '1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ'
+ },
+ other: {
+ default: '{{count}} ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ',
+ future: '{{count}} ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ',
+ past: '{{count}} ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ'
+ }
+ },
+
+ xMinutes: {
+ one: {
+ default: '1 ನಿಮಿಷ',
+ future: '1 ನಿಮಿಷದಲ್ಲಿ',
+ past: '1 ನಿಮಿಷದ ಹಿಂದೆ'
+ },
+ other: {
+ default: '{{count}} ನಿಮಿಷಗಳು',
+ future: '{{count}} ನಿಮಿಷಗಳಲ್ಲಿ',
+ past: '{{count}} ನಿಮಿಷಗಳ ಹಿಂದೆ'
+ }
+ },
+
+ aboutXHours: {
+ one: {
+ default: 'ಸುಮಾರು 1 ಗಂಟೆ',
+ future: 'ಸುಮಾರು 1 ಗಂಟೆಯಲ್ಲಿ',
+ past: 'ಸುಮಾರು 1 ಗಂಟೆ ಹಿಂದೆ'
+ },
+ other: {
+ default: 'ಸುಮಾರು {{count}} ಗಂಟೆಗಳು',
+ future: 'ಸುಮಾರು {{count}} ಗಂಟೆಗಳಲ್ಲಿ',
+ past: 'ಸುಮಾರು {{count}} ಗಂಟೆಗಳ ಹಿಂದೆ'
+ }
+ },
+
+ xHours: {
+ one: {
+ default: '1 ಗಂಟೆ',
+ future: '1 ಗಂಟೆಯಲ್ಲಿ',
+ past: '1 ಗಂಟೆ ಹಿಂದೆ'
+ },
+ other: {
+ default: '{{count}} ಗಂಟೆಗಳು',
+ future: '{{count}} ಗಂಟೆಗಳಲ್ಲಿ',
+ past: '{{count}} ಗಂಟೆಗಳ ಹಿಂದೆ'
+ }
+ },
+
+ xDays: {
+ one: {
+ default: '1 ದಿನ',
+ future: '1 ದಿನದಲ್ಲಿ',
+ past: '1 ದಿನದ ಹಿಂದೆ'
+ },
+ other: {
+ default: '{{count}} ದಿನಗಳು',
+ future: '{{count}} ದಿನಗಳಲ್ಲಿ',
+ past: '{{count}} ದಿನಗಳ ಹಿಂದೆ'
+ }
+ },
+
+ aboutXMonths: {
+ one: {
+ default: 'ಸುಮಾರು 1 ತಿಂಗಳು',
+ future: 'ಸುಮಾರು 1 ತಿಂಗಳಲ್ಲಿ',
+ past: 'ಸುಮಾರು 1 ತಿಂಗಳ ಹಿಂದೆ'
+ },
+ other: {
+ default: 'ಸುಮಾರು {{count}} ತಿಂಗಳು',
+ future: 'ಸುಮಾರು {{count}} ತಿಂಗಳುಗಳಲ್ಲಿ',
+ past: 'ಸುಮಾರು {{count}} ತಿಂಗಳುಗಳ ಹಿಂದೆ'
+ }
+ },
+
+ xMonths: {
+ one: {
+ default: '1 ತಿಂಗಳು',
+ future: '1 ತಿಂಗಳಲ್ಲಿ',
+ past: '1 ತಿಂಗಳ ಹಿಂದೆ'
+ },
+ other: {
+ default: '{{count}} ತಿಂಗಳು',
+ future: '{{count}} ತಿಂಗಳುಗಳಲ್ಲಿ',
+ past: '{{count}} ತಿಂಗಳುಗಳ ಹಿಂದೆ'
+ }
+ },
+
+ aboutXYears: {
+ one: {
+ default: 'ಸುಮಾರು 1 ವರ್ಷ',
+ future: 'ಸುಮಾರು 1 ವರ್ಷದಲ್ಲಿ',
+ past: 'ಸುಮಾರು 1 ವರ್ಷದ ಹಿಂದೆ'
+ },
+ other: {
+ default: 'ಸುಮಾರು {{count}} ವರ್ಷಗಳು',
+ future: 'ಸುಮಾರು {{count}} ವರ್ಷಗಳಲ್ಲಿ',
+ past: 'ಸುಮಾರು {{count}} ವರ್ಷಗಳ ಹಿಂದೆ'
+ }
+ },
+
+ xYears: {
+ one: {
+ default: '1 ವರ್ಷ',
+ future: '1 ವರ್ಷದಲ್ಲಿ',
+ past: '1 ವರ್ಷದ ಹಿಂದೆ'
+ },
+ other: {
+ default: '{{count}} ವರ್ಷಗಳು',
+ future: '{{count}} ವರ್ಷಗಳಲ್ಲಿ',
+ past: '{{count}} ವರ್ಷಗಳ ಹಿಂದೆ'
+ }
+ },
+
+ overXYears: {
+ one: {
+ default: '1 ವರ್ಷದ ಮೇಲೆ',
+ future: '1 ವರ್ಷದ ಮೇಲೆ',
+ past: '1 ವರ್ಷದ ಮೇಲೆ'
+ },
+ other: {
+ default: '{{count}} ವರ್ಷಗಳ ಮೇಲೆ',
+ future: '{{count}} ವರ್ಷಗಳ ಮೇಲೆ',
+ past: '{{count}} ವರ್ಷಗಳ ಮೇಲೆ'
+ }
+ },
+
+ almostXYears: {
+ one: {
+ default: 'ಬಹುತೇಕ 1 ವರ್ಷದಲ್ಲಿ',
+ future: 'ಬಹುತೇಕ 1 ವರ್ಷದಲ್ಲಿ',
+ past: 'ಬಹುತೇಕ 1 ವರ್ಷದಲ್ಲಿ'
+ },
+ other: {
+ default: 'ಬಹುತೇಕ {{count}} ವರ್ಷಗಳಲ್ಲಿ',
+ future: 'ಬಹುತೇಕ {{count}} ವರ್ಷಗಳಲ್ಲಿ',
+ past: 'ಬಹುತೇಕ {{count}} ವರ್ಷಗಳಲ್ಲಿ'
+ }
+ }
+}
+
+function getResultByTense(parentToken, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return parentToken.future
+ } else {
+ return parentToken.past
+ }
+ }
+ return parentToken.default
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = getResultByTense(formatDistanceLocale[token].one, options)
+ } else {
+ result = getResultByTense(formatDistanceLocale[token].other, options)
+ }
+ return result.replace('{{count}}', count)
+}
diff --git a/date-fns/src/locale/kn/_lib/formatLong/index.js b/date-fns/src/locale/kn/_lib/formatLong/index.js
new file mode 100644
index 0000000..124112a
--- /dev/null
+++ b/date-fns/src/locale/kn/_lib/formatLong/index.js
@@ -0,0 +1,42 @@
+// Reference: https://www.unicode.org/cldr/charts/32/summary/kn.html
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM d, y', // CLDR 1816
+ long: 'MMMM d, y', // CLDR 1817
+ medium: 'MMM d, y', // CLDR 1818
+ short: 'd/M/yy' // CLDR 1819
+}
+
+var timeFormats = {
+ full: 'hh:mm:ss a zzzz', // CLDR 1820
+ long: 'hh:mm:ss a z', // CLDR 1821
+ medium: 'hh:mm:ss a', // CLDR 1822
+ short: 'hh:mm a' // CLDR 1823
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}', // CLDR 1824
+ long: '{{date}} {{time}}', // CLDR 1825
+ medium: '{{date}} {{time}}', // CLDR 1826
+ short: '{{date}} {{time}}' // CLDR 1827
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/kn/_lib/formatRelative/index.js b/date-fns/src/locale/kn/_lib/formatRelative/index.js
new file mode 100644
index 0000000..aefa301
--- /dev/null
+++ b/date-fns/src/locale/kn/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'ಕಳೆದ' eeee p 'ಕ್ಕೆ'",
+ yesterday: "'ನಿನ್ನೆ' p 'ಕ್ಕೆ'",
+ today: "'ಇಂದು' p 'ಕ್ಕೆ'",
+ tomorrow: "'ನಾಳೆ' p 'ಕ್ಕೆ'",
+ nextWeek: "eeee p 'ಕ್ಕೆ'",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/kn/_lib/localize/index.js b/date-fns/src/locale/kn/_lib/localize/index.js
new file mode 100644
index 0000000..cfe8e26
--- /dev/null
+++ b/date-fns/src/locale/kn/_lib/localize/index.js
@@ -0,0 +1,171 @@
+// Reference: https://www.unicode.org/cldr/charts/32/summary/kn.html
+
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['ಕ್ರಿ.ಪೂ', 'ಕ್ರಿ.ಶ'],
+ abbreviated: ['ಕ್ರಿ.ಪೂ', 'ಕ್ರಿ.ಶ'], // CLDR #1618, #1620
+ wide: ['ಕ್ರಿಸ್ತ ಪೂರ್ವ', 'ಕ್ರಿಸ್ತ ಶಕ'] // CLDR #1614, #1616
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['ತ್ರೈ 1', 'ತ್ರೈ 2', 'ತ್ರೈ 3', 'ತ್ರೈ 4'], // CLDR #1630 - #1638
+ wide: ['1ನೇ ತ್ರೈಮಾಸಿಕ', '2ನೇ ತ್ರೈಮಾಸಿಕ', '3ನೇ ತ್ರೈಮಾಸಿಕ', '4ನೇ ತ್ರೈಮಾಸಿಕ'] // CLDR #1622 - #1629
+}
+
+// CLDR #1646 - #1717
+var monthValues = {
+ narrow: ['ಜ', 'ಫೆ', 'ಮಾ', 'ಏ', 'ಮೇ', 'ಜೂ', 'ಜು', 'ಆ', 'ಸೆ', 'ಅ', 'ನ', 'ಡಿ'],
+ abbreviated: [
+ 'ಜನ',
+ 'ಫೆಬ್ರ',
+ 'ಮಾರ್ಚ್',
+ 'ಏಪ್ರಿ',
+ 'ಮೇ',
+ 'ಜೂನ್',
+ 'ಜುಲೈ',
+ 'ಆಗ',
+ 'ಸೆಪ್ಟೆಂ',
+ 'ಅಕ್ಟೋ',
+ 'ನವೆಂ',
+ 'ಡಿಸೆಂ'
+ ],
+ wide: [
+ 'ಜನವರಿ',
+ 'ಫೆಬ್ರವರಿ',
+ 'ಮಾರ್ಚ್',
+ 'ಏಪ್ರಿಲ್',
+ 'ಮೇ',
+ 'ಜೂನ್',
+ 'ಜುಲೈ',
+ 'ಆಗಸ್ಟ್',
+ 'ಸೆಪ್ಟೆಂಬರ್',
+ 'ಅಕ್ಟೋಬರ್',
+ 'ನವೆಂಬರ್',
+ 'ಡಿಸೆಂಬರ್'
+ ]
+}
+
+// CLDR #1718 - #1773
+var dayValues = {
+ narrow: ['ಭಾ', 'ಸೋ', 'ಮಂ', 'ಬು', 'ಗು', 'ಶು', 'ಶ'],
+ short: ['ಭಾನು', 'ಸೋಮ', 'ಮಂಗಳ', 'ಬುಧ', 'ಗುರು', 'ಶುಕ್ರ', 'ಶನಿ'],
+ abbreviated: ['ಭಾನು', 'ಸೋಮ', 'ಮಂಗಳ', 'ಬುಧ', 'ಗುರು', 'ಶುಕ್ರ', 'ಶನಿ'],
+ wide: [
+ 'ಭಾನುವಾರ',
+ 'ಸೋಮವಾರ',
+ 'ಮಂಗಳವಾರ',
+ 'ಬುಧವಾರ',
+ 'ಗುರುವಾರ',
+ 'ಶುಕ್ರವಾರ',
+ 'ಶನಿವಾರ'
+ ]
+}
+
+// CLDR #1774 - #1815
+var dayPeriodValues = {
+ narrow: {
+ am: 'ಪೂರ್ವಾಹ್ನ',
+ pm: 'ಅಪರಾಹ್ನ',
+ midnight: 'ಮಧ್ಯರಾತ್ರಿ',
+ noon: 'ಮಧ್ಯಾಹ್ನ',
+ morning: 'ಬೆಳಗ್ಗೆ',
+ afternoon: 'ಮಧ್ಯಾಹ್ನ',
+ evening: 'ಸಂಜೆ',
+ night: 'ರಾತ್ರಿ'
+ },
+ abbreviated: {
+ am: 'ಪೂರ್ವಾಹ್ನ',
+ pm: 'ಅಪರಾಹ್ನ',
+ midnight: 'ಮಧ್ಯರಾತ್ರಿ',
+ noon: 'ಮಧ್ಯಾನ್ಹ',
+ morning: 'ಬೆಳಗ್ಗೆ',
+ afternoon: 'ಮಧ್ಯಾನ್ಹ',
+ evening: 'ಸಂಜೆ',
+ night: 'ರಾತ್ರಿ'
+ },
+ wide: {
+ am: 'ಪೂರ್ವಾಹ್ನ',
+ pm: 'ಅಪರಾಹ್ನ',
+ midnight: 'ಮಧ್ಯರಾತ್ರಿ',
+ noon: 'ಮಧ್ಯಾನ್ಹ',
+ morning: 'ಬೆಳಗ್ಗೆ',
+ afternoon: 'ಮಧ್ಯಾನ್ಹ',
+ evening: 'ಸಂಜೆ',
+ night: 'ರಾತ್ರಿ'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ಪೂ',
+ pm: 'ಅ',
+ midnight: 'ಮಧ್ಯರಾತ್ರಿ',
+ noon: 'ಮಧ್ಯಾನ್ಹ',
+ morning: 'ಬೆಳಗ್ಗೆ',
+ afternoon: 'ಮಧ್ಯಾನ್ಹ',
+ evening: 'ಸಂಜೆ',
+ night: 'ರಾತ್ರಿ'
+ },
+ abbreviated: {
+ am: 'ಪೂರ್ವಾಹ್ನ',
+ pm: 'ಅಪರಾಹ್ನ',
+ midnight: 'ಮಧ್ಯ ರಾತ್ರಿ',
+ noon: 'ಮಧ್ಯಾನ್ಹ',
+ morning: 'ಬೆಳಗ್ಗೆ',
+ afternoon: 'ಮಧ್ಯಾನ್ಹ',
+ evening: 'ಸಂಜೆ',
+ night: 'ರಾತ್ರಿ'
+ },
+ wide: {
+ am: 'ಪೂರ್ವಾಹ್ನ',
+ pm: 'ಅಪರಾಹ್ನ',
+ midnight: 'ಮಧ್ಯ ರಾತ್ರಿ',
+ noon: 'ಮಧ್ಯಾನ್ಹ',
+ morning: 'ಬೆಳಗ್ಗೆ',
+ afternoon: 'ಮಧ್ಯಾನ್ಹ',
+ evening: 'ಸಂಜೆ',
+ night: 'ರಾತ್ರಿ'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+ return number + 'ನೇ'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/kn/_lib/match/index.js b/date-fns/src/locale/kn/_lib/match/index.js
new file mode 100644
index 0000000..0c3b0f1
--- /dev/null
+++ b/date-fns/src/locale/kn/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(ನೇ|ನೆ)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ಕ್ರಿ.ಪೂ|ಕ್ರಿ.ಶ)/i,
+ abbreviated: /^(ಕ್ರಿ\.?\s?ಪೂ\.?|ಕ್ರಿ\.?\s?ಶ\.?|ಪ್ರ\.?\s?ಶ\.?)/i,
+ wide: /^(ಕ್ರಿಸ್ತ ಪೂರ್ವ|ಕ್ರಿಸ್ತ ಶಕ|ಪ್ರಸಕ್ತ ಶಕ)/i
+}
+var parseEraPatterns = {
+ any: [/^ಪೂ/i, /^(ಶ|ಪ್ರ)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^ತ್ರೈ[1234]|ತ್ರೈ [1234]| [1234]ತ್ರೈ/i,
+ wide: /^[1234](ನೇ)? ತ್ರೈಮಾಸಿಕ/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(ಜೂ|ಜು|ಜ|ಫೆ|ಮಾ|ಏ|ಮೇ|ಆ|ಸೆ|ಅ|ನ|ಡಿ)/i,
+ abbreviated: /^(ಜನ|ಫೆಬ್ರ|ಮಾರ್ಚ್|ಏಪ್ರಿ|ಮೇ|ಜೂನ್|ಜುಲೈ|ಆಗ|ಸೆಪ್ಟೆಂ|ಅಕ್ಟೋ|ನವೆಂ|ಡಿಸೆಂ)/i,
+ wide: /^(ಜನವರಿ|ಫೆಬ್ರವರಿ|ಮಾರ್ಚ್|ಏಪ್ರಿಲ್|ಮೇ|ಜೂನ್|ಜುಲೈ|ಆಗಸ್ಟ್|ಸೆಪ್ಟೆಂಬರ್|ಅಕ್ಟೋಬರ್|ನವೆಂಬರ್|ಡಿಸೆಂಬರ್)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^ಜ$/i,
+ /^ಫೆ/i,
+ /^ಮಾ/i,
+ /^ಏ/i,
+ /^ಮೇ/i,
+ /^ಜೂ/i,
+ /^ಜು$/i,
+ /^ಆ/i,
+ /^ಸೆ/i,
+ /^ಅ/i,
+ /^ನ/i,
+ /^ಡಿ/i
+ ],
+ any: [
+ /^ಜನ/i,
+ /^ಫೆ/i,
+ /^ಮಾ/i,
+ /^ಏ/i,
+ /^ಮೇ/i,
+ /^ಜೂನ್/i,
+ /^ಜುಲೈ/i,
+ /^ಆ/i,
+ /^ಸೆ/i,
+ /^ಅ/i,
+ /^ನ/i,
+ /^ಡಿ/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(ಭಾ|ಸೋ|ಮ|ಬು|ಗು|ಶು|ಶ)/i,
+ short: /^(ಭಾನು|ಸೋಮ|ಮಂಗಳ|ಬುಧ|ಗುರು|ಶುಕ್ರ|ಶನಿ)/i,
+ abbreviated: /^(ಭಾನು|ಸೋಮ|ಮಂಗಳ|ಬುಧ|ಗುರು|ಶುಕ್ರ|ಶನಿ)/i,
+ wide: /^(ಭಾನುವಾರ|ಸೋಮವಾರ|ಮಂಗಳವಾರ|ಬುಧವಾರ|ಗುರುವಾರ|ಶುಕ್ರವಾರ|ಶನಿವಾರ)/i
+}
+var parseDayPatterns = {
+ narrow: [/^ಭಾ/i, /^ಸೋ/i, /^ಮ/i, /^ಬು/i, /^ಗು/i, /^ಶು/i, /^ಶ/i],
+ any: [/^ಭಾ/i, /^ಸೋ/i, /^ಮ/i, /^ಬು/i, /^ಗು/i, /^ಶು/i, /^ಶ/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(ಪೂ|ಅ|ಮಧ್ಯರಾತ್ರಿ|ಮಧ್ಯಾನ್ಹ|ಬೆಳಗ್ಗೆ|ಸಂಜೆ|ರಾತ್ರಿ)/i,
+ any: /^(ಪೂರ್ವಾಹ್ನ|ಅಪರಾಹ್ನ|ಮಧ್ಯರಾತ್ರಿ|ಮಧ್ಯಾನ್ಹ|ಬೆಳಗ್ಗೆ|ಸಂಜೆ|ರಾತ್ರಿ)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^ಪೂ/i,
+ pm: /^ಅ/i,
+ midnight: /ಮಧ್ಯರಾತ್ರಿ/i,
+ noon: /ಮಧ್ಯಾನ್ಹ/i,
+ morning: /ಬೆಳಗ್ಗೆ/i,
+ afternoon: /ಮಧ್ಯಾನ್ಹ/i,
+ evening: /ಸಂಜೆ/i,
+ night: /ರಾತ್ರಿ/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/kn/index.d.ts b/date-fns/src/locale/kn/index.d.ts
new file mode 100644
index 0000000..85a2ed5
--- /dev/null
+++ b/date-fns/src/locale/kn/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { kn } from 'date-fns/locale'
+export default kn
diff --git a/date-fns/src/locale/kn/index.js b/date-fns/src/locale/kn/index.js
new file mode 100644
index 0000000..ad1012b
--- /dev/null
+++ b/date-fns/src/locale/kn/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Kannada locale (India).
+ * @language Kannada
+ * @iso-639-2 kan
+ * @author Manjunatha Gouli [@developergouli]{@link https://github.com/developergouli}
+ */
+var locale = {
+ code: 'kn',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/kn/index.js.flow b/date-fns/src/locale/kn/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/kn/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/kn/snapshot.md b/date-fns/src/locale/kn/snapshot.md
new file mode 100644
index 0000000..72ef2d2
--- /dev/null
+++ b/date-fns/src/locale/kn/snapshot.md
@@ -0,0 +1,304 @@
+# Kannada (kn) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987ನೇ | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5ನೇ | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987ನೇ | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5ನೇ | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1ನೇ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ನೇ | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | ತ್ರೈ 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ತ್ರೈ 2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1ನೇ ತ್ರೈಮಾಸಿಕ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ನೇ ತ್ರೈಮಾಸಿಕ | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1ನೇ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ನೇ | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | ತ್ರೈ 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ತ್ರೈ 2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1ನೇ ತ್ರೈಮಾಸಿಕ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2ನೇ ತ್ರೈಮಾಸಿಕ | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2ನೇ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ನೇ | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | ಫೆಬ್ರ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ಜುಲೈ | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | ಫೆಬ್ರವರಿ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ಜುಲೈ | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ಫೆ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ಜು | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2ನೇ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7ನೇ | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | ಫೆಬ್ರ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ಜುಲೈ | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | ಫೆಬ್ರವರಿ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ಜುಲೈ | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ಫೆ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ಜು | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1ನೇ | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ನೇ | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1ನೇ | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ನೇ | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11ನೇ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28ನೇ | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42ನೇ | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365ನೇ | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | ಸೋಮವಾರ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರವಾರ | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | ಸೋ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶು | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1ನೇ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ನೇ | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | ಸೋಮವಾರ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರವಾರ | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | ಸೋ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶು | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1ನೇ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ನೇ | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | ಸೋಮವಾರ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರವಾರ | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | ಸೋ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶು | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1ನೇ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5ನೇ | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | ಸೋಮವಾರ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರವಾರ | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | ಸೋ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶು | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | ಸೋಮ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ಶುಕ್ರ | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ಪೂ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂ | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅಪರಾಹ್ನ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂರ್ವಾಹ್ನ | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ಪೂ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಅ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಅ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ಪೂ | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ಬೆಳಗ್ಗೆ | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಮಧ್ಯಾನ್ಹ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಸಂಜೆ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ರಾತ್ರಿ | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ಬೆಳಗ್ಗೆ | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಮಧ್ಯಾನ್ಹ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಸಂಜೆ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ರಾತ್ರಿ | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ಬೆಳಗ್ಗೆ | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಮಧ್ಯಾನ್ಹ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಸಂಜೆ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ರಾತ್ರಿ | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | ಬೆಳಗ್ಗೆ | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಮಧ್ಯಾನ್ಹ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಸಂಜೆ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ರಾತ್ರಿ | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ಬೆಳಗ್ಗೆ | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ಮಧ್ಯಾನ್ಹ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ಸಂಜೆ | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ರಾತ್ರಿ | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11ನೇ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11ನೇ | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11ನೇ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ನೇ | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11ನೇ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11ನೇ | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11ನೇ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23ನೇ | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1ನೇ | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55ನೇ | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1ನೇ | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55ನೇ | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/2/87 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/53 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | ಫೆಬ್ರ 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | ಮೇ 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | ಫೆಬ್ರವರಿ 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | ಮೇ 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | ಬುಧವಾರ, ಫೆಬ್ರವರಿ 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | ಭಾನುವಾರ, ಮೇ 29, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 ಅಪರಾಹ್ನ | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 ಅಪರಾಹ್ನ | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 ಅಪರಾಹ್ನ | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 ಅಪರಾಹ್ನ | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 ಅಪರಾಹ್ನ GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 ಅಪರಾಹ್ನ GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 ಅಪರಾಹ್ನ GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 ಅಪರಾಹ್ನ GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/2/87 12:13 ಅಪರಾಹ್ನ | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/53 11:59 ಅಪರಾಹ್ನ | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | ಫೆಬ್ರ 11, 1987 12:13:14 ಅಪರಾಹ್ನ | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | ಮೇ 29, 1453 11:59:59 ಅಪರಾಹ್ನ | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | ಫೆಬ್ರವರಿ 11, 1987 12:13:14 ಅಪರಾಹ್ನ GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | ಮೇ 29, 1453 11:59:59 ಅಪರಾಹ್ನ GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | ಬುಧವಾರ, ಫೆಬ್ರವರಿ 11, 1987 12:13:14 ಅಪರಾಹ್ನ GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | ಭಾನುವಾರ, ಮೇ 29, 1453 11:59:59 ಅಪರಾಹ್ನ GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------- | ---------------------- | --------------------- |
+| 2006-01-01T00:00:00.000Z | ಸುಮಾರು 6 ವರ್ಷಗಳು | ಸುಮಾರು 6 ವರ್ಷಗಳು | ಸುಮಾರು 6 ವರ್ಷಗಳಲ್ಲಿ |
+| 2005-01-01T00:00:00.000Z | ಸುಮಾರು 5 ವರ್ಷಗಳು | ಸುಮಾರು 5 ವರ್ಷಗಳು | ಸುಮಾರು 5 ವರ್ಷಗಳಲ್ಲಿ |
+| 2004-01-01T00:00:00.000Z | ಸುಮಾರು 4 ವರ್ಷಗಳು | ಸುಮಾರು 4 ವರ್ಷಗಳು | ಸುಮಾರು 4 ವರ್ಷಗಳಲ್ಲಿ |
+| 2003-01-01T00:00:00.000Z | ಸುಮಾರು 3 ವರ್ಷಗಳು | ಸುಮಾರು 3 ವರ್ಷಗಳು | ಸುಮಾರು 3 ವರ್ಷಗಳಲ್ಲಿ |
+| 2002-01-01T00:00:00.000Z | ಸುಮಾರು 2 ವರ್ಷಗಳು | ಸುಮಾರು 2 ವರ್ಷಗಳು | ಸುಮಾರು 2 ವರ್ಷಗಳಲ್ಲಿ |
+| 2001-06-01T00:00:00.000Z | 1 ವರ್ಷದ ಮೇಲೆ | 1 ವರ್ಷದ ಮೇಲೆ | 1 ವರ್ಷದ ಮೇಲೆ |
+| 2001-02-01T00:00:00.000Z | ಸುಮಾರು 1 ವರ್ಷ | ಸುಮಾರು 1 ವರ್ಷ | ಸುಮಾರು 1 ವರ್ಷದಲ್ಲಿ |
+| 2001-01-01T00:00:00.000Z | ಸುಮಾರು 1 ವರ್ಷ | ಸುಮಾರು 1 ವರ್ಷ | ಸುಮಾರು 1 ವರ್ಷದಲ್ಲಿ |
+| 2000-06-01T00:00:00.000Z | 5 ತಿಂಗಳು | 5 ತಿಂಗಳು | 5 ತಿಂಗಳುಗಳಲ್ಲಿ |
+| 2000-03-01T00:00:00.000Z | 2 ತಿಂಗಳು | 2 ತಿಂಗಳು | 2 ತಿಂಗಳುಗಳಲ್ಲಿ |
+| 2000-02-01T00:00:00.000Z | ಸುಮಾರು 1 ತಿಂಗಳು | ಸುಮಾರು 1 ತಿಂಗಳು | ಸುಮಾರು 1 ತಿಂಗಳಲ್ಲಿ |
+| 2000-01-15T00:00:00.000Z | 14 ದಿನಗಳು | 14 ದಿನಗಳು | 14 ದಿನಗಳಲ್ಲಿ |
+| 2000-01-02T00:00:00.000Z | 1 ದಿನ | 1 ದಿನ | 1 ದಿನದಲ್ಲಿ |
+| 2000-01-01T06:00:00.000Z | ಸುಮಾರು 6 ಗಂಟೆಗಳು | ಸುಮಾರು 6 ಗಂಟೆಗಳು | ಸುಮಾರು 6 ಗಂಟೆಗಳಲ್ಲಿ |
+| 2000-01-01T01:00:00.000Z | ಸುಮಾರು 1 ಗಂಟೆ | ಸುಮಾರು 1 ಗಂಟೆ | ಸುಮಾರು 1 ಗಂಟೆಯಲ್ಲಿ |
+| 2000-01-01T00:45:00.000Z | ಸುಮಾರು 1 ಗಂಟೆ | ಸುಮಾರು 1 ಗಂಟೆ | ಸುಮಾರು 1 ಗಂಟೆಯಲ್ಲಿ |
+| 2000-01-01T00:30:00.000Z | 30 ನಿಮಿಷಗಳು | 30 ನಿಮಿಷಗಳು | 30 ನಿಮಿಷಗಳಲ್ಲಿ |
+| 2000-01-01T00:15:00.000Z | 15 ನಿಮಿಷಗಳು | 15 ನಿಮಿಷಗಳು | 15 ನಿಮಿಷಗಳಲ್ಲಿ |
+| 2000-01-01T00:01:00.000Z | 1 ನಿಮಿಷ | 1 ನಿಮಿಷ | 1 ನಿಮಿಷದಲ್ಲಿ |
+| 2000-01-01T00:00:25.000Z | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ | ಅರ್ಧ ನಿಮಿಷ | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ |
+| 2000-01-01T00:00:15.000Z | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ | 20 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ |
+| 2000-01-01T00:00:05.000Z | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ | 10 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ |
+| 2000-01-01T00:00:00.000Z | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ | 5 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ |
+| 1999-12-31T23:59:55.000Z | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ | 10 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ |
+| 1999-12-31T23:59:45.000Z | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ | 20 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ |
+| 1999-12-31T23:59:35.000Z | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ | ಅರ್ಧ ನಿಮಿಷ | 1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ |
+| 1999-12-31T23:59:00.000Z | 1 ನಿಮಿಷ | 1 ನಿಮಿಷ | 1 ನಿಮಿಷದ ಹಿಂದೆ |
+| 1999-12-31T23:45:00.000Z | 15 ನಿಮಿಷಗಳು | 15 ನಿಮಿಷಗಳು | 15 ನಿಮಿಷಗಳ ಹಿಂದೆ |
+| 1999-12-31T23:30:00.000Z | 30 ನಿಮಿಷಗಳು | 30 ನಿಮಿಷಗಳು | 30 ನಿಮಿಷಗಳ ಹಿಂದೆ |
+| 1999-12-31T23:15:00.000Z | ಸುಮಾರು 1 ಗಂಟೆ | ಸುಮಾರು 1 ಗಂಟೆ | ಸುಮಾರು 1 ಗಂಟೆ ಹಿಂದೆ |
+| 1999-12-31T23:00:00.000Z | ಸುಮಾರು 1 ಗಂಟೆ | ಸುಮಾರು 1 ಗಂಟೆ | ಸುಮಾರು 1 ಗಂಟೆ ಹಿಂದೆ |
+| 1999-12-31T18:00:00.000Z | ಸುಮಾರು 6 ಗಂಟೆಗಳು | ಸುಮಾರು 6 ಗಂಟೆಗಳು | ಸುಮಾರು 6 ಗಂಟೆಗಳ ಹಿಂದೆ |
+| 1999-12-30T00:00:00.000Z | 2 ದಿನಗಳು | 2 ದಿನಗಳು | 2 ದಿನಗಳ ಹಿಂದೆ |
+| 1999-12-15T00:00:00.000Z | 17 ದಿನಗಳು | 17 ದಿನಗಳು | 17 ದಿನಗಳ ಹಿಂದೆ |
+| 1999-12-01T00:00:00.000Z | ಸುಮಾರು 1 ತಿಂಗಳು | ಸುಮಾರು 1 ತಿಂಗಳು | ಸುಮಾರು 1 ತಿಂಗಳ ಹಿಂದೆ |
+| 1999-11-01T00:00:00.000Z | 2 ತಿಂಗಳು | 2 ತಿಂಗಳು | 2 ತಿಂಗಳುಗಳ ಹಿಂದೆ |
+| 1999-06-01T00:00:00.000Z | 7 ತಿಂಗಳು | 7 ತಿಂಗಳು | 7 ತಿಂಗಳುಗಳ ಹಿಂದೆ |
+| 1999-01-01T00:00:00.000Z | ಸುಮಾರು 1 ವರ್ಷ | ಸುಮಾರು 1 ವರ್ಷ | ಸುಮಾರು 1 ವರ್ಷದ ಹಿಂದೆ |
+| 1998-12-01T00:00:00.000Z | ಸುಮಾರು 1 ವರ್ಷ | ಸುಮಾರು 1 ವರ್ಷ | ಸುಮಾರು 1 ವರ್ಷದ ಹಿಂದೆ |
+| 1998-06-01T00:00:00.000Z | 1 ವರ್ಷದ ಮೇಲೆ | 1 ವರ್ಷದ ಮೇಲೆ | 1 ವರ್ಷದ ಮೇಲೆ |
+| 1998-01-01T00:00:00.000Z | ಸುಮಾರು 2 ವರ್ಷಗಳು | ಸುಮಾರು 2 ವರ್ಷಗಳು | ಸುಮಾರು 2 ವರ್ಷಗಳ ಹಿಂದೆ |
+| 1997-01-01T00:00:00.000Z | ಸುಮಾರು 3 ವರ್ಷಗಳು | ಸುಮಾರು 3 ವರ್ಷಗಳು | ಸುಮಾರು 3 ವರ್ಷಗಳ ಹಿಂದೆ |
+| 1996-01-01T00:00:00.000Z | ಸುಮಾರು 4 ವರ್ಷಗಳು | ಸುಮಾರು 4 ವರ್ಷಗಳು | ಸುಮಾರು 4 ವರ್ಷಗಳ ಹಿಂದೆ |
+| 1995-01-01T00:00:00.000Z | ಸುಮಾರು 5 ವರ್ಷಗಳು | ಸುಮಾರು 5 ವರ್ಷಗಳು | ಸುಮಾರು 5 ವರ್ಷಗಳ ಹಿಂದೆ |
+| 1994-01-01T00:00:00.000Z | ಸುಮಾರು 6 ವರ್ಷಗಳು | ಸುಮಾರು 6 ವರ್ಷಗಳು | ಸುಮಾರು 6 ವರ್ಷಗಳ ಹಿಂದೆ |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 ವರ್ಷಗಳು | 6 ವರ್ಷಗಳಲ್ಲಿ | 52608 ಗಂಟೆಗಳು |
+| 2005-01-01T00:00:00.000Z | 5 ವರ್ಷಗಳು | 5 ವರ್ಷಗಳಲ್ಲಿ | 43848 ಗಂಟೆಗಳು |
+| 2004-01-01T00:00:00.000Z | 4 ವರ್ಷಗಳು | 4 ವರ್ಷಗಳಲ್ಲಿ | 35064 ಗಂಟೆಗಳು |
+| 2003-01-01T00:00:00.000Z | 3 ವರ್ಷಗಳು | 3 ವರ್ಷಗಳಲ್ಲಿ | 26304 ಗಂಟೆಗಳು |
+| 2002-01-01T00:00:00.000Z | 2 ವರ್ಷಗಳು | 2 ವರ್ಷಗಳಲ್ಲಿ | 17544 ಗಂಟೆಗಳು |
+| 2001-06-01T00:00:00.000Z | 1 ವರ್ಷ | 1 ವರ್ಷದಲ್ಲಿ | 12408 ಗಂಟೆಗಳು |
+| 2001-02-01T00:00:00.000Z | 1 ವರ್ಷ | 1 ವರ್ಷದಲ್ಲಿ | 9528 ಗಂಟೆಗಳು |
+| 2001-01-01T00:00:00.000Z | 1 ವರ್ಷ | 1 ವರ್ಷದಲ್ಲಿ | 8784 ಗಂಟೆಗಳು |
+| 2000-06-01T00:00:00.000Z | 5 ತಿಂಗಳು | 5 ತಿಂಗಳುಗಳಲ್ಲಿ | 3648 ಗಂಟೆಗಳು |
+| 2000-03-01T00:00:00.000Z | 2 ತಿಂಗಳು | 2 ತಿಂಗಳುಗಳಲ್ಲಿ | 1440 ಗಂಟೆಗಳು |
+| 2000-02-01T00:00:00.000Z | 1 ತಿಂಗಳು | 1 ತಿಂಗಳಲ್ಲಿ | 744 ಗಂಟೆಗಳು |
+| 2000-01-15T00:00:00.000Z | 14 ದಿನಗಳು | 14 ದಿನಗಳಲ್ಲಿ | 336 ಗಂಟೆಗಳು |
+| 2000-01-02T00:00:00.000Z | 1 ದಿನ | 1 ದಿನದಲ್ಲಿ | 24 ಗಂಟೆಗಳು |
+| 2000-01-01T06:00:00.000Z | 6 ಗಂಟೆಗಳು | 6 ಗಂಟೆಗಳಲ್ಲಿ | 6 ಗಂಟೆಗಳು |
+| 2000-01-01T01:00:00.000Z | 1 ಗಂಟೆ | 1 ಗಂಟೆಯಲ್ಲಿ | 1 ಗಂಟೆ |
+| 2000-01-01T00:45:00.000Z | 45 ನಿಮಿಷಗಳು | 45 ನಿಮಿಷಗಳಲ್ಲಿ | 1 ಗಂಟೆ |
+| 2000-01-01T00:30:00.000Z | 30 ನಿಮಿಷಗಳು | 30 ನಿಮಿಷಗಳಲ್ಲಿ | 1 ಗಂಟೆ |
+| 2000-01-01T00:15:00.000Z | 15 ನಿಮಿಷಗಳು | 15 ನಿಮಿಷಗಳಲ್ಲಿ | 0 ಗಂಟೆಗಳು |
+| 2000-01-01T00:01:00.000Z | 1 ನಿಮಿಷ | 1 ನಿಮಿಷದಲ್ಲಿ | 0 ಗಂಟೆಗಳು |
+| 2000-01-01T00:00:25.000Z | 25 ಸೆಕೆಂಡುಗಳು | 25 ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ | 0 ಗಂಟೆಗಳು |
+| 2000-01-01T00:00:15.000Z | 15 ಸೆಕೆಂಡುಗಳು | 15 ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ | 0 ಗಂಟೆಗಳು |
+| 2000-01-01T00:00:05.000Z | 5 ಸೆಕೆಂಡುಗಳು | 5 ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ | 0 ಗಂಟೆಗಳು |
+| 2000-01-01T00:00:00.000Z | 0 ಸೆಕೆಂಡುಗಳು | 0 ಸೆಕೆಂಡ್ ಹಿಂದೆ | 0 ಗಂಟೆಗಳು |
+| 1999-12-31T23:59:55.000Z | 5 ಸೆಕೆಂಡುಗಳು | 5 ಸೆಕೆಂಡ್ ಹಿಂದೆ | 0 ಗಂಟೆಗಳು |
+| 1999-12-31T23:59:45.000Z | 15 ಸೆಕೆಂಡುಗಳು | 15 ಸೆಕೆಂಡ್ ಹಿಂದೆ | 0 ಗಂಟೆಗಳು |
+| 1999-12-31T23:59:35.000Z | 25 ಸೆಕೆಂಡುಗಳು | 25 ಸೆಕೆಂಡ್ ಹಿಂದೆ | 0 ಗಂಟೆಗಳು |
+| 1999-12-31T23:59:00.000Z | 1 ನಿಮಿಷ | 1 ನಿಮಿಷದ ಹಿಂದೆ | 0 ಗಂಟೆಗಳು |
+| 1999-12-31T23:45:00.000Z | 15 ನಿಮಿಷಗಳು | 15 ನಿಮಿಷಗಳ ಹಿಂದೆ | 0 ಗಂಟೆಗಳು |
+| 1999-12-31T23:30:00.000Z | 30 ನಿಮಿಷಗಳು | 30 ನಿಮಿಷಗಳ ಹಿಂದೆ | 1 ಗಂಟೆ |
+| 1999-12-31T23:15:00.000Z | 45 ನಿಮಿಷಗಳು | 45 ನಿಮಿಷಗಳ ಹಿಂದೆ | 1 ಗಂಟೆ |
+| 1999-12-31T23:00:00.000Z | 1 ಗಂಟೆ | 1 ಗಂಟೆ ಹಿಂದೆ | 1 ಗಂಟೆ |
+| 1999-12-31T18:00:00.000Z | 6 ಗಂಟೆಗಳು | 6 ಗಂಟೆಗಳ ಹಿಂದೆ | 6 ಗಂಟೆಗಳು |
+| 1999-12-30T00:00:00.000Z | 2 ದಿನಗಳು | 2 ದಿನಗಳ ಹಿಂದೆ | 48 ಗಂಟೆಗಳು |
+| 1999-12-15T00:00:00.000Z | 17 ದಿನಗಳು | 17 ದಿನಗಳ ಹಿಂದೆ | 408 ಗಂಟೆಗಳು |
+| 1999-12-01T00:00:00.000Z | 1 ತಿಂಗಳು | 1 ತಿಂಗಳ ಹಿಂದೆ | 744 ಗಂಟೆಗಳು |
+| 1999-11-01T00:00:00.000Z | 2 ತಿಂಗಳು | 2 ತಿಂಗಳುಗಳ ಹಿಂದೆ | 1464 ಗಂಟೆಗಳು |
+| 1999-06-01T00:00:00.000Z | 7 ತಿಂಗಳು | 7 ತಿಂಗಳುಗಳ ಹಿಂದೆ | 5136 ಗಂಟೆಗಳು |
+| 1999-01-01T00:00:00.000Z | 1 ವರ್ಷ | 1 ವರ್ಷದ ಹಿಂದೆ | 8760 ಗಂಟೆಗಳು |
+| 1998-12-01T00:00:00.000Z | 1 ವರ್ಷ | 1 ವರ್ಷದ ಹಿಂದೆ | 9504 ಗಂಟೆಗಳು |
+| 1998-06-01T00:00:00.000Z | 2 ವರ್ಷಗಳು | 2 ವರ್ಷಗಳ ಹಿಂದೆ | 13896 ಗಂಟೆಗಳು |
+| 1998-01-01T00:00:00.000Z | 2 ವರ್ಷಗಳು | 2 ವರ್ಷಗಳ ಹಿಂದೆ | 17520 ಗಂಟೆಗಳು |
+| 1997-01-01T00:00:00.000Z | 3 ವರ್ಷಗಳು | 3 ವರ್ಷಗಳ ಹಿಂದೆ | 26280 ಗಂಟೆಗಳು |
+| 1996-01-01T00:00:00.000Z | 4 ವರ್ಷಗಳು | 4 ವರ್ಷಗಳ ಹಿಂದೆ | 35064 ಗಂಟೆಗಳು |
+| 1995-01-01T00:00:00.000Z | 5 ವರ್ಷಗಳು | 5 ವರ್ಷಗಳ ಹಿಂದೆ | 43824 ಗಂಟೆಗಳು |
+| 1994-01-01T00:00:00.000Z | 6 ವರ್ಷಗಳು | 6 ವರ್ಷಗಳ ಹಿಂದೆ | 52584 ಗಂಟೆಗಳು |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/1/00 |
+| 2000-01-05T00:00:00.000Z | ಬುಧವಾರ 12:00 ಪೂರ್ವಾಹ್ನ ಕ್ಕೆ |
+| 2000-01-02T00:00:00.000Z | ನಾಳೆ 12:00 ಪೂರ್ವಾಹ್ನ ಕ್ಕೆ |
+| 2000-01-01T00:00:00.000Z | ಇಂದು 12:00 ಪೂರ್ವಾಹ್ನ ಕ್ಕೆ |
+| 1999-12-31T00:00:00.000Z | ನಿನ್ನೆ 12:00 ಪೂರ್ವಾಹ್ನ ಕ್ಕೆ |
+| 1999-12-27T00:00:00.000Z | ಕಳೆದ ಸೋಮವಾರ 12:00 ಪೂರ್ವಾಹ್ನ ಕ್ಕೆ |
+| 1999-12-21T00:00:00.000Z | 21/12/99 |
diff --git a/date-fns/src/locale/ko/_lib/formatDistance/index.js b/date-fns/src/locale/ko/_lib/formatDistance/index.js
new file mode 100644
index 0000000..e05cc3a
--- /dev/null
+++ b/date-fns/src/locale/ko/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: '1초 미만',
+ other: '{{count}}초 미만'
+ },
+
+ xSeconds: {
+ one: '1초',
+ other: '{{count}}초'
+ },
+
+ halfAMinute: '30초',
+
+ lessThanXMinutes: {
+ one: '1분 미만',
+ other: '{{count}}분 미만'
+ },
+
+ xMinutes: {
+ one: '1분',
+ other: '{{count}}분'
+ },
+
+ aboutXHours: {
+ one: '약 1시간',
+ other: '약 {{count}}시간'
+ },
+
+ xHours: {
+ one: '1시간',
+ other: '{{count}}시간'
+ },
+
+ xDays: {
+ one: '1일',
+ other: '{{count}}일'
+ },
+
+ aboutXWeeks: {
+ one: '약 1주',
+ other: '약 {{count}}주'
+ },
+
+ xWeeks: {
+ one: '1주',
+ other: '{{count}}주'
+ },
+
+ aboutXMonths: {
+ one: '약 1개월',
+ other: '약 {{count}}개월'
+ },
+
+ xMonths: {
+ one: '1개월',
+ other: '{{count}}개월'
+ },
+
+ aboutXYears: {
+ one: '약 1년',
+ other: '약 {{count}}년'
+ },
+
+ xYears: {
+ one: '1년',
+ other: '{{count}}년'
+ },
+
+ overXYears: {
+ one: '1년 이상',
+ other: '{{count}}년 이상'
+ },
+
+ almostXYears: {
+ one: '거의 1년',
+ other: '거의 {{count}}년'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + ' 후'
+ } else {
+ return result + ' 전'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ko/_lib/formatLong/index.js b/date-fns/src/locale/ko/_lib/formatLong/index.js
new file mode 100644
index 0000000..6b40e1d
--- /dev/null
+++ b/date-fns/src/locale/ko/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'y년 M월 d일 EEEE',
+ long: 'y년 M월 d일',
+ medium: 'y.MM.dd',
+ short: 'y.MM.dd'
+}
+
+var timeFormats = {
+ full: 'a H시 mm분 ss초 zzzz',
+ long: 'a H:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ko/_lib/formatRelative/index.js b/date-fns/src/locale/ko/_lib/formatRelative/index.js
new file mode 100644
index 0000000..724448b
--- /dev/null
+++ b/date-fns/src/locale/ko/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'지난' eeee p",
+ yesterday: "'어제' p",
+ today: "'오늘' p",
+ tomorrow: "'내일' p",
+ nextWeek: "'다음' eeee p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ko/_lib/localize/index.js b/date-fns/src/locale/ko/_lib/localize/index.js
new file mode 100644
index 0000000..71a4f96
--- /dev/null
+++ b/date-fns/src/locale/ko/_lib/localize/index.js
@@ -0,0 +1,171 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['BC', 'AD'],
+ abbreviated: ['BC', 'AD'],
+ wide: ['기원전', '서기']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1분기', '2분기', '3분기', '4분기']
+}
+
+var monthValues = {
+ narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ abbreviated: [
+ '1월',
+ '2월',
+ '3월',
+ '4월',
+ '5월',
+ '6월',
+ '7월',
+ '8월',
+ '9월',
+ '10월',
+ '11월',
+ '12월'
+ ],
+ wide: [
+ '1월',
+ '2월',
+ '3월',
+ '4월',
+ '5월',
+ '6월',
+ '7월',
+ '8월',
+ '9월',
+ '10월',
+ '11월',
+ '12월'
+ ]
+}
+
+var dayValues = {
+ narrow: ['일', '월', '화', '수', '목', '금', '토'],
+ short: ['일', '월', '화', '수', '목', '금', '토'],
+ abbreviated: ['일', '월', '화', '수', '목', '금', '토'],
+ wide: ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: '오전',
+ pm: '오후',
+ midnight: '자정',
+ noon: '정오',
+ morning: '아침',
+ afternoon: '오후',
+ evening: '저녁',
+ night: '밤'
+ },
+ abbreviated: {
+ am: '오전',
+ pm: '오후',
+ midnight: '자정',
+ noon: '정오',
+ morning: '아침',
+ afternoon: '오후',
+ evening: '저녁',
+ night: '밤'
+ },
+ wide: {
+ am: '오전',
+ pm: '오후',
+ midnight: '자정',
+ noon: '정오',
+ morning: '아침',
+ afternoon: '오후',
+ evening: '저녁',
+ night: '밤'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: '오전',
+ pm: '오후',
+ midnight: '자정',
+ noon: '정오',
+ morning: '아침',
+ afternoon: '오후',
+ evening: '저녁',
+ night: '밤'
+ },
+ abbreviated: {
+ am: '오전',
+ pm: '오후',
+ midnight: '자정',
+ noon: '정오',
+ morning: '아침',
+ afternoon: '오후',
+ evening: '저녁',
+ night: '밤'
+ },
+ wide: {
+ am: '오전',
+ pm: '오후',
+ midnight: '자정',
+ noon: '정오',
+ morning: '아침',
+ afternoon: '오후',
+ evening: '저녁',
+ night: '밤'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+
+ switch (unit) {
+ case 'minute':
+ case 'second':
+ return number
+ case 'date':
+ return number + '일'
+ default:
+ return number + '번째'
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ko/_lib/match/index.js b/date-fns/src/locale/ko/_lib/match/index.js
new file mode 100644
index 0000000..7f495af
--- /dev/null
+++ b/date-fns/src/locale/ko/_lib/match/index.js
@@ -0,0 +1,126 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(일|번째)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
+ abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
+ wide: /^(기원전|서기)/i
+}
+
+var parseEraPatterns = {
+ any: [/^(bc|기원전)/i, /^(ad|서기)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234]사?분기/i
+}
+
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(1[012]|[123456789])/,
+ abbreviated: /^(1[012]|[123456789])월/i,
+ wide: /^(1[012]|[123456789])월/i
+}
+
+var parseMonthPatterns = {
+ any: [
+ /^1월?$/,
+ /^2/,
+ /^3/,
+ /^4/,
+ /^5/,
+ /^6/,
+ /^7/,
+ /^8/,
+ /^9/,
+ /^10/,
+ /^11/,
+ /^12/
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[일월화수목금토]/,
+ short: /^[일월화수목금토]/,
+ abbreviated: /^[일월화수목금토]/,
+ wide: /^[일월화수목금토]요일/
+}
+
+var parseDayPatterns = {
+ any: [/^일/, /^월/, /^화/, /^수/, /^목/, /^금/, /^토/]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(am|pm|오전|오후|자정|정오|아침|저녁|밤)/i
+}
+
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^(am|오전)/i,
+ pm: /^(pm|오후)/i,
+ midnight: /^자정/i,
+ noon: /^정오/i,
+ morning: /^아침/i,
+ afternoon: /^오후/i,
+ evening: /^저녁/i,
+ night: /^밤/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ko/index.d.ts b/date-fns/src/locale/ko/index.d.ts
new file mode 100644
index 0000000..eac8228
--- /dev/null
+++ b/date-fns/src/locale/ko/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ko } from 'date-fns/locale'
+export default ko
diff --git a/date-fns/src/locale/ko/index.js b/date-fns/src/locale/ko/index.js
new file mode 100644
index 0000000..c0725f8
--- /dev/null
+++ b/date-fns/src/locale/ko/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Korean locale.
+ * @language Korean
+ * @iso-639-2 kor
+ * @author Hong Chulju [@angdev]{@link https://github.com/angdev}
+ * @author Lee Seoyoen [@iamssen]{@link https://github.com/iamssen}
+ * @author Taiki IKeda [@so99ynoodles]{@link https://github.com/so99ynoodles}
+ */
+var locale = {
+ code: 'ko',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ko/index.js.flow b/date-fns/src/locale/ko/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ko/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ko/snapshot.md b/date-fns/src/locale/ko/snapshot.md
new file mode 100644
index 0000000..9618884
--- /dev/null
+++ b/date-fns/src/locale/ko/snapshot.md
@@ -0,0 +1,304 @@
+# Korean (ko) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987번째 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5번째 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987번째 | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5번째 | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1번째 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2번째 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1분기 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2분기 | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1번째 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2번째 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1분기 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2분기 | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2번째 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7번째 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | 2월 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7월 | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | 2월 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7월 | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2번째 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7번째 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | 2월 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7월 | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | 2월 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7월 | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1번째 | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49번째 | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1번째 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48번째 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11일 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28일 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42번째 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365번째 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | 월요일 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금요일 | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1번째 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5번째 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | 월요일 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금요일 | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2번째 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6번째 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | 월요일 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금요일 | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2번째 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6번째 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | 월요일 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금요일 | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | 월 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 금 | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 오전 | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | 아침 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 저녁 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 밤 | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | 아침 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 저녁 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 밤 | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | 아침 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 저녁 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 밤 | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | 아침 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 저녁 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 밤 | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | 아침 | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 오후 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 저녁 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 밤 | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11번째 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11번째 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11번째 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23번째 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11번째 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11번째 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11번째 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23번째 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987.02.11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453.05.29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 1987.02.11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453.05.29 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987년 2월 11일 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453년 5월 29일 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 1987년 2월 11일 수요일 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453년 5월 29일 일요일 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 오후 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 오후 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 오후 12시 13분 14초 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 오후 23시 59분 59초 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987.02.11 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453.05.29 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 1987.02.11 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453.05.29 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987년 2월 11일 오후 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453년 5월 29일 오후 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 1987년 2월 11일 수요일 오후 12시 13분 14초 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453년 5월 29일 일요일 오후 23시 59분 59초 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------- | ---------------------- | ----------------- |
+| 2006-01-01T00:00:00.000Z | 약 6년 | 약 6년 | 약 6년 후 |
+| 2005-01-01T00:00:00.000Z | 약 5년 | 약 5년 | 약 5년 후 |
+| 2004-01-01T00:00:00.000Z | 약 4년 | 약 4년 | 약 4년 후 |
+| 2003-01-01T00:00:00.000Z | 약 3년 | 약 3년 | 약 3년 후 |
+| 2002-01-01T00:00:00.000Z | 약 2년 | 약 2년 | 약 2년 후 |
+| 2001-06-01T00:00:00.000Z | 1년 이상 | 1년 이상 | 1년 이상 후 |
+| 2001-02-01T00:00:00.000Z | 약 1년 | 약 1년 | 약 1년 후 |
+| 2001-01-01T00:00:00.000Z | 약 1년 | 약 1년 | 약 1년 후 |
+| 2000-06-01T00:00:00.000Z | 5개월 | 5개월 | 5개월 후 |
+| 2000-03-01T00:00:00.000Z | 2개월 | 2개월 | 2개월 후 |
+| 2000-02-01T00:00:00.000Z | 약 1개월 | 약 1개월 | 약 1개월 후 |
+| 2000-01-15T00:00:00.000Z | 14일 | 14일 | 14일 후 |
+| 2000-01-02T00:00:00.000Z | 1일 | 1일 | 1일 후 |
+| 2000-01-01T06:00:00.000Z | 약 6시간 | 약 6시간 | 약 6시간 후 |
+| 2000-01-01T01:00:00.000Z | 약 1시간 | 약 1시간 | 약 1시간 후 |
+| 2000-01-01T00:45:00.000Z | 약 1시간 | 약 1시간 | 약 1시간 후 |
+| 2000-01-01T00:30:00.000Z | 30분 | 30분 | 30분 후 |
+| 2000-01-01T00:15:00.000Z | 15분 | 15분 | 15분 후 |
+| 2000-01-01T00:01:00.000Z | 1분 | 1분 | 1분 후 |
+| 2000-01-01T00:00:25.000Z | 1분 미만 | 30초 | 1분 미만 후 |
+| 2000-01-01T00:00:15.000Z | 1분 미만 | 20초 미만 | 1분 미만 후 |
+| 2000-01-01T00:00:05.000Z | 1분 미만 | 10초 미만 | 1분 미만 후 |
+| 2000-01-01T00:00:00.000Z | 1분 미만 | 5초 미만 | 1분 미만 전 |
+| 1999-12-31T23:59:55.000Z | 1분 미만 | 10초 미만 | 1분 미만 전 |
+| 1999-12-31T23:59:45.000Z | 1분 미만 | 20초 미만 | 1분 미만 전 |
+| 1999-12-31T23:59:35.000Z | 1분 미만 | 30초 | 1분 미만 전 |
+| 1999-12-31T23:59:00.000Z | 1분 | 1분 | 1분 전 |
+| 1999-12-31T23:45:00.000Z | 15분 | 15분 | 15분 전 |
+| 1999-12-31T23:30:00.000Z | 30분 | 30분 | 30분 전 |
+| 1999-12-31T23:15:00.000Z | 약 1시간 | 약 1시간 | 약 1시간 전 |
+| 1999-12-31T23:00:00.000Z | 약 1시간 | 약 1시간 | 약 1시간 전 |
+| 1999-12-31T18:00:00.000Z | 약 6시간 | 약 6시간 | 약 6시간 전 |
+| 1999-12-30T00:00:00.000Z | 2일 | 2일 | 2일 전 |
+| 1999-12-15T00:00:00.000Z | 17일 | 17일 | 17일 전 |
+| 1999-12-01T00:00:00.000Z | 약 1개월 | 약 1개월 | 약 1개월 전 |
+| 1999-11-01T00:00:00.000Z | 2개월 | 2개월 | 2개월 전 |
+| 1999-06-01T00:00:00.000Z | 7개월 | 7개월 | 7개월 전 |
+| 1999-01-01T00:00:00.000Z | 약 1년 | 약 1년 | 약 1년 전 |
+| 1998-12-01T00:00:00.000Z | 약 1년 | 약 1년 | 약 1년 전 |
+| 1998-06-01T00:00:00.000Z | 1년 이상 | 1년 이상 | 1년 이상 전 |
+| 1998-01-01T00:00:00.000Z | 약 2년 | 약 2년 | 약 2년 전 |
+| 1997-01-01T00:00:00.000Z | 약 3년 | 약 3년 | 약 3년 전 |
+| 1996-01-01T00:00:00.000Z | 약 4년 | 약 4년 | 약 4년 전 |
+| 1995-01-01T00:00:00.000Z | 약 5년 | 약 5년 | 약 5년 전 |
+| 1994-01-01T00:00:00.000Z | 약 6년 | 약 6년 | 약 6년 전 |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------ | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6년 | 6년 후 | 52608시간 |
+| 2005-01-01T00:00:00.000Z | 5년 | 5년 후 | 43848시간 |
+| 2004-01-01T00:00:00.000Z | 4년 | 4년 후 | 35064시간 |
+| 2003-01-01T00:00:00.000Z | 3년 | 3년 후 | 26304시간 |
+| 2002-01-01T00:00:00.000Z | 2년 | 2년 후 | 17544시간 |
+| 2001-06-01T00:00:00.000Z | 1년 | 1년 후 | 12408시간 |
+| 2001-02-01T00:00:00.000Z | 1년 | 1년 후 | 9528시간 |
+| 2001-01-01T00:00:00.000Z | 1년 | 1년 후 | 8784시간 |
+| 2000-06-01T00:00:00.000Z | 5개월 | 5개월 후 | 3648시간 |
+| 2000-03-01T00:00:00.000Z | 2개월 | 2개월 후 | 1440시간 |
+| 2000-02-01T00:00:00.000Z | 1개월 | 1개월 후 | 744시간 |
+| 2000-01-15T00:00:00.000Z | 14일 | 14일 후 | 336시간 |
+| 2000-01-02T00:00:00.000Z | 1일 | 1일 후 | 24시간 |
+| 2000-01-01T06:00:00.000Z | 6시간 | 6시간 후 | 6시간 |
+| 2000-01-01T01:00:00.000Z | 1시간 | 1시간 후 | 1시간 |
+| 2000-01-01T00:45:00.000Z | 45분 | 45분 후 | 1시간 |
+| 2000-01-01T00:30:00.000Z | 30분 | 30분 후 | 1시간 |
+| 2000-01-01T00:15:00.000Z | 15분 | 15분 후 | 0시간 |
+| 2000-01-01T00:01:00.000Z | 1분 | 1분 후 | 0시간 |
+| 2000-01-01T00:00:25.000Z | 25초 | 25초 후 | 0시간 |
+| 2000-01-01T00:00:15.000Z | 15초 | 15초 후 | 0시간 |
+| 2000-01-01T00:00:05.000Z | 5초 | 5초 후 | 0시간 |
+| 2000-01-01T00:00:00.000Z | 0초 | 0초 전 | 0시간 |
+| 1999-12-31T23:59:55.000Z | 5초 | 5초 전 | 0시간 |
+| 1999-12-31T23:59:45.000Z | 15초 | 15초 전 | 0시간 |
+| 1999-12-31T23:59:35.000Z | 25초 | 25초 전 | 0시간 |
+| 1999-12-31T23:59:00.000Z | 1분 | 1분 전 | 0시간 |
+| 1999-12-31T23:45:00.000Z | 15분 | 15분 전 | 0시간 |
+| 1999-12-31T23:30:00.000Z | 30분 | 30분 전 | 1시간 |
+| 1999-12-31T23:15:00.000Z | 45분 | 45분 전 | 1시간 |
+| 1999-12-31T23:00:00.000Z | 1시간 | 1시간 전 | 1시간 |
+| 1999-12-31T18:00:00.000Z | 6시간 | 6시간 전 | 6시간 |
+| 1999-12-30T00:00:00.000Z | 2일 | 2일 전 | 48시간 |
+| 1999-12-15T00:00:00.000Z | 17일 | 17일 전 | 408시간 |
+| 1999-12-01T00:00:00.000Z | 1개월 | 1개월 전 | 744시간 |
+| 1999-11-01T00:00:00.000Z | 2개월 | 2개월 전 | 1464시간 |
+| 1999-06-01T00:00:00.000Z | 7개월 | 7개월 전 | 5136시간 |
+| 1999-01-01T00:00:00.000Z | 1년 | 1년 전 | 8760시간 |
+| 1998-12-01T00:00:00.000Z | 1년 | 1년 전 | 9504시간 |
+| 1998-06-01T00:00:00.000Z | 2년 | 2년 전 | 13896시간 |
+| 1998-01-01T00:00:00.000Z | 2년 | 2년 전 | 17520시간 |
+| 1997-01-01T00:00:00.000Z | 3년 | 3년 전 | 26280시간 |
+| 1996-01-01T00:00:00.000Z | 4년 | 4년 전 | 35064시간 |
+| 1995-01-01T00:00:00.000Z | 5년 | 5년 전 | 43824시간 |
+| 1994-01-01T00:00:00.000Z | 6년 | 6년 전 | 52584시간 |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------- |
+| 2000-01-10T00:00:00.000Z | 2000.01.10 |
+| 2000-01-05T00:00:00.000Z | 다음 수요일 00:00 |
+| 2000-01-02T00:00:00.000Z | 내일 00:00 |
+| 2000-01-01T00:00:00.000Z | 오늘 00:00 |
+| 1999-12-31T00:00:00.000Z | 어제 00:00 |
+| 1999-12-27T00:00:00.000Z | 지난 월요일 00:00 |
+| 1999-12-21T00:00:00.000Z | 1999.12.21 |
diff --git a/date-fns/src/locale/lb/_lib/formatDistance/index.js b/date-fns/src/locale/lb/_lib/formatDistance/index.js
new file mode 100644
index 0000000..3cde42c
--- /dev/null
+++ b/date-fns/src/locale/lb/_lib/formatDistance/index.js
@@ -0,0 +1,231 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ standalone: {
+ one: 'manner wéi eng Sekonn',
+ other: 'manner wéi {{count}} Sekonnen'
+ },
+ withPreposition: {
+ one: 'manner wéi enger Sekonn',
+ other: 'manner wéi {{count}} Sekonnen'
+ }
+ },
+
+ xSeconds: {
+ standalone: {
+ one: 'eng Sekonn',
+ other: '{{count}} Sekonnen'
+ },
+ withPreposition: {
+ one: 'enger Sekonn',
+ other: '{{count}} Sekonnen'
+ }
+ },
+
+ halfAMinute: {
+ standalone: 'eng hallef Minutt',
+ withPreposition: 'enger hallwer Minutt'
+ },
+
+ lessThanXMinutes: {
+ standalone: {
+ one: 'manner wéi eng Minutt',
+ other: 'manner wéi {{count}} Minutten'
+ },
+ withPreposition: {
+ one: 'manner wéi enger Minutt',
+ other: 'manner wéi {{count}} Minutten'
+ }
+ },
+
+ xMinutes: {
+ standalone: {
+ one: 'eng Minutt',
+ other: '{{count}} Minutten'
+ },
+ withPreposition: {
+ one: 'enger Minutt',
+ other: '{{count}} Minutten'
+ }
+ },
+
+ aboutXHours: {
+ standalone: {
+ one: 'ongeféier eng Stonn',
+ other: 'ongeféier {{count}} Stonnen'
+ },
+ withPreposition: {
+ one: 'ongeféier enger Stonn',
+ other: 'ongeféier {{count}} Stonnen'
+ }
+ },
+
+ xHours: {
+ standalone: {
+ one: 'eng Stonn',
+ other: '{{count}} Stonnen'
+ },
+ withPreposition: {
+ one: 'enger Stonn',
+ other: '{{count}} Stonnen'
+ }
+ },
+
+ xDays: {
+ standalone: {
+ one: 'een Dag',
+ other: '{{count}} Deeg'
+ },
+ withPreposition: {
+ one: 'engem Dag',
+ other: '{{count}} Deeg'
+ }
+ },
+
+ aboutXWeeks: {
+ standalone: {
+ one: 'ongeféier eng Woch',
+ other: 'ongeféier {{count}} Wochen'
+ },
+ withPreposition: {
+ one: 'ongeféier enger Woche',
+ other: 'ongeféier {{count}} Wochen'
+ }
+ },
+
+ xWeeks: {
+ standalone: {
+ one: 'eng Woch',
+ other: '{{count}} Wochen'
+ },
+ withPreposition: {
+ one: 'enger Woch',
+ other: '{{count}} Wochen'
+ }
+ },
+
+ aboutXMonths: {
+ standalone: {
+ one: 'ongeféier ee Mount',
+ other: 'ongeféier {{count}} Méint'
+ },
+ withPreposition: {
+ one: 'ongeféier engem Mount',
+ other: 'ongeféier {{count}} Méint'
+ }
+ },
+
+ xMonths: {
+ standalone: {
+ one: 'ee Mount',
+ other: '{{count}} Méint'
+ },
+ withPreposition: {
+ one: 'engem Mount',
+ other: '{{count}} Méint'
+ }
+ },
+
+ aboutXYears: {
+ standalone: {
+ one: 'ongeféier ee Joer',
+ other: 'ongeféier {{count}} Joer'
+ },
+ withPreposition: {
+ one: 'ongeféier engem Joer',
+ other: 'ongeféier {{count}} Joer'
+ }
+ },
+
+ xYears: {
+ standalone: {
+ one: 'ee Joer',
+ other: '{{count}} Joer'
+ },
+ withPreposition: {
+ one: 'engem Joer',
+ other: '{{count}} Joer'
+ }
+ },
+
+ overXYears: {
+ standalone: {
+ one: 'méi wéi ee Joer',
+ other: 'méi wéi {{count}} Joer'
+ },
+ withPreposition: {
+ one: 'méi wéi engem Joer',
+ other: 'méi wéi {{count}} Joer'
+ }
+ },
+
+ almostXYears: {
+ standalone: {
+ one: 'bal ee Joer',
+ other: 'bal {{count}} Joer'
+ },
+ withPreposition: {
+ one: 'bal engem Joer',
+ other: 'bal {{count}} Joer'
+ }
+ }
+}
+
+var EXCEPTION_CONSONANTS = ['d', 'h', 'n', 't', 'z']
+var VOWELS = ['a,', 'e', 'i', 'o', 'u']
+var DIGITS_SPOKEN_N_NEEDED = [0, 1, 2, 3, 8, 9]
+var FIRST_TWO_DIGITS_SPOKEN_NO_N_NEEDED = [40, 50, 60, 70]
+
+// Eifeler Regel
+function isFinalNNeeded(nextWords) {
+ var firstLetter = nextWords.charAt(0).toLowerCase()
+ if (
+ VOWELS.indexOf(firstLetter) != -1 ||
+ EXCEPTION_CONSONANTS.indexOf(firstLetter) != -1
+ ) {
+ return true
+ }
+
+ // Numbers would need to converted into words for checking.
+ // Therefore, I have listed the digits that require a preceeding n with a few exceptions.
+ var firstWord = nextWords.split(' ')[0]
+ var number = parseInt(firstWord)
+ if (
+ !isNaN(number) &&
+ DIGITS_SPOKEN_N_NEEDED.indexOf(number % 10) != -1 &&
+ FIRST_TWO_DIGITS_SPOKEN_NO_N_NEEDED.indexOf(
+ parseInt(firstWord.substring(0, 2))
+ ) == -1
+ ) {
+ return true
+ }
+
+ // Omit other checks as they are not expected here.
+ return false
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var usageGroup = options.addSuffix
+ ? formatDistanceLocale[token].withPreposition
+ : formatDistanceLocale[token].standalone
+
+ var result
+ if (typeof usageGroup === 'string') {
+ result = usageGroup
+ } else if (count === 1) {
+ result = usageGroup.one
+ } else {
+ result = usageGroup.other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'a' + (isFinalNNeeded(result) ? 'n' : '') + ' ' + result
+ } else {
+ return 'viru' + (isFinalNNeeded(result) ? 'n' : '') + ' ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/lb/_lib/formatLong/index.js b/date-fns/src/locale/lb/_lib/formatLong/index.js
new file mode 100644
index 0000000..fd4a4ed
--- /dev/null
+++ b/date-fns/src/locale/lb/_lib/formatLong/index.js
@@ -0,0 +1,42 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008
+var dateFormats = {
+ full: 'EEEE, do MMMM y', // Méindeg, 7. Januar 2018
+ long: 'do MMMM y', // 7. Januar 2018
+ medium: 'do MMM y', // 7. Jan 2018
+ short: 'dd.MM.yy' // 07.01.18
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'um' {{time}}",
+ long: "{{date}} 'um' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/lb/_lib/formatRelative/index.js b/date-fns/src/locale/lb/_lib/formatRelative/index.js
new file mode 100644
index 0000000..75062cb
--- /dev/null
+++ b/date-fns/src/locale/lb/_lib/formatRelative/index.js
@@ -0,0 +1,27 @@
+var formatRelativeLocale = {
+ lastWeek: function(date) {
+ var day = date.getUTCDay()
+ var result = "'läschte"
+ if (day === 2 || day === 4) {
+ // Eifeler Regel: Add an n before the consonant d; Here "Dënschdeg" "and Donneschde".
+ result += 'n'
+ }
+ result += "' eeee 'um' p"
+ return result
+ },
+ yesterday: "'gëschter um' p",
+ today: "'haut um' p",
+ tomorrow: "'moien um' p",
+ nextWeek: "eeee 'um' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, date, _baseDate, _options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/lb/_lib/localize/index.js b/date-fns/src/locale/lb/_lib/localize/index.js
new file mode 100644
index 0000000..33ee0b1
--- /dev/null
+++ b/date-fns/src/locale/lb/_lib/localize/index.js
@@ -0,0 +1,167 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['v.Chr.', 'n.Chr.'],
+ abbreviated: ['v.Chr.', 'n.Chr.'],
+ wide: ['viru Christus', 'no Christus']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Jan',
+ 'Feb',
+ 'Mäe',
+ 'Abr',
+ 'Mee',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Okt',
+ 'Nov',
+ 'Dez'
+ ],
+ wide: [
+ 'Januar',
+ 'Februar',
+ 'Mäerz',
+ 'Abrëll',
+ 'Mee',
+ 'Juni',
+ 'Juli',
+ 'August',
+ 'September',
+ 'Oktober',
+ 'November',
+ 'Dezember'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],
+ short: ['So', 'Mé', 'Dë', 'Më', 'Do', 'Fr', 'Sa'],
+ abbreviated: ['So.', 'Mé.', 'Dë.', 'Më.', 'Do.', 'Fr.', 'Sa.'],
+ wide: [
+ 'Sonndeg',
+ 'Méindeg',
+ 'Dënschdeg',
+ 'Mëttwoch',
+ 'Donneschdeg',
+ 'Freideg',
+ 'Samschdeg'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'mo.',
+ pm: 'nomë.',
+ midnight: 'Mëtternuecht',
+ noon: 'Mëtteg',
+ morning: 'Moien',
+ afternoon: 'Nomëtteg',
+ evening: 'Owend',
+ night: 'Nuecht'
+ },
+ abbreviated: {
+ am: 'moies',
+ pm: 'nomëttes',
+ midnight: 'Mëtternuecht',
+ noon: 'Mëtteg',
+ morning: 'Moien',
+ afternoon: 'Nomëtteg',
+ evening: 'Owend',
+ night: 'Nuecht'
+ },
+ wide: {
+ am: 'moies',
+ pm: 'nomëttes',
+ midnight: 'Mëtternuecht',
+ noon: 'Mëtteg',
+ morning: 'Moien',
+ afternoon: 'Nomëtteg',
+ evening: 'Owend',
+ night: 'Nuecht'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'mo.',
+ pm: 'nom.',
+ midnight: 'Mëtternuecht',
+ noon: 'mëttes',
+ morning: 'moies',
+ afternoon: 'nomëttes',
+ evening: 'owes',
+ night: 'nuets'
+ },
+ abbreviated: {
+ am: 'moies',
+ pm: 'nomëttes',
+ midnight: 'Mëtternuecht',
+ noon: 'mëttes',
+ morning: 'moies',
+ afternoon: 'nomëttes',
+ evening: 'owes',
+ night: 'nuets'
+ },
+ wide: {
+ am: 'moies',
+ pm: 'nomëttes',
+ midnight: 'Mëtternuecht',
+ noon: 'mëttes',
+ morning: 'moies',
+ afternoon: 'nomëttes',
+ evening: 'owes',
+ night: 'nuets'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/lb/_lib/match/index.js b/date-fns/src/locale/lb/_lib/match/index.js
new file mode 100644
index 0000000..5935d86
--- /dev/null
+++ b/date-fns/src/locale/lb/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(\.)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,
+ abbreviated: /^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,
+ wide: /^(viru Christus|virun eiser Zäitrechnung|no Christus|eiser Zäitrechnung)/i
+}
+var parseEraPatterns = {
+ any: [/^v/i, /^n/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](\.)? Quartal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mäe|abr|mee|jun|jul|aug|sep|okt|nov|dez)/i,
+ wide: /^(januar|februar|mäerz|abrëll|mee|juni|juli|august|september|oktober|november|dezember)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mä/i,
+ /^ab/i,
+ /^me/i,
+ /^jun/i,
+ /^jul/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smdf]/i,
+ short: /^(so|mé|dë|më|do|fr|sa)/i,
+ abbreviated: /^(son?|méi?|dën?|mët?|don?|fre?|sam?)\.?/i,
+ wide: /^(sonndeg|méindeg|dënschdeg|mëttwoch|donneschdeg|freideg|samschdeg)/i
+}
+var parseDayPatterns = {
+ any: [/^so/i, /^mé/i, /^dë/i, /^më/i, /^do/i, /^f/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(mo\.?|nomë\.?|Mëtternuecht|mëttes|moies|nomëttes|owes|nuets)/i,
+ abbreviated: /^(moi\.?|nomët\.?|Mëtternuecht|mëttes|moies|nomëttes|owes|nuets)/i,
+ wide: /^(moies|nomëttes|Mëtternuecht|mëttes|moies|nomëttes|owes|nuets)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^m/i,
+ pm: /^n/i,
+ midnight: /^Mëtter/i,
+ noon: /^mëttes/i,
+ morning: /moies/i,
+ afternoon: /nomëttes/i, // will never be matched. Afternoon is matched by `pm`
+ evening: /owes/i,
+ night: /nuets/i // will never be matched. Night is matched by `pm`
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/lb/index.d.ts b/date-fns/src/locale/lb/index.d.ts
new file mode 100644
index 0000000..727529b
--- /dev/null
+++ b/date-fns/src/locale/lb/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lb } from 'date-fns/locale'
+export default lb
diff --git a/date-fns/src/locale/lb/index.js b/date-fns/src/locale/lb/index.js
new file mode 100644
index 0000000..25c95c2
--- /dev/null
+++ b/date-fns/src/locale/lb/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Luxembourgish locale.
+ * @language Luxembourgish
+ * @iso-639-2 ltz
+ * @author Daniel Waxweiler [@dwaxweiler]{@link https://github.com/dwaxweiler}
+ */
+var locale = {
+ code: 'lb',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/lb/index.js.flow b/date-fns/src/locale/lb/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/lb/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/lb/snapshot.md b/date-fns/src/locale/lb/snapshot.md
new file mode 100644
index 0000000..0820db5
--- /dev/null
+++ b/date-fns/src/locale/lb/snapshot.md
@@ -0,0 +1,304 @@
+# Luxembourgish (lb) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. Quartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. Quartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. Quartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. Quartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mé. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Mé. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Mé. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Méindeg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freideg | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Mé | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Mé. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Méindeg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freideg | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Mé | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Mé. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Méindeg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freideg | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Mé | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Mé. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Méindeg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Freideg | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Mé | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | moies | Invalid Date |
+| | aa | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | moies | Invalid Date |
+| | aaa | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | moies | Invalid Date |
+| | aaaa | 2019-02-11T11:13:14.015Z | moies | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nomëttes | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | moies | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nom. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | nom. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | mo. | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | moies | Invalid Date |
+| | bb | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | moies | Invalid Date |
+| | bbb | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | moies | Invalid Date |
+| | bbbb | 2019-02-11T11:13:14.015Z | moies | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | nomëttes | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | moies | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | mo. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nom. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | nom. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | mo. | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | owes | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nuets | 2019-02-11T12:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | owes | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nuets | 2019-02-11T12:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | owes | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nuets | 2019-02-11T12:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | moies | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | owes | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nuets | 2019-02-11T12:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | moies | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | nomëttes | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | owes | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | nuets | 2019-02-11T12:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.87 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.53 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. Feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. Mee 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. Februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. Mee 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Mëttwoch, 11. Februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Sonndeg, 29. Mee 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.87 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.53 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. Feb 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. Mee 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. Februar 1987 um 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. Mee 1453 um 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Mëttwoch, 11. Februar 1987 um 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Sonndeg, 29. Mee 1453 um 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------------- | ---------------------- | ---------------------------- |
+| 2006-01-01T00:00:00.000Z | ongeféier 6 Joer | ongeféier 6 Joer | an ongeféier 6 Joer |
+| 2005-01-01T00:00:00.000Z | ongeféier 5 Joer | ongeféier 5 Joer | an ongeféier 5 Joer |
+| 2004-01-01T00:00:00.000Z | ongeféier 4 Joer | ongeféier 4 Joer | an ongeféier 4 Joer |
+| 2003-01-01T00:00:00.000Z | ongeféier 3 Joer | ongeféier 3 Joer | an ongeféier 3 Joer |
+| 2002-01-01T00:00:00.000Z | ongeféier 2 Joer | ongeféier 2 Joer | an ongeféier 2 Joer |
+| 2001-06-01T00:00:00.000Z | méi wéi ee Joer | méi wéi ee Joer | a méi wéi engem Joer |
+| 2001-02-01T00:00:00.000Z | ongeféier ee Joer | ongeféier ee Joer | an ongeféier engem Joer |
+| 2001-01-01T00:00:00.000Z | ongeféier ee Joer | ongeféier ee Joer | an ongeféier engem Joer |
+| 2000-06-01T00:00:00.000Z | 5 Méint | 5 Méint | a 5 Méint |
+| 2000-03-01T00:00:00.000Z | 2 Méint | 2 Méint | an 2 Méint |
+| 2000-02-01T00:00:00.000Z | ongeféier ee Mount | ongeféier ee Mount | an ongeféier engem Mount |
+| 2000-01-15T00:00:00.000Z | 14 Deeg | 14 Deeg | a 14 Deeg |
+| 2000-01-02T00:00:00.000Z | een Dag | een Dag | an engem Dag |
+| 2000-01-01T06:00:00.000Z | ongeféier 6 Stonnen | ongeféier 6 Stonnen | an ongeféier 6 Stonnen |
+| 2000-01-01T01:00:00.000Z | ongeféier eng Stonn | ongeféier eng Stonn | an ongeféier enger Stonn |
+| 2000-01-01T00:45:00.000Z | ongeféier eng Stonn | ongeféier eng Stonn | an ongeféier enger Stonn |
+| 2000-01-01T00:30:00.000Z | 30 Minutten | 30 Minutten | an 30 Minutten |
+| 2000-01-01T00:15:00.000Z | 15 Minutten | 15 Minutten | a 15 Minutten |
+| 2000-01-01T00:01:00.000Z | eng Minutt | eng Minutt | an enger Minutt |
+| 2000-01-01T00:00:25.000Z | manner wéi eng Minutt | eng hallef Minutt | a manner wéi enger Minutt |
+| 2000-01-01T00:00:15.000Z | manner wéi eng Minutt | manner wéi 20 Sekonnen | a manner wéi enger Minutt |
+| 2000-01-01T00:00:05.000Z | manner wéi eng Minutt | manner wéi 10 Sekonnen | a manner wéi enger Minutt |
+| 2000-01-01T00:00:00.000Z | manner wéi eng Minutt | manner wéi 5 Sekonnen | viru manner wéi enger Minutt |
+| 1999-12-31T23:59:55.000Z | manner wéi eng Minutt | manner wéi 10 Sekonnen | viru manner wéi enger Minutt |
+| 1999-12-31T23:59:45.000Z | manner wéi eng Minutt | manner wéi 20 Sekonnen | viru manner wéi enger Minutt |
+| 1999-12-31T23:59:35.000Z | manner wéi eng Minutt | eng hallef Minutt | viru manner wéi enger Minutt |
+| 1999-12-31T23:59:00.000Z | eng Minutt | eng Minutt | virun enger Minutt |
+| 1999-12-31T23:45:00.000Z | 15 Minutten | 15 Minutten | viru 15 Minutten |
+| 1999-12-31T23:30:00.000Z | 30 Minutten | 30 Minutten | virun 30 Minutten |
+| 1999-12-31T23:15:00.000Z | ongeféier eng Stonn | ongeféier eng Stonn | virun ongeféier enger Stonn |
+| 1999-12-31T23:00:00.000Z | ongeféier eng Stonn | ongeféier eng Stonn | virun ongeféier enger Stonn |
+| 1999-12-31T18:00:00.000Z | ongeféier 6 Stonnen | ongeféier 6 Stonnen | virun ongeféier 6 Stonnen |
+| 1999-12-30T00:00:00.000Z | 2 Deeg | 2 Deeg | virun 2 Deeg |
+| 1999-12-15T00:00:00.000Z | 17 Deeg | 17 Deeg | viru 17 Deeg |
+| 1999-12-01T00:00:00.000Z | ongeféier ee Mount | ongeféier ee Mount | virun ongeféier engem Mount |
+| 1999-11-01T00:00:00.000Z | 2 Méint | 2 Méint | virun 2 Méint |
+| 1999-06-01T00:00:00.000Z | 7 Méint | 7 Méint | viru 7 Méint |
+| 1999-01-01T00:00:00.000Z | ongeféier ee Joer | ongeféier ee Joer | virun ongeféier engem Joer |
+| 1998-12-01T00:00:00.000Z | ongeféier ee Joer | ongeféier ee Joer | virun ongeféier engem Joer |
+| 1998-06-01T00:00:00.000Z | méi wéi ee Joer | méi wéi ee Joer | viru méi wéi engem Joer |
+| 1998-01-01T00:00:00.000Z | ongeféier 2 Joer | ongeféier 2 Joer | virun ongeféier 2 Joer |
+| 1997-01-01T00:00:00.000Z | ongeféier 3 Joer | ongeféier 3 Joer | virun ongeféier 3 Joer |
+| 1996-01-01T00:00:00.000Z | ongeféier 4 Joer | ongeféier 4 Joer | virun ongeféier 4 Joer |
+| 1995-01-01T00:00:00.000Z | ongeféier 5 Joer | ongeféier 5 Joer | virun ongeféier 5 Joer |
+| 1994-01-01T00:00:00.000Z | ongeféier 6 Joer | ongeféier 6 Joer | virun ongeféier 6 Joer |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 Joer | a 6 Joer | 52608 Stonnen |
+| 2005-01-01T00:00:00.000Z | 5 Joer | a 5 Joer | 43848 Stonnen |
+| 2004-01-01T00:00:00.000Z | 4 Joer | a 4 Joer | 35064 Stonnen |
+| 2003-01-01T00:00:00.000Z | 3 Joer | an 3 Joer | 26304 Stonnen |
+| 2002-01-01T00:00:00.000Z | 2 Joer | an 2 Joer | 17544 Stonnen |
+| 2001-06-01T00:00:00.000Z | ee Joer | an engem Joer | 12408 Stonnen |
+| 2001-02-01T00:00:00.000Z | ee Joer | an engem Joer | 9528 Stonnen |
+| 2001-01-01T00:00:00.000Z | ee Joer | an engem Joer | 8784 Stonnen |
+| 2000-06-01T00:00:00.000Z | 5 Méint | a 5 Méint | 3648 Stonnen |
+| 2000-03-01T00:00:00.000Z | 2 Méint | an 2 Méint | 1440 Stonnen |
+| 2000-02-01T00:00:00.000Z | ee Mount | an engem Mount | 744 Stonnen |
+| 2000-01-15T00:00:00.000Z | 14 Deeg | a 14 Deeg | 336 Stonnen |
+| 2000-01-02T00:00:00.000Z | een Dag | an engem Dag | 24 Stonnen |
+| 2000-01-01T06:00:00.000Z | 6 Stonnen | a 6 Stonnen | 6 Stonnen |
+| 2000-01-01T01:00:00.000Z | eng Stonn | an enger Stonn | eng Stonn |
+| 2000-01-01T00:45:00.000Z | 45 Minutten | a 45 Minutten | eng Stonn |
+| 2000-01-01T00:30:00.000Z | 30 Minutten | an 30 Minutten | eng Stonn |
+| 2000-01-01T00:15:00.000Z | 15 Minutten | a 15 Minutten | 0 Stonnen |
+| 2000-01-01T00:01:00.000Z | eng Minutt | an enger Minutt | 0 Stonnen |
+| 2000-01-01T00:00:25.000Z | 25 Sekonnen | a 25 Sekonnen | 0 Stonnen |
+| 2000-01-01T00:00:15.000Z | 15 Sekonnen | a 15 Sekonnen | 0 Stonnen |
+| 2000-01-01T00:00:05.000Z | 5 Sekonnen | a 5 Sekonnen | 0 Stonnen |
+| 2000-01-01T00:00:00.000Z | 0 Sekonnen | virun 0 Sekonnen | 0 Stonnen |
+| 1999-12-31T23:59:55.000Z | 5 Sekonnen | viru 5 Sekonnen | 0 Stonnen |
+| 1999-12-31T23:59:45.000Z | 15 Sekonnen | viru 15 Sekonnen | 0 Stonnen |
+| 1999-12-31T23:59:35.000Z | 25 Sekonnen | viru 25 Sekonnen | 0 Stonnen |
+| 1999-12-31T23:59:00.000Z | eng Minutt | virun enger Minutt | 0 Stonnen |
+| 1999-12-31T23:45:00.000Z | 15 Minutten | viru 15 Minutten | 0 Stonnen |
+| 1999-12-31T23:30:00.000Z | 30 Minutten | virun 30 Minutten | eng Stonn |
+| 1999-12-31T23:15:00.000Z | 45 Minutten | viru 45 Minutten | eng Stonn |
+| 1999-12-31T23:00:00.000Z | eng Stonn | virun enger Stonn | eng Stonn |
+| 1999-12-31T18:00:00.000Z | 6 Stonnen | viru 6 Stonnen | 6 Stonnen |
+| 1999-12-30T00:00:00.000Z | 2 Deeg | virun 2 Deeg | 48 Stonnen |
+| 1999-12-15T00:00:00.000Z | 17 Deeg | viru 17 Deeg | 408 Stonnen |
+| 1999-12-01T00:00:00.000Z | ee Mount | virun engem Mount | 744 Stonnen |
+| 1999-11-01T00:00:00.000Z | 2 Méint | virun 2 Méint | 1464 Stonnen |
+| 1999-06-01T00:00:00.000Z | 7 Méint | viru 7 Méint | 5136 Stonnen |
+| 1999-01-01T00:00:00.000Z | ee Joer | virun engem Joer | 8760 Stonnen |
+| 1998-12-01T00:00:00.000Z | ee Joer | virun engem Joer | 9504 Stonnen |
+| 1998-06-01T00:00:00.000Z | 2 Joer | virun 2 Joer | 13896 Stonnen |
+| 1998-01-01T00:00:00.000Z | 2 Joer | virun 2 Joer | 17520 Stonnen |
+| 1997-01-01T00:00:00.000Z | 3 Joer | virun 3 Joer | 26280 Stonnen |
+| 1996-01-01T00:00:00.000Z | 4 Joer | viru 4 Joer | 35064 Stonnen |
+| 1995-01-01T00:00:00.000Z | 5 Joer | viru 5 Joer | 43824 Stonnen |
+| 1994-01-01T00:00:00.000Z | 6 Joer | viru 6 Joer | 52584 Stonnen |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------ |
+| 2000-01-10T00:00:00.000Z | 10.01.00 |
+| 2000-01-05T00:00:00.000Z | Mëttwoch um 00:00 |
+| 2000-01-02T00:00:00.000Z | moien um 00:00 |
+| 2000-01-01T00:00:00.000Z | haut um 00:00 |
+| 1999-12-31T00:00:00.000Z | gëschter um 00:00 |
+| 1999-12-27T00:00:00.000Z | läschte Méindeg um 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.99 |
diff --git a/date-fns/src/locale/lt/_lib/formatDistance/index.js b/date-fns/src/locale/lt/_lib/formatDistance/index.js
new file mode 100644
index 0000000..0ec0f66
--- /dev/null
+++ b/date-fns/src/locale/lt/_lib/formatDistance/index.js
@@ -0,0 +1,165 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: translateSeconds,
+ other: translate
+ },
+
+ xSeconds: {
+ one: translateSeconds,
+ other: translate
+ },
+
+ halfAMinute: 'pusė minutės',
+
+ lessThanXMinutes: {
+ one: translateSingular,
+ other: translate
+ },
+
+ xMinutes: {
+ one: translateSingular,
+ other: translate
+ },
+
+ aboutXHours: {
+ one: translateSingular,
+ other: translate
+ },
+
+ xHours: {
+ one: translateSingular,
+ other: translate
+ },
+
+ xDays: {
+ one: translateSingular,
+ other: translate
+ },
+
+ aboutWeeks: {
+ one: translateSingular,
+ other: translate
+ },
+
+ xWeeks: {
+ one: translateSingular,
+ other: translate
+ },
+
+ aboutXMonths: {
+ one: translateSingular,
+ other: translate
+ },
+
+ xMonths: {
+ one: translateSingular,
+ other: translate
+ },
+
+ aboutXYears: {
+ one: translateSingular,
+ other: translate
+ },
+
+ xYears: {
+ one: translateSingular,
+ other: translate
+ },
+
+ overXYears: {
+ one: translateSingular,
+ other: translate
+ },
+
+ almostXYears: {
+ one: translateSingular,
+ other: translate
+ }
+}
+
+var translations = {
+ xseconds_other: 'sekundė_sekundžių_sekundes',
+ xminutes_one: 'minutė_minutės_minutę',
+ xminutes_other: 'minutės_minučių_minutes',
+ xhours_one: 'valanda_valandos_valandą',
+ xhours_other: 'valandos_valandų_valandas',
+ xdays_one: 'diena_dienos_dieną',
+ xdays_other: 'dienos_dienų_dienas',
+ xweeks_one: 'savaitė_savaitės_savaitę',
+ xweeks_other: 'savaitės_savaičių_savaites',
+ xmonths_one: 'mėnuo_mėnesio_mėnesį',
+ xmonths_other: 'mėnesiai_mėnesių_mėnesius',
+ xyears_one: 'metai_metų_metus',
+ xyears_other: 'metai_metų_metus',
+ about: 'apie',
+ over: 'daugiau nei',
+ almost: 'beveik',
+ lessthan: 'mažiau nei'
+}
+function translateSeconds(number, addSuffix, key, isFuture) {
+ if (!addSuffix) {
+ return 'kelios sekundės'
+ } else {
+ return isFuture ? 'kelių sekundžių' : 'kelias sekundes'
+ }
+}
+function translateSingular(number, addSuffix, key, isFuture) {
+ return !addSuffix ? forms(key)[0] : isFuture ? forms(key)[1] : forms(key)[2]
+}
+function special(number) {
+ return number % 10 === 0 || (number > 10 && number < 20)
+}
+function forms(key) {
+ return translations[key].split('_')
+}
+function translate(number, addSuffix, key, isFuture) {
+ var result = number + ' '
+ if (number === 1) {
+ return result + translateSingular(number, addSuffix, key[0], isFuture)
+ } else if (!addSuffix) {
+ return result + (special(number) ? forms(key)[1] : forms(key)[0])
+ } else {
+ if (isFuture) {
+ return result + forms(key)[1]
+ } else {
+ return result + (special(number) ? forms(key)[1] : forms(key)[2])
+ }
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ var adverb = token.match(/about|over|almost|lessthan/i)
+ var unit = token.replace(adverb, '')
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one(
+ count,
+ options.addSuffix,
+ unit.toLowerCase() + '_one'
+ )
+ } else {
+ result = formatDistanceLocale[token].other(
+ count,
+ options.addSuffix,
+ unit.toLowerCase() + '_other'
+ )
+ }
+
+ if (adverb) {
+ result = translations[adverb[0].toLowerCase()] + ' ' + result
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'po ' + result
+ } else {
+ return 'prieš ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/lt/_lib/formatLong/index.js b/date-fns/src/locale/lt/_lib/formatLong/index.js
new file mode 100644
index 0000000..74448f9
--- /dev/null
+++ b/date-fns/src/locale/lt/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "y 'm'. MMMM d 'd'., EEEE",
+ long: "y 'm'. MMMM d 'd'.",
+ medium: 'y-MM-dd',
+ short: 'y-MM-dd'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/lt/_lib/formatRelative/index.js b/date-fns/src/locale/lt/_lib/formatRelative/index.js
new file mode 100644
index 0000000..ca7f71e
--- /dev/null
+++ b/date-fns/src/locale/lt/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'Praėjusį' eeee p",
+ yesterday: "'Vakar' p",
+ today: "'Šiandien' p",
+ tomorrow: "'Rytoj' p",
+ nextWeek: 'eeee p',
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/lt/_lib/localize/index.js b/date-fns/src/locale/lt/_lib/localize/index.js
new file mode 100644
index 0000000..f318617
--- /dev/null
+++ b/date-fns/src/locale/lt/_lib/localize/index.js
@@ -0,0 +1,225 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['pr. Kr.', 'po Kr.'],
+ abbreviated: ['pr. Kr.', 'po Kr.'],
+ wide: ['prieš Kristų', 'po Kristaus']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['I ketv.', 'II ketv.', 'III ketv.', 'IV ketv.'],
+ wide: ['I ketvirtis', 'II ketvirtis', 'III ketvirtis', 'IV ketvirtis']
+}
+
+var formattingQuarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['I k.', 'II k.', 'III k.', 'IV k.'],
+ wide: ['I ketvirtis', 'II ketvirtis', 'III ketvirtis', 'IV ketvirtis']
+}
+
+var monthValues = {
+ narrow: ['S', 'V', 'K', 'B', 'G', 'B', 'L', 'R', 'R', 'S', 'L', 'G'],
+ abbreviated: [
+ 'saus.',
+ 'vas.',
+ 'kov.',
+ 'bal.',
+ 'geg.',
+ 'birž.',
+ 'liep.',
+ 'rugp.',
+ 'rugs.',
+ 'spal.',
+ 'lapkr.',
+ 'gruod.'
+ ],
+ wide: [
+ 'sausis',
+ 'vasaris',
+ 'kovas',
+ 'balandis',
+ 'gegužė',
+ 'birželis',
+ 'liepa',
+ 'rugpjūtis',
+ 'rugsėjis',
+ 'spalis',
+ 'lapkritis',
+ 'gruodis'
+ ]
+}
+
+var formattingMonthValues = {
+ narrow: ['S', 'V', 'K', 'B', 'G', 'B', 'L', 'R', 'R', 'S', 'L', 'G'],
+ abbreviated: [
+ 'saus.',
+ 'vas.',
+ 'kov.',
+ 'bal.',
+ 'geg.',
+ 'birž.',
+ 'liep.',
+ 'rugp.',
+ 'rugs.',
+ 'spal.',
+ 'lapkr.',
+ 'gruod.'
+ ],
+ wide: [
+ 'sausio',
+ 'vasario',
+ 'kovo',
+ 'balandžio',
+ 'gegužės',
+ 'birželio',
+ 'liepos',
+ 'rugpjūčio',
+ 'rugsėjo',
+ 'spalio',
+ 'lapkričio',
+ 'gruodžio'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'P', 'A', 'T', 'K', 'P', 'Š'],
+ short: ['Sk', 'Pr', 'An', 'Tr', 'Kt', 'Pn', 'Št'],
+ abbreviated: ['sk', 'pr', 'an', 'tr', 'kt', 'pn', 'št'],
+ wide: [
+ 'sekmadienis',
+ 'pirmadienis',
+ 'antradienis',
+ 'trečiadienis',
+ 'ketvirtadienis',
+ 'penktadienis',
+ 'šeštadienis'
+ ]
+}
+
+var formattingDayValues = {
+ narrow: ['S', 'P', 'A', 'T', 'K', 'P', 'Š'],
+ short: ['Sk', 'Pr', 'An', 'Tr', 'Kt', 'Pn', 'Št'],
+ abbreviated: ['sk', 'pr', 'an', 'tr', 'kt', 'pn', 'št'],
+ wide: [
+ 'sekmadienį',
+ 'pirmadienį',
+ 'antradienį',
+ 'trečiadienį',
+ 'ketvirtadienį',
+ 'penktadienį',
+ 'šeštadienį'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'pr. p.',
+ pm: 'pop.',
+ midnight: 'vidurnaktis',
+ noon: 'vidurdienis',
+ morning: 'rytas',
+ afternoon: 'diena',
+ evening: 'vakaras',
+ night: 'naktis'
+ },
+ abbreviated: {
+ am: 'priešpiet',
+ pm: 'popiet',
+ midnight: 'vidurnaktis',
+ noon: 'vidurdienis',
+ morning: 'rytas',
+ afternoon: 'diena',
+ evening: 'vakaras',
+ night: 'naktis'
+ },
+ wide: {
+ am: 'priešpiet',
+ pm: 'popiet',
+ midnight: 'vidurnaktis',
+ noon: 'vidurdienis',
+ morning: 'rytas',
+ afternoon: 'diena',
+ evening: 'vakaras',
+ night: 'naktis'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'pr. p.',
+ pm: 'pop.',
+ midnight: 'vidurnaktis',
+ noon: 'perpiet',
+ morning: 'rytas',
+ afternoon: 'popietė',
+ evening: 'vakaras',
+ night: 'naktis'
+ },
+ abbreviated: {
+ am: 'priešpiet',
+ pm: 'popiet',
+ midnight: 'vidurnaktis',
+ noon: 'perpiet',
+ morning: 'rytas',
+ afternoon: 'popietė',
+ evening: 'vakaras',
+ night: 'naktis'
+ },
+ wide: {
+ am: 'priešpiet',
+ pm: 'popiet',
+ midnight: 'vidurnaktis',
+ noon: 'perpiet',
+ morning: 'rytas',
+ afternoon: 'popietė',
+ evening: 'vakaras',
+ night: 'naktis'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+ return number + '-oji'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingQuarterValues,
+ defaultFormattingWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/lt/_lib/match/index.js b/date-fns/src/locale/lt/_lib/match/index.js
new file mode 100644
index 0000000..5bebf37
--- /dev/null
+++ b/date-fns/src/locale/lt/_lib/match/index.js
@@ -0,0 +1,150 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-oji)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^p(r|o)\.?\s?(kr\.?|me)/i,
+ abbreviated: /^(pr\.\s?(kr\.|m\.\s?e\.)|po\s?kr\.|mūsų eroje)/i,
+ wide: /^(prieš Kristų|prieš mūsų erą|po Kristaus|mūsų eroje)/i
+}
+var parseEraPatterns = {
+ wide: [/prieš/i, /(po|mūsų)/i],
+ any: [/^pr/i, /^(po|m)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^([1234])/i,
+ abbreviated: /^(I|II|III|IV)\s?ketv?\.?/i,
+ wide: /^(I|II|III|IV)\s?ketvirtis/i
+}
+var parseQuarterPatterns = {
+ narrow: [/1/i, /2/i, /3/i, /4/i],
+ any: [/I$/i, /II$/i, /III/i, /IV/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[svkbglr]/i,
+ abbreviated: /^(saus\.|vas\.|kov\.|bal\.|geg\.|birž\.|liep\.|rugp\.|rugs\.|spal\.|lapkr\.|gruod\.)/i,
+ wide: /^(sausi(s|o)|vasari(s|o)|kov(a|o)s|balandž?i(s|o)|gegužės?|birželi(s|o)|liep(a|os)|rugpjū(t|č)i(s|o)|rugsėj(is|o)|spali(s|o)|lapkri(t|č)i(s|o)|gruodž?i(s|o))/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^s/i,
+ /^v/i,
+ /^k/i,
+ /^b/i,
+ /^g/i,
+ /^b/i,
+ /^l/i,
+ /^r/i,
+ /^r/i,
+ /^s/i,
+ /^l/i,
+ /^g/i
+ ],
+ any: [
+ /^saus/i,
+ /^vas/i,
+ /^kov/i,
+ /^bal/i,
+ /^geg/i,
+ /^birž/i,
+ /^liep/i,
+ /^rugp/i,
+ /^rugs/i,
+ /^spal/i,
+ /^lapkr/i,
+ /^gruod/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[spatkš]/i,
+ short: /^(sk|pr|an|tr|kt|pn|št)/i,
+ abbreviated: /^(sk|pr|an|tr|kt|pn|št)/i,
+ wide: /^(sekmadien(is|į)|pirmadien(is|į)|antradien(is|į)|trečiadien(is|į)|ketvirtadien(is|į)|penktadien(is|į)|šeštadien(is|į))/i
+}
+var parseDayPatterns = {
+ narrow: [/^s/i, /^p/i, /^a/i, /^t/i, /^k/i, /^p/i, /^š/i],
+ wide: [/^se/i, /^pi/i, /^an/i, /^tr/i, /^ke/i, /^pe/i, /^še/i],
+ any: [/^sk/i, /^pr/i, /^an/i, /^tr/i, /^kt/i, /^pn/i, /^št/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(pr.\s?p.|pop.|vidurnaktis|(vidurdienis|perpiet)|rytas|(diena|popietė)|vakaras|naktis)/i,
+ any: /^(priešpiet|popiet$|vidurnaktis|(vidurdienis|perpiet)|rytas|(diena|popietė)|vakaras|naktis)/i
+}
+var parseDayPeriodPatterns = {
+ narrow: {
+ am: /^pr/i,
+ pm: /^pop./i,
+ midnight: /^vidurnaktis/i,
+ noon: /^(vidurdienis|perp)/i,
+ morning: /rytas/i,
+ afternoon: /(die|popietė)/i,
+ evening: /vakaras/i,
+ night: /naktis/i
+ },
+ any: {
+ am: /^pr/i,
+ pm: /^popiet$/i,
+ midnight: /^vidurnaktis/i,
+ noon: /^(vidurdienis|perp)/i,
+ morning: /rytas/i,
+ afternoon: /(die|popietė)/i,
+ evening: /vakaras/i,
+ night: /naktis/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/lt/index.d.ts b/date-fns/src/locale/lt/index.d.ts
new file mode 100644
index 0000000..573a840
--- /dev/null
+++ b/date-fns/src/locale/lt/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lt } from 'date-fns/locale'
+export default lt
diff --git a/date-fns/src/locale/lt/index.js b/date-fns/src/locale/lt/index.js
new file mode 100644
index 0000000..c954ccd
--- /dev/null
+++ b/date-fns/src/locale/lt/index.js
@@ -0,0 +1,32 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ *
+ * @summary Lithuanian locale.
+ * @language Lithuanian
+ *
+ * @iso-639-2 lit
+ *
+ * @author Pavlo Shpak [@pshpak]{@link https://github.com/pshpak}
+ * @author Eduardo Pardo [@eduardopsll]{@link https://github.com/eduardopsll}
+ */
+var locale = {
+ code: 'lt',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/lt/index.js.flow b/date-fns/src/locale/lt/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/lt/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/lt/snapshot.md b/date-fns/src/locale/lt/snapshot.md
new file mode 100644
index 0000000..368443f
--- /dev/null
+++ b/date-fns/src/locale/lt/snapshot.md
@@ -0,0 +1,304 @@
+# Lithuanian (lt) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-oji | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-oji | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-oji | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4-oji | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-oji | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-oji | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | I k. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | II k. | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | I ketvirtis | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | II ketvirtis | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-oji | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-oji | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | I ketv. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | II ketv. | Invalid Date |
+| | qqqq | 2019-01-01T12:13:14.015Z | I ketvirtis | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | II ketvirtis | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-oji | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-oji | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | vas. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | liep. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | vasario | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | liepos | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | V | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | L | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-oji | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-oji | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | vas. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | liep. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | vasaris | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | liepa | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | V | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | L | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-oji | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-oji | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-oji | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-oji | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-oji | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-oji | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-oji | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-oji | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pn | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pn | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pn | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | pirmadienį | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | penktadienį | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pn | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-oji | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-oji | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pn | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | pirmadienį | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | penktadienį | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pn | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-oji | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-oji | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pn | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | pirmadienį | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | penktadienį | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pn | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-oji | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-oji | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pn | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | pirmadienis | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | penktadienis | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Pr | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pn | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | pr. p. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | pr. p. | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | popiet | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | priešpiet | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | pr. p. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | pr. p. | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | rytas | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popietė | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vakaras | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktis | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | rytas | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popietė | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vakaras | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktis | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | rytas | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popietė | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vakaras | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktis | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | rytas | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popietė | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vakaras | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktis | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | rytas | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popietė | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | vakaras | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktis | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-oji | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-oji | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-oji | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-oji | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-oji | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-oji | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-oji | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-oji | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-oji | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-oji | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-oji | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-oji | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 1987-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987 m. vasario 11 d. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 m. gegužės 29 d. | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 1987 m. vasario 11 d., trečiadienį | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 m. gegužės 29 d., sekmadienį | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987-02-11 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 1987-02-11 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987 m. vasario 11 d. 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 m. gegužės 29 d. 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 1987 m. vasario 11 d., trečiadienį 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 m. gegužės 29 d., sekmadienį 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------- | ----------------------- | ----------------------- |
+| 2006-01-01T00:00:00.000Z | apie 6 metai | apie 6 metai | po apie 6 metus |
+| 2005-01-01T00:00:00.000Z | apie 5 metai | apie 5 metai | po apie 5 metus |
+| 2004-01-01T00:00:00.000Z | apie 4 metai | apie 4 metai | po apie 4 metus |
+| 2003-01-01T00:00:00.000Z | apie 3 metai | apie 3 metai | po apie 3 metus |
+| 2002-01-01T00:00:00.000Z | apie 2 metai | apie 2 metai | po apie 2 metus |
+| 2001-06-01T00:00:00.000Z | daugiau nei metai | daugiau nei metai | po daugiau nei metus |
+| 2001-02-01T00:00:00.000Z | apie metai | apie metai | po apie metus |
+| 2001-01-01T00:00:00.000Z | apie metai | apie metai | po apie metus |
+| 2000-06-01T00:00:00.000Z | 5 mėnesiai | 5 mėnesiai | po 5 mėnesius |
+| 2000-03-01T00:00:00.000Z | 2 mėnesiai | 2 mėnesiai | po 2 mėnesius |
+| 2000-02-01T00:00:00.000Z | apie mėnuo | apie mėnuo | po apie mėnesį |
+| 2000-01-15T00:00:00.000Z | 14 dienų | 14 dienų | po 14 dienų |
+| 2000-01-02T00:00:00.000Z | diena | diena | po dieną |
+| 2000-01-01T06:00:00.000Z | apie 6 valandos | apie 6 valandos | po apie 6 valandas |
+| 2000-01-01T01:00:00.000Z | apie valanda | apie valanda | po apie valandą |
+| 2000-01-01T00:45:00.000Z | apie valanda | apie valanda | po apie valandą |
+| 2000-01-01T00:30:00.000Z | 30 minučių | 30 minučių | po 30 minučių |
+| 2000-01-01T00:15:00.000Z | 15 minučių | 15 minučių | po 15 minučių |
+| 2000-01-01T00:01:00.000Z | minutė | minutė | po minutę |
+| 2000-01-01T00:00:25.000Z | mažiau nei minutė | pusė minutės | po mažiau nei minutę |
+| 2000-01-01T00:00:15.000Z | mažiau nei minutė | mažiau nei 20 sekundžių | po mažiau nei minutę |
+| 2000-01-01T00:00:05.000Z | mažiau nei minutė | mažiau nei 10 sekundžių | po mažiau nei minutę |
+| 2000-01-01T00:00:00.000Z | mažiau nei minutė | mažiau nei 5 sekundė | prieš mažiau nei minutę |
+| 1999-12-31T23:59:55.000Z | mažiau nei minutė | mažiau nei 10 sekundžių | prieš mažiau nei minutę |
+| 1999-12-31T23:59:45.000Z | mažiau nei minutė | mažiau nei 20 sekundžių | prieš mažiau nei minutę |
+| 1999-12-31T23:59:35.000Z | mažiau nei minutė | pusė minutės | prieš mažiau nei minutę |
+| 1999-12-31T23:59:00.000Z | minutė | minutė | prieš minutę |
+| 1999-12-31T23:45:00.000Z | 15 minučių | 15 minučių | prieš 15 minučių |
+| 1999-12-31T23:30:00.000Z | 30 minučių | 30 minučių | prieš 30 minučių |
+| 1999-12-31T23:15:00.000Z | apie valanda | apie valanda | prieš apie valandą |
+| 1999-12-31T23:00:00.000Z | apie valanda | apie valanda | prieš apie valandą |
+| 1999-12-31T18:00:00.000Z | apie 6 valandos | apie 6 valandos | prieš apie 6 valandas |
+| 1999-12-30T00:00:00.000Z | 2 dienos | 2 dienos | prieš 2 dienas |
+| 1999-12-15T00:00:00.000Z | 17 dienų | 17 dienų | prieš 17 dienų |
+| 1999-12-01T00:00:00.000Z | apie mėnuo | apie mėnuo | prieš apie mėnesį |
+| 1999-11-01T00:00:00.000Z | 2 mėnesiai | 2 mėnesiai | prieš 2 mėnesius |
+| 1999-06-01T00:00:00.000Z | 7 mėnesiai | 7 mėnesiai | prieš 7 mėnesius |
+| 1999-01-01T00:00:00.000Z | apie metai | apie metai | prieš apie metus |
+| 1998-12-01T00:00:00.000Z | apie metai | apie metai | prieš apie metus |
+| 1998-06-01T00:00:00.000Z | daugiau nei metai | daugiau nei metai | prieš daugiau nei metus |
+| 1998-01-01T00:00:00.000Z | apie 2 metai | apie 2 metai | prieš apie 2 metus |
+| 1997-01-01T00:00:00.000Z | apie 3 metai | apie 3 metai | prieš apie 3 metus |
+| 1996-01-01T00:00:00.000Z | apie 4 metai | apie 4 metai | prieš apie 4 metus |
+| 1995-01-01T00:00:00.000Z | apie 5 metai | apie 5 metai | prieš apie 5 metus |
+| 1994-01-01T00:00:00.000Z | apie 6 metai | apie 6 metai | prieš apie 6 metus |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------------ | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 metai | po 6 metus | 52608 valandos |
+| 2005-01-01T00:00:00.000Z | 5 metai | po 5 metus | 43848 valandos |
+| 2004-01-01T00:00:00.000Z | 4 metai | po 4 metus | 35064 valandos |
+| 2003-01-01T00:00:00.000Z | 3 metai | po 3 metus | 26304 valandos |
+| 2002-01-01T00:00:00.000Z | 2 metai | po 2 metus | 17544 valandos |
+| 2001-06-01T00:00:00.000Z | metai | po metus | 12408 valandos |
+| 2001-02-01T00:00:00.000Z | metai | po metus | 9528 valandos |
+| 2001-01-01T00:00:00.000Z | metai | po metus | 8784 valandos |
+| 2000-06-01T00:00:00.000Z | 5 mėnesiai | po 5 mėnesius | 3648 valandos |
+| 2000-03-01T00:00:00.000Z | 2 mėnesiai | po 2 mėnesius | 1440 valandų |
+| 2000-02-01T00:00:00.000Z | mėnuo | po mėnesį | 744 valandos |
+| 2000-01-15T00:00:00.000Z | 14 dienų | po 14 dienų | 336 valandos |
+| 2000-01-02T00:00:00.000Z | diena | po dieną | 24 valandos |
+| 2000-01-01T06:00:00.000Z | 6 valandos | po 6 valandas | 6 valandos |
+| 2000-01-01T01:00:00.000Z | valanda | po valandą | valanda |
+| 2000-01-01T00:45:00.000Z | 45 minutės | po 45 minutes | valanda |
+| 2000-01-01T00:30:00.000Z | 30 minučių | po 30 minučių | valanda |
+| 2000-01-01T00:15:00.000Z | 15 minučių | po 15 minučių | 0 valandų |
+| 2000-01-01T00:01:00.000Z | minutė | po minutę | 0 valandų |
+| 2000-01-01T00:00:25.000Z | 25 sekundė | po 25 sekundes | 0 valandų |
+| 2000-01-01T00:00:15.000Z | 15 sekundžių | po 15 sekundžių | 0 valandų |
+| 2000-01-01T00:00:05.000Z | 5 sekundė | po 5 sekundes | 0 valandų |
+| 2000-01-01T00:00:00.000Z | 0 sekundžių | prieš 0 sekundžių | 0 valandų |
+| 1999-12-31T23:59:55.000Z | 5 sekundė | prieš 5 sekundes | 0 valandų |
+| 1999-12-31T23:59:45.000Z | 15 sekundžių | prieš 15 sekundžių | 0 valandų |
+| 1999-12-31T23:59:35.000Z | 25 sekundė | prieš 25 sekundes | 0 valandų |
+| 1999-12-31T23:59:00.000Z | minutė | prieš minutę | 0 valandų |
+| 1999-12-31T23:45:00.000Z | 15 minučių | prieš 15 minučių | 0 valandų |
+| 1999-12-31T23:30:00.000Z | 30 minučių | prieš 30 minučių | valanda |
+| 1999-12-31T23:15:00.000Z | 45 minutės | prieš 45 minutes | valanda |
+| 1999-12-31T23:00:00.000Z | valanda | prieš valandą | valanda |
+| 1999-12-31T18:00:00.000Z | 6 valandos | prieš 6 valandas | 6 valandos |
+| 1999-12-30T00:00:00.000Z | 2 dienos | prieš 2 dienas | 48 valandos |
+| 1999-12-15T00:00:00.000Z | 17 dienų | prieš 17 dienų | 408 valandos |
+| 1999-12-01T00:00:00.000Z | mėnuo | prieš mėnesį | 744 valandos |
+| 1999-11-01T00:00:00.000Z | 2 mėnesiai | prieš 2 mėnesius | 1464 valandos |
+| 1999-06-01T00:00:00.000Z | 7 mėnesiai | prieš 7 mėnesius | 5136 valandos |
+| 1999-01-01T00:00:00.000Z | metai | prieš metus | 8760 valandų |
+| 1998-12-01T00:00:00.000Z | metai | prieš metus | 9504 valandos |
+| 1998-06-01T00:00:00.000Z | 2 metai | prieš 2 metus | 13896 valandos |
+| 1998-01-01T00:00:00.000Z | 2 metai | prieš 2 metus | 17520 valandų |
+| 1997-01-01T00:00:00.000Z | 3 metai | prieš 3 metus | 26280 valandų |
+| 1996-01-01T00:00:00.000Z | 4 metai | prieš 4 metus | 35064 valandos |
+| 1995-01-01T00:00:00.000Z | 5 metai | prieš 5 metus | 43824 valandos |
+| 1994-01-01T00:00:00.000Z | 6 metai | prieš 6 metus | 52584 valandos |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------- |
+| 2000-01-10T00:00:00.000Z | 2000-01-10 |
+| 2000-01-05T00:00:00.000Z | trečiadienį 00:00 |
+| 2000-01-02T00:00:00.000Z | Rytoj 00:00 |
+| 2000-01-01T00:00:00.000Z | Šiandien 00:00 |
+| 1999-12-31T00:00:00.000Z | Vakar 00:00 |
+| 1999-12-27T00:00:00.000Z | Praėjusį pirmadienį 00:00 |
+| 1999-12-21T00:00:00.000Z | 1999-12-21 |
diff --git a/date-fns/src/locale/lv/_lib/formatDistance/index.js b/date-fns/src/locale/lv/_lib/formatDistance/index.js
new file mode 100644
index 0000000..012a98d
--- /dev/null
+++ b/date-fns/src/locale/lv/_lib/formatDistance/index.js
@@ -0,0 +1,158 @@
+function buildLocalizeTokenFn(schema) {
+ return function(count, options) {
+ if (count === 1) {
+ if (options.addSuffix) {
+ return schema.one[0].replace('{{time}}', schema.one[2])
+ } else {
+ return schema.one[0].replace('{{time}}', schema.one[1])
+ }
+ } else {
+ var rem = count % 10 === 1 && count % 100 !== 11
+ if (options.addSuffix) {
+ return schema.other[0]
+ .replace('{{time}}', rem ? schema.other[3] : schema.other[4])
+ .replace('{{count}}', count)
+ } else {
+ return schema.other[0]
+ .replace('{{time}}', rem ? schema.other[1] : schema.other[2])
+ .replace('{{count}}', count)
+ }
+ }
+ }
+}
+
+var formatDistanceLocale = {
+ lessThanXSeconds: buildLocalizeTokenFn({
+ one: ['mazāk par {{time}}', 'sekundi', 'sekundi'],
+ other: [
+ 'mazāk nekā {{count}} {{time}}',
+ 'sekunde',
+ 'sekundes',
+ 'sekundes',
+ 'sekundēm'
+ ]
+ }),
+
+ xSeconds: buildLocalizeTokenFn({
+ one: ['1 {{time}}', 'sekunde', 'sekundes'],
+ other: ['{{count}} {{time}}', 'sekunde', 'sekundes', 'sekundes', 'sekundēm']
+ }),
+
+ halfAMinute: function(count, options) {
+ if (options.addSuffix) {
+ return 'pusminūtes'
+ } else {
+ return 'pusminūte'
+ }
+ },
+
+ lessThanXMinutes: buildLocalizeTokenFn({
+ one: ['mazāk par {{time}}', 'minūti', 'minūti'],
+ other: [
+ 'mazāk nekā {{count}} {{time}}',
+ 'minūte',
+ 'minūtes',
+ 'minūtes',
+ 'minūtēm'
+ ]
+ }),
+
+ xMinutes: buildLocalizeTokenFn({
+ one: ['1 {{time}}', 'minūte', 'minūtes'],
+ other: ['{{count}} {{time}}', 'minūte', 'minūtes', 'minūtes', 'minūtēm']
+ }),
+
+ aboutXHours: buildLocalizeTokenFn({
+ one: ['apmēram 1 {{time}}', 'stunda', 'stundas'],
+ other: [
+ 'apmēram {{count}} {{time}}',
+ 'stunda',
+ 'stundas',
+ 'stundas',
+ 'stundām'
+ ]
+ }),
+
+ xHours: buildLocalizeTokenFn({
+ one: ['1 {{time}}', 'stunda', 'stundas'],
+ other: ['{{count}} {{time}}', 'stunda', 'stundas', 'stundas', 'stundām']
+ }),
+
+ xDays: buildLocalizeTokenFn({
+ one: ['1 {{time}}', 'diena', 'dienas'],
+ other: ['{{count}} {{time}}', 'diena', 'dienas', 'dienas', 'dienām']
+ }),
+
+ aboutXWeeks: buildLocalizeTokenFn({
+ one: ['apmēram 1 {{time}}', 'nedēļa', 'nedēļas'],
+ other: [
+ 'apmēram {{count}} {{time}}',
+ 'nedēļa',
+ 'nedēļu',
+ 'nedēļas',
+ 'nedēļām'
+ ]
+ }),
+
+ xWeeks: buildLocalizeTokenFn({
+ one: ['1 {{time}}', 'nedēļa', 'nedēļas'],
+ other: [
+ '{{count}} {{time}}', // TODO
+ 'nedēļa',
+ 'nedēļu',
+ 'nedēļas',
+ 'nedēļām'
+ ]
+ }),
+
+ aboutXMonths: buildLocalizeTokenFn({
+ one: ['apmēram 1 {{time}}', 'mēnesis', 'mēneša'],
+ other: [
+ 'apmēram {{count}} {{time}}',
+ 'mēnesis',
+ 'mēneši',
+ 'mēneša',
+ 'mēnešiem'
+ ]
+ }),
+
+ xMonths: buildLocalizeTokenFn({
+ one: ['1 {{time}}', 'mēnesis', 'mēneša'],
+ other: ['{{count}} {{time}}', 'mēnesis', 'mēneši', 'mēneša', 'mēnešiem']
+ }),
+
+ aboutXYears: buildLocalizeTokenFn({
+ one: ['apmēram 1 {{time}}', 'gads', 'gada'],
+ other: ['apmēram {{count}} {{time}}', 'gads', 'gadi', 'gada', 'gadiem']
+ }),
+
+ xYears: buildLocalizeTokenFn({
+ one: ['1 {{time}}', 'gads', 'gada'],
+ other: ['{{count}} {{time}}', 'gads', 'gadi', 'gada', 'gadiem']
+ }),
+
+ overXYears: buildLocalizeTokenFn({
+ one: ['ilgāk par 1 {{time}}', 'gadu', 'gadu'],
+ other: ['vairāk nekā {{count}} {{time}}', 'gads', 'gadi', 'gada', 'gadiem']
+ }),
+
+ almostXYears: buildLocalizeTokenFn({
+ one: ['gandrīz 1 {{time}}', 'gads', 'gada'],
+ other: ['vairāk nekā {{count}} {{time}}', 'gads', 'gadi', 'gada', 'gadiem']
+ })
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ var result = formatDistanceLocale[token](count, options)
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'pēc ' + result
+ } else {
+ return 'pirms ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/lv/_lib/formatLong/index.js b/date-fns/src/locale/lv/_lib/formatLong/index.js
new file mode 100644
index 0000000..673a967
--- /dev/null
+++ b/date-fns/src/locale/lv/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, y. 'gada' d. MMMM",
+ long: "y. 'gada' d. MMMM",
+ medium: 'dd.MM.y.',
+ short: 'dd.MM.y.',
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm',
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'plkst.' {{time}}",
+ long: "{{date}} 'plkst.' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}',
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full',
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full',
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full',
+ }),
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/lv/_lib/formatRelative/index.js b/date-fns/src/locale/lv/_lib/formatRelative/index.js
new file mode 100644
index 0000000..9f9b72d
--- /dev/null
+++ b/date-fns/src/locale/lv/_lib/formatRelative/index.js
@@ -0,0 +1,43 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+var weekdays = [
+ 'svētdienā',
+ 'pirmdienā',
+ 'otrdienā',
+ 'trešdienā',
+ 'ceturtdienā',
+ 'piektdienā',
+ 'sestdienā'
+]
+
+var formatRelativeLocale = {
+ lastWeek: function(date, baseDate, options) {
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return "eeee 'plkst.' p"
+ }
+
+ var weekday = weekdays[date.getUTCDay()]
+ return "'Pagājušā " + weekday + " plkst.' p"
+ },
+ yesterday: "'Vakar plkst.' p",
+ today: "'Šodien plkst.' p",
+ tomorrow: "'Rīt plkst.' p",
+ nextWeek: function(date, baseDate, options) {
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return "eeee 'plkst.' p"
+ }
+
+ var weekday = weekdays[date.getUTCDay()]
+ return "'Nākamajā " + weekday + " plkst.' p"
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/lv/_lib/localize/index.js b/date-fns/src/locale/lv/_lib/localize/index.js
new file mode 100644
index 0000000..480fd4d
--- /dev/null
+++ b/date-fns/src/locale/lv/_lib/localize/index.js
@@ -0,0 +1,250 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['p.m.ē', 'm.ē'],
+ abbreviated: ['p. m. ē.', 'm. ē.'],
+ wide: ['pirms mūsu ēras', 'mūsu ērā']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1. cet.', '2. cet.', '3. cet.', '4. cet.'],
+ wide: [
+ 'pirmais ceturksnis',
+ 'otrais ceturksnis',
+ 'trešais ceturksnis',
+ 'ceturtais ceturksnis'
+ ]
+}
+
+var formattingQuarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1. cet.', '2. cet.', '3. cet.', '4. cet.'],
+ wide: [
+ 'pirmajā ceturksnī',
+ 'otrajā ceturksnī',
+ 'trešajā ceturksnī',
+ 'ceturtajā ceturksnī'
+ ]
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'janv.',
+ 'febr.',
+ 'marts',
+ 'apr.',
+ 'maijs',
+ 'jūn.',
+ 'jūl.',
+ 'aug.',
+ 'sept.',
+ 'okt.',
+ 'nov.',
+ 'dec.'
+ ],
+ wide: [
+ 'janvāris',
+ 'februāris',
+ 'marts',
+ 'aprīlis',
+ 'maijs',
+ 'jūnijs',
+ 'jūlijs',
+ 'augusts',
+ 'septembris',
+ 'oktobris',
+ 'novembris',
+ 'decembris'
+ ]
+}
+
+var formattingMonthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'janv.',
+ 'febr.',
+ 'martā',
+ 'apr.',
+ 'maijs',
+ 'jūn.',
+ 'jūl.',
+ 'aug.',
+ 'sept.',
+ 'okt.',
+ 'nov.',
+ 'dec.'
+ ],
+ wide: [
+ 'janvārī',
+ 'februārī',
+ 'martā',
+ 'aprīlī',
+ 'maijā',
+ 'jūnijā',
+ 'jūlijā',
+ 'augustā',
+ 'septembrī',
+ 'oktobrī',
+ 'novembrī',
+ 'decembrī'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'P', 'O', 'T', 'C', 'P', 'S'],
+ short: ['Sv', 'P', 'O', 'T', 'C', 'Pk', 'S'],
+ abbreviated: [
+ 'svētd.',
+ 'pirmd.',
+ 'otrd.',
+ 'trešd.',
+ 'ceturtd.',
+ 'piektd.',
+ 'sestd.'
+ ],
+ wide: [
+ 'svētdiena',
+ 'pirmdiena',
+ 'otrdiena',
+ 'trešdiena',
+ 'ceturtdiena',
+ 'piektdiena',
+ 'sestdiena'
+ ]
+}
+
+var formattingDayValues = {
+ narrow: ['S', 'P', 'O', 'T', 'C', 'P', 'S'],
+ short: ['Sv', 'P', 'O', 'T', 'C', 'Pk', 'S'],
+ abbreviated: [
+ 'svētd.',
+ 'pirmd.',
+ 'otrd.',
+ 'trešd.',
+ 'ceturtd.',
+ 'piektd.',
+ 'sestd.'
+ ],
+ wide: [
+ 'svētdienā',
+ 'pirmdienā',
+ 'otrdienā',
+ 'trešdienā',
+ 'ceturtdienā',
+ 'piektdienā',
+ 'sestdienā'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'pusn.',
+ noon: 'pusd.',
+ morning: 'rīts',
+ afternoon: 'diena',
+ evening: 'vakars',
+ night: 'nakts'
+ },
+ abbreviated: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'pusn.',
+ noon: 'pusd.',
+ morning: 'rīts',
+ afternoon: 'pēcpusd.',
+ evening: 'vakars',
+ night: 'nakts'
+ },
+ wide: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'pusnakts',
+ noon: 'pusdienlaiks',
+ morning: 'rīts',
+ afternoon: 'pēcpusdiena',
+ evening: 'vakars',
+ night: 'nakts'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'pusn.',
+ noon: 'pusd.',
+ morning: 'rītā',
+ afternoon: 'dienā',
+ evening: 'vakarā',
+ night: 'naktī'
+ },
+ abbreviated: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'pusn.',
+ noon: 'pusd.',
+ morning: 'rītā',
+ afternoon: 'pēcpusd.',
+ evening: 'vakarā',
+ night: 'naktī'
+ },
+ wide: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'pusnaktī',
+ noon: 'pusdienlaikā',
+ morning: 'rītā',
+ afternoon: 'pēcpusdienā',
+ evening: 'vakarā',
+ night: 'naktī'
+ }
+}
+
+function ordinalNumber(number, _options) {
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingQuarterValues,
+ defaultFormattingWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/lv/_lib/match/index.js b/date-fns/src/locale/lv/_lib/match/index.js
new file mode 100644
index 0000000..abfdc8a
--- /dev/null
+++ b/date-fns/src/locale/lv/_lib/match/index.js
@@ -0,0 +1,140 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\./i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(p\.m\.ē|m\.ē)/i,
+ abbreviated: /^(p\. m\. ē\.|m\. ē\.)/i,
+ wide: /^(pirms mūsu ēras|mūsu ērā)/i
+}
+var parseEraPatterns = {
+ any: [/^p/i, /^m/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234](\. cet\.)/i,
+ wide: /^(pirma(is|jā)|otra(is|jā)|treša(is|jā)|ceturta(is|jā)) ceturksn(is|ī)/i
+}
+var parseQuarterPatterns = {
+ narrow: [/^1/i, /^2/i, /^3/i, /^4/i],
+ abbreviated: [/^1/i, /^2/i, /^3/i, /^4/i],
+ wide: [/^p/i, /^o/i, /^t/i, /^c/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(janv\.|febr\.|marts|apr\.|maijs|jūn\.|jūl\.|aug\.|sept\.|okt\.|nov\.|dec\.)/i,
+ wide: /^(janvār(is|ī)|februār(is|ī)|mart[sā]|aprīl(is|ī)|maij[sā]|jūnij[sā]|jūlij[sā]|august[sā]|septembr(is|ī)|oktobr(is|ī)|novembr(is|ī)|decembr(is|ī))/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^mai/i,
+ /^jūn/i,
+ /^jūl/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[spotc]/i,
+ short: /^(sv|pi|o|t|c|pk|s)/i,
+ abbreviated: /^(svētd\.|pirmd\.|otrd.\|trešd\.|ceturtd\.|piektd\.|sestd\.)/i,
+ wide: /^(svētdien(a|ā)|pirmdien(a|ā)|otrdien(a|ā)|trešdien(a|ā)|ceturtdien(a|ā)|piektdien(a|ā)|sestdien(a|ā))/i
+}
+var parseDayPatterns = {
+ narrow: [/^s/i, /^p/i, /^o/i, /^t/i, /^c/i, /^p/i, /^s/i],
+ any: [/^sv/i, /^pi/i, /^o/i, /^t/i, /^c/i, /^p/i, /^se/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(am|pm|pusn\.|pusd\.|rīt(s|ā)|dien(a|ā)|vakar(s|ā)|nakt(s|ī))/,
+ abbreviated: /^(am|pm|pusn\.|pusd\.|rīt(s|ā)|pēcpusd\.|vakar(s|ā)|nakt(s|ī))/,
+ wide: /^(am|pm|pusnakt(s|ī)|pusdienlaik(s|ā)|rīt(s|ā)|pēcpusdien(a|ā)|vakar(s|ā)|nakt(s|ī))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^am/i,
+ pm: /^pm/i,
+ midnight: /^pusn/i,
+ noon: /^pusd/i,
+ morning: /^r/i,
+ afternoon: /^(d|pēc)/i,
+ evening: /^v/i,
+ night: /^n/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/lv/index.d.ts b/date-fns/src/locale/lv/index.d.ts
new file mode 100644
index 0000000..14686a2
--- /dev/null
+++ b/date-fns/src/locale/lv/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { lv } from 'date-fns/locale'
+export default lv
diff --git a/date-fns/src/locale/lv/index.js b/date-fns/src/locale/lv/index.js
new file mode 100644
index 0000000..34dd097
--- /dev/null
+++ b/date-fns/src/locale/lv/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Latvian locale (Latvia).
+ * @language Latvian
+ * @iso-639-2 lav
+ * @author Rūdolfs Puķītis [@prudolfs]{@link https://github.com/prudolfs}
+ */
+var locale = {
+ code: 'lv',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/lv/index.js.flow b/date-fns/src/locale/lv/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/lv/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/lv/snapshot.md b/date-fns/src/locale/lv/snapshot.md
new file mode 100644
index 0000000..96dd5e3
--- /dev/null
+++ b/date-fns/src/locale/lv/snapshot.md
@@ -0,0 +1,304 @@
+# Latvian (lv) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1. cet. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. cet. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | pirmajā ceturksnī | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | otrajā ceturksnī | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1. cet. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. cet. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | pirmais ceturksnis | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | otrais ceturksnis | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | febr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jūl. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februārī | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jūlijā | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | febr. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jūl. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februāris | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jūlijs | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | pirmd. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektd. | 2019-02-11T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | pirmd. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektd. | 2019-02-11T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | pirmd. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektd. | 2019-02-11T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | pirmdienā | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektdienā | 2019-02-11T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pk | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | pirmd. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektd. | 2019-02-11T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | pirmdienā | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektdienā | 2019-02-11T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pk | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | pirmd. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektd. | 2019-02-11T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | pirmdienā | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektdienā | 2019-02-11T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pk | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | pirmd. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektd. | 2019-02-11T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | pirmdiena | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piektdiena | 2019-02-11T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pk | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | rītā | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pēcpusd. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vakarā | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktī | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | rītā | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pēcpusd. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vakarā | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktī | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | rītā | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pēcpusd. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vakarā | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktī | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | rītā | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pēcpusdienā | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vakarā | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktī | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | rītā | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | dienā | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | vakarā | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | naktī | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453. | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11.02.1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453. | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987. gada 11. februārī | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453. gada 29. maijā | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | trešdienā, 1987. gada 11. februārī | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | svētdienā, 1453. gada 29. maijā | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987., 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453., 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11.02.1987., 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453., 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987. gada 11. februārī plkst. 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453. gada 29. maijā plkst. 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | trešdienā, 1987. gada 11. februārī plkst. 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | svētdienā, 1453. gada 29. maijā plkst. 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------- | ---------------------- | ----------------------- |
+| 2006-01-01T00:00:00.000Z | apmēram 6 gadi | apmēram 6 gadi | pēc apmēram 6 gadiem |
+| 2005-01-01T00:00:00.000Z | apmēram 5 gadi | apmēram 5 gadi | pēc apmēram 5 gadiem |
+| 2004-01-01T00:00:00.000Z | apmēram 4 gadi | apmēram 4 gadi | pēc apmēram 4 gadiem |
+| 2003-01-01T00:00:00.000Z | apmēram 3 gadi | apmēram 3 gadi | pēc apmēram 3 gadiem |
+| 2002-01-01T00:00:00.000Z | apmēram 2 gadi | apmēram 2 gadi | pēc apmēram 2 gadiem |
+| 2001-06-01T00:00:00.000Z | ilgāk par 1 gadu | ilgāk par 1 gadu | pēc ilgāk par 1 gadu |
+| 2001-02-01T00:00:00.000Z | apmēram 1 gads | apmēram 1 gads | pēc apmēram 1 gada |
+| 2001-01-01T00:00:00.000Z | apmēram 1 gads | apmēram 1 gads | pēc apmēram 1 gada |
+| 2000-06-01T00:00:00.000Z | 5 mēneši | 5 mēneši | pēc 5 mēnešiem |
+| 2000-03-01T00:00:00.000Z | 2 mēneši | 2 mēneši | pēc 2 mēnešiem |
+| 2000-02-01T00:00:00.000Z | apmēram 1 mēnesis | apmēram 1 mēnesis | pēc apmēram 1 mēneša |
+| 2000-01-15T00:00:00.000Z | 14 dienas | 14 dienas | pēc 14 dienām |
+| 2000-01-02T00:00:00.000Z | 1 diena | 1 diena | pēc 1 dienas |
+| 2000-01-01T06:00:00.000Z | apmēram 6 stundas | apmēram 6 stundas | pēc apmēram 6 stundām |
+| 2000-01-01T01:00:00.000Z | apmēram 1 stunda | apmēram 1 stunda | pēc apmēram 1 stundas |
+| 2000-01-01T00:45:00.000Z | apmēram 1 stunda | apmēram 1 stunda | pēc apmēram 1 stundas |
+| 2000-01-01T00:30:00.000Z | 30 minūtes | 30 minūtes | pēc 30 minūtēm |
+| 2000-01-01T00:15:00.000Z | 15 minūtes | 15 minūtes | pēc 15 minūtēm |
+| 2000-01-01T00:01:00.000Z | 1 minūte | 1 minūte | pēc 1 minūtes |
+| 2000-01-01T00:00:25.000Z | mazāk par minūti | pusminūte | pēc mazāk par minūti |
+| 2000-01-01T00:00:15.000Z | mazāk par minūti | mazāk nekā 20 sekundes | pēc mazāk par minūti |
+| 2000-01-01T00:00:05.000Z | mazāk par minūti | mazāk nekā 10 sekundes | pēc mazāk par minūti |
+| 2000-01-01T00:00:00.000Z | mazāk par minūti | mazāk nekā 5 sekundes | pirms mazāk par minūti |
+| 1999-12-31T23:59:55.000Z | mazāk par minūti | mazāk nekā 10 sekundes | pirms mazāk par minūti |
+| 1999-12-31T23:59:45.000Z | mazāk par minūti | mazāk nekā 20 sekundes | pirms mazāk par minūti |
+| 1999-12-31T23:59:35.000Z | mazāk par minūti | pusminūte | pirms mazāk par minūti |
+| 1999-12-31T23:59:00.000Z | 1 minūte | 1 minūte | pirms 1 minūtes |
+| 1999-12-31T23:45:00.000Z | 15 minūtes | 15 minūtes | pirms 15 minūtēm |
+| 1999-12-31T23:30:00.000Z | 30 minūtes | 30 minūtes | pirms 30 minūtēm |
+| 1999-12-31T23:15:00.000Z | apmēram 1 stunda | apmēram 1 stunda | pirms apmēram 1 stundas |
+| 1999-12-31T23:00:00.000Z | apmēram 1 stunda | apmēram 1 stunda | pirms apmēram 1 stundas |
+| 1999-12-31T18:00:00.000Z | apmēram 6 stundas | apmēram 6 stundas | pirms apmēram 6 stundām |
+| 1999-12-30T00:00:00.000Z | 2 dienas | 2 dienas | pirms 2 dienām |
+| 1999-12-15T00:00:00.000Z | 17 dienas | 17 dienas | pirms 17 dienām |
+| 1999-12-01T00:00:00.000Z | apmēram 1 mēnesis | apmēram 1 mēnesis | pirms apmēram 1 mēneša |
+| 1999-11-01T00:00:00.000Z | 2 mēneši | 2 mēneši | pirms 2 mēnešiem |
+| 1999-06-01T00:00:00.000Z | 7 mēneši | 7 mēneši | pirms 7 mēnešiem |
+| 1999-01-01T00:00:00.000Z | apmēram 1 gads | apmēram 1 gads | pirms apmēram 1 gada |
+| 1998-12-01T00:00:00.000Z | apmēram 1 gads | apmēram 1 gads | pirms apmēram 1 gada |
+| 1998-06-01T00:00:00.000Z | ilgāk par 1 gadu | ilgāk par 1 gadu | pirms ilgāk par 1 gadu |
+| 1998-01-01T00:00:00.000Z | apmēram 2 gadi | apmēram 2 gadi | pirms apmēram 2 gadiem |
+| 1997-01-01T00:00:00.000Z | apmēram 3 gadi | apmēram 3 gadi | pirms apmēram 3 gadiem |
+| 1996-01-01T00:00:00.000Z | apmēram 4 gadi | apmēram 4 gadi | pirms apmēram 4 gadiem |
+| 1995-01-01T00:00:00.000Z | apmēram 5 gadi | apmēram 5 gadi | pirms apmēram 5 gadiem |
+| 1994-01-01T00:00:00.000Z | apmēram 6 gadi | apmēram 6 gadi | pirms apmēram 6 gadiem |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 gadi | pēc 6 gadiem | 52608 stundas |
+| 2005-01-01T00:00:00.000Z | 5 gadi | pēc 5 gadiem | 43848 stundas |
+| 2004-01-01T00:00:00.000Z | 4 gadi | pēc 4 gadiem | 35064 stundas |
+| 2003-01-01T00:00:00.000Z | 3 gadi | pēc 3 gadiem | 26304 stundas |
+| 2002-01-01T00:00:00.000Z | 2 gadi | pēc 2 gadiem | 17544 stundas |
+| 2001-06-01T00:00:00.000Z | 1 gads | pēc 1 gada | 12408 stundas |
+| 2001-02-01T00:00:00.000Z | 1 gads | pēc 1 gada | 9528 stundas |
+| 2001-01-01T00:00:00.000Z | 1 gads | pēc 1 gada | 8784 stundas |
+| 2000-06-01T00:00:00.000Z | 5 mēneši | pēc 5 mēnešiem | 3648 stundas |
+| 2000-03-01T00:00:00.000Z | 2 mēneši | pēc 2 mēnešiem | 1440 stundas |
+| 2000-02-01T00:00:00.000Z | 1 mēnesis | pēc 1 mēneša | 744 stundas |
+| 2000-01-15T00:00:00.000Z | 14 dienas | pēc 14 dienām | 336 stundas |
+| 2000-01-02T00:00:00.000Z | 1 diena | pēc 1 dienas | 24 stundas |
+| 2000-01-01T06:00:00.000Z | 6 stundas | pēc 6 stundām | 6 stundas |
+| 2000-01-01T01:00:00.000Z | 1 stunda | pēc 1 stundas | 1 stunda |
+| 2000-01-01T00:45:00.000Z | 45 minūtes | pēc 45 minūtēm | 1 stunda |
+| 2000-01-01T00:30:00.000Z | 30 minūtes | pēc 30 minūtēm | 1 stunda |
+| 2000-01-01T00:15:00.000Z | 15 minūtes | pēc 15 minūtēm | 0 stundas |
+| 2000-01-01T00:01:00.000Z | 1 minūte | pēc 1 minūtes | 0 stundas |
+| 2000-01-01T00:00:25.000Z | 25 sekundes | pēc 25 sekundēm | 0 stundas |
+| 2000-01-01T00:00:15.000Z | 15 sekundes | pēc 15 sekundēm | 0 stundas |
+| 2000-01-01T00:00:05.000Z | 5 sekundes | pēc 5 sekundēm | 0 stundas |
+| 2000-01-01T00:00:00.000Z | 0 sekundes | pirms 0 sekundēm | 0 stundas |
+| 1999-12-31T23:59:55.000Z | 5 sekundes | pirms 5 sekundēm | 0 stundas |
+| 1999-12-31T23:59:45.000Z | 15 sekundes | pirms 15 sekundēm | 0 stundas |
+| 1999-12-31T23:59:35.000Z | 25 sekundes | pirms 25 sekundēm | 0 stundas |
+| 1999-12-31T23:59:00.000Z | 1 minūte | pirms 1 minūtes | 0 stundas |
+| 1999-12-31T23:45:00.000Z | 15 minūtes | pirms 15 minūtēm | 0 stundas |
+| 1999-12-31T23:30:00.000Z | 30 minūtes | pirms 30 minūtēm | 1 stunda |
+| 1999-12-31T23:15:00.000Z | 45 minūtes | pirms 45 minūtēm | 1 stunda |
+| 1999-12-31T23:00:00.000Z | 1 stunda | pirms 1 stundas | 1 stunda |
+| 1999-12-31T18:00:00.000Z | 6 stundas | pirms 6 stundām | 6 stundas |
+| 1999-12-30T00:00:00.000Z | 2 dienas | pirms 2 dienām | 48 stundas |
+| 1999-12-15T00:00:00.000Z | 17 dienas | pirms 17 dienām | 408 stundas |
+| 1999-12-01T00:00:00.000Z | 1 mēnesis | pirms 1 mēneša | 744 stundas |
+| 1999-11-01T00:00:00.000Z | 2 mēneši | pirms 2 mēnešiem | 1464 stundas |
+| 1999-06-01T00:00:00.000Z | 7 mēneši | pirms 7 mēnešiem | 5136 stundas |
+| 1999-01-01T00:00:00.000Z | 1 gads | pirms 1 gada | 8760 stundas |
+| 1998-12-01T00:00:00.000Z | 1 gads | pirms 1 gada | 9504 stundas |
+| 1998-06-01T00:00:00.000Z | 2 gadi | pirms 2 gadiem | 13896 stundas |
+| 1998-01-01T00:00:00.000Z | 2 gadi | pirms 2 gadiem | 17520 stundas |
+| 1997-01-01T00:00:00.000Z | 3 gadi | pirms 3 gadiem | 26280 stundas |
+| 1996-01-01T00:00:00.000Z | 4 gadi | pirms 4 gadiem | 35064 stundas |
+| 1995-01-01T00:00:00.000Z | 5 gadi | pirms 5 gadiem | 43824 stundas |
+| 1994-01-01T00:00:00.000Z | 6 gadi | pirms 6 gadiem | 52584 stundas |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000. |
+| 2000-01-05T00:00:00.000Z | Nākamajā trešdienā plkst. 00:00 |
+| 2000-01-02T00:00:00.000Z | Rīt plkst. 00:00 |
+| 2000-01-01T00:00:00.000Z | Šodien plkst. 00:00 |
+| 1999-12-31T00:00:00.000Z | Vakar plkst. 00:00 |
+| 1999-12-27T00:00:00.000Z | pirmdienā plkst. 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999. |
diff --git a/date-fns/src/locale/mk/_lib/formatDistance/index.js b/date-fns/src/locale/mk/_lib/formatDistance/index.js
new file mode 100644
index 0000000..395ebf4
--- /dev/null
+++ b/date-fns/src/locale/mk/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'помалку од секунда',
+ other: 'помалку од {{count}} секунди'
+ },
+
+ xSeconds: {
+ one: '1 секунда',
+ other: '{{count}} секунди'
+ },
+
+ halfAMinute: 'половина минута',
+
+ lessThanXMinutes: {
+ one: 'помалку од минута',
+ other: 'помалку од {{count}} минути'
+ },
+
+ xMinutes: {
+ one: '1 минута',
+ other: '{{count}} минути'
+ },
+
+ aboutXHours: {
+ one: 'околу 1 час',
+ other: 'околу {{count}} часа'
+ },
+
+ xHours: {
+ one: '1 час',
+ other: '{{count}} часа'
+ },
+
+ xDays: {
+ one: '1 ден',
+ other: '{{count}} дена'
+ },
+
+ aboutXWeeks: {
+ one: 'околу 1 недела',
+ other: 'околу {{count}} месеци'
+ },
+
+ xWeeks: {
+ one: '1 недела',
+ other: '{{count}} недели'
+ },
+
+ aboutXMonths: {
+ one: 'околу 1 месец',
+ other: 'околу {{count}} недели'
+ },
+
+ xMonths: {
+ one: '1 месец',
+ other: '{{count}} месеци'
+ },
+
+ aboutXYears: {
+ one: 'околу 1 година',
+ other: 'околу {{count}} години'
+ },
+
+ xYears: {
+ one: '1 година',
+ other: '{{count}} години'
+ },
+
+ overXYears: {
+ one: 'повеќе од 1 година',
+ other: 'повеќе од {{count}} години'
+ },
+
+ almostXYears: {
+ one: 'безмалку 1 година',
+ other: 'безмалку {{count}} години'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'за ' + result
+ } else {
+ return 'пред ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/mk/_lib/formatLong/index.js b/date-fns/src/locale/mk/_lib/formatLong/index.js
new file mode 100644
index 0000000..bf70409
--- /dev/null
+++ b/date-fns/src/locale/mk/_lib/formatLong/index.js
@@ -0,0 +1,38 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, dd MMMM yyyy',
+ long: 'dd MMMM yyyy',
+ medium: 'dd MMM yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ any: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'any'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/mk/_lib/formatRelative/index.js b/date-fns/src/locale/mk/_lib/formatRelative/index.js
new file mode 100644
index 0000000..380e1e2
--- /dev/null
+++ b/date-fns/src/locale/mk/_lib/formatRelative/index.js
@@ -0,0 +1,92 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+var weekdays = [
+ 'недела',
+ 'понеделник',
+ 'вторник',
+ 'среда',
+ 'четврток',
+ 'петок',
+ 'сабота'
+]
+
+function lastWeek(day) {
+ var weekday = weekdays[day]
+
+ switch (day) {
+ case 0:
+ case 3:
+ case 6:
+ return "'минатата " + weekday + " во' p"
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return "'минатиот " + weekday + " во' p"
+ }
+}
+
+function thisWeek(day) {
+ var weekday = weekdays[day]
+
+ switch (day) {
+ case 0:
+ case 3:
+ case 6:
+ return "'ова " + weekday + " вo' p"
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return "'овој " + weekday + " вo' p"
+ }
+}
+
+function nextWeek(day) {
+ var weekday = weekdays[day]
+
+ switch (day) {
+ case 0:
+ case 3:
+ case 6:
+ return "'следната " + weekday + " вo' p"
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return "'следниот " + weekday + " вo' p"
+ }
+}
+
+var formatRelativeLocale = {
+ lastWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return lastWeek(day)
+ }
+ },
+ yesterday: "'вчера во' p",
+ today: "'денес во' p",
+ tomorrow: "'утре во' p",
+ nextWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return nextWeek(day)
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/mk/_lib/localize/index.js b/date-fns/src/locale/mk/_lib/localize/index.js
new file mode 100644
index 0000000..cbda0ff
--- /dev/null
+++ b/date-fns/src/locale/mk/_lib/localize/index.js
@@ -0,0 +1,124 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['пр.н.е.', 'н.е.'],
+ abbreviated: ['пред н. е.', 'н. е.'],
+ wide: ['пред нашата ера', 'нашата ера']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1-ви кв.', '2-ри кв.', '3-ти кв.', '4-ти кв.'],
+ wide: ['1-ви квартал', '2-ри квартал', '3-ти квартал', '4-ти квартал']
+}
+
+var monthValues = {
+ abbreviated: [
+ 'јан',
+ 'фев',
+ 'мар',
+ 'апр',
+ 'мај',
+ 'јун',
+ 'јул',
+ 'авг',
+ 'септ',
+ 'окт',
+ 'ноем',
+ 'дек'
+ ],
+ wide: [
+ 'јануари',
+ 'февруари',
+ 'март',
+ 'април',
+ 'мај',
+ 'јуни',
+ 'јули',
+ 'август',
+ 'септември',
+ 'октомври',
+ 'ноември',
+ 'декември'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Н', 'П', 'В', 'С', 'Ч', 'П', 'С'],
+ short: ['не', 'по', 'вт', 'ср', 'че', 'пе', 'са'],
+ abbreviated: ['нед', 'пон', 'вто', 'сре', 'чет', 'пет', 'саб'],
+ wide: [
+ 'недела',
+ 'понеделник',
+ 'вторник',
+ 'среда',
+ 'четврток',
+ 'петок',
+ 'сабота'
+ ]
+}
+
+var dayPeriodValues = {
+ wide: {
+ am: 'претпладне',
+ pm: 'попладне',
+ midnight: 'полноќ',
+ noon: 'напладне',
+ morning: 'наутро',
+ afternoon: 'попладне',
+ evening: 'навечер',
+ night: 'ноќе'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+
+ var rem100 = number % 100
+ if (rem100 > 20 || rem100 < 10) {
+ switch (rem100 % 10) {
+ case 1:
+ return number + '-ви'
+ case 2:
+ return number + '-ри'
+ case 7:
+ case 8:
+ return number + '-ми'
+ }
+ }
+ return number + '-ти'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/mk/_lib/match/index.js b/date-fns/src/locale/mk/_lib/match/index.js
new file mode 100644
index 0000000..c8ccda6
--- /dev/null
+++ b/date-fns/src/locale/mk/_lib/match/index.js
@@ -0,0 +1,124 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-?[врмт][и])?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^((пр)?н\.?\s?е\.?)/i,
+ abbreviated: /^((пр)?н\.?\s?е\.?)/i,
+ wide: /^(пред нашата ера|нашата ера)/i
+}
+var parseEraPatterns = {
+ any: [/^п/i, /^н/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234](-?[врт]?и?)? кв.?/i,
+ wide: /^[1234](-?[врт]?и?)? квартал/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchDayPatterns = {
+ narrow: /^[нпвсч]/i,
+ short: /^(не|по|вт|ср|че|пе|са)/i,
+ abbreviated: /^(нед|пон|вто|сре|чет|пет|саб)/i,
+ wide: /^(недела|понеделник|вторник|среда|четврток|петок|сабота)/i
+}
+
+var parseDayPatterns = {
+ narrow: [/^н/i, /^п/i, /^в/i, /^с/i, /^ч/i, /^п/i, /^с/i],
+ any: [/^н[ед]/i, /^п[он]/i, /^вт/i, /^ср/i, /^ч[ет]/i, /^п[ет]/i, /^с[аб]/i]
+}
+
+var matchMonthPatterns = {
+ abbreviated: /^(јан|фев|мар|апр|мај|јун|јул|авг|сеп|окт|ноем|дек)/i,
+ wide: /^(јануари|февруари|март|април|мај|јуни|јули|август|септември|октомври|ноември|декември)/i
+}
+
+var parseMonthPatterns = {
+ any: [
+ /^ја/i,
+ /^Ф/i,
+ /^мар/i,
+ /^ап/i,
+ /^мај/i,
+ /^јун/i,
+ /^јул/i,
+ /^ав/i,
+ /^се/i,
+ /^окт/i,
+ /^но/i,
+ /^де/i
+ ]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(претп|попл|полноќ|утро|пладне|вечер|ноќ)/i
+}
+
+var parseDayPeriodPatterns = {
+ any: {
+ am: /претпладне/i,
+ pm: /попладне/i,
+ midnight: /полноќ/i,
+ noon: /напладне/i,
+ morning: /наутро/i,
+ afternoon: /попладне/i,
+ evening: /навечер/i,
+ night: /ноќе/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/mk/index.d.ts b/date-fns/src/locale/mk/index.d.ts
new file mode 100644
index 0000000..b845b31
--- /dev/null
+++ b/date-fns/src/locale/mk/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { mk } from 'date-fns/locale'
+export default mk
diff --git a/date-fns/src/locale/mk/index.js b/date-fns/src/locale/mk/index.js
new file mode 100644
index 0000000..469a3e2
--- /dev/null
+++ b/date-fns/src/locale/mk/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Macedonian locale.
+ * @language Macedonian
+ * @iso-639-2 mkd
+ * @author Petar Vlahu [@vlahupetar]{@link https://github.com/vlahupetar}
+ * @author Altrim Beqiri [@altrim]{@link https://github.com/altrim}
+ */
+var locale = {
+ code: 'mk',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/mk/index.js.flow b/date-fns/src/locale/mk/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/mk/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/mk/snapshot.md b/date-fns/src/locale/mk/snapshot.md
new file mode 100644
index 0000000..d4ef913
--- /dev/null
+++ b/date-fns/src/locale/mk/snapshot.md
@@ -0,0 +1,304 @@
+# Macedonian (mk) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-ми | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-ти | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-ми | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4-ти | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-ви | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ри | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1-ви кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ри кв. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-ви квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ри квартал | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-ви | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ри | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1-ви кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ри кв. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-ви квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-ри квартал | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-ри | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ми | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | фев | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јул | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | февруари | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јули | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | февруари | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јули | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-ри | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-ми | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | фев | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јул | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | февруари | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јули | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | февруари | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јули | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-ви | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ми | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-ви | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-ми | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-ти | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-ми | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-ри | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-ти | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | понеделник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петок | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | по | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пе | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-ви | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ти | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | понеделник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петок | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | по | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пе | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-ви | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ти | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | понеделник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петок | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | по | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пе | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-ви | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-ти | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | понеделник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петок | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | по | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пе | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| | aa | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| | aaa | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| | aaaa | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| | aaaaa | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| | bb | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| | bbb | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| | bbbb | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| | bbbbb | 2019-02-11T11:13:14.015Z | претпладне | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | претпладне | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | наутро | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | навечер | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ноќе | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | наутро | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | навечер | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ноќе | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | наутро | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | навечер | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ноќе | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | наутро | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | навечер | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ноќе | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | наутро | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | попладне | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | навечер | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | ноќе | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-ти | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-ти | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-ти | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-ти | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-ти | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-ти | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-ти | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-ти | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-ви | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-ти | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-ви | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-ти | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 фев 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мај 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 февруари 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мај 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | среда, 11 февруари 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | недела, 29 мај 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 фев 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мај 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 февруари 1987 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 мај 1453 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | среда, 11 февруари 1987 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | недела, 29 мај 1453 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ----------------------- |
+| 2006-01-01T00:00:00.000Z | околу 6 години | околу 6 години | за околу 6 години |
+| 2005-01-01T00:00:00.000Z | околу 5 години | околу 5 години | за околу 5 години |
+| 2004-01-01T00:00:00.000Z | околу 4 години | околу 4 години | за околу 4 години |
+| 2003-01-01T00:00:00.000Z | околу 3 години | околу 3 години | за околу 3 години |
+| 2002-01-01T00:00:00.000Z | околу 2 години | околу 2 години | за околу 2 години |
+| 2001-06-01T00:00:00.000Z | повеќе од 1 година | повеќе од 1 година | за повеќе од 1 година |
+| 2001-02-01T00:00:00.000Z | околу 1 година | околу 1 година | за околу 1 година |
+| 2001-01-01T00:00:00.000Z | околу 1 година | околу 1 година | за околу 1 година |
+| 2000-06-01T00:00:00.000Z | 5 месеци | 5 месеци | за 5 месеци |
+| 2000-03-01T00:00:00.000Z | 2 месеци | 2 месеци | за 2 месеци |
+| 2000-02-01T00:00:00.000Z | околу 1 месец | околу 1 месец | за околу 1 месец |
+| 2000-01-15T00:00:00.000Z | 14 дена | 14 дена | за 14 дена |
+| 2000-01-02T00:00:00.000Z | 1 ден | 1 ден | за 1 ден |
+| 2000-01-01T06:00:00.000Z | околу 6 часа | околу 6 часа | за околу 6 часа |
+| 2000-01-01T01:00:00.000Z | околу 1 час | околу 1 час | за околу 1 час |
+| 2000-01-01T00:45:00.000Z | околу 1 час | околу 1 час | за околу 1 час |
+| 2000-01-01T00:30:00.000Z | 30 минути | 30 минути | за 30 минути |
+| 2000-01-01T00:15:00.000Z | 15 минути | 15 минути | за 15 минути |
+| 2000-01-01T00:01:00.000Z | 1 минута | 1 минута | за 1 минута |
+| 2000-01-01T00:00:25.000Z | помалку од минута | половина минута | за помалку од минута |
+| 2000-01-01T00:00:15.000Z | помалку од минута | помалку од 20 секунди | за помалку од минута |
+| 2000-01-01T00:00:05.000Z | помалку од минута | помалку од 10 секунди | за помалку од минута |
+| 2000-01-01T00:00:00.000Z | помалку од минута | помалку од 5 секунди | пред помалку од минута |
+| 1999-12-31T23:59:55.000Z | помалку од минута | помалку од 10 секунди | пред помалку од минута |
+| 1999-12-31T23:59:45.000Z | помалку од минута | помалку од 20 секунди | пред помалку од минута |
+| 1999-12-31T23:59:35.000Z | помалку од минута | половина минута | пред помалку од минута |
+| 1999-12-31T23:59:00.000Z | 1 минута | 1 минута | пред 1 минута |
+| 1999-12-31T23:45:00.000Z | 15 минути | 15 минути | пред 15 минути |
+| 1999-12-31T23:30:00.000Z | 30 минути | 30 минути | пред 30 минути |
+| 1999-12-31T23:15:00.000Z | околу 1 час | околу 1 час | пред околу 1 час |
+| 1999-12-31T23:00:00.000Z | околу 1 час | околу 1 час | пред околу 1 час |
+| 1999-12-31T18:00:00.000Z | околу 6 часа | околу 6 часа | пред околу 6 часа |
+| 1999-12-30T00:00:00.000Z | 2 дена | 2 дена | пред 2 дена |
+| 1999-12-15T00:00:00.000Z | 17 дена | 17 дена | пред 17 дена |
+| 1999-12-01T00:00:00.000Z | околу 1 месец | околу 1 месец | пред околу 1 месец |
+| 1999-11-01T00:00:00.000Z | 2 месеци | 2 месеци | пред 2 месеци |
+| 1999-06-01T00:00:00.000Z | 7 месеци | 7 месеци | пред 7 месеци |
+| 1999-01-01T00:00:00.000Z | околу 1 година | околу 1 година | пред околу 1 година |
+| 1998-12-01T00:00:00.000Z | околу 1 година | околу 1 година | пред околу 1 година |
+| 1998-06-01T00:00:00.000Z | повеќе од 1 година | повеќе од 1 година | пред повеќе од 1 година |
+| 1998-01-01T00:00:00.000Z | околу 2 години | околу 2 години | пред околу 2 години |
+| 1997-01-01T00:00:00.000Z | околу 3 години | околу 3 години | пред околу 3 години |
+| 1996-01-01T00:00:00.000Z | околу 4 години | околу 4 години | пред околу 4 години |
+| 1995-01-01T00:00:00.000Z | околу 5 години | околу 5 години | пред околу 5 години |
+| 1994-01-01T00:00:00.000Z | околу 6 години | околу 6 години | пред околу 6 години |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 години | за 6 години | 52608 часа |
+| 2005-01-01T00:00:00.000Z | 5 години | за 5 години | 43848 часа |
+| 2004-01-01T00:00:00.000Z | 4 години | за 4 години | 35064 часа |
+| 2003-01-01T00:00:00.000Z | 3 години | за 3 години | 26304 часа |
+| 2002-01-01T00:00:00.000Z | 2 години | за 2 години | 17544 часа |
+| 2001-06-01T00:00:00.000Z | 1 година | за 1 година | 12408 часа |
+| 2001-02-01T00:00:00.000Z | 1 година | за 1 година | 9528 часа |
+| 2001-01-01T00:00:00.000Z | 1 година | за 1 година | 8784 часа |
+| 2000-06-01T00:00:00.000Z | 5 месеци | за 5 месеци | 3648 часа |
+| 2000-03-01T00:00:00.000Z | 2 месеци | за 2 месеци | 1440 часа |
+| 2000-02-01T00:00:00.000Z | 1 месец | за 1 месец | 744 часа |
+| 2000-01-15T00:00:00.000Z | 14 дена | за 14 дена | 336 часа |
+| 2000-01-02T00:00:00.000Z | 1 ден | за 1 ден | 24 часа |
+| 2000-01-01T06:00:00.000Z | 6 часа | за 6 часа | 6 часа |
+| 2000-01-01T01:00:00.000Z | 1 час | за 1 час | 1 час |
+| 2000-01-01T00:45:00.000Z | 45 минути | за 45 минути | 1 час |
+| 2000-01-01T00:30:00.000Z | 30 минути | за 30 минути | 1 час |
+| 2000-01-01T00:15:00.000Z | 15 минути | за 15 минути | 0 часа |
+| 2000-01-01T00:01:00.000Z | 1 минута | за 1 минута | 0 часа |
+| 2000-01-01T00:00:25.000Z | 25 секунди | за 25 секунди | 0 часа |
+| 2000-01-01T00:00:15.000Z | 15 секунди | за 15 секунди | 0 часа |
+| 2000-01-01T00:00:05.000Z | 5 секунди | за 5 секунди | 0 часа |
+| 2000-01-01T00:00:00.000Z | 0 секунди | пред 0 секунди | 0 часа |
+| 1999-12-31T23:59:55.000Z | 5 секунди | пред 5 секунди | 0 часа |
+| 1999-12-31T23:59:45.000Z | 15 секунди | пред 15 секунди | 0 часа |
+| 1999-12-31T23:59:35.000Z | 25 секунди | пред 25 секунди | 0 часа |
+| 1999-12-31T23:59:00.000Z | 1 минута | пред 1 минута | 0 часа |
+| 1999-12-31T23:45:00.000Z | 15 минути | пред 15 минути | 0 часа |
+| 1999-12-31T23:30:00.000Z | 30 минути | пред 30 минути | 1 час |
+| 1999-12-31T23:15:00.000Z | 45 минути | пред 45 минути | 1 час |
+| 1999-12-31T23:00:00.000Z | 1 час | пред 1 час | 1 час |
+| 1999-12-31T18:00:00.000Z | 6 часа | пред 6 часа | 6 часа |
+| 1999-12-30T00:00:00.000Z | 2 дена | пред 2 дена | 48 часа |
+| 1999-12-15T00:00:00.000Z | 17 дена | пред 17 дена | 408 часа |
+| 1999-12-01T00:00:00.000Z | 1 месец | пред 1 месец | 744 часа |
+| 1999-11-01T00:00:00.000Z | 2 месеци | пред 2 месеци | 1464 часа |
+| 1999-06-01T00:00:00.000Z | 7 месеци | пред 7 месеци | 5136 часа |
+| 1999-01-01T00:00:00.000Z | 1 година | пред 1 година | 8760 часа |
+| 1998-12-01T00:00:00.000Z | 1 година | пред 1 година | 9504 часа |
+| 1998-06-01T00:00:00.000Z | 2 години | пред 2 години | 13896 часа |
+| 1998-01-01T00:00:00.000Z | 2 години | пред 2 години | 17520 часа |
+| 1997-01-01T00:00:00.000Z | 3 години | пред 3 години | 26280 часа |
+| 1996-01-01T00:00:00.000Z | 4 години | пред 4 години | 35064 часа |
+| 1995-01-01T00:00:00.000Z | 5 години | пред 5 години | 43824 часа |
+| 1994-01-01T00:00:00.000Z | 6 години | пред 6 години | 52584 часа |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | следната среда вo 0:00 |
+| 2000-01-02T00:00:00.000Z | утре во 0:00 |
+| 2000-01-01T00:00:00.000Z | денес во 0:00 |
+| 1999-12-31T00:00:00.000Z | вчера во 0:00 |
+| 1999-12-27T00:00:00.000Z | овој понеделник вo 0:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/mn/_lib/formatDistance/index.js b/date-fns/src/locale/mn/_lib/formatDistance/index.js
new file mode 100644
index 0000000..28952ae
--- /dev/null
+++ b/date-fns/src/locale/mn/_lib/formatDistance/index.js
@@ -0,0 +1,138 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'секунд хүрэхгүй',
+ other: '{{count}} секунд хүрэхгүй'
+ },
+
+ xSeconds: {
+ one: '1 секунд',
+ other: '{{count}} секунд'
+ },
+
+ halfAMinute: 'хагас минут',
+
+ lessThanXMinutes: {
+ one: 'минут хүрэхгүй',
+ other: '{{count}} минут хүрэхгүй'
+ },
+
+ xMinutes: {
+ one: '1 минут',
+ other: '{{count}} минут'
+ },
+
+ aboutXHours: {
+ one: 'ойролцоогоор 1 цаг',
+ other: 'ойролцоогоор {{count}} цаг'
+ },
+
+ xHours: {
+ one: '1 цаг',
+ other: '{{count}} цаг'
+ },
+
+ xDays: {
+ one: '1 өдөр',
+ other: '{{count}} өдөр'
+ },
+
+ aboutXWeeks: {
+ one: 'ойролцоогоор 1 долоо хоног',
+ other: 'ойролцоогоор {{count}} долоо хоног'
+ },
+
+ xWeeks: {
+ one: '1 долоо хоног',
+ other: '{{count}} долоо хоног'
+ },
+
+ aboutXMonths: {
+ one: 'ойролцоогоор 1 сар',
+ other: 'ойролцоогоор {{count}} сар'
+ },
+
+ xMonths: {
+ one: '1 сар',
+ other: '{{count}} сар'
+ },
+
+ aboutXYears: {
+ one: 'ойролцоогоор 1 жил',
+ other: 'ойролцоогоор {{count}} жил'
+ },
+
+ xYears: {
+ one: '1 жил',
+ other: '{{count}} жил'
+ },
+
+ overXYears: {
+ one: '1 жил гаран',
+ other: '{{count}} жил гаран'
+ },
+
+ almostXYears: {
+ one: 'бараг 1 жил',
+ other: 'бараг {{count}} жил'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ /**
+ * Append genitive case
+ */
+ var words = result.split(' ')
+ var lastword = words.pop()
+ result = words.join(' ')
+ switch (lastword) {
+ case 'секунд':
+ result += ' секундийн'
+ break
+ case 'минут':
+ result += ' минутын'
+ break
+ case 'цаг':
+ result += ' цагийн'
+ break
+ case 'өдөр':
+ result += ' өдрийн'
+ break
+ case 'сар':
+ result += ' сарын'
+ break
+ case 'жил':
+ result += ' жилийн'
+ break
+ case 'хоног':
+ result += ' хоногийн'
+ break
+ case 'гаран':
+ result += ' гараны'
+ break
+ case 'хүрэхгүй':
+ result += ' хүрэхгүй хугацааны'
+ break
+ default:
+ result += lastword + '-н'
+ }
+ if (options.comparison > 0) {
+ return result + ' дараа'
+ } else {
+ return result + ' өмнө'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/mn/_lib/formatLong/index.js b/date-fns/src/locale/mn/_lib/formatLong/index.js
new file mode 100644
index 0000000..2db4a91
--- /dev/null
+++ b/date-fns/src/locale/mn/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "y 'оны' MMMM'ын' d, EEEE 'гараг'",
+ long: "y 'оны' MMMM'ын' d",
+ medium: "y 'оны' MMM'ын' d",
+ short: 'y.MM.dd'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/mn/_lib/formatRelative/index.js b/date-fns/src/locale/mn/_lib/formatRelative/index.js
new file mode 100644
index 0000000..52461ba
--- /dev/null
+++ b/date-fns/src/locale/mn/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'өнгөрсөн' eeee 'гарагийн' p 'цагт'",
+ yesterday: "'өчигдөр' p 'цагт'",
+ today: "'өнөөдөр' p 'цагт'",
+ tomorrow: "'маргааш' p 'цагт'",
+ nextWeek: "'ирэх' eeee 'гарагийн' p 'цагт'",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/mn/_lib/localize/index.js b/date-fns/src/locale/mn/_lib/localize/index.js
new file mode 100644
index 0000000..76b5ba2
--- /dev/null
+++ b/date-fns/src/locale/mn/_lib/localize/index.js
@@ -0,0 +1,208 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['НТӨ', 'НТ'],
+ abbreviated: ['НТӨ', 'НТ'],
+ wide: ['нийтийн тооллын өмнөх', 'нийтийн тооллын'],
+}
+
+var quarterValues = {
+ narrow: ['I', 'II', 'III', 'IV'],
+ abbreviated: ['I улирал', 'II улирал', 'III улирал', 'IV улирал'],
+ wide: ['1-р улирал', '2-р улирал', '3-р улирал', '4-р улирал'],
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: [
+ 'I',
+ 'II',
+ 'III',
+ 'IV',
+ 'V',
+ 'VI',
+ 'VII',
+ 'VIII',
+ 'IX',
+ 'X',
+ 'XI',
+ 'XII',
+ ],
+ abbreviated: [
+ '1-р сар',
+ '2-р сар',
+ '3-р сар',
+ '4-р сар',
+ '5-р сар',
+ '6-р сар',
+ '7-р сар',
+ '8-р сар',
+ '9-р сар',
+ '10-р сар',
+ '11-р сар',
+ '12-р сар',
+ ],
+ wide: [
+ 'Нэгдүгээр сар',
+ 'Хоёрдугаар сар',
+ 'Гуравдугаар сар',
+ 'Дөрөвдүгээр сар',
+ 'Тавдугаар сар',
+ 'Зургаадугаар сар',
+ 'Долоодугаар сар',
+ 'Наймдугаар сар',
+ 'Есдүгээр сар',
+ 'Аравдугаар сар',
+ 'Арваннэгдүгээр сар',
+ 'Арван хоёрдугаар сар',
+ ],
+}
+
+var formattingMonthValues = {
+ narrow: [
+ 'I',
+ 'II',
+ 'III',
+ 'IV',
+ 'V',
+ 'VI',
+ 'VII',
+ 'VIII',
+ 'IX',
+ 'X',
+ 'XI',
+ 'XII',
+ ],
+ abbreviated: [
+ '1-р сар',
+ '2-р сар',
+ '3-р сар',
+ '4-р сар',
+ '5-р сар',
+ '6-р сар',
+ '7-р сар',
+ '8-р сар',
+ '9-р сар',
+ '10-р сар',
+ '11-р сар',
+ '12-р сар',
+ ],
+ wide: [
+ 'нэгдүгээр сар',
+ 'хоёрдугаар сар',
+ 'гуравдугаар сар',
+ 'дөрөвдүгээр сар',
+ 'тавдугаар сар',
+ 'зургаадугаар сар',
+ 'долоодугаар сар',
+ 'наймдугаар сар',
+ 'есдүгээр сар',
+ 'аравдугаар сар',
+ 'арваннэгдүгээр сар',
+ 'арван хоёрдугаар сар',
+ ],
+}
+
+var dayValues = {
+ narrow: ['Н', 'Д', 'М', 'Л', 'П', 'Б', 'Б'],
+ short: ['Ня', 'Да', 'Мя', 'Лх', 'Пү', 'Ба', 'Бя'],
+ abbreviated: ['Ням', 'Дав', 'Мяг', 'Лха', 'Пүр', 'Баа', 'Бям'],
+ wide: ['Ням', 'Даваа', 'Мягмар', 'Лхагва', 'Пүрэв', 'Баасан', 'Бямба'],
+}
+
+var formattingDayValues = {
+ narrow: ['Н', 'Д', 'М', 'Л', 'П', 'Б', 'Б'],
+ short: ['Ня', 'Да', 'Мя', 'Лх', 'Пү', 'Ба', 'Бя'],
+ abbreviated: ['Ням', 'Дав', 'Мяг', 'Лха', 'Пүр', 'Баа', 'Бям'],
+ wide: ['ням', 'даваа', 'мягмар', 'лхагва', 'пүрэв', 'баасан', 'бямба'],
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ү.ө.',
+ pm: 'ү.х.',
+ midnight: 'шөнө дунд',
+ noon: 'үд дунд',
+ morning: 'өглөө',
+ afternoon: 'өдөр',
+ evening: 'орой',
+ night: 'шөнө',
+ },
+ abbreviated: {
+ am: 'ү.ө.',
+ pm: 'ү.х.',
+ midnight: 'шөнө дунд',
+ noon: 'үд дунд',
+ morning: 'өглөө',
+ afternoon: 'өдөр',
+ evening: 'орой',
+ night: 'шөнө',
+ },
+ wide: {
+ am: 'ү.ө.',
+ pm: 'ү.х.',
+ midnight: 'шөнө дунд',
+ noon: 'үд дунд',
+ morning: 'өглөө',
+ afternoon: 'өдөр',
+ evening: 'орой',
+ night: 'шөнө',
+ },
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ return number
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide',
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function (quarter) {
+ return Number(quarter) - 1
+ },
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide',
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayValues,
+ defaultFormattingWidth: 'wide',
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ }),
+}
+
+export default localize
diff --git a/date-fns/src/locale/mn/_lib/match/index.js b/date-fns/src/locale/mn/_lib/match/index.js
new file mode 100644
index 0000000..de6a8b3
--- /dev/null
+++ b/date-fns/src/locale/mn/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /\d+/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(нтө|нт)/i,
+ abbreviated: /^(нтө|нт)/i,
+ wide: /^(нийтийн тооллын өмнө|нийтийн тооллын)/i
+}
+var parseEraPatterns = {
+ any: [/^(нтө|нийтийн тооллын өмнө)/i, /^(нт|нийтийн тооллын)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^(iv|iii|ii|i)/i,
+ abbreviated: /^(iv|iii|ii|i) улирал/i,
+ wide: /^[1-4]-р улирал/i
+}
+var parseQuarterPatterns = {
+ any: [/^(i(\s|$)|1)/i, /^(ii(\s|$)|2)/i, /^(iii(\s|$)|3)/i, /^(iv(\s|$)|4)/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(xii|xi|x|ix|viii|vii|vi|v|iv|iii|ii|i)/i,
+ abbreviated: /^(1-р сар|2-р сар|3-р сар|4-р сар|5-р сар|6-р сар|7-р сар|8-р сар|9-р сар|10-р сар|11-р сар|12-р сар)/i,
+ wide: /^(нэгдүгээр сар|хоёрдугаар сар|гуравдугаар сар|дөрөвдүгээр сар|тавдугаар сар|зургаадугаар сар|долоодугаар сар|наймдугаар сар|есдүгээр сар|аравдугаар сар|арван нэгдүгээр сар|арван хоёрдугаар сар)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^i$/i,
+ /^ii$/i,
+ /^iii$/i,
+ /^iv$/i,
+ /^v$/i,
+ /^vi$/i,
+ /^vii$/i,
+ /^viii$/i,
+ /^ix$/i,
+ /^x$/i,
+ /^xi$/i,
+ /^xii$/i
+ ],
+ any: [
+ /^(1|нэгдүгээр)/i,
+ /^(2|хоёрдугаар)/i,
+ /^(3|гуравдугаар)/i,
+ /^(4|дөрөвдүгээр)/i,
+ /^(5|тавдугаар)/i,
+ /^(6|зургаадугаар)/i,
+ /^(7|долоодугаар)/i,
+ /^(8|наймдугаар)/i,
+ /^(9|есдүгээр)/i,
+ /^(10|аравдугаар)/i,
+ /^(11|арван нэгдүгээр)/i,
+ /^(12|арван хоёрдугаар)/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[ндмлпбб]/i,
+ short: /^(ня|да|мя|лх|пү|ба|бя)/i,
+ abbreviated: /^(ням|дав|мяг|лха|пүр|баа|бям)/i,
+ wide: /^(ням|даваа|мягмар|лхагва|пүрэв|баасан|бямба)/i
+}
+var parseDayPatterns = {
+ narrow: [/^н/i, /^д/i, /^м/i, /^л/i, /^п/i, /^б/i, /^б/i],
+ any: [/^ня/i, /^да/i, /^мя/i, /^лх/i, /^пү/i, /^ба/i, /^бя/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(ү\.ө\.|ү\.х\.|шөнө дунд|үд дунд|өглөө|өдөр|орой|шөнө)/i,
+ any: /^(ү\.ө\.|ү\.х\.|шөнө дунд|үд дунд|өглөө|өдөр|орой|шөнө)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^ү\.ө\./i,
+ pm: /^ү\.х\./i,
+ midnight: /^шөнө дунд/i,
+ noon: /^үд дунд/i,
+ morning: /өглөө/i,
+ afternoon: /өдөр/i,
+ evening: /орой/i,
+ night: /шөнө/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/mn/index.d.ts b/date-fns/src/locale/mn/index.d.ts
new file mode 100644
index 0000000..9b27ad9
--- /dev/null
+++ b/date-fns/src/locale/mn/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { mn } from 'date-fns/locale'
+export default mn
diff --git a/date-fns/src/locale/mn/index.js b/date-fns/src/locale/mn/index.js
new file mode 100644
index 0000000..dcb3562
--- /dev/null
+++ b/date-fns/src/locale/mn/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Mongolian locale.
+ * @language Mongolian
+ * @iso-639-2 mon
+ * @author Bilguun Ochirbat [@bilguun0203]{@link https://github.com/bilguun0203}
+ */
+var locale = {
+ code: 'mn',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/mn/index.js.flow b/date-fns/src/locale/mn/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/mn/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/mn/snapshot.md b/date-fns/src/locale/mn/snapshot.md
new file mode 100644
index 0000000..a94b472
--- /dev/null
+++ b/date-fns/src/locale/mn/snapshot.md
@@ -0,0 +1,304 @@
+# Mongolian (mn) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | I улирал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | II улирал | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-р улирал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-р улирал | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | I | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | II | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | I улирал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | II улирал | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-р улирал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-р улирал | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | 2-р сар | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-р сар | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | хоёрдугаар сар | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | долоодугаар сар | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | II | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | VII | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | 2-р сар | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-р сар | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Хоёрдугаар сар | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Долоодугаар сар | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | II | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | VII | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Дав | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Баа | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Дав | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Баа | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Дав | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Баа | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | даваа | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | баасан | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | Д | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Б | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Да | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ба | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Дав | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Баа | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | даваа | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | баасан | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | Д | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Б | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Да | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ба | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Дав | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Баа | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | даваа | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | баасан | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | Д | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Б | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Да | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ба | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Дав | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Баа | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Даваа | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Баасан | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | Д | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Б | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Да | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ба | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ү.х. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ү.ө. | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | өглөө | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | өдөр | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | орой | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | шөнө | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | өглөө | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | өдөр | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | орой | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | шөнө | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | өглөө | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | өдөр | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | орой | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | шөнө | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | өглөө | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | өдөр | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | орой | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | шөнө | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | өглөө | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | өдөр | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | орой | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | шөнө | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987.02.11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453.05.29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 1987 оны 2-р сарын 11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 оны 5-р сарын 29 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987 оны хоёрдугаар сарын 11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 оны тавдугаар сарын 29 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 1987 оны хоёрдугаар сарын 11, лхагва гараг | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 оны тавдугаар сарын 29, ням гараг | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987.02.11 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453.05.29 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 1987 оны 2-р сарын 11 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 оны 5-р сарын 29 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987 оны хоёрдугаар сарын 11 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 оны тавдугаар сарын 29 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 1987 оны хоёрдугаар сарын 11, лхагва гараг 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 оны тавдугаар сарын 29, ням гараг 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | ойролцоогоор 6 жил | ойролцоогоор 6 жил | ойролцоогоор 6 жилийн дараа |
+| 2005-01-01T00:00:00.000Z | ойролцоогоор 5 жил | ойролцоогоор 5 жил | ойролцоогоор 5 жилийн дараа |
+| 2004-01-01T00:00:00.000Z | ойролцоогоор 4 жил | ойролцоогоор 4 жил | ойролцоогоор 4 жилийн дараа |
+| 2003-01-01T00:00:00.000Z | ойролцоогоор 3 жил | ойролцоогоор 3 жил | ойролцоогоор 3 жилийн дараа |
+| 2002-01-01T00:00:00.000Z | ойролцоогоор 2 жил | ойролцоогоор 2 жил | ойролцоогоор 2 жилийн дараа |
+| 2001-06-01T00:00:00.000Z | 1 жил гаран | 1 жил гаран | 1 жил гараны дараа |
+| 2001-02-01T00:00:00.000Z | ойролцоогоор 1 жил | ойролцоогоор 1 жил | ойролцоогоор 1 жилийн дараа |
+| 2001-01-01T00:00:00.000Z | ойролцоогоор 1 жил | ойролцоогоор 1 жил | ойролцоогоор 1 жилийн дараа |
+| 2000-06-01T00:00:00.000Z | 5 сар | 5 сар | 5 сарын дараа |
+| 2000-03-01T00:00:00.000Z | 2 сар | 2 сар | 2 сарын дараа |
+| 2000-02-01T00:00:00.000Z | ойролцоогоор 1 сар | ойролцоогоор 1 сар | ойролцоогоор 1 сарын дараа |
+| 2000-01-15T00:00:00.000Z | 14 өдөр | 14 өдөр | 14 өдрийн дараа |
+| 2000-01-02T00:00:00.000Z | 1 өдөр | 1 өдөр | 1 өдрийн дараа |
+| 2000-01-01T06:00:00.000Z | ойролцоогоор 6 цаг | ойролцоогоор 6 цаг | ойролцоогоор 6 цагийн дараа |
+| 2000-01-01T01:00:00.000Z | ойролцоогоор 1 цаг | ойролцоогоор 1 цаг | ойролцоогоор 1 цагийн дараа |
+| 2000-01-01T00:45:00.000Z | ойролцоогоор 1 цаг | ойролцоогоор 1 цаг | ойролцоогоор 1 цагийн дараа |
+| 2000-01-01T00:30:00.000Z | 30 минут | 30 минут | 30 минутын дараа |
+| 2000-01-01T00:15:00.000Z | 15 минут | 15 минут | 15 минутын дараа |
+| 2000-01-01T00:01:00.000Z | 1 минут | 1 минут | 1 минутын дараа |
+| 2000-01-01T00:00:25.000Z | минут хүрэхгүй | хагас минут | минут хүрэхгүй хугацааны дараа |
+| 2000-01-01T00:00:15.000Z | минут хүрэхгүй | 20 секунд хүрэхгүй | минут хүрэхгүй хугацааны дараа |
+| 2000-01-01T00:00:05.000Z | минут хүрэхгүй | 10 секунд хүрэхгүй | минут хүрэхгүй хугацааны дараа |
+| 2000-01-01T00:00:00.000Z | минут хүрэхгүй | 5 секунд хүрэхгүй | минут хүрэхгүй хугацааны өмнө |
+| 1999-12-31T23:59:55.000Z | минут хүрэхгүй | 10 секунд хүрэхгүй | минут хүрэхгүй хугацааны өмнө |
+| 1999-12-31T23:59:45.000Z | минут хүрэхгүй | 20 секунд хүрэхгүй | минут хүрэхгүй хугацааны өмнө |
+| 1999-12-31T23:59:35.000Z | минут хүрэхгүй | хагас минут | минут хүрэхгүй хугацааны өмнө |
+| 1999-12-31T23:59:00.000Z | 1 минут | 1 минут | 1 минутын өмнө |
+| 1999-12-31T23:45:00.000Z | 15 минут | 15 минут | 15 минутын өмнө |
+| 1999-12-31T23:30:00.000Z | 30 минут | 30 минут | 30 минутын өмнө |
+| 1999-12-31T23:15:00.000Z | ойролцоогоор 1 цаг | ойролцоогоор 1 цаг | ойролцоогоор 1 цагийн өмнө |
+| 1999-12-31T23:00:00.000Z | ойролцоогоор 1 цаг | ойролцоогоор 1 цаг | ойролцоогоор 1 цагийн өмнө |
+| 1999-12-31T18:00:00.000Z | ойролцоогоор 6 цаг | ойролцоогоор 6 цаг | ойролцоогоор 6 цагийн өмнө |
+| 1999-12-30T00:00:00.000Z | 2 өдөр | 2 өдөр | 2 өдрийн өмнө |
+| 1999-12-15T00:00:00.000Z | 17 өдөр | 17 өдөр | 17 өдрийн өмнө |
+| 1999-12-01T00:00:00.000Z | ойролцоогоор 1 сар | ойролцоогоор 1 сар | ойролцоогоор 1 сарын өмнө |
+| 1999-11-01T00:00:00.000Z | 2 сар | 2 сар | 2 сарын өмнө |
+| 1999-06-01T00:00:00.000Z | 7 сар | 7 сар | 7 сарын өмнө |
+| 1999-01-01T00:00:00.000Z | ойролцоогоор 1 жил | ойролцоогоор 1 жил | ойролцоогоор 1 жилийн өмнө |
+| 1998-12-01T00:00:00.000Z | ойролцоогоор 1 жил | ойролцоогоор 1 жил | ойролцоогоор 1 жилийн өмнө |
+| 1998-06-01T00:00:00.000Z | 1 жил гаран | 1 жил гаран | 1 жил гараны өмнө |
+| 1998-01-01T00:00:00.000Z | ойролцоогоор 2 жил | ойролцоогоор 2 жил | ойролцоогоор 2 жилийн өмнө |
+| 1997-01-01T00:00:00.000Z | ойролцоогоор 3 жил | ойролцоогоор 3 жил | ойролцоогоор 3 жилийн өмнө |
+| 1996-01-01T00:00:00.000Z | ойролцоогоор 4 жил | ойролцоогоор 4 жил | ойролцоогоор 4 жилийн өмнө |
+| 1995-01-01T00:00:00.000Z | ойролцоогоор 5 жил | ойролцоогоор 5 жил | ойролцоогоор 5 жилийн өмнө |
+| 1994-01-01T00:00:00.000Z | ойролцоогоор 6 жил | ойролцоогоор 6 жил | ойролцоогоор 6 жилийн өмнө |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 жил | 6 жилийн дараа | 52608 цаг |
+| 2005-01-01T00:00:00.000Z | 5 жил | 5 жилийн дараа | 43848 цаг |
+| 2004-01-01T00:00:00.000Z | 4 жил | 4 жилийн дараа | 35064 цаг |
+| 2003-01-01T00:00:00.000Z | 3 жил | 3 жилийн дараа | 26304 цаг |
+| 2002-01-01T00:00:00.000Z | 2 жил | 2 жилийн дараа | 17544 цаг |
+| 2001-06-01T00:00:00.000Z | 1 жил | 1 жилийн дараа | 12408 цаг |
+| 2001-02-01T00:00:00.000Z | 1 жил | 1 жилийн дараа | 9528 цаг |
+| 2001-01-01T00:00:00.000Z | 1 жил | 1 жилийн дараа | 8784 цаг |
+| 2000-06-01T00:00:00.000Z | 5 сар | 5 сарын дараа | 3648 цаг |
+| 2000-03-01T00:00:00.000Z | 2 сар | 2 сарын дараа | 1440 цаг |
+| 2000-02-01T00:00:00.000Z | 1 сар | 1 сарын дараа | 744 цаг |
+| 2000-01-15T00:00:00.000Z | 14 өдөр | 14 өдрийн дараа | 336 цаг |
+| 2000-01-02T00:00:00.000Z | 1 өдөр | 1 өдрийн дараа | 24 цаг |
+| 2000-01-01T06:00:00.000Z | 6 цаг | 6 цагийн дараа | 6 цаг |
+| 2000-01-01T01:00:00.000Z | 1 цаг | 1 цагийн дараа | 1 цаг |
+| 2000-01-01T00:45:00.000Z | 45 минут | 45 минутын дараа | 1 цаг |
+| 2000-01-01T00:30:00.000Z | 30 минут | 30 минутын дараа | 1 цаг |
+| 2000-01-01T00:15:00.000Z | 15 минут | 15 минутын дараа | 0 цаг |
+| 2000-01-01T00:01:00.000Z | 1 минут | 1 минутын дараа | 0 цаг |
+| 2000-01-01T00:00:25.000Z | 25 секунд | 25 секундийн дараа | 0 цаг |
+| 2000-01-01T00:00:15.000Z | 15 секунд | 15 секундийн дараа | 0 цаг |
+| 2000-01-01T00:00:05.000Z | 5 секунд | 5 секундийн дараа | 0 цаг |
+| 2000-01-01T00:00:00.000Z | 0 секунд | 0 секундийн өмнө | 0 цаг |
+| 1999-12-31T23:59:55.000Z | 5 секунд | 5 секундийн өмнө | 0 цаг |
+| 1999-12-31T23:59:45.000Z | 15 секунд | 15 секундийн өмнө | 0 цаг |
+| 1999-12-31T23:59:35.000Z | 25 секунд | 25 секундийн өмнө | 0 цаг |
+| 1999-12-31T23:59:00.000Z | 1 минут | 1 минутын өмнө | 0 цаг |
+| 1999-12-31T23:45:00.000Z | 15 минут | 15 минутын өмнө | 0 цаг |
+| 1999-12-31T23:30:00.000Z | 30 минут | 30 минутын өмнө | 1 цаг |
+| 1999-12-31T23:15:00.000Z | 45 минут | 45 минутын өмнө | 1 цаг |
+| 1999-12-31T23:00:00.000Z | 1 цаг | 1 цагийн өмнө | 1 цаг |
+| 1999-12-31T18:00:00.000Z | 6 цаг | 6 цагийн өмнө | 6 цаг |
+| 1999-12-30T00:00:00.000Z | 2 өдөр | 2 өдрийн өмнө | 48 цаг |
+| 1999-12-15T00:00:00.000Z | 17 өдөр | 17 өдрийн өмнө | 408 цаг |
+| 1999-12-01T00:00:00.000Z | 1 сар | 1 сарын өмнө | 744 цаг |
+| 1999-11-01T00:00:00.000Z | 2 сар | 2 сарын өмнө | 1464 цаг |
+| 1999-06-01T00:00:00.000Z | 7 сар | 7 сарын өмнө | 5136 цаг |
+| 1999-01-01T00:00:00.000Z | 1 жил | 1 жилийн өмнө | 8760 цаг |
+| 1998-12-01T00:00:00.000Z | 1 жил | 1 жилийн өмнө | 9504 цаг |
+| 1998-06-01T00:00:00.000Z | 2 жил | 2 жилийн өмнө | 13896 цаг |
+| 1998-01-01T00:00:00.000Z | 2 жил | 2 жилийн өмнө | 17520 цаг |
+| 1997-01-01T00:00:00.000Z | 3 жил | 3 жилийн өмнө | 26280 цаг |
+| 1996-01-01T00:00:00.000Z | 4 жил | 4 жилийн өмнө | 35064 цаг |
+| 1995-01-01T00:00:00.000Z | 5 жил | 5 жилийн өмнө | 43824 цаг |
+| 1994-01-01T00:00:00.000Z | 6 жил | 6 жилийн өмнө | 52584 цаг |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | --------------------------------- |
+| 2000-01-10T00:00:00.000Z | 2000.01.10 |
+| 2000-01-05T00:00:00.000Z | ирэх лхагва гарагийн 0:00 цагт |
+| 2000-01-02T00:00:00.000Z | маргааш 0:00 цагт |
+| 2000-01-01T00:00:00.000Z | өнөөдөр 0:00 цагт |
+| 1999-12-31T00:00:00.000Z | өчигдөр 0:00 цагт |
+| 1999-12-27T00:00:00.000Z | өнгөрсөн даваа гарагийн 0:00 цагт |
+| 1999-12-21T00:00:00.000Z | 1999.12.21 |
diff --git a/date-fns/src/locale/ms/_lib/formatDistance/index.js b/date-fns/src/locale/ms/_lib/formatDistance/index.js
new file mode 100644
index 0000000..f3e90e3
--- /dev/null
+++ b/date-fns/src/locale/ms/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'kurang dari 1 saat',
+ other: 'kurang dari {{count}} saat'
+ },
+
+ xSeconds: {
+ one: '1 saat',
+ other: '{{count}} saat'
+ },
+
+ halfAMinute: 'setengah minit',
+
+ lessThanXMinutes: {
+ one: 'kurang dari 1 minit',
+ other: 'kurang dari {{count}} minit'
+ },
+
+ xMinutes: {
+ one: '1 minit',
+ other: '{{count}} minit'
+ },
+
+ aboutXHours: {
+ one: 'sekitar 1 jam',
+ other: 'sekitar {{count}} jam'
+ },
+
+ xHours: {
+ one: '1 jam',
+ other: '{{count}} jam'
+ },
+
+ xDays: {
+ one: '1 hari',
+ other: '{{count}} hari'
+ },
+
+ aboutXWeeks: {
+ one: 'sekitar 1 minggu',
+ other: 'sekitar {{count}} minggu'
+ },
+
+ xWeeks: {
+ one: '1 minggu',
+ other: '{{count}} minggu'
+ },
+
+ aboutXMonths: {
+ one: 'sekitar 1 bulan',
+ other: 'sekitar {{count}} bulan'
+ },
+
+ xMonths: {
+ one: '1 bulan',
+ other: '{{count}} bulan'
+ },
+
+ aboutXYears: {
+ one: 'sekitar 1 tahun',
+ other: 'sekitar {{count}} tahun'
+ },
+
+ xYears: {
+ one: '1 tahun',
+ other: '{{count}} tahun'
+ },
+
+ overXYears: {
+ one: 'lebih dari 1 tahun',
+ other: 'lebih dari {{count}} tahun'
+ },
+
+ almostXYears: {
+ one: 'hampir 1 tahun',
+ other: 'hampir {{count}} tahun'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'dalam masa ' + result
+ } else {
+ return result + ' yang lalu'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ms/_lib/formatLong/index.js b/date-fns/src/locale/ms/_lib/formatLong/index.js
new file mode 100644
index 0000000..d8ea107
--- /dev/null
+++ b/date-fns/src/locale/ms/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'd/M/yyyy'
+}
+
+var timeFormats = {
+ full: 'HH.mm.ss',
+ long: 'HH.mm.ss',
+ medium: 'HH.mm',
+ short: 'HH.mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'pukul' {{time}}",
+ long: "{{date}} 'pukul' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ms/_lib/formatRelative/index.js b/date-fns/src/locale/ms/_lib/formatRelative/index.js
new file mode 100644
index 0000000..60b6541
--- /dev/null
+++ b/date-fns/src/locale/ms/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'lepas pada jam' p",
+ yesterday: "'Semalam pada jam' p",
+ today: "'Hari ini pada jam' p",
+ tomorrow: "'Esok pada jam' p",
+ nextWeek: "eeee 'pada jam' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ms/_lib/localize/index.js b/date-fns/src/locale/ms/_lib/localize/index.js
new file mode 100644
index 0000000..038457a
--- /dev/null
+++ b/date-fns/src/locale/ms/_lib/localize/index.js
@@ -0,0 +1,169 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+// Most data for localization are taken from this page
+// https://www.unicode.org/cldr/charts/32/summary/ms.html
+var eraValues = {
+ narrow: ['SM', 'M'],
+ abbreviated: ['SM', 'M'],
+ wide: ['Sebelum Masihi', 'Masihi']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['S1', 'S2', 'S3', 'S4'],
+ wide: ['Suku pertama', 'Suku kedua', 'Suku ketiga', 'Suku keempat']
+}
+
+// Note: in Malay, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'O', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Jan',
+ 'Feb',
+ 'Mac',
+ 'Apr',
+ 'Mei',
+ 'Jun',
+ 'Jul',
+ 'Ogo',
+ 'Sep',
+ 'Okt',
+ 'Nov',
+ 'Dis'
+ ],
+ wide: [
+ 'Januari',
+ 'Februari',
+ 'Mac',
+ 'April',
+ 'Mei',
+ 'Jun',
+ 'Julai',
+ 'Ogos',
+ 'September',
+ 'Oktober',
+ 'November',
+ 'Disember'
+ ]
+}
+
+var dayValues = {
+ narrow: ['A', 'I', 'S', 'R', 'K', 'J', 'S'],
+ short: ['Ahd', 'Isn', 'Sel', 'Rab', 'Kha', 'Jum', 'Sab'],
+ abbreviated: ['Ahd', 'Isn', 'Sel', 'Rab', 'Kha', 'Jum', 'Sab'],
+ wide: ['Ahad', 'Isnin', 'Selasa', 'Rabu', 'Khamis', 'Jumaat', 'Sabtu']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'tgh malam',
+ noon: 'tgh hari',
+ morning: 'pagi',
+ afternoon: 'tengah hari',
+ evening: 'petang',
+ night: 'malam'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'tengah hari',
+ evening: 'petang',
+ night: 'malam'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'tengah hari',
+ evening: 'petang',
+ night: 'malam'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'tengah hari',
+ evening: 'petang',
+ night: 'malam'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'tengah hari',
+ evening: 'petang',
+ night: 'malam'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'tengah malam',
+ noon: 'tengah hari',
+ morning: 'pagi',
+ afternoon: 'tengah hari',
+ evening: 'petang',
+ night: 'malam'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // Can't use "pertama", "kedua" because can't be parsed
+ switch (number) {
+ default:
+ return 'ke-' + number
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ms/_lib/match/index.js b/date-fns/src/locale/ms/_lib/match/index.js
new file mode 100644
index 0000000..650e1de
--- /dev/null
+++ b/date-fns/src/locale/ms/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^ke-(\d+)?/i
+var parseOrdinalNumberPattern = /petama|\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(sm|m)/i,
+ abbreviated: /^(s\.?\s?m\.?|m\.?)/i,
+ wide: /^(sebelum masihi|masihi)/i
+}
+var parseEraPatterns = {
+ any: [/^s/i, /^(m)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^S[1234]/i,
+ wide: /Suku (pertama|kedua|ketiga|keempat)/i
+}
+var parseQuarterPatterns = {
+ any: [/pertama|1/i, /kedua|2/i, /ketiga|3/i, /keempat|4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mac|apr|mei|jun|jul|ogo|sep|okt|nov|dis)/i,
+ wide: /^(januari|februari|mac|april|mei|jun|julai|ogos|september|oktober|november|disember)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^o/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^ma/i,
+ /^ap/i,
+ /^me/i,
+ /^jun/i,
+ /^jul/i,
+ /^og/i,
+ /^s/i,
+ /^ok/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[aisrkj]/i,
+ short: /^(ahd|isn|sel|rab|kha|jum|sab)/i,
+ abbreviated: /^(ahd|isn|sel|rab|kha|jum|sab)/i,
+ wide: /^(ahad|isnin|selasa|rabu|khamis|jumaat|sabtu)/i
+}
+var parseDayPatterns = {
+ narrow: [/^a/i, /^i/i, /^s/i, /^r/i, /^k/i, /^j/i, /^s/i],
+ any: [/^a/i, /^i/i, /^se/i, /^r/i, /^k/i, /^j/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(am|pm|tengah malam|tengah hari|pagi|petang|malam)/i,
+ any: /^([ap]\.?\s?m\.?|tengah malam|tengah hari|pagi|petang|malam)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^pm/i,
+ midnight: /^tengah m/i,
+ noon: /^tengah h/i,
+ morning: /pa/i,
+ afternoon: /tengah h/i,
+ evening: /pe/i,
+ night: /m/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ms/index.d.ts b/date-fns/src/locale/ms/index.d.ts
new file mode 100644
index 0000000..d7450bd
--- /dev/null
+++ b/date-fns/src/locale/ms/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ms } from 'date-fns/locale'
+export default ms
diff --git a/date-fns/src/locale/ms/index.js b/date-fns/src/locale/ms/index.js
new file mode 100644
index 0000000..a143645
--- /dev/null
+++ b/date-fns/src/locale/ms/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Malay locale.
+ * @language Malay
+ * @iso-639-2 msa
+ * @author Ruban Selvarajah [@Zyten]{@link https://github.com/Zyten}
+ */
+var locale = {
+ code: 'ms',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ms/index.js.flow b/date-fns/src/locale/ms/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ms/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ms/snapshot.md b/date-fns/src/locale/ms/snapshot.md
new file mode 100644
index 0000000..dc85b8f
--- /dev/null
+++ b/date-fns/src/locale/ms/snapshot.md
@@ -0,0 +1,304 @@
+# Malay (ms) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | ke-1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | ke-5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | ke-1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | ke-5 | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | ke-1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ke-2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | S1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | S2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | Suku pertama | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Suku kedua | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | ke-1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | ke-2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | S1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | S2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | Suku pertama | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Suku kedua | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | ke-2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ke-7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Julai | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | ke-2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ke-7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Julai | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | ke-1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | ke-48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | ke-1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | ke-48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | ke-11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | ke-28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | ke-42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | ke-365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Isnin | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jumaat | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | I | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | ke-1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ke-5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Isnin | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jumaat | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | I | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | ke-1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ke-5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Isnin | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jumaat | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | I | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | ke-1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ke-5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Isnin | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jumaat | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | I | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Isn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | pagi | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | tengah hari | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | petang | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | malam | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | pagi | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | tengah hari | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | petang | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | malam | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | pagi | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | tengah hari | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | petang | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | malam | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | pagi | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | tengah hari | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | petang | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | malam | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | pagi | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | tengah hari | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | petang | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | malam | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | ke-11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ke-11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | ke-11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ke-23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | ke-11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ke-11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | ke-11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | ke-23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | ke-1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | ke-55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | ke-1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | ke-55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/2/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 Februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Rabu, 11 Februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Ahad, 29 Mei 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59 | 1453-05-29T23:59:00.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59.59 | 1453-05-29T23:59:59.000Z |
+| | pppp | 1987-02-11T12:13:14.015Z | 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23.59.59 | 1453-05-29T23:59:59.000Z |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/2/1987, 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/1453, 23.59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Feb 1987, 12.13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453, 23.59 | 1453-05-29T23:59:00.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 Februari 1987 pukul 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mei 1453 pukul 23.59.59 | 1453-05-29T23:59:59.000Z |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Rabu, 11 Februari 1987 pukul 12.13.14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | Ahad, 29 Mei 1453 pukul 23.59.59 | 1453-05-29T23:59:59.000Z |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------- | ---------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | sekitar 6 tahun | sekitar 6 tahun | dalam masa sekitar 6 tahun |
+| 2005-01-01T00:00:00.000Z | sekitar 5 tahun | sekitar 5 tahun | dalam masa sekitar 5 tahun |
+| 2004-01-01T00:00:00.000Z | sekitar 4 tahun | sekitar 4 tahun | dalam masa sekitar 4 tahun |
+| 2003-01-01T00:00:00.000Z | sekitar 3 tahun | sekitar 3 tahun | dalam masa sekitar 3 tahun |
+| 2002-01-01T00:00:00.000Z | sekitar 2 tahun | sekitar 2 tahun | dalam masa sekitar 2 tahun |
+| 2001-06-01T00:00:00.000Z | lebih dari 1 tahun | lebih dari 1 tahun | dalam masa lebih dari 1 tahun |
+| 2001-02-01T00:00:00.000Z | sekitar 1 tahun | sekitar 1 tahun | dalam masa sekitar 1 tahun |
+| 2001-01-01T00:00:00.000Z | sekitar 1 tahun | sekitar 1 tahun | dalam masa sekitar 1 tahun |
+| 2000-06-01T00:00:00.000Z | 5 bulan | 5 bulan | dalam masa 5 bulan |
+| 2000-03-01T00:00:00.000Z | 2 bulan | 2 bulan | dalam masa 2 bulan |
+| 2000-02-01T00:00:00.000Z | sekitar 1 bulan | sekitar 1 bulan | dalam masa sekitar 1 bulan |
+| 2000-01-15T00:00:00.000Z | 14 hari | 14 hari | dalam masa 14 hari |
+| 2000-01-02T00:00:00.000Z | 1 hari | 1 hari | dalam masa 1 hari |
+| 2000-01-01T06:00:00.000Z | sekitar 6 jam | sekitar 6 jam | dalam masa sekitar 6 jam |
+| 2000-01-01T01:00:00.000Z | sekitar 1 jam | sekitar 1 jam | dalam masa sekitar 1 jam |
+| 2000-01-01T00:45:00.000Z | sekitar 1 jam | sekitar 1 jam | dalam masa sekitar 1 jam |
+| 2000-01-01T00:30:00.000Z | 30 minit | 30 minit | dalam masa 30 minit |
+| 2000-01-01T00:15:00.000Z | 15 minit | 15 minit | dalam masa 15 minit |
+| 2000-01-01T00:01:00.000Z | 1 minit | 1 minit | dalam masa 1 minit |
+| 2000-01-01T00:00:25.000Z | kurang dari 1 minit | setengah minit | dalam masa kurang dari 1 minit |
+| 2000-01-01T00:00:15.000Z | kurang dari 1 minit | kurang dari 20 saat | dalam masa kurang dari 1 minit |
+| 2000-01-01T00:00:05.000Z | kurang dari 1 minit | kurang dari 10 saat | dalam masa kurang dari 1 minit |
+| 2000-01-01T00:00:00.000Z | kurang dari 1 minit | kurang dari 5 saat | kurang dari 1 minit yang lalu |
+| 1999-12-31T23:59:55.000Z | kurang dari 1 minit | kurang dari 10 saat | kurang dari 1 minit yang lalu |
+| 1999-12-31T23:59:45.000Z | kurang dari 1 minit | kurang dari 20 saat | kurang dari 1 minit yang lalu |
+| 1999-12-31T23:59:35.000Z | kurang dari 1 minit | setengah minit | kurang dari 1 minit yang lalu |
+| 1999-12-31T23:59:00.000Z | 1 minit | 1 minit | 1 minit yang lalu |
+| 1999-12-31T23:45:00.000Z | 15 minit | 15 minit | 15 minit yang lalu |
+| 1999-12-31T23:30:00.000Z | 30 minit | 30 minit | 30 minit yang lalu |
+| 1999-12-31T23:15:00.000Z | sekitar 1 jam | sekitar 1 jam | sekitar 1 jam yang lalu |
+| 1999-12-31T23:00:00.000Z | sekitar 1 jam | sekitar 1 jam | sekitar 1 jam yang lalu |
+| 1999-12-31T18:00:00.000Z | sekitar 6 jam | sekitar 6 jam | sekitar 6 jam yang lalu |
+| 1999-12-30T00:00:00.000Z | 2 hari | 2 hari | 2 hari yang lalu |
+| 1999-12-15T00:00:00.000Z | 17 hari | 17 hari | 17 hari yang lalu |
+| 1999-12-01T00:00:00.000Z | sekitar 1 bulan | sekitar 1 bulan | sekitar 1 bulan yang lalu |
+| 1999-11-01T00:00:00.000Z | 2 bulan | 2 bulan | 2 bulan yang lalu |
+| 1999-06-01T00:00:00.000Z | 7 bulan | 7 bulan | 7 bulan yang lalu |
+| 1999-01-01T00:00:00.000Z | sekitar 1 tahun | sekitar 1 tahun | sekitar 1 tahun yang lalu |
+| 1998-12-01T00:00:00.000Z | sekitar 1 tahun | sekitar 1 tahun | sekitar 1 tahun yang lalu |
+| 1998-06-01T00:00:00.000Z | lebih dari 1 tahun | lebih dari 1 tahun | lebih dari 1 tahun yang lalu |
+| 1998-01-01T00:00:00.000Z | sekitar 2 tahun | sekitar 2 tahun | sekitar 2 tahun yang lalu |
+| 1997-01-01T00:00:00.000Z | sekitar 3 tahun | sekitar 3 tahun | sekitar 3 tahun yang lalu |
+| 1996-01-01T00:00:00.000Z | sekitar 4 tahun | sekitar 4 tahun | sekitar 4 tahun yang lalu |
+| 1995-01-01T00:00:00.000Z | sekitar 5 tahun | sekitar 5 tahun | sekitar 5 tahun yang lalu |
+| 1994-01-01T00:00:00.000Z | sekitar 6 tahun | sekitar 6 tahun | sekitar 6 tahun yang lalu |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | -------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 tahun | dalam masa 6 tahun | 52608 jam |
+| 2005-01-01T00:00:00.000Z | 5 tahun | dalam masa 5 tahun | 43848 jam |
+| 2004-01-01T00:00:00.000Z | 4 tahun | dalam masa 4 tahun | 35064 jam |
+| 2003-01-01T00:00:00.000Z | 3 tahun | dalam masa 3 tahun | 26304 jam |
+| 2002-01-01T00:00:00.000Z | 2 tahun | dalam masa 2 tahun | 17544 jam |
+| 2001-06-01T00:00:00.000Z | 1 tahun | dalam masa 1 tahun | 12408 jam |
+| 2001-02-01T00:00:00.000Z | 1 tahun | dalam masa 1 tahun | 9528 jam |
+| 2001-01-01T00:00:00.000Z | 1 tahun | dalam masa 1 tahun | 8784 jam |
+| 2000-06-01T00:00:00.000Z | 5 bulan | dalam masa 5 bulan | 3648 jam |
+| 2000-03-01T00:00:00.000Z | 2 bulan | dalam masa 2 bulan | 1440 jam |
+| 2000-02-01T00:00:00.000Z | 1 bulan | dalam masa 1 bulan | 744 jam |
+| 2000-01-15T00:00:00.000Z | 14 hari | dalam masa 14 hari | 336 jam |
+| 2000-01-02T00:00:00.000Z | 1 hari | dalam masa 1 hari | 24 jam |
+| 2000-01-01T06:00:00.000Z | 6 jam | dalam masa 6 jam | 6 jam |
+| 2000-01-01T01:00:00.000Z | 1 jam | dalam masa 1 jam | 1 jam |
+| 2000-01-01T00:45:00.000Z | 45 minit | dalam masa 45 minit | 1 jam |
+| 2000-01-01T00:30:00.000Z | 30 minit | dalam masa 30 minit | 1 jam |
+| 2000-01-01T00:15:00.000Z | 15 minit | dalam masa 15 minit | 0 jam |
+| 2000-01-01T00:01:00.000Z | 1 minit | dalam masa 1 minit | 0 jam |
+| 2000-01-01T00:00:25.000Z | 25 saat | dalam masa 25 saat | 0 jam |
+| 2000-01-01T00:00:15.000Z | 15 saat | dalam masa 15 saat | 0 jam |
+| 2000-01-01T00:00:05.000Z | 5 saat | dalam masa 5 saat | 0 jam |
+| 2000-01-01T00:00:00.000Z | 0 saat | 0 saat yang lalu | 0 jam |
+| 1999-12-31T23:59:55.000Z | 5 saat | 5 saat yang lalu | 0 jam |
+| 1999-12-31T23:59:45.000Z | 15 saat | 15 saat yang lalu | 0 jam |
+| 1999-12-31T23:59:35.000Z | 25 saat | 25 saat yang lalu | 0 jam |
+| 1999-12-31T23:59:00.000Z | 1 minit | 1 minit yang lalu | 0 jam |
+| 1999-12-31T23:45:00.000Z | 15 minit | 15 minit yang lalu | 0 jam |
+| 1999-12-31T23:30:00.000Z | 30 minit | 30 minit yang lalu | 1 jam |
+| 1999-12-31T23:15:00.000Z | 45 minit | 45 minit yang lalu | 1 jam |
+| 1999-12-31T23:00:00.000Z | 1 jam | 1 jam yang lalu | 1 jam |
+| 1999-12-31T18:00:00.000Z | 6 jam | 6 jam yang lalu | 6 jam |
+| 1999-12-30T00:00:00.000Z | 2 hari | 2 hari yang lalu | 48 jam |
+| 1999-12-15T00:00:00.000Z | 17 hari | 17 hari yang lalu | 408 jam |
+| 1999-12-01T00:00:00.000Z | 1 bulan | 1 bulan yang lalu | 744 jam |
+| 1999-11-01T00:00:00.000Z | 2 bulan | 2 bulan yang lalu | 1464 jam |
+| 1999-06-01T00:00:00.000Z | 7 bulan | 7 bulan yang lalu | 5136 jam |
+| 1999-01-01T00:00:00.000Z | 1 tahun | 1 tahun yang lalu | 8760 jam |
+| 1998-12-01T00:00:00.000Z | 1 tahun | 1 tahun yang lalu | 9504 jam |
+| 1998-06-01T00:00:00.000Z | 2 tahun | 2 tahun yang lalu | 13896 jam |
+| 1998-01-01T00:00:00.000Z | 2 tahun | 2 tahun yang lalu | 17520 jam |
+| 1997-01-01T00:00:00.000Z | 3 tahun | 3 tahun yang lalu | 26280 jam |
+| 1996-01-01T00:00:00.000Z | 4 tahun | 4 tahun yang lalu | 35064 jam |
+| 1995-01-01T00:00:00.000Z | 5 tahun | 5 tahun yang lalu | 43824 jam |
+| 1994-01-01T00:00:00.000Z | 6 tahun | 6 tahun yang lalu | 52584 jam |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/1/2000 |
+| 2000-01-05T00:00:00.000Z | Rabu pada jam 00.00 |
+| 2000-01-02T00:00:00.000Z | Esok pada jam 00.00 |
+| 2000-01-01T00:00:00.000Z | Hari ini pada jam 00.00 |
+| 1999-12-31T00:00:00.000Z | Semalam pada jam 00.00 |
+| 1999-12-27T00:00:00.000Z | Isnin lepas pada jam 00.00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/mt/_lib/formatDistance/index.js b/date-fns/src/locale/mt/_lib/formatDistance/index.js
new file mode 100644
index 0000000..3fd8f18
--- /dev/null
+++ b/date-fns/src/locale/mt/_lib/formatDistance/index.js
@@ -0,0 +1,108 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'inqas minn sekonda',
+ other: 'inqas minn {{count}} sekondi'
+ },
+
+ xSeconds: {
+ one: 'sekonda',
+ other: '{{count}} sekondi'
+ },
+
+ halfAMinute: 'nofs minuta',
+
+ lessThanXMinutes: {
+ one: 'inqas minn minuta',
+ other: 'inqas minn {{count}} minuti'
+ },
+
+ xMinutes: {
+ one: 'minuta',
+ other: '{{count}} minuti'
+ },
+
+ aboutXHours: {
+ one: 'madwar siegħa',
+ other: 'madwar {{count}} siegħat'
+ },
+
+ xHours: {
+ one: 'siegħa',
+ other: '{{count}} siegħat'
+ },
+
+ xDays: {
+ one: 'ġurnata',
+ other: '{{count}} ġranet'
+ },
+
+ aboutXWeeks: {
+ one: 'madwar ġimgħa',
+ other: 'madwar {{count}} ġimgħat'
+ },
+
+ xWeeks: {
+ one: 'ġimgħa',
+ other: '{{count}} ġimgħat'
+ },
+
+ aboutXMonths: {
+ one: 'madwar xahar',
+ other: 'madwar {{count}} xhur'
+ },
+
+ xMonths: {
+ one: 'xahar',
+ other: '{{count}} xhur'
+ },
+
+ aboutXYears: {
+ one: 'madwar sena',
+ two: 'madwar sentejn',
+ other: 'madwar {{count}} snin'
+ },
+
+ xYears: {
+ one: 'sena',
+ two: 'sentejn',
+ other: '{{count}} snin'
+ },
+
+ overXYears: {
+ one: 'aktar minn sena',
+ two: 'aktar minn sentejn',
+ other: 'aktar minn {{count}} snin'
+ },
+
+ almostXYears: {
+ one: 'kważi sena',
+ two: 'kważi sentejn',
+ other: 'kważi {{count}} snin'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ var adverb = token.match(/years/i)
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else if (count === 2 && adverb) {
+ result = formatDistanceLocale[token].two
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return "f'" + result
+ } else {
+ return result + ' ilu'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/mt/_lib/formatLong/index.js b/date-fns/src/locale/mt/_lib/formatLong/index.js
new file mode 100644
index 0000000..4547713
--- /dev/null
+++ b/date-fns/src/locale/mt/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/mt/_lib/formatRelative/index.js b/date-fns/src/locale/mt/_lib/formatRelative/index.js
new file mode 100644
index 0000000..82f0aee
--- /dev/null
+++ b/date-fns/src/locale/mt/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'li għadda' 'fil-'p",
+ yesterday: "'Il-bieraħ fil-'p",
+ today: "'Illum fil-'p",
+ tomorrow: "'Għada fil-'p",
+ nextWeek: "eeee 'fil-'p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/mt/_lib/localize/index.js b/date-fns/src/locale/mt/_lib/localize/index.js
new file mode 100644
index 0000000..8b29870
--- /dev/null
+++ b/date-fns/src/locale/mt/_lib/localize/index.js
@@ -0,0 +1,167 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['Q', 'W'],
+ abbreviated: ['QK', 'WK'],
+ wide: ['qabel Kristu', 'wara Kristu']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['K1', 'K2', 'K3', 'K4'],
+ wide: ['1. kwart', '2. kwart', '3. kwart', '4. kwart']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'Ġ', 'L', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Jan',
+ 'Fra',
+ 'Mar',
+ 'Apr',
+ 'Mej',
+ 'Ġun',
+ 'Lul',
+ 'Aww',
+ 'Set',
+ 'Ott',
+ 'Nov',
+ 'Diċ'
+ ],
+ wide: [
+ 'Jannar',
+ 'Frar',
+ 'Marzu',
+ 'April',
+ 'Mejju',
+ 'Ġunju',
+ 'Lulju',
+ 'Awwissu',
+ 'Settembru',
+ 'Ottubru',
+ 'Novembru',
+ 'Diċembru'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Ħ', 'T', 'T', 'E', 'Ħ', 'Ġ', 'S'],
+ short: ['Ħa', 'Tn', 'Tl', 'Er', 'Ħa', 'Ġi', 'Si'],
+ abbreviated: ['Ħad', 'Tne', 'Tli', 'Erb', 'Ħam', 'Ġim', 'Sib'],
+ wide: [
+ 'Il-Ħadd',
+ 'It-Tnejn',
+ 'It-Tlieta',
+ 'L-Erbgħa',
+ 'Il-Ħamis',
+ 'Il-Ġimgħa',
+ 'Is-Sibt'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'nofsillejl',
+ noon: 'nofsinhar',
+ morning: 'għodwa',
+ afternoon: 'wara nofsinhar',
+ evening: 'filgħaxija',
+ night: 'lejl'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'nofsillejl',
+ noon: 'nofsinhar',
+ morning: 'għodwa',
+ afternoon: 'wara nofsinhar',
+ evening: 'filgħaxija',
+ night: 'lejl'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'nofsillejl',
+ noon: 'nofsinhar',
+ morning: 'għodwa',
+ afternoon: 'wara nofsinhar',
+ evening: 'filgħaxija',
+ night: 'lejl'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: "f'nofsillejl",
+ noon: "f'nofsinhar",
+ morning: 'filgħodu',
+ afternoon: 'wara nofsinhar',
+ evening: 'filgħaxija',
+ night: 'billejl'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: "f'nofsillejl",
+ noon: "f'nofsinhar",
+ morning: 'filgħodu',
+ afternoon: 'wara nofsinhar',
+ evening: 'filgħaxija',
+ night: 'billejl'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: "f'nofsillejl",
+ noon: "f'nofsinhar",
+ morning: 'filgħodu',
+ afternoon: 'wara nofsinhar',
+ evening: 'filgħaxija',
+ night: 'billejl'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + 'º'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/mt/_lib/match/index.js b/date-fns/src/locale/mt/_lib/match/index.js
new file mode 100644
index 0000000..5f5c881
--- /dev/null
+++ b/date-fns/src/locale/mt/_lib/match/index.js
@@ -0,0 +1,145 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(º)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(q|w)/i,
+ abbreviated: /^(q\.?\s?k\.?|b\.?\s?c\.?\s?e\.?|w\.?\s?k\.?)/i,
+ wide: /^(qabel kristu|before common era|wara kristu|common era)/i
+}
+var parseEraPatterns = {
+ any: [/^(q|b)/i, /^(w|c)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^k[1234]/i,
+ wide: /^[1234](\.)? kwart/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmaglsond]/i,
+ abbreviated: /^(jan|fra|mar|apr|mej|ġun|lul|aww|set|ott|nov|diċ)/i,
+ wide: /^(jannar|frar|marzu|april|mejju|ġunju|lulju|awwissu|settembru|ottubru|novembru|diċembru)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^ġ/i,
+ /^l/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^mej/i,
+ /^ġ/i,
+ /^l/i,
+ /^aw/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[ħteġs]/i,
+ short: /^(ħa|tn|tl|er|ħa|ġi|si)/i,
+ abbreviated: /^(ħad|tne|tli|erb|ħam|ġim|sib)/i,
+ wide: /^(il-ħadd|it-tnejn|it-tlieta|l-erbgħa|il-ħamis|il-ġimgħa|is-sibt)/i
+}
+var parseDayPatterns = {
+ narrow: [/^ħ/i, /^t/i, /^t/i, /^e/i, /^ħ/i, /^ġ/i, /^s/i],
+ any: [
+ /^(il-)?ħad/i,
+ /^(it-)?tn/i,
+ /^(it-)?tl/i,
+ /^(l-)?er/i,
+ /^(il-)?ham/i,
+ /^(il-)?ġi/i,
+ /^(is-)?si/i
+ ]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|f'nofsillejl|f'nofsinhar|(ta') (għodwa|wara nofsinhar|filgħaxija|lejl))/i,
+ any: /^([ap]\.?\s?m\.?|f'nofsillejl|f'nofsinhar|(ta') (għodwa|wara nofsinhar|filgħaxija|lejl))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^f'nofsillejl/i,
+ noon: /^f'nofsinhar/i,
+ morning: /għodwa/i,
+ afternoon: /wara(\s.*)nofsinhar/i,
+ evening: /filgħaxija/i,
+ night: /lejl/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/mt/index.d.ts b/date-fns/src/locale/mt/index.d.ts
new file mode 100644
index 0000000..a845625
--- /dev/null
+++ b/date-fns/src/locale/mt/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { mt } from 'date-fns/locale'
+export default mt
diff --git a/date-fns/src/locale/mt/index.js b/date-fns/src/locale/mt/index.js
new file mode 100644
index 0000000..2a162d6
--- /dev/null
+++ b/date-fns/src/locale/mt/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Maltese locale.
+ * @language Maltese
+ * @iso-639-2 mlt
+ * @author Andras Matzon [@amatzon](@link https://github.com/amatzon)
+ * @author Bryan Borg [@bryanMt](@link https://github.com/bryanMt)
+ */
+var locale = {
+ code: 'mt',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/mt/index.js.flow b/date-fns/src/locale/mt/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/mt/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/mt/snapshot.md b/date-fns/src/locale/mt/snapshot.md
new file mode 100644
index 0000000..1055dc9
--- /dev/null
+++ b/date-fns/src/locale/mt/snapshot.md
@@ -0,0 +1,304 @@
+# Maltese (mt) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987º | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5º | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987º | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4º | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. kwart | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kwart | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. kwart | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kwart | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Fra | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Lul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Frar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Lulju | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | L | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Fra | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Lul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Frar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Lulju | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | L | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28º | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42º | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365º | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Tne | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġim | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Tne | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġim | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Tne | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġim | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | It-Tnejn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Il-Ġimgħa | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | T | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġ | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Tn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġi | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Tne | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġim | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | It-Tnejn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Il-Ġimgħa | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | T | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġ | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Tn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġi | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Tne | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġim | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | It-Tnejn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Il-Ġimgħa | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | T | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġ | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Tn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġi | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Tne | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġim | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | It-Tnejn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Il-Ġimgħa | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | T | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġ | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Tn | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ġi | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | filgħodu | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | wara nofsinhar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | filgħaxija | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | billejl | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | filgħodu | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | wara nofsinhar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | filgħaxija | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | billejl | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | filgħodu | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | wara nofsinhar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | filgħaxija | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | billejl | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | filgħodu | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | wara nofsinhar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | filgħaxija | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | billejl | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | filgħodu | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | wara nofsinhar | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | filgħaxija | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | billejl | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1º | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55º | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1º | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55º | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Fra 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mej 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 Frar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mejju 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | L-Erbgħa, 11 Frar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Il-Ħadd, 29 Mejju 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Fra 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mej 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 Frar 1987 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 Mejju 1453 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | L-Erbgħa, 11 Frar 1987 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Il-Ħadd, 29 Mejju 1453 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------- | ---------------------- | --------------------- |
+| 2006-01-01T00:00:00.000Z | madwar 6 snin | madwar 6 snin | f'madwar 6 snin |
+| 2005-01-01T00:00:00.000Z | madwar 5 snin | madwar 5 snin | f'madwar 5 snin |
+| 2004-01-01T00:00:00.000Z | madwar 4 snin | madwar 4 snin | f'madwar 4 snin |
+| 2003-01-01T00:00:00.000Z | madwar 3 snin | madwar 3 snin | f'madwar 3 snin |
+| 2002-01-01T00:00:00.000Z | madwar sentejn | madwar sentejn | f'madwar sentejn |
+| 2001-06-01T00:00:00.000Z | aktar minn sena | aktar minn sena | f'aktar minn sena |
+| 2001-02-01T00:00:00.000Z | madwar sena | madwar sena | f'madwar sena |
+| 2001-01-01T00:00:00.000Z | madwar sena | madwar sena | f'madwar sena |
+| 2000-06-01T00:00:00.000Z | 5 xhur | 5 xhur | f'5 xhur |
+| 2000-03-01T00:00:00.000Z | 2 xhur | 2 xhur | f'2 xhur |
+| 2000-02-01T00:00:00.000Z | madwar xahar | madwar xahar | f'madwar xahar |
+| 2000-01-15T00:00:00.000Z | 14 ġranet | 14 ġranet | f'14 ġranet |
+| 2000-01-02T00:00:00.000Z | ġurnata | ġurnata | f'ġurnata |
+| 2000-01-01T06:00:00.000Z | madwar 6 siegħat | madwar 6 siegħat | f'madwar 6 siegħat |
+| 2000-01-01T01:00:00.000Z | madwar siegħa | madwar siegħa | f'madwar siegħa |
+| 2000-01-01T00:45:00.000Z | madwar siegħa | madwar siegħa | f'madwar siegħa |
+| 2000-01-01T00:30:00.000Z | 30 minuti | 30 minuti | f'30 minuti |
+| 2000-01-01T00:15:00.000Z | 15 minuti | 15 minuti | f'15 minuti |
+| 2000-01-01T00:01:00.000Z | minuta | minuta | f'minuta |
+| 2000-01-01T00:00:25.000Z | inqas minn minuta | nofs minuta | f'inqas minn minuta |
+| 2000-01-01T00:00:15.000Z | inqas minn minuta | inqas minn 20 sekondi | f'inqas minn minuta |
+| 2000-01-01T00:00:05.000Z | inqas minn minuta | inqas minn 10 sekondi | f'inqas minn minuta |
+| 2000-01-01T00:00:00.000Z | inqas minn minuta | inqas minn 5 sekondi | inqas minn minuta ilu |
+| 1999-12-31T23:59:55.000Z | inqas minn minuta | inqas minn 10 sekondi | inqas minn minuta ilu |
+| 1999-12-31T23:59:45.000Z | inqas minn minuta | inqas minn 20 sekondi | inqas minn minuta ilu |
+| 1999-12-31T23:59:35.000Z | inqas minn minuta | nofs minuta | inqas minn minuta ilu |
+| 1999-12-31T23:59:00.000Z | minuta | minuta | minuta ilu |
+| 1999-12-31T23:45:00.000Z | 15 minuti | 15 minuti | 15 minuti ilu |
+| 1999-12-31T23:30:00.000Z | 30 minuti | 30 minuti | 30 minuti ilu |
+| 1999-12-31T23:15:00.000Z | madwar siegħa | madwar siegħa | madwar siegħa ilu |
+| 1999-12-31T23:00:00.000Z | madwar siegħa | madwar siegħa | madwar siegħa ilu |
+| 1999-12-31T18:00:00.000Z | madwar 6 siegħat | madwar 6 siegħat | madwar 6 siegħat ilu |
+| 1999-12-30T00:00:00.000Z | 2 ġranet | 2 ġranet | 2 ġranet ilu |
+| 1999-12-15T00:00:00.000Z | 17 ġranet | 17 ġranet | 17 ġranet ilu |
+| 1999-12-01T00:00:00.000Z | madwar xahar | madwar xahar | madwar xahar ilu |
+| 1999-11-01T00:00:00.000Z | 2 xhur | 2 xhur | 2 xhur ilu |
+| 1999-06-01T00:00:00.000Z | 7 xhur | 7 xhur | 7 xhur ilu |
+| 1999-01-01T00:00:00.000Z | madwar sena | madwar sena | madwar sena ilu |
+| 1998-12-01T00:00:00.000Z | madwar sena | madwar sena | madwar sena ilu |
+| 1998-06-01T00:00:00.000Z | aktar minn sena | aktar minn sena | aktar minn sena ilu |
+| 1998-01-01T00:00:00.000Z | madwar sentejn | madwar sentejn | madwar sentejn ilu |
+| 1997-01-01T00:00:00.000Z | madwar 3 snin | madwar 3 snin | madwar 3 snin ilu |
+| 1996-01-01T00:00:00.000Z | madwar 4 snin | madwar 4 snin | madwar 4 snin ilu |
+| 1995-01-01T00:00:00.000Z | madwar 5 snin | madwar 5 snin | madwar 5 snin ilu |
+| 1994-01-01T00:00:00.000Z | madwar 6 snin | madwar 6 snin | madwar 6 snin ilu |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 snin | f'6 snin | 52608 siegħat |
+| 2005-01-01T00:00:00.000Z | 5 snin | f'5 snin | 43848 siegħat |
+| 2004-01-01T00:00:00.000Z | 4 snin | f'4 snin | 35064 siegħat |
+| 2003-01-01T00:00:00.000Z | 3 snin | f'3 snin | 26304 siegħat |
+| 2002-01-01T00:00:00.000Z | sentejn | f'sentejn | 17544 siegħat |
+| 2001-06-01T00:00:00.000Z | sena | f'sena | 12408 siegħat |
+| 2001-02-01T00:00:00.000Z | sena | f'sena | 9528 siegħat |
+| 2001-01-01T00:00:00.000Z | sena | f'sena | 8784 siegħat |
+| 2000-06-01T00:00:00.000Z | 5 xhur | f'5 xhur | 3648 siegħat |
+| 2000-03-01T00:00:00.000Z | 2 xhur | f'2 xhur | 1440 siegħat |
+| 2000-02-01T00:00:00.000Z | xahar | f'xahar | 744 siegħat |
+| 2000-01-15T00:00:00.000Z | 14 ġranet | f'14 ġranet | 336 siegħat |
+| 2000-01-02T00:00:00.000Z | ġurnata | f'ġurnata | 24 siegħat |
+| 2000-01-01T06:00:00.000Z | 6 siegħat | f'6 siegħat | 6 siegħat |
+| 2000-01-01T01:00:00.000Z | siegħa | f'siegħa | siegħa |
+| 2000-01-01T00:45:00.000Z | 45 minuti | f'45 minuti | siegħa |
+| 2000-01-01T00:30:00.000Z | 30 minuti | f'30 minuti | siegħa |
+| 2000-01-01T00:15:00.000Z | 15 minuti | f'15 minuti | 0 siegħat |
+| 2000-01-01T00:01:00.000Z | minuta | f'minuta | 0 siegħat |
+| 2000-01-01T00:00:25.000Z | 25 sekondi | f'25 sekondi | 0 siegħat |
+| 2000-01-01T00:00:15.000Z | 15 sekondi | f'15 sekondi | 0 siegħat |
+| 2000-01-01T00:00:05.000Z | 5 sekondi | f'5 sekondi | 0 siegħat |
+| 2000-01-01T00:00:00.000Z | 0 sekondi | 0 sekondi ilu | 0 siegħat |
+| 1999-12-31T23:59:55.000Z | 5 sekondi | 5 sekondi ilu | 0 siegħat |
+| 1999-12-31T23:59:45.000Z | 15 sekondi | 15 sekondi ilu | 0 siegħat |
+| 1999-12-31T23:59:35.000Z | 25 sekondi | 25 sekondi ilu | 0 siegħat |
+| 1999-12-31T23:59:00.000Z | minuta | minuta ilu | 0 siegħat |
+| 1999-12-31T23:45:00.000Z | 15 minuti | 15 minuti ilu | 0 siegħat |
+| 1999-12-31T23:30:00.000Z | 30 minuti | 30 minuti ilu | siegħa |
+| 1999-12-31T23:15:00.000Z | 45 minuti | 45 minuti ilu | siegħa |
+| 1999-12-31T23:00:00.000Z | siegħa | siegħa ilu | siegħa |
+| 1999-12-31T18:00:00.000Z | 6 siegħat | 6 siegħat ilu | 6 siegħat |
+| 1999-12-30T00:00:00.000Z | 2 ġranet | 2 ġranet ilu | 48 siegħat |
+| 1999-12-15T00:00:00.000Z | 17 ġranet | 17 ġranet ilu | 408 siegħat |
+| 1999-12-01T00:00:00.000Z | xahar | xahar ilu | 744 siegħat |
+| 1999-11-01T00:00:00.000Z | 2 xhur | 2 xhur ilu | 1464 siegħat |
+| 1999-06-01T00:00:00.000Z | 7 xhur | 7 xhur ilu | 5136 siegħat |
+| 1999-01-01T00:00:00.000Z | sena | sena ilu | 8760 siegħat |
+| 1998-12-01T00:00:00.000Z | sena | sena ilu | 9504 siegħat |
+| 1998-06-01T00:00:00.000Z | sentejn | sentejn ilu | 13896 siegħat |
+| 1998-01-01T00:00:00.000Z | sentejn | sentejn ilu | 17520 siegħat |
+| 1997-01-01T00:00:00.000Z | 3 snin | 3 snin ilu | 26280 siegħat |
+| 1996-01-01T00:00:00.000Z | 4 snin | 4 snin ilu | 35064 siegħat |
+| 1995-01-01T00:00:00.000Z | 5 snin | 5 snin ilu | 43824 siegħat |
+| 1994-01-01T00:00:00.000Z | 6 snin | 6 snin ilu | 52584 siegħat |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | L-Erbgħa fil-00:00 |
+| 2000-01-02T00:00:00.000Z | Għada fil-00:00 |
+| 2000-01-01T00:00:00.000Z | Illum fil-00:00 |
+| 1999-12-31T00:00:00.000Z | Il-bieraħ fil-00:00 |
+| 1999-12-27T00:00:00.000Z | It-Tnejn li għadda fil-00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/nb/_lib/formatDistance/index.js b/date-fns/src/locale/nb/_lib/formatDistance/index.js
new file mode 100644
index 0000000..79ef4f9
--- /dev/null
+++ b/date-fns/src/locale/nb/_lib/formatDistance/index.js
@@ -0,0 +1,127 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ singular: 'mindre enn ett sekund',
+ plural: 'mindre enn {{count}} sekunder'
+ },
+
+ xSeconds: {
+ singular: 'ett sekund',
+ plural: '{{count}} sekunder'
+ },
+
+ halfAMinute: 'et halvt minutt',
+
+ lessThanXMinutes: {
+ singular: 'mindre enn ett minutt',
+ plural: 'mindre enn {{count}} minutter'
+ },
+
+ xMinutes: {
+ singular: 'ett minutt',
+ plural: '{{count}} minutter'
+ },
+
+ aboutXHours: {
+ singular: 'omtrent en time',
+ plural: 'omtrent {{count}} timer'
+ },
+
+ xHours: {
+ singular: 'en time',
+ plural: '{{count}} timer'
+ },
+
+ xDays: {
+ singular: 'en dag',
+ plural: '{{count}} dager'
+ },
+
+ aboutXWeeks: {
+ singular: 'omtrent en uke',
+ plural: 'omtrent {{count}} uker'
+ },
+
+ xWeeks: {
+ singular: 'en uke',
+ plural: '{{count}} uker'
+ },
+
+ aboutXMonths: {
+ singular: 'omtrent en måned',
+ plural: 'omtrent {{count}} måneder'
+ },
+
+ xMonths: {
+ singular: 'en måned',
+ plural: '{{count}} måneder'
+ },
+
+ aboutXYears: {
+ singular: 'omtrent ett år',
+ plural: 'omtrent {{count}} år'
+ },
+
+ xYears: {
+ singular: 'ett år',
+ plural: '{{count}} år'
+ },
+
+ overXYears: {
+ singular: 'over ett år',
+ plural: 'over {{count}} år'
+ },
+
+ almostXYears: {
+ singular: 'nesten ett år',
+ plural: 'nesten {{count}} år'
+ }
+}
+
+var wordMapping = [
+ 'null',
+ 'en',
+ 'to',
+ 'tre',
+ 'fire',
+ 'fem',
+ 'seks',
+ 'sju',
+ 'åtte',
+ 'ni',
+ 'ti',
+ 'elleve',
+ 'tolv'
+]
+
+export default function formatDistance(token, count, options) {
+ options = options || {
+ onlyNumeric: false
+ }
+
+ var translation = formatDistanceLocale[token]
+ var result
+ if (typeof translation === 'string') {
+ result = translation
+ } else if (count === 0 || count > 1) {
+ if (options.onlyNumeric) {
+ result = translation.plural.replace('{{count}}', count)
+ } else {
+ result = translation.plural.replace(
+ '{{count}}',
+ count < 13 ? wordMapping[count] : count
+ )
+ }
+ } else {
+ result = translation.singular
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'om ' + result
+ } else {
+ return result + ' siden'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/nb/_lib/formatLong/index.js b/date-fns/src/locale/nb/_lib/formatLong/index.js
new file mode 100644
index 0000000..067f59e
--- /dev/null
+++ b/date-fns/src/locale/nb/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d. MMMM y',
+ long: 'd. MMMM y',
+ medium: 'd. MMM y',
+ short: 'dd.MM.y'
+}
+
+var timeFormats = {
+ full: "'kl'. HH:mm:ss zzzz",
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'kl.' {{time}}",
+ long: "{{date}} 'kl.' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/nb/_lib/formatRelative/index.js b/date-fns/src/locale/nb/_lib/formatRelative/index.js
new file mode 100644
index 0000000..3884132
--- /dev/null
+++ b/date-fns/src/locale/nb/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'forrige' eeee 'kl.' p",
+ yesterday: "'i går kl.' p",
+ today: "'i dag kl.' p",
+ tomorrow: "'i morgen kl.' p",
+ nextWeek: "EEEE 'kl.' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/nb/_lib/localize/index.js b/date-fns/src/locale/nb/_lib/localize/index.js
new file mode 100644
index 0000000..075f868
--- /dev/null
+++ b/date-fns/src/locale/nb/_lib/localize/index.js
@@ -0,0 +1,124 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['f.Kr.', 'e.Kr.'],
+ abbreviated: ['f.Kr.', 'e.Kr.'],
+ wide: ['før Kristus', 'etter Kristus']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'jan.',
+ 'feb.',
+ 'mars',
+ 'apr.',
+ 'mai',
+ 'juni',
+ 'juli',
+ 'aug.',
+ 'sep.',
+ 'okt.',
+ 'nov.',
+ 'des.'
+ ],
+ wide: [
+ 'januar',
+ 'februar',
+ 'mars',
+ 'april',
+ 'mai',
+ 'juni',
+ 'juli',
+ 'august',
+ 'september',
+ 'oktober',
+ 'november',
+ 'desember'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'T', 'O', 'T', 'F', 'L'],
+ short: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],
+ abbreviated: ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør'],
+ wide: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'på morg.',
+ afternoon: 'på etterm.',
+ evening: 'på kvelden',
+ night: 'på natten'
+ },
+ abbreviated: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'på morg.',
+ afternoon: 'på etterm.',
+ evening: 'på kvelden',
+ night: 'på natten'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'på morgenen',
+ afternoon: 'på ettermiddagen',
+ evening: 'på kvelden',
+ night: 'på natten'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/nb/_lib/match/index.js b/date-fns/src/locale/nb/_lib/match/index.js
new file mode 100644
index 0000000..d0c00da
--- /dev/null
+++ b/date-fns/src/locale/nb/_lib/match/index.js
@@ -0,0 +1,136 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\.?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(f\.? ?Kr\.?|fvt\.?|e\.? ?Kr\.?|evt\.?)/i,
+ abbreviated: /^(f\.? ?Kr\.?|fvt\.?|e\.? ?Kr\.?|evt\.?)/i,
+ wide: /^(før Kristus|før vår tid|etter Kristus|vår tid)/i
+}
+var parseEraPatterns = {
+ any: [/^f/i, /^e/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](\.)? kvartal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mars?|apr|mai|juni?|juli?|aug|sep|okt|nov|des)\.?/i,
+ wide: /^(januar|februar|mars|april|mai|juni|juli|august|september|oktober|november|desember)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^mai/i,
+ /^jun/i,
+ /^jul/i,
+ /^aug/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smtofl]/i,
+ short: /^(sø|ma|ti|on|to|fr|lø)/i,
+ abbreviated: /^(søn|man|tir|ons|tor|fre|lør)/i,
+ wide: /^(søndag|mandag|tirsdag|onsdag|torsdag|fredag|lørdag)/i
+}
+var parseDayPatterns = {
+ any: [/^s/i, /^m/i, /^ti/i, /^o/i, /^to/i, /^f/i, /^l/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(midnatt|middag|(på) (morgenen|ettermiddagen|kvelden|natten)|[ap])/i,
+ any: /^([ap]\.?\s?m\.?|midnatt|middag|(på) (morgenen|ettermiddagen|kvelden|natten))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a(\.?\s?m\.?)?$/i,
+ pm: /^p(\.?\s?m\.?)?$/i,
+ midnight: /^midn/i,
+ noon: /^midd/i,
+ morning: /morgen/i,
+ afternoon: /ettermiddag/i,
+ evening: /kveld/i,
+ night: /natt/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/nb/index.d.ts b/date-fns/src/locale/nb/index.d.ts
new file mode 100644
index 0000000..75c06bb
--- /dev/null
+++ b/date-fns/src/locale/nb/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nb } from 'date-fns/locale'
+export default nb
diff --git a/date-fns/src/locale/nb/index.js b/date-fns/src/locale/nb/index.js
new file mode 100644
index 0000000..2f6c68a
--- /dev/null
+++ b/date-fns/src/locale/nb/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Norwegian Bokmål locale.
+ * @language Norwegian Bokmål
+ * @iso-639-2 nob
+ * @author Hans-Kristian Koren [@Hanse]{@link https://github.com/Hanse}
+ * @author Mikolaj Grzyb [@mikolajgrzyb]{@link https://github.com/mikolajgrzyb}
+ * @author Dag Stuan [@dagstuan]{@link https://github.com/dagstuan}
+ */
+var locale = {
+ code: 'nb',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/nb/index.js.flow b/date-fns/src/locale/nb/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/nb/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/nb/snapshot.md b/date-fns/src/locale/nb/snapshot.md
new file mode 100644
index 0000000..09b0da9
--- /dev/null
+++ b/date-fns/src/locale/nb/snapshot.md
@@ -0,0 +1,304 @@
+# Norwegian Bokmål (nb) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | man | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | man | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | man | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | mandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | man | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | mandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | man | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | mandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | man | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | mandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på etterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på etterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på etterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | på morgenen | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | på ettermiddagen | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på etterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. feb. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | onsdag 11. februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | søndag 29. mai 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | kl. 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | kl. 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. feb. 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. februar 1987 kl. 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 kl. 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | onsdag 11. februar 1987 kl. kl. 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | søndag 29. mai 1453 kl. kl. 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------------- | ----------------------- | --------------------------- |
+| 2006-01-01T00:00:00.000Z | omtrent seks år | omtrent seks år | om omtrent seks år |
+| 2005-01-01T00:00:00.000Z | omtrent fem år | omtrent fem år | om omtrent fem år |
+| 2004-01-01T00:00:00.000Z | omtrent fire år | omtrent fire år | om omtrent fire år |
+| 2003-01-01T00:00:00.000Z | omtrent tre år | omtrent tre år | om omtrent tre år |
+| 2002-01-01T00:00:00.000Z | omtrent to år | omtrent to år | om omtrent to år |
+| 2001-06-01T00:00:00.000Z | over ett år | over ett år | om over ett år |
+| 2001-02-01T00:00:00.000Z | omtrent ett år | omtrent ett år | om omtrent ett år |
+| 2001-01-01T00:00:00.000Z | omtrent ett år | omtrent ett år | om omtrent ett år |
+| 2000-06-01T00:00:00.000Z | fem måneder | fem måneder | om fem måneder |
+| 2000-03-01T00:00:00.000Z | to måneder | to måneder | om to måneder |
+| 2000-02-01T00:00:00.000Z | omtrent en måned | omtrent en måned | om omtrent en måned |
+| 2000-01-15T00:00:00.000Z | 14 dager | 14 dager | om 14 dager |
+| 2000-01-02T00:00:00.000Z | en dag | en dag | om en dag |
+| 2000-01-01T06:00:00.000Z | omtrent seks timer | omtrent seks timer | om omtrent seks timer |
+| 2000-01-01T01:00:00.000Z | omtrent en time | omtrent en time | om omtrent en time |
+| 2000-01-01T00:45:00.000Z | omtrent en time | omtrent en time | om omtrent en time |
+| 2000-01-01T00:30:00.000Z | 30 minutter | 30 minutter | om 30 minutter |
+| 2000-01-01T00:15:00.000Z | 15 minutter | 15 minutter | om 15 minutter |
+| 2000-01-01T00:01:00.000Z | ett minutt | ett minutt | om ett minutt |
+| 2000-01-01T00:00:25.000Z | mindre enn ett minutt | et halvt minutt | om mindre enn ett minutt |
+| 2000-01-01T00:00:15.000Z | mindre enn ett minutt | mindre enn 20 sekunder | om mindre enn ett minutt |
+| 2000-01-01T00:00:05.000Z | mindre enn ett minutt | mindre enn ti sekunder | om mindre enn ett minutt |
+| 2000-01-01T00:00:00.000Z | mindre enn ett minutt | mindre enn fem sekunder | mindre enn ett minutt siden |
+| 1999-12-31T23:59:55.000Z | mindre enn ett minutt | mindre enn ti sekunder | mindre enn ett minutt siden |
+| 1999-12-31T23:59:45.000Z | mindre enn ett minutt | mindre enn 20 sekunder | mindre enn ett minutt siden |
+| 1999-12-31T23:59:35.000Z | mindre enn ett minutt | et halvt minutt | mindre enn ett minutt siden |
+| 1999-12-31T23:59:00.000Z | ett minutt | ett minutt | ett minutt siden |
+| 1999-12-31T23:45:00.000Z | 15 minutter | 15 minutter | 15 minutter siden |
+| 1999-12-31T23:30:00.000Z | 30 minutter | 30 minutter | 30 minutter siden |
+| 1999-12-31T23:15:00.000Z | omtrent en time | omtrent en time | omtrent en time siden |
+| 1999-12-31T23:00:00.000Z | omtrent en time | omtrent en time | omtrent en time siden |
+| 1999-12-31T18:00:00.000Z | omtrent seks timer | omtrent seks timer | omtrent seks timer siden |
+| 1999-12-30T00:00:00.000Z | to dager | to dager | to dager siden |
+| 1999-12-15T00:00:00.000Z | 17 dager | 17 dager | 17 dager siden |
+| 1999-12-01T00:00:00.000Z | omtrent en måned | omtrent en måned | omtrent en måned siden |
+| 1999-11-01T00:00:00.000Z | to måneder | to måneder | to måneder siden |
+| 1999-06-01T00:00:00.000Z | sju måneder | sju måneder | sju måneder siden |
+| 1999-01-01T00:00:00.000Z | omtrent ett år | omtrent ett år | omtrent ett år siden |
+| 1998-12-01T00:00:00.000Z | omtrent ett år | omtrent ett år | omtrent ett år siden |
+| 1998-06-01T00:00:00.000Z | over ett år | over ett år | over ett år siden |
+| 1998-01-01T00:00:00.000Z | omtrent to år | omtrent to år | omtrent to år siden |
+| 1997-01-01T00:00:00.000Z | omtrent tre år | omtrent tre år | omtrent tre år siden |
+| 1996-01-01T00:00:00.000Z | omtrent fire år | omtrent fire år | omtrent fire år siden |
+| 1995-01-01T00:00:00.000Z | omtrent fem år | omtrent fem år | omtrent fem år siden |
+| 1994-01-01T00:00:00.000Z | omtrent seks år | omtrent seks år | omtrent seks år siden |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | seks år | om seks år | 52608 timer |
+| 2005-01-01T00:00:00.000Z | fem år | om fem år | 43848 timer |
+| 2004-01-01T00:00:00.000Z | fire år | om fire år | 35064 timer |
+| 2003-01-01T00:00:00.000Z | tre år | om tre år | 26304 timer |
+| 2002-01-01T00:00:00.000Z | to år | om to år | 17544 timer |
+| 2001-06-01T00:00:00.000Z | ett år | om ett år | 12408 timer |
+| 2001-02-01T00:00:00.000Z | ett år | om ett år | 9528 timer |
+| 2001-01-01T00:00:00.000Z | ett år | om ett år | 8784 timer |
+| 2000-06-01T00:00:00.000Z | fem måneder | om fem måneder | 3648 timer |
+| 2000-03-01T00:00:00.000Z | to måneder | om to måneder | 1440 timer |
+| 2000-02-01T00:00:00.000Z | en måned | om en måned | 744 timer |
+| 2000-01-15T00:00:00.000Z | 14 dager | om 14 dager | 336 timer |
+| 2000-01-02T00:00:00.000Z | en dag | om en dag | 24 timer |
+| 2000-01-01T06:00:00.000Z | seks timer | om seks timer | seks timer |
+| 2000-01-01T01:00:00.000Z | en time | om en time | en time |
+| 2000-01-01T00:45:00.000Z | 45 minutter | om 45 minutter | en time |
+| 2000-01-01T00:30:00.000Z | 30 minutter | om 30 minutter | en time |
+| 2000-01-01T00:15:00.000Z | 15 minutter | om 15 minutter | null timer |
+| 2000-01-01T00:01:00.000Z | ett minutt | om ett minutt | null timer |
+| 2000-01-01T00:00:25.000Z | 25 sekunder | om 25 sekunder | null timer |
+| 2000-01-01T00:00:15.000Z | 15 sekunder | om 15 sekunder | null timer |
+| 2000-01-01T00:00:05.000Z | fem sekunder | om fem sekunder | null timer |
+| 2000-01-01T00:00:00.000Z | null sekunder | null sekunder siden | null timer |
+| 1999-12-31T23:59:55.000Z | fem sekunder | fem sekunder siden | null timer |
+| 1999-12-31T23:59:45.000Z | 15 sekunder | 15 sekunder siden | null timer |
+| 1999-12-31T23:59:35.000Z | 25 sekunder | 25 sekunder siden | null timer |
+| 1999-12-31T23:59:00.000Z | ett minutt | ett minutt siden | null timer |
+| 1999-12-31T23:45:00.000Z | 15 minutter | 15 minutter siden | null timer |
+| 1999-12-31T23:30:00.000Z | 30 minutter | 30 minutter siden | en time |
+| 1999-12-31T23:15:00.000Z | 45 minutter | 45 minutter siden | en time |
+| 1999-12-31T23:00:00.000Z | en time | en time siden | en time |
+| 1999-12-31T18:00:00.000Z | seks timer | seks timer siden | seks timer |
+| 1999-12-30T00:00:00.000Z | to dager | to dager siden | 48 timer |
+| 1999-12-15T00:00:00.000Z | 17 dager | 17 dager siden | 408 timer |
+| 1999-12-01T00:00:00.000Z | en måned | en måned siden | 744 timer |
+| 1999-11-01T00:00:00.000Z | to måneder | to måneder siden | 1464 timer |
+| 1999-06-01T00:00:00.000Z | sju måneder | sju måneder siden | 5136 timer |
+| 1999-01-01T00:00:00.000Z | ett år | ett år siden | 8760 timer |
+| 1998-12-01T00:00:00.000Z | ett år | ett år siden | 9504 timer |
+| 1998-06-01T00:00:00.000Z | to år | to år siden | 13896 timer |
+| 1998-01-01T00:00:00.000Z | to år | to år siden | 17520 timer |
+| 1997-01-01T00:00:00.000Z | tre år | tre år siden | 26280 timer |
+| 1996-01-01T00:00:00.000Z | fire år | fire år siden | 35064 timer |
+| 1995-01-01T00:00:00.000Z | fem år | fem år siden | 43824 timer |
+| 1994-01-01T00:00:00.000Z | seks år | seks år siden | 52584 timer |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------ |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | onsdag kl. 00:00 |
+| 2000-01-02T00:00:00.000Z | i morgen kl. 00:00 |
+| 2000-01-01T00:00:00.000Z | i dag kl. 00:00 |
+| 1999-12-31T00:00:00.000Z | i går kl. 00:00 |
+| 1999-12-27T00:00:00.000Z | forrige mandag kl. 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/nl-BE/_lib/formatDistance/index.js b/date-fns/src/locale/nl-BE/_lib/formatDistance/index.js
new file mode 100644
index 0000000..e5fafde
--- /dev/null
+++ b/date-fns/src/locale/nl-BE/_lib/formatDistance/index.js
@@ -0,0 +1,86 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'minder dan een seconde',
+ other: 'minder dan {{count}} seconden'
+ },
+ xSeconds: {
+ one: '1 seconde',
+ other: '{{count}} seconden'
+ },
+ halfAMinute: 'een halve minuut',
+ lessThanXMinutes: {
+ one: 'minder dan een minuut',
+ other: 'minder dan {{count}} minuten'
+ },
+ xMinutes: {
+ one: 'een minuut',
+ other: '{{count}} minuten'
+ },
+ aboutXHours: {
+ one: 'ongeveer 1 uur',
+ other: 'ongeveer {{count}} uur'
+ },
+ xHours: {
+ one: '1 uur',
+ other: '{{count}} uur'
+ },
+ xDays: {
+ one: '1 dag',
+ other: '{{count}} dagen'
+ },
+ aboutXWeeks: {
+ one: 'ongeveer 1 week',
+ other: 'ongeveer {{count}} weken'
+ },
+ xWeeks: {
+ one: '1 week',
+ other: '{{count}} weken'
+ },
+ aboutXMonths: {
+ one: 'ongeveer 1 maand',
+ other: 'ongeveer {{count}} maanden'
+ },
+ xMonths: {
+ one: '1 maand',
+ other: '{{count}} maanden'
+ },
+ aboutXYears: {
+ one: 'ongeveer 1 jaar',
+ other: 'ongeveer {{count}} jaar'
+ },
+ xYears: {
+ one: '1 jaar',
+ other: '{{count}} jaar'
+ },
+ overXYears: {
+ one: 'meer dan 1 jaar',
+ other: 'meer dan {{count}} jaar'
+ },
+ almostXYears: {
+ one: 'bijna 1 jaar',
+ other: 'bijna {{count}} jaar'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'over ' + result
+ } else {
+ return result + ' geleden'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/nl-BE/_lib/formatLong/index.js b/date-fns/src/locale/nl-BE/_lib/formatLong/index.js
new file mode 100644
index 0000000..2b6cb47
--- /dev/null
+++ b/date-fns/src/locale/nl-BE/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d MMMM y',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'dd-MM-y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'om' {{time}}",
+ long: "{{date}} 'om' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/nl-BE/_lib/formatRelative/index.js b/date-fns/src/locale/nl-BE/_lib/formatRelative/index.js
new file mode 100644
index 0000000..4b6db42
--- /dev/null
+++ b/date-fns/src/locale/nl-BE/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'vorige' eeee 'om' p",
+ yesterday: "'gisteren om' p",
+ today: "'vandaag om' p",
+ tomorrow: "'morgen om' p",
+ nextWeek: "eeee 'om' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/nl-BE/_lib/localize/index.js b/date-fns/src/locale/nl-BE/_lib/localize/index.js
new file mode 100644
index 0000000..ce52b6e
--- /dev/null
+++ b/date-fns/src/locale/nl-BE/_lib/localize/index.js
@@ -0,0 +1,132 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['v.C.', 'n.C.'],
+ abbreviated: ['v.Chr.', 'n.Chr.'],
+ wide: ['voor Christus', 'na Christus']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['K1', 'K2', 'K3', 'K4'],
+ wide: ['1e kwartaal', '2e kwartaal', '3e kwartaal', '4e kwartaal']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'jan.',
+ 'feb.',
+ 'mrt.',
+ 'apr.',
+ 'mei',
+ 'jun.',
+ 'jul.',
+ 'aug.',
+ 'sep.',
+ 'okt.',
+ 'nov.',
+ 'dec.'
+ ],
+ wide: [
+ 'januari',
+ 'februari',
+ 'maart',
+ 'april',
+ 'mei',
+ 'juni',
+ 'juli',
+ 'augustus',
+ 'september',
+ 'oktober',
+ 'november',
+ 'december'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Z', 'M', 'D', 'W', 'D', 'V', 'Z'],
+ short: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+ abbreviated: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+ wide: [
+ 'zondag',
+ 'maandag',
+ 'dinsdag',
+ 'woensdag',
+ 'donderdag',
+ 'vrijdag',
+ 'zaterdag'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'middernacht',
+ noon: 'het middag',
+ morning: "'s ochtends",
+ afternoon: "'s namiddags",
+ evening: "'s avonds",
+ night: "'s nachts"
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'middernacht',
+ noon: 'het middag',
+ morning: "'s ochtends",
+ afternoon: "'s namiddags",
+ evening: "'s avonds",
+ night: "'s nachts"
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'middernacht',
+ noon: 'het middag',
+ morning: "'s ochtends",
+ afternoon: "'s namiddags",
+ evening: "'s avonds",
+ night: "'s nachts"
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + 'e'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/nl-BE/_lib/match/index.js b/date-fns/src/locale/nl-BE/_lib/match/index.js
new file mode 100644
index 0000000..cbc7bce
--- /dev/null
+++ b/date-fns/src/locale/nl-BE/_lib/match/index.js
@@ -0,0 +1,136 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)e?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^([vn]\.? ?C\.?)/,
+ abbreviated: /^([vn]\. ?Chr\.?)/,
+ wide: /^((voor|na) Christus)/
+}
+var parseEraPatterns = {
+ any: [/^v/, /^n/]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^K[1234]/i,
+ wide: /^[1234]e kwartaal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan.|feb.|mrt.|apr.|mei|jun.|jul.|aug.|sep.|okt.|nov.|dec.)/i,
+ wide: /^(januari|februari|maart|april|mei|juni|juli|augustus|september|oktober|november|december)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^jan/i,
+ /^feb/i,
+ /^m(r|a)/i,
+ /^apr/i,
+ /^mei/i,
+ /^jun/i,
+ /^jul/i,
+ /^aug/i,
+ /^sep/i,
+ /^okt/i,
+ /^nov/i,
+ /^dec/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[zmdwv]/i,
+ short: /^(zo|ma|di|wo|do|vr|za)/i,
+ abbreviated: /^(zon|maa|din|woe|don|vri|zat)/i,
+ wide: /^(zondag|maandag|dinsdag|woensdag|donderdag|vrijdag|zaterdag)/i
+}
+var parseDayPatterns = {
+ narrow: [/^z/i, /^m/i, /^d/i, /^w/i, /^d/i, /^v/i, /^z/i],
+ any: [/^zo/i, /^ma/i, /^di/i, /^wo/i, /^do/i, /^vr/i, /^za/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(am|pm|middernacht|het middaguur|'s (ochtends|middags|avonds|nachts))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^am/i,
+ pm: /^pm/i,
+ midnight: /^middernacht/i,
+ noon: /^het middaguur/i,
+ morning: /ochtend/i,
+ afternoon: /middag/i,
+ evening: /avond/i,
+ night: /nacht/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/nl-BE/index.d.ts b/date-fns/src/locale/nl-BE/index.d.ts
new file mode 100644
index 0000000..c2970a4
--- /dev/null
+++ b/date-fns/src/locale/nl-BE/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nlBE } from 'date-fns/locale'
+export default nlBE
diff --git a/date-fns/src/locale/nl-BE/index.js b/date-fns/src/locale/nl-BE/index.js
new file mode 100644
index 0000000..787115d
--- /dev/null
+++ b/date-fns/src/locale/nl-BE/index.js
@@ -0,0 +1,31 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Dutch locale.
+ * @language Dutch
+ * @iso-639-2 nld
+ * @author Jorik Tangelder [@jtangelder]{@link https://github.com/jtangelder}
+ * @author Ruben Stolk [@rubenstolk]{@link https://github.com/rubenstolk}
+ * @author Lode Vanhove [@bitcrumb]{@link https://github.com/bitcrumb}
+ * @author Alex Hoeing [@dcbn]{@link https://github.com/dcbn}
+ */
+var locale = {
+ code: 'nl-BE',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/nl-BE/index.js.flow b/date-fns/src/locale/nl-BE/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/nl-BE/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/nl-BE/snapshot.md b/date-fns/src/locale/nl-BE/snapshot.md
new file mode 100644
index 0000000..83abbca
--- /dev/null
+++ b/date-fns/src/locale/nl-BE/snapshot.md
@@ -0,0 +1,304 @@
+# Dutch (nl-BE) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987e | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5e | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987e | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4e | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1e | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2e | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1e kwartaal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2e kwartaal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1e | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2e | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1e kwartaal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2e kwartaal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2e | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7e | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2e | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7e | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1e | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48e | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1e | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48e | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28e | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42e | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365e | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vrijdag | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5e | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vrijdag | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5e | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vrijdag | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5e | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vrijdag | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's namiddags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's namiddags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's namiddags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's namiddags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's namiddags | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11e | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23e | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11e | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23e | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1e | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55e | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1e | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55e | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11-02-1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29-05-1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 feb. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | woensdag 11 februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | zondag 29 mei 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11-02-1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29-05-1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 feb. 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mei 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 februari 1987 om 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 mei 1453 om 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | woensdag 11 februari 1987 om 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | zondag 29 mei 1453 om 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------------- | ---------------------- | ----------------------------- |
+| 2006-01-01T00:00:00.000Z | ongeveer 6 jaar | ongeveer 6 jaar | over ongeveer 6 jaar |
+| 2005-01-01T00:00:00.000Z | ongeveer 5 jaar | ongeveer 5 jaar | over ongeveer 5 jaar |
+| 2004-01-01T00:00:00.000Z | ongeveer 4 jaar | ongeveer 4 jaar | over ongeveer 4 jaar |
+| 2003-01-01T00:00:00.000Z | ongeveer 3 jaar | ongeveer 3 jaar | over ongeveer 3 jaar |
+| 2002-01-01T00:00:00.000Z | ongeveer 2 jaar | ongeveer 2 jaar | over ongeveer 2 jaar |
+| 2001-06-01T00:00:00.000Z | meer dan 1 jaar | meer dan 1 jaar | over meer dan 1 jaar |
+| 2001-02-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | over ongeveer 1 jaar |
+| 2001-01-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | over ongeveer 1 jaar |
+| 2000-06-01T00:00:00.000Z | 5 maanden | 5 maanden | over 5 maanden |
+| 2000-03-01T00:00:00.000Z | 2 maanden | 2 maanden | over 2 maanden |
+| 2000-02-01T00:00:00.000Z | ongeveer 1 maand | ongeveer 1 maand | over ongeveer 1 maand |
+| 2000-01-15T00:00:00.000Z | 14 dagen | 14 dagen | over 14 dagen |
+| 2000-01-02T00:00:00.000Z | 1 dag | 1 dag | over 1 dag |
+| 2000-01-01T06:00:00.000Z | ongeveer 6 uur | ongeveer 6 uur | over ongeveer 6 uur |
+| 2000-01-01T01:00:00.000Z | ongeveer 1 uur | ongeveer 1 uur | over ongeveer 1 uur |
+| 2000-01-01T00:45:00.000Z | ongeveer 1 uur | ongeveer 1 uur | over ongeveer 1 uur |
+| 2000-01-01T00:30:00.000Z | 30 minuten | 30 minuten | over 30 minuten |
+| 2000-01-01T00:15:00.000Z | 15 minuten | 15 minuten | over 15 minuten |
+| 2000-01-01T00:01:00.000Z | een minuut | een minuut | over een minuut |
+| 2000-01-01T00:00:25.000Z | minder dan een minuut | een halve minuut | over minder dan een minuut |
+| 2000-01-01T00:00:15.000Z | minder dan een minuut | minder dan 20 seconden | over minder dan een minuut |
+| 2000-01-01T00:00:05.000Z | minder dan een minuut | minder dan 10 seconden | over minder dan een minuut |
+| 2000-01-01T00:00:00.000Z | minder dan een minuut | minder dan 5 seconden | minder dan een minuut geleden |
+| 1999-12-31T23:59:55.000Z | minder dan een minuut | minder dan 10 seconden | minder dan een minuut geleden |
+| 1999-12-31T23:59:45.000Z | minder dan een minuut | minder dan 20 seconden | minder dan een minuut geleden |
+| 1999-12-31T23:59:35.000Z | minder dan een minuut | een halve minuut | minder dan een minuut geleden |
+| 1999-12-31T23:59:00.000Z | een minuut | een minuut | een minuut geleden |
+| 1999-12-31T23:45:00.000Z | 15 minuten | 15 minuten | 15 minuten geleden |
+| 1999-12-31T23:30:00.000Z | 30 minuten | 30 minuten | 30 minuten geleden |
+| 1999-12-31T23:15:00.000Z | ongeveer 1 uur | ongeveer 1 uur | ongeveer 1 uur geleden |
+| 1999-12-31T23:00:00.000Z | ongeveer 1 uur | ongeveer 1 uur | ongeveer 1 uur geleden |
+| 1999-12-31T18:00:00.000Z | ongeveer 6 uur | ongeveer 6 uur | ongeveer 6 uur geleden |
+| 1999-12-30T00:00:00.000Z | 2 dagen | 2 dagen | 2 dagen geleden |
+| 1999-12-15T00:00:00.000Z | 17 dagen | 17 dagen | 17 dagen geleden |
+| 1999-12-01T00:00:00.000Z | ongeveer 1 maand | ongeveer 1 maand | ongeveer 1 maand geleden |
+| 1999-11-01T00:00:00.000Z | 2 maanden | 2 maanden | 2 maanden geleden |
+| 1999-06-01T00:00:00.000Z | 7 maanden | 7 maanden | 7 maanden geleden |
+| 1999-01-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | ongeveer 1 jaar geleden |
+| 1998-12-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | ongeveer 1 jaar geleden |
+| 1998-06-01T00:00:00.000Z | meer dan 1 jaar | meer dan 1 jaar | meer dan 1 jaar geleden |
+| 1998-01-01T00:00:00.000Z | ongeveer 2 jaar | ongeveer 2 jaar | ongeveer 2 jaar geleden |
+| 1997-01-01T00:00:00.000Z | ongeveer 3 jaar | ongeveer 3 jaar | ongeveer 3 jaar geleden |
+| 1996-01-01T00:00:00.000Z | ongeveer 4 jaar | ongeveer 4 jaar | ongeveer 4 jaar geleden |
+| 1995-01-01T00:00:00.000Z | ongeveer 5 jaar | ongeveer 5 jaar | ongeveer 5 jaar geleden |
+| 1994-01-01T00:00:00.000Z | ongeveer 6 jaar | ongeveer 6 jaar | ongeveer 6 jaar geleden |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 jaar | over 6 jaar | 52608 uur |
+| 2005-01-01T00:00:00.000Z | 5 jaar | over 5 jaar | 43848 uur |
+| 2004-01-01T00:00:00.000Z | 4 jaar | over 4 jaar | 35064 uur |
+| 2003-01-01T00:00:00.000Z | 3 jaar | over 3 jaar | 26304 uur |
+| 2002-01-01T00:00:00.000Z | 2 jaar | over 2 jaar | 17544 uur |
+| 2001-06-01T00:00:00.000Z | 1 jaar | over 1 jaar | 12408 uur |
+| 2001-02-01T00:00:00.000Z | 1 jaar | over 1 jaar | 9528 uur |
+| 2001-01-01T00:00:00.000Z | 1 jaar | over 1 jaar | 8784 uur |
+| 2000-06-01T00:00:00.000Z | 5 maanden | over 5 maanden | 3648 uur |
+| 2000-03-01T00:00:00.000Z | 2 maanden | over 2 maanden | 1440 uur |
+| 2000-02-01T00:00:00.000Z | 1 maand | over 1 maand | 744 uur |
+| 2000-01-15T00:00:00.000Z | 14 dagen | over 14 dagen | 336 uur |
+| 2000-01-02T00:00:00.000Z | 1 dag | over 1 dag | 24 uur |
+| 2000-01-01T06:00:00.000Z | 6 uur | over 6 uur | 6 uur |
+| 2000-01-01T01:00:00.000Z | 1 uur | over 1 uur | 1 uur |
+| 2000-01-01T00:45:00.000Z | 45 minuten | over 45 minuten | 1 uur |
+| 2000-01-01T00:30:00.000Z | 30 minuten | over 30 minuten | 1 uur |
+| 2000-01-01T00:15:00.000Z | 15 minuten | over 15 minuten | 0 uur |
+| 2000-01-01T00:01:00.000Z | een minuut | over een minuut | 0 uur |
+| 2000-01-01T00:00:25.000Z | 25 seconden | over 25 seconden | 0 uur |
+| 2000-01-01T00:00:15.000Z | 15 seconden | over 15 seconden | 0 uur |
+| 2000-01-01T00:00:05.000Z | 5 seconden | over 5 seconden | 0 uur |
+| 2000-01-01T00:00:00.000Z | 0 seconden | 0 seconden geleden | 0 uur |
+| 1999-12-31T23:59:55.000Z | 5 seconden | 5 seconden geleden | 0 uur |
+| 1999-12-31T23:59:45.000Z | 15 seconden | 15 seconden geleden | 0 uur |
+| 1999-12-31T23:59:35.000Z | 25 seconden | 25 seconden geleden | 0 uur |
+| 1999-12-31T23:59:00.000Z | een minuut | een minuut geleden | 0 uur |
+| 1999-12-31T23:45:00.000Z | 15 minuten | 15 minuten geleden | 0 uur |
+| 1999-12-31T23:30:00.000Z | 30 minuten | 30 minuten geleden | 1 uur |
+| 1999-12-31T23:15:00.000Z | 45 minuten | 45 minuten geleden | 1 uur |
+| 1999-12-31T23:00:00.000Z | 1 uur | 1 uur geleden | 1 uur |
+| 1999-12-31T18:00:00.000Z | 6 uur | 6 uur geleden | 6 uur |
+| 1999-12-30T00:00:00.000Z | 2 dagen | 2 dagen geleden | 48 uur |
+| 1999-12-15T00:00:00.000Z | 17 dagen | 17 dagen geleden | 408 uur |
+| 1999-12-01T00:00:00.000Z | 1 maand | 1 maand geleden | 744 uur |
+| 1999-11-01T00:00:00.000Z | 2 maanden | 2 maanden geleden | 1464 uur |
+| 1999-06-01T00:00:00.000Z | 7 maanden | 7 maanden geleden | 5136 uur |
+| 1999-01-01T00:00:00.000Z | 1 jaar | 1 jaar geleden | 8760 uur |
+| 1998-12-01T00:00:00.000Z | 1 jaar | 1 jaar geleden | 9504 uur |
+| 1998-06-01T00:00:00.000Z | 2 jaar | 2 jaar geleden | 13896 uur |
+| 1998-01-01T00:00:00.000Z | 2 jaar | 2 jaar geleden | 17520 uur |
+| 1997-01-01T00:00:00.000Z | 3 jaar | 3 jaar geleden | 26280 uur |
+| 1996-01-01T00:00:00.000Z | 4 jaar | 4 jaar geleden | 35064 uur |
+| 1995-01-01T00:00:00.000Z | 5 jaar | 5 jaar geleden | 43824 uur |
+| 1994-01-01T00:00:00.000Z | 6 jaar | 6 jaar geleden | 52584 uur |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------- |
+| 2000-01-10T00:00:00.000Z | 10-01-2000 |
+| 2000-01-05T00:00:00.000Z | woensdag om 00:00 |
+| 2000-01-02T00:00:00.000Z | morgen om 00:00 |
+| 2000-01-01T00:00:00.000Z | vandaag om 00:00 |
+| 1999-12-31T00:00:00.000Z | gisteren om 00:00 |
+| 1999-12-27T00:00:00.000Z | vorige maandag om 00:00 |
+| 1999-12-21T00:00:00.000Z | 21-12-1999 |
diff --git a/date-fns/src/locale/nl/_lib/formatDistance/index.js b/date-fns/src/locale/nl/_lib/formatDistance/index.js
new file mode 100644
index 0000000..f1c2d88
--- /dev/null
+++ b/date-fns/src/locale/nl/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'minder dan een seconde',
+ other: 'minder dan {{count}} seconden'
+ },
+
+ xSeconds: {
+ one: '1 seconde',
+ other: '{{count}} seconden'
+ },
+
+ halfAMinute: 'een halve minuut',
+
+ lessThanXMinutes: {
+ one: 'minder dan een minuut',
+ other: 'minder dan {{count}} minuten'
+ },
+
+ xMinutes: {
+ one: 'een minuut',
+ other: '{{count}} minuten'
+ },
+
+ aboutXHours: {
+ one: 'ongeveer 1 uur',
+ other: 'ongeveer {{count}} uur'
+ },
+
+ xHours: {
+ one: '1 uur',
+ other: '{{count}} uur'
+ },
+
+ xDays: {
+ one: '1 dag',
+ other: '{{count}} dagen'
+ },
+
+ aboutXWeeks: {
+ one: 'ongeveer 1 week',
+ other: 'ongeveer {{count}} weken'
+ },
+
+ xWeeks: {
+ one: '1 week',
+ other: '{{count}} weken'
+ },
+
+ aboutXMonths: {
+ one: 'ongeveer 1 maand',
+ other: 'ongeveer {{count}} maanden'
+ },
+
+ xMonths: {
+ one: '1 maand',
+ other: '{{count}} maanden'
+ },
+
+ aboutXYears: {
+ one: 'ongeveer 1 jaar',
+ other: 'ongeveer {{count}} jaar'
+ },
+
+ xYears: {
+ one: '1 jaar',
+ other: '{{count}} jaar'
+ },
+
+ overXYears: {
+ one: 'meer dan 1 jaar',
+ other: 'meer dan {{count}} jaar'
+ },
+
+ almostXYears: {
+ one: 'bijna 1 jaar',
+ other: 'bijna {{count}} jaar'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'over ' + result
+ } else {
+ return result + ' geleden'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/nl/_lib/formatLong/index.js b/date-fns/src/locale/nl/_lib/formatLong/index.js
new file mode 100644
index 0000000..2b6cb47
--- /dev/null
+++ b/date-fns/src/locale/nl/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d MMMM y',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'dd-MM-y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'om' {{time}}",
+ long: "{{date}} 'om' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/nl/_lib/formatRelative/index.js b/date-fns/src/locale/nl/_lib/formatRelative/index.js
new file mode 100644
index 0000000..63473fa
--- /dev/null
+++ b/date-fns/src/locale/nl/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'afgelopen' eeee 'om' p",
+ yesterday: "'gisteren om' p",
+ today: "'vandaag om' p",
+ tomorrow: "'morgen om' p",
+ nextWeek: "eeee 'om' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/nl/_lib/localize/index.js b/date-fns/src/locale/nl/_lib/localize/index.js
new file mode 100644
index 0000000..e126041
--- /dev/null
+++ b/date-fns/src/locale/nl/_lib/localize/index.js
@@ -0,0 +1,132 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['v.C.', 'n.C.'],
+ abbreviated: ['v.Chr.', 'n.Chr.'],
+ wide: ['voor Christus', 'na Christus']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['K1', 'K2', 'K3', 'K4'],
+ wide: ['1e kwartaal', '2e kwartaal', '3e kwartaal', '4e kwartaal']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'jan.',
+ 'feb.',
+ 'mrt.',
+ 'apr.',
+ 'mei',
+ 'jun.',
+ 'jul.',
+ 'aug.',
+ 'sep.',
+ 'okt.',
+ 'nov.',
+ 'dec.'
+ ],
+ wide: [
+ 'januari',
+ 'februari',
+ 'maart',
+ 'april',
+ 'mei',
+ 'juni',
+ 'juli',
+ 'augustus',
+ 'september',
+ 'oktober',
+ 'november',
+ 'december'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Z', 'M', 'D', 'W', 'D', 'V', 'Z'],
+ short: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+ abbreviated: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+ wide: [
+ 'zondag',
+ 'maandag',
+ 'dinsdag',
+ 'woensdag',
+ 'donderdag',
+ 'vrijdag',
+ 'zaterdag'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'middernacht',
+ noon: 'het middaguur',
+ morning: "'s ochtends",
+ afternoon: "'s middags",
+ evening: "'s avonds",
+ night: "'s nachts"
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'middernacht',
+ noon: 'het middaguur',
+ morning: "'s ochtends",
+ afternoon: "'s middags",
+ evening: "'s avonds",
+ night: "'s nachts"
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'middernacht',
+ noon: 'het middaguur',
+ morning: "'s ochtends",
+ afternoon: "'s middags",
+ evening: "'s avonds",
+ night: "'s nachts"
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + 'e'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/nl/_lib/match/index.js b/date-fns/src/locale/nl/_lib/match/index.js
new file mode 100644
index 0000000..cbc7bce
--- /dev/null
+++ b/date-fns/src/locale/nl/_lib/match/index.js
@@ -0,0 +1,136 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)e?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^([vn]\.? ?C\.?)/,
+ abbreviated: /^([vn]\. ?Chr\.?)/,
+ wide: /^((voor|na) Christus)/
+}
+var parseEraPatterns = {
+ any: [/^v/, /^n/]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^K[1234]/i,
+ wide: /^[1234]e kwartaal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan.|feb.|mrt.|apr.|mei|jun.|jul.|aug.|sep.|okt.|nov.|dec.)/i,
+ wide: /^(januari|februari|maart|april|mei|juni|juli|augustus|september|oktober|november|december)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^jan/i,
+ /^feb/i,
+ /^m(r|a)/i,
+ /^apr/i,
+ /^mei/i,
+ /^jun/i,
+ /^jul/i,
+ /^aug/i,
+ /^sep/i,
+ /^okt/i,
+ /^nov/i,
+ /^dec/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[zmdwv]/i,
+ short: /^(zo|ma|di|wo|do|vr|za)/i,
+ abbreviated: /^(zon|maa|din|woe|don|vri|zat)/i,
+ wide: /^(zondag|maandag|dinsdag|woensdag|donderdag|vrijdag|zaterdag)/i
+}
+var parseDayPatterns = {
+ narrow: [/^z/i, /^m/i, /^d/i, /^w/i, /^d/i, /^v/i, /^z/i],
+ any: [/^zo/i, /^ma/i, /^di/i, /^wo/i, /^do/i, /^vr/i, /^za/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(am|pm|middernacht|het middaguur|'s (ochtends|middags|avonds|nachts))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^am/i,
+ pm: /^pm/i,
+ midnight: /^middernacht/i,
+ noon: /^het middaguur/i,
+ morning: /ochtend/i,
+ afternoon: /middag/i,
+ evening: /avond/i,
+ night: /nacht/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/nl/index.d.ts b/date-fns/src/locale/nl/index.d.ts
new file mode 100644
index 0000000..eb92f4e
--- /dev/null
+++ b/date-fns/src/locale/nl/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nl } from 'date-fns/locale'
+export default nl
diff --git a/date-fns/src/locale/nl/index.js b/date-fns/src/locale/nl/index.js
new file mode 100644
index 0000000..1e0b931
--- /dev/null
+++ b/date-fns/src/locale/nl/index.js
@@ -0,0 +1,33 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Dutch locale.
+ * @language Dutch
+ * @iso-639-2 nld
+ * @author Jorik Tangelder [@jtangelder]{@link https://github.com/jtangelder}
+ * @author Ruben Stolk [@rubenstolk]{@link https://github.com/rubenstolk}
+ * @author Lode Vanhove [@bitcrumb]{@link https://github.com/bitcrumb}
+ * @author Edo Rivai [@edorivai]{@link https://github.com/edorivai}
+ * @author Niels Keurentjes [@curry684]{@link https://github.com/curry684}
+ * @author Stefan Vermaas [@stefanvermaas]{@link https://github.com/stefanvermaas}
+ */
+var locale = {
+ code: 'nl',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/nl/index.js.flow b/date-fns/src/locale/nl/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/nl/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/nl/snapshot.md b/date-fns/src/locale/nl/snapshot.md
new file mode 100644
index 0000000..18b8556
--- /dev/null
+++ b/date-fns/src/locale/nl/snapshot.md
@@ -0,0 +1,304 @@
+# Dutch (nl) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987e | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5e | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987e | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4e | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1e | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2e | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1e kwartaal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2e kwartaal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1e | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2e | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | K1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | K2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1e kwartaal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2e kwartaal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2e | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7e | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2e | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7e | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1e | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48e | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1e | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48e | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28e | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42e | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365e | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vrijdag | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5e | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vrijdag | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5e | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vrijdag | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5e | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | maa | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vri | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | maandag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vrijdag | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | V | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | ma | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's middags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's middags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's middags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's middags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | 's ochtends | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 's middags | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 's avonds | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 's nachts | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11e | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23e | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11e | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23e | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1e | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55e | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1e | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55e | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11-02-1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29-05-1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 feb. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mei 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | woensdag 11 februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | zondag 29 mei 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11-02-1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29-05-1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 feb. 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mei 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 februari 1987 om 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 mei 1453 om 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | woensdag 11 februari 1987 om 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | zondag 29 mei 1453 om 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------------- | ---------------------- | ----------------------------- |
+| 2006-01-01T00:00:00.000Z | ongeveer 6 jaar | ongeveer 6 jaar | over ongeveer 6 jaar |
+| 2005-01-01T00:00:00.000Z | ongeveer 5 jaar | ongeveer 5 jaar | over ongeveer 5 jaar |
+| 2004-01-01T00:00:00.000Z | ongeveer 4 jaar | ongeveer 4 jaar | over ongeveer 4 jaar |
+| 2003-01-01T00:00:00.000Z | ongeveer 3 jaar | ongeveer 3 jaar | over ongeveer 3 jaar |
+| 2002-01-01T00:00:00.000Z | ongeveer 2 jaar | ongeveer 2 jaar | over ongeveer 2 jaar |
+| 2001-06-01T00:00:00.000Z | meer dan 1 jaar | meer dan 1 jaar | over meer dan 1 jaar |
+| 2001-02-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | over ongeveer 1 jaar |
+| 2001-01-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | over ongeveer 1 jaar |
+| 2000-06-01T00:00:00.000Z | 5 maanden | 5 maanden | over 5 maanden |
+| 2000-03-01T00:00:00.000Z | 2 maanden | 2 maanden | over 2 maanden |
+| 2000-02-01T00:00:00.000Z | ongeveer 1 maand | ongeveer 1 maand | over ongeveer 1 maand |
+| 2000-01-15T00:00:00.000Z | 14 dagen | 14 dagen | over 14 dagen |
+| 2000-01-02T00:00:00.000Z | 1 dag | 1 dag | over 1 dag |
+| 2000-01-01T06:00:00.000Z | ongeveer 6 uur | ongeveer 6 uur | over ongeveer 6 uur |
+| 2000-01-01T01:00:00.000Z | ongeveer 1 uur | ongeveer 1 uur | over ongeveer 1 uur |
+| 2000-01-01T00:45:00.000Z | ongeveer 1 uur | ongeveer 1 uur | over ongeveer 1 uur |
+| 2000-01-01T00:30:00.000Z | 30 minuten | 30 minuten | over 30 minuten |
+| 2000-01-01T00:15:00.000Z | 15 minuten | 15 minuten | over 15 minuten |
+| 2000-01-01T00:01:00.000Z | een minuut | een minuut | over een minuut |
+| 2000-01-01T00:00:25.000Z | minder dan een minuut | een halve minuut | over minder dan een minuut |
+| 2000-01-01T00:00:15.000Z | minder dan een minuut | minder dan 20 seconden | over minder dan een minuut |
+| 2000-01-01T00:00:05.000Z | minder dan een minuut | minder dan 10 seconden | over minder dan een minuut |
+| 2000-01-01T00:00:00.000Z | minder dan een minuut | minder dan 5 seconden | minder dan een minuut geleden |
+| 1999-12-31T23:59:55.000Z | minder dan een minuut | minder dan 10 seconden | minder dan een minuut geleden |
+| 1999-12-31T23:59:45.000Z | minder dan een minuut | minder dan 20 seconden | minder dan een minuut geleden |
+| 1999-12-31T23:59:35.000Z | minder dan een minuut | een halve minuut | minder dan een minuut geleden |
+| 1999-12-31T23:59:00.000Z | een minuut | een minuut | een minuut geleden |
+| 1999-12-31T23:45:00.000Z | 15 minuten | 15 minuten | 15 minuten geleden |
+| 1999-12-31T23:30:00.000Z | 30 minuten | 30 minuten | 30 minuten geleden |
+| 1999-12-31T23:15:00.000Z | ongeveer 1 uur | ongeveer 1 uur | ongeveer 1 uur geleden |
+| 1999-12-31T23:00:00.000Z | ongeveer 1 uur | ongeveer 1 uur | ongeveer 1 uur geleden |
+| 1999-12-31T18:00:00.000Z | ongeveer 6 uur | ongeveer 6 uur | ongeveer 6 uur geleden |
+| 1999-12-30T00:00:00.000Z | 2 dagen | 2 dagen | 2 dagen geleden |
+| 1999-12-15T00:00:00.000Z | 17 dagen | 17 dagen | 17 dagen geleden |
+| 1999-12-01T00:00:00.000Z | ongeveer 1 maand | ongeveer 1 maand | ongeveer 1 maand geleden |
+| 1999-11-01T00:00:00.000Z | 2 maanden | 2 maanden | 2 maanden geleden |
+| 1999-06-01T00:00:00.000Z | 7 maanden | 7 maanden | 7 maanden geleden |
+| 1999-01-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | ongeveer 1 jaar geleden |
+| 1998-12-01T00:00:00.000Z | ongeveer 1 jaar | ongeveer 1 jaar | ongeveer 1 jaar geleden |
+| 1998-06-01T00:00:00.000Z | meer dan 1 jaar | meer dan 1 jaar | meer dan 1 jaar geleden |
+| 1998-01-01T00:00:00.000Z | ongeveer 2 jaar | ongeveer 2 jaar | ongeveer 2 jaar geleden |
+| 1997-01-01T00:00:00.000Z | ongeveer 3 jaar | ongeveer 3 jaar | ongeveer 3 jaar geleden |
+| 1996-01-01T00:00:00.000Z | ongeveer 4 jaar | ongeveer 4 jaar | ongeveer 4 jaar geleden |
+| 1995-01-01T00:00:00.000Z | ongeveer 5 jaar | ongeveer 5 jaar | ongeveer 5 jaar geleden |
+| 1994-01-01T00:00:00.000Z | ongeveer 6 jaar | ongeveer 6 jaar | ongeveer 6 jaar geleden |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 jaar | over 6 jaar | 52608 uur |
+| 2005-01-01T00:00:00.000Z | 5 jaar | over 5 jaar | 43848 uur |
+| 2004-01-01T00:00:00.000Z | 4 jaar | over 4 jaar | 35064 uur |
+| 2003-01-01T00:00:00.000Z | 3 jaar | over 3 jaar | 26304 uur |
+| 2002-01-01T00:00:00.000Z | 2 jaar | over 2 jaar | 17544 uur |
+| 2001-06-01T00:00:00.000Z | 1 jaar | over 1 jaar | 12408 uur |
+| 2001-02-01T00:00:00.000Z | 1 jaar | over 1 jaar | 9528 uur |
+| 2001-01-01T00:00:00.000Z | 1 jaar | over 1 jaar | 8784 uur |
+| 2000-06-01T00:00:00.000Z | 5 maanden | over 5 maanden | 3648 uur |
+| 2000-03-01T00:00:00.000Z | 2 maanden | over 2 maanden | 1440 uur |
+| 2000-02-01T00:00:00.000Z | 1 maand | over 1 maand | 744 uur |
+| 2000-01-15T00:00:00.000Z | 14 dagen | over 14 dagen | 336 uur |
+| 2000-01-02T00:00:00.000Z | 1 dag | over 1 dag | 24 uur |
+| 2000-01-01T06:00:00.000Z | 6 uur | over 6 uur | 6 uur |
+| 2000-01-01T01:00:00.000Z | 1 uur | over 1 uur | 1 uur |
+| 2000-01-01T00:45:00.000Z | 45 minuten | over 45 minuten | 1 uur |
+| 2000-01-01T00:30:00.000Z | 30 minuten | over 30 minuten | 1 uur |
+| 2000-01-01T00:15:00.000Z | 15 minuten | over 15 minuten | 0 uur |
+| 2000-01-01T00:01:00.000Z | een minuut | over een minuut | 0 uur |
+| 2000-01-01T00:00:25.000Z | 25 seconden | over 25 seconden | 0 uur |
+| 2000-01-01T00:00:15.000Z | 15 seconden | over 15 seconden | 0 uur |
+| 2000-01-01T00:00:05.000Z | 5 seconden | over 5 seconden | 0 uur |
+| 2000-01-01T00:00:00.000Z | 0 seconden | 0 seconden geleden | 0 uur |
+| 1999-12-31T23:59:55.000Z | 5 seconden | 5 seconden geleden | 0 uur |
+| 1999-12-31T23:59:45.000Z | 15 seconden | 15 seconden geleden | 0 uur |
+| 1999-12-31T23:59:35.000Z | 25 seconden | 25 seconden geleden | 0 uur |
+| 1999-12-31T23:59:00.000Z | een minuut | een minuut geleden | 0 uur |
+| 1999-12-31T23:45:00.000Z | 15 minuten | 15 minuten geleden | 0 uur |
+| 1999-12-31T23:30:00.000Z | 30 minuten | 30 minuten geleden | 1 uur |
+| 1999-12-31T23:15:00.000Z | 45 minuten | 45 minuten geleden | 1 uur |
+| 1999-12-31T23:00:00.000Z | 1 uur | 1 uur geleden | 1 uur |
+| 1999-12-31T18:00:00.000Z | 6 uur | 6 uur geleden | 6 uur |
+| 1999-12-30T00:00:00.000Z | 2 dagen | 2 dagen geleden | 48 uur |
+| 1999-12-15T00:00:00.000Z | 17 dagen | 17 dagen geleden | 408 uur |
+| 1999-12-01T00:00:00.000Z | 1 maand | 1 maand geleden | 744 uur |
+| 1999-11-01T00:00:00.000Z | 2 maanden | 2 maanden geleden | 1464 uur |
+| 1999-06-01T00:00:00.000Z | 7 maanden | 7 maanden geleden | 5136 uur |
+| 1999-01-01T00:00:00.000Z | 1 jaar | 1 jaar geleden | 8760 uur |
+| 1998-12-01T00:00:00.000Z | 1 jaar | 1 jaar geleden | 9504 uur |
+| 1998-06-01T00:00:00.000Z | 2 jaar | 2 jaar geleden | 13896 uur |
+| 1998-01-01T00:00:00.000Z | 2 jaar | 2 jaar geleden | 17520 uur |
+| 1997-01-01T00:00:00.000Z | 3 jaar | 3 jaar geleden | 26280 uur |
+| 1996-01-01T00:00:00.000Z | 4 jaar | 4 jaar geleden | 35064 uur |
+| 1995-01-01T00:00:00.000Z | 5 jaar | 5 jaar geleden | 43824 uur |
+| 1994-01-01T00:00:00.000Z | 6 jaar | 6 jaar geleden | 52584 uur |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------- |
+| 2000-01-10T00:00:00.000Z | 10-01-2000 |
+| 2000-01-05T00:00:00.000Z | woensdag om 00:00 |
+| 2000-01-02T00:00:00.000Z | morgen om 00:00 |
+| 2000-01-01T00:00:00.000Z | vandaag om 00:00 |
+| 1999-12-31T00:00:00.000Z | gisteren om 00:00 |
+| 1999-12-27T00:00:00.000Z | afgelopen maandag om 00:00 |
+| 1999-12-21T00:00:00.000Z | 21-12-1999 |
diff --git a/date-fns/src/locale/nn/_lib/formatDistance/index.js b/date-fns/src/locale/nn/_lib/formatDistance/index.js
new file mode 100644
index 0000000..cf716b6
--- /dev/null
+++ b/date-fns/src/locale/nn/_lib/formatDistance/index.js
@@ -0,0 +1,127 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ singular: 'mindre enn eitt sekund',
+ plural: 'mindre enn {{count}} sekund'
+ },
+
+ xSeconds: {
+ singular: 'eitt sekund',
+ plural: '{{count}} sekund'
+ },
+
+ halfAMinute: 'eit halvt minutt',
+
+ lessThanXMinutes: {
+ singular: 'mindre enn eitt minutt',
+ plural: 'mindre enn {{count}} minutt'
+ },
+
+ xMinutes: {
+ singular: 'eitt minutt',
+ plural: '{{count}} minutt'
+ },
+
+ aboutXHours: {
+ singular: 'omtrent ein time',
+ plural: 'omtrent {{count}} timar'
+ },
+
+ xHours: {
+ singular: 'ein time',
+ plural: '{{count}} timar'
+ },
+
+ xDays: {
+ singular: 'ein dag',
+ plural: '{{count}} dagar'
+ },
+
+ aboutXWeeks: {
+ singular: 'omtrent ei veke',
+ plural: 'omtrent {{count}} veker'
+ },
+
+ xWeeks: {
+ singular: 'ei veke',
+ plural: '{{count}} veker'
+ },
+
+ aboutXMonths: {
+ singular: 'omtrent ein månad',
+ plural: 'omtrent {{count}} månader'
+ },
+
+ xMonths: {
+ singular: 'ein månad',
+ plural: '{{count}} månader'
+ },
+
+ aboutXYears: {
+ singular: 'omtrent eitt år',
+ plural: 'omtrent {{count}} år'
+ },
+
+ xYears: {
+ singular: 'eitt år',
+ plural: '{{count}} år'
+ },
+
+ overXYears: {
+ singular: 'over eitt år',
+ plural: 'over {{count}} år'
+ },
+
+ almostXYears: {
+ singular: 'nesten eitt år',
+ plural: 'nesten {{count}} år'
+ }
+}
+
+var wordMapping = [
+ 'null',
+ 'ein',
+ 'to',
+ 'tre',
+ 'fire',
+ 'fem',
+ 'seks',
+ 'sju',
+ 'åtte',
+ 'ni',
+ 'ti',
+ 'elleve',
+ 'tolv'
+]
+
+export default function formatDistance(token, count, options) {
+ options = options || {
+ onlyNumeric: false
+ }
+
+ var translation = formatDistanceLocale[token]
+ var result
+ if (typeof translation === 'string') {
+ result = translation
+ } else if (count === 0 || count > 1) {
+ if (options.onlyNumeric) {
+ result = translation.plural.replace('{{count}}', count)
+ } else {
+ result = translation.plural.replace(
+ '{{count}}',
+ count < 13 ? wordMapping[count] : count
+ )
+ }
+ } else {
+ result = translation.singular
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'om ' + result
+ } else {
+ return result + ' sidan'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/nn/_lib/formatLong/index.js b/date-fns/src/locale/nn/_lib/formatLong/index.js
new file mode 100644
index 0000000..067f59e
--- /dev/null
+++ b/date-fns/src/locale/nn/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d. MMMM y',
+ long: 'd. MMMM y',
+ medium: 'd. MMM y',
+ short: 'dd.MM.y'
+}
+
+var timeFormats = {
+ full: "'kl'. HH:mm:ss zzzz",
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'kl.' {{time}}",
+ long: "{{date}} 'kl.' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/nn/_lib/formatRelative/index.js b/date-fns/src/locale/nn/_lib/formatRelative/index.js
new file mode 100644
index 0000000..895db62
--- /dev/null
+++ b/date-fns/src/locale/nn/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'førre' eeee 'kl.' p",
+ yesterday: "'i går kl.' p",
+ today: "'i dag kl.' p",
+ tomorrow: "'i morgon kl.' p",
+ nextWeek: "EEEE 'kl.' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/nn/_lib/localize/index.js b/date-fns/src/locale/nn/_lib/localize/index.js
new file mode 100644
index 0000000..4c3fbc8
--- /dev/null
+++ b/date-fns/src/locale/nn/_lib/localize/index.js
@@ -0,0 +1,124 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['f.Kr.', 'e.Kr.'],
+ abbreviated: ['f.Kr.', 'e.Kr.'],
+ wide: ['før Kristus', 'etter Kristus']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'jan.',
+ 'feb.',
+ 'mars',
+ 'apr.',
+ 'mai',
+ 'juni',
+ 'juli',
+ 'aug.',
+ 'sep.',
+ 'okt.',
+ 'nov.',
+ 'des.'
+ ],
+ wide: [
+ 'januar',
+ 'februar',
+ 'mars',
+ 'april',
+ 'mai',
+ 'juni',
+ 'juli',
+ 'august',
+ 'september',
+ 'oktober',
+ 'november',
+ 'desember'
+ ]
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'T', 'O', 'T', 'F', 'L'],
+ short: ['su', 'må', 'ty', 'on', 'to', 'fr', 'lau'],
+ abbreviated: ['sun', 'mån', 'tys', 'ons', 'tor', 'fre', 'laur'],
+ wide: ['sundag', 'måndag', 'tysdag', 'onsdag', 'torsdag', 'fredag', 'laurdag']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'på morg.',
+ afternoon: 'på etterm.',
+ evening: 'på kvelden',
+ night: 'på natta'
+ },
+ abbreviated: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'på morg.',
+ afternoon: 'på etterm.',
+ evening: 'på kvelden',
+ night: 'på natta'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'på morgonen',
+ afternoon: 'på ettermiddagen',
+ evening: 'på kvelden',
+ night: 'på natta'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/nn/_lib/match/index.js b/date-fns/src/locale/nn/_lib/match/index.js
new file mode 100644
index 0000000..ff0c5f3
--- /dev/null
+++ b/date-fns/src/locale/nn/_lib/match/index.js
@@ -0,0 +1,136 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\.?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(f\.? ?Kr\.?|fvt\.?|e\.? ?Kr\.?|evt\.?)/i,
+ abbreviated: /^(f\.? ?Kr\.?|fvt\.?|e\.? ?Kr\.?|evt\.?)/i,
+ wide: /^(før Kristus|før vår tid|etter Kristus|vår tid)/i
+}
+var parseEraPatterns = {
+ any: [/^f/i, /^e/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](\.)? kvartal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mars?|apr|mai|juni?|juli?|aug|sep|okt|nov|des)\.?/i,
+ wide: /^(januar|februar|mars|april|mai|juni|juli|august|september|oktober|november|desember)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^mai/i,
+ /^jun/i,
+ /^jul/i,
+ /^aug/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[smtofl]/i,
+ short: /^(su|må|ty|on|to|fr|la)/i,
+ abbreviated: /^(sun|mån|tys|ons|tor|fre|laur)/i,
+ wide: /^(sundag|måndag|tysdag|onsdag|torsdag|fredag|laurdag)/i
+}
+var parseDayPatterns = {
+ any: [/^s/i, /^m/i, /^ty/i, /^o/i, /^to/i, /^f/i, /^l/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(midnatt|middag|(på) (morgonen|ettermiddagen|kvelden|natta)|[ap])/i,
+ any: /^([ap]\.?\s?m\.?|midnatt|middag|(på) (morgonen|ettermiddagen|kvelden|natta))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a(\.?\s?m\.?)?$/i,
+ pm: /^p(\.?\s?m\.?)?$/i,
+ midnight: /^midn/i,
+ noon: /^midd/i,
+ morning: /morgon/i,
+ afternoon: /ettermiddag/i,
+ evening: /kveld/i,
+ night: /natt/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/nn/index.d.ts b/date-fns/src/locale/nn/index.d.ts
new file mode 100644
index 0000000..08050ed
--- /dev/null
+++ b/date-fns/src/locale/nn/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nn } from 'date-fns/locale'
+export default nn
diff --git a/date-fns/src/locale/nn/index.js b/date-fns/src/locale/nn/index.js
new file mode 100644
index 0000000..4a6998f
--- /dev/null
+++ b/date-fns/src/locale/nn/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Norwegian Nynorsk locale.
+ * @language Norwegian Nynorsk
+ * @iso-639-2 nno
+ * @author Mats Byrkjeland [@draperunner]{@link https://github.com/draperunner}
+ */
+var locale = {
+ code: 'nn',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/nn/index.js.flow b/date-fns/src/locale/nn/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/nn/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/nn/snapshot.md b/date-fns/src/locale/nn/snapshot.md
new file mode 100644
index 0000000..05ce90b
--- /dev/null
+++ b/date-fns/src/locale/nn/snapshot.md
@@ -0,0 +1,304 @@
+# Norwegian Nynorsk (nn) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | måndag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | må | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | måndag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | må | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | måndag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | må | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | måndag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | må | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på etterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natta | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på etterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natta | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på etterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natta | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | på morgonen | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | på ettermiddagen | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natta | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på etterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvelden | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natta | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. feb. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | onsdag 11. februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | sundag 29. mai 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | kl. 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | kl. 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. feb. 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. februar 1987 kl. 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. mai 1453 kl. 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | onsdag 11. februar 1987 kl. kl. 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | sundag 29. mai 1453 kl. kl. 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------------- | ---------------------- | ---------------------------- |
+| 2006-01-01T00:00:00.000Z | omtrent seks år | omtrent seks år | om omtrent seks år |
+| 2005-01-01T00:00:00.000Z | omtrent fem år | omtrent fem år | om omtrent fem år |
+| 2004-01-01T00:00:00.000Z | omtrent fire år | omtrent fire år | om omtrent fire år |
+| 2003-01-01T00:00:00.000Z | omtrent tre år | omtrent tre år | om omtrent tre år |
+| 2002-01-01T00:00:00.000Z | omtrent to år | omtrent to år | om omtrent to år |
+| 2001-06-01T00:00:00.000Z | over eitt år | over eitt år | om over eitt år |
+| 2001-02-01T00:00:00.000Z | omtrent eitt år | omtrent eitt år | om omtrent eitt år |
+| 2001-01-01T00:00:00.000Z | omtrent eitt år | omtrent eitt år | om omtrent eitt år |
+| 2000-06-01T00:00:00.000Z | fem månader | fem månader | om fem månader |
+| 2000-03-01T00:00:00.000Z | to månader | to månader | om to månader |
+| 2000-02-01T00:00:00.000Z | omtrent ein månad | omtrent ein månad | om omtrent ein månad |
+| 2000-01-15T00:00:00.000Z | 14 dagar | 14 dagar | om 14 dagar |
+| 2000-01-02T00:00:00.000Z | ein dag | ein dag | om ein dag |
+| 2000-01-01T06:00:00.000Z | omtrent seks timar | omtrent seks timar | om omtrent seks timar |
+| 2000-01-01T01:00:00.000Z | omtrent ein time | omtrent ein time | om omtrent ein time |
+| 2000-01-01T00:45:00.000Z | omtrent ein time | omtrent ein time | om omtrent ein time |
+| 2000-01-01T00:30:00.000Z | 30 minutt | 30 minutt | om 30 minutt |
+| 2000-01-01T00:15:00.000Z | 15 minutt | 15 minutt | om 15 minutt |
+| 2000-01-01T00:01:00.000Z | eitt minutt | eitt minutt | om eitt minutt |
+| 2000-01-01T00:00:25.000Z | mindre enn eitt minutt | eit halvt minutt | om mindre enn eitt minutt |
+| 2000-01-01T00:00:15.000Z | mindre enn eitt minutt | mindre enn 20 sekund | om mindre enn eitt minutt |
+| 2000-01-01T00:00:05.000Z | mindre enn eitt minutt | mindre enn ti sekund | om mindre enn eitt minutt |
+| 2000-01-01T00:00:00.000Z | mindre enn eitt minutt | mindre enn fem sekund | mindre enn eitt minutt sidan |
+| 1999-12-31T23:59:55.000Z | mindre enn eitt minutt | mindre enn ti sekund | mindre enn eitt minutt sidan |
+| 1999-12-31T23:59:45.000Z | mindre enn eitt minutt | mindre enn 20 sekund | mindre enn eitt minutt sidan |
+| 1999-12-31T23:59:35.000Z | mindre enn eitt minutt | eit halvt minutt | mindre enn eitt minutt sidan |
+| 1999-12-31T23:59:00.000Z | eitt minutt | eitt minutt | eitt minutt sidan |
+| 1999-12-31T23:45:00.000Z | 15 minutt | 15 minutt | 15 minutt sidan |
+| 1999-12-31T23:30:00.000Z | 30 minutt | 30 minutt | 30 minutt sidan |
+| 1999-12-31T23:15:00.000Z | omtrent ein time | omtrent ein time | omtrent ein time sidan |
+| 1999-12-31T23:00:00.000Z | omtrent ein time | omtrent ein time | omtrent ein time sidan |
+| 1999-12-31T18:00:00.000Z | omtrent seks timar | omtrent seks timar | omtrent seks timar sidan |
+| 1999-12-30T00:00:00.000Z | to dagar | to dagar | to dagar sidan |
+| 1999-12-15T00:00:00.000Z | 17 dagar | 17 dagar | 17 dagar sidan |
+| 1999-12-01T00:00:00.000Z | omtrent ein månad | omtrent ein månad | omtrent ein månad sidan |
+| 1999-11-01T00:00:00.000Z | to månader | to månader | to månader sidan |
+| 1999-06-01T00:00:00.000Z | sju månader | sju månader | sju månader sidan |
+| 1999-01-01T00:00:00.000Z | omtrent eitt år | omtrent eitt år | omtrent eitt år sidan |
+| 1998-12-01T00:00:00.000Z | omtrent eitt år | omtrent eitt år | omtrent eitt år sidan |
+| 1998-06-01T00:00:00.000Z | over eitt år | over eitt år | over eitt år sidan |
+| 1998-01-01T00:00:00.000Z | omtrent to år | omtrent to år | omtrent to år sidan |
+| 1997-01-01T00:00:00.000Z | omtrent tre år | omtrent tre år | omtrent tre år sidan |
+| 1996-01-01T00:00:00.000Z | omtrent fire år | omtrent fire år | omtrent fire år sidan |
+| 1995-01-01T00:00:00.000Z | omtrent fem år | omtrent fem år | omtrent fem år sidan |
+| 1994-01-01T00:00:00.000Z | omtrent seks år | omtrent seks år | omtrent seks år sidan |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | seks år | om seks år | 52608 timar |
+| 2005-01-01T00:00:00.000Z | fem år | om fem år | 43848 timar |
+| 2004-01-01T00:00:00.000Z | fire år | om fire år | 35064 timar |
+| 2003-01-01T00:00:00.000Z | tre år | om tre år | 26304 timar |
+| 2002-01-01T00:00:00.000Z | to år | om to år | 17544 timar |
+| 2001-06-01T00:00:00.000Z | eitt år | om eitt år | 12408 timar |
+| 2001-02-01T00:00:00.000Z | eitt år | om eitt år | 9528 timar |
+| 2001-01-01T00:00:00.000Z | eitt år | om eitt år | 8784 timar |
+| 2000-06-01T00:00:00.000Z | fem månader | om fem månader | 3648 timar |
+| 2000-03-01T00:00:00.000Z | to månader | om to månader | 1440 timar |
+| 2000-02-01T00:00:00.000Z | ein månad | om ein månad | 744 timar |
+| 2000-01-15T00:00:00.000Z | 14 dagar | om 14 dagar | 336 timar |
+| 2000-01-02T00:00:00.000Z | ein dag | om ein dag | 24 timar |
+| 2000-01-01T06:00:00.000Z | seks timar | om seks timar | seks timar |
+| 2000-01-01T01:00:00.000Z | ein time | om ein time | ein time |
+| 2000-01-01T00:45:00.000Z | 45 minutt | om 45 minutt | ein time |
+| 2000-01-01T00:30:00.000Z | 30 minutt | om 30 minutt | ein time |
+| 2000-01-01T00:15:00.000Z | 15 minutt | om 15 minutt | null timar |
+| 2000-01-01T00:01:00.000Z | eitt minutt | om eitt minutt | null timar |
+| 2000-01-01T00:00:25.000Z | 25 sekund | om 25 sekund | null timar |
+| 2000-01-01T00:00:15.000Z | 15 sekund | om 15 sekund | null timar |
+| 2000-01-01T00:00:05.000Z | fem sekund | om fem sekund | null timar |
+| 2000-01-01T00:00:00.000Z | null sekund | null sekund sidan | null timar |
+| 1999-12-31T23:59:55.000Z | fem sekund | fem sekund sidan | null timar |
+| 1999-12-31T23:59:45.000Z | 15 sekund | 15 sekund sidan | null timar |
+| 1999-12-31T23:59:35.000Z | 25 sekund | 25 sekund sidan | null timar |
+| 1999-12-31T23:59:00.000Z | eitt minutt | eitt minutt sidan | null timar |
+| 1999-12-31T23:45:00.000Z | 15 minutt | 15 minutt sidan | null timar |
+| 1999-12-31T23:30:00.000Z | 30 minutt | 30 minutt sidan | ein time |
+| 1999-12-31T23:15:00.000Z | 45 minutt | 45 minutt sidan | ein time |
+| 1999-12-31T23:00:00.000Z | ein time | ein time sidan | ein time |
+| 1999-12-31T18:00:00.000Z | seks timar | seks timar sidan | seks timar |
+| 1999-12-30T00:00:00.000Z | to dagar | to dagar sidan | 48 timar |
+| 1999-12-15T00:00:00.000Z | 17 dagar | 17 dagar sidan | 408 timar |
+| 1999-12-01T00:00:00.000Z | ein månad | ein månad sidan | 744 timar |
+| 1999-11-01T00:00:00.000Z | to månader | to månader sidan | 1464 timar |
+| 1999-06-01T00:00:00.000Z | sju månader | sju månader sidan | 5136 timar |
+| 1999-01-01T00:00:00.000Z | eitt år | eitt år sidan | 8760 timar |
+| 1998-12-01T00:00:00.000Z | eitt år | eitt år sidan | 9504 timar |
+| 1998-06-01T00:00:00.000Z | to år | to år sidan | 13896 timar |
+| 1998-01-01T00:00:00.000Z | to år | to år sidan | 17520 timar |
+| 1997-01-01T00:00:00.000Z | tre år | tre år sidan | 26280 timar |
+| 1996-01-01T00:00:00.000Z | fire år | fire år sidan | 35064 timar |
+| 1995-01-01T00:00:00.000Z | fem år | fem år sidan | 43824 timar |
+| 1994-01-01T00:00:00.000Z | seks år | seks år sidan | 52584 timar |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | onsdag kl. 00:00 |
+| 2000-01-02T00:00:00.000Z | i morgon kl. 00:00 |
+| 2000-01-01T00:00:00.000Z | i dag kl. 00:00 |
+| 1999-12-31T00:00:00.000Z | i går kl. 00:00 |
+| 1999-12-27T00:00:00.000Z | førre måndag kl. 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/pl/_lib/formatDistance/index.js b/date-fns/src/locale/pl/_lib/formatDistance/index.js
new file mode 100644
index 0000000..d3069db
--- /dev/null
+++ b/date-fns/src/locale/pl/_lib/formatDistance/index.js
@@ -0,0 +1,169 @@
+function declensionGroup(scheme, count) {
+ if (count === 1) {
+ return scheme.one
+ }
+
+ var rem100 = count % 100
+
+ // ends with 11-20
+ if (rem100 <= 20 && rem100 > 10) {
+ return scheme.other
+ }
+
+ var rem10 = rem100 % 10
+
+ // ends with 2, 3, 4
+ if (rem10 >= 2 && rem10 <= 4) {
+ return scheme.twoFour
+ }
+
+ return scheme.other
+}
+
+function declension(scheme, count, time) {
+ time = time || 'regular'
+ var group = declensionGroup(scheme, count)
+ var finalText = group[time] || group
+ return finalText.replace('{{count}}', count)
+}
+
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: {
+ regular: 'mniej niż sekunda',
+ past: 'mniej niż sekundę',
+ future: 'mniej niż sekundę'
+ },
+ twoFour: 'mniej niż {{count}} sekundy',
+ other: 'mniej niż {{count}} sekund'
+ },
+
+ xSeconds: {
+ one: {
+ regular: 'sekunda',
+ past: 'sekundę',
+ future: 'sekundę'
+ },
+ twoFour: '{{count}} sekundy',
+ other: '{{count}} sekund'
+ },
+
+ halfAMinute: {
+ one: 'pół minuty',
+ twoFour: 'pół minuty',
+ other: 'pół minuty'
+ },
+
+ lessThanXMinutes: {
+ one: {
+ regular: 'mniej niż minuta',
+ past: 'mniej niż minutę',
+ future: 'mniej niż minutę'
+ },
+ twoFour: 'mniej niż {{count}} minuty',
+ other: 'mniej niż {{count}} minut'
+ },
+
+ xMinutes: {
+ one: {
+ regular: 'minuta',
+ past: 'minutę',
+ future: 'minutę'
+ },
+ twoFour: '{{count}} minuty',
+ other: '{{count}} minut'
+ },
+
+ aboutXHours: {
+ one: {
+ regular: 'około godziny',
+ past: 'około godziny',
+ future: 'około godzinę'
+ },
+ twoFour: 'około {{count}} godziny',
+ other: 'około {{count}} godzin'
+ },
+
+ xHours: {
+ one: {
+ regular: 'godzina',
+ past: 'godzinę',
+ future: 'godzinę'
+ },
+ twoFour: '{{count}} godziny',
+ other: '{{count}} godzin'
+ },
+
+ xDays: {
+ one: {
+ regular: 'dzień',
+ past: 'dzień',
+ future: '1 dzień'
+ },
+ twoFour: '{{count}} dni',
+ other: '{{count}} dni'
+ },
+
+ aboutXWeeks: {
+ one: 'około tygodnia',
+ twoFour: 'około {{count}} tygodni',
+ other: 'około {{count}} tygodni'
+ },
+
+ xWeeks: {
+ one: 'tydzień',
+ twoFour: '{{count}} tygodnie',
+ other: '{{count}} tygodni'
+ },
+
+ aboutXMonths: {
+ one: 'około miesiąc',
+ twoFour: 'około {{count}} miesiące',
+ other: 'około {{count}} miesięcy'
+ },
+
+ xMonths: {
+ one: 'miesiąc',
+ twoFour: '{{count}} miesiące',
+ other: '{{count}} miesięcy'
+ },
+
+ aboutXYears: {
+ one: 'około rok',
+ twoFour: 'około {{count}} lata',
+ other: 'około {{count}} lat'
+ },
+
+ xYears: {
+ one: 'rok',
+ twoFour: '{{count}} lata',
+ other: '{{count}} lat'
+ },
+
+ overXYears: {
+ one: 'ponad rok',
+ twoFour: 'ponad {{count}} lata',
+ other: 'ponad {{count}} lat'
+ },
+
+ almostXYears: {
+ one: 'prawie rok',
+ twoFour: 'prawie {{count}} lata',
+ other: 'prawie {{count}} lat'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var scheme = formatDistanceLocale[token]
+ if (!options.addSuffix) {
+ return declension(scheme, count)
+ }
+
+ if (options.comparison > 0) {
+ return 'za ' + declension(scheme, count, 'future')
+ } else {
+ return declension(scheme, count, 'past') + ' temu'
+ }
+}
diff --git a/date-fns/src/locale/pl/_lib/formatLong/index.js b/date-fns/src/locale/pl/_lib/formatLong/index.js
new file mode 100644
index 0000000..4cb65a1
--- /dev/null
+++ b/date-fns/src/locale/pl/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, do MMMM y',
+ long: 'do MMMM y',
+ medium: 'do MMM y',
+ short: 'dd.MM.y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/pl/_lib/formatRelative/index.js b/date-fns/src/locale/pl/_lib/formatRelative/index.js
new file mode 100644
index 0000000..22eb1e2
--- /dev/null
+++ b/date-fns/src/locale/pl/_lib/formatRelative/index.js
@@ -0,0 +1,69 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+var adjectivesLastWeek = {
+ masculine: 'ostatni',
+ feminine: 'ostatnia'
+}
+
+var adjectivesThisWeek = {
+ masculine: 'ten',
+ feminine: 'ta'
+}
+
+var adjectivesNextWeek = {
+ masculine: 'następny',
+ feminine: 'następna'
+}
+
+var dayGrammaticalGender = {
+ 0: 'feminine',
+ 1: 'masculine',
+ 2: 'masculine',
+ 3: 'feminine',
+ 4: 'masculine',
+ 5: 'masculine',
+ 6: 'feminine'
+}
+
+function getAdjectives(token, date, baseDate, options) {
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return adjectivesThisWeek
+ } else if (token === 'lastWeek') {
+ return adjectivesLastWeek
+ } else if (token === 'nextWeek') {
+ return adjectivesNextWeek
+ } else {
+ throw new Error(`Cannot determine adjectives for token ${token}`)
+ }
+}
+
+function getAdjective(token, date, baseDate, options) {
+ var day = date.getUTCDay()
+ var adjectives = getAdjectives(token, date, baseDate, options)
+ var grammaticalGender = dayGrammaticalGender[day]
+
+ return adjectives[grammaticalGender]
+}
+
+function dayAndTimeWithAdjective(token, date, baseDate, options) {
+ var adjective = getAdjective(token, date, baseDate, options)
+ return `'${adjective}' eeee 'o' p`
+}
+
+var formatRelativeLocale = {
+ lastWeek: dayAndTimeWithAdjective,
+ yesterday: "'wczoraj o' p",
+ today: "'dzisiaj o' p",
+ tomorrow: "'jutro o' p",
+ nextWeek: dayAndTimeWithAdjective,
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+ if (typeof format === 'function') {
+ return format(token, date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/pl/_lib/localize/index.js b/date-fns/src/locale/pl/_lib/localize/index.js
new file mode 100644
index 0000000..e348565
--- /dev/null
+++ b/date-fns/src/locale/pl/_lib/localize/index.js
@@ -0,0 +1,215 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return String(number)
+}
+
+var eraValues = {
+ narrow: ['p.n.e.', 'n.e.'],
+ abbreviated: ['p.n.e.', 'n.e.'],
+ wide: ['przed naszą erą', 'naszej ery']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['I kw.', 'II kw.', 'III kw.', 'IV kw.'],
+ wide: ['I kwartał', 'II kwartał', 'III kwartał', 'IV kwartał']
+}
+
+var monthValues = {
+ narrow: ['S', 'L', 'M', 'K', 'M', 'C', 'L', 'S', 'W', 'P', 'L', 'G'],
+ abbreviated: [
+ 'sty',
+ 'lut',
+ 'mar',
+ 'kwi',
+ 'maj',
+ 'cze',
+ 'lip',
+ 'sie',
+ 'wrz',
+ 'paź',
+ 'lis',
+ 'gru'
+ ],
+ wide: [
+ 'styczeń',
+ 'luty',
+ 'marzec',
+ 'kwiecień',
+ 'maj',
+ 'czerwiec',
+ 'lipiec',
+ 'sierpień',
+ 'wrzesień',
+ 'październik',
+ 'listopad',
+ 'grudzień'
+ ]
+}
+var monthFormattingValues = {
+ narrow: ['s', 'l', 'm', 'k', 'm', 'c', 'l', 's', 'w', 'p', 'l', 'g'],
+ abbreviated: [
+ 'sty',
+ 'lut',
+ 'mar',
+ 'kwi',
+ 'maj',
+ 'cze',
+ 'lip',
+ 'sie',
+ 'wrz',
+ 'paź',
+ 'lis',
+ 'gru'
+ ],
+ wide: [
+ 'stycznia',
+ 'lutego',
+ 'marca',
+ 'kwietnia',
+ 'maja',
+ 'czerwca',
+ 'lipca',
+ 'sierpnia',
+ 'września',
+ 'października',
+ 'listopada',
+ 'grudnia'
+ ]
+}
+
+var dayValues = {
+ narrow: ['N', 'P', 'W', 'Ś', 'C', 'P', 'S'],
+ short: ['nie', 'pon', 'wto', 'śro', 'czw', 'pią', 'sob'],
+ abbreviated: ['niedz.', 'pon.', 'wt.', 'śr.', 'czw.', 'pt.', 'sob.'],
+ wide: [
+ 'niedziela',
+ 'poniedziałek',
+ 'wtorek',
+ 'środa',
+ 'czwartek',
+ 'piątek',
+ 'sobota'
+ ]
+}
+var dayFormattingValues = {
+ narrow: ['n', 'p', 'w', 'ś', 'c', 'p', 's'],
+ short: ['nie', 'pon', 'wto', 'śro', 'czw', 'pią', 'sob'],
+ abbreviated: ['niedz.', 'pon.', 'wt.', 'śr.', 'czw.', 'pt.', 'sob.'],
+ wide: [
+ 'niedziela',
+ 'poniedziałek',
+ 'wtorek',
+ 'środa',
+ 'czwartek',
+ 'piątek',
+ 'sobota'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'półn.',
+ noon: 'poł',
+ morning: 'rano',
+ afternoon: 'popoł.',
+ evening: 'wiecz.',
+ night: 'noc'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'północ',
+ noon: 'południe',
+ morning: 'rano',
+ afternoon: 'popołudnie',
+ evening: 'wieczór',
+ night: 'noc'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'północ',
+ noon: 'południe',
+ morning: 'rano',
+ afternoon: 'popołudnie',
+ evening: 'wieczór',
+ night: 'noc'
+ }
+}
+var dayPeriodFormattingValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'o półn.',
+ noon: 'w poł.',
+ morning: 'rano',
+ afternoon: 'po poł.',
+ evening: 'wiecz.',
+ night: 'w nocy'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'o północy',
+ noon: 'w południe',
+ morning: 'rano',
+ afternoon: 'po południu',
+ evening: 'wieczorem',
+ night: 'w nocy'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'o północy',
+ noon: 'w południe',
+ morning: 'rano',
+ afternoon: 'po południu',
+ evening: 'wieczorem',
+ night: 'w nocy'
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: monthFormattingValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide',
+ formattingValues: dayFormattingValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: dayPeriodFormattingValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/pl/_lib/match/index.js b/date-fns/src/locale/pl/_lib/match/index.js
new file mode 100644
index 0000000..8d62792
--- /dev/null
+++ b/date-fns/src/locale/pl/_lib/match/index.js
@@ -0,0 +1,149 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(p\.?\s*n\.?\s*e\.?\s*|n\.?\s*e\.?\s*)/i,
+ abbreviated: /^(p\.?\s*n\.?\s*e\.?\s*|n\.?\s*e\.?\s*)/i,
+ wide: /^(przed\s*nasz(ą|a)\s*er(ą|a)|naszej\s*ery)/i
+}
+var parseEraPatterns = {
+ any: [/^p/i, /^n/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^(I|II|III|IV)\s*kw\.?/i,
+ wide: /^(I|II|III|IV)\s*kwarta(ł|l)/i
+}
+var parseQuarterPatterns = {
+ narrow: [/1/i, /2/i, /3/i, /4/i],
+ any: [/^I kw/i, /^II kw/i, /^III kw/i, /^IV kw/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[slmkcwpg]/i,
+ abbreviated: /^(sty|lut|mar|kwi|maj|cze|lip|sie|wrz|pa(ź|z)|lis|gru)/i,
+ wide: /^(stycznia|stycze(ń|n)|lutego|luty|marca|marzec|kwietnia|kwiecie(ń|n)|maja|maj|czerwca|czerwiec|lipca|lipiec|sierpnia|sierpie(ń|n)|wrze(ś|s)nia|wrzesie(ń|n)|pa(ź|z)dziernika|pa(ź|z)dziernik|listopada|listopad|grudnia|grudzie(ń|n))/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^s/i,
+ /^l/i,
+ /^m/i,
+ /^k/i,
+ /^m/i,
+ /^c/i,
+ /^l/i,
+ /^s/i,
+ /^w/i,
+ /^p/i,
+ /^l/i,
+ /^g/i
+ ],
+ any: [
+ /^st/i,
+ /^lu/i,
+ /^mar/i,
+ /^k/i,
+ /^maj/i,
+ /^c/i,
+ /^lip/i,
+ /^si/i,
+ /^w/i,
+ /^p/i,
+ /^lis/i,
+ /^g/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[npwścs]/i,
+ short: /^(nie|pon|wto|(ś|s)ro|czw|pi(ą|a)|sob)/i,
+ abbreviated: /^(niedz|pon|wt|(ś|s)r|czw|pt|sob)\.?/i,
+ wide: /^(niedziela|poniedzia(ł|l)ek|wtorek|(ś|s)roda|czwartek|pi(ą|a)tek|sobota)/i
+}
+var parseDayPatterns = {
+ narrow: [/^n/i, /^p/i, /^w/i, /^ś/i, /^c/i, /^p/i, /^s/i],
+ abbreviated: [/^n/i, /^po/i, /^w/i, /^(ś|s)r/i, /^c/i, /^pt/i, /^so/i],
+ any: [/^n/i, /^po/i, /^w/i, /^(ś|s)r/i, /^c/i, /^pi/i, /^so/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(^a$|^p$|pó(ł|l)n\.?|o\s*pó(ł|l)n\.?|po(ł|l)\.?|w\s*po(ł|l)\.?|po\s*po(ł|l)\.?|rano|wiecz\.?|noc|w\s*nocy)/i,
+ any: /^(am|pm|pó(ł|l)noc|o\s*pó(ł|l)nocy|po(ł|l)udnie|w\s*po(ł|l)udnie|popo(ł|l)udnie|po\s*po(ł|l)udniu|rano|wieczór|wieczorem|noc|w\s*nocy)/i
+}
+var parseDayPeriodPatterns = {
+ narrow: {
+ am: /^a$/i,
+ pm: /^p$/i,
+ midnight: /pó(ł|l)n/i,
+ noon: /po(ł|l)/i,
+ morning: /rano/i,
+ afternoon: /po\s*po(ł|l)/i,
+ evening: /wiecz/i,
+ night: /noc/i
+ },
+ any: {
+ am: /^am/i,
+ pm: /^pm/i,
+ midnight: /pó(ł|l)n/i,
+ noon: /po(ł|l)/i,
+ morning: /rano/i,
+ afternoon: /po\s*po(ł|l)/i,
+ evening: /wiecz/i,
+ night: /noc/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/pl/index.d.ts b/date-fns/src/locale/pl/index.d.ts
new file mode 100644
index 0000000..1ff8b7d
--- /dev/null
+++ b/date-fns/src/locale/pl/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { pl } from 'date-fns/locale'
+export default pl
diff --git a/date-fns/src/locale/pl/index.js b/date-fns/src/locale/pl/index.js
new file mode 100644
index 0000000..2b74eae
--- /dev/null
+++ b/date-fns/src/locale/pl/index.js
@@ -0,0 +1,31 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Polish locale.
+ * @language Polish
+ * @iso-639-2 pol
+ * @author Mateusz Derks [@ertrzyiks]{@link https://github.com/ertrzyiks}
+ * @author Just RAG [@justrag]{@link https://github.com/justrag}
+ * @author Mikolaj Grzyb [@mikolajgrzyb]{@link https://github.com/mikolajgrzyb}
+ * @author Mateusz Tokarski [@mutisz]{@link https://github.com/mutisz}
+ */
+var locale = {
+ code: 'pl',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/pl/index.js.flow b/date-fns/src/locale/pl/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/pl/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/pl/snapshot.md b/date-fns/src/locale/pl/snapshot.md
new file mode 100644
index 0000000..f1fabe9
--- /dev/null
+++ b/date-fns/src/locale/pl/snapshot.md
@@ -0,0 +1,304 @@
+# Polish (pl) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4 | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | I kw. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | II kw. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | I kwartał | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | II kwartał | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | I kw. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | II kw. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | I kwartał | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | II kwartał | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | lut | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | lip | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | lutego | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | lipca | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | l | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | l | 2019-02-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | lut | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | lip | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | luty | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | lipiec | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | L | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | L | 2019-02-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pt. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pt. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pt. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | poniedziałek | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piątek | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | pon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pią | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pt. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | poniedziałek | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piątek | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | pon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pią | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pt. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | poniedziałek | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piątek | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | pon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pią | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pt. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | poniedziałek | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piątek | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | pon | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pią | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | rano | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | po południu | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | wieczorem | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | w nocy | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | rano | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | po południu | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | wieczorem | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | w nocy | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | rano | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | po południu | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | wieczorem | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | w nocy | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | rano | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | po południu | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | wieczorem | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | w nocy | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | rano | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | po poł. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | wiecz. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | w nocy | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 lut 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 maj 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 lutego 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 maja 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | środa, 11 lutego 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | niedziela, 29 maja 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 lut 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 maj 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 lutego 1987 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 maja 1453 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | środa, 11 lutego 1987 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | niedziela, 29 maja 1453 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------- | ---------------------- | --------------------- |
+| 2006-01-01T00:00:00.000Z | około 6 lat | około 6 lat | za około 6 lat |
+| 2005-01-01T00:00:00.000Z | około 5 lat | około 5 lat | za około 5 lat |
+| 2004-01-01T00:00:00.000Z | około 4 lata | około 4 lata | za około 4 lata |
+| 2003-01-01T00:00:00.000Z | około 3 lata | około 3 lata | za około 3 lata |
+| 2002-01-01T00:00:00.000Z | około 2 lata | około 2 lata | za około 2 lata |
+| 2001-06-01T00:00:00.000Z | ponad rok | ponad rok | za ponad rok |
+| 2001-02-01T00:00:00.000Z | około rok | około rok | za około rok |
+| 2001-01-01T00:00:00.000Z | około rok | około rok | za około rok |
+| 2000-06-01T00:00:00.000Z | 5 miesięcy | 5 miesięcy | za 5 miesięcy |
+| 2000-03-01T00:00:00.000Z | 2 miesiące | 2 miesiące | za 2 miesiące |
+| 2000-02-01T00:00:00.000Z | około miesiąc | około miesiąc | za około miesiąc |
+| 2000-01-15T00:00:00.000Z | 14 dni | 14 dni | za 14 dni |
+| 2000-01-02T00:00:00.000Z | dzień | dzień | za 1 dzień |
+| 2000-01-01T06:00:00.000Z | około 6 godzin | około 6 godzin | za około 6 godzin |
+| 2000-01-01T01:00:00.000Z | około godziny | około godziny | za około godzinę |
+| 2000-01-01T00:45:00.000Z | około godziny | około godziny | za około godzinę |
+| 2000-01-01T00:30:00.000Z | 30 minut | 30 minut | za 30 minut |
+| 2000-01-01T00:15:00.000Z | 15 minut | 15 minut | za 15 minut |
+| 2000-01-01T00:01:00.000Z | minuta | minuta | za minutę |
+| 2000-01-01T00:00:25.000Z | mniej niż minuta | pół minuty | za mniej niż minutę |
+| 2000-01-01T00:00:15.000Z | mniej niż minuta | mniej niż 20 sekund | za mniej niż minutę |
+| 2000-01-01T00:00:05.000Z | mniej niż minuta | mniej niż 10 sekund | za mniej niż minutę |
+| 2000-01-01T00:00:00.000Z | mniej niż minuta | mniej niż 5 sekund | mniej niż minutę temu |
+| 1999-12-31T23:59:55.000Z | mniej niż minuta | mniej niż 10 sekund | mniej niż minutę temu |
+| 1999-12-31T23:59:45.000Z | mniej niż minuta | mniej niż 20 sekund | mniej niż minutę temu |
+| 1999-12-31T23:59:35.000Z | mniej niż minuta | pół minuty | mniej niż minutę temu |
+| 1999-12-31T23:59:00.000Z | minuta | minuta | minutę temu |
+| 1999-12-31T23:45:00.000Z | 15 minut | 15 minut | 15 minut temu |
+| 1999-12-31T23:30:00.000Z | 30 minut | 30 minut | 30 minut temu |
+| 1999-12-31T23:15:00.000Z | około godziny | około godziny | około godziny temu |
+| 1999-12-31T23:00:00.000Z | około godziny | około godziny | około godziny temu |
+| 1999-12-31T18:00:00.000Z | około 6 godzin | około 6 godzin | około 6 godzin temu |
+| 1999-12-30T00:00:00.000Z | 2 dni | 2 dni | 2 dni temu |
+| 1999-12-15T00:00:00.000Z | 17 dni | 17 dni | 17 dni temu |
+| 1999-12-01T00:00:00.000Z | około miesiąc | około miesiąc | około miesiąc temu |
+| 1999-11-01T00:00:00.000Z | 2 miesiące | 2 miesiące | 2 miesiące temu |
+| 1999-06-01T00:00:00.000Z | 7 miesięcy | 7 miesięcy | 7 miesięcy temu |
+| 1999-01-01T00:00:00.000Z | około rok | około rok | około rok temu |
+| 1998-12-01T00:00:00.000Z | około rok | około rok | około rok temu |
+| 1998-06-01T00:00:00.000Z | ponad rok | ponad rok | ponad rok temu |
+| 1998-01-01T00:00:00.000Z | około 2 lata | około 2 lata | około 2 lata temu |
+| 1997-01-01T00:00:00.000Z | około 3 lata | około 3 lata | około 3 lata temu |
+| 1996-01-01T00:00:00.000Z | około 4 lata | około 4 lata | około 4 lata temu |
+| 1995-01-01T00:00:00.000Z | około 5 lat | około 5 lat | około 5 lat temu |
+| 1994-01-01T00:00:00.000Z | około 6 lat | około 6 lat | około 6 lat temu |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 lat | za 6 lat | 52608 godzin |
+| 2005-01-01T00:00:00.000Z | 5 lat | za 5 lat | 43848 godzin |
+| 2004-01-01T00:00:00.000Z | 4 lata | za 4 lata | 35064 godziny |
+| 2003-01-01T00:00:00.000Z | 3 lata | za 3 lata | 26304 godziny |
+| 2002-01-01T00:00:00.000Z | 2 lata | za 2 lata | 17544 godziny |
+| 2001-06-01T00:00:00.000Z | rok | za rok | 12408 godzin |
+| 2001-02-01T00:00:00.000Z | rok | za rok | 9528 godzin |
+| 2001-01-01T00:00:00.000Z | rok | za rok | 8784 godziny |
+| 2000-06-01T00:00:00.000Z | 5 miesięcy | za 5 miesięcy | 3648 godzin |
+| 2000-03-01T00:00:00.000Z | 2 miesiące | za 2 miesiące | 1440 godzin |
+| 2000-02-01T00:00:00.000Z | miesiąc | za miesiąc | 744 godziny |
+| 2000-01-15T00:00:00.000Z | 14 dni | za 14 dni | 336 godzin |
+| 2000-01-02T00:00:00.000Z | dzień | za 1 dzień | 24 godziny |
+| 2000-01-01T06:00:00.000Z | 6 godzin | za 6 godzin | 6 godzin |
+| 2000-01-01T01:00:00.000Z | godzina | za godzinę | godzina |
+| 2000-01-01T00:45:00.000Z | 45 minut | za 45 minut | godzina |
+| 2000-01-01T00:30:00.000Z | 30 minut | za 30 minut | godzina |
+| 2000-01-01T00:15:00.000Z | 15 minut | za 15 minut | 0 godzin |
+| 2000-01-01T00:01:00.000Z | minuta | za minutę | 0 godzin |
+| 2000-01-01T00:00:25.000Z | 25 sekund | za 25 sekund | 0 godzin |
+| 2000-01-01T00:00:15.000Z | 15 sekund | za 15 sekund | 0 godzin |
+| 2000-01-01T00:00:05.000Z | 5 sekund | za 5 sekund | 0 godzin |
+| 2000-01-01T00:00:00.000Z | 0 sekund | 0 sekund temu | 0 godzin |
+| 1999-12-31T23:59:55.000Z | 5 sekund | 5 sekund temu | 0 godzin |
+| 1999-12-31T23:59:45.000Z | 15 sekund | 15 sekund temu | 0 godzin |
+| 1999-12-31T23:59:35.000Z | 25 sekund | 25 sekund temu | 0 godzin |
+| 1999-12-31T23:59:00.000Z | minuta | minutę temu | 0 godzin |
+| 1999-12-31T23:45:00.000Z | 15 minut | 15 minut temu | 0 godzin |
+| 1999-12-31T23:30:00.000Z | 30 minut | 30 minut temu | godzina |
+| 1999-12-31T23:15:00.000Z | 45 minut | 45 minut temu | godzina |
+| 1999-12-31T23:00:00.000Z | godzina | godzinę temu | godzina |
+| 1999-12-31T18:00:00.000Z | 6 godzin | 6 godzin temu | 6 godzin |
+| 1999-12-30T00:00:00.000Z | 2 dni | 2 dni temu | 48 godzin |
+| 1999-12-15T00:00:00.000Z | 17 dni | 17 dni temu | 408 godzin |
+| 1999-12-01T00:00:00.000Z | miesiąc | miesiąc temu | 744 godziny |
+| 1999-11-01T00:00:00.000Z | 2 miesiące | 2 miesiące temu | 1464 godziny |
+| 1999-06-01T00:00:00.000Z | 7 miesięcy | 7 miesięcy temu | 5136 godzin |
+| 1999-01-01T00:00:00.000Z | rok | rok temu | 8760 godzin |
+| 1998-12-01T00:00:00.000Z | rok | rok temu | 9504 godziny |
+| 1998-06-01T00:00:00.000Z | 2 lata | 2 lata temu | 13896 godzin |
+| 1998-01-01T00:00:00.000Z | 2 lata | 2 lata temu | 17520 godzin |
+| 1997-01-01T00:00:00.000Z | 3 lata | 3 lata temu | 26280 godzin |
+| 1996-01-01T00:00:00.000Z | 4 lata | 4 lata temu | 35064 godziny |
+| 1995-01-01T00:00:00.000Z | 5 lat | 5 lat temu | 43824 godziny |
+| 1994-01-01T00:00:00.000Z | 6 lat | 6 lat temu | 52584 godziny |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------ |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | następna środa o 00:00 |
+| 2000-01-02T00:00:00.000Z | jutro o 00:00 |
+| 2000-01-01T00:00:00.000Z | dzisiaj o 00:00 |
+| 1999-12-31T00:00:00.000Z | wczoraj o 00:00 |
+| 1999-12-27T00:00:00.000Z | ten poniedziałek o 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/pt-BR/_lib/formatDistance/index.js b/date-fns/src/locale/pt-BR/_lib/formatDistance/index.js
new file mode 100644
index 0000000..fb8c5e5
--- /dev/null
+++ b/date-fns/src/locale/pt-BR/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'menos de um segundo',
+ other: 'menos de {{count}} segundos'
+ },
+
+ xSeconds: {
+ one: '1 segundo',
+ other: '{{count}} segundos'
+ },
+
+ halfAMinute: 'meio minuto',
+
+ lessThanXMinutes: {
+ one: 'menos de um minuto',
+ other: 'menos de {{count}} minutos'
+ },
+
+ xMinutes: {
+ one: '1 minuto',
+ other: '{{count}} minutos'
+ },
+
+ aboutXHours: {
+ one: 'cerca de 1 hora',
+ other: 'cerca de {{count}} horas'
+ },
+
+ xHours: {
+ one: '1 hora',
+ other: '{{count}} horas'
+ },
+
+ xDays: {
+ one: '1 dia',
+ other: '{{count}} dias'
+ },
+
+ aboutXWeeks: {
+ one: 'cerca de 1 semana',
+ other: 'cerca de {{count}} semanas'
+ },
+
+ xWeeks: {
+ one: '1 semana',
+ other: '{{count}} semanas'
+ },
+
+ aboutXMonths: {
+ one: 'cerca de 1 mês',
+ other: 'cerca de {{count}} meses'
+ },
+
+ xMonths: {
+ one: '1 mês',
+ other: '{{count}} meses'
+ },
+
+ aboutXYears: {
+ one: 'cerca de 1 ano',
+ other: 'cerca de {{count}} anos'
+ },
+
+ xYears: {
+ one: '1 ano',
+ other: '{{count}} anos'
+ },
+
+ overXYears: {
+ one: 'mais de 1 ano',
+ other: 'mais de {{count}} anos'
+ },
+
+ almostXYears: {
+ one: 'quase 1 ano',
+ other: 'quase {{count}} anos'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'em ' + result
+ } else {
+ return 'há ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/pt-BR/_lib/formatLong/index.js b/date-fns/src/locale/pt-BR/_lib/formatLong/index.js
new file mode 100644
index 0000000..96250f1
--- /dev/null
+++ b/date-fns/src/locale/pt-BR/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, d 'de' MMMM 'de' y",
+ long: "d 'de' MMMM 'de' y",
+ medium: 'd MMM y',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'às' {{time}}",
+ long: "{{date}} 'às' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/pt-BR/_lib/formatRelative/index.js b/date-fns/src/locale/pt-BR/_lib/formatRelative/index.js
new file mode 100644
index 0000000..4ce6c4d
--- /dev/null
+++ b/date-fns/src/locale/pt-BR/_lib/formatRelative/index.js
@@ -0,0 +1,22 @@
+var formatRelativeLocale = {
+ lastWeek: function(date, _baseDate, _options) {
+ var weekday = date.getUTCDay()
+ var last = weekday === 0 || weekday === 6 ? 'último' : 'última'
+ return "'" + last + "' eeee 'às' p"
+ },
+ yesterday: "'ontem às' p",
+ today: "'hoje às' p",
+ tomorrow: "'amanhã às' p",
+ nextWeek: "eeee 'às' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/pt-BR/_lib/localize/index.js b/date-fns/src/locale/pt-BR/_lib/localize/index.js
new file mode 100644
index 0000000..36c856e
--- /dev/null
+++ b/date-fns/src/locale/pt-BR/_lib/localize/index.js
@@ -0,0 +1,164 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['AC', 'DC'],
+ abbreviated: ['AC', 'DC'],
+ wide: ['antes de cristo', 'depois de cristo']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['T1', 'T2', 'T3', 'T4'],
+ wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']
+}
+
+var monthValues = {
+ narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],
+ abbreviated: [
+ 'jan',
+ 'fev',
+ 'mar',
+ 'abr',
+ 'mai',
+ 'jun',
+ 'jul',
+ 'ago',
+ 'set',
+ 'out',
+ 'nov',
+ 'dez'
+ ],
+ wide: [
+ 'janeiro',
+ 'fevereiro',
+ 'março',
+ 'abril',
+ 'maio',
+ 'junho',
+ 'julho',
+ 'agosto',
+ 'setembro',
+ 'outubro',
+ 'novembro',
+ 'dezembro'
+ ]
+}
+
+var dayValues = {
+ narrow: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],
+ short: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sab'],
+ abbreviated: ['domingo', 'segunda', 'terça', 'quarta', 'quinta', 'sexta', 'sábado'],
+ wide: ['domingo', 'segunda-feira', 'terça-feira', 'quarta-feira', 'quinta-feira', 'sexta-feira', 'sábado']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mn',
+ noon: 'md',
+ morning: 'manhã',
+ afternoon: 'tarde',
+ evening: 'tarde',
+ night: 'noite'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'manhã',
+ afternoon: 'tarde',
+ evening: 'tarde',
+ night: 'noite'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'manhã',
+ afternoon: 'tarde',
+ evening: 'tarde',
+ night: 'noite'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mn',
+ noon: 'md',
+ morning: 'da manhã',
+ afternoon: 'da tarde',
+ evening: 'da tarde',
+ night: 'da noite'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'da manhã',
+ afternoon: 'da tarde',
+ evening: 'da tarde',
+ night: 'da noite'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'da manhã',
+ afternoon: 'da tarde',
+ evening: 'da tarde',
+ night: 'da noite'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var number = Number(dirtyNumber)
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+
+ if (unit === 'week' || unit === 'isoWeek') {
+ return number + 'ª'
+ }
+ return number + 'º'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/pt-BR/_lib/match/index.js b/date-fns/src/locale/pt-BR/_lib/match/index.js
new file mode 100644
index 0000000..7da07dc
--- /dev/null
+++ b/date-fns/src/locale/pt-BR/_lib/match/index.js
@@ -0,0 +1,139 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)[ºªo]?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ac|dc|a|d)/i,
+ abbreviated: /^(a\.?\s?c\.?|d\.?\s?c\.?)/i,
+ wide: /^(antes de cristo|depois de cristo)/i
+}
+var parseEraPatterns = {
+ any: [/^ac/i, /^dc/i],
+ wide: [/^antes de cristo/i, /^depois de cristo/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^T[1234]/i,
+ wide: /^[1234](º)? trimestre/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmajsond]/i,
+ abbreviated: /^(jan|fev|mar|abr|mai|jun|jul|ago|set|out|nov|dez)/i,
+ wide: /^(janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^fev/i,
+ /^mar/i,
+ /^abr/i,
+ /^mai/i,
+ /^jun/i,
+ /^jul/i,
+ /^ago/i,
+ /^set/i,
+ /^out/i,
+ /^nov/i,
+ /^dez/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(dom|[23456]ª?|s[aá]b)/i,
+ short: /^(dom|[23456]ª?|s[aá]b)/i,
+ abbreviated: /^(dom|seg|ter|qua|qui|sex|s[aá]b)/i,
+ wide: /^(domingo|(segunda|ter[cç]a|quarta|quinta|sexta)([- ]feira)?|s[aá]bado)/i
+}
+var parseDayPatterns = {
+ short: [/^d/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^s[aá]/i],
+ narrow: [/^d/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^s[aá]/i],
+ any: [/^d/i, /^seg/i, /^t/i, /^qua/i, /^qui/i, /^sex/i, /^s[aá]b/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mn|md|(da) (manhã|tarde|noite))/i,
+ any: /^([ap]\.?\s?m\.?|meia[-\s]noite|meio[-\s]dia|(da) (manhã|tarde|noite))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mn|^meia[-\s]noite/i,
+ noon: /^md|^meio[-\s]dia/i,
+ morning: /manhã/i,
+ afternoon: /tarde/i,
+ evening: /tarde/i,
+ night: /noite/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/pt-BR/index.d.ts b/date-fns/src/locale/pt-BR/index.d.ts
new file mode 100644
index 0000000..e50a0b1
--- /dev/null
+++ b/date-fns/src/locale/pt-BR/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ptBR } from 'date-fns/locale'
+export default ptBR
diff --git a/date-fns/src/locale/pt-BR/index.js b/date-fns/src/locale/pt-BR/index.js
new file mode 100644
index 0000000..a4dd002
--- /dev/null
+++ b/date-fns/src/locale/pt-BR/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Portuguese locale (Brazil).
+ * @language Portuguese
+ * @iso-639-2 por
+ * @author Lucas Duailibe [@duailibe]{@link https://github.com/duailibe}
+ * @author Yago Carballo [@yagocarballo]{@link https://github.com/YagoCarballo}
+ */
+var locale = {
+ code: 'pt-BR',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/pt-BR/index.js.flow b/date-fns/src/locale/pt-BR/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/pt-BR/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/pt-BR/snapshot.md b/date-fns/src/locale/pt-BR/snapshot.md
new file mode 100644
index 0000000..dcbffae
--- /dev/null
+++ b/date-fns/src/locale/pt-BR/snapshot.md
@@ -0,0 +1,304 @@
+# Portuguese (pt-BR) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987º | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5º | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987º | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5º | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | fev | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | fevereiro | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julho | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | fev | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | fevereiro | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julho | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1ª | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49ª | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1ª | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48ª | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28º | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42º | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365º | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | segunda | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sexta | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | segunda | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sexta | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | segunda | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sexta | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | segunda-feira | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sexta-feira | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | S | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | S | Invalid Date |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | seg | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sex | Invalid Date |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | segunda | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sexta | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | segunda-feira | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sexta-feira | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | S | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | S | Invalid Date |
+| | iiiiii | 2019-02-11T12:13:14.015Z | seg | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sex | Invalid Date |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6º | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | segunda | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sexta | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | segunda-feira | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sexta-feira | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | S | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | S | Invalid Date |
+| | eeeeee | 2019-02-11T12:13:14.015Z | seg | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sex | Invalid Date |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6º | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | segunda | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sexta | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | segunda-feira | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sexta-feira | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | S | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | S | Invalid Date |
+| | cccccc | 2019-02-11T12:13:14.015Z | seg | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | sex | Invalid Date |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da noite | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1º | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55º | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1º | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55º | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 fev 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 de fevereiro de 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 de maio de 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | quarta-feira, 11 de fevereiro de 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | domingo, 29 de maio de 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 fev 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 de fevereiro de 1987 às 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 de maio de 1453 às 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | quarta-feira, 11 de fevereiro de 1987 às 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | domingo, 29 de maio de 1453 às 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | --------------------- |
+| 2006-01-01T00:00:00.000Z | cerca de 6 anos | cerca de 6 anos | em cerca de 6 anos |
+| 2005-01-01T00:00:00.000Z | cerca de 5 anos | cerca de 5 anos | em cerca de 5 anos |
+| 2004-01-01T00:00:00.000Z | cerca de 4 anos | cerca de 4 anos | em cerca de 4 anos |
+| 2003-01-01T00:00:00.000Z | cerca de 3 anos | cerca de 3 anos | em cerca de 3 anos |
+| 2002-01-01T00:00:00.000Z | cerca de 2 anos | cerca de 2 anos | em cerca de 2 anos |
+| 2001-06-01T00:00:00.000Z | mais de 1 ano | mais de 1 ano | em mais de 1 ano |
+| 2001-02-01T00:00:00.000Z | cerca de 1 ano | cerca de 1 ano | em cerca de 1 ano |
+| 2001-01-01T00:00:00.000Z | cerca de 1 ano | cerca de 1 ano | em cerca de 1 ano |
+| 2000-06-01T00:00:00.000Z | 5 meses | 5 meses | em 5 meses |
+| 2000-03-01T00:00:00.000Z | 2 meses | 2 meses | em 2 meses |
+| 2000-02-01T00:00:00.000Z | cerca de 1 mês | cerca de 1 mês | em cerca de 1 mês |
+| 2000-01-15T00:00:00.000Z | 14 dias | 14 dias | em 14 dias |
+| 2000-01-02T00:00:00.000Z | 1 dia | 1 dia | em 1 dia |
+| 2000-01-01T06:00:00.000Z | cerca de 6 horas | cerca de 6 horas | em cerca de 6 horas |
+| 2000-01-01T01:00:00.000Z | cerca de 1 hora | cerca de 1 hora | em cerca de 1 hora |
+| 2000-01-01T00:45:00.000Z | cerca de 1 hora | cerca de 1 hora | em cerca de 1 hora |
+| 2000-01-01T00:30:00.000Z | 30 minutos | 30 minutos | em 30 minutos |
+| 2000-01-01T00:15:00.000Z | 15 minutos | 15 minutos | em 15 minutos |
+| 2000-01-01T00:01:00.000Z | 1 minuto | 1 minuto | em 1 minuto |
+| 2000-01-01T00:00:25.000Z | menos de um minuto | meio minuto | em menos de um minuto |
+| 2000-01-01T00:00:15.000Z | menos de um minuto | menos de 20 segundos | em menos de um minuto |
+| 2000-01-01T00:00:05.000Z | menos de um minuto | menos de 10 segundos | em menos de um minuto |
+| 2000-01-01T00:00:00.000Z | menos de um minuto | menos de 5 segundos | há menos de um minuto |
+| 1999-12-31T23:59:55.000Z | menos de um minuto | menos de 10 segundos | há menos de um minuto |
+| 1999-12-31T23:59:45.000Z | menos de um minuto | menos de 20 segundos | há menos de um minuto |
+| 1999-12-31T23:59:35.000Z | menos de um minuto | meio minuto | há menos de um minuto |
+| 1999-12-31T23:59:00.000Z | 1 minuto | 1 minuto | há 1 minuto |
+| 1999-12-31T23:45:00.000Z | 15 minutos | 15 minutos | há 15 minutos |
+| 1999-12-31T23:30:00.000Z | 30 minutos | 30 minutos | há 30 minutos |
+| 1999-12-31T23:15:00.000Z | cerca de 1 hora | cerca de 1 hora | há cerca de 1 hora |
+| 1999-12-31T23:00:00.000Z | cerca de 1 hora | cerca de 1 hora | há cerca de 1 hora |
+| 1999-12-31T18:00:00.000Z | cerca de 6 horas | cerca de 6 horas | há cerca de 6 horas |
+| 1999-12-30T00:00:00.000Z | 2 dias | 2 dias | há 2 dias |
+| 1999-12-15T00:00:00.000Z | 17 dias | 17 dias | há 17 dias |
+| 1999-12-01T00:00:00.000Z | cerca de 1 mês | cerca de 1 mês | há cerca de 1 mês |
+| 1999-11-01T00:00:00.000Z | 2 meses | 2 meses | há 2 meses |
+| 1999-06-01T00:00:00.000Z | 7 meses | 7 meses | há 7 meses |
+| 1999-01-01T00:00:00.000Z | cerca de 1 ano | cerca de 1 ano | há cerca de 1 ano |
+| 1998-12-01T00:00:00.000Z | cerca de 1 ano | cerca de 1 ano | há cerca de 1 ano |
+| 1998-06-01T00:00:00.000Z | mais de 1 ano | mais de 1 ano | há mais de 1 ano |
+| 1998-01-01T00:00:00.000Z | cerca de 2 anos | cerca de 2 anos | há cerca de 2 anos |
+| 1997-01-01T00:00:00.000Z | cerca de 3 anos | cerca de 3 anos | há cerca de 3 anos |
+| 1996-01-01T00:00:00.000Z | cerca de 4 anos | cerca de 4 anos | há cerca de 4 anos |
+| 1995-01-01T00:00:00.000Z | cerca de 5 anos | cerca de 5 anos | há cerca de 5 anos |
+| 1994-01-01T00:00:00.000Z | cerca de 6 anos | cerca de 6 anos | há cerca de 6 anos |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 anos | em 6 anos | 52608 horas |
+| 2005-01-01T00:00:00.000Z | 5 anos | em 5 anos | 43848 horas |
+| 2004-01-01T00:00:00.000Z | 4 anos | em 4 anos | 35064 horas |
+| 2003-01-01T00:00:00.000Z | 3 anos | em 3 anos | 26304 horas |
+| 2002-01-01T00:00:00.000Z | 2 anos | em 2 anos | 17544 horas |
+| 2001-06-01T00:00:00.000Z | 1 ano | em 1 ano | 12408 horas |
+| 2001-02-01T00:00:00.000Z | 1 ano | em 1 ano | 9528 horas |
+| 2001-01-01T00:00:00.000Z | 1 ano | em 1 ano | 8784 horas |
+| 2000-06-01T00:00:00.000Z | 5 meses | em 5 meses | 3648 horas |
+| 2000-03-01T00:00:00.000Z | 2 meses | em 2 meses | 1440 horas |
+| 2000-02-01T00:00:00.000Z | 1 mês | em 1 mês | 744 horas |
+| 2000-01-15T00:00:00.000Z | 14 dias | em 14 dias | 336 horas |
+| 2000-01-02T00:00:00.000Z | 1 dia | em 1 dia | 24 horas |
+| 2000-01-01T06:00:00.000Z | 6 horas | em 6 horas | 6 horas |
+| 2000-01-01T01:00:00.000Z | 1 hora | em 1 hora | 1 hora |
+| 2000-01-01T00:45:00.000Z | 45 minutos | em 45 minutos | 1 hora |
+| 2000-01-01T00:30:00.000Z | 30 minutos | em 30 minutos | 1 hora |
+| 2000-01-01T00:15:00.000Z | 15 minutos | em 15 minutos | 0 horas |
+| 2000-01-01T00:01:00.000Z | 1 minuto | em 1 minuto | 0 horas |
+| 2000-01-01T00:00:25.000Z | 25 segundos | em 25 segundos | 0 horas |
+| 2000-01-01T00:00:15.000Z | 15 segundos | em 15 segundos | 0 horas |
+| 2000-01-01T00:00:05.000Z | 5 segundos | em 5 segundos | 0 horas |
+| 2000-01-01T00:00:00.000Z | 0 segundos | há 0 segundos | 0 horas |
+| 1999-12-31T23:59:55.000Z | 5 segundos | há 5 segundos | 0 horas |
+| 1999-12-31T23:59:45.000Z | 15 segundos | há 15 segundos | 0 horas |
+| 1999-12-31T23:59:35.000Z | 25 segundos | há 25 segundos | 0 horas |
+| 1999-12-31T23:59:00.000Z | 1 minuto | há 1 minuto | 0 horas |
+| 1999-12-31T23:45:00.000Z | 15 minutos | há 15 minutos | 0 horas |
+| 1999-12-31T23:30:00.000Z | 30 minutos | há 30 minutos | 1 hora |
+| 1999-12-31T23:15:00.000Z | 45 minutos | há 45 minutos | 1 hora |
+| 1999-12-31T23:00:00.000Z | 1 hora | há 1 hora | 1 hora |
+| 1999-12-31T18:00:00.000Z | 6 horas | há 6 horas | 6 horas |
+| 1999-12-30T00:00:00.000Z | 2 dias | há 2 dias | 48 horas |
+| 1999-12-15T00:00:00.000Z | 17 dias | há 17 dias | 408 horas |
+| 1999-12-01T00:00:00.000Z | 1 mês | há 1 mês | 744 horas |
+| 1999-11-01T00:00:00.000Z | 2 meses | há 2 meses | 1464 horas |
+| 1999-06-01T00:00:00.000Z | 7 meses | há 7 meses | 5136 horas |
+| 1999-01-01T00:00:00.000Z | 1 ano | há 1 ano | 8760 horas |
+| 1998-12-01T00:00:00.000Z | 1 ano | há 1 ano | 9504 horas |
+| 1998-06-01T00:00:00.000Z | 2 anos | há 2 anos | 13896 horas |
+| 1998-01-01T00:00:00.000Z | 2 anos | há 2 anos | 17520 horas |
+| 1997-01-01T00:00:00.000Z | 3 anos | há 3 anos | 26280 horas |
+| 1996-01-01T00:00:00.000Z | 4 anos | há 4 anos | 35064 horas |
+| 1995-01-01T00:00:00.000Z | 5 anos | há 5 anos | 43824 horas |
+| 1994-01-01T00:00:00.000Z | 6 anos | há 6 anos | 52584 horas |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ----------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | quarta-feira às 00:00 |
+| 2000-01-02T00:00:00.000Z | amanhã às 00:00 |
+| 2000-01-01T00:00:00.000Z | hoje às 00:00 |
+| 1999-12-31T00:00:00.000Z | ontem às 00:00 |
+| 1999-12-27T00:00:00.000Z | última segunda-feira às 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/pt/_lib/formatDistance/index.js b/date-fns/src/locale/pt/_lib/formatDistance/index.js
new file mode 100644
index 0000000..de03087
--- /dev/null
+++ b/date-fns/src/locale/pt/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'menos de um segundo',
+ other: 'menos de {{count}} segundos'
+ },
+
+ xSeconds: {
+ one: '1 segundo',
+ other: '{{count}} segundos'
+ },
+
+ halfAMinute: 'meio minuto',
+
+ lessThanXMinutes: {
+ one: 'menos de um minuto',
+ other: 'menos de {{count}} minutos'
+ },
+
+ xMinutes: {
+ one: '1 minuto',
+ other: '{{count}} minutos'
+ },
+
+ aboutXHours: {
+ one: 'aproximadamente 1 hora',
+ other: 'aproximadamente {{count}} horas'
+ },
+
+ xHours: {
+ one: '1 hora',
+ other: '{{count}} horas'
+ },
+
+ xDays: {
+ one: '1 dia',
+ other: '{{count}} dias'
+ },
+
+ aboutXWeeks: {
+ one: 'aproximadamente 1 semana',
+ other: 'aproximadamente {{count}} semanas'
+ },
+
+ xWeeks: {
+ one: '1 semana',
+ other: '{{count}} semanas'
+ },
+
+ aboutXMonths: {
+ one: 'aproximadamente 1 mês',
+ other: 'aproximadamente {{count}} meses'
+ },
+
+ xMonths: {
+ one: '1 mês',
+ other: '{{count}} meses'
+ },
+
+ aboutXYears: {
+ one: 'aproximadamente 1 ano',
+ other: 'aproximadamente {{count}} anos'
+ },
+
+ xYears: {
+ one: '1 ano',
+ other: '{{count}} anos'
+ },
+
+ overXYears: {
+ one: 'mais de 1 ano',
+ other: 'mais de {{count}} anos'
+ },
+
+ almostXYears: {
+ one: 'quase 1 ano',
+ other: 'quase {{count}} anos'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'daqui a ' + result
+ } else {
+ return 'há ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/pt/_lib/formatLong/index.js b/date-fns/src/locale/pt/_lib/formatLong/index.js
new file mode 100644
index 0000000..08af8e3
--- /dev/null
+++ b/date-fns/src/locale/pt/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, d 'de' MMMM 'de' y",
+ long: "d 'de' MMMM 'de' y",
+ medium: "d 'de' MMM 'de' y",
+ short: 'dd/MM/y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'às' {{time}}",
+ long: "{{date}} 'às' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/pt/_lib/formatRelative/index.js b/date-fns/src/locale/pt/_lib/formatRelative/index.js
new file mode 100644
index 0000000..63d5c7f
--- /dev/null
+++ b/date-fns/src/locale/pt/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'na última' eeee 'às' p",
+ yesterday: "'ontem às' p",
+ today: "'hoje às' p",
+ tomorrow: "'amanhã às' p",
+ nextWeek: "eeee 'às' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/pt/_lib/localize/index.js b/date-fns/src/locale/pt/_lib/localize/index.js
new file mode 100644
index 0000000..0ef458c
--- /dev/null
+++ b/date-fns/src/locale/pt/_lib/localize/index.js
@@ -0,0 +1,166 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number + 'º'
+}
+
+var eraValues = {
+ narrow: ['aC', 'dC'],
+ abbreviated: ['a.C.', 'd.C.'],
+ wide: ['antes de Cristo', 'depois de Cristo']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['T1', 'T2', 'T3', 'T4'],
+ wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']
+}
+
+var monthValues = {
+ narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],
+ abbreviated: [
+ 'jan',
+ 'fev',
+ 'mar',
+ 'abr',
+ 'mai',
+ 'jun',
+ 'jul',
+ 'ago',
+ 'set',
+ 'out',
+ 'nov',
+ 'dez'
+ ],
+ wide: [
+ 'janeiro',
+ 'fevereiro',
+ 'março',
+ 'abril',
+ 'maio',
+ 'junho',
+ 'julho',
+ 'agosto',
+ 'setembro',
+ 'outubro',
+ 'novembro',
+ 'dezembro'
+ ]
+}
+
+var dayValues = {
+ narrow: ['d', 's', 't', 'q', 'q', 's', 's'],
+ short: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],
+ abbreviated: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],
+ wide: [
+ 'domingo',
+ 'segunda-feira',
+ 'terça-feira',
+ 'quarta-feira',
+ 'quinta-feira',
+ 'sexta-feira',
+ 'sábado'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'manhã',
+ afternoon: 'tarde',
+ evening: 'noite',
+ night: 'madrugada'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'manhã',
+ afternoon: 'tarde',
+ evening: 'noite',
+ night: 'madrugada'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'manhã',
+ afternoon: 'tarde',
+ evening: 'noite',
+ night: 'madrugada'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'da manhã',
+ afternoon: 'da tarde',
+ evening: 'da noite',
+ night: 'da madrugada'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'da manhã',
+ afternoon: 'da tarde',
+ evening: 'da noite',
+ night: 'da madrugada'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'meia-noite',
+ noon: 'meio-dia',
+ morning: 'da manhã',
+ afternoon: 'da tarde',
+ evening: 'da noite',
+ night: 'da madrugada'
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+export default localize
diff --git a/date-fns/src/locale/pt/_lib/match/index.js b/date-fns/src/locale/pt/_lib/match/index.js
new file mode 100644
index 0000000..3aea9de
--- /dev/null
+++ b/date-fns/src/locale/pt/_lib/match/index.js
@@ -0,0 +1,141 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(º|ª)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ac|dc|a|d)/i,
+ abbreviated: /^(a\.?\s?c\.?|a\.?\s?e\.?\s?c\.?|d\.?\s?c\.?|e\.?\s?c\.?)/i,
+ wide: /^(antes de cristo|antes da era comum|depois de cristo|era comum)/i
+}
+var parseEraPatterns = {
+ any: [/^ac/i, /^dc/i],
+ wide: [
+ /^(antes de cristo|antes da era comum)/i,
+ /^(depois de cristo|era comum)/i
+ ]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^T[1234]/i,
+ wide: /^[1234](º|ª)? trimestre/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|fev|mar|abr|mai|jun|jul|ago|set|out|nov|dez)/i,
+ wide: /^(janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ab/i,
+ /^mai/i,
+ /^jun/i,
+ /^jul/i,
+ /^ag/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[dstq]/i,
+ short: /^(dom|seg|ter|qua|qui|sex|s[áa]b)/i,
+ abbreviated: /^(dom|seg|ter|qua|qui|sex|s[áa]b)/i,
+ wide: /^(domingo|segunda-?\s?feira|terça-?\s?feira|quarta-?\s?feira|quinta-?\s?feira|sexta-?\s?feira|s[áa]bado)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^s/i, /^t/i, /^q/i, /^q/i, /^s/i, /^s/i],
+ any: [/^d/i, /^seg/i, /^t/i, /^qua/i, /^qui/i, /^sex/i, /^s[áa]/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|meia-?\s?noite|meio-?\s?dia|(da) (manh[ãa]|tarde|noite|madrugada))/i,
+ any: /^([ap]\.?\s?m\.?|meia-?\s?noite|meio-?\s?dia|(da) (manh[ãa]|tarde|noite|madrugada))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^meia/i,
+ noon: /^meio/i,
+ morning: /manh[ãa]/i,
+ afternoon: /tarde/i,
+ evening: /noite/i,
+ night: /madrugada/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/pt/index.d.ts b/date-fns/src/locale/pt/index.d.ts
new file mode 100644
index 0000000..b848c91
--- /dev/null
+++ b/date-fns/src/locale/pt/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { pt } from 'date-fns/locale'
+export default pt
diff --git a/date-fns/src/locale/pt/index.js b/date-fns/src/locale/pt/index.js
new file mode 100644
index 0000000..0505d72
--- /dev/null
+++ b/date-fns/src/locale/pt/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Portuguese locale.
+ * @language Portuguese
+ * @iso-639-2 por
+ * @author Dário Freire [@dfreire]{@link https://github.com/dfreire}
+ * @author Adrián de la Rosa [@adrm]{@link https://github.com/adrm}
+ */
+var locale = {
+ code: 'pt',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/pt/index.js.flow b/date-fns/src/locale/pt/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/pt/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/pt/snapshot.md b/date-fns/src/locale/pt/snapshot.md
new file mode 100644
index 0000000..75dfb30
--- /dev/null
+++ b/date-fns/src/locale/pt/snapshot.md
@@ -0,0 +1,304 @@
+# Portuguese (pt) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987º | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5º | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987º | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4º | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1º | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1º trimestre | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2º trimestre | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | fev | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | fevereiro | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julho | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2º | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7º | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | fev | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | fevereiro | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julho | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1º | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48º | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28º | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42º | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365º | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | segunda-feira | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sexta-feira | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | s | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | s | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | segunda-feira | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sexta-feira | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | s | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | s | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | segunda-feira | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sexta-feira | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | s | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | s | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1º | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5º | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | segunda-feira | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sexta-feira | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | s | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | s | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | seg | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | sex | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da noite | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da madrugada | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da noite | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da madrugada | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da noite | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da madrugada | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da noite | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da madrugada | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | da manhã | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | da tarde | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | da noite | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | da madrugada | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11º | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11º | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23º | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1º | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55º | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1º | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55º | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 de fev de 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 de mai de 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 de fevereiro de 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 de maio de 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | quarta-feira, 11 de fevereiro de 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | domingo, 29 de maio de 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 de fev de 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 de mai de 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 de fevereiro de 1987 às 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 de maio de 1453 às 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | quarta-feira, 11 de fevereiro de 1987 às 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | domingo, 29 de maio de 1453 às 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------------- | ----------------------- | ------------------------------- |
+| 2006-01-01T00:00:00.000Z | aproximadamente 6 anos | aproximadamente 6 anos | daqui a aproximadamente 6 anos |
+| 2005-01-01T00:00:00.000Z | aproximadamente 5 anos | aproximadamente 5 anos | daqui a aproximadamente 5 anos |
+| 2004-01-01T00:00:00.000Z | aproximadamente 4 anos | aproximadamente 4 anos | daqui a aproximadamente 4 anos |
+| 2003-01-01T00:00:00.000Z | aproximadamente 3 anos | aproximadamente 3 anos | daqui a aproximadamente 3 anos |
+| 2002-01-01T00:00:00.000Z | aproximadamente 2 anos | aproximadamente 2 anos | daqui a aproximadamente 2 anos |
+| 2001-06-01T00:00:00.000Z | mais de 1 ano | mais de 1 ano | daqui a mais de 1 ano |
+| 2001-02-01T00:00:00.000Z | aproximadamente 1 ano | aproximadamente 1 ano | daqui a aproximadamente 1 ano |
+| 2001-01-01T00:00:00.000Z | aproximadamente 1 ano | aproximadamente 1 ano | daqui a aproximadamente 1 ano |
+| 2000-06-01T00:00:00.000Z | 5 meses | 5 meses | daqui a 5 meses |
+| 2000-03-01T00:00:00.000Z | 2 meses | 2 meses | daqui a 2 meses |
+| 2000-02-01T00:00:00.000Z | aproximadamente 1 mês | aproximadamente 1 mês | daqui a aproximadamente 1 mês |
+| 2000-01-15T00:00:00.000Z | 14 dias | 14 dias | daqui a 14 dias |
+| 2000-01-02T00:00:00.000Z | 1 dia | 1 dia | daqui a 1 dia |
+| 2000-01-01T06:00:00.000Z | aproximadamente 6 horas | aproximadamente 6 horas | daqui a aproximadamente 6 horas |
+| 2000-01-01T01:00:00.000Z | aproximadamente 1 hora | aproximadamente 1 hora | daqui a aproximadamente 1 hora |
+| 2000-01-01T00:45:00.000Z | aproximadamente 1 hora | aproximadamente 1 hora | daqui a aproximadamente 1 hora |
+| 2000-01-01T00:30:00.000Z | 30 minutos | 30 minutos | daqui a 30 minutos |
+| 2000-01-01T00:15:00.000Z | 15 minutos | 15 minutos | daqui a 15 minutos |
+| 2000-01-01T00:01:00.000Z | 1 minuto | 1 minuto | daqui a 1 minuto |
+| 2000-01-01T00:00:25.000Z | menos de um minuto | meio minuto | daqui a menos de um minuto |
+| 2000-01-01T00:00:15.000Z | menos de um minuto | menos de 20 segundos | daqui a menos de um minuto |
+| 2000-01-01T00:00:05.000Z | menos de um minuto | menos de 10 segundos | daqui a menos de um minuto |
+| 2000-01-01T00:00:00.000Z | menos de um minuto | menos de 5 segundos | há menos de um minuto |
+| 1999-12-31T23:59:55.000Z | menos de um minuto | menos de 10 segundos | há menos de um minuto |
+| 1999-12-31T23:59:45.000Z | menos de um minuto | menos de 20 segundos | há menos de um minuto |
+| 1999-12-31T23:59:35.000Z | menos de um minuto | meio minuto | há menos de um minuto |
+| 1999-12-31T23:59:00.000Z | 1 minuto | 1 minuto | há 1 minuto |
+| 1999-12-31T23:45:00.000Z | 15 minutos | 15 minutos | há 15 minutos |
+| 1999-12-31T23:30:00.000Z | 30 minutos | 30 minutos | há 30 minutos |
+| 1999-12-31T23:15:00.000Z | aproximadamente 1 hora | aproximadamente 1 hora | há aproximadamente 1 hora |
+| 1999-12-31T23:00:00.000Z | aproximadamente 1 hora | aproximadamente 1 hora | há aproximadamente 1 hora |
+| 1999-12-31T18:00:00.000Z | aproximadamente 6 horas | aproximadamente 6 horas | há aproximadamente 6 horas |
+| 1999-12-30T00:00:00.000Z | 2 dias | 2 dias | há 2 dias |
+| 1999-12-15T00:00:00.000Z | 17 dias | 17 dias | há 17 dias |
+| 1999-12-01T00:00:00.000Z | aproximadamente 1 mês | aproximadamente 1 mês | há aproximadamente 1 mês |
+| 1999-11-01T00:00:00.000Z | 2 meses | 2 meses | há 2 meses |
+| 1999-06-01T00:00:00.000Z | 7 meses | 7 meses | há 7 meses |
+| 1999-01-01T00:00:00.000Z | aproximadamente 1 ano | aproximadamente 1 ano | há aproximadamente 1 ano |
+| 1998-12-01T00:00:00.000Z | aproximadamente 1 ano | aproximadamente 1 ano | há aproximadamente 1 ano |
+| 1998-06-01T00:00:00.000Z | mais de 1 ano | mais de 1 ano | há mais de 1 ano |
+| 1998-01-01T00:00:00.000Z | aproximadamente 2 anos | aproximadamente 2 anos | há aproximadamente 2 anos |
+| 1997-01-01T00:00:00.000Z | aproximadamente 3 anos | aproximadamente 3 anos | há aproximadamente 3 anos |
+| 1996-01-01T00:00:00.000Z | aproximadamente 4 anos | aproximadamente 4 anos | há aproximadamente 4 anos |
+| 1995-01-01T00:00:00.000Z | aproximadamente 5 anos | aproximadamente 5 anos | há aproximadamente 5 anos |
+| 1994-01-01T00:00:00.000Z | aproximadamente 6 anos | aproximadamente 6 anos | há aproximadamente 6 anos |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ----------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 anos | daqui a 6 anos | 52608 horas |
+| 2005-01-01T00:00:00.000Z | 5 anos | daqui a 5 anos | 43848 horas |
+| 2004-01-01T00:00:00.000Z | 4 anos | daqui a 4 anos | 35064 horas |
+| 2003-01-01T00:00:00.000Z | 3 anos | daqui a 3 anos | 26304 horas |
+| 2002-01-01T00:00:00.000Z | 2 anos | daqui a 2 anos | 17544 horas |
+| 2001-06-01T00:00:00.000Z | 1 ano | daqui a 1 ano | 12408 horas |
+| 2001-02-01T00:00:00.000Z | 1 ano | daqui a 1 ano | 9528 horas |
+| 2001-01-01T00:00:00.000Z | 1 ano | daqui a 1 ano | 8784 horas |
+| 2000-06-01T00:00:00.000Z | 5 meses | daqui a 5 meses | 3648 horas |
+| 2000-03-01T00:00:00.000Z | 2 meses | daqui a 2 meses | 1440 horas |
+| 2000-02-01T00:00:00.000Z | 1 mês | daqui a 1 mês | 744 horas |
+| 2000-01-15T00:00:00.000Z | 14 dias | daqui a 14 dias | 336 horas |
+| 2000-01-02T00:00:00.000Z | 1 dia | daqui a 1 dia | 24 horas |
+| 2000-01-01T06:00:00.000Z | 6 horas | daqui a 6 horas | 6 horas |
+| 2000-01-01T01:00:00.000Z | 1 hora | daqui a 1 hora | 1 hora |
+| 2000-01-01T00:45:00.000Z | 45 minutos | daqui a 45 minutos | 1 hora |
+| 2000-01-01T00:30:00.000Z | 30 minutos | daqui a 30 minutos | 1 hora |
+| 2000-01-01T00:15:00.000Z | 15 minutos | daqui a 15 minutos | 0 horas |
+| 2000-01-01T00:01:00.000Z | 1 minuto | daqui a 1 minuto | 0 horas |
+| 2000-01-01T00:00:25.000Z | 25 segundos | daqui a 25 segundos | 0 horas |
+| 2000-01-01T00:00:15.000Z | 15 segundos | daqui a 15 segundos | 0 horas |
+| 2000-01-01T00:00:05.000Z | 5 segundos | daqui a 5 segundos | 0 horas |
+| 2000-01-01T00:00:00.000Z | 0 segundos | há 0 segundos | 0 horas |
+| 1999-12-31T23:59:55.000Z | 5 segundos | há 5 segundos | 0 horas |
+| 1999-12-31T23:59:45.000Z | 15 segundos | há 15 segundos | 0 horas |
+| 1999-12-31T23:59:35.000Z | 25 segundos | há 25 segundos | 0 horas |
+| 1999-12-31T23:59:00.000Z | 1 minuto | há 1 minuto | 0 horas |
+| 1999-12-31T23:45:00.000Z | 15 minutos | há 15 minutos | 0 horas |
+| 1999-12-31T23:30:00.000Z | 30 minutos | há 30 minutos | 1 hora |
+| 1999-12-31T23:15:00.000Z | 45 minutos | há 45 minutos | 1 hora |
+| 1999-12-31T23:00:00.000Z | 1 hora | há 1 hora | 1 hora |
+| 1999-12-31T18:00:00.000Z | 6 horas | há 6 horas | 6 horas |
+| 1999-12-30T00:00:00.000Z | 2 dias | há 2 dias | 48 horas |
+| 1999-12-15T00:00:00.000Z | 17 dias | há 17 dias | 408 horas |
+| 1999-12-01T00:00:00.000Z | 1 mês | há 1 mês | 744 horas |
+| 1999-11-01T00:00:00.000Z | 2 meses | há 2 meses | 1464 horas |
+| 1999-06-01T00:00:00.000Z | 7 meses | há 7 meses | 5136 horas |
+| 1999-01-01T00:00:00.000Z | 1 ano | há 1 ano | 8760 horas |
+| 1998-12-01T00:00:00.000Z | 1 ano | há 1 ano | 9504 horas |
+| 1998-06-01T00:00:00.000Z | 2 anos | há 2 anos | 13896 horas |
+| 1998-01-01T00:00:00.000Z | 2 anos | há 2 anos | 17520 horas |
+| 1997-01-01T00:00:00.000Z | 3 anos | há 3 anos | 26280 horas |
+| 1996-01-01T00:00:00.000Z | 4 anos | há 4 anos | 35064 horas |
+| 1995-01-01T00:00:00.000Z | 5 anos | há 5 anos | 43824 horas |
+| 1994-01-01T00:00:00.000Z | 6 anos | há 6 anos | 52584 horas |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | quarta-feira às 00:00 |
+| 2000-01-02T00:00:00.000Z | amanhã às 00:00 |
+| 2000-01-01T00:00:00.000Z | hoje às 00:00 |
+| 1999-12-31T00:00:00.000Z | ontem às 00:00 |
+| 1999-12-27T00:00:00.000Z | na última segunda-feira às 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/ro/_lib/formatDistance/index.js b/date-fns/src/locale/ro/_lib/formatDistance/index.js
new file mode 100644
index 0000000..6fb15f5
--- /dev/null
+++ b/date-fns/src/locale/ro/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'mai puțin de o secundă',
+ other: 'mai puțin de {{count}} secunde'
+ },
+
+ xSeconds: {
+ one: '1 secundă',
+ other: '{{count}} secunde'
+ },
+
+ halfAMinute: 'jumătate de minut',
+
+ lessThanXMinutes: {
+ one: 'mai puțin de un minut',
+ other: 'mai puțin de {{count}} minute'
+ },
+
+ xMinutes: {
+ one: '1 minut',
+ other: '{{count}} minute'
+ },
+
+ aboutXHours: {
+ one: 'circa 1 oră',
+ other: 'circa {{count}} ore'
+ },
+
+ xHours: {
+ one: '1 oră',
+ other: '{{count}} ore'
+ },
+
+ xDays: {
+ one: '1 zi',
+ other: '{{count}} zile'
+ },
+
+ aboutXWeeks: {
+ one: 'circa o săptămână',
+ other: 'circa {{count}} săptămâni'
+ },
+
+ xWeeks: {
+ one: '1 săptămână',
+ other: '{{count}} săptămâni'
+ },
+
+ aboutXMonths: {
+ one: 'circa 1 lună',
+ other: 'circa {{count}} luni'
+ },
+
+ xMonths: {
+ one: '1 lună',
+ other: '{{count}} luni'
+ },
+
+ aboutXYears: {
+ one: 'circa 1 an',
+ other: 'circa {{count}} ani'
+ },
+
+ xYears: {
+ one: '1 an',
+ other: '{{count}} ani'
+ },
+
+ overXYears: {
+ one: 'peste 1 an',
+ other: 'peste {{count}} ani'
+ },
+
+ almostXYears: {
+ one: 'aproape 1 an',
+ other: 'aproape {{count}} ani'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'în ' + result
+ } else {
+ return result + ' în urmă'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ro/_lib/formatLong/index.js b/date-fns/src/locale/ro/_lib/formatLong/index.js
new file mode 100644
index 0000000..e3bc404
--- /dev/null
+++ b/date-fns/src/locale/ro/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d MMMM yyyy',
+ long: 'd MMMM yyyy',
+ medium: 'd MMM yyyy',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'la' {{time}}",
+ long: "{{date}} 'la' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ro/_lib/formatRelative/index.js b/date-fns/src/locale/ro/_lib/formatRelative/index.js
new file mode 100644
index 0000000..435ef8b
--- /dev/null
+++ b/date-fns/src/locale/ro/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'trecută la' p",
+ yesterday: "'ieri la' p",
+ today: "'astăzi la' p",
+ tomorrow: "'mâine la' p",
+ nextWeek: "eeee 'viitoare la' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ro/_lib/localize/index.js b/date-fns/src/locale/ro/_lib/localize/index.js
new file mode 100644
index 0000000..f345da6
--- /dev/null
+++ b/date-fns/src/locale/ro/_lib/localize/index.js
@@ -0,0 +1,164 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['Î', 'D'],
+ abbreviated: ['Î.d.C.', 'D.C.'],
+ wide: ['Înainte de Cristos', 'După Cristos']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['T1', 'T2', 'T3', 'T4'],
+ wide: [
+ 'primul trimestru',
+ 'al doilea trimestru',
+ 'al treilea trimestru',
+ 'al patrulea trimestru'
+ ]
+}
+
+var monthValues = {
+ narrow: ['I', 'F', 'M', 'A', 'M', 'I', 'I', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'ian',
+ 'feb',
+ 'mar',
+ 'apr',
+ 'mai',
+ 'iun',
+ 'iul',
+ 'aug',
+ 'sep',
+ 'oct',
+ 'noi',
+ 'dec'
+ ],
+ wide: [
+ 'ianuarie',
+ 'februarie',
+ 'martie',
+ 'aprilie',
+ 'mai',
+ 'iunie',
+ 'iulie',
+ 'august',
+ 'septembrie',
+ 'octombrie',
+ 'noiembrie',
+ 'decembrie'
+ ]
+}
+
+var dayValues = {
+ narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],
+ short: ['du', 'lu', 'ma', 'mi', 'jo', 'vi', 'sâ'],
+ abbreviated: ['dum', 'lun', 'mar', 'mie', 'joi', 'vin', 'sâm'],
+ wide: ['duminică', 'luni', 'marți', 'miercuri', 'joi', 'vineri', 'sâmbătă']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mn',
+ noon: 'ami',
+ morning: 'dim',
+ afternoon: 'da',
+ evening: 's',
+ night: 'n'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'miezul nopții',
+ noon: 'amiază',
+ morning: 'dimineață',
+ afternoon: 'după-amiază',
+ evening: 'seară',
+ night: 'noapte'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'miezul nopții',
+ noon: 'amiază',
+ morning: 'dimineață',
+ afternoon: 'după-amiază',
+ evening: 'seară',
+ night: 'noapte'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mn',
+ noon: 'amiază',
+ morning: 'dimineață',
+ afternoon: 'după-amiază',
+ evening: 'seară',
+ night: 'noapte'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'miezul nopții',
+ noon: 'amiază',
+ morning: 'dimineață',
+ afternoon: 'după-amiază',
+ evening: 'seară',
+ night: 'noapte'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'miezul nopții',
+ noon: 'amiază',
+ morning: 'dimineață',
+ afternoon: 'după-amiază',
+ evening: 'seară',
+ night: 'noapte'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return String(number)
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ro/_lib/match/index.js b/date-fns/src/locale/ro/_lib/match/index.js
new file mode 100644
index 0000000..87048eb
--- /dev/null
+++ b/date-fns/src/locale/ro/_lib/match/index.js
@@ -0,0 +1,146 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(Î|D)/i,
+ abbreviated: /^(Î\.?\s?d\.?\s?C\.?|Î\.?\s?e\.?\s?n\.?|D\.?\s?C\.?|e\.?\s?n\.?)/i,
+ wide: /^(Înainte de Cristos|Înaintea erei noastre|După Cristos|Era noastră)/i
+}
+
+var parseEraPatterns = {
+ any: [/^ÎC/i, /^DC/i],
+ wide: [
+ /^(Înainte de Cristos|Înaintea erei noastre)/i,
+ /^(După Cristos|Era noastră)/i
+ ]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^T[1234]/i,
+ wide: /^trimestrul [1234]/i
+}
+
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[ifmaasond]/i,
+ abbreviated: /^(ian|feb|mar|apr|mai|iun|iul|aug|sep|oct|noi|dec)/i,
+ wide: /^(ianuarie|februarie|martie|aprilie|mai|iunie|iulie|august|septembrie|octombrie|noiembrie|decembrie)/i
+}
+
+var parseMonthPatterns = {
+ narrow: [
+ /^i/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^i/i,
+ /^i/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ia/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^mai/i,
+ /^iun/i,
+ /^iul/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[dlmjvs]/i,
+ short: /^(d|l|ma|mi|j|v|s)/i,
+ abbreviated: /^(dum|lun|mar|mie|jo|vi|sâ)/i,
+ wide: /^(duminica|luni|marţi|miercuri|joi|vineri|sâmbătă)/i
+}
+
+var parseDayPatterns = {
+ narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],
+ any: [/^d/i, /^l/i, /^ma/i, /^mi/i, /^j/i, /^v/i, /^s/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mn|a|(dimineaţa|după-amiaza|seara|noaptea))/i,
+ any: /^([ap]\.?\s?m\.?|miezul nopții|amiaza|(dimineaţa|după-amiaza|seara|noaptea))/i
+}
+
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mn/i,
+ noon: /amiaza/i,
+ morning: /dimineaţa/i,
+ afternoon: /după-amiaza/i,
+ evening: /seara/i,
+ night: /noaptea/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ro/index.d.ts b/date-fns/src/locale/ro/index.d.ts
new file mode 100644
index 0000000..c19fdec
--- /dev/null
+++ b/date-fns/src/locale/ro/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ro } from 'date-fns/locale'
+export default ro
diff --git a/date-fns/src/locale/ro/index.js b/date-fns/src/locale/ro/index.js
new file mode 100644
index 0000000..f22968c
--- /dev/null
+++ b/date-fns/src/locale/ro/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Romanian locale.
+ * @language Romanian
+ * @iso-639-2 ron
+ * @author Sergiu Munteanu [@jsergiu]{@link https://github.com/jsergiu}
+ * @author Adrian Ocneanu [@aocneanu]{@link https://github.com/aocneanu}
+ * @author Mihai Ocneanu [@gandesc]{@link https://github.com/gandesc}
+ */
+var locale = {
+ code: 'ro',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ro/index.js.flow b/date-fns/src/locale/ro/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ro/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ro/snapshot.md b/date-fns/src/locale/ro/snapshot.md
new file mode 100644
index 0000000..fc91c79
--- /dev/null
+++ b/date-fns/src/locale/ro/snapshot.md
@@ -0,0 +1,304 @@
+# Romanian (ro) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | primul trimestru | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | al doilea trimestru | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | T1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | T2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | primul trimestru | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | al doilea trimestru | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | iul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februarie | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | iulie | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | I | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | iul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februarie | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | iulie | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | I | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vin | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vin | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vin | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | luni | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vineri | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | lu | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | vi | Invalid Date |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vin | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | luni | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vineri | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | lu | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | vi | Invalid Date |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vin | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | luni | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vineri | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | lu | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | vi | Invalid Date |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | lun | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vin | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | luni | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | vineri | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | l | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | v | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | lu | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | vi | Invalid Date |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | dimineață | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | după-amiază | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | seară | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | noapte | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | dimineață | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | după-amiază | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | seară | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | noapte | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | dimineață | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | după-amiază | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | seară | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | noapte | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | dimineață | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | după-amiază | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | seară | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | noapte | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | dimineață | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | după-amiază | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | seară | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | noapte | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 feb 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 februarie 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | miercuri, 11 februarie 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | duminică, 29 mai 1453 | Invalid Date |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 feb 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 februarie 1987 la 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 mai 1453 la 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | miercuri, 11 februarie 1987 la 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | duminică, 29 mai 1453 la 23:59:59 GMT+00:00 | Invalid Date |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------------- | ----------------------- | ----------------------------- |
+| 2006-01-01T00:00:00.000Z | circa 6 ani | circa 6 ani | în circa 6 ani |
+| 2005-01-01T00:00:00.000Z | circa 5 ani | circa 5 ani | în circa 5 ani |
+| 2004-01-01T00:00:00.000Z | circa 4 ani | circa 4 ani | în circa 4 ani |
+| 2003-01-01T00:00:00.000Z | circa 3 ani | circa 3 ani | în circa 3 ani |
+| 2002-01-01T00:00:00.000Z | circa 2 ani | circa 2 ani | în circa 2 ani |
+| 2001-06-01T00:00:00.000Z | peste 1 an | peste 1 an | în peste 1 an |
+| 2001-02-01T00:00:00.000Z | circa 1 an | circa 1 an | în circa 1 an |
+| 2001-01-01T00:00:00.000Z | circa 1 an | circa 1 an | în circa 1 an |
+| 2000-06-01T00:00:00.000Z | 5 luni | 5 luni | în 5 luni |
+| 2000-03-01T00:00:00.000Z | 2 luni | 2 luni | în 2 luni |
+| 2000-02-01T00:00:00.000Z | circa 1 lună | circa 1 lună | în circa 1 lună |
+| 2000-01-15T00:00:00.000Z | 14 zile | 14 zile | în 14 zile |
+| 2000-01-02T00:00:00.000Z | 1 zi | 1 zi | în 1 zi |
+| 2000-01-01T06:00:00.000Z | circa 6 ore | circa 6 ore | în circa 6 ore |
+| 2000-01-01T01:00:00.000Z | circa 1 oră | circa 1 oră | în circa 1 oră |
+| 2000-01-01T00:45:00.000Z | circa 1 oră | circa 1 oră | în circa 1 oră |
+| 2000-01-01T00:30:00.000Z | 30 minute | 30 minute | în 30 minute |
+| 2000-01-01T00:15:00.000Z | 15 minute | 15 minute | în 15 minute |
+| 2000-01-01T00:01:00.000Z | 1 minut | 1 minut | în 1 minut |
+| 2000-01-01T00:00:25.000Z | mai puțin de un minut | jumătate de minut | în mai puțin de un minut |
+| 2000-01-01T00:00:15.000Z | mai puțin de un minut | mai puțin de 20 secunde | în mai puțin de un minut |
+| 2000-01-01T00:00:05.000Z | mai puțin de un minut | mai puțin de 10 secunde | în mai puțin de un minut |
+| 2000-01-01T00:00:00.000Z | mai puțin de un minut | mai puțin de 5 secunde | mai puțin de un minut în urmă |
+| 1999-12-31T23:59:55.000Z | mai puțin de un minut | mai puțin de 10 secunde | mai puțin de un minut în urmă |
+| 1999-12-31T23:59:45.000Z | mai puțin de un minut | mai puțin de 20 secunde | mai puțin de un minut în urmă |
+| 1999-12-31T23:59:35.000Z | mai puțin de un minut | jumătate de minut | mai puțin de un minut în urmă |
+| 1999-12-31T23:59:00.000Z | 1 minut | 1 minut | 1 minut în urmă |
+| 1999-12-31T23:45:00.000Z | 15 minute | 15 minute | 15 minute în urmă |
+| 1999-12-31T23:30:00.000Z | 30 minute | 30 minute | 30 minute în urmă |
+| 1999-12-31T23:15:00.000Z | circa 1 oră | circa 1 oră | circa 1 oră în urmă |
+| 1999-12-31T23:00:00.000Z | circa 1 oră | circa 1 oră | circa 1 oră în urmă |
+| 1999-12-31T18:00:00.000Z | circa 6 ore | circa 6 ore | circa 6 ore în urmă |
+| 1999-12-30T00:00:00.000Z | 2 zile | 2 zile | 2 zile în urmă |
+| 1999-12-15T00:00:00.000Z | 17 zile | 17 zile | 17 zile în urmă |
+| 1999-12-01T00:00:00.000Z | circa 1 lună | circa 1 lună | circa 1 lună în urmă |
+| 1999-11-01T00:00:00.000Z | 2 luni | 2 luni | 2 luni în urmă |
+| 1999-06-01T00:00:00.000Z | 7 luni | 7 luni | 7 luni în urmă |
+| 1999-01-01T00:00:00.000Z | circa 1 an | circa 1 an | circa 1 an în urmă |
+| 1998-12-01T00:00:00.000Z | circa 1 an | circa 1 an | circa 1 an în urmă |
+| 1998-06-01T00:00:00.000Z | peste 1 an | peste 1 an | peste 1 an în urmă |
+| 1998-01-01T00:00:00.000Z | circa 2 ani | circa 2 ani | circa 2 ani în urmă |
+| 1997-01-01T00:00:00.000Z | circa 3 ani | circa 3 ani | circa 3 ani în urmă |
+| 1996-01-01T00:00:00.000Z | circa 4 ani | circa 4 ani | circa 4 ani în urmă |
+| 1995-01-01T00:00:00.000Z | circa 5 ani | circa 5 ani | circa 5 ani în urmă |
+| 1994-01-01T00:00:00.000Z | circa 6 ani | circa 6 ani | circa 6 ani în urmă |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 ani | în 6 ani | 52608 ore |
+| 2005-01-01T00:00:00.000Z | 5 ani | în 5 ani | 43848 ore |
+| 2004-01-01T00:00:00.000Z | 4 ani | în 4 ani | 35064 ore |
+| 2003-01-01T00:00:00.000Z | 3 ani | în 3 ani | 26304 ore |
+| 2002-01-01T00:00:00.000Z | 2 ani | în 2 ani | 17544 ore |
+| 2001-06-01T00:00:00.000Z | 1 an | în 1 an | 12408 ore |
+| 2001-02-01T00:00:00.000Z | 1 an | în 1 an | 9528 ore |
+| 2001-01-01T00:00:00.000Z | 1 an | în 1 an | 8784 ore |
+| 2000-06-01T00:00:00.000Z | 5 luni | în 5 luni | 3648 ore |
+| 2000-03-01T00:00:00.000Z | 2 luni | în 2 luni | 1440 ore |
+| 2000-02-01T00:00:00.000Z | 1 lună | în 1 lună | 744 ore |
+| 2000-01-15T00:00:00.000Z | 14 zile | în 14 zile | 336 ore |
+| 2000-01-02T00:00:00.000Z | 1 zi | în 1 zi | 24 ore |
+| 2000-01-01T06:00:00.000Z | 6 ore | în 6 ore | 6 ore |
+| 2000-01-01T01:00:00.000Z | 1 oră | în 1 oră | 1 oră |
+| 2000-01-01T00:45:00.000Z | 45 minute | în 45 minute | 1 oră |
+| 2000-01-01T00:30:00.000Z | 30 minute | în 30 minute | 1 oră |
+| 2000-01-01T00:15:00.000Z | 15 minute | în 15 minute | 0 ore |
+| 2000-01-01T00:01:00.000Z | 1 minut | în 1 minut | 0 ore |
+| 2000-01-01T00:00:25.000Z | 25 secunde | în 25 secunde | 0 ore |
+| 2000-01-01T00:00:15.000Z | 15 secunde | în 15 secunde | 0 ore |
+| 2000-01-01T00:00:05.000Z | 5 secunde | în 5 secunde | 0 ore |
+| 2000-01-01T00:00:00.000Z | 0 secunde | 0 secunde în urmă | 0 ore |
+| 1999-12-31T23:59:55.000Z | 5 secunde | 5 secunde în urmă | 0 ore |
+| 1999-12-31T23:59:45.000Z | 15 secunde | 15 secunde în urmă | 0 ore |
+| 1999-12-31T23:59:35.000Z | 25 secunde | 25 secunde în urmă | 0 ore |
+| 1999-12-31T23:59:00.000Z | 1 minut | 1 minut în urmă | 0 ore |
+| 1999-12-31T23:45:00.000Z | 15 minute | 15 minute în urmă | 0 ore |
+| 1999-12-31T23:30:00.000Z | 30 minute | 30 minute în urmă | 1 oră |
+| 1999-12-31T23:15:00.000Z | 45 minute | 45 minute în urmă | 1 oră |
+| 1999-12-31T23:00:00.000Z | 1 oră | 1 oră în urmă | 1 oră |
+| 1999-12-31T18:00:00.000Z | 6 ore | 6 ore în urmă | 6 ore |
+| 1999-12-30T00:00:00.000Z | 2 zile | 2 zile în urmă | 48 ore |
+| 1999-12-15T00:00:00.000Z | 17 zile | 17 zile în urmă | 408 ore |
+| 1999-12-01T00:00:00.000Z | 1 lună | 1 lună în urmă | 744 ore |
+| 1999-11-01T00:00:00.000Z | 2 luni | 2 luni în urmă | 1464 ore |
+| 1999-06-01T00:00:00.000Z | 7 luni | 7 luni în urmă | 5136 ore |
+| 1999-01-01T00:00:00.000Z | 1 an | 1 an în urmă | 8760 ore |
+| 1998-12-01T00:00:00.000Z | 1 an | 1 an în urmă | 9504 ore |
+| 1998-06-01T00:00:00.000Z | 2 ani | 2 ani în urmă | 13896 ore |
+| 1998-01-01T00:00:00.000Z | 2 ani | 2 ani în urmă | 17520 ore |
+| 1997-01-01T00:00:00.000Z | 3 ani | 3 ani în urmă | 26280 ore |
+| 1996-01-01T00:00:00.000Z | 4 ani | 4 ani în urmă | 35064 ore |
+| 1995-01-01T00:00:00.000Z | 5 ani | 5 ani în urmă | 43824 ore |
+| 1994-01-01T00:00:00.000Z | 6 ani | 6 ani în urmă | 52584 ore |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | miercuri viitoare la 00:00 |
+| 2000-01-02T00:00:00.000Z | mâine la 00:00 |
+| 2000-01-01T00:00:00.000Z | astăzi la 00:00 |
+| 1999-12-31T00:00:00.000Z | ieri la 00:00 |
+| 1999-12-27T00:00:00.000Z | luni trecută la 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/ru/_lib/formatDistance/index.js b/date-fns/src/locale/ru/_lib/formatDistance/index.js
new file mode 100644
index 0000000..686777d
--- /dev/null
+++ b/date-fns/src/locale/ru/_lib/formatDistance/index.js
@@ -0,0 +1,247 @@
+function declension(scheme, count) {
+ // scheme for count=1 exists
+ if (scheme.one !== undefined && count === 1) {
+ return scheme.one
+ }
+
+ var rem10 = count % 10
+ var rem100 = count % 100
+
+ // 1, 21, 31, ...
+ if (rem10 === 1 && rem100 !== 11) {
+ return scheme.singularNominative.replace('{{count}}', count)
+
+ // 2, 3, 4, 22, 23, 24, 32 ...
+ } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {
+ return scheme.singularGenitive.replace('{{count}}', count)
+
+ // 5, 6, 7, 8, 9, 10, 11, ...
+ } else {
+ return scheme.pluralGenitive.replace('{{count}}', count)
+ }
+}
+
+function buildLocalizeTokenFn(scheme) {
+ return function(count, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ if (scheme.future) {
+ return declension(scheme.future, count)
+ } else {
+ return 'через ' + declension(scheme.regular, count)
+ }
+ } else {
+ if (scheme.past) {
+ return declension(scheme.past, count)
+ } else {
+ return declension(scheme.regular, count) + ' назад'
+ }
+ }
+ } else {
+ return declension(scheme.regular, count)
+ }
+ }
+}
+
+var formatDistanceLocale = {
+ lessThanXSeconds: buildLocalizeTokenFn({
+ regular: {
+ one: 'меньше секунды',
+ singularNominative: 'меньше {{count}} секунды',
+ singularGenitive: 'меньше {{count}} секунд',
+ pluralGenitive: 'меньше {{count}} секунд'
+ },
+ future: {
+ one: 'меньше, чем через секунду',
+ singularNominative: 'меньше, чем через {{count}} секунду',
+ singularGenitive: 'меньше, чем через {{count}} секунды',
+ pluralGenitive: 'меньше, чем через {{count}} секунд'
+ }
+ }),
+
+ xSeconds: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} секунда',
+ singularGenitive: '{{count}} секунды',
+ pluralGenitive: '{{count}} секунд'
+ },
+ past: {
+ singularNominative: '{{count}} секунду назад',
+ singularGenitive: '{{count}} секунды назад',
+ pluralGenitive: '{{count}} секунд назад'
+ },
+ future: {
+ singularNominative: 'через {{count}} секунду',
+ singularGenitive: 'через {{count}} секунды',
+ pluralGenitive: 'через {{count}} секунд'
+ }
+ }),
+
+ halfAMinute: function(_, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'через полминуты'
+ } else {
+ return 'полминуты назад'
+ }
+ }
+
+ return 'полминуты'
+ },
+
+ lessThanXMinutes: buildLocalizeTokenFn({
+ regular: {
+ one: 'меньше минуты',
+ singularNominative: 'меньше {{count}} минуты',
+ singularGenitive: 'меньше {{count}} минут',
+ pluralGenitive: 'меньше {{count}} минут'
+ },
+ future: {
+ one: 'меньше, чем через минуту',
+ singularNominative: 'меньше, чем через {{count}} минуту',
+ singularGenitive: 'меньше, чем через {{count}} минуты',
+ pluralGenitive: 'меньше, чем через {{count}} минут'
+ }
+ }),
+
+ xMinutes: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} минута',
+ singularGenitive: '{{count}} минуты',
+ pluralGenitive: '{{count}} минут'
+ },
+ past: {
+ singularNominative: '{{count}} минуту назад',
+ singularGenitive: '{{count}} минуты назад',
+ pluralGenitive: '{{count}} минут назад'
+ },
+ future: {
+ singularNominative: 'через {{count}} минуту',
+ singularGenitive: 'через {{count}} минуты',
+ pluralGenitive: 'через {{count}} минут'
+ }
+ }),
+
+ aboutXHours: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'около {{count}} часа',
+ singularGenitive: 'около {{count}} часов',
+ pluralGenitive: 'около {{count}} часов'
+ },
+ future: {
+ singularNominative: 'приблизительно через {{count}} час',
+ singularGenitive: 'приблизительно через {{count}} часа',
+ pluralGenitive: 'приблизительно через {{count}} часов'
+ }
+ }),
+
+ xHours: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} час',
+ singularGenitive: '{{count}} часа',
+ pluralGenitive: '{{count}} часов'
+ }
+ }),
+
+ xDays: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} день',
+ singularGenitive: '{{count}} дня',
+ pluralGenitive: '{{count}} дней'
+ }
+ }),
+
+ aboutXWeeks: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'около {{count}} недели',
+ singularGenitive: 'около {{count}} недель',
+ pluralGenitive: 'около {{count}} недель'
+ },
+ future: {
+ singularNominative: 'приблизительно через {{count}} неделю',
+ singularGenitive: 'приблизительно через {{count}} недели',
+ pluralGenitive: 'приблизительно через {{count}} недель'
+ }
+ }),
+
+ xWeeks: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} неделя',
+ singularGenitive: '{{count}} недели',
+ pluralGenitive: '{{count}} недель'
+ }
+ }),
+
+ aboutXMonths: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'около {{count}} месяца',
+ singularGenitive: 'около {{count}} месяцев',
+ pluralGenitive: 'около {{count}} месяцев'
+ },
+ future: {
+ singularNominative: 'приблизительно через {{count}} месяц',
+ singularGenitive: 'приблизительно через {{count}} месяца',
+ pluralGenitive: 'приблизительно через {{count}} месяцев'
+ }
+ }),
+
+ xMonths: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} месяц',
+ singularGenitive: '{{count}} месяца',
+ pluralGenitive: '{{count}} месяцев'
+ }
+ }),
+
+ aboutXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'около {{count}} года',
+ singularGenitive: 'около {{count}} лет',
+ pluralGenitive: 'около {{count}} лет'
+ },
+ future: {
+ singularNominative: 'приблизительно через {{count}} год',
+ singularGenitive: 'приблизительно через {{count}} года',
+ pluralGenitive: 'приблизительно через {{count}} лет'
+ }
+ }),
+
+ xYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} год',
+ singularGenitive: '{{count}} года',
+ pluralGenitive: '{{count}} лет'
+ }
+ }),
+
+ overXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'больше {{count}} года',
+ singularGenitive: 'больше {{count}} лет',
+ pluralGenitive: 'больше {{count}} лет'
+ },
+ future: {
+ singularNominative: 'больше, чем через {{count}} год',
+ singularGenitive: 'больше, чем через {{count}} года',
+ pluralGenitive: 'больше, чем через {{count}} лет'
+ }
+ }),
+
+ almostXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'почти {{count}} год',
+ singularGenitive: 'почти {{count}} года',
+ pluralGenitive: 'почти {{count}} лет'
+ },
+ future: {
+ singularNominative: 'почти через {{count}} год',
+ singularGenitive: 'почти через {{count}} года',
+ pluralGenitive: 'почти через {{count}} лет'
+ }
+ })
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ return formatDistanceLocale[token](count, options)
+}
diff --git a/date-fns/src/locale/ru/_lib/formatLong/index.js b/date-fns/src/locale/ru/_lib/formatLong/index.js
new file mode 100644
index 0000000..e3ac8dd
--- /dev/null
+++ b/date-fns/src/locale/ru/_lib/formatLong/index.js
@@ -0,0 +1,38 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, d MMMM y 'г.'",
+ long: "d MMMM y 'г.'",
+ medium: "d MMM y 'г.'",
+ short: 'dd.MM.y'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ any: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'any'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ru/_lib/formatRelative/index.js b/date-fns/src/locale/ru/_lib/formatRelative/index.js
new file mode 100644
index 0000000..ad4dbcf
--- /dev/null
+++ b/date-fns/src/locale/ru/_lib/formatRelative/index.js
@@ -0,0 +1,88 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+var accusativeWeekdays = [
+ 'воскресенье',
+ 'понедельник',
+ 'вторник',
+ 'среду',
+ 'четверг',
+ 'пятницу',
+ 'субботу'
+]
+
+function lastWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ switch (day) {
+ case 0:
+ return "'в прошлое " + weekday + " в' p"
+ case 1:
+ case 2:
+ case 4:
+ return "'в прошлый " + weekday + " в' p"
+ case 3:
+ case 5:
+ case 6:
+ return "'в прошлую " + weekday + " в' p"
+ }
+}
+
+function thisWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ if (day === 2 /* Tue */) {
+ return "'во " + weekday + " в' p"
+ } else {
+ return "'в " + weekday + " в' p"
+ }
+}
+
+function nextWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ switch (day) {
+ case 0:
+ return "'в следующее " + weekday + " в' p"
+ case 1:
+ case 2:
+ case 4:
+ return "'в следующий " + weekday + " в' p"
+ case 3:
+ case 5:
+ case 6:
+ return "'в следующую " + weekday + " в' p"
+ }
+}
+
+var formatRelativeLocale = {
+ lastWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return lastWeek(day)
+ }
+ },
+ yesterday: "'вчера в' p",
+ today: "'сегодня в' p",
+ tomorrow: "'завтра в' p",
+ nextWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return nextWeek(day)
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/ru/_lib/localize/index.js b/date-fns/src/locale/ru/_lib/localize/index.js
new file mode 100644
index 0000000..86ef3b0
--- /dev/null
+++ b/date-fns/src/locale/ru/_lib/localize/index.js
@@ -0,0 +1,210 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['до н.э.', 'н.э.'],
+ abbreviated: ['до н. э.', 'н. э.'],
+ wide: ['до нашей эры', 'нашей эры']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1-й кв.', '2-й кв.', '3-й кв.', '4-й кв.'],
+ wide: ['1-й квартал', '2-й квартал', '3-й квартал', '4-й квартал']
+}
+
+var monthValues = {
+ narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'],
+ abbreviated: [
+ 'янв.',
+ 'фев.',
+ 'март',
+ 'апр.',
+ 'май',
+ 'июнь',
+ 'июль',
+ 'авг.',
+ 'сент.',
+ 'окт.',
+ 'нояб.',
+ 'дек.'
+ ],
+ wide: [
+ 'январь',
+ 'февраль',
+ 'март',
+ 'апрель',
+ 'май',
+ 'июнь',
+ 'июль',
+ 'август',
+ 'сентябрь',
+ 'октябрь',
+ 'ноябрь',
+ 'декабрь'
+ ]
+}
+var formattingMonthValues = {
+ narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'],
+ abbreviated: [
+ 'янв.',
+ 'фев.',
+ 'мар.',
+ 'апр.',
+ 'мая',
+ 'июн.',
+ 'июл.',
+ 'авг.',
+ 'сент.',
+ 'окт.',
+ 'нояб.',
+ 'дек.'
+ ],
+ wide: [
+ 'января',
+ 'февраля',
+ 'марта',
+ 'апреля',
+ 'мая',
+ 'июня',
+ 'июля',
+ 'августа',
+ 'сентября',
+ 'октября',
+ 'ноября',
+ 'декабря'
+ ]
+}
+
+var dayValues = {
+ narrow: ['В', 'П', 'В', 'С', 'Ч', 'П', 'С'],
+ short: ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
+ abbreviated: ['вск', 'пнд', 'втр', 'срд', 'чтв', 'птн', 'суб'],
+ wide: [
+ 'воскресенье',
+ 'понедельник',
+ 'вторник',
+ 'среда',
+ 'четверг',
+ 'пятница',
+ 'суббота'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'полн.',
+ noon: 'полд.',
+ morning: 'утро',
+ afternoon: 'день',
+ evening: 'веч.',
+ night: 'ночь'
+ },
+ abbreviated: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'полн.',
+ noon: 'полд.',
+ morning: 'утро',
+ afternoon: 'день',
+ evening: 'веч.',
+ night: 'ночь'
+ },
+ wide: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'полночь',
+ noon: 'полдень',
+ morning: 'утро',
+ afternoon: 'день',
+ evening: 'вечер',
+ night: 'ночь'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'полн.',
+ noon: 'полд.',
+ morning: 'утра',
+ afternoon: 'дня',
+ evening: 'веч.',
+ night: 'ночи'
+ },
+ abbreviated: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'полн.',
+ noon: 'полд.',
+ morning: 'утра',
+ afternoon: 'дня',
+ evening: 'веч.',
+ night: 'ночи'
+ },
+ wide: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'полночь',
+ noon: 'полдень',
+ morning: 'утра',
+ afternoon: 'дня',
+ evening: 'вечера',
+ night: 'ночи'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var suffix
+
+ if (unit === 'date') {
+ suffix = '-е'
+ } else if (unit === 'week' || unit === 'minute' || unit === 'second') {
+ suffix = '-я'
+ } else {
+ suffix = '-й'
+ }
+
+ return dirtyNumber + suffix
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'any',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ru/_lib/match/index.js b/date-fns/src/locale/ru/_lib/match/index.js
new file mode 100644
index 0000000..3b7425a
--- /dev/null
+++ b/date-fns/src/locale/ru/_lib/match/index.js
@@ -0,0 +1,138 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-?(е|я|й|ое|ье|ая|ья|ый|ой|ий|ый))?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^((до )?н\.?\s?э\.?)/i,
+ abbreviated: /^((до )?н\.?\s?э\.?)/i,
+ wide: /^(до нашей эры|нашей эры|наша эра)/i
+}
+var parseEraPatterns = {
+ any: [/^д/i, /^н/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234](-?[ыои]?й?)? кв.?/i,
+ wide: /^[1234](-?[ыои]?й?)? квартал/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[яфмаисонд]/i,
+ abbreviated: /^(янв|фев|март?|апр|ма[йя]|июн[ья]?|июл[ья]?|авг|сент?|окт|нояб?|дек)\.?/i,
+ wide: /^(январ[ья]|феврал[ья]|марта?|апрел[ья]|ма[йя]|июн[ья]|июл[ья]|августа?|сентябр[ья]|октябр[ья]|октябр[ья]|ноябр[ья]|декабр[ья])/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^я/i,
+ /^ф/i,
+ /^м/i,
+ /^а/i,
+ /^м/i,
+ /^и/i,
+ /^и/i,
+ /^а/i,
+ /^с/i,
+ /^о/i,
+ /^н/i,
+ /^я/i
+ ],
+ any: [
+ /^я/i,
+ /^ф/i,
+ /^мар/i,
+ /^ап/i,
+ /^ма[йя]/i,
+ /^июн/i,
+ /^июл/i,
+ /^ав/i,
+ /^с/i,
+ /^о/i,
+ /^н/i,
+ /^д/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[впсч]/i,
+ short: /^(вс|во|пн|по|вт|ср|чт|че|пт|пя|сб|су)\.?/i,
+ abbreviated: /^(вск|вос|пнд|пон|втр|вто|срд|сре|чтв|чет|птн|пят|суб).?/i,
+ wide: /^(воскресень[ея]|понедельника?|вторника?|сред[аы]|четверга?|пятниц[аы]|суббот[аы])/i
+}
+var parseDayPatterns = {
+ narrow: [/^в/i, /^п/i, /^в/i, /^с/i, /^ч/i, /^п/i, /^с/i],
+ any: [/^в[ос]/i, /^п[он]/i, /^в/i, /^ср/i, /^ч/i, /^п[ят]/i, /^с[уб]/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i,
+ abbreviated: /^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i,
+ wide: /^([дп]п|полночь|полдень|утр[оа]|день|дня|вечера?|ноч[ьи])/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^дп/i,
+ pm: /^пп/i,
+ midnight: /^полн/i,
+ noon: /^полд/i,
+ morning: /^у/i,
+ afternoon: /^д[ен]/i,
+ evening: /^в/i,
+ night: /^н/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ru/index.d.ts b/date-fns/src/locale/ru/index.d.ts
new file mode 100644
index 0000000..1a7f74f
--- /dev/null
+++ b/date-fns/src/locale/ru/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ru } from 'date-fns/locale'
+export default ru
diff --git a/date-fns/src/locale/ru/index.js b/date-fns/src/locale/ru/index.js
new file mode 100644
index 0000000..7271c7b
--- /dev/null
+++ b/date-fns/src/locale/ru/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Russian locale.
+ * @language Russian
+ * @iso-639-2 rus
+ * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}
+ * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}
+ */
+var locale = {
+ code: 'ru',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ru/index.js.flow b/date-fns/src/locale/ru/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ru/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ru/snapshot.md b/date-fns/src/locale/ru/snapshot.md
new file mode 100644
index 0000000..496d151
--- /dev/null
+++ b/date-fns/src/locale/ru/snapshot.md
@@ -0,0 +1,304 @@
+# Russian (ru) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-й | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-й | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-й | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-й | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-й | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1-й кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й кв. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-й квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й квартал | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-й | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1-й кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й кв. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-й квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й квартал | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-й | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-й | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | фев. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | июл. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | февраля | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | июля | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | Ф | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | И | 2019-06-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-й | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-й | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | фев. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | июль | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | февраль | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | июль | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | Ф | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | И | 2019-06-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-я | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-я | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-я | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-я | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-е | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-е | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-й | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-й | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | пнд | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | пнд | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | пнд | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | понедельник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пятница | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-й | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-й | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | пнд | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | понедельник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пятница | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-й | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-й | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | пнд | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | понедельник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пятница | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-й | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-й | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | пнд | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | понедельник | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пятница | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | утра | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночи | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | утра | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночи | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | утра | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночи | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | утра | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | вечера | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночи | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | утра | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночи | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-й | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-й | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-й | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-й | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-й | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-й | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-й | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-й | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-я | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-я | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-я | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-я | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 фев. 1987 г. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мая 1453 г. | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 февраля 1987 г. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мая 1453 г. | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | среда, 11 февраля 1987 г. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | воскресенье, 29 мая 1453 г. | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 фев. 1987 г., 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 мая 1453 г., 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 февраля 1987 г., 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 мая 1453 г., 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | среда, 11 февраля 1987 г., 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | воскресенье, 29 мая 1453 г., 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------------- | ---------------------- | ---------------------------- |
+| 2006-01-01T00:00:00.000Z | около 6 лет | около 6 лет | приблизительно через 6 лет |
+| 2005-01-01T00:00:00.000Z | около 5 лет | около 5 лет | приблизительно через 5 лет |
+| 2004-01-01T00:00:00.000Z | около 4 лет | около 4 лет | приблизительно через 4 года |
+| 2003-01-01T00:00:00.000Z | около 3 лет | около 3 лет | приблизительно через 3 года |
+| 2002-01-01T00:00:00.000Z | около 2 лет | около 2 лет | приблизительно через 2 года |
+| 2001-06-01T00:00:00.000Z | больше 1 года | больше 1 года | больше, чем через 1 год |
+| 2001-02-01T00:00:00.000Z | около 1 года | около 1 года | приблизительно через 1 год |
+| 2001-01-01T00:00:00.000Z | около 1 года | около 1 года | приблизительно через 1 год |
+| 2000-06-01T00:00:00.000Z | 5 месяцев | 5 месяцев | через 5 месяцев |
+| 2000-03-01T00:00:00.000Z | 2 месяца | 2 месяца | через 2 месяца |
+| 2000-02-01T00:00:00.000Z | около 1 месяца | около 1 месяца | приблизительно через 1 месяц |
+| 2000-01-15T00:00:00.000Z | 14 дней | 14 дней | через 14 дней |
+| 2000-01-02T00:00:00.000Z | 1 день | 1 день | через 1 день |
+| 2000-01-01T06:00:00.000Z | около 6 часов | около 6 часов | приблизительно через 6 часов |
+| 2000-01-01T01:00:00.000Z | около 1 часа | около 1 часа | приблизительно через 1 час |
+| 2000-01-01T00:45:00.000Z | около 1 часа | около 1 часа | приблизительно через 1 час |
+| 2000-01-01T00:30:00.000Z | 30 минут | 30 минут | через 30 минут |
+| 2000-01-01T00:15:00.000Z | 15 минут | 15 минут | через 15 минут |
+| 2000-01-01T00:01:00.000Z | 1 минута | 1 минута | через 1 минуту |
+| 2000-01-01T00:00:25.000Z | меньше минуты | полминуты | меньше, чем через минуту |
+| 2000-01-01T00:00:15.000Z | меньше минуты | меньше 20 секунд | меньше, чем через минуту |
+| 2000-01-01T00:00:05.000Z | меньше минуты | меньше 10 секунд | меньше, чем через минуту |
+| 2000-01-01T00:00:00.000Z | меньше минуты | меньше 5 секунд | меньше минуты назад |
+| 1999-12-31T23:59:55.000Z | меньше минуты | меньше 10 секунд | меньше минуты назад |
+| 1999-12-31T23:59:45.000Z | меньше минуты | меньше 20 секунд | меньше минуты назад |
+| 1999-12-31T23:59:35.000Z | меньше минуты | полминуты | меньше минуты назад |
+| 1999-12-31T23:59:00.000Z | 1 минута | 1 минута | 1 минуту назад |
+| 1999-12-31T23:45:00.000Z | 15 минут | 15 минут | 15 минут назад |
+| 1999-12-31T23:30:00.000Z | 30 минут | 30 минут | 30 минут назад |
+| 1999-12-31T23:15:00.000Z | около 1 часа | около 1 часа | около 1 часа назад |
+| 1999-12-31T23:00:00.000Z | около 1 часа | около 1 часа | около 1 часа назад |
+| 1999-12-31T18:00:00.000Z | около 6 часов | около 6 часов | около 6 часов назад |
+| 1999-12-30T00:00:00.000Z | 2 дня | 2 дня | 2 дня назад |
+| 1999-12-15T00:00:00.000Z | 17 дней | 17 дней | 17 дней назад |
+| 1999-12-01T00:00:00.000Z | около 1 месяца | около 1 месяца | около 1 месяца назад |
+| 1999-11-01T00:00:00.000Z | 2 месяца | 2 месяца | 2 месяца назад |
+| 1999-06-01T00:00:00.000Z | 7 месяцев | 7 месяцев | 7 месяцев назад |
+| 1999-01-01T00:00:00.000Z | около 1 года | около 1 года | около 1 года назад |
+| 1998-12-01T00:00:00.000Z | около 1 года | около 1 года | около 1 года назад |
+| 1998-06-01T00:00:00.000Z | больше 1 года | больше 1 года | больше 1 года назад |
+| 1998-01-01T00:00:00.000Z | около 2 лет | около 2 лет | около 2 лет назад |
+| 1997-01-01T00:00:00.000Z | около 3 лет | около 3 лет | около 3 лет назад |
+| 1996-01-01T00:00:00.000Z | около 4 лет | около 4 лет | около 4 лет назад |
+| 1995-01-01T00:00:00.000Z | около 5 лет | около 5 лет | около 5 лет назад |
+| 1994-01-01T00:00:00.000Z | около 6 лет | около 6 лет | около 6 лет назад |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 лет | через 6 лет | 52608 часов |
+| 2005-01-01T00:00:00.000Z | 5 лет | через 5 лет | 43848 часов |
+| 2004-01-01T00:00:00.000Z | 4 года | через 4 года | 35064 часа |
+| 2003-01-01T00:00:00.000Z | 3 года | через 3 года | 26304 часа |
+| 2002-01-01T00:00:00.000Z | 2 года | через 2 года | 17544 часа |
+| 2001-06-01T00:00:00.000Z | 1 год | через 1 год | 12408 часов |
+| 2001-02-01T00:00:00.000Z | 1 год | через 1 год | 9528 часов |
+| 2001-01-01T00:00:00.000Z | 1 год | через 1 год | 8784 часа |
+| 2000-06-01T00:00:00.000Z | 5 месяцев | через 5 месяцев | 3648 часов |
+| 2000-03-01T00:00:00.000Z | 2 месяца | через 2 месяца | 1440 часов |
+| 2000-02-01T00:00:00.000Z | 1 месяц | через 1 месяц | 744 часа |
+| 2000-01-15T00:00:00.000Z | 14 дней | через 14 дней | 336 часов |
+| 2000-01-02T00:00:00.000Z | 1 день | через 1 день | 24 часа |
+| 2000-01-01T06:00:00.000Z | 6 часов | через 6 часов | 6 часов |
+| 2000-01-01T01:00:00.000Z | 1 час | через 1 час | 1 час |
+| 2000-01-01T00:45:00.000Z | 45 минут | через 45 минут | 1 час |
+| 2000-01-01T00:30:00.000Z | 30 минут | через 30 минут | 1 час |
+| 2000-01-01T00:15:00.000Z | 15 минут | через 15 минут | 0 часов |
+| 2000-01-01T00:01:00.000Z | 1 минута | через 1 минуту | 0 часов |
+| 2000-01-01T00:00:25.000Z | 25 секунд | через 25 секунд | 0 часов |
+| 2000-01-01T00:00:15.000Z | 15 секунд | через 15 секунд | 0 часов |
+| 2000-01-01T00:00:05.000Z | 5 секунд | через 5 секунд | 0 часов |
+| 2000-01-01T00:00:00.000Z | 0 секунд | 0 секунд назад | 0 часов |
+| 1999-12-31T23:59:55.000Z | 5 секунд | 5 секунд назад | 0 часов |
+| 1999-12-31T23:59:45.000Z | 15 секунд | 15 секунд назад | 0 часов |
+| 1999-12-31T23:59:35.000Z | 25 секунд | 25 секунд назад | 0 часов |
+| 1999-12-31T23:59:00.000Z | 1 минута | 1 минуту назад | 0 часов |
+| 1999-12-31T23:45:00.000Z | 15 минут | 15 минут назад | 0 часов |
+| 1999-12-31T23:30:00.000Z | 30 минут | 30 минут назад | 1 час |
+| 1999-12-31T23:15:00.000Z | 45 минут | 45 минут назад | 1 час |
+| 1999-12-31T23:00:00.000Z | 1 час | 1 час назад | 1 час |
+| 1999-12-31T18:00:00.000Z | 6 часов | 6 часов назад | 6 часов |
+| 1999-12-30T00:00:00.000Z | 2 дня | 2 дня назад | 48 часов |
+| 1999-12-15T00:00:00.000Z | 17 дней | 17 дней назад | 408 часов |
+| 1999-12-01T00:00:00.000Z | 1 месяц | 1 месяц назад | 744 часа |
+| 1999-11-01T00:00:00.000Z | 2 месяца | 2 месяца назад | 1464 часа |
+| 1999-06-01T00:00:00.000Z | 7 месяцев | 7 месяцев назад | 5136 часов |
+| 1999-01-01T00:00:00.000Z | 1 год | 1 год назад | 8760 часов |
+| 1998-12-01T00:00:00.000Z | 1 год | 1 год назад | 9504 часа |
+| 1998-06-01T00:00:00.000Z | 2 года | 2 года назад | 13896 часов |
+| 1998-01-01T00:00:00.000Z | 2 года | 2 года назад | 17520 часов |
+| 1997-01-01T00:00:00.000Z | 3 года | 3 года назад | 26280 часов |
+| 1996-01-01T00:00:00.000Z | 4 года | 4 года назад | 35064 часа |
+| 1995-01-01T00:00:00.000Z | 5 лет | 5 лет назад | 43824 часа |
+| 1994-01-01T00:00:00.000Z | 6 лет | 6 лет назад | 52584 часа |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------ |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | в следующую среду в 0:00 |
+| 2000-01-02T00:00:00.000Z | завтра в 0:00 |
+| 2000-01-01T00:00:00.000Z | сегодня в 0:00 |
+| 1999-12-31T00:00:00.000Z | вчера в 0:00 |
+| 1999-12-27T00:00:00.000Z | в понедельник в 0:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/sk/_lib/formatDistance/index.js b/date-fns/src/locale/sk/_lib/formatDistance/index.js
new file mode 100644
index 0000000..cacb5b4
--- /dev/null
+++ b/date-fns/src/locale/sk/_lib/formatDistance/index.js
@@ -0,0 +1,231 @@
+// NOTE: should prolly be improved
+// https://www.unicode.org/cldr/charts/32/summary/sk.html?hide#1308
+
+function declensionGroup(scheme, count) {
+ if (count === 1) {
+ return scheme.one
+ }
+
+ if (count >= 2 && count <= 4) {
+ return scheme.twoFour
+ }
+
+ // if count === null || count === 0 || count >= 5
+ return scheme.other
+}
+
+function declension(scheme, count, time) {
+ var group = declensionGroup(scheme, count)
+ var finalText = group[time] || group
+ return finalText.replace('{{count}}', count)
+}
+
+function extractPreposition(token) {
+ var result = ['lessThan', 'about', 'over', 'almost'].filter(function(
+ preposition
+ ) {
+ return !!token.match(new RegExp('^' + preposition))
+ })
+
+ return result[0]
+}
+
+function prefixPreposition(preposition) {
+ var translation = ''
+
+ if (preposition === 'almost') {
+ translation = 'takmer'
+ }
+
+ if (preposition === 'about') {
+ translation = 'približne'
+ }
+
+ return translation.length > 0 ? translation + ' ' : ''
+}
+
+function suffixPreposition(preposition) {
+ var translation = ''
+
+ if (preposition === 'lessThan') {
+ translation = 'menej než'
+ }
+
+ if (preposition === 'over') {
+ translation = 'viac než'
+ }
+
+ return translation.length > 0 ? translation + ' ' : ''
+}
+
+function lowercaseFirstLetter(string) {
+ return string.charAt(0).toLowerCase() + string.slice(1)
+}
+
+var formatDistanceLocale = {
+ xSeconds: {
+ one: {
+ regular: 'sekunda',
+ past: 'sekundou',
+ future: 'sekundu'
+ },
+ twoFour: {
+ regular: '{{count}} sekundy',
+ past: '{{count}} sekundami',
+ future: '{{count}} sekundy'
+ },
+ other: {
+ regular: '{{count}} sekúnd',
+ past: '{{count}} sekundami',
+ future: '{{count}} sekúnd'
+ }
+ },
+
+ halfAMinute: {
+ other: {
+ regular: 'pol minúty',
+ past: 'pol minútou',
+ future: 'pol minúty'
+ }
+ },
+
+ xMinutes: {
+ one: {
+ regular: 'minúta',
+ past: 'minútou',
+ future: 'minútu'
+ },
+ twoFour: {
+ regular: '{{count}} minúty',
+ past: '{{count}} minútami',
+ future: '{{count}} minúty'
+ },
+ other: {
+ regular: '{{count}} minút',
+ past: '{{count}} minútami',
+ future: '{{count}} minút'
+ }
+ },
+
+ xHours: {
+ one: {
+ regular: 'hodina',
+ past: 'hodinou',
+ future: 'hodinu'
+ },
+ twoFour: {
+ regular: '{{count}} hodiny',
+ past: '{{count}} hodinami',
+ future: '{{count}} hodiny'
+ },
+ other: {
+ regular: '{{count}} hodín',
+ past: '{{count}} hodinami',
+ future: '{{count}} hodín'
+ }
+ },
+
+ xDays: {
+ one: {
+ regular: 'deň',
+ past: 'dňom',
+ future: 'deň'
+ },
+ twoFour: {
+ regular: '{{count}} dni',
+ past: '{{count}} dňami',
+ future: '{{count}} dni'
+ },
+ other: {
+ regular: '{{count}} dní',
+ past: '{{count}} dňami',
+ future: '{{count}} dní'
+ }
+ },
+
+ xWeeks: {
+ one: {
+ regular: 'mesiac', // TODO
+ past: 'mesiacom', // TODO
+ future: 'mesiac' // TODO
+ },
+ twoFour: {
+ regular: '{{count}} mesiace', // TODO
+ past: '{{count}} mesiacmi', // TODO
+ future: '{{count}} mesiace' // TODO
+ },
+ other: {
+ regular: '{{count}} mesiacov', // TODO
+ past: '{{count}} mesiacmi', // TODO
+ future: '{{count}} mesiacov' // TODO
+ }
+ },
+
+ xMonths: {
+ one: {
+ regular: 'mesiac',
+ past: 'mesiacom',
+ future: 'mesiac'
+ },
+ twoFour: {
+ regular: '{{count}} mesiace',
+ past: '{{count}} mesiacmi',
+ future: '{{count}} mesiace'
+ },
+ other: {
+ regular: '{{count}} mesiacov',
+ past: '{{count}} mesiacmi',
+ future: '{{count}} mesiacov'
+ }
+ },
+
+ xYears: {
+ one: {
+ regular: 'rok',
+ past: 'rokom',
+ future: 'rok'
+ },
+ twoFour: {
+ regular: '{{count}} roky',
+ past: '{{count}} rokmi',
+ future: '{{count}} roky'
+ },
+ other: {
+ regular: '{{count}} rokov',
+ past: '{{count}} rokmi',
+ future: '{{count}} rokov'
+ }
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var preposition = extractPreposition(token) || ''
+ var key = lowercaseFirstLetter(token.substring(preposition.length))
+ var scheme = formatDistanceLocale[key]
+
+ if (!options.addSuffix) {
+ return (
+ prefixPreposition(preposition) +
+ suffixPreposition(preposition) +
+ declension(scheme, count, 'regular')
+ )
+ }
+
+ if (options.comparison > 0) {
+ return (
+ prefixPreposition(preposition) +
+ 'o ' +
+ suffixPreposition(preposition) +
+ declension(scheme, count, 'future')
+ )
+ } else {
+ return (
+ prefixPreposition(preposition) +
+ 'pred ' +
+ suffixPreposition(preposition) +
+ declension(scheme, count, 'past')
+ )
+ }
+}
diff --git a/date-fns/src/locale/sk/_lib/formatLong/index.js b/date-fns/src/locale/sk/_lib/formatLong/index.js
new file mode 100644
index 0000000..bca7361
--- /dev/null
+++ b/date-fns/src/locale/sk/_lib/formatLong/index.js
@@ -0,0 +1,44 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+// https://www.unicode.org/cldr/charts/32/summary/sk.html?hide#1986
+var dateFormats = {
+ full: 'EEEE d. MMMM y',
+ long: 'd. MMMM y',
+ medium: 'd. M. y',
+ short: 'd. M. y'
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/sk.html?hide#2149
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/sk.html?hide#1994
+var dateTimeFormats = {
+ full: '{{date}}, {{time}}',
+ long: '{{date}}, {{time}}',
+ medium: '{{date}}, {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/sk/_lib/formatRelative/index.js b/date-fns/src/locale/sk/_lib/formatRelative/index.js
new file mode 100644
index 0000000..cbe159e
--- /dev/null
+++ b/date-fns/src/locale/sk/_lib/formatRelative/index.js
@@ -0,0 +1,81 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+// https://www.unicode.org/cldr/charts/32/summary/sk.html?hide#1308
+var accusativeWeekdays = [
+ 'nedeľu',
+ 'pondelok',
+ 'utorok',
+ 'stredu',
+ 'štvrtok',
+ 'piatok',
+ 'sobotu'
+]
+
+function lastWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ switch (day) {
+ case 0: /* Sun */
+ case 3: /* Wed */
+ case 6 /* Sat */:
+ return "'minulú " + weekday + " o' p"
+ default:
+ return "'minulý' eeee 'o' p"
+ }
+}
+
+function thisWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ if (day === 4 /* Thu */) {
+ return "'vo' eeee 'o' p"
+ } else {
+ return "'v " + weekday + " o' p"
+ }
+}
+
+function nextWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ switch (day) {
+ case 0: /* Sun */
+ case 4: /* Wed */
+ case 6 /* Sat */:
+ return "'budúcu' " + weekday + " 'o' p"
+ default:
+ return "'budúci' eeee 'o' p"
+ }
+}
+
+var formatRelativeLocale = {
+ lastWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return lastWeek(day)
+ }
+ },
+ yesterday: "'včera o' p",
+ today: "'dnes o' p",
+ tomorrow: "'zajtra o' p",
+ nextWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return nextWeek(day)
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/sk/_lib/localize/index.js b/date-fns/src/locale/sk/_lib/localize/index.js
new file mode 100644
index 0000000..3fbbe0b
--- /dev/null
+++ b/date-fns/src/locale/sk/_lib/localize/index.js
@@ -0,0 +1,204 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+// https://www.unicode.org/cldr/charts/32/summary/sk.html#1772
+var eraValues = {
+ narrow: ['pred Kr.', 'po Kr.'],
+ abbreviated: ['pred Kr.', 'po Kr.'],
+ wide: ['pred Kristom', 'po Kristovi']
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/sk.html#1780
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1. štvrťrok', '2. štvrťrok', '3. štvrťrok', '4. štvrťrok']
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/sk.html#1804
+var monthValues = {
+ narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],
+ abbreviated: [
+ 'jan',
+ 'feb',
+ 'mar',
+ 'apr',
+ 'máj',
+ 'jún',
+ 'júl',
+ 'aug',
+ 'sep',
+ 'okt',
+ 'nov',
+ 'dec'
+ ],
+ wide: [
+ 'január',
+ 'február',
+ 'marec',
+ 'apríl',
+ 'máj',
+ 'jún',
+ 'júl',
+ 'august',
+ 'september',
+ 'október',
+ 'november',
+ 'december'
+ ]
+}
+var formattingMonthValues = {
+ narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],
+ abbreviated: [
+ 'jan',
+ 'feb',
+ 'mar',
+ 'apr',
+ 'máj',
+ 'jún',
+ 'júl',
+ 'aug',
+ 'sep',
+ 'okt',
+ 'nov',
+ 'dec'
+ ],
+ wide: [
+ 'januára',
+ 'februára',
+ 'marca',
+ 'apríla',
+ 'mája',
+ 'júna',
+ 'júla',
+ 'augusta',
+ 'septembra',
+ 'októbra',
+ 'novembra',
+ 'decembra'
+ ]
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/sk.html#1876
+var dayValues = {
+ narrow: ['n', 'p', 'u', 's', 'š', 'p', 's'],
+ short: ['ne', 'po', 'ut', 'st', 'št', 'pi', 'so'],
+ abbreviated: ['ne', 'po', 'ut', 'st', 'št', 'pi', 'so'],
+ wide: [
+ 'nedeľa',
+ 'pondelok',
+ 'utorok',
+ 'streda',
+ 'štvrtok',
+ 'piatok',
+ 'sobota'
+ ]
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/sk.html#1932
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'poln.',
+ noon: 'pol.',
+ morning: 'ráno',
+ afternoon: 'pop.',
+ evening: 'več.',
+ night: 'noc'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'poln.',
+ noon: 'pol.',
+ morning: 'ráno',
+ afternoon: 'popol.',
+ evening: 'večer',
+ night: 'noc'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'polnoc',
+ noon: 'poludnie',
+ morning: 'ráno',
+ afternoon: 'popoludnie',
+ evening: 'večer',
+ night: 'noc'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'o poln.',
+ noon: 'nap.',
+ morning: 'ráno',
+ afternoon: 'pop.',
+ evening: 'več.',
+ night: 'v n.'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'o poln.',
+ noon: 'napol.',
+ morning: 'ráno',
+ afternoon: 'popol.',
+ evening: 'večer',
+ night: 'v noci'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'o polnoci',
+ noon: 'napoludnie',
+ morning: 'ráno',
+ afternoon: 'popoludní',
+ evening: 'večer',
+ night: 'v noci'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues
+ // defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/sk/_lib/match/index.js b/date-fns/src/locale/sk/_lib/match/index.js
new file mode 100644
index 0000000..366c5a4
--- /dev/null
+++ b/date-fns/src/locale/sk/_lib/match/index.js
@@ -0,0 +1,138 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\.?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(pred Kr\.|pred n\. l\.|po Kr\.|n\. l\.)/i,
+ abbreviated: /^(pred Kr\.|pred n\. l\.|po Kr\.|n\. l\.)/i,
+ wide: /^(pred Kristom|pred na[šs][íi]m letopo[čc]tom|po Kristovi|n[áa][šs]ho letopo[čc]tu)/i
+}
+var parseEraPatterns = {
+ any: [/^pr/i, /^(po|n)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234]\. [šs]tvr[ťt]rok/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mar|apr|m[áa]j|j[úu]n|j[úu]l|aug|sep|okt|nov|dec)/i,
+ wide: /^(janu[áa]ra?|febru[áa]ra?|(marec|marca)|apr[íi]la?|m[áa]ja?|j[úu]na?|j[úu]la?|augusta?|(september|septembra)|(okt[óo]ber|okt[óo]bra)|(november|novembra)|(december|decembra))/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^m[áa]j/i,
+ /^j[úu]n/i,
+ /^j[úu]l/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[npusšp]/i,
+ short: /^(ne|po|ut|st|št|pi|so)/i,
+ abbreviated: /^(ne|po|ut|st|št|pi|so)/i,
+ wide: /^(nede[ľl]a|pondelok|utorok|streda|[šs]tvrtok|piatok|sobota])/i
+}
+var parseDayPatterns = {
+ narrow: [/^n/i, /^p/i, /^u/i, /^s/i, /^š/i, /^p/i, /^s/i],
+ any: [/^n/i, /^po/i, /^u/i, /^st/i, /^(št|stv)/i, /^pi/i, /^so/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(am|pm|(o )?poln\.?|(nap\.?|pol\.?)|r[áa]no|pop\.?|ve[čc]\.?|(v n\.?|noc))/i,
+ abbreviated: /^(am|pm|(o )?poln\.?|(napol\.?|pol\.?)|r[áa]no|pop\.?|ve[čc]er|(v )?noci?)/i,
+ any: /^(am|pm|(o )?polnoci?|(na)?poludnie|r[áa]no|popoludn(ie|í|i)|ve[čc]er|(v )?noci?)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^am/i,
+ pm: /^pm/i,
+ midnight: /poln/i,
+ noon: /^(nap|(na)?pol(\.|u))/i,
+ morning: /^r[áa]no/i,
+ afternoon: /^pop/i,
+ evening: /^ve[čc]/i,
+ night: /^(noc|v n\.)/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/sk/index.d.ts b/date-fns/src/locale/sk/index.d.ts
new file mode 100644
index 0000000..362dd32
--- /dev/null
+++ b/date-fns/src/locale/sk/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { sk } from 'date-fns/locale'
+export default sk
diff --git a/date-fns/src/locale/sk/index.js b/date-fns/src/locale/sk/index.js
new file mode 100644
index 0000000..547902f
--- /dev/null
+++ b/date-fns/src/locale/sk/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Slovak locale.
+ * @language Slovak
+ * @iso-639-2 slk
+ * @author Marek Suscak [@mareksuscak]{@link https://github.com/mareksuscak}
+ */
+var locale = {
+ code: 'sk',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/sk/index.js.flow b/date-fns/src/locale/sk/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/sk/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/sk/snapshot.md b/date-fns/src/locale/sk/snapshot.md
new file mode 100644
index 0000000..889aec0
--- /dev/null
+++ b/date-fns/src/locale/sk/snapshot.md
@@ -0,0 +1,304 @@
+# Slovak (sk) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4. | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. štvrťrok | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. štvrťrok | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. štvrťrok | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. štvrťrok | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | júl | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februára | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | júla | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | júl | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | február | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | júl | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | pondelok | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piatok | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | pondelok | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piatok | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | pondelok | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piatok | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | pondelok | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | piatok | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | po | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pi | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popol. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | večer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | v noci | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popol. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | večer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | v noci | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popol. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | večer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | v noci | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popoludní | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | večer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | v noci | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ráno | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | več. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | v n. | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11. 2. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 5. 1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. 2. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 5. 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. februára 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. mája 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | streda 11. februára 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | nedeľa 29. mája 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11. 2. 1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 5. 1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. 2. 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 5. 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. februára 1987, 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. mája 1453, 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | streda 11. februára 1987, 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | nedeľa 29. mája 1453, 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------- | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | približne 6 rokov | približne 6 rokov | približne o 6 rokov |
+| 2005-01-01T00:00:00.000Z | približne 5 rokov | približne 5 rokov | približne o 5 rokov |
+| 2004-01-01T00:00:00.000Z | približne 4 roky | približne 4 roky | približne o 4 roky |
+| 2003-01-01T00:00:00.000Z | približne 3 roky | približne 3 roky | približne o 3 roky |
+| 2002-01-01T00:00:00.000Z | približne 2 roky | približne 2 roky | približne o 2 roky |
+| 2001-06-01T00:00:00.000Z | viac než rok | viac než rok | o viac než rok |
+| 2001-02-01T00:00:00.000Z | približne rok | približne rok | približne o rok |
+| 2001-01-01T00:00:00.000Z | približne rok | približne rok | približne o rok |
+| 2000-06-01T00:00:00.000Z | 5 mesiacov | 5 mesiacov | o 5 mesiacov |
+| 2000-03-01T00:00:00.000Z | 2 mesiace | 2 mesiace | o 2 mesiace |
+| 2000-02-01T00:00:00.000Z | približne mesiac | približne mesiac | približne o mesiac |
+| 2000-01-15T00:00:00.000Z | 14 dní | 14 dní | o 14 dní |
+| 2000-01-02T00:00:00.000Z | deň | deň | o deň |
+| 2000-01-01T06:00:00.000Z | približne 6 hodín | približne 6 hodín | približne o 6 hodín |
+| 2000-01-01T01:00:00.000Z | približne hodina | približne hodina | približne o hodinu |
+| 2000-01-01T00:45:00.000Z | približne hodina | približne hodina | približne o hodinu |
+| 2000-01-01T00:30:00.000Z | 30 minút | 30 minút | o 30 minút |
+| 2000-01-01T00:15:00.000Z | 15 minút | 15 minút | o 15 minút |
+| 2000-01-01T00:01:00.000Z | minúta | minúta | o minútu |
+| 2000-01-01T00:00:25.000Z | menej než minúta | pol minúty | o menej než minútu |
+| 2000-01-01T00:00:15.000Z | menej než minúta | menej než 20 sekúnd | o menej než minútu |
+| 2000-01-01T00:00:05.000Z | menej než minúta | menej než 10 sekúnd | o menej než minútu |
+| 2000-01-01T00:00:00.000Z | menej než minúta | menej než 5 sekúnd | pred menej než minútou |
+| 1999-12-31T23:59:55.000Z | menej než minúta | menej než 10 sekúnd | pred menej než minútou |
+| 1999-12-31T23:59:45.000Z | menej než minúta | menej než 20 sekúnd | pred menej než minútou |
+| 1999-12-31T23:59:35.000Z | menej než minúta | pol minúty | pred menej než minútou |
+| 1999-12-31T23:59:00.000Z | minúta | minúta | pred minútou |
+| 1999-12-31T23:45:00.000Z | 15 minút | 15 minút | pred 15 minútami |
+| 1999-12-31T23:30:00.000Z | 30 minút | 30 minút | pred 30 minútami |
+| 1999-12-31T23:15:00.000Z | približne hodina | približne hodina | približne pred hodinou |
+| 1999-12-31T23:00:00.000Z | približne hodina | približne hodina | približne pred hodinou |
+| 1999-12-31T18:00:00.000Z | približne 6 hodín | približne 6 hodín | približne pred 6 hodinami |
+| 1999-12-30T00:00:00.000Z | 2 dni | 2 dni | pred 2 dňami |
+| 1999-12-15T00:00:00.000Z | 17 dní | 17 dní | pred 17 dňami |
+| 1999-12-01T00:00:00.000Z | približne mesiac | približne mesiac | približne pred mesiacom |
+| 1999-11-01T00:00:00.000Z | 2 mesiace | 2 mesiace | pred 2 mesiacmi |
+| 1999-06-01T00:00:00.000Z | 7 mesiacov | 7 mesiacov | pred 7 mesiacmi |
+| 1999-01-01T00:00:00.000Z | približne rok | približne rok | približne pred rokom |
+| 1998-12-01T00:00:00.000Z | približne rok | približne rok | približne pred rokom |
+| 1998-06-01T00:00:00.000Z | viac než rok | viac než rok | pred viac než rokom |
+| 1998-01-01T00:00:00.000Z | približne 2 roky | približne 2 roky | približne pred 2 rokmi |
+| 1997-01-01T00:00:00.000Z | približne 3 roky | približne 3 roky | približne pred 3 rokmi |
+| 1996-01-01T00:00:00.000Z | približne 4 roky | približne 4 roky | približne pred 4 rokmi |
+| 1995-01-01T00:00:00.000Z | približne 5 rokov | približne 5 rokov | približne pred 5 rokmi |
+| 1994-01-01T00:00:00.000Z | približne 6 rokov | približne 6 rokov | približne pred 6 rokmi |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 rokov | o 6 rokov | 52608 hodín |
+| 2005-01-01T00:00:00.000Z | 5 rokov | o 5 rokov | 43848 hodín |
+| 2004-01-01T00:00:00.000Z | 4 roky | o 4 roky | 35064 hodín |
+| 2003-01-01T00:00:00.000Z | 3 roky | o 3 roky | 26304 hodín |
+| 2002-01-01T00:00:00.000Z | 2 roky | o 2 roky | 17544 hodín |
+| 2001-06-01T00:00:00.000Z | rok | o rok | 12408 hodín |
+| 2001-02-01T00:00:00.000Z | rok | o rok | 9528 hodín |
+| 2001-01-01T00:00:00.000Z | rok | o rok | 8784 hodín |
+| 2000-06-01T00:00:00.000Z | 5 mesiacov | o 5 mesiacov | 3648 hodín |
+| 2000-03-01T00:00:00.000Z | 2 mesiace | o 2 mesiace | 1440 hodín |
+| 2000-02-01T00:00:00.000Z | mesiac | o mesiac | 744 hodín |
+| 2000-01-15T00:00:00.000Z | 14 dní | o 14 dní | 336 hodín |
+| 2000-01-02T00:00:00.000Z | deň | o deň | 24 hodín |
+| 2000-01-01T06:00:00.000Z | 6 hodín | o 6 hodín | 6 hodín |
+| 2000-01-01T01:00:00.000Z | hodina | o hodinu | hodina |
+| 2000-01-01T00:45:00.000Z | 45 minút | o 45 minút | hodina |
+| 2000-01-01T00:30:00.000Z | 30 minút | o 30 minút | hodina |
+| 2000-01-01T00:15:00.000Z | 15 minút | o 15 minút | 0 hodín |
+| 2000-01-01T00:01:00.000Z | minúta | o minútu | 0 hodín |
+| 2000-01-01T00:00:25.000Z | 25 sekúnd | o 25 sekúnd | 0 hodín |
+| 2000-01-01T00:00:15.000Z | 15 sekúnd | o 15 sekúnd | 0 hodín |
+| 2000-01-01T00:00:05.000Z | 5 sekúnd | o 5 sekúnd | 0 hodín |
+| 2000-01-01T00:00:00.000Z | 0 sekúnd | pred 0 sekundami | 0 hodín |
+| 1999-12-31T23:59:55.000Z | 5 sekúnd | pred 5 sekundami | 0 hodín |
+| 1999-12-31T23:59:45.000Z | 15 sekúnd | pred 15 sekundami | 0 hodín |
+| 1999-12-31T23:59:35.000Z | 25 sekúnd | pred 25 sekundami | 0 hodín |
+| 1999-12-31T23:59:00.000Z | minúta | pred minútou | 0 hodín |
+| 1999-12-31T23:45:00.000Z | 15 minút | pred 15 minútami | 0 hodín |
+| 1999-12-31T23:30:00.000Z | 30 minút | pred 30 minútami | hodina |
+| 1999-12-31T23:15:00.000Z | 45 minút | pred 45 minútami | hodina |
+| 1999-12-31T23:00:00.000Z | hodina | pred hodinou | hodina |
+| 1999-12-31T18:00:00.000Z | 6 hodín | pred 6 hodinami | 6 hodín |
+| 1999-12-30T00:00:00.000Z | 2 dni | pred 2 dňami | 48 hodín |
+| 1999-12-15T00:00:00.000Z | 17 dní | pred 17 dňami | 408 hodín |
+| 1999-12-01T00:00:00.000Z | mesiac | pred mesiacom | 744 hodín |
+| 1999-11-01T00:00:00.000Z | 2 mesiace | pred 2 mesiacmi | 1464 hodín |
+| 1999-06-01T00:00:00.000Z | 7 mesiacov | pred 7 mesiacmi | 5136 hodín |
+| 1999-01-01T00:00:00.000Z | rok | pred rokom | 8760 hodín |
+| 1998-12-01T00:00:00.000Z | rok | pred rokom | 9504 hodín |
+| 1998-06-01T00:00:00.000Z | 2 roky | pred 2 rokmi | 13896 hodín |
+| 1998-01-01T00:00:00.000Z | 2 roky | pred 2 rokmi | 17520 hodín |
+| 1997-01-01T00:00:00.000Z | 3 roky | pred 3 rokmi | 26280 hodín |
+| 1996-01-01T00:00:00.000Z | 4 roky | pred 4 rokmi | 35064 hodín |
+| 1995-01-01T00:00:00.000Z | 5 rokov | pred 5 rokmi | 43824 hodín |
+| 1994-01-01T00:00:00.000Z | 6 rokov | pred 6 rokmi | 52584 hodín |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------- |
+| 2000-01-10T00:00:00.000Z | 10. 1. 2000 |
+| 2000-01-05T00:00:00.000Z | budúci streda o 0:00 |
+| 2000-01-02T00:00:00.000Z | zajtra o 0:00 |
+| 2000-01-01T00:00:00.000Z | dnes o 0:00 |
+| 1999-12-31T00:00:00.000Z | včera o 0:00 |
+| 1999-12-27T00:00:00.000Z | v pondelok o 0:00 |
+| 1999-12-21T00:00:00.000Z | 21. 12. 1999 |
diff --git a/date-fns/src/locale/sl/_lib/formatDistance/index.js b/date-fns/src/locale/sl/_lib/formatDistance/index.js
new file mode 100644
index 0000000..d21c359
--- /dev/null
+++ b/date-fns/src/locale/sl/_lib/formatDistance/index.js
@@ -0,0 +1,338 @@
+var distanceInWordsLocale = {
+ lessThanXSeconds: {
+ one: 'manj kot {{count}} sekunda',
+ two: 'manj kot {{count}} sekundi',
+ few: 'manj kot {{count}} sekunde',
+ other: 'manj kot {{count}} sekund'
+ },
+
+ xSeconds: {
+ one: '{{count}} sekunda',
+ two: '{{count}} sekundi',
+ few: '{{count}} sekunde',
+ other: '{{count}} sekund'
+ },
+
+ halfAMinute: 'pol minute',
+
+ lessThanXMinutes: {
+ one: 'manj kot {{count}} minuta',
+ two: 'manj kot {{count}} minuti',
+ few: 'manj kot {{count}} minute',
+ other: 'manj kot {{count}} minut'
+ },
+
+ xMinutes: {
+ one: '{{count}} minuta',
+ two: '{{count}} minuti',
+ few: '{{count}} minute',
+ other: '{{count}} minut'
+ },
+
+ aboutXHours: {
+ one: 'približno {{count}} ura',
+ two: 'približno {{count}} uri',
+ few: 'približno {{count}} ure',
+ other: 'približno {{count}} ur'
+ },
+
+ xHours: {
+ one: '{{count}} ura',
+ two: '{{count}} uri',
+ few: '{{count}} ure',
+ other: '{{count}} ur'
+ },
+
+ xDays: {
+ one: '{{count}} dan',
+ two: '{{count}} dni',
+ few: '{{count}} dni',
+ other: '{{count}} dni'
+ },
+
+ aboutXWeeks: {
+ one: 'približno {{count}} teden',
+ two: 'približno {{count}} tedna',
+ few: 'približno {{count}} tedne',
+ other: 'približno {{count}} tednov'
+ },
+
+ xWeeks: {
+ one: '{{count}} teden',
+ two: '{{count}} tedna',
+ few: '{{count}} tedne',
+ other: '{{count}} tednov'
+ },
+
+ aboutXMonths: {
+ one: 'približno {{count}} mesec',
+ two: 'približno {{count}} meseca',
+ few: 'približno {{count}} mesece',
+ other: 'približno {{count}} mesecev'
+ },
+
+ xMonths: {
+ one: '{{count}} mesec',
+ two: '{{count}} meseca',
+ few: '{{count}} meseci',
+ other: '{{count}} mesecev'
+ },
+
+ aboutXYears: {
+ one: 'približno {{count}} leto',
+ two: 'približno {{count}} leti',
+ few: 'približno {{count}} leta',
+ other: 'približno {{count}} let'
+ },
+
+ xYears: {
+ one: '{{count}} leto',
+ two: '{{count}} leti',
+ few: '{{count}} leta',
+ other: '{{count}} let'
+ },
+
+ overXYears: {
+ one: 'več kot {{count}} leto',
+ two: 'več kot {{count}} leti',
+ few: 'več kot {{count}} leta',
+ other: 'več kot {{count}} let'
+ },
+
+ almostXYears: {
+ one: 'skoraj {{count}} leto',
+ two: 'skoraj {{count}} leti',
+ few: 'skoraj {{count}} leta',
+ other: 'skoraj {{count}} let'
+ }
+}
+
+var distanceInWordsLocalePast = {
+ lessThanXSeconds: {
+ one: 'manj kot {{count}} sekundo',
+ two: 'manj kot {{count}} sekundama',
+ few: 'manj kot {{count}} sekundami',
+ other: 'manj kot {{count}} sekundami'
+ },
+
+ xSeconds: {
+ one: '{{count}} sekundo',
+ two: '{{count}} sekundama',
+ few: '{{count}} sekundami',
+ other: '{{count}} sekundami'
+ },
+
+ halfAMinute: 'pol minute',
+
+ lessThanXMinutes: {
+ one: 'manj kot {{count}} minuto',
+ two: 'manj kot {{count}} minutama',
+ few: 'manj kot {{count}} minutami',
+ other: 'manj kot {{count}} minutami'
+ },
+
+ xMinutes: {
+ one: '{{count}} minuto',
+ two: '{{count}} minutama',
+ few: '{{count}} minutami',
+ other: '{{count}} minutami'
+ },
+
+ aboutXHours: {
+ one: 'približno {{count}} uro',
+ two: 'približno {{count}} urama',
+ few: 'približno {{count}} urami',
+ other: 'približno {{count}} urami'
+ },
+
+ xHours: {
+ one: '{{count}} uro',
+ two: '{{count}} urama',
+ few: '{{count}} urami',
+ other: '{{count}} urami'
+ },
+
+ xDays: {
+ one: '{{count}} dnem',
+ two: '{{count}} dnevoma',
+ few: '{{count}} dnevi',
+ other: '{{count}} dnevi'
+ },
+
+ aboutXMonths: {
+ one: 'približno {{count}} mesecem',
+ two: 'približno {{count}} mesecema',
+ few: 'približno {{count}} meseci',
+ other: 'približno {{count}} meseci'
+ },
+
+ xMonths: {
+ one: '{{count}} mesecem',
+ two: '{{count}} mesecema',
+ few: '{{count}} meseci',
+ other: '{{count}} meseci'
+ },
+
+ aboutXYears: {
+ one: 'približno {{count}} letom',
+ two: 'približno {{count}} letoma',
+ few: 'približno {{count}} leti',
+ other: 'približno {{count}} leti'
+ },
+
+ xYears: {
+ one: '{{count}} letom',
+ two: '{{count}} letoma',
+ few: '{{count}} leti',
+ other: '{{count}} leti'
+ },
+
+ overXYears: {
+ one: 'več kot {{count}} letom',
+ two: 'več kot {{count}} letoma',
+ few: 'več kot {{count}} leti',
+ other: 'več kot {{count}} leti'
+ },
+
+ almostXYears: {
+ one: 'skoraj {{count}} letom',
+ two: 'skoraj {{count}} letoma',
+ few: 'skoraj {{count}} leti',
+ other: 'skoraj {{count}} leti'
+ }
+}
+
+var distanceInWordsLocaleFuture = {
+ lessThanXSeconds: {
+ one: 'manj kot {{count}} sekundo',
+ two: 'manj kot {{count}} sekundi',
+ few: 'manj kot {{count}} sekunde',
+ other: 'manj kot {{count}} sekund'
+ },
+
+ xSeconds: {
+ one: '{{count}} sekundo',
+ two: '{{count}} sekundi',
+ few: '{{count}} sekunde',
+ other: '{{count}} sekund'
+ },
+
+ halfAMinute: 'pol minute',
+
+ lessThanXMinutes: {
+ one: 'manj kot {{count}} minuto',
+ two: 'manj kot {{count}} minuti',
+ few: 'manj kot {{count}} minute',
+ other: 'manj kot {{count}} minut'
+ },
+
+ xMinutes: {
+ one: '{{count}} minuto',
+ two: '{{count}} minuti',
+ few: '{{count}} minute',
+ other: '{{count}} minut'
+ },
+
+ aboutXHours: {
+ one: 'približno {{count}} uro',
+ two: 'približno {{count}} uri',
+ few: 'približno {{count}} ure',
+ other: 'približno {{count}} ur'
+ },
+
+ xHours: {
+ one: '{{count}} uro',
+ two: '{{count}} uri',
+ few: '{{count}} ure',
+ other: '{{count}} ur'
+ },
+
+ xDays: {
+ one: '{{count}} dan',
+ two: '{{count}} dni',
+ few: '{{count}} dni',
+ other: '{{count}} dni'
+ },
+
+ aboutXMonths: {
+ one: 'približno {{count}} mesec',
+ two: 'približno {{count}} meseca',
+ few: 'približno {{count}} mesece',
+ other: 'približno {{count}} mesecev'
+ },
+
+ xMonths: {
+ one: '{{count}} mesec',
+ two: '{{count}} meseca',
+ few: '{{count}} mesece',
+ other: '{{count}} mesecev'
+ },
+
+ aboutXYears: {
+ one: 'približno {{count}} leto',
+ two: 'približno {{count}} leti',
+ few: 'približno {{count}} leta',
+ other: 'približno {{count}} let'
+ },
+
+ xYears: {
+ one: '{{count}} leto',
+ two: '{{count}} leti',
+ few: '{{count}} leta',
+ other: '{{count}} let'
+ },
+
+ overXYears: {
+ one: 'več kot {{count}} leto',
+ two: 'več kot {{count}} leti',
+ few: 'več kot {{count}} leta',
+ other: 'več kot {{count}} let'
+ },
+
+ almostXYears: {
+ one: 'skoraj {{count}} leto',
+ two: 'skoraj {{count}} leti',
+ few: 'skoraj {{count}} leta',
+ other: 'skoraj {{count}} let'
+ }
+}
+
+function getFormFromCount(count) {
+ switch (count % 100) {
+ case 1:
+ return 'one'
+ case 2:
+ return 'two'
+ case 3:
+ case 4:
+ return 'few'
+ default:
+ return 'other'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var localeObject = distanceInWordsLocale
+ var result = ''
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ localeObject = distanceInWordsLocaleFuture
+ result += 'čez '
+ } else {
+ localeObject = distanceInWordsLocalePast
+ result += 'pred '
+ }
+ }
+
+ if (typeof localeObject[token] === 'string') {
+ result += localeObject[token]
+ } else {
+ var form = getFormFromCount(count)
+ result += localeObject[token][form].replace('{{count}}', count)
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/sl/_lib/formatLong/index.js b/date-fns/src/locale/sl/_lib/formatLong/index.js
new file mode 100644
index 0000000..eff948a
--- /dev/null
+++ b/date-fns/src/locale/sl/_lib/formatLong/index.js
@@ -0,0 +1,39 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, dd. MMMM y',
+ long: 'dd. MMMM y',
+ medium: 'd. MMM y',
+ short: 'd. MM. yy'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/sl/_lib/formatRelative/index.js b/date-fns/src/locale/sl/_lib/formatRelative/index.js
new file mode 100644
index 0000000..2d25a1b
--- /dev/null
+++ b/date-fns/src/locale/sl/_lib/formatRelative/index.js
@@ -0,0 +1,44 @@
+var formatRelativeLocale = {
+ lastWeek: function(date) {
+ var day = date.getUTCDay()
+
+ switch (day) {
+ case 0:
+ return "'prejšnjo nedeljo ob' p"
+ case 3:
+ return "'prejšnjo sredo ob' p"
+ case 6:
+ return "'prejšnjo soboto ob' p"
+ default:
+ return "'prejšnji' EEEE 'ob' p"
+ }
+ },
+ yesterday: "'včeraj ob' p",
+ today: "'danes ob' p",
+ tomorrow: "'jutri ob' p",
+ nextWeek: function(date) {
+ var day = date.getUTCDay()
+
+ switch (day) {
+ case 0:
+ return "'naslednjo nedeljo ob' p"
+ case 3:
+ return "'naslednjo sredo ob' p"
+ case 6:
+ return "'naslednjo soboto ob' p"
+ default:
+ return "'naslednji' EEEE 'ob' p"
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, _baseDate, _options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/sl/_lib/localize/index.js b/date-fns/src/locale/sl/_lib/localize/index.js
new file mode 100644
index 0000000..e4d42c8
--- /dev/null
+++ b/date-fns/src/locale/sl/_lib/localize/index.js
@@ -0,0 +1,162 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return String(number).concat('.')
+}
+
+var eraValues = {
+ narrow: ['pr. n. št.', 'po n. št.'],
+ abbreviated: ['pr. n. št.', 'po n. št.'],
+ wide: ['pred našim štetjem', 'po našem štetju']
+}
+
+var monthValues = {
+ narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],
+ abbreviated: [
+ 'jan.',
+ 'feb.',
+ 'mar.',
+ 'apr.',
+ 'maj',
+ 'jun.',
+ 'jul.',
+ 'avg.',
+ 'sep.',
+ 'okt.',
+ 'nov.',
+ 'dec.'
+ ],
+ wide: [
+ 'januar',
+ 'februar',
+ 'marec',
+ 'april',
+ 'maj',
+ 'junij',
+ 'julij',
+ 'avgust',
+ 'september',
+ 'oktober',
+ 'november',
+ 'december'
+ ]
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1. čet.', '2. čet.', '3. čet.', '4. čet.'],
+ wide: ['1. četrtletje', '2. četrtletje', '3. četrtletje', '4. četrtletje']
+}
+
+var dayValues = {
+ narrow: ['n', 'p', 't', 's', 'č', 'p', 's'],
+ short: ['ned.', 'pon.', 'tor.', 'sre.', 'čet.', 'pet.', 'sob.'],
+ abbreviated: ['ned.', 'pon.', 'tor.', 'sre.', 'čet.', 'pet.', 'sob.'],
+ wide: [
+ 'nedelja',
+ 'ponedeljek',
+ 'torek',
+ 'sreda',
+ 'četrtek',
+ 'petek',
+ 'sobota'
+ ]
+}
+
+var dayPeriodValuesStandalone = {
+ narrow: {
+ am: 'd',
+ pm: 'p',
+ midnight: '24.00',
+ noon: '12.00',
+ morning: 'j',
+ afternoon: 'p',
+ evening: 'v',
+ night: 'n'
+ },
+ abbreviated: {
+ am: 'dop.',
+ pm: 'pop.',
+ midnight: 'poln.',
+ noon: 'pold.',
+ morning: 'jut.',
+ afternoon: 'pop.',
+ evening: 'več.',
+ night: 'noč'
+ },
+ wide: {
+ am: 'dop.',
+ pm: 'pop.',
+ midnight: 'polnoč',
+ noon: 'poldne',
+ morning: 'jutro',
+ afternoon: 'popoldne',
+ evening: 'večer',
+ night: 'noč'
+ }
+}
+
+var dayPeriodValuesFormatting = {
+ narrow: {
+ am: 'd',
+ pm: 'p',
+ midnight: '24.00',
+ noon: '12.00',
+ morning: 'zj',
+ afternoon: 'p',
+ evening: 'zv',
+ night: 'po'
+ },
+ abbreviated: {
+ am: 'dop.',
+ pm: 'pop.',
+ midnight: 'opoln.',
+ noon: 'opold.',
+ morning: 'zjut.',
+ afternoon: 'pop.',
+ evening: 'zveč.',
+ night: 'ponoči'
+ },
+ wide: {
+ am: 'dop.',
+ pm: 'pop.',
+ midnight: 'opolnoči',
+ noon: 'opoldne',
+ morning: 'zjutraj',
+ afternoon: 'popoldan',
+ evening: 'zvečer',
+ night: 'ponoči'
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValuesStandalone,
+ defaultWidth: 'wide',
+ formattingValues: dayPeriodValuesFormatting,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/sl/_lib/match/index.js b/date-fns/src/locale/sl/_lib/match/index.js
new file mode 100644
index 0000000..f83308a
--- /dev/null
+++ b/date-fns/src/locale/sl/_lib/match/index.js
@@ -0,0 +1,155 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\./i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ abbreviated: /^(pr\. n\. št\.|po n\. št\.)/i,
+ wide: /^(pred Kristusom|pred na[sš]im [sš]tetjem|po Kristusu|po na[sš]em [sš]tetju|na[sš]ega [sš]tetja)/i
+}
+var parseEraPatterns = {
+ any: [/^pr/i, /^(po|na[sš]em)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234]\.\s?[čc]et\.?/i,
+ wide: /^[1234]\. [čc]etrtletje/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan\.|feb\.|mar\.|apr\.|maj|jun\.|jul\.|avg\.|sep\.|okt\.|nov\.|dec\.)/i,
+ wide: /^(januar|februar|marec|april|maj|junij|julij|avgust|september|oktober|november|december)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ abbreviated: [
+ /^ja/i,
+ /^fe/i,
+ /^mar/i,
+ /^ap/i,
+ /^maj/i,
+ /^jun/i,
+ /^jul/i,
+ /^av/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ wide: [
+ /^ja/i,
+ /^fe/i,
+ /^mar/i,
+ /^ap/i,
+ /^maj/i,
+ /^jun/i,
+ /^jul/i,
+ /^av/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[nptsčc]/i,
+ short: /^(ned\.|pon\.|tor\.|sre\.|[cč]et\.|pet\.|sob\.)/i,
+ abbreviated: /^(ned\.|pon\.|tor\.|sre\.|[cč]et\.|pet\.|sob\.)/i,
+ wide: /^(nedelja|ponedeljek|torek|sreda|[cč]etrtek|petek|sobota)/i
+}
+var parseDayPatterns = {
+ narrow: [/^n/i, /^p/i, /^t/i, /^s/i, /^[cč]/i, /^p/i, /^s/i],
+ any: [/^n/i, /^po/i, /^t/i, /^sr/i, /^[cč]/i, /^pe/i, /^so/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(d|po?|z?v|n|z?j|24\.00|12\.00)/i,
+ any: /^(dop\.|pop\.|o?poln(\.|o[cč]i?)|o?pold(\.|ne)|z?ve[cč](\.|er)|(po)?no[cč]i?|popold(ne|an)|jut(\.|ro)|zjut(\.|raj))/i
+}
+var parseDayPeriodPatterns = {
+ narrow: {
+ am: /^d/i,
+ pm: /^p/i,
+ midnight: /^24/i,
+ noon: /^12/i,
+ morning: /^(z?j)/i,
+ afternoon: /^p/i,
+ evening: /^(z?v)/i,
+ night: /^(n|po)/i
+ },
+ any: {
+ am: /^dop\./i,
+ pm: /^pop\./i,
+ midnight: /^o?poln/i,
+ noon: /^o?pold/i,
+ morning: /j/i,
+ afternoon: /^pop\./i,
+ evening: /^z?ve/i,
+ night: /(po)?no/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'wide'
+ }),
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/sl/index.d.ts b/date-fns/src/locale/sl/index.d.ts
new file mode 100644
index 0000000..fbe964a
--- /dev/null
+++ b/date-fns/src/locale/sl/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { sl } from 'date-fns/locale'
+export default sl
diff --git a/date-fns/src/locale/sl/index.js b/date-fns/src/locale/sl/index.js
new file mode 100644
index 0000000..61ed2a7
--- /dev/null
+++ b/date-fns/src/locale/sl/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Slovenian locale.
+ * @language Slovenian
+ * @iso-639-2 slv
+ * @author Adam Stradovnik [@Neoglyph]{@link https://github.com/Neoglyph}
+ * @author Mato Žgajner [@mzgajner]{@link https://github.com/mzgajner}
+ */
+var locale = {
+ code: 'sl',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/sl/index.js.flow b/date-fns/src/locale/sl/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/sl/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/sl/snapshot.md b/date-fns/src/locale/sl/snapshot.md
new file mode 100644
index 0000000..495f479
--- /dev/null
+++ b/date-fns/src/locale/sl/snapshot.md
@@ -0,0 +1,304 @@
+# Slovenian (sl) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1. čet. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. čet. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. četrtletje | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. četrtletje | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1. čet. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. čet. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. četrtletje | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. četrtletje | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julij | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | julij | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | f | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | j | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | ponedeljek | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | petek | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | ponedeljek | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | petek | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | ponedeljek | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | petek | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | ponedeljek | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | petek | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | pon. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | pet. | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | d | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | d | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | dop. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | d | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | d | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | zjut. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | zveč. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ponoči | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | zjut. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | zveč. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ponoči | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | zjut. | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pop. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | zveč. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ponoči | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | zjutraj | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popoldan | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | zvečer | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ponoči | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | zj | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | zv | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | po | 2019-02-11T12:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11. 02. 87 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 05. 53 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. feb. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | sreda, 11. februar 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | nedelja, 29. maj 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11. 02. 87 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 05. 53 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. feb. 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. februar 1987 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | sreda, 11. februar 1987 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | nedelja, 29. maj 1453 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------- | ---------------------- | ------------------------ |
+| 2006-01-01T00:00:00.000Z | približno 6 let | približno 6 let | čez približno 6 let |
+| 2005-01-01T00:00:00.000Z | približno 5 let | približno 5 let | čez približno 5 let |
+| 2004-01-01T00:00:00.000Z | približno 4 leta | približno 4 leta | čez približno 4 leta |
+| 2003-01-01T00:00:00.000Z | približno 3 leta | približno 3 leta | čez približno 3 leta |
+| 2002-01-01T00:00:00.000Z | približno 2 leti | približno 2 leti | čez približno 2 leti |
+| 2001-06-01T00:00:00.000Z | več kot 1 leto | več kot 1 leto | čez več kot 1 leto |
+| 2001-02-01T00:00:00.000Z | približno 1 leto | približno 1 leto | čez približno 1 leto |
+| 2001-01-01T00:00:00.000Z | približno 1 leto | približno 1 leto | čez približno 1 leto |
+| 2000-06-01T00:00:00.000Z | 5 mesecev | 5 mesecev | čez 5 mesecev |
+| 2000-03-01T00:00:00.000Z | 2 meseca | 2 meseca | čez 2 meseca |
+| 2000-02-01T00:00:00.000Z | približno 1 mesec | približno 1 mesec | čez približno 1 mesec |
+| 2000-01-15T00:00:00.000Z | 14 dni | 14 dni | čez 14 dni |
+| 2000-01-02T00:00:00.000Z | 1 dan | 1 dan | čez 1 dan |
+| 2000-01-01T06:00:00.000Z | približno 6 ur | približno 6 ur | čez približno 6 ur |
+| 2000-01-01T01:00:00.000Z | približno 1 ura | približno 1 ura | čez približno 1 uro |
+| 2000-01-01T00:45:00.000Z | približno 1 ura | približno 1 ura | čez približno 1 uro |
+| 2000-01-01T00:30:00.000Z | 30 minut | 30 minut | čez 30 minut |
+| 2000-01-01T00:15:00.000Z | 15 minut | 15 minut | čez 15 minut |
+| 2000-01-01T00:01:00.000Z | 1 minuta | 1 minuta | čez 1 minuto |
+| 2000-01-01T00:00:25.000Z | manj kot 1 minuta | pol minute | čez manj kot 1 minuto |
+| 2000-01-01T00:00:15.000Z | manj kot 1 minuta | manj kot 20 sekund | čez manj kot 1 minuto |
+| 2000-01-01T00:00:05.000Z | manj kot 1 minuta | manj kot 10 sekund | čez manj kot 1 minuto |
+| 2000-01-01T00:00:00.000Z | manj kot 1 minuta | manj kot 5 sekund | pred manj kot 1 minuto |
+| 1999-12-31T23:59:55.000Z | manj kot 1 minuta | manj kot 10 sekund | pred manj kot 1 minuto |
+| 1999-12-31T23:59:45.000Z | manj kot 1 minuta | manj kot 20 sekund | pred manj kot 1 minuto |
+| 1999-12-31T23:59:35.000Z | manj kot 1 minuta | pol minute | pred manj kot 1 minuto |
+| 1999-12-31T23:59:00.000Z | 1 minuta | 1 minuta | pred 1 minuto |
+| 1999-12-31T23:45:00.000Z | 15 minut | 15 minut | pred 15 minutami |
+| 1999-12-31T23:30:00.000Z | 30 minut | 30 minut | pred 30 minutami |
+| 1999-12-31T23:15:00.000Z | približno 1 ura | približno 1 ura | pred približno 1 uro |
+| 1999-12-31T23:00:00.000Z | približno 1 ura | približno 1 ura | pred približno 1 uro |
+| 1999-12-31T18:00:00.000Z | približno 6 ur | približno 6 ur | pred približno 6 urami |
+| 1999-12-30T00:00:00.000Z | 2 dni | 2 dni | pred 2 dnevoma |
+| 1999-12-15T00:00:00.000Z | 17 dni | 17 dni | pred 17 dnevi |
+| 1999-12-01T00:00:00.000Z | približno 1 mesec | približno 1 mesec | pred približno 1 mesecem |
+| 1999-11-01T00:00:00.000Z | 2 meseca | 2 meseca | pred 2 mesecema |
+| 1999-06-01T00:00:00.000Z | 7 mesecev | 7 mesecev | pred 7 meseci |
+| 1999-01-01T00:00:00.000Z | približno 1 leto | približno 1 leto | pred približno 1 letom |
+| 1998-12-01T00:00:00.000Z | približno 1 leto | približno 1 leto | pred približno 1 letom |
+| 1998-06-01T00:00:00.000Z | več kot 1 leto | več kot 1 leto | pred več kot 1 letom |
+| 1998-01-01T00:00:00.000Z | približno 2 leti | približno 2 leti | pred približno 2 letoma |
+| 1997-01-01T00:00:00.000Z | približno 3 leta | približno 3 leta | pred približno 3 leti |
+| 1996-01-01T00:00:00.000Z | približno 4 leta | približno 4 leta | pred približno 4 leti |
+| 1995-01-01T00:00:00.000Z | približno 5 let | približno 5 let | pred približno 5 leti |
+| 1994-01-01T00:00:00.000Z | približno 6 let | približno 6 let | pred približno 6 leti |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 let | čez 6 let | 52608 ur |
+| 2005-01-01T00:00:00.000Z | 5 let | čez 5 let | 43848 ur |
+| 2004-01-01T00:00:00.000Z | 4 leta | čez 4 leta | 35064 ur |
+| 2003-01-01T00:00:00.000Z | 3 leta | čez 3 leta | 26304 ure |
+| 2002-01-01T00:00:00.000Z | 2 leti | čez 2 leti | 17544 ur |
+| 2001-06-01T00:00:00.000Z | 1 leto | čez 1 leto | 12408 ur |
+| 2001-02-01T00:00:00.000Z | 1 leto | čez 1 leto | 9528 ur |
+| 2001-01-01T00:00:00.000Z | 1 leto | čez 1 leto | 8784 ur |
+| 2000-06-01T00:00:00.000Z | 5 mesecev | čez 5 mesecev | 3648 ur |
+| 2000-03-01T00:00:00.000Z | 2 meseca | čez 2 meseca | 1440 ur |
+| 2000-02-01T00:00:00.000Z | 1 mesec | čez 1 mesec | 744 ur |
+| 2000-01-15T00:00:00.000Z | 14 dni | čez 14 dni | 336 ur |
+| 2000-01-02T00:00:00.000Z | 1 dan | čez 1 dan | 24 ur |
+| 2000-01-01T06:00:00.000Z | 6 ur | čez 6 ur | 6 ur |
+| 2000-01-01T01:00:00.000Z | 1 ura | čez 1 uro | 1 ura |
+| 2000-01-01T00:45:00.000Z | 45 minut | čez 45 minut | 1 ura |
+| 2000-01-01T00:30:00.000Z | 30 minut | čez 30 minut | 1 ura |
+| 2000-01-01T00:15:00.000Z | 15 minut | čez 15 minut | 0 ur |
+| 2000-01-01T00:01:00.000Z | 1 minuta | čez 1 minuto | 0 ur |
+| 2000-01-01T00:00:25.000Z | 25 sekund | čez 25 sekund | 0 ur |
+| 2000-01-01T00:00:15.000Z | 15 sekund | čez 15 sekund | 0 ur |
+| 2000-01-01T00:00:05.000Z | 5 sekund | čez 5 sekund | 0 ur |
+| 2000-01-01T00:00:00.000Z | 0 sekund | pred 0 sekundami | 0 ur |
+| 1999-12-31T23:59:55.000Z | 5 sekund | pred 5 sekundami | 0 ur |
+| 1999-12-31T23:59:45.000Z | 15 sekund | pred 15 sekundami | 0 ur |
+| 1999-12-31T23:59:35.000Z | 25 sekund | pred 25 sekundami | 0 ur |
+| 1999-12-31T23:59:00.000Z | 1 minuta | pred 1 minuto | 0 ur |
+| 1999-12-31T23:45:00.000Z | 15 minut | pred 15 minutami | 0 ur |
+| 1999-12-31T23:30:00.000Z | 30 minut | pred 30 minutami | 1 ura |
+| 1999-12-31T23:15:00.000Z | 45 minut | pred 45 minutami | 1 ura |
+| 1999-12-31T23:00:00.000Z | 1 ura | pred 1 uro | 1 ura |
+| 1999-12-31T18:00:00.000Z | 6 ur | pred 6 urami | 6 ur |
+| 1999-12-30T00:00:00.000Z | 2 dni | pred 2 dnevoma | 48 ur |
+| 1999-12-15T00:00:00.000Z | 17 dni | pred 17 dnevi | 408 ur |
+| 1999-12-01T00:00:00.000Z | 1 mesec | pred 1 mesecem | 744 ur |
+| 1999-11-01T00:00:00.000Z | 2 meseca | pred 2 mesecema | 1464 ur |
+| 1999-06-01T00:00:00.000Z | 7 mesecev | pred 7 meseci | 5136 ur |
+| 1999-01-01T00:00:00.000Z | 1 leto | pred 1 letom | 8760 ur |
+| 1998-12-01T00:00:00.000Z | 1 leto | pred 1 letom | 9504 ure |
+| 1998-06-01T00:00:00.000Z | 2 leti | pred 2 letoma | 13896 ur |
+| 1998-01-01T00:00:00.000Z | 2 leti | pred 2 letoma | 17520 ur |
+| 1997-01-01T00:00:00.000Z | 3 leta | pred 3 leti | 26280 ur |
+| 1996-01-01T00:00:00.000Z | 4 leta | pred 4 leti | 35064 ur |
+| 1995-01-01T00:00:00.000Z | 5 let | pred 5 leti | 43824 ur |
+| 1994-01-01T00:00:00.000Z | 6 let | pred 6 leti | 52584 ur |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------------- |
+| 2000-01-10T00:00:00.000Z | 10. 01. 00 |
+| 2000-01-05T00:00:00.000Z | naslednjo sredo ob 00:00 |
+| 2000-01-02T00:00:00.000Z | jutri ob 00:00 |
+| 2000-01-01T00:00:00.000Z | danes ob 00:00 |
+| 1999-12-31T00:00:00.000Z | včeraj ob 00:00 |
+| 1999-12-27T00:00:00.000Z | prejšnji ponedeljek ob 00:00 |
+| 1999-12-21T00:00:00.000Z | 21. 12. 99 |
diff --git a/date-fns/src/locale/sq/_lib/formatDistance/index.js b/date-fns/src/locale/sq/_lib/formatDistance/index.js
new file mode 100644
index 0000000..ecd01ff
--- /dev/null
+++ b/date-fns/src/locale/sq/_lib/formatDistance/index.js
@@ -0,0 +1,86 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'më pak se një sekondë',
+ other: 'më pak se {{count}} sekonda'
+ },
+ xSeconds: {
+ one: '1 sekondë',
+ other: '{{count}} sekonda'
+ },
+ halfAMinute: 'gjysëm minuti',
+ lessThanXMinutes: {
+ one: 'më pak se një minute',
+ other: 'më pak se {{count}} minuta'
+ },
+ xMinutes: {
+ one: '1 minutë',
+ other: '{{count}} minuta'
+ },
+ aboutXHours: {
+ one: 'rreth 1 orë',
+ other: 'rreth {{count}} orë'
+ },
+ xHours: {
+ one: '1 orë',
+ other: '{{count}} orë'
+ },
+ xDays: {
+ one: '1 ditë',
+ other: '{{count}} ditë'
+ },
+ aboutXWeeks: {
+ one: 'rreth 1 javë',
+ other: 'rreth {{count}} javë'
+ },
+ xWeeks: {
+ one: '1 javë',
+ other: '{{count}} javë'
+ },
+ aboutXMonths: {
+ one: 'rreth 1 muaj',
+ other: 'rreth {{count}} muaj'
+ },
+ xMonths: {
+ one: '1 muaj',
+ other: '{{count}} muaj'
+ },
+ aboutXYears: {
+ one: 'rreth 1 vit',
+ other: 'rreth {{count}} vite'
+ },
+ xYears: {
+ one: '1 vit',
+ other: '{{count}} vite'
+ },
+ overXYears: {
+ one: 'mbi 1 vit',
+ other: 'mbi {{count}} vite'
+ },
+ almostXYears: {
+ one: 'pothuajse 1 vit',
+ other: 'pothuajse {{count}} vite'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'në ' + result
+ } else {
+ return result + ' më parë'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/sq/_lib/formatLong/index.js b/date-fns/src/locale/sq/_lib/formatLong/index.js
new file mode 100644
index 0000000..c83c5f6
--- /dev/null
+++ b/date-fns/src/locale/sq/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'MM/dd/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'në' {{time}}",
+ long: "{{date}} 'në' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/sq/_lib/formatRelative/index.js b/date-fns/src/locale/sq/_lib/formatRelative/index.js
new file mode 100644
index 0000000..1a5792b
--- /dev/null
+++ b/date-fns/src/locale/sq/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'të' eeee 'e shkuar në' p",
+ yesterday: "'dje në' p",
+ today: "'sot në' p",
+ tomorrow: "'nesër në' p",
+ nextWeek: "eeee 'at' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/sq/_lib/localize/index.js b/date-fns/src/locale/sq/_lib/localize/index.js
new file mode 100644
index 0000000..f182f29
--- /dev/null
+++ b/date-fns/src/locale/sq/_lib/localize/index.js
@@ -0,0 +1,181 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['P', 'M'],
+ abbreviated: ['PK', 'MK'],
+ wide: ['Para Krishtit', 'Mbas Krishtit']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['4-mujori I', '4-mujori II', '4-mujori III', '4-mujori IV']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['J', 'S', 'M', 'P', 'M', 'Q', 'K', 'G', 'S', 'T', 'N', 'D'],
+ abbreviated: [
+ 'Jan',
+ 'Shk',
+ 'Mar',
+ 'Pri',
+ 'Maj',
+ 'Qer',
+ 'Kor',
+ 'Gus',
+ 'Sht',
+ 'Tet',
+ 'Nën',
+ 'Dhj'
+ ],
+ wide: [
+ 'Janar',
+ 'Shkurt',
+ 'Mars',
+ 'Prill',
+ 'Maj',
+ 'Qershor',
+ 'Korrik',
+ 'Gusht',
+ 'Shtator',
+ 'Tetor',
+ 'Nëntor',
+ 'Dhjetor'
+ ]
+}
+
+var dayValues = {
+ narrow: ['D', 'H', 'M', 'M', 'E', 'P', 'S'],
+ short: ['Di', 'Hë', 'Ma', 'Më', 'En', 'Pr', 'Sh'],
+ abbreviated: ['Die', 'Hën', 'Mar', 'Mër', 'Enj', 'Pre', 'Sht'],
+ wide: ['Dielë', 'Hënë', 'Martë', 'Mërkurë', 'Enjte', 'Premte', 'Shtunë']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'p',
+ pm: 'm',
+ midnight: 'm',
+ noon: 'd',
+ morning: 'mëngjes',
+ afternoon: 'dite',
+ evening: 'mbrëmje',
+ night: 'natë'
+ },
+ abbreviated: {
+ am: 'PD',
+ pm: 'MD',
+ midnight: 'mesnëtë',
+ noon: 'drek',
+ morning: 'mëngjes',
+ afternoon: 'mbasdite',
+ evening: 'mbrëmje',
+ night: 'natë'
+ },
+ wide: {
+ am: 'p.d.',
+ pm: 'm.d.',
+ midnight: 'mesnëtë',
+ noon: 'drek',
+ morning: 'mëngjes',
+ afternoon: 'mbasdite',
+ evening: 'mbrëmje',
+ night: 'natë'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'p',
+ pm: 'm',
+ midnight: 'm',
+ noon: 'd',
+ morning: 'në mëngjes',
+ afternoon: 'në mbasdite',
+ evening: 'në mbrëmje',
+ night: 'në mesnatë'
+ },
+ abbreviated: {
+ am: 'PD',
+ pm: 'MD',
+ midnight: 'mesnatë',
+ noon: 'drek',
+ morning: 'në mëngjes',
+ afternoon: 'në mbasdite',
+ evening: 'në mbrëmje',
+ night: 'në mesnatë'
+ },
+ wide: {
+ am: 'p.d.',
+ pm: 'm.d.',
+ midnight: 'mesnatë',
+ noon: 'drek',
+ morning: 'në mëngjes',
+ afternoon: 'në mbasdite',
+ evening: 'në mbrëmje',
+ night: 'në mesnatë'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ var options = _dirtyOptions || {}
+ var unit = String(options.unit)
+
+ if (unit === 'hour') return number
+
+ if (number === 1) return number + '-rë'
+ if (number === 4) return number + 't'
+
+ return number + '-të'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/sq/_lib/match/index.js b/date-fns/src/locale/sq/_lib/match/index.js
new file mode 100644
index 0000000..85f28e8
--- /dev/null
+++ b/date-fns/src/locale/sq/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-rë|-të|t|)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(p|m)/i,
+ abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
+ wide: /^(para krishtit|mbas krishtit)/i
+}
+var parseEraPatterns = {
+ any: [/^b/i, /^(p|m)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234]-mujori (i{1,3}|iv)/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jsmpqkftnd]/i,
+ abbreviated: /^(jan|shk|mar|pri|maj|qer|kor|gus|sht|tet|nën|dhj)/i,
+ wide: /^(janar|shkurt|mars|prill|maj|qershor|korrik|gusht|shtator|tetor|nëntor|dhjetor)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^s/i,
+ /^m/i,
+ /^p/i,
+ /^m/i,
+ /^q/i,
+ /^k/i,
+ /^g/i,
+ /^s/i,
+ /^t/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ja/i,
+ /^shk/i,
+ /^mar/i,
+ /^pri/i,
+ /^maj/i,
+ /^qer/i,
+ /^kor/i,
+ /^gu/i,
+ /^sht/i,
+ /^tet/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[dhmeps]/i,
+ short: /^(di|hë|ma|më|en|pr|sh)/i,
+ abbreviated: /^(die|hën|mar|mër|enj|pre|sht)/i,
+ wide: /^(dielë|hënë|martë|mërkurë|enjte|premte|shtunë)/i
+}
+var parseDayPatterns = {
+ narrow: [/^d/i, /^h/i, /^m/i, /^m/i, /^e/i, /^p/i, /^s/i],
+ any: [/^d/i, /^h/i, /^ma/i, /^më/i, /^e/i, /^p/i, /^s/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(p|m|me|në (mëngjes|mbasdite|mbrëmje|mesnatë))/i,
+ any: /^([pm]\.?\s?d\.?|drek|në (mëngjes|mbasdite|mbrëmje|mesnatë))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^p/i,
+ pm: /^m/i,
+ midnight: /^me/i,
+ noon: /^dr/i,
+ morning: /mëngjes/i,
+ afternoon: /mbasdite/i,
+ evening: /mbrëmje/i,
+ night: /natë/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/sq/index.d.ts b/date-fns/src/locale/sq/index.d.ts
new file mode 100644
index 0000000..d361e22
--- /dev/null
+++ b/date-fns/src/locale/sq/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { sq } from 'date-fns/locale'
+export default sq
diff --git a/date-fns/src/locale/sq/index.js b/date-fns/src/locale/sq/index.js
new file mode 100644
index 0000000..7e777ea
--- /dev/null
+++ b/date-fns/src/locale/sq/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Albanian locale.
+ * @language Shqip
+ * @iso-639-2 sqi
+ * @author Ardit Dine [@arditdine]{@link https://github.com/arditdine}
+ */
+var locale = {
+ code: 'sq',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1,
+ },
+}
+
+export default locale
diff --git a/date-fns/src/locale/sq/index.js.flow b/date-fns/src/locale/sq/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/sq/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/sq/snapshot.md b/date-fns/src/locale/sq/snapshot.md
new file mode 100644
index 0000000..722d0c6
--- /dev/null
+++ b/date-fns/src/locale/sq/snapshot.md
@@ -0,0 +1,304 @@
+# Shqip (sq) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-të | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-të | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-të | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-të | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-rë | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-të | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 4-mujori I | 2019-10-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 4-mujori II | 2019-10-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-rë | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-të | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 4-mujori I | 2019-10-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 4-mujori II | 2019-10-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-të | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-të | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Shk | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Kor | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Shkurt | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Korrik | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | S | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | K | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-të | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-të | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Shk | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Kor | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Shkurt | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Korrik | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | S | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | K | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-rë | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-të | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-rë | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-të | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-të | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-të | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-të | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-të | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Hën | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pre | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Hën | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pre | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Hën | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pre | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Hënë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Premte | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Hë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-rë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-të | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Hën | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pre | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Hënë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Premte | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Hë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-rë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-të | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Hën | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pre | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Hënë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Premte | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Hë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-rë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-të | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Hën | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pre | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Hënë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Premte | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | H | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | P | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Hë | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Pr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | PD | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | MD | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | MD | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | PD | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | PD | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | MD | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | MD | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | PD | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | pd | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | md | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | md | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | pd | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | p.d. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | m.d. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | m.d. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | p.d. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | m | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | m | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | PD | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | MD | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | MD | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | PD | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | PD | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | MD | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | MD | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | PD | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | pd | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | md | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | md | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | pd | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | p.d. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | m.d. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | m.d. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | p.d. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | m | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | m | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | p | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | në mëngjes | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | në mbasdite | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | në mbrëmje | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | në mesnatë | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | në mëngjes | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | në mbasdite | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | në mbrëmje | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | në mesnatë | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | në mëngjes | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | në mbasdite | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | në mbrëmje | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | në mesnatë | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | në mëngjes | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | në mbasdite | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | në mbrëmje | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | në mesnatë | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | në mëngjes | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | në mbasdite | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | në mbrëmje | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | në mesnatë | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-rë | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-të | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-rë | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-të | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 02/11/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | Shk 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Maj 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | Shkurt 11-të, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Maj 29-të, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Mërkurë, Shkurt 11-të, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Dielë, Maj 29-të, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 MD | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 MD | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 MD | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 MD | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 MD GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 MD GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 MD GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 MD GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 02/11/1987, 12:13 MD | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453, 11:59 MD | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | Shk 11, 1987, 12:13:14 MD | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | Maj 29, 1453, 11:59:59 MD | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | Shkurt 11-të, 1987 në 12:13:14 MD GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Maj 29-të, 1453 në 11:59:59 MD GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Mërkurë, Shkurt 11-të, 1987 në 12:13:14 MD GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Dielë, Maj 29-të, 1453 në 11:59:59 MD GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------------------- | ---------------------- | ---------------------------- |
+| 2006-01-01T00:00:00.000Z | rreth 6 vite | rreth 6 vite | në rreth 6 vite |
+| 2005-01-01T00:00:00.000Z | rreth 5 vite | rreth 5 vite | në rreth 5 vite |
+| 2004-01-01T00:00:00.000Z | rreth 4 vite | rreth 4 vite | në rreth 4 vite |
+| 2003-01-01T00:00:00.000Z | rreth 3 vite | rreth 3 vite | në rreth 3 vite |
+| 2002-01-01T00:00:00.000Z | rreth 2 vite | rreth 2 vite | në rreth 2 vite |
+| 2001-06-01T00:00:00.000Z | mbi 1 vit | mbi 1 vit | në mbi 1 vit |
+| 2001-02-01T00:00:00.000Z | rreth 1 vit | rreth 1 vit | në rreth 1 vit |
+| 2001-01-01T00:00:00.000Z | rreth 1 vit | rreth 1 vit | në rreth 1 vit |
+| 2000-06-01T00:00:00.000Z | 5 muaj | 5 muaj | në 5 muaj |
+| 2000-03-01T00:00:00.000Z | 2 muaj | 2 muaj | në 2 muaj |
+| 2000-02-01T00:00:00.000Z | rreth 1 muaj | rreth 1 muaj | në rreth 1 muaj |
+| 2000-01-15T00:00:00.000Z | 14 ditë | 14 ditë | në 14 ditë |
+| 2000-01-02T00:00:00.000Z | 1 ditë | 1 ditë | në 1 ditë |
+| 2000-01-01T06:00:00.000Z | rreth 6 orë | rreth 6 orë | në rreth 6 orë |
+| 2000-01-01T01:00:00.000Z | rreth 1 orë | rreth 1 orë | në rreth 1 orë |
+| 2000-01-01T00:45:00.000Z | rreth 1 orë | rreth 1 orë | në rreth 1 orë |
+| 2000-01-01T00:30:00.000Z | 30 minuta | 30 minuta | në 30 minuta |
+| 2000-01-01T00:15:00.000Z | 15 minuta | 15 minuta | në 15 minuta |
+| 2000-01-01T00:01:00.000Z | 1 minutë | 1 minutë | në 1 minutë |
+| 2000-01-01T00:00:25.000Z | më pak se një minute | gjysëm minuti | në më pak se një minute |
+| 2000-01-01T00:00:15.000Z | më pak se një minute | më pak se 20 sekonda | në më pak se një minute |
+| 2000-01-01T00:00:05.000Z | më pak se një minute | më pak se 10 sekonda | në më pak se një minute |
+| 2000-01-01T00:00:00.000Z | më pak se një minute | më pak se 5 sekonda | më pak se një minute më parë |
+| 1999-12-31T23:59:55.000Z | më pak se një minute | më pak se 10 sekonda | më pak se një minute më parë |
+| 1999-12-31T23:59:45.000Z | më pak se një minute | më pak se 20 sekonda | më pak se një minute më parë |
+| 1999-12-31T23:59:35.000Z | më pak se një minute | gjysëm minuti | më pak se një minute më parë |
+| 1999-12-31T23:59:00.000Z | 1 minutë | 1 minutë | 1 minutë më parë |
+| 1999-12-31T23:45:00.000Z | 15 minuta | 15 minuta | 15 minuta më parë |
+| 1999-12-31T23:30:00.000Z | 30 minuta | 30 minuta | 30 minuta më parë |
+| 1999-12-31T23:15:00.000Z | rreth 1 orë | rreth 1 orë | rreth 1 orë më parë |
+| 1999-12-31T23:00:00.000Z | rreth 1 orë | rreth 1 orë | rreth 1 orë më parë |
+| 1999-12-31T18:00:00.000Z | rreth 6 orë | rreth 6 orë | rreth 6 orë më parë |
+| 1999-12-30T00:00:00.000Z | 2 ditë | 2 ditë | 2 ditë më parë |
+| 1999-12-15T00:00:00.000Z | 17 ditë | 17 ditë | 17 ditë më parë |
+| 1999-12-01T00:00:00.000Z | rreth 1 muaj | rreth 1 muaj | rreth 1 muaj më parë |
+| 1999-11-01T00:00:00.000Z | 2 muaj | 2 muaj | 2 muaj më parë |
+| 1999-06-01T00:00:00.000Z | 7 muaj | 7 muaj | 7 muaj më parë |
+| 1999-01-01T00:00:00.000Z | rreth 1 vit | rreth 1 vit | rreth 1 vit më parë |
+| 1998-12-01T00:00:00.000Z | rreth 1 vit | rreth 1 vit | rreth 1 vit më parë |
+| 1998-06-01T00:00:00.000Z | mbi 1 vit | mbi 1 vit | mbi 1 vit më parë |
+| 1998-01-01T00:00:00.000Z | rreth 2 vite | rreth 2 vite | rreth 2 vite më parë |
+| 1997-01-01T00:00:00.000Z | rreth 3 vite | rreth 3 vite | rreth 3 vite më parë |
+| 1996-01-01T00:00:00.000Z | rreth 4 vite | rreth 4 vite | rreth 4 vite më parë |
+| 1995-01-01T00:00:00.000Z | rreth 5 vite | rreth 5 vite | rreth 5 vite më parë |
+| 1994-01-01T00:00:00.000Z | rreth 6 vite | rreth 6 vite | rreth 6 vite më parë |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 vite | në 6 vite | 52608 orë |
+| 2005-01-01T00:00:00.000Z | 5 vite | në 5 vite | 43848 orë |
+| 2004-01-01T00:00:00.000Z | 4 vite | në 4 vite | 35064 orë |
+| 2003-01-01T00:00:00.000Z | 3 vite | në 3 vite | 26304 orë |
+| 2002-01-01T00:00:00.000Z | 2 vite | në 2 vite | 17544 orë |
+| 2001-06-01T00:00:00.000Z | 1 vit | në 1 vit | 12408 orë |
+| 2001-02-01T00:00:00.000Z | 1 vit | në 1 vit | 9528 orë |
+| 2001-01-01T00:00:00.000Z | 1 vit | në 1 vit | 8784 orë |
+| 2000-06-01T00:00:00.000Z | 5 muaj | në 5 muaj | 3648 orë |
+| 2000-03-01T00:00:00.000Z | 2 muaj | në 2 muaj | 1440 orë |
+| 2000-02-01T00:00:00.000Z | 1 muaj | në 1 muaj | 744 orë |
+| 2000-01-15T00:00:00.000Z | 14 ditë | në 14 ditë | 336 orë |
+| 2000-01-02T00:00:00.000Z | 1 ditë | në 1 ditë | 24 orë |
+| 2000-01-01T06:00:00.000Z | 6 orë | në 6 orë | 6 orë |
+| 2000-01-01T01:00:00.000Z | 1 orë | në 1 orë | 1 orë |
+| 2000-01-01T00:45:00.000Z | 45 minuta | në 45 minuta | 1 orë |
+| 2000-01-01T00:30:00.000Z | 30 minuta | në 30 minuta | 1 orë |
+| 2000-01-01T00:15:00.000Z | 15 minuta | në 15 minuta | 0 orë |
+| 2000-01-01T00:01:00.000Z | 1 minutë | në 1 minutë | 0 orë |
+| 2000-01-01T00:00:25.000Z | 25 sekonda | në 25 sekonda | 0 orë |
+| 2000-01-01T00:00:15.000Z | 15 sekonda | në 15 sekonda | 0 orë |
+| 2000-01-01T00:00:05.000Z | 5 sekonda | në 5 sekonda | 0 orë |
+| 2000-01-01T00:00:00.000Z | 0 sekonda | 0 sekonda më parë | 0 orë |
+| 1999-12-31T23:59:55.000Z | 5 sekonda | 5 sekonda më parë | 0 orë |
+| 1999-12-31T23:59:45.000Z | 15 sekonda | 15 sekonda më parë | 0 orë |
+| 1999-12-31T23:59:35.000Z | 25 sekonda | 25 sekonda më parë | 0 orë |
+| 1999-12-31T23:59:00.000Z | 1 minutë | 1 minutë më parë | 0 orë |
+| 1999-12-31T23:45:00.000Z | 15 minuta | 15 minuta më parë | 0 orë |
+| 1999-12-31T23:30:00.000Z | 30 minuta | 30 minuta më parë | 1 orë |
+| 1999-12-31T23:15:00.000Z | 45 minuta | 45 minuta më parë | 1 orë |
+| 1999-12-31T23:00:00.000Z | 1 orë | 1 orë më parë | 1 orë |
+| 1999-12-31T18:00:00.000Z | 6 orë | 6 orë më parë | 6 orë |
+| 1999-12-30T00:00:00.000Z | 2 ditë | 2 ditë më parë | 48 orë |
+| 1999-12-15T00:00:00.000Z | 17 ditë | 17 ditë më parë | 408 orë |
+| 1999-12-01T00:00:00.000Z | 1 muaj | 1 muaj më parë | 744 orë |
+| 1999-11-01T00:00:00.000Z | 2 muaj | 2 muaj më parë | 1464 orë |
+| 1999-06-01T00:00:00.000Z | 7 muaj | 7 muaj më parë | 5136 orë |
+| 1999-01-01T00:00:00.000Z | 1 vit | 1 vit më parë | 8760 orë |
+| 1998-12-01T00:00:00.000Z | 1 vit | 1 vit më parë | 9504 orë |
+| 1998-06-01T00:00:00.000Z | 2 vite | 2 vite më parë | 13896 orë |
+| 1998-01-01T00:00:00.000Z | 2 vite | 2 vite më parë | 17520 orë |
+| 1997-01-01T00:00:00.000Z | 3 vite | 3 vite më parë | 26280 orë |
+| 1996-01-01T00:00:00.000Z | 4 vite | 4 vite më parë | 35064 orë |
+| 1995-01-01T00:00:00.000Z | 5 vite | 5 vite më parë | 43824 orë |
+| 1994-01-01T00:00:00.000Z | 6 vite | 6 vite më parë | 52584 orë |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ---------------------------- |
+| 2000-01-10T00:00:00.000Z | 01/10/2000 |
+| 2000-01-05T00:00:00.000Z | Mërkurë at 12:00 PD |
+| 2000-01-02T00:00:00.000Z | nesër në 12:00 PD |
+| 2000-01-01T00:00:00.000Z | sot në 12:00 PD |
+| 1999-12-31T00:00:00.000Z | dje në 12:00 PD |
+| 1999-12-27T00:00:00.000Z | të Hënë e shkuar në 12:00 PD |
+| 1999-12-21T00:00:00.000Z | 12/21/1999 |
diff --git a/date-fns/src/locale/sr-Latn/_lib/formatDistance/index.js b/date-fns/src/locale/sr-Latn/_lib/formatDistance/index.js
new file mode 100644
index 0000000..e27c19d
--- /dev/null
+++ b/date-fns/src/locale/sr-Latn/_lib/formatDistance/index.js
@@ -0,0 +1,191 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: {
+ standalone: 'manje od 1 sekunde',
+ withPrepositionAgo: 'manje od 1 sekunde',
+ withPrepositionIn: 'manje od 1 sekundu'
+ },
+ dual: 'manje od {{count}} sekunde',
+ other: 'manje od {{count}} sekundi'
+ },
+
+ xSeconds: {
+ one: {
+ standalone: '1 sekunda',
+ withPrepositionAgo: '1 sekunde',
+ withPrepositionIn: '1 sekundu'
+ },
+ dual: '{{count}} sekunde',
+ other: '{{count}} sekundi'
+ },
+
+ halfAMinute: 'pola minute',
+
+ lessThanXMinutes: {
+ one: {
+ standalone: 'manje od 1 minute',
+ withPrepositionAgo: 'manje od 1 minute',
+ withPrepositionIn: 'manje od 1 minutu'
+ },
+ dual: 'manje od {{count}} minute',
+ other: 'manje od {{count}} minuta'
+ },
+
+ xMinutes: {
+ one: {
+ standalone: '1 minuta',
+ withPrepositionAgo: '1 minute',
+ withPrepositionIn: '1 minutu'
+ },
+ dual: '{{count}} minute',
+ other: '{{count}} minuta'
+ },
+
+ aboutXHours: {
+ one: {
+ standalone: 'oko 1 sat',
+ withPrepositionAgo: 'oko 1 sat',
+ withPrepositionIn: 'oko 1 sat'
+ },
+ dual: 'oko {{count}} sata',
+ other: 'oko {{count}} sati'
+ },
+
+ xHours: {
+ one: {
+ standalone: '1 sat',
+ withPrepositionAgo: '1 sat',
+ withPrepositionIn: '1 sat'
+ },
+ dual: '{{count}} sata',
+ other: '{{count}} sati'
+ },
+
+ xDays: {
+ one: {
+ standalone: '1 dan',
+ withPrepositionAgo: '1 dan',
+ withPrepositionIn: '1 dan'
+ },
+ dual: '{{count}} dana',
+ other: '{{count}} dana'
+ },
+
+ aboutXWeeks: {
+ one: {
+ standalone: 'oko 1 nedelju',
+ withPrepositionAgo: 'oko 1 nedelju',
+ withPrepositionIn: 'oko 1 nedelju'
+ },
+ dual: 'oko {{count}} nedelje',
+ other: 'oko {{count}} nedelje'
+ },
+
+ xWeeks: {
+ one: {
+ standalone: '1 nedelju',
+ withPrepositionAgo: '1 nedelju',
+ withPrepositionIn: '1 nedelju'
+ },
+ dual: '{{count}} nedelje',
+ other: '{{count}} nedelje'
+ },
+
+ aboutXMonths: {
+ one: {
+ standalone: 'oko 1 mesec',
+ withPrepositionAgo: 'oko 1 mesec',
+ withPrepositionIn: 'oko 1 mesec'
+ },
+ dual: 'oko {{count}} meseca',
+ other: 'oko {{count}} meseci'
+ },
+
+ xMonths: {
+ one: {
+ standalone: '1 mesec',
+ withPrepositionAgo: '1 mesec',
+ withPrepositionIn: '1 mesec'
+ },
+ dual: '{{count}} meseca',
+ other: '{{count}} meseci'
+ },
+
+ aboutXYears: {
+ one: {
+ standalone: 'oko 1 godinu',
+ withPrepositionAgo: 'oko 1 godinu',
+ withPrepositionIn: 'oko 1 godinu'
+ },
+ dual: 'oko {{count}} godine',
+ other: 'oko {{count}} godina'
+ },
+
+ xYears: {
+ one: {
+ standalone: '1 godina',
+ withPrepositionAgo: '1 godine',
+ withPrepositionIn: '1 godinu'
+ },
+ dual: '{{count}} godine',
+ other: '{{count}} godina'
+ },
+
+ overXYears: {
+ one: {
+ standalone: 'preko 1 godinu',
+ withPrepositionAgo: 'preko 1 godinu',
+ withPrepositionIn: 'preko 1 godinu'
+ },
+ dual: 'preko {{count}} godine',
+ other: 'preko {{count}} godina'
+ },
+
+ almostXYears: {
+ one: {
+ standalone: 'gotovo 1 godinu',
+ withPrepositionAgo: 'gotovo 1 godinu',
+ withPrepositionIn: 'gotovo 1 godinu'
+ },
+ dual: 'gotovo {{count}} godine',
+ other: 'gotovo {{count}} godina'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ result = formatDistanceLocale[token].one.withPrepositionIn
+ } else {
+ result = formatDistanceLocale[token].one.withPrepositionAgo
+ }
+ } else {
+ result = formatDistanceLocale[token].one.standalone
+ }
+ } else if (
+ count % 10 > 1 &&
+ count % 10 < 5 && // if last digit is between 2 and 4
+ String(count).substr(-2, 1) !== '1' // unless the 2nd to last digit is "1"
+ ) {
+ result = formatDistanceLocale[token].dual.replace('{{count}}', count)
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'za ' + result
+ } else {
+ return 'pre ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/sr-Latn/_lib/formatLong/index.js b/date-fns/src/locale/sr-Latn/_lib/formatLong/index.js
new file mode 100644
index 0000000..52631f4
--- /dev/null
+++ b/date-fns/src/locale/sr-Latn/_lib/formatLong/index.js
@@ -0,0 +1,39 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d. MMMM yyyy.',
+ long: 'd. MMMM yyyy.',
+ medium: 'd. MMM yy.',
+ short: 'dd. MM. yy.'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss (zzzz)',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'u' {{time}}",
+ long: "{{date}} 'u' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/sr-Latn/_lib/formatRelative/index.js b/date-fns/src/locale/sr-Latn/_lib/formatRelative/index.js
new file mode 100644
index 0000000..2d717cd
--- /dev/null
+++ b/date-fns/src/locale/sr-Latn/_lib/formatRelative/index.js
@@ -0,0 +1,44 @@
+var formatRelativeLocale = {
+ lastWeek: function(date) {
+ var day = date.getUTCDay()
+
+ switch (day) {
+ case 0:
+ return "'prošle nedelje u' p"
+ case 3:
+ return "'prošle srede u' p"
+ case 6:
+ return "'prošle subote u' p"
+ default:
+ return "'prošli' EEEE 'u' p"
+ }
+ },
+ yesterday: "'juče u' p",
+ today: "'danas u' p",
+ tomorrow: "'sutra u' p",
+ nextWeek: function(date) {
+ var day = date.getUTCDay()
+
+ switch (day) {
+ case 0:
+ return "'sledeće nedelje u' p"
+ case 3:
+ return "'sledeću sredu u' p"
+ case 6:
+ return "'sledeću subotu u' p"
+ default:
+ return "'sledeći' EEEE 'u' p"
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, _baseDate, _options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/sr-Latn/_lib/localize/index.js b/date-fns/src/locale/sr-Latn/_lib/localize/index.js
new file mode 100644
index 0000000..ea01814
--- /dev/null
+++ b/date-fns/src/locale/sr-Latn/_lib/localize/index.js
@@ -0,0 +1,222 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return String(number).concat('.')
+}
+
+var eraValues = {
+ narrow: ['pr.n.e.', 'AD'],
+ abbreviated: ['pr. Hr.', 'po. Hr.'],
+ wide: ['Pre Hrista', 'Posle Hrista']
+}
+
+var monthValues = {
+ narrow: [
+ '1.',
+ '2.',
+ '3.',
+ '4.',
+ '5.',
+ '6.',
+ '7.',
+ '8.',
+ '9.',
+ '10.',
+ '11.',
+ '12.'
+ ],
+ abbreviated: [
+ 'jan',
+ 'feb',
+ 'mar',
+ 'apr',
+ 'maj',
+ 'jun',
+ 'jul',
+ 'avg',
+ 'sep',
+ 'okt',
+ 'nov',
+ 'dec'
+ ],
+ wide: [
+ 'januar',
+ 'februar',
+ 'mart',
+ 'april',
+ 'maj',
+ 'jun',
+ 'jul',
+ 'avgust',
+ 'septembar',
+ 'oktobar',
+ 'novembar',
+ 'decembar'
+ ]
+}
+
+var formattingMonthValues = {
+ narrow: [
+ '1.',
+ '2.',
+ '3.',
+ '4.',
+ '5.',
+ '6.',
+ '7.',
+ '8.',
+ '9.',
+ '10.',
+ '11.',
+ '12.'
+ ],
+ abbreviated: [
+ 'jan',
+ 'feb',
+ 'mar',
+ 'apr',
+ 'maj',
+ 'jun',
+ 'jul',
+ 'avg',
+ 'sep',
+ 'okt',
+ 'nov',
+ 'dec'
+ ],
+ wide: [
+ 'januar',
+ 'februar',
+ 'mart',
+ 'april',
+ 'maj',
+ 'jun',
+ 'jul',
+ 'avgust',
+ 'septembar',
+ 'oktobar',
+ 'novembar',
+ 'decembar'
+ ]
+}
+
+var quarterValues = {
+ narrow: ['1.', '2.', '3.', '4.'],
+ abbreviated: ['1. kv.', '2. kv.', '3. kv.', '4. kv.'],
+ wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']
+}
+
+var dayValues = {
+ narrow: ['N', 'P', 'U', 'S', 'Č', 'P', 'S'],
+ short: ['ned', 'pon', 'uto', 'sre', 'čet', 'pet', 'sub'],
+ abbreviated: ['ned', 'pon', 'uto', 'sre', 'čet', 'pet', 'sub'],
+ wide: [
+ 'nedelja',
+ 'ponedeljak',
+ 'utorak',
+ 'sreda',
+ 'četvrtak',
+ 'petak',
+ 'subota'
+ ]
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutru',
+ afternoon: 'popodne',
+ evening: 'uveče',
+ night: 'noću'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutru',
+ afternoon: 'popodne',
+ evening: 'uveče',
+ night: 'noću'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutru',
+ afternoon: 'posle podne',
+ evening: 'uveče',
+ night: 'noću'
+ }
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutru',
+ afternoon: 'popodne',
+ evening: 'uveče',
+ night: 'noću'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutru',
+ afternoon: 'popodne',
+ evening: 'uveče',
+ night: 'noću'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'ponoć',
+ noon: 'podne',
+ morning: 'ujutru',
+ afternoon: 'posle podne',
+ evening: 'uveče',
+ night: 'noću'
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/sr-Latn/_lib/match/index.js b/date-fns/src/locale/sr-Latn/_lib/match/index.js
new file mode 100644
index 0000000..86ffce0
--- /dev/null
+++ b/date-fns/src/locale/sr-Latn/_lib/match/index.js
@@ -0,0 +1,118 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\./i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(pr\.n\.e\.|AD)/i,
+ abbreviated: /^(pr\.\s?Hr\.|po\.\s?Hr\.)/i,
+ wide: /^(Pre Hrista|pre nove ere|Posle Hrista|nova era)/i
+}
+var parseEraPatterns = {
+ any: [/^pr/i, /^(po|nova)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234]\.\s?kv\.?/i,
+ wide: /^[1234]\. kvartal/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(10|11|12|[123456789])\./i,
+ abbreviated: /^(jan|feb|mar|apr|maj|jun|jul|avg|sep|okt|nov|dec)/i,
+ wide: /^((januar|januara)|(februar|februara)|(mart|marta)|(april|aprila)|(maj|maja)|(jun|juna)|(jul|jula)|(avgust|avgusta)|(septembar|septembra)|(oktobar|oktobra)|(novembar|novembra)|(decembar|decembra))/i
+}
+var parseMonthPatterns = {
+ narrow: [/(10|11|12|[123456789])/i],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^maj/i,
+ /^jun/i,
+ /^jul/i,
+ /^avg/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[npusčc]/i,
+ short: /^(ned|pon|uto|sre|(čet|cet)|pet|sub)/i,
+ abbreviated: /^(ned|pon|uto|sre|(čet|cet)|pet|sub)/i,
+ wide: /^(nedelja|ponedeljak|utorak|sreda|(četvrtak|cetvrtak)|petak|subota)/i
+}
+var parseDayPatterns = {
+ narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
+ any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(am|pm|ponoc|ponoć|(po)?podne|uvece|uveče|noću|posle podne|ujutru)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^pono/i,
+ noon: /^pod/i,
+ morning: /jutro/i,
+ afternoon: /(posle\s|po)+podne/i,
+ evening: /(uvece|uveče)/i,
+ night: /(nocu|noću)/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/sr-Latn/index.d.ts b/date-fns/src/locale/sr-Latn/index.d.ts
new file mode 100644
index 0000000..f6313cc
--- /dev/null
+++ b/date-fns/src/locale/sr-Latn/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { srLatn } from 'date-fns/locale'
+export default srLatn
diff --git a/date-fns/src/locale/sr-Latn/index.js b/date-fns/src/locale/sr-Latn/index.js
new file mode 100644
index 0000000..63231eb
--- /dev/null
+++ b/date-fns/src/locale/sr-Latn/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Serbian latin locale.
+ * @language Serbian
+ * @iso-639-2 srp
+ * @author Igor Radivojević [@rogyvoje]{@link https://github.com/rogyvoje}
+ */
+var locale = {
+ code: 'sr-Latn',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/sr-Latn/index.js.flow b/date-fns/src/locale/sr-Latn/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/sr-Latn/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/sr-Latn/snapshot.md b/date-fns/src/locale/sr-Latn/snapshot.md
new file mode 100644
index 0000000..4b87903
--- /dev/null
+++ b/date-fns/src/locale/sr-Latn/snapshot.md
@@ -0,0 +1,304 @@
+# Serbian (sr-Latn) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1. kv. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kv. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2. | Invalid Date |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1. kv. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kv. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. kvartal | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. kvartal | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | 2. | 2019-01-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | februar | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | jul | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | 2. | 2019-01-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | ponedeljak | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | petak | Invalid Date |
+| | EEEEE | 2019-02-11T12:13:14.015Z | P | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | P | Invalid Date |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | ponedeljak | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | petak | Invalid Date |
+| | iiiii | 2019-02-11T12:13:14.015Z | P | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | P | Invalid Date |
+| | iiiiii | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | ponedeljak | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | petak | Invalid Date |
+| | eeeee | 2019-02-11T12:13:14.015Z | P | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | P | Invalid Date |
+| | eeeeee | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | ponedeljak | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | petak | Invalid Date |
+| | ccccc | 2019-02-11T12:13:14.015Z | P | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | P | Invalid Date |
+| | cccccc | 2019-02-11T12:13:14.015Z | pon | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | pet | Invalid Date |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ujutru | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popodne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uveče | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ujutru | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popodne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uveče | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ujutru | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popodne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uveče | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | ujutru | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | posle podne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uveče | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ujutru | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | popodne | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | uveče | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | noću | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11. 02. 87. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 05. 53. | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. feb 87. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 53. | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. februar 1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453. | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | sreda, 11. februar 1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | nedelja, 29. maj 1453. | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 (GMT+00:00) | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 (GMT+00:00) | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11. 02. 87. 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 05. 53. 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. feb 87. 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 53. 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. februar 1987. u 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. maj 1453. u 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | sreda, 11. februar 1987. u 12:13:14 (GMT+00:00) | Errored |
+| | | 1453-05-29T23:59:59.999Z | nedelja, 29. maj 1453. u 23:59:59 (GMT+00:00) | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------------- | ---------------------- | --------------------- |
+| 2006-01-01T00:00:00.000Z | oko 6 godina | oko 6 godina | za oko 6 godina |
+| 2005-01-01T00:00:00.000Z | oko 5 godina | oko 5 godina | za oko 5 godina |
+| 2004-01-01T00:00:00.000Z | oko 4 godine | oko 4 godine | za oko 4 godine |
+| 2003-01-01T00:00:00.000Z | oko 3 godine | oko 3 godine | za oko 3 godine |
+| 2002-01-01T00:00:00.000Z | oko 2 godine | oko 2 godine | za oko 2 godine |
+| 2001-06-01T00:00:00.000Z | preko 1 godinu | preko 1 godinu | za preko 1 godinu |
+| 2001-02-01T00:00:00.000Z | oko 1 godinu | oko 1 godinu | za oko 1 godinu |
+| 2001-01-01T00:00:00.000Z | oko 1 godinu | oko 1 godinu | za oko 1 godinu |
+| 2000-06-01T00:00:00.000Z | 5 meseci | 5 meseci | za 5 meseci |
+| 2000-03-01T00:00:00.000Z | 2 meseca | 2 meseca | za 2 meseca |
+| 2000-02-01T00:00:00.000Z | oko 1 mesec | oko 1 mesec | za oko 1 mesec |
+| 2000-01-15T00:00:00.000Z | 14 dana | 14 dana | za 14 dana |
+| 2000-01-02T00:00:00.000Z | 1 dan | 1 dan | za 1 dan |
+| 2000-01-01T06:00:00.000Z | oko 6 sati | oko 6 sati | za oko 6 sati |
+| 2000-01-01T01:00:00.000Z | oko 1 sat | oko 1 sat | za oko 1 sat |
+| 2000-01-01T00:45:00.000Z | oko 1 sat | oko 1 sat | za oko 1 sat |
+| 2000-01-01T00:30:00.000Z | 30 minuta | 30 minuta | za 30 minuta |
+| 2000-01-01T00:15:00.000Z | 15 minuta | 15 minuta | za 15 minuta |
+| 2000-01-01T00:01:00.000Z | 1 minuta | 1 minuta | za 1 minutu |
+| 2000-01-01T00:00:25.000Z | manje od 1 minute | pola minute | za manje od 1 minutu |
+| 2000-01-01T00:00:15.000Z | manje od 1 minute | manje od 20 sekundi | za manje od 1 minutu |
+| 2000-01-01T00:00:05.000Z | manje od 1 minute | manje od 10 sekundi | za manje od 1 minutu |
+| 2000-01-01T00:00:00.000Z | manje od 1 minute | manje od 5 sekundi | pre manje od 1 minute |
+| 1999-12-31T23:59:55.000Z | manje od 1 minute | manje od 10 sekundi | pre manje od 1 minute |
+| 1999-12-31T23:59:45.000Z | manje od 1 minute | manje od 20 sekundi | pre manje od 1 minute |
+| 1999-12-31T23:59:35.000Z | manje od 1 minute | pola minute | pre manje od 1 minute |
+| 1999-12-31T23:59:00.000Z | 1 minuta | 1 minuta | pre 1 minute |
+| 1999-12-31T23:45:00.000Z | 15 minuta | 15 minuta | pre 15 minuta |
+| 1999-12-31T23:30:00.000Z | 30 minuta | 30 minuta | pre 30 minuta |
+| 1999-12-31T23:15:00.000Z | oko 1 sat | oko 1 sat | pre oko 1 sat |
+| 1999-12-31T23:00:00.000Z | oko 1 sat | oko 1 sat | pre oko 1 sat |
+| 1999-12-31T18:00:00.000Z | oko 6 sati | oko 6 sati | pre oko 6 sati |
+| 1999-12-30T00:00:00.000Z | 2 dana | 2 dana | pre 2 dana |
+| 1999-12-15T00:00:00.000Z | 17 dana | 17 dana | pre 17 dana |
+| 1999-12-01T00:00:00.000Z | oko 1 mesec | oko 1 mesec | pre oko 1 mesec |
+| 1999-11-01T00:00:00.000Z | 2 meseca | 2 meseca | pre 2 meseca |
+| 1999-06-01T00:00:00.000Z | 7 meseci | 7 meseci | pre 7 meseci |
+| 1999-01-01T00:00:00.000Z | oko 1 godinu | oko 1 godinu | pre oko 1 godinu |
+| 1998-12-01T00:00:00.000Z | oko 1 godinu | oko 1 godinu | pre oko 1 godinu |
+| 1998-06-01T00:00:00.000Z | preko 1 godinu | preko 1 godinu | pre preko 1 godinu |
+| 1998-01-01T00:00:00.000Z | oko 2 godine | oko 2 godine | pre oko 2 godine |
+| 1997-01-01T00:00:00.000Z | oko 3 godine | oko 3 godine | pre oko 3 godine |
+| 1996-01-01T00:00:00.000Z | oko 4 godine | oko 4 godine | pre oko 4 godine |
+| 1995-01-01T00:00:00.000Z | oko 5 godina | oko 5 godina | pre oko 5 godina |
+| 1994-01-01T00:00:00.000Z | oko 6 godina | oko 6 godina | pre oko 6 godina |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 godina | za 6 godina | 52608 sati |
+| 2005-01-01T00:00:00.000Z | 5 godina | za 5 godina | 43848 sati |
+| 2004-01-01T00:00:00.000Z | 4 godine | za 4 godine | 35064 sata |
+| 2003-01-01T00:00:00.000Z | 3 godine | za 3 godine | 26304 sata |
+| 2002-01-01T00:00:00.000Z | 2 godine | za 2 godine | 17544 sata |
+| 2001-06-01T00:00:00.000Z | 1 godina | za 1 godinu | 12408 sati |
+| 2001-02-01T00:00:00.000Z | 1 godina | za 1 godinu | 9528 sati |
+| 2001-01-01T00:00:00.000Z | 1 godina | za 1 godinu | 8784 sata |
+| 2000-06-01T00:00:00.000Z | 5 meseci | za 5 meseci | 3648 sati |
+| 2000-03-01T00:00:00.000Z | 2 meseca | za 2 meseca | 1440 sati |
+| 2000-02-01T00:00:00.000Z | 1 mesec | za 1 mesec | 744 sata |
+| 2000-01-15T00:00:00.000Z | 14 dana | za 14 dana | 336 sati |
+| 2000-01-02T00:00:00.000Z | 1 dan | za 1 dan | 24 sata |
+| 2000-01-01T06:00:00.000Z | 6 sati | za 6 sati | 6 sati |
+| 2000-01-01T01:00:00.000Z | 1 sat | za 1 sat | 1 sat |
+| 2000-01-01T00:45:00.000Z | 45 minuta | za 45 minuta | 1 sat |
+| 2000-01-01T00:30:00.000Z | 30 minuta | za 30 minuta | 1 sat |
+| 2000-01-01T00:15:00.000Z | 15 minuta | za 15 minuta | 0 sati |
+| 2000-01-01T00:01:00.000Z | 1 minuta | za 1 minutu | 0 sati |
+| 2000-01-01T00:00:25.000Z | 25 sekundi | za 25 sekundi | 0 sati |
+| 2000-01-01T00:00:15.000Z | 15 sekundi | za 15 sekundi | 0 sati |
+| 2000-01-01T00:00:05.000Z | 5 sekundi | za 5 sekundi | 0 sati |
+| 2000-01-01T00:00:00.000Z | 0 sekundi | pre 0 sekundi | 0 sati |
+| 1999-12-31T23:59:55.000Z | 5 sekundi | pre 5 sekundi | 0 sati |
+| 1999-12-31T23:59:45.000Z | 15 sekundi | pre 15 sekundi | 0 sati |
+| 1999-12-31T23:59:35.000Z | 25 sekundi | pre 25 sekundi | 0 sati |
+| 1999-12-31T23:59:00.000Z | 1 minuta | pre 1 minute | 0 sati |
+| 1999-12-31T23:45:00.000Z | 15 minuta | pre 15 minuta | 0 sati |
+| 1999-12-31T23:30:00.000Z | 30 minuta | pre 30 minuta | 1 sat |
+| 1999-12-31T23:15:00.000Z | 45 minuta | pre 45 minuta | 1 sat |
+| 1999-12-31T23:00:00.000Z | 1 sat | pre 1 sat | 1 sat |
+| 1999-12-31T18:00:00.000Z | 6 sati | pre 6 sati | 6 sati |
+| 1999-12-30T00:00:00.000Z | 2 dana | pre 2 dana | 48 sati |
+| 1999-12-15T00:00:00.000Z | 17 dana | pre 17 dana | 408 sati |
+| 1999-12-01T00:00:00.000Z | 1 mesec | pre 1 mesec | 744 sata |
+| 1999-11-01T00:00:00.000Z | 2 meseca | pre 2 meseca | 1464 sata |
+| 1999-06-01T00:00:00.000Z | 7 meseci | pre 7 meseci | 5136 sati |
+| 1999-01-01T00:00:00.000Z | 1 godina | pre 1 godine | 8760 sati |
+| 1998-12-01T00:00:00.000Z | 1 godina | pre 1 godine | 9504 sata |
+| 1998-06-01T00:00:00.000Z | 2 godine | pre 2 godine | 13896 sati |
+| 1998-01-01T00:00:00.000Z | 2 godine | pre 2 godine | 17520 sati |
+| 1997-01-01T00:00:00.000Z | 3 godine | pre 3 godine | 26280 sati |
+| 1996-01-01T00:00:00.000Z | 4 godine | pre 4 godine | 35064 sata |
+| 1995-01-01T00:00:00.000Z | 5 godina | pre 5 godina | 43824 sata |
+| 1994-01-01T00:00:00.000Z | 6 godina | pre 6 godina | 52584 sata |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------- |
+| 2000-01-10T00:00:00.000Z | 10. 01. 00. |
+| 2000-01-05T00:00:00.000Z | sledeću sredu u 00:00 |
+| 2000-01-02T00:00:00.000Z | sutra u 00:00 |
+| 2000-01-01T00:00:00.000Z | danas u 00:00 |
+| 1999-12-31T00:00:00.000Z | juče u 00:00 |
+| 1999-12-27T00:00:00.000Z | prošli ponedeljak u 00:00 |
+| 1999-12-21T00:00:00.000Z | 21. 12. 99. |
diff --git a/date-fns/src/locale/sr/_lib/formatDistance/index.js b/date-fns/src/locale/sr/_lib/formatDistance/index.js
new file mode 100644
index 0000000..5cab16d
--- /dev/null
+++ b/date-fns/src/locale/sr/_lib/formatDistance/index.js
@@ -0,0 +1,191 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: {
+ standalone: 'мање од 1 секунде',
+ withPrepositionAgo: 'мање од 1 секунде',
+ withPrepositionIn: 'мање од 1 секунду'
+ },
+ dual: 'мање од {{count}} секунде',
+ other: 'мање од {{count}} секунди'
+ },
+
+ xSeconds: {
+ one: {
+ standalone: '1 секунда',
+ withPrepositionAgo: '1 секунде',
+ withPrepositionIn: '1 секунду'
+ },
+ dual: '{{count}} секунде',
+ other: '{{count}} секунди'
+ },
+
+ halfAMinute: 'пола минуте',
+
+ lessThanXMinutes: {
+ one: {
+ standalone: 'мање од 1 минуте',
+ withPrepositionAgo: 'мање од 1 минуте',
+ withPrepositionIn: 'мање од 1 минуту'
+ },
+ dual: 'мање од {{count}} минуте',
+ other: 'мање од {{count}} минута'
+ },
+
+ xMinutes: {
+ one: {
+ standalone: '1 минута',
+ withPrepositionAgo: '1 минуте',
+ withPrepositionIn: '1 минуту'
+ },
+ dual: '{{count}} минуте',
+ other: '{{count}} минута'
+ },
+
+ aboutXHours: {
+ one: {
+ standalone: 'око 1 сат',
+ withPrepositionAgo: 'око 1 сат',
+ withPrepositionIn: 'око 1 сат'
+ },
+ dual: 'око {{count}} сата',
+ other: 'око {{count}} сати'
+ },
+
+ xHours: {
+ one: {
+ standalone: '1 сат',
+ withPrepositionAgo: '1 сат',
+ withPrepositionIn: '1 сат'
+ },
+ dual: '{{count}} сата',
+ other: '{{count}} сати'
+ },
+
+ xDays: {
+ one: {
+ standalone: '1 дан',
+ withPrepositionAgo: '1 дан',
+ withPrepositionIn: '1 дан'
+ },
+ dual: '{{count}} дана',
+ other: '{{count}} дана'
+ },
+
+ aboutXWeeks: {
+ one: {
+ standalone: 'око 1 недељу',
+ withPrepositionAgo: 'око 1 недељу',
+ withPrepositionIn: 'око 1 недељу'
+ },
+ dual: 'око {{count}} недеље',
+ other: 'око {{count}} недеље'
+ },
+
+ xWeeks: {
+ one: {
+ standalone: '1 недељу',
+ withPrepositionAgo: '1 недељу',
+ withPrepositionIn: '1 недељу'
+ },
+ dual: '{{count}} недеље',
+ other: '{{count}} недеље'
+ },
+
+ aboutXMonths: {
+ one: {
+ standalone: 'око 1 месец',
+ withPrepositionAgo: 'око 1 месец',
+ withPrepositionIn: 'око 1 месец'
+ },
+ dual: 'око {{count}} месеца',
+ other: 'око {{count}} месеци'
+ },
+
+ xMonths: {
+ one: {
+ standalone: '1 месец',
+ withPrepositionAgo: '1 месец',
+ withPrepositionIn: '1 месец'
+ },
+ dual: '{{count}} месеца',
+ other: '{{count}} месеци'
+ },
+
+ aboutXYears: {
+ one: {
+ standalone: 'око 1 годину',
+ withPrepositionAgo: 'око 1 годину',
+ withPrepositionIn: 'око 1 годину'
+ },
+ dual: 'око {{count}} године',
+ other: 'око {{count}} година'
+ },
+
+ xYears: {
+ one: {
+ standalone: '1 година',
+ withPrepositionAgo: '1 године',
+ withPrepositionIn: '1 годину'
+ },
+ dual: '{{count}} године',
+ other: '{{count}} година'
+ },
+
+ overXYears: {
+ one: {
+ standalone: 'преко 1 годину',
+ withPrepositionAgo: 'преко 1 годину',
+ withPrepositionIn: 'преко 1 годину'
+ },
+ dual: 'преко {{count}} године',
+ other: 'преко {{count}} година'
+ },
+
+ almostXYears: {
+ one: {
+ standalone: 'готово 1 годину',
+ withPrepositionAgo: 'готово 1 годину',
+ withPrepositionIn: 'готово 1 годину'
+ },
+ dual: 'готово {{count}} године',
+ other: 'готово {{count}} година'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ result = formatDistanceLocale[token].one.withPrepositionIn
+ } else {
+ result = formatDistanceLocale[token].one.withPrepositionAgo
+ }
+ } else {
+ result = formatDistanceLocale[token].one.standalone
+ }
+ } else if (
+ count % 10 > 1 &&
+ count % 10 < 5 && // if last digit is between 2 and 4
+ String(count).substr(-2, 1) !== '1' // unless the 2nd to last digit is "1"
+ ) {
+ result = formatDistanceLocale[token].dual.replace('{{count}}', count)
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'за ' + result
+ } else {
+ return 'пре ' + result
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/sr/_lib/formatLong/index.js b/date-fns/src/locale/sr/_lib/formatLong/index.js
new file mode 100644
index 0000000..c833b99
--- /dev/null
+++ b/date-fns/src/locale/sr/_lib/formatLong/index.js
@@ -0,0 +1,39 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, d. MMMM yyyy.',
+ long: 'd. MMMM yyyy.',
+ medium: 'd. MMM yy.',
+ short: 'dd. MM. yy.'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss (zzzz)',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'у' {{time}}",
+ long: "{{date}} 'у' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/sr/_lib/formatRelative/index.js b/date-fns/src/locale/sr/_lib/formatRelative/index.js
new file mode 100644
index 0000000..3f44d8f
--- /dev/null
+++ b/date-fns/src/locale/sr/_lib/formatRelative/index.js
@@ -0,0 +1,44 @@
+var formatRelativeLocale = {
+ lastWeek: function(date) {
+ var day = date.getUTCDay()
+
+ switch (day) {
+ case 0:
+ return "'прошле недеље у' p"
+ case 3:
+ return "'прошле среде у' p"
+ case 6:
+ return "'прошле суботе у' p"
+ default:
+ return "'прошли' EEEE 'у' p"
+ }
+ },
+ yesterday: "'јуче у' p",
+ today: "'данас у' p",
+ tomorrow: "'сутра у' p",
+ nextWeek: function(date) {
+ var day = date.getUTCDay()
+
+ switch (day) {
+ case 0:
+ return "'следеће недеље у' p"
+ case 3:
+ return "'следећу среду у' p"
+ case 6:
+ return "'следећу суботу у' p"
+ default:
+ return "'следећи' EEEE 'у' p"
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, _baseDate, _options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/sr/_lib/localize/index.js b/date-fns/src/locale/sr/_lib/localize/index.js
new file mode 100644
index 0000000..538ca16
--- /dev/null
+++ b/date-fns/src/locale/sr/_lib/localize/index.js
@@ -0,0 +1,222 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return String(number).concat('.')
+}
+
+var eraValues = {
+ narrow: ['пр.н.е.', 'АД'],
+ abbreviated: ['пр. Хр.', 'по. Хр.'],
+ wide: ['Пре Христа', 'После Христа']
+}
+
+var monthValues = {
+ narrow: [
+ '1.',
+ '2.',
+ '3.',
+ '4.',
+ '5.',
+ '6.',
+ '7.',
+ '8.',
+ '9.',
+ '10.',
+ '11.',
+ '12.'
+ ],
+ abbreviated: [
+ 'јан',
+ 'феб',
+ 'мар',
+ 'апр',
+ 'мај',
+ 'јун',
+ 'јул',
+ 'авг',
+ 'сеп',
+ 'окт',
+ 'нов',
+ 'дец'
+ ],
+ wide: [
+ 'јануар',
+ 'фебруар',
+ 'март',
+ 'април',
+ 'мај',
+ 'јун',
+ 'јул',
+ 'август',
+ 'септембар',
+ 'октобар',
+ 'новембар',
+ 'децембар'
+ ]
+}
+
+var formattingMonthValues = {
+ narrow: [
+ '1.',
+ '2.',
+ '3.',
+ '4.',
+ '5.',
+ '6.',
+ '7.',
+ '8.',
+ '9.',
+ '10.',
+ '11.',
+ '12.'
+ ],
+ abbreviated: [
+ 'јан',
+ 'феб',
+ 'мар',
+ 'апр',
+ 'мај',
+ 'јун',
+ 'јул',
+ 'авг',
+ 'сеп',
+ 'окт',
+ 'нов',
+ 'дец'
+ ],
+ wide: [
+ 'јануар',
+ 'фебруар',
+ 'март',
+ 'април',
+ 'мај',
+ 'јун',
+ 'јул',
+ 'август',
+ 'септембар',
+ 'октобар',
+ 'новембар',
+ 'децембар'
+ ]
+}
+
+var quarterValues = {
+ narrow: ['1.', '2.', '3.', '4.'],
+ abbreviated: ['1. кв.', '2. кв.', '3. кв.', '4. кв.'],
+ wide: ['1. квартал', '2. квартал', '3. квартал', '4. квартал']
+}
+
+var dayValues = {
+ narrow: ['Н', 'П', 'У', 'С', 'Ч', 'П', 'С'],
+ short: ['нед', 'пон', 'уто', 'сре', 'чет', 'пет', 'суб'],
+ abbreviated: ['нед', 'пон', 'уто', 'сре', 'чет', 'пет', 'суб'],
+ wide: [
+ 'недеља',
+ 'понедељак',
+ 'уторак',
+ 'среда',
+ 'четвртак',
+ 'петак',
+ 'субота'
+ ]
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'АМ',
+ pm: 'ПМ',
+ midnight: 'поноћ',
+ noon: 'подне',
+ morning: 'ујутру',
+ afternoon: 'поподне',
+ evening: 'увече',
+ night: 'ноћу'
+ },
+ abbreviated: {
+ am: 'АМ',
+ pm: 'ПМ',
+ midnight: 'поноћ',
+ noon: 'подне',
+ morning: 'ујутру',
+ afternoon: 'поподне',
+ evening: 'увече',
+ night: 'ноћу'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'поноћ',
+ noon: 'подне',
+ morning: 'ујутру',
+ afternoon: 'после подне',
+ evening: 'увече',
+ night: 'ноћу'
+ }
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'поноћ',
+ noon: 'подне',
+ morning: 'ујутру',
+ afternoon: 'поподне',
+ evening: 'увече',
+ night: 'ноћу'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'поноћ',
+ noon: 'подне',
+ morning: 'ујутру',
+ afternoon: 'поподне',
+ evening: 'увече',
+ night: 'ноћу'
+ },
+ wide: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'поноћ',
+ noon: 'подне',
+ morning: 'ујутру',
+ afternoon: 'после подне',
+ evening: 'увече',
+ night: 'ноћу'
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/sr/_lib/match/index.js b/date-fns/src/locale/sr/_lib/match/index.js
new file mode 100644
index 0000000..45da68e
--- /dev/null
+++ b/date-fns/src/locale/sr/_lib/match/index.js
@@ -0,0 +1,118 @@
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)\./i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(пр\.н\.е\.|АД)/i,
+ abbreviated: /^(пр\.\s?Хр\.|по\.\s?Хр\.)/i,
+ wide: /^(Пре Христа|пре нове ере|После Христа|нова ера)/i
+}
+var parseEraPatterns = {
+ any: [/^пр/i, /^(по|нова)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234]\.\s?кв\.?/i,
+ wide: /^[1234]\. квартал/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(10|11|12|[123456789])\./i,
+ abbreviated: /^(јан|феб|мар|апр|мај|јун|јул|авг|сеп|окт|нов|дец)/i,
+ wide: /^((јануар|јануара)|(фебруар|фебруара)|(март|марта)|(април|априла)|(мја|маја)|(јун|јуна)|(јул|јула)|(август|августа)|(септембар|септембра)|(октобар|октобра)|(новембар|новембра)|(децембар|децембра))/i
+}
+var parseMonthPatterns = {
+ narrow: [/(10|11|12|[123456789])/i],
+ any: [
+ /^ја/i,
+ /^ф/i,
+ /^мар/i,
+ /^ап/i,
+ /^мај/i,
+ /^јун/i,
+ /^јул/i,
+ /^авг/i,
+ /^с/i,
+ /^о/i,
+ /^н/i,
+ /^д/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[пусчн]/i,
+ short: /^(нед|пон|уто|сре|чет|пет|суб)/i,
+ abbreviated: /^(нед|пон|уто|сре|чет|пет|суб)/i,
+ wide: /^(недеља|понедељак|уторак|среда|четвртак|петак|субота)/i
+}
+var parseDayPatterns = {
+ narrow: [/^п/i, /^у/i, /^с/i, /^ч/i, /^н/i],
+ any: [/^нед/i, /^пон/i, /^уто/i, /^сре/i, /^чет/i, /^пет/i, /^суб/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(ам|пм|поноћ|(по)?подне|увече|ноћу|после подне|ујутру)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^поно/i,
+ noon: /^под/i,
+ morning: /ујутру/i,
+ afternoon: /(после\s|по)+подне/i,
+ evening: /(увече)/i,
+ night: /(ноћу)/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/sr/index.d.ts b/date-fns/src/locale/sr/index.d.ts
new file mode 100644
index 0000000..aaede59
--- /dev/null
+++ b/date-fns/src/locale/sr/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { sr } from 'date-fns/locale'
+export default sr
diff --git a/date-fns/src/locale/sr/index.js b/date-fns/src/locale/sr/index.js
new file mode 100644
index 0000000..f8c1408
--- /dev/null
+++ b/date-fns/src/locale/sr/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Serbian cyrillic locale.
+ * @language Serbian
+ * @iso-639-2 srp
+ * @author Igor Radivojević [@rogyvoje]{@link https://github.com/rogyvoje}
+ */
+var locale = {
+ code: 'sr',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/sr/index.js.flow b/date-fns/src/locale/sr/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/sr/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/sr/snapshot.md b/date-fns/src/locale/sr/snapshot.md
new file mode 100644
index 0000000..98da3c4
--- /dev/null
+++ b/date-fns/src/locale/sr/snapshot.md
@@ -0,0 +1,304 @@
+# Serbian (sr) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1. кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. кв. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1. квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. квартал | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1. | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2. | Invalid Date |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1. кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. кв. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1. квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. квартал | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | феб | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јул | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | фебруар | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јул | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | 2. | 2019-01-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | феб | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јул | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | фебруар | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | јул | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | 2. | 2019-01-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | понедељак | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петак | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | П | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-17T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | понедељак | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петак | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | П | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-17T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | понедељак | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петак | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | П | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-17T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | понедељак | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | петак | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | П | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-17T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пет | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | ам | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | пм | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | пм | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ам | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| | aaaaa | 2019-02-11T11:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | ам | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | пм | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | пм | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ам | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | AM | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | PM | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | AM | Invalid Date |
+| | bbbbb | 2019-02-11T11:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПМ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | АМ | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ујутру | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | поподне | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | увече | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ноћу | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ујутру | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | поподне | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | увече | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ноћу | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ујутру | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | поподне | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | увече | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ноћу | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | ујутру | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | после подне | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | увече | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ноћу | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ујутру | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | поподне | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | увече | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ноћу | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11. 02. 87. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 05. 53. | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11. феб 87. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. мај 53. | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11. фебруар 1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. мај 1453. | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | среда, 11. фебруар 1987. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | недеља, 29. мај 1453. | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 (GMT+00:00) | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 (GMT+00:00) | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11. 02. 87. 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. 05. 53. 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11. феб 87. 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29. мај 53. 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11. фебруар 1987. у 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29. мај 1453. у 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | среда, 11. фебруар 1987. у 12:13:14 (GMT+00:00) | Errored |
+| | | 1453-05-29T23:59:59.999Z | недеља, 29. мај 1453. у 23:59:59 (GMT+00:00) | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------- | ---------------------- | -------------------- |
+| 2006-01-01T00:00:00.000Z | око 6 година | око 6 година | за око 6 година |
+| 2005-01-01T00:00:00.000Z | око 5 година | око 5 година | за око 5 година |
+| 2004-01-01T00:00:00.000Z | око 4 године | око 4 године | за око 4 године |
+| 2003-01-01T00:00:00.000Z | око 3 године | око 3 године | за око 3 године |
+| 2002-01-01T00:00:00.000Z | око 2 године | око 2 године | за око 2 године |
+| 2001-06-01T00:00:00.000Z | преко 1 годину | преко 1 годину | за преко 1 годину |
+| 2001-02-01T00:00:00.000Z | око 1 годину | око 1 годину | за око 1 годину |
+| 2001-01-01T00:00:00.000Z | око 1 годину | око 1 годину | за око 1 годину |
+| 2000-06-01T00:00:00.000Z | 5 месеци | 5 месеци | за 5 месеци |
+| 2000-03-01T00:00:00.000Z | 2 месеца | 2 месеца | за 2 месеца |
+| 2000-02-01T00:00:00.000Z | око 1 месец | око 1 месец | за око 1 месец |
+| 2000-01-15T00:00:00.000Z | 14 дана | 14 дана | за 14 дана |
+| 2000-01-02T00:00:00.000Z | 1 дан | 1 дан | за 1 дан |
+| 2000-01-01T06:00:00.000Z | око 6 сати | око 6 сати | за око 6 сати |
+| 2000-01-01T01:00:00.000Z | око 1 сат | око 1 сат | за око 1 сат |
+| 2000-01-01T00:45:00.000Z | око 1 сат | око 1 сат | за око 1 сат |
+| 2000-01-01T00:30:00.000Z | 30 минута | 30 минута | за 30 минута |
+| 2000-01-01T00:15:00.000Z | 15 минута | 15 минута | за 15 минута |
+| 2000-01-01T00:01:00.000Z | 1 минута | 1 минута | за 1 минуту |
+| 2000-01-01T00:00:25.000Z | мање од 1 минуте | пола минуте | за мање од 1 минуту |
+| 2000-01-01T00:00:15.000Z | мање од 1 минуте | мање од 20 секунди | за мање од 1 минуту |
+| 2000-01-01T00:00:05.000Z | мање од 1 минуте | мање од 10 секунди | за мање од 1 минуту |
+| 2000-01-01T00:00:00.000Z | мање од 1 минуте | мање од 5 секунди | пре мање од 1 минуте |
+| 1999-12-31T23:59:55.000Z | мање од 1 минуте | мање од 10 секунди | пре мање од 1 минуте |
+| 1999-12-31T23:59:45.000Z | мање од 1 минуте | мање од 20 секунди | пре мање од 1 минуте |
+| 1999-12-31T23:59:35.000Z | мање од 1 минуте | пола минуте | пре мање од 1 минуте |
+| 1999-12-31T23:59:00.000Z | 1 минута | 1 минута | пре 1 минуте |
+| 1999-12-31T23:45:00.000Z | 15 минута | 15 минута | пре 15 минута |
+| 1999-12-31T23:30:00.000Z | 30 минута | 30 минута | пре 30 минута |
+| 1999-12-31T23:15:00.000Z | око 1 сат | око 1 сат | пре око 1 сат |
+| 1999-12-31T23:00:00.000Z | око 1 сат | око 1 сат | пре око 1 сат |
+| 1999-12-31T18:00:00.000Z | око 6 сати | око 6 сати | пре око 6 сати |
+| 1999-12-30T00:00:00.000Z | 2 дана | 2 дана | пре 2 дана |
+| 1999-12-15T00:00:00.000Z | 17 дана | 17 дана | пре 17 дана |
+| 1999-12-01T00:00:00.000Z | око 1 месец | око 1 месец | пре око 1 месец |
+| 1999-11-01T00:00:00.000Z | 2 месеца | 2 месеца | пре 2 месеца |
+| 1999-06-01T00:00:00.000Z | 7 месеци | 7 месеци | пре 7 месеци |
+| 1999-01-01T00:00:00.000Z | око 1 годину | око 1 годину | пре око 1 годину |
+| 1998-12-01T00:00:00.000Z | око 1 годину | око 1 годину | пре око 1 годину |
+| 1998-06-01T00:00:00.000Z | преко 1 годину | преко 1 годину | пре преко 1 годину |
+| 1998-01-01T00:00:00.000Z | око 2 године | око 2 године | пре око 2 године |
+| 1997-01-01T00:00:00.000Z | око 3 године | око 3 године | пре око 3 године |
+| 1996-01-01T00:00:00.000Z | око 4 године | око 4 године | пре око 4 године |
+| 1995-01-01T00:00:00.000Z | око 5 година | око 5 година | пре око 5 година |
+| 1994-01-01T00:00:00.000Z | око 6 година | око 6 година | пре око 6 година |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ---------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 година | за 6 година | 52608 сати |
+| 2005-01-01T00:00:00.000Z | 5 година | за 5 година | 43848 сати |
+| 2004-01-01T00:00:00.000Z | 4 године | за 4 године | 35064 сата |
+| 2003-01-01T00:00:00.000Z | 3 године | за 3 године | 26304 сата |
+| 2002-01-01T00:00:00.000Z | 2 године | за 2 године | 17544 сата |
+| 2001-06-01T00:00:00.000Z | 1 година | за 1 годину | 12408 сати |
+| 2001-02-01T00:00:00.000Z | 1 година | за 1 годину | 9528 сати |
+| 2001-01-01T00:00:00.000Z | 1 година | за 1 годину | 8784 сата |
+| 2000-06-01T00:00:00.000Z | 5 месеци | за 5 месеци | 3648 сати |
+| 2000-03-01T00:00:00.000Z | 2 месеца | за 2 месеца | 1440 сати |
+| 2000-02-01T00:00:00.000Z | 1 месец | за 1 месец | 744 сата |
+| 2000-01-15T00:00:00.000Z | 14 дана | за 14 дана | 336 сати |
+| 2000-01-02T00:00:00.000Z | 1 дан | за 1 дан | 24 сата |
+| 2000-01-01T06:00:00.000Z | 6 сати | за 6 сати | 6 сати |
+| 2000-01-01T01:00:00.000Z | 1 сат | за 1 сат | 1 сат |
+| 2000-01-01T00:45:00.000Z | 45 минута | за 45 минута | 1 сат |
+| 2000-01-01T00:30:00.000Z | 30 минута | за 30 минута | 1 сат |
+| 2000-01-01T00:15:00.000Z | 15 минута | за 15 минута | 0 сати |
+| 2000-01-01T00:01:00.000Z | 1 минута | за 1 минуту | 0 сати |
+| 2000-01-01T00:00:25.000Z | 25 секунди | за 25 секунди | 0 сати |
+| 2000-01-01T00:00:15.000Z | 15 секунди | за 15 секунди | 0 сати |
+| 2000-01-01T00:00:05.000Z | 5 секунди | за 5 секунди | 0 сати |
+| 2000-01-01T00:00:00.000Z | 0 секунди | пре 0 секунди | 0 сати |
+| 1999-12-31T23:59:55.000Z | 5 секунди | пре 5 секунди | 0 сати |
+| 1999-12-31T23:59:45.000Z | 15 секунди | пре 15 секунди | 0 сати |
+| 1999-12-31T23:59:35.000Z | 25 секунди | пре 25 секунди | 0 сати |
+| 1999-12-31T23:59:00.000Z | 1 минута | пре 1 минуте | 0 сати |
+| 1999-12-31T23:45:00.000Z | 15 минута | пре 15 минута | 0 сати |
+| 1999-12-31T23:30:00.000Z | 30 минута | пре 30 минута | 1 сат |
+| 1999-12-31T23:15:00.000Z | 45 минута | пре 45 минута | 1 сат |
+| 1999-12-31T23:00:00.000Z | 1 сат | пре 1 сат | 1 сат |
+| 1999-12-31T18:00:00.000Z | 6 сати | пре 6 сати | 6 сати |
+| 1999-12-30T00:00:00.000Z | 2 дана | пре 2 дана | 48 сати |
+| 1999-12-15T00:00:00.000Z | 17 дана | пре 17 дана | 408 сати |
+| 1999-12-01T00:00:00.000Z | 1 месец | пре 1 месец | 744 сата |
+| 1999-11-01T00:00:00.000Z | 2 месеца | пре 2 месеца | 1464 сата |
+| 1999-06-01T00:00:00.000Z | 7 месеци | пре 7 месеци | 5136 сати |
+| 1999-01-01T00:00:00.000Z | 1 година | пре 1 године | 8760 сати |
+| 1998-12-01T00:00:00.000Z | 1 година | пре 1 године | 9504 сата |
+| 1998-06-01T00:00:00.000Z | 2 године | пре 2 године | 13896 сати |
+| 1998-01-01T00:00:00.000Z | 2 године | пре 2 године | 17520 сати |
+| 1997-01-01T00:00:00.000Z | 3 године | пре 3 године | 26280 сати |
+| 1996-01-01T00:00:00.000Z | 4 године | пре 4 године | 35064 сата |
+| 1995-01-01T00:00:00.000Z | 5 година | пре 5 година | 43824 сата |
+| 1994-01-01T00:00:00.000Z | 6 година | пре 6 година | 52584 сата |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------ |
+| 2000-01-10T00:00:00.000Z | 10. 01. 00. |
+| 2000-01-05T00:00:00.000Z | следећу среду у 00:00 |
+| 2000-01-02T00:00:00.000Z | сутра у 00:00 |
+| 2000-01-01T00:00:00.000Z | данас у 00:00 |
+| 1999-12-31T00:00:00.000Z | јуче у 00:00 |
+| 1999-12-27T00:00:00.000Z | прошли понедељак у 00:00 |
+| 1999-12-21T00:00:00.000Z | 21. 12. 99. |
diff --git a/date-fns/src/locale/sv/_lib/formatDistance/index.js b/date-fns/src/locale/sv/_lib/formatDistance/index.js
new file mode 100644
index 0000000..3c8f8d0
--- /dev/null
+++ b/date-fns/src/locale/sv/_lib/formatDistance/index.js
@@ -0,0 +1,127 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ singular: 'mindre än en sekund',
+ plural: 'mindre än {{count}} sekunder'
+ },
+
+ xSeconds: {
+ singular: 'en sekund',
+ plural: '{{count}} sekunder'
+ },
+
+ halfAMinute: 'en halv minut',
+
+ lessThanXMinutes: {
+ singular: 'mindre än en minut',
+ plural: 'mindre än {{count}} minuter'
+ },
+
+ xMinutes: {
+ singular: 'en minut',
+ plural: '{{count}} minuter'
+ },
+
+ aboutXHours: {
+ singular: 'ungefär en timme',
+ plural: 'ungefär {{count}} timmar'
+ },
+
+ xHours: {
+ singular: 'en timme',
+ plural: '{{count}} timmar'
+ },
+
+ xDays: {
+ singular: 'en dag',
+ plural: '{{count}} dagar'
+ },
+
+ aboutXWeeks: {
+ singular: 'ungefär en vecka',
+ plural: 'ungefär {{count}} vecka'
+ },
+
+ xWeeks: {
+ singular: 'en vecka',
+ plural: '{{count}} vecka'
+ },
+
+ aboutXMonths: {
+ singular: 'ungefär en månad',
+ plural: 'ungefär {{count}} månader'
+ },
+
+ xMonths: {
+ singular: 'en månad',
+ plural: '{{count}} månader'
+ },
+
+ aboutXYears: {
+ singular: 'ungefär ett år',
+ plural: 'ungefär {{count}} år'
+ },
+
+ xYears: {
+ singular: 'ett år',
+ plural: '{{count}} år'
+ },
+
+ overXYears: {
+ singular: 'över ett år',
+ plural: 'över {{count}} år'
+ },
+
+ almostXYears: {
+ singular: 'nästan ett år',
+ plural: 'nästan {{count}} år'
+ }
+}
+
+var wordMapping = [
+ 'noll',
+ 'en',
+ 'två',
+ 'tre',
+ 'fyra',
+ 'fem',
+ 'sex',
+ 'sju',
+ 'åtta',
+ 'nio',
+ 'tio',
+ 'elva',
+ 'tolv'
+]
+
+export default function formatDistance(token, count, options) {
+ options = options || {
+ onlyNumeric: false
+ }
+
+ var translation = formatDistanceLocale[token]
+ var result
+ if (typeof translation === 'string') {
+ result = translation
+ } else if (count === 0 || count > 1) {
+ if (options.onlyNumeric) {
+ result = translation.plural.replace('{{count}}', count)
+ } else {
+ result = translation.plural.replace(
+ '{{count}}',
+ count < 13 ? wordMapping[count] : count
+ )
+ }
+ } else {
+ result = translation.singular
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'om ' + result
+ } else {
+ return result + ' sedan'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/sv/_lib/formatLong/index.js b/date-fns/src/locale/sv/_lib/formatLong/index.js
new file mode 100644
index 0000000..ccb4ea9
--- /dev/null
+++ b/date-fns/src/locale/sv/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE d MMMM y',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'y-MM-dd'
+}
+
+var timeFormats = {
+ full: "'kl'. HH:mm:ss zzzz",
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'kl.' {{time}}",
+ long: "{{date}} 'kl.' {{time}}",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/sv/_lib/formatRelative/index.js b/date-fns/src/locale/sv/_lib/formatRelative/index.js
new file mode 100644
index 0000000..b967215
--- /dev/null
+++ b/date-fns/src/locale/sv/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'i' EEEE's kl.' p",
+ yesterday: "'igår kl.' p",
+ today: "'idag kl.' p",
+ tomorrow: "'imorgon kl.' p",
+ nextWeek: "EEEE 'kl.' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/sv/_lib/localize/index.js b/date-fns/src/locale/sv/_lib/localize/index.js
new file mode 100644
index 0000000..1717757
--- /dev/null
+++ b/date-fns/src/locale/sv/_lib/localize/index.js
@@ -0,0 +1,168 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['f.Kr.', 'e.Kr.'],
+ abbreviated: ['f.Kr.', 'e.Kr.'],
+ wide: ['före Kristus', 'efter Kristus'],
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1:a kvartalet', '2:a kvartalet', '3:e kvartalet', '4:e kvartalet'],
+}
+
+var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'jan.',
+ 'feb.',
+ 'mars',
+ 'apr.',
+ 'maj',
+ 'juni',
+ 'juli',
+ 'aug.',
+ 'sep.',
+ 'okt.',
+ 'nov.',
+ 'dec.',
+ ],
+ wide: [
+ 'januari',
+ 'februari',
+ 'mars',
+ 'april',
+ 'maj',
+ 'juni',
+ 'juli',
+ 'augusti',
+ 'september',
+ 'oktober',
+ 'november',
+ 'december',
+ ],
+}
+
+var dayValues = {
+ narrow: ['S', 'M', 'T', 'O', 'T', 'F', 'L'],
+ short: ['sö', 'må', 'ti', 'on', 'to', 'fr', 'lö'],
+ abbreviated: ['sön', 'mån', 'tis', 'ons', 'tors', 'fre', 'lör'],
+ wide: ['söndag', 'måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag'],
+}
+
+// https://www.unicode.org/cldr/charts/32/summary/sv.html#1888
+var dayPeriodValues = {
+ narrow: {
+ am: 'fm',
+ pm: 'em',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'morg.',
+ afternoon: 'efterm.',
+ evening: 'kväll',
+ night: 'natt',
+ },
+ abbreviated: {
+ am: 'f.m.',
+ pm: 'e.m.',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'morgon',
+ afternoon: 'efterm.',
+ evening: 'kväll',
+ night: 'natt',
+ },
+ wide: {
+ am: 'förmiddag',
+ pm: 'eftermiddag',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'morgon',
+ afternoon: 'eftermiddag',
+ evening: 'kväll',
+ night: 'natt',
+ },
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'fm',
+ pm: 'em',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'på morg.',
+ afternoon: 'på efterm.',
+ evening: 'på kvällen',
+ night: 'på natten',
+ },
+ abbreviated: {
+ am: 'fm',
+ pm: 'em',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'på morg.',
+ afternoon: 'på efterm.',
+ evening: 'på kvällen',
+ night: 'på natten',
+ },
+ wide: {
+ am: 'fm',
+ pm: 'em',
+ midnight: 'midnatt',
+ noon: 'middag',
+ morning: 'på morgonen',
+ afternoon: 'på eftermiddagen',
+ evening: 'på kvällen',
+ night: 'på natten',
+ },
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+
+ var rem100 = number % 100
+ if (rem100 > 20 || rem100 < 10) {
+ switch (rem100 % 10) {
+ case 1:
+ case 2:
+ return number + ':a'
+ }
+ }
+ return number + ':e'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide',
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function (quarter) {
+ return Number(quarter) - 1
+ },
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide',
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide',
+ }),
+}
+
+export default localize
diff --git a/date-fns/src/locale/sv/_lib/match/index.js b/date-fns/src/locale/sv/_lib/match/index.js
new file mode 100644
index 0000000..c54150f
--- /dev/null
+++ b/date-fns/src/locale/sv/_lib/match/index.js
@@ -0,0 +1,135 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(:a|:e)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(f\.? ?Kr\.?|f\.? ?v\.? ?t\.?|e\.? ?Kr\.?|v\.? ?t\.?)/i,
+ abbreviated: /^(f\.? ?Kr\.?|f\.? ?v\.? ?t\.?|e\.? ?Kr\.?|v\.? ?t\.?)/i,
+ wide: /^(före Kristus|före vår tid|efter Kristus|vår tid)/i,
+}
+var parseEraPatterns = {
+ any: [/^f/i, /^[ev]/i],
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](:a|:e)? kvartalet/i,
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i],
+}
+
+var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mar|apr|maj|jun|jul|aug|sep|okt|nov|dec)\.?/i,
+ wide: /^(januari|februari|mars|april|maj|juni|juli|augusti|september|oktober|november|december)/i,
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^j/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^j/i,
+ /^j/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i,
+ ],
+ any: [
+ /^ja/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^maj/i,
+ /^jun/i,
+ /^jul/i,
+ /^au/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i,
+ ],
+}
+
+var matchDayPatterns = {
+ narrow: /^[smtofl]/i,
+ short: /^(sö|må|ti|on|to|fr|lö)/i,
+ abbreviated: /^(sön|mån|tis|ons|tors|fre|lör)/i,
+ wide: /^(söndag|måndag|tisdag|onsdag|torsdag|fredag|lördag)/i,
+}
+var parseDayPatterns = {
+ any: [/^s/i, /^m/i, /^ti/i, /^o/i, /^to/i, /^f/i, /^l/i],
+}
+
+var matchDayPeriodPatterns = {
+ any: /^([fe]\.?\s?m\.?|midn(att)?|midd(ag)?|(på) (morgonen|eftermiddagen|kvällen|natten))/i,
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^f/i,
+ pm: /^e/i,
+ midnight: /^midn/i,
+ noon: /^midd/i,
+ morning: /morgon/i,
+ afternoon: /eftermiddag/i,
+ evening: /kväll/i,
+ night: /natt/i,
+ },
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function (value) {
+ return parseInt(value, 10)
+ },
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any',
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function (index) {
+ return index + 1
+ },
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any',
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any',
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any',
+ }),
+}
+
+export default match
diff --git a/date-fns/src/locale/sv/index.d.ts b/date-fns/src/locale/sv/index.d.ts
new file mode 100644
index 0000000..2a7405b
--- /dev/null
+++ b/date-fns/src/locale/sv/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { sv } from 'date-fns/locale'
+export default sv
diff --git a/date-fns/src/locale/sv/index.js b/date-fns/src/locale/sv/index.js
new file mode 100644
index 0000000..f1fb736
--- /dev/null
+++ b/date-fns/src/locale/sv/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Swedish locale.
+ * @language Swedish
+ * @iso-639-2 swe
+ * @author Johannes Ulén [@ejulen]{@link https://github.com/ejulen}
+ * @author Alexander Nanberg [@alexandernanberg]{@link https://github.com/alexandernanberg}
+ * @author Henrik Andersson [@limelights]{@link https://github.com/limelights}
+ */
+var locale = {
+ code: 'sv',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/sv/index.js.flow b/date-fns/src/locale/sv/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/sv/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/sv/snapshot.md b/date-fns/src/locale/sv/snapshot.md
new file mode 100644
index 0000000..c73a7ea
--- /dev/null
+++ b/date-fns/src/locale/sv/snapshot.md
@@ -0,0 +1,304 @@
+# Swedish (sv) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987:e | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5:e | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987:e | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4:e | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1:a | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2:a | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1:a kvartalet | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2:a kvartalet | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1:a | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2:a | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1:a kvartalet | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2:a kvartalet | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2:a | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7:e | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | Invalid Date |
+| | MMMM | 2019-02-11T12:13:14.015Z | februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2:a | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7:e | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | feb. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | Invalid Date |
+| | LLLL | 2019-02-11T12:13:14.015Z | februari | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | juli | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1:a | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48:e | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1:a | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48:e | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11:e | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28:e | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42:a | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365:e | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | måndag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | må | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1:a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5:e | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | måndag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | må | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1:a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5:e | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | måndag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | må | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1:a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5:e | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | mån | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fre | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | måndag | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fredag | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | må | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | fr | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | em | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | fm | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på efterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvällen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på efterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvällen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på efterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvällen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | på morgonen | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | på eftermiddagen | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | på kvällen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | på morg. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | på efterm. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | på kvällen | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | på natten | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11:e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11:e | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11:e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23:e | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11:e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11:e | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11:e | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23:e | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1:a | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55:e | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1:a | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55:e | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 1987-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 feb. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 maj 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 maj 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | onsdag 11 februari 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | söndag 29 maj 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | kl. 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | kl. 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 1987-02-11 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 feb. 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 maj 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 februari 1987 kl. 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 maj 1453 kl. 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | onsdag 11 februari 1987 kl. kl. 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | söndag 29 maj 1453 kl. kl. 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ------------------------ |
+| 2006-01-01T00:00:00.000Z | ungefär sex år | ungefär sex år | om ungefär sex år |
+| 2005-01-01T00:00:00.000Z | ungefär fem år | ungefär fem år | om ungefär fem år |
+| 2004-01-01T00:00:00.000Z | ungefär fyra år | ungefär fyra år | om ungefär fyra år |
+| 2003-01-01T00:00:00.000Z | ungefär tre år | ungefär tre år | om ungefär tre år |
+| 2002-01-01T00:00:00.000Z | ungefär två år | ungefär två år | om ungefär två år |
+| 2001-06-01T00:00:00.000Z | över ett år | över ett år | om över ett år |
+| 2001-02-01T00:00:00.000Z | ungefär ett år | ungefär ett år | om ungefär ett år |
+| 2001-01-01T00:00:00.000Z | ungefär ett år | ungefär ett år | om ungefär ett år |
+| 2000-06-01T00:00:00.000Z | fem månader | fem månader | om fem månader |
+| 2000-03-01T00:00:00.000Z | två månader | två månader | om två månader |
+| 2000-02-01T00:00:00.000Z | ungefär en månad | ungefär en månad | om ungefär en månad |
+| 2000-01-15T00:00:00.000Z | 14 dagar | 14 dagar | om 14 dagar |
+| 2000-01-02T00:00:00.000Z | en dag | en dag | om en dag |
+| 2000-01-01T06:00:00.000Z | ungefär sex timmar | ungefär sex timmar | om ungefär sex timmar |
+| 2000-01-01T01:00:00.000Z | ungefär en timme | ungefär en timme | om ungefär en timme |
+| 2000-01-01T00:45:00.000Z | ungefär en timme | ungefär en timme | om ungefär en timme |
+| 2000-01-01T00:30:00.000Z | 30 minuter | 30 minuter | om 30 minuter |
+| 2000-01-01T00:15:00.000Z | 15 minuter | 15 minuter | om 15 minuter |
+| 2000-01-01T00:01:00.000Z | en minut | en minut | om en minut |
+| 2000-01-01T00:00:25.000Z | mindre än en minut | en halv minut | om mindre än en minut |
+| 2000-01-01T00:00:15.000Z | mindre än en minut | mindre än 20 sekunder | om mindre än en minut |
+| 2000-01-01T00:00:05.000Z | mindre än en minut | mindre än tio sekunder | om mindre än en minut |
+| 2000-01-01T00:00:00.000Z | mindre än en minut | mindre än fem sekunder | mindre än en minut sedan |
+| 1999-12-31T23:59:55.000Z | mindre än en minut | mindre än tio sekunder | mindre än en minut sedan |
+| 1999-12-31T23:59:45.000Z | mindre än en minut | mindre än 20 sekunder | mindre än en minut sedan |
+| 1999-12-31T23:59:35.000Z | mindre än en minut | en halv minut | mindre än en minut sedan |
+| 1999-12-31T23:59:00.000Z | en minut | en minut | en minut sedan |
+| 1999-12-31T23:45:00.000Z | 15 minuter | 15 minuter | 15 minuter sedan |
+| 1999-12-31T23:30:00.000Z | 30 minuter | 30 minuter | 30 minuter sedan |
+| 1999-12-31T23:15:00.000Z | ungefär en timme | ungefär en timme | ungefär en timme sedan |
+| 1999-12-31T23:00:00.000Z | ungefär en timme | ungefär en timme | ungefär en timme sedan |
+| 1999-12-31T18:00:00.000Z | ungefär sex timmar | ungefär sex timmar | ungefär sex timmar sedan |
+| 1999-12-30T00:00:00.000Z | två dagar | två dagar | två dagar sedan |
+| 1999-12-15T00:00:00.000Z | 17 dagar | 17 dagar | 17 dagar sedan |
+| 1999-12-01T00:00:00.000Z | ungefär en månad | ungefär en månad | ungefär en månad sedan |
+| 1999-11-01T00:00:00.000Z | två månader | två månader | två månader sedan |
+| 1999-06-01T00:00:00.000Z | sju månader | sju månader | sju månader sedan |
+| 1999-01-01T00:00:00.000Z | ungefär ett år | ungefär ett år | ungefär ett år sedan |
+| 1998-12-01T00:00:00.000Z | ungefär ett år | ungefär ett år | ungefär ett år sedan |
+| 1998-06-01T00:00:00.000Z | över ett år | över ett år | över ett år sedan |
+| 1998-01-01T00:00:00.000Z | ungefär två år | ungefär två år | ungefär två år sedan |
+| 1997-01-01T00:00:00.000Z | ungefär tre år | ungefär tre år | ungefär tre år sedan |
+| 1996-01-01T00:00:00.000Z | ungefär fyra år | ungefär fyra år | ungefär fyra år sedan |
+| 1995-01-01T00:00:00.000Z | ungefär fem år | ungefär fem år | ungefär fem år sedan |
+| 1994-01-01T00:00:00.000Z | ungefär sex år | ungefär sex år | ungefär sex år sedan |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | sex år | om sex år | 52608 timmar |
+| 2005-01-01T00:00:00.000Z | fem år | om fem år | 43848 timmar |
+| 2004-01-01T00:00:00.000Z | fyra år | om fyra år | 35064 timmar |
+| 2003-01-01T00:00:00.000Z | tre år | om tre år | 26304 timmar |
+| 2002-01-01T00:00:00.000Z | två år | om två år | 17544 timmar |
+| 2001-06-01T00:00:00.000Z | ett år | om ett år | 12408 timmar |
+| 2001-02-01T00:00:00.000Z | ett år | om ett år | 9528 timmar |
+| 2001-01-01T00:00:00.000Z | ett år | om ett år | 8784 timmar |
+| 2000-06-01T00:00:00.000Z | fem månader | om fem månader | 3648 timmar |
+| 2000-03-01T00:00:00.000Z | två månader | om två månader | 1440 timmar |
+| 2000-02-01T00:00:00.000Z | en månad | om en månad | 744 timmar |
+| 2000-01-15T00:00:00.000Z | 14 dagar | om 14 dagar | 336 timmar |
+| 2000-01-02T00:00:00.000Z | en dag | om en dag | 24 timmar |
+| 2000-01-01T06:00:00.000Z | sex timmar | om sex timmar | sex timmar |
+| 2000-01-01T01:00:00.000Z | en timme | om en timme | en timme |
+| 2000-01-01T00:45:00.000Z | 45 minuter | om 45 minuter | en timme |
+| 2000-01-01T00:30:00.000Z | 30 minuter | om 30 minuter | en timme |
+| 2000-01-01T00:15:00.000Z | 15 minuter | om 15 minuter | noll timmar |
+| 2000-01-01T00:01:00.000Z | en minut | om en minut | noll timmar |
+| 2000-01-01T00:00:25.000Z | 25 sekunder | om 25 sekunder | noll timmar |
+| 2000-01-01T00:00:15.000Z | 15 sekunder | om 15 sekunder | noll timmar |
+| 2000-01-01T00:00:05.000Z | fem sekunder | om fem sekunder | noll timmar |
+| 2000-01-01T00:00:00.000Z | noll sekunder | noll sekunder sedan | noll timmar |
+| 1999-12-31T23:59:55.000Z | fem sekunder | fem sekunder sedan | noll timmar |
+| 1999-12-31T23:59:45.000Z | 15 sekunder | 15 sekunder sedan | noll timmar |
+| 1999-12-31T23:59:35.000Z | 25 sekunder | 25 sekunder sedan | noll timmar |
+| 1999-12-31T23:59:00.000Z | en minut | en minut sedan | noll timmar |
+| 1999-12-31T23:45:00.000Z | 15 minuter | 15 minuter sedan | noll timmar |
+| 1999-12-31T23:30:00.000Z | 30 minuter | 30 minuter sedan | en timme |
+| 1999-12-31T23:15:00.000Z | 45 minuter | 45 minuter sedan | en timme |
+| 1999-12-31T23:00:00.000Z | en timme | en timme sedan | en timme |
+| 1999-12-31T18:00:00.000Z | sex timmar | sex timmar sedan | sex timmar |
+| 1999-12-30T00:00:00.000Z | två dagar | två dagar sedan | 48 timmar |
+| 1999-12-15T00:00:00.000Z | 17 dagar | 17 dagar sedan | 408 timmar |
+| 1999-12-01T00:00:00.000Z | en månad | en månad sedan | 744 timmar |
+| 1999-11-01T00:00:00.000Z | två månader | två månader sedan | 1464 timmar |
+| 1999-06-01T00:00:00.000Z | sju månader | sju månader sedan | 5136 timmar |
+| 1999-01-01T00:00:00.000Z | ett år | ett år sedan | 8760 timmar |
+| 1998-12-01T00:00:00.000Z | ett år | ett år sedan | 9504 timmar |
+| 1998-06-01T00:00:00.000Z | två år | två år sedan | 13896 timmar |
+| 1998-01-01T00:00:00.000Z | två år | två år sedan | 17520 timmar |
+| 1997-01-01T00:00:00.000Z | tre år | tre år sedan | 26280 timmar |
+| 1996-01-01T00:00:00.000Z | fyra år | fyra år sedan | 35064 timmar |
+| 1995-01-01T00:00:00.000Z | fem år | fem år sedan | 43824 timmar |
+| 1994-01-01T00:00:00.000Z | sex år | sex år sedan | 52584 timmar |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------- |
+| 2000-01-10T00:00:00.000Z | 2000-01-10 |
+| 2000-01-05T00:00:00.000Z | onsdag kl. 00:00 |
+| 2000-01-02T00:00:00.000Z | imorgon kl. 00:00 |
+| 2000-01-01T00:00:00.000Z | idag kl. 00:00 |
+| 1999-12-31T00:00:00.000Z | igår kl. 00:00 |
+| 1999-12-27T00:00:00.000Z | i måndags kl. 00:00 |
+| 1999-12-21T00:00:00.000Z | 1999-12-21 |
diff --git a/date-fns/src/locale/ta/_lib/formatDistance/index.js b/date-fns/src/locale/ta/_lib/formatDistance/index.js
new file mode 100644
index 0000000..20c905b
--- /dev/null
+++ b/date-fns/src/locale/ta/_lib/formatDistance/index.js
@@ -0,0 +1,236 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: {
+ default: 'ஒரு வினாடிக்கு குறைவாக',
+ in: 'ஒரு வினாடிக்குள்',
+ ago: 'ஒரு வினாடிக்கு முன்பு'
+ },
+ other: {
+ default: '{{count}} வினாடிகளுக்கு குறைவாக',
+ in: '{{count}} வினாடிகளுக்குள்',
+ ago: '{{count}} வினாடிகளுக்கு முன்பு'
+ }
+ },
+
+ xSeconds: {
+ one: {
+ default: '1 வினாடி',
+ in: '1 வினாடியில்',
+ ago: '1 வினாடி முன்பு'
+ },
+ other: {
+ default: '{{count}} விநாடிகள்',
+ in: '{{count}} வினாடிகளில்',
+ ago: '{{count}} விநாடிகளுக்கு முன்பு'
+ }
+ },
+
+ halfAMinute: {
+ default: 'அரை நிமிடம்',
+ in: 'அரை நிமிடத்தில்',
+ ago: 'அரை நிமிடம் முன்பு'
+ },
+
+ lessThanXMinutes: {
+ one: {
+ default: 'ஒரு நிமிடத்திற்கும் குறைவாக',
+ in: 'ஒரு நிமிடத்திற்குள்',
+ ago: 'ஒரு நிமிடத்திற்கு முன்பு'
+ },
+ other: {
+ default: '{{count}} நிமிடங்களுக்கும் குறைவாக',
+ in: '{{count}} நிமிடங்களுக்குள்',
+ ago: '{{count}} நிமிடங்களுக்கு முன்பு'
+ }
+ },
+
+ xMinutes: {
+ one: {
+ default: '1 நிமிடம்',
+ in: '1 நிமிடத்தில்',
+ ago: '1 நிமிடம் முன்பு'
+ },
+ other: {
+ default: '{{count}} நிமிடங்கள்',
+ in: '{{count}} நிமிடங்களில்',
+ ago: '{{count}} நிமிடங்களுக்கு முன்பு'
+ }
+ },
+
+ aboutXHours: {
+ one: {
+ default: 'சுமார் 1 மணி நேரம்',
+ in: 'சுமார் 1 மணி நேரத்தில்',
+ ago: 'சுமார் 1 மணி நேரத்திற்கு முன்பு'
+ },
+ other: {
+ default: 'சுமார் {{count}} மணி நேரம்',
+ in: 'சுமார் {{count}} மணி நேரத்திற்கு முன்பு',
+ ago: 'சுமார் {{count}} மணி நேரத்தில்'
+ }
+ },
+
+ xHours: {
+ one: {
+ default: '1 மணி நேரம்',
+ in: '1 மணி நேரத்தில்',
+ ago: '1 மணி நேரத்திற்கு முன்பு'
+ },
+ other: {
+ default: '{{count}} மணி நேரம்',
+ in: '{{count}} மணி நேரத்தில்',
+ ago: '{{count}} மணி நேரத்திற்கு முன்பு'
+ }
+ },
+
+ xDays: {
+ one: {
+ default: '1 நாள்',
+ in: '1 நாளில்',
+ ago: '1 நாள் முன்பு'
+ },
+ other: {
+ default: '{{count}} நாட்கள்',
+ in: '{{count}} நாட்களில்',
+ ago: '{{count}} நாட்களுக்கு முன்பு'
+ }
+ },
+
+ aboutXWeeks: {
+ one: {
+ default: 'சுமார் 1 வாரம்',
+ in: 'சுமார் 1 வாரத்தில்',
+ ago: 'சுமார் 1 வாரம் முன்பு'
+ },
+ other: {
+ default: 'சுமார் {{count}} வாரங்கள்',
+ in: 'சுமார் {{count}} வாரங்களில்',
+ ago: 'சுமார் {{count}} வாரங்களுக்கு முன்பு'
+ }
+ },
+
+ xWeeks: {
+ one: {
+ default: '1 வாரம்',
+ in: '1 வாரத்தில்',
+ ago: '1 வாரம் முன்பு'
+ },
+ other: {
+ default: '{{count}} வாரங்கள்',
+ in: '{{count}} வாரங்களில்',
+ ago: '{{count}} வாரங்களுக்கு முன்பு'
+ }
+ },
+
+ aboutXMonths: {
+ one: {
+ default: 'சுமார் 1 மாதம்',
+ in: 'சுமார் 1 மாதத்தில்',
+ ago: 'சுமார் 1 மாதத்திற்கு முன்பு'
+ },
+ other: {
+ default: 'சுமார் {{count}} மாதங்கள்',
+ in: 'சுமார் {{count}} மாதங்களில்',
+ ago: 'சுமார் {{count}} மாதங்களுக்கு முன்பு'
+ }
+ },
+
+ xMonths: {
+ one: {
+ default: '1 மாதம்',
+ in: '1 மாதத்தில்',
+ ago: '1 மாதம் முன்பு'
+ },
+ other: {
+ default: '{{count}} மாதங்கள்',
+ in: '{{count}} மாதங்களில்',
+ ago: '{{count}} மாதங்களுக்கு முன்பு'
+ }
+ },
+
+ aboutXYears: {
+ one: {
+ default: 'சுமார் 1 வருடம்',
+ in: 'சுமார் 1 ஆண்டில்',
+ ago: 'சுமார் 1 வருடம் முன்பு'
+ },
+ other: {
+ default: 'சுமார் {{count}} ஆண்டுகள்',
+ in: 'சுமார் {{count}} ஆண்டுகளில்',
+ ago: 'சுமார் {{count}} ஆண்டுகளுக்கு முன்பு'
+ }
+ },
+
+ xYears: {
+ one: {
+ default: '1 வருடம்',
+ in: '1 ஆண்டில்',
+ ago: '1 வருடம் முன்பு'
+ },
+ other: {
+ default: '{{count}} ஆண்டுகள்',
+ in: '{{count}} ஆண்டுகளில்',
+ ago: '{{count}} ஆண்டுகளுக்கு முன்பு'
+ }
+ },
+
+ overXYears: {
+ one: {
+ default: '1 வருடத்திற்கு மேல்',
+ in: '1 வருடத்திற்கும் மேலாக',
+ ago: '1 வருடம் முன்பு'
+ },
+ other: {
+ default: '{{count}} ஆண்டுகளுக்கும் மேலாக',
+ in: '{{count}} ஆண்டுகளில்',
+ ago: '{{count}} ஆண்டுகளுக்கு முன்பு'
+ }
+ },
+
+ almostXYears: {
+ one: {
+ default: 'கிட்டத்தட்ட 1 வருடம்',
+ in: 'கிட்டத்தட்ட 1 ஆண்டில்',
+ ago: 'கிட்டத்தட்ட 1 வருடம் முன்பு'
+ },
+ other: {
+ default: 'கிட்டத்தட்ட {{count}} ஆண்டுகள்',
+ in: 'கிட்டத்தட்ட {{count}} ஆண்டுகளில்',
+ ago: 'கிட்டத்தட்ட {{count}} ஆண்டுகளுக்கு முன்பு'
+ }
+ }
+}
+
+function getFormatDistanceLocaleWithSuffix(resultObj, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return resultObj.in
+ } else {
+ return resultObj.ago
+ }
+ }
+
+ return resultObj.default
+}
+
+export default function formatDistance(token, count, options = {}) {
+ var result
+ if (formatDistanceLocale[token].default) {
+ result = getFormatDistanceLocaleWithSuffix(
+ formatDistanceLocale[token],
+ options
+ )
+ } else if (count === 1) {
+ result = getFormatDistanceLocaleWithSuffix(
+ formatDistanceLocale[token].one,
+ options
+ )
+ } else {
+ result = getFormatDistanceLocaleWithSuffix(
+ formatDistanceLocale[token].other,
+ options
+ )
+ }
+
+ return result.replace('{{count}}', count)
+}
diff --git a/date-fns/src/locale/ta/_lib/formatLong/index.js b/date-fns/src/locale/ta/_lib/formatLong/index.js
new file mode 100644
index 0000000..3524908
--- /dev/null
+++ b/date-fns/src/locale/ta/_lib/formatLong/index.js
@@ -0,0 +1,45 @@
+// Ref: https://www.unicode.org/cldr/charts/32/summary/ta.html
+
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+// CLDR #1846 - #1849
+var dateFormats = {
+ full: 'EEEE, d MMMM, y',
+ long: 'd MMMM, y',
+ medium: 'd MMM, y',
+ short: 'd/M/yy'
+}
+
+// CLDR #1850 - #1853
+var timeFormats = {
+ full: 'a h:mm:ss zzzz',
+ long: 'a h:mm:ss z',
+ medium: 'a h:mm:ss',
+ short: 'a h:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ta/_lib/formatRelative/index.js b/date-fns/src/locale/ta/_lib/formatRelative/index.js
new file mode 100644
index 0000000..280b830
--- /dev/null
+++ b/date-fns/src/locale/ta/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'கடந்த' eeee p 'மணிக்கு'",
+ yesterday: "'நேற்று ' p 'மணிக்கு'",
+ today: "'இன்று ' p 'மணிக்கு'",
+ tomorrow: "'நாளை ' p 'மணிக்கு'",
+ nextWeek: "eeee p 'மணிக்கு'",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ta/_lib/localize/index.js b/date-fns/src/locale/ta/_lib/localize/index.js
new file mode 100644
index 0000000..c5e88f8
--- /dev/null
+++ b/date-fns/src/locale/ta/_lib/localize/index.js
@@ -0,0 +1,209 @@
+// Ref: https://www.unicode.org/cldr/charts/32/summary/ta.html
+
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['கி.மு.', 'கி.பி.'],
+ abbreviated: ['கி.மு.', 'கி.பி.'], // CLDR #1624, #1626
+ wide: ['கிறிஸ்துவுக்கு முன்', 'அன்னோ டோமினி'] // CLDR #1620, #1622
+}
+
+var quarterValues = {
+ // CLDR #1644 - #1647
+ narrow: ['1', '2', '3', '4'],
+ // CLDR #1636 - #1639
+ abbreviated: ['காலா.1', 'காலா.2', 'காலா.3', 'காலா.4'],
+ // CLDR #1628 - #1631
+ wide: [
+ 'ஒன்றாம் காலாண்டு',
+ 'இரண்டாம் காலாண்டு',
+ 'மூன்றாம் காலாண்டு',
+ 'நான்காம் காலாண்டு'
+ ]
+}
+
+var monthValues = {
+ // CLDR #700 - #711
+ narrow: ['ஜ', 'பி', 'மா', 'ஏ', 'மே', 'ஜூ', 'ஜூ', 'ஆ', 'செ', 'அ', 'ந', 'டி'],
+ // CLDR #1676 - #1687
+ abbreviated: [
+ 'ஜன.',
+ 'பிப்.',
+ 'மார்.',
+ 'ஏப்.',
+ 'மே',
+ 'ஜூன்',
+ 'ஜூலை',
+ 'ஆக.',
+ 'செப்.',
+ 'அக்.',
+ 'நவ.',
+ 'டிச.'
+ ],
+ // CLDR #1652 - #1663
+ wide: [
+ 'ஜனவரி', // January
+ 'பிப்ரவரி', // February
+ 'மார்ச்', // March
+ 'ஏப்ரல்', // April
+ 'மே', // May
+ 'ஜூன்', // June
+ 'ஜூலை', // July
+ 'ஆகஸ்ட்', // August
+ 'செப்டம்பர்', // September
+ 'அக்டோபர்', // October
+ 'நவம்பர்', // November
+ 'டிசம்பர்' // December
+ ]
+}
+
+var dayValues = {
+ // CLDR #1766 - #1772
+ narrow: ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],
+ // CLDR #1752 - #1758
+ short: ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],
+ // CLDR #1738 - #1744
+ abbreviated: ['ஞாயி.', 'திங்.', 'செவ்.', 'புத.', 'வியா.', 'வெள்.', 'சனி'],
+ // CLDR #1724 - #1730
+ wide: [
+ 'ஞாயிறு', // Sunday
+ 'திங்கள்', // Monday
+ 'செவ்வாய்', // Tuesday
+ 'புதன்', // Wednesday
+ 'வியாழன்', // Thursday
+ 'வெள்ளி', // Friday
+ 'சனி' // Saturday
+ ]
+}
+
+// CLDR #1780 - #1845
+var dayPeriodValues = {
+ narrow: {
+ am: 'மு.ப',
+ pm: 'பி.ப',
+ midnight: 'நள்.',
+ noon: 'நண்.',
+ morning: 'கா.',
+ afternoon: 'மதி.',
+ evening: 'மா.',
+ night: 'இர.'
+ },
+ abbreviated: {
+ am: 'முற்பகல்',
+ pm: 'பிற்பகல்',
+ midnight: 'நள்ளிரவு',
+ noon: 'நண்பகல்',
+ morning: 'காலை',
+ afternoon: 'மதியம்',
+ evening: 'மாலை',
+ night: 'இரவு'
+ },
+ wide: {
+ am: 'முற்பகல்',
+ pm: 'பிற்பகல்',
+ midnight: 'நள்ளிரவு',
+ noon: 'நண்பகல்',
+ morning: 'காலை',
+ afternoon: 'மதியம்',
+ evening: 'மாலை',
+ night: 'இரவு'
+ }
+}
+
+// CLDR #1780 - #1845
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'மு.ப',
+ pm: 'பி.ப',
+ midnight: 'நள்.',
+ noon: 'நண்.',
+ morning: 'கா.',
+ afternoon: 'மதி.',
+ evening: 'மா.',
+ night: 'இர.'
+ },
+ abbreviated: {
+ am: 'முற்பகல்',
+ pm: 'பிற்பகல்',
+ midnight: 'நள்ளிரவு',
+ noon: 'நண்பகல்',
+ morning: 'காலை',
+ afternoon: 'மதியம்',
+ evening: 'மாலை',
+ night: 'இரவு'
+ },
+ wide: {
+ am: 'முற்பகல்',
+ pm: 'பிற்பகல்',
+ midnight: 'நள்ளிரவு',
+ noon: 'நண்பகல்',
+ morning: 'காலை',
+ afternoon: 'மதியம்',
+ evening: 'மாலை',
+ night: 'இரவு'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ // var rem100 = number % 100
+ // if (rem100 > 20 || rem100 < 10) {
+ // switch (rem100 % 10) {
+ // case 1:
+ // return number + 'st'
+ // case 2:
+ // return number + 'nd'
+ // case 3:
+ // return number + 'rd'
+ // }
+ // }
+ // return number + 'th'
+ return number
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ta/_lib/match/index.js b/date-fns/src/locale/ta/_lib/match/index.js
new file mode 100644
index 0000000..f548f7f
--- /dev/null
+++ b/date-fns/src/locale/ta/_lib/match/index.js
@@ -0,0 +1,148 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(வது)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(கி.மு.|கி.பி.)/i,
+ abbreviated: /^(கி\.?\s?மு\.?|கி\.?\s?பி\.?)/,
+ wide: /^(கிறிஸ்துவுக்கு\sமுன்|அன்னோ\sடோமினி)/i
+}
+
+var parseEraPatterns = {
+ any: [/கி\.?\s?மு\.?/, /கி\.?\s?பி\.?/]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^காலா.[1234]/i,
+ wide: /^(ஒன்றாம்|இரண்டாம்|மூன்றாம்|நான்காம்) காலாண்டு/i
+}
+
+var parseQuarterPatterns = {
+ narrow: [/1/i, /2/i, /3/i, /4/i],
+ any: [
+ /(1|காலா.1|ஒன்றாம்)/i,
+ /(2|காலா.2|இரண்டாம்)/i,
+ /(3|காலா.3|மூன்றாம்)/i,
+ /(4|காலா.4|நான்காம்)/i
+ ]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(ஜ|பி|மா|ஏ|மே|ஜூ|ஆ|செ|அ|ந|டி)$/i,
+ abbreviated: /^(ஜன.|பிப்.|மார்.|ஏப்.|மே|ஜூன்|ஜூலை|ஆக.|செப்.|அக்.|நவ.|டிச.)/i,
+ wide: /^(ஜனவரி|பிப்ரவரி|மார்ச்|ஏப்ரல்|மே|ஜூன்|ஜூலை|ஆகஸ்ட்|செப்டம்பர்|அக்டோபர்|நவம்பர்|டிசம்பர்)/i
+}
+
+var parseMonthPatterns = {
+ narrow: [
+ /^ஜ$/i,
+ /^பி/i,
+ /^மா/i,
+ /^ஏ/i,
+ /^மே/i,
+ /^ஜூ/i,
+ /^ஜூ/i,
+ /^ஆ/i,
+ /^செ/i,
+ /^அ/i,
+ /^ந/i,
+ /^டி/i
+ ],
+ any: [
+ /^ஜன/i,
+ /^பி/i,
+ /^மா/i,
+ /^ஏ/i,
+ /^மே/i,
+ /^ஜூன்/i,
+ /^ஜூலை/i,
+ /^ஆ/i,
+ /^செ/i,
+ /^அ/i,
+ /^ந/i,
+ /^டி/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(ஞா|தி|செ|பு|வி|வெ|ச)/i,
+ short: /^(ஞா|தி|செ|பு|வி|வெ|ச)/i,
+ abbreviated: /^(ஞாயி.|திங்.|செவ்.|புத.|வியா.|வெள்.|சனி)/i,
+ wide: /^(ஞாயிறு|திங்கள்|செவ்வாய்|புதன்|வியாழன்|வெள்ளி|சனி)/i
+}
+
+var parseDayPatterns = {
+ narrow: [/^ஞா/i, /^தி/i, /^செ/i, /^பு/i, /^வி/i, /^வெ/i, /^ச/i],
+ any: [/^ஞா/i, /^தி/i, /^செ/i, /^பு/i, /^வி/i, /^வெ/i, /^ச/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(மு.ப|பி.ப|நள்|நண்|காலை|மதியம்|மாலை|இரவு)/i,
+ any: /^(மு.ப|பி.ப|முற்பகல்|பிற்பகல்|நள்ளிரவு|நண்பகல்|காலை|மதியம்|மாலை|இரவு)/i
+}
+
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^மு/i,
+ pm: /^பி/i,
+ midnight: /^நள்/i,
+ noon: /^நண்/i,
+ morning: /காலை/i,
+ afternoon: /மதியம்/i,
+ evening: /மாலை/i,
+ night: /இரவு/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ta/index.d.ts b/date-fns/src/locale/ta/index.d.ts
new file mode 100644
index 0000000..fb9a06a
--- /dev/null
+++ b/date-fns/src/locale/ta/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ta } from 'date-fns/locale'
+export default ta
diff --git a/date-fns/src/locale/ta/index.js b/date-fns/src/locale/ta/index.js
new file mode 100644
index 0000000..a2d289a
--- /dev/null
+++ b/date-fns/src/locale/ta/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Tamil locale (India).
+ * @language Tamil
+ * @iso-639-2 tam
+ * @author Sibiraj [@sibiraj-s]{@link https://github.com/sibiraj-s}
+ */
+var locale = {
+ code: 'ta',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ta/index.js.flow b/date-fns/src/locale/ta/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ta/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ta/snapshot.md b/date-fns/src/locale/ta/snapshot.md
new file mode 100644
index 0000000..5b005fb
--- /dev/null
+++ b/date-fns/src/locale/ta/snapshot.md
@@ -0,0 +1,304 @@
+# Tamil (ta) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 4 | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | காலா.1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | காலா.2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | ஒன்றாம் காலாண்டு | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | இரண்டாம் காலாண்டு | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | காலா.1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | காலா.2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | ஒன்றாம் காலாண்டு | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | இரண்டாம் காலாண்டு | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | பிப். | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ஜூலை | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | பிப்ரவரி | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ஜூலை | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | பி | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ஜூ | 2019-06-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | பிப். | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ஜூலை | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | பிப்ரவரி | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ஜூலை | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | பி | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ஜூ | 2019-06-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | திங். | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள். | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | திங். | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள். | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | திங். | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள். | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | திங்கள் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள்ளி | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | தி | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெ | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | தி | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெ | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | திங். | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள். | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | திங்கள் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள்ளி | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | தி | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெ | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | தி | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெ | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | திங். | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள். | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | திங்கள் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள்ளி | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | தி | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெ | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | தி | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெ | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | திங். | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள். | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | திங்கள் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெள்ளி | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | தி | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெ | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | தி | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | வெ | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | மு.ப | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பி.ப | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பி.ப | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | மு.ப | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பிற்பகல் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | முற்பகல் | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | மு.ப | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | பி.ப | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | பி.ப | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | மு.ப | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | காலை | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | மதியம் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | மாலை | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | இரவு | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | காலை | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | மதியம் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | மாலை | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | இரவு | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | காலை | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | மதியம் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | மாலை | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | இரவு | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | காலை | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | மதியம் | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | மாலை | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | இரவு | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | கா. | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | மதி. | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | மா. | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | இர. | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/2/87 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/53 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 பிப்., 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 மே, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 பிப்ரவரி, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 மே, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | புதன், 11 பிப்ரவரி, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | ஞாயிறு, 29 மே, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | பிற்பகல் 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | பிற்பகல் 11:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | பிற்பகல் 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | பிற்பகல் 11:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | பிற்பகல் 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | பிற்பகல் 11:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | பிற்பகல் 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | பிற்பகல் 11:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/2/87, பிற்பகல் 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/5/53, பிற்பகல் 11:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 பிப்., 1987, பிற்பகல் 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 மே, 1453, பிற்பகல் 11:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 பிப்ரவரி, 1987 பிற்பகல் 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 மே, 1453 பிற்பகல் 11:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | புதன், 11 பிப்ரவரி, 1987 பிற்பகல் 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | ஞாயிறு, 29 மே, 1453 பிற்பகல் 11:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | --------------------------- | ------------------------ | ------------------------------- |
+| 2006-01-01T00:00:00.000Z | சுமார் 6 ஆண்டுகள் | சுமார் 6 ஆண்டுகள் | சுமார் 6 ஆண்டுகளில் |
+| 2005-01-01T00:00:00.000Z | சுமார் 5 ஆண்டுகள் | சுமார் 5 ஆண்டுகள் | சுமார் 5 ஆண்டுகளில் |
+| 2004-01-01T00:00:00.000Z | சுமார் 4 ஆண்டுகள் | சுமார் 4 ஆண்டுகள் | சுமார் 4 ஆண்டுகளில் |
+| 2003-01-01T00:00:00.000Z | சுமார் 3 ஆண்டுகள் | சுமார் 3 ஆண்டுகள் | சுமார் 3 ஆண்டுகளில் |
+| 2002-01-01T00:00:00.000Z | சுமார் 2 ஆண்டுகள் | சுமார் 2 ஆண்டுகள் | சுமார் 2 ஆண்டுகளில் |
+| 2001-06-01T00:00:00.000Z | 1 வருடத்திற்கு மேல் | 1 வருடத்திற்கு மேல் | 1 வருடத்திற்கும் மேலாக |
+| 2001-02-01T00:00:00.000Z | சுமார் 1 வருடம் | சுமார் 1 வருடம் | சுமார் 1 ஆண்டில் |
+| 2001-01-01T00:00:00.000Z | சுமார் 1 வருடம் | சுமார் 1 வருடம் | சுமார் 1 ஆண்டில் |
+| 2000-06-01T00:00:00.000Z | 5 மாதங்கள் | 5 மாதங்கள் | 5 மாதங்களில் |
+| 2000-03-01T00:00:00.000Z | 2 மாதங்கள் | 2 மாதங்கள் | 2 மாதங்களில் |
+| 2000-02-01T00:00:00.000Z | சுமார் 1 மாதம் | சுமார் 1 மாதம் | சுமார் 1 மாதத்தில் |
+| 2000-01-15T00:00:00.000Z | 14 நாட்கள் | 14 நாட்கள் | 14 நாட்களில் |
+| 2000-01-02T00:00:00.000Z | 1 நாள் | 1 நாள் | 1 நாளில் |
+| 2000-01-01T06:00:00.000Z | சுமார் 6 மணி நேரம் | சுமார் 6 மணி நேரம் | சுமார் 6 மணி நேரத்திற்கு முன்பு |
+| 2000-01-01T01:00:00.000Z | சுமார் 1 மணி நேரம் | சுமார் 1 மணி நேரம் | சுமார் 1 மணி நேரத்தில் |
+| 2000-01-01T00:45:00.000Z | சுமார் 1 மணி நேரம் | சுமார் 1 மணி நேரம் | சுமார் 1 மணி நேரத்தில் |
+| 2000-01-01T00:30:00.000Z | 30 நிமிடங்கள் | 30 நிமிடங்கள் | 30 நிமிடங்களில் |
+| 2000-01-01T00:15:00.000Z | 15 நிமிடங்கள் | 15 நிமிடங்கள் | 15 நிமிடங்களில் |
+| 2000-01-01T00:01:00.000Z | 1 நிமிடம் | 1 நிமிடம் | 1 நிமிடத்தில் |
+| 2000-01-01T00:00:25.000Z | ஒரு நிமிடத்திற்கும் குறைவாக | அரை நிமிடம் | ஒரு நிமிடத்திற்குள் |
+| 2000-01-01T00:00:15.000Z | ஒரு நிமிடத்திற்கும் குறைவாக | 20 வினாடிகளுக்கு குறைவாக | ஒரு நிமிடத்திற்குள் |
+| 2000-01-01T00:00:05.000Z | ஒரு நிமிடத்திற்கும் குறைவாக | 10 வினாடிகளுக்கு குறைவாக | ஒரு நிமிடத்திற்குள் |
+| 2000-01-01T00:00:00.000Z | ஒரு நிமிடத்திற்கும் குறைவாக | 5 வினாடிகளுக்கு குறைவாக | ஒரு நிமிடத்திற்கு முன்பு |
+| 1999-12-31T23:59:55.000Z | ஒரு நிமிடத்திற்கும் குறைவாக | 10 வினாடிகளுக்கு குறைவாக | ஒரு நிமிடத்திற்கு முன்பு |
+| 1999-12-31T23:59:45.000Z | ஒரு நிமிடத்திற்கும் குறைவாக | 20 வினாடிகளுக்கு குறைவாக | ஒரு நிமிடத்திற்கு முன்பு |
+| 1999-12-31T23:59:35.000Z | ஒரு நிமிடத்திற்கும் குறைவாக | அரை நிமிடம் | ஒரு நிமிடத்திற்கு முன்பு |
+| 1999-12-31T23:59:00.000Z | 1 நிமிடம் | 1 நிமிடம் | 1 நிமிடம் முன்பு |
+| 1999-12-31T23:45:00.000Z | 15 நிமிடங்கள் | 15 நிமிடங்கள் | 15 நிமிடங்களுக்கு முன்பு |
+| 1999-12-31T23:30:00.000Z | 30 நிமிடங்கள் | 30 நிமிடங்கள் | 30 நிமிடங்களுக்கு முன்பு |
+| 1999-12-31T23:15:00.000Z | சுமார் 1 மணி நேரம் | சுமார் 1 மணி நேரம் | சுமார் 1 மணி நேரத்திற்கு முன்பு |
+| 1999-12-31T23:00:00.000Z | சுமார் 1 மணி நேரம் | சுமார் 1 மணி நேரம் | சுமார் 1 மணி நேரத்திற்கு முன்பு |
+| 1999-12-31T18:00:00.000Z | சுமார் 6 மணி நேரம் | சுமார் 6 மணி நேரம் | சுமார் 6 மணி நேரத்தில் |
+| 1999-12-30T00:00:00.000Z | 2 நாட்கள் | 2 நாட்கள் | 2 நாட்களுக்கு முன்பு |
+| 1999-12-15T00:00:00.000Z | 17 நாட்கள் | 17 நாட்கள் | 17 நாட்களுக்கு முன்பு |
+| 1999-12-01T00:00:00.000Z | சுமார் 1 மாதம் | சுமார் 1 மாதம் | சுமார் 1 மாதத்திற்கு முன்பு |
+| 1999-11-01T00:00:00.000Z | 2 மாதங்கள் | 2 மாதங்கள் | 2 மாதங்களுக்கு முன்பு |
+| 1999-06-01T00:00:00.000Z | 7 மாதங்கள் | 7 மாதங்கள் | 7 மாதங்களுக்கு முன்பு |
+| 1999-01-01T00:00:00.000Z | சுமார் 1 வருடம் | சுமார் 1 வருடம் | சுமார் 1 வருடம் முன்பு |
+| 1998-12-01T00:00:00.000Z | சுமார் 1 வருடம் | சுமார் 1 வருடம் | சுமார் 1 வருடம் முன்பு |
+| 1998-06-01T00:00:00.000Z | 1 வருடத்திற்கு மேல் | 1 வருடத்திற்கு மேல் | 1 வருடம் முன்பு |
+| 1998-01-01T00:00:00.000Z | சுமார் 2 ஆண்டுகள் | சுமார் 2 ஆண்டுகள் | சுமார் 2 ஆண்டுகளுக்கு முன்பு |
+| 1997-01-01T00:00:00.000Z | சுமார் 3 ஆண்டுகள் | சுமார் 3 ஆண்டுகள் | சுமார் 3 ஆண்டுகளுக்கு முன்பு |
+| 1996-01-01T00:00:00.000Z | சுமார் 4 ஆண்டுகள் | சுமார் 4 ஆண்டுகள் | சுமார் 4 ஆண்டுகளுக்கு முன்பு |
+| 1995-01-01T00:00:00.000Z | சுமார் 5 ஆண்டுகள் | சுமார் 5 ஆண்டுகள் | சுமார் 5 ஆண்டுகளுக்கு முன்பு |
+| 1994-01-01T00:00:00.000Z | சுமார் 6 ஆண்டுகள் | சுமார் 6 ஆண்டுகள் | சுமார் 6 ஆண்டுகளுக்கு முன்பு |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------------- | ------------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 ஆண்டுகள் | 6 ஆண்டுகளில் | 52608 மணி நேரம் |
+| 2005-01-01T00:00:00.000Z | 5 ஆண்டுகள் | 5 ஆண்டுகளில் | 43848 மணி நேரம் |
+| 2004-01-01T00:00:00.000Z | 4 ஆண்டுகள் | 4 ஆண்டுகளில் | 35064 மணி நேரம் |
+| 2003-01-01T00:00:00.000Z | 3 ஆண்டுகள் | 3 ஆண்டுகளில் | 26304 மணி நேரம் |
+| 2002-01-01T00:00:00.000Z | 2 ஆண்டுகள் | 2 ஆண்டுகளில் | 17544 மணி நேரம் |
+| 2001-06-01T00:00:00.000Z | 1 வருடம் | 1 ஆண்டில் | 12408 மணி நேரம் |
+| 2001-02-01T00:00:00.000Z | 1 வருடம் | 1 ஆண்டில் | 9528 மணி நேரம் |
+| 2001-01-01T00:00:00.000Z | 1 வருடம் | 1 ஆண்டில் | 8784 மணி நேரம் |
+| 2000-06-01T00:00:00.000Z | 5 மாதங்கள் | 5 மாதங்களில் | 3648 மணி நேரம் |
+| 2000-03-01T00:00:00.000Z | 2 மாதங்கள் | 2 மாதங்களில் | 1440 மணி நேரம் |
+| 2000-02-01T00:00:00.000Z | 1 மாதம் | 1 மாதத்தில் | 744 மணி நேரம் |
+| 2000-01-15T00:00:00.000Z | 14 நாட்கள் | 14 நாட்களில் | 336 மணி நேரம் |
+| 2000-01-02T00:00:00.000Z | 1 நாள் | 1 நாளில் | 24 மணி நேரம் |
+| 2000-01-01T06:00:00.000Z | 6 மணி நேரம் | 6 மணி நேரத்தில் | 6 மணி நேரம் |
+| 2000-01-01T01:00:00.000Z | 1 மணி நேரம் | 1 மணி நேரத்தில் | 1 மணி நேரம் |
+| 2000-01-01T00:45:00.000Z | 45 நிமிடங்கள் | 45 நிமிடங்களில் | 1 மணி நேரம் |
+| 2000-01-01T00:30:00.000Z | 30 நிமிடங்கள் | 30 நிமிடங்களில் | 1 மணி நேரம் |
+| 2000-01-01T00:15:00.000Z | 15 நிமிடங்கள் | 15 நிமிடங்களில் | 0 மணி நேரம் |
+| 2000-01-01T00:01:00.000Z | 1 நிமிடம் | 1 நிமிடத்தில் | 0 மணி நேரம் |
+| 2000-01-01T00:00:25.000Z | 25 விநாடிகள் | 25 வினாடிகளில் | 0 மணி நேரம் |
+| 2000-01-01T00:00:15.000Z | 15 விநாடிகள் | 15 வினாடிகளில் | 0 மணி நேரம் |
+| 2000-01-01T00:00:05.000Z | 5 விநாடிகள் | 5 வினாடிகளில் | 0 மணி நேரம் |
+| 2000-01-01T00:00:00.000Z | 0 விநாடிகள் | 0 விநாடிகளுக்கு முன்பு | 0 மணி நேரம் |
+| 1999-12-31T23:59:55.000Z | 5 விநாடிகள் | 5 விநாடிகளுக்கு முன்பு | 0 மணி நேரம் |
+| 1999-12-31T23:59:45.000Z | 15 விநாடிகள் | 15 விநாடிகளுக்கு முன்பு | 0 மணி நேரம் |
+| 1999-12-31T23:59:35.000Z | 25 விநாடிகள் | 25 விநாடிகளுக்கு முன்பு | 0 மணி நேரம் |
+| 1999-12-31T23:59:00.000Z | 1 நிமிடம் | 1 நிமிடம் முன்பு | 0 மணி நேரம் |
+| 1999-12-31T23:45:00.000Z | 15 நிமிடங்கள் | 15 நிமிடங்களுக்கு முன்பு | 0 மணி நேரம் |
+| 1999-12-31T23:30:00.000Z | 30 நிமிடங்கள் | 30 நிமிடங்களுக்கு முன்பு | 1 மணி நேரம் |
+| 1999-12-31T23:15:00.000Z | 45 நிமிடங்கள் | 45 நிமிடங்களுக்கு முன்பு | 1 மணி நேரம் |
+| 1999-12-31T23:00:00.000Z | 1 மணி நேரம் | 1 மணி நேரத்திற்கு முன்பு | 1 மணி நேரம் |
+| 1999-12-31T18:00:00.000Z | 6 மணி நேரம் | 6 மணி நேரத்திற்கு முன்பு | 6 மணி நேரம் |
+| 1999-12-30T00:00:00.000Z | 2 நாட்கள் | 2 நாட்களுக்கு முன்பு | 48 மணி நேரம் |
+| 1999-12-15T00:00:00.000Z | 17 நாட்கள் | 17 நாட்களுக்கு முன்பு | 408 மணி நேரம் |
+| 1999-12-01T00:00:00.000Z | 1 மாதம் | 1 மாதம் முன்பு | 744 மணி நேரம் |
+| 1999-11-01T00:00:00.000Z | 2 மாதங்கள் | 2 மாதங்களுக்கு முன்பு | 1464 மணி நேரம் |
+| 1999-06-01T00:00:00.000Z | 7 மாதங்கள் | 7 மாதங்களுக்கு முன்பு | 5136 மணி நேரம் |
+| 1999-01-01T00:00:00.000Z | 1 வருடம் | 1 வருடம் முன்பு | 8760 மணி நேரம் |
+| 1998-12-01T00:00:00.000Z | 1 வருடம் | 1 வருடம் முன்பு | 9504 மணி நேரம் |
+| 1998-06-01T00:00:00.000Z | 2 ஆண்டுகள் | 2 ஆண்டுகளுக்கு முன்பு | 13896 மணி நேரம் |
+| 1998-01-01T00:00:00.000Z | 2 ஆண்டுகள் | 2 ஆண்டுகளுக்கு முன்பு | 17520 மணி நேரம் |
+| 1997-01-01T00:00:00.000Z | 3 ஆண்டுகள் | 3 ஆண்டுகளுக்கு முன்பு | 26280 மணி நேரம் |
+| 1996-01-01T00:00:00.000Z | 4 ஆண்டுகள் | 4 ஆண்டுகளுக்கு முன்பு | 35064 மணி நேரம் |
+| 1995-01-01T00:00:00.000Z | 5 ஆண்டுகள் | 5 ஆண்டுகளுக்கு முன்பு | 43824 மணி நேரம் |
+| 1994-01-01T00:00:00.000Z | 6 ஆண்டுகள் | 6 ஆண்டுகளுக்கு முன்பு | 52584 மணி நேரம் |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------------------ |
+| 2000-01-10T00:00:00.000Z | 10/1/00 |
+| 2000-01-05T00:00:00.000Z | புதன் முற்பகல் 12:00 மணிக்கு |
+| 2000-01-02T00:00:00.000Z | நாளை முற்பகல் 12:00 மணிக்கு |
+| 2000-01-01T00:00:00.000Z | இன்று முற்பகல் 12:00 மணிக்கு |
+| 1999-12-31T00:00:00.000Z | நேற்று முற்பகல் 12:00 மணிக்கு |
+| 1999-12-27T00:00:00.000Z | கடந்த திங்கள் முற்பகல் 12:00 மணிக்கு |
+| 1999-12-21T00:00:00.000Z | 21/12/99 |
diff --git a/date-fns/src/locale/te/_lib/formatDistance/index.js b/date-fns/src/locale/te/_lib/formatDistance/index.js
new file mode 100644
index 0000000..f022f99
--- /dev/null
+++ b/date-fns/src/locale/te/_lib/formatDistance/index.js
@@ -0,0 +1,199 @@
+// Source: https://www.unicode.org/cldr/charts/32/summary/te.html
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ standalone: {
+ one: 'సెకను కన్నా తక్కువ',
+ other: '{{count}} సెకన్ల కన్నా తక్కువ'
+ },
+ withPreposition: {
+ one: 'సెకను',
+ other: '{{count}} సెకన్ల'
+ }
+ },
+
+ xSeconds: {
+ standalone: {
+ one: 'ఒక సెకను', // CLDR #1314
+ other: '{{count}} సెకన్ల'
+ },
+ withPreposition: {
+ one: 'ఒక సెకను',
+ other: '{{count}} సెకన్ల'
+ }
+ },
+
+ halfAMinute: {
+ standalone: 'అర నిమిషం',
+ withPreposition: 'అర నిమిషం'
+ },
+
+ lessThanXMinutes: {
+ standalone: {
+ one: 'ఒక నిమిషం కన్నా తక్కువ',
+ other: '{{count}} నిమిషాల కన్నా తక్కువ'
+ },
+ withPreposition: {
+ one: 'ఒక నిమిషం',
+ other: '{{count}} నిమిషాల'
+ }
+ },
+
+ xMinutes: {
+ standalone: {
+ one: 'ఒక నిమిషం', // CLDR #1311
+ other: '{{count}} నిమిషాలు'
+ },
+ withPreposition: {
+ one: 'ఒక నిమిషం', // CLDR #1311
+ other: '{{count}} నిమిషాల'
+ }
+ },
+
+ aboutXHours: {
+ standalone: {
+ one: 'సుమారు ఒక గంట',
+ other: 'సుమారు {{count}} గంటలు'
+ },
+ withPreposition: {
+ one: 'సుమారు ఒక గంట',
+ other: 'సుమారు {{count}} గంటల'
+ }
+ },
+
+ xHours: {
+ standalone: {
+ one: 'ఒక గంట', // CLDR #1308
+ other: '{{count}} గంటలు'
+ },
+ withPreposition: {
+ one: 'ఒక గంట',
+ other: '{{count}} గంటల'
+ }
+ },
+
+ xDays: {
+ standalone: {
+ one: 'ఒక రోజు', // CLDR #1292
+ other: '{{count}} రోజులు'
+ },
+ withPreposition: {
+ one: 'ఒక రోజు',
+ other: '{{count}} రోజుల'
+ }
+ },
+
+ aboutXWeeks: {
+ standalone: {
+ one: 'సుమారు ఒక వారం',
+ other: 'సుమారు {{count}} వారాలు'
+ },
+ withPreposition: {
+ one: 'సుమారు ఒక వారం',
+ other: 'సుమారు {{count}} వారాలల'
+ }
+ },
+
+ xWeeks: {
+ standalone: {
+ one: 'ఒక వారం',
+ other: '{{count}} వారాలు'
+ },
+ withPreposition: {
+ one: 'ఒక వారం',
+ other: '{{count}} వారాలల'
+ }
+ },
+
+ aboutXMonths: {
+ standalone: {
+ one: 'సుమారు ఒక నెల',
+ other: 'సుమారు {{count}} నెలలు'
+ },
+ withPreposition: {
+ one: 'సుమారు ఒక నెల',
+ other: 'సుమారు {{count}} నెలల'
+ }
+ },
+
+ xMonths: {
+ standalone: {
+ one: 'ఒక నెల', // CLDR #1281
+ other: '{{count}} నెలలు'
+ },
+ withPreposition: {
+ one: 'ఒక నెల',
+ other: '{{count}} నెలల'
+ }
+ },
+
+ aboutXYears: {
+ standalone: {
+ one: 'సుమారు ఒక సంవత్సరం',
+ other: 'సుమారు {{count}} సంవత్సరాలు'
+ },
+ withPreposition: {
+ one: 'సుమారు ఒక సంవత్సరం',
+ other: 'సుమారు {{count}} సంవత్సరాల'
+ }
+ },
+
+ xYears: {
+ standalone: {
+ one: 'ఒక సంవత్సరం', // CLDR #1275
+ other: '{{count}} సంవత్సరాలు'
+ },
+ withPreposition: {
+ one: 'ఒక సంవత్సరం',
+ other: '{{count}} సంవత్సరాల'
+ }
+ },
+
+ overXYears: {
+ standalone: {
+ one: 'ఒక సంవత్సరం పైగా',
+ other: '{{count}} సంవత్సరాలకు పైగా'
+ },
+ withPreposition: {
+ one: 'ఒక సంవత్సరం',
+ other: '{{count}} సంవత్సరాల'
+ }
+ },
+
+ almostXYears: {
+ standalone: {
+ one: 'దాదాపు ఒక సంవత్సరం',
+ other: 'దాదాపు {{count}} సంవత్సరాలు'
+ },
+ withPreposition: {
+ one: 'దాదాపు ఒక సంవత్సరం',
+ other: 'దాదాపు {{count}} సంవత్సరాల'
+ }
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var usageGroup = options.addSuffix
+ ? formatDistanceLocale[token].withPreposition
+ : formatDistanceLocale[token].standalone
+
+ var result
+ if (typeof usageGroup === 'string') {
+ result = usageGroup
+ } else if (count === 1) {
+ result = usageGroup.one
+ } else {
+ result = usageGroup.other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + 'లో'
+ } else {
+ return result + ' క్రితం'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/te/_lib/formatLong/index.js b/date-fns/src/locale/te/_lib/formatLong/index.js
new file mode 100644
index 0000000..c1391f7
--- /dev/null
+++ b/date-fns/src/locale/te/_lib/formatLong/index.js
@@ -0,0 +1,45 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+// Source: https://www.unicode.org/cldr/charts/32/summary/te.html
+
+// CLDR #1807 - #1811
+var dateFormats = {
+ full: 'd, MMMM y, EEEE',
+ long: 'd MMMM, y',
+ medium: 'd MMM, y',
+ short: 'dd-MM-yy'
+}
+
+// CLDR #1807 - #1811
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+// CLDR #1815 - #1818
+var dateTimeFormats = {
+ full: "{{date}} {{time}}'కి'",
+ long: "{{date}} {{time}}'కి'",
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/te/_lib/formatRelative/index.js b/date-fns/src/locale/te/_lib/formatRelative/index.js
new file mode 100644
index 0000000..3bcee42
--- /dev/null
+++ b/date-fns/src/locale/te/_lib/formatRelative/index.js
@@ -0,0 +1,14 @@
+// Source: https://www.unicode.org/cldr/charts/32/summary/te.html
+
+var formatRelativeLocale = {
+ lastWeek: "'గత' eeee p", // CLDR #1384
+ yesterday: "'నిన్న' p", // CLDR #1393
+ today: "'ఈ రోజు' p", // CLDR #1394
+ tomorrow: "'రేపు' p", // CLDR #1395
+ nextWeek: "'తదుపరి' eeee p", // CLDR #1386
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/te/_lib/localize/index.js b/date-fns/src/locale/te/_lib/localize/index.js
new file mode 100644
index 0000000..5eed352
--- /dev/null
+++ b/date-fns/src/locale/te/_lib/localize/index.js
@@ -0,0 +1,173 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+// Source: https://www.unicode.org/cldr/charts/32/summary/te.html
+// Source: https://dsal.uchicago.edu/dictionaries/brown/
+
+// CLDR #1605 - #1608
+var eraValues = {
+ narrow: ['క్రీ.పూ.', 'క్రీ.శ.'],
+ abbreviated: ['క్రీ.పూ.', 'క్రీ.శ.'],
+ wide: ['క్రీస్తు పూర్వం', 'క్రీస్తుశకం']
+}
+
+// CLDR #1613 - #1628
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['త్రై1', 'త్రై2', 'త్రై3', 'త్రై4'],
+ wide: ['1వ త్రైమాసికం', '2వ త్రైమాసికం', '3వ త్రైమాసికం', '4వ త్రైమాసికం']
+}
+
+// CLDR #1637 - #1708
+var monthValues = {
+ narrow: ['జ', 'ఫి', 'మా', 'ఏ', 'మే', 'జూ', 'జు', 'ఆ', 'సె', 'అ', 'న', 'డి'],
+ abbreviated: [
+ 'జన',
+ 'ఫిబ్ర',
+ 'మార్చి',
+ 'ఏప్రి',
+ 'మే',
+ 'జూన్',
+ 'జులై',
+ 'ఆగ',
+ 'సెప్టెం',
+ 'అక్టో',
+ 'నవం',
+ 'డిసెం'
+ ],
+ wide: [
+ 'జనవరి',
+ 'ఫిబ్రవరి',
+ 'మార్చి',
+ 'ఏప్రిల్',
+ 'మే',
+ 'జూన్',
+ 'జులై',
+ 'ఆగస్టు',
+ 'సెప్టెంబర్',
+ 'అక్టోబర్',
+ 'నవంబర్',
+ 'డిసెంబర్'
+ ]
+}
+
+// CLDR #1709 - #1764
+var dayValues = {
+ narrow: ['ఆ', 'సో', 'మ', 'బు', 'గు', 'శు', 'శ'],
+ short: ['ఆది', 'సోమ', 'మంగళ', 'బుధ', 'గురు', 'శుక్ర', 'శని'],
+ abbreviated: ['ఆది', 'సోమ', 'మంగళ', 'బుధ', 'గురు', 'శుక్ర', 'శని'],
+ wide: [
+ 'ఆదివారం',
+ 'సోమవారం',
+ 'మంగళవారం',
+ 'బుధవారం',
+ 'గురువారం',
+ 'శుక్రవారం',
+ 'శనివారం'
+ ]
+}
+
+// CLDR #1767 - #1806
+var dayPeriodValues = {
+ narrow: {
+ am: 'పూర్వాహ్నం',
+ pm: 'అపరాహ్నం',
+ midnight: 'అర్ధరాత్రి',
+ noon: 'మిట్టమధ్యాహ్నం',
+ morning: 'ఉదయం',
+ afternoon: 'మధ్యాహ్నం',
+ evening: 'సాయంత్రం',
+ night: 'రాత్రి'
+ },
+ abbreviated: {
+ am: 'పూర్వాహ్నం',
+ pm: 'అపరాహ్నం',
+ midnight: 'అర్ధరాత్రి',
+ noon: 'మిట్టమధ్యాహ్నం',
+ morning: 'ఉదయం',
+ afternoon: 'మధ్యాహ్నం',
+ evening: 'సాయంత్రం',
+ night: 'రాత్రి'
+ },
+ wide: {
+ am: 'పూర్వాహ్నం',
+ pm: 'అపరాహ్నం',
+ midnight: 'అర్ధరాత్రి',
+ noon: 'మిట్టమధ్యాహ్నం',
+ morning: 'ఉదయం',
+ afternoon: 'మధ్యాహ్నం',
+ evening: 'సాయంత్రం',
+ night: 'రాత్రి'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'పూర్వాహ్నం',
+ pm: 'అపరాహ్నం',
+ midnight: 'అర్ధరాత్రి',
+ noon: 'మిట్టమధ్యాహ్నం',
+ morning: 'ఉదయం',
+ afternoon: 'మధ్యాహ్నం',
+ evening: 'సాయంత్రం',
+ night: 'రాత్రి'
+ },
+ abbreviated: {
+ am: 'పూర్వాహ్నం',
+ pm: 'అపరాహ్నం',
+ midnight: 'అర్ధరాత్రి',
+ noon: 'మిట్టమధ్యాహ్నం',
+ morning: 'ఉదయం',
+ afternoon: 'మధ్యాహ్నం',
+ evening: 'సాయంత్రం',
+ night: 'రాత్రి'
+ },
+ wide: {
+ am: 'పూర్వాహ్నం',
+ pm: 'అపరాహ్నం',
+ midnight: 'అర్ధరాత్రి',
+ noon: 'మిట్టమధ్యాహ్నం',
+ morning: 'ఉదయం',
+ afternoon: 'మధ్యాహ్నం',
+ evening: 'సాయంత్రం',
+ night: 'రాత్రి'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+ return number + 'వ'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/te/_lib/match/index.js b/date-fns/src/locale/te/_lib/match/index.js
new file mode 100644
index 0000000..f5813f6
--- /dev/null
+++ b/date-fns/src/locale/te/_lib/match/index.js
@@ -0,0 +1,140 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(వ)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(క్రీ\.పూ\.|క్రీ\.శ\.)/i,
+ abbreviated: /^(క్రీ\.?\s?పూ\.?|ప్ర\.?\s?శ\.?\s?పూ\.?|క్రీ\.?\s?శ\.?|సా\.?\s?శ\.?)/i,
+ wide: /^(క్రీస్తు పూర్వం|ప్రస్తుత శకానికి పూర్వం|క్రీస్తు శకం|ప్రస్తుత శకం)/i
+}
+var parseEraPatterns = {
+ any: [/^(పూ|శ)/i, /^సా/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^త్రై[1234]/i,
+ wide: /^[1234](వ)? త్రైమాసికం/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(జూ|జు|జ|ఫి|మా|ఏ|మే|ఆ|సె|అ|న|డి)/i,
+ abbreviated: /^(జన|ఫిబ్ర|మార్చి|ఏప్రి|మే|జూన్|జులై|ఆగ|సెప్|అక్టో|నవ|డిసె)/i,
+ wide: /^(జనవరి|ఫిబ్రవరి|మార్చి|ఏప్రిల్|మే|జూన్|జులై|ఆగస్టు|సెప్టెంబర్|అక్టోబర్|నవంబర్|డిసెంబర్)/i
+}
+
+var parseMonthPatterns = {
+ narrow: [
+ /^జ/i,
+ /^ఫి/i,
+ /^మా/i,
+ /^ఏ/i,
+ /^మే/i,
+ /^జూ/i,
+ /^జు/i,
+ /^ఆ/i,
+ /^సె/i,
+ /^అ/i,
+ /^న/i,
+ /^డి/i
+ ],
+ any: [
+ /^జన/i,
+ /^ఫి/i,
+ /^మా/i,
+ /^ఏ/i,
+ /^మే/i,
+ /^జూన్/i,
+ /^జులై/i,
+ /^ఆగ/i,
+ /^సె/i,
+ /^అ/i,
+ /^న/i,
+ /^డి/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(ఆ|సో|మ|బు|గు|శు|శ)/i,
+ short: /^(ఆది|సోమ|మం|బుధ|గురు|శుక్ర|శని)/i,
+ abbreviated: /^(ఆది|సోమ|మం|బుధ|గురు|శుక్ర|శని)/i,
+ wide: /^(ఆదివారం|సోమవారం|మంగళవారం|బుధవారం|గురువారం|శుక్రవారం|శనివారం)/i
+}
+
+var parseDayPatterns = {
+ narrow: [/^ఆ/i, /^సో/i, /^మ/i, /^బు/i, /^గు/i, /^శు/i, /^శ/i],
+ any: [/^ఆది/i, /^సోమ/i, /^మం/i, /^బుధ/i, /^గురు/i, /^శుక్ర/i, /^శని/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(పూర్వాహ్నం|అపరాహ్నం|అర్ధరాత్రి|మిట్టమధ్యాహ్నం|ఉదయం|మధ్యాహ్నం|సాయంత్రం|రాత్రి)/i,
+ any: /^(పూర్వాహ్నం|అపరాహ్నం|అర్ధరాత్రి|మిట్టమధ్యాహ్నం|ఉదయం|మధ్యాహ్నం|సాయంత్రం|రాత్రి)/i
+}
+
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^పూర్వాహ్నం/i,
+ pm: /^అపరాహ్నం/i,
+ midnight: /^అర్ధ/i,
+ noon: /^మిట్ట/i,
+ morning: /ఉదయం/i,
+ afternoon: /మధ్యాహ్నం/i,
+ evening: /సాయంత్రం/i,
+ night: /రాత్రి/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/te/index.d.ts b/date-fns/src/locale/te/index.d.ts
new file mode 100644
index 0000000..2dab4a8
--- /dev/null
+++ b/date-fns/src/locale/te/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { te } from 'date-fns/locale'
+export default te
diff --git a/date-fns/src/locale/te/index.js b/date-fns/src/locale/te/index.js
new file mode 100644
index 0000000..d51e651
--- /dev/null
+++ b/date-fns/src/locale/te/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Telugu locale
+ * @language Telugu
+ * @iso-639-2 tel
+ * @author Kranthi Lakum [@kranthilakum]{@link https://github.com/kranthilakum}
+ */
+var locale = {
+ code: 'te',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/te/index.js.flow b/date-fns/src/locale/te/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/te/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/te/snapshot.md b/date-fns/src/locale/te/snapshot.md
new file mode 100644
index 0000000..38452df
--- /dev/null
+++ b/date-fns/src/locale/te/snapshot.md
@@ -0,0 +1,304 @@
+# Telugu (te) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987వ | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5వ | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987వ | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5వ | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1వ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2వ | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | త్రై1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | త్రై2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1వ త్రైమాసికం | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2వ త్రైమాసికం | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1వ | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2వ | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | త్రై1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | త్రై2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1వ త్రైమాసికం | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2వ త్రైమాసికం | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2వ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7వ | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | ఫిబ్ర | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | జులై | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | ఫిబ్రవరి | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | జులై | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ఫి | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | జు | 2019-01-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2వ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7వ | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | ఫిబ్ర | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | జులై | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | ఫిబ్రవరి | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | జులై | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ఫి | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | జు | 2019-01-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1వ | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49వ | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1వ | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48వ | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11వ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28వ | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42వ | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365వ | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | సోమవారం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్రవారం | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | సో | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శు | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1వ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5వ | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | సోమవారం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్రవారం | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | సో | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శు | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2వ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6వ | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | సోమవారం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్రవారం | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | సో | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శు | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2వ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6వ | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | సోమవారం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్రవారం | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | సో | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శు | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | సోమ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | శుక్ర | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | అపరాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | పూర్వాహ్నం | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ఉదయం | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | మధ్యాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | సాయంత్రం | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | రాత్రి | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ఉదయం | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | మధ్యాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | సాయంత్రం | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | రాత్రి | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ఉదయం | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | మధ్యాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | సాయంత్రం | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | రాత్రి | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | ఉదయం | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | మధ్యాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | సాయంత్రం | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | రాత్రి | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ఉదయం | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | మధ్యాహ్నం | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | సాయంత్రం | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | రాత్రి | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11వ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11వ | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11వ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23వ | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11వ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11వ | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11వ | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23వ | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1వ | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55వ | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1వ | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55వ | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11-02-87 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29-05-53 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 ఫిబ్ర, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 మే, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 ఫిబ్రవరి, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 మే, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 11, ఫిబ్రవరి 1987, బుధవారం | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29, మే 1453, ఆదివారం | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 అపరాహ్నం | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 అపరాహ్నం | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 అపరాహ్నం | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 అపరాహ్నం | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 అపరాహ్నం GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 అపరాహ్నం GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 అపరాహ్నం GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 అపరాహ్నం GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11-02-87 12:13 అపరాహ్నం | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29-05-53 11:59 అపరాహ్నం | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 ఫిబ్ర, 1987 12:13:14 అపరాహ్నం | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 మే, 1453 11:59:59 అపరాహ్నం | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 ఫిబ్రవరి, 1987 12:13:14 అపరాహ్నం GMT+0కి | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 మే, 1453 11:59:59 అపరాహ్నం GMT+0కి | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 11, ఫిబ్రవరి 1987, బుధవారం 12:13:14 అపరాహ్నం GMT+00:00కి | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29, మే 1453, ఆదివారం 11:59:59 అపరాహ్నం GMT+00:00కి | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------------- | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | సుమారు 6 సంవత్సరాలు | సుమారు 6 సంవత్సరాలు | సుమారు 6 సంవత్సరాలలో |
+| 2005-01-01T00:00:00.000Z | సుమారు 5 సంవత్సరాలు | సుమారు 5 సంవత్సరాలు | సుమారు 5 సంవత్సరాలలో |
+| 2004-01-01T00:00:00.000Z | సుమారు 4 సంవత్సరాలు | సుమారు 4 సంవత్సరాలు | సుమారు 4 సంవత్సరాలలో |
+| 2003-01-01T00:00:00.000Z | సుమారు 3 సంవత్సరాలు | సుమారు 3 సంవత్సరాలు | సుమారు 3 సంవత్సరాలలో |
+| 2002-01-01T00:00:00.000Z | సుమారు 2 సంవత్సరాలు | సుమారు 2 సంవత్సరాలు | సుమారు 2 సంవత్సరాలలో |
+| 2001-06-01T00:00:00.000Z | ఒక సంవత్సరం పైగా | ఒక సంవత్సరం పైగా | ఒక సంవత్సరంలో |
+| 2001-02-01T00:00:00.000Z | సుమారు ఒక సంవత్సరం | సుమారు ఒక సంవత్సరం | సుమారు ఒక సంవత్సరంలో |
+| 2001-01-01T00:00:00.000Z | సుమారు ఒక సంవత్సరం | సుమారు ఒక సంవత్సరం | సుమారు ఒక సంవత్సరంలో |
+| 2000-06-01T00:00:00.000Z | 5 నెలలు | 5 నెలలు | 5 నెలలలో |
+| 2000-03-01T00:00:00.000Z | 2 నెలలు | 2 నెలలు | 2 నెలలలో |
+| 2000-02-01T00:00:00.000Z | సుమారు ఒక నెల | సుమారు ఒక నెల | సుమారు ఒక నెలలో |
+| 2000-01-15T00:00:00.000Z | 14 రోజులు | 14 రోజులు | 14 రోజులలో |
+| 2000-01-02T00:00:00.000Z | ఒక రోజు | ఒక రోజు | ఒక రోజులో |
+| 2000-01-01T06:00:00.000Z | సుమారు 6 గంటలు | సుమారు 6 గంటలు | సుమారు 6 గంటలలో |
+| 2000-01-01T01:00:00.000Z | సుమారు ఒక గంట | సుమారు ఒక గంట | సుమారు ఒక గంటలో |
+| 2000-01-01T00:45:00.000Z | సుమారు ఒక గంట | సుమారు ఒక గంట | సుమారు ఒక గంటలో |
+| 2000-01-01T00:30:00.000Z | 30 నిమిషాలు | 30 నిమిషాలు | 30 నిమిషాలలో |
+| 2000-01-01T00:15:00.000Z | 15 నిమిషాలు | 15 నిమిషాలు | 15 నిమిషాలలో |
+| 2000-01-01T00:01:00.000Z | ఒక నిమిషం | ఒక నిమిషం | ఒక నిమిషంలో |
+| 2000-01-01T00:00:25.000Z | ఒక నిమిషం కన్నా తక్కువ | అర నిమిషం | ఒక నిమిషంలో |
+| 2000-01-01T00:00:15.000Z | ఒక నిమిషం కన్నా తక్కువ | 20 సెకన్ల కన్నా తక్కువ | ఒక నిమిషంలో |
+| 2000-01-01T00:00:05.000Z | ఒక నిమిషం కన్నా తక్కువ | 10 సెకన్ల కన్నా తక్కువ | ఒక నిమిషంలో |
+| 2000-01-01T00:00:00.000Z | ఒక నిమిషం కన్నా తక్కువ | 5 సెకన్ల కన్నా తక్కువ | ఒక నిమిషం క్రితం |
+| 1999-12-31T23:59:55.000Z | ఒక నిమిషం కన్నా తక్కువ | 10 సెకన్ల కన్నా తక్కువ | ఒక నిమిషం క్రితం |
+| 1999-12-31T23:59:45.000Z | ఒక నిమిషం కన్నా తక్కువ | 20 సెకన్ల కన్నా తక్కువ | ఒక నిమిషం క్రితం |
+| 1999-12-31T23:59:35.000Z | ఒక నిమిషం కన్నా తక్కువ | అర నిమిషం | ఒక నిమిషం క్రితం |
+| 1999-12-31T23:59:00.000Z | ఒక నిమిషం | ఒక నిమిషం | ఒక నిమిషం క్రితం |
+| 1999-12-31T23:45:00.000Z | 15 నిమిషాలు | 15 నిమిషాలు | 15 నిమిషాల క్రితం |
+| 1999-12-31T23:30:00.000Z | 30 నిమిషాలు | 30 నిమిషాలు | 30 నిమిషాల క్రితం |
+| 1999-12-31T23:15:00.000Z | సుమారు ఒక గంట | సుమారు ఒక గంట | సుమారు ఒక గంట క్రితం |
+| 1999-12-31T23:00:00.000Z | సుమారు ఒక గంట | సుమారు ఒక గంట | సుమారు ఒక గంట క్రితం |
+| 1999-12-31T18:00:00.000Z | సుమారు 6 గంటలు | సుమారు 6 గంటలు | సుమారు 6 గంటల క్రితం |
+| 1999-12-30T00:00:00.000Z | 2 రోజులు | 2 రోజులు | 2 రోజుల క్రితం |
+| 1999-12-15T00:00:00.000Z | 17 రోజులు | 17 రోజులు | 17 రోజుల క్రితం |
+| 1999-12-01T00:00:00.000Z | సుమారు ఒక నెల | సుమారు ఒక నెల | సుమారు ఒక నెల క్రితం |
+| 1999-11-01T00:00:00.000Z | 2 నెలలు | 2 నెలలు | 2 నెలల క్రితం |
+| 1999-06-01T00:00:00.000Z | 7 నెలలు | 7 నెలలు | 7 నెలల క్రితం |
+| 1999-01-01T00:00:00.000Z | సుమారు ఒక సంవత్సరం | సుమారు ఒక సంవత్సరం | సుమారు ఒక సంవత్సరం క్రితం |
+| 1998-12-01T00:00:00.000Z | సుమారు ఒక సంవత్సరం | సుమారు ఒక సంవత్సరం | సుమారు ఒక సంవత్సరం క్రితం |
+| 1998-06-01T00:00:00.000Z | ఒక సంవత్సరం పైగా | ఒక సంవత్సరం పైగా | ఒక సంవత్సరం క్రితం |
+| 1998-01-01T00:00:00.000Z | సుమారు 2 సంవత్సరాలు | సుమారు 2 సంవత్సరాలు | సుమారు 2 సంవత్సరాల క్రితం |
+| 1997-01-01T00:00:00.000Z | సుమారు 3 సంవత్సరాలు | సుమారు 3 సంవత్సరాలు | సుమారు 3 సంవత్సరాల క్రితం |
+| 1996-01-01T00:00:00.000Z | సుమారు 4 సంవత్సరాలు | సుమారు 4 సంవత్సరాలు | సుమారు 4 సంవత్సరాల క్రితం |
+| 1995-01-01T00:00:00.000Z | సుమారు 5 సంవత్సరాలు | సుమారు 5 సంవత్సరాలు | సుమారు 5 సంవత్సరాల క్రితం |
+| 1994-01-01T00:00:00.000Z | సుమారు 6 సంవత్సరాలు | సుమారు 6 సంవత్సరాలు | సుమారు 6 సంవత్సరాల క్రితం |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------------ | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 సంవత్సరాలు | 6 సంవత్సరాలలో | 52608 గంటలు |
+| 2005-01-01T00:00:00.000Z | 5 సంవత్సరాలు | 5 సంవత్సరాలలో | 43848 గంటలు |
+| 2004-01-01T00:00:00.000Z | 4 సంవత్సరాలు | 4 సంవత్సరాలలో | 35064 గంటలు |
+| 2003-01-01T00:00:00.000Z | 3 సంవత్సరాలు | 3 సంవత్సరాలలో | 26304 గంటలు |
+| 2002-01-01T00:00:00.000Z | 2 సంవత్సరాలు | 2 సంవత్సరాలలో | 17544 గంటలు |
+| 2001-06-01T00:00:00.000Z | ఒక సంవత్సరం | ఒక సంవత్సరంలో | 12408 గంటలు |
+| 2001-02-01T00:00:00.000Z | ఒక సంవత్సరం | ఒక సంవత్సరంలో | 9528 గంటలు |
+| 2001-01-01T00:00:00.000Z | ఒక సంవత్సరం | ఒక సంవత్సరంలో | 8784 గంటలు |
+| 2000-06-01T00:00:00.000Z | 5 నెలలు | 5 నెలలలో | 3648 గంటలు |
+| 2000-03-01T00:00:00.000Z | 2 నెలలు | 2 నెలలలో | 1440 గంటలు |
+| 2000-02-01T00:00:00.000Z | ఒక నెల | ఒక నెలలో | 744 గంటలు |
+| 2000-01-15T00:00:00.000Z | 14 రోజులు | 14 రోజులలో | 336 గంటలు |
+| 2000-01-02T00:00:00.000Z | ఒక రోజు | ఒక రోజులో | 24 గంటలు |
+| 2000-01-01T06:00:00.000Z | 6 గంటలు | 6 గంటలలో | 6 గంటలు |
+| 2000-01-01T01:00:00.000Z | ఒక గంట | ఒక గంటలో | ఒక గంట |
+| 2000-01-01T00:45:00.000Z | 45 నిమిషాలు | 45 నిమిషాలలో | ఒక గంట |
+| 2000-01-01T00:30:00.000Z | 30 నిమిషాలు | 30 నిమిషాలలో | ఒక గంట |
+| 2000-01-01T00:15:00.000Z | 15 నిమిషాలు | 15 నిమిషాలలో | 0 గంటలు |
+| 2000-01-01T00:01:00.000Z | ఒక నిమిషం | ఒక నిమిషంలో | 0 గంటలు |
+| 2000-01-01T00:00:25.000Z | 25 సెకన్ల | 25 సెకన్లలో | 0 గంటలు |
+| 2000-01-01T00:00:15.000Z | 15 సెకన్ల | 15 సెకన్లలో | 0 గంటలు |
+| 2000-01-01T00:00:05.000Z | 5 సెకన్ల | 5 సెకన్లలో | 0 గంటలు |
+| 2000-01-01T00:00:00.000Z | 0 సెకన్ల | 0 సెకన్ల క్రితం | 0 గంటలు |
+| 1999-12-31T23:59:55.000Z | 5 సెకన్ల | 5 సెకన్ల క్రితం | 0 గంటలు |
+| 1999-12-31T23:59:45.000Z | 15 సెకన్ల | 15 సెకన్ల క్రితం | 0 గంటలు |
+| 1999-12-31T23:59:35.000Z | 25 సెకన్ల | 25 సెకన్ల క్రితం | 0 గంటలు |
+| 1999-12-31T23:59:00.000Z | ఒక నిమిషం | ఒక నిమిషం క్రితం | 0 గంటలు |
+| 1999-12-31T23:45:00.000Z | 15 నిమిషాలు | 15 నిమిషాల క్రితం | 0 గంటలు |
+| 1999-12-31T23:30:00.000Z | 30 నిమిషాలు | 30 నిమిషాల క్రితం | ఒక గంట |
+| 1999-12-31T23:15:00.000Z | 45 నిమిషాలు | 45 నిమిషాల క్రితం | ఒక గంట |
+| 1999-12-31T23:00:00.000Z | ఒక గంట | ఒక గంట క్రితం | ఒక గంట |
+| 1999-12-31T18:00:00.000Z | 6 గంటలు | 6 గంటల క్రితం | 6 గంటలు |
+| 1999-12-30T00:00:00.000Z | 2 రోజులు | 2 రోజుల క్రితం | 48 గంటలు |
+| 1999-12-15T00:00:00.000Z | 17 రోజులు | 17 రోజుల క్రితం | 408 గంటలు |
+| 1999-12-01T00:00:00.000Z | ఒక నెల | ఒక నెల క్రితం | 744 గంటలు |
+| 1999-11-01T00:00:00.000Z | 2 నెలలు | 2 నెలల క్రితం | 1464 గంటలు |
+| 1999-06-01T00:00:00.000Z | 7 నెలలు | 7 నెలల క్రితం | 5136 గంటలు |
+| 1999-01-01T00:00:00.000Z | ఒక సంవత్సరం | ఒక సంవత్సరం క్రితం | 8760 గంటలు |
+| 1998-12-01T00:00:00.000Z | ఒక సంవత్సరం | ఒక సంవత్సరం క్రితం | 9504 గంటలు |
+| 1998-06-01T00:00:00.000Z | 2 సంవత్సరాలు | 2 సంవత్సరాల క్రితం | 13896 గంటలు |
+| 1998-01-01T00:00:00.000Z | 2 సంవత్సరాలు | 2 సంవత్సరాల క్రితం | 17520 గంటలు |
+| 1997-01-01T00:00:00.000Z | 3 సంవత్సరాలు | 3 సంవత్సరాల క్రితం | 26280 గంటలు |
+| 1996-01-01T00:00:00.000Z | 4 సంవత్సరాలు | 4 సంవత్సరాల క్రితం | 35064 గంటలు |
+| 1995-01-01T00:00:00.000Z | 5 సంవత్సరాలు | 5 సంవత్సరాల క్రితం | 43824 గంటలు |
+| 1994-01-01T00:00:00.000Z | 6 సంవత్సరాలు | 6 సంవత్సరాల క్రితం | 52584 గంటలు |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------------- |
+| 2000-01-10T00:00:00.000Z | 10-01-00 |
+| 2000-01-05T00:00:00.000Z | తదుపరి బుధవారం 12:00 పూర్వాహ్నం |
+| 2000-01-02T00:00:00.000Z | రేపు 12:00 పూర్వాహ్నం |
+| 2000-01-01T00:00:00.000Z | ఈ రోజు 12:00 పూర్వాహ్నం |
+| 1999-12-31T00:00:00.000Z | నిన్న 12:00 పూర్వాహ్నం |
+| 1999-12-27T00:00:00.000Z | గత సోమవారం 12:00 పూర్వాహ్నం |
+| 1999-12-21T00:00:00.000Z | 21-12-99 |
diff --git a/date-fns/src/locale/th/_lib/formatDistance/index.js b/date-fns/src/locale/th/_lib/formatDistance/index.js
new file mode 100644
index 0000000..916461d
--- /dev/null
+++ b/date-fns/src/locale/th/_lib/formatDistance/index.js
@@ -0,0 +1,105 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'น้อยกว่า 1 วินาที',
+ other: 'น้อยกว่า {{count}} วินาที'
+ },
+
+ xSeconds: {
+ one: '1 วินาที',
+ other: '{{count}} วินาที'
+ },
+
+ halfAMinute: 'ครึ่งนาที',
+
+ lessThanXMinutes: {
+ one: 'น้อยกว่า 1 นาที',
+ other: 'น้อยกว่า {{count}} นาที'
+ },
+
+ xMinutes: {
+ one: '1 นาที',
+ other: '{{count}} นาที'
+ },
+
+ aboutXHours: {
+ one: 'ประมาณ 1 ชั่วโมง',
+ other: 'ประมาณ {{count}} ชั่วโมง'
+ },
+
+ xHours: {
+ one: '1 ชั่วโมง',
+ other: '{{count}} ชั่วโมง'
+ },
+
+ xDays: {
+ one: '1 วัน',
+ other: '{{count}} วัน'
+ },
+
+ aboutXWeeks: {
+ one: 'ประมาณ 1 สัปดาห์',
+ other: 'ประมาณ {{count}} สัปดาห์'
+ },
+
+ xWeeks: {
+ one: '1 สัปดาห์',
+ other: '{{count}} สัปดาห์'
+ },
+
+ aboutXMonths: {
+ one: 'ประมาณ 1 เดือน',
+ other: 'ประมาณ {{count}} เดือน'
+ },
+
+ xMonths: {
+ one: '1 เดือน',
+ other: '{{count}} เดือน'
+ },
+
+ aboutXYears: {
+ one: 'ประมาณ 1 ปี',
+ other: 'ประมาณ {{count}} ปี'
+ },
+
+ xYears: {
+ one: '1 ปี',
+ other: '{{count}} ปี'
+ },
+
+ overXYears: {
+ one: 'มากกว่า 1 ปี',
+ other: 'มากกว่า {{count}} ปี'
+ },
+
+ almostXYears: {
+ one: 'เกือบ 1 ปี',
+ other: 'เกือบ {{count}} ปี'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ if (token === 'halfAMinute') {
+ return 'ใน' + result
+ } else {
+ return 'ใน ' + result
+ }
+ } else {
+ return result + 'ที่ผ่านมา'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/th/_lib/formatLong/index.js b/date-fns/src/locale/th/_lib/formatLong/index.js
new file mode 100644
index 0000000..b91cf91
--- /dev/null
+++ b/date-fns/src/locale/th/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'วันEEEEที่ do MMMM y',
+ long: 'do MMMM y',
+ medium: 'd MMM y',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss น. zzzz',
+ long: 'H:mm:ss น. z',
+ medium: 'H:mm:ss น.',
+ short: 'H:mm น.'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'เวลา' {{time}}",
+ long: "{{date}} 'เวลา' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'medium'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/th/_lib/formatRelative/index.js b/date-fns/src/locale/th/_lib/formatRelative/index.js
new file mode 100644
index 0000000..622e106
--- /dev/null
+++ b/date-fns/src/locale/th/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee'ที่แล้วเวลา' p",
+ yesterday: "'เมื่อวานนี้เวลา' p",
+ today: "'วันนี้เวลา' p",
+ tomorrow: "'พรุ่งนี้เวลา' p",
+ nextWeek: "eeee 'เวลา' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/th/_lib/localize/index.js b/date-fns/src/locale/th/_lib/localize/index.js
new file mode 100644
index 0000000..24390f3
--- /dev/null
+++ b/date-fns/src/locale/th/_lib/localize/index.js
@@ -0,0 +1,172 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['B', 'คศ'],
+ abbreviated: ['BC', 'ค.ศ.'],
+ wide: ['ปีก่อนคริสตกาล', 'คริสต์ศักราช']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['ไตรมาสแรก', 'ไตรมาสที่สอง', 'ไตรมาสที่สาม', 'ไตรมาสที่สี่']
+}
+
+var dayValues = {
+ narrow: ['อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'],
+ short: ['อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'],
+ abbreviated: ['อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'],
+ wide: ['อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสบดี', 'ศุกร์', 'เสาร์']
+}
+
+var monthValues = {
+ narrow: [
+ 'ม.ค.',
+ 'ก.พ.',
+ 'มี.ค.',
+ 'เม.ย.',
+ 'พ.ค.',
+ 'มิ.ย.',
+ 'ก.ค.',
+ 'ส.ค.',
+ 'ก.ย.',
+ 'ต.ค.',
+ 'พ.ย.',
+ 'ธ.ค.'
+ ],
+ abbreviated: [
+ 'ม.ค.',
+ 'ก.พ.',
+ 'มี.ค.',
+ 'เม.ย.',
+ 'พ.ค.',
+ 'มิ.ย.',
+ 'ก.ค.',
+ 'ส.ค.',
+ 'ก.ย.',
+ 'ต.ค.',
+ 'พ.ย.',
+ 'ธ.ค.'
+ ],
+ wide: [
+ 'มกราคม',
+ 'กุมภาพันธ์',
+ 'มีนาคม',
+ 'เมษายน',
+ 'พฤษภาคม',
+ 'มิถุนายน',
+ 'กรกฎาคม',
+ 'สิงหาคม',
+ 'กันยายน',
+ 'ตุลาคม',
+ 'พฤศจิกายน',
+ 'ธันวาคม'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ก่อนเที่ยง',
+ pm: 'หลังเที่ยง',
+ midnight: 'เที่ยงคืน',
+ noon: 'เที่ยง',
+ morning: 'เช้า',
+ afternoon: 'บ่าย',
+ evening: 'เย็น',
+ night: 'กลางคืน'
+ },
+ abbreviated: {
+ am: 'ก่อนเที่ยง',
+ pm: 'หลังเที่ยง',
+ midnight: 'เที่ยงคืน',
+ noon: 'เที่ยง',
+ morning: 'เช้า',
+ afternoon: 'บ่าย',
+ evening: 'เย็น',
+ night: 'กลางคืน'
+ },
+ wide: {
+ am: 'ก่อนเที่ยง',
+ pm: 'หลังเที่ยง',
+ midnight: 'เที่ยงคืน',
+ noon: 'เที่ยง',
+ morning: 'เช้า',
+ afternoon: 'บ่าย',
+ evening: 'เย็น',
+ night: 'กลางคืน'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ก่อนเที่ยง',
+ pm: 'หลังเที่ยง',
+ midnight: 'เที่ยงคืน',
+ noon: 'เที่ยง',
+ morning: 'ตอนเช้า',
+ afternoon: 'ตอนกลางวัน',
+ evening: 'ตอนเย็น',
+ night: 'ตอนกลางคืน'
+ },
+ abbreviated: {
+ am: 'ก่อนเที่ยง',
+ pm: 'หลังเที่ยง',
+ midnight: 'เที่ยงคืน',
+ noon: 'เที่ยง',
+ morning: 'ตอนเช้า',
+ afternoon: 'ตอนกลางวัน',
+ evening: 'ตอนเย็น',
+ night: 'ตอนกลางคืน'
+ },
+ wide: {
+ am: 'ก่อนเที่ยง',
+ pm: 'หลังเที่ยง',
+ midnight: 'เที่ยงคืน',
+ noon: 'เที่ยง',
+ morning: 'ตอนเช้า',
+ afternoon: 'ตอนกลางวัน',
+ evening: 'ตอนเย็น',
+ night: 'ตอนกลางคืน'
+ }
+}
+
+function ordinalNumber(dirtyNumber) {
+ var number = Number(dirtyNumber)
+ return number
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/th/_lib/match/index.js b/date-fns/src/locale/th/_lib/match/index.js
new file mode 100644
index 0000000..c009ce2
--- /dev/null
+++ b/date-fns/src/locale/th/_lib/match/index.js
@@ -0,0 +1,136 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^\d+/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^([bB]|[aA]|คศ)/i,
+ abbreviated: /^([bB]\.?\s?[cC]\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?|ค\.?ศ\.?)/i,
+ wide: /^(ก่อนคริสตกาล|คริสต์ศักราช|คริสตกาล)/i
+}
+var parseEraPatterns = {
+ any: [/^[bB]/i, /^(^[aA]|ค\.?ศ\.?|คริสตกาล|คริสต์ศักราช|)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^ไตรมาส(ที่)? ?[1234]/i
+}
+var parseQuarterPatterns = {
+ any: [/(1|แรก|หนึ่ง)/i, /(2|สอง)/i, /(3|สาม)/i, /(4|สี่)/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(ม\.?ค\.?|ก\.?พ\.?|มี\.?ค\.?|เม\.?ย\.?|พ\.?ค\.?|มิ\.?ย\.?|ก\.?ค\.?|ส\.?ค\.?|ก\.?ย\.?|ต\.?ค\.?|พ\.?ย\.?|ธ\.?ค\.?)/i,
+ abbreviated: /^(ม\.?ค\.?|ก\.?พ\.?|มี\.?ค\.?|เม\.?ย\.?|พ\.?ค\.?|มิ\.?ย\.?|ก\.?ค\.?|ส\.?ค\.?|ก\.?ย\.?|ต\.?ค\.?|พ\.?ย\.?|ธ\.?ค\.?')/i,
+ wide: /^(มกราคม|กุมภาพันธ์|มีนาคม|เมษายน|พฤษภาคม|มิถุนายน|กรกฎาคม|สิงหาคม|กันยายน|ตุลาคม|พฤศจิกายน|ธันวาคม)/i
+}
+var parseMonthPatterns = {
+ wide: [
+ /^มก/i,
+ /^กุม/i,
+ /^มี/i,
+ /^เม/i,
+ /^พฤษ/i,
+ /^มิ/i,
+ /^กรก/i,
+ /^ส/i,
+ /^กัน/i,
+ /^ต/i,
+ /^พฤศ/i,
+ /^ธ/i
+ ],
+ any: [
+ /^ม\.?ค\.?/i,
+ /^ก\.?พ\.?/i,
+ /^มี\.?ค\.?/i,
+ /^เม\.?ย\.?/i,
+ /^พ\.?ค\.?/i,
+ /^มิ\.?ย\.?/i,
+ /^ก\.?ค\.?/i,
+ /^ส\.?ค\.?/i,
+ /^ก\.?ย\.?/i,
+ /^ต\.?ค\.?/i,
+ /^พ\.?ย\.?/i,
+ /^ธ\.?ค\.?/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(อา\.?|จ\.?|อ\.?|พฤ\.?|พ\.?|ศ\.?|ส\.?)/i,
+ short: /^(อา\.?|จ\.?|อ\.?|พฤ\.?|พ\.?|ศ\.?|ส\.?)/i,
+ abbreviated: /^(อา\.?|จ\.?|อ\.?|พฤ\.?|พ\.?|ศ\.?|ส\.?)/i,
+ wide: /^(อาทิตย์|จันทร์|อังคาร|พุธ|พฤหัสบดี|ศุกร์|เสาร์)/i
+}
+var parseDayPatterns = {
+ wide: [/^อา/i, /^จั/i, /^อั/i, /^พุธ/i, /^พฤ/i, /^ศ/i, /^เส/i],
+ any: [/^อา/i, /^จ/i, /^อ/i, /^พ(?!ฤ)/i, /^พฤ/i, /^ศ/i, /^ส/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(ก่อนเที่ยง|หลังเที่ยง|เที่ยงคืน|เที่ยง|(ตอน.*?)?.*(เที่ยง|เช้า|บ่าย|เย็น|กลางคืน))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^ก่อนเที่ยง/i,
+ pm: /^หลังเที่ยง/i,
+ midnight: /^เที่ยงคืน/i,
+ noon: /^เที่ยง/i,
+ morning: /เช้า/i,
+ afternoon: /บ่าย/i,
+ evening: /เย็น/i,
+ night: /กลางคืน/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/th/index.d.ts b/date-fns/src/locale/th/index.d.ts
new file mode 100644
index 0000000..944dd87
--- /dev/null
+++ b/date-fns/src/locale/th/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { th } from 'date-fns/locale'
+export default th
diff --git a/date-fns/src/locale/th/index.js b/date-fns/src/locale/th/index.js
new file mode 100644
index 0000000..bd63ad7
--- /dev/null
+++ b/date-fns/src/locale/th/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Thai locale.
+ * @language Thai
+ * @iso-639-2 tha
+ * @author Athiwat Hirunworawongkun [@athivvat]{@link https://github.com/athivvat}
+ * @author [@hawkup]{@link https://github.com/hawkup}
+ * @author Jirawat I. [@nodtem66]{@link https://github.com/nodtem66}
+ */
+var locale = {
+ code: 'th',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/th/index.js.flow b/date-fns/src/locale/th/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/th/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/th/snapshot.md b/date-fns/src/locale/th/snapshot.md
new file mode 100644
index 0000000..67d1f6a
--- /dev/null
+++ b/date-fns/src/locale/th/snapshot.md
@@ -0,0 +1,304 @@
+# Thai (th) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | ไตรมาสแรก | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | ไตรมาสที่สอง | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | ไตรมาสแรก | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | ไตรมาสที่สอง | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | ก.พ. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ก.ค. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | กุมภาพันธ์ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | กรกฎาคม | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ก.พ. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ก.ค. | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | ก.พ. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ก.ค. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | กุมภาพันธ์ | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | กรกฎาคม | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ก.พ. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ก.ค. | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49 | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | จันทร์ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศุกร์ | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | จันทร์ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศุกร์ | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | จันทร์ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศุกร์ | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | จันทร์ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศุกร์ | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | จ. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ศ. | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | หลังเที่ยง | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ก่อนเที่ยง | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ตอนเช้า | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ตอนกลางวัน | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ตอนเย็น | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ตอนกลางคืน | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ตอนเช้า | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ตอนกลางวัน | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ตอนเย็น | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ตอนกลางคืน | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ตอนเช้า | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ตอนกลางวัน | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ตอนเย็น | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ตอนกลางคืน | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | ตอนเช้า | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ตอนกลางวัน | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ตอนเย็น | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ตอนกลางคืน | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ตอนเช้า | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ตอนกลางวัน | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ตอนเย็น | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ตอนกลางคืน | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 ก.พ. 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 พ.ค. 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 กุมภาพันธ์ 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 พฤษภาคม 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | วันพุธที่ 11 กุมภาพันธ์ 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | วันอาทิตย์ที่ 29 พฤษภาคม 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 น. | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 น. | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 น. | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 น. | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 น. GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 น. GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 น. GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 น. GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 น. | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 23:59 น. | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 ก.พ. 1987, 12:13:14 น. | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 พ.ค. 1453, 23:59:59 น. | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 กุมภาพันธ์ 1987 เวลา 12:13:14 น. GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 พฤษภาคม 1453 เวลา 23:59:59 น. GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | วันพุธที่ 11 กุมภาพันธ์ 1987 เวลา 12:13:14 น. GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | วันอาทิตย์ที่ 29 พฤษภาคม 1453 เวลา 23:59:59 น. GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------- | ---------------------- | ------------------------- |
+| 2006-01-01T00:00:00.000Z | ประมาณ 6 ปี | ประมาณ 6 ปี | ใน ประมาณ 6 ปี |
+| 2005-01-01T00:00:00.000Z | ประมาณ 5 ปี | ประมาณ 5 ปี | ใน ประมาณ 5 ปี |
+| 2004-01-01T00:00:00.000Z | ประมาณ 4 ปี | ประมาณ 4 ปี | ใน ประมาณ 4 ปี |
+| 2003-01-01T00:00:00.000Z | ประมาณ 3 ปี | ประมาณ 3 ปี | ใน ประมาณ 3 ปี |
+| 2002-01-01T00:00:00.000Z | ประมาณ 2 ปี | ประมาณ 2 ปี | ใน ประมาณ 2 ปี |
+| 2001-06-01T00:00:00.000Z | มากกว่า 1 ปี | มากกว่า 1 ปี | ใน มากกว่า 1 ปี |
+| 2001-02-01T00:00:00.000Z | ประมาณ 1 ปี | ประมาณ 1 ปี | ใน ประมาณ 1 ปี |
+| 2001-01-01T00:00:00.000Z | ประมาณ 1 ปี | ประมาณ 1 ปี | ใน ประมาณ 1 ปี |
+| 2000-06-01T00:00:00.000Z | 5 เดือน | 5 เดือน | ใน 5 เดือน |
+| 2000-03-01T00:00:00.000Z | 2 เดือน | 2 เดือน | ใน 2 เดือน |
+| 2000-02-01T00:00:00.000Z | ประมาณ 1 เดือน | ประมาณ 1 เดือน | ใน ประมาณ 1 เดือน |
+| 2000-01-15T00:00:00.000Z | 14 วัน | 14 วัน | ใน 14 วัน |
+| 2000-01-02T00:00:00.000Z | 1 วัน | 1 วัน | ใน 1 วัน |
+| 2000-01-01T06:00:00.000Z | ประมาณ 6 ชั่วโมง | ประมาณ 6 ชั่วโมง | ใน ประมาณ 6 ชั่วโมง |
+| 2000-01-01T01:00:00.000Z | ประมาณ 1 ชั่วโมง | ประมาณ 1 ชั่วโมง | ใน ประมาณ 1 ชั่วโมง |
+| 2000-01-01T00:45:00.000Z | ประมาณ 1 ชั่วโมง | ประมาณ 1 ชั่วโมง | ใน ประมาณ 1 ชั่วโมง |
+| 2000-01-01T00:30:00.000Z | 30 นาที | 30 นาที | ใน 30 นาที |
+| 2000-01-01T00:15:00.000Z | 15 นาที | 15 นาที | ใน 15 นาที |
+| 2000-01-01T00:01:00.000Z | 1 นาที | 1 นาที | ใน 1 นาที |
+| 2000-01-01T00:00:25.000Z | น้อยกว่า 1 นาที | ครึ่งนาที | ใน น้อยกว่า 1 นาที |
+| 2000-01-01T00:00:15.000Z | น้อยกว่า 1 นาที | น้อยกว่า 20 วินาที | ใน น้อยกว่า 1 นาที |
+| 2000-01-01T00:00:05.000Z | น้อยกว่า 1 นาที | น้อยกว่า 10 วินาที | ใน น้อยกว่า 1 นาที |
+| 2000-01-01T00:00:00.000Z | น้อยกว่า 1 นาที | น้อยกว่า 5 วินาที | น้อยกว่า 1 นาทีที่ผ่านมา |
+| 1999-12-31T23:59:55.000Z | น้อยกว่า 1 นาที | น้อยกว่า 10 วินาที | น้อยกว่า 1 นาทีที่ผ่านมา |
+| 1999-12-31T23:59:45.000Z | น้อยกว่า 1 นาที | น้อยกว่า 20 วินาที | น้อยกว่า 1 นาทีที่ผ่านมา |
+| 1999-12-31T23:59:35.000Z | น้อยกว่า 1 นาที | ครึ่งนาที | น้อยกว่า 1 นาทีที่ผ่านมา |
+| 1999-12-31T23:59:00.000Z | 1 นาที | 1 นาที | 1 นาทีที่ผ่านมา |
+| 1999-12-31T23:45:00.000Z | 15 นาที | 15 นาที | 15 นาทีที่ผ่านมา |
+| 1999-12-31T23:30:00.000Z | 30 นาที | 30 นาที | 30 นาทีที่ผ่านมา |
+| 1999-12-31T23:15:00.000Z | ประมาณ 1 ชั่วโมง | ประมาณ 1 ชั่วโมง | ประมาณ 1 ชั่วโมงที่ผ่านมา |
+| 1999-12-31T23:00:00.000Z | ประมาณ 1 ชั่วโมง | ประมาณ 1 ชั่วโมง | ประมาณ 1 ชั่วโมงที่ผ่านมา |
+| 1999-12-31T18:00:00.000Z | ประมาณ 6 ชั่วโมง | ประมาณ 6 ชั่วโมง | ประมาณ 6 ชั่วโมงที่ผ่านมา |
+| 1999-12-30T00:00:00.000Z | 2 วัน | 2 วัน | 2 วันที่ผ่านมา |
+| 1999-12-15T00:00:00.000Z | 17 วัน | 17 วัน | 17 วันที่ผ่านมา |
+| 1999-12-01T00:00:00.000Z | ประมาณ 1 เดือน | ประมาณ 1 เดือน | ประมาณ 1 เดือนที่ผ่านมา |
+| 1999-11-01T00:00:00.000Z | 2 เดือน | 2 เดือน | 2 เดือนที่ผ่านมา |
+| 1999-06-01T00:00:00.000Z | 7 เดือน | 7 เดือน | 7 เดือนที่ผ่านมา |
+| 1999-01-01T00:00:00.000Z | ประมาณ 1 ปี | ประมาณ 1 ปี | ประมาณ 1 ปีที่ผ่านมา |
+| 1998-12-01T00:00:00.000Z | ประมาณ 1 ปี | ประมาณ 1 ปี | ประมาณ 1 ปีที่ผ่านมา |
+| 1998-06-01T00:00:00.000Z | มากกว่า 1 ปี | มากกว่า 1 ปี | มากกว่า 1 ปีที่ผ่านมา |
+| 1998-01-01T00:00:00.000Z | ประมาณ 2 ปี | ประมาณ 2 ปี | ประมาณ 2 ปีที่ผ่านมา |
+| 1997-01-01T00:00:00.000Z | ประมาณ 3 ปี | ประมาณ 3 ปี | ประมาณ 3 ปีที่ผ่านมา |
+| 1996-01-01T00:00:00.000Z | ประมาณ 4 ปี | ประมาณ 4 ปี | ประมาณ 4 ปีที่ผ่านมา |
+| 1995-01-01T00:00:00.000Z | ประมาณ 5 ปี | ประมาณ 5 ปี | ประมาณ 5 ปีที่ผ่านมา |
+| 1994-01-01T00:00:00.000Z | ประมาณ 6 ปี | ประมาณ 6 ปี | ประมาณ 6 ปีที่ผ่านมา |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ------------------ | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 ปี | ใน 6 ปี | 52608 ชั่วโมง |
+| 2005-01-01T00:00:00.000Z | 5 ปี | ใน 5 ปี | 43848 ชั่วโมง |
+| 2004-01-01T00:00:00.000Z | 4 ปี | ใน 4 ปี | 35064 ชั่วโมง |
+| 2003-01-01T00:00:00.000Z | 3 ปี | ใน 3 ปี | 26304 ชั่วโมง |
+| 2002-01-01T00:00:00.000Z | 2 ปี | ใน 2 ปี | 17544 ชั่วโมง |
+| 2001-06-01T00:00:00.000Z | 1 ปี | ใน 1 ปี | 12408 ชั่วโมง |
+| 2001-02-01T00:00:00.000Z | 1 ปี | ใน 1 ปี | 9528 ชั่วโมง |
+| 2001-01-01T00:00:00.000Z | 1 ปี | ใน 1 ปี | 8784 ชั่วโมง |
+| 2000-06-01T00:00:00.000Z | 5 เดือน | ใน 5 เดือน | 3648 ชั่วโมง |
+| 2000-03-01T00:00:00.000Z | 2 เดือน | ใน 2 เดือน | 1440 ชั่วโมง |
+| 2000-02-01T00:00:00.000Z | 1 เดือน | ใน 1 เดือน | 744 ชั่วโมง |
+| 2000-01-15T00:00:00.000Z | 14 วัน | ใน 14 วัน | 336 ชั่วโมง |
+| 2000-01-02T00:00:00.000Z | 1 วัน | ใน 1 วัน | 24 ชั่วโมง |
+| 2000-01-01T06:00:00.000Z | 6 ชั่วโมง | ใน 6 ชั่วโมง | 6 ชั่วโมง |
+| 2000-01-01T01:00:00.000Z | 1 ชั่วโมง | ใน 1 ชั่วโมง | 1 ชั่วโมง |
+| 2000-01-01T00:45:00.000Z | 45 นาที | ใน 45 นาที | 1 ชั่วโมง |
+| 2000-01-01T00:30:00.000Z | 30 นาที | ใน 30 นาที | 1 ชั่วโมง |
+| 2000-01-01T00:15:00.000Z | 15 นาที | ใน 15 นาที | 0 ชั่วโมง |
+| 2000-01-01T00:01:00.000Z | 1 นาที | ใน 1 นาที | 0 ชั่วโมง |
+| 2000-01-01T00:00:25.000Z | 25 วินาที | ใน 25 วินาที | 0 ชั่วโมง |
+| 2000-01-01T00:00:15.000Z | 15 วินาที | ใน 15 วินาที | 0 ชั่วโมง |
+| 2000-01-01T00:00:05.000Z | 5 วินาที | ใน 5 วินาที | 0 ชั่วโมง |
+| 2000-01-01T00:00:00.000Z | 0 วินาที | 0 วินาทีที่ผ่านมา | 0 ชั่วโมง |
+| 1999-12-31T23:59:55.000Z | 5 วินาที | 5 วินาทีที่ผ่านมา | 0 ชั่วโมง |
+| 1999-12-31T23:59:45.000Z | 15 วินาที | 15 วินาทีที่ผ่านมา | 0 ชั่วโมง |
+| 1999-12-31T23:59:35.000Z | 25 วินาที | 25 วินาทีที่ผ่านมา | 0 ชั่วโมง |
+| 1999-12-31T23:59:00.000Z | 1 นาที | 1 นาทีที่ผ่านมา | 0 ชั่วโมง |
+| 1999-12-31T23:45:00.000Z | 15 นาที | 15 นาทีที่ผ่านมา | 0 ชั่วโมง |
+| 1999-12-31T23:30:00.000Z | 30 นาที | 30 นาทีที่ผ่านมา | 1 ชั่วโมง |
+| 1999-12-31T23:15:00.000Z | 45 นาที | 45 นาทีที่ผ่านมา | 1 ชั่วโมง |
+| 1999-12-31T23:00:00.000Z | 1 ชั่วโมง | 1 ชั่วโมงที่ผ่านมา | 1 ชั่วโมง |
+| 1999-12-31T18:00:00.000Z | 6 ชั่วโมง | 6 ชั่วโมงที่ผ่านมา | 6 ชั่วโมง |
+| 1999-12-30T00:00:00.000Z | 2 วัน | 2 วันที่ผ่านมา | 48 ชั่วโมง |
+| 1999-12-15T00:00:00.000Z | 17 วัน | 17 วันที่ผ่านมา | 408 ชั่วโมง |
+| 1999-12-01T00:00:00.000Z | 1 เดือน | 1 เดือนที่ผ่านมา | 744 ชั่วโมง |
+| 1999-11-01T00:00:00.000Z | 2 เดือน | 2 เดือนที่ผ่านมา | 1464 ชั่วโมง |
+| 1999-06-01T00:00:00.000Z | 7 เดือน | 7 เดือนที่ผ่านมา | 5136 ชั่วโมง |
+| 1999-01-01T00:00:00.000Z | 1 ปี | 1 ปีที่ผ่านมา | 8760 ชั่วโมง |
+| 1998-12-01T00:00:00.000Z | 1 ปี | 1 ปีที่ผ่านมา | 9504 ชั่วโมง |
+| 1998-06-01T00:00:00.000Z | 2 ปี | 2 ปีที่ผ่านมา | 13896 ชั่วโมง |
+| 1998-01-01T00:00:00.000Z | 2 ปี | 2 ปีที่ผ่านมา | 17520 ชั่วโมง |
+| 1997-01-01T00:00:00.000Z | 3 ปี | 3 ปีที่ผ่านมา | 26280 ชั่วโมง |
+| 1996-01-01T00:00:00.000Z | 4 ปี | 4 ปีที่ผ่านมา | 35064 ชั่วโมง |
+| 1995-01-01T00:00:00.000Z | 5 ปี | 5 ปีที่ผ่านมา | 43824 ชั่วโมง |
+| 1994-01-01T00:00:00.000Z | 6 ปี | 6 ปีที่ผ่านมา | 52584 ชั่วโมง |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | พุธ เวลา 0:00 น. |
+| 2000-01-02T00:00:00.000Z | พรุ่งนี้เวลา 0:00 น. |
+| 2000-01-01T00:00:00.000Z | วันนี้เวลา 0:00 น. |
+| 1999-12-31T00:00:00.000Z | เมื่อวานนี้เวลา 0:00 น. |
+| 1999-12-27T00:00:00.000Z | จันทร์ที่แล้วเวลา 0:00 น. |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/tr/_lib/formatDistance/index.js b/date-fns/src/locale/tr/_lib/formatDistance/index.js
new file mode 100644
index 0000000..7175bb7
--- /dev/null
+++ b/date-fns/src/locale/tr/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'bir saniyeden az',
+ other: '{{count}} saniyeden az'
+ },
+
+ xSeconds: {
+ one: '1 saniye',
+ other: '{{count}} saniye'
+ },
+
+ halfAMinute: 'yarım dakika',
+
+ lessThanXMinutes: {
+ one: 'bir dakikadan az',
+ other: '{{count}} dakikadan az'
+ },
+
+ xMinutes: {
+ one: '1 dakika',
+ other: '{{count}} dakika'
+ },
+
+ aboutXHours: {
+ one: 'yaklaşık 1 saat',
+ other: 'yaklaşık {{count}} saat'
+ },
+
+ xHours: {
+ one: '1 saat',
+ other: '{{count}} saat'
+ },
+
+ xDays: {
+ one: '1 gün',
+ other: '{{count}} gün'
+ },
+
+ aboutXWeeks: {
+ one: 'yaklaşık 1 hafta',
+ other: 'yaklaşık {{count}} hafta'
+ },
+
+ xWeeks: {
+ one: '1 hafta',
+ other: '{{count}} hafta'
+ },
+
+ aboutXMonths: {
+ one: 'yaklaşık 1 ay',
+ other: 'yaklaşık {{count}} ay'
+ },
+
+ xMonths: {
+ one: '1 ay',
+ other: '{{count}} ay'
+ },
+
+ aboutXYears: {
+ one: 'yaklaşık 1 yıl',
+ other: 'yaklaşık {{count}} yıl'
+ },
+
+ xYears: {
+ one: '1 yıl',
+ other: '{{count}} yıl'
+ },
+
+ overXYears: {
+ one: '1 yıldan fazla',
+ other: '{{count}} yıldan fazla'
+ },
+
+ almostXYears: {
+ one: 'neredeyse 1 yıl',
+ other: 'neredeyse {{count}} yıl'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + ' sonra'
+ } else {
+ return result + ' önce'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/tr/_lib/formatLong/index.js b/date-fns/src/locale/tr/_lib/formatLong/index.js
new file mode 100644
index 0000000..2d2fa1d
--- /dev/null
+++ b/date-fns/src/locale/tr/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'd MMMM y EEEE',
+ long: 'd MMMM y',
+ medium: 'd MMM y',
+ short: 'dd.MM.yyyy'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'saat' {{time}}",
+ long: "{{date}} 'saat' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/tr/_lib/formatRelative/index.js b/date-fns/src/locale/tr/_lib/formatRelative/index.js
new file mode 100644
index 0000000..24a3535
--- /dev/null
+++ b/date-fns/src/locale/tr/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'geçen hafta' eeee 'saat' p",
+ yesterday: "'dün saat' p",
+ today: "'bugün saat' p",
+ tomorrow: "'yarın saat' p",
+ nextWeek: "eeee 'saat' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/tr/_lib/localize/index.js b/date-fns/src/locale/tr/_lib/localize/index.js
new file mode 100644
index 0000000..1f58296
--- /dev/null
+++ b/date-fns/src/locale/tr/_lib/localize/index.js
@@ -0,0 +1,167 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ abbreviated: ['MÖ', 'MS'],
+ narrow: ['MÖ', 'MS'],
+ wide: ['Milattan Önce', 'Milattan Sonra']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1Ç', '2Ç', '3Ç', '4Ç'],
+ wide: ['İlk çeyrek', 'İkinci Çeyrek', 'Üçüncü çeyrek', 'Son çeyrek']
+}
+
+var monthValues = {
+ narrow: ['O', 'Ş', 'M', 'N', 'M', 'H', 'T', 'A', 'E', 'E', 'K', 'A'],
+ abbreviated: [
+ 'Oca',
+ 'Şub',
+ 'Mar',
+ 'Nis',
+ 'May',
+ 'Haz',
+ 'Tem',
+ 'Ağu',
+ 'Eyl',
+ 'Eki',
+ 'Kas',
+ 'Ara'
+ ],
+ wide: [
+ 'Ocak',
+ 'Şubat',
+ 'Mart',
+ 'Nisan',
+ 'Mayıs',
+ 'Haziran',
+ 'Temmuz',
+ 'Ağustos',
+ 'Eylül',
+ 'Ekim',
+ 'Kasım',
+ 'Aralık'
+ ]
+}
+
+var dayValues = {
+ narrow: ['P', 'P', 'S', 'Ç', 'P', 'C', 'C'],
+ short: ['Pz', 'Pt', 'Sa', 'Ça', 'Pe', 'Cu', 'Ct'],
+ abbreviated: ['Paz', 'Pts', 'Sal', 'Çar', 'Per', 'Cum', 'Cts'],
+ wide: [
+ 'Pazar',
+ 'Pazartesi',
+ 'Salı',
+ 'Çarşamba',
+ 'Perşembe',
+ 'Cuma',
+ 'Cumartesi'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'öö',
+ pm: 'ös',
+ midnight: 'gy',
+ noon: 'ö',
+ morning: 'sa',
+ afternoon: 'ös',
+ evening: 'ak',
+ night: 'ge'
+ },
+ abbreviated: {
+ am: 'ÖÖ',
+ pm: 'ÖS',
+ midnight: 'gece yarısı',
+ noon: 'öğle',
+ morning: 'sabah',
+ afternoon: 'öğleden sonra',
+ evening: 'akşam',
+ night: 'gece'
+ },
+ wide: {
+ am: 'Ö.Ö.',
+ pm: 'Ö.S.',
+ midnight: 'gece yarısı',
+ noon: 'öğle',
+ morning: 'sabah',
+ afternoon: 'öğleden sonra',
+ evening: 'akşam',
+ night: 'gece'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'öö',
+ pm: 'ös',
+ midnight: 'gy',
+ noon: 'ö',
+ morning: 'sa',
+ afternoon: 'ös',
+ evening: 'ak',
+ night: 'ge'
+ },
+ abbreviated: {
+ am: 'ÖÖ',
+ pm: 'ÖS',
+ midnight: 'gece yarısı',
+ noon: 'öğlen',
+ morning: 'sabahleyin',
+ afternoon: 'öğleden sonra',
+ evening: 'akşamleyin',
+ night: 'geceleyin'
+ },
+ wide: {
+ am: 'ö.ö.',
+ pm: 'ö.s.',
+ midnight: 'gece yarısı',
+ noon: 'öğlen',
+ morning: 'sabahleyin',
+ afternoon: 'öğleden sonra',
+ evening: 'akşamleyin',
+ night: 'geceleyin'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+ return number + '.'
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaulFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/tr/_lib/match/index.js b/date-fns/src/locale/tr/_lib/match/index.js
new file mode 100644
index 0000000..9eacf0e
--- /dev/null
+++ b/date-fns/src/locale/tr/_lib/match/index.js
@@ -0,0 +1,153 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(\.)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(mö|ms)/i,
+ abbreviated: /^(mö|ms)/i,
+ wide: /^(milattan önce|milattan sonra)/i
+}
+var parseEraPatterns = {
+ any: [/(^mö|^milattan önce)/i, /(^ms|^milattan sonra)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234]ç/i,
+ wide: /^((i|İ)lk|(i|İ)kinci|üçüncü|son) çeyrek/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i],
+ abbreviated: [/1ç/i, /2ç/i, /3ç/i, /4ç/i],
+ wide: [
+ /^(i|İ)lk çeyrek/i,
+ /(i|İ)kinci çeyrek/i,
+ /üçüncü çeyrek/i,
+ /son çeyrek/i
+ ]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[oşmnhtaek]/i,
+ abbreviated: /^(oca|şub|mar|nis|may|haz|tem|ağu|eyl|eki|kas|ara)/i,
+ wide: /^(ocak|şubat|mart|nisan|mayıs|haziran|temmuz|ağustos|eylül|ekim|kasım|aralık)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^o/i,
+ /^ş/i,
+ /^m/i,
+ /^n/i,
+ /^m/i,
+ /^h/i,
+ /^t/i,
+ /^a/i,
+ /^e/i,
+ /^e/i,
+ /^k/i,
+ /^a/i
+ ],
+ any: [
+ /^o/i,
+ /^ş/i,
+ /^mar/i,
+ /^n/i,
+ /^may/i,
+ /^h/i,
+ /^t/i,
+ /^ağ/i,
+ /^ey/i,
+ /^ek/i,
+ /^k/i,
+ /^ar/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[psçc]/i,
+ short: /^(pz|pt|sa|ça|pe|cu|ct)/i,
+ abbreviated: /^(paz|pts|sal|çar|per|cum|cts)/i,
+ wide: /^(pazar|pazartesi|salı|çarşamba|perşembe|cuma|cumartesi)/i
+}
+var parseDayPatterns = {
+ narrow: [/^p/i, /^p/i, /^s/i, /^ç/i, /^p/i, /^c/i, /^c/i],
+ any: [/^pz/i, /^pt/i, /^sa/i, /^ça/i, /^pe/i, /^cu/i, /^ct/i],
+ wide: [
+ /^pazar/i,
+ /^pazartesi/i,
+ /^salı/i,
+ /^çarşamba/i,
+ /^perşembe/i,
+ /^cuma/i,
+ /cumartesi/i
+ ]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(öö|ös|gy|ö|sa|ös|ak|ge)/i,
+ any: /^(ö\.?\s?[ös]\.?|öğleden sonra|gece yarısı|öğle|(sabah|öğ|akşam|gece)(leyin))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^ö\.?ö\.?/i,
+ pm: /^ö\.?s\.?/i,
+ midnight: /^(gy|gece yarısı)/i,
+ noon: /^öğ/i,
+ morning: /^sa/i,
+ afternoon: /^öğleden sonra/i,
+ evening: /^ak/i,
+ night: /^ge/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/tr/index.d.ts b/date-fns/src/locale/tr/index.d.ts
new file mode 100644
index 0000000..d4c2e0a
--- /dev/null
+++ b/date-fns/src/locale/tr/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { tr } from 'date-fns/locale'
+export default tr
diff --git a/date-fns/src/locale/tr/index.js b/date-fns/src/locale/tr/index.js
new file mode 100644
index 0000000..aacae82
--- /dev/null
+++ b/date-fns/src/locale/tr/index.js
@@ -0,0 +1,33 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Turkish locale.
+ * @language Turkish
+ * @iso-639-2 tur
+ * @author Alpcan Aydın [@alpcanaydin]{@link https://github.com/alpcanaydin}
+ * @author Berkay Sargın [@berkaey]{@link https://github.com/berkaey}
+ * @author Ismail Demirbilek [@dbtek]{@link https://github.com/dbtek}
+ * @author İsmail Kayar [@ikayar]{@link https://github.com/ikayar}
+ *
+ *
+ */
+var locale = {
+ code: 'tr',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/tr/index.js.flow b/date-fns/src/locale/tr/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/tr/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/tr/snapshot.md b/date-fns/src/locale/tr/snapshot.md
new file mode 100644
index 0000000..6475e6a
--- /dev/null
+++ b/date-fns/src/locale/tr/snapshot.md
@@ -0,0 +1,304 @@
+# Turkish (tr) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ---------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987. | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987. | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5. | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1Ç | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2Ç | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | İlk çeyrek | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | İkinci Çeyrek | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2. | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1Ç | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2Ç | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | İlk çeyrek | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | İkinci Çeyrek | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Şub | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Tem | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Şubat | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Temmuz | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | Ş | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | T | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7. | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Şub | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Tem | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Şubat | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Temmuz | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | Ş | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | T | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1. | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48. | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28. | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42. | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365. | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Pts | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cum | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Pts | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cum | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Pts | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cum | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Pazartesi | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Cuma | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | P | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Pt | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cu | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Pts | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cum | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Pazartesi | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Cuma | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | P | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Pt | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cu | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Pts | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cum | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Pazartesi | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Cuma | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | P | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Pt | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cu | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5. | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Pts | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cum | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Pazartesi | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Cuma | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | P | 2019-02-17T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | C | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Pt | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Cu | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ÖÖ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ÖS | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ÖS | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ÖÖ | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ÖÖ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ÖS | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ÖS | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ÖÖ | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | öö | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ös | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ös | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | öö | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ö.ö. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ö.s. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ö.s. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ö.ö. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | öö | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ös | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ös | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | öö | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ÖÖ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ÖS | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ÖS | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ÖÖ | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ÖÖ | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ÖS | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ÖS | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ÖÖ | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | öö | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ös | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ös | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | öö | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ö.ö. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ö.s. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ö.s. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ö.ö. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | öö | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ös | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ös | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | öö | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | sabahleyin | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | öğleden sonra | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | akşamleyin | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | geceleyin | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | sabahleyin | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | öğleden sonra | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | akşamleyin | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | geceleyin | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | sabahleyin | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | öğleden sonra | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | akşamleyin | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | geceleyin | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | sabahleyin | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | öğleden sonra | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | akşamleyin | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | geceleyin | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | sa | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ös | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ak | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ge | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11. | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11. | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23. | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1. | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55. | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1. | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55. | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Şub 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 Şubat 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mayıs 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 11 Şubat 1987 Çarşamba | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 Mayıs 1453 Pazar | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Şub 1987, 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May 1453, 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 Şubat 1987 saat 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 Mayıs 1453 saat 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 11 Şubat 1987 Çarşamba saat 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 Mayıs 1453 Pazar saat 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------- | ---------------------- | ---------------------- |
+| 2006-01-01T00:00:00.000Z | yaklaşık 6 yıl | yaklaşık 6 yıl | yaklaşık 6 yıl sonra |
+| 2005-01-01T00:00:00.000Z | yaklaşık 5 yıl | yaklaşık 5 yıl | yaklaşık 5 yıl sonra |
+| 2004-01-01T00:00:00.000Z | yaklaşık 4 yıl | yaklaşık 4 yıl | yaklaşık 4 yıl sonra |
+| 2003-01-01T00:00:00.000Z | yaklaşık 3 yıl | yaklaşık 3 yıl | yaklaşık 3 yıl sonra |
+| 2002-01-01T00:00:00.000Z | yaklaşık 2 yıl | yaklaşık 2 yıl | yaklaşık 2 yıl sonra |
+| 2001-06-01T00:00:00.000Z | 1 yıldan fazla | 1 yıldan fazla | 1 yıldan fazla sonra |
+| 2001-02-01T00:00:00.000Z | yaklaşık 1 yıl | yaklaşık 1 yıl | yaklaşık 1 yıl sonra |
+| 2001-01-01T00:00:00.000Z | yaklaşık 1 yıl | yaklaşık 1 yıl | yaklaşık 1 yıl sonra |
+| 2000-06-01T00:00:00.000Z | 5 ay | 5 ay | 5 ay sonra |
+| 2000-03-01T00:00:00.000Z | 2 ay | 2 ay | 2 ay sonra |
+| 2000-02-01T00:00:00.000Z | yaklaşık 1 ay | yaklaşık 1 ay | yaklaşık 1 ay sonra |
+| 2000-01-15T00:00:00.000Z | 14 gün | 14 gün | 14 gün sonra |
+| 2000-01-02T00:00:00.000Z | 1 gün | 1 gün | 1 gün sonra |
+| 2000-01-01T06:00:00.000Z | yaklaşık 6 saat | yaklaşık 6 saat | yaklaşık 6 saat sonra |
+| 2000-01-01T01:00:00.000Z | yaklaşık 1 saat | yaklaşık 1 saat | yaklaşık 1 saat sonra |
+| 2000-01-01T00:45:00.000Z | yaklaşık 1 saat | yaklaşık 1 saat | yaklaşık 1 saat sonra |
+| 2000-01-01T00:30:00.000Z | 30 dakika | 30 dakika | 30 dakika sonra |
+| 2000-01-01T00:15:00.000Z | 15 dakika | 15 dakika | 15 dakika sonra |
+| 2000-01-01T00:01:00.000Z | 1 dakika | 1 dakika | 1 dakika sonra |
+| 2000-01-01T00:00:25.000Z | bir dakikadan az | yarım dakika | bir dakikadan az sonra |
+| 2000-01-01T00:00:15.000Z | bir dakikadan az | 20 saniyeden az | bir dakikadan az sonra |
+| 2000-01-01T00:00:05.000Z | bir dakikadan az | 10 saniyeden az | bir dakikadan az sonra |
+| 2000-01-01T00:00:00.000Z | bir dakikadan az | 5 saniyeden az | bir dakikadan az önce |
+| 1999-12-31T23:59:55.000Z | bir dakikadan az | 10 saniyeden az | bir dakikadan az önce |
+| 1999-12-31T23:59:45.000Z | bir dakikadan az | 20 saniyeden az | bir dakikadan az önce |
+| 1999-12-31T23:59:35.000Z | bir dakikadan az | yarım dakika | bir dakikadan az önce |
+| 1999-12-31T23:59:00.000Z | 1 dakika | 1 dakika | 1 dakika önce |
+| 1999-12-31T23:45:00.000Z | 15 dakika | 15 dakika | 15 dakika önce |
+| 1999-12-31T23:30:00.000Z | 30 dakika | 30 dakika | 30 dakika önce |
+| 1999-12-31T23:15:00.000Z | yaklaşık 1 saat | yaklaşık 1 saat | yaklaşık 1 saat önce |
+| 1999-12-31T23:00:00.000Z | yaklaşık 1 saat | yaklaşık 1 saat | yaklaşık 1 saat önce |
+| 1999-12-31T18:00:00.000Z | yaklaşık 6 saat | yaklaşık 6 saat | yaklaşık 6 saat önce |
+| 1999-12-30T00:00:00.000Z | 2 gün | 2 gün | 2 gün önce |
+| 1999-12-15T00:00:00.000Z | 17 gün | 17 gün | 17 gün önce |
+| 1999-12-01T00:00:00.000Z | yaklaşık 1 ay | yaklaşık 1 ay | yaklaşık 1 ay önce |
+| 1999-11-01T00:00:00.000Z | 2 ay | 2 ay | 2 ay önce |
+| 1999-06-01T00:00:00.000Z | 7 ay | 7 ay | 7 ay önce |
+| 1999-01-01T00:00:00.000Z | yaklaşık 1 yıl | yaklaşık 1 yıl | yaklaşık 1 yıl önce |
+| 1998-12-01T00:00:00.000Z | yaklaşık 1 yıl | yaklaşık 1 yıl | yaklaşık 1 yıl önce |
+| 1998-06-01T00:00:00.000Z | 1 yıldan fazla | 1 yıldan fazla | 1 yıldan fazla önce |
+| 1998-01-01T00:00:00.000Z | yaklaşık 2 yıl | yaklaşık 2 yıl | yaklaşık 2 yıl önce |
+| 1997-01-01T00:00:00.000Z | yaklaşık 3 yıl | yaklaşık 3 yıl | yaklaşık 3 yıl önce |
+| 1996-01-01T00:00:00.000Z | yaklaşık 4 yıl | yaklaşık 4 yıl | yaklaşık 4 yıl önce |
+| 1995-01-01T00:00:00.000Z | yaklaşık 5 yıl | yaklaşık 5 yıl | yaklaşık 5 yıl önce |
+| 1994-01-01T00:00:00.000Z | yaklaşık 6 yıl | yaklaşık 6 yıl | yaklaşık 6 yıl önce |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 yıl | 6 yıl sonra | 52608 saat |
+| 2005-01-01T00:00:00.000Z | 5 yıl | 5 yıl sonra | 43848 saat |
+| 2004-01-01T00:00:00.000Z | 4 yıl | 4 yıl sonra | 35064 saat |
+| 2003-01-01T00:00:00.000Z | 3 yıl | 3 yıl sonra | 26304 saat |
+| 2002-01-01T00:00:00.000Z | 2 yıl | 2 yıl sonra | 17544 saat |
+| 2001-06-01T00:00:00.000Z | 1 yıl | 1 yıl sonra | 12408 saat |
+| 2001-02-01T00:00:00.000Z | 1 yıl | 1 yıl sonra | 9528 saat |
+| 2001-01-01T00:00:00.000Z | 1 yıl | 1 yıl sonra | 8784 saat |
+| 2000-06-01T00:00:00.000Z | 5 ay | 5 ay sonra | 3648 saat |
+| 2000-03-01T00:00:00.000Z | 2 ay | 2 ay sonra | 1440 saat |
+| 2000-02-01T00:00:00.000Z | 1 ay | 1 ay sonra | 744 saat |
+| 2000-01-15T00:00:00.000Z | 14 gün | 14 gün sonra | 336 saat |
+| 2000-01-02T00:00:00.000Z | 1 gün | 1 gün sonra | 24 saat |
+| 2000-01-01T06:00:00.000Z | 6 saat | 6 saat sonra | 6 saat |
+| 2000-01-01T01:00:00.000Z | 1 saat | 1 saat sonra | 1 saat |
+| 2000-01-01T00:45:00.000Z | 45 dakika | 45 dakika sonra | 1 saat |
+| 2000-01-01T00:30:00.000Z | 30 dakika | 30 dakika sonra | 1 saat |
+| 2000-01-01T00:15:00.000Z | 15 dakika | 15 dakika sonra | 0 saat |
+| 2000-01-01T00:01:00.000Z | 1 dakika | 1 dakika sonra | 0 saat |
+| 2000-01-01T00:00:25.000Z | 25 saniye | 25 saniye sonra | 0 saat |
+| 2000-01-01T00:00:15.000Z | 15 saniye | 15 saniye sonra | 0 saat |
+| 2000-01-01T00:00:05.000Z | 5 saniye | 5 saniye sonra | 0 saat |
+| 2000-01-01T00:00:00.000Z | 0 saniye | 0 saniye önce | 0 saat |
+| 1999-12-31T23:59:55.000Z | 5 saniye | 5 saniye önce | 0 saat |
+| 1999-12-31T23:59:45.000Z | 15 saniye | 15 saniye önce | 0 saat |
+| 1999-12-31T23:59:35.000Z | 25 saniye | 25 saniye önce | 0 saat |
+| 1999-12-31T23:59:00.000Z | 1 dakika | 1 dakika önce | 0 saat |
+| 1999-12-31T23:45:00.000Z | 15 dakika | 15 dakika önce | 0 saat |
+| 1999-12-31T23:30:00.000Z | 30 dakika | 30 dakika önce | 1 saat |
+| 1999-12-31T23:15:00.000Z | 45 dakika | 45 dakika önce | 1 saat |
+| 1999-12-31T23:00:00.000Z | 1 saat | 1 saat önce | 1 saat |
+| 1999-12-31T18:00:00.000Z | 6 saat | 6 saat önce | 6 saat |
+| 1999-12-30T00:00:00.000Z | 2 gün | 2 gün önce | 48 saat |
+| 1999-12-15T00:00:00.000Z | 17 gün | 17 gün önce | 408 saat |
+| 1999-12-01T00:00:00.000Z | 1 ay | 1 ay önce | 744 saat |
+| 1999-11-01T00:00:00.000Z | 2 ay | 2 ay önce | 1464 saat |
+| 1999-06-01T00:00:00.000Z | 7 ay | 7 ay önce | 5136 saat |
+| 1999-01-01T00:00:00.000Z | 1 yıl | 1 yıl önce | 8760 saat |
+| 1998-12-01T00:00:00.000Z | 1 yıl | 1 yıl önce | 9504 saat |
+| 1998-06-01T00:00:00.000Z | 2 yıl | 2 yıl önce | 13896 saat |
+| 1998-01-01T00:00:00.000Z | 2 yıl | 2 yıl önce | 17520 saat |
+| 1997-01-01T00:00:00.000Z | 3 yıl | 3 yıl önce | 26280 saat |
+| 1996-01-01T00:00:00.000Z | 4 yıl | 4 yıl önce | 35064 saat |
+| 1995-01-01T00:00:00.000Z | 5 yıl | 5 yıl önce | 43824 saat |
+| 1994-01-01T00:00:00.000Z | 6 yıl | 6 yıl önce | 52584 saat |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------------- |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | Çarşamba saat 00:00 |
+| 2000-01-02T00:00:00.000Z | yarın saat 00:00 |
+| 2000-01-01T00:00:00.000Z | bugün saat 00:00 |
+| 1999-12-31T00:00:00.000Z | dün saat 00:00 |
+| 1999-12-27T00:00:00.000Z | geçen hafta Pazartesi saat 00:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/types.ts b/date-fns/src/locale/types.ts
new file mode 100644
index 0000000..b82c227
--- /dev/null
+++ b/date-fns/src/locale/types.ts
@@ -0,0 +1,105 @@
+export interface Locale {
+ code: string
+ formatDistance: FormatDistanceFn
+ formatRelative: FormatRelativeFn
+ localize: Localize
+ formatLong: FormatLong
+ match: Match
+ options?: LocaleOptions
+}
+
+export interface LocaleOptions {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+}
+
+export type FormatDistanceFn = (
+ token:
+ | 'lessThanXSeconds'
+ | 'xSeconds'
+ | 'halfAMinute'
+ | 'lessThanXMinutes'
+ | 'xMinutes'
+ | 'aboutXHours'
+ | 'xHours'
+ | 'xDays'
+ | 'aboutXMonths'
+ | 'xMonths'
+ | 'aboutXYears'
+ | 'xYears'
+ | 'overXYears'
+ | 'almostXYears',
+ count: number,
+ options?: {
+ addSuffix?: boolean
+ comparison?: -1 | 0 | 1
+ }
+) => string
+
+export type FormatRelativeFn = (
+ token: 'lastWeek' | 'yesterday' | 'today' | 'tomorrow' | 'nextWeek' | 'other',
+ date: Date | number,
+ baseDate: Date | number,
+ options?: { weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 }
+) => string
+
+export type LocalizeFn<TValue> = (
+ value: TValue,
+ options?: {
+ width?: 'narrow' | 'short' | 'abbreviated' | 'wide'
+ context?: 'formatting' | 'standalone'
+ }
+) => string
+
+export interface Localize {
+ ordinalNumber: LocalizeFn<number>
+ era: LocalizeFn<0 | 1>
+ quarter: LocalizeFn<1 | 2 | 3 | 4>
+ month: LocalizeFn<0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11>
+ day: LocalizeFn<0 | 1 | 2 | 3 | 4 | 5 | 6>
+ dayPeriod: LocalizeFn<
+ | 'am'
+ | 'pm'
+ | 'midnight'
+ | 'noon'
+ | 'morning'
+ | 'afternoon'
+ | 'evening'
+ | 'night'
+ >
+}
+
+export type FormatLongFn = (options?: {
+ width?: 'full' | 'long' | 'medium' | 'short'
+}) => string
+
+export interface FormatLong {
+ date: FormatLongFn
+ time: FormatLongFn
+ dateTime: FormatLongFn
+}
+
+export type MatchFn<TResult> = (
+ str: string,
+ options?: {
+ width?: 'narrow' | 'short' | 'abbreviated' | 'wide'
+ }
+) => TResult
+
+export interface Match {
+ ordinalNumber: MatchFn<number>
+ era: MatchFn<0 | 1>
+ quarter: MatchFn<1 | 2 | 3 | 4>
+ month: MatchFn<0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11>
+ day: MatchFn<0 | 1 | 2 | 3 | 4 | 5 | 6>
+ dayPeriod: MatchFn<
+ | 'am'
+ | 'pm'
+ | 'midnight'
+ | 'noon'
+ | 'morning'
+ | 'afternoon'
+ | 'evening'
+ | 'night'
+ >
+}
diff --git a/date-fns/src/locale/ug/_lib/formatDistance/index.js b/date-fns/src/locale/ug/_lib/formatDistance/index.js
new file mode 100644
index 0000000..4e5906a
--- /dev/null
+++ b/date-fns/src/locale/ug/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'بىر سىكۇنت ئىچىدە',
+ other: 'سىكۇنت ئىچىدە {{count}}'
+ },
+
+ xSeconds: {
+ one: 'بىر سىكۇنت',
+ other: 'سىكۇنت {{count}}'
+ },
+
+ halfAMinute: 'يىرىم مىنۇت',
+
+ lessThanXMinutes: {
+ one: 'بىر مىنۇت ئىچىدە',
+ other: 'مىنۇت ئىچىدە {{count}}'
+ },
+
+ xMinutes: {
+ one: 'بىر مىنۇت',
+ other: 'مىنۇت {{count}}'
+ },
+
+ aboutXHours: {
+ one: 'تەخمىنەن بىر سائەت',
+ other: 'سائەت {{count}} تەخمىنەن'
+ },
+
+ xHours: {
+ one: 'بىر سائەت',
+ other: 'سائەت {{count}}'
+ },
+
+ xDays: {
+ one: 'بىر كۈن',
+ other: 'كۈن {{count}}'
+ },
+
+ aboutXWeeks: {
+ one: 'تەخمىنەن بىرھەپتە',
+ other: 'ھەپتە {{count}} تەخمىنەن'
+ },
+
+ xWeeks: {
+ one: 'بىرھەپتە',
+ other: 'ھەپتە {{count}}'
+ },
+
+ aboutXMonths: {
+ one: 'تەخمىنەن بىر ئاي',
+ other: 'ئاي {{count}} تەخمىنەن'
+ },
+
+ xMonths: {
+ one: 'بىر ئاي',
+ other: 'ئاي {{count}}'
+ },
+
+ aboutXYears: {
+ one: 'تەخمىنەن بىر يىل',
+ other: 'يىل {{count}} تەخمىنەن'
+ },
+
+ xYears: {
+ one: 'بىر يىل',
+ other: 'يىل {{count}}'
+ },
+
+ overXYears: {
+ one: 'بىر يىلدىن ئارتۇق',
+ other: 'يىلدىن ئارتۇق {{count}}'
+ },
+
+ almostXYears: {
+ one: 'ئاساسەن بىر يىل',
+ other: 'يىل {{count}} ئاساسەن'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result
+ } else {
+ return result + ' بولدى'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/ug/_lib/formatLong/index.js b/date-fns/src/locale/ug/_lib/formatLong/index.js
new file mode 100644
index 0000000..4d9f0fc
--- /dev/null
+++ b/date-fns/src/locale/ug/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'MM/dd/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ long: 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ short: 'h:mm a'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'دە' {{time}}",
+ long: "{{date}} 'دە' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/ug/_lib/formatRelative/index.js b/date-fns/src/locale/ug/_lib/formatRelative/index.js
new file mode 100644
index 0000000..849585f
--- /dev/null
+++ b/date-fns/src/locale/ug/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'ئ‍ۆتكەن' eeee 'دە' p",
+ yesterday: "'تۈنۈگۈن دە' p",
+ today: "'بۈگۈن دە' p",
+ tomorrow: "'ئەتە دە' p",
+ nextWeek: "eeee 'دە' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/ug/_lib/localize/index.js b/date-fns/src/locale/ug/_lib/localize/index.js
new file mode 100644
index 0000000..73da2b9
--- /dev/null
+++ b/date-fns/src/locale/ug/_lib/localize/index.js
@@ -0,0 +1,177 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['ب', 'ك'],
+ abbreviated: ['ب', 'ك'],
+ wide: ['مىيلادىدىن بۇرۇن', 'مىيلادىدىن كىيىن']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1', '2', '3', '4'],
+ wide: ['بىرىنجى چارەك', 'ئىككىنجى چارەك', 'ئۈچىنجى چارەك', 'تۆتىنجى چارەك']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['ي', 'ف', 'م', 'ا', 'م', 'ى', 'ى', 'ا', 'س', 'ۆ', 'ن', 'د'],
+ abbreviated: [
+ 'يانۋار',
+ 'فېۋىرال',
+ 'مارت',
+ 'ئاپرىل',
+ 'ماي',
+ 'ئىيۇن',
+ 'ئىيول',
+ 'ئاۋغۇست',
+ 'سىنتەبىر',
+ 'ئۆكتەبىر',
+ 'نويابىر',
+ 'دىكابىر'
+ ],
+ wide: [
+ 'يانۋار',
+ 'فېۋىرال',
+ 'مارت',
+ 'ئاپرىل',
+ 'ماي',
+ 'ئىيۇن',
+ 'ئىيول',
+ 'ئاۋغۇست',
+ 'سىنتەبىر',
+ 'ئۆكتەبىر',
+ 'نويابىر',
+ 'دىكابىر'
+ ]
+}
+
+var dayValues = {
+ narrow: ['ي', 'د', 'س', 'چ', 'پ', 'ج', 'ش'],
+ short: ['ي', 'د', 'س', 'چ', 'پ', 'ج', 'ش'],
+ abbreviated: [
+ 'يەكشەنبە',
+ 'دۈشەنبە',
+ 'سەيشەنبە',
+ 'چارشەنبە',
+ 'پەيشەنبە',
+ 'جۈمە',
+ 'شەنبە'
+ ],
+ wide: [
+ 'يەكشەنبە',
+ 'دۈشەنبە',
+ 'سەيشەنبە',
+ 'چارشەنبە',
+ 'پەيشەنبە',
+ 'جۈمە',
+ 'شەنبە'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ئە',
+ pm: 'چ',
+ midnight: 'ك',
+ noon: 'چ',
+ morning: 'ئەتىگەن',
+ afternoon: 'چۈشتىن كىيىن',
+ evening: 'ئاخشىم',
+ night: 'كىچە'
+ },
+ abbreviated: {
+ am: 'ئە',
+ pm: 'چ',
+ midnight: 'ك',
+ noon: 'چ',
+ morning: 'ئەتىگەن',
+ afternoon: 'چۈشتىن كىيىن',
+ evening: 'ئاخشىم',
+ night: 'كىچە'
+ },
+ wide: {
+ am: 'ئە',
+ pm: 'چ',
+ midnight: 'ك',
+ noon: 'چ',
+ morning: 'ئەتىگەن',
+ afternoon: 'چۈشتىن كىيىن',
+ evening: 'ئاخشىم',
+ night: 'كىچە'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ئە',
+ pm: 'چ',
+ midnight: 'ك',
+ noon: 'چ',
+ morning: 'ئەتىگەندە',
+ afternoon: 'چۈشتىن كىيىن',
+ evening: 'ئاخشامدا',
+ night: 'كىچىدە'
+ },
+ abbreviated: {
+ am: 'ئە',
+ pm: 'چ',
+ midnight: 'ك',
+ noon: 'چ',
+ morning: 'ئەتىگەندە',
+ afternoon: 'چۈشتىن كىيىن',
+ evening: 'ئاخشامدا',
+ night: 'كىچىدە'
+ },
+ wide: {
+ am: 'ئە',
+ pm: 'چ',
+ midnight: 'ك',
+ noon: 'چ',
+ morning: 'ئەتىگەندە',
+ afternoon: 'چۈشتىن كىيىن',
+ evening: 'ئاخشامدا',
+ night: 'كىچىدە'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ return String(dirtyNumber)
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/ug/_lib/match/index.js b/date-fns/src/locale/ug/_lib/match/index.js
new file mode 100644
index 0000000..76b722d
--- /dev/null
+++ b/date-fns/src/locale/ug/_lib/match/index.js
@@ -0,0 +1,136 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(ب|ك)/i,
+ wide: /^(مىيلادىدىن بۇرۇن|مىيلادىدىن كىيىن)/i
+}
+var parseEraPatterns = {
+ any: [/^بۇرۇن/i, /^كىيىن/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^چ[1234]/i,
+ wide: /^چارەك [1234]/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[يفمئامئ‍ئاسۆند]/i,
+ abbreviated: /^(يانۋار|فېۋىرال|مارت|ئاپرىل|ماي|ئىيۇن|ئىيول|ئاۋغۇست|سىنتەبىر|ئۆكتەبىر|نويابىر|دىكابىر)/i,
+ wide: /^(يانۋار|فېۋىرال|مارت|ئاپرىل|ماي|ئىيۇن|ئىيول|ئاۋغۇست|سىنتەبىر|ئۆكتەبىر|نويابىر|دىكابىر)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^ي/i,
+ /^ف/i,
+ /^م/i,
+ /^ا/i,
+ /^م/i,
+ /^ى‍/i,
+ /^ى‍/i,
+ /^ا‍/i,
+ /^س/i,
+ /^ۆ/i,
+ /^ن/i,
+ /^د/i
+ ],
+ any: [
+ /^يان/i,
+ /^فېۋ/i,
+ /^مار/i,
+ /^ئاپ/i,
+ /^ماي/i,
+ /^ئىيۇن/i,
+ /^ئىيول/i,
+ /^ئاۋ/i,
+ /^سىن/i,
+ /^ئۆك/i,
+ /^نوي/i,
+ /^دىك/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[دسچپجشي]/i,
+ short: /^(يە|دۈ|سە|چا|پە|جۈ|شە)/i,
+ abbreviated: /^(يە|دۈ|سە|چا|پە|جۈ|شە)/i,
+ wide: /^(يەكشەنبە|دۈشەنبە|سەيشەنبە|چارشەنبە|پەيشەنبە|جۈمە|شەنبە)/i
+}
+var parseDayPatterns = {
+ narrow: [/^ي/i, /^د/i, /^س/i, /^چ/i, /^پ/i, /^ج/i, /^ش/i],
+ any: [/^ي/i, /^د/i, /^س/i, /^چ/i, /^پ/i, /^ج/i, /^ش/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(ئە|چ|ك|چ|(دە|ئەتىگەن) ( ئە‍|چۈشتىن كىيىن|ئاخشىم|كىچە))/i,
+ any: /^(ئە|چ|ك|چ|(دە|ئەتىگەن) ( ئە‍|چۈشتىن كىيىن|ئاخشىم|كىچە))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^ئە/i,
+ pm: /^چ/i,
+ midnight: /^ك/i,
+ noon: /^چ/i,
+ morning: /ئەتىگەن/i,
+ afternoon: /چۈشتىن كىيىن/i,
+ evening: /ئاخشىم/i,
+ night: /كىچە/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/ug/index.d.ts b/date-fns/src/locale/ug/index.d.ts
new file mode 100644
index 0000000..a67a679
--- /dev/null
+++ b/date-fns/src/locale/ug/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { ug } from 'date-fns/locale'
+export default ug
diff --git a/date-fns/src/locale/ug/index.js b/date-fns/src/locale/ug/index.js
new file mode 100644
index 0000000..63b4cf1
--- /dev/null
+++ b/date-fns/src/locale/ug/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Uighur locale
+ * @language Uighur
+ * @iso-639-2 uig
+ * @author Abduwaly M. [@abduwaly]{@link https://github.com/abduwaly}
+ */
+var locale = {
+ code: 'ug',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 0 /* Sunday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/ug/index.js.flow b/date-fns/src/locale/ug/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/ug/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/ug/snapshot.md b/date-fns/src/locale/ug/snapshot.md
new file mode 100644
index 0000000..1eb8440
--- /dev/null
+++ b/date-fns/src/locale/ug/snapshot.md
@@ -0,0 +1,304 @@
+# Uighur (ug) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | -------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-28T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0004-12-26T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | بىرىنجى چارەك | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | ئىككىنجى چارەك | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | بىرىنجى چارەك | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | ئىككىنجى چارەك | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | فېۋىرال | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ئىيول | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | فېۋىرال | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ئىيول | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ى | Invalid Date |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | فېۋىرال | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ئىيول | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | فېۋىرال | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ئىيول | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | ف | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | ى | Invalid Date |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-30T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 49 | 2019-12-01T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | دۈشەنبە | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | دۈشەنبە | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | دۈشەنبە | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | دۈشەنبە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | د | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | د | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | دۈشەنبە | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | دۈشەنبە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | د | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | د | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | دۈشەنبە | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | دۈشەنبە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | د | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | د | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 6 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | دۈشەنبە | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | دۈشەنبە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | جۈمە | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | د | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | د | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | ج | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | چ | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ئە | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ئەتىگەندە | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | چۈشتىن كىيىن | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ئاخشامدا | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | كىچىدە | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | ئەتىگەندە | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | چۈشتىن كىيىن | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ئاخشامدا | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | كىچىدە | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | ئەتىگەندە | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | چۈشتىن كىيىن | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ئاخشامدا | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | كىچىدە | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | ئەتىگەندە | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | چۈشتىن كىيىن | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ئاخشامدا | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | كىچىدە | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ئەتىگەندە | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | چۈشتىن كىيىن | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | ئاخشامدا | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | كىچىدە | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 02/11/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | فېۋىرال 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | فېۋىرال 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | چارشەنبە, فېۋىرال 11, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | يەكشەنبە, ماي 29, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 چ | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 چ | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 چ | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 چ | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 چ GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 چ GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 چ GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 چ GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 02/11/1987, 12:13 چ | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 05/29/1453, 11:59 چ | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | فېۋىرال 11, 1987, 12:13:14 چ | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453, 11:59:59 چ | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | فېۋىرال 11, 1987 دە 12:13:14 چ GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | ماي 29, 1453 دە 11:59:59 چ GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | چارشەنبە, فېۋىرال 11, 1987 دە 12:13:14 چ GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | يەكشەنبە, ماي 29, 1453 دە 11:59:59 چ GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ------------------ | ---------------------- | ------------------------ |
+| 2006-01-01T00:00:00.000Z | يىل 6 تەخمىنەن | يىل 6 تەخمىنەن | يىل 6 تەخمىنەن |
+| 2005-01-01T00:00:00.000Z | يىل 5 تەخمىنەن | يىل 5 تەخمىنەن | يىل 5 تەخمىنەن |
+| 2004-01-01T00:00:00.000Z | يىل 4 تەخمىنەن | يىل 4 تەخمىنەن | يىل 4 تەخمىنەن |
+| 2003-01-01T00:00:00.000Z | يىل 3 تەخمىنەن | يىل 3 تەخمىنەن | يىل 3 تەخمىنەن |
+| 2002-01-01T00:00:00.000Z | يىل 2 تەخمىنەن | يىل 2 تەخمىنەن | يىل 2 تەخمىنەن |
+| 2001-06-01T00:00:00.000Z | بىر يىلدىن ئارتۇق | بىر يىلدىن ئارتۇق | بىر يىلدىن ئارتۇق |
+| 2001-02-01T00:00:00.000Z | تەخمىنەن بىر يىل | تەخمىنەن بىر يىل | تەخمىنەن بىر يىل |
+| 2001-01-01T00:00:00.000Z | تەخمىنەن بىر يىل | تەخمىنەن بىر يىل | تەخمىنەن بىر يىل |
+| 2000-06-01T00:00:00.000Z | ئاي 5 | ئاي 5 | ئاي 5 |
+| 2000-03-01T00:00:00.000Z | ئاي 2 | ئاي 2 | ئاي 2 |
+| 2000-02-01T00:00:00.000Z | تەخمىنەن بىر ئاي | تەخمىنەن بىر ئاي | تەخمىنەن بىر ئاي |
+| 2000-01-15T00:00:00.000Z | كۈن 14 | كۈن 14 | كۈن 14 |
+| 2000-01-02T00:00:00.000Z | بىر كۈن | بىر كۈن | بىر كۈن |
+| 2000-01-01T06:00:00.000Z | سائەت 6 تەخمىنەن | سائەت 6 تەخمىنەن | سائەت 6 تەخمىنەن |
+| 2000-01-01T01:00:00.000Z | تەخمىنەن بىر سائەت | تەخمىنەن بىر سائەت | تەخمىنەن بىر سائەت |
+| 2000-01-01T00:45:00.000Z | تەخمىنەن بىر سائەت | تەخمىنەن بىر سائەت | تەخمىنەن بىر سائەت |
+| 2000-01-01T00:30:00.000Z | مىنۇت 30 | مىنۇت 30 | مىنۇت 30 |
+| 2000-01-01T00:15:00.000Z | مىنۇت 15 | مىنۇت 15 | مىنۇت 15 |
+| 2000-01-01T00:01:00.000Z | بىر مىنۇت | بىر مىنۇت | بىر مىنۇت |
+| 2000-01-01T00:00:25.000Z | بىر مىنۇت ئىچىدە | يىرىم مىنۇت | بىر مىنۇت ئىچىدە |
+| 2000-01-01T00:00:15.000Z | بىر مىنۇت ئىچىدە | سىكۇنت ئىچىدە 20 | بىر مىنۇت ئىچىدە |
+| 2000-01-01T00:00:05.000Z | بىر مىنۇت ئىچىدە | سىكۇنت ئىچىدە 10 | بىر مىنۇت ئىچىدە |
+| 2000-01-01T00:00:00.000Z | بىر مىنۇت ئىچىدە | سىكۇنت ئىچىدە 5 | بىر مىنۇت ئىچىدە بولدى |
+| 1999-12-31T23:59:55.000Z | بىر مىنۇت ئىچىدە | سىكۇنت ئىچىدە 10 | بىر مىنۇت ئىچىدە بولدى |
+| 1999-12-31T23:59:45.000Z | بىر مىنۇت ئىچىدە | سىكۇنت ئىچىدە 20 | بىر مىنۇت ئىچىدە بولدى |
+| 1999-12-31T23:59:35.000Z | بىر مىنۇت ئىچىدە | يىرىم مىنۇت | بىر مىنۇت ئىچىدە بولدى |
+| 1999-12-31T23:59:00.000Z | بىر مىنۇت | بىر مىنۇت | بىر مىنۇت بولدى |
+| 1999-12-31T23:45:00.000Z | مىنۇت 15 | مىنۇت 15 | مىنۇت 15 بولدى |
+| 1999-12-31T23:30:00.000Z | مىنۇت 30 | مىنۇت 30 | مىنۇت 30 بولدى |
+| 1999-12-31T23:15:00.000Z | تەخمىنەن بىر سائەت | تەخمىنەن بىر سائەت | تەخمىنەن بىر سائەت بولدى |
+| 1999-12-31T23:00:00.000Z | تەخمىنەن بىر سائەت | تەخمىنەن بىر سائەت | تەخمىنەن بىر سائەت بولدى |
+| 1999-12-31T18:00:00.000Z | سائەت 6 تەخمىنەن | سائەت 6 تەخمىنەن | سائەت 6 تەخمىنەن بولدى |
+| 1999-12-30T00:00:00.000Z | كۈن 2 | كۈن 2 | كۈن 2 بولدى |
+| 1999-12-15T00:00:00.000Z | كۈن 17 | كۈن 17 | كۈن 17 بولدى |
+| 1999-12-01T00:00:00.000Z | تەخمىنەن بىر ئاي | تەخمىنەن بىر ئاي | تەخمىنەن بىر ئاي بولدى |
+| 1999-11-01T00:00:00.000Z | ئاي 2 | ئاي 2 | ئاي 2 بولدى |
+| 1999-06-01T00:00:00.000Z | ئاي 7 | ئاي 7 | ئاي 7 بولدى |
+| 1999-01-01T00:00:00.000Z | تەخمىنەن بىر يىل | تەخمىنەن بىر يىل | تەخمىنەن بىر يىل بولدى |
+| 1998-12-01T00:00:00.000Z | تەخمىنەن بىر يىل | تەخمىنەن بىر يىل | تەخمىنەن بىر يىل بولدى |
+| 1998-06-01T00:00:00.000Z | بىر يىلدىن ئارتۇق | بىر يىلدىن ئارتۇق | بىر يىلدىن ئارتۇق بولدى |
+| 1998-01-01T00:00:00.000Z | يىل 2 تەخمىنەن | يىل 2 تەخمىنەن | يىل 2 تەخمىنەن بولدى |
+| 1997-01-01T00:00:00.000Z | يىل 3 تەخمىنەن | يىل 3 تەخمىنەن | يىل 3 تەخمىنەن بولدى |
+| 1996-01-01T00:00:00.000Z | يىل 4 تەخمىنەن | يىل 4 تەخمىنەن | يىل 4 تەخمىنەن بولدى |
+| 1995-01-01T00:00:00.000Z | يىل 5 تەخمىنەن | يىل 5 تەخمىنەن | يىل 5 تەخمىنەن بولدى |
+| 1994-01-01T00:00:00.000Z | يىل 6 تەخمىنەن | يىل 6 تەخمىنەن | يىل 6 تەخمىنەن بولدى |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | يىل 6 | يىل 6 | سائەت 52608 |
+| 2005-01-01T00:00:00.000Z | يىل 5 | يىل 5 | سائەت 43848 |
+| 2004-01-01T00:00:00.000Z | يىل 4 | يىل 4 | سائەت 35064 |
+| 2003-01-01T00:00:00.000Z | يىل 3 | يىل 3 | سائەت 26304 |
+| 2002-01-01T00:00:00.000Z | يىل 2 | يىل 2 | سائەت 17544 |
+| 2001-06-01T00:00:00.000Z | بىر يىل | بىر يىل | سائەت 12408 |
+| 2001-02-01T00:00:00.000Z | بىر يىل | بىر يىل | سائەت 9528 |
+| 2001-01-01T00:00:00.000Z | بىر يىل | بىر يىل | سائەت 8784 |
+| 2000-06-01T00:00:00.000Z | ئاي 5 | ئاي 5 | سائەت 3648 |
+| 2000-03-01T00:00:00.000Z | ئاي 2 | ئاي 2 | سائەت 1440 |
+| 2000-02-01T00:00:00.000Z | بىر ئاي | بىر ئاي | سائەت 744 |
+| 2000-01-15T00:00:00.000Z | كۈن 14 | كۈن 14 | سائەت 336 |
+| 2000-01-02T00:00:00.000Z | بىر كۈن | بىر كۈن | سائەت 24 |
+| 2000-01-01T06:00:00.000Z | سائەت 6 | سائەت 6 | سائەت 6 |
+| 2000-01-01T01:00:00.000Z | بىر سائەت | بىر سائەت | بىر سائەت |
+| 2000-01-01T00:45:00.000Z | مىنۇت 45 | مىنۇت 45 | بىر سائەت |
+| 2000-01-01T00:30:00.000Z | مىنۇت 30 | مىنۇت 30 | بىر سائەت |
+| 2000-01-01T00:15:00.000Z | مىنۇت 15 | مىنۇت 15 | سائەت 0 |
+| 2000-01-01T00:01:00.000Z | بىر مىنۇت | بىر مىنۇت | سائەت 0 |
+| 2000-01-01T00:00:25.000Z | سىكۇنت 25 | سىكۇنت 25 | سائەت 0 |
+| 2000-01-01T00:00:15.000Z | سىكۇنت 15 | سىكۇنت 15 | سائەت 0 |
+| 2000-01-01T00:00:05.000Z | سىكۇنت 5 | سىكۇنت 5 | سائەت 0 |
+| 2000-01-01T00:00:00.000Z | سىكۇنت 0 | سىكۇنت 0 بولدى | سائەت 0 |
+| 1999-12-31T23:59:55.000Z | سىكۇنت 5 | سىكۇنت 5 بولدى | سائەت 0 |
+| 1999-12-31T23:59:45.000Z | سىكۇنت 15 | سىكۇنت 15 بولدى | سائەت 0 |
+| 1999-12-31T23:59:35.000Z | سىكۇنت 25 | سىكۇنت 25 بولدى | سائەت 0 |
+| 1999-12-31T23:59:00.000Z | بىر مىنۇت | بىر مىنۇت بولدى | سائەت 0 |
+| 1999-12-31T23:45:00.000Z | مىنۇت 15 | مىنۇت 15 بولدى | سائەت 0 |
+| 1999-12-31T23:30:00.000Z | مىنۇت 30 | مىنۇت 30 بولدى | بىر سائەت |
+| 1999-12-31T23:15:00.000Z | مىنۇت 45 | مىنۇت 45 بولدى | بىر سائەت |
+| 1999-12-31T23:00:00.000Z | بىر سائەت | بىر سائەت بولدى | بىر سائەت |
+| 1999-12-31T18:00:00.000Z | سائەت 6 | سائەت 6 بولدى | سائەت 6 |
+| 1999-12-30T00:00:00.000Z | كۈن 2 | كۈن 2 بولدى | سائەت 48 |
+| 1999-12-15T00:00:00.000Z | كۈن 17 | كۈن 17 بولدى | سائەت 408 |
+| 1999-12-01T00:00:00.000Z | بىر ئاي | بىر ئاي بولدى | سائەت 744 |
+| 1999-11-01T00:00:00.000Z | ئاي 2 | ئاي 2 بولدى | سائەت 1464 |
+| 1999-06-01T00:00:00.000Z | ئاي 7 | ئاي 7 بولدى | سائەت 5136 |
+| 1999-01-01T00:00:00.000Z | بىر يىل | بىر يىل بولدى | سائەت 8760 |
+| 1998-12-01T00:00:00.000Z | بىر يىل | بىر يىل بولدى | سائەت 9504 |
+| 1998-06-01T00:00:00.000Z | يىل 2 | يىل 2 بولدى | سائەت 13896 |
+| 1998-01-01T00:00:00.000Z | يىل 2 | يىل 2 بولدى | سائەت 17520 |
+| 1997-01-01T00:00:00.000Z | يىل 3 | يىل 3 بولدى | سائەت 26280 |
+| 1996-01-01T00:00:00.000Z | يىل 4 | يىل 4 بولدى | سائەت 35064 |
+| 1995-01-01T00:00:00.000Z | يىل 5 | يىل 5 بولدى | سائەت 43824 |
+| 1994-01-01T00:00:00.000Z | يىل 6 | يىل 6 بولدى | سائەت 52584 |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | --------------------------- |
+| 2000-01-10T00:00:00.000Z | 01/10/2000 |
+| 2000-01-05T00:00:00.000Z | چارشەنبە دە 12:00 ئە |
+| 2000-01-02T00:00:00.000Z | ئەتە دە 12:00 ئە |
+| 2000-01-01T00:00:00.000Z | بۈگۈن دە 12:00 ئە |
+| 1999-12-31T00:00:00.000Z | تۈنۈگۈن دە 12:00 ئە |
+| 1999-12-27T00:00:00.000Z | ئ‍ۆتكەن دۈشەنبە دە 12:00 ئە |
+| 1999-12-21T00:00:00.000Z | 12/21/1999 |
diff --git a/date-fns/src/locale/uk/_lib/formatDistance/index.js b/date-fns/src/locale/uk/_lib/formatDistance/index.js
new file mode 100644
index 0000000..dcf337b
--- /dev/null
+++ b/date-fns/src/locale/uk/_lib/formatDistance/index.js
@@ -0,0 +1,247 @@
+function declension(scheme, count) {
+ // scheme for count=1 exists
+ if (scheme.one !== undefined && count === 1) {
+ return scheme.one
+ }
+
+ var rem10 = count % 10
+ var rem100 = count % 100
+
+ // 1, 21, 31, ...
+ if (rem10 === 1 && rem100 !== 11) {
+ return scheme.singularNominative.replace('{{count}}', count)
+
+ // 2, 3, 4, 22, 23, 24, 32 ...
+ } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {
+ return scheme.singularGenitive.replace('{{count}}', count)
+
+ // 5, 6, 7, 8, 9, 10, 11, ...
+ } else {
+ return scheme.pluralGenitive.replace('{{count}}', count)
+ }
+}
+
+function buildLocalizeTokenFn(scheme) {
+ return function(count, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ if (scheme.future) {
+ return declension(scheme.future, count)
+ } else {
+ return 'за ' + declension(scheme.regular, count)
+ }
+ } else {
+ if (scheme.past) {
+ return declension(scheme.past, count)
+ } else {
+ return declension(scheme.regular, count) + ' тому'
+ }
+ }
+ } else {
+ return declension(scheme.regular, count)
+ }
+ }
+}
+
+var formatDistanceLocale = {
+ lessThanXSeconds: buildLocalizeTokenFn({
+ regular: {
+ one: 'менше секунди',
+ singularNominative: 'менше {{count}} секунди',
+ singularGenitive: 'менше {{count}} секунд',
+ pluralGenitive: 'менше {{count}} секунд'
+ },
+ future: {
+ one: 'менше, ніж за секунду',
+ singularNominative: 'менше, ніж за {{count}} секунду',
+ singularGenitive: 'менше, ніж за {{count}} секунди',
+ pluralGenitive: 'менше, ніж за {{count}} секунд'
+ }
+ }),
+
+ xSeconds: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} секунда',
+ singularGenitive: '{{count}} секунди',
+ pluralGenitive: '{{count}} секунд'
+ },
+ past: {
+ singularNominative: '{{count}} секунду тому',
+ singularGenitive: '{{count}} секунди тому',
+ pluralGenitive: '{{count}} секунд тому'
+ },
+ future: {
+ singularNominative: 'за {{count}} секунду',
+ singularGenitive: 'за {{count}} секунди',
+ pluralGenitive: 'за {{count}} секунд'
+ }
+ }),
+
+ halfAMinute: function(_, options) {
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return 'за півхвилини'
+ } else {
+ return 'півхвилини тому'
+ }
+ }
+
+ return 'півхвилини'
+ },
+
+ lessThanXMinutes: buildLocalizeTokenFn({
+ regular: {
+ one: 'менше хвилини',
+ singularNominative: 'менше {{count}} хвилини',
+ singularGenitive: 'менше {{count}} хвилин',
+ pluralGenitive: 'менше {{count}} хвилин'
+ },
+ future: {
+ one: 'менше, ніж за хвилину',
+ singularNominative: 'менше, ніж за {{count}} хвилину',
+ singularGenitive: 'менше, ніж за {{count}} хвилини',
+ pluralGenitive: 'менше, ніж за {{count}} хвилин'
+ }
+ }),
+
+ xMinutes: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} хвилина',
+ singularGenitive: '{{count}} хвилини',
+ pluralGenitive: '{{count}} хвилин'
+ },
+ past: {
+ singularNominative: '{{count}} хвилину тому',
+ singularGenitive: '{{count}} хвилини тому',
+ pluralGenitive: '{{count}} хвилин тому'
+ },
+ future: {
+ singularNominative: 'за {{count}} хвилину',
+ singularGenitive: 'за {{count}} хвилини',
+ pluralGenitive: 'за {{count}} хвилин'
+ }
+ }),
+
+ aboutXHours: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'близько {{count}} години',
+ singularGenitive: 'близько {{count}} годин',
+ pluralGenitive: 'близько {{count}} годин'
+ },
+ future: {
+ singularNominative: 'приблизно за {{count}} годину',
+ singularGenitive: 'приблизно за {{count}} години',
+ pluralGenitive: 'приблизно за {{count}} годин'
+ }
+ }),
+
+ xHours: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} годину',
+ singularGenitive: '{{count}} години',
+ pluralGenitive: '{{count}} годин'
+ }
+ }),
+
+ xDays: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} день',
+ singularGenitive: '{{count}} дня',
+ pluralGenitive: '{{count}} днів'
+ }
+ }),
+
+ aboutXWeeks: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'близько {{count}} тижня',
+ singularGenitive: 'близько {{count}} тижнів',
+ pluralGenitive: 'близько {{count}} тижнів'
+ },
+ future: {
+ singularNominative: 'приблизно за {{count}} тиждень',
+ singularGenitive: 'приблизно за {{count}} тижні',
+ pluralGenitive: 'приблизно за {{count}} тижні'
+ }
+ }),
+
+ xWeeks: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} тиждень',
+ singularGenitive: '{{count}} тижня',
+ pluralGenitive: '{{count}} тижні'
+ }
+ }),
+
+ aboutXMonths: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'близько {{count}} місяця',
+ singularGenitive: 'близько {{count}} місяців',
+ pluralGenitive: 'близько {{count}} місяців'
+ },
+ future: {
+ singularNominative: 'приблизно за {{count}} місяць',
+ singularGenitive: 'приблизно за {{count}} місяця',
+ pluralGenitive: 'приблизно за {{count}} місяців'
+ }
+ }),
+
+ xMonths: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} місяць',
+ singularGenitive: '{{count}} місяця',
+ pluralGenitive: '{{count}} місяців'
+ }
+ }),
+
+ aboutXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'близько {{count}} року',
+ singularGenitive: 'близько {{count}} років',
+ pluralGenitive: 'близько {{count}} років'
+ },
+ future: {
+ singularNominative: 'приблизно за {{count}} рік',
+ singularGenitive: 'приблизно за {{count}} роки',
+ pluralGenitive: 'приблизно за {{count}} років'
+ }
+ }),
+
+ xYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: '{{count}} рік',
+ singularGenitive: '{{count}} роки',
+ pluralGenitive: '{{count}} років'
+ }
+ }),
+
+ overXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'більше {{count}} року',
+ singularGenitive: 'більше {{count}} років',
+ pluralGenitive: 'більше {{count}} років'
+ },
+ future: {
+ singularNominative: 'більше, ніж за {{count}} рік',
+ singularGenitive: 'більше, ніж за {{count}} роки',
+ pluralGenitive: 'більше, ніж за {{count}} років'
+ }
+ }),
+
+ almostXYears: buildLocalizeTokenFn({
+ regular: {
+ singularNominative: 'майже {{count}} рік',
+ singularGenitive: 'майже {{count}} роки',
+ pluralGenitive: 'майже {{count}} років'
+ },
+ future: {
+ singularNominative: 'майже за {{count}} рік',
+ singularGenitive: 'майже за {{count}} роки',
+ pluralGenitive: 'майже за {{count}} років'
+ }
+ })
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+ return formatDistanceLocale[token](count, options)
+}
diff --git a/date-fns/src/locale/uk/_lib/formatLong/index.js b/date-fns/src/locale/uk/_lib/formatLong/index.js
new file mode 100644
index 0000000..5edcf4c
--- /dev/null
+++ b/date-fns/src/locale/uk/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "EEEE, do MMMM y 'р.'",
+ long: "do MMMM y 'р.'",
+ medium: "d MMM y 'р.'",
+ short: 'dd.MM.y'
+}
+
+var timeFormats = {
+ full: 'H:mm:ss zzzz',
+ long: 'H:mm:ss z',
+ medium: 'H:mm:ss',
+ short: 'H:mm'
+}
+
+var dateTimeFormats = {
+ full: "{{date}} 'о' {{time}}",
+ long: "{{date}} 'о' {{time}}",
+ medium: '{{date}}, {{time}}',
+ short: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/uk/_lib/formatRelative/index.js b/date-fns/src/locale/uk/_lib/formatRelative/index.js
new file mode 100644
index 0000000..1f3c405
--- /dev/null
+++ b/date-fns/src/locale/uk/_lib/formatRelative/index.js
@@ -0,0 +1,82 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+var accusativeWeekdays = [
+ 'неділю',
+ 'понеділок',
+ 'вівторок',
+ 'середу',
+ 'четвер',
+ 'п’ятницю',
+ 'суботу'
+]
+
+function lastWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ switch (day) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return "'у минулу " + weekday + " о' p"
+ case 1:
+ case 2:
+ case 4:
+ return "'у минулий " + weekday + " о' p"
+ }
+}
+
+function thisWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ return "'у " + weekday + " о' p"
+}
+
+function nextWeek(day) {
+ var weekday = accusativeWeekdays[day]
+
+ switch (day) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return "'у наступну " + weekday + " о' p"
+ case 1:
+ case 2:
+ case 4:
+ return "'у наступний " + weekday + " о' p"
+ }
+}
+
+var formatRelativeLocale = {
+ lastWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return lastWeek(day)
+ }
+ },
+ yesterday: "'вчора о' p",
+ today: "'сьогодні о' p",
+ tomorrow: "'завтра о' p",
+ nextWeek: function(date, baseDate, options) {
+ var day = date.getUTCDay()
+ if (isSameUTCWeek(date, baseDate, options)) {
+ return thisWeek(day)
+ } else {
+ return nextWeek(day)
+ }
+ },
+ other: 'P'
+}
+
+export default function formatRelative(token, date, baseDate, options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(date, baseDate, options)
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/uk/_lib/localize/index.js b/date-fns/src/locale/uk/_lib/localize/index.js
new file mode 100644
index 0000000..ab9c7ff
--- /dev/null
+++ b/date-fns/src/locale/uk/_lib/localize/index.js
@@ -0,0 +1,217 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['до н.е.', 'н.е.'],
+ abbreviated: ['до н. е.', 'н. е.'],
+ wide: ['до нашої ери', 'нашої ери']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['1-й кв.', '2-й кв.', '3-й кв.', '4-й кв.'],
+ wide: ['1-й квартал', '2-й квартал', '3-й квартал', '4-й квартал']
+}
+
+var monthValues = {
+ // ДСТУ 3582:2013
+ narrow: ['С', 'Л', 'Б', 'К', 'Т', 'Ч', 'Л', 'С', 'В', 'Ж', 'Л', 'Г'],
+ abbreviated: [
+ 'січ.',
+ 'лют.',
+ 'берез.',
+ 'квіт.',
+ 'трав.',
+ 'черв.',
+ 'лип.',
+ 'серп.',
+ 'верес.',
+ 'жовт.',
+ 'листоп.',
+ 'груд.'
+ ],
+ wide: [
+ 'січень',
+ 'лютий',
+ 'березень',
+ 'квітень',
+ 'травень',
+ 'червень',
+ 'липень',
+ 'серпень',
+ 'вересень',
+ 'жовтень',
+ 'листопад',
+ 'грудень'
+ ]
+}
+
+var formattingMonthValues = {
+ narrow: ['С', 'Л', 'Б', 'К', 'Т', 'Ч', 'Л', 'С', 'В', 'Ж', 'Л', 'Г'],
+ abbreviated: [
+ 'січ.',
+ 'лют.',
+ 'берез.',
+ 'квіт.',
+ 'трав.',
+ 'черв.',
+ 'лип.',
+ 'серп.',
+ 'верес.',
+ 'жовт.',
+ 'листоп.',
+ 'груд.'
+ ],
+ wide: [
+ 'січня',
+ 'лютого',
+ 'березня',
+ 'квітня',
+ 'травня',
+ 'червня',
+ 'липня',
+ 'серпня',
+ 'вересня',
+ 'жовтня',
+ 'листопада',
+ 'грудня'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Н', 'П', 'В', 'С', 'Ч', 'П', 'С'],
+ short: ['нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
+ abbreviated: ['нед', 'пон', 'вів', 'сер', 'чтв', 'птн', 'суб'],
+ wide: [
+ 'неділя',
+ 'понеділок',
+ 'вівторок',
+ 'середа',
+ 'четвер',
+ 'п’ятниця',
+ 'субота'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'півн.',
+ noon: 'пол.',
+ morning: 'ранок',
+ afternoon: 'день',
+ evening: 'веч.',
+ night: 'ніч'
+ },
+ abbreviated: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'півн.',
+ noon: 'пол.',
+ morning: 'ранок',
+ afternoon: 'день',
+ evening: 'веч.',
+ night: 'ніч'
+ },
+ wide: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'північ',
+ noon: 'полудень',
+ morning: 'ранок',
+ afternoon: 'день',
+ evening: 'вечір',
+ night: 'ніч'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'півн.',
+ noon: 'пол.',
+ morning: 'ранку',
+ afternoon: 'дня',
+ evening: 'веч.',
+ night: 'ночі'
+ },
+ abbreviated: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'півн.',
+ noon: 'пол.',
+ morning: 'ранку',
+ afternoon: 'дня',
+ evening: 'веч.',
+ night: 'ночі'
+ },
+ wide: {
+ am: 'ДП',
+ pm: 'ПП',
+ midnight: 'північ',
+ noon: 'полудень',
+ morning: 'ранку',
+ afternoon: 'дня',
+ evening: 'веч.',
+ night: 'ночі'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var suffix
+
+ if (unit === 'date') {
+ if (dirtyNumber === 3 || dirtyNumber === 23) {
+ suffix = '-є'
+ } else {
+ suffix = '-е'
+ }
+ } else if (unit === 'minute' || unit === 'second' || unit === 'hour') {
+ suffix = '-а'
+ } else {
+ suffix = '-й'
+ }
+
+ return dirtyNumber + suffix
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'any',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/uk/_lib/match/index.js b/date-fns/src/locale/uk/_lib/match/index.js
new file mode 100644
index 0000000..863aa59
--- /dev/null
+++ b/date-fns/src/locale/uk/_lib/match/index.js
@@ -0,0 +1,142 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(-?(е|й|є|а|я))?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^((до )?н\.?\s?е\.?)/i,
+ abbreviated: /^((до )?н\.?\s?е\.?)/i,
+ wide: /^(до нашої ери|нашої ери|наша ера)/i
+}
+
+var parseEraPatterns = {
+ any: [/^д/i, /^н/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^[1234](-?[иі]?й?)? кв.?/i,
+ wide: /^[1234](-?[иі]?й?)? квартал/i
+}
+
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[слбктчвжг]/i,
+ abbreviated: /^(січ|лют|бер|берез|кві|трав?|чер|лип|сер|вер|жов|лис(топ)?|груд)\.?/i,
+ wide: /^(січень|січня|лютий|лютого|березень|березня|квітень|квітня|травень|травня|липень|липня|серпень|серпня|вересень|вересня|жовтень|жовтня|листопада?|грудень|грудня)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^с/i,
+ /^л/i,
+ /^б/i,
+ /^к/i,
+ /^т/i,
+ /^ч/i,
+ /^л/i,
+ /^с/i,
+ /^в/i,
+ /^ж/i,
+ /^л/i,
+ /^г/i
+ ],
+ any: [
+ /^сі/i,
+ /^лю/i,
+ /^б/i,
+ /^к/i,
+ /^т/i,
+ /^ч/i,
+ /^лип/i,
+ /^се/i,
+ /^в/i,
+ /^ж/i,
+ /^лис/i,
+ /^г/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[нпвсч]/i,
+ short: /^(нд|пн|вт|ср|чт|пт|сб)\.?/i,
+ abbreviated: /^(нед|пон|вів|сер|че?тв|птн?|суб)\.?/i,
+ wide: /^(неділ[яі]|понеділ[ок][ка]|вівтор[ок][ка]|серед[аи]|четвер(га)?|п\W*?ятниц[яі]|субот[аи])/i
+}
+
+var parseDayPatterns = {
+ narrow: [/^н/i, /^п/i, /^в/i, /^с/i, /^ч/i, /^п/i, /^с/i],
+ any: [/^н/i, /^п[он]/i, /^в/i, /^с[ер]/i, /^ч/i, /^п\W*?[ят]/i, /^с[уб]/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^([дп]п|півн\.?|пол\.?|ранок|ранку|день|дня|веч\.?|ніч|ночі)/i,
+ abbreviated: /^([дп]п|півн\.?|пол\.?|ранок|ранку|день|дня|веч\.?|ніч|ночі)/i,
+ wide: /^([дп]п|північ|полудень|ранок|ранку|день|дня|вечір|вечора|ніч|ночі)/i
+}
+
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^дп/i,
+ pm: /^пп/i,
+ midnight: /^півн/i,
+ noon: /^пол/i,
+ morning: /^р/i,
+ afternoon: /^д[ен]/i,
+ evening: /^в/i,
+ night: /^н/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/uk/index.d.ts b/date-fns/src/locale/uk/index.d.ts
new file mode 100644
index 0000000..972da88
--- /dev/null
+++ b/date-fns/src/locale/uk/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { uk } from 'date-fns/locale'
+export default uk
diff --git a/date-fns/src/locale/uk/index.js b/date-fns/src/locale/uk/index.js
new file mode 100644
index 0000000..b6274fa
--- /dev/null
+++ b/date-fns/src/locale/uk/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Ukrainian locale.
+ * @language Ukrainian
+ * @iso-639-2 ukr
+ * @author Andrii Korzh [@korzhyk]{@link https://github.com/korzhyk}
+ * @author Andriy Shcherbyak [@shcherbyakdev]{@link https://github.com/shcherbyakdev}
+ */
+var locale = {
+ code: 'uk',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/uk/index.js.flow b/date-fns/src/locale/uk/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/uk/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/uk/snapshot.md b/date-fns/src/locale/uk/snapshot.md
new file mode 100644
index 0000000..d88d4f9
--- /dev/null
+++ b/date-fns/src/locale/uk/snapshot.md
@@ -0,0 +1,304 @@
+# Ukrainian (uk) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987-й | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-й | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987-й | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5-й | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1-й | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 1-й кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й кв. | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-й квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й квартал | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1-й | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 1-й кв. | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й кв. | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-й квартал | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2-й квартал | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2-й | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-й | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | лют. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | лип. | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | лютого | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | липня | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | Л | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Л | 2019-02-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2-й | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7-й | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | лют. | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | лип. | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | лютий | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | липень | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | Л | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Л | 2019-02-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1-й | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-й | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1-й | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48-й | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11-е | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28-е | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42-й | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365-й | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | понеділок | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | п’ятниця | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1-й | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-й | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | понеділок | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | п’ятниця | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1-й | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-й | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | понеділок | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | п’ятниця | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1-й | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5-й | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | пон | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | птн | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | понеділок | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | п’ятниця | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | П | 2019-02-11T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | пн | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | пт | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | пп | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | дп | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | ПП | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ДП | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ранку | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночі | 2019-02-11T00:00:00.000Z |
+| | BB | 2019-02-11T11:13:14.015Z | ранку | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночі | 2019-02-11T00:00:00.000Z |
+| | BBB | 2019-02-11T11:13:14.015Z | ранку | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночі | 2019-02-11T00:00:00.000Z |
+| | BBBB | 2019-02-11T11:13:14.015Z | ранку | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночі | 2019-02-11T00:00:00.000Z |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ранку | 2019-02-11T04:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | дня | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | веч. | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | ночі | 2019-02-11T00:00:00.000Z |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11-а | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-а | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11-а | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-а | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11-а | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11-а | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11-а | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23-а | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1-а | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55-а | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1-а | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55-а | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11.02.1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 лют. 1987 р. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 трав. 1453 р. | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11-е лютого 1987 р. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29-е травня 1453 р. | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | середа, 11-е лютого 1987 р. | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | неділя, 29-е травня 1453 р. | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11.02.1987, 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29.05.1453, 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 лют. 1987 р., 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 трав. 1453 р., 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11-е лютого 1987 р. о 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29-е травня 1453 р. о 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | середа, 11-е лютого 1987 р. о 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | неділя, 29-е травня 1453 р. о 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------- | ---------------------- | --------------------- |
+| 2006-01-01T00:00:00.000Z | близько 6 років | близько 6 років | приблизно за 6 років |
+| 2005-01-01T00:00:00.000Z | близько 5 років | близько 5 років | приблизно за 5 років |
+| 2004-01-01T00:00:00.000Z | близько 4 років | близько 4 років | приблизно за 4 роки |
+| 2003-01-01T00:00:00.000Z | близько 3 років | близько 3 років | приблизно за 3 роки |
+| 2002-01-01T00:00:00.000Z | близько 2 років | близько 2 років | приблизно за 2 роки |
+| 2001-06-01T00:00:00.000Z | більше 1 року | більше 1 року | більше, ніж за 1 рік |
+| 2001-02-01T00:00:00.000Z | близько 1 року | близько 1 року | приблизно за 1 рік |
+| 2001-01-01T00:00:00.000Z | близько 1 року | близько 1 року | приблизно за 1 рік |
+| 2000-06-01T00:00:00.000Z | 5 місяців | 5 місяців | за 5 місяців |
+| 2000-03-01T00:00:00.000Z | 2 місяця | 2 місяця | за 2 місяця |
+| 2000-02-01T00:00:00.000Z | близько 1 місяця | близько 1 місяця | приблизно за 1 місяць |
+| 2000-01-15T00:00:00.000Z | 14 днів | 14 днів | за 14 днів |
+| 2000-01-02T00:00:00.000Z | 1 день | 1 день | за 1 день |
+| 2000-01-01T06:00:00.000Z | близько 6 годин | близько 6 годин | приблизно за 6 годин |
+| 2000-01-01T01:00:00.000Z | близько 1 години | близько 1 години | приблизно за 1 годину |
+| 2000-01-01T00:45:00.000Z | близько 1 години | близько 1 години | приблизно за 1 годину |
+| 2000-01-01T00:30:00.000Z | 30 хвилин | 30 хвилин | за 30 хвилин |
+| 2000-01-01T00:15:00.000Z | 15 хвилин | 15 хвилин | за 15 хвилин |
+| 2000-01-01T00:01:00.000Z | 1 хвилина | 1 хвилина | за 1 хвилину |
+| 2000-01-01T00:00:25.000Z | менше хвилини | півхвилини | менше, ніж за хвилину |
+| 2000-01-01T00:00:15.000Z | менше хвилини | менше 20 секунд | менше, ніж за хвилину |
+| 2000-01-01T00:00:05.000Z | менше хвилини | менше 10 секунд | менше, ніж за хвилину |
+| 2000-01-01T00:00:00.000Z | менше хвилини | менше 5 секунд | менше хвилини тому |
+| 1999-12-31T23:59:55.000Z | менше хвилини | менше 10 секунд | менше хвилини тому |
+| 1999-12-31T23:59:45.000Z | менше хвилини | менше 20 секунд | менше хвилини тому |
+| 1999-12-31T23:59:35.000Z | менше хвилини | півхвилини | менше хвилини тому |
+| 1999-12-31T23:59:00.000Z | 1 хвилина | 1 хвилина | 1 хвилину тому |
+| 1999-12-31T23:45:00.000Z | 15 хвилин | 15 хвилин | 15 хвилин тому |
+| 1999-12-31T23:30:00.000Z | 30 хвилин | 30 хвилин | 30 хвилин тому |
+| 1999-12-31T23:15:00.000Z | близько 1 години | близько 1 години | близько 1 години тому |
+| 1999-12-31T23:00:00.000Z | близько 1 години | близько 1 години | близько 1 години тому |
+| 1999-12-31T18:00:00.000Z | близько 6 годин | близько 6 годин | близько 6 годин тому |
+| 1999-12-30T00:00:00.000Z | 2 дня | 2 дня | 2 дня тому |
+| 1999-12-15T00:00:00.000Z | 17 днів | 17 днів | 17 днів тому |
+| 1999-12-01T00:00:00.000Z | близько 1 місяця | близько 1 місяця | близько 1 місяця тому |
+| 1999-11-01T00:00:00.000Z | 2 місяця | 2 місяця | 2 місяця тому |
+| 1999-06-01T00:00:00.000Z | 7 місяців | 7 місяців | 7 місяців тому |
+| 1999-01-01T00:00:00.000Z | близько 1 року | близько 1 року | близько 1 року тому |
+| 1998-12-01T00:00:00.000Z | близько 1 року | близько 1 року | близько 1 року тому |
+| 1998-06-01T00:00:00.000Z | більше 1 року | більше 1 року | більше 1 року тому |
+| 1998-01-01T00:00:00.000Z | близько 2 років | близько 2 років | близько 2 років тому |
+| 1997-01-01T00:00:00.000Z | близько 3 років | близько 3 років | близько 3 років тому |
+| 1996-01-01T00:00:00.000Z | близько 4 років | близько 4 років | близько 4 років тому |
+| 1995-01-01T00:00:00.000Z | близько 5 років | близько 5 років | близько 5 років тому |
+| 1994-01-01T00:00:00.000Z | близько 6 років | близько 6 років | близько 6 років тому |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 років | за 6 років | 52608 годин |
+| 2005-01-01T00:00:00.000Z | 5 років | за 5 років | 43848 годин |
+| 2004-01-01T00:00:00.000Z | 4 роки | за 4 роки | 35064 години |
+| 2003-01-01T00:00:00.000Z | 3 роки | за 3 роки | 26304 години |
+| 2002-01-01T00:00:00.000Z | 2 роки | за 2 роки | 17544 години |
+| 2001-06-01T00:00:00.000Z | 1 рік | за 1 рік | 12408 годин |
+| 2001-02-01T00:00:00.000Z | 1 рік | за 1 рік | 9528 годин |
+| 2001-01-01T00:00:00.000Z | 1 рік | за 1 рік | 8784 години |
+| 2000-06-01T00:00:00.000Z | 5 місяців | за 5 місяців | 3648 годин |
+| 2000-03-01T00:00:00.000Z | 2 місяця | за 2 місяця | 1440 годин |
+| 2000-02-01T00:00:00.000Z | 1 місяць | за 1 місяць | 744 години |
+| 2000-01-15T00:00:00.000Z | 14 днів | за 14 днів | 336 годин |
+| 2000-01-02T00:00:00.000Z | 1 день | за 1 день | 24 години |
+| 2000-01-01T06:00:00.000Z | 6 годин | за 6 годин | 6 годин |
+| 2000-01-01T01:00:00.000Z | 1 годину | за 1 годину | 1 годину |
+| 2000-01-01T00:45:00.000Z | 45 хвилин | за 45 хвилин | 1 годину |
+| 2000-01-01T00:30:00.000Z | 30 хвилин | за 30 хвилин | 1 годину |
+| 2000-01-01T00:15:00.000Z | 15 хвилин | за 15 хвилин | 0 годин |
+| 2000-01-01T00:01:00.000Z | 1 хвилина | за 1 хвилину | 0 годин |
+| 2000-01-01T00:00:25.000Z | 25 секунд | за 25 секунд | 0 годин |
+| 2000-01-01T00:00:15.000Z | 15 секунд | за 15 секунд | 0 годин |
+| 2000-01-01T00:00:05.000Z | 5 секунд | за 5 секунд | 0 годин |
+| 2000-01-01T00:00:00.000Z | 0 секунд | 0 секунд тому | 0 годин |
+| 1999-12-31T23:59:55.000Z | 5 секунд | 5 секунд тому | 0 годин |
+| 1999-12-31T23:59:45.000Z | 15 секунд | 15 секунд тому | 0 годин |
+| 1999-12-31T23:59:35.000Z | 25 секунд | 25 секунд тому | 0 годин |
+| 1999-12-31T23:59:00.000Z | 1 хвилина | 1 хвилину тому | 0 годин |
+| 1999-12-31T23:45:00.000Z | 15 хвилин | 15 хвилин тому | 0 годин |
+| 1999-12-31T23:30:00.000Z | 30 хвилин | 30 хвилин тому | 1 годину |
+| 1999-12-31T23:15:00.000Z | 45 хвилин | 45 хвилин тому | 1 годину |
+| 1999-12-31T23:00:00.000Z | 1 годину | 1 годину тому | 1 годину |
+| 1999-12-31T18:00:00.000Z | 6 годин | 6 годин тому | 6 годин |
+| 1999-12-30T00:00:00.000Z | 2 дня | 2 дня тому | 48 годин |
+| 1999-12-15T00:00:00.000Z | 17 днів | 17 днів тому | 408 годин |
+| 1999-12-01T00:00:00.000Z | 1 місяць | 1 місяць тому | 744 години |
+| 1999-11-01T00:00:00.000Z | 2 місяця | 2 місяця тому | 1464 години |
+| 1999-06-01T00:00:00.000Z | 7 місяців | 7 місяців тому | 5136 годин |
+| 1999-01-01T00:00:00.000Z | 1 рік | 1 рік тому | 8760 годин |
+| 1998-12-01T00:00:00.000Z | 1 рік | 1 рік тому | 9504 години |
+| 1998-06-01T00:00:00.000Z | 2 роки | 2 роки тому | 13896 годин |
+| 1998-01-01T00:00:00.000Z | 2 роки | 2 роки тому | 17520 годин |
+| 1997-01-01T00:00:00.000Z | 3 роки | 3 роки тому | 26280 годин |
+| 1996-01-01T00:00:00.000Z | 4 роки | 4 роки тому | 35064 години |
+| 1995-01-01T00:00:00.000Z | 5 років | 5 років тому | 43824 години |
+| 1994-01-01T00:00:00.000Z | 6 років | 6 років тому | 52584 години |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------ |
+| 2000-01-10T00:00:00.000Z | 10.01.2000 |
+| 2000-01-05T00:00:00.000Z | у наступну середу о 0:00 |
+| 2000-01-02T00:00:00.000Z | завтра о 0:00 |
+| 2000-01-01T00:00:00.000Z | сьогодні о 0:00 |
+| 1999-12-31T00:00:00.000Z | вчора о 0:00 |
+| 1999-12-27T00:00:00.000Z | у понеділок о 0:00 |
+| 1999-12-21T00:00:00.000Z | 21.12.1999 |
diff --git a/date-fns/src/locale/uz/_lib/formatDistance/index.js b/date-fns/src/locale/uz/_lib/formatDistance/index.js
new file mode 100644
index 0000000..9e1a259
--- /dev/null
+++ b/date-fns/src/locale/uz/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'sekunddan kam',
+ other: '{{count}} sekunddan kam'
+ },
+
+ xSeconds: {
+ one: '1 sekund',
+ other: '{{count}} sekund'
+ },
+
+ halfAMinute: 'yarim minut',
+
+ lessThanXMinutes: {
+ one: 'bir minutdan kam',
+ other: '{{count}} minutdan kam'
+ },
+
+ xMinutes: {
+ one: '1 minut',
+ other: '{{count}} minut'
+ },
+
+ aboutXHours: {
+ one: 'tahminan 1 soat',
+ other: 'tahminan {{count}} soat'
+ },
+
+ xHours: {
+ one: '1 soat',
+ other: '{{count}} soat'
+ },
+
+ xDays: {
+ one: '1 kun',
+ other: '{{count}} kun'
+ },
+
+ aboutXWeeks: {
+ one: 'tahminan 1 hafta',
+ other: 'tahminan {{count}} hafta'
+ },
+
+ xWeeks: {
+ one: '1 hafta',
+ other: '{{count}} hafta'
+ },
+
+ aboutXMonths: {
+ one: 'tahminan 1 oy',
+ other: 'tahminan {{count}} oy'
+ },
+
+ xMonths: {
+ one: '1 oy',
+ other: '{{count}} oy'
+ },
+
+ aboutXYears: {
+ one: 'tahminan 1 yil',
+ other: 'tahminan {{count}} yil'
+ },
+
+ xYears: {
+ one: '1 yil',
+ other: '{{count}} yil'
+ },
+
+ overXYears: {
+ one: "1 yildan ko'p",
+ other: "{{count}} yildan ko'p"
+ },
+
+ almostXYears: {
+ one: 'deyarli 1 yil',
+ other: 'deyarli {{count}} yil'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + ' dan keyin'
+ } else {
+ return result + ' oldin'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/uz/_lib/formatLong/index.js b/date-fns/src/locale/uz/_lib/formatLong/index.js
new file mode 100644
index 0000000..e2e59a5
--- /dev/null
+++ b/date-fns/src/locale/uz/_lib/formatLong/index.js
@@ -0,0 +1,38 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: 'EEEE, do MMMM, y',
+ long: 'do MMMM, y',
+ medium: 'd MMM, y',
+ short: 'dd/MM/yyyy'
+}
+
+var timeFormats = {
+ full: 'h:mm:ss zzzz',
+ long: 'h:mm:ss z',
+ medium: 'h:mm:ss',
+ short: 'h:mm'
+}
+
+var dateTimeFormats = {
+ any: '{{date}}, {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'any'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/uz/_lib/formatRelative/index.js b/date-fns/src/locale/uz/_lib/formatRelative/index.js
new file mode 100644
index 0000000..92838cd
--- /dev/null
+++ b/date-fns/src/locale/uz/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'oldingi' eeee p 'da'",
+ yesterday: "'kecha' p 'da'",
+ today: "'bugun' p 'da'",
+ tomorrow: "'ertaga' p 'da'",
+ nextWeek: "eeee p 'da'",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/uz/_lib/localize/index.js b/date-fns/src/locale/uz/_lib/localize/index.js
new file mode 100644
index 0000000..6530e3d
--- /dev/null
+++ b/date-fns/src/locale/uz/_lib/localize/index.js
@@ -0,0 +1,181 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['M.A', 'M.'],
+ abbreviated: ['M.A', 'M.'],
+ wide: ['Miloddan Avvalgi', 'Milodiy']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['CH.1', 'CH.2', 'CH.3', 'CH.4'],
+ wide: ['1-chi chorak', '2-chi chorak', '3-chi chorak', '4-chi chorak']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['Y', 'F', 'M', 'A', 'M', 'I', 'I', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: [
+ 'Yan',
+ 'Fev',
+ 'Mar',
+ 'Apr',
+ 'May',
+ 'Iyun',
+ 'Iyul',
+ 'Avg',
+ 'Sen',
+ 'Okt',
+ 'Noy',
+ 'Dek'
+ ],
+ wide: [
+ 'Yanvar',
+ 'Fevral',
+ 'Mart',
+ 'Aprel',
+ 'May',
+ 'Iyun',
+ 'Iyul',
+ 'Avgust',
+ 'Sentabr',
+ 'Oktabr',
+ 'Noyabr',
+ 'Dekabr'
+ ]
+}
+
+var dayValues = {
+ narrow: ['Y', 'D', 'S', 'CH', 'P', 'J', 'SH'],
+ short: ['Ya', 'Du', 'Se', 'Cho', 'Pa', 'Ju', 'Sha'],
+ abbreviated: ['Yak', 'Dush', 'Sesh', 'Chor', 'Pay', 'Jum', 'Shan'],
+ wide: [
+ 'Yakshanba',
+ 'Dushanba',
+ 'Seshanba',
+ 'Chorshanba',
+ 'Payshanba',
+ 'Juma',
+ 'Shanba'
+ ]
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'y.t',
+ noon: 'p.',
+ morning: 'ertalab',
+ afternoon: 'tushdan keyin',
+ evening: 'kechqurun',
+ night: 'tun'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'yarim tun',
+ noon: 'peshin',
+ morning: 'ertalab',
+ afternoon: 'tushdan keyin',
+ evening: 'kechqurun',
+ night: 'tun'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'yarim tun',
+ noon: 'peshin',
+ morning: 'ertalab',
+ afternoon: 'tushdan keyin',
+ evening: 'kechqurun',
+ night: 'tun'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'y.t',
+ noon: 'p.',
+ morning: 'ertalab',
+ afternoon: 'tushdan keyin',
+ evening: 'kechqurun',
+ night: 'tun'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'yarim tun',
+ noon: 'peshin',
+ morning: 'ertalab',
+ afternoon: 'tushdan keyin',
+ evening: 'kechqurun',
+ night: 'tun'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'yarim tun',
+ noon: 'peshin',
+ morning: 'ertalab',
+ afternoon: 'tushdan keyin',
+ evening: 'kechqurun',
+ night: 'tun'
+ }
+}
+
+function ordinalNumber(dirtyNumber, _dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ return number
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/uz/_lib/match/index.js b/date-fns/src/locale/uz/_lib/match/index.js
new file mode 100644
index 0000000..8190bba
--- /dev/null
+++ b/date-fns/src/locale/uz/_lib/match/index.js
@@ -0,0 +1,137 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)(chi)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(m\.a|m\.)/i,
+ abbreviated: /^(m\.a\.?\s?m\.?)/i,
+ wide: /^(miloddan avval|miloddan keyin)/i
+}
+var parseEraPatterns = {
+ any: [/^b/i, /^(a|c)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](chi)? chorak/i
+}
+var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^[yfmasond]/i,
+ abbreviated: /^(yan|fev|mar|apr|may|iyun|iyul|avg|sen|okt|noy|dek)/i,
+ wide: /^(yanvar|fevral|mart|aprel|may|iyun|iyul|avgust|sentabr|oktabr|noyabr|dekabr)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^y/i,
+ /^f/i,
+ /^m/i,
+ /^a/i,
+ /^m/i,
+ /^i/i,
+ /^i/i,
+ /^a/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ],
+ any: [
+ /^ya/i,
+ /^f/i,
+ /^mar/i,
+ /^ap/i,
+ /^may/i,
+ /^iyun/i,
+ /^iyul/i,
+ /^av/i,
+ /^s/i,
+ /^o/i,
+ /^n/i,
+ /^d/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[ydschj]/i,
+ short: /^(ya|du|se|cho|pa|ju|sha)/i,
+ abbreviated: /^(yak|dush|sesh|chor|pay|jum|shan)/i,
+ wide: /^(yakshanba|dushanba|seshanba|chorshanba|payshanba|juma|shanba)/i
+}
+var parseDayPatterns = {
+ narrow: [/^y/i, /^d/i, /^s/i, /^ch/i, /^p/i, /^j/i, /^sh/i],
+ any: [/^ya/i, /^d/i, /^se/i, /^ch/i, /^p/i, /^j/i, /^sh/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|y\.t|p| (ertalab|tushdan keyin|kechqurun|tun))/i,
+ any: /^([ap]\.?\s?m\.?|yarim tun|peshin| (ertalab|tushdan keyin|kechqurun|tun))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^y\.t/i,
+ noon: /^pe/i,
+ morning: /ertalab/i,
+ afternoon: /tushdan keyin/i,
+ evening: /kechqurun/i,
+ night: /tun/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/uz/index.d.ts b/date-fns/src/locale/uz/index.d.ts
new file mode 100644
index 0000000..e10b1f6
--- /dev/null
+++ b/date-fns/src/locale/uz/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { uz } from 'date-fns/locale'
+export default uz
diff --git a/date-fns/src/locale/uz/index.js b/date-fns/src/locale/uz/index.js
new file mode 100644
index 0000000..42c0fef
--- /dev/null
+++ b/date-fns/src/locale/uz/index.js
@@ -0,0 +1,28 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Uzbek locale.
+ * @language Uzbek
+ * @iso-639-2 uzb
+ * @author Mukhammadali [@mukhammadali]{@link https://github.com/Mukhammadali}
+ */
+var locale = {
+ code: 'uz',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/uz/index.js.flow b/date-fns/src/locale/uz/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/uz/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/uz/snapshot.md b/date-fns/src/locale/uz/snapshot.md
new file mode 100644
index 0000000..384dc12
--- /dev/null
+++ b/date-fns/src/locale/uz/snapshot.md
@@ -0,0 +1,304 @@
+# Uzbek (uz) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ----------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | CH.1 | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | CH.2 | Invalid Date |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 1-chi chorak | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2-chi chorak | Invalid Date |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | CH.1 | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | CH.2 | Invalid Date |
+| | qqqq | 2019-01-01T12:13:14.015Z | 1-chi chorak | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | 2-chi chorak | Invalid Date |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | Fev | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Iyul | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | Fevral | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Iyul | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | I | Invalid Date |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Fev | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Iyul | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Fevral | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Iyul | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | I | Invalid Date |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Dush | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | Dush | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | Dush | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | Dushanba | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Juma | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | D | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Du | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ju | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | Dush | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | Dushanba | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Juma | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | D | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Du | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ju | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | Dush | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | Dushanba | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Juma | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | D | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Du | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ju | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | Dush | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Jum | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | Dushanba | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Juma | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | D | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | J | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Du | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Ju | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | ertalab | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | tushdan keyin | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | kechqurun | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | tun | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | ertalab | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | tushdan keyin | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | kechqurun | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | tun | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | ertalab | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | tushdan keyin | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | kechqurun | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | tun | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | ertalab | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | tushdan keyin | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | kechqurun | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | tun | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | ertalab | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | tushdan keyin | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | kechqurun | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | tun | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 Fev, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 11 Fevral, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May, 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Chorshanba, 11 Fevral, 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Yakshanba, 29 May, 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 11:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987, 12:13 | 1987-02-11T00:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453, 11:59 | 1453-05-29T11:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 Fev, 1987, 12:13:14 | 1987-02-11T00:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 May, 1453, 11:59:59 | 1453-05-29T11:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 11 Fevral, 1987, 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 29 May, 1453, 11:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Chorshanba, 11 Fevral, 1987, 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Yakshanba, 29 May, 1453, 11:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ---------------- | ---------------------- | -------------------------- |
+| 2006-01-01T00:00:00.000Z | tahminan 6 yil | tahminan 6 yil | tahminan 6 yil dan keyin |
+| 2005-01-01T00:00:00.000Z | tahminan 5 yil | tahminan 5 yil | tahminan 5 yil dan keyin |
+| 2004-01-01T00:00:00.000Z | tahminan 4 yil | tahminan 4 yil | tahminan 4 yil dan keyin |
+| 2003-01-01T00:00:00.000Z | tahminan 3 yil | tahminan 3 yil | tahminan 3 yil dan keyin |
+| 2002-01-01T00:00:00.000Z | tahminan 2 yil | tahminan 2 yil | tahminan 2 yil dan keyin |
+| 2001-06-01T00:00:00.000Z | 1 yildan ko'p | 1 yildan ko'p | 1 yildan ko'p dan keyin |
+| 2001-02-01T00:00:00.000Z | tahminan 1 yil | tahminan 1 yil | tahminan 1 yil dan keyin |
+| 2001-01-01T00:00:00.000Z | tahminan 1 yil | tahminan 1 yil | tahminan 1 yil dan keyin |
+| 2000-06-01T00:00:00.000Z | 5 oy | 5 oy | 5 oy dan keyin |
+| 2000-03-01T00:00:00.000Z | 2 oy | 2 oy | 2 oy dan keyin |
+| 2000-02-01T00:00:00.000Z | tahminan 1 oy | tahminan 1 oy | tahminan 1 oy dan keyin |
+| 2000-01-15T00:00:00.000Z | 14 kun | 14 kun | 14 kun dan keyin |
+| 2000-01-02T00:00:00.000Z | 1 kun | 1 kun | 1 kun dan keyin |
+| 2000-01-01T06:00:00.000Z | tahminan 6 soat | tahminan 6 soat | tahminan 6 soat dan keyin |
+| 2000-01-01T01:00:00.000Z | tahminan 1 soat | tahminan 1 soat | tahminan 1 soat dan keyin |
+| 2000-01-01T00:45:00.000Z | tahminan 1 soat | tahminan 1 soat | tahminan 1 soat dan keyin |
+| 2000-01-01T00:30:00.000Z | 30 minut | 30 minut | 30 minut dan keyin |
+| 2000-01-01T00:15:00.000Z | 15 minut | 15 minut | 15 minut dan keyin |
+| 2000-01-01T00:01:00.000Z | 1 minut | 1 minut | 1 minut dan keyin |
+| 2000-01-01T00:00:25.000Z | bir minutdan kam | yarim minut | bir minutdan kam dan keyin |
+| 2000-01-01T00:00:15.000Z | bir minutdan kam | 20 sekunddan kam | bir minutdan kam dan keyin |
+| 2000-01-01T00:00:05.000Z | bir minutdan kam | 10 sekunddan kam | bir minutdan kam dan keyin |
+| 2000-01-01T00:00:00.000Z | bir minutdan kam | 5 sekunddan kam | bir minutdan kam oldin |
+| 1999-12-31T23:59:55.000Z | bir minutdan kam | 10 sekunddan kam | bir minutdan kam oldin |
+| 1999-12-31T23:59:45.000Z | bir minutdan kam | 20 sekunddan kam | bir minutdan kam oldin |
+| 1999-12-31T23:59:35.000Z | bir minutdan kam | yarim minut | bir minutdan kam oldin |
+| 1999-12-31T23:59:00.000Z | 1 minut | 1 minut | 1 minut oldin |
+| 1999-12-31T23:45:00.000Z | 15 minut | 15 minut | 15 minut oldin |
+| 1999-12-31T23:30:00.000Z | 30 minut | 30 minut | 30 minut oldin |
+| 1999-12-31T23:15:00.000Z | tahminan 1 soat | tahminan 1 soat | tahminan 1 soat oldin |
+| 1999-12-31T23:00:00.000Z | tahminan 1 soat | tahminan 1 soat | tahminan 1 soat oldin |
+| 1999-12-31T18:00:00.000Z | tahminan 6 soat | tahminan 6 soat | tahminan 6 soat oldin |
+| 1999-12-30T00:00:00.000Z | 2 kun | 2 kun | 2 kun oldin |
+| 1999-12-15T00:00:00.000Z | 17 kun | 17 kun | 17 kun oldin |
+| 1999-12-01T00:00:00.000Z | tahminan 1 oy | tahminan 1 oy | tahminan 1 oy oldin |
+| 1999-11-01T00:00:00.000Z | 2 oy | 2 oy | 2 oy oldin |
+| 1999-06-01T00:00:00.000Z | 7 oy | 7 oy | 7 oy oldin |
+| 1999-01-01T00:00:00.000Z | tahminan 1 yil | tahminan 1 yil | tahminan 1 yil oldin |
+| 1998-12-01T00:00:00.000Z | tahminan 1 yil | tahminan 1 yil | tahminan 1 yil oldin |
+| 1998-06-01T00:00:00.000Z | 1 yildan ko'p | 1 yildan ko'p | 1 yildan ko'p oldin |
+| 1998-01-01T00:00:00.000Z | tahminan 2 yil | tahminan 2 yil | tahminan 2 yil oldin |
+| 1997-01-01T00:00:00.000Z | tahminan 3 yil | tahminan 3 yil | tahminan 3 yil oldin |
+| 1996-01-01T00:00:00.000Z | tahminan 4 yil | tahminan 4 yil | tahminan 4 yil oldin |
+| 1995-01-01T00:00:00.000Z | tahminan 5 yil | tahminan 5 yil | tahminan 5 yil oldin |
+| 1994-01-01T00:00:00.000Z | tahminan 6 yil | tahminan 6 yil | tahminan 6 yil oldin |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | --------- | ------------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 yil | 6 yil dan keyin | 52608 soat |
+| 2005-01-01T00:00:00.000Z | 5 yil | 5 yil dan keyin | 43848 soat |
+| 2004-01-01T00:00:00.000Z | 4 yil | 4 yil dan keyin | 35064 soat |
+| 2003-01-01T00:00:00.000Z | 3 yil | 3 yil dan keyin | 26304 soat |
+| 2002-01-01T00:00:00.000Z | 2 yil | 2 yil dan keyin | 17544 soat |
+| 2001-06-01T00:00:00.000Z | 1 yil | 1 yil dan keyin | 12408 soat |
+| 2001-02-01T00:00:00.000Z | 1 yil | 1 yil dan keyin | 9528 soat |
+| 2001-01-01T00:00:00.000Z | 1 yil | 1 yil dan keyin | 8784 soat |
+| 2000-06-01T00:00:00.000Z | 5 oy | 5 oy dan keyin | 3648 soat |
+| 2000-03-01T00:00:00.000Z | 2 oy | 2 oy dan keyin | 1440 soat |
+| 2000-02-01T00:00:00.000Z | 1 oy | 1 oy dan keyin | 744 soat |
+| 2000-01-15T00:00:00.000Z | 14 kun | 14 kun dan keyin | 336 soat |
+| 2000-01-02T00:00:00.000Z | 1 kun | 1 kun dan keyin | 24 soat |
+| 2000-01-01T06:00:00.000Z | 6 soat | 6 soat dan keyin | 6 soat |
+| 2000-01-01T01:00:00.000Z | 1 soat | 1 soat dan keyin | 1 soat |
+| 2000-01-01T00:45:00.000Z | 45 minut | 45 minut dan keyin | 1 soat |
+| 2000-01-01T00:30:00.000Z | 30 minut | 30 minut dan keyin | 1 soat |
+| 2000-01-01T00:15:00.000Z | 15 minut | 15 minut dan keyin | 0 soat |
+| 2000-01-01T00:01:00.000Z | 1 minut | 1 minut dan keyin | 0 soat |
+| 2000-01-01T00:00:25.000Z | 25 sekund | 25 sekund dan keyin | 0 soat |
+| 2000-01-01T00:00:15.000Z | 15 sekund | 15 sekund dan keyin | 0 soat |
+| 2000-01-01T00:00:05.000Z | 5 sekund | 5 sekund dan keyin | 0 soat |
+| 2000-01-01T00:00:00.000Z | 0 sekund | 0 sekund oldin | 0 soat |
+| 1999-12-31T23:59:55.000Z | 5 sekund | 5 sekund oldin | 0 soat |
+| 1999-12-31T23:59:45.000Z | 15 sekund | 15 sekund oldin | 0 soat |
+| 1999-12-31T23:59:35.000Z | 25 sekund | 25 sekund oldin | 0 soat |
+| 1999-12-31T23:59:00.000Z | 1 minut | 1 minut oldin | 0 soat |
+| 1999-12-31T23:45:00.000Z | 15 minut | 15 minut oldin | 0 soat |
+| 1999-12-31T23:30:00.000Z | 30 minut | 30 minut oldin | 1 soat |
+| 1999-12-31T23:15:00.000Z | 45 minut | 45 minut oldin | 1 soat |
+| 1999-12-31T23:00:00.000Z | 1 soat | 1 soat oldin | 1 soat |
+| 1999-12-31T18:00:00.000Z | 6 soat | 6 soat oldin | 6 soat |
+| 1999-12-30T00:00:00.000Z | 2 kun | 2 kun oldin | 48 soat |
+| 1999-12-15T00:00:00.000Z | 17 kun | 17 kun oldin | 408 soat |
+| 1999-12-01T00:00:00.000Z | 1 oy | 1 oy oldin | 744 soat |
+| 1999-11-01T00:00:00.000Z | 2 oy | 2 oy oldin | 1464 soat |
+| 1999-06-01T00:00:00.000Z | 7 oy | 7 oy oldin | 5136 soat |
+| 1999-01-01T00:00:00.000Z | 1 yil | 1 yil oldin | 8760 soat |
+| 1998-12-01T00:00:00.000Z | 1 yil | 1 yil oldin | 9504 soat |
+| 1998-06-01T00:00:00.000Z | 2 yil | 2 yil oldin | 13896 soat |
+| 1998-01-01T00:00:00.000Z | 2 yil | 2 yil oldin | 17520 soat |
+| 1997-01-01T00:00:00.000Z | 3 yil | 3 yil oldin | 26280 soat |
+| 1996-01-01T00:00:00.000Z | 4 yil | 4 yil oldin | 35064 soat |
+| 1995-01-01T00:00:00.000Z | 5 yil | 5 yil oldin | 43824 soat |
+| 1994-01-01T00:00:00.000Z | 6 yil | 6 yil oldin | 52584 soat |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | ------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | Chorshanba 12:00 da |
+| 2000-01-02T00:00:00.000Z | ertaga 12:00 da |
+| 2000-01-01T00:00:00.000Z | bugun 12:00 da |
+| 1999-12-31T00:00:00.000Z | kecha 12:00 da |
+| 1999-12-27T00:00:00.000Z | oldingi Dushanba 12:00 da |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/vi/_lib/formatDistance/index.js b/date-fns/src/locale/vi/_lib/formatDistance/index.js
new file mode 100644
index 0000000..35677f0
--- /dev/null
+++ b/date-fns/src/locale/vi/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'dưới 1 giây',
+ other: 'dưới {{count}} giây'
+ },
+
+ xSeconds: {
+ one: '1 giây',
+ other: '{{count}} giây'
+ },
+
+ halfAMinute: 'nửa phút',
+
+ lessThanXMinutes: {
+ one: 'dưới 1 phút',
+ other: 'dưới {{count}} phút'
+ },
+
+ xMinutes: {
+ one: '1 phút',
+ other: '{{count}} phút'
+ },
+
+ aboutXHours: {
+ one: 'khoảng 1 giờ',
+ other: 'khoảng {{count}} giờ'
+ },
+
+ xHours: {
+ one: '1 giờ',
+ other: '{{count}} giờ'
+ },
+
+ xDays: {
+ one: '1 ngày',
+ other: '{{count}} ngày'
+ },
+
+ aboutXWeeks: {
+ one: 'khoảng 1 tuần',
+ other: 'khoảng {{count}} tuần'
+ },
+
+ xWeeks: {
+ one: '1 tuần',
+ other: '{{count}} tuần'
+ },
+
+ aboutXMonths: {
+ one: 'khoảng 1 tháng',
+ other: 'khoảng {{count}} tháng'
+ },
+
+ xMonths: {
+ one: '1 tháng',
+ other: '{{count}} tháng'
+ },
+
+ aboutXYears: {
+ one: 'khoảng 1 năm',
+ other: 'khoảng {{count}} năm'
+ },
+
+ xYears: {
+ one: '1 năm',
+ other: '{{count}} năm'
+ },
+
+ overXYears: {
+ one: 'hơn 1 năm',
+ other: 'hơn {{count}} năm'
+ },
+
+ almostXYears: {
+ one: 'gần 1 năm',
+ other: 'gần {{count}} năm'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + ' nữa'
+ } else {
+ return result + ' trước'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/vi/_lib/formatLong/index.js b/date-fns/src/locale/vi/_lib/formatLong/index.js
new file mode 100644
index 0000000..4762cc6
--- /dev/null
+++ b/date-fns/src/locale/vi/_lib/formatLong/index.js
@@ -0,0 +1,47 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ // thứ Sáu, ngày 25 tháng 08 năm 2017
+ full: "EEEE, 'ngày' d MMMM 'năm' y",
+ // ngày 25 tháng 08 năm 2017
+ long: "'ngày' d MMMM 'năm' y",
+ // 25 thg 08 năm 2017
+ medium: "d MMM 'năm' y",
+ // 25/08/2017
+ short: 'dd/MM/y'
+}
+
+var timeFormats = {
+ full: 'HH:mm:ss zzzz',
+ long: 'HH:mm:ss z',
+ medium: 'HH:mm:ss',
+ short: 'HH:mm'
+}
+
+var dateTimeFormats = {
+ // thứ Sáu, ngày 25 tháng 08 năm 2017 23:25:59
+ full: '{{date}} {{time}}',
+ // ngày 25 tháng 08 năm 2017 23:25
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/vi/_lib/formatRelative/index.js b/date-fns/src/locale/vi/_lib/formatRelative/index.js
new file mode 100644
index 0000000..4270321
--- /dev/null
+++ b/date-fns/src/locale/vi/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "eeee 'tuần trước vào lúc' p",
+ yesterday: "'hôm qua vào lúc' p",
+ today: "'hôm nay vào lúc' p",
+ tomorrow: "'ngày mai vào lúc' p",
+ nextWeek: "eeee 'tới vào lúc' p",
+ other: 'P'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/vi/_lib/localize/index.js b/date-fns/src/locale/vi/_lib/localize/index.js
new file mode 100644
index 0000000..07dbe80
--- /dev/null
+++ b/date-fns/src/locale/vi/_lib/localize/index.js
@@ -0,0 +1,295 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+// Vietnamese locale reference: http://www.localeplanet.com/icu/vi-VN/index.html
+// Capitalization reference: http://hcmup.edu.vn/index.php?option=com_content&view=article&id=4106%3Avit-hoa-trong-vn-bn-hanh-chinh&catid=2345%3Atham-kho&Itemid=4103&lang=vi&site=134
+
+var eraValues = {
+ narrow: ['TCN', 'SCN'],
+ abbreviated: ['trước CN', 'sau CN'],
+ wide: ['trước Công Nguyên', 'sau Công Nguyên']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['Quý 1', 'Quý 2', 'Quý 3', 'Quý 4']
+}
+
+var formattingQuarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ // I notice many news outlet use this "quý II/2018"
+ wide: ['quý I', 'quý II', 'quý III', 'quý IV']
+}
+
+// Note: in English, the names of days of the week and months are capitalized.
+// If you are making a new locale based on this one, check if the same is true for the language you're working on.
+// Generally, formatted dates should look like they are in the middle of a sentence,
+// e.g. in Spanish language the weekdays and months should be in the lowercase.
+var monthValues = {
+ narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ abbreviated: [
+ 'Thg 1',
+ 'Thg 2',
+ 'Thg 3',
+ 'Thg 4',
+ 'Thg 5',
+ 'Thg 6',
+ 'Thg 7',
+ 'Thg 8',
+ 'Thg 9',
+ 'Thg 10',
+ 'Thg 11',
+ 'Thg 12'
+ ],
+ wide: [
+ 'Tháng Một',
+ 'Tháng Hai',
+ 'Tháng Ba',
+ 'Tháng Tư',
+ 'Tháng Năm',
+ 'Tháng Sáu',
+ 'Tháng Bảy',
+ 'Tháng Tám',
+ 'Tháng Chín',
+ 'Tháng Mười',
+ 'Tháng Mười Một',
+ 'Tháng Mười Hai'
+ ]
+}
+// In Vietnamese date formatting, month number less than 10 expected to have leading zero
+var formattingMonthValues = {
+ narrow: [
+ '01',
+ '02',
+ '03',
+ '04',
+ '05',
+ '06',
+ '07',
+ '08',
+ '09',
+ '10',
+ '11',
+ '12'
+ ],
+ abbreviated: [
+ 'thg 1',
+ 'thg 2',
+ 'thg 3',
+ 'thg 4',
+ 'thg 5',
+ 'thg 6',
+ 'thg 7',
+ 'thg 8',
+ 'thg 9',
+ 'thg 10',
+ 'thg 11',
+ 'thg 12'
+ ],
+ wide: [
+ 'tháng 01',
+ 'tháng 02',
+ 'tháng 03',
+ 'tháng 04',
+ 'tháng 05',
+ 'tháng 06',
+ 'tháng 07',
+ 'tháng 08',
+ 'tháng 09',
+ 'tháng 10',
+ 'tháng 11',
+ 'tháng 12'
+ ]
+}
+
+var dayValues = {
+ narrow: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+ short: ['CN', 'Th 2', 'Th 3', 'Th 4', 'Th 5', 'Th 6', 'Th 7'],
+ abbreviated: ['CN', 'Thứ 2', 'Thứ 3', 'Thứ 4', 'Thứ 5', 'Thứ 6', 'Thứ 7'],
+ wide: [
+ 'Chủ Nhật',
+ 'Thứ Hai',
+ 'Thứ Ba',
+ 'Thứ Tư',
+ 'Thứ Năm',
+ 'Thứ Sáu',
+ 'Thứ Bảy'
+ ]
+}
+
+// Vietnamese are used to AM/PM borrowing from English, hence `narrow` and
+// `abbreviated` are just like English but I'm leaving the `wide`
+// format being localized with abbreviations found in some systems (SÁng / CHiều);
+// however, personally, I don't think `Chiều` sounds appropriate for `PM`
+var dayPeriodValues = {
+ // narrow date period is extremely rare in Vietnamese
+ // I used abbreviated form for noon, morning and afternoon
+ // which are regconizable by Vietnamese, others cannot be any shorter
+ narrow: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'nửa đêm',
+ noon: 'tr',
+ morning: 'sg',
+ afternoon: 'ch',
+ evening: 'tối',
+ night: 'đêm'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'nửa đêm',
+ noon: 'trưa',
+ morning: 'sáng',
+ afternoon: 'chiều',
+ evening: 'tối',
+ night: 'đêm'
+ },
+ wide: {
+ am: 'SA',
+ pm: 'CH',
+ midnight: 'nửa đêm',
+ noon: 'trưa',
+ morning: 'sáng',
+ afternoon: 'chiều',
+ evening: 'tối',
+ night: 'đêm'
+ }
+}
+
+var formattingDayPeriodValues = {
+ narrow: {
+ am: 'am',
+ pm: 'pm',
+ midnight: 'nửa đêm',
+ noon: 'tr',
+ morning: 'sg',
+ afternoon: 'ch',
+ evening: 'tối',
+ night: 'đêm'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'nửa đêm',
+ noon: 'trưa',
+ morning: 'sáng',
+ afternoon: 'chiều',
+ evening: 'tối',
+ night: 'đêm'
+ },
+ wide: {
+ am: 'SA',
+ pm: 'CH',
+ midnight: 'nửa đêm',
+ noon: 'giữa trưa',
+ morning: 'vào buổi sáng',
+ afternoon: 'vào buổi chiều',
+ evening: 'vào buổi tối',
+ night: 'vào ban đêm'
+ }
+}
+
+// If ordinal numbers depend on context, for example,
+// if they are different for different grammatical genders,
+// use `options.unit`:
+//
+// var options = dirtyOptions || {}
+// var unit = String(options.unit)
+//
+// where `unit` can be 'month', 'quarter', 'week', 'isoWeek', 'dayOfYear',
+// 'dayOfMonth' or 'dayOfWeek'
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+ var number = parseInt(dirtyNumber, 10)
+
+ if (unit === 'quarter') {
+ // many news outlets use "quý I"...
+ switch (number) {
+ case 1:
+ return 'I'
+ case 2:
+ return 'II'
+ case 3:
+ return 'III'
+ case 4:
+ return 'IV'
+ }
+ } else if (unit === 'day') {
+ // day of week in Vietnamese has ordinal number meaning,
+ // so we should use them, else it'll sound weird
+ switch (number) {
+ case 1:
+ return 'thứ 2' // meaning 2nd day but it's the first day of the week :D
+ case 2:
+ return 'thứ 3' // meaning 3rd day
+ case 3:
+ return 'thứ 4' // meaning 4th day and so on
+ case 4:
+ return 'thứ 5'
+ case 5:
+ return 'thứ 6'
+ case 6:
+ return 'thứ 7'
+ case 7:
+ return 'chủ nhật' // meaning Sunday, there's no 8th day :D
+ }
+ } else if (unit === 'week') {
+ if (number === 1) {
+ return 'thứ nhất'
+ } else {
+ return 'thứ ' + number
+ }
+ } else if (unit === 'dayOfYear') {
+ if (number === 1) {
+ return 'đầu tiên'
+ } else {
+ return 'thứ ' + number
+ }
+ }
+
+ // there are no different forms of ordinal numbers in Vietnamese
+ return number
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingQuarterValues,
+ defaultFormattingWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingMonthValues,
+ defaultFormattingWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/vi/_lib/match/index.js b/date-fns/src/locale/vi/_lib/match/index.js
new file mode 100644
index 0000000..177c278
--- /dev/null
+++ b/date-fns/src/locale/vi/_lib/match/index.js
@@ -0,0 +1,158 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(\d+)/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(tcn|scn)/i,
+ abbreviated: /^(trước CN|sau CN)/i,
+ wide: /^(trước Công Nguyên|sau Công Nguyên)/i
+}
+var parseEraPatterns = {
+ any: [/^t/i, /^s/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^([1234]|i{1,3}v?)/i,
+ abbreviated: /^q([1234]|i{1,3}v?)/i,
+ wide: /^quý ([1234]|i{1,3}v?)/i
+}
+var parseQuarterPatterns = {
+ any: [/(1|i)$/i, /(2|ii)$/i, /(3|iii)$/i, /(4|iv)$/i]
+}
+
+var matchMonthPatterns = {
+ // month number may contain leading 0, 'thg' prefix may have space, underscore or empty before number
+ // note the order of '1' since it is a sub-string of '10', so must be lower priority
+ narrow: /^(0?[2-9]|10|11|12|0?1)/i,
+ // note the order of 'thg 1' since it is sub-string of 'thg 10', so must be lower priority
+ abbreviated: /^thg[ _]?(0?[1-9](?!\d)|10|11|12)/i,
+ // note the order of 'Mười' since it is sub-string of Mười Một, so must be lower priority
+ wide: /^tháng ?(Một|Hai|Ba|Tư|Năm|Sáu|Bảy|Tám|Chín|Mười|Mười ?Một|Mười ?Hai|0?[1-9](?!\d)|10|11|12)/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /0?1$/i,
+ /0?2/i,
+ /3/,
+ /4/,
+ /5/,
+ /6/,
+ /7/,
+ /8/,
+ /9/,
+ /10/,
+ /11/,
+ /12/
+ ],
+ abbreviated: [
+ /^thg[ _]?0?1(?!\d)/i,
+ /^thg[ _]?0?2/i,
+ /^thg[ _]?0?3/i,
+ /^thg[ _]?0?4/i,
+ /^thg[ _]?0?5/i,
+ /^thg[ _]?0?6/i,
+ /^thg[ _]?0?7/i,
+ /^thg[ _]?0?8/i,
+ /^thg[ _]?0?9/i,
+ /^thg[ _]?10/i,
+ /^thg[ _]?11/i,
+ /^thg[ _]?12/i
+ ],
+ wide: [
+ /^tháng ?(Một|0?1(?!\d))/i,
+ /^tháng ?(Hai|0?2)/i,
+ /^tháng ?(Ba|0?3)/i,
+ /^tháng ?(Tư|0?4)/i,
+ /^tháng ?(Năm|0?5)/i,
+ /^tháng ?(Sáu|0?6)/i,
+ /^tháng ?(Bảy|0?7)/i,
+ /^tháng ?(Tám|0?8)/i,
+ /^tháng ?(Chín|0?9)/i,
+ /^tháng ?(Mười|10)/i,
+ /^tháng ?(Mười ?Một|11)/i,
+ /^tháng ?(Mười ?Hai|12)/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^(CN|T2|T3|T4|T5|T6|T7)/i,
+ short: /^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i,
+ abbreviated: /^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i,
+ wide: /^(Chủ ?Nhật|Chúa ?Nhật|thứ ?Hai|thứ ?Ba|thứ ?Tư|thứ ?Năm|thứ ?Sáu|thứ ?Bảy)/i
+}
+var parseDayPatterns = {
+ narrow: [/CN/i, /2/i, /3/i, /4/i, /5/i, /6/i, /7/i],
+ short: [/CN/i, /2/i, /3/i, /4/i, /5/i, /6/i, /7/i],
+ abbreviated: [/CN/i, /2/i, /3/i, /4/i, /5/i, /6/i, /7/i],
+ wide: [/(Chủ|Chúa) ?Nhật/i, /Hai/i, /Ba/i, /Tư/i, /Năm/i, /Sáu/i, /Bảy/i]
+}
+
+var matchDayPeriodPatterns = {
+ narrow: /^(a|p|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i,
+ abbreviated: /^(am|pm|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i,
+ wide: /^(ch[^i]*|sa|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^(a|sa)/i,
+ pm: /^(p|ch[^i]*)/i,
+ midnight: /nửa đêm/i,
+ noon: /trưa/i,
+ morning: /sáng/i,
+ afternoon: /chiều/i,
+ evening: /tối/i,
+ night: /^đêm/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/vi/index.d.ts b/date-fns/src/locale/vi/index.d.ts
new file mode 100644
index 0000000..17be5ca
--- /dev/null
+++ b/date-fns/src/locale/vi/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { vi } from 'date-fns/locale'
+export default vi
diff --git a/date-fns/src/locale/vi/index.js b/date-fns/src/locale/vi/index.js
new file mode 100644
index 0000000..a3487e7
--- /dev/null
+++ b/date-fns/src/locale/vi/index.js
@@ -0,0 +1,29 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Vietnamese locale (Vietnam).
+ * @language Vietnamese
+ * @iso-639-2 vie
+ * @author Thanh Tran [@trongthanh]{@link https://github.com/trongthanh}
+ * @author Leroy Hopson [@lihop]{@link https://github.com/lihop}
+ */
+var locale = {
+ code: 'vi',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 1 /* First week of new year contains Jan 1st */
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/vi/index.js.flow b/date-fns/src/locale/vi/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/vi/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/vi/snapshot.md b/date-fns/src/locale/vi/snapshot.md
new file mode 100644
index 0000000..3609a7a
--- /dev/null
+++ b/date-fns/src/locale/vi/snapshot.md
@@ -0,0 +1,304 @@
+# Vietnamese (vi) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------ | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 5 | 0004-12-27T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | I | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | II | Invalid Date |
+| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | quý I | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | quý II | 2019-01-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | I | Invalid Date |
+| | | 2019-04-01T12:13:14.015Z | II | Invalid Date |
+| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | Quý 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | Quý 2 | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | thg 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | thg 7 | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | tháng 02 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | tháng 07 | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | 02 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 07 | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | Thg 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Thg 7 | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | Tháng Hai | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | Tháng Bảy | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | thứ nhất | Invalid Date |
+| | | 2019-12-01T12:13:14.015Z | thứ 48 | Invalid Date |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | thứ nhất | Invalid Date |
+| | | 2019-12-01T12:13:14.015Z | thứ 48 | Invalid Date |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | thứ 42 | Invalid Date |
+| | | 2019-12-31T12:13:14.015Z | thứ 365 | Invalid Date |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Thứ 2 | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Thứ 6 | Invalid Date |
+| | EE | 2019-02-11T12:13:14.015Z | Thứ 2 | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Thứ 6 | Invalid Date |
+| | EEE | 2019-02-11T12:13:14.015Z | Thứ 2 | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Thứ 6 | Invalid Date |
+| | EEEE | 2019-02-11T12:13:14.015Z | Thứ Hai | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Thứ Sáu | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | T2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | T6 | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | Th 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Th 6 | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | thứ 2 | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | thứ 6 | Invalid Date |
+| | iii | 2019-02-11T12:13:14.015Z | Thứ 2 | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Thứ 6 | Invalid Date |
+| | iiii | 2019-02-11T12:13:14.015Z | Thứ Hai | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Thứ Sáu | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | T2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | T6 | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | Th 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Th 6 | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | thứ 2 | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | thứ 6 | Invalid Date |
+| | eee | 2019-02-11T12:13:14.015Z | Thứ 2 | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Thứ 6 | Invalid Date |
+| | eeee | 2019-02-11T12:13:14.015Z | Thứ Hai | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Thứ Sáu | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | T2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | T6 | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | Th 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Th 6 | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | thứ 2 | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | thứ 6 | Invalid Date |
+| | ccc | 2019-02-11T12:13:14.015Z | Thứ 2 | Invalid Date |
+| | | 2019-02-15T12:13:14.015Z | Thứ 6 | Invalid Date |
+| | cccc | 2019-02-11T12:13:14.015Z | Thứ Hai | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Thứ Sáu | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | T2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | T6 | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | Th 2 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | Th 6 | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | SA | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | CH | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | CH | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | SA | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | am | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | am | Invalid Date |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | SA | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | CH | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | CH | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | SA | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | am | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | pm | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | am | Invalid Date |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | sáng | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | chiều | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | tối | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | đêm | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | sáng | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | chiều | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | tối | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | đêm | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | sáng | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | chiều | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | tối | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | đêm | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | vào buổi sáng | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | vào buổi chiều | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | vào buổi tối | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | vào ban đêm | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | sg | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | ch | Invalid Date |
+| | | 2019-02-11T19:13:14.015Z | tối | Invalid Date |
+| | | 2019-02-11T02:13:14.015Z | đêm | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 11/02/1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 11 thg 2 năm 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 thg 5 năm 1453 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | ngày 11 tháng 02 năm 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | ngày 29 tháng 05 năm 1453 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | Thứ Tư, ngày 11 tháng 02 năm 1987 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | Chủ Nhật, ngày 29 tháng 05 năm 1453 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+0 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 23:59:59 GMT+00:00 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 11/02/1987 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29/05/1453 23:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 11 thg 2 năm 1987 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 29 thg 5 năm 1453 23:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | ngày 11 tháng 02 năm 1987 12:13:14 GMT+0 | Errored |
+| | | 1453-05-29T23:59:59.999Z | ngày 29 tháng 05 năm 1453 23:59:59 GMT+0 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | Thứ Tư, ngày 11 tháng 02 năm 1987 12:13:14 GMT+00:00 | Errored |
+| | | 1453-05-29T23:59:59.999Z | Chủ Nhật, ngày 29 tháng 05 năm 1453 23:59:59 GMT+00:00 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | -------------- | ---------------------- | -------------------- |
+| 2006-01-01T00:00:00.000Z | khoảng 6 năm | khoảng 6 năm | khoảng 6 năm nữa |
+| 2005-01-01T00:00:00.000Z | khoảng 5 năm | khoảng 5 năm | khoảng 5 năm nữa |
+| 2004-01-01T00:00:00.000Z | khoảng 4 năm | khoảng 4 năm | khoảng 4 năm nữa |
+| 2003-01-01T00:00:00.000Z | khoảng 3 năm | khoảng 3 năm | khoảng 3 năm nữa |
+| 2002-01-01T00:00:00.000Z | khoảng 2 năm | khoảng 2 năm | khoảng 2 năm nữa |
+| 2001-06-01T00:00:00.000Z | hơn 1 năm | hơn 1 năm | hơn 1 năm nữa |
+| 2001-02-01T00:00:00.000Z | khoảng 1 năm | khoảng 1 năm | khoảng 1 năm nữa |
+| 2001-01-01T00:00:00.000Z | khoảng 1 năm | khoảng 1 năm | khoảng 1 năm nữa |
+| 2000-06-01T00:00:00.000Z | 5 tháng | 5 tháng | 5 tháng nữa |
+| 2000-03-01T00:00:00.000Z | 2 tháng | 2 tháng | 2 tháng nữa |
+| 2000-02-01T00:00:00.000Z | khoảng 1 tháng | khoảng 1 tháng | khoảng 1 tháng nữa |
+| 2000-01-15T00:00:00.000Z | 14 ngày | 14 ngày | 14 ngày nữa |
+| 2000-01-02T00:00:00.000Z | 1 ngày | 1 ngày | 1 ngày nữa |
+| 2000-01-01T06:00:00.000Z | khoảng 6 giờ | khoảng 6 giờ | khoảng 6 giờ nữa |
+| 2000-01-01T01:00:00.000Z | khoảng 1 giờ | khoảng 1 giờ | khoảng 1 giờ nữa |
+| 2000-01-01T00:45:00.000Z | khoảng 1 giờ | khoảng 1 giờ | khoảng 1 giờ nữa |
+| 2000-01-01T00:30:00.000Z | 30 phút | 30 phút | 30 phút nữa |
+| 2000-01-01T00:15:00.000Z | 15 phút | 15 phút | 15 phút nữa |
+| 2000-01-01T00:01:00.000Z | 1 phút | 1 phút | 1 phút nữa |
+| 2000-01-01T00:00:25.000Z | dưới 1 phút | nửa phút | dưới 1 phút nữa |
+| 2000-01-01T00:00:15.000Z | dưới 1 phút | dưới 20 giây | dưới 1 phút nữa |
+| 2000-01-01T00:00:05.000Z | dưới 1 phút | dưới 10 giây | dưới 1 phút nữa |
+| 2000-01-01T00:00:00.000Z | dưới 1 phút | dưới 5 giây | dưới 1 phút trước |
+| 1999-12-31T23:59:55.000Z | dưới 1 phút | dưới 10 giây | dưới 1 phút trước |
+| 1999-12-31T23:59:45.000Z | dưới 1 phút | dưới 20 giây | dưới 1 phút trước |
+| 1999-12-31T23:59:35.000Z | dưới 1 phút | nửa phút | dưới 1 phút trước |
+| 1999-12-31T23:59:00.000Z | 1 phút | 1 phút | 1 phút trước |
+| 1999-12-31T23:45:00.000Z | 15 phút | 15 phút | 15 phút trước |
+| 1999-12-31T23:30:00.000Z | 30 phút | 30 phút | 30 phút trước |
+| 1999-12-31T23:15:00.000Z | khoảng 1 giờ | khoảng 1 giờ | khoảng 1 giờ trước |
+| 1999-12-31T23:00:00.000Z | khoảng 1 giờ | khoảng 1 giờ | khoảng 1 giờ trước |
+| 1999-12-31T18:00:00.000Z | khoảng 6 giờ | khoảng 6 giờ | khoảng 6 giờ trước |
+| 1999-12-30T00:00:00.000Z | 2 ngày | 2 ngày | 2 ngày trước |
+| 1999-12-15T00:00:00.000Z | 17 ngày | 17 ngày | 17 ngày trước |
+| 1999-12-01T00:00:00.000Z | khoảng 1 tháng | khoảng 1 tháng | khoảng 1 tháng trước |
+| 1999-11-01T00:00:00.000Z | 2 tháng | 2 tháng | 2 tháng trước |
+| 1999-06-01T00:00:00.000Z | 7 tháng | 7 tháng | 7 tháng trước |
+| 1999-01-01T00:00:00.000Z | khoảng 1 năm | khoảng 1 năm | khoảng 1 năm trước |
+| 1998-12-01T00:00:00.000Z | khoảng 1 năm | khoảng 1 năm | khoảng 1 năm trước |
+| 1998-06-01T00:00:00.000Z | hơn 1 năm | hơn 1 năm | hơn 1 năm trước |
+| 1998-01-01T00:00:00.000Z | khoảng 2 năm | khoảng 2 năm | khoảng 2 năm trước |
+| 1997-01-01T00:00:00.000Z | khoảng 3 năm | khoảng 3 năm | khoảng 3 năm trước |
+| 1996-01-01T00:00:00.000Z | khoảng 4 năm | khoảng 4 năm | khoảng 4 năm trước |
+| 1995-01-01T00:00:00.000Z | khoảng 5 năm | khoảng 5 năm | khoảng 5 năm trước |
+| 1994-01-01T00:00:00.000Z | khoảng 6 năm | khoảng 6 năm | khoảng 6 năm trước |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 năm | 6 năm nữa | 52608 giờ |
+| 2005-01-01T00:00:00.000Z | 5 năm | 5 năm nữa | 43848 giờ |
+| 2004-01-01T00:00:00.000Z | 4 năm | 4 năm nữa | 35064 giờ |
+| 2003-01-01T00:00:00.000Z | 3 năm | 3 năm nữa | 26304 giờ |
+| 2002-01-01T00:00:00.000Z | 2 năm | 2 năm nữa | 17544 giờ |
+| 2001-06-01T00:00:00.000Z | 1 năm | 1 năm nữa | 12408 giờ |
+| 2001-02-01T00:00:00.000Z | 1 năm | 1 năm nữa | 9528 giờ |
+| 2001-01-01T00:00:00.000Z | 1 năm | 1 năm nữa | 8784 giờ |
+| 2000-06-01T00:00:00.000Z | 5 tháng | 5 tháng nữa | 3648 giờ |
+| 2000-03-01T00:00:00.000Z | 2 tháng | 2 tháng nữa | 1440 giờ |
+| 2000-02-01T00:00:00.000Z | 1 tháng | 1 tháng nữa | 744 giờ |
+| 2000-01-15T00:00:00.000Z | 14 ngày | 14 ngày nữa | 336 giờ |
+| 2000-01-02T00:00:00.000Z | 1 ngày | 1 ngày nữa | 24 giờ |
+| 2000-01-01T06:00:00.000Z | 6 giờ | 6 giờ nữa | 6 giờ |
+| 2000-01-01T01:00:00.000Z | 1 giờ | 1 giờ nữa | 1 giờ |
+| 2000-01-01T00:45:00.000Z | 45 phút | 45 phút nữa | 1 giờ |
+| 2000-01-01T00:30:00.000Z | 30 phút | 30 phút nữa | 1 giờ |
+| 2000-01-01T00:15:00.000Z | 15 phút | 15 phút nữa | 0 giờ |
+| 2000-01-01T00:01:00.000Z | 1 phút | 1 phút nữa | 0 giờ |
+| 2000-01-01T00:00:25.000Z | 25 giây | 25 giây nữa | 0 giờ |
+| 2000-01-01T00:00:15.000Z | 15 giây | 15 giây nữa | 0 giờ |
+| 2000-01-01T00:00:05.000Z | 5 giây | 5 giây nữa | 0 giờ |
+| 2000-01-01T00:00:00.000Z | 0 giây | 0 giây trước | 0 giờ |
+| 1999-12-31T23:59:55.000Z | 5 giây | 5 giây trước | 0 giờ |
+| 1999-12-31T23:59:45.000Z | 15 giây | 15 giây trước | 0 giờ |
+| 1999-12-31T23:59:35.000Z | 25 giây | 25 giây trước | 0 giờ |
+| 1999-12-31T23:59:00.000Z | 1 phút | 1 phút trước | 0 giờ |
+| 1999-12-31T23:45:00.000Z | 15 phút | 15 phút trước | 0 giờ |
+| 1999-12-31T23:30:00.000Z | 30 phút | 30 phút trước | 1 giờ |
+| 1999-12-31T23:15:00.000Z | 45 phút | 45 phút trước | 1 giờ |
+| 1999-12-31T23:00:00.000Z | 1 giờ | 1 giờ trước | 1 giờ |
+| 1999-12-31T18:00:00.000Z | 6 giờ | 6 giờ trước | 6 giờ |
+| 1999-12-30T00:00:00.000Z | 2 ngày | 2 ngày trước | 48 giờ |
+| 1999-12-15T00:00:00.000Z | 17 ngày | 17 ngày trước | 408 giờ |
+| 1999-12-01T00:00:00.000Z | 1 tháng | 1 tháng trước | 744 giờ |
+| 1999-11-01T00:00:00.000Z | 2 tháng | 2 tháng trước | 1464 giờ |
+| 1999-06-01T00:00:00.000Z | 7 tháng | 7 tháng trước | 5136 giờ |
+| 1999-01-01T00:00:00.000Z | 1 năm | 1 năm trước | 8760 giờ |
+| 1998-12-01T00:00:00.000Z | 1 năm | 1 năm trước | 9504 giờ |
+| 1998-06-01T00:00:00.000Z | 2 năm | 2 năm trước | 13896 giờ |
+| 1998-01-01T00:00:00.000Z | 2 năm | 2 năm trước | 17520 giờ |
+| 1997-01-01T00:00:00.000Z | 3 năm | 3 năm trước | 26280 giờ |
+| 1996-01-01T00:00:00.000Z | 4 năm | 4 năm trước | 35064 giờ |
+| 1995-01-01T00:00:00.000Z | 5 năm | 5 năm trước | 43824 giờ |
+| 1994-01-01T00:00:00.000Z | 6 năm | 6 năm trước | 52584 giờ |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | -------------------------------- |
+| 2000-01-10T00:00:00.000Z | 10/01/2000 |
+| 2000-01-05T00:00:00.000Z | Thứ Tư tới vào lúc 00:00 |
+| 2000-01-02T00:00:00.000Z | ngày mai vào lúc 00:00 |
+| 2000-01-01T00:00:00.000Z | hôm nay vào lúc 00:00 |
+| 1999-12-31T00:00:00.000Z | hôm qua vào lúc 00:00 |
+| 1999-12-27T00:00:00.000Z | Thứ Hai tuần trước vào lúc 00:00 |
+| 1999-12-21T00:00:00.000Z | 21/12/1999 |
diff --git a/date-fns/src/locale/zh-CN/_lib/formatDistance/index.js b/date-fns/src/locale/zh-CN/_lib/formatDistance/index.js
new file mode 100644
index 0000000..df916e8
--- /dev/null
+++ b/date-fns/src/locale/zh-CN/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: '不到 1 秒',
+ other: '不到 {{count}} 秒'
+ },
+
+ xSeconds: {
+ one: '1 秒',
+ other: '{{count}} 秒'
+ },
+
+ halfAMinute: '半分钟',
+
+ lessThanXMinutes: {
+ one: '不到 1 分钟',
+ other: '不到 {{count}} 分钟'
+ },
+
+ xMinutes: {
+ one: '1 分钟',
+ other: '{{count}} 分钟'
+ },
+
+ xHours: {
+ one: '1 小时',
+ other: '{{count}} 小时'
+ },
+
+ aboutXHours: {
+ one: '大约 1 小时',
+ other: '大约 {{count}} 小时'
+ },
+
+ xDays: {
+ one: '1 天',
+ other: '{{count}} 天'
+ },
+
+ aboutXWeeks: {
+ one: '大约 1 个星期',
+ other: '大约 {{count}} 个星期'
+ },
+
+ xWeeks: {
+ one: '1 个星期',
+ other: '{{count}} 个星期'
+ },
+
+ aboutXMonths: {
+ one: '大约 1 个月',
+ other: '大约 {{count}} 个月'
+ },
+
+ xMonths: {
+ one: '1 个月',
+ other: '{{count}} 个月'
+ },
+
+ aboutXYears: {
+ one: '大约 1 年',
+ other: '大约 {{count}} 年'
+ },
+
+ xYears: {
+ one: '1 年',
+ other: '{{count}} 年'
+ },
+
+ overXYears: {
+ one: '超过 1 年',
+ other: '超过 {{count}} 年'
+ },
+
+ almostXYears: {
+ one: '将近 1 年',
+ other: '将近 {{count}} 年'
+ }
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + '内'
+ } else {
+ return result + '前'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/zh-CN/_lib/formatLong/index.js b/date-fns/src/locale/zh-CN/_lib/formatLong/index.js
new file mode 100644
index 0000000..2d3ba38
--- /dev/null
+++ b/date-fns/src/locale/zh-CN/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "y'年'M'月'd'日' EEEE",
+ long: "y'年'M'月'd'日'",
+ medium: 'yyyy-MM-dd',
+ short: 'yy-MM-dd'
+}
+
+var timeFormats = {
+ full: 'zzzz a h:mm:ss',
+ long: 'z a h:mm:ss',
+ medium: 'a h:mm:ss',
+ short: 'a h:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/zh-CN/_lib/formatRelative/index.js b/date-fns/src/locale/zh-CN/_lib/formatRelative/index.js
new file mode 100644
index 0000000..bc50f4d
--- /dev/null
+++ b/date-fns/src/locale/zh-CN/_lib/formatRelative/index.js
@@ -0,0 +1,29 @@
+import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index'
+
+function checkWeek(_date, _baseDate, _options, baseFormat) {
+ if (isSameUTCWeek(_date, _baseDate, _options)) {
+ return baseFormat // in same week
+ } else if (_date.getTime() > _baseDate.getTime()) {
+ return "'下个'" + baseFormat // in next week
+ }
+ return "'上个'" + baseFormat // in last week
+}
+
+var formatRelativeLocale = {
+ lastWeek: checkWeek, // days before yesterday, maybe in this week or last week
+ yesterday: "'昨天' p",
+ today: "'今天' p",
+ tomorrow: "'明天' p",
+ nextWeek: checkWeek, // days after tomorrow, maybe in this week or next week
+ other: 'PP p'
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ var format = formatRelativeLocale[token]
+
+ if (typeof format === 'function') {
+ return format(_date, _baseDate, _options, 'eeee p')
+ }
+
+ return format
+}
diff --git a/date-fns/src/locale/zh-CN/_lib/localize/index.js b/date-fns/src/locale/zh-CN/_lib/localize/index.js
new file mode 100644
index 0000000..c3027be
--- /dev/null
+++ b/date-fns/src/locale/zh-CN/_lib/localize/index.js
@@ -0,0 +1,194 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['前', '公元'],
+ abbreviated: ['前', '公元'],
+ wide: ['公元前', '公元']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['第一刻', '第二刻', '第三刻', '第四刻'],
+ wide: ['第一刻钟', '第二刻钟', '第三刻钟', '第四刻钟']
+}
+
+var monthValues = {
+ narrow: [
+ '一',
+ '二',
+ '三',
+ '四',
+ '五',
+ '六',
+ '七',
+ '八',
+ '九',
+ '十',
+ '十一',
+ '十二'
+ ],
+ abbreviated: [
+ '1月',
+ '2月',
+ '3月',
+ '4月',
+ '5月',
+ '6月',
+ '7月',
+ '8月',
+ '9月',
+ '10月',
+ '11月',
+ '12月'
+ ],
+ wide: [
+ '一月',
+ '二月',
+ '三月',
+ '四月',
+ '五月',
+ '六月',
+ '七月',
+ '八月',
+ '九月',
+ '十月',
+ '十一月',
+ '十二月'
+ ]
+}
+
+var dayValues = {
+ narrow: ['日', '一', '二', '三', '四', '五', '六'],
+ short: ['日', '一', '二', '三', '四', '五', '六'],
+ abbreviated: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
+ wide: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: '上',
+ pm: '下',
+ midnight: '凌晨',
+ noon: '午',
+ morning: '早',
+ afternoon: '下午',
+ evening: '晚',
+ night: '夜'
+ },
+ abbreviated: {
+ am: '上午',
+ pm: '下午',
+ midnight: '凌晨',
+ noon: '中午',
+ morning: '早晨',
+ afternoon: '中午',
+ evening: '晚上',
+ night: '夜间'
+ },
+ wide: {
+ am: '上午',
+ pm: '下午',
+ midnight: '凌晨',
+ noon: '中午',
+ morning: '早晨',
+ afternoon: '中午',
+ evening: '晚上',
+ night: '夜间'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: '上',
+ pm: '下',
+ midnight: '凌晨',
+ noon: '午',
+ morning: '早',
+ afternoon: '下午',
+ evening: '晚',
+ night: '夜'
+ },
+ abbreviated: {
+ am: '上午',
+ pm: '下午',
+ midnight: '凌晨',
+ noon: '中午',
+ morning: '早晨',
+ afternoon: '中午',
+ evening: '晚上',
+ night: '夜间'
+ },
+ wide: {
+ am: '上午',
+ pm: '下午',
+ midnight: '凌晨',
+ noon: '中午',
+ morning: '早晨',
+ afternoon: '中午',
+ evening: '晚上',
+ night: '夜间'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+ var number = Number(dirtyNumber)
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+
+ switch (unit) {
+ case 'date':
+ return number.toString() + '日'
+ case 'hour':
+ return number.toString() + '时'
+ case 'minute':
+ return number.toString() + '分'
+ case 'second':
+ return number.toString() + '秒'
+ default:
+ return '第 ' + number.toString()
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/zh-CN/_lib/match/index.js b/date-fns/src/locale/zh-CN/_lib/match/index.js
new file mode 100644
index 0000000..7b4cb2f
--- /dev/null
+++ b/date-fns/src/locale/zh-CN/_lib/match/index.js
@@ -0,0 +1,135 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(第\s*)?\d+(日|时|分|秒)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(前)/i,
+ abbreviated: /^(前)/i,
+ wide: /^(公元前|公元)/i
+}
+var parseEraPatterns = {
+ any: [/^(前)/i, /^(公元)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^第[一二三四]刻/i,
+ wide: /^第[一二三四]刻钟/i
+}
+var parseQuarterPatterns = {
+ any: [/(1|一)/i, /(2|二)/i, /(3|三)/i, /(4|四)/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(一|二|三|四|五|六|七|八|九|十[二一])/i,
+ abbreviated: /^(一|二|三|四|五|六|七|八|九|十[二一]|\d|1[12])月/i,
+ wide: /^(一|二|三|四|五|六|七|八|九|十[二一])月/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^一/i,
+ /^二/i,
+ /^三/i,
+ /^四/i,
+ /^五/i,
+ /^六/i,
+ /^七/i,
+ /^八/i,
+ /^九/i,
+ /^十(?!(一|二))/i,
+ /^十一/i,
+ /^十二/i
+ ],
+ any: [
+ /^一|1/i,
+ /^二|2/i,
+ /^三|3/i,
+ /^四|4/i,
+ /^五|5/i,
+ /^六|6/i,
+ /^七|7/i,
+ /^八|8/i,
+ /^九|9/i,
+ /^十(?!(一|二))|10/i,
+ /^十一|11/i,
+ /^十二|12/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[一二三四五六日]/i,
+ short: /^[一二三四五六日]/i,
+ abbreviated: /^周[一二三四五六日]/i,
+ wide: /^星期[一二三四五六日]/i
+}
+var parseDayPatterns = {
+ any: [/日/i, /一/i, /二/i, /三/i, /四/i, /五/i, /六/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨|)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^上午?/i,
+ pm: /^下午?/i,
+ midnight: /^午夜/i,
+ noon: /^[中正]午/i,
+ morning: /^早上/i,
+ afternoon: /^下午/i,
+ evening: /^晚上?/i,
+ night: /^凌晨/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/zh-CN/index.d.ts b/date-fns/src/locale/zh-CN/index.d.ts
new file mode 100644
index 0000000..ffe2f2e
--- /dev/null
+++ b/date-fns/src/locale/zh-CN/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { zhCN } from 'date-fns/locale'
+export default zhCN
diff --git a/date-fns/src/locale/zh-CN/index.js b/date-fns/src/locale/zh-CN/index.js
new file mode 100644
index 0000000..0540e58
--- /dev/null
+++ b/date-fns/src/locale/zh-CN/index.js
@@ -0,0 +1,32 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Chinese Simplified locale.
+ * @language Chinese Simplified
+ * @iso-639-2 zho
+ * @author Changyu Geng [@KingMario]{@link https://github.com/KingMario}
+ * @author Song Shuoyun [@fnlctrl]{@link https://github.com/fnlctrl}
+ * @author sabrinaM [@sabrinamiao]{@link https://github.com/sabrinamiao}
+ * @author Carney Wu [@cubicwork]{@link https://github.com/cubicwork}
+ * @author Terrence Lam [@skyuplam]{@link https://github.com/skyuplam}
+ */
+var locale = {
+ code: 'zh-CN',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/zh-CN/index.js.flow b/date-fns/src/locale/zh-CN/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/zh-CN/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/zh-CN/snapshot.md b/date-fns/src/locale/zh-CN/snapshot.md
new file mode 100644
index 0000000..b11b41d
--- /dev/null
+++ b/date-fns/src/locale/zh-CN/snapshot.md
@@ -0,0 +1,304 @@
+# Chinese Simplified (zh-CN) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 第 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 第 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 第 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 第 4 | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 第 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 第一刻 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第二刻 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 第一刻钟 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第二刻钟 | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 第 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 第一刻 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第二刻 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 第一刻钟 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第二刻钟 | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 第 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 第 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | 2 月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 月 | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | 二月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 七月 | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | 二 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 七 | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 第 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 第 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | 2 月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 月 | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | 二月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 七月 | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | 二 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 七 | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 第 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 第 48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 第 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 第 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 日 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 日 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 第 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 第 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | 周一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 周五 | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | 周一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 周五 | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | 周一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 周五 | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | 星期一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 星期五 | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 第 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 第 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | 周一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 周五 | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | 星期一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 星期五 | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 第 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 第 5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | 周一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 周五 | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | 星期一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 星期五 | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 第 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 第 5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | 周一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 周五 | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | 星期一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 星期五 | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | 上 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上 | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | 上 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上 | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | 早晨 | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | 中午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚上 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜间 | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | 早晨 | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | 中午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚上 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜间 | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | 早晨 | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | 中午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚上 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜间 | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | 早晨 | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | 中午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚上 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜间 | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | 早 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜 | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 时 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 时 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 时 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 时 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 时 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 时 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 时 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 时 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 分 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 分 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 秒 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 秒 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 87-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 53-05-29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 1987-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 星期三 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 星期日 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 下午 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 下午 11:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 下午 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 下午 11:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | GMT+0 下午 12:13:14 | Errored |
+| | | 1453-05-29T23:59:59.999Z | GMT+0 下午 11:59:59 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | GMT+00:00 下午 12:13:14 | Errored |
+| | | 1453-05-29T23:59:59.999Z | GMT+00:00 下午 11:59:59 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 87-02-11 下午 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 53-05-29 下午 11:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 1987-02-11 下午 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 下午 11:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 GMT+0 下午 12:13:14 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 GMT+0 下午 11:59:59 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 星期三 GMT+00:00 下午 12:13:14 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 星期日 GMT+00:00 下午 11:59:59 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------- | ---------------------- | ----------------- |
+| 2006-01-01T00:00:00.000Z | 大约 6 年 | 大约 6 年 | 大约 6 年内 |
+| 2005-01-01T00:00:00.000Z | 大约 5 年 | 大约 5 年 | 大约 5 年内 |
+| 2004-01-01T00:00:00.000Z | 大约 4 年 | 大约 4 年 | 大约 4 年内 |
+| 2003-01-01T00:00:00.000Z | 大约 3 年 | 大约 3 年 | 大约 3 年内 |
+| 2002-01-01T00:00:00.000Z | 大约 2 年 | 大约 2 年 | 大约 2 年内 |
+| 2001-06-01T00:00:00.000Z | 超过 1 年 | 超过 1 年 | 超过 1 年内 |
+| 2001-02-01T00:00:00.000Z | 大约 1 年 | 大约 1 年 | 大约 1 年内 |
+| 2001-01-01T00:00:00.000Z | 大约 1 年 | 大约 1 年 | 大约 1 年内 |
+| 2000-06-01T00:00:00.000Z | 5 个月 | 5 个月 | 5 个月内 |
+| 2000-03-01T00:00:00.000Z | 2 个月 | 2 个月 | 2 个月内 |
+| 2000-02-01T00:00:00.000Z | 大约 1 个月 | 大约 1 个月 | 大约 1 个月内 |
+| 2000-01-15T00:00:00.000Z | 14 天 | 14 天 | 14 天内 |
+| 2000-01-02T00:00:00.000Z | 1 天 | 1 天 | 1 天内 |
+| 2000-01-01T06:00:00.000Z | 大约 6 小时 | 大约 6 小时 | 大约 6 小时内 |
+| 2000-01-01T01:00:00.000Z | 大约 1 小时 | 大约 1 小时 | 大约 1 小时内 |
+| 2000-01-01T00:45:00.000Z | 大约 1 小时 | 大约 1 小时 | 大约 1 小时内 |
+| 2000-01-01T00:30:00.000Z | 30 分钟 | 30 分钟 | 30 分钟内 |
+| 2000-01-01T00:15:00.000Z | 15 分钟 | 15 分钟 | 15 分钟内 |
+| 2000-01-01T00:01:00.000Z | 1 分钟 | 1 分钟 | 1 分钟内 |
+| 2000-01-01T00:00:25.000Z | 不到 1 分钟 | 半分钟 | 不到 1 分钟内 |
+| 2000-01-01T00:00:15.000Z | 不到 1 分钟 | 不到 20 秒 | 不到 1 分钟内 |
+| 2000-01-01T00:00:05.000Z | 不到 1 分钟 | 不到 10 秒 | 不到 1 分钟内 |
+| 2000-01-01T00:00:00.000Z | 不到 1 分钟 | 不到 5 秒 | 不到 1 分钟前 |
+| 1999-12-31T23:59:55.000Z | 不到 1 分钟 | 不到 10 秒 | 不到 1 分钟前 |
+| 1999-12-31T23:59:45.000Z | 不到 1 分钟 | 不到 20 秒 | 不到 1 分钟前 |
+| 1999-12-31T23:59:35.000Z | 不到 1 分钟 | 半分钟 | 不到 1 分钟前 |
+| 1999-12-31T23:59:00.000Z | 1 分钟 | 1 分钟 | 1 分钟前 |
+| 1999-12-31T23:45:00.000Z | 15 分钟 | 15 分钟 | 15 分钟前 |
+| 1999-12-31T23:30:00.000Z | 30 分钟 | 30 分钟 | 30 分钟前 |
+| 1999-12-31T23:15:00.000Z | 大约 1 小时 | 大约 1 小时 | 大约 1 小时前 |
+| 1999-12-31T23:00:00.000Z | 大约 1 小时 | 大约 1 小时 | 大约 1 小时前 |
+| 1999-12-31T18:00:00.000Z | 大约 6 小时 | 大约 6 小时 | 大约 6 小时前 |
+| 1999-12-30T00:00:00.000Z | 2 天 | 2 天 | 2 天前 |
+| 1999-12-15T00:00:00.000Z | 17 天 | 17 天 | 17 天前 |
+| 1999-12-01T00:00:00.000Z | 大约 1 个月 | 大约 1 个月 | 大约 1 个月前 |
+| 1999-11-01T00:00:00.000Z | 2 个月 | 2 个月 | 2 个月前 |
+| 1999-06-01T00:00:00.000Z | 7 个月 | 7 个月 | 7 个月前 |
+| 1999-01-01T00:00:00.000Z | 大约 1 年 | 大约 1 年 | 大约 1 年前 |
+| 1998-12-01T00:00:00.000Z | 大约 1 年 | 大约 1 年 | 大约 1 年前 |
+| 1998-06-01T00:00:00.000Z | 超过 1 年 | 超过 1 年 | 超过 1 年前 |
+| 1998-01-01T00:00:00.000Z | 大约 2 年 | 大约 2 年 | 大约 2 年前 |
+| 1997-01-01T00:00:00.000Z | 大约 3 年 | 大约 3 年 | 大约 3 年前 |
+| 1996-01-01T00:00:00.000Z | 大约 4 年 | 大约 4 年 | 大约 4 年前 |
+| 1995-01-01T00:00:00.000Z | 大约 5 年 | 大约 5 年 | 大约 5 年前 |
+| 1994-01-01T00:00:00.000Z | 大约 6 年 | 大约 6 年 | 大约 6 年前 |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 年 | 6 年内 | 52608 小时 |
+| 2005-01-01T00:00:00.000Z | 5 年 | 5 年内 | 43848 小时 |
+| 2004-01-01T00:00:00.000Z | 4 年 | 4 年内 | 35064 小时 |
+| 2003-01-01T00:00:00.000Z | 3 年 | 3 年内 | 26304 小时 |
+| 2002-01-01T00:00:00.000Z | 2 年 | 2 年内 | 17544 小时 |
+| 2001-06-01T00:00:00.000Z | 1 年 | 1 年内 | 12408 小时 |
+| 2001-02-01T00:00:00.000Z | 1 年 | 1 年内 | 9528 小时 |
+| 2001-01-01T00:00:00.000Z | 1 年 | 1 年内 | 8784 小时 |
+| 2000-06-01T00:00:00.000Z | 5 个月 | 5 个月内 | 3648 小时 |
+| 2000-03-01T00:00:00.000Z | 2 个月 | 2 个月内 | 1440 小时 |
+| 2000-02-01T00:00:00.000Z | 1 个月 | 1 个月内 | 744 小时 |
+| 2000-01-15T00:00:00.000Z | 14 天 | 14 天内 | 336 小时 |
+| 2000-01-02T00:00:00.000Z | 1 天 | 1 天内 | 24 小时 |
+| 2000-01-01T06:00:00.000Z | 6 小时 | 6 小时内 | 6 小时 |
+| 2000-01-01T01:00:00.000Z | 1 小时 | 1 小时内 | 1 小时 |
+| 2000-01-01T00:45:00.000Z | 45 分钟 | 45 分钟内 | 1 小时 |
+| 2000-01-01T00:30:00.000Z | 30 分钟 | 30 分钟内 | 1 小时 |
+| 2000-01-01T00:15:00.000Z | 15 分钟 | 15 分钟内 | 0 小时 |
+| 2000-01-01T00:01:00.000Z | 1 分钟 | 1 分钟内 | 0 小时 |
+| 2000-01-01T00:00:25.000Z | 25 秒 | 25 秒内 | 0 小时 |
+| 2000-01-01T00:00:15.000Z | 15 秒 | 15 秒内 | 0 小时 |
+| 2000-01-01T00:00:05.000Z | 5 秒 | 5 秒内 | 0 小时 |
+| 2000-01-01T00:00:00.000Z | 0 秒 | 0 秒前 | 0 小时 |
+| 1999-12-31T23:59:55.000Z | 5 秒 | 5 秒前 | 0 小时 |
+| 1999-12-31T23:59:45.000Z | 15 秒 | 15 秒前 | 0 小时 |
+| 1999-12-31T23:59:35.000Z | 25 秒 | 25 秒前 | 0 小时 |
+| 1999-12-31T23:59:00.000Z | 1 分钟 | 1 分钟前 | 0 小时 |
+| 1999-12-31T23:45:00.000Z | 15 分钟 | 15 分钟前 | 0 小时 |
+| 1999-12-31T23:30:00.000Z | 30 分钟 | 30 分钟前 | 1 小时 |
+| 1999-12-31T23:15:00.000Z | 45 分钟 | 45 分钟前 | 1 小时 |
+| 1999-12-31T23:00:00.000Z | 1 小时 | 1 小时前 | 1 小时 |
+| 1999-12-31T18:00:00.000Z | 6 小时 | 6 小时前 | 6 小时 |
+| 1999-12-30T00:00:00.000Z | 2 天 | 2 天前 | 48 小时 |
+| 1999-12-15T00:00:00.000Z | 17 天 | 17 天前 | 408 小时 |
+| 1999-12-01T00:00:00.000Z | 1 个月 | 1 个月前 | 744 小时 |
+| 1999-11-01T00:00:00.000Z | 2 个月 | 2 个月前 | 1464 小时 |
+| 1999-06-01T00:00:00.000Z | 7 个月 | 7 个月前 | 5136 小时 |
+| 1999-01-01T00:00:00.000Z | 1 年 | 1 年前 | 8760 小时 |
+| 1998-12-01T00:00:00.000Z | 1 年 | 1 年前 | 9504 小时 |
+| 1998-06-01T00:00:00.000Z | 2 年 | 2 年前 | 13896 小时 |
+| 1998-01-01T00:00:00.000Z | 2 年 | 2 年前 | 17520 小时 |
+| 1997-01-01T00:00:00.000Z | 3 年 | 3 年前 | 26280 小时 |
+| 1996-01-01T00:00:00.000Z | 4 年 | 4 年前 | 35064 小时 |
+| 1995-01-01T00:00:00.000Z | 5 年 | 5 年前 | 43824 小时 |
+| 1994-01-01T00:00:00.000Z | 6 年 | 6 年前 | 52584 小时 |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | --------------------- |
+| 2000-01-10T00:00:00.000Z | 2000-01-10 上午 12:00 |
+| 2000-01-05T00:00:00.000Z | 下个星期三 上午 12:00 |
+| 2000-01-02T00:00:00.000Z | 明天 上午 12:00 |
+| 2000-01-01T00:00:00.000Z | 今天 上午 12:00 |
+| 1999-12-31T00:00:00.000Z | 昨天 上午 12:00 |
+| 1999-12-27T00:00:00.000Z | 星期一 上午 12:00 |
+| 1999-12-21T00:00:00.000Z | 1999-12-21 上午 12:00 |
diff --git a/date-fns/src/locale/zh-TW/_lib/formatDistance/index.js b/date-fns/src/locale/zh-TW/_lib/formatDistance/index.js
new file mode 100644
index 0000000..affa550
--- /dev/null
+++ b/date-fns/src/locale/zh-TW/_lib/formatDistance/index.js
@@ -0,0 +1,101 @@
+var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: '少於 1 秒',
+ other: '少於 {{count}} 秒',
+ },
+
+ xSeconds: {
+ one: '1 秒',
+ other: '{{count}} 秒',
+ },
+
+ halfAMinute: '半分鐘',
+
+ lessThanXMinutes: {
+ one: '少於 1 分鐘',
+ other: '少於 {{count}} 分鐘',
+ },
+
+ xMinutes: {
+ one: '1 分鐘',
+ other: '{{count}} 分鐘',
+ },
+
+ xHours: {
+ one: '1 小時',
+ other: '{{count}} 小時',
+ },
+
+ aboutXHours: {
+ one: '大約 1 小時',
+ other: '大約 {{count}} 小時',
+ },
+
+ xDays: {
+ one: '1 天',
+ other: '{{count}} 天',
+ },
+
+ aboutXWeeks: {
+ one: '大約 1 個星期',
+ other: '大約 {{count}} 個星期',
+ },
+
+ xWeeks: {
+ one: '1 個星期',
+ other: '{{count}} 個星期',
+ },
+
+ aboutXMonths: {
+ one: '大約 1 個月',
+ other: '大約 {{count}} 個月',
+ },
+
+ xMonths: {
+ one: '1 個月',
+ other: '{{count}} 個月',
+ },
+
+ aboutXYears: {
+ one: '大約 1 年',
+ other: '大約 {{count}} 年',
+ },
+
+ xYears: {
+ one: '1 年',
+ other: '{{count}} 年',
+ },
+
+ overXYears: {
+ one: '超過 1 年',
+ other: '超過 {{count}} 年',
+ },
+
+ almostXYears: {
+ one: '將近 1 年',
+ other: '將近 {{count}} 年',
+ },
+}
+
+export default function formatDistance(token, count, options) {
+ options = options || {}
+
+ var result
+ if (typeof formatDistanceLocale[token] === 'string') {
+ result = formatDistanceLocale[token]
+ } else if (count === 1) {
+ result = formatDistanceLocale[token].one
+ } else {
+ result = formatDistanceLocale[token].other.replace('{{count}}', count)
+ }
+
+ if (options.addSuffix) {
+ if (options.comparison > 0) {
+ return result + '內'
+ } else {
+ return result + '前'
+ }
+ }
+
+ return result
+}
diff --git a/date-fns/src/locale/zh-TW/_lib/formatLong/index.js b/date-fns/src/locale/zh-TW/_lib/formatLong/index.js
new file mode 100644
index 0000000..2d3ba38
--- /dev/null
+++ b/date-fns/src/locale/zh-TW/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
+import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index'
+
+var dateFormats = {
+ full: "y'年'M'月'd'日' EEEE",
+ long: "y'年'M'月'd'日'",
+ medium: 'yyyy-MM-dd',
+ short: 'yy-MM-dd'
+}
+
+var timeFormats = {
+ full: 'zzzz a h:mm:ss',
+ long: 'z a h:mm:ss',
+ medium: 'a h:mm:ss',
+ short: 'a h:mm'
+}
+
+var dateTimeFormats = {
+ full: '{{date}} {{time}}',
+ long: '{{date}} {{time}}',
+ medium: '{{date}} {{time}}',
+ short: '{{date}} {{time}}'
+}
+
+var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+}
+
+export default formatLong
diff --git a/date-fns/src/locale/zh-TW/_lib/formatRelative/index.js b/date-fns/src/locale/zh-TW/_lib/formatRelative/index.js
new file mode 100644
index 0000000..fed9857
--- /dev/null
+++ b/date-fns/src/locale/zh-TW/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
+var formatRelativeLocale = {
+ lastWeek: "'上個'eeee p",
+ yesterday: "'昨天' p",
+ today: "'今天' p",
+ tomorrow: "'明天' p",
+ nextWeek: "'下個'eeee p",
+ other: 'P',
+}
+
+export default function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token]
+}
diff --git a/date-fns/src/locale/zh-TW/_lib/localize/index.js b/date-fns/src/locale/zh-TW/_lib/localize/index.js
new file mode 100644
index 0000000..360caf1
--- /dev/null
+++ b/date-fns/src/locale/zh-TW/_lib/localize/index.js
@@ -0,0 +1,196 @@
+import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index'
+
+var eraValues = {
+ narrow: ['前', '公元'],
+ abbreviated: ['前', '公元'],
+ wide: ['公元前', '公元']
+}
+
+var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['第一刻', '第二刻', '第三刻', '第四刻'],
+ wide: ['第一刻鐘', '第二刻鐘', '第三刻鐘', '第四刻鐘']
+}
+
+var monthValues = {
+ narrow: [
+ '一',
+ '二',
+ '三',
+ '四',
+ '五',
+ '六',
+ '七',
+ '八',
+ '九',
+ '十',
+ '十一',
+ '十二'
+ ],
+ abbreviated: [
+ '1月',
+ '2月',
+ '3月',
+ '4月',
+ '5月',
+ '6月',
+ '7月',
+ '8月',
+ '9月',
+ '10月',
+ '11月',
+ '12月'
+ ],
+ wide: [
+ '一月',
+ '二月',
+ '三月',
+ '四月',
+ '五月',
+ '六月',
+ '七月',
+ '八月',
+ '九月',
+ '十月',
+ '十一月',
+ '十二月'
+ ]
+}
+
+var dayValues = {
+ narrow: ['日', '一', '二', '三', '四', '五', '六'],
+ short: ['日', '一', '二', '三', '四', '五', '六'],
+ abbreviated: ['週日', '週一', '週二', '週三', '週四', '週五', '週六'],
+ wide: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
+}
+
+var dayPeriodValues = {
+ narrow: {
+ am: '上',
+ pm: '下',
+ midnight: '凌晨',
+ noon: '午',
+ morning: '早',
+ afternoon: '下午',
+ evening: '晚',
+ night: '夜'
+ },
+ abbreviated: {
+ am: '上午',
+ pm: '下午',
+ midnight: '凌晨',
+ noon: '中午',
+ morning: '早晨',
+ afternoon: '中午',
+ evening: '晚上',
+ night: '夜間'
+ },
+ wide: {
+ am: '上午',
+ pm: '下午',
+ midnight: '凌晨',
+ noon: '中午',
+ morning: '早晨',
+ afternoon: '中午',
+ evening: '晚上',
+ night: '夜間'
+ }
+}
+var formattingDayPeriodValues = {
+ narrow: {
+ am: '上',
+ pm: '下',
+ midnight: '凌晨',
+ noon: '午',
+ morning: '早',
+ afternoon: '下午',
+ evening: '晚',
+ night: '夜'
+ },
+ abbreviated: {
+ am: '上午',
+ pm: '下午',
+ midnight: '凌晨',
+ noon: '中午',
+ morning: '早晨',
+ afternoon: '中午',
+ evening: '晚上',
+ night: '夜間'
+ },
+ wide: {
+ am: '上午',
+ pm: '下午',
+ midnight: '凌晨',
+ noon: '中午',
+ morning: '早晨',
+ afternoon: '中午',
+ evening: '晚上',
+ night: '夜間'
+ }
+}
+
+function ordinalNumber(dirtyNumber, dirtyOptions) {
+ var number = Number(dirtyNumber)
+
+ // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`:
+ //
+ // var options = dirtyOptions || {}
+ // var unit = String(options.unit)
+ //
+ // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'
+
+ var options = dirtyOptions || {}
+ var unit = String(options.unit)
+
+ switch (unit) {
+ case 'date':
+ return number.toString() + '日'
+ case 'hour':
+ return number.toString() + '時'
+ case 'minute':
+ return number.toString() + '分'
+ case 'second':
+ return number.toString() + '秒'
+ default:
+ return '第 ' + number.toString()
+ }
+}
+
+var localize = {
+ ordinalNumber: ordinalNumber,
+
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function(quarter) {
+ return Number(quarter) - 1
+ }
+ }),
+
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+}
+
+export default localize
diff --git a/date-fns/src/locale/zh-TW/_lib/match/index.js b/date-fns/src/locale/zh-TW/_lib/match/index.js
new file mode 100644
index 0000000..460a9cd
--- /dev/null
+++ b/date-fns/src/locale/zh-TW/_lib/match/index.js
@@ -0,0 +1,135 @@
+import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index'
+import buildMatchFn from '../../../_lib/buildMatchFn/index'
+
+var matchOrdinalNumberPattern = /^(第\s*)?\d+(日|時|分|秒)?/i
+var parseOrdinalNumberPattern = /\d+/i
+
+var matchEraPatterns = {
+ narrow: /^(前)/i,
+ abbreviated: /^(前)/i,
+ wide: /^(公元前|公元)/i
+}
+var parseEraPatterns = {
+ any: [/^(前)/i, /^(公元)/i]
+}
+
+var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^第[一二三四]刻/i,
+ wide: /^第[一二三四]刻鐘/i
+}
+var parseQuarterPatterns = {
+ any: [/(1|一)/i, /(2|二)/i, /(3|三)/i, /(4|四)/i]
+}
+
+var matchMonthPatterns = {
+ narrow: /^(一|二|三|四|五|六|七|八|九|十[二一])/i,
+ abbreviated: /^(一|二|三|四|五|六|七|八|九|十[二一]|\d|1[12])月/i,
+ wide: /^(一|二|三|四|五|六|七|八|九|十[二一])月/i
+}
+var parseMonthPatterns = {
+ narrow: [
+ /^一/i,
+ /^二/i,
+ /^三/i,
+ /^四/i,
+ /^五/i,
+ /^六/i,
+ /^七/i,
+ /^八/i,
+ /^九/i,
+ /^十(?!(一|二))/i,
+ /^十一/i,
+ /^十二/i
+ ],
+ any: [
+ /^一|1/i,
+ /^二|2/i,
+ /^三|3/i,
+ /^四|4/i,
+ /^五|5/i,
+ /^六|6/i,
+ /^七|7/i,
+ /^八|8/i,
+ /^九|9/i,
+ /^十(?!(一|二))|10/i,
+ /^十一|11/i,
+ /^十二|12/i
+ ]
+}
+
+var matchDayPatterns = {
+ narrow: /^[一二三四五六日]/i,
+ short: /^[一二三四五六日]/i,
+ abbreviated: /^週[一二三四五六日]/i,
+ wide: /^星期[一二三四五六日]/i
+}
+var parseDayPatterns = {
+ any: [/日/i, /一/i, /二/i, /三/i, /四/i, /五/i, /六/i]
+}
+
+var matchDayPeriodPatterns = {
+ any: /^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨)/i
+}
+var parseDayPeriodPatterns = {
+ any: {
+ am: /^上午?/i,
+ pm: /^下午?/i,
+ midnight: /^午夜/i,
+ noon: /^[中正]午/i,
+ morning: /^早上/i,
+ afternoon: /^下午/i,
+ evening: /^晚上?/i,
+ night: /^凌晨/i
+ }
+}
+
+var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function(value) {
+ return parseInt(value, 10)
+ }
+ }),
+
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function(index) {
+ return index + 1
+ }
+ }),
+
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+}
+
+export default match
diff --git a/date-fns/src/locale/zh-TW/index.d.ts b/date-fns/src/locale/zh-TW/index.d.ts
new file mode 100644
index 0000000..745a08f
--- /dev/null
+++ b/date-fns/src/locale/zh-TW/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { zhTW } from 'date-fns/locale'
+export default zhTW
diff --git a/date-fns/src/locale/zh-TW/index.js b/date-fns/src/locale/zh-TW/index.js
new file mode 100644
index 0000000..bf43c2f
--- /dev/null
+++ b/date-fns/src/locale/zh-TW/index.js
@@ -0,0 +1,30 @@
+import formatDistance from './_lib/formatDistance/index'
+import formatLong from './_lib/formatLong/index'
+import formatRelative from './_lib/formatRelative/index'
+import localize from './_lib/localize/index'
+import match from './_lib/match/index'
+
+/**
+ * @type {Locale}
+ * @category Locales
+ * @summary Chinese Traditional locale.
+ * @language Chinese Traditional
+ * @iso-639-2 zho
+ * @author tonypai [@tpai]{@link https://github.com/tpai}
+ * @author Jack Hsu [@jackhsu978]{@link https://github.com/jackhsu978}
+ * @author Terrence Lam [@skyuplam]{@link https://github.com/skyuplam}
+ */
+var locale = {
+ code: 'zh-TW',
+ formatDistance: formatDistance,
+ formatLong: formatLong,
+ formatRelative: formatRelative,
+ localize: localize,
+ match: match,
+ options: {
+ weekStartsOn: 1 /* Monday */,
+ firstWeekContainsDate: 4
+ }
+}
+
+export default locale
diff --git a/date-fns/src/locale/zh-TW/index.js.flow b/date-fns/src/locale/zh-TW/index.js.flow
new file mode 100644
index 0000000..b9dfe66
--- /dev/null
+++ b/date-fns/src/locale/zh-TW/index.js.flow
@@ -0,0 +1,35 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+declare module.exports: Locale
diff --git a/date-fns/src/locale/zh-TW/snapshot.md b/date-fns/src/locale/zh-TW/snapshot.md
new file mode 100644
index 0000000..787f7e0
--- /dev/null
+++ b/date-fns/src/locale/zh-TW/snapshot.md
@@ -0,0 +1,304 @@
+# Chinese Traditional (zh-TW) locale
+
+## `format` and `parse`
+
+| Title | Token string | Date | `format` result | `parse` result |
+| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------- | ------------------------ |
+| Calendar year | yo | 1987-02-11T12:13:14.015Z | 第 1987 | 1987-01-01T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 第 5 | 0005-01-01T00:00:00.000Z |
+| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 第 1987 | 1986-12-29T00:00:00.000Z |
+| | | 0005-01-01T12:13:14.015Z | 第 4 | 0003-12-29T00:00:00.000Z |
+| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 第 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第 2 | 2019-04-01T00:00:00.000Z |
+| | QQQ | 2019-01-01T12:13:14.015Z | 第一刻 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第二刻 | 2019-04-01T00:00:00.000Z |
+| | QQQQ | 2019-01-01T12:13:14.015Z | 第一刻鐘 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第二刻鐘 | 2019-04-01T00:00:00.000Z |
+| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
+| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 第 1 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第 2 | 2019-04-01T00:00:00.000Z |
+| | qqq | 2019-01-01T12:13:14.015Z | 第一刻 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第二刻 | 2019-04-01T00:00:00.000Z |
+| | qqqq | 2019-01-01T12:13:14.015Z | 第一刻鐘 | 2019-01-01T00:00:00.000Z |
+| | | 2019-04-01T12:13:14.015Z | 第二刻鐘 | 2019-04-01T00:00:00.000Z |
+| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 第 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 第 7 | 2019-07-01T00:00:00.000Z |
+| | MMM | 2019-02-11T12:13:14.015Z | 2 月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 月 | 2019-07-01T00:00:00.000Z |
+| | MMMM | 2019-02-11T12:13:14.015Z | 二月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 七月 | 2019-07-01T00:00:00.000Z |
+| | MMMMM | 2019-02-11T12:13:14.015Z | 二 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 七 | 2019-07-01T00:00:00.000Z |
+| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 第 2 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 第 7 | 2019-07-01T00:00:00.000Z |
+| | LLL | 2019-02-11T12:13:14.015Z | 2 月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 7 月 | 2019-07-01T00:00:00.000Z |
+| | LLLL | 2019-02-11T12:13:14.015Z | 二月 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 七月 | 2019-07-01T00:00:00.000Z |
+| | LLLLL | 2019-02-11T12:13:14.015Z | 二 | 2019-02-01T00:00:00.000Z |
+| | | 2019-07-10T12:13:14.015Z | 七 | 2019-07-01T00:00:00.000Z |
+| Local week of year | wo | 2019-01-01T12:13:14.015Z | 第 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 第 48 | 2019-11-25T00:00:00.000Z |
+| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 第 1 | 2018-12-31T00:00:00.000Z |
+| | | 2019-12-01T12:13:14.015Z | 第 48 | 2019-11-25T00:00:00.000Z |
+| Day of month | do | 2019-02-11T12:13:14.015Z | 11 日 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-28T12:13:14.015Z | 28 日 | 2019-02-28T00:00:00.000Z |
+| Day of year | Do | 2019-02-11T12:13:14.015Z | 第 42 | 2019-02-11T00:00:00.000Z |
+| | | 2019-12-31T12:13:14.015Z | 第 365 | 2019-12-31T00:00:00.000Z |
+| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | 週一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 週五 | 2019-02-15T00:00:00.000Z |
+| | EE | 2019-02-11T12:13:14.015Z | 週一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 週五 | 2019-02-15T00:00:00.000Z |
+| | EEE | 2019-02-11T12:13:14.015Z | 週一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 週五 | 2019-02-15T00:00:00.000Z |
+| | EEEE | 2019-02-11T12:13:14.015Z | 星期一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 星期五 | 2019-02-15T00:00:00.000Z |
+| | EEEEE | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| | EEEEEE | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 第 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 第 5 | 2019-02-15T00:00:00.000Z |
+| | iii | 2019-02-11T12:13:14.015Z | 週一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 週五 | 2019-02-15T00:00:00.000Z |
+| | iiii | 2019-02-11T12:13:14.015Z | 星期一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 星期五 | 2019-02-15T00:00:00.000Z |
+| | iiiii | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| | iiiiii | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 第 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 第 5 | 2019-02-15T00:00:00.000Z |
+| | eee | 2019-02-11T12:13:14.015Z | 週一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 週五 | 2019-02-15T00:00:00.000Z |
+| | eeee | 2019-02-11T12:13:14.015Z | 星期一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 星期五 | 2019-02-15T00:00:00.000Z |
+| | eeeee | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| | eeeeee | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 第 1 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 第 5 | 2019-02-15T00:00:00.000Z |
+| | ccc | 2019-02-11T12:13:14.015Z | 週一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 週五 | 2019-02-15T00:00:00.000Z |
+| | cccc | 2019-02-11T12:13:14.015Z | 星期一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 星期五 | 2019-02-15T00:00:00.000Z |
+| | ccccc | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| | cccccc | 2019-02-11T12:13:14.015Z | 一 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-15T12:13:14.015Z | 五 | 2019-02-15T00:00:00.000Z |
+| AM, PM | a | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | aa | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | aaa | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | aaaa | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | aaaaa | 2019-02-11T11:13:14.015Z | 上 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上 | 2019-02-11T00:00:00.000Z |
+| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | bb | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | bbb | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | bbbb | 2019-02-11T11:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上午 | 2019-02-11T00:00:00.000Z |
+| | bbbbb | 2019-02-11T11:13:14.015Z | 上 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 下 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 上 | 2019-02-11T00:00:00.000Z |
+| Flexible day period | B | 2019-02-11T11:13:14.015Z | 早晨 | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | 中午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚上 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜間 | Invalid Date |
+| | BB | 2019-02-11T11:13:14.015Z | 早晨 | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | 中午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚上 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜間 | Invalid Date |
+| | BBB | 2019-02-11T11:13:14.015Z | 早晨 | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | 中午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚上 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜間 | Invalid Date |
+| | BBBB | 2019-02-11T11:13:14.015Z | 早晨 | Invalid Date |
+| | | 2019-02-11T14:13:14.015Z | 中午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚上 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜間 | Invalid Date |
+| | BBBBB | 2019-02-11T11:13:14.015Z | 早 | 2019-02-11T00:00:00.000Z |
+| | | 2019-02-11T14:13:14.015Z | 下午 | 2019-02-11T12:00:00.000Z |
+| | | 2019-02-11T19:13:14.015Z | 晚 | 2019-02-11T17:00:00.000Z |
+| | | 2019-02-11T02:13:14.015Z | 夜 | Invalid Date |
+| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11 時 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 時 | 2019-02-11T23:00:00.000Z |
+| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11 時 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 時 | 2019-02-11T23:00:00.000Z |
+| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11 時 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 11 時 | 2019-02-11T23:00:00.000Z |
+| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11 時 | 2019-02-11T11:00:00.000Z |
+| | | 2019-02-11T23:13:14.015Z | 23 時 | 2019-02-11T23:00:00.000Z |
+| Minute | mo | 2019-01-01T12:01:14.015Z | 1 分 | 2019-01-01T12:01:00.000Z |
+| | | 2019-04-01T12:55:14.015Z | 55 分 | 2019-04-01T12:55:00.000Z |
+| Second | so | 2019-01-01T12:13:01.015Z | 1 秒 | 2019-01-01T12:13:01.000Z |
+| | | 2019-04-01T12:13:55.015Z | 55 秒 | 2019-04-01T12:13:55.000Z |
+| Long localized date | P | 1987-02-11T12:13:14.015Z | 87-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 53-05-29 | 1453-05-29T00:00:00.000Z |
+| | PP | 1987-02-11T12:13:14.015Z | 1987-02-11 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 | 1453-05-29T00:00:00.000Z |
+| | PPP | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 | 1453-05-29T00:00:00.000Z |
+| | PPPP | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 星期三 | 1987-02-11T00:00:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 星期日 | 1453-05-29T00:00:00.000Z |
+| Long localized time | p | 1987-02-11T12:13:14.015Z | 下午 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 下午 11:59 | 1453-05-29T23:59:00.000Z |
+| | pp | 1987-02-11T12:13:14.015Z | 下午 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 下午 11:59:59 | 1453-05-29T23:59:59.000Z |
+| | ppp | 1987-02-11T12:13:14.015Z | GMT+0 下午 12:13:14 | Errored |
+| | | 1453-05-29T23:59:59.999Z | GMT+0 下午 11:59:59 | Errored |
+| | pppp | 1987-02-11T12:13:14.015Z | GMT+00:00 下午 12:13:14 | Errored |
+| | | 1453-05-29T23:59:59.999Z | GMT+00:00 下午 11:59:59 | Errored |
+| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 87-02-11 下午 12:13 | 1987-02-11T12:13:00.000Z |
+| | | 1453-05-29T23:59:59.999Z | 53-05-29 下午 11:59 | 1453-05-29T23:59:00.000Z |
+| | PPpp | 1987-02-11T12:13:14.015Z | 1987-02-11 下午 12:13:14 | 1987-02-11T12:13:14.000Z |
+| | | 1453-05-29T23:59:59.999Z | 1453-05-29 下午 11:59:59 | 1453-05-29T23:59:59.000Z |
+| | PPPppp | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 GMT+0 下午 12:13:14 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 GMT+0 下午 11:59:59 | Errored |
+| | PPPPpppp | 1987-02-11T12:13:14.015Z | 1987 年 2 月 11 日 星期三 GMT+00:00 下午 12:13:14 | Errored |
+| | | 1453-05-29T23:59:59.999Z | 1453 年 5 月 29 日 星期日 GMT+00:00 下午 11:59:59 | Errored |
+
+## `formatDistance`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `includeSeconds: true` | `addSuffix: true` |
+| ------------------------ | ----------- | ---------------------- | ----------------- |
+| 2006-01-01T00:00:00.000Z | 大約 6 年 | 大約 6 年 | 大約 6 年內 |
+| 2005-01-01T00:00:00.000Z | 大約 5 年 | 大約 5 年 | 大約 5 年內 |
+| 2004-01-01T00:00:00.000Z | 大約 4 年 | 大約 4 年 | 大約 4 年內 |
+| 2003-01-01T00:00:00.000Z | 大約 3 年 | 大約 3 年 | 大約 3 年內 |
+| 2002-01-01T00:00:00.000Z | 大約 2 年 | 大約 2 年 | 大約 2 年內 |
+| 2001-06-01T00:00:00.000Z | 超過 1 年 | 超過 1 年 | 超過 1 年內 |
+| 2001-02-01T00:00:00.000Z | 大約 1 年 | 大約 1 年 | 大約 1 年內 |
+| 2001-01-01T00:00:00.000Z | 大約 1 年 | 大約 1 年 | 大約 1 年內 |
+| 2000-06-01T00:00:00.000Z | 5 個月 | 5 個月 | 5 個月內 |
+| 2000-03-01T00:00:00.000Z | 2 個月 | 2 個月 | 2 個月內 |
+| 2000-02-01T00:00:00.000Z | 大約 1 個月 | 大約 1 個月 | 大約 1 個月內 |
+| 2000-01-15T00:00:00.000Z | 14 天 | 14 天 | 14 天內 |
+| 2000-01-02T00:00:00.000Z | 1 天 | 1 天 | 1 天內 |
+| 2000-01-01T06:00:00.000Z | 大約 6 小時 | 大約 6 小時 | 大約 6 小時內 |
+| 2000-01-01T01:00:00.000Z | 大約 1 小時 | 大約 1 小時 | 大約 1 小時內 |
+| 2000-01-01T00:45:00.000Z | 大約 1 小時 | 大約 1 小時 | 大約 1 小時內 |
+| 2000-01-01T00:30:00.000Z | 30 分鐘 | 30 分鐘 | 30 分鐘內 |
+| 2000-01-01T00:15:00.000Z | 15 分鐘 | 15 分鐘 | 15 分鐘內 |
+| 2000-01-01T00:01:00.000Z | 1 分鐘 | 1 分鐘 | 1 分鐘內 |
+| 2000-01-01T00:00:25.000Z | 少於 1 分鐘 | 半分鐘 | 少於 1 分鐘內 |
+| 2000-01-01T00:00:15.000Z | 少於 1 分鐘 | 少於 20 秒 | 少於 1 分鐘內 |
+| 2000-01-01T00:00:05.000Z | 少於 1 分鐘 | 少於 10 秒 | 少於 1 分鐘內 |
+| 2000-01-01T00:00:00.000Z | 少於 1 分鐘 | 少於 5 秒 | 少於 1 分鐘前 |
+| 1999-12-31T23:59:55.000Z | 少於 1 分鐘 | 少於 10 秒 | 少於 1 分鐘前 |
+| 1999-12-31T23:59:45.000Z | 少於 1 分鐘 | 少於 20 秒 | 少於 1 分鐘前 |
+| 1999-12-31T23:59:35.000Z | 少於 1 分鐘 | 半分鐘 | 少於 1 分鐘前 |
+| 1999-12-31T23:59:00.000Z | 1 分鐘 | 1 分鐘 | 1 分鐘前 |
+| 1999-12-31T23:45:00.000Z | 15 分鐘 | 15 分鐘 | 15 分鐘前 |
+| 1999-12-31T23:30:00.000Z | 30 分鐘 | 30 分鐘 | 30 分鐘前 |
+| 1999-12-31T23:15:00.000Z | 大約 1 小時 | 大約 1 小時 | 大約 1 小時前 |
+| 1999-12-31T23:00:00.000Z | 大約 1 小時 | 大約 1 小時 | 大約 1 小時前 |
+| 1999-12-31T18:00:00.000Z | 大約 6 小時 | 大約 6 小時 | 大約 6 小時前 |
+| 1999-12-30T00:00:00.000Z | 2 天 | 2 天 | 2 天前 |
+| 1999-12-15T00:00:00.000Z | 17 天 | 17 天 | 17 天前 |
+| 1999-12-01T00:00:00.000Z | 大約 1 個月 | 大約 1 個月 | 大約 1 個月前 |
+| 1999-11-01T00:00:00.000Z | 2 個月 | 2 個月 | 2 個月前 |
+| 1999-06-01T00:00:00.000Z | 7 個月 | 7 個月 | 7 個月前 |
+| 1999-01-01T00:00:00.000Z | 大約 1 年 | 大約 1 年 | 大約 1 年前 |
+| 1998-12-01T00:00:00.000Z | 大約 1 年 | 大約 1 年 | 大約 1 年前 |
+| 1998-06-01T00:00:00.000Z | 超過 1 年 | 超過 1 年 | 超過 1 年前 |
+| 1998-01-01T00:00:00.000Z | 大約 2 年 | 大約 2 年 | 大約 2 年前 |
+| 1997-01-01T00:00:00.000Z | 大約 3 年 | 大約 3 年 | 大約 3 年前 |
+| 1996-01-01T00:00:00.000Z | 大約 4 年 | 大約 4 年 | 大約 4 年前 |
+| 1995-01-01T00:00:00.000Z | 大約 5 年 | 大約 5 年 | 大約 5 年前 |
+| 1994-01-01T00:00:00.000Z | 大約 6 年 | 大約 6 年 | 大約 6 年前 |
+
+## `formatDistanceStrict`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
+| ------------------------ | ------- | ----------------- | ------------------------------ |
+| 2006-01-01T00:00:00.000Z | 6 年 | 6 年內 | 52608 小時 |
+| 2005-01-01T00:00:00.000Z | 5 年 | 5 年內 | 43848 小時 |
+| 2004-01-01T00:00:00.000Z | 4 年 | 4 年內 | 35064 小時 |
+| 2003-01-01T00:00:00.000Z | 3 年 | 3 年內 | 26304 小時 |
+| 2002-01-01T00:00:00.000Z | 2 年 | 2 年內 | 17544 小時 |
+| 2001-06-01T00:00:00.000Z | 1 年 | 1 年內 | 12408 小時 |
+| 2001-02-01T00:00:00.000Z | 1 年 | 1 年內 | 9528 小時 |
+| 2001-01-01T00:00:00.000Z | 1 年 | 1 年內 | 8784 小時 |
+| 2000-06-01T00:00:00.000Z | 5 個月 | 5 個月內 | 3648 小時 |
+| 2000-03-01T00:00:00.000Z | 2 個月 | 2 個月內 | 1440 小時 |
+| 2000-02-01T00:00:00.000Z | 1 個月 | 1 個月內 | 744 小時 |
+| 2000-01-15T00:00:00.000Z | 14 天 | 14 天內 | 336 小時 |
+| 2000-01-02T00:00:00.000Z | 1 天 | 1 天內 | 24 小時 |
+| 2000-01-01T06:00:00.000Z | 6 小時 | 6 小時內 | 6 小時 |
+| 2000-01-01T01:00:00.000Z | 1 小時 | 1 小時內 | 1 小時 |
+| 2000-01-01T00:45:00.000Z | 45 分鐘 | 45 分鐘內 | 1 小時 |
+| 2000-01-01T00:30:00.000Z | 30 分鐘 | 30 分鐘內 | 1 小時 |
+| 2000-01-01T00:15:00.000Z | 15 分鐘 | 15 分鐘內 | 0 小時 |
+| 2000-01-01T00:01:00.000Z | 1 分鐘 | 1 分鐘內 | 0 小時 |
+| 2000-01-01T00:00:25.000Z | 25 秒 | 25 秒內 | 0 小時 |
+| 2000-01-01T00:00:15.000Z | 15 秒 | 15 秒內 | 0 小時 |
+| 2000-01-01T00:00:05.000Z | 5 秒 | 5 秒內 | 0 小時 |
+| 2000-01-01T00:00:00.000Z | 0 秒 | 0 秒前 | 0 小時 |
+| 1999-12-31T23:59:55.000Z | 5 秒 | 5 秒前 | 0 小時 |
+| 1999-12-31T23:59:45.000Z | 15 秒 | 15 秒前 | 0 小時 |
+| 1999-12-31T23:59:35.000Z | 25 秒 | 25 秒前 | 0 小時 |
+| 1999-12-31T23:59:00.000Z | 1 分鐘 | 1 分鐘前 | 0 小時 |
+| 1999-12-31T23:45:00.000Z | 15 分鐘 | 15 分鐘前 | 0 小時 |
+| 1999-12-31T23:30:00.000Z | 30 分鐘 | 30 分鐘前 | 1 小時 |
+| 1999-12-31T23:15:00.000Z | 45 分鐘 | 45 分鐘前 | 1 小時 |
+| 1999-12-31T23:00:00.000Z | 1 小時 | 1 小時前 | 1 小時 |
+| 1999-12-31T18:00:00.000Z | 6 小時 | 6 小時前 | 6 小時 |
+| 1999-12-30T00:00:00.000Z | 2 天 | 2 天前 | 48 小時 |
+| 1999-12-15T00:00:00.000Z | 17 天 | 17 天前 | 408 小時 |
+| 1999-12-01T00:00:00.000Z | 1 個月 | 1 個月前 | 744 小時 |
+| 1999-11-01T00:00:00.000Z | 2 個月 | 2 個月前 | 1464 小時 |
+| 1999-06-01T00:00:00.000Z | 7 個月 | 7 個月前 | 5136 小時 |
+| 1999-01-01T00:00:00.000Z | 1 年 | 1 年前 | 8760 小時 |
+| 1998-12-01T00:00:00.000Z | 1 年 | 1 年前 | 9504 小時 |
+| 1998-06-01T00:00:00.000Z | 2 年 | 2 年前 | 13896 小時 |
+| 1998-01-01T00:00:00.000Z | 2 年 | 2 年前 | 17520 小時 |
+| 1997-01-01T00:00:00.000Z | 3 年 | 3 年前 | 26280 小時 |
+| 1996-01-01T00:00:00.000Z | 4 年 | 4 年前 | 35064 小時 |
+| 1995-01-01T00:00:00.000Z | 5 年 | 5 年前 | 43824 小時 |
+| 1994-01-01T00:00:00.000Z | 6 年 | 6 年前 | 52584 小時 |
+
+## `formatRelative`
+
+If now is January 1st, 2000, 00:00.
+
+| Date | Result |
+| ------------------------ | --------------------- |
+| 2000-01-10T00:00:00.000Z | 00-01-10 |
+| 2000-01-05T00:00:00.000Z | 下個星期三 上午 12:00 |
+| 2000-01-02T00:00:00.000Z | 明天 上午 12:00 |
+| 2000-01-01T00:00:00.000Z | 今天 上午 12:00 |
+| 1999-12-31T00:00:00.000Z | 昨天 上午 12:00 |
+| 1999-12-27T00:00:00.000Z | 上個星期一 上午 12:00 |
+| 1999-12-21T00:00:00.000Z | 99-12-21 |
diff --git a/date-fns/src/max/benchmark.js b/date-fns/src/max/benchmark.js
new file mode 100644
index 0000000..6726268
--- /dev/null
+++ b/date-fns/src/max/benchmark.js
@@ -0,0 +1,27 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import max from '.'
+import moment from 'moment'
+
+suite(
+ 'max',
+ function() {
+ benchmark('date-fns', function() {
+ return max([this.dateA, this.dateB])
+ })
+
+ benchmark('Moment.js', function() {
+ return moment.max(this.momentA, this.momentB)
+ })
+ },
+ {
+ setup: function() {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+ }
+)
diff --git a/date-fns/src/max/index.d.ts b/date-fns/src/max/index.d.ts
new file mode 100644
index 0000000..733a96e
--- /dev/null
+++ b/date-fns/src/max/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { max } from 'date-fns'
+export default max
diff --git a/date-fns/src/max/index.js.flow b/date-fns/src/max/index.js.flow
new file mode 100644
index 0000000..8543909
--- /dev/null
+++ b/date-fns/src/max/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (datesArray: (Date | number)[]) => Date
diff --git a/date-fns/src/max/index.ts b/date-fns/src/max/index.ts
new file mode 100644
index 0000000..1c74453
--- /dev/null
+++ b/date-fns/src/max/index.ts
@@ -0,0 +1,69 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name max
+ * @category Common Helpers
+ * @summary Return the latest of the given dates.
+ *
+ * @description
+ * Return the latest of the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - `max` function now accepts an array of dates rather than spread arguments.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ * var date1 = new Date(1989, 6, 10)
+ * var date2 = new Date(1987, 1, 11)
+ * var maxDate = max(date1, date2)
+ *
+ * // v2.0.0 onward:
+ * var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]
+ * var maxDate = max(dates)
+ * ```
+ *
+ * @param {Date[]|Number[]} datesArray - the dates to compare
+ * @returns {Date} the latest of the dates
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which of these dates is the latest?
+ * var result = max([
+ * new Date(1989, 6, 10),
+ * new Date(1987, 1, 11),
+ * new Date(1995, 6, 2),
+ * new Date(1990, 0, 1)
+ * ])
+ * //=> Sun Jul 02 1995 00:00:00
+ */
+export default function max(dirtyDatesArray: Date[] | string[] | number[]): Date {
+ requiredArgs(1, arguments)
+
+ let datesArray
+ // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method
+ if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {
+ datesArray = dirtyDatesArray
+
+ // If `dirtyDatesArray` is Array-like Object, convert to Array.
+ } else if (typeof dirtyDatesArray === 'object' && dirtyDatesArray !== null) {
+ datesArray = Array.prototype.slice.call(dirtyDatesArray)
+ } else {
+ // `dirtyDatesArray` is non-iterable, return Invalid Date
+ return new Date(NaN)
+ }
+
+ let result: Date | undefined
+ datesArray.forEach(function(dirtyDate) {
+ const currentDate = toDate(dirtyDate)
+
+ if (result === undefined || result < currentDate || isNaN(Number(currentDate))) {
+ result = currentDate
+ }
+ })
+
+ return result || new Date(NaN)
+}
diff --git a/date-fns/src/max/test.ts b/date-fns/src/max/test.ts
new file mode 100644
index 0000000..a394457
--- /dev/null
+++ b/date-fns/src/max/test.ts
@@ -0,0 +1,92 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import max from '.'
+
+describe('max', function() {
+ function isInvalidDate(dirtyDate: Date | number): boolean {
+ return dirtyDate instanceof Date && isNaN(Number(dirtyDate))
+ }
+
+ it('returns the latest date', function() {
+ const result = max([
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ ])
+ assert.deepEqual(result, new Date(1989, 6 /* Jul */, 10))
+ })
+
+ it('accepts array with more than 2 entries', function() {
+ const result = max([
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1995, 6 /* Jul */, 2),
+ new Date(1990, 0 /* Jan */, 1)
+ ])
+ assert.deepEqual(result, new Date(1995, 6 /* Jul */, 2))
+ })
+
+ it('accepts timestamps', function() {
+ const result = max([
+ new Date(1989, 6 /* Jul */, 10).getTime(),
+ new Date(1987, 1 /* Feb */, 11).getTime()
+ ])
+ assert.deepEqual(result, new Date(1989, 6 /* Jul */, 10))
+ })
+
+ it('returns `Invalid Date` if any given date is invalid', function() {
+ const result = max([
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(NaN),
+ new Date(1987, 1 /* Feb */, 11)
+ ])
+ assert(isInvalidDate(result))
+ })
+
+ it('returns `Invalid Date` if any given value is undefined', function() {
+ const result = max([
+ new Date(1989, 6 /* Jul */, 10),
+ // @ts-expect-error
+ undefined,
+ new Date(1987, 1 /* Feb */, 11)
+ ])
+ assert(isInvalidDate(result))
+ })
+
+ it('returns `Invalid Date` for empty array', function() {
+ const result = max([])
+ assert(isInvalidDate(result))
+ })
+
+ it('converts Array-like objects into Array', function() {
+ // @ts-expect-error
+ const result = max({
+ '0': new Date(1989, 6 /* Jul */, 10),
+ '1': new Date(1987, 1 /* Feb */, 11),
+ length: 2
+ })
+ assert.deepEqual(result, new Date(1989, 6 /* Jul */, 10))
+ })
+
+ it('converts iterable objects into Array', function() {
+ const result = max(
+ // @ts-expect-error
+ new Set([
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11)
+ ])
+ )
+ assert.deepEqual(result, new Date(1989, 6 /* Jul */, 10))
+ })
+
+ it('returns `Invalid Date` if given a non-iterable value', function() {
+ // @ts-expect-error
+ const result = max(undefined)
+ assert(isInvalidDate(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(max.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/milliseconds/index.d.ts b/date-fns/src/milliseconds/index.d.ts
new file mode 100644
index 0000000..6927b52
--- /dev/null
+++ b/date-fns/src/milliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { milliseconds } from 'date-fns'
+export default milliseconds
diff --git a/date-fns/src/milliseconds/index.js.flow b/date-fns/src/milliseconds/index.js.flow
new file mode 100644
index 0000000..5ca1b36
--- /dev/null
+++ b/date-fns/src/milliseconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (duration: Duration) => number
diff --git a/date-fns/src/milliseconds/index.ts b/date-fns/src/milliseconds/index.ts
new file mode 100644
index 0000000..6519229
--- /dev/null
+++ b/date-fns/src/milliseconds/index.ts
@@ -0,0 +1,62 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { Duration } from '../types'
+
+// Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.
+// 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days
+const daysInYear = 365.2425
+
+/**
+ * @name milliseconds
+ * @category Millisecond Helpers
+ * @summary
+ * Returns the number of milliseconds in the specified, years, months, weeks, days, hours, minutes and seconds.
+ *
+ * @description
+ * Returns the number of milliseconds in the specified, years, months, weeks, days, hours, minutes and seconds.
+ *
+ * One years equals 365.2425 days according to the formula:
+ *
+ * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.
+ * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days
+ *
+ * One month is a year divided by 12.
+ *
+ * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {number} the milliseconds
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // 1 year in milliseconds
+ * milliseconds({ years: 1 })
+ * //=> 31556952000
+ *
+ * // 3 months in milliseconds
+ * milliseconds({ months: 3 })
+ * //=> 7889238000
+ */
+export default function milliseconds({
+ years,
+ months,
+ weeks,
+ days,
+ hours,
+ minutes,
+ seconds,
+}: Duration): number {
+ requiredArgs(1, arguments)
+
+ let totalDays = 0
+
+ if (years) totalDays += years * daysInYear
+ if (months) totalDays += months * (daysInYear / 12)
+ if (weeks) totalDays += weeks * 7
+ if (days) totalDays += days
+
+ let totalSeconds = totalDays * 24 * 60 * 60
+
+ if (hours) totalSeconds += hours * 60 * 60
+ if (minutes) totalSeconds += minutes * 60
+ if (seconds) totalSeconds += seconds
+
+ return Math.round(totalSeconds * 1000)
+}
diff --git a/date-fns/src/milliseconds/test.ts b/date-fns/src/milliseconds/test.ts
new file mode 100644
index 0000000..e576c23
--- /dev/null
+++ b/date-fns/src/milliseconds/test.ts
@@ -0,0 +1,65 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import milliseconds from '.'
+
+describe('milliseconds', () => {
+ it('converts years to milliseconds', () => {
+ const result = milliseconds({ years: 2 })
+ assert(result === 63113904000)
+ })
+
+ it('converts months to milliseconds', () => {
+ const result = milliseconds({ months: 3 })
+ assert(result === 7889238000)
+ })
+
+ it('converts weeks to milliseconds', () => {
+ const result = milliseconds({ weeks: 2 })
+ assert(result === 1209600000)
+ })
+
+ it('converts days to milliseconds', () => {
+ const result = milliseconds({ days: 5 })
+ assert(result === 432000000)
+ })
+
+ it('converts hours to milliseconds', () => {
+ const result = milliseconds({ hours: 2 })
+ assert(result === 7200000)
+ })
+
+ it('converts minutes to milliseconds', () => {
+ const result = milliseconds({ minutes: 5 })
+ assert(result === 300000)
+ })
+
+ it('converts seconds to milliseconds', () => {
+ const result = milliseconds({ seconds: 10 })
+ assert(result === 10000)
+ })
+
+ it('sums all the duration values', () => {
+ const result = milliseconds({
+ years: 2,
+ months: 3,
+ weeks: 2,
+ days: 5,
+ hours: 2,
+ minutes: 5,
+ seconds: 10
+ })
+ assert(result === 72652252000)
+ })
+
+ it('returns 0 for an empty duration', () => {
+ const result = milliseconds({})
+ assert(result === 0)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ // @ts-expect-error
+ assert.throws(milliseconds.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/millisecondsToHours/index.d.ts b/date-fns/src/millisecondsToHours/index.d.ts
new file mode 100644
index 0000000..af90bf8
--- /dev/null
+++ b/date-fns/src/millisecondsToHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { millisecondsToHours } from 'date-fns'
+export default millisecondsToHours
diff --git a/date-fns/src/millisecondsToHours/index.js.flow b/date-fns/src/millisecondsToHours/index.js.flow
new file mode 100644
index 0000000..c998756
--- /dev/null
+++ b/date-fns/src/millisecondsToHours/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (milliseconds: number) => number
diff --git a/date-fns/src/millisecondsToHours/index.ts b/date-fns/src/millisecondsToHours/index.ts
new file mode 100644
index 0000000..a843a4d
--- /dev/null
+++ b/date-fns/src/millisecondsToHours/index.ts
@@ -0,0 +1,31 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { millisecondsInHour } from '../constants/index'
+
+/**
+ * @name millisecondsToHours
+ * @category Conversion Helpers
+ * @summary Convert milliseconds to hours.
+ *
+ * @description
+ * Convert a number of milliseconds to a full number of hours.
+ *
+ * @param {number} milliseconds - number of milliseconds to be converted
+ *
+ * @returns {number} the number of milliseconds converted in hours
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 7200000 milliseconds to hours:
+ * const result = millisecondsToHours(7200000)
+ * //=> 2
+ *
+ * @example
+ * // It uses floor rounding:
+ * const result = millisecondsToHours(7199999)
+ * //=> 1
+ */
+export default function millisecondsToHours(milliseconds: number): number {
+ requiredArgs(1, arguments)
+ const hours = milliseconds / millisecondsInHour
+ return Math.floor(hours)
+}
diff --git a/date-fns/src/millisecondsToHours/test.ts b/date-fns/src/millisecondsToHours/test.ts
new file mode 100644
index 0000000..5fed366
--- /dev/null
+++ b/date-fns/src/millisecondsToHours/test.ts
@@ -0,0 +1,22 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import millisecondsToHours from '.'
+
+describe('millisecondsToHours', function () {
+
+ it('converts milliseconds to hours', function () {
+ assert(millisecondsToHours(3600000) === 1)
+ assert(millisecondsToHours(7200000) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(millisecondsToHours(3600001) === 1)
+ assert(millisecondsToHours(3599999) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(millisecondsToHours(3600000.5) === 1)
+ assert(millisecondsToHours(0) === 0)
+ })
+})
diff --git a/date-fns/src/millisecondsToMinutes/index.d.ts b/date-fns/src/millisecondsToMinutes/index.d.ts
new file mode 100644
index 0000000..ea00809
--- /dev/null
+++ b/date-fns/src/millisecondsToMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { millisecondsToMinutes } from 'date-fns'
+export default millisecondsToMinutes
diff --git a/date-fns/src/millisecondsToMinutes/index.js.flow b/date-fns/src/millisecondsToMinutes/index.js.flow
new file mode 100644
index 0000000..c998756
--- /dev/null
+++ b/date-fns/src/millisecondsToMinutes/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (milliseconds: number) => number
diff --git a/date-fns/src/millisecondsToMinutes/index.ts b/date-fns/src/millisecondsToMinutes/index.ts
new file mode 100644
index 0000000..b4529f2
--- /dev/null
+++ b/date-fns/src/millisecondsToMinutes/index.ts
@@ -0,0 +1,31 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { millisecondsInMinute } from '../constants/index'
+
+/**
+ * @name millisecondsToMinutes
+ * @category Conversion Helpers
+ * @summary Convert milliseconds to minutes.
+ *
+ * @description
+ * Convert a number of milliseconds to a full number of minutes.
+ *
+ * @param {number} milliseconds - number of milliseconds to be converted.
+ *
+ * @returns {number} the number of milliseconds converted in minutes
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 60000 milliseconds to minutes:
+ * const result = millisecondsToMinutes(60000)
+ * //=> 1
+ *
+ * @example
+ * // It uses floor rounding:
+ * const result = millisecondsToMinutes(119999)
+ * //=> 1
+ */
+export default function millisecondsToMinutes(milliseconds: number): number {
+ requiredArgs(1, arguments)
+ const minutes = milliseconds / millisecondsInMinute
+ return Math.floor(minutes)
+}
diff --git a/date-fns/src/millisecondsToMinutes/test.ts b/date-fns/src/millisecondsToMinutes/test.ts
new file mode 100644
index 0000000..3d14345
--- /dev/null
+++ b/date-fns/src/millisecondsToMinutes/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import millisecondsToMinutes from '.'
+
+describe('millisecondsToMinutes', () => {
+ it('converts milliseconds to minutes', function () {
+ assert(millisecondsToMinutes(60000) === 1)
+ assert(millisecondsToMinutes(120000) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(millisecondsToMinutes(60001) === 1)
+ assert(millisecondsToMinutes(59999) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(millisecondsToMinutes(60000.5) === 1)
+ assert(millisecondsToMinutes(0) === 0)
+ })
+})
diff --git a/date-fns/src/millisecondsToSeconds/index.d.ts b/date-fns/src/millisecondsToSeconds/index.d.ts
new file mode 100644
index 0000000..d761abd
--- /dev/null
+++ b/date-fns/src/millisecondsToSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { millisecondsToSeconds } from 'date-fns'
+export default millisecondsToSeconds
diff --git a/date-fns/src/millisecondsToSeconds/index.js.flow b/date-fns/src/millisecondsToSeconds/index.js.flow
new file mode 100644
index 0000000..c998756
--- /dev/null
+++ b/date-fns/src/millisecondsToSeconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (milliseconds: number) => number
diff --git a/date-fns/src/millisecondsToSeconds/index.ts b/date-fns/src/millisecondsToSeconds/index.ts
new file mode 100644
index 0000000..ea35328
--- /dev/null
+++ b/date-fns/src/millisecondsToSeconds/index.ts
@@ -0,0 +1,31 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { millisecondsInSecond } from '../constants/index'
+
+/**
+ * @name millisecondsToSeconds
+ * @category Conversion Helpers
+ * @summary Convert milliseconds to seconds.
+ *
+ * @description
+ * Convert a number of milliseconds to a full number of seconds.
+ *
+ * @param {number} milliseconds - number of milliseconds to be converted
+ *
+ * @returns {number} the number of milliseconds converted in seconds
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 1000 miliseconds to seconds:
+ * const result = millisecondsToSeconds(1000)
+ * //=> 1
+ *
+ * @example
+ * // It uses floor rounding:
+ * const result = millisecondsToSeconds(1999)
+ * //=> 1
+ */
+export default function millisecondsToSeconds(milliseconds: number): number {
+ requiredArgs(1, arguments)
+ const seconds = milliseconds / millisecondsInSecond
+ return Math.floor(seconds)
+}
diff --git a/date-fns/src/millisecondsToSeconds/test.ts b/date-fns/src/millisecondsToSeconds/test.ts
new file mode 100644
index 0000000..6e3c15b
--- /dev/null
+++ b/date-fns/src/millisecondsToSeconds/test.ts
@@ -0,0 +1,22 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import millisecondsToSeconds from '.'
+
+describe('millisecondsToSeconds', function () {
+
+ it('converts milliseconds to seconds', function () {
+ assert(millisecondsToSeconds(1000) === 1)
+ assert(millisecondsToSeconds(2000) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(millisecondsToSeconds(1001) === 1)
+ assert(millisecondsToSeconds(999) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(millisecondsToSeconds(1000.5) === 1)
+ assert(millisecondsToSeconds(0) === 0)
+ })
+})
diff --git a/date-fns/src/min/benchmark.js b/date-fns/src/min/benchmark.js
new file mode 100644
index 0000000..e2a997b
--- /dev/null
+++ b/date-fns/src/min/benchmark.js
@@ -0,0 +1,27 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import min from '.'
+import moment from 'moment'
+
+suite(
+ 'min',
+ function() {
+ benchmark('date-fns', function() {
+ return min([this.dateA, this.dateB])
+ })
+
+ benchmark('Moment.js', function() {
+ return moment.min(this.momentA, this.momentB)
+ })
+ },
+ {
+ setup: function() {
+ this.dateA = new Date()
+ this.momentA = moment()
+ this.dateB = new Date(this.dateA.getTime() + 604800000)
+ this.momentB = this.momentA.clone().add(7, 'days')
+ }
+ }
+)
diff --git a/date-fns/src/min/index.d.ts b/date-fns/src/min/index.d.ts
new file mode 100644
index 0000000..f7227e7
--- /dev/null
+++ b/date-fns/src/min/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { min } from 'date-fns'
+export default min
diff --git a/date-fns/src/min/index.js.flow b/date-fns/src/min/index.js.flow
new file mode 100644
index 0000000..8543909
--- /dev/null
+++ b/date-fns/src/min/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (datesArray: (Date | number)[]) => Date
diff --git a/date-fns/src/min/index.ts b/date-fns/src/min/index.ts
new file mode 100644
index 0000000..b29763d
--- /dev/null
+++ b/date-fns/src/min/index.ts
@@ -0,0 +1,73 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name min
+ * @category Common Helpers
+ * @summary Returns the earliest of the given dates.
+ *
+ * @description
+ * Returns the earliest of the given dates.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - `min` function now accepts an array of dates rather than spread arguments.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ * const date1 = new Date(1989, 6, 10)
+ * const date2 = new Date(1987, 1, 11)
+ * const minDate = min(date1, date2)
+ *
+ * // v2.0.0 onward:
+ * const dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]
+ * const minDate = min(dates)
+ * ```
+ *
+ * @param {Date[]|Number[]} datesArray - the dates to compare
+ * @returns {Date} - the earliest of the dates
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Which of these dates is the earliest?
+ * const result = min([
+ * new Date(1989, 6, 10),
+ * new Date(1987, 1, 11),
+ * new Date(1995, 6, 2),
+ * new Date(1990, 0, 1)
+ * ])
+ * //=> Wed Feb 11 1987 00:00:00
+ */
+export default function min(dirtyDatesArray: Date[] | number[]): Date {
+ requiredArgs(1, arguments)
+
+ let datesArray: Date[] | number[]
+ // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method
+ if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {
+ datesArray = dirtyDatesArray
+ // If `dirtyDatesArray` is Array-like Object, convert to Array.
+ } else if (typeof dirtyDatesArray === 'object' && dirtyDatesArray !== null) {
+ datesArray = Array.prototype.slice.call(dirtyDatesArray)
+ } else {
+ // `dirtyDatesArray` is non-iterable, return Invalid Date
+ return new Date(NaN)
+ }
+
+ let result: Date | undefined
+
+ datesArray.forEach(function (dirtyDate: Date | number) {
+ let currentDate = toDate(dirtyDate)
+
+ if (
+ result === undefined ||
+ result > currentDate ||
+ isNaN(currentDate.getDate())
+ ) {
+ result = currentDate
+ }
+ })
+
+ return result || new Date(NaN)
+}
diff --git a/date-fns/src/min/test.ts b/date-fns/src/min/test.ts
new file mode 100644
index 0000000..9bf83ad
--- /dev/null
+++ b/date-fns/src/min/test.ts
@@ -0,0 +1,93 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import min from '.'
+
+describe('min', () => {
+ const isInvalidDate = (dirtyDate: Date): boolean => {
+ return dirtyDate instanceof Date && isNaN(dirtyDate.getDate())
+ }
+
+ it('returns the earliest date', () => {
+ const result = min([
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11),
+ ])
+ assert.deepStrictEqual(result, new Date(1987, 1 /* Feb */, 11))
+ })
+
+ it('accepts array with more than 2 entries', () => {
+ const result = min([
+ new Date(1987, 1 /* Feb */, 11),
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1985, 6 /* Jul */, 2),
+ new Date(1990, 0 /* Jan */, 1),
+ ])
+ assert.deepStrictEqual(result, new Date(1985, 6 /* Jul */, 2))
+ })
+
+ it('accepts timestamps', () => {
+ const result = min([
+ new Date(1989, 6 /* Jul */, 10).getTime(),
+ new Date(1987, 1 /* Feb */, 11).getTime(),
+ ])
+ assert.deepStrictEqual(result, new Date(1987, 1 /* Feb */, 11))
+ })
+
+ it('returns `Invalid Date` if any given date is invalid', () => {
+ const result = min([
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(NaN),
+ new Date(1987, 1 /* Feb */, 11),
+ ])
+ assert(isInvalidDate(result))
+ })
+
+ it('returns `Invalid Date` if any given value is undefined', () => {
+ const result = min([
+ new Date(1989, 6 /* Jul */, 10),
+ // @ts-expect-error
+ undefined,
+ new Date(1987, 1 /* Feb */, 11),
+ ])
+ assert(isInvalidDate(result))
+ })
+
+ it('returns `Invalid Date` for empty array', () => {
+ const result = min([])
+ assert(isInvalidDate(result))
+ })
+
+ it('converts Array-like objects into Array', () => {
+ // @ts-expect-error
+ const result = min({
+ '0': new Date(1989, 6 /* Jul */, 10),
+ '1': new Date(1987, 1 /* Feb */, 11),
+ length: 2,
+ })
+ assert.deepStrictEqual(result, new Date(1987, 1 /* Feb */, 11))
+ })
+
+ it('converts iterable objects into Array', () => {
+ const result = min(
+ // @ts-expect-error
+ new Set([
+ new Date(1989, 6 /* Jul */, 10),
+ new Date(1987, 1 /* Feb */, 11),
+ ])
+ )
+ assert.deepStrictEqual(result, new Date(1987, 1 /* Feb */, 11))
+ })
+
+ it('returns `Invalid Date` if given a non-iterable value', () => {
+ // @ts-expect-error
+ const result = min(undefined)
+ assert(isInvalidDate(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ // @ts-expect-error
+ assert.throws(min.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/minutesToHours/index.d.ts b/date-fns/src/minutesToHours/index.d.ts
new file mode 100644
index 0000000..d29fb02
--- /dev/null
+++ b/date-fns/src/minutesToHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { minutesToHours } from 'date-fns'
+export default minutesToHours
diff --git a/date-fns/src/minutesToHours/index.js.flow b/date-fns/src/minutesToHours/index.js.flow
new file mode 100644
index 0000000..efb76c7
--- /dev/null
+++ b/date-fns/src/minutesToHours/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (minutes: number) => number
diff --git a/date-fns/src/minutesToHours/index.ts b/date-fns/src/minutesToHours/index.ts
new file mode 100644
index 0000000..9fd8cbb
--- /dev/null
+++ b/date-fns/src/minutesToHours/index.ts
@@ -0,0 +1,31 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { minutesInHour } from '../constants/index'
+
+/**
+ * @name minutesToHours
+ * @category Conversion Helpers
+ * @summary Convert minutes to hours.
+ *
+ * @description
+ * Convert a number of minutes to a full number of hours.
+ *
+ * @param {number} minutes - number of minutes to be converted
+ *
+ * @returns {number} the number of minutes converted in hours
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 140 minutes to hours:
+ * const result = minutesToHours(120)
+ * //=> 2
+ *
+ * @example
+ * // It uses floor rounding:
+ * const result = minutesToHours(179)
+ * //=> 2
+ */
+export default function minutesToHours(minutes: number): number {
+ requiredArgs(1, arguments)
+ const hours = minutes / minutesInHour
+ return Math.floor(hours)
+}
diff --git a/date-fns/src/minutesToHours/test.ts b/date-fns/src/minutesToHours/test.ts
new file mode 100644
index 0000000..be34522
--- /dev/null
+++ b/date-fns/src/minutesToHours/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import minuteToHours from '.'
+
+describe('minuteToHours', function () {
+ it('converts minutes to hours', function () {
+ assert(minuteToHours(60) === 1)
+ assert(minuteToHours(120) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(minuteToHours(61) === 1)
+ assert(minuteToHours(59) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(minuteToHours(60.5) === 1)
+ assert(minuteToHours(0) === 0)
+ })
+})
diff --git a/date-fns/src/minutesToMilliseconds/index.d.ts b/date-fns/src/minutesToMilliseconds/index.d.ts
new file mode 100644
index 0000000..14b5513
--- /dev/null
+++ b/date-fns/src/minutesToMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { minutesToMilliseconds } from 'date-fns'
+export default minutesToMilliseconds
diff --git a/date-fns/src/minutesToMilliseconds/index.js.flow b/date-fns/src/minutesToMilliseconds/index.js.flow
new file mode 100644
index 0000000..efb76c7
--- /dev/null
+++ b/date-fns/src/minutesToMilliseconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (minutes: number) => number
diff --git a/date-fns/src/minutesToMilliseconds/index.ts b/date-fns/src/minutesToMilliseconds/index.ts
new file mode 100644
index 0000000..dd95314
--- /dev/null
+++ b/date-fns/src/minutesToMilliseconds/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { millisecondsInMinute } from '../constants/index'
+
+/**
+ * @name minutesToMilliseconds
+ * @category Conversion Helpers
+ * @summary Convert minutes to milliseconds.
+ *
+ * @description
+ * Convert a number of minutes to a full number of milliseconds.
+ *
+ * @param {number} minutes - number of minutes to be converted
+ *
+ * @returns {number} the number of minutes converted in milliseconds
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 minutes to milliseconds
+ * const result = minutesToMilliseconds(2)
+ * //=> 120000
+ */
+export default function minutesToMilliseconds(minutes: number): number {
+ requiredArgs(1, arguments)
+ return Math.floor(minutes * millisecondsInMinute)
+}
diff --git a/date-fns/src/minutesToMilliseconds/test.ts b/date-fns/src/minutesToMilliseconds/test.ts
new file mode 100644
index 0000000..4864a2b
--- /dev/null
+++ b/date-fns/src/minutesToMilliseconds/test.ts
@@ -0,0 +1,20 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import minutesToMilliseconds from '.'
+
+describe('minutesToMilliseconds', function () {
+ it('converts minutes to milliseconds', function () {
+ assert(minutesToMilliseconds(1) === 60000)
+ assert(minutesToMilliseconds(2) === 120000)
+ })
+
+ it('uses floor rounding', () => {
+ assert(minutesToMilliseconds(0.123456) === 7407)
+ })
+
+ it('handles border values', () => {
+ assert(minutesToMilliseconds(1.5) === 90000)
+ assert(minutesToMilliseconds(0) === 0)
+ })
+})
diff --git a/date-fns/src/minutesToSeconds/index.d.ts b/date-fns/src/minutesToSeconds/index.d.ts
new file mode 100644
index 0000000..7998c9b
--- /dev/null
+++ b/date-fns/src/minutesToSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { minutesToSeconds } from 'date-fns'
+export default minutesToSeconds
diff --git a/date-fns/src/minutesToSeconds/index.js.flow b/date-fns/src/minutesToSeconds/index.js.flow
new file mode 100644
index 0000000..efb76c7
--- /dev/null
+++ b/date-fns/src/minutesToSeconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (minutes: number) => number
diff --git a/date-fns/src/minutesToSeconds/index.ts b/date-fns/src/minutesToSeconds/index.ts
new file mode 100644
index 0000000..d4b5c4c
--- /dev/null
+++ b/date-fns/src/minutesToSeconds/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { secondsInMinute } from '../constants/index'
+
+/**
+ * @name minutesToSeconds
+ * @category Conversion Helpers
+ * @summary Convert minutes to seconds.
+ *
+ * @description
+ * Convert a number of minutes to a full number of seconds.
+ *
+ * @param { number } minutes - number of minutes to be converted
+ *
+ * @returns {number} the number of minutes converted in seconds
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 minutes to seconds
+ * const result = minutesToSeconds(2)
+ * //=> 120
+ */
+export default function minutesToSeconds(minutes: number): number {
+ requiredArgs(1, arguments)
+ return Math.floor(minutes * secondsInMinute)
+}
diff --git a/date-fns/src/minutesToSeconds/test.ts b/date-fns/src/minutesToSeconds/test.ts
new file mode 100644
index 0000000..9cdd4c2
--- /dev/null
+++ b/date-fns/src/minutesToSeconds/test.ts
@@ -0,0 +1,20 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import minutesToSeconds from '.'
+
+describe('minutesToSeconds', function () {
+ it('converts minutes to seconds', function () {
+ assert(minutesToSeconds(1) === 60)
+ assert(minutesToSeconds(2) === 120)
+ })
+
+ it('uses floor rounding', () => {
+ assert(minutesToSeconds(0.123456) === 7)
+ })
+
+ it('handles border values', () => {
+ assert(minutesToSeconds(1.5) === 90)
+ assert(minutesToSeconds(0) === 0)
+ })
+})
diff --git a/date-fns/src/monthsToQuarters/index.d.ts b/date-fns/src/monthsToQuarters/index.d.ts
new file mode 100644
index 0000000..895b1a9
--- /dev/null
+++ b/date-fns/src/monthsToQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { monthsToQuarters } from 'date-fns'
+export default monthsToQuarters
diff --git a/date-fns/src/monthsToQuarters/index.js.flow b/date-fns/src/monthsToQuarters/index.js.flow
new file mode 100644
index 0000000..de9ea9b
--- /dev/null
+++ b/date-fns/src/monthsToQuarters/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (months: number) => number
diff --git a/date-fns/src/monthsToQuarters/index.ts b/date-fns/src/monthsToQuarters/index.ts
new file mode 100644
index 0000000..0e5bb5d
--- /dev/null
+++ b/date-fns/src/monthsToQuarters/index.ts
@@ -0,0 +1,31 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { monthsInQuarter } from '../constants/index'
+
+/**
+ * @name monthsToQuarters
+ * @category Conversion Helpers
+ * @summary Convert number of months to quarters.
+ *
+ * @description
+ * Convert a number of months to a full number of quarters.
+ *
+ * @param {number} months - number of months to be converted.
+ *
+ * @returns {number} the number of months converted in quarters
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 6 months to quarters:
+ * const result = monthsToQuarters(6)
+ * //=> 2
+ *
+ * @example
+ * // It uses floor rounding:
+ * const result = monthsToQuarters(7)
+ * //=> 2
+ */
+export default function monthsToQuarters(months: number): number {
+ requiredArgs(1, arguments)
+ const quarters = months / monthsInQuarter
+ return Math.floor(quarters)
+}
diff --git a/date-fns/src/monthsToQuarters/test.ts b/date-fns/src/monthsToQuarters/test.ts
new file mode 100644
index 0000000..a1907d3
--- /dev/null
+++ b/date-fns/src/monthsToQuarters/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import monthsToQuarters from '.'
+
+describe('monthsToQuarters', function () {
+ it('converts months to quarters', function () {
+ assert(monthsToQuarters(3) === 1)
+ assert(monthsToQuarters(6) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(monthsToQuarters(4) === 1)
+ assert(monthsToQuarters(2) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(monthsToQuarters(3.5) === 1)
+ assert(monthsToQuarters(0) === 0)
+ })
+})
diff --git a/date-fns/src/monthsToYears/index.d.ts b/date-fns/src/monthsToYears/index.d.ts
new file mode 100644
index 0000000..16c41fb
--- /dev/null
+++ b/date-fns/src/monthsToYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { monthsToYears } from 'date-fns'
+export default monthsToYears
diff --git a/date-fns/src/monthsToYears/index.js.flow b/date-fns/src/monthsToYears/index.js.flow
new file mode 100644
index 0000000..de9ea9b
--- /dev/null
+++ b/date-fns/src/monthsToYears/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (months: number) => number
diff --git a/date-fns/src/monthsToYears/index.ts b/date-fns/src/monthsToYears/index.ts
new file mode 100644
index 0000000..f1615a7
--- /dev/null
+++ b/date-fns/src/monthsToYears/index.ts
@@ -0,0 +1,30 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { monthsInYear } from '../constants/index'
+
+/**
+ * @name monthsToYears
+ * @category Conversion Helpers
+ * @summary Convert number of months to years.
+ *
+ * @description
+ * Convert a number of months to a full number of years.
+ *
+ * @param {number} months - number of months to be converted
+ *
+ * @returns {number} the number of months converted in years
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 36 months to years:
+ * const result = monthsToYears(36)
+ * //=> 3
+ *
+ * // It uses floor rounding:
+ * const result = monthsToYears(40)
+ * //=> 3
+ */
+export default function monthsToYears(months: number): number {
+ requiredArgs(1, arguments)
+ const years = months / monthsInYear
+ return Math.floor(years)
+}
diff --git a/date-fns/src/monthsToYears/test.ts b/date-fns/src/monthsToYears/test.ts
new file mode 100644
index 0000000..5aa86c9
--- /dev/null
+++ b/date-fns/src/monthsToYears/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import monthsToYears from '.'
+
+describe('monthsToYears', function () {
+ it('converts months to years', function () {
+ assert(monthsToYears(12) === 1)
+ assert(monthsToYears(24) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(monthsToYears(13) === 1)
+ assert(monthsToYears(11) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(monthsToYears(12.5) === 1)
+ assert(monthsToYears(0) === 0)
+ })
+})
diff --git a/date-fns/src/nextDay/index.d.ts b/date-fns/src/nextDay/index.d.ts
new file mode 100644
index 0000000..ed09673
--- /dev/null
+++ b/date-fns/src/nextDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextDay } from 'date-fns'
+export default nextDay
diff --git a/date-fns/src/nextDay/index.js.flow b/date-fns/src/nextDay/index.js.flow
new file mode 100644
index 0000000..4b45d7f
--- /dev/null
+++ b/date-fns/src/nextDay/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, day: Day) => Date
diff --git a/date-fns/src/nextDay/index.ts b/date-fns/src/nextDay/index.ts
new file mode 100644
index 0000000..25c879a
--- /dev/null
+++ b/date-fns/src/nextDay/index.ts
@@ -0,0 +1,46 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import getDay from '../getDay'
+import addDays from '../addDays'
+import toDate from '../toDate'
+import { Day } from '../types'
+
+const baseMap = [7, 6, 5, 4, 3, 2, 1]
+
+/**
+ * @name nextDay
+ * @category Weekday Helpers
+ * @summary When is the next day of the week?
+ *
+ * @description
+ * When is the next day of the week? 0-6 the day of the week, 0 represents Sunday.
+ *
+ * @param {Date | number} date - the date to check
+ * @param {Day} day - day of the week
+ * @returns {Date} - the date is the next day of week
+ * @throws {TypeError} - 2 arguments required
+ *
+ * @example
+ * // When is the next Monday after Mar, 20, 2020?
+ * const result = nextDay(new Date(2020, 2, 20), 1)
+ * //=> Mon Mar 23 2020 00:00:00
+ *
+ * @example
+ * // When is the next Tuesday after Mar, 21, 2020?
+ * const result = nextDay(new Date(2020, 2, 21), 2)
+ * //=> Tue Mar 24 2020 00:00:00
+ */
+export default function nextDay(date: Date | number, day: Day): Date {
+ requiredArgs(2, arguments)
+ const map = genMap(day)
+ return addDays(toDate(date), map[getDay(toDate(date))])
+}
+
+function genMap(daysToMove: number): number[] {
+ if (daysToMove === 0) {
+ return baseMap
+ } else {
+ const mapStart = baseMap.slice(-daysToMove)
+ const mapEnd = baseMap.slice(0, baseMap.length - daysToMove)
+ return mapStart.concat(mapEnd)
+ }
+}
diff --git a/date-fns/src/nextDay/test.ts b/date-fns/src/nextDay/test.ts
new file mode 100644
index 0000000..495bd2e
--- /dev/null
+++ b/date-fns/src/nextDay/test.ts
@@ -0,0 +1,86 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import nextDay from '.'
+
+describe('nextDay', function () {
+ it('returns the following Monday given various dates before the same', function () {
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 2 /* Mar */, 20), 1),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 2 /* Mar */, 19), 1),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 2 /* Mar */, 18), 1),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 2 /* Mar */, 17), 1),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 2 /* Mar */, 16), 1),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 2 /* Mar */, 22), 1),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 4 /* May */, 2), 1),
+ new Date(2020, 4 /* May */, 4)
+ )
+ })
+
+ it('returns the following Tuesday given the Saturday before it', function () {
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 4 /* May */, 2), 2),
+ new Date(2020, 4 /* May */, 5)
+ )
+ })
+
+ it('returns the following Wednesday given the Saturday before it', function () {
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 4 /* May */, 2), 3),
+ new Date(2020, 4 /* May */, 6)
+ )
+ })
+
+ it('returns the following Thursday given the Saturday before it', function () {
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 4 /* May */, 2), 4),
+ new Date(2020, 4 /* May */, 7)
+ )
+ })
+
+ it('returns the following Friday given the Saturday before it', function () {
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 4 /* May */, 2), 5),
+ new Date(2020, 4 /* May */, 8)
+ )
+ })
+
+ it('returns the following Saturday given the Saturday before it', function () {
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 4 /* May */, 2), 6),
+ new Date(2020, 4 /* May */, 9)
+ )
+ })
+
+ it('returns next Sunday given the day is Sunday', function () {
+ assert.deepStrictEqual(
+ nextDay(new Date(2020, 2 /* Mar */, 22), 0),
+ new Date(2020, 2 /* Mar */, 29)
+ )
+ })
+})
diff --git a/date-fns/src/nextFriday/index.d.ts b/date-fns/src/nextFriday/index.d.ts
new file mode 100644
index 0000000..1ea773c
--- /dev/null
+++ b/date-fns/src/nextFriday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextFriday } from 'date-fns'
+export default nextFriday
diff --git a/date-fns/src/nextFriday/index.js.flow b/date-fns/src/nextFriday/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/nextFriday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/nextFriday/index.ts b/date-fns/src/nextFriday/index.ts
new file mode 100644
index 0000000..28d02bc
--- /dev/null
+++ b/date-fns/src/nextFriday/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import nextDay from '../nextDay/index'
+import toDate from '../toDate/index'
+
+/**
+ * @name nextFriday
+ * @category Weekday Helpers
+ * @summary When is the next Friday?
+ *
+ * @description
+ * When is the next Friday?
+ *
+ * @param {Date | number} date - the date to start counting from
+ * @returns {Date} the next Friday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // When is the next Friday after Mar, 22, 2020?
+ * const result = nextFriday(new Date(2020, 2, 22))
+ * //=> Fri Mar 27 2020 00:00:00
+ */
+export default function nextFriday(date: Date | number): Date {
+ requiredArgs(1, arguments)
+ return nextDay(toDate(date), 5)
+}
diff --git a/date-fns/src/nextFriday/test.ts b/date-fns/src/nextFriday/test.ts
new file mode 100644
index 0000000..ee9ece0
--- /dev/null
+++ b/date-fns/src/nextFriday/test.ts
@@ -0,0 +1,48 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import nextFriday from '.'
+
+describe('nextFriday', () => {
+ it('returns the following Friday given various dates before the same', () => {
+ assert.deepStrictEqual(
+ nextFriday(new Date(2020, 2 /* Mar */, 23)),
+ new Date(2020, 2 /* Mar */, 27)
+ )
+
+ assert.deepStrictEqual(
+ nextFriday(new Date(2020, 2 /* Mar */, 22)),
+ new Date(2020, 2 /* Mar */, 27)
+ )
+
+ assert.deepStrictEqual(
+ nextFriday(new Date(2020, 2 /* Mar */, 21)),
+ new Date(2020, 2 /* Mar */, 27)
+ )
+
+ assert.deepStrictEqual(
+ nextFriday(new Date(2020, 2 /* Mar */, 20)),
+ new Date(2020, 2 /* Mar */, 27)
+ )
+
+ assert.deepStrictEqual(
+ nextFriday(new Date(2020, 2 /* Mar */, 19)),
+ new Date(2020, 2 /* Mar */, 20)
+ )
+
+ assert.deepStrictEqual(
+ nextFriday(new Date(2020, 2 /* Mar */, 18)),
+ new Date(2020, 2 /* Mar */, 20)
+ )
+
+ assert.deepStrictEqual(
+ nextFriday(new Date(2020, 2 /* Mar */, 17)),
+ new Date(2020, 2 /* Mar */, 20)
+ )
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', () => {
+ assert(nextFriday(new Date(NaN)) instanceof Date)
+ })
+})
diff --git a/date-fns/src/nextMonday/index.d.ts b/date-fns/src/nextMonday/index.d.ts
new file mode 100644
index 0000000..d266886
--- /dev/null
+++ b/date-fns/src/nextMonday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextMonday } from 'date-fns'
+export default nextMonday
diff --git a/date-fns/src/nextMonday/index.js.flow b/date-fns/src/nextMonday/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/nextMonday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/nextMonday/index.ts b/date-fns/src/nextMonday/index.ts
new file mode 100644
index 0000000..201b8c6
--- /dev/null
+++ b/date-fns/src/nextMonday/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import nextDay from '../nextDay/index'
+import toDate from '../toDate/index'
+
+/**
+ * @name nextMonday
+ * @category Weekday Helpers
+ * @summary When is the next Monday?
+ *
+ * @description
+ * When is the next Monday?
+ *
+ * @param {Date | number} date - the date to start counting from
+ * @returns {Date} the next Monday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // When is the next Monday after Mar, 22, 2020?
+ * const result = nextMonday(new Date(2020, 2, 22))
+ * //=> Mon Mar 23 2020 00:00:00
+ */
+export default function nextMonday(date: Date | number): Date {
+ requiredArgs(1, arguments)
+ return nextDay(toDate(date), 1)
+}
diff --git a/date-fns/src/nextMonday/test.ts b/date-fns/src/nextMonday/test.ts
new file mode 100644
index 0000000..281a31c
--- /dev/null
+++ b/date-fns/src/nextMonday/test.ts
@@ -0,0 +1,48 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import nextMonday from '.'
+
+describe('nextMonday', function () {
+ it('returns the following Monday given various dates before the same', function () {
+ assert.deepStrictEqual(
+ nextMonday(new Date(2020, 2 /* Mar */, 23)),
+ new Date(2020, 2 /* Mar */, 30)
+ )
+
+ assert.deepStrictEqual(
+ nextMonday(new Date(2020, 2 /* Mar */, 22)),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextMonday(new Date(2020, 3 /* Apr */, 11)),
+ new Date(2020, 3 /* Apr */, 13)
+ )
+
+ assert.deepStrictEqual(
+ nextMonday(new Date(2020, 2 /* Mar */, 20)),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextMonday(new Date(2020, 2 /* Mar */, 19)),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextMonday(new Date(2020, 2 /* Mar */, 18)),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+
+ assert.deepStrictEqual(
+ nextMonday(new Date(2020, 2 /* Mar */, 17)),
+ new Date(2020, 2 /* Mar */, 23)
+ )
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ assert(nextMonday(new Date(NaN)) instanceof Date)
+ })
+})
diff --git a/date-fns/src/nextSaturday/index.d.ts b/date-fns/src/nextSaturday/index.d.ts
new file mode 100644
index 0000000..20532f7
--- /dev/null
+++ b/date-fns/src/nextSaturday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextSaturday } from 'date-fns'
+export default nextSaturday
diff --git a/date-fns/src/nextSaturday/index.js.flow b/date-fns/src/nextSaturday/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/nextSaturday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/nextSaturday/index.ts b/date-fns/src/nextSaturday/index.ts
new file mode 100644
index 0000000..ac3d5a6
--- /dev/null
+++ b/date-fns/src/nextSaturday/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import nextDay from '../nextDay/index'
+import toDate from '../toDate/index'
+
+/**
+ * @name nextSaturday
+ * @category Weekday Helpers
+ * @summary When is the next Saturday?
+ *
+ * @description
+ * When is the next Saturday?
+ *
+ * @param {Date | number} date - the date to start counting from
+ * @returns {Date} the next Saturday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // When is the next Saturday after Mar, 22, 2020?
+ * const result = nextSaturday(new Date(2020, 2, 22))
+ * //=> Sat Mar 28 2020 00:00:00
+ */
+export default function nextSaturday(date: Date | number): Date {
+ requiredArgs(1, arguments)
+ return nextDay(toDate(date), 6)
+}
diff --git a/date-fns/src/nextSaturday/test.ts b/date-fns/src/nextSaturday/test.ts
new file mode 100644
index 0000000..6799b46
--- /dev/null
+++ b/date-fns/src/nextSaturday/test.ts
@@ -0,0 +1,48 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import nextSaturday from '.'
+
+describe('nextSaturday', () => {
+ it('returns the following Saturday given various dates before the same', () => {
+ assert.deepStrictEqual(
+ nextSaturday(new Date(2020, 2 /* Mar */, 23)),
+ new Date(2020, 2 /* Mar */, 28)
+ )
+
+ assert.deepStrictEqual(
+ nextSaturday(new Date(2020, 2 /* Mar */, 22)),
+ new Date(2020, 2 /* Mar */, 28)
+ )
+
+ assert.deepStrictEqual(
+ nextSaturday(new Date(2020, 2 /* Mar */, 21)),
+ new Date(2020, 2 /* Mar */, 28)
+ )
+
+ assert.deepStrictEqual(
+ nextSaturday(new Date(2020, 2 /* Mar */, 20)),
+ new Date(2020, 2 /* Mar */, 21)
+ )
+
+ assert.deepStrictEqual(
+ nextSaturday(new Date(2020, 2 /* Mar */, 19)),
+ new Date(2020, 2 /* Mar */, 21)
+ )
+
+ assert.deepStrictEqual(
+ nextSaturday(new Date(2020, 2 /* Mar */, 18)),
+ new Date(2020, 2 /* Mar */, 21)
+ )
+
+ assert.deepStrictEqual(
+ nextSaturday(new Date(2020, 2 /* Mar */, 17)),
+ new Date(2020, 2 /* Mar */, 21)
+ )
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', () => {
+ assert(nextSaturday(new Date(NaN)) instanceof Date)
+ })
+})
diff --git a/date-fns/src/nextSunday/index.d.ts b/date-fns/src/nextSunday/index.d.ts
new file mode 100644
index 0000000..e0a7965
--- /dev/null
+++ b/date-fns/src/nextSunday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextSunday } from 'date-fns'
+export default nextSunday
diff --git a/date-fns/src/nextSunday/index.js.flow b/date-fns/src/nextSunday/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/nextSunday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/nextSunday/index.ts b/date-fns/src/nextSunday/index.ts
new file mode 100644
index 0000000..5320ac3
--- /dev/null
+++ b/date-fns/src/nextSunday/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import nextDay from '../nextDay/index'
+import toDate from '../toDate/index'
+
+/**
+ * @name nextSunday
+ * @category Weekday Helpers
+ * @summary When is the next Sunday?
+ *
+ * @description
+ * When is the next Sunday?
+ *
+ * @param {Date | number} date - the date to start counting from
+ * @returns {Date} the next Sunday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // When is the next Sunday after Mar, 22, 2020?
+ * const result = nextSunday(new Date(2020, 2, 22))
+ * //=> Sun Mar 29 2020 00:00:00
+ */
+export default function nextSunday(date: Date | number): Date {
+ requiredArgs(1, arguments)
+ return nextDay(toDate(date), 0)
+}
diff --git a/date-fns/src/nextSunday/test.ts b/date-fns/src/nextSunday/test.ts
new file mode 100644
index 0000000..468c53b
--- /dev/null
+++ b/date-fns/src/nextSunday/test.ts
@@ -0,0 +1,48 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import nextSunday from '.'
+
+describe('nextSunday', () => {
+ it('returns the following Sunday given various dates before the same', () => {
+ assert.deepStrictEqual(
+ nextSunday(new Date(2020, 2 /* Mar */, 23)),
+ new Date(2020, 2 /* Mar */, 29)
+ )
+
+ assert.deepStrictEqual(
+ nextSunday(new Date(2020, 2 /* Mar */, 22)),
+ new Date(2020, 2 /* Mar */, 29)
+ )
+
+ assert.deepStrictEqual(
+ nextSunday(new Date(2020, 2 /* Mar */, 21)),
+ new Date(2020, 2 /* Mar */, 22)
+ )
+
+ assert.deepStrictEqual(
+ nextSunday(new Date(2020, 2 /* Mar */, 20)),
+ new Date(2020, 2 /* Mar */, 22)
+ )
+
+ assert.deepStrictEqual(
+ nextSunday(new Date(2020, 2 /* Mar */, 19)),
+ new Date(2020, 2 /* Mar */, 22)
+ )
+
+ assert.deepStrictEqual(
+ nextSunday(new Date(2020, 2 /* Mar */, 18)),
+ new Date(2020, 2 /* Mar */, 22)
+ )
+
+ assert.deepStrictEqual(
+ nextSunday(new Date(2020, 2 /* Mar */, 17)),
+ new Date(2020, 2 /* Mar */, 22)
+ )
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', () => {
+ assert(nextSunday(new Date(NaN)) instanceof Date)
+ })
+})
diff --git a/date-fns/src/nextThursday/index.d.ts b/date-fns/src/nextThursday/index.d.ts
new file mode 100644
index 0000000..092c3ba
--- /dev/null
+++ b/date-fns/src/nextThursday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextThursday } from 'date-fns'
+export default nextThursday
diff --git a/date-fns/src/nextThursday/index.js.flow b/date-fns/src/nextThursday/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/nextThursday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/nextThursday/index.ts b/date-fns/src/nextThursday/index.ts
new file mode 100644
index 0000000..8b096ef
--- /dev/null
+++ b/date-fns/src/nextThursday/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import nextDay from '../nextDay/index'
+import toDate from '../toDate/index'
+
+/**
+ * @name nextThursday
+ * @category Weekday Helpers
+ * @summary When is the next Thursday?
+ *
+ * @description
+ * When is the next Thursday?
+ *
+ * @param {Date | number} date - the date to start counting from
+ * @returns {Date} the next Thursday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // When is the next Thursday after Mar, 22, 2020?
+ * const result = nextThursday(new Date(2020, 2, 22))
+ * //=> Thur Mar 26 2020 00:00:00
+ */
+export default function nextThursday(date: Date | number): Date {
+ requiredArgs(1, arguments)
+ return nextDay(toDate(date), 4)
+}
diff --git a/date-fns/src/nextThursday/test.ts b/date-fns/src/nextThursday/test.ts
new file mode 100644
index 0000000..a0ab2d0
--- /dev/null
+++ b/date-fns/src/nextThursday/test.ts
@@ -0,0 +1,48 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import nextThursday from '.'
+
+describe('nextThursday', () => {
+ it('returns the following Thursday given various dates before the same', () => {
+ assert.deepStrictEqual(
+ nextThursday(new Date(2020, 2 /* Mar */, 23)),
+ new Date(2020, 2 /* Mar */, 26)
+ )
+
+ assert.deepStrictEqual(
+ nextThursday(new Date(2020, 2 /* Mar */, 22)),
+ new Date(2020, 2 /* Mar */, 26)
+ )
+
+ assert.deepStrictEqual(
+ nextThursday(new Date(2020, 2 /* Mar */, 21)),
+ new Date(2020, 2 /* Mar */, 26)
+ )
+
+ assert.deepStrictEqual(
+ nextThursday(new Date(2020, 2 /* Mar */, 20)),
+ new Date(2020, 2 /* Mar */, 26)
+ )
+
+ assert.deepStrictEqual(
+ nextThursday(new Date(2020, 2 /* Mar */, 19)),
+ new Date(2020, 2 /* Mar */, 26)
+ )
+
+ assert.deepStrictEqual(
+ nextThursday(new Date(2020, 2 /* Mar */, 18)),
+ new Date(2020, 2 /* Mar */, 19)
+ )
+
+ assert.deepStrictEqual(
+ nextThursday(new Date(2020, 2 /* Mar */, 17)),
+ new Date(2020, 2 /* Mar */, 19)
+ )
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', () => {
+ assert(nextThursday(new Date(NaN)) instanceof Date)
+ })
+})
diff --git a/date-fns/src/nextTuesday/index.d.ts b/date-fns/src/nextTuesday/index.d.ts
new file mode 100644
index 0000000..0e332ac
--- /dev/null
+++ b/date-fns/src/nextTuesday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextTuesday } from 'date-fns'
+export default nextTuesday
diff --git a/date-fns/src/nextTuesday/index.js.flow b/date-fns/src/nextTuesday/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/nextTuesday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/nextTuesday/index.ts b/date-fns/src/nextTuesday/index.ts
new file mode 100644
index 0000000..eb1304d
--- /dev/null
+++ b/date-fns/src/nextTuesday/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import nextDay from '../nextDay/index'
+import toDate from '../toDate/index'
+
+/**
+ * @name nextTuesday
+ * @category Weekday Helpers
+ * @summary When is the next Tuesday?
+ *
+ * @description
+ * When is the next Tuesday?
+ *
+ * @param {Date | number} date - the date to start counting from
+ * @returns {Date} the next Tuesday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // When is the next Tuesday after Mar, 22, 2020?
+ * const result = nextTuesday(new Date(2020, 2, 22))
+ * //=> Tue Mar 24 2020 00:00:00
+ */
+export default function nextTuesday(date: Date | number): Date {
+ requiredArgs(1, arguments)
+ return nextDay(toDate(date), 2)
+}
diff --git a/date-fns/src/nextTuesday/test.ts b/date-fns/src/nextTuesday/test.ts
new file mode 100644
index 0000000..ddc9c9c
--- /dev/null
+++ b/date-fns/src/nextTuesday/test.ts
@@ -0,0 +1,47 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import nextTuesday from '.'
+
+describe('nextTuesday', function () {
+ it('returns the following Tuesday given various dates before the same', function () {
+ assert.deepStrictEqual(
+ nextTuesday(new Date(2020, 2 /* Mar */, 23)),
+ new Date(2020, 2 /* Mar */, 24)
+ )
+
+ assert.deepStrictEqual(
+ nextTuesday(new Date(2020, 2 /* Mar */, 22)),
+ new Date(2020, 2 /* Mar */, 24)
+ )
+
+ assert.deepStrictEqual(
+ nextTuesday(new Date(2020, 3 /* Apr */, 11)),
+ new Date(2020, 3 /* Apr */, 14)
+ )
+
+ assert.deepStrictEqual(
+ nextTuesday(new Date(2020, 2 /* Mar */, 20)),
+ new Date(2020, 2 /* Mar */, 24)
+ )
+
+ assert.deepStrictEqual(
+ nextTuesday(new Date(2020, 2 /* Mar */, 19)),
+ new Date(2020, 2 /* Mar */, 24)
+ )
+
+ assert.deepStrictEqual(
+ nextTuesday(new Date(2020, 2 /* Mar */, 18)),
+ new Date(2020, 2 /* Mar */, 24)
+ )
+
+ assert.deepStrictEqual(
+ nextTuesday(new Date(2020, 2 /* Mar */, 17)),
+ new Date(2020, 2 /* Mar */, 24)
+ )
+ })
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ assert(nextTuesday(new Date(NaN)) instanceof Date)
+ })
+})
diff --git a/date-fns/src/nextWednesday/index.d.ts b/date-fns/src/nextWednesday/index.d.ts
new file mode 100644
index 0000000..42f7eb3
--- /dev/null
+++ b/date-fns/src/nextWednesday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { nextWednesday } from 'date-fns'
+export default nextWednesday
diff --git a/date-fns/src/nextWednesday/index.js.flow b/date-fns/src/nextWednesday/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/nextWednesday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/nextWednesday/index.ts b/date-fns/src/nextWednesday/index.ts
new file mode 100644
index 0000000..e652c3c
--- /dev/null
+++ b/date-fns/src/nextWednesday/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import nextDay from '../nextDay/index'
+import toDate from '../toDate/index'
+
+/**
+ * @name nextWednesday
+ * @category Weekday Helpers
+ * @summary When is the next Wednesday?
+ *
+ * @description
+ * When is the next Wednesday?
+ *
+ * @param {Date | number} date - the date to start counting from
+ * @returns {Date} the next Wednesday
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // When is the next Wednesday after Mar, 22, 2020?
+ * const result = nextWednesday(new Date(2020, 2, 22))
+ * //=> Wed Mar 25 2020 00:00:00
+ */
+export default function nextWednesday(date: Date | number): Date {
+ requiredArgs(1, arguments)
+ return nextDay(toDate(date), 3)
+}
diff --git a/date-fns/src/nextWednesday/test.ts b/date-fns/src/nextWednesday/test.ts
new file mode 100644
index 0000000..68a8fc2
--- /dev/null
+++ b/date-fns/src/nextWednesday/test.ts
@@ -0,0 +1,48 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import nextWednesday from '.'
+
+describe('nextWednesday', () => {
+ it('returns the following Wednesday given various dates before the same', () => {
+ assert.deepStrictEqual(
+ nextWednesday(new Date(2020, 2 /* Mar */, 23)),
+ new Date(2020, 2 /* Mar */, 25)
+ )
+
+ assert.deepStrictEqual(
+ nextWednesday(new Date(2020, 2 /* Mar */, 22)),
+ new Date(2020, 2 /* Mar */, 25)
+ )
+
+ assert.deepStrictEqual(
+ nextWednesday(new Date(2020, 2 /* Mar */, 21)),
+ new Date(2020, 2 /* Mar */, 25)
+ )
+
+ assert.deepStrictEqual(
+ nextWednesday(new Date(2020, 2 /* Mar */, 20)),
+ new Date(2020, 2 /* Mar */, 25)
+ )
+
+ assert.deepStrictEqual(
+ nextWednesday(new Date(2020, 2 /* Mar */, 19)),
+ new Date(2020, 2 /* Mar */, 25)
+ )
+
+ assert.deepStrictEqual(
+ nextWednesday(new Date(2020, 2 /* Mar */, 18)),
+ new Date(2020, 2 /* Mar */, 25)
+ )
+
+ assert.deepStrictEqual(
+ nextWednesday(new Date(2020, 2 /* Mar */, 17)),
+ new Date(2020, 2 /* Mar */, 18)
+ )
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', () => {
+ assert(nextWednesday(new Date(NaN)) instanceof Date)
+ })
+})
diff --git a/date-fns/src/parse/_lib/parsers/index.js b/date-fns/src/parse/_lib/parsers/index.js
new file mode 100644
index 0000000..3a37108
--- /dev/null
+++ b/date-fns/src/parse/_lib/parsers/index.js
@@ -0,0 +1,1735 @@
+import getUTCWeekYear from '../../../_lib/getUTCWeekYear/index'
+import setUTCDay from '../../../_lib/setUTCDay/index'
+import setUTCISODay from '../../../_lib/setUTCISODay/index'
+import setUTCISOWeek from '../../../_lib/setUTCISOWeek/index'
+import setUTCWeek from '../../../_lib/setUTCWeek/index'
+import startOfUTCISOWeek from '../../../_lib/startOfUTCISOWeek/index'
+import startOfUTCWeek from '../../../_lib/startOfUTCWeek/index'
+
+var MILLISECONDS_IN_HOUR = 3600000
+var MILLISECONDS_IN_MINUTE = 60000
+var MILLISECONDS_IN_SECOND = 1000
+
+var numericPatterns = {
+ month: /^(1[0-2]|0?\d)/, // 0 to 12
+ date: /^(3[0-1]|[0-2]?\d)/, // 0 to 31
+ dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/, // 0 to 366
+ week: /^(5[0-3]|[0-4]?\d)/, // 0 to 53
+ hour23h: /^(2[0-3]|[0-1]?\d)/, // 0 to 23
+ hour24h: /^(2[0-4]|[0-1]?\d)/, // 0 to 24
+ hour11h: /^(1[0-1]|0?\d)/, // 0 to 11
+ hour12h: /^(1[0-2]|0?\d)/, // 0 to 12
+ minute: /^[0-5]?\d/, // 0 to 59
+ second: /^[0-5]?\d/, // 0 to 59
+
+ singleDigit: /^\d/, // 0 to 9
+ twoDigits: /^\d{1,2}/, // 0 to 99
+ threeDigits: /^\d{1,3}/, // 0 to 999
+ fourDigits: /^\d{1,4}/, // 0 to 9999
+
+ anyDigitsSigned: /^-?\d+/,
+ singleDigitSigned: /^-?\d/, // 0 to 9, -0 to -9
+ twoDigitsSigned: /^-?\d{1,2}/, // 0 to 99, -0 to -99
+ threeDigitsSigned: /^-?\d{1,3}/, // 0 to 999, -0 to -999
+ fourDigitsSigned: /^-?\d{1,4}/ // 0 to 9999, -0 to -9999
+}
+
+var timezonePatterns = {
+ basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/,
+ basic: /^([+-])(\d{2})(\d{2})|Z/,
+ basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,
+ extended: /^([+-])(\d{2}):(\d{2})|Z/,
+ extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/
+}
+
+function parseNumericPattern(pattern, string, valueCallback) {
+ var matchResult = string.match(pattern)
+
+ if (!matchResult) {
+ return null
+ }
+
+ var value = parseInt(matchResult[0], 10)
+
+ return {
+ value: valueCallback ? valueCallback(value) : value,
+ rest: string.slice(matchResult[0].length)
+ }
+}
+
+function parseTimezonePattern(pattern, string) {
+ var matchResult = string.match(pattern)
+
+ if (!matchResult) {
+ return null
+ }
+
+ // Input is 'Z'
+ if (matchResult[0] === 'Z') {
+ return {
+ value: 0,
+ rest: string.slice(1)
+ }
+ }
+
+ var sign = matchResult[1] === '+' ? 1 : -1
+ var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0
+ var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0
+ var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0
+
+ return {
+ value:
+ sign *
+ (hours * MILLISECONDS_IN_HOUR +
+ minutes * MILLISECONDS_IN_MINUTE +
+ seconds * MILLISECONDS_IN_SECOND),
+ rest: string.slice(matchResult[0].length)
+ }
+}
+
+function parseAnyDigitsSigned(string, valueCallback) {
+ return parseNumericPattern(
+ numericPatterns.anyDigitsSigned,
+ string,
+ valueCallback
+ )
+}
+
+function parseNDigits(n, string, valueCallback) {
+ switch (n) {
+ case 1:
+ return parseNumericPattern(
+ numericPatterns.singleDigit,
+ string,
+ valueCallback
+ )
+ case 2:
+ return parseNumericPattern(
+ numericPatterns.twoDigits,
+ string,
+ valueCallback
+ )
+ case 3:
+ return parseNumericPattern(
+ numericPatterns.threeDigits,
+ string,
+ valueCallback
+ )
+ case 4:
+ return parseNumericPattern(
+ numericPatterns.fourDigits,
+ string,
+ valueCallback
+ )
+ default:
+ return parseNumericPattern(
+ new RegExp('^\\d{1,' + n + '}'),
+ string,
+ valueCallback
+ )
+ }
+}
+
+function parseNDigitsSigned(n, string, valueCallback) {
+ switch (n) {
+ case 1:
+ return parseNumericPattern(
+ numericPatterns.singleDigitSigned,
+ string,
+ valueCallback
+ )
+ case 2:
+ return parseNumericPattern(
+ numericPatterns.twoDigitsSigned,
+ string,
+ valueCallback
+ )
+ case 3:
+ return parseNumericPattern(
+ numericPatterns.threeDigitsSigned,
+ string,
+ valueCallback
+ )
+ case 4:
+ return parseNumericPattern(
+ numericPatterns.fourDigitsSigned,
+ string,
+ valueCallback
+ )
+ default:
+ return parseNumericPattern(
+ new RegExp('^-?\\d{1,' + n + '}'),
+ string,
+ valueCallback
+ )
+ }
+}
+
+function dayPeriodEnumToHours(enumValue) {
+ switch (enumValue) {
+ case 'morning':
+ return 4
+ case 'evening':
+ return 17
+ case 'pm':
+ case 'noon':
+ case 'afternoon':
+ return 12
+ case 'am':
+ case 'midnight':
+ case 'night':
+ default:
+ return 0
+ }
+}
+
+function normalizeTwoDigitYear(twoDigitYear, currentYear) {
+ var isCommonEra = currentYear > 0
+ // Absolute number of the current year:
+ // 1 -> 1 AC
+ // 0 -> 1 BC
+ // -1 -> 2 BC
+ var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear
+
+ var result
+ if (absCurrentYear <= 50) {
+ result = twoDigitYear || 100
+ } else {
+ var rangeEnd = absCurrentYear + 50
+ var rangeEndCentury = Math.floor(rangeEnd / 100) * 100
+ var isPreviousCentury = twoDigitYear >= rangeEnd % 100
+ result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0)
+ }
+
+ return isCommonEra ? result : 1 - result
+}
+
+var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
+var DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
+
+// User for validation
+function isLeapYearIndex(year) {
+ return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)
+}
+
+/*
+ * | | Unit | | Unit |
+ * |-----|--------------------------------|-----|--------------------------------|
+ * | a | AM, PM | A* | Milliseconds in day |
+ * | b | AM, PM, noon, midnight | B | Flexible day period |
+ * | c | Stand-alone local day of week | C* | Localized hour w/ day period |
+ * | d | Day of month | D | Day of year |
+ * | e | Local day of week | E | Day of week |
+ * | f | | F* | Day of week in month |
+ * | g* | Modified Julian day | G | Era |
+ * | h | Hour [1-12] | H | Hour [0-23] |
+ * | i! | ISO day of week | I! | ISO week of year |
+ * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |
+ * | k | Hour [1-24] | K | Hour [0-11] |
+ * | l* | (deprecated) | L | Stand-alone month |
+ * | m | Minute | M | Month |
+ * | n | | N | |
+ * | o! | Ordinal number modifier | O* | Timezone (GMT) |
+ * | p | | P | |
+ * | q | Stand-alone quarter | Q | Quarter |
+ * | r* | Related Gregorian year | R! | ISO week-numbering year |
+ * | s | Second | S | Fraction of second |
+ * | t! | Seconds timestamp | T! | Milliseconds timestamp |
+ * | u | Extended year | U* | Cyclic year |
+ * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |
+ * | w | Local week of year | W* | Week of month |
+ * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |
+ * | y | Year (abs) | Y | Local week-numbering year |
+ * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |
+ *
+ * Letters marked by * are not implemented but reserved by Unicode standard.
+ *
+ * Letters marked by ! are non-standard, but implemented by date-fns:
+ * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)
+ * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,
+ * i.e. 7 for Sunday, 1 for Monday, etc.
+ * - `I` is ISO week of year, as opposed to `w` which is local week of year.
+ * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.
+ * `R` is supposed to be used in conjunction with `I` and `i`
+ * for universal ISO week-numbering date, whereas
+ * `Y` is supposed to be used in conjunction with `w` and `e`
+ * for week-numbering date specific to the locale.
+ */
+var parsers = {
+ // Era
+ G: {
+ priority: 140,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ // AD, BC
+ case 'G':
+ case 'GG':
+ case 'GGG':
+ return (
+ match.era(string, { width: 'abbreviated' }) ||
+ match.era(string, { width: 'narrow' })
+ )
+ // A, B
+ case 'GGGGG':
+ return match.era(string, { width: 'narrow' })
+ // Anno Domini, Before Christ
+ case 'GGGG':
+ default:
+ return (
+ match.era(string, { width: 'wide' }) ||
+ match.era(string, { width: 'abbreviated' }) ||
+ match.era(string, { width: 'narrow' })
+ )
+ }
+ },
+
+ set: function(date, flags, value, _options) {
+ flags.era = value
+ date.setUTCFullYear(value, 0, 1)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['R', 'u', 't', 'T']
+ },
+
+ // Year
+ y: {
+ // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
+ // | Year | y | yy | yyy | yyyy | yyyyy |
+ // |----------|-------|----|-------|-------|-------|
+ // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |
+ // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |
+ // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |
+ // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |
+ // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |
+
+ priority: 130,
+
+ parse: function(string, token, match, _options) {
+ var valueCallback = function(year) {
+ return {
+ year: year,
+ isTwoDigitYear: token === 'yy'
+ }
+ }
+
+ switch (token) {
+ case 'y':
+ return parseNDigits(4, string, valueCallback)
+ case 'yo':
+ return match.ordinalNumber(string, {
+ unit: 'year',
+ valueCallback: valueCallback
+ })
+ default:
+ return parseNDigits(token.length, string, valueCallback)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value.isTwoDigitYear || value.year > 0
+ },
+
+ set: function(date, flags, value, _options) {
+ var currentYear = date.getUTCFullYear()
+
+ if (value.isTwoDigitYear) {
+ var normalizedTwoDigitYear = normalizeTwoDigitYear(
+ value.year,
+ currentYear
+ )
+ date.setUTCFullYear(normalizedTwoDigitYear, 0, 1)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ }
+
+ var year =
+ !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year
+ date.setUTCFullYear(year, 0, 1)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']
+ },
+
+ // Local week-numbering year
+ Y: {
+ priority: 130,
+
+ parse: function(string, token, match, _options) {
+ var valueCallback = function(year) {
+ return {
+ year: year,
+ isTwoDigitYear: token === 'YY'
+ }
+ }
+
+ switch (token) {
+ case 'Y':
+ return parseNDigits(4, string, valueCallback)
+ case 'Yo':
+ return match.ordinalNumber(string, {
+ unit: 'year',
+ valueCallback: valueCallback
+ })
+ default:
+ return parseNDigits(token.length, string, valueCallback)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value.isTwoDigitYear || value.year > 0
+ },
+
+ set: function(date, flags, value, options) {
+ var currentYear = getUTCWeekYear(date, options)
+
+ if (value.isTwoDigitYear) {
+ var normalizedTwoDigitYear = normalizeTwoDigitYear(
+ value.year,
+ currentYear
+ )
+ date.setUTCFullYear(
+ normalizedTwoDigitYear,
+ 0,
+ options.firstWeekContainsDate
+ )
+ date.setUTCHours(0, 0, 0, 0)
+ return startOfUTCWeek(date, options)
+ }
+
+ var year =
+ !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year
+ date.setUTCFullYear(year, 0, options.firstWeekContainsDate)
+ date.setUTCHours(0, 0, 0, 0)
+ return startOfUTCWeek(date, options)
+ },
+
+ incompatibleTokens: [
+ 'y',
+ 'R',
+ 'u',
+ 'Q',
+ 'q',
+ 'M',
+ 'L',
+ 'I',
+ 'd',
+ 'D',
+ 'i',
+ 't',
+ 'T'
+ ]
+ },
+
+ // ISO week-numbering year
+ R: {
+ priority: 130,
+
+ parse: function(string, token, _match, _options) {
+ if (token === 'R') {
+ return parseNDigitsSigned(4, string)
+ }
+
+ return parseNDigitsSigned(token.length, string)
+ },
+
+ set: function(_date, _flags, value, _options) {
+ var firstWeekOfYear = new Date(0)
+ firstWeekOfYear.setUTCFullYear(value, 0, 4)
+ firstWeekOfYear.setUTCHours(0, 0, 0, 0)
+ return startOfUTCISOWeek(firstWeekOfYear)
+ },
+
+ incompatibleTokens: [
+ 'G',
+ 'y',
+ 'Y',
+ 'u',
+ 'Q',
+ 'q',
+ 'M',
+ 'L',
+ 'w',
+ 'd',
+ 'D',
+ 'e',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // Extended year
+ u: {
+ priority: 130,
+
+ parse: function(string, token, _match, _options) {
+ if (token === 'u') {
+ return parseNDigitsSigned(4, string)
+ }
+
+ return parseNDigitsSigned(token.length, string)
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCFullYear(value, 0, 1)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']
+ },
+
+ // Quarter
+ Q: {
+ priority: 120,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ // 1, 2, 3, 4
+ case 'Q':
+ case 'QQ': // 01, 02, 03, 04
+ return parseNDigits(token.length, string)
+ // 1st, 2nd, 3rd, 4th
+ case 'Qo':
+ return match.ordinalNumber(string, { unit: 'quarter' })
+ // Q1, Q2, Q3, Q4
+ case 'QQQ':
+ return (
+ match.quarter(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.quarter(string, { width: 'narrow', context: 'formatting' })
+ )
+ // 1, 2, 3, 4 (narrow quarter; could be not numerical)
+ case 'QQQQQ':
+ return match.quarter(string, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ // 1st quarter, 2nd quarter, ...
+ case 'QQQQ':
+ default:
+ return (
+ match.quarter(string, { width: 'wide', context: 'formatting' }) ||
+ match.quarter(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.quarter(string, { width: 'narrow', context: 'formatting' })
+ )
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 1 && value <= 4
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCMonth((value - 1) * 3, 1)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: [
+ 'Y',
+ 'R',
+ 'q',
+ 'M',
+ 'L',
+ 'w',
+ 'I',
+ 'd',
+ 'D',
+ 'i',
+ 'e',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // Stand-alone quarter
+ q: {
+ priority: 120,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ // 1, 2, 3, 4
+ case 'q':
+ case 'qq': // 01, 02, 03, 04
+ return parseNDigits(token.length, string)
+ // 1st, 2nd, 3rd, 4th
+ case 'qo':
+ return match.ordinalNumber(string, { unit: 'quarter' })
+ // Q1, Q2, Q3, Q4
+ case 'qqq':
+ return (
+ match.quarter(string, {
+ width: 'abbreviated',
+ context: 'standalone'
+ }) ||
+ match.quarter(string, { width: 'narrow', context: 'standalone' })
+ )
+ // 1, 2, 3, 4 (narrow quarter; could be not numerical)
+ case 'qqqqq':
+ return match.quarter(string, {
+ width: 'narrow',
+ context: 'standalone'
+ })
+ // 1st quarter, 2nd quarter, ...
+ case 'qqqq':
+ default:
+ return (
+ match.quarter(string, { width: 'wide', context: 'standalone' }) ||
+ match.quarter(string, {
+ width: 'abbreviated',
+ context: 'standalone'
+ }) ||
+ match.quarter(string, { width: 'narrow', context: 'standalone' })
+ )
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 1 && value <= 4
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCMonth((value - 1) * 3, 1)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: [
+ 'Y',
+ 'R',
+ 'Q',
+ 'M',
+ 'L',
+ 'w',
+ 'I',
+ 'd',
+ 'D',
+ 'i',
+ 'e',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // Month
+ M: {
+ priority: 110,
+
+ parse: function(string, token, match, _options) {
+ var valueCallback = function(value) {
+ return value - 1
+ }
+
+ switch (token) {
+ // 1, 2, ..., 12
+ case 'M':
+ return parseNumericPattern(
+ numericPatterns.month,
+ string,
+ valueCallback
+ )
+ // 01, 02, ..., 12
+ case 'MM':
+ return parseNDigits(2, string, valueCallback)
+ // 1st, 2nd, ..., 12th
+ case 'Mo':
+ return match.ordinalNumber(string, {
+ unit: 'month',
+ valueCallback: valueCallback
+ })
+ // Jan, Feb, ..., Dec
+ case 'MMM':
+ return (
+ match.month(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.month(string, { width: 'narrow', context: 'formatting' })
+ )
+ // J, F, ..., D
+ case 'MMMMM':
+ return match.month(string, { width: 'narrow', context: 'formatting' })
+ // January, February, ..., December
+ case 'MMMM':
+ default:
+ return (
+ match.month(string, { width: 'wide', context: 'formatting' }) ||
+ match.month(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.month(string, { width: 'narrow', context: 'formatting' })
+ )
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 0 && value <= 11
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCMonth(value, 1)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: [
+ 'Y',
+ 'R',
+ 'q',
+ 'Q',
+ 'L',
+ 'w',
+ 'I',
+ 'D',
+ 'i',
+ 'e',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // Stand-alone month
+ L: {
+ priority: 110,
+
+ parse: function(string, token, match, _options) {
+ var valueCallback = function(value) {
+ return value - 1
+ }
+
+ switch (token) {
+ // 1, 2, ..., 12
+ case 'L':
+ return parseNumericPattern(
+ numericPatterns.month,
+ string,
+ valueCallback
+ )
+ // 01, 02, ..., 12
+ case 'LL':
+ return parseNDigits(2, string, valueCallback)
+ // 1st, 2nd, ..., 12th
+ case 'Lo':
+ return match.ordinalNumber(string, {
+ unit: 'month',
+ valueCallback: valueCallback
+ })
+ // Jan, Feb, ..., Dec
+ case 'LLL':
+ return (
+ match.month(string, {
+ width: 'abbreviated',
+ context: 'standalone'
+ }) ||
+ match.month(string, { width: 'narrow', context: 'standalone' })
+ )
+ // J, F, ..., D
+ case 'LLLLL':
+ return match.month(string, { width: 'narrow', context: 'standalone' })
+ // January, February, ..., December
+ case 'LLLL':
+ default:
+ return (
+ match.month(string, { width: 'wide', context: 'standalone' }) ||
+ match.month(string, {
+ width: 'abbreviated',
+ context: 'standalone'
+ }) ||
+ match.month(string, { width: 'narrow', context: 'standalone' })
+ )
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 0 && value <= 11
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCMonth(value, 1)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: [
+ 'Y',
+ 'R',
+ 'q',
+ 'Q',
+ 'M',
+ 'w',
+ 'I',
+ 'D',
+ 'i',
+ 'e',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // Local week of year
+ w: {
+ priority: 100,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'w':
+ return parseNumericPattern(numericPatterns.week, string)
+ case 'wo':
+ return match.ordinalNumber(string, { unit: 'week' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 1 && value <= 53
+ },
+
+ set: function(date, _flags, value, options) {
+ return startOfUTCWeek(setUTCWeek(date, value, options), options)
+ },
+
+ incompatibleTokens: [
+ 'y',
+ 'R',
+ 'u',
+ 'q',
+ 'Q',
+ 'M',
+ 'L',
+ 'I',
+ 'd',
+ 'D',
+ 'i',
+ 't',
+ 'T'
+ ]
+ },
+
+ // ISO week of year
+ I: {
+ priority: 100,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'I':
+ return parseNumericPattern(numericPatterns.week, string)
+ case 'Io':
+ return match.ordinalNumber(string, { unit: 'week' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 1 && value <= 53
+ },
+
+ set: function(date, _flags, value, options) {
+ return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options)
+ },
+
+ incompatibleTokens: [
+ 'y',
+ 'Y',
+ 'u',
+ 'q',
+ 'Q',
+ 'M',
+ 'L',
+ 'w',
+ 'd',
+ 'D',
+ 'e',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // Day of the month
+ d: {
+ priority: 90,
+
+ subPriority: 1,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'd':
+ return parseNumericPattern(numericPatterns.date, string)
+ case 'do':
+ return match.ordinalNumber(string, { unit: 'date' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(date, value, _options) {
+ var year = date.getUTCFullYear()
+ var isLeapYear = isLeapYearIndex(year)
+ var month = date.getUTCMonth()
+ if (isLeapYear) {
+ return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]
+ } else {
+ return value >= 1 && value <= DAYS_IN_MONTH[month]
+ }
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCDate(value)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: [
+ 'Y',
+ 'R',
+ 'q',
+ 'Q',
+ 'w',
+ 'I',
+ 'D',
+ 'i',
+ 'e',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // Day of year
+ D: {
+ priority: 90,
+
+ subPriority: 1,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'D':
+ case 'DD':
+ return parseNumericPattern(numericPatterns.dayOfYear, string)
+ case 'Do':
+ return match.ordinalNumber(string, { unit: 'date' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(date, value, _options) {
+ var year = date.getUTCFullYear()
+ var isLeapYear = isLeapYearIndex(year)
+ if (isLeapYear) {
+ return value >= 1 && value <= 366
+ } else {
+ return value >= 1 && value <= 365
+ }
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCMonth(0, value)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: [
+ 'Y',
+ 'R',
+ 'q',
+ 'Q',
+ 'M',
+ 'L',
+ 'w',
+ 'I',
+ 'd',
+ 'E',
+ 'i',
+ 'e',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // Day of week
+ E: {
+ priority: 90,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ // Tue
+ case 'E':
+ case 'EE':
+ case 'EEE':
+ return (
+ match.day(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.day(string, { width: 'short', context: 'formatting' }) ||
+ match.day(string, { width: 'narrow', context: 'formatting' })
+ )
+ // T
+ case 'EEEEE':
+ return match.day(string, { width: 'narrow', context: 'formatting' })
+ // Tu
+ case 'EEEEEE':
+ return (
+ match.day(string, { width: 'short', context: 'formatting' }) ||
+ match.day(string, { width: 'narrow', context: 'formatting' })
+ )
+ // Tuesday
+ case 'EEEE':
+ default:
+ return (
+ match.day(string, { width: 'wide', context: 'formatting' }) ||
+ match.day(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.day(string, { width: 'short', context: 'formatting' }) ||
+ match.day(string, { width: 'narrow', context: 'formatting' })
+ )
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 0 && value <= 6
+ },
+
+ set: function(date, _flags, value, options) {
+ date = setUTCDay(date, value, options)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['D', 'i', 'e', 'c', 't', 'T']
+ },
+
+ // Local day of week
+ e: {
+ priority: 90,
+ parse: function(string, token, match, options) {
+ var valueCallback = function(value) {
+ var wholeWeekDays = Math.floor((value - 1) / 7) * 7
+ return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays
+ }
+
+ switch (token) {
+ // 3
+ case 'e':
+ case 'ee': // 03
+ return parseNDigits(token.length, string, valueCallback)
+ // 3rd
+ case 'eo':
+ return match.ordinalNumber(string, {
+ unit: 'day',
+ valueCallback: valueCallback
+ })
+ // Tue
+ case 'eee':
+ return (
+ match.day(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.day(string, { width: 'short', context: 'formatting' }) ||
+ match.day(string, { width: 'narrow', context: 'formatting' })
+ )
+ // T
+ case 'eeeee':
+ return match.day(string, { width: 'narrow', context: 'formatting' })
+ // Tu
+ case 'eeeeee':
+ return (
+ match.day(string, { width: 'short', context: 'formatting' }) ||
+ match.day(string, { width: 'narrow', context: 'formatting' })
+ )
+ // Tuesday
+ case 'eeee':
+ default:
+ return (
+ match.day(string, { width: 'wide', context: 'formatting' }) ||
+ match.day(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.day(string, { width: 'short', context: 'formatting' }) ||
+ match.day(string, { width: 'narrow', context: 'formatting' })
+ )
+ }
+ },
+ validate: function(_date, value, _options) {
+ return value >= 0 && value <= 6
+ },
+ set: function(date, _flags, value, options) {
+ date = setUTCDay(date, value, options)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: [
+ 'y',
+ 'R',
+ 'u',
+ 'q',
+ 'Q',
+ 'M',
+ 'L',
+ 'I',
+ 'd',
+ 'D',
+ 'E',
+ 'i',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // Stand-alone local day of week
+ c: {
+ priority: 90,
+
+ parse: function(string, token, match, options) {
+ var valueCallback = function(value) {
+ var wholeWeekDays = Math.floor((value - 1) / 7) * 7
+ return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays
+ }
+
+ switch (token) {
+ // 3
+ case 'c':
+ case 'cc': // 03
+ return parseNDigits(token.length, string, valueCallback)
+ // 3rd
+ case 'co':
+ return match.ordinalNumber(string, {
+ unit: 'day',
+ valueCallback: valueCallback
+ })
+ // Tue
+ case 'ccc':
+ return (
+ match.day(string, {
+ width: 'abbreviated',
+ context: 'standalone'
+ }) ||
+ match.day(string, { width: 'short', context: 'standalone' }) ||
+ match.day(string, { width: 'narrow', context: 'standalone' })
+ )
+ // T
+ case 'ccccc':
+ return match.day(string, { width: 'narrow', context: 'standalone' })
+ // Tu
+ case 'cccccc':
+ return (
+ match.day(string, { width: 'short', context: 'standalone' }) ||
+ match.day(string, { width: 'narrow', context: 'standalone' })
+ )
+ // Tuesday
+ case 'cccc':
+ default:
+ return (
+ match.day(string, { width: 'wide', context: 'standalone' }) ||
+ match.day(string, {
+ width: 'abbreviated',
+ context: 'standalone'
+ }) ||
+ match.day(string, { width: 'short', context: 'standalone' }) ||
+ match.day(string, { width: 'narrow', context: 'standalone' })
+ )
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 0 && value <= 6
+ },
+
+ set: function(date, _flags, value, options) {
+ date = setUTCDay(date, value, options)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: [
+ 'y',
+ 'R',
+ 'u',
+ 'q',
+ 'Q',
+ 'M',
+ 'L',
+ 'I',
+ 'd',
+ 'D',
+ 'E',
+ 'i',
+ 'e',
+ 't',
+ 'T'
+ ]
+ },
+
+ // ISO day of week
+ i: {
+ priority: 90,
+
+ parse: function(string, token, match, _options) {
+ var valueCallback = function(value) {
+ if (value === 0) {
+ return 7
+ }
+ return value
+ }
+
+ switch (token) {
+ // 2
+ case 'i':
+ case 'ii': // 02
+ return parseNDigits(token.length, string)
+ // 2nd
+ case 'io':
+ return match.ordinalNumber(string, { unit: 'day' })
+ // Tue
+ case 'iii':
+ return (
+ match.day(string, {
+ width: 'abbreviated',
+ context: 'formatting',
+ valueCallback: valueCallback
+ }) ||
+ match.day(string, {
+ width: 'short',
+ context: 'formatting',
+ valueCallback: valueCallback
+ }) ||
+ match.day(string, {
+ width: 'narrow',
+ context: 'formatting',
+ valueCallback: valueCallback
+ })
+ )
+ // T
+ case 'iiiii':
+ return match.day(string, {
+ width: 'narrow',
+ context: 'formatting',
+ valueCallback: valueCallback
+ })
+ // Tu
+ case 'iiiiii':
+ return (
+ match.day(string, {
+ width: 'short',
+ context: 'formatting',
+ valueCallback: valueCallback
+ }) ||
+ match.day(string, {
+ width: 'narrow',
+ context: 'formatting',
+ valueCallback: valueCallback
+ })
+ )
+ // Tuesday
+ case 'iiii':
+ default:
+ return (
+ match.day(string, {
+ width: 'wide',
+ context: 'formatting',
+ valueCallback: valueCallback
+ }) ||
+ match.day(string, {
+ width: 'abbreviated',
+ context: 'formatting',
+ valueCallback: valueCallback
+ }) ||
+ match.day(string, {
+ width: 'short',
+ context: 'formatting',
+ valueCallback: valueCallback
+ }) ||
+ match.day(string, {
+ width: 'narrow',
+ context: 'formatting',
+ valueCallback: valueCallback
+ })
+ )
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 1 && value <= 7
+ },
+
+ set: function(date, _flags, value, options) {
+ date = setUTCISODay(date, value, options)
+ date.setUTCHours(0, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: [
+ 'y',
+ 'Y',
+ 'u',
+ 'q',
+ 'Q',
+ 'M',
+ 'L',
+ 'w',
+ 'd',
+ 'D',
+ 'E',
+ 'e',
+ 'c',
+ 't',
+ 'T'
+ ]
+ },
+
+ // AM or PM
+ a: {
+ priority: 80,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'a':
+ case 'aa':
+ case 'aaa':
+ return (
+ match.dayPeriod(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.dayPeriod(string, { width: 'narrow', context: 'formatting' })
+ )
+ case 'aaaaa':
+ return match.dayPeriod(string, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ case 'aaaa':
+ default:
+ return (
+ match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||
+ match.dayPeriod(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.dayPeriod(string, { width: 'narrow', context: 'formatting' })
+ )
+ }
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['b', 'B', 'H', 'K', 'k', 't', 'T']
+ },
+
+ // AM, PM, midnight
+ b: {
+ priority: 80,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'b':
+ case 'bb':
+ case 'bbb':
+ return (
+ match.dayPeriod(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.dayPeriod(string, { width: 'narrow', context: 'formatting' })
+ )
+ case 'bbbbb':
+ return match.dayPeriod(string, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ case 'bbbb':
+ default:
+ return (
+ match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||
+ match.dayPeriod(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.dayPeriod(string, { width: 'narrow', context: 'formatting' })
+ )
+ }
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['a', 'B', 'H', 'K', 'k', 't', 'T']
+ },
+
+ // in the morning, in the afternoon, in the evening, at night
+ B: {
+ priority: 80,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'B':
+ case 'BB':
+ case 'BBB':
+ return (
+ match.dayPeriod(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.dayPeriod(string, { width: 'narrow', context: 'formatting' })
+ )
+ case 'BBBBB':
+ return match.dayPeriod(string, {
+ width: 'narrow',
+ context: 'formatting'
+ })
+ case 'BBBB':
+ default:
+ return (
+ match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||
+ match.dayPeriod(string, {
+ width: 'abbreviated',
+ context: 'formatting'
+ }) ||
+ match.dayPeriod(string, { width: 'narrow', context: 'formatting' })
+ )
+ }
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['a', 'b', 't', 'T']
+ },
+
+ // Hour [1-12]
+ h: {
+ priority: 70,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'h':
+ return parseNumericPattern(numericPatterns.hour12h, string)
+ case 'ho':
+ return match.ordinalNumber(string, { unit: 'hour' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 1 && value <= 12
+ },
+
+ set: function(date, _flags, value, _options) {
+ var isPM = date.getUTCHours() >= 12
+ if (isPM && value < 12) {
+ date.setUTCHours(value + 12, 0, 0, 0)
+ } else if (!isPM && value === 12) {
+ date.setUTCHours(0, 0, 0, 0)
+ } else {
+ date.setUTCHours(value, 0, 0, 0)
+ }
+ return date
+ },
+
+ incompatibleTokens: ['H', 'K', 'k', 't', 'T']
+ },
+
+ // Hour [0-23]
+ H: {
+ priority: 70,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'H':
+ return parseNumericPattern(numericPatterns.hour23h, string)
+ case 'Ho':
+ return match.ordinalNumber(string, { unit: 'hour' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 0 && value <= 23
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCHours(value, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['a', 'b', 'h', 'K', 'k', 't', 'T']
+ },
+
+ // Hour [0-11]
+ K: {
+ priority: 70,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'K':
+ return parseNumericPattern(numericPatterns.hour11h, string)
+ case 'Ko':
+ return match.ordinalNumber(string, { unit: 'hour' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 0 && value <= 11
+ },
+
+ set: function(date, _flags, value, _options) {
+ var isPM = date.getUTCHours() >= 12
+ if (isPM && value < 12) {
+ date.setUTCHours(value + 12, 0, 0, 0)
+ } else {
+ date.setUTCHours(value, 0, 0, 0)
+ }
+ return date
+ },
+
+ incompatibleTokens: ['a', 'b', 'h', 'H', 'k', 't', 'T']
+ },
+
+ // Hour [1-24]
+ k: {
+ priority: 70,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'k':
+ return parseNumericPattern(numericPatterns.hour24h, string)
+ case 'ko':
+ return match.ordinalNumber(string, { unit: 'hour' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 1 && value <= 24
+ },
+
+ set: function(date, _flags, value, _options) {
+ var hours = value <= 24 ? value % 24 : value
+ date.setUTCHours(hours, 0, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['a', 'b', 'h', 'H', 'K', 't', 'T']
+ },
+
+ // Minute
+ m: {
+ priority: 60,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 'm':
+ return parseNumericPattern(numericPatterns.minute, string)
+ case 'mo':
+ return match.ordinalNumber(string, { unit: 'minute' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 0 && value <= 59
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCMinutes(value, 0, 0)
+ return date
+ },
+
+ incompatibleTokens: ['t', 'T']
+ },
+
+ // Second
+ s: {
+ priority: 50,
+
+ parse: function(string, token, match, _options) {
+ switch (token) {
+ case 's':
+ return parseNumericPattern(numericPatterns.second, string)
+ case 'so':
+ return match.ordinalNumber(string, { unit: 'second' })
+ default:
+ return parseNDigits(token.length, string)
+ }
+ },
+
+ validate: function(_date, value, _options) {
+ return value >= 0 && value <= 59
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCSeconds(value, 0)
+ return date
+ },
+
+ incompatibleTokens: ['t', 'T']
+ },
+
+ // Fraction of second
+ S: {
+ priority: 30,
+
+ parse: function(string, token, _match, _options) {
+ var valueCallback = function(value) {
+ return Math.floor(value * Math.pow(10, -token.length + 3))
+ }
+ return parseNDigits(token.length, string, valueCallback)
+ },
+
+ set: function(date, _flags, value, _options) {
+ date.setUTCMilliseconds(value)
+ return date
+ },
+
+ incompatibleTokens: ['t', 'T']
+ },
+
+ // Timezone (ISO-8601. +00:00 is `'Z'`)
+ X: {
+ priority: 10,
+
+ parse: function(string, token, _match, _options) {
+ switch (token) {
+ case 'X':
+ return parseTimezonePattern(
+ timezonePatterns.basicOptionalMinutes,
+ string
+ )
+ case 'XX':
+ return parseTimezonePattern(timezonePatterns.basic, string)
+ case 'XXXX':
+ return parseTimezonePattern(
+ timezonePatterns.basicOptionalSeconds,
+ string
+ )
+ case 'XXXXX':
+ return parseTimezonePattern(
+ timezonePatterns.extendedOptionalSeconds,
+ string
+ )
+ case 'XXX':
+ default:
+ return parseTimezonePattern(timezonePatterns.extended, string)
+ }
+ },
+
+ set: function(date, flags, value, _options) {
+ if (flags.timestampIsSet) {
+ return date
+ }
+ return new Date(date.getTime() - value)
+ },
+
+ incompatibleTokens: ['t', 'T', 'x']
+ },
+
+ // Timezone (ISO-8601)
+ x: {
+ priority: 10,
+
+ parse: function(string, token, _match, _options) {
+ switch (token) {
+ case 'x':
+ return parseTimezonePattern(
+ timezonePatterns.basicOptionalMinutes,
+ string
+ )
+ case 'xx':
+ return parseTimezonePattern(timezonePatterns.basic, string)
+ case 'xxxx':
+ return parseTimezonePattern(
+ timezonePatterns.basicOptionalSeconds,
+ string
+ )
+ case 'xxxxx':
+ return parseTimezonePattern(
+ timezonePatterns.extendedOptionalSeconds,
+ string
+ )
+ case 'xxx':
+ default:
+ return parseTimezonePattern(timezonePatterns.extended, string)
+ }
+ },
+
+ set: function(date, flags, value, _options) {
+ if (flags.timestampIsSet) {
+ return date
+ }
+ return new Date(date.getTime() - value)
+ },
+
+ incompatibleTokens: ['t', 'T', 'X']
+ },
+
+ // Seconds timestamp
+ t: {
+ priority: 40,
+
+ parse: function(string, _token, _match, _options) {
+ return parseAnyDigitsSigned(string)
+ },
+
+ set: function(_date, _flags, value, _options) {
+ return [new Date(value * 1000), { timestampIsSet: true }]
+ },
+
+ incompatibleTokens: '*'
+ },
+
+ // Milliseconds timestamp
+ T: {
+ priority: 20,
+
+ parse: function(string, _token, _match, _options) {
+ return parseAnyDigitsSigned(string)
+ },
+
+ set: function(_date, _flags, value, _options) {
+ return [new Date(value), { timestampIsSet: true }]
+ },
+
+ incompatibleTokens: '*'
+ }
+}
+
+export default parsers
diff --git a/date-fns/src/parse/benchmark.js b/date-fns/src/parse/benchmark.js
new file mode 100644
index 0000000..2b816d7
--- /dev/null
+++ b/date-fns/src/parse/benchmark.js
@@ -0,0 +1,20 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import parse from '.'
+import moment from 'moment'
+
+suite('parse', function () {
+ benchmark('date-fns', function () {
+ return parse('Tuesday, January 10th 2017, 11:07:40 am', 'dddd, MMMM Do YYYY, h:mm:ss a', this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return moment('Tuesday, January 10th 2017, 11:07:40 am', 'dddd, MMMM Do YYYY, h:mm:ss a')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/parse/index.d.ts b/date-fns/src/parse/index.d.ts
new file mode 100644
index 0000000..2c5eb60
--- /dev/null
+++ b/date-fns/src/parse/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { parse } from 'date-fns'
+export default parse
diff --git a/date-fns/src/parse/index.js b/date-fns/src/parse/index.js
new file mode 100644
index 0000000..ef8b2d3
--- /dev/null
+++ b/date-fns/src/parse/index.js
@@ -0,0 +1,626 @@
+import defaultLocale from '../locale/en-US/index'
+import subMilliseconds from '../subMilliseconds/index'
+import toDate from '../toDate/index'
+import assign from '../_lib/assign/index'
+import longFormatters from '../_lib/format/longFormatters/index'
+import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index'
+import {
+ isProtectedDayOfYearToken,
+ isProtectedWeekYearToken,
+ throwProtectedError
+} from '../_lib/protectedTokens/index'
+import toInteger from '../_lib/toInteger/index'
+import parsers from './_lib/parsers/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+var TIMEZONE_UNIT_PRIORITY = 10
+
+// This RegExp consists of three parts separated by `|`:
+// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token
+// (one of the certain letters followed by `o`)
+// - (\w)\1* matches any sequences of the same letter
+// - '' matches two quote characters in a row
+// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),
+// except a single quote symbol, which ends the sequence.
+// Two quote characters do not end the sequence.
+// If there is no matching single quote
+// then the sequence will continue until the end of the string.
+// - . matches any single character unmatched by previous parts of the RegExps
+var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g
+
+// This RegExp catches symbols escaped by quotes, and also
+// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`
+var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g
+
+var escapedStringRegExp = /^'([^]*?)'?$/
+var doubleQuoteRegExp = /''/g
+
+var notWhitespaceRegExp = /\S/
+var unescapedLatinCharacterRegExp = /[a-zA-Z]/
+
+/**
+ * @name parse
+ * @category Common Helpers
+ * @summary Parse the date.
+ *
+ * @description
+ * Return the date parsed from string using the given format string.
+ *
+ * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.
+ * > See: https://git.io/fxCyr
+ *
+ * The characters in the format string wrapped between two single quotes characters (') are escaped.
+ * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.
+ *
+ * Format of the format string is based on Unicode Technical Standard #35:
+ * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ * with a few additions (see note 5 below the table).
+ *
+ * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited
+ * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:
+ *
+ * ```javascript
+ * parse('23 AM', 'HH a', new Date())
+ * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time
+ * ```
+ *
+ * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true
+ *
+ * Accepted format string patterns:
+ * | Unit |Prior| Pattern | Result examples | Notes |
+ * |---------------------------------|-----|---------|-----------------------------------|-------|
+ * | Era | 140 | G..GGG | AD, BC | |
+ * | | | GGGG | Anno Domini, Before Christ | 2 |
+ * | | | GGGGG | A, B | |
+ * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |
+ * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |
+ * | | | yy | 44, 01, 00, 17 | 4 |
+ * | | | yyy | 044, 001, 123, 999 | 4 |
+ * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |
+ * | | | yyyyy | ... | 2,4 |
+ * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |
+ * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |
+ * | | | YY | 44, 01, 00, 17 | 4,6 |
+ * | | | YYY | 044, 001, 123, 999 | 4 |
+ * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |
+ * | | | YYYYY | ... | 2,4 |
+ * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |
+ * | | | RR | -43, 01, 00, 17 | 4,5 |
+ * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |
+ * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |
+ * | | | RRRRR | ... | 2,4,5 |
+ * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |
+ * | | | uu | -43, 01, 99, -99 | 4 |
+ * | | | uuu | -043, 001, 123, 999, -999 | 4 |
+ * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |
+ * | | | uuuuu | ... | 2,4 |
+ * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |
+ * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |
+ * | | | QQ | 01, 02, 03, 04 | |
+ * | | | QQQ | Q1, Q2, Q3, Q4 | |
+ * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |
+ * | | | QQQQQ | 1, 2, 3, 4 | 4 |
+ * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |
+ * | | | qo | 1st, 2nd, 3rd, 4th | 5 |
+ * | | | qq | 01, 02, 03, 04 | |
+ * | | | qqq | Q1, Q2, Q3, Q4 | |
+ * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |
+ * | | | qqqqq | 1, 2, 3, 4 | 3 |
+ * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |
+ * | | | Mo | 1st, 2nd, ..., 12th | 5 |
+ * | | | MM | 01, 02, ..., 12 | |
+ * | | | MMM | Jan, Feb, ..., Dec | |
+ * | | | MMMM | January, February, ..., December | 2 |
+ * | | | MMMMM | J, F, ..., D | |
+ * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |
+ * | | | Lo | 1st, 2nd, ..., 12th | 5 |
+ * | | | LL | 01, 02, ..., 12 | |
+ * | | | LLL | Jan, Feb, ..., Dec | |
+ * | | | LLLL | January, February, ..., December | 2 |
+ * | | | LLLLL | J, F, ..., D | |
+ * | Local week of year | 100 | w | 1, 2, ..., 53 | |
+ * | | | wo | 1st, 2nd, ..., 53th | 5 |
+ * | | | ww | 01, 02, ..., 53 | |
+ * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |
+ * | | | Io | 1st, 2nd, ..., 53th | 5 |
+ * | | | II | 01, 02, ..., 53 | 5 |
+ * | Day of month | 90 | d | 1, 2, ..., 31 | |
+ * | | | do | 1st, 2nd, ..., 31st | 5 |
+ * | | | dd | 01, 02, ..., 31 | |
+ * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |
+ * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |
+ * | | | DD | 01, 02, ..., 365, 366 | 7 |
+ * | | | DDD | 001, 002, ..., 365, 366 | |
+ * | | | DDDD | ... | 2 |
+ * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |
+ * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |
+ * | | | EEEEE | M, T, W, T, F, S, S | |
+ * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |
+ * | | | io | 1st, 2nd, ..., 7th | 5 |
+ * | | | ii | 01, 02, ..., 07 | 5 |
+ * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |
+ * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |
+ * | | | iiiii | M, T, W, T, F, S, S | 5 |
+ * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 |
+ * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |
+ * | | | eo | 2nd, 3rd, ..., 1st | 5 |
+ * | | | ee | 02, 03, ..., 01 | |
+ * | | | eee | Mon, Tue, Wed, ..., Sun | |
+ * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |
+ * | | | eeeee | M, T, W, T, F, S, S | |
+ * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |
+ * | | | co | 2nd, 3rd, ..., 1st | 5 |
+ * | | | cc | 02, 03, ..., 01 | |
+ * | | | ccc | Mon, Tue, Wed, ..., Sun | |
+ * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |
+ * | | | ccccc | M, T, W, T, F, S, S | |
+ * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | AM, PM | 80 | a..aaa | AM, PM | |
+ * | | | aaaa | a.m., p.m. | 2 |
+ * | | | aaaaa | a, p | |
+ * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |
+ * | | | bbbb | a.m., p.m., noon, midnight | 2 |
+ * | | | bbbbb | a, p, n, mi | |
+ * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |
+ * | | | BBBB | at night, in the morning, ... | 2 |
+ * | | | BBBBB | at night, in the morning, ... | |
+ * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |
+ * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |
+ * | | | hh | 01, 02, ..., 11, 12 | |
+ * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |
+ * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |
+ * | | | HH | 00, 01, 02, ..., 23 | |
+ * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |
+ * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |
+ * | | | KK | 01, 02, ..., 11, 00 | |
+ * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |
+ * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |
+ * | | | kk | 24, 01, 02, ..., 23 | |
+ * | Minute | 60 | m | 0, 1, ..., 59 | |
+ * | | | mo | 0th, 1st, ..., 59th | 5 |
+ * | | | mm | 00, 01, ..., 59 | |
+ * | Second | 50 | s | 0, 1, ..., 59 | |
+ * | | | so | 0th, 1st, ..., 59th | 5 |
+ * | | | ss | 00, 01, ..., 59 | |
+ * | Seconds timestamp | 40 | t | 512969520 | |
+ * | | | tt | ... | 2 |
+ * | Fraction of second | 30 | S | 0, 1, ..., 9 | |
+ * | | | SS | 00, 01, ..., 99 | |
+ * | | | SSS | 000, 0001, ..., 999 | |
+ * | | | SSSS | ... | 2 |
+ * | Milliseconds timestamp | 20 | T | 512969520900 | |
+ * | | | TT | ... | 2 |
+ * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |
+ * | | | XX | -0800, +0530, Z | |
+ * | | | XXX | -08:00, +05:30, Z | |
+ * | | | XXXX | -0800, +0530, Z, +123456 | 2 |
+ * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |
+ * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |
+ * | | | xx | -0800, +0530, +0000 | |
+ * | | | xxx | -08:00, +05:30, +00:00 | 2 |
+ * | | | xxxx | -0800, +0530, +0000, +123456 | |
+ * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |
+ * | Long localized date | NA | P | 05/29/1453 | 5,8 |
+ * | | | PP | May 29, 1453 | |
+ * | | | PPP | May 29th, 1453 | |
+ * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |
+ * | Long localized time | NA | p | 12:00 AM | 5,8 |
+ * | | | pp | 12:00:00 AM | |
+ * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |
+ * | | | PPpp | May 29, 1453, 12:00:00 AM | |
+ * | | | PPPpp | May 29th, 1453 at ... | |
+ * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |
+ * Notes:
+ * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale
+ * are the same as "stand-alone" units, but are different in some languages.
+ * "Formatting" units are declined according to the rules of the language
+ * in the context of a date. "Stand-alone" units are always nominative singular.
+ * In `format` function, they will produce different result:
+ *
+ * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`
+ *
+ * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`
+ *
+ * `parse` will try to match both formatting and stand-alone units interchangably.
+ *
+ * 2. Any sequence of the identical letters is a pattern, unless it is escaped by
+ * the single quote characters (see below).
+ * If the sequence is longer than listed in table:
+ * - for numerical units (`yyyyyyyy`) `parse` will try to match a number
+ * as wide as the sequence
+ * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.
+ * These variations are marked with "2" in the last column of the table.
+ *
+ * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.
+ * These tokens represent the shortest form of the quarter.
+ *
+ * 4. The main difference between `y` and `u` patterns are B.C. years:
+ *
+ * | Year | `y` | `u` |
+ * |------|-----|-----|
+ * | AC 1 | 1 | 1 |
+ * | BC 1 | 1 | 0 |
+ * | BC 2 | 2 | -1 |
+ *
+ * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:
+ *
+ * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`
+ *
+ * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`
+ *
+ * while `uu` will just assign the year as is:
+ *
+ * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`
+ *
+ * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`
+ *
+ * The same difference is true for local and ISO week-numbering years (`Y` and `R`),
+ * except local week-numbering years are dependent on `options.weekStartsOn`
+ * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}
+ * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).
+ *
+ * 5. These patterns are not in the Unicode Technical Standard #35:
+ * - `i`: ISO day of week
+ * - `I`: ISO week of year
+ * - `R`: ISO week-numbering year
+ * - `o`: ordinal number modifier
+ * - `P`: long localized date
+ * - `p`: long localized time
+ *
+ * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.
+ * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr
+ *
+ * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.
+ * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr
+ *
+ * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based
+ * on the given locale.
+ *
+ * using `en-US` locale: `P` => `MM/dd/yyyy`
+ * using `en-US` locale: `p` => `hh:mm a`
+ * using `pt-BR` locale: `P` => `dd/MM/yyyy`
+ * using `pt-BR` locale: `p` => `HH:mm`
+ *
+ * Values will be assigned to the date in the descending order of its unit's priority.
+ * Units of an equal priority overwrite each other in the order of appearance.
+ *
+ * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),
+ * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.
+ *
+ * `referenceDate` must be passed for correct work of the function.
+ * If you're not sure which `referenceDate` to supply, create a new instance of Date:
+ * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`
+ * In this case parsing will be done in the context of the current date.
+ * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,
+ * then `Invalid Date` will be returned.
+ *
+ * The result may vary by locale.
+ *
+ * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.
+ *
+ * If parsing failed, `Invalid Date` will be returned.
+ * Invalid Date is a Date, whose time value is NaN.
+ * Time value of Date: http://es5.github.io/#x15.9.1.1
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - Old `parse` was renamed to `toDate`.
+ * Now `parse` is a new function which parses a string using a provided format.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ * parse('2016-01-01')
+ *
+ * // v2.0.0 onward (toDate no longer accepts a string)
+ * toDate(1392098430000) // Unix to timestamp
+ * toDate(new Date(2014, 1, 11, 11, 30, 30)) // Cloning the date
+ * parse('2016-01-01', 'yyyy-MM-dd', new Date())
+ * ```
+ *
+ * @param {String} dateString - the string to parse
+ * @param {String} formatString - the string of tokens
+ * @param {Date|Number} referenceDate - defines values missing from the parsed dateString
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year
+ * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;
+ * see: https://git.io/fxCyr
+ * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;
+ * see: https://git.io/fxCyr
+ * @returns {Date} the parsed date
+ * @throws {TypeError} 3 arguments required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
+ * @throws {RangeError} `options.locale` must contain `match` property
+ * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} format string contains an unescaped latin alphabet character
+ *
+ * @example
+ * // Parse 11 February 2014 from middle-endian format:
+ * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())
+ * //=> Tue Feb 11 2014 00:00:00
+ *
+ * @example
+ * // Parse 28th of February in Esperanto locale in the context of 2010 year:
+ * import eo from 'date-fns/locale/eo'
+ * var result = parse('28-a de februaro', "do 'de' MMMM", new Date(2010, 0, 1), {
+ * locale: eo
+ * })
+ * //=> Sun Feb 28 2010 00:00:00
+ */
+export default function parse(
+ dirtyDateString,
+ dirtyFormatString,
+ dirtyReferenceDate,
+ dirtyOptions
+) {
+ requiredArgs(3, arguments)
+
+ var dateString = String(dirtyDateString)
+ var formatString = String(dirtyFormatString)
+ var options = dirtyOptions || {}
+
+ var locale = options.locale || defaultLocale
+
+ if (!locale.match) {
+ throw new RangeError('locale must contain match property')
+ }
+
+ var localeFirstWeekContainsDate =
+ locale.options && locale.options.firstWeekContainsDate
+ var defaultFirstWeekContainsDate =
+ localeFirstWeekContainsDate == null
+ ? 1
+ : toInteger(localeFirstWeekContainsDate)
+ var firstWeekContainsDate =
+ options.firstWeekContainsDate == null
+ ? defaultFirstWeekContainsDate
+ : toInteger(options.firstWeekContainsDate)
+
+ // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
+ if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
+ throw new RangeError(
+ 'firstWeekContainsDate must be between 1 and 7 inclusively'
+ )
+ }
+
+ var localeWeekStartsOn = locale.options && locale.options.weekStartsOn
+ var defaultWeekStartsOn =
+ localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)
+ var weekStartsOn =
+ options.weekStartsOn == null
+ ? defaultWeekStartsOn
+ : toInteger(options.weekStartsOn)
+
+ // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')
+ }
+
+ if (formatString === '') {
+ if (dateString === '') {
+ return toDate(dirtyReferenceDate)
+ } else {
+ return new Date(NaN)
+ }
+ }
+
+ var subFnOptions = {
+ firstWeekContainsDate: firstWeekContainsDate,
+ weekStartsOn: weekStartsOn,
+ locale: locale
+ }
+
+ // If timezone isn't specified, it will be set to the system timezone
+ var setters = [
+ {
+ priority: TIMEZONE_UNIT_PRIORITY,
+ subPriority: -1,
+ set: dateToSystemTimezone,
+ index: 0
+ }
+ ]
+
+ var i
+
+ var tokens = formatString
+ .match(longFormattingTokensRegExp)
+ .map(function(substring) {
+ var firstCharacter = substring[0]
+ if (firstCharacter === 'p' || firstCharacter === 'P') {
+ var longFormatter = longFormatters[firstCharacter]
+ return longFormatter(substring, locale.formatLong, subFnOptions)
+ }
+ return substring
+ })
+ .join('')
+ .match(formattingTokensRegExp)
+
+ const usedTokens = []
+
+ for (i = 0; i < tokens.length; i++) {
+ var token = tokens[i]
+
+ if (
+ !options.useAdditionalWeekYearTokens &&
+ isProtectedWeekYearToken(token)
+ ) {
+ throwProtectedError(token, formatString, dirtyDateString)
+ }
+ if (
+ !options.useAdditionalDayOfYearTokens &&
+ isProtectedDayOfYearToken(token)
+ ) {
+ throwProtectedError(token, formatString, dirtyDateString)
+ }
+
+ var firstCharacter = token[0]
+ var parser = parsers[firstCharacter]
+ if (parser) {
+ const { incompatibleTokens } = parser
+ if (Array.isArray(incompatibleTokens)) {
+ let incompatibleToken
+ for (let i = 0; i < usedTokens.length; i++) {
+ const usedToken = usedTokens[i].token
+ if (
+ incompatibleTokens.indexOf(usedToken) !== -1 ||
+ usedToken === firstCharacter
+ ) {
+ incompatibleToken = usedTokens[i]
+ break
+ }
+ }
+ if (incompatibleToken) {
+ throw new RangeError(
+ `The format string mustn't contain \`${incompatibleToken.fullToken}\` and \`${token}\` at the same time`
+ )
+ }
+ } else if (parser.incompatibleTokens === '*' && usedTokens.length) {
+ throw new RangeError(
+ `The format string mustn't contain \`${token}\` and any other token at the same time`
+ )
+ }
+
+ usedTokens.push({ token: firstCharacter, fullToken: token })
+
+ var parseResult = parser.parse(
+ dateString,
+ token,
+ locale.match,
+ subFnOptions
+ )
+
+ if (!parseResult) {
+ return new Date(NaN)
+ }
+
+ setters.push({
+ priority: parser.priority,
+ subPriority: parser.subPriority || 0,
+ set: parser.set,
+ validate: parser.validate,
+ value: parseResult.value,
+ index: setters.length
+ })
+
+ dateString = parseResult.rest
+ } else {
+ if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
+ throw new RangeError(
+ 'Format string contains an unescaped latin alphabet character `' +
+ firstCharacter +
+ '`'
+ )
+ }
+
+ // Replace two single quote characters with one single quote character
+ if (token === "''") {
+ token = "'"
+ } else if (firstCharacter === "'") {
+ token = cleanEscapedString(token)
+ }
+
+ // Cut token from string, or, if string doesn't match the token, return Invalid Date
+ if (dateString.indexOf(token) === 0) {
+ dateString = dateString.slice(token.length)
+ } else {
+ return new Date(NaN)
+ }
+ }
+ }
+
+ // Check if the remaining input contains something other than whitespace
+ if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {
+ return new Date(NaN)
+ }
+
+ var uniquePrioritySetters = setters
+ .map(function(setter) {
+ return setter.priority
+ })
+ .sort(function(a, b) {
+ return b - a
+ })
+ .filter(function(priority, index, array) {
+ return array.indexOf(priority) === index
+ })
+ .map(function(priority) {
+ return setters
+ .filter(function(setter) {
+ return setter.priority === priority
+ })
+ .sort(function(a, b) {
+ return b.subPriority - a.subPriority
+ })
+ })
+ .map(function(setterArray) {
+ return setterArray[0]
+ })
+
+ var date = toDate(dirtyReferenceDate)
+
+ if (isNaN(date)) {
+ return new Date(NaN)
+ }
+
+ // Convert the date in system timezone to the same date in UTC+00:00 timezone.
+ // This ensures that when UTC functions will be implemented, locales will be compatible with them.
+ // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37
+ var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))
+
+ var flags = {}
+ for (i = 0; i < uniquePrioritySetters.length; i++) {
+ var setter = uniquePrioritySetters[i]
+
+ if (
+ setter.validate &&
+ !setter.validate(utcDate, setter.value, subFnOptions)
+ ) {
+ return new Date(NaN)
+ }
+
+ var result = setter.set(utcDate, flags, setter.value, subFnOptions)
+ // Result is tuple (date, flags)
+ if (result[0]) {
+ utcDate = result[0]
+ assign(flags, result[1])
+ // Result is date
+ } else {
+ utcDate = result
+ }
+ }
+
+ return utcDate
+}
+
+function dateToSystemTimezone(date, flags) {
+ if (flags.timestampIsSet) {
+ return date
+ }
+
+ var convertedDate = new Date(0)
+ convertedDate.setFullYear(
+ date.getUTCFullYear(),
+ date.getUTCMonth(),
+ date.getUTCDate()
+ )
+ convertedDate.setHours(
+ date.getUTCHours(),
+ date.getUTCMinutes(),
+ date.getUTCSeconds(),
+ date.getUTCMilliseconds()
+ )
+ return convertedDate
+}
+
+function cleanEscapedString(input) {
+ return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'")
+}
diff --git a/date-fns/src/parse/index.js.flow b/date-fns/src/parse/index.js.flow
new file mode 100644
index 0000000..f8e1cfe
--- /dev/null
+++ b/date-fns/src/parse/index.js.flow
@@ -0,0 +1,63 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ dateString: string,
+ formatString: string,
+ referenceDate: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ useAdditionalWeekYearTokens?: boolean,
+ useAdditionalDayOfYearTokens?: boolean,
+ }
+) => Date
diff --git a/date-fns/src/parse/test.js b/date-fns/src/parse/test.js
new file mode 100644
index 0000000..cf0ad52
--- /dev/null
+++ b/date-fns/src/parse/test.js
@@ -0,0 +1,2665 @@
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import parse from '.'
+
+describe('parse', function () {
+ var referenceDate = new Date(1986, 3 /* Apr */, 4, 10, 32, 0, 900)
+
+ it('escapes characters between the single quote characters', function () {
+ var result = parse(
+ '2018 hello world July 2nd',
+ "yyyy 'hello world' MMMM do",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date(2018, 6 /* Jul */, 2))
+ })
+
+ it('two single quote characters are transformed into a "real" single quote', function () {
+ var result = parse("'5 o'clock'", "''h 'o''clock'''", referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 5))
+ })
+
+ it('accepts new line charactor', function () {
+ var result = parse(
+ '2014-04-04\n05:00:00',
+ "yyyy-MM-dd'\n'HH:mm:ss",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date(2014, 3 /* Apr */, 4, 5))
+ })
+
+ describe('era', function () {
+ it('abbreviated', function () {
+ var result = parse('10000 BC', 'yyyyy G', referenceDate)
+ assert.deepEqual(result, new Date(-9999, 0 /* Jan */, 1))
+ })
+
+ it('wide', function () {
+ var result = parse('2018 Anno Domini', 'yyyy GGGG', referenceDate)
+ assert.deepEqual(result, new Date(2018, 0 /* Jan */, 1))
+ })
+
+ it('narrow', function () {
+ var result = parse('44 B', 'y GGGGG', referenceDate)
+ assert.deepEqual(result, new Date(-43, 0 /* Jan */, 1))
+ })
+
+ it('with week-numbering year', function () {
+ var result = parse('44 B', 'Y GGGGG', referenceDate)
+ assert.deepEqual(result, new Date(-44, 11 /* Dec */, 30))
+ })
+
+ it('parses stand-alone BC', function () {
+ var result = parse('BC', 'G', referenceDate)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(0, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('parses stand-alone AD', function () {
+ var result = parse('AD', 'G', referenceDate)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(1, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ describe('validation', () => {
+ ;[
+ ['G', 'BC'],
+ ['R', '2019'],
+ ['u', '2019'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when G is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 420`,
+ `${token} G`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`G\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('calendar year', function () {
+ it('numeric', function () {
+ var result = parse('2017', 'y', referenceDate)
+ assert.deepEqual(result, new Date(2017, 0 /* Jan */, 1))
+ })
+
+ it('ordinal', function () {
+ var result = parse('2017th', 'yo', referenceDate)
+ assert.deepEqual(result, new Date(2017, 0 /* Jan */, 1))
+ })
+
+ describe('two-digit numeric year', function () {
+ it('works as expected', function () {
+ var result = parse('02', 'yy', referenceDate)
+ assert.deepEqual(result, new Date(2002, 0 /* Jan */, 1))
+ })
+
+ it('gets the 100 year range from `referenceDate`', function () {
+ var result = parse('02', 'yy', new Date(1860, 6 /* Jul */, 2))
+ assert.deepEqual(result, new Date(1902, 0 /* Jan */, 1))
+ })
+ })
+
+ it('three-digit zero-padding', function () {
+ var result = parse('123', 'yyy', referenceDate)
+ assert.deepEqual(result, new Date(123, 0 /* Jan */, 1))
+ })
+
+ it('four-digit zero-padding', function () {
+ var result = parse('0044', 'yyyy', referenceDate)
+ var expectedResult = new Date(0)
+ expectedResult.setFullYear(44, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('specified amount of digits', function () {
+ var result = parse('000001', 'yyyyyy', referenceDate)
+ var expectedResult = new Date(0)
+ expectedResult.setFullYear(1, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ describe('validation', () => {
+ ;[
+ ['y', '2019'],
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['u', '2019'],
+ ['w', '1'],
+ ['I', '1'],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when y is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 2019`,
+ `${token} y`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`y\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('local week-numbering year', function () {
+ it('numeric', function () {
+ var result = parse('2002', 'Y', referenceDate)
+ assert.deepEqual(result, new Date(2001, 11 /* Dec */, 30))
+ })
+
+ it('ordinal', function () {
+ var result = parse('12345th', 'Yo', referenceDate)
+ assert.deepEqual(result, new Date(12344, 11 /* Dec */, 31))
+ })
+
+ describe('two-digit numeric year', function () {
+ it('works as expected', function () {
+ var result = parse('02', 'YY', referenceDate, {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(2001, 11 /* Dec */, 30))
+ })
+
+ it('gets the 100 year range from `referenceDate`', function () {
+ var result = parse('02', 'YY', new Date(1860, 6 /* Jul */, 2), {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(1901, 11 /* Dec */, 29))
+ })
+ })
+
+ it('three-digit zero-padding', function () {
+ var result = parse('123', 'YYY', referenceDate)
+ assert.deepEqual(result, new Date(122, 11 /* Dec */, 27))
+ })
+
+ it('four-digit zero-padding', function () {
+ var result = parse('2018', 'YYYY', referenceDate, {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(2017, 11 /* Dec */, 31))
+ })
+
+ it('specified amount of digits', function () {
+ var result = parse('000001', 'YYYYYY', referenceDate)
+ var expectedResult = new Date(0)
+ expectedResult.setFullYear(0, 11 /* Dec */, 31)
+ expectedResult.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in options', function () {
+ var result = parse('2018', 'Y', referenceDate, {
+ weekStartsOn: 1 /* Mon */,
+ firstWeekContainsDate: 4,
+ })
+ assert.deepEqual(result, new Date(2018, 0 /* Jan */, 1))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['y', '2019'],
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['u', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['I', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['i', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when Y is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 2019`,
+ `${token} Y`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`Y\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('ISO week-numbering year', function () {
+ it('numeric', function () {
+ var result = parse('-1234', 'R', referenceDate)
+ assert.deepEqual(result, new Date(-1234, 0 /* Jan */, 3))
+ })
+
+ it('two-digit zero-padding', function () {
+ var result = parse('-02', 'RR', referenceDate)
+ assert.deepEqual(result, new Date(-3, 11 /* Dec */, 29))
+ })
+
+ it('three-digit zero-padding', function () {
+ var result = parse('123', 'RRR', referenceDate)
+ assert.deepEqual(result, new Date(123, 0 /* Jan */, 4))
+ })
+
+ it('four-digit zero-padding', function () {
+ var result = parse('2018', 'RRRR', referenceDate)
+ assert.deepEqual(result, new Date(2018, 0 /* Jan */, 1))
+ })
+
+ it('specified amount of digits', function () {
+ var result = parse('000001', 'RRRRRR', referenceDate)
+ var expectedResult = new Date(0)
+ expectedResult.setFullYear(1, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ describe('validation', () => {
+ ;[
+ ['G', 'AD'],
+ ['y', '2019'],
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['u', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['w', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when R is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 2019`,
+ `${token} R`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`R\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('extended year', function () {
+ it('numeric', function () {
+ var result = parse('-1234', 'u', referenceDate)
+ assert.deepEqual(result, new Date(-1234, 0 /* Jan */, 1))
+ })
+
+ it('two-digit zero-padding', function () {
+ var result = parse('-02', 'uu', referenceDate)
+ assert.deepEqual(result, new Date(-2, 0 /* Jan */, 1))
+ })
+
+ it('three-digit zero-padding', function () {
+ var result = parse('123', 'uuu', referenceDate)
+ assert.deepEqual(result, new Date(123, 0 /* Jan */, 1))
+ })
+
+ it('four-digit zero-padding', function () {
+ var result = parse('2018', 'uuuu', referenceDate)
+ assert.deepEqual(result, new Date(2018, 0 /* Jan */, 1))
+ })
+
+ it('specified amount of digits', function () {
+ var result = parse('000001', 'uuuuuu', referenceDate)
+ var expectedResult = new Date(0)
+ expectedResult.setFullYear(1, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ describe('validation', () => {
+ ;[
+ ['G', 'AD'],
+ ['y', '2019'],
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['u', '2019'],
+ ['w', '1'],
+ ['I', '1'],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when u is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 2019`,
+ `${token} u`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`u\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('quarter with following year', function () {
+ it('first quarter', function () {
+ var result = parse('Q1/2020', 'QQQ/yyyy', referenceDate)
+ assert.deepEqual(result, new Date(2020, 0 /* Jan */, 1))
+ })
+
+ it('second quarter', function () {
+ var result = parse('Q2/2020', 'QQQ/yyyy', referenceDate)
+ assert.deepEqual(result, new Date(2020, 3 /* Apr */, 1))
+ })
+
+ it('third quarter', function () {
+ var result = parse('Q3/2020', 'QQQ/yyyy', referenceDate)
+ assert.deepEqual(result, new Date(2020, 6 /* Jul */, 1))
+ })
+
+ it('fourth quarter', function () {
+ var result = parse('Q4/2020', 'QQQ/yyyy', referenceDate)
+ assert.deepEqual(result, new Date(2020, 9 /* Oct */, 1))
+ })
+ })
+
+ describe('quarter (formatting)', function () {
+ it('numeric', function () {
+ var result = parse('1', 'Q', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ it('ordinal', function () {
+ var result = parse('1st', 'Qo', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('02', 'QQ', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 1))
+ })
+
+ it('abbreviated', function () {
+ var result = parse('Q3', 'QQQ', referenceDate)
+ assert.deepEqual(result, new Date(1986, 6 /* Jul */, 1))
+ })
+
+ it('wide', function () {
+ var result = parse('4st quarter', 'QQQQ', referenceDate)
+ assert.deepEqual(result, new Date(1986, 9 /* Oct */, 1))
+ })
+
+ it('narrow', function () {
+ var result = parse('1', 'QQQQQ', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['w', '1'],
+ ['I', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when Q is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} Q`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`Q\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('quarter (stand-alone)', function () {
+ it('numeric', function () {
+ var result = parse('1', 'q', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ it('ordinal', function () {
+ var result = parse('1th', 'qo', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('02', 'qq', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 1))
+ })
+
+ it('abbreviated', function () {
+ var result = parse('Q3', 'qqq', referenceDate)
+ assert.deepEqual(result, new Date(1986, 6 /* Jul */, 1))
+ })
+
+ it('wide', function () {
+ var result = parse('4th quarter', 'qqqq', referenceDate)
+ assert.deepEqual(result, new Date(1986, 9 /* Oct */, 1))
+ })
+
+ it('narrow', function () {
+ var result = parse('1', 'qqqqq', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['w', '1'],
+ ['I', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when q is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} q`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`q\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('month (formatting)', function () {
+ it('numeric', function () {
+ var result = parse('6', 'M', referenceDate)
+ assert.deepEqual(result, new Date(1986, 5 /* Jun */, 1))
+ })
+
+ it('ordinal', function () {
+ var result = parse('6th', 'Mo', referenceDate)
+ assert.deepEqual(result, new Date(1986, 5 /* Jun */, 1))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('01', 'MM', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ it('abbreviated', function () {
+ var result = parse('Nov', 'MMM', referenceDate)
+ assert.deepEqual(result, new Date(1986, 10 /* Nov */, 1))
+ })
+
+ it('wide', function () {
+ var result = parse('February', 'MMMM', referenceDate)
+ assert.deepEqual(result, new Date(1986, 1 /* Feb */, 1))
+ })
+
+ it('narrow', function () {
+ var result = parse('J', 'MMMMM', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['w', '1'],
+ ['I', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when M is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} M`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`M\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('month (stand-alone)', function () {
+ it('numeric', function () {
+ var result = parse('6', 'L', referenceDate)
+ assert.deepEqual(result, new Date(1986, 5 /* Jun */, 1))
+ })
+
+ it('ordinal', function () {
+ var result = parse('6th', 'Lo', referenceDate)
+ assert.deepEqual(result, new Date(1986, 5 /* Jun */, 1))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('01', 'LL', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ it('abbreviated', function () {
+ var result = parse('Nov', 'LLL', referenceDate)
+ assert.deepEqual(result, new Date(1986, 10 /* Nov */, 1))
+ })
+
+ it('wide', function () {
+ var result = parse('February', 'LLLL', referenceDate)
+ assert.deepEqual(result, new Date(1986, 1 /* Feb */, 1))
+ })
+
+ it('narrow', function () {
+ var result = parse('J', 'LLLLL', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['w', '1'],
+ ['I', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when L is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} L`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`L\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('local week of year', function () {
+ it('numeric', function () {
+ var result = parse('49', 'w', referenceDate)
+ assert.deepEqual(result, new Date(1986, 10 /* Nov */, 30))
+ })
+
+ it('ordinal', function () {
+ var result = parse('49th', 'wo', referenceDate)
+ assert.deepEqual(result, new Date(1986, 10 /* Nov */, 30))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('01', 'ww', referenceDate)
+ assert.deepEqual(result, new Date(1985, 11 /* Dec */, 29))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in options', function () {
+ var result = parse('49', 'w', referenceDate, {
+ weekStartsOn: 1 /* Mon */,
+ firstWeekContainsDate: 4,
+ })
+ assert.deepEqual(result, new Date(1986, 11 /* Dec */, 1))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['y', '2019'],
+ ['R', '2019'],
+ ['u', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['w', '1'],
+ ['I', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['i', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when w is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} w`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`w\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('ISO week of year', function () {
+ it('numeric', function () {
+ var result = parse('49', 'I', referenceDate)
+ assert.deepEqual(result, new Date(1986, 11 /* Dec */, 1))
+ })
+
+ it('ordinal', function () {
+ var result = parse('49th', 'Io', referenceDate)
+ assert.deepEqual(result, new Date(1986, 11 /* Dec */, 1))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('01', 'II', referenceDate)
+ assert.deepEqual(result, new Date(1985, 11 /* Dec */, 30))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['y', '2019'],
+ ['Y', '2019'],
+ ['u', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['w', '1'],
+ ['I', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when I is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} I`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`I\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('day of month', function () {
+ it('numeric', function () {
+ var result = parse('28', 'd', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 28))
+ })
+
+ it('ordinal', function () {
+ var result = parse('28th', 'do', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 28))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('01', 'dd', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 1))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['w', '1'],
+ ['I', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when d is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} d`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`d\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('day of year', function () {
+ it('numeric', function () {
+ var result = parse('200', 'D', referenceDate, {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(1986, 6 /* Jul */, 19))
+ })
+
+ it('ordinal', function () {
+ var result = parse('200th', 'Do', referenceDate)
+ assert.deepEqual(result, new Date(1986, 6 /* Jul */, 19))
+ })
+
+ it('two-digit zero-padding', function () {
+ var result = parse('01', 'DD', referenceDate, {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ it('three-digit zero-padding', function () {
+ var result = parse('001', 'DDD', referenceDate)
+ assert.deepEqual(result, new Date(1986, 0 /* Jan */, 1))
+ })
+
+ it('specified amount of digits', function () {
+ var result = parse('000200', 'DDDDDD', referenceDate)
+ assert.deepEqual(result, new Date(1986, 6 /* Jul */, 19))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['Y', '2019'],
+ ['R', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['w', '1'],
+ ['I', '1'],
+ ['d', '1'],
+ ['D', '1'],
+ ['E', 'Mon'],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, _options]) => {
+ it(`throws an error when D is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} D`,
+ referenceDate,
+ { useAdditionalDayOfYearTokens: true }
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`D\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('day of week (formatting)', function () {
+ it('abbreviated', function () {
+ var result = parse('Mon', 'E', referenceDate)
+ assert.deepEqual(result, new Date(1986, 2 /* Mar */, 31))
+ })
+
+ it('wide', function () {
+ var result = parse('Tuesday', 'EEEE', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 1))
+ })
+
+ it('narrow', function () {
+ var result = parse('W', 'EEEEE', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 2))
+ })
+
+ it('short', function () {
+ var result = parse('Th', 'EEEEEE', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 3))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = parse('Thursday', 'EEEE', referenceDate, {
+ weekStartsOn: /* Fri */ 5,
+ })
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 10))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['E', 'Mon'],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when E is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} Mon`,
+ `${token} E`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`E\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('ISO day of week (formatting)', function () {
+ it('numeric', function () {
+ var result = parse('1', 'i', referenceDate)
+ assert.deepEqual(result, new Date(1986, 2 /* Mar */, 31))
+ })
+
+ it('ordinal', function () {
+ var result = parse('1st', 'io', referenceDate)
+ assert.deepEqual(result, new Date(1986, 2 /* Mar */, 31))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('02', 'ii', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 1))
+ })
+
+ it('abbreviated', function () {
+ var result = parse('Wed', 'iii', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 2))
+ })
+
+ it('wide', function () {
+ var result = parse('Thursday', 'iiii', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 3))
+ })
+
+ it('narrow', function () {
+ var result = parse('S', 'iiiii', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 6))
+ })
+
+ it('short', function () {
+ var result = parse('Fr', 'iiiiii', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['y', '2019'],
+ ['Y', '2019'],
+ ['u', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['w', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['E', 'Mon'],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when i is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} i`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`i\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('local day of week (formatting)', function () {
+ it('numeric', function () {
+ var result = parse('2', 'e', referenceDate)
+ assert.deepEqual(result, new Date(1986, 2 /* Mar */, 31))
+ })
+
+ it('ordinal', function () {
+ var result = parse('2nd', 'eo', referenceDate)
+ assert.deepEqual(result, new Date(1986, 2 /* Mar */, 31))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('03', 'ee', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 1))
+ })
+
+ it('abbreviated', function () {
+ var result = parse('Wed', 'eee', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 2))
+ })
+
+ it('wide', function () {
+ var result = parse('Thursday', 'eeee', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 3))
+ })
+
+ it('narrow', function () {
+ var result = parse('S', 'eeeee', referenceDate)
+ assert.deepEqual(result, new Date(1986, 2 /* Mar */, 30))
+ })
+
+ it('short', function () {
+ var result = parse('Fr', 'eeeeee', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = parse('7th', 'eo', referenceDate, {
+ weekStartsOn: /* Fri */ 5,
+ })
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 10))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['y', '2019'],
+ ['R', '2019'],
+ ['u', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['I', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['E', 'Mon'],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when e is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} e`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`e\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('local day of week (stand-alone)', function () {
+ it('numeric', function () {
+ var result = parse('2', 'c', referenceDate)
+ assert.deepEqual(result, new Date(1986, 2 /* Mar */, 31))
+ })
+
+ it('ordinal', function () {
+ var result = parse('2nd', 'co', referenceDate)
+ assert.deepEqual(result, new Date(1986, 2 /* Mar */, 31))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('03', 'cc', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 1))
+ })
+
+ it('abbreviated', function () {
+ var result = parse('Wed', 'ccc', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 2))
+ })
+
+ it('wide', function () {
+ var result = parse('Thursday', 'cccc', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 3))
+ })
+
+ it('narrow', function () {
+ var result = parse('S', 'ccccc', referenceDate)
+ assert.deepEqual(result, new Date(1986, 2 /* Mar */, 30))
+ })
+
+ it('short', function () {
+ var result = parse('Fr', 'cccccc', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = parse('7th', 'co', referenceDate, {
+ weekStartsOn: /* Fri */ 5,
+ })
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 10))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['y', '2019'],
+ ['R', '2019'],
+ ['u', '2019'],
+ ['Q', '1'],
+ ['q', '1'],
+ ['M', '1'],
+ ['L', '1'],
+ ['I', '1'],
+ ['d', '1'],
+ ['D', '1', { useAdditionalDayOfYearTokens: true }],
+ ['E', 'Mon'],
+ ['i', '1'],
+ ['e', '1'],
+ ['c', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example, options]) => {
+ it(`throws an error when c is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} c`,
+ referenceDate,
+ options
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`c\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('AM, PM', function () {
+ it('abbreviated', function () {
+ var result = parse('5 AM', 'h a', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 5))
+ })
+
+ it('12 AM', function () {
+ var result = parse('12 AM', 'h aa', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 0))
+ })
+
+ it('12 PM', function () {
+ var result = parse('12 PM', 'h aaa', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 12))
+ })
+
+ it('wide', function () {
+ var result = parse('5 p.m.', 'h aaaa', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 17))
+ })
+
+ it('narrow', function () {
+ var result = parse('11 a', 'h aaaaa', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 11))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['a', 'AM'],
+ ['b', 'AM'],
+ ['B', 'in the morning'],
+ ['H', '1'],
+ ['K', '1'],
+ ['k', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when a is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} AM`,
+ `${token} a`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`a\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('AM, PM, noon, midnight', function () {
+ it('abbreviated', function () {
+ var result = parse('noon', 'b', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 12))
+ })
+
+ it('wide', function () {
+ var result = parse('midnight', 'bbbb', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 0))
+ })
+
+ it('narrow', function () {
+ var result = parse('mi', 'bbbbb', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 0))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['a', 'AM'],
+ ['b', 'AM'],
+ ['B', 'in the morning'],
+ ['H', '1'],
+ ['K', '1'],
+ ['k', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when b is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} AM`,
+ `${token} b`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`b\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('flexible day period', function () {
+ it('abbreviated', function () {
+ var result = parse('2 at night', 'h B', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 2))
+ })
+
+ it('wide', function () {
+ var result = parse('12 in the afternoon', 'h BBBB', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 12))
+ })
+
+ it('narrow', function () {
+ var result = parse('5 in the evening', 'h BBBBB', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 17))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['a', 'AM'],
+ ['b', 'AM'],
+ ['B', 'in the morning'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when B is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} in the morning`,
+ `${token} B`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`B\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('hour [1-12]', function () {
+ it('numeric', function () {
+ var result = parse('1', 'h', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 1))
+ })
+
+ it('ordinal', function () {
+ var result = parse('1st', 'ho', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 1))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('01', 'hh', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 1))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['h', '1'],
+ ['H', '1'],
+ ['K', '1'],
+ ['k', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when h is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} h`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`h\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('hour [0-23]', function () {
+ it('numeric', function () {
+ var result = parse('12', 'H', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 12))
+ })
+
+ it('ordinal', function () {
+ var result = parse('12th', 'Ho', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 12))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('00', 'HH', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 0))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['a', 'AM'],
+ ['b', 'AM'],
+ ['h', '1'],
+ ['H', '1'],
+ ['K', '1'],
+ ['k', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when H is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} H`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`H\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('hour [0-11]', function () {
+ it('numeric', function () {
+ var result = parse('1', 'K', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 1))
+ })
+
+ it('ordinal', function () {
+ var result = parse('1st', 'Ko', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 1))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('1', 'KK', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 1))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['a', 'AM'],
+ ['b', 'AM'],
+ ['h', '1'],
+ ['H', '1'],
+ ['K', '1'],
+ ['k', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when K is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} K`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`K\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('hour [1-24]', function () {
+ it('numeric', function () {
+ var result = parse('12', 'k', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 12))
+ })
+
+ it('ordinal', function () {
+ var result = parse('12th', 'ko', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 12))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('24', 'kk', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 0))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['a', 'AM'],
+ ['b', 'AM'],
+ ['h', '1'],
+ ['H', '1'],
+ ['K', '1'],
+ ['k', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when k is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} k`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`k\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('minute', function () {
+ it('numeric', function () {
+ var result = parse('25', 'm', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 25))
+ })
+
+ it('ordinal', function () {
+ var result = parse('25th', 'mo', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 25))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('05', 'mm', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 5))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['m', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when m is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} m`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`m\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('second', function () {
+ it('numeric', function () {
+ var result = parse('25', 's', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 32, 25))
+ })
+
+ it('ordinal', function () {
+ var result = parse('25th', 'so', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 32, 25))
+ })
+
+ it('zero-padding', function () {
+ var result = parse('05', 'ss', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 32, 5))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['s', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when s is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} s`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`s\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('fraction of second', function () {
+ it('1/10 of second', function () {
+ var result = parse('1', 'S', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 32, 0, 100))
+ })
+
+ it('1/100 of second', function () {
+ var result = parse('12', 'SS', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 32, 0, 120))
+ })
+
+ it('millisecond', function () {
+ var result = parse('123', 'SSS', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 32, 0, 123))
+ })
+
+ it('specified amount of digits', function () {
+ var result = parse('567890', 'SSSSSS', referenceDate)
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 10, 32, 0, 567))
+ })
+
+ describe('validation', () => {
+ ;[
+ ['S', '1'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when S is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} 1`,
+ `${token} S`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`S\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('timezone (ISO-8601 w/ Z)', function () {
+ describe('X', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-0530',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123Z',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+
+ it('hours', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+05',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123+05:00'))
+ })
+ })
+
+ describe('XX', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-0530',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123Z',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+ })
+
+ describe('XXX', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-05:30',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123Z',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+ })
+
+ describe('XXXX', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-0530',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXXXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123Z',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXXXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+
+ it('hours, minutes and seconds', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+053045',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXXXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:37:53.123+05:30'))
+ })
+ })
+
+ describe('XXXXX', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-05:30',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123Z',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+
+ it('hours, minutes and seconds', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+05:30:45',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:37:53.123+05:30'))
+ })
+ })
+
+ describe('validation', () => {
+ ;[
+ ['X', '-0530'],
+ ['x', '-0530'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when X is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} -0530`,
+ `${token} X`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`X\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('timezone (ISO-8601 w/o Z)', function () {
+ describe('x', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-0530',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+0000',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+
+ it('hours', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+05',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123+05:00'))
+ })
+ })
+
+ describe('xx', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-0530',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+0000',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+ })
+
+ describe('xxx', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-05:30',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+00:00',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+ })
+
+ describe('xxxx', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-0530',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxxxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+0000',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxxxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+
+ it('hours, minutes and seconds', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+053045',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxxxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:37:53.123+05:30'))
+ })
+ })
+
+ describe('xxxxx', function () {
+ it('hours and minutes', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123-05:30',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxxxxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123-05:30'))
+ })
+
+ it('GMT', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+00:00',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxxxxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:38:38.123Z'))
+ })
+
+ it('hours, minutes and seconds', function () {
+ var result = parse(
+ '2016-11-25T16:38:38.123+05:30:45',
+ "yyyy-MM-dd'T'HH:mm:ss.SSSxxxxx",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date('2016-11-25T16:37:53.123+05:30'))
+ })
+ })
+
+ describe('validation', () => {
+ ;[
+ ['X', '-0530'],
+ ['x', '-0530'],
+ ['t', '512969520'],
+ ['T', '512969520900'],
+ ].forEach(([token, example]) => {
+ it(`throws an error when x is used after ${token}`, () => {
+ const block = parse.bind(
+ null,
+ `${example} -0530`,
+ `${token} x`,
+ referenceDate
+ )
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`${token}\` and \`x\` at the same time`
+ )
+ )
+ })
+ })
+ })
+ })
+
+ describe('seconds timestamp', function () {
+ it('numeric', function () {
+ var result = parse('512969520', 't', referenceDate)
+ assert.deepEqual(result, new Date(512969520000))
+ })
+
+ it('specified amount of digits', function () {
+ var result = parse(
+ '00000000000512969520',
+ 'tttttttttttttttttttt',
+ referenceDate
+ )
+ assert.deepEqual(result, new Date(512969520000))
+ })
+
+ it(`throws an error when it is used after any token`, () => {
+ const block = parse.bind(null, `1 512969520`, `h t`, referenceDate)
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`t\` and any other token at the same time`
+ )
+ )
+ })
+ })
+
+ describe('milliseconds timestamp', function () {
+ it('numeric', function () {
+ var result = parse('512969520900', 'T', referenceDate)
+ assert.deepEqual(result, new Date(512969520900))
+ })
+
+ it('specified amount of digits', function () {
+ var result = parse(
+ '00000000512969520900',
+ 'TTTTTTTTTTTTTTTTTTTT',
+ referenceDate
+ )
+ assert.deepEqual(result, new Date(512969520900))
+ })
+
+ it(`throws an error when it is used after any token`, () => {
+ const block = parse.bind(null, `1 512969520900`, `h T`, referenceDate)
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ new RegExp(
+ `The format string mustn't contain \`T\` and any other token at the same time`
+ )
+ )
+ })
+ })
+
+ describe('common formats', function () {
+ it('ISO-8601', function () {
+ var result = parse('20161105T040404', "yyyyMMdd'T'HHmmss", referenceDate)
+ assert.deepEqual(result, new Date(2016, 10 /* Nov */, 5, 4, 4, 4, 0))
+ })
+
+ it('ISO week-numbering date', function () {
+ var result = parse(
+ '2016W474T153005',
+ "RRRR'W'IIi'T'HHmmss",
+ referenceDate
+ )
+ assert.deepEqual(result, new Date(2016, 10 /* Nov */, 24, 15, 30, 5, 0))
+ })
+
+ it('ISO day of year date', function () {
+ var result = parse('2010123T235959', "yyyyDDD'T'HHmmss", referenceDate)
+ assert.deepEqual(result, new Date(2010, 4 /* May */, 3, 23, 59, 59, 0))
+ })
+
+ it('Date.prototype.toString()', function () {
+ var dateString = 'Wed Jul 02 2014 05:30:15 GMT+0600'
+ var formatString = "EEE MMM dd yyyy HH:mm:ss 'GMT'xx"
+ var result = parse(dateString, formatString, referenceDate)
+ assert.deepEqual(result, new Date(dateString))
+ })
+
+ it('Date.prototype.toISOString()', function () {
+ var dateString = '2014-07-02T05:30:15.123+06:00'
+ var formatString = "yyyy-MM-dd'T'HH:mm:ss.SSSxxx"
+ var result = parse(dateString, formatString, referenceDate)
+ assert.deepEqual(result, new Date(dateString))
+ })
+
+ it('middle-endian', function () {
+ var result = parse(
+ '5 a.m. 07/02/2016',
+ 'h aaaa MM/dd/yyyy',
+ referenceDate
+ )
+ assert.deepEqual(result, new Date(2016, 6 /* Jul */, 2, 5, 0, 0, 0))
+ })
+
+ it('little-endian', function () {
+ var result = parse('02.07.1995', 'dd.MM.yyyy', referenceDate)
+ assert.deepEqual(result, new Date(1995, 6 /* Jul */, 2, 0, 0, 0, 0))
+ })
+ })
+
+ describe('priority', function () {
+ it("units of lower priority don't overwrite values of higher priority", function () {
+ var dateString = '+06:00 123 15 30 05 02 07 2014'
+ var formatString = 'xxx SSS ss mm HH dd MM yyyy'
+ var result = parse(dateString, formatString, referenceDate)
+ assert.deepEqual(result, new Date('2014-07-02T05:30:15.123+06:00'))
+ })
+ })
+
+ describe('implicit conversion of arguments', function () {
+ it('`dateString`', function () {
+ // eslint-disable-next-line no-new-wrappers
+ var dateString = new String('20161105T040404')
+ // $ExpectedMistake
+ var result = parse(dateString, "yyyyMMdd'T'HHmmss", referenceDate)
+ assert.deepEqual(result, new Date(2016, 10 /* Nov */, 5, 4, 4, 4, 0))
+ })
+
+ it('`formatString`', function () {
+ // eslint-disable-next-line no-new-wrappers
+ var formatString = new String("yyyyMMdd'T'HHmmss")
+ // $ExpectedMistake
+ var result = parse('20161105T040404', formatString, referenceDate)
+ assert.deepEqual(result, new Date(2016, 10 /* Nov */, 5, 4, 4, 4, 0))
+ })
+
+ it('`options.weekStartsOn`', function () {
+ // $ExpectedMistake
+ var result = parse('2018', 'Y', referenceDate, {
+ weekStartsOn: '1' /* Mon */,
+ firstWeekContainsDate: 4,
+ })
+ assert.deepEqual(result, new Date(2018, 0 /* Jan */, 1))
+ })
+
+ it('`options.firstWeekContainsDate`', function () {
+ // $ExpectedMistake
+ var result = parse('2018', 'Y', referenceDate, {
+ weekStartsOn: 1 /* Mon */,
+ firstWeekContainsDate: '4',
+ })
+ assert.deepEqual(result, new Date(2018, 0 /* Jan */, 1))
+ })
+ })
+
+ describe('with `options.strictValidation` = true', function () {
+ describe('calendar year', function () {
+ it('returns `Invalid Date` for year zero', function () {
+ var result = parse('0', 'y', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('works correctly for two-digit year zero', function () {
+ var result = parse('00', 'yy', referenceDate)
+ assert.deepEqual(result, new Date(2000, 0 /* Jan */, 1))
+ })
+ })
+
+ describe('local week-numbering year', function () {
+ it('returns `Invalid Date` for year zero', function () {
+ var result = parse('0', 'Y', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('works correctly for two-digit year zero', function () {
+ var result = parse('00', 'YY', referenceDate, {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(1999, 11 /* Dec */, 26))
+ })
+ })
+
+ describe('quarter (formatting)', function () {
+ it('returns `Invalid Date` for invalid quarter', function () {
+ var result = parse('0', 'Q', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('quarter (stand-alone)', function () {
+ it('returns `Invalid Date` for invalid quarter', function () {
+ var result = parse('5', 'q', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('month (formatting)', function () {
+ it('returns `Invalid Date` for invalid month', function () {
+ var result = parse('00', 'MM', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('month (stand-alone)', function () {
+ it('returns `Invalid Date` for invalid month', function () {
+ var result = parse('13', 'LL', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('local week of year', function () {
+ it('returns `Invalid Date` for invalid week', function () {
+ var result = parse('0', 'w', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('ISO week of year', function () {
+ it('returns `Invalid Date` for invalid week', function () {
+ var result = parse('54', 'II', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('day of month', function () {
+ it('returns `Invalid Date` for invalid day of the month', function () {
+ var result = parse('30', 'd', new Date(2012, 1 /* Feb */, 1))
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` for 29th of February of non-leap year', function () {
+ var result = parse('29', 'd', new Date(2014, 1 /* Feb */, 1))
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('parses 29th of February of leap year', function () {
+ var result = parse('29', 'd', new Date(2012, 1 /* Feb */, 1))
+ assert.deepEqual(result, new Date(2012, 1 /* Feb */, 29))
+ })
+ })
+
+ describe('day of year', function () {
+ it('returns `Invalid Date` for invalid day of the year', function () {
+ var result = parse('0', 'D', referenceDate, {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` for 366th day of non-leap year', function () {
+ var result = parse('366', 'D', new Date(2014, 1 /* Feb */, 1), {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('parses 366th day of leap year', function () {
+ var result = parse('366', 'D', new Date(2012, 1 /* Feb */, 1), {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(2012, 11 /* Dec */, 31))
+ })
+ })
+
+ describe('ISO day of week (formatting)', function () {
+ it('returns `Invalid Date` for day zero', function () {
+ var result = parse('0', 'i', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` for eight day of week', function () {
+ var result = parse('8', 'i', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('local day of week (formatting)', function () {
+ it('returns `Invalid Date` for day zero', function () {
+ var result = parse('0', 'e', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` for eight day of week', function () {
+ var result = parse('8', 'e', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('local day of week (stand-alone)', function () {
+ it('returns `Invalid Date` for day zero', function () {
+ var result = parse('0', 'c', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` for eight day of week', function () {
+ var result = parse('8', 'c', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('hour [1-12]', function () {
+ it('returns `Invalid Date` for hour zero', function () {
+ var result = parse('00', 'hh', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` for invalid hour', function () {
+ var result = parse('13', 'hh', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('hour [0-23]', function () {
+ it('returns `Invalid Date` for invalid hour', function () {
+ var result = parse('24', 'HH', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('hour [0-11]', function () {
+ it('returns `Invalid Date` for invalid hour', function () {
+ var result = parse('12', 'KK', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('hour [1-24]', function () {
+ it('returns `Invalid Date` for hour zero', function () {
+ var result = parse('00', 'kk', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` for invalid hour', function () {
+ var result = parse('25', 'kk', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('minute', function () {
+ it('returns `Invalid Date` for invalid minute', function () {
+ var result = parse('60', 'mm', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+
+ describe('second', function () {
+ it('returns `Invalid Date` for invalid second', function () {
+ var result = parse('60', 'ss', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+ })
+ })
+
+ describe('custom locale', function () {
+ it('allows to pass a custom locale', function () {
+ var customLocale = {
+ match: {
+ era: function () {
+ return {
+ value: 0,
+ rest: ' it works!',
+ }
+ },
+ },
+ }
+ // $ExpectedMistake
+ var result = parse('2018 foobar', "y G 'it works!'", referenceDate, {
+ locale: customLocale,
+ })
+ assert.deepEqual(result, new Date(-2017, 0 /* Jan */, 1))
+ })
+
+ it('throws `RangeError` if `options.locale` does not contain `match` property', function () {
+ var block = parse.bind(
+ null,
+ '2016-11-25 04 AM',
+ 'yyyy-MM-dd hh a',
+ referenceDate,
+ // $ExpectedMistake
+ { locale: {} }
+ )
+ assert.throws(block, RangeError)
+ })
+ })
+
+ it('accepts a timestamp as `referenceDate`', function () {
+ var dateString = '6 p.m.'
+ var formatString = 'h aaaa'
+ var result = parse(dateString, formatString, referenceDate.getTime())
+ assert.deepEqual(result, new Date(1986, 3 /* Apr */, 4, 18))
+ })
+
+ it('does not mutate `referenceDate`', function () {
+ var referenceDateClone1 = new Date(referenceDate.getTime())
+ var referenceDateClone2 = new Date(referenceDate.getTime())
+ var dateString = '6 p.m.'
+ var formatString = 'h aaaa'
+ parse(dateString, formatString, referenceDateClone1)
+ assert.deepEqual(referenceDateClone1, referenceDateClone2)
+ })
+
+ describe('failure', function () {
+ it('returns `referenceDate` if `dateString` and `formatString` are empty strings', function () {
+ var dateString = ''
+ var formatString = ''
+ var result = parse(dateString, formatString, referenceDate)
+ assert.deepEqual(result, referenceDate)
+ })
+
+ it('returns `referenceDate` if no tokens in `formatString` are provided', function () {
+ var dateString = 'not a token'
+ var formatString = "'not a token'"
+ var result = parse(dateString, formatString, referenceDate)
+ assert.deepEqual(result, referenceDate)
+ })
+
+ it("returns `Invalid Date` if `formatString` doesn't match `dateString`", function () {
+ var dateString = '2017-01-01'
+ var formatString = 'yyyy/MM/dd'
+ var result = parse(dateString, formatString, referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if `formatString` tokens failed to parse a value', function () {
+ var dateString = '2017-01-01'
+ var formatString = 'MMMM do yyyy'
+ var result = parse(dateString, formatString, referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if `formatString` is empty string but `dateString` is not', function () {
+ var dateString = '2017-01-01'
+ var formatString = ''
+ var result = parse(dateString, formatString, referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if `referenceDate` is `Invalid Date`', function () {
+ var dateString = '2014-07-02T05:30:15.123+06:00'
+ var formatString = "yyyy-MM-dd'T'HH:mm:ss.SSSxxx"
+ var result = parse(dateString, formatString, new Date(NaN))
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ var dateString = '2014-07-02T05:30:15.123+06:00'
+ var formatString = "yyyy-MM-dd'T'HH:mm:ss.SSSxxx"
+ // $ExpectedMistake
+ var block = parse.bind(null, dateString, formatString, referenceDate, {
+ weekStartsOn: NaN,
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function () {
+ var dateString = '2014-07-02T05:30:15.123+06:00'
+ var formatString = "yyyy-MM-dd'T'HH:mm:ss.SSSxxx"
+ // $ExpectedMistake
+ var block = parse.bind(null, dateString, formatString, referenceDate, {
+ firstWeekContainsDate: NaN,
+ })
+ assert.throws(block, RangeError)
+ })
+ })
+
+ it('throws TypeError exception if passed less than 3 arguments', function () {
+ assert.throws(parse.bind(null), TypeError)
+ // $ExpectedMistake
+ assert.throws(parse.bind(null, 1), TypeError)
+ // $ExpectedMistake
+ assert.throws(parse.bind(null, 1, 2), TypeError)
+ })
+
+ describe('edge cases', function () {
+ it('returns Invalid Date if the string contains some remaining input after parsing', function () {
+ var result = parse('2016-11-05T040404', 'yyyy-MM-dd', referenceDate)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('parses normally if the remaining input is just whitespace', function () {
+ var result = parse('2016-11-05 \n', 'yyyy-MM-dd', referenceDate)
+ assert.deepEqual(result, new Date(2016, 10 /* Nov */, 5))
+ })
+
+ it('throws RangeError exception if the format string contains an unescaped latin alphabet character', function () {
+ assert.throws(
+ parse.bind(null, '2016-11-05-nnnn', 'yyyy-MM-dd-nnnn', referenceDate),
+ RangeError
+ )
+ })
+ })
+
+ describe('useAdditionalWeekYearTokens and useAdditionalDayOfYearTokens options', () => {
+ it('throws an error if D token is used', () => {
+ const block = parse.bind(null, '2016 5', 'yyyy D', referenceDate)
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ /Use `d` instead of `D` \(in `yyyy D`\) for formatting days of the month to the input `2016 5`; see: https:\/\/git.io\/fxCyr/
+ )
+ })
+
+ it('allows D token if useAdditionalDayOfYearTokens is set to true', () => {
+ const result = parse('2016 5', 'yyyy D', referenceDate, {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(2016, 0, 5))
+ })
+
+ it('throws an error if DD token is used', () => {
+ const block = parse.bind(null, '2016 05', 'yyyy DD', referenceDate)
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ /Use `dd` instead of `DD` \(in `yyyy DD`\) for formatting days of the month to the input `2016 05`; see: https:\/\/git.io\/fxCyr/
+ )
+ })
+
+ it('allows DD token if useAdditionalDayOfYearTokens is set to true', () => {
+ const result = parse('2016 05', 'yyyy DD', referenceDate, {
+ useAdditionalDayOfYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(2016, 0, 5))
+ })
+
+ it('throws an error if YY token is used', () => {
+ const block = parse.bind(null, '16 1', 'YY w', referenceDate)
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ /Use `yy` instead of `YY` \(in `YY w`\) for formatting years to the input `16 1`; see: https:\/\/git.io\/fxCyr/
+ )
+ })
+
+ it('allows YY token if useAdditionalWeekYearTokens is set to true', () => {
+ const result = parse('16 1', 'YY w', referenceDate, {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(2015, 11, 27))
+ })
+
+ it('throws an error if YYYY token is used', () => {
+ const block = parse.bind(null, '2016 1', 'YYYY w', referenceDate)
+ assert.throws(block, RangeError)
+ assert.throws(
+ block,
+ /Use `yyyy` instead of `YYYY` \(in `YYYY w`\) for formatting years to the input `2016 1`; see: https:\/\/git.io\/fxCyr/
+ )
+ })
+
+ it('allows YYYY token if useAdditionalWeekYearTokens is set to true', () => {
+ const result = parse('2016 1', 'YYYY w', referenceDate, {
+ useAdditionalWeekYearTokens: true,
+ })
+ assert.deepEqual(result, new Date(2015, 11, 27))
+ })
+ })
+
+ describe('long format', function () {
+ it('short date', function () {
+ var expected = new Date(1995, 4 /* May */, 26)
+ var dateString = '05/26/1995'
+ var formatString = 'P'
+ var result = parse(dateString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('medium date', function () {
+ var expected = new Date(1995, 4 /* May */, 26)
+ var dateString = 'May 26, 1995'
+ var formatString = 'PP'
+ var result = parse(dateString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('long date', function () {
+ var expected = new Date(1995, 4 /* May */, 26)
+ var dateString = 'May 26th, 1995'
+ var formatString = 'PPP'
+ var result = parse(dateString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('full date', function () {
+ var expected = new Date(1995, 4 /* May */, 26)
+ var dateString = 'Friday, May 26th, 1995'
+ var formatString = 'PPPP'
+ var result = parse(dateString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('short time', function () {
+ var expected = new Date(
+ referenceDate.getFullYear(),
+ referenceDate.getMonth(),
+ referenceDate.getDate(),
+ 10,
+ 32
+ )
+ var timeString = '10:32 AM'
+ var formatString = 'p'
+ var result = parse(timeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('medium time', function () {
+ var expected = new Date(
+ referenceDate.getFullYear(),
+ referenceDate.getMonth(),
+ referenceDate.getDate(),
+ 10,
+ 32,
+ 55
+ )
+ var timeString = '10:32:55 AM'
+ var formatString = 'pp'
+ var result = parse(timeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('short date + short time', function () {
+ var expected = new Date(1995, 4 /* May */, 26, 10, 32)
+ var dateTimeString = '05/26/1995, 10:32 AM'
+ var formatString = 'Pp'
+ var result = parse(dateTimeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('medium date + short time', function () {
+ var expected = new Date(1995, 4 /* May */, 26, 10, 32)
+ var dateTimeString = 'May 26, 1995, 10:32 AM'
+ var formatString = 'PPp'
+ var result = parse(dateTimeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('long date + short time', function () {
+ var expected = new Date(1995, 4 /* May */, 26, 10, 32)
+ var dateTimeString = 'May 26th, 1995 at 10:32 AM'
+ var formatString = 'PPPp'
+ var result = parse(dateTimeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('full date + short time', function () {
+ var expected = new Date(1995, 4 /* May */, 26, 10, 32)
+ var dateTimeString = 'Friday, May 26th, 1995 at 10:32 AM'
+ var formatString = 'PPPPp'
+ var result = parse(dateTimeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('short date + short time', function () {
+ var expected = new Date(1995, 4 /* May */, 26, 10, 32, 55)
+ var dateTimeString = '05/26/1995, 10:32:55 AM'
+ var formatString = 'Ppp'
+ var result = parse(dateTimeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('medium date + short time', function () {
+ var expected = new Date(1995, 4 /* May */, 26, 10, 32, 55)
+ var dateTimeString = 'May 26, 1995, 10:32:55 AM'
+ var formatString = 'PPpp'
+ var result = parse(dateTimeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('long date + short time', function () {
+ var expected = new Date(1995, 4 /* May */, 26, 10, 32, 55)
+ var dateTimeString = 'May 26th, 1995 at 10:32:55 AM'
+ var formatString = 'PPPpp'
+ var result = parse(dateTimeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+
+ it('full date + short time', function () {
+ var expected = new Date(1995, 4 /* May */, 26, 10, 32, 55)
+ var dateTimeString = 'Friday, May 26th, 1995 at 10:32:55 AM'
+ var formatString = 'PPPPpp'
+ var result = parse(dateTimeString, formatString, referenceDate)
+ assert.deepEqual(result, expected)
+ })
+ })
+})
diff --git a/date-fns/src/parseISO/benchmark.js b/date-fns/src/parseISO/benchmark.js
new file mode 100644
index 0000000..19405ed
--- /dev/null
+++ b/date-fns/src/parseISO/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import parseISO from '.'
+import moment from 'moment'
+
+suite('toDate', function() {
+ benchmark('date-fns', function() {
+ return parseISO('2014-10-25T13:46:20+07:00')
+ })
+
+ benchmark('Moment.js', function() {
+ return moment('2014-10-25T13:46:20+07:00')
+ })
+})
diff --git a/date-fns/src/parseISO/index.d.ts b/date-fns/src/parseISO/index.d.ts
new file mode 100644
index 0000000..ee06fe6
--- /dev/null
+++ b/date-fns/src/parseISO/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { parseISO } from 'date-fns'
+export default parseISO
diff --git a/date-fns/src/parseISO/index.js b/date-fns/src/parseISO/index.js
new file mode 100644
index 0000000..4d4a0af
--- /dev/null
+++ b/date-fns/src/parseISO/index.js
@@ -0,0 +1,343 @@
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+var MILLISECONDS_IN_HOUR = 3600000
+var MILLISECONDS_IN_MINUTE = 60000
+var DEFAULT_ADDITIONAL_DIGITS = 2
+
+var patterns = {
+ dateTimeDelimiter: /[T ]/,
+ timeZoneDelimiter: /[Z ]/i,
+ timezone: /([Z+-].*)$/,
+}
+
+var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/
+var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/
+var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/
+
+/**
+ * @name parseISO
+ * @category Common Helpers
+ * @summary Parse ISO string
+ *
+ * @description
+ * Parse the given string in ISO 8601 format and return an instance of Date.
+ *
+ * Function accepts complete ISO 8601 formats as well as partial implementations.
+ * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601
+ *
+ * If the argument isn't a string, the function cannot parse the string or
+ * the values are invalid, it returns Invalid Date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The previous `parse` implementation was renamed to `parseISO`.
+ *
+ * ```javascript
+ * // Before v2.0.0
+ * parse('2016-01-01')
+ *
+ * // v2.0.0 onward
+ * parseISO('2016-01-01')
+ * ```
+ *
+ * - `parseISO` now validates separate date and time values in ISO-8601 strings
+ * and returns `Invalid Date` if the date is invalid.
+ *
+ * ```javascript
+ * parseISO('2018-13-32')
+ * //=> Invalid Date
+ * ```
+ *
+ * - `parseISO` now doesn't fall back to `new Date` constructor
+ * if it fails to parse a string argument. Instead, it returns `Invalid Date`.
+ *
+ * @param {String} argument - the value to convert
+ * @param {Object} [options] - an object with options.
+ * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format
+ * @returns {Date} the parsed date in the local time zone
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2
+ *
+ * @example
+ * // Convert string '2014-02-11T11:30:30' to date:
+ * var result = parseISO('2014-02-11T11:30:30')
+ * //=> Tue Feb 11 2014 11:30:30
+ *
+ * @example
+ * // Convert string '+02014101' to date,
+ * // if the additional number of digits in the extended year format is 1:
+ * var result = parseISO('+02014101', { additionalDigits: 1 })
+ * //=> Fri Apr 11 2014 00:00:00
+ */
+export default function parseISO(argument, dirtyOptions) {
+ requiredArgs(1, arguments)
+
+ var options = dirtyOptions || {}
+
+ var additionalDigits =
+ options.additionalDigits == null
+ ? DEFAULT_ADDITIONAL_DIGITS
+ : toInteger(options.additionalDigits)
+ if (
+ additionalDigits !== 2 &&
+ additionalDigits !== 1 &&
+ additionalDigits !== 0
+ ) {
+ throw new RangeError('additionalDigits must be 0, 1 or 2')
+ }
+
+ if (
+ !(
+ typeof argument === 'string' ||
+ Object.prototype.toString.call(argument) === '[object String]'
+ )
+ ) {
+ return new Date(NaN)
+ }
+
+ var dateStrings = splitDateString(argument)
+
+ var date
+ if (dateStrings.date) {
+ var parseYearResult = parseYear(dateStrings.date, additionalDigits)
+ date = parseDate(parseYearResult.restDateString, parseYearResult.year)
+ }
+
+ if (isNaN(date) || !date) {
+ return new Date(NaN)
+ }
+
+ var timestamp = date.getTime()
+ var time = 0
+ var offset
+
+ if (dateStrings.time) {
+ time = parseTime(dateStrings.time)
+ if (isNaN(time) || time === null) {
+ return new Date(NaN)
+ }
+ }
+
+ if (dateStrings.timezone) {
+ offset = parseTimezone(dateStrings.timezone)
+ if (isNaN(offset)) {
+ return new Date(NaN)
+ }
+ } else {
+ var dirtyDate = new Date(timestamp + time)
+ // js parsed string assuming it's in UTC timezone
+ // but we need it to be parsed in our timezone
+ // so we use utc values to build date in our timezone.
+ // Year values from 0 to 99 map to the years 1900 to 1999
+ // so set year explicitly with setFullYear.
+ var result = new Date(0)
+ result.setFullYear(
+ dirtyDate.getUTCFullYear(),
+ dirtyDate.getUTCMonth(),
+ dirtyDate.getUTCDate()
+ )
+ result.setHours(
+ dirtyDate.getUTCHours(),
+ dirtyDate.getUTCMinutes(),
+ dirtyDate.getUTCSeconds(),
+ dirtyDate.getUTCMilliseconds()
+ )
+ return result
+ }
+
+ return new Date(timestamp + time + offset)
+}
+
+function splitDateString(dateString) {
+ var dateStrings = {}
+ var array = dateString.split(patterns.dateTimeDelimiter)
+ var timeString
+
+ // The regex match should only return at maximum two array elements.
+ // [date], [time], or [date, time].
+ if (array.length > 2) {
+ return dateStrings
+ }
+
+ if (/:/.test(array[0])) {
+ dateStrings.date = null
+ timeString = array[0]
+ } else {
+ dateStrings.date = array[0]
+ timeString = array[1]
+ if (patterns.timeZoneDelimiter.test(dateStrings.date)) {
+ dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]
+ timeString = dateString.substr(dateStrings.date.length, dateString.length)
+ }
+ }
+
+ if (timeString) {
+ var token = patterns.timezone.exec(timeString)
+ if (token) {
+ dateStrings.time = timeString.replace(token[1], '')
+ dateStrings.timezone = token[1]
+ } else {
+ dateStrings.time = timeString
+ }
+ }
+
+ return dateStrings
+}
+
+function parseYear(dateString, additionalDigits) {
+ var regex = new RegExp(
+ '^(?:(\\d{4}|[+-]\\d{' +
+ (4 + additionalDigits) +
+ '})|(\\d{2}|[+-]\\d{' +
+ (2 + additionalDigits) +
+ '})$)'
+ )
+
+ var captures = dateString.match(regex)
+ // Invalid ISO-formatted year
+ if (!captures) return { year: null }
+
+ var year = captures[1] && parseInt(captures[1])
+ var century = captures[2] && parseInt(captures[2])
+
+ return {
+ year: century == null ? year : century * 100,
+ restDateString: dateString.slice((captures[1] || captures[2]).length),
+ }
+}
+
+function parseDate(dateString, year) {
+ // Invalid ISO-formatted year
+ if (year === null) return null
+
+ var captures = dateString.match(dateRegex)
+ // Invalid ISO-formatted string
+ if (!captures) return null
+
+ var isWeekDate = !!captures[4]
+ var dayOfYear = parseDateUnit(captures[1])
+ var month = parseDateUnit(captures[2]) - 1
+ var day = parseDateUnit(captures[3])
+ var week = parseDateUnit(captures[4])
+ var dayOfWeek = parseDateUnit(captures[5]) - 1
+
+ if (isWeekDate) {
+ if (!validateWeekDate(year, week, dayOfWeek)) {
+ return new Date(NaN)
+ }
+ return dayOfISOWeekYear(year, week, dayOfWeek)
+ } else {
+ var date = new Date(0)
+ if (
+ !validateDate(year, month, day) ||
+ !validateDayOfYearDate(year, dayOfYear)
+ ) {
+ return new Date(NaN)
+ }
+ date.setUTCFullYear(year, month, Math.max(dayOfYear, day))
+ return date
+ }
+}
+
+function parseDateUnit(value) {
+ return value ? parseInt(value) : 1
+}
+
+function parseTime(timeString) {
+ var captures = timeString.match(timeRegex)
+ if (!captures) return null // Invalid ISO-formatted time
+
+ var hours = parseTimeUnit(captures[1])
+ var minutes = parseTimeUnit(captures[2])
+ var seconds = parseTimeUnit(captures[3])
+
+ if (!validateTime(hours, minutes, seconds)) {
+ return NaN
+ }
+
+ return (
+ hours * MILLISECONDS_IN_HOUR +
+ minutes * MILLISECONDS_IN_MINUTE +
+ seconds * 1000
+ )
+}
+
+function parseTimeUnit(value) {
+ return (value && parseFloat(value.replace(',', '.'))) || 0
+}
+
+function parseTimezone(timezoneString) {
+ if (timezoneString === 'Z') return 0
+
+ var captures = timezoneString.match(timezoneRegex)
+ if (!captures) return 0
+
+ var sign = captures[1] === '+' ? -1 : 1
+ var hours = parseInt(captures[2])
+ var minutes = (captures[3] && parseInt(captures[3])) || 0
+
+ if (!validateTimezone(hours, minutes)) {
+ return NaN
+ }
+
+ return (
+ sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE)
+ )
+}
+
+function dayOfISOWeekYear(isoWeekYear, week, day) {
+ var date = new Date(0)
+ date.setUTCFullYear(isoWeekYear, 0, 4)
+ var fourthOfJanuaryDay = date.getUTCDay() || 7
+ var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay
+ date.setUTCDate(date.getUTCDate() + diff)
+ return date
+}
+
+// Validation functions
+
+// February is null to handle the leap year (using ||)
+var daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
+
+function isLeapYearIndex(year) {
+ return year % 400 === 0 || (year % 4 === 0 && year % 100)
+}
+
+function validateDate(year, month, date) {
+ return (
+ month >= 0 &&
+ month <= 11 &&
+ date >= 1 &&
+ date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))
+ )
+}
+
+function validateDayOfYearDate(year, dayOfYear) {
+ return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365)
+}
+
+function validateWeekDate(_year, week, day) {
+ return week >= 1 && week <= 53 && day >= 0 && day <= 6
+}
+
+function validateTime(hours, minutes, seconds) {
+ if (hours === 24) {
+ return minutes === 0 && seconds === 0
+ }
+
+ return (
+ seconds >= 0 &&
+ seconds < 60 &&
+ minutes >= 0 &&
+ minutes < 60 &&
+ hours >= 0 &&
+ hours < 25
+ )
+}
+
+function validateTimezone(_hours, minutes) {
+ return minutes >= 0 && minutes <= 59
+}
diff --git a/date-fns/src/parseISO/index.js.flow b/date-fns/src/parseISO/index.js.flow
new file mode 100644
index 0000000..951a222
--- /dev/null
+++ b/date-fns/src/parseISO/index.js.flow
@@ -0,0 +1,57 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ argument: string,
+ options?: {
+ additionalDigits?: 0 | 1 | 2,
+ }
+) => Date
diff --git a/date-fns/src/parseISO/test.js b/date-fns/src/parseISO/test.js
new file mode 100644
index 0000000..36a8a90
--- /dev/null
+++ b/date-fns/src/parseISO/test.js
@@ -0,0 +1,452 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import parseISO from '.'
+
+describe('parseISO', () => {
+ describe('string argument', () => {
+ describe('centuries', () => {
+ it('parses YY', () => {
+ const result = parseISO('20')
+ assert.deepEqual(result, new Date(2000, 0 /* Jan */, 1))
+ })
+ })
+
+ describe('years', () => {
+ it('parses YYYY', () => {
+ const result = parseISO('2014')
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 1))
+ })
+ })
+
+ describe('months', () => {
+ it('parses YYYY-MM', () => {
+ const result = parseISO('2014-02')
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 1))
+ })
+ })
+
+ describe('weeks', () => {
+ it('parses YYYY-Www', () => {
+ const result = parseISO('2014-W02')
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 6))
+ })
+
+ it('parses YYYYWww', () => {
+ const result = parseISO('2014W02')
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 6))
+ })
+ })
+
+ describe('calendar dates', () => {
+ it('parses YYYY-MM-DD', () => {
+ const result = parseISO('2014-02-11')
+ assert.deepEqual(result, new Date(2014, 1, /* Feb */ 11))
+ })
+
+ it('parses YYYYMMDD', () => {
+ const result = parseISO('20140211')
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 11))
+ })
+ })
+
+ describe('week dates', () => {
+ it('parses YYYY-Www-D', () => {
+ const result = parseISO('2014-W02-7')
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 12))
+ })
+
+ it('parses YYYYWwwD', () => {
+ const result = parseISO('2014W027')
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 12))
+ })
+
+ it('correctly handles years in which 4 January is Sunday', () => {
+ const result = parseISO('2009-W01-1')
+ assert.deepEqual(result, new Date(2008, 11 /* Dec */, 29))
+ })
+ })
+
+ describe('ordinal dates', () => {
+ it('parses YYYY-DDD', () => {
+ const result = parseISO('2014-026')
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 26))
+ })
+
+ it('parses YYYYDDD', () => {
+ const result = parseISO('2014026')
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 26))
+ })
+ })
+
+ describe('date and time combined', () => {
+ it('parses YYYY-MM-DDThh:mm', () => {
+ const result = parseISO('2014-02-11T11:30')
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 11, 11, 30))
+ })
+
+ it('parses YYYY-MM-DDThhmm', () => {
+ const result = parseISO('2014-02-11T1130')
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 11, 11, 30))
+ })
+ })
+
+ describe('extended century representation', () => {
+ it('parses century 101 BC - 2 BC', () => {
+ const result = parseISO('-0001')
+ const date = new Date(0)
+ date.setFullYear(-100, 0 /* Jan */, 1)
+ date.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, date)
+ })
+
+ it('parses century 1 BC - 99 AD', () => {
+ const result = parseISO('00')
+ const date = new Date(0)
+ date.setFullYear(0, 0 /* Jan */, 1)
+ date.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, date)
+ })
+
+ it('parses centuries after 9999 AD', () => {
+ const result = parseISO('+0123')
+ assert.deepEqual(result, new Date(12300, 0 /* Jan */, 1))
+ })
+
+ it('allows to specify the number of additional digits', () => {
+ const result = parseISO('-20', { additionalDigits: 0 })
+ const date = new Date(0)
+ date.setFullYear(-2000, 0 /* Jan */, 1)
+ date.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, date)
+ })
+ })
+
+ describe('extended year representation', () => {
+ it('correctly parses years from 1 AD to 99 AD', () => {
+ const result = parseISO('0095-07-02')
+ const date = new Date(0)
+ date.setFullYear(95, 6 /* Jul */, 2)
+ date.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, date)
+ })
+
+ it('parses years after 9999 AD', () => {
+ const result = parseISO('+012345-07-02')
+ assert.deepEqual(result, new Date(12345, 6 /* Jul */, 2))
+ })
+
+ it('allows to specify the number of additional digits', () => {
+ const result = parseISO('+12340702', { additionalDigits: 0 })
+ assert.deepEqual(result, new Date(1234, 6 /* Jul */, 2))
+ })
+
+ it('parses year 1 BC', () => {
+ const result = parseISO('0000-07-02')
+ const date = new Date(0)
+ date.setFullYear(0, 6 /* Jul */, 2)
+ date.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, date)
+ })
+
+ it('parses years less than 1 BC', () => {
+ const result = parseISO('-000001-07-02')
+ const date = new Date(0)
+ date.setFullYear(-1, 6 /* Jul */, 2)
+ date.setHours(0, 0, 0, 0)
+ assert.deepEqual(result, date)
+ })
+ })
+
+ describe('float time', () => {
+ it('parses float hours', () => {
+ const result = parseISO('2014-02-11T11.5')
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 11, 11, 30))
+ })
+
+ it('parses float minutes', () => {
+ const result = parseISO('2014-02-11T11:30.5')
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 11, 11, 30, 30))
+ })
+
+ it('parses float seconds', () => {
+ const result = parseISO('2014-02-11T11:30:30.768')
+ assert.deepEqual(
+ result,
+ new Date(2014, 1 /* Feb */, 11, 11, 30, 30, 768)
+ )
+ })
+
+ it('parses , as decimal mark', () => {
+ const result = parseISO('2014-02-11T11,5')
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 11, 11, 30))
+ })
+ })
+
+ describe('timezones', () => {
+ describe('when the date and the time are specified', () => {
+ it('parses Z', () => {
+ const result = parseISO('2014-10-25T06:46:20Z')
+ assert.deepEqual(result, new Date('2014-10-25T13:46:20+07:00'))
+ })
+
+ it('parses ±hh:mm', () => {
+ const result = parseISO('2014-10-25T13:46:20+07:00')
+ assert.deepEqual(result, new Date('2014-10-25T13:46:20+07:00'))
+ })
+
+ it('parses ±hhmm', () => {
+ const result = parseISO('2014-10-25T03:46:20-0300')
+ assert.deepEqual(result, new Date('2014-10-25T13:46:20+07:00'))
+ })
+
+ it('parses ±hh', () => {
+ const result = parseISO('2014-10-25T13:46:20+07')
+ assert.deepEqual(result, new Date('2014-10-25T13:46:20+07:00'))
+ })
+ })
+ describe('when the year and the month are specified', () => {
+ it('sets timezone correctly on yyyy-MMZ format', () => {
+ const result = parseISO('2012-01Z')
+ assert.deepEqual(result, new Date('2012-01-01T00:00:00+00:00'))
+ })
+ })
+ })
+
+ describe('failure', () => {
+ it('returns `Invalid Date` if the string is not an ISO formatted date', () => {
+ const result = parseISO(new Date(2014, 8 /* Sep */, 1, 11).toString())
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+ })
+ })
+
+ describe('validation', () => {
+ describe('months', () => {
+ it('returns `Invalid Date` for invalid month', () => {
+ const result = parseISO('2014-00')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+ })
+
+ describe('weeks', () => {
+ it('returns `Invalid Date` for invalid week', () => {
+ const result = parseISO('2014-W00')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns `Invalid Date` for 54th week', () => {
+ const result = parseISO('2014-W54')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+ })
+
+ describe('calendar dates', () => {
+ it('returns `Invalid Date` for invalid day of the month', () => {
+ const result = parseISO('2012-02-30')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns `Invalid Date` for 29th of February of non-leap year', () => {
+ const result = parseISO('2014-02-29')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('parses 29th of February of leap year', () => {
+ const result = parseISO('2012-02-29')
+ assert.deepEqual(result, new Date(2012, 1, /* Feb */ 29))
+ })
+ })
+
+ describe('week dates', () => {
+ it('returns `Invalid Date` for invalid day of the week', () => {
+ const result = parseISO('2014-W02-0')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+ })
+
+ describe('ordinal dates', () => {
+ it('returns `Invalid Date` for invalid day of the year', () => {
+ const result = parseISO('2012-000')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns `Invalid Date` for 366th day of non-leap year', () => {
+ const result = parseISO('2014-366')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('parses 366th day of leap year', () => {
+ const result = parseISO('2012-366')
+ assert.deepEqual(result, new Date(2012, 11, /* Dec */ 31))
+ })
+ })
+
+ describe('date', () => {
+ it('returns `Invalid Date` when it contains spaces after the date', () => {
+ const result = parseISO('2014-02-11 basketball')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+ })
+
+ describe('time', () => {
+ it('parses 24:00 as midnight of the next day', () => {
+ const result = parseISO('2014-02-11T24:00')
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 12, 0, 0))
+ })
+
+ it('returns `Invalid Date` for anything after 24:00', () => {
+ const result = parseISO('2014-02-11T24:01')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns `Invalid Date` for invalid hours', () => {
+ const result = parseISO('2014-02-11T25')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns `Invalid Date` for invalid minutes', () => {
+ const result = parseISO('2014-02-11T21:60')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns `Invalid Date` for invalid seconds', () => {
+ const result = parseISO('2014-02-11T21:59:60')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns `Invalid Date` for invalid time', () => {
+ const result = parseISO('2014-02-11T21:basketball')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns `Invalid Date` when it contains spaces after the time', () => {
+ const result = parseISO('2014-02-11T21:59:00 basketball')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+ })
+
+ describe('timezones', () => {
+ it('returns `Invalid Date` for invalid timezone minutes', () => {
+ const result = parseISO('2014-02-11T21:35:45+04:60')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+ })
+ })
+
+ describe('invalid argument', () => {
+ it('returns Invalid Date for date argument', () => {
+ // $ExpectedMistake
+ const date = new Date(2016, 0, 1)
+ const result = parseISO(date)
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date for timestamp argument', () => {
+ const timestamp = new Date(2016, 0, 1, 23, 30, 45, 123).getTime()
+ // $ExpectedMistake
+ const result = parseISO(timestamp)
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is non-date string', () => {
+ const result = parseISO('abc')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is non-date string containing a colon', () => {
+ const result = parseISO('00:00')
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is NaN', () => {
+ // $ExpectedMistake
+ const result = parseISO(NaN)
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is Invalid Date', () => {
+ // $ExpectedMistake
+ const result = parseISO(new Date(NaN))
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is null', () => {
+ // $ExpectedMistake
+ const result = parseISO(null)
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is undefined', () => {
+ // $ExpectedMistake
+ const result = parseISO(undefined)
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is false', () => {
+ // $ExpectedMistake
+ const result = parseISO(false)
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is true', () => {
+ // $ExpectedMistake
+ const result = parseISO(true)
+ assert(result instanceof Date)
+ assert(isNaN(result))
+ })
+ })
+
+ describe('argument conversion', () => {
+ it('implicitly converts instance of String into a string', () => {
+ // eslint-disable-next-line no-new-wrappers
+ const dateString = new String('2014-02-11')
+ // $ExpectedMistake
+ const result = parseISO(dateString)
+ assert.deepEqual(result, new Date(2014, 1, /* Feb */ 11))
+ })
+
+ it('implicitly converts options', () => {
+ // $ExpectedMistake
+ const result = parseISO('+12340702', { additionalDigits: '0' })
+ assert.deepEqual(result, new Date(1234, 6 /* Jul */, 2))
+ })
+
+ it('throws `RangeError` if `options.additionalDigits` is not convertable to 0, 1, 2 or undefined`', () => {
+ // $ExpectedMistake
+ const block = parseISO.bind(null, '+12340702', { additionalDigits: 3 })
+ assert.throws(block, RangeError)
+ })
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ assert.throws(parseISO.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/parseJSON/benchmark.js b/date-fns/src/parseJSON/benchmark.js
new file mode 100644
index 0000000..f6b1c0b
--- /dev/null
+++ b/date-fns/src/parseJSON/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import parseJSON from '.'
+import moment from 'moment'
+
+suite('toDate', function() {
+ benchmark('date-fns', function() {
+ return parseJSON('2014-10-25T13:46:20+00:00')
+ })
+
+ benchmark('Moment.js', function() {
+ return moment('2014-10-25T13:46:20+00:00')
+ })
+})
diff --git a/date-fns/src/parseJSON/index.d.ts b/date-fns/src/parseJSON/index.d.ts
new file mode 100644
index 0000000..b6b186d
--- /dev/null
+++ b/date-fns/src/parseJSON/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { parseJSON } from 'date-fns'
+export default parseJSON
diff --git a/date-fns/src/parseJSON/index.js.flow b/date-fns/src/parseJSON/index.js.flow
new file mode 100644
index 0000000..c4801bf
--- /dev/null
+++ b/date-fns/src/parseJSON/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (argument: string | number | Date) => Date
diff --git a/date-fns/src/parseJSON/index.ts b/date-fns/src/parseJSON/index.ts
new file mode 100644
index 0000000..6af1eda
--- /dev/null
+++ b/date-fns/src/parseJSON/index.ts
@@ -0,0 +1,62 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name parseJSON
+ * @category Common Helpers
+ * @summary Parse a JSON date string
+ *
+ * @description
+ * Converts a complete ISO date string in UTC time, the typical format for transmitting
+ * a date in JSON, to a JavaScript `Date` instance.
+ *
+ * This is a minimal implementation for converting dates retrieved from a JSON API to
+ * a `Date` instance which can be used with other functions in the `date-fns` library.
+ * The following formats are supported:
+ *
+ * - `2000-03-15T05:20:10.123Z`: The output of `.toISOString()` and `JSON.stringify(new Date())`
+ * - `2000-03-15T05:20:10Z`: Without milliseconds
+ * - `2000-03-15T05:20:10+00:00`: With a zero offset, the default JSON encoded format in some other languages
+ * - `2000-03-15T05:20:10+05:45`: With a positive or negative offset, the default JSON encoded format in some other languages
+ * - `2000-03-15T05:20:10+0000`: With a zero offset without a colon
+ * - `2000-03-15T05:20:10`: Without a trailing 'Z' symbol
+ * - `2000-03-15T05:20:10.1234567`: Up to 7 digits in milliseconds field. Only first 3 are taken into account since JS does not allow fractional milliseconds
+ * - `2000-03-15 05:20:10`: With a space instead of a 'T' separator for APIs returning a SQL date without reformatting
+ *
+ * For convenience and ease of use these other input types are also supported
+ * via [toDate]{@link https://date-fns.org/docs/toDate}:
+ *
+ * - A `Date` instance will be cloned
+ * - A `number` will be treated as a timestamp
+ *
+ * Any other input type or invalid date strings will return an `Invalid Date`.
+ *
+ * @param {String|Number|Date} argument A fully formed ISO8601 date string to convert
+ * @returns {Date} the parsed date in the local time zone
+ * @throws {TypeError} 1 argument required
+ */
+export default function parseJSON(argument: string): Date {
+ requiredArgs(1, arguments)
+
+ if (typeof argument === 'string') {
+ const parts = argument.match(
+ /(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})(?:\.(\d{0,7}))?(?:Z|(.)(\d{2}):?(\d{2})?)?/
+ )
+ if (parts) {
+ // Group 8 matches the sign
+ return new Date(
+ Date.UTC(
+ +parts[1],
+ +parts[2] - 1,
+ +parts[3],
+ +parts[4] - (+parts[9] || 0) * (parts[8] == '-' ? -1 : 1),
+ +parts[5] - (+parts[10] || 0) * (parts[8] == '-' ? -1 : 1),
+ +parts[6],
+ +((parts[7] || '0') + '00').substring(0, 3)
+ )
+ )
+ }
+ return new Date(NaN)
+ }
+ return toDate(argument)
+}
diff --git a/date-fns/src/parseJSON/test.ts b/date-fns/src/parseJSON/test.ts
new file mode 100644
index 0000000..ffb348f
--- /dev/null
+++ b/date-fns/src/parseJSON/test.ts
@@ -0,0 +1,132 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import parseJSON from '.'
+import format from '../format/index'
+
+describe('parseJSON', function () {
+ it('parses a formatted new Date() back to UTC - issue 2149', () => {
+ const date = new Date()
+ const jsonFormat = format(date, "yyyy-MM-dd'T'HH:mm:ss.SSSxxx")
+ const parsedDate = parseJSON(jsonFormat)
+ assert.equal(parsedDate.toISOString(), date.toISOString())
+ })
+
+ it('parses a formatted date with an hour of offset back to UTC - issue 2149', () => {
+ const date = '2021-01-09T13:18:10.873+01:00'
+ const expectedDate = new Date('2021-01-09T12:18:10.873Z')
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate.toISOString())
+ })
+
+ it('parses a formatted date with 2 hours of offset back to UTC - issue 2149', () => {
+ const date = '2021-01-09T13:18:10.873+02:00'
+ const expectedDate = new Date('2021-01-09T11:18:10.873Z')
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate.toISOString())
+ })
+
+ it('parses a formatted date with -2 hours of offset back to UTC - issue 2149', () => {
+ const date = '2021-01-09T13:18:10.873-02:00'
+ const expectedDate = new Date('2021-01-09T15:18:10.873Z')
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate.toISOString())
+ })
+
+ it('parses a formatted Indian Standart Time in Asia/Kolkata with +5:30 hours of offset back to UTC - issue 2149', () => {
+ const date = '2021-02-15T02:56:04.678+05:30'
+ const expectedDate = new Date('2021-02-14T21:26:04.678Z')
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate.toISOString())
+ })
+
+ it('parses a formatted time in Asia/Kathmandu with +5:45 hours of offset back to UTC - issue 2149', () => {
+ const date = '2021-02-15T17:45:00.900+05:45'
+ const expectedDate = new Date('2021-02-15T12:00:00.900Z')
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate.toISOString())
+ })
+
+ it('parses a fully formed ISO date with Z', () => {
+ const date = '2000-03-15T05:20:10.123Z'
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), date)
+ })
+
+ it('parses a fully formed ISO date with Z without ms', () => {
+ const date = '2000-03-15T05:20:10Z'
+ const expectedDate = '2000-03-15T05:20:10.000Z'
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('parses a fully formed ISO date with zero offset', () => {
+ const zeroOffset = '2000-03-15T05:20:10+00:00'
+ const expectedDate = '2000-03-15T05:20:10.000Z'
+ const parsedDate = parseJSON(zeroOffset)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('parses a fully formed ISO date with zero offset without colon', () => {
+ const zeroOffset = '2000-03-15T05:20:10+0000'
+ const expectedDate = '2000-03-15T05:20:10.000Z'
+ const parsedDate = parseJSON(zeroOffset)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('parses a fully formed ISO date without Z', () => {
+ const date = '2000-03-15T05:20:10.123'
+ const expectedDate = '2000-03-15T05:20:10.123Z'
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('parses a fully formed ISO date without Z and with 6-digit millisecond part', () => {
+ const date = '2000-03-15T05:20:10.123456'
+ const expectedDate = '2000-03-15T05:20:10.123Z'
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('parses a fully formed ISO with 1-digit millisecond part', () => {
+ const date = '2000-03-15T05:20:10.1Z'
+ const expectedDate = '2000-03-15T05:20:10.100Z'
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('parses a fully formed ISO with 2-digit millisecond part', () => {
+ const date = '2000-03-15T05:20:10.12Z'
+ const expectedDate = '2000-03-15T05:20:10.120Z'
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('parses supported formats with a space time separator instead of a T', () => {
+ const date = '2000-03-15 05:20:10.123Z'
+ const expectedDate = '2000-03-15T05:20:10.123Z'
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('parses the SQL datetime format without milliseconds', () => {
+ const date = '2000-03-15 05:20:10'
+ const expectedDate = '2000-03-15T05:20:10.000Z'
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('parses the SQL datetime format with up to 7 millisecond digits', () => {
+ const date = '2000-03-15 05:20:10.1234567'
+ const expectedDate = '2000-03-15T05:20:10.123Z'
+ const parsedDate = parseJSON(date)
+ assert.equal(parsedDate.toISOString(), expectedDate)
+ })
+
+ it('returns an invalid date for anything else', () => {
+ assert.equal(parseJSON('').toString(), 'Invalid Date')
+ assert.equal(parseJSON('invalid').toString(), 'Invalid Date')
+ assert.equal(parseJSON('2020-10-10').toString(), 'Invalid Date')
+ })
+})
diff --git a/date-fns/src/quartersToMonths/index.d.ts b/date-fns/src/quartersToMonths/index.d.ts
new file mode 100644
index 0000000..d2df2e1
--- /dev/null
+++ b/date-fns/src/quartersToMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { quartersToMonths } from 'date-fns'
+export default quartersToMonths
diff --git a/date-fns/src/quartersToMonths/index.js.flow b/date-fns/src/quartersToMonths/index.js.flow
new file mode 100644
index 0000000..8225923
--- /dev/null
+++ b/date-fns/src/quartersToMonths/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (quarters: number) => number
diff --git a/date-fns/src/quartersToMonths/index.ts b/date-fns/src/quartersToMonths/index.ts
new file mode 100644
index 0000000..1e52b8e
--- /dev/null
+++ b/date-fns/src/quartersToMonths/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { monthsInQuarter } from '../constants/index'
+
+/**
+ * @name quartersToMonths
+ * @category Conversion Helpers
+ * @summary Convert number of quarters to months.
+ *
+ * @description
+ * Convert a number of quarters to a full number of months.
+ *
+ * @param {number} quarters - number of quarters to be converted
+ *
+ * @returns {number} the number of quarters converted in months
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 quarters to months
+ * const result = quartersToMonths(2)
+ * //=> 6
+ */
+export default function quartersToMonths(quarters: number): number {
+ requiredArgs(1, arguments)
+ return Math.floor(quarters * monthsInQuarter)
+}
diff --git a/date-fns/src/quartersToMonths/test.ts b/date-fns/src/quartersToMonths/test.ts
new file mode 100644
index 0000000..8fb7f41
--- /dev/null
+++ b/date-fns/src/quartersToMonths/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import quartersToMonths from '.'
+
+describe('quartersToMonths', function () {
+ it('converts quarters to months', function () {
+ assert(quartersToMonths(1) === 3)
+ assert(quartersToMonths(2) === 6)
+ })
+
+ it('uses floor rounding', () => {
+ assert(quartersToMonths(1.5) === 4)
+ assert(quartersToMonths(0.3) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(quartersToMonths(0.4) === 1)
+ assert(quartersToMonths(0) === 0)
+ })
+})
diff --git a/date-fns/src/quartersToYears/index.d.ts b/date-fns/src/quartersToYears/index.d.ts
new file mode 100644
index 0000000..1249037
--- /dev/null
+++ b/date-fns/src/quartersToYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { quartersToYears } from 'date-fns'
+export default quartersToYears
diff --git a/date-fns/src/quartersToYears/index.js.flow b/date-fns/src/quartersToYears/index.js.flow
new file mode 100644
index 0000000..8225923
--- /dev/null
+++ b/date-fns/src/quartersToYears/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (quarters: number) => number
diff --git a/date-fns/src/quartersToYears/index.ts b/date-fns/src/quartersToYears/index.ts
new file mode 100644
index 0000000..8f3d0e9
--- /dev/null
+++ b/date-fns/src/quartersToYears/index.ts
@@ -0,0 +1,31 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { quartersInYear } from '../constants/index'
+
+/**
+ * @name quartersToYears
+ * @category Conversion Helpers
+ * @summary Convert number of quarters to years.
+ *
+ * @description
+ * Convert a number of quarters to a full number of years.
+ *
+ * @param {number} quarters - number of quarters to be converted
+ *
+ * @returns {number} the number of quarters converted in years
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 8 quarters to years
+ * const result = quartersToYears(8)
+ * //=> 2
+ *
+ * @example
+ * // It uses floor rounding:
+ * const result = quartersToYears(11)
+ * //=> 2
+ */
+export default function quartersToYears(quarters: number): number {
+ requiredArgs(1, arguments)
+ const years = quarters / quartersInYear
+ return Math.floor(years)
+}
diff --git a/date-fns/src/quartersToYears/test.ts b/date-fns/src/quartersToYears/test.ts
new file mode 100644
index 0000000..7fe9f6f
--- /dev/null
+++ b/date-fns/src/quartersToYears/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import quartersToYears from '.'
+
+describe('quartersToYears', function () {
+ it('converts quarters to years', function () {
+ assert(quartersToYears(4) === 1)
+ assert(quartersToYears(8) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(quartersToYears(5) === 1)
+ assert(quartersToYears(3) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(quartersToYears(4.5) === 1)
+ assert(quartersToYears(0) === 0)
+ })
+})
diff --git a/date-fns/src/roundToNearestMinutes/index.d.ts b/date-fns/src/roundToNearestMinutes/index.d.ts
new file mode 100644
index 0000000..8e56491
--- /dev/null
+++ b/date-fns/src/roundToNearestMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { roundToNearestMinutes } from 'date-fns'
+export default roundToNearestMinutes
diff --git a/date-fns/src/roundToNearestMinutes/index.js b/date-fns/src/roundToNearestMinutes/index.js
new file mode 100644
index 0000000..4a94c75
--- /dev/null
+++ b/date-fns/src/roundToNearestMinutes/index.js
@@ -0,0 +1,61 @@
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+
+/**
+ * @name roundToNearestMinutes
+ * @category Minute Helpers
+ * @summary Rounds the given date to the nearest minute
+ *
+ * @description
+ * Rounds the given date to the nearest minute (or number of minutes).
+ * Rounds up when the given date is exactly between the nearest round minutes.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to round
+ * @param {Object} [options] - an object with options.
+ * @param {Number} [options.nearestTo=1] - nearest number of minutes to round to. E.g. `15` to round to quarter hours.
+ * @returns {Date} the new date rounded to the closest minute
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.nearestTo` must be between 1 and 30
+ *
+ * @example
+ * // Round 10 July 2014 12:12:34 to nearest minute:
+ * var result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34))
+ * //=> Thu Jul 10 2014 12:13:00
+ *
+ * @example
+ * // Round 10 July 2014 12:07:30 to nearest quarter hour:
+ * var result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34), { nearestTo: 15 })
+ * // rounds up because given date is exactly between 12:00:00 and 12:15:00
+ * //=> Thu Jul 10 2014 12:15:00
+ */
+export default function roundToNearestMinutes(dirtyDate, options) {
+ if (arguments.length < 1) {
+ throw new TypeError('1 argument required, but only none provided present')
+ }
+
+ var nearestTo =
+ options && 'nearestTo' in options ? toInteger(options.nearestTo) : 1
+
+ if (nearestTo < 1 || nearestTo > 30) {
+ throw new RangeError('`options.nearestTo` must be between 1 and 30')
+ }
+
+ var date = toDate(dirtyDate)
+ var seconds = date.getSeconds() // relevant if nearestTo is 1, which is the default case
+ var minutes = date.getMinutes() + seconds / 60
+ var roundedMinutes = Math.floor(minutes / nearestTo) * nearestTo
+ var remainderMinutes = minutes % nearestTo
+ var addedMinutes = Math.round(remainderMinutes / nearestTo) * nearestTo
+
+ return new Date(
+ date.getFullYear(),
+ date.getMonth(),
+ date.getDate(),
+ date.getHours(),
+ roundedMinutes + addedMinutes
+ )
+}
diff --git a/date-fns/src/roundToNearestMinutes/index.js.flow b/date-fns/src/roundToNearestMinutes/index.js.flow
new file mode 100644
index 0000000..8e6f0ec
--- /dev/null
+++ b/date-fns/src/roundToNearestMinutes/index.js.flow
@@ -0,0 +1,57 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ nearestTo?: number,
+ }
+) => Date
diff --git a/date-fns/src/roundToNearestMinutes/test.js b/date-fns/src/roundToNearestMinutes/test.js
new file mode 100644
index 0000000..e4f7c04
--- /dev/null
+++ b/date-fns/src/roundToNearestMinutes/test.js
@@ -0,0 +1,70 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import roundToNearestMinutes from '.'
+
+describe('roundToNearestMinutes', function() {
+ it('rounds given date to the nearest minute by default', function() {
+ var result = roundToNearestMinutes(
+ new Date(2014, 6 /* Jul */, 10, 12, 16, 16)
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 16, 0))
+ })
+
+ it('accepts a timestamp', function() {
+ var result = roundToNearestMinutes(
+ new Date(2014, 6 /* Jul */, 10, 12, 13, 16).getTime()
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 13, 0))
+ })
+
+ it('rounds to the closest x minutes if nearestTo is provided', function() {
+ var result = roundToNearestMinutes(
+ new Date(2014, 6 /* Jul */, 10, 12, 10, 30),
+ { nearestTo: 4 }
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 12, 0))
+ })
+
+ it('rounds up >=30 seconds for nearestTo=1', function() {
+ var result = roundToNearestMinutes(
+ new Date(2014, 6 /* Jul */, 10, 12, 13, 30)
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 14, 0))
+ })
+
+ it('rounds down <30 seconds for nearestTo=1', function() {
+ var result = roundToNearestMinutes(
+ new Date(2014, 6 /* Jul */, 10, 12, 13, 29, 999)
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 13, 0))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 6 /* Jul */, 10, 12, 10, 10, 99)
+ roundToNearestMinutes(date)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 10, 12, 10, 10, 99))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = roundToNearestMinutes(new Date(NaN))
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws `TypeError` exception if passed less than 1 argument', function() {
+ assert.throws(roundToNearestMinutes.bind(null), TypeError)
+ })
+
+ it('throws `RangeError` if nearestTo is not between 1 and 30', function() {
+ var date = new Date(2014, 6 /* Jul */, 10, 12, 10, 30)
+ assert.throws(
+ roundToNearestMinutes.bind(null, date, { nearestTo: 31 }),
+ RangeError
+ )
+ assert.throws(
+ roundToNearestMinutes.bind(null, date, { nearestTo: 0 }),
+ RangeError
+ )
+ })
+})
diff --git a/date-fns/src/secondsToHours/index.d.ts b/date-fns/src/secondsToHours/index.d.ts
new file mode 100644
index 0000000..89fcc9a
--- /dev/null
+++ b/date-fns/src/secondsToHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { secondsToHours } from 'date-fns'
+export default secondsToHours
diff --git a/date-fns/src/secondsToHours/index.js.flow b/date-fns/src/secondsToHours/index.js.flow
new file mode 100644
index 0000000..371c79a
--- /dev/null
+++ b/date-fns/src/secondsToHours/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (seconds: number) => number
diff --git a/date-fns/src/secondsToHours/index.ts b/date-fns/src/secondsToHours/index.ts
new file mode 100644
index 0000000..ba87b10
--- /dev/null
+++ b/date-fns/src/secondsToHours/index.ts
@@ -0,0 +1,31 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { secondsInHour } from '../constants/index'
+
+/**
+ * @name secondsToHours
+ * @category Conversion Helpers
+ * @summary Convert seconds to hours.
+ *
+ * @description
+ * Convert a number of seconds to a full number of hours.
+ *
+ * @param {number} seconds - number of seconds to be converted
+ *
+ * @returns {number} the number of seconds converted in hours
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 7200 seconds into hours
+ * const result = secondsToHours(7200)
+ * //=> 2
+ *
+ * @example
+ * // It uses floor rounding:
+ * const result = secondsToHours(7199)
+ * //=> 1
+ */
+export default function secondsToHours(seconds: number): number {
+ requiredArgs(1, arguments)
+ const hours = seconds / secondsInHour
+ return Math.floor(hours)
+}
diff --git a/date-fns/src/secondsToHours/test.ts b/date-fns/src/secondsToHours/test.ts
new file mode 100644
index 0000000..12b3ecf
--- /dev/null
+++ b/date-fns/src/secondsToHours/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import secondsToHours from '.'
+
+describe('secondsToHours', function () {
+ it('converts seconds to hours', function () {
+ assert(secondsToHours(3600) === 1)
+ assert(secondsToHours(7200) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(secondsToHours(3601) === 1)
+ assert(secondsToHours(3599) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(secondsToHours(3600.5) === 1)
+ assert(secondsToHours(0) === 0)
+ })
+})
diff --git a/date-fns/src/secondsToMilliseconds/index.d.ts b/date-fns/src/secondsToMilliseconds/index.d.ts
new file mode 100644
index 0000000..a208037
--- /dev/null
+++ b/date-fns/src/secondsToMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { secondsToMilliseconds } from 'date-fns'
+export default secondsToMilliseconds
diff --git a/date-fns/src/secondsToMilliseconds/index.js.flow b/date-fns/src/secondsToMilliseconds/index.js.flow
new file mode 100644
index 0000000..371c79a
--- /dev/null
+++ b/date-fns/src/secondsToMilliseconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (seconds: number) => number
diff --git a/date-fns/src/secondsToMilliseconds/index.ts b/date-fns/src/secondsToMilliseconds/index.ts
new file mode 100644
index 0000000..2e4a663
--- /dev/null
+++ b/date-fns/src/secondsToMilliseconds/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { millisecondsInSecond } from '../constants/index'
+
+/**
+ * @name secondsToMilliseconds
+ * @category Conversion Helpers
+ * @summary Convert seconds to milliseconds.
+ *
+ * @description
+ * Convert a number of seconds to a full number of milliseconds.
+ *
+ * @param {number} seconds - number of seconds to be converted
+ *
+ * @returns {number} the number of seconds converted in milliseconds
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 seconds into milliseconds
+ * const result = secondsToMilliseconds(2)
+ * //=> 2000
+ */
+export default function secondsToMilliseconds(seconds: number): number {
+ requiredArgs(1, arguments)
+ return seconds * millisecondsInSecond
+}
diff --git a/date-fns/src/secondsToMilliseconds/test.ts b/date-fns/src/secondsToMilliseconds/test.ts
new file mode 100644
index 0000000..26bc2eb
--- /dev/null
+++ b/date-fns/src/secondsToMilliseconds/test.ts
@@ -0,0 +1,16 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import secondsToMilliseconds from '.'
+
+describe('secondsToMilliseconds', function () {
+ it('converts seconds to milliseconds', function () {
+ assert(secondsToMilliseconds(1) === 1000)
+ assert(secondsToMilliseconds(2) === 2000)
+ })
+
+ it('handles border values', () => {
+ assert(secondsToMilliseconds(1.5) === 1500)
+ assert(secondsToMilliseconds(0) === 0)
+ })
+})
diff --git a/date-fns/src/secondsToMinutes/index.d.ts b/date-fns/src/secondsToMinutes/index.d.ts
new file mode 100644
index 0000000..22846dd
--- /dev/null
+++ b/date-fns/src/secondsToMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { secondsToMinutes } from 'date-fns'
+export default secondsToMinutes
diff --git a/date-fns/src/secondsToMinutes/index.js.flow b/date-fns/src/secondsToMinutes/index.js.flow
new file mode 100644
index 0000000..371c79a
--- /dev/null
+++ b/date-fns/src/secondsToMinutes/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (seconds: number) => number
diff --git a/date-fns/src/secondsToMinutes/index.ts b/date-fns/src/secondsToMinutes/index.ts
new file mode 100644
index 0000000..530c21e
--- /dev/null
+++ b/date-fns/src/secondsToMinutes/index.ts
@@ -0,0 +1,31 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { secondsInMinute } from '../constants/index'
+
+/**
+ * @name secondsToMinutes
+ * @category Conversion Helpers
+ * @summary Convert seconds to minutes.
+ *
+ * @description
+ * Convert a number of seconds to a full number of minutes.
+ *
+ * @param {number} seconds - number of seconds to be converted
+ *
+ * @returns {number} the number of seconds converted in minutes
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 120 seconds into minutes
+ * const result = secondsToMinutes(120)
+ * //=> 2
+ *
+ * @example
+ * // It uses floor rounding:
+ * const result = secondsToMinutes(119)
+ * //=> 1
+ */
+export default function secondsToMinutes(seconds: number): number {
+ requiredArgs(1, arguments)
+ const minutes = seconds / secondsInMinute
+ return Math.floor(minutes)
+}
diff --git a/date-fns/src/secondsToMinutes/test.ts b/date-fns/src/secondsToMinutes/test.ts
new file mode 100644
index 0000000..3cf59e9
--- /dev/null
+++ b/date-fns/src/secondsToMinutes/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import secondsToMinutes from '.'
+
+describe('secondsToMinutes', function () {
+ it('converts seconds to minutes', function () {
+ assert(secondsToMinutes(60) === 1)
+ assert(secondsToMinutes(120) === 2)
+ })
+
+ it('uses floor rounding', () => {
+ assert(secondsToMinutes(61) === 1)
+ assert(secondsToMinutes(59) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(secondsToMinutes(60.5) === 1)
+ assert(secondsToMinutes(0) === 0)
+ })
+})
diff --git a/date-fns/src/set/benchmark.js b/date-fns/src/set/benchmark.js
new file mode 100644
index 0000000..55e2c16
--- /dev/null
+++ b/date-fns/src/set/benchmark.js
@@ -0,0 +1,25 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import set from '.'
+import moment from 'moment'
+
+suite(
+ 'set',
+ function() {
+ benchmark('date-fns', function() {
+ return set(this.date, { year: 2014, month: 8 })
+ })
+
+ benchmark('Moment.js', function() {
+ return this.moment.set({ year: 2014, month: 3 })
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date(2013, 7)
+ this.moment = moment()
+ }
+ }
+)
diff --git a/date-fns/src/set/index.d.ts b/date-fns/src/set/index.d.ts
new file mode 100644
index 0000000..d30347b
--- /dev/null
+++ b/date-fns/src/set/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { set } from 'date-fns'
+export default set
diff --git a/date-fns/src/set/index.js.flow b/date-fns/src/set/index.js.flow
new file mode 100644
index 0000000..384f137
--- /dev/null
+++ b/date-fns/src/set/index.js.flow
@@ -0,0 +1,63 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ values: {
+ year?: number,
+ month?: number,
+ date?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+ milliseconds?: number,
+ }
+) => Date
diff --git a/date-fns/src/set/index.ts b/date-fns/src/set/index.ts
new file mode 100644
index 0000000..e7c692e
--- /dev/null
+++ b/date-fns/src/set/index.ts
@@ -0,0 +1,89 @@
+import toDate from '../toDate/index'
+import setMonth from '../setMonth/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import { DateValues } from '../types';
+
+/**
+ * @name set
+ * @category Common Helpers
+ * @summary Set date values to a given date.
+ *
+ * @description
+ * Set date values to a given date.
+ *
+ * Sets time values to date from object `values`.
+ * A value is not set if it is undefined or null or doesn't exist in `values`.
+ *
+ * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts
+ * to use native `Date#setX` methods. If you use this function, you may not want to include the
+ * other `setX` functions that date-fns provides if you are concerned about the bundle size.
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Object} values - an object with options
+ * @param {Number} [values.year] - the number of years to be set
+ * @param {Number} [values.month] - the number of months to be set
+ * @param {Number} [values.date] - the number of days to be set
+ * @param {Number} [values.hours] - the number of hours to be set
+ * @param {Number} [values.minutes] - the number of minutes to be set
+ * @param {Number} [values.seconds] - the number of seconds to be set
+ * @param {Number} [values.milliseconds] - the number of milliseconds to be set
+ * @returns {Date} the new date with options set
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `values` must be an object
+ *
+ * @example
+ * // Transform 1 September 2014 into 20 October 2015 in a single line:
+ * var result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 })
+ * //=> Tue Oct 20 2015 00:00:00
+ *
+ * @example
+ * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00:
+ * var result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 })
+ * //=> Mon Sep 01 2014 12:23:45
+ */
+
+export default function set(dirtyDate: Date | number, values: DateValues): Date {
+ requiredArgs(2, arguments)
+
+ if (typeof values !== 'object' || values === null) {
+ throw new RangeError('values parameter must be an object')
+ }
+
+ let date = toDate(dirtyDate)
+
+ // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date
+ if (isNaN(date.getTime())) {
+ return new Date(NaN)
+ }
+
+ if (values.year != null) {
+ date.setFullYear(values.year)
+ }
+
+ if (values.month != null) {
+ date = setMonth(date, values.month)
+ }
+
+ if (values.date != null) {
+ date.setDate(toInteger(values.date))
+ }
+
+ if (values.hours != null) {
+ date.setHours(toInteger(values.hours))
+ }
+
+ if (values.minutes != null) {
+ date.setMinutes(toInteger(values.minutes))
+ }
+
+ if (values.seconds != null) {
+ date.setSeconds(toInteger(values.seconds))
+ }
+
+ if (values.milliseconds != null) {
+ date.setMilliseconds(toInteger(values.milliseconds))
+ }
+
+ return date
+}
diff --git a/date-fns/src/set/test.ts b/date-fns/src/set/test.ts
new file mode 100644
index 0000000..52e0f23
--- /dev/null
+++ b/date-fns/src/set/test.ts
@@ -0,0 +1,143 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import set from '.'
+
+describe('set', function() {
+ it('sets all values', function() {
+ const result = set(new Date(2013, 0 /* Jan */), {
+ year: 2014,
+ month: 8, // Sep
+ date: 20,
+ hours: 12,
+ minutes: 12,
+ seconds: 12,
+ milliseconds: 12
+ })
+ assert.deepEqual(
+ result.toString(),
+ new Date(2014, 8 /* Sep */, 20, 12, 12, 12, 12).toString()
+ )
+ })
+
+ it('sets year', function() {
+ const result = set(new Date(2013, 8 /* Sep */), { year: 2014 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */))
+ })
+
+ it('sets month', function() {
+ const result = set(new Date(2014, 8 /* Sep */), { month: 9 /* Oct */ })
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */))
+ })
+
+ it('sets day of month', function() {
+ const result = set(new Date(2014, 8 /* Sep */), { date: 20 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 20))
+ })
+
+ it('sets hours', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 1), { hours: 12 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 12))
+ })
+
+ it('sets minutes', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 1, 1), { minutes: 12 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 1, 12))
+ })
+
+ it('sets seconds', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 1, 1, 1), { seconds: 12 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 1, 1, 12))
+ })
+
+ it('sets milliseconds', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 1, 1, 1, 1), {
+ milliseconds: 500
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 1, 1, 1, 500))
+ })
+
+ describe('value overflow', function() {
+ it('months overflow into years', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 1), {
+ month: 12 /* 13th month */
+ })
+ assert.deepEqual(result, new Date(2015, 0 /* Jan */, 1))
+ })
+
+ it('days of months overflow into months', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 1), { date: 31 })
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */, 1))
+ })
+
+ it('hours overflow into days', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 19), { hours: 24 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 20))
+ })
+
+ it('minutes overflow into hours', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 20, 11), { minutes: 60 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 20, 12))
+ })
+
+ it('seconds overflow into minutes', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 20, 12, 58), { seconds: 60 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 20, 12, 59))
+ })
+
+ it('milliseconds overflow into seconds', function() {
+ const result = set(new Date(2014, 8 /* Sep */, 20, 12, 58, 30), {
+ milliseconds: 1000
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 20, 12, 58, 31))
+ })
+ })
+
+ describe('edge cases', function() {
+ it('sets January', function() {
+ const result = set(new Date(2014, 8 /* Sep */), { month: 0 /* Jan */ })
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */))
+ })
+
+ it('sets the last day of new month if the initial date was the last day of a longer month', function() {
+ const result = set(new Date(2014, 7 /* Aug */, 31), { month: 8 /* Sep */ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('ignores undefined values', function() {
+ const result = set(new Date(2014, 8 /* Sep */), { year: undefined })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */))
+ })
+
+ it('ignores null values', function() {
+ // @ts-expect-error
+ const result = set(new Date(2014, 8 /* Sep */), { year: null })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(set.bind(null), TypeError)
+ })
+
+ it('returns Invalid Date if any value in values is NaN', function() {
+ const result = set(new Date(2014, 8 /* Sep */), { year: NaN })
+ assert.deepEqual(isNaN(result.getTime()), isNaN((new Date(NaN)).getTime()))
+ })
+
+ it('returns Invalid Date the initial date was Invalid Date as well', function() {
+ const result = set(new Date(NaN), { year: 2019 })
+ assert.deepEqual(isNaN(result.getTime()), isNaN((new Date(NaN)).getTime()))
+ })
+
+ it('throws RangeError exception if `values` is not an object', function() {
+ // @ts-expect-error
+ assert.throws(set.bind(null, new Date(), true), RangeError)
+ })
+
+ it('throws RangeError exception if `values` is null', function() {
+ // @ts-expect-error
+ assert.throws(set.bind(null, new Date(), null), RangeError)
+ })
+ })
+})
diff --git a/date-fns/src/setDate/benchmark.js b/date-fns/src/setDate/benchmark.js
new file mode 100644
index 0000000..3145d0d
--- /dev/null
+++ b/date-fns/src/setDate/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setDate from '.'
+import moment from 'moment'
+
+suite('setDate', function () {
+ benchmark('date-fns', function () {
+ return setDate(this.date, 15)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.date(15)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setDate/index.d.ts b/date-fns/src/setDate/index.d.ts
new file mode 100644
index 0000000..677ea30
--- /dev/null
+++ b/date-fns/src/setDate/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setDate } from 'date-fns'
+export default setDate
diff --git a/date-fns/src/setDate/index.js.flow b/date-fns/src/setDate/index.js.flow
new file mode 100644
index 0000000..8c9b807
--- /dev/null
+++ b/date-fns/src/setDate/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, dayOfMonth: number) => Date
diff --git a/date-fns/src/setDate/index.ts b/date-fns/src/setDate/index.ts
new file mode 100644
index 0000000..ab757f3
--- /dev/null
+++ b/date-fns/src/setDate/index.ts
@@ -0,0 +1,34 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setDate
+ * @category Day Helpers
+ * @summary Set the day of the month to the given date.
+ *
+ * @description
+ * Set the day of the month to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} dayOfMonth - the day of the month of the new date
+ * @returns {Date} the new date with the day of the month set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set the 30th day of the month to 1 September 2014:
+ * var result = setDate(new Date(2014, 8, 1), 30)
+ * //=> Tue Sep 30 2014 00:00:00
+ */
+export default function setDate(dirtyDate: Date | number, dirtyDayOfMonth: number): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const dayOfMonth = toInteger(dirtyDayOfMonth)
+ date.setDate(dayOfMonth)
+ return date
+}
diff --git a/date-fns/src/setDate/test.ts b/date-fns/src/setDate/test.ts
new file mode 100644
index 0000000..7c07ff5
--- /dev/null
+++ b/date-fns/src/setDate/test.ts
@@ -0,0 +1,49 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setDate from '.'
+
+describe('setDate', function() {
+ it('sets the day of the month', function() {
+ const result = setDate(new Date(2014, 8 /* Sep */, 1), 30)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = setDate(new Date(2014, 8 /* Sep */, 1).getTime(), 25)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 25))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = setDate(new Date(2014, 8 /* Sep */, 1), 30.3)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = setDate(new Date(2014, 8 /* Sep */, 1), '30')
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ setDate(date, 20)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = setDate(new Date(NaN), 30)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = setDate(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setDate.bind(null), TypeError)
+ assert.throws(setDate.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setDay/benchmark.js b/date-fns/src/setDay/benchmark.js
new file mode 100644
index 0000000..4c60c7f
--- /dev/null
+++ b/date-fns/src/setDay/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setDay from '.'
+import moment from 'moment'
+
+suite('setDay', function () {
+ benchmark('date-fns', function () {
+ return setDay(this.date, 3)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.day(3)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setDay/index.d.ts b/date-fns/src/setDay/index.d.ts
new file mode 100644
index 0000000..5b3d9d1
--- /dev/null
+++ b/date-fns/src/setDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setDay } from 'date-fns'
+export default setDay
diff --git a/date-fns/src/setDay/index.js b/date-fns/src/setDay/index.js
new file mode 100644
index 0000000..9d21367
--- /dev/null
+++ b/date-fns/src/setDay/index.js
@@ -0,0 +1,69 @@
+import addDays from '../addDays/index'
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setDay
+ * @category Weekday Helpers
+ * @summary Set the day of the week to the given date.
+ *
+ * @description
+ * Set the day of the week to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} day - the day of the week of the new date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Date} the new date with the day of the week set
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ *
+ * @example
+ * // Set week day to Sunday, with the default weekStartsOn of Sunday:
+ * var result = setDay(new Date(2014, 8, 1), 0)
+ * //=> Sun Aug 31 2014 00:00:00
+ *
+ * @example
+ * // Set week day to Sunday, with a weekStartsOn of Monday:
+ * var result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })
+ * //=> Sun Sep 07 2014 00:00:00
+ */
+export default function setDay(dirtyDate, dirtyDay, dirtyOptions) {
+ requiredArgs(2, arguments)
+
+ var options = dirtyOptions || {}
+ var locale = options.locale
+ var localeWeekStartsOn =
+ locale && locale.options && locale.options.weekStartsOn
+ var defaultWeekStartsOn =
+ localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)
+ var weekStartsOn =
+ options.weekStartsOn == null
+ ? defaultWeekStartsOn
+ : toInteger(options.weekStartsOn)
+
+ // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')
+ }
+
+ var date = toDate(dirtyDate, options)
+ var day = toInteger(dirtyDay)
+ var currentDay = date.getDay()
+
+ var remainder = day % 7
+ var dayIndex = (remainder + 7) % 7
+
+ var delta = 7 - weekStartsOn
+ var diff =
+ day < 0 || day > 6
+ ? day - ((currentDay + delta) % 7)
+ : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7)
+ return addDays(date, diff, options)
+}
diff --git a/date-fns/src/setDay/index.js.flow b/date-fns/src/setDay/index.js.flow
new file mode 100644
index 0000000..4a2d43d
--- /dev/null
+++ b/date-fns/src/setDay/index.js.flow
@@ -0,0 +1,59 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ day: number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => Date
diff --git a/date-fns/src/setDay/test.js b/date-fns/src/setDay/test.js
new file mode 100644
index 0000000..552b0a9
--- /dev/null
+++ b/date-fns/src/setDay/test.js
@@ -0,0 +1,147 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setDay from '.'
+
+describe('setDay', function () {
+ it('sets the day of the week', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), 0)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 31))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), 0, { weekStartsOn: 1 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), 0, {
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 1 },
+ },
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), 0, {
+ weekStartsOn: 1,
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 0 },
+ },
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('converts a fractional number to an integer', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), 0.5)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 31))
+ })
+
+ it('implicitly converts options', function () {
+ // $ExpectedMistake
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), 0, {
+ weekStartsOn: '1',
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ it('specifies Monday as the first day of the week', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 6), 1, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('specifies Tuesday as the first day of the week', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 6), 1, {
+ weekStartsOn: 2,
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 8))
+ })
+
+ describe('the day index is more than 6', function () {
+ it('sets the day of the next week', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), 8)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 8))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), 7, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 8))
+ })
+
+ it('sets the day of another week in the future', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), 14, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 15))
+ })
+ })
+
+ describe('the day index is less than 0', function () {
+ it('sets the day of the last week', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), -6)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 25))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), -7, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 25))
+ })
+
+ it('set the day of another week in the past', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), -14, {
+ weekStartsOn: 1,
+ })
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 18))
+ })
+ })
+
+ it('accepts a timestamp', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1).getTime(), 3)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 3))
+ })
+
+ it('implicitly converts number arguments', function () {
+ // $ExpectedMistake
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), '5')
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 5))
+ })
+
+ it('does not mutate the original date', function () {
+ var date = new Date(2014, 8 /* Sep */, 1)
+ setDay(date, 3)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ var result = setDay(new Date(NaN), 0)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function () {
+ var result = setDay(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ // $ExpectedMistake
+ var block = setDay.bind(null, new Date(2014, 8 /* Sep */, 1), 0, {
+ weekStartsOn: NaN,
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(setDay.bind(null), TypeError)
+ assert.throws(setDay.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setDayOfYear/benchmark.js b/date-fns/src/setDayOfYear/benchmark.js
new file mode 100644
index 0000000..8127098
--- /dev/null
+++ b/date-fns/src/setDayOfYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setDayOfYear from '.'
+import moment from 'moment'
+
+suite('setDayOfYear', function () {
+ benchmark('date-fns', function () {
+ return setDayOfYear(this.date, 150)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.dayOfYear(150)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setDayOfYear/index.d.ts b/date-fns/src/setDayOfYear/index.d.ts
new file mode 100644
index 0000000..5536c57
--- /dev/null
+++ b/date-fns/src/setDayOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setDayOfYear } from 'date-fns'
+export default setDayOfYear
diff --git a/date-fns/src/setDayOfYear/index.js.flow b/date-fns/src/setDayOfYear/index.js.flow
new file mode 100644
index 0000000..fc974d4
--- /dev/null
+++ b/date-fns/src/setDayOfYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, dayOfYear: number) => Date
diff --git a/date-fns/src/setDayOfYear/index.ts b/date-fns/src/setDayOfYear/index.ts
new file mode 100644
index 0000000..d7b5421
--- /dev/null
+++ b/date-fns/src/setDayOfYear/index.ts
@@ -0,0 +1,38 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setDayOfYear
+ * @category Day Helpers
+ * @summary Set the day of the year to the given date.
+ *
+ * @description
+ * Set the day of the year to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} dayOfYear - the day of the year of the new date
+ * @returns {Date} the new date with the day of the year set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set the 2nd day of the year to 2 July 2014:
+ * var result = setDayOfYear(new Date(2014, 6, 2), 2)
+ * //=> Thu Jan 02 2014 00:00:00
+ */
+export default function setDayOfYear(
+ dirtyDate: Date | number,
+ dirtyDayOfYear: number
+): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const dayOfYear = toInteger(dirtyDayOfYear)
+ date.setMonth(0)
+ date.setDate(dayOfYear)
+ return date
+}
diff --git a/date-fns/src/setDayOfYear/test.ts b/date-fns/src/setDayOfYear/test.ts
new file mode 100644
index 0000000..a58990b
--- /dev/null
+++ b/date-fns/src/setDayOfYear/test.ts
@@ -0,0 +1,50 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setDayOfYear from '.'
+
+describe('setDayOfYear', function() {
+ it('sets the day of the year', function() {
+ const result = setDayOfYear(new Date(2014, 6 /* Jul */, 2), 2)
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 2))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = setDayOfYear(new Date(2014, 6 /* Jul */, 2).getTime(), 60)
+ assert.deepEqual(result, new Date(2014, 2 /* Mar */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = setDayOfYear(new Date(2014, 6 /* Jul */, 2), 2.75)
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 2))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = setDayOfYear(new Date(2014, 6 /* Jul */, 2), '2')
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 2))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 2)
+ setDayOfYear(date, 365)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 2))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = setDayOfYear(new Date(NaN), 2)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = setDayOfYear(new Date(2014, 6 /* Jul */, 2), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setDayOfYear.bind(null), TypeError)
+ assert.throws(setDayOfYear.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setHours/benchmark.js b/date-fns/src/setHours/benchmark.js
new file mode 100644
index 0000000..bb59134
--- /dev/null
+++ b/date-fns/src/setHours/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setHours from '.'
+import moment from 'moment'
+
+suite('setHours', function () {
+ benchmark('date-fns', function () {
+ return setHours(this.date, 14)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.hours(14)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setHours/index.d.ts b/date-fns/src/setHours/index.d.ts
new file mode 100644
index 0000000..2709a32
--- /dev/null
+++ b/date-fns/src/setHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setHours } from 'date-fns'
+export default setHours
diff --git a/date-fns/src/setHours/index.js b/date-fns/src/setHours/index.js
new file mode 100644
index 0000000..d699831
--- /dev/null
+++ b/date-fns/src/setHours/index.js
@@ -0,0 +1,34 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setHours
+ * @category Hour Helpers
+ * @summary Set the hours to the given date.
+ *
+ * @description
+ * Set the hours to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} hours - the hours of the new date
+ * @returns {Date} the new date with the hours set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set 4 hours to 1 September 2014 11:30:00:
+ * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)
+ * //=> Mon Sep 01 2014 04:30:00
+ */
+export default function setHours(dirtyDate, dirtyHours) {
+ requiredArgs(2, arguments)
+
+ var date = toDate(dirtyDate)
+ var hours = toInteger(dirtyHours)
+ date.setHours(hours)
+ return date
+}
diff --git a/date-fns/src/setHours/index.js.flow b/date-fns/src/setHours/index.js.flow
new file mode 100644
index 0000000..c9003bc
--- /dev/null
+++ b/date-fns/src/setHours/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, hours: number) => Date
diff --git a/date-fns/src/setHours/test.js b/date-fns/src/setHours/test.js
new file mode 100644
index 0000000..a89f1a0
--- /dev/null
+++ b/date-fns/src/setHours/test.js
@@ -0,0 +1,49 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setHours from '.'
+
+describe('setHours', function() {
+ it('sets the amount of hours', function() {
+ var result = setHours(new Date(2014, 8 /* Sep */, 1, 11, 30), 4)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 4, 30))
+ })
+
+ it('accepts a timestamp', function() {
+ var result = setHours(new Date(2014, 8 /* Sep */, 1, 11).getTime(), 5)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 5))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ var result = setHours(new Date(2014, 8 /* Sep */, 1, 11, 30), 4.123)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 4, 30))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ var result = setHours(new Date(2014, 8 /* Sep */, 1, 11, 30), '4')
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 4, 30))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 8 /* Sep */, 1, 11)
+ setHours(date, 12)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1, 11))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = setHours(new Date(NaN), 4)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ var result = setHours(new Date(2014, 8 /* Sep */, 1, 11, 30), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setHours.bind(null), TypeError)
+ assert.throws(setHours.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setISODay/benchmark.js b/date-fns/src/setISODay/benchmark.js
new file mode 100644
index 0000000..b7888ff
--- /dev/null
+++ b/date-fns/src/setISODay/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setISODay from '.'
+import moment from 'moment'
+
+suite('setISODay', function () {
+ benchmark('date-fns', function () {
+ return setISODay(this.date, 5)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.isoWeekday(5)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setISODay/index.d.ts b/date-fns/src/setISODay/index.d.ts
new file mode 100644
index 0000000..63fb67a
--- /dev/null
+++ b/date-fns/src/setISODay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setISODay } from 'date-fns'
+export default setISODay
diff --git a/date-fns/src/setISODay/index.js.flow b/date-fns/src/setISODay/index.js.flow
new file mode 100644
index 0000000..07b0629
--- /dev/null
+++ b/date-fns/src/setISODay/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, day: number) => Date
diff --git a/date-fns/src/setISODay/index.ts b/date-fns/src/setISODay/index.ts
new file mode 100644
index 0000000..ef76348
--- /dev/null
+++ b/date-fns/src/setISODay/index.ts
@@ -0,0 +1,39 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import addDays from '../addDays/index'
+import getISODay from '../getISODay/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setISODay
+ * @category Weekday Helpers
+ * @summary Set the day of the ISO week to the given date.
+ *
+ * @description
+ * Set the day of the ISO week to the given date.
+ * ISO week starts with Monday.
+ * 7 is the index of Sunday, 1 is the index of Monday etc.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} day - the day of the ISO week of the new date
+ * @returns {Date} the new date with the day of the ISO week set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set Sunday to 1 September 2014:
+ * const result = setISODay(new Date(2014, 8, 1), 7)
+ * //=> Sun Sep 07 2014 00:00:00
+ */
+export default function setISODay(dirtyDate: Date | number, dirtyDay: number): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const day = toInteger(dirtyDay)
+ const currentDay = getISODay(date)
+ const diff = day - currentDay
+ return addDays(date, diff)
+}
diff --git a/date-fns/src/setISODay/test.ts b/date-fns/src/setISODay/test.ts
new file mode 100644
index 0000000..0b8144a
--- /dev/null
+++ b/date-fns/src/setISODay/test.ts
@@ -0,0 +1,78 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setISODay from '.'
+
+describe('setISODay', function () {
+ it('sets the day of the ISO week', function () {
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1), 3)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 3))
+ })
+
+ it('sets the day to Sunday of this ISO week if the index is 7', function () {
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1), 7)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 7))
+ })
+
+ describe('the day index is more than 7', function () {
+ it('sets the day of the next ISO week', function () {
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1), 8)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 8))
+ })
+
+ it('sets the day of another ISO week in the future', function () {
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1), 21)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 21))
+ })
+ })
+
+ describe('the day index is less than 1', function () {
+ it('sets the day of the last ISO week', function () {
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1), 0)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 31))
+ })
+
+ it('set the day of another ISO week in the past', function () {
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1), -13)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 18))
+ })
+ })
+
+ it('accepts a timestamp', function () {
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1).getTime(), 3)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 3))
+ })
+
+ it('converts a fractional number to an integer', function () {
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1), 3.33)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 3))
+ })
+
+ it('implicitly converts number arguments', function () {
+ // @ts-expect-error
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1), '3')
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 3))
+ })
+
+ it('does not mutate the original date', function () {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ setISODay(date, 3)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ const result = setISODay(new Date(NaN), 3)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function () {
+ const result = setISODay(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function () {
+ assert.throws(setISODay.bind(null), TypeError)
+ assert.throws(setISODay.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setISOWeek/benchmark.js b/date-fns/src/setISOWeek/benchmark.js
new file mode 100644
index 0000000..27409fc
--- /dev/null
+++ b/date-fns/src/setISOWeek/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setISOWeek from '.'
+import moment from 'moment'
+
+suite('setISOWeek', function () {
+ benchmark('date-fns', function () {
+ return setISOWeek(this.date, 10)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.isoWeek(10)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setISOWeek/index.d.ts b/date-fns/src/setISOWeek/index.d.ts
new file mode 100644
index 0000000..a2e7970
--- /dev/null
+++ b/date-fns/src/setISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setISOWeek } from 'date-fns'
+export default setISOWeek
diff --git a/date-fns/src/setISOWeek/index.js.flow b/date-fns/src/setISOWeek/index.js.flow
new file mode 100644
index 0000000..cf1ccb8
--- /dev/null
+++ b/date-fns/src/setISOWeek/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, isoWeek: number) => Date
diff --git a/date-fns/src/setISOWeek/index.ts b/date-fns/src/setISOWeek/index.ts
new file mode 100644
index 0000000..82170f9
--- /dev/null
+++ b/date-fns/src/setISOWeek/index.ts
@@ -0,0 +1,38 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import getISOWeek from '../getISOWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setISOWeek
+ * @category ISO Week Helpers
+ * @summary Set the ISO week to the given date.
+ *
+ * @description
+ * Set the ISO week to the given date, saving the weekday number.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} isoWeek - the ISO week of the new date
+ * @returns {Date} the new date with the ISO week set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set the 53rd ISO week to 7 August 2004:
+ * const result = setISOWeek(new Date(2004, 7, 7), 53)
+ * //=> Sat Jan 01 2005 00:00:00
+ */
+export default function setISOWeek(dirtyDate: Date | number, dirtyISOWeek: number): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const isoWeek = toInteger(dirtyISOWeek)
+ const diff = getISOWeek(date) - isoWeek
+ date.setDate(date.getDate() - diff * 7)
+ return date
+}
diff --git a/date-fns/src/setISOWeek/test.ts b/date-fns/src/setISOWeek/test.ts
new file mode 100644
index 0000000..fe481e0
--- /dev/null
+++ b/date-fns/src/setISOWeek/test.ts
@@ -0,0 +1,60 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setISOWeek from '.'
+
+describe('setISOWeek', function() {
+ it('sets the ISO week', function() {
+ const result = setISOWeek(new Date(2004, 7 /* Aug */, 7), 53)
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = setISOWeek(new Date(2009, 11 /* Dec */, 2).getTime(), 1)
+ assert.deepEqual(result, new Date(2008, 11 /* Dec */, 31))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = setISOWeek(new Date(2004, 7 /* Aug */, 7), 53.53)
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = setISOWeek(new Date(2004, 7 /* Aug */, 7), '53')
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ setISOWeek(date, 52)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 2))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(4, 0 /* Jan */, 4)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(4, 11 /* Dec */, 26)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = setISOWeek(initialDate, 52)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = setISOWeek(new Date(NaN), 53)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = setISOWeek(new Date(2004, 7 /* Aug */, 7), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setISOWeek.bind(null), TypeError)
+ assert.throws(setISOWeek.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setISOWeekYear/benchmark.js b/date-fns/src/setISOWeekYear/benchmark.js
new file mode 100644
index 0000000..1f93381
--- /dev/null
+++ b/date-fns/src/setISOWeekYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setISOWeekYear from '.'
+import moment from 'moment'
+
+suite('setISOWeekYear', function () {
+ benchmark('date-fns', function () {
+ return setISOWeekYear(this.date, 2008)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.isoWeekYear(2008)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setISOWeekYear/index.d.ts b/date-fns/src/setISOWeekYear/index.d.ts
new file mode 100644
index 0000000..ab8ea95
--- /dev/null
+++ b/date-fns/src/setISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setISOWeekYear } from 'date-fns'
+export default setISOWeekYear
diff --git a/date-fns/src/setISOWeekYear/index.js.flow b/date-fns/src/setISOWeekYear/index.js.flow
new file mode 100644
index 0000000..43beb65
--- /dev/null
+++ b/date-fns/src/setISOWeekYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, isoWeekYear: number) => Date
diff --git a/date-fns/src/setISOWeekYear/index.ts b/date-fns/src/setISOWeekYear/index.ts
new file mode 100644
index 0000000..20d0051
--- /dev/null
+++ b/date-fns/src/setISOWeekYear/index.ts
@@ -0,0 +1,49 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import startOfISOWeekYear from '../startOfISOWeekYear/index'
+import differenceInCalendarDays from '../differenceInCalendarDays/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setISOWeekYear
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Set the ISO week-numbering year to the given date.
+ *
+ * @description
+ * Set the ISO week-numbering year to the given date,
+ * saving the week number and the weekday number.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `setISOYear` to `setISOWeekYear`.
+ * "ISO week year" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ * This change makes the name consistent with
+ * locale-dependent week-numbering year helpers, e.g., `setWeekYear`.
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} isoWeekYear - the ISO week-numbering year of the new date
+ * @returns {Date} the new date with the ISO week-numbering year set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set ISO week-numbering year 2007 to 29 December 2008:
+ * const result = setISOWeekYear(new Date(2008, 11, 29), 2007)
+ * //=> Mon Jan 01 2007 00:00:00
+ */
+export default function setISOWeekYear(dirtyDate: Date | number, dirtyISOWeekYear: number): Date {
+ requiredArgs(2, arguments)
+
+ let date = toDate(dirtyDate)
+ const isoWeekYear = toInteger(dirtyISOWeekYear)
+ const diff = differenceInCalendarDays(date, startOfISOWeekYear(date))
+ const fourthOfJanuary = new Date(0)
+ fourthOfJanuary.setFullYear(isoWeekYear, 0, 4)
+ fourthOfJanuary.setHours(0, 0, 0, 0)
+ date = startOfISOWeekYear(fourthOfJanuary)
+ date.setDate(date.getDate() + diff)
+ return date
+}
diff --git a/date-fns/src/setISOWeekYear/test.ts b/date-fns/src/setISOWeekYear/test.ts
new file mode 100644
index 0000000..c5ea154
--- /dev/null
+++ b/date-fns/src/setISOWeekYear/test.ts
@@ -0,0 +1,69 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setISOWeekYear from '.'
+
+describe('setISOWeekYear', function() {
+ it('sets the ISO week-numbering year, saving the ISO week and the day of the week', function() {
+ const result = setISOWeekYear(new Date(2008, 11 /* Dec */, 29), 2007)
+ assert.deepEqual(result, new Date(2007, 0 /* Jan */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = setISOWeekYear(new Date(2010, 0 /* Jan */, 2).getTime(), 2004)
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = setISOWeekYear(new Date(2008, 11 /* Dec */, 29), 2007.7002)
+ assert.deepEqual(result, new Date(2007, 0 /* Jan */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = setISOWeekYear(new Date(2008, 11 /* Dec */, 29), '2007')
+ assert.deepEqual(result, new Date(2007, 0 /* Jan */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2008, 11 /* Dec */, 29)
+ setISOWeekYear(date, 2000)
+ assert.deepEqual(date, new Date(2008, 11 /* Dec */, 29))
+ })
+
+ it('sets ISO week-numbering years less than 100', function() {
+ const initialDate = new Date(2008, 11 /* Dec */, 29)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(7, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = setISOWeekYear(initialDate, 7)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(8, 11 /* Dec */, 29)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(7, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = setISOWeekYear(initialDate, 7)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = setISOWeekYear(new Date(NaN), 2007)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = setISOWeekYear(new Date(2008, 11 /* Dec */, 29), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setISOWeekYear.bind(null), TypeError)
+ assert.throws(setISOWeekYear.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setMilliseconds/benchmark.js b/date-fns/src/setMilliseconds/benchmark.js
new file mode 100644
index 0000000..e292c6c
--- /dev/null
+++ b/date-fns/src/setMilliseconds/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setMilliseconds from '.'
+import moment from 'moment'
+
+suite('setMilliseconds', function () {
+ benchmark('date-fns', function () {
+ return setMilliseconds(this.date, 400)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.milliseconds(400)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setMilliseconds/index.d.ts b/date-fns/src/setMilliseconds/index.d.ts
new file mode 100644
index 0000000..04743a0
--- /dev/null
+++ b/date-fns/src/setMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setMilliseconds } from 'date-fns'
+export default setMilliseconds
diff --git a/date-fns/src/setMilliseconds/index.js.flow b/date-fns/src/setMilliseconds/index.js.flow
new file mode 100644
index 0000000..d9bc57f
--- /dev/null
+++ b/date-fns/src/setMilliseconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, milliseconds: number) => Date
diff --git a/date-fns/src/setMilliseconds/index.ts b/date-fns/src/setMilliseconds/index.ts
new file mode 100644
index 0000000..2c55c65
--- /dev/null
+++ b/date-fns/src/setMilliseconds/index.ts
@@ -0,0 +1,34 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setMilliseconds
+ * @category Millisecond Helpers
+ * @summary Set the milliseconds to the given date.
+ *
+ * @description
+ * Set the milliseconds to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} milliseconds - the milliseconds of the new date
+ * @returns {Date} the new date with the milliseconds set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set 300 milliseconds to 1 September 2014 11:30:40.500:
+ * const result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300)
+ * //=> Mon Sep 01 2014 11:30:40.300
+ */
+export default function setMilliseconds(dirtyDate: Date | number, dirtyMilliseconds: number): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const milliseconds = toInteger(dirtyMilliseconds)
+ date.setMilliseconds(milliseconds)
+ return date
+}
diff --git a/date-fns/src/setMilliseconds/test.ts b/date-fns/src/setMilliseconds/test.ts
new file mode 100644
index 0000000..6becea2
--- /dev/null
+++ b/date-fns/src/setMilliseconds/test.ts
@@ -0,0 +1,64 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setMilliseconds from '.'
+
+describe('setMilliseconds', function() {
+ it('sets the milliseconds', function() {
+ const result = setMilliseconds(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500),
+ 300
+ )
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 300))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = setMilliseconds(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 15, 750).getTime(),
+ 755
+ )
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 15, 755))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = setMilliseconds(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500),
+ 300.999
+ )
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 300))
+ })
+
+ it('implicitly converts number arguments', function() {
+ const result = setMilliseconds(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500),
+ // @ts-expect-error
+ '300'
+ )
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 300))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500)
+ setMilliseconds(date, 137)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = setMilliseconds(new Date(NaN), 300)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = setMilliseconds(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500),
+ NaN
+ )
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setMilliseconds.bind(null), TypeError)
+ assert.throws(setMilliseconds.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setMinutes/benchmark.js b/date-fns/src/setMinutes/benchmark.js
new file mode 100644
index 0000000..679c428
--- /dev/null
+++ b/date-fns/src/setMinutes/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setMinutes from '.'
+import moment from 'moment'
+
+suite('setMinutes', function () {
+ benchmark('date-fns', function () {
+ return setMinutes(this.date, 45)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.minutes(45)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setMinutes/index.d.ts b/date-fns/src/setMinutes/index.d.ts
new file mode 100644
index 0000000..2732d47
--- /dev/null
+++ b/date-fns/src/setMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setMinutes } from 'date-fns'
+export default setMinutes
diff --git a/date-fns/src/setMinutes/index.js b/date-fns/src/setMinutes/index.js
new file mode 100644
index 0000000..2ee7f4b
--- /dev/null
+++ b/date-fns/src/setMinutes/index.js
@@ -0,0 +1,34 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setMinutes
+ * @category Minute Helpers
+ * @summary Set the minutes to the given date.
+ *
+ * @description
+ * Set the minutes to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} minutes - the minutes of the new date
+ * @returns {Date} the new date with the minutes set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set 45 minutes to 1 September 2014 11:30:40:
+ * var result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)
+ * //=> Mon Sep 01 2014 11:45:40
+ */
+export default function setMinutes(dirtyDate, dirtyMinutes) {
+ requiredArgs(2, arguments)
+
+ var date = toDate(dirtyDate)
+ var minutes = toInteger(dirtyMinutes)
+ date.setMinutes(minutes)
+ return date
+}
diff --git a/date-fns/src/setMinutes/index.js.flow b/date-fns/src/setMinutes/index.js.flow
new file mode 100644
index 0000000..5231232
--- /dev/null
+++ b/date-fns/src/setMinutes/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, minutes: number) => Date
diff --git a/date-fns/src/setMinutes/test.js b/date-fns/src/setMinutes/test.js
new file mode 100644
index 0000000..0a1819c
--- /dev/null
+++ b/date-fns/src/setMinutes/test.js
@@ -0,0 +1,49 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setMinutes from '.'
+
+describe('setMinutes', function() {
+ it('sets the minutes', function() {
+ var result = setMinutes(new Date(2014, 8 /* Sep */, 1, 11, 30, 40), 45)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 45, 40))
+ })
+
+ it('accepts a timestamp', function() {
+ var result = setMinutes(new Date(2014, 8 /* Sep */, 1, 11, 30).getTime(), 5)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 5))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ var result = setMinutes(new Date(2014, 8 /* Sep */, 1, 11, 30, 40), 45.54)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 45, 40))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ var result = setMinutes(new Date(2014, 8 /* Sep */, 1, 11, 30, 40), '45')
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 45, 40))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 8 /* Sep */, 1, 11, 30)
+ setMinutes(date, 15)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1, 11, 30))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = setMinutes(new Date(NaN), 45)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ var result = setMinutes(new Date(2014, 8 /* Sep */, 1, 11, 30, 40), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setMinutes.bind(null), TypeError)
+ assert.throws(setMinutes.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setMonth/benchmark.js b/date-fns/src/setMonth/benchmark.js
new file mode 100644
index 0000000..0113f1f
--- /dev/null
+++ b/date-fns/src/setMonth/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setMonth from '.'
+import moment from 'moment'
+
+suite('setMonth', function () {
+ benchmark('date-fns', function () {
+ return setMonth(this.date, 6)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.month(6)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setMonth/index.d.ts b/date-fns/src/setMonth/index.d.ts
new file mode 100644
index 0000000..720d61c
--- /dev/null
+++ b/date-fns/src/setMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setMonth } from 'date-fns'
+export default setMonth
diff --git a/date-fns/src/setMonth/index.js.flow b/date-fns/src/setMonth/index.js.flow
new file mode 100644
index 0000000..29bd4de
--- /dev/null
+++ b/date-fns/src/setMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, month: number) => Date
diff --git a/date-fns/src/setMonth/index.ts b/date-fns/src/setMonth/index.ts
new file mode 100644
index 0000000..c625378
--- /dev/null
+++ b/date-fns/src/setMonth/index.ts
@@ -0,0 +1,44 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import getDaysInMonth from '../getDaysInMonth/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setMonth
+ * @category Month Helpers
+ * @summary Set the month to the given date.
+ *
+ * @description
+ * Set the month to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} month - the month of the new date
+ * @returns {Date} the new date with the month set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set February to 1 September 2014:
+ * const result = setMonth(new Date(2014, 8, 1), 1)
+ * //=> Sat Feb 01 2014 00:00:00
+ */
+export default function setMonth(dirtyDate: Date | number, dirtyMonth: number): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const month = toInteger(dirtyMonth)
+ const year = date.getFullYear()
+ const day = date.getDate()
+
+ const dateWithDesiredMonth = new Date(0)
+ dateWithDesiredMonth.setFullYear(year, month, 15)
+ dateWithDesiredMonth.setHours(0, 0, 0, 0)
+ const daysInMonth = getDaysInMonth(dateWithDesiredMonth)
+ // Set the last day of the new month
+ // if the original date was the last day of the longer month
+ date.setMonth(month, Math.min(day, daysInMonth))
+ return date
+}
diff --git a/date-fns/src/setMonth/test.ts b/date-fns/src/setMonth/test.ts
new file mode 100644
index 0000000..75d61db
--- /dev/null
+++ b/date-fns/src/setMonth/test.ts
@@ -0,0 +1,65 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setMonth from '.'
+
+describe('setMonth', function() {
+ it('sets the month', function() {
+ const result = setMonth(new Date(2014, 8 /* Sep */, 1), 1)
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 1))
+ })
+
+ it('sets the last day of the month if the original date was the last day of a longer month', function() {
+ const result = setMonth(new Date(2014, 11 /* Dec */, 31), 1)
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 28))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = setMonth(new Date(2014, 8 /* Sep */, 1).getTime(), 11)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = setMonth(new Date(2014, 8 /* Sep */, 1), 1.5)
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = setMonth(new Date(2014, 8 /* Sep */, 1), '1')
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ setMonth(date, 5)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(0, 11 /* Dec */, 31)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(0, 1 /* Feb */, 29)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = setMonth(initialDate, 1)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = setMonth(new Date(NaN), 1)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = setMonth(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setMonth.bind(null), TypeError)
+ assert.throws(setMonth.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setQuarter/benchmark.js b/date-fns/src/setQuarter/benchmark.js
new file mode 100644
index 0000000..695a480
--- /dev/null
+++ b/date-fns/src/setQuarter/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setQuarter from '.'
+import moment from 'moment'
+
+suite('setQuarter', function () {
+ benchmark('date-fns', function () {
+ return setQuarter(this.date, 3)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.quarter(3)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setQuarter/index.d.ts b/date-fns/src/setQuarter/index.d.ts
new file mode 100644
index 0000000..7e98fc9
--- /dev/null
+++ b/date-fns/src/setQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setQuarter } from 'date-fns'
+export default setQuarter
diff --git a/date-fns/src/setQuarter/index.js.flow b/date-fns/src/setQuarter/index.js.flow
new file mode 100644
index 0000000..d0e4d51
--- /dev/null
+++ b/date-fns/src/setQuarter/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, quarter: number) => Date
diff --git a/date-fns/src/setQuarter/index.ts b/date-fns/src/setQuarter/index.ts
new file mode 100644
index 0000000..3fb765d
--- /dev/null
+++ b/date-fns/src/setQuarter/index.ts
@@ -0,0 +1,36 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import setMonth from '../setMonth/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setQuarter
+ * @category Quarter Helpers
+ * @summary Set the year quarter to the given date.
+ *
+ * @description
+ * Set the year quarter to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} quarter - the quarter of the new date
+ * @returns {Date} the new date with the quarter set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set the 2nd quarter to 2 July 2014:
+ * const result = setQuarter(new Date(2014, 6, 2), 2)
+ * //=> Wed Apr 02 2014 00:00:00
+ */
+export default function setQuarter(dirtyDate: Date | number, dirtyQuarter: number): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const quarter = toInteger(dirtyQuarter)
+ const oldQuarter = Math.floor(date.getMonth() / 3) + 1
+ const diff = quarter - oldQuarter
+ return setMonth(date, date.getMonth() + diff * 3)
+}
diff --git a/date-fns/src/setQuarter/test.ts b/date-fns/src/setQuarter/test.ts
new file mode 100644
index 0000000..dc47195
--- /dev/null
+++ b/date-fns/src/setQuarter/test.ts
@@ -0,0 +1,65 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setQuarter from '.'
+
+describe('setQuarter', function() {
+ it('sets the quarter of the year', function() {
+ const result = setQuarter(new Date(2014, 6 /* Jul */, 2), 1)
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 2))
+ })
+
+ it('sets the last day of the month if the original date was the last day of a longer month', function() {
+ const result = setQuarter(new Date(2014, 10 /* Nov */, 30), 1)
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 28))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = setQuarter(new Date(2014, 6 /* Jul */, 1).getTime(), 4)
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = setQuarter(new Date(2014, 6 /* Jul */, 2), 1.951)
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 2))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = setQuarter(new Date(2014, 6 /* Jul */, 2), '1')
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 2))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 1)
+ setQuarter(date, 2)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 1))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(0, 10 /* Nov */, 30)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(0, 1 /* Feb */, 29)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = setQuarter(initialDate, 1)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = setQuarter(new Date(NaN), 1)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = setQuarter(new Date(2014, 6 /* Jul */, 2), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setQuarter.bind(null), TypeError)
+ assert.throws(setQuarter.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setSeconds/benchmark.js b/date-fns/src/setSeconds/benchmark.js
new file mode 100644
index 0000000..41733f2
--- /dev/null
+++ b/date-fns/src/setSeconds/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setSeconds from '.'
+import moment from 'moment'
+
+suite('setSeconds', function () {
+ benchmark('date-fns', function () {
+ return setSeconds(this.date, 15)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.seconds(15)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setSeconds/index.d.ts b/date-fns/src/setSeconds/index.d.ts
new file mode 100644
index 0000000..a67a07f
--- /dev/null
+++ b/date-fns/src/setSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setSeconds } from 'date-fns'
+export default setSeconds
diff --git a/date-fns/src/setSeconds/index.js.flow b/date-fns/src/setSeconds/index.js.flow
new file mode 100644
index 0000000..056c068
--- /dev/null
+++ b/date-fns/src/setSeconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, seconds: number) => Date
diff --git a/date-fns/src/setSeconds/index.ts b/date-fns/src/setSeconds/index.ts
new file mode 100644
index 0000000..5ed16a0
--- /dev/null
+++ b/date-fns/src/setSeconds/index.ts
@@ -0,0 +1,34 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setSeconds
+ * @category Second Helpers
+ * @summary Set the seconds to the given date.
+ *
+ * @description
+ * Set the seconds to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} seconds - the seconds of the new date
+ * @returns {Date} the new date with the seconds set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set 45 seconds to 1 September 2014 11:30:40:
+ * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)
+ * //=> Mon Sep 01 2014 11:30:45
+ */
+export default function setSeconds(dirtyDate: Date | number, dirtySeconds: number): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const seconds = toInteger(dirtySeconds)
+ date.setSeconds(seconds)
+ return date
+}
diff --git a/date-fns/src/setSeconds/test.ts b/date-fns/src/setSeconds/test.ts
new file mode 100644
index 0000000..855398d
--- /dev/null
+++ b/date-fns/src/setSeconds/test.ts
@@ -0,0 +1,61 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setSeconds from '.'
+
+describe('setSeconds', function() {
+ it('sets the seconds', function() {
+ const result = setSeconds(new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500), 45)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 45, 500))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = setSeconds(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 15).getTime(),
+ 45
+ )
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 45))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = setSeconds(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500),
+ 45.54
+ )
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 45, 500))
+ })
+
+ it('implicitly converts number arguments', function() {
+ const result = setSeconds(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500),
+ // @ts-expect-error
+ '45'
+ )
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 11, 30, 45, 500))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1, 11, 30, 40)
+ setSeconds(date, 15)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1, 11, 30, 40))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = setSeconds(new Date(NaN), 45)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = setSeconds(
+ new Date(2014, 8 /* Sep */, 1, 11, 30, 40, 500),
+ NaN
+ )
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setSeconds.bind(null), TypeError)
+ assert.throws(setSeconds.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setWeek/index.d.ts b/date-fns/src/setWeek/index.d.ts
new file mode 100644
index 0000000..b6c90f3
--- /dev/null
+++ b/date-fns/src/setWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setWeek } from 'date-fns'
+export default setWeek
diff --git a/date-fns/src/setWeek/index.js b/date-fns/src/setWeek/index.js
new file mode 100644
index 0000000..568d088
--- /dev/null
+++ b/date-fns/src/setWeek/index.js
@@ -0,0 +1,58 @@
+import getWeek from '../getWeek/index'
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setWeek
+ * @category Week Helpers
+ * @summary Set the local week to the given date.
+ *
+ * @description
+ * Set the local week to the given date, saving the weekday number.
+ * The exact calculation depends on the values of
+ * `options.weekStartsOn` (which is the index of the first day of the week)
+ * and `options.firstWeekContainsDate` (which is the day of January, which is always in
+ * the first week of the week-numbering year)
+ *
+ * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} week - the week of the new date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year
+ * @returns {Date} the new date with the local week set
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
+ *
+ * @example
+ * // Set the 1st week to 2 January 2005 with default options:
+ * var result = setWeek(new Date(2005, 0, 2), 1)
+ * //=> Sun Dec 26 2004 00:00:00
+ *
+ * @example
+ * // Set the 1st week to 2 January 2005,
+ * // if Monday is the first day of the week,
+ * // and the first week of the year always contains 4 January:
+ * var result = setWeek(new Date(2005, 0, 2), 1, {
+ * weekStartsOn: 1,
+ * firstWeekContainsDate: 4
+ * })
+ * //=> Sun Jan 4 2004 00:00:00
+ */
+export default function setWeek(dirtyDate, dirtyWeek, dirtyOptions) {
+ requiredArgs(2, arguments)
+
+ var date = toDate(dirtyDate)
+ var week = toInteger(dirtyWeek)
+ var diff = getWeek(date, dirtyOptions) - week
+ date.setDate(date.getDate() - diff * 7)
+ return date
+}
diff --git a/date-fns/src/setWeek/index.js.flow b/date-fns/src/setWeek/index.js.flow
new file mode 100644
index 0000000..59b7eb3
--- /dev/null
+++ b/date-fns/src/setWeek/index.js.flow
@@ -0,0 +1,60 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ week: number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+) => Date
diff --git a/date-fns/src/setWeek/test.js b/date-fns/src/setWeek/test.js
new file mode 100644
index 0000000..dbf30d6
--- /dev/null
+++ b/date-fns/src/setWeek/test.js
@@ -0,0 +1,100 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setWeek from '.'
+
+describe('setWeek', function() {
+ it('sets the local week', function() {
+ var result = setWeek(new Date(2005, 0 /* Jan */, 2), 1)
+ assert.deepEqual(result, new Date(2004, 11 /* Dec */, 26))
+ })
+
+ it('accepts a timestamp', function() {
+ var result = setWeek(new Date(2009, 11 /* Dec */, 2).getTime(), 1)
+ assert.deepEqual(result, new Date(2008, 11 /* Dec */, 31))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ var result = setWeek(new Date(2005, 0 /* Jan */, 2), 1.9)
+ assert.deepEqual(result, new Date(2004, 11 /* Dec */, 26))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ var result = setWeek(new Date(2004, 7 /* Aug */, 7), '53')
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ setWeek(date, 52)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 2))
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setFullYear(4, 0 /* Jan */, 4)
+ initialDate.setHours(0, 0, 0, 0)
+ var expectedResult = new Date(0)
+ expectedResult.setFullYear(4, 11 /* Dec */, 19)
+ expectedResult.setHours(0, 0, 0, 0)
+ var result = setWeek(initialDate, 52)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = setWeek(new Date(NaN), 53)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ var result = setWeek(new Date(2004, 7 /* Aug */, 7), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in locale', function() {
+ var date = new Date(2005, 0 /* Jan */, 2)
+ var result = setWeek(date, 1, {
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 1, firstWeekContainsDate: 4 }
+ }
+ })
+ assert.deepEqual(result, new Date(2004, 0 /* Jan */, 4))
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ var date = new Date(2005, 0 /* Jan */, 2)
+ var result = setWeek(date, 1, {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 0, firstWeekContainsDate: 1 }
+ }
+ })
+ assert.deepEqual(result, new Date(2004, 0 /* Jan */, 4))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ // $ExpectedMistake
+ var block = setWeek.bind(null, new Date(2004, 7 /* Aug */, 7), 53, {
+ weekStartsOn: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function() {
+ // $ExpectedMistake
+ var block = setWeek.bind(null, new Date(2004, 7 /* Aug */, 7), 53, {
+ firstWeekContainsDate: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setWeek.bind(null), TypeError)
+ assert.throws(setWeek.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setWeekYear/index.d.ts b/date-fns/src/setWeekYear/index.d.ts
new file mode 100644
index 0000000..af02252
--- /dev/null
+++ b/date-fns/src/setWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setWeekYear } from 'date-fns'
+export default setWeekYear
diff --git a/date-fns/src/setWeekYear/index.js b/date-fns/src/setWeekYear/index.js
new file mode 100644
index 0000000..2699706
--- /dev/null
+++ b/date-fns/src/setWeekYear/index.js
@@ -0,0 +1,77 @@
+import differenceInCalendarDays from '../differenceInCalendarDays/index'
+import startOfWeekYear from '../startOfWeekYear/index'
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setWeekYear
+ * @category Week-Numbering Year Helpers
+ * @summary Set the local week-numbering year to the given date.
+ *
+ * @description
+ * Set the local week-numbering year to the given date,
+ * saving the week number and the weekday number.
+ * The exact calculation depends on the values of
+ * `options.weekStartsOn` (which is the index of the first day of the week)
+ * and `options.firstWeekContainsDate` (which is the day of January, which is always in
+ * the first week of the week-numbering year)
+ *
+ * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} weekYear - the local week-numbering year of the new date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year
+ * @returns {Date} the new date with the local week-numbering year set
+ * @throws {TypeError} 2 arguments required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
+ *
+ * @example
+ * // Set the local week-numbering year 2004 to 2 January 2010 with default options:
+ * var result = setWeekYear(new Date(2010, 0, 2), 2004)
+ * //=> Sat Jan 03 2004 00:00:00
+ *
+ * @example
+ * // Set the local week-numbering year 2004 to 2 January 2010,
+ * // if Monday is the first day of week
+ * // and 4 January is always in the first week of the year:
+ * var result = setWeekYear(new Date(2010, 0, 2), 2004, {
+ * weekStartsOn: 1,
+ * firstWeekContainsDate: 4
+ * })
+ * //=> Sat Jan 01 2005 00:00:00
+ */
+export default function setWeekYear(dirtyDate, dirtyWeekYear, dirtyOptions) {
+ requiredArgs(2, arguments)
+
+ var options = dirtyOptions || {}
+ var locale = options.locale
+ var localeFirstWeekContainsDate =
+ locale && locale.options && locale.options.firstWeekContainsDate
+ var defaultFirstWeekContainsDate =
+ localeFirstWeekContainsDate == null
+ ? 1
+ : toInteger(localeFirstWeekContainsDate)
+ var firstWeekContainsDate =
+ options.firstWeekContainsDate == null
+ ? defaultFirstWeekContainsDate
+ : toInteger(options.firstWeekContainsDate)
+
+ var date = toDate(dirtyDate)
+ var weekYear = toInteger(dirtyWeekYear)
+ var diff = differenceInCalendarDays(date, startOfWeekYear(date, dirtyOptions))
+ var firstWeek = new Date(0)
+ firstWeek.setFullYear(weekYear, 0, firstWeekContainsDate)
+ firstWeek.setHours(0, 0, 0, 0)
+ date = startOfWeekYear(firstWeek, dirtyOptions)
+ date.setDate(date.getDate() + diff)
+ return date
+}
diff --git a/date-fns/src/setWeekYear/index.js.flow b/date-fns/src/setWeekYear/index.js.flow
new file mode 100644
index 0000000..12a9d84
--- /dev/null
+++ b/date-fns/src/setWeekYear/index.js.flow
@@ -0,0 +1,60 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ weekYear: number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+) => Date
diff --git a/date-fns/src/setWeekYear/test.js b/date-fns/src/setWeekYear/test.js
new file mode 100644
index 0000000..a493412
--- /dev/null
+++ b/date-fns/src/setWeekYear/test.js
@@ -0,0 +1,109 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setWeekYear from '.'
+
+describe('setWeekYear', function() {
+ it('sets the local week-numbering year, saving the week and the day of the week', function() {
+ var result = setWeekYear(new Date(2010, 0 /* Jan */, 2), 2004)
+ assert.deepEqual(result, new Date(2004, 0 /* Jan */, 3))
+ })
+
+ it('accepts a timestamp', function() {
+ var result = setWeekYear(new Date(2008, 11 /* Dec */, 29).getTime(), 2007)
+ assert.deepEqual(result, new Date(2007, 0 /* Jan */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ var result = setWeekYear(new Date(2010, 0 /* Jan */, 2), 2004.2004)
+ assert.deepEqual(result, new Date(2004, 0 /* Jan */, 3))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ var result = setWeekYear(new Date(2008, 11 /* Dec */, 29), '2007')
+ assert.deepEqual(result, new Date(2007, 0 /* Jan */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2008, 11 /* Dec */, 29)
+ setWeekYear(date, 2000)
+ assert.deepEqual(date, new Date(2008, 11 /* Dec */, 29))
+ })
+
+ it('sets local week-numbering years less than 100', function() {
+ var initialDate = new Date(2008, 11 /* Dec */, 29)
+ var expectedResult = new Date(0)
+ expectedResult.setFullYear(7, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ var result = setWeekYear(initialDate, 7)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setFullYear(8, 11 /* Dec */, 29)
+ initialDate.setHours(0, 0, 0, 0)
+ var expectedResult = new Date(0)
+ expectedResult.setFullYear(7, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ var result = setWeekYear(initialDate, 7)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = setWeekYear(new Date(NaN), 2007)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ var result = setWeekYear(new Date(2008, 11 /* Dec */, 29), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in locale', function() {
+ var date = new Date(2010, 0 /* Jan */, 2)
+ var result = setWeekYear(date, 2004, {
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 1, firstWeekContainsDate: 4 }
+ }
+ })
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 1))
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ var date = new Date(2010, 0 /* Jan */, 2)
+ var result = setWeekYear(date, 2004, {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 0, firstWeekContainsDate: 1 }
+ }
+ })
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 1))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ // $ExpectedMistake
+ var block = setWeekYear.bind(null, new Date(2004, 7 /* Aug */, 7), 2018, {
+ weekStartsOn: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function() {
+ // $ExpectedMistake
+ var block = setWeekYear.bind(null, new Date(2004, 7 /* Aug */, 7), 2018, {
+ firstWeekContainsDate: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setWeekYear.bind(null), TypeError)
+ assert.throws(setWeekYear.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/setYear/benchmark.js b/date-fns/src/setYear/benchmark.js
new file mode 100644
index 0000000..8d20c7e
--- /dev/null
+++ b/date-fns/src/setYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import setYear from '.'
+import moment from 'moment'
+
+suite('setYear', function () {
+ benchmark('date-fns', function () {
+ return setYear(this.date, 2014)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.year(2014)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/setYear/index.d.ts b/date-fns/src/setYear/index.d.ts
new file mode 100644
index 0000000..e0a76fb
--- /dev/null
+++ b/date-fns/src/setYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { setYear } from 'date-fns'
+export default setYear
diff --git a/date-fns/src/setYear/index.js.flow b/date-fns/src/setYear/index.js.flow
new file mode 100644
index 0000000..ebdcafe
--- /dev/null
+++ b/date-fns/src/setYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, year: number) => Date
diff --git a/date-fns/src/setYear/index.ts b/date-fns/src/setYear/index.ts
new file mode 100644
index 0000000..729fcd0
--- /dev/null
+++ b/date-fns/src/setYear/index.ts
@@ -0,0 +1,40 @@
+import toInteger from '../_lib/toInteger/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name setYear
+ * @category Year Helpers
+ * @summary Set the year to the given date.
+ *
+ * @description
+ * Set the year to the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} year - the year of the new date
+ * @returns {Date} the new date with the year set
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Set year 2013 to 1 September 2014:
+ * const result = setYear(new Date(2014, 8, 1), 2013)
+ * //=> Sun Sep 01 2013 00:00:00
+ */
+export default function setYear(dirtyDate: Date | number, dirtyYear: number): Date {
+ requiredArgs(2, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = toInteger(dirtyYear)
+
+ // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date
+ if (isNaN(date.getTime())) {
+ return new Date(NaN)
+ }
+
+ date.setFullYear(year)
+ return date
+}
diff --git a/date-fns/src/setYear/test.ts b/date-fns/src/setYear/test.ts
new file mode 100644
index 0000000..d30a712
--- /dev/null
+++ b/date-fns/src/setYear/test.ts
@@ -0,0 +1,49 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import setYear from '.'
+
+describe('setYear', function() {
+ it('sets the year', function() {
+ const result = setYear(new Date(2014, 8 /* Sep */, 1), 2013)
+ assert.deepEqual(result, new Date(2013, 8 /* Sep */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = setYear(new Date(2014, 8 /* Sep */, 1).getTime(), 2016)
+ assert.deepEqual(result, new Date(2016, 8 /* Sep */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = setYear(new Date(2014, 8 /* Sep */, 1), 2013.987654321)
+ assert.deepEqual(result, new Date(2013, 8 /* Sep */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // @ts-expect-error
+ const result = setYear(new Date(2014, 8 /* Sep */, 1), '2013')
+ assert.deepEqual(result, new Date(2013, 8 /* Sep */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 8 /* Sep */, 1)
+ setYear(date, 2011)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = setYear(new Date(NaN), 2013)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = setYear(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result.getTime()))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(setYear.bind(null), TypeError)
+ assert.throws(setYear.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfDay/benchmark.js b/date-fns/src/startOfDay/benchmark.js
new file mode 100644
index 0000000..580f043
--- /dev/null
+++ b/date-fns/src/startOfDay/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfDay from '.'
+import moment from 'moment'
+
+suite('startOfDay', function () {
+ benchmark('date-fns', function () {
+ return startOfDay(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.startOf('day')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/startOfDay/index.d.ts b/date-fns/src/startOfDay/index.d.ts
new file mode 100644
index 0000000..4463069
--- /dev/null
+++ b/date-fns/src/startOfDay/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfDay } from 'date-fns'
+export default startOfDay
diff --git a/date-fns/src/startOfDay/index.js.flow b/date-fns/src/startOfDay/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfDay/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfDay/index.ts b/date-fns/src/startOfDay/index.ts
new file mode 100644
index 0000000..0292c47
--- /dev/null
+++ b/date-fns/src/startOfDay/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfDay
+ * @category Day Helpers
+ * @summary Return the start of a day for the given date.
+ *
+ * @description
+ * Return the start of a day for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of a day
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of a day for 2 September 2014 11:55:00:
+ * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Tue Sep 02 2014 00:00:00
+ */
+export default function startOfDay(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfDay/test.ts b/date-fns/src/startOfDay/test.ts
new file mode 100644
index 0000000..a699302
--- /dev/null
+++ b/date-fns/src/startOfDay/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfDay from '.'
+
+describe('startOfDay', function() {
+ it('returns the date with the time set to 00:00:00', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = startOfDay(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 2, 0, 0, 0, 0))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = startOfDay(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 2, 0, 0, 0, 0))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ startOfDay(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfDay(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfDay.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfDecade/benchmark.js b/date-fns/src/startOfDecade/benchmark.js
new file mode 100644
index 0000000..2f3acb5
--- /dev/null
+++ b/date-fns/src/startOfDecade/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfDecade from '.'
+
+suite('startOfDecade', function () {
+ benchmark('date-fns', function () {
+ return startOfDecade(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/startOfDecade/index.d.ts b/date-fns/src/startOfDecade/index.d.ts
new file mode 100644
index 0000000..c4309c3
--- /dev/null
+++ b/date-fns/src/startOfDecade/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfDecade } from 'date-fns'
+export default startOfDecade
diff --git a/date-fns/src/startOfDecade/index.js.flow b/date-fns/src/startOfDecade/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfDecade/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfDecade/index.ts b/date-fns/src/startOfDecade/index.ts
new file mode 100644
index 0000000..fc6c0ac
--- /dev/null
+++ b/date-fns/src/startOfDecade/index.ts
@@ -0,0 +1,34 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfDecade
+ * @category Decade Helpers
+ * @summary Return the start of a decade for the given date.
+ *
+ * @description
+ * Return the start of a decade for the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of a decade
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of a decade for 21 October 2015 00:00:00:
+ * const result = startOfDecade(new Date(2015, 9, 21, 00, 00, 00))
+ * //=> Jan 01 2010 00:00:00
+ */
+export default function startOfDecade(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const year = date.getFullYear()
+ const decade = Math.floor(year / 10) * 10
+ date.setFullYear(decade, 0, 1)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfDecade/test.ts b/date-fns/src/startOfDecade/test.ts
new file mode 100644
index 0000000..b9f7dee
--- /dev/null
+++ b/date-fns/src/startOfDecade/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfDecade from '.'
+
+describe('startOfDecade', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of a year', function() {
+ const date = new Date(1953, 3 /* Apr */, 13)
+ const result = startOfDecade(date)
+ assert.deepEqual(result, new Date(1950, 0 /* Jan */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(1984, 9 /* Oct */, 14).getTime()
+ const result = startOfDecade(date)
+ assert.deepEqual(result, new Date(1980, 0 /* Jan */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(1978, 10 /* Nov */, 14)
+ startOfDecade(date)
+ assert.deepEqual(date, new Date(1978, 10 /* Nov */, 14))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfDecade(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfDecade.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfHour/benchmark.js b/date-fns/src/startOfHour/benchmark.js
new file mode 100644
index 0000000..3832c48
--- /dev/null
+++ b/date-fns/src/startOfHour/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfHour from '.'
+import moment from 'moment'
+
+suite('startOfHour', function () {
+ benchmark('date-fns', function () {
+ return startOfHour(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.startOf('hour')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/startOfHour/index.d.ts b/date-fns/src/startOfHour/index.d.ts
new file mode 100644
index 0000000..d1cc503
--- /dev/null
+++ b/date-fns/src/startOfHour/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfHour } from 'date-fns'
+export default startOfHour
diff --git a/date-fns/src/startOfHour/index.js.flow b/date-fns/src/startOfHour/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfHour/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfHour/index.ts b/date-fns/src/startOfHour/index.ts
new file mode 100644
index 0000000..5221e61
--- /dev/null
+++ b/date-fns/src/startOfHour/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfHour
+ * @category Hour Helpers
+ * @summary Return the start of an hour for the given date.
+ *
+ * @description
+ * Return the start of an hour for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of an hour
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of an hour for 2 September 2014 11:55:00:
+ * const result = startOfHour(new Date(2014, 8, 2, 11, 55))
+ * //=> Tue Sep 02 2014 11:00:00
+ */
+export default function startOfHour(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ date.setMinutes(0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfHour/test.ts b/date-fns/src/startOfHour/test.ts
new file mode 100644
index 0000000..61dcff9
--- /dev/null
+++ b/date-fns/src/startOfHour/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfHour from '.'
+
+describe('startOfHour', function() {
+ it('returns the date with the time set to the first millisecond of an hour', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55)
+ const result = startOfHour(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 2, 11))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55)
+ startOfHour(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55).getTime()
+ const result = startOfHour(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 2, 11))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfHour(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfHour.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfISOWeek/benchmark.js b/date-fns/src/startOfISOWeek/benchmark.js
new file mode 100644
index 0000000..2ddb09b
--- /dev/null
+++ b/date-fns/src/startOfISOWeek/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfISOWeek from '.'
+import moment from 'moment'
+
+suite('startOfISOWeek', function () {
+ benchmark('date-fns', function () {
+ return startOfISOWeek(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.startOf('isoWeek')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/startOfISOWeek/index.d.ts b/date-fns/src/startOfISOWeek/index.d.ts
new file mode 100644
index 0000000..93e573a
--- /dev/null
+++ b/date-fns/src/startOfISOWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfISOWeek } from 'date-fns'
+export default startOfISOWeek
diff --git a/date-fns/src/startOfISOWeek/index.js.flow b/date-fns/src/startOfISOWeek/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfISOWeek/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfISOWeek/index.ts b/date-fns/src/startOfISOWeek/index.ts
new file mode 100644
index 0000000..e4d8718
--- /dev/null
+++ b/date-fns/src/startOfISOWeek/index.ts
@@ -0,0 +1,32 @@
+import startOfWeek from '../startOfWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfISOWeek
+ * @category ISO Week Helpers
+ * @summary Return the start of an ISO week for the given date.
+ *
+ * @description
+ * Return the start of an ISO week for the given date.
+ * The result will be in the local timezone.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of an ISO week
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of an ISO week for 2 September 2014 11:55:00:
+ * var result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Mon Sep 01 2014 00:00:00
+ */
+export default function startOfISOWeek(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ return startOfWeek(dirtyDate, { weekStartsOn: 1 })
+}
diff --git a/date-fns/src/startOfISOWeek/test.ts b/date-fns/src/startOfISOWeek/test.ts
new file mode 100644
index 0000000..6e96187
--- /dev/null
+++ b/date-fns/src/startOfISOWeek/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfISOWeek from '.'
+
+describe('startOfISOWeek', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of an ISO week', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = startOfISOWeek(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 1 /* Feb */, 11, 11, 55, 0).getTime()
+ const result = startOfISOWeek(date)
+ assert.deepEqual(result, new Date(2014, 1 /* Feb */, 10))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ startOfISOWeek(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfISOWeek(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfISOWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfISOWeekYear/benchmark.js b/date-fns/src/startOfISOWeekYear/benchmark.js
new file mode 100644
index 0000000..754d6c9
--- /dev/null
+++ b/date-fns/src/startOfISOWeekYear/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfISOWeekYear from '.'
+
+suite('startOfISOWeekYear', function () {
+ benchmark('date-fns', function () {
+ return startOfISOWeekYear(this.date)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/startOfISOWeekYear/index.d.ts b/date-fns/src/startOfISOWeekYear/index.d.ts
new file mode 100644
index 0000000..c29d7d0
--- /dev/null
+++ b/date-fns/src/startOfISOWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfISOWeekYear } from 'date-fns'
+export default startOfISOWeekYear
diff --git a/date-fns/src/startOfISOWeekYear/index.js.flow b/date-fns/src/startOfISOWeekYear/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfISOWeekYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfISOWeekYear/index.ts b/date-fns/src/startOfISOWeekYear/index.ts
new file mode 100644
index 0000000..9417ed4
--- /dev/null
+++ b/date-fns/src/startOfISOWeekYear/index.ts
@@ -0,0 +1,39 @@
+import getISOWeekYear from '../getISOWeekYear/index'
+import startOfISOWeek from '../startOfISOWeek/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfISOWeekYear
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Return the start of an ISO week-numbering year for the given date.
+ *
+ * @description
+ * Return the start of an ISO week-numbering year,
+ * which always starts 3 days before the year's first Thursday.
+ * The result will be in the local timezone.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of an ISO week-numbering year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of an ISO week-numbering year for 2 July 2005:
+ * const result = startOfISOWeekYear(new Date(2005, 6, 2))
+ * //=> Mon Jan 03 2005 00:00:00
+ */
+export default function startOfISOWeekYear(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const year = getISOWeekYear(dirtyDate)
+ const fourthOfJanuary = new Date(0)
+ fourthOfJanuary.setFullYear(year, 0, 4)
+ fourthOfJanuary.setHours(0, 0, 0, 0)
+ const date = startOfISOWeek(fourthOfJanuary)
+ return date
+}
diff --git a/date-fns/src/startOfISOWeekYear/test.ts b/date-fns/src/startOfISOWeekYear/test.ts
new file mode 100644
index 0000000..104c632
--- /dev/null
+++ b/date-fns/src/startOfISOWeekYear/test.ts
@@ -0,0 +1,51 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfISOWeekYear from '.'
+
+describe('startOfISOWeekYear', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of an ISO year', function() {
+ const result = startOfISOWeekYear(new Date(2009, 0 /* Jan */, 1, 16, 0))
+ assert.deepEqual(result, new Date(2008, 11 /* Dec */, 29, 0, 0, 0, 0))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = startOfISOWeekYear(
+ new Date(2005, 0 /* Jan */, 1, 6, 0).getTime()
+ )
+ assert.deepEqual(result, new Date(2003, 11 /* Dec */, 29, 0, 0, 0, 0))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 2)
+ startOfISOWeekYear(date)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 2))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(9, 0 /* Jan */, 1)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(8, 11 /* Dec */, 29)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = startOfISOWeekYear(initialDate)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('correctly handles years in which 4 January is Sunday', function() {
+ const result = startOfISOWeekYear(new Date(2009, 6 /* Jul */, 2))
+ assert.deepEqual(result, new Date(2008, 11 /* Dec */, 29))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfISOWeekYear(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfISOWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfMinute/benchmark.js b/date-fns/src/startOfMinute/benchmark.js
new file mode 100644
index 0000000..af501d4
--- /dev/null
+++ b/date-fns/src/startOfMinute/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfMinute from '.'
+import moment from 'moment'
+
+suite('startOfMinute', function () {
+ benchmark('date-fns', function () {
+ return startOfMinute(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.startOf('minute')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/startOfMinute/index.d.ts b/date-fns/src/startOfMinute/index.d.ts
new file mode 100644
index 0000000..1b96683
--- /dev/null
+++ b/date-fns/src/startOfMinute/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfMinute } from 'date-fns'
+export default startOfMinute
diff --git a/date-fns/src/startOfMinute/index.js.flow b/date-fns/src/startOfMinute/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfMinute/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfMinute/index.ts b/date-fns/src/startOfMinute/index.ts
new file mode 100644
index 0000000..87d6a12
--- /dev/null
+++ b/date-fns/src/startOfMinute/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfMinute
+ * @category Minute Helpers
+ * @summary Return the start of a minute for the given date.
+ *
+ * @description
+ * Return the start of a minute for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of a minute
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of a minute for 1 December 2014 22:15:45.400:
+ * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))
+ * //=> Mon Dec 01 2014 22:15:00
+ */
+export default function startOfMinute(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ date.setSeconds(0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfMinute/test.ts b/date-fns/src/startOfMinute/test.ts
new file mode 100644
index 0000000..b362e36
--- /dev/null
+++ b/date-fns/src/startOfMinute/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfMinute from '.'
+
+describe('startOfMinute', function() {
+ it('returns the date with the time set to the first millisecond of a minute', function() {
+ const date = new Date(2014, 11 /* Dec */, 1, 22, 15, 45, 400)
+ const result = startOfMinute(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 1, 22, 15))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 11 /* Dec */, 1, 22, 15).getTime()
+ const result = startOfMinute(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 1, 22, 15))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 11 /* Dec */, 1, 22, 15, 45, 400)
+ startOfMinute(date)
+ assert.deepEqual(date, new Date(2014, 11 /* Dec */, 1, 22, 15, 45, 400))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfMinute(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfMinute.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfMonth/benchmark.js b/date-fns/src/startOfMonth/benchmark.js
new file mode 100644
index 0000000..d8caa25
--- /dev/null
+++ b/date-fns/src/startOfMonth/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfMonth from '.'
+import moment from 'moment'
+
+suite('startOfMonth', function () {
+ benchmark('date-fns', function () {
+ return startOfMonth(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.startOf('month')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/startOfMonth/index.d.ts b/date-fns/src/startOfMonth/index.d.ts
new file mode 100644
index 0000000..08de436
--- /dev/null
+++ b/date-fns/src/startOfMonth/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfMonth } from 'date-fns'
+export default startOfMonth
diff --git a/date-fns/src/startOfMonth/index.js.flow b/date-fns/src/startOfMonth/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfMonth/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfMonth/index.ts b/date-fns/src/startOfMonth/index.ts
new file mode 100644
index 0000000..1a64f6c
--- /dev/null
+++ b/date-fns/src/startOfMonth/index.ts
@@ -0,0 +1,33 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfMonth
+ * @category Month Helpers
+ * @summary Return the start of a month for the given date.
+ *
+ * @description
+ * Return the start of a month for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of a month
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of a month for 2 September 2014 11:55:00:
+ * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Mon Sep 01 2014 00:00:00
+ */
+export default function startOfMonth(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ date.setDate(1)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfMonth/test.ts b/date-fns/src/startOfMonth/test.ts
new file mode 100644
index 0000000..0251552
--- /dev/null
+++ b/date-fns/src/startOfMonth/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfMonth from '.'
+
+describe('startOfMonth', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of a month', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = startOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = startOfMonth(date)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ startOfMonth(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfMonth(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfMonth.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfQuarter/benchmark.js b/date-fns/src/startOfQuarter/benchmark.js
new file mode 100644
index 0000000..fc99fa0
--- /dev/null
+++ b/date-fns/src/startOfQuarter/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfQuarter from '.'
+import moment from 'moment'
+
+suite('startOfQuarter', function () {
+ benchmark('date-fns', function () {
+ return startOfQuarter(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.startOf('quarter')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/startOfQuarter/index.d.ts b/date-fns/src/startOfQuarter/index.d.ts
new file mode 100644
index 0000000..7afa727
--- /dev/null
+++ b/date-fns/src/startOfQuarter/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfQuarter } from 'date-fns'
+export default startOfQuarter
diff --git a/date-fns/src/startOfQuarter/index.js.flow b/date-fns/src/startOfQuarter/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfQuarter/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfQuarter/index.ts b/date-fns/src/startOfQuarter/index.ts
new file mode 100644
index 0000000..c61c2a0
--- /dev/null
+++ b/date-fns/src/startOfQuarter/index.ts
@@ -0,0 +1,35 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfQuarter
+ * @category Quarter Helpers
+ * @summary Return the start of a year quarter for the given date.
+ *
+ * @description
+ * Return the start of a year quarter for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of a quarter
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of a quarter for 2 September 2014 11:55:00:
+ * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Tue Jul 01 2014 00:00:00
+ */
+export default function startOfQuarter(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ const currentMonth = date.getMonth()
+ const month = currentMonth - (currentMonth % 3)
+ date.setMonth(month, 1)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfQuarter/test.ts b/date-fns/src/startOfQuarter/test.ts
new file mode 100644
index 0000000..311e60d
--- /dev/null
+++ b/date-fns/src/startOfQuarter/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfQuarter from '.'
+
+describe('startOfQuarter', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of a quarter', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = startOfQuarter(date)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = startOfQuarter(date)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ startOfQuarter(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfQuarter(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfQuarter.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfSecond/benchmark.js b/date-fns/src/startOfSecond/benchmark.js
new file mode 100644
index 0000000..5d2aeee
--- /dev/null
+++ b/date-fns/src/startOfSecond/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfSecond from '.'
+import moment from 'moment'
+
+suite('startOfSecond', function () {
+ benchmark('date-fns', function () {
+ return startOfSecond(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.startOf('second')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/startOfSecond/index.d.ts b/date-fns/src/startOfSecond/index.d.ts
new file mode 100644
index 0000000..b3b4017
--- /dev/null
+++ b/date-fns/src/startOfSecond/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfSecond } from 'date-fns'
+export default startOfSecond
diff --git a/date-fns/src/startOfSecond/index.js.flow b/date-fns/src/startOfSecond/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfSecond/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfSecond/index.ts b/date-fns/src/startOfSecond/index.ts
new file mode 100644
index 0000000..bc3e4a3
--- /dev/null
+++ b/date-fns/src/startOfSecond/index.ts
@@ -0,0 +1,32 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfSecond
+ * @category Second Helpers
+ * @summary Return the start of a second for the given date.
+ *
+ * @description
+ * Return the start of a second for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of a second
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of a second for 1 December 2014 22:15:45.400:
+ * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))
+ * //=> Mon Dec 01 2014 22:15:45.000
+ */
+export default function startOfSecond(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const date = toDate(dirtyDate)
+ date.setMilliseconds(0)
+ return date
+}
diff --git a/date-fns/src/startOfSecond/test.ts b/date-fns/src/startOfSecond/test.ts
new file mode 100644
index 0000000..a7444c1
--- /dev/null
+++ b/date-fns/src/startOfSecond/test.ts
@@ -0,0 +1,35 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfSecond from '.'
+
+describe('startOfSecond', function() {
+ it('returns the date with the time set to the first millisecond of a second', function() {
+ const date = new Date(2014, 11 /* Dec */, 1, 22, 15, 45, 400)
+ const result = startOfSecond(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 1, 22, 15, 45))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 11 /* Dec */, 1, 22, 15, 45, 400).getTime()
+ const result = startOfSecond(date)
+ assert.deepEqual(result, new Date(2014, 11 /* Dec */, 1, 22, 15, 45))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 11 /* Dec */, 1, 22, 15, 45, 400)
+ startOfSecond(date)
+ assert.deepEqual(date, new Date(2014, 11 /* Dec */, 1, 22, 15, 45, 400))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfSecond(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfSecond.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfToday/benchmark.js b/date-fns/src/startOfToday/benchmark.js
new file mode 100644
index 0000000..c479df5
--- /dev/null
+++ b/date-fns/src/startOfToday/benchmark.js
@@ -0,0 +1,9 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfToday from '.'
+
+suite('startOfToday', () => {
+ benchmark('date-fns', () => startOfToday())
+})
diff --git a/date-fns/src/startOfToday/index.d.ts b/date-fns/src/startOfToday/index.d.ts
new file mode 100644
index 0000000..8a0615e
--- /dev/null
+++ b/date-fns/src/startOfToday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfToday } from 'date-fns'
+export default startOfToday
diff --git a/date-fns/src/startOfToday/index.js.flow b/date-fns/src/startOfToday/index.js.flow
new file mode 100644
index 0000000..26bde32
--- /dev/null
+++ b/date-fns/src/startOfToday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: () => Date
diff --git a/date-fns/src/startOfToday/index.ts b/date-fns/src/startOfToday/index.ts
new file mode 100644
index 0000000..60eca49
--- /dev/null
+++ b/date-fns/src/startOfToday/index.ts
@@ -0,0 +1,28 @@
+import startOfDay from '../startOfDay/index'
+
+/**
+ * @name startOfToday
+ * @category Day Helpers
+ * @summary Return the start of today.
+ * @pure false
+ *
+ * @description
+ * Return the start of today.
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `Date.now()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @returns {Date} the start of today
+ *
+ * @example
+ * // If today is 6 October 2014:
+ * var result = startOfToday()
+ * //=> Mon Oct 6 2014 00:00:00
+ */
+export default function startOfToday(): Date {
+ return startOfDay(Date.now())
+}
diff --git a/date-fns/src/startOfToday/test.ts b/date-fns/src/startOfToday/test.ts
new file mode 100644
index 0000000..1b2f691
--- /dev/null
+++ b/date-fns/src/startOfToday/test.ts
@@ -0,0 +1,24 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import sinon from 'sinon'
+import startOfToday from '.'
+
+describe('startOfToday', function() {
+ let clock
+ beforeEach(function() {
+ clock = sinon.useFakeTimers(
+ new Date(2014, 8 /* Sep */, 25, 14, 30, 45, 500).getTime()
+ )
+ })
+
+ afterEach(function() {
+ clock.restore()
+ })
+
+ it('returns the current date with the time setted to 00:00:00', function() {
+ var result = startOfToday()
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 25))
+ })
+})
diff --git a/date-fns/src/startOfTomorrow/benchmark.js b/date-fns/src/startOfTomorrow/benchmark.js
new file mode 100644
index 0000000..a550b46
--- /dev/null
+++ b/date-fns/src/startOfTomorrow/benchmark.js
@@ -0,0 +1,9 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfTomorrow from '.'
+
+suite('startOfTomorrow', () => {
+ benchmark('date-fns', () => startOfTomorrow())
+})
diff --git a/date-fns/src/startOfTomorrow/index.d.ts b/date-fns/src/startOfTomorrow/index.d.ts
new file mode 100644
index 0000000..464ad5b
--- /dev/null
+++ b/date-fns/src/startOfTomorrow/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfTomorrow } from 'date-fns'
+export default startOfTomorrow
diff --git a/date-fns/src/startOfTomorrow/index.js.flow b/date-fns/src/startOfTomorrow/index.js.flow
new file mode 100644
index 0000000..26bde32
--- /dev/null
+++ b/date-fns/src/startOfTomorrow/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: () => Date
diff --git a/date-fns/src/startOfTomorrow/index.ts b/date-fns/src/startOfTomorrow/index.ts
new file mode 100644
index 0000000..1d18b5f
--- /dev/null
+++ b/date-fns/src/startOfTomorrow/index.ts
@@ -0,0 +1,34 @@
+/**
+ * @name startOfTomorrow
+ * @category Day Helpers
+ * @summary Return the start of tomorrow.
+ * @pure false
+ *
+ * @description
+ * Return the start of tomorrow.
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `new Date()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @returns {Date} the start of tomorrow
+ *
+ * @example
+ * // If today is 6 October 2014:
+ * const result = startOfTomorrow()
+ * //=> Tue Oct 7 2014 00:00:00
+ */
+export default function startOfTomorrow() {
+ const now = new Date()
+ const year = now.getFullYear()
+ const month = now.getMonth()
+ const day = now.getDate()
+
+ const date = new Date(0)
+ date.setFullYear(year, month, day + 1)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfTomorrow/test.ts b/date-fns/src/startOfTomorrow/test.ts
new file mode 100644
index 0000000..aab3aba
--- /dev/null
+++ b/date-fns/src/startOfTomorrow/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import startOfTomorrow from '.'
+
+describe('startOfTomorrow', function() {
+ it('returns the start of tomorrow', function() {
+ const clock = sinon.useFakeTimers(
+ new Date(2014, 8 /* Sep */, 25, 14, 30, 45, 500).getTime()
+ )
+
+ const result = startOfTomorrow()
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 26))
+
+ clock.restore()
+ })
+
+ it('handles dates before 100 AD', function() {
+ const now = new Date(0)
+ now.setFullYear(14, 8 /* Sep */, 25)
+ now.setHours(0, 0, 0, 0)
+ const clock = sinon.useFakeTimers(now.getTime())
+
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(14, 8 /* Sep */, 26)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = startOfTomorrow()
+ assert.deepEqual(result, expectedResult)
+
+ clock.restore()
+ })
+})
diff --git a/date-fns/src/startOfWeek/benchmark.js b/date-fns/src/startOfWeek/benchmark.js
new file mode 100644
index 0000000..cebde9f
--- /dev/null
+++ b/date-fns/src/startOfWeek/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfWeek from '.'
+import moment from 'moment'
+
+suite('startOfWeek', function () {
+ benchmark('date-fns', function () {
+ return startOfWeek(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.startOf('week')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/startOfWeek/index.d.ts b/date-fns/src/startOfWeek/index.d.ts
new file mode 100644
index 0000000..4a45d11
--- /dev/null
+++ b/date-fns/src/startOfWeek/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfWeek } from 'date-fns'
+export default startOfWeek
diff --git a/date-fns/src/startOfWeek/index.js.flow b/date-fns/src/startOfWeek/index.js.flow
new file mode 100644
index 0000000..9285b67
--- /dev/null
+++ b/date-fns/src/startOfWeek/index.js.flow
@@ -0,0 +1,58 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ }
+) => Date
diff --git a/date-fns/src/startOfWeek/index.ts b/date-fns/src/startOfWeek/index.ts
new file mode 100644
index 0000000..ab33312
--- /dev/null
+++ b/date-fns/src/startOfWeek/index.ts
@@ -0,0 +1,66 @@
+import { LocaleOptions, WeekStartOptions } from '../types'
+import toDate from '../toDate/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfWeek
+ * @category Week Helpers
+ * @summary Return the start of a week for the given date.
+ *
+ * @description
+ * Return the start of a week for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @returns {Date} the start of a week
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ *
+ * @example
+ * // The start of a week for 2 September 2014 11:55:00:
+ * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))
+ * //=> Sun Aug 31 2014 00:00:00
+ *
+ * @example
+ * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:
+ * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })
+ * //=> Mon Sep 01 2014 00:00:00
+ */
+export default function startOfWeek(
+ dirtyDate: Date | number,
+ dirtyOptions?: LocaleOptions & WeekStartOptions
+): Date {
+ requiredArgs(1, arguments)
+
+ const options = dirtyOptions || {}
+ const locale = options.locale
+ const localeWeekStartsOn =
+ locale && locale.options && locale.options.weekStartsOn
+ const defaultWeekStartsOn =
+ localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)
+ const weekStartsOn =
+ options.weekStartsOn == null
+ ? defaultWeekStartsOn
+ : toInteger(options.weekStartsOn)
+
+ // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')
+ }
+
+ const date = toDate(dirtyDate)
+ const day = date.getDay()
+ const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn
+
+ date.setDate(date.getDate() - diff)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfWeek/test.ts b/date-fns/src/startOfWeek/test.ts
new file mode 100644
index 0000000..d5d2cb6
--- /dev/null
+++ b/date-fns/src/startOfWeek/test.ts
@@ -0,0 +1,113 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import startOfWeek from '.'
+
+describe('startOfWeek', function () {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of a week', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = startOfWeek(date)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 31))
+ })
+
+ it('allows to specify which day is the first day of the week', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = startOfWeek(date, { weekStartsOn: 1 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('allows to specify which day is the first day of the week in locale', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = startOfWeek(date, {
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 1 },
+ },
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = startOfWeek(date, {
+ weekStartsOn: 1,
+ // @ts-expect-error
+ locale: {
+ options: { weekStartsOn: 0 },
+ },
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('implicitly converts options', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ // @ts-expect-error
+ const result = startOfWeek(date, { weekStartsOn: '1' })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('accepts a timestamp', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = startOfWeek(date)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 31))
+ })
+
+ it('does not mutate the original date', function () {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ startOfWeek(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ describe('edge cases', function () {
+ describe('when the given day is before the start of a week', function () {
+ it('it returns the start of a week', function () {
+ const date = new Date(2014, 9 /* Oct */, 6)
+ const result = startOfWeek(date, { weekStartsOn: 3 })
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */, 1))
+ })
+ })
+
+ describe('when the given day is the start of a week', function () {
+ it('it returns the start of a week', function () {
+ const date = new Date(2014, 9 /* Oct */, 8)
+ const result = startOfWeek(date, { weekStartsOn: 3 })
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */, 8))
+ })
+ })
+
+ describe('when the given day is after the start of a week', function () {
+ it('it returns the start of a week', function () {
+ const date = new Date(2014, 9 /* Oct */, 10)
+ const result = startOfWeek(date, { weekStartsOn: 3 })
+ assert.deepEqual(result, new Date(2014, 9 /* Oct */, 8))
+ })
+ })
+
+ it('handles the week at the start of a year', function () {
+ const date = new Date(2014, 0 /* Jan */, 1)
+ const result = startOfWeek(date)
+ assert.deepEqual(result, new Date(2013, 11 /* Dec */, 29))
+ })
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function () {
+ const result = startOfWeek(new Date(NaN))
+ assert(result instanceof Date && isNaN(Number(result)))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function () {
+ const block = () =>
+ startOfWeek(
+ new Date(2014, 8 /* Sep */, 2, 11, 55, 0),
+ // @ts-expect-error
+ { weekStartsOn: NaN }
+ )
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function () {
+ // @ts-expect-error
+ assert.throws(startOfWeek.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfWeekYear/index.d.ts b/date-fns/src/startOfWeekYear/index.d.ts
new file mode 100644
index 0000000..95b4851
--- /dev/null
+++ b/date-fns/src/startOfWeekYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfWeekYear } from 'date-fns'
+export default startOfWeekYear
diff --git a/date-fns/src/startOfWeekYear/index.js b/date-fns/src/startOfWeekYear/index.js
new file mode 100644
index 0000000..a35fdde
--- /dev/null
+++ b/date-fns/src/startOfWeekYear/index.js
@@ -0,0 +1,71 @@
+import getWeekYear from '../getWeekYear/index'
+import startOfWeek from '../startOfWeek/index'
+import toInteger from '../_lib/toInteger/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfWeekYear
+ * @category Week-Numbering Year Helpers
+ * @summary Return the start of a local week-numbering year for the given date.
+ *
+ * @description
+ * Return the start of a local week-numbering year.
+ * The exact calculation depends on the values of
+ * `options.weekStartsOn` (which is the index of the first day of the week)
+ * and `options.firstWeekContainsDate` (which is the day of January, which is always in
+ * the first week of the week-numbering year)
+ *
+ * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @param {Object} [options] - an object with options.
+ * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
+ * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
+ * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year
+ * @returns {Date} the start of a week-numbering year
+ * @throws {TypeError} 1 argument required
+ * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
+ * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
+ *
+ * @example
+ * // The start of an a week-numbering year for 2 July 2005 with default settings:
+ * var result = startOfWeekYear(new Date(2005, 6, 2))
+ * //=> Sun Dec 26 2004 00:00:00
+ *
+ * @example
+ * // The start of a week-numbering year for 2 July 2005
+ * // if Monday is the first day of week
+ * // and 4 January is always in the first week of the year:
+ * var result = startOfWeekYear(new Date(2005, 6, 2), {
+ * weekStartsOn: 1,
+ * firstWeekContainsDate: 4
+ * })
+ * //=> Mon Jan 03 2005 00:00:00
+ */
+export default function startOfWeekYear(dirtyDate, dirtyOptions) {
+ requiredArgs(1, arguments)
+
+ var options = dirtyOptions || {}
+ var locale = options.locale
+ var localeFirstWeekContainsDate =
+ locale && locale.options && locale.options.firstWeekContainsDate
+ var defaultFirstWeekContainsDate =
+ localeFirstWeekContainsDate == null
+ ? 1
+ : toInteger(localeFirstWeekContainsDate)
+ var firstWeekContainsDate =
+ options.firstWeekContainsDate == null
+ ? defaultFirstWeekContainsDate
+ : toInteger(options.firstWeekContainsDate)
+
+ var year = getWeekYear(dirtyDate, dirtyOptions)
+ var firstWeek = new Date(0)
+ firstWeek.setFullYear(year, 0, firstWeekContainsDate)
+ firstWeek.setHours(0, 0, 0, 0)
+ var date = startOfWeek(firstWeek, dirtyOptions)
+ return date
+}
diff --git a/date-fns/src/startOfWeekYear/index.js.flow b/date-fns/src/startOfWeekYear/index.js.flow
new file mode 100644
index 0000000..49cecb6
--- /dev/null
+++ b/date-fns/src/startOfWeekYear/index.js.flow
@@ -0,0 +1,59 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (
+ date: Date | number,
+ options?: {
+ locale?: Locale,
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ }
+) => Date
diff --git a/date-fns/src/startOfWeekYear/test.js b/date-fns/src/startOfWeekYear/test.js
new file mode 100644
index 0000000..c01bfa7
--- /dev/null
+++ b/date-fns/src/startOfWeekYear/test.js
@@ -0,0 +1,83 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfWeekYear from '.'
+
+describe('startOfWeekYear', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of a week year', function() {
+ var result = startOfWeekYear(new Date(2005, 6 /* Jul */, 2))
+ assert.deepEqual(result, new Date(2004, 11 /* Dec */, 26, 0, 0, 0, 0))
+ })
+
+ it('accepts a timestamp', function() {
+ var result = startOfWeekYear(new Date(2005, 0 /* Jan */, 1, 6, 0).getTime())
+ assert.deepEqual(result, new Date(2004, 11 /* Dec */, 26, 0, 0, 0, 0))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 6 /* Jul */, 2)
+ startOfWeekYear(date)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 2))
+ })
+
+ it('handles dates before 100 AD', function() {
+ var initialDate = new Date(0)
+ initialDate.setFullYear(9, 0 /* Jan */, 1)
+ initialDate.setHours(0, 0, 0, 0)
+ var expectedResult = new Date(0)
+ expectedResult.setFullYear(8, 11 /* Dec */, 28)
+ expectedResult.setHours(0, 0, 0, 0)
+ var result = startOfWeekYear(initialDate)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = startOfWeekYear(new Date(NaN))
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('allows to specify `weekStartsOn` and `firstWeekContainsDate` in locale', function() {
+ var date = new Date(2005, 6 /* Jul */, 2)
+ var result = startOfWeekYear(date, {
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 1, firstWeekContainsDate: 4 }
+ }
+ })
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 3, 0, 0, 0, 0))
+ })
+
+ it('`options.weekStartsOn` overwrites the first day of the week specified in locale', function() {
+ var date = new Date(2005, 6 /* Jul */, 2)
+ var result = startOfWeekYear(date, {
+ weekStartsOn: 1,
+ firstWeekContainsDate: 4,
+ // $ExpectedMistake
+ locale: {
+ options: { weekStartsOn: 0, firstWeekContainsDate: 1 }
+ }
+ })
+ assert.deepEqual(result, new Date(2005, 0 /* Jan */, 3, 0, 0, 0, 0))
+ })
+
+ it('throws `RangeError` if `options.weekStartsOn` is not convertable to 0, 1, ..., 6 or undefined', function() {
+ // $ExpectedMistake
+ var block = startOfWeekYear.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ weekStartsOn: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws `RangeError` if `options.firstWeekContainsDate` is not convertable to 1, 2, ..., 7 or undefined', function() {
+ // $ExpectedMistake
+ var block = startOfWeekYear.bind(null, new Date(2007, 11 /* Dec */, 31), {
+ firstWeekContainsDate: NaN
+ })
+ assert.throws(block, RangeError)
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfWeekYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfYear/benchmark.js b/date-fns/src/startOfYear/benchmark.js
new file mode 100644
index 0000000..4a2893e
--- /dev/null
+++ b/date-fns/src/startOfYear/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfYear from '.'
+import moment from 'moment'
+
+suite('startOfYear', function () {
+ benchmark('date-fns', function () {
+ return startOfYear(this.date)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.startOf('year')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/startOfYear/index.d.ts b/date-fns/src/startOfYear/index.d.ts
new file mode 100644
index 0000000..669ffc9
--- /dev/null
+++ b/date-fns/src/startOfYear/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfYear } from 'date-fns'
+export default startOfYear
diff --git a/date-fns/src/startOfYear/index.js.flow b/date-fns/src/startOfYear/index.js.flow
new file mode 100644
index 0000000..4b7c616
--- /dev/null
+++ b/date-fns/src/startOfYear/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number) => Date
diff --git a/date-fns/src/startOfYear/index.ts b/date-fns/src/startOfYear/index.ts
new file mode 100644
index 0000000..b72be94
--- /dev/null
+++ b/date-fns/src/startOfYear/index.ts
@@ -0,0 +1,34 @@
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name startOfYear
+ * @category Year Helpers
+ * @summary Return the start of a year for the given date.
+ *
+ * @description
+ * Return the start of a year for the given date.
+ * The result will be in the local timezone.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of a year
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of a year for 2 September 2014 11:55:00:
+ * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))
+ * //=> Wed Jan 01 2014 00:00:00
+ */
+export default function startOfYear(dirtyDate: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const cleanDate = toDate(dirtyDate)
+ const date = new Date(0)
+ date.setFullYear(cleanDate.getFullYear(), 0, 1)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfYear/test.ts b/date-fns/src/startOfYear/test.ts
new file mode 100644
index 0000000..bff3352
--- /dev/null
+++ b/date-fns/src/startOfYear/test.ts
@@ -0,0 +1,46 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import startOfYear from '.'
+
+describe('startOfYear', function() {
+ it('returns the date with the time set to 00:00:00 and the date set to the first day of a year', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ const result = startOfYear(date)
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 1, 0, 0, 0, 0))
+ })
+
+ it('accepts a timestamp', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0).getTime()
+ const result = startOfYear(date)
+ assert.deepEqual(result, new Date(2014, 0 /* Dec */, 1, 0, 0, 0, 0))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 2, 11, 55, 0)
+ startOfYear(date)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 2, 11, 55, 0))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(9, 0 /* Jan */, 5)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(9, 0 /* Jan */, 1)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = startOfYear(initialDate)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = startOfYear(new Date(NaN))
+ //@ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', function() {
+ assert.throws(startOfYear.bind(null), TypeError)
+ })
+})
diff --git a/date-fns/src/startOfYesterday/benchmark.js b/date-fns/src/startOfYesterday/benchmark.js
new file mode 100644
index 0000000..4c37877
--- /dev/null
+++ b/date-fns/src/startOfYesterday/benchmark.js
@@ -0,0 +1,9 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import startOfToday from '.'
+
+suite('startOfYesterday', () => {
+ benchmark('date-fns', () => startOfToday())
+})
diff --git a/date-fns/src/startOfYesterday/index.d.ts b/date-fns/src/startOfYesterday/index.d.ts
new file mode 100644
index 0000000..0342a28
--- /dev/null
+++ b/date-fns/src/startOfYesterday/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { startOfYesterday } from 'date-fns'
+export default startOfYesterday
diff --git a/date-fns/src/startOfYesterday/index.js.flow b/date-fns/src/startOfYesterday/index.js.flow
new file mode 100644
index 0000000..26bde32
--- /dev/null
+++ b/date-fns/src/startOfYesterday/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: () => Date
diff --git a/date-fns/src/startOfYesterday/index.ts b/date-fns/src/startOfYesterday/index.ts
new file mode 100644
index 0000000..d0a793d
--- /dev/null
+++ b/date-fns/src/startOfYesterday/index.ts
@@ -0,0 +1,34 @@
+/**
+ * @name startOfYesterday
+ * @category Day Helpers
+ * @summary Return the start of yesterday.
+ * @pure false
+ *
+ * @description
+ * Return the start of yesterday.
+ *
+ * > ⚠️ Please note that this function is not present in the FP submodule as
+ * > it uses `new Date()` internally hence impure and can't be safely curried.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @returns {Date} the start of yesterday
+ *
+ * @example
+ * // If today is 6 October 2014:
+ * const result = startOfYesterday()
+ * //=> Sun Oct 5 2014 00:00:00
+ */
+export default function startOfYesterday() {
+ const now = new Date()
+ const year = now.getFullYear()
+ const month = now.getMonth()
+ const day = now.getDate()
+
+ const date = new Date(0)
+ date.setFullYear(year, month, day - 1)
+ date.setHours(0, 0, 0, 0)
+ return date
+}
diff --git a/date-fns/src/startOfYesterday/test.ts b/date-fns/src/startOfYesterday/test.ts
new file mode 100644
index 0000000..5847393
--- /dev/null
+++ b/date-fns/src/startOfYesterday/test.ts
@@ -0,0 +1,34 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'assert'
+import sinon from 'sinon'
+import startOfYesterday from '.'
+
+describe('startOfYesterday', function() {
+ it('returns the start of yesterday', function() {
+ const clock = sinon.useFakeTimers(
+ new Date(2014, 8 /* Sep */, 25, 14, 30, 45, 500).getTime()
+ )
+
+ const result = startOfYesterday()
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 24))
+
+ clock.restore()
+ })
+
+ it('handles dates before 100 AD', function() {
+ const now = new Date(0)
+ now.setFullYear(14, 8 /* Sep */, 25)
+ now.setHours(0, 0, 0, 0)
+ const clock = sinon.useFakeTimers(now.getTime())
+
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(14, 8 /* Sep */, 24)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = startOfYesterday()
+ assert.deepEqual(result, expectedResult)
+
+ clock.restore()
+ })
+})
diff --git a/date-fns/src/sub/benchmark.js b/date-fns/src/sub/benchmark.js
new file mode 100644
index 0000000..8b96341
--- /dev/null
+++ b/date-fns/src/sub/benchmark.js
@@ -0,0 +1,25 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import sub from '.'
+import moment from 'moment'
+
+suite(
+ 'add',
+ function() {
+ benchmark('date-fns', function() {
+ return sub(this.date, { hours: 5, minutes: 10 })
+ })
+
+ benchmark('Moment.js', function() {
+ return this.moment.subtract({ hours: 5, minutes: 10 })
+ })
+ },
+ {
+ setup: function() {
+ this.date = new Date()
+ this.moment = moment()
+ }
+ }
+)
diff --git a/date-fns/src/sub/index.d.ts b/date-fns/src/sub/index.d.ts
new file mode 100644
index 0000000..7a4f3ec
--- /dev/null
+++ b/date-fns/src/sub/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { sub } from 'date-fns'
+export default sub
diff --git a/date-fns/src/sub/index.js b/date-fns/src/sub/index.js
new file mode 100644
index 0000000..fa5f30f
--- /dev/null
+++ b/date-fns/src/sub/index.js
@@ -0,0 +1,72 @@
+import subDays from '../subDays/index'
+import subMonths from '../subMonths/index'
+import toDate from '../toDate/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+import toInteger from '../_lib/toInteger/index'
+
+/**
+ * @name sub
+ * @category Common Helpers
+ * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.
+ *
+ * @description
+ * Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be subtracted
+ *
+ * | Key | Description |
+ * |---------|------------------------------------|
+ * | years | Amount of years to be subtracted |
+ * | months | Amount of months to be subtracted |
+ * | weeks | Amount of weeks to be subtracted |
+ * | days | Amount of days to be subtracted |
+ * | hours | Amount of hours to be subtracted |
+ * | minutes | Amount of minutes to be subtracted |
+ * | seconds | Amount of seconds to be subtracted |
+ *
+ * All values default to 0
+ *
+ * @returns {Date} the new date with the seconds subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract the following duration from 15 June 2017 15:29:20
+ * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {
+ * years: 2,
+ * months: 9,
+ * weeks: 1,
+ * days: 7,
+ * hours: 5,
+ * minutes: 9,
+ * seconds: 30
+ * })
+ * //=> Mon Sep 1 2014 10:19:50
+ */
+export default function sub(dirtyDate, duration) {
+ requiredArgs(2, arguments)
+
+ if (!duration || typeof duration !== 'object') return new Date(NaN)
+
+ const years = 'years' in duration ? toInteger(duration.years) : 0
+ const months = 'months' in duration ? toInteger(duration.months) : 0
+ const weeks = 'weeks' in duration ? toInteger(duration.weeks) : 0
+ const days = 'days' in duration ? toInteger(duration.days) : 0
+ const hours = 'hours' in duration ? toInteger(duration.hours) : 0
+ const minutes = 'minutes' in duration ? toInteger(duration.minutes) : 0
+ const seconds = 'seconds' in duration ? toInteger(duration.seconds) : 0
+
+ // Subtract years and months
+ const dateWithoutMonths = subMonths(toDate(dirtyDate), months + years * 12)
+
+ // Subtract weeks and days
+ const dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7)
+
+ // Subtract hours, minutes and seconds
+ const minutestoSub = minutes + hours * 60
+ const secondstoSub = seconds + minutestoSub * 60
+ const mstoSub = secondstoSub * 1000
+ const finalDate = new Date(dateWithoutDays.getTime() - mstoSub)
+
+ return finalDate
+}
diff --git a/date-fns/src/sub/index.js.flow b/date-fns/src/sub/index.js.flow
new file mode 100644
index 0000000..e79df7c
--- /dev/null
+++ b/date-fns/src/sub/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, duration: Duration) => Date
diff --git a/date-fns/src/sub/test.js b/date-fns/src/sub/test.js
new file mode 100644
index 0000000..016accc
--- /dev/null
+++ b/date-fns/src/sub/test.js
@@ -0,0 +1,82 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import sub from '.'
+
+describe('sub', () => {
+ it('subtracts the duration from the given date', () => {
+ const result = sub(new Date(2017, 5 /* June */, 15, 15, 29, 20), {
+ years: 2,
+ months: 9,
+ weeks: 1,
+ days: 7,
+ hours: 5,
+ minutes: 9,
+ seconds: 30
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 10, 19, 50))
+ })
+
+ it('returns same date object when passed empty duration', () => {
+ const result = sub(new Date(2014, 8 /* Sep */, 1, 10).getTime(), {})
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 10))
+ })
+
+ it('accepts a timestamp', () => {
+ const result = sub(new Date(2014, 8 /* Sep */, 1, 14).getTime(), {
+ hours: 4
+ })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 10))
+ })
+
+ it('converts a fractional number to an integer', () => {
+ const result = sub(new Date(2014, 8 /* Sep */, 1, 14), { hours: 4.2 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 10))
+ })
+
+ it('implicitly converts number arguments', () => {
+ // $ExpectedMistake
+ const result = sub(new Date(2014, 8 /* Sep */, 1, 14), { hours: '4.2' })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1, 10))
+ })
+
+ it('does not mutate the original date', () => {
+ const date = new Date(2014, 8 /* Sep */, 1, 10)
+ sub(date, { hours: 4 })
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1, 10))
+ })
+
+ it('works well if the desired month has fewer days and the provided date is in the last day of a month', () => {
+ const date = new Date(2014, 11 /* Dec */, 31)
+ const result = sub(date, { months: 3 })
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('handles dates before 100 AD', () => {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(1, 2 /* Mar */, 31)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(1, 1 /* Feb */, 28)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = sub(initialDate, { months: 1 })
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', () => {
+ const result = sub(new Date(NaN), { hours: 5 })
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws RangeError exception if passed Number as duration', () => {
+ // $ExpectedMistake
+ const result = sub(new Date(2014, 8, 1), 'wut')
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', () => {
+ assert.throws(sub.bind(null), TypeError)
+ assert.throws(sub.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subBusinessDays/index.d.ts b/date-fns/src/subBusinessDays/index.d.ts
new file mode 100644
index 0000000..7a0549a
--- /dev/null
+++ b/date-fns/src/subBusinessDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subBusinessDays } from 'date-fns'
+export default subBusinessDays
diff --git a/date-fns/src/subBusinessDays/index.js b/date-fns/src/subBusinessDays/index.js
new file mode 100644
index 0000000..dbfa505
--- /dev/null
+++ b/date-fns/src/subBusinessDays/index.js
@@ -0,0 +1,28 @@
+import toInteger from '../_lib/toInteger/index'
+import addBusinessDays from '../addBusinessDays/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subBusinessDays
+ * @category Day Helpers
+ * @summary Substract the specified number of business days (mon - fri) to the given date.
+ *
+ * @description
+ * Substract the specified number of business days (mon - fri) to the given date, ignoring weekends.
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of business days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the business days subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Substract 10 business days from 1 September 2014:
+ * var result = subBusinessDays(new Date(2014, 8, 1), 10)
+ * //=> Mon Aug 18 2014 00:00:00 (skipped weekend days)
+ */
+export default function subBusinessDays(dirtyDate, dirtyAmount) {
+ requiredArgs(2, arguments)
+
+ var amount = toInteger(dirtyAmount)
+ return addBusinessDays(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subBusinessDays/index.js.flow b/date-fns/src/subBusinessDays/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subBusinessDays/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subBusinessDays/test.js b/date-fns/src/subBusinessDays/test.js
new file mode 100644
index 0000000..96564a1
--- /dev/null
+++ b/date-fns/src/subBusinessDays/test.js
@@ -0,0 +1,63 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subBusinessDays from '.'
+
+describe('subBusinessDays', function() {
+ it('substract the given number of business days', function() {
+ const result = subBusinessDays(new Date(2014, 8 /* Sep */, 1), 10)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 18))
+ })
+
+ it('handles negative amount', function() {
+ var result = subBusinessDays(new Date(2014, 7 /* Sep */, 18), -10)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('can handle a large number of business days', function() {
+ if (typeof this.timeout === 'function') {
+ this.timeout(500 /* 500 ms test timeout */)
+ }
+
+ var result = subBusinessDays(new Date(15000, 0 /* Jan */, 1), 3387885)
+ assert.deepEqual(result, new Date(2014, 0 /* Jan */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ var result = subBusinessDays(new Date(2014, 8 /* Sep */, 1).getTime(), 10)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 18))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ var result = subBusinessDays(new Date(2014, 8 /* Sep */, 1), 10.5)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 18))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ var result = subBusinessDays(new Date(2014, 8 /* Sep */, 1), '10')
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 18))
+ })
+
+ it('does not mutate the original date', function() {
+ var date = new Date(2014, 8 /* Sep */, 1)
+ subBusinessDays(date, 11)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ var result = subBusinessDays(new Date(NaN), 10)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ var result = subBusinessDays(new Date(2014, 8 /* Sep */, 1), NaN)
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subBusinessDays.bind(null), TypeError)
+ assert.throws(subBusinessDays.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subDays/benchmark.js b/date-fns/src/subDays/benchmark.js
new file mode 100644
index 0000000..032cd9a
--- /dev/null
+++ b/date-fns/src/subDays/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subDays from '.'
+import moment from 'moment'
+
+suite('subDays', function () {
+ benchmark('date-fns', function () {
+ return subDays(this.date, 14)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.subtract(14, 'days')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/subDays/index.d.ts b/date-fns/src/subDays/index.d.ts
new file mode 100644
index 0000000..0b2fe65
--- /dev/null
+++ b/date-fns/src/subDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subDays } from 'date-fns'
+export default subDays
diff --git a/date-fns/src/subDays/index.js.flow b/date-fns/src/subDays/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subDays/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subDays/index.ts b/date-fns/src/subDays/index.ts
new file mode 100644
index 0000000..7c706c3
--- /dev/null
+++ b/date-fns/src/subDays/index.ts
@@ -0,0 +1,32 @@
+import toInteger from '../_lib/toInteger/index'
+import addDays from '../addDays/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subDays
+ * @category Day Helpers
+ * @summary Subtract the specified number of days from the given date.
+ *
+ * @description
+ * Subtract the specified number of days from the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the days subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 10 days from 1 September 2014:
+ * const result = subDays(new Date(2014, 8, 1), 10)
+ * //=> Fri Aug 22 2014 00:00:00
+ */
+export default function subDays(dirtyDate: Date | number, dirtyAmount: number) {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addDays(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subDays/test.ts b/date-fns/src/subDays/test.ts
new file mode 100644
index 0000000..fadc101
--- /dev/null
+++ b/date-fns/src/subDays/test.ts
@@ -0,0 +1,52 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subDays from '.'
+
+describe('subDays', function() {
+ it('subtracts the given number of days', function() {
+ const result = subDays(new Date(2014, 8 /* Sep */, 1), 10)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 22))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subDays(new Date(2014, 8 /* Sep */, 1).getTime(), 10)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 22))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subDays(new Date(2014, 8 /* Sep */, 1), 10.85)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 22))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = subDays(new Date(2014, 8 /* Sep */, 1), '10')
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 22))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ subDays(date, 11)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subDays(new Date(NaN), 10)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subDays(new Date(2014, 8 /* Sep */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subDays.bind(null), TypeError)
+ assert.throws(subDays.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subHours/benchmark.js b/date-fns/src/subHours/benchmark.js
new file mode 100644
index 0000000..ae77136
--- /dev/null
+++ b/date-fns/src/subHours/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subHours from '.'
+import moment from 'moment'
+
+suite('subHours', function () {
+ benchmark('date-fns', function () {
+ return subHours(this.date, 32)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.subtract(32, 'hours')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/subHours/index.d.ts b/date-fns/src/subHours/index.d.ts
new file mode 100644
index 0000000..9b9a0d2
--- /dev/null
+++ b/date-fns/src/subHours/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subHours } from 'date-fns'
+export default subHours
diff --git a/date-fns/src/subHours/index.js.flow b/date-fns/src/subHours/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subHours/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subHours/index.ts b/date-fns/src/subHours/index.ts
new file mode 100644
index 0000000..2db706a
--- /dev/null
+++ b/date-fns/src/subHours/index.ts
@@ -0,0 +1,32 @@
+import toInteger from '../_lib/toInteger/index'
+import addHours from '../addHours/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subHours
+ * @category Hour Helpers
+ * @summary Subtract the specified number of hours from the given date.
+ *
+ * @description
+ * Subtract the specified number of hours from the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of hours to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the hours subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 2 hours from 11 July 2014 01:00:00:
+ * const result = subHours(new Date(2014, 6, 11, 1, 0), 2)
+ * //=> Thu Jul 10 2014 23:00:00
+ */
+export default function subHours(dirtyDate: Date | number, dirtyAmount: number) {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addHours(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subHours/test.ts b/date-fns/src/subHours/test.ts
new file mode 100644
index 0000000..7423288
--- /dev/null
+++ b/date-fns/src/subHours/test.ts
@@ -0,0 +1,52 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subHours from '.'
+
+describe('subHours', function() {
+ it('subtracts the given numbers of hours', function() {
+ const result = subHours(new Date(2014, 6 /* Jul */, 11, 1, 0), 2)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 23, 0))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subHours(new Date(2014, 6 /* Jul */, 12, 1, 0).getTime(), 26)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 23, 0))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subHours(new Date(2014, 6 /* Jul */, 11, 1, 0), 2.22)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 23, 0))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = subHours(new Date(2014, 6 /* Jul */, 11, 1, 0), '2')
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 23, 0))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 10, 23, 0)
+ subHours(date, 10)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 10, 23, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subHours(new Date(NaN), 2)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subHours(new Date(2014, 6 /* Jul */, 11, 1, 0), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subHours.bind(null), TypeError)
+ assert.throws(subHours.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subISOWeekYears/benchmark.js b/date-fns/src/subISOWeekYears/benchmark.js
new file mode 100644
index 0000000..f8b615c
--- /dev/null
+++ b/date-fns/src/subISOWeekYears/benchmark.js
@@ -0,0 +1,15 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subISOWeekYears from '.'
+
+suite('subISOWeekYears', function () {
+ benchmark('date-fns', function () {
+ return subISOWeekYears(this.date, 7)
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ }
+})
diff --git a/date-fns/src/subISOWeekYears/index.d.ts b/date-fns/src/subISOWeekYears/index.d.ts
new file mode 100644
index 0000000..78018ea
--- /dev/null
+++ b/date-fns/src/subISOWeekYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subISOWeekYears } from 'date-fns'
+export default subISOWeekYears
diff --git a/date-fns/src/subISOWeekYears/index.js.flow b/date-fns/src/subISOWeekYears/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subISOWeekYears/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subISOWeekYears/index.ts b/date-fns/src/subISOWeekYears/index.ts
new file mode 100644
index 0000000..bbd396c
--- /dev/null
+++ b/date-fns/src/subISOWeekYears/index.ts
@@ -0,0 +1,39 @@
+import toInteger from '../_lib/toInteger/index'
+import addISOWeekYears from '../addISOWeekYears/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subISOWeekYears
+ * @category ISO Week-Numbering Year Helpers
+ * @summary Subtract the specified number of ISO week-numbering years from the given date.
+ *
+ * @description
+ * Subtract the specified number of ISO week-numbering years from the given date.
+ *
+ * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * - The function was renamed from `subISOYears` to `subISOWeekYears`.
+ * "ISO week year" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
+ * This change makes the name consistent with
+ * locale-dependent week-numbering year helpers, e.g., `setWeekYear`.
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of ISO week-numbering years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the ISO week-numbering years subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 5 ISO week-numbering years from 1 September 2014:
+ * const result = subISOWeekYears(new Date(2014, 8, 1), 5)
+ * //=> Mon Aug 31 2009 00:00:00
+ */
+export default function subISOWeekYears(dirtyDate: Date | number, dirtyAmount: number) {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addISOWeekYears(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subISOWeekYears/test.ts b/date-fns/src/subISOWeekYears/test.ts
new file mode 100644
index 0000000..dbb4213
--- /dev/null
+++ b/date-fns/src/subISOWeekYears/test.ts
@@ -0,0 +1,62 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subISOWeekYears from '.'
+
+describe('subISOWeekYears', function() {
+ it('subtracts the given number of ISO week-numbering years', function() {
+ const result = subISOWeekYears(new Date(2014, 8 /* Sep */, 1), 5)
+ assert.deepEqual(result, new Date(2009, 7 /* Aug */, 31))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subISOWeekYears(new Date(2014, 8 /* Sep */, 1).getTime(), 12)
+ assert.deepEqual(result, new Date(2002, 8 /* Sep */, 2))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subISOWeekYears(new Date(2014, 8 /* Sep */, 1), 5.555)
+ assert.deepEqual(result, new Date(2009, 7 /* Aug */, 31))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ const result = subISOWeekYears(new Date(2014, 8 /* Sep */, 1), '5')
+ assert.deepEqual(result, new Date(2009, 7 /* Aug */, 31))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ subISOWeekYears(date, 12)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(15, 5 /* Jun */, 26)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(10, 6 /* Jul */, 2)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = subISOWeekYears(initialDate, 5)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subISOWeekYears(new Date(NaN), 5)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subISOWeekYears(new Date(2014, 8 /* Sep */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subISOWeekYears.bind(null), TypeError)
+ assert.throws(subISOWeekYears.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subMilliseconds/benchmark.js b/date-fns/src/subMilliseconds/benchmark.js
new file mode 100644
index 0000000..597dac4
--- /dev/null
+++ b/date-fns/src/subMilliseconds/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subMilliseconds from '.'
+import moment from 'moment'
+
+suite('subMilliseconds', function () {
+ benchmark('date-fns', function () {
+ return subMilliseconds(this.date, 800)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.subtract(800, 'milliseconds')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/subMilliseconds/index.d.ts b/date-fns/src/subMilliseconds/index.d.ts
new file mode 100644
index 0000000..ffc51f1
--- /dev/null
+++ b/date-fns/src/subMilliseconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subMilliseconds } from 'date-fns'
+export default subMilliseconds
diff --git a/date-fns/src/subMilliseconds/index.js.flow b/date-fns/src/subMilliseconds/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subMilliseconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subMilliseconds/index.ts b/date-fns/src/subMilliseconds/index.ts
new file mode 100644
index 0000000..094209e
--- /dev/null
+++ b/date-fns/src/subMilliseconds/index.ts
@@ -0,0 +1,32 @@
+import toInteger from '../_lib/toInteger/index'
+import addMilliseconds from '../addMilliseconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subMilliseconds
+ * @category Millisecond Helpers
+ * @summary Subtract the specified number of milliseconds from the given date.
+ *
+ * @description
+ * Subtract the specified number of milliseconds from the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the milliseconds subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:
+ * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)
+ * //=> Thu Jul 10 2014 12:45:29.250
+ */
+export default function subMilliseconds(dirtyDate: Date | number, dirtyAmount: number) {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addMilliseconds(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subMilliseconds/test.ts b/date-fns/src/subMilliseconds/test.ts
new file mode 100644
index 0000000..bd93b39
--- /dev/null
+++ b/date-fns/src/subMilliseconds/test.ts
@@ -0,0 +1,67 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subMilliseconds from '.'
+
+describe('subMilliseconds', function() {
+ it('subtracts the given number of milliseconds', function() {
+ const result = subMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0),
+ 750
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 29, 250))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0).getTime(),
+ 500
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 29, 500))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0),
+ 750.75
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 29, 250))
+ })
+
+ it('implicitly converts number arguments', function() {
+ const result = subMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0),
+ // $ExpectedMistake
+ // @ts-expect-error
+ '750'
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 45, 29, 250))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0)
+ subMilliseconds(date, 250)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subMilliseconds(new Date(NaN), 750)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subMilliseconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 30, 0),
+ NaN
+ )
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subMilliseconds.bind(null), TypeError)
+ assert.throws(subMilliseconds.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subMinutes/benchmark.js b/date-fns/src/subMinutes/benchmark.js
new file mode 100644
index 0000000..2f9ac04
--- /dev/null
+++ b/date-fns/src/subMinutes/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subMinutes from '.'
+import moment from 'moment'
+
+suite('subMinutes', function () {
+ benchmark('date-fns', function () {
+ return subMinutes(this.date, 25)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.subtract(25, 'minutes')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/subMinutes/index.d.ts b/date-fns/src/subMinutes/index.d.ts
new file mode 100644
index 0000000..43c3222
--- /dev/null
+++ b/date-fns/src/subMinutes/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subMinutes } from 'date-fns'
+export default subMinutes
diff --git a/date-fns/src/subMinutes/index.js.flow b/date-fns/src/subMinutes/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subMinutes/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subMinutes/index.ts b/date-fns/src/subMinutes/index.ts
new file mode 100644
index 0000000..365928b
--- /dev/null
+++ b/date-fns/src/subMinutes/index.ts
@@ -0,0 +1,32 @@
+import toInteger from '../_lib/toInteger/index'
+import addMinutes from '../addMinutes/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subMinutes
+ * @category Minute Helpers
+ * @summary Subtract the specified number of minutes from the given date.
+ *
+ * @description
+ * Subtract the specified number of minutes from the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of minutes to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the minutes subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 30 minutes from 10 July 2014 12:00:00:
+ * const result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)
+ * //=> Thu Jul 10 2014 11:30:00
+ */
+export default function subMinutes(dirtyDate: Date | number, dirtyAmount: number) {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addMinutes(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subMinutes/test.ts b/date-fns/src/subMinutes/test.ts
new file mode 100644
index 0000000..572dc07
--- /dev/null
+++ b/date-fns/src/subMinutes/test.ts
@@ -0,0 +1,54 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subMinutes from '.'
+
+describe('subMinutes', function() {
+ it('subtracts the given number of minutes', function() {
+ const result = subMinutes(new Date(2014, 6 /* Jul */, 10, 12, 0), 30)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 11, 30))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subMinutes(
+ new Date(2014, 6 /* Jul */, 10, 12, 0).getTime(),
+ 20
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 11, 40))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subMinutes(new Date(2014, 6 /* Jul */, 10, 12, 0), 30.4)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 11, 30))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ const result = subMinutes(new Date(2014, 6 /* Jul */, 10, 12, 0), '30')
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 11, 30))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 10, 12, 0)
+ subMinutes(date, 25)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 10, 12, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subMinutes(new Date(NaN), 30)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subMinutes(new Date(2014, 6 /* Jul */, 10, 12, 0), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subMinutes.bind(null), TypeError)
+ assert.throws(subMinutes.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subMonths/benchmark.js b/date-fns/src/subMonths/benchmark.js
new file mode 100644
index 0000000..f2e1662
--- /dev/null
+++ b/date-fns/src/subMonths/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subMonths from '.'
+import moment from 'moment'
+
+suite('subMonths', function () {
+ benchmark('date-fns', function () {
+ return subMonths(this.date, 7)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.subtract(7, 'months')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/subMonths/index.d.ts b/date-fns/src/subMonths/index.d.ts
new file mode 100644
index 0000000..dd963a1
--- /dev/null
+++ b/date-fns/src/subMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subMonths } from 'date-fns'
+export default subMonths
diff --git a/date-fns/src/subMonths/index.js.flow b/date-fns/src/subMonths/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subMonths/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subMonths/index.ts b/date-fns/src/subMonths/index.ts
new file mode 100644
index 0000000..d827fad
--- /dev/null
+++ b/date-fns/src/subMonths/index.ts
@@ -0,0 +1,32 @@
+import toInteger from '../_lib/toInteger/index'
+import addMonths from '../addMonths/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subMonths
+ * @category Month Helpers
+ * @summary Subtract the specified number of months from the given date.
+ *
+ * @description
+ * Subtract the specified number of months from the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of months to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the months subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 5 months from 1 February 2015:
+ * const result = subMonths(new Date(2015, 1, 1), 5)
+ * //=> Mon Sep 01 2014 00:00:00
+ */
+export default function subMonths(dirtyDate: Date | number, dirtyAmount: number): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addMonths(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subMonths/test.ts b/date-fns/src/subMonths/test.ts
new file mode 100644
index 0000000..0b5c32d
--- /dev/null
+++ b/date-fns/src/subMonths/test.ts
@@ -0,0 +1,69 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subMonths from '.'
+
+describe('subMonths', function() {
+ it('subtracts the given number of months', function() {
+ const result = subMonths(new Date(2015, 1 /* Feb */, 1), 5)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subMonths(new Date(2015, 8 /* Sep */, 1).getTime(), 12)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subMonths(new Date(2015, 1 /* Feb */, 1), 5.999)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = subMonths(new Date(2015, 1 /* Feb */, 1), '5')
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ subMonths(date, 12)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('works well if the desired month has fewer days and the provided date is in the last day of a month', function() {
+ const date = new Date(2014, 11 /* Dec */, 31)
+ const result = subMonths(date, 3)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(1, 2 /* Mar */, 31)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(1, 1 /* Feb */, 28)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = subMonths(initialDate, 1)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subMonths(new Date(NaN), 5)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subMonths(new Date(2015, 1 /* Feb */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subMonths.bind(null), TypeError)
+ assert.throws(subMonths.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subQuarters/benchmark.js b/date-fns/src/subQuarters/benchmark.js
new file mode 100644
index 0000000..2af1732
--- /dev/null
+++ b/date-fns/src/subQuarters/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subQuarters from '.'
+import moment from 'moment'
+
+suite('subQuarters', function () {
+ benchmark('date-fns', function () {
+ return subQuarters(this.date, 1)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.subtract(1, 'quarters')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/subQuarters/index.d.ts b/date-fns/src/subQuarters/index.d.ts
new file mode 100644
index 0000000..216a1f3
--- /dev/null
+++ b/date-fns/src/subQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subQuarters } from 'date-fns'
+export default subQuarters
diff --git a/date-fns/src/subQuarters/index.js.flow b/date-fns/src/subQuarters/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subQuarters/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subQuarters/index.ts b/date-fns/src/subQuarters/index.ts
new file mode 100644
index 0000000..0833596
--- /dev/null
+++ b/date-fns/src/subQuarters/index.ts
@@ -0,0 +1,32 @@
+import toInteger from '../_lib/toInteger/index'
+import addQuarters from '../addQuarters/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subQuarters
+ * @category Quarter Helpers
+ * @summary Subtract the specified number of year quarters from the given date.
+ *
+ * @description
+ * Subtract the specified number of year quarters from the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of quarters to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the quarters subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 3 quarters from 1 September 2014:
+ * const result = subQuarters(new Date(2014, 8, 1), 3)
+ * //=> Sun Dec 01 2013 00:00:00
+ */
+export default function subQuarters(dirtyDate: Date | number, dirtyAmount: number): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addQuarters(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subQuarters/test.ts b/date-fns/src/subQuarters/test.ts
new file mode 100644
index 0000000..cfd1d9f
--- /dev/null
+++ b/date-fns/src/subQuarters/test.ts
@@ -0,0 +1,69 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subQuarters from '.'
+
+describe('subQuarters', function() {
+ it('subtracts the given number of quarters', function() {
+ const result = subQuarters(new Date(2014, 8 /* Sep */, 1), 3)
+ assert.deepEqual(result, new Date(2013, 11 /* Dec */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subQuarters(new Date(2014, 8 /* Sep */, 1).getTime(), 4)
+ assert.deepEqual(result, new Date(2013, 8 /* Sep */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subQuarters(new Date(2014, 8 /* Sep */, 1), 3.33)
+ assert.deepEqual(result, new Date(2013, 11 /* Dec */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = subQuarters(new Date(2014, 8 /* Sep */, 1), '3')
+ assert.deepEqual(result, new Date(2013, 11 /* Dec */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ subQuarters(date, 3)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('works well if the desired month has fewer days and the provided date is in the last day of a month', function() {
+ const date = new Date(2014, 11 /* Dec */, 31)
+ const result = subQuarters(date, 1)
+ assert.deepEqual(result, new Date(2014, 8 /* Sep */, 30))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(0, 10 /* Nov */, 30)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(0, 1 /* Feb */, 29)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = subQuarters(initialDate, 3)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subQuarters(new Date(NaN), 3)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subQuarters(new Date(2014, 8 /* Sep */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subQuarters.bind(null), TypeError)
+ assert.throws(subQuarters.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subSeconds/benchmark.js b/date-fns/src/subSeconds/benchmark.js
new file mode 100644
index 0000000..7801686
--- /dev/null
+++ b/date-fns/src/subSeconds/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subSeconds from '.'
+import moment from 'moment'
+
+suite('subSeconds', function () {
+ benchmark('date-fns', function () {
+ return subSeconds(this.date, 100)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.subtract(100, 'seconds')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/subSeconds/index.d.ts b/date-fns/src/subSeconds/index.d.ts
new file mode 100644
index 0000000..f718279
--- /dev/null
+++ b/date-fns/src/subSeconds/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subSeconds } from 'date-fns'
+export default subSeconds
diff --git a/date-fns/src/subSeconds/index.js.flow b/date-fns/src/subSeconds/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subSeconds/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subSeconds/index.ts b/date-fns/src/subSeconds/index.ts
new file mode 100644
index 0000000..72142a6
--- /dev/null
+++ b/date-fns/src/subSeconds/index.ts
@@ -0,0 +1,32 @@
+import toInteger from '../_lib/toInteger/index'
+import addSeconds from '../addSeconds/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subSeconds
+ * @category Second Helpers
+ * @summary Subtract the specified number of seconds from the given date.
+ *
+ * @description
+ * Subtract the specified number of seconds from the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of seconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the seconds subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 30 seconds from 10 July 2014 12:45:00:
+ * const result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)
+ * //=> Thu Jul 10 2014 12:44:30
+ */
+export default function subSeconds(dirtyDate: Date | number, dirtyAmount: number): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addSeconds(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subSeconds/test.ts b/date-fns/src/subSeconds/test.ts
new file mode 100644
index 0000000..1b0b97d
--- /dev/null
+++ b/date-fns/src/subSeconds/test.ts
@@ -0,0 +1,55 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subSeconds from '.'
+
+describe('subSeconds', function() {
+ it('subtracts the given number of seconds', function() {
+ const result = subSeconds(new Date(2014, 6 /* Jul */, 10, 12, 45, 0), 30)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 44, 30))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subSeconds(
+ new Date(2014, 6 /* Jul */, 10, 12, 45, 0).getTime(),
+ 20
+ )
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 44, 40))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subSeconds(new Date(2014, 6 /* Jul */, 10, 12, 45, 0), 30.5)
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 44, 30))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = subSeconds(new Date(2014, 6 /* Jul */, 10, 12, 45, 0), '30')
+ assert.deepEqual(result, new Date(2014, 6 /* Jul */, 10, 12, 44, 30))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 6 /* Jul */, 10, 12, 45, 0)
+ subSeconds(date, 15)
+ assert.deepEqual(date, new Date(2014, 6 /* Jul */, 10, 12, 45, 0))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subSeconds(new Date(NaN), 30)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subSeconds(new Date(2014, 6 /* Jul */, 10, 12, 45, 0), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subSeconds.bind(null), TypeError)
+ assert.throws(subSeconds.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subWeeks/benchmark.js b/date-fns/src/subWeeks/benchmark.js
new file mode 100644
index 0000000..0fef6a6
--- /dev/null
+++ b/date-fns/src/subWeeks/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subWeeks from '.'
+import moment from 'moment'
+
+suite('subWeeks', function () {
+ benchmark('date-fns', function () {
+ return subWeeks(this.date, 8)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.subtract(8, 'weeks')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/subWeeks/index.d.ts b/date-fns/src/subWeeks/index.d.ts
new file mode 100644
index 0000000..b6e3c82
--- /dev/null
+++ b/date-fns/src/subWeeks/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subWeeks } from 'date-fns'
+export default subWeeks
diff --git a/date-fns/src/subWeeks/index.js.flow b/date-fns/src/subWeeks/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subWeeks/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subWeeks/index.ts b/date-fns/src/subWeeks/index.ts
new file mode 100644
index 0000000..d12d2a0
--- /dev/null
+++ b/date-fns/src/subWeeks/index.ts
@@ -0,0 +1,32 @@
+import toInteger from '../_lib/toInteger/index'
+import addWeeks from '../addWeeks/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subWeeks
+ * @category Week Helpers
+ * @summary Subtract the specified number of weeks from the given date.
+ *
+ * @description
+ * Subtract the specified number of weeks from the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of weeks to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the weeks subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 4 weeks from 1 September 2014:
+ * const result = subWeeks(new Date(2014, 8, 1), 4)
+ * //=> Mon Aug 04 2014 00:00:00
+ */
+export default function subWeeks(dirtyDate: Date | number, dirtyAmount: number): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addWeeks(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subWeeks/test.ts b/date-fns/src/subWeeks/test.ts
new file mode 100644
index 0000000..efa311b
--- /dev/null
+++ b/date-fns/src/subWeeks/test.ts
@@ -0,0 +1,52 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subWeeks from '.'
+
+describe('subWeeks', function() {
+ it('subtracts the given number of weeks', function() {
+ const result = subWeeks(new Date(2014, 8 /* Sep */, 1), 4)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 4))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subWeeks(new Date(2014, 8 /* Sep */, 1).getTime(), 1)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 25))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subWeeks(new Date(2014, 8 /* Sep */, 1), 4.2)
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 4))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = subWeeks(new Date(2014, 8 /* Sep */, 1), '4')
+ assert.deepEqual(result, new Date(2014, 7 /* Aug */, 4))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ subWeeks(date, 2)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subWeeks(new Date(NaN), 4)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subWeeks(new Date(2014, 8 /* Sep */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subWeeks.bind(null), TypeError)
+ assert.throws(subWeeks.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/subYears/benchmark.js b/date-fns/src/subYears/benchmark.js
new file mode 100644
index 0000000..eada68d
--- /dev/null
+++ b/date-fns/src/subYears/benchmark.js
@@ -0,0 +1,21 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import subYears from '.'
+import moment from 'moment'
+
+suite('subYears', function () {
+ benchmark('date-fns', function () {
+ return subYears(this.date, 5)
+ })
+
+ benchmark('Moment.js', function () {
+ return this.moment.subtract(5, 'years')
+ })
+}, {
+ setup: function () {
+ this.date = new Date()
+ this.moment = moment()
+ }
+})
diff --git a/date-fns/src/subYears/index.d.ts b/date-fns/src/subYears/index.d.ts
new file mode 100644
index 0000000..5edf482
--- /dev/null
+++ b/date-fns/src/subYears/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { subYears } from 'date-fns'
+export default subYears
diff --git a/date-fns/src/subYears/index.js.flow b/date-fns/src/subYears/index.js.flow
new file mode 100644
index 0000000..f568f0d
--- /dev/null
+++ b/date-fns/src/subYears/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (date: Date | number, amount: number) => Date
diff --git a/date-fns/src/subYears/index.ts b/date-fns/src/subYears/index.ts
new file mode 100644
index 0000000..2619a6c
--- /dev/null
+++ b/date-fns/src/subYears/index.ts
@@ -0,0 +1,32 @@
+import toInteger from '../_lib/toInteger/index'
+import addYears from '../addYears/index'
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name subYears
+ * @category Year Helpers
+ * @summary Subtract the specified number of years from the given date.
+ *
+ * @description
+ * Subtract the specified number of years from the given date.
+ *
+ * ### v2.0.0 breaking changes:
+ *
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
+ *
+ * @param {Date|Number} date - the date to be changed
+ * @param {Number} amount - the amount of years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
+ * @returns {Date} the new date with the years subtracted
+ * @throws {TypeError} 2 arguments required
+ *
+ * @example
+ * // Subtract 5 years from 1 September 2014:
+ * const result = subYears(new Date(2014, 8, 1), 5)
+ * //=> Tue Sep 01 2009 00:00:00
+ */
+export default function subYears(dirtyDate: Date | number, dirtyAmount: number): Date {
+ requiredArgs(2, arguments)
+
+ const amount = toInteger(dirtyAmount)
+ return addYears(dirtyDate, -amount)
+}
diff --git a/date-fns/src/subYears/test.ts b/date-fns/src/subYears/test.ts
new file mode 100644
index 0000000..24b431e
--- /dev/null
+++ b/date-fns/src/subYears/test.ts
@@ -0,0 +1,68 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import subYears from '.'
+
+describe('subYears', function() {
+ it('subtracts the given number of years', function() {
+ const result = subYears(new Date(2014, 8 /* Sep */, 1), 5)
+ assert.deepEqual(result, new Date(2009, 8 /* Sep */, 1))
+ })
+
+ it('accepts a timestamp', function() {
+ const result = subYears(new Date(2014, 8 /* Sep */, 1).getTime(), 12)
+ assert.deepEqual(result, new Date(2002, 8 /* Sep */, 1))
+ })
+
+ it('converts a fractional number to an integer', function() {
+ const result = subYears(new Date(2014, 8 /* Sep */, 1), 5.1)
+ assert.deepEqual(result, new Date(2009, 8 /* Sep */, 1))
+ })
+
+ it('implicitly converts number arguments', function() {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = subYears(new Date(2014, 8 /* Sep */, 1), '5')
+ assert.deepEqual(result, new Date(2009, 8 /* Sep */, 1))
+ })
+
+ it('does not mutate the original date', function() {
+ const date = new Date(2014, 8 /* Sep */, 1)
+ subYears(date, 12)
+ assert.deepEqual(date, new Date(2014, 8 /* Sep */, 1))
+ })
+
+ it('handles the leap years properly', function() {
+ const result = subYears(new Date(2016, 1 /* Feb */, 29), 1)
+ assert.deepEqual(result, new Date(2015, 1 /* Feb */, 28))
+ })
+
+ it('handles dates before 100 AD', function() {
+ const initialDate = new Date(0)
+ initialDate.setFullYear(0, 1 /* Feb */, 29)
+ initialDate.setHours(0, 0, 0, 0)
+ const expectedResult = new Date(0)
+ expectedResult.setFullYear(-1, 1 /* Feb */, 28)
+ expectedResult.setHours(0, 0, 0, 0)
+ const result = subYears(initialDate, 1)
+ assert.deepEqual(result, expectedResult)
+ })
+
+ it('returns `Invalid Date` if the given date is invalid', function() {
+ const result = subYears(new Date(NaN), 5)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('returns `Invalid Date` if the given amount is NaN', function() {
+ const result = subYears(new Date(2014, 8 /* Sep */, 1), NaN)
+ // @ts-expect-error
+ assert(result instanceof Date && isNaN(result))
+ })
+
+ it('throws TypeError exception if passed less than 2 arguments', function() {
+ assert.throws(subYears.bind(null), TypeError)
+ assert.throws(subYears.bind(null, 1), TypeError)
+ })
+})
diff --git a/date-fns/src/toDate/benchmark.js b/date-fns/src/toDate/benchmark.js
new file mode 100644
index 0000000..290d5d3
--- /dev/null
+++ b/date-fns/src/toDate/benchmark.js
@@ -0,0 +1,16 @@
+// @flow
+/* eslint-env mocha */
+/* global suite, benchmark */
+
+import toDate from '.'
+import moment from 'moment'
+
+suite('toDate', function() {
+ benchmark('date-fns', function() {
+ return toDate(539980200000)
+ })
+
+ benchmark('Moment.js', function() {
+ return moment(539980200000)
+ })
+})
diff --git a/date-fns/src/toDate/index.d.ts b/date-fns/src/toDate/index.d.ts
new file mode 100644
index 0000000..0231ae7
--- /dev/null
+++ b/date-fns/src/toDate/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { toDate } from 'date-fns'
+export default toDate
diff --git a/date-fns/src/toDate/index.js.flow b/date-fns/src/toDate/index.js.flow
new file mode 100644
index 0000000..19292c7
--- /dev/null
+++ b/date-fns/src/toDate/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (argument: Date | number) => Date
diff --git a/date-fns/src/toDate/index.ts b/date-fns/src/toDate/index.ts
new file mode 100644
index 0000000..a7282ed
--- /dev/null
+++ b/date-fns/src/toDate/index.ts
@@ -0,0 +1,61 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name toDate
+ * @category Common Helpers
+ * @summary Convert the given argument to an instance of Date.
+ *
+ * @description
+ * Convert the given argument to an instance of Date.
+ *
+ * If the argument is an instance of Date, the function returns its clone.
+ *
+ * If the argument is a number, it is treated as a timestamp.
+ *
+ * If the argument is none of the above, the function returns Invalid Date.
+ *
+ * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.
+ *
+ * @param {Date|Number} argument - the value to convert
+ * @returns {Date} the parsed date in the local time zone
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Clone the date:
+ * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))
+ * //=> Tue Feb 11 2014 11:30:30
+ *
+ * @example
+ * // Convert the timestamp to date:
+ * const result = toDate(1392098430000)
+ * //=> Tue Feb 11 2014 11:30:30
+ */
+export default function toDate(argument: Date | number): Date {
+ requiredArgs(1, arguments)
+
+ const argStr = Object.prototype.toString.call(argument)
+
+ // Clone the date
+ if (
+ argument instanceof Date ||
+ (typeof argument === 'object' && argStr === '[object Date]')
+ ) {
+ // Prevent the date to lose the milliseconds when passed to new Date() in IE10
+ return new Date(argument.getTime())
+ } else if (typeof argument === 'number' || argStr === '[object Number]') {
+ return new Date(argument)
+ } else {
+ if (
+ (typeof argument === 'string' || argStr === '[object String]') &&
+ typeof console !== 'undefined'
+ ) {
+ // eslint-disable-next-line no-console
+ console.warn(
+ "Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"
+ )
+ // eslint-disable-next-line no-console
+ console.warn(new Error().stack)
+ }
+ return new Date(NaN)
+ }
+}
diff --git a/date-fns/src/toDate/test.ts b/date-fns/src/toDate/test.ts
new file mode 100644
index 0000000..c376727
--- /dev/null
+++ b/date-fns/src/toDate/test.ts
@@ -0,0 +1,136 @@
+// @flow
+/* eslint-env mocha */
+
+import assert from 'power-assert'
+import sinon from 'sinon'
+import toDate from '.'
+
+describe('toDate', () => {
+ describe('date argument', () => {
+ it('returns a clone of the given date', () => {
+ const date = new Date(2016, 0, 1)
+ const dateClone = toDate(date)
+ dateClone.setFullYear(2015)
+ assert.deepEqual(date, new Date(2016, 0, 1))
+ })
+ })
+
+ describe('timestamp argument', () => {
+ it('creates a date from the timestamp', () => {
+ const timestamp = new Date(2016, 0, 1, 23, 30, 45, 123).getTime()
+ const result = toDate(timestamp)
+ assert.deepEqual(result, new Date(2016, 0, 1, 23, 30, 45, 123))
+ })
+ })
+
+ describe('invalid argument', () => {
+ mockConsoleWarn()
+
+ it('returns Invalid Date if argument is a string', () => {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = toDate('1987-02-11')
+ assert(result instanceof Date)
+ // @ts-expect-error
+ assert(isNaN(result))
+ })
+
+ it('prints deprecation warning if the argument is a string', () => {
+ // $ExpectedMistake
+ console.warn = sinon.spy() // eslint-disable-line no-console
+ // $ExpectedMistake
+ // @ts-expect-error
+ toDate('1987-02-11')
+ assert(
+ // eslint-disable-next-line no-console
+ // @ts-expect-error
+ console.warn.calledWith(
+ "Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"
+ )
+ )
+ })
+
+ it('returns Invalid Date if argument is NaN', () => {
+ const result = toDate(NaN)
+ assert(result instanceof Date)
+ // @ts-expect-error
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is Invalid Date', () => {
+ const result = toDate(new Date(NaN))
+ assert(result instanceof Date)
+ // @ts-expect-error
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is null', () => {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = toDate(null)
+ assert(result instanceof Date)
+ // @ts-expect-error
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is undefined', () => {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = toDate(undefined)
+ assert(result instanceof Date)
+ // @ts-expect-error
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is false', () => {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = toDate(false)
+ assert(result instanceof Date)
+ // @ts-expect-error
+ assert(isNaN(result))
+ })
+
+ it('returns Invalid Date if argument is true', () => {
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = toDate(true)
+ assert(result instanceof Date)
+ // @ts-expect-error
+ assert(isNaN(result))
+ })
+ })
+
+ describe('argument conversion', () => {
+ it('implicitly converts instance of Number into a number', () => {
+ // eslint-disable-next-line no-new-wrappers
+ const timestamp = new Number(
+ new Date(2016, 0, 1, 23, 30, 45, 123).getTime()
+ )
+ // $ExpectedMistake
+ // @ts-expect-error
+ const result = toDate(timestamp)
+ assert.deepEqual(result, new Date(2016, 0, 1, 23, 30, 45, 123))
+ })
+ })
+
+ it('throws TypeError exception if passed less than 1 argument', () => {
+ assert.throws(toDate.bind(null), TypeError)
+ })
+})
+
+function mockConsoleWarn() {
+ let originalWarn
+
+ beforeEach(() => {
+ originalWarn = console.warn // eslint-disable-line no-console
+ // $ExpectedMistake
+ console.warn = () => {} // eslint-disable-line no-console
+ })
+
+ afterEach(() => {
+ // $ExpectedMistake
+ // @ts-expect-error
+ console.warn = originalWarn // eslint-disable-line no-console
+ })
+}
diff --git a/date-fns/src/types.ts b/date-fns/src/types.ts
new file mode 100644
index 0000000..9ce6059
--- /dev/null
+++ b/date-fns/src/types.ts
@@ -0,0 +1,53 @@
+import { Locale } from './locale/types'
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+export interface Duration {
+ years?: number
+ months?: number
+ weeks?: number
+ days?: number
+ hours?: number
+ minutes?: number
+ seconds?: number
+}
+
+export interface Interval {
+ start: Date | number
+ end: Date | number
+}
+
+export interface StepOptions {
+ step?: number
+}
+
+export interface WeekStartOptions {
+ weekStartsOn?: Day
+}
+
+export interface LocaleOptions {
+ locale?: Locale
+}
+
+export type FirstWeekContainsDate = 1 | 4
+
+export interface FirstWeekContainsDateOptions {
+ firstWeekContainsDate?: FirstWeekContainsDate
+}
+
+export interface DateValues {
+ year?: number
+ month?: number
+ date?: number
+ hours?: number
+ minutes?: number
+ seconds?: number
+ milliseconds?: number
+}
+
+export type Unit = 'second'
+ | 'minute'
+ | 'hour'
+ | 'day'
+ | 'month'
+ | 'year';
diff --git a/date-fns/src/weeksToDays/index.d.ts b/date-fns/src/weeksToDays/index.d.ts
new file mode 100644
index 0000000..dd8c1fe
--- /dev/null
+++ b/date-fns/src/weeksToDays/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { weeksToDays } from 'date-fns'
+export default weeksToDays
diff --git a/date-fns/src/weeksToDays/index.js.flow b/date-fns/src/weeksToDays/index.js.flow
new file mode 100644
index 0000000..257c1cc
--- /dev/null
+++ b/date-fns/src/weeksToDays/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (weeks: number) => number
diff --git a/date-fns/src/weeksToDays/index.ts b/date-fns/src/weeksToDays/index.ts
new file mode 100644
index 0000000..6675186
--- /dev/null
+++ b/date-fns/src/weeksToDays/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { daysInWeek } from '../constants/index'
+
+/**
+ * @name weeksToDays
+ * @category Conversion Helpers
+ * @summary Convert weeks to days.
+ *
+ * @description
+ * Convert a number of weeks to a full number of days.
+ *
+ * @param {number} weeks - number of weeks to be converted
+ *
+ * @returns {number} the number of weeks converted in days
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 weeks into days
+ * const result = weeksToDays(2)
+ * //=> 14
+ */
+export default function weeksToDays(weeks: number): number {
+ requiredArgs(1, arguments)
+ return Math.floor(weeks * daysInWeek)
+}
diff --git a/date-fns/src/weeksToDays/test.ts b/date-fns/src/weeksToDays/test.ts
new file mode 100644
index 0000000..46bbab1
--- /dev/null
+++ b/date-fns/src/weeksToDays/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import weeksToDays from '.'
+
+describe('weeksToDays', function () {
+ it('converts weeks to days', function () {
+ assert(weeksToDays(1) === 7)
+ assert(weeksToDays(2) === 14)
+ })
+
+ it('uses floor rounding', () => {
+ assert(weeksToDays(1.5) === 10)
+ assert(weeksToDays(0.1) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(weeksToDays(1.5) === 10)
+ assert(weeksToDays(0) === 0)
+ })
+})
diff --git a/date-fns/src/yearsToMonths/index.d.ts b/date-fns/src/yearsToMonths/index.d.ts
new file mode 100644
index 0000000..9e9126d
--- /dev/null
+++ b/date-fns/src/yearsToMonths/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { yearsToMonths } from 'date-fns'
+export default yearsToMonths
diff --git a/date-fns/src/yearsToMonths/index.js.flow b/date-fns/src/yearsToMonths/index.js.flow
new file mode 100644
index 0000000..d081919
--- /dev/null
+++ b/date-fns/src/yearsToMonths/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (years: number) => number
diff --git a/date-fns/src/yearsToMonths/index.ts b/date-fns/src/yearsToMonths/index.ts
new file mode 100644
index 0000000..2e547bd
--- /dev/null
+++ b/date-fns/src/yearsToMonths/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { monthsInYear } from '../constants/index'
+
+/**
+ * @name yearsToMonths
+ * @category Conversion Helpers
+ * @summary Convert years to months.
+ *
+ * @description
+ * Convert a number of years to a full number of months.
+ *
+ * @param {number} years - number of years to be converted
+ *
+ * @returns {number} the number of years converted in months
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 years into months
+ * const result = yearsToMonths(2)
+ * //=> 24
+ */
+export default function yearsToMonths(years: number): number {
+ requiredArgs(1, arguments)
+ return Math.floor(years * monthsInYear)
+}
diff --git a/date-fns/src/yearsToMonths/test.ts b/date-fns/src/yearsToMonths/test.ts
new file mode 100644
index 0000000..e91231c
--- /dev/null
+++ b/date-fns/src/yearsToMonths/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import yearsToMonths from '.'
+
+describe('yearsToMonths', function () {
+ it('converts years to months', function () {
+ assert(yearsToMonths(1) === 12)
+ assert(yearsToMonths(2) === 24)
+ })
+
+ it('uses floor rounding', () => {
+ assert(yearsToMonths(1.7) === 20)
+ assert(yearsToMonths(0.1) === 1)
+ })
+
+ it('handles border values', () => {
+ assert(yearsToMonths(1.5) === 18)
+ assert(yearsToMonths(0) === 0)
+ })
+})
diff --git a/date-fns/src/yearsToQuarters/index.d.ts b/date-fns/src/yearsToQuarters/index.d.ts
new file mode 100644
index 0000000..e3ebc70
--- /dev/null
+++ b/date-fns/src/yearsToQuarters/index.d.ts
@@ -0,0 +1,4 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+import { yearsToQuarters } from 'date-fns'
+export default yearsToQuarters
diff --git a/date-fns/src/yearsToQuarters/index.js.flow b/date-fns/src/yearsToQuarters/index.js.flow
new file mode 100644
index 0000000..d081919
--- /dev/null
+++ b/date-fns/src/yearsToQuarters/index.js.flow
@@ -0,0 +1,52 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+export type Interval = {
+ start: Date | number,
+ end: Date | number,
+}
+
+export type Locale = {
+ code?: string,
+ formatDistance?: (...args: Array<any>) => any,
+ formatRelative?: (...args: Array<any>) => any,
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ formatLong?: {
+ date: (...args: Array<any>) => any,
+ time: (...args: Array<any>) => any,
+ dateTime: (...args: Array<any>) => any,
+ },
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any,
+ era: (...args: Array<any>) => any,
+ quarter: (...args: Array<any>) => any,
+ month: (...args: Array<any>) => any,
+ day: (...args: Array<any>) => any,
+ dayPeriod: (...args: Array<any>) => any,
+ },
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
+ },
+}
+
+export type Duration = {
+ years?: number,
+ months?: number,
+ weeks?: number,
+ days?: number,
+ hours?: number,
+ minutes?: number,
+ seconds?: number,
+}
+
+export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+declare module.exports: (years: number) => number
diff --git a/date-fns/src/yearsToQuarters/index.ts b/date-fns/src/yearsToQuarters/index.ts
new file mode 100644
index 0000000..223e7d5
--- /dev/null
+++ b/date-fns/src/yearsToQuarters/index.ts
@@ -0,0 +1,25 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+import { quartersInYear } from '../constants/index'
+
+/**
+ * @name yearsToQuarters
+ * @category Conversion Helpers
+ * @summary Convert years to quarters.
+ *
+ * @description
+ * Convert a number of years to a full number of quarters.
+ *
+ * @param {number} years - number of years to be converted
+ *
+ * @returns {number} the number of years converted in quarters
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // Convert 2 years to quarters
+ * const result = yearsToQuarters(2)
+ * //=> 8
+ */
+export default function yearsToQuarters(years: number): number {
+ requiredArgs(1, arguments)
+ return Math.floor(years * quartersInYear)
+}
diff --git a/date-fns/src/yearsToQuarters/test.ts b/date-fns/src/yearsToQuarters/test.ts
new file mode 100644
index 0000000..a08ef68
--- /dev/null
+++ b/date-fns/src/yearsToQuarters/test.ts
@@ -0,0 +1,21 @@
+/* eslint-env mocha */
+
+import assert from 'assert'
+import yearsToQuarters from '.'
+
+describe('yearsToQuarters', function () {
+ it('converts years to quarters', function () {
+ assert(yearsToQuarters(1) === 4)
+ assert(yearsToQuarters(2) === 8)
+ })
+
+ it('uses floor rounding', () => {
+ assert(yearsToQuarters(1.3) === 5)
+ assert(yearsToQuarters(0.2) === 0)
+ })
+
+ it('handles border values', () => {
+ assert(yearsToQuarters(1.5) === 6)
+ assert(yearsToQuarters(0) === 0)
+ })
+})
diff --git a/date-fns/test.js b/date-fns/test.js
new file mode 100644
index 0000000..0406e07
--- /dev/null
+++ b/date-fns/test.js
@@ -0,0 +1,2 @@
+var testsContext = require.context('./src/', true, /\/test\.(t|j)s$/)
+testsContext.keys().forEach(testsContext)
diff --git a/date-fns/test/.eslintrc.js b/date-fns/test/.eslintrc.js
new file mode 100644
index 0000000..a40aaa8
--- /dev/null
+++ b/date-fns/test/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+ rules: {
+ 'no-console': 'off'
+ }
+}
diff --git a/date-fns/test/dst/addBusinessDays/basic.js b/date-fns/test/dst/addBusinessDays/basic.js
new file mode 100644
index 0000000..c55a686
--- /dev/null
+++ b/date-fns/test/dst/addBusinessDays/basic.js
@@ -0,0 +1,18 @@
+// This is basic DST test for addBusinessDays
+
+import assert from 'assert'
+import addBusinessDays from '../../../src/addBusinessDays'
+
+if (process.env.TZ !== 'America/Santiago')
+ throw new Error('The test must be run with TZ=America/Santiago')
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+console.log(addBusinessDays(new Date(2014, 8 /* Sep */, 1), 10).toString())
+
+assert.deepEqual(
+ // new Date(2014, 8, 7) is the DST day
+ addBusinessDays(new Date(2014, 8 /* Sep */, 1), 10).toString(),
+ 'Mon Sep 15 2014 00:00:00 GMT-0300 (Chile Summer Time)'
+)
diff --git a/date-fns/test/dst/eachDayOfInterval/basic.js b/date-fns/test/dst/eachDayOfInterval/basic.js
new file mode 100644
index 0000000..8525a2b
--- /dev/null
+++ b/date-fns/test/dst/eachDayOfInterval/basic.js
@@ -0,0 +1,22 @@
+// This is basic DST test for eachDayOfInterval
+
+import eachDayOfInterval from '../../../src/eachDayOfInterval'
+import assert from 'assert'
+
+if (process.env.TZ !== 'Asia/Damascus')
+ throw new Error('The test must be run with TZ=Asia/Damascus')
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+assert.deepEqual(
+ eachDayOfInterval({
+ start: new Date(2020, 2, 26),
+ end: new Date(2020, 2, 28)
+ }).map(d => d.toString()),
+ [
+ 'Thu Mar 26 2020 00:00:00 GMT+0200 (Eastern European Standard Time)',
+ 'Fri Mar 27 2020 01:00:00 GMT+0300 (Eastern European Summer Time)',
+ 'Sat Mar 28 2020 00:00:00 GMT+0300 (Eastern European Summer Time)'
+ ]
+)
diff --git a/date-fns/test/dst/formatDistanceStrict/cairo.ts b/date-fns/test/dst/formatDistanceStrict/cairo.ts
new file mode 100644
index 0000000..c9bd691
--- /dev/null
+++ b/date-fns/test/dst/formatDistanceStrict/cairo.ts
@@ -0,0 +1,15 @@
+// This is DST test for formatDistanceStrict in the Cairo timezone
+
+import formatDistanceStrict from '../../../src/formatDistanceStrict'
+import assert from 'assert'
+
+if (process.env.TZ !== 'Africa/Cairo')
+ throw new Error('The test must be run with TZ=Africa/Cairo')
+
+assert.equal(
+ formatDistanceStrict(
+ new Date(1986, 3, 4, 10, 32, 0),
+ new Date(1986, 4, 4, 10, 32, 0)
+ ),
+ '1 month'
+)
diff --git a/date-fns/test/dst/formatDistanceStrict/melbourne.ts b/date-fns/test/dst/formatDistanceStrict/melbourne.ts
new file mode 100644
index 0000000..aee04da
--- /dev/null
+++ b/date-fns/test/dst/formatDistanceStrict/melbourne.ts
@@ -0,0 +1,16 @@
+// This is DST test for formatDistanceStrict in the Melbourne timezone
+
+import formatDistanceStrict from '../../../src/formatDistanceStrict'
+import parseISO from '../../../src/parseISO'
+import assert from 'assert'
+
+if (process.env.TZ !== 'Australia/Melbourne')
+ throw new Error('The test must be run with TZ=Australia/Melbourne')
+
+assert.equal(
+ formatDistanceStrict(
+ parseISO('2020-04-05T01:00:00+11:00'),
+ parseISO('2020-04-05T03:00:00+10:00')
+ ),
+ '3 hours'
+)
diff --git a/date-fns/test/dst/parseISO/basic.js b/date-fns/test/dst/parseISO/basic.js
new file mode 100644
index 0000000..665af35
--- /dev/null
+++ b/date-fns/test/dst/parseISO/basic.js
@@ -0,0 +1,30 @@
+// This is basic DST test for parseISO
+
+import parseISO from '../../../src/parseISO'
+import assert from 'assert'
+
+if (process.env.TZ !== 'America/Sao_Paulo')
+ throw new Error('The test must be run with TZ=America/Sao_Paulo')
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+// Test DST start edge
+assert.equal(parseISO('2018-11-03').getDate(), 3)
+assert.equal(parseISO('2018-11-04').getDate(), 4) // DST start
+assert.equal(parseISO('2018-11-05').getDate(), 5)
+
+// Test DST end edge
+assert.equal(parseISO('2019-02-15').getDate(), 15)
+assert.equal(parseISO('2019-02-16').getDate(), 16) // DST end
+assert.equal(parseISO('2019-02-17').getDate(), 17)
+
+// Test creation of nonexistent time
+assert.equal(
+ parseISO('2018-11-04T00:00').toString(),
+ 'Sun Nov 04 2018 01:00:00 GMT-0200 (Brasilia Summer Time)'
+)
+assert.equal(
+ parseISO('2018-11-04T00:30').toString(),
+ 'Sun Nov 04 2018 01:30:00 GMT-0200 (Brasilia Summer Time)'
+)
diff --git a/date-fns/test/dst/parseISO/samoa.js b/date-fns/test/dst/parseISO/samoa.js
new file mode 100644
index 0000000..40d224f
--- /dev/null
+++ b/date-fns/test/dst/parseISO/samoa.js
@@ -0,0 +1,16 @@
+// This is an edge case DST test for parseISO
+
+import parseISO from '../../../src/parseISO'
+import assert from 'assert'
+
+if (process.env.TZ !== 'Pacific/Apia')
+ throw new Error('The test must be run with TZ=Pacific/Apia')
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+assert.equal(parseISO('2011-12-30').getDate(), 31)
+assert.equal(
+ parseISO('2011-12-30T03:30').toString(),
+ 'Sat Dec 31 2011 03:30:00 GMT+1400 (Apia Daylight Time)'
+)
diff --git a/date-fns/test/dst/parseISO/sydney.js b/date-fns/test/dst/parseISO/sydney.js
new file mode 100644
index 0000000..3b733c0
--- /dev/null
+++ b/date-fns/test/dst/parseISO/sydney.js
@@ -0,0 +1,58 @@
+// This is basic DST test for parseISO
+
+import parseISO from '../../../src/parseISO'
+import assert from 'assert'
+
+if (process.env.TZ !== 'Australia/Sydney')
+ throw new Error('The test must be run with TZ=Australia/Sydney')
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+// Test DST start edge
+assert.equal(parseISO('2019-10-06').getDate(), 6) // DST start
+assert.equal(parseISO('2019-10-07').getDate(), 7)
+assert.equal(
+ parseISO('2019-10-06T01:00:00').toString(),
+ 'Sun Oct 06 2019 01:00:00 GMT+1000 (Australian Eastern Standard Time)'
+)
+assert.equal(
+ parseISO('2019-10-06T02:00:00').toString(),
+ 'Sun Oct 06 2019 03:00:00 GMT+1100 (Australian Eastern Daylight Time)'
+)
+
+assert.equal(
+ parseISO('2019-10-06T05:00:00').toString(),
+ 'Sun Oct 06 2019 05:00:00 GMT+1100 (Australian Eastern Daylight Time)'
+)
+
+// Test DST end edge
+assert.equal(parseISO('2019-04-06').getDate(), 6)
+assert.equal(parseISO('2019-04-07').getDate(), 7) // DST end
+assert.equal(
+ parseISO('2019-04-06T11:00:00').toString(),
+ 'Sat Apr 06 2019 11:00:00 GMT+1100 (Australian Eastern Daylight Time)'
+)
+assert.equal(
+ parseISO('2019-04-07T11:00:00').toString(),
+ 'Sun Apr 07 2019 11:00:00 GMT+1000 (Australian Eastern Standard Time)'
+)
+
+assert.equal(
+ parseISO('2019-04-07T00:00:00').toString(),
+ 'Sun Apr 07 2019 00:00:00 GMT+1100 (Australian Eastern Daylight Time)'
+)
+
+// test edge cases for months, years
+assert.equal(
+ parseISO('2020-01-01T00:00:00').toString(),
+ 'Wed Jan 01 2020 00:00:00 GMT+1100 (Australian Eastern Daylight Time)'
+)
+assert.equal(
+ parseISO('2019-12-31T23:59:59').toString(),
+ 'Tue Dec 31 2019 23:59:59 GMT+1100 (Australian Eastern Daylight Time)'
+)
+assert.equal(
+ parseISO('2020-02-29T23:59:59').toString(),
+ 'Sat Feb 29 2020 23:59:59 GMT+1100 (Australian Eastern Daylight Time)'
+)
diff --git a/date-fns/test/dst/tzOffsetTransitions.ts b/date-fns/test/dst/tzOffsetTransitions.ts
new file mode 100644
index 0000000..3e5521b
--- /dev/null
+++ b/date-fns/test/dst/tzOffsetTransitions.ts
@@ -0,0 +1,143 @@
+type PartialInterval = {
+ start: Date | undefined
+ end: Date | undefined
+}
+
+/**
+ * Fetch the start and end of DST for the local time
+ * zone in a given year.
+ * We'll assume that DST start & end are the first
+ * forward and the last back transitions in the year,
+ * except transitions in Jan or Dec which are likely
+ * to be permanent TZ changes rather than DST changes.
+ * @param {number} year
+ * @returns object with two Date-valued properties:
+ * - `start` is the first instant of DST in the Spring,
+ * or undefined if there's no DST in this year.
+ * - `end` is the first instant of standard time
+ * in the Fall, or undefined if there's no DST in
+ * this year.
+ */
+export function getDstTransitions(year: number): PartialInterval {
+ const result: PartialInterval = {
+ start: undefined,
+ end: undefined
+ }
+ const transitions = getTzOffsetTransitions(year)
+ for (let i = 0; i < transitions.length; i++) {
+ const t = transitions[i]
+ const month = t.date.getMonth()
+ if (month > 0 && month < 11) {
+ if (t.type === 'forward') result.start = t.date
+ if (t.type === 'back' && !result.end) result.end = t.date
+ }
+ }
+ return result
+}
+
+function isValidDate(date: unknown): date is Date {
+ return date instanceof Date && !isNaN(date.getTime())
+}
+
+const MINUTE = 1000 * 60
+
+function firstTickInLocalDay(date: Date): Date {
+ const dateNumber = date.getDate()
+ let prev = date
+ let d = date
+ do {
+ prev = d
+ d = new Date(d.getTime() - MINUTE)
+ } while (dateNumber === d.getDate())
+ return prev
+}
+
+function fiveMinutesLater(date: Date): Date {
+ return new Date(date.getTime() + 5 * MINUTE)
+}
+
+function oneDayLater(date: Date): Date {
+ const d = new Date(date)
+ d.setDate(d.getDate() + 1)
+ return firstTickInLocalDay(d)
+}
+
+function previousTickTimezoneOffset(date: Date): number {
+ const d = new Date(date.getTime() - 1)
+ return d.getTimezoneOffset()
+}
+
+/**
+ * Fetch all timezone-offset transitions in a given
+ * year. These are almost always DST transitions,
+ * but sometimes there are non-DST changes, e.g.
+ * when a country changes its time zone
+ * @param {number} year
+ * @returns array of objects, each with the following
+ * propeerties:
+ * - `date` - a `Date` representing the first instant
+ * when the new timezone offset is effective.
+ * - `type` - either `forward` for skippnig time like
+ * the Spring transition to DST.
+ * - `before` - the timezone offset before the tranition.
+ * For example, the UTC-0400 offset will return -240.
+ * To match how times are displayed in ISO 8601 format,
+ * the sign of this value is reversed from the return
+ * value of `Date.getTimezoneOffset`.
+ * - `after` - the timezone offset after the tranition.
+ * Examples and caveats are the same as `before`.
+
+ */
+export function getTzOffsetTransitions(year: number) {
+ // start at the end of the previous day
+ let date = firstTickInLocalDay(new Date(year, 0, 1))
+ if (!isValidDate(date)) {
+ throw new Error('Invalid Date')
+ }
+ let baseTzOffset = previousTickTimezoneOffset(date)
+ const transitions = []
+ do {
+ let tzOffset = date.getTimezoneOffset()
+ if (baseTzOffset !== tzOffset) {
+ if (tzOffset !== previousTickTimezoneOffset(date)) {
+ // Transition is the first tick of a local day.
+ transitions.push({
+ date: date,
+ type: tzOffset < baseTzOffset ? 'forward' : 'back',
+ before: -baseTzOffset,
+ after: -tzOffset
+ })
+ baseTzOffset = tzOffset
+ } else {
+ // transition was not at the start of the day, so it must have happened
+ // yesterday. Back up one day and find the minute where it happened.
+ let transitionDate = new Date(date.getTime())
+ transitionDate.setDate(transitionDate.getDate() - 1)
+
+ // Iterate through each 5 mins of the day until we find a transition.
+ // TODO: this could be optimized to search hours then minutes or by or
+ // by using a binary search.
+ const dayNumber = transitionDate.getDate()
+ while (
+ isValidDate(transitionDate) &&
+ transitionDate.getDate() === dayNumber
+ ) {
+ tzOffset = transitionDate.getTimezoneOffset()
+ if (baseTzOffset !== tzOffset) {
+ transitions.push({
+ date: transitionDate,
+ type: tzOffset < baseTzOffset ? 'forward' : 'back',
+ before: -baseTzOffset,
+ after: -tzOffset
+ })
+ baseTzOffset = tzOffset
+ break // assuming only 1 transition per day
+ }
+ transitionDate = fiveMinutesLater(transitionDate)
+ }
+ }
+ }
+ date = oneDayLater(date)
+ } while (date.getFullYear() === year)
+ return transitions
+}
diff --git a/date-fns/test/formatISO/india.js b/date-fns/test/formatISO/india.js
new file mode 100644
index 0000000..6062069
--- /dev/null
+++ b/date-fns/test/formatISO/india.js
@@ -0,0 +1,13 @@
+import formatISO from '../../src/formatISO'
+import assert from 'assert'
+
+if (process.env.TZ !== 'Asia/Kolkata')
+ throw new Error('The test must be run with TZ=Asia/Kolkata')
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+assert.equal(
+ formatISO(new Date(1986, 3, 4, 10, 33, 1)),
+ '1986-04-04T10:33:01+05:30'
+)
diff --git a/date-fns/test/formatRFC3339/australia.js b/date-fns/test/formatRFC3339/australia.js
new file mode 100644
index 0000000..e657c21
--- /dev/null
+++ b/date-fns/test/formatRFC3339/australia.js
@@ -0,0 +1,30 @@
+import formatRFC3339 from '../../src/formatRFC3339'
+import assert from 'assert'
+
+/**
+ * Australia/Eucla (Australia) is interesting for its positive to UTC time, with 45 minutes offset.
+ * It's independent from Standard and Summer time.
+ */
+if (process.env.TZ !== 'Australia/Eucla')
+ throw new Error('The test must be run with TZ=Australia/Eucla (UTC+08:45)')
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+// Old date
+assert.equal(
+ formatRFC3339(new Date(1986, 3, 4, 10, 33, 1)),
+ '1986-04-04T10:33:01+08:45'
+)
+
+// Standard time (Eucla have +08:45)
+assert.equal(
+ formatRFC3339(new Date(2020, 0, 23, 5, 0, 54)),
+ '2020-01-23T05:00:54+08:45'
+)
+
+// Summer time (Eucla have +08:45)
+assert.equal(
+ formatRFC3339(new Date(2020, 6, 30, 20, 59, 1)),
+ '2020-07-30T20:59:01+08:45'
+)
diff --git a/date-fns/test/formatRFC3339/india.js b/date-fns/test/formatRFC3339/india.js
new file mode 100644
index 0000000..cc77bba
--- /dev/null
+++ b/date-fns/test/formatRFC3339/india.js
@@ -0,0 +1,30 @@
+import formatRFC3339 from '../../src/formatRFC3339'
+import assert from 'assert'
+
+/**
+ * Asia/Kolkata (India) is interesting for its positive to UTC time, with 30 minutes offset.
+ * It's independent from Standard and Summer time.
+ */
+if (process.env.TZ !== 'Asia/Kolkata')
+ throw new Error('The test must be run with TZ=Asia/Kolkata')
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+// Old date
+assert.equal(
+ formatRFC3339(new Date(1986, 3, 4, 10, 33, 1)),
+ '1986-04-04T10:33:01+05:30'
+)
+
+// Standard time (india always have +05:30)
+assert.equal(
+ formatRFC3339(new Date(2020, 0, 23, 5, 0, 54)),
+ '2020-01-23T05:00:54+05:30'
+)
+
+// Summer time (india always have +05:30)
+assert.equal(
+ formatRFC3339(new Date(2020, 6, 30, 20, 59, 1)),
+ '2020-07-30T20:59:01+05:30'
+)
diff --git a/date-fns/test/formatRFC3339/newfoundland.js b/date-fns/test/formatRFC3339/newfoundland.js
new file mode 100644
index 0000000..f605a0b
--- /dev/null
+++ b/date-fns/test/formatRFC3339/newfoundland.js
@@ -0,0 +1,32 @@
+import formatRFC3339 from '../../src/formatRFC3339'
+import assert from 'assert'
+
+/**
+ * America/St_Johns (Canada) is interesting for its negative to UTC time, with 30 minutes offset.
+ * Bonus: It depends on Standard and Summer time.
+ */
+if (process.env.TZ !== 'America/St_Johns')
+ throw new Error(
+ 'The test must be run with TZ=America/St_Johns (UTC-02:30 or UTC-03:30)'
+ )
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+// Old date
+assert.equal(
+ formatRFC3339(new Date(1986, 3, 4, 10, 33, 1)),
+ '1986-04-04T10:33:01-03:30'
+)
+
+// Standard time (Newfoundland and Labrador have -03:30)
+assert.equal(
+ formatRFC3339(new Date(2020, 0, 23, 5, 0, 54)),
+ '2020-01-23T05:00:54-03:30'
+)
+
+// Summer time (Newfoundland and Labrador have -02:30)
+assert.equal(
+ formatRFC3339(new Date(2020, 6, 30, 20, 59, 1)),
+ '2020-07-30T20:59:01-02:30'
+)
diff --git a/date-fns/test/formatRFC3339/newzealand.js b/date-fns/test/formatRFC3339/newzealand.js
new file mode 100644
index 0000000..4c21613
--- /dev/null
+++ b/date-fns/test/formatRFC3339/newzealand.js
@@ -0,0 +1,32 @@
+import formatRFC3339 from '../../src/formatRFC3339'
+import assert from 'assert'
+
+/**
+ * Pacific/Chatham (Chatham Islands, New Zealand) is interesting for being the farthest from UTC.
+ * It depends on Standard (+12:45) and Summer time (+13:45).
+ */
+if (process.env.TZ !== 'Pacific/Chatham')
+ throw new Error(
+ 'The test must be run with TZ=Pacific/Chatham (UTC+12:45 or UTC+13:45)'
+ )
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+// Old date
+assert.equal(
+ formatRFC3339(new Date(1986, 3, 4, 10, 33, 1)),
+ '1986-04-04T10:33:01+12:45'
+)
+
+// Standard time (Chatham have +13:45)
+assert.equal(
+ formatRFC3339(new Date(2020, 8, 27, 20, 59, 1)),
+ '2020-09-27T20:59:01+13:45'
+)
+
+// Summer time (Chatham have +12:45)
+assert.equal(
+ formatRFC3339(new Date(2020, 3, 5, 5, 0, 54)),
+ '2020-04-05T05:00:54+12:45'
+)
diff --git a/date-fns/test/formatRFC3339/poland.js b/date-fns/test/formatRFC3339/poland.js
new file mode 100644
index 0000000..85c9048
--- /dev/null
+++ b/date-fns/test/formatRFC3339/poland.js
@@ -0,0 +1,31 @@
+import formatRFC3339 from '../../src/formatRFC3339'
+import assert from 'assert'
+
+/**
+ * Europe/Warsaw (Poland) is regular full-hours timezone
+ */
+if (process.env.TZ !== 'Europe/Warsaw')
+ throw new Error(
+ 'The test must be run with TZ=Europe/Warsaw (UTC+02:00 or UTC+01:00)'
+ )
+
+if (parseInt(process.version.match(/^v(\d+)\./)[1]) < 10)
+ throw new Error('The test must be run on Node.js version >= 10')
+
+// Old date
+assert.equal(
+ formatRFC3339(new Date(1986, 3, 4, 10, 33, 1)),
+ '1986-04-04T10:33:01+02:00'
+)
+
+// Standard time (Warsaw have +01:00)
+assert.equal(
+ formatRFC3339(new Date(2020, 0, 23, 5, 0, 54)),
+ '2020-01-23T05:00:54+01:00'
+)
+
+// Summer time (Warsaw have +02:00)
+assert.equal(
+ formatRFC3339(new Date(2020, 6, 30, 20, 59, 1)),
+ '2020-07-30T20:59:01+02:00'
+)
diff --git a/date-fns/testWithoutLocales.js b/date-fns/testWithoutLocales.js
new file mode 100644
index 0000000..3552b7b
--- /dev/null
+++ b/date-fns/testWithoutLocales.js
@@ -0,0 +1,7 @@
+var testsContext = require.context('./src/', true, /\/test\.js$/)
+testsContext
+ .keys()
+ .filter(function (test) {
+ return !test.match(/\.\/locale\//)
+ })
+ .forEach(testsContext)
diff --git a/date-fns/tsconfig.json b/date-fns/tsconfig.json
new file mode 100644
index 0000000..0b07ae8
--- /dev/null
+++ b/date-fns/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "target": "es6",
+ "lib": ["dom", "es2017", "es2018.promise"],
+ "strict": true,
+ "moduleResolution": "node",
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "noImplicitReturns": true,
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictNullChecks": true,
+ "importHelpers": true,
+ "baseUrl": ".",
+ "allowSyntheticDefaultImports": true,
+ "esModuleInterop": true,
+ "allowJs": true
+ },
+ "exclude": ["node_modules", "dist", "tmp"]
+}
diff --git a/date-fns/typings.d.ts b/date-fns/typings.d.ts
new file mode 100644
index 0000000..f80022c
--- /dev/null
+++ b/date-fns/typings.d.ts
@@ -0,0 +1,22036 @@
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+// FP Interfaces
+
+interface CurriedFn1<A, R> {
+ (a: A): R
+}
+
+interface CurriedFn2<A, B, R> {
+ (a: A): CurriedFn1<B, R>
+ (a: A, b: B): R
+}
+
+interface CurriedFn3<A, B, C, R> {
+ (a: A): CurriedFn2<B, C, R>
+ (a: A, b: B): CurriedFn1<C, R>
+ (a: A, b: B, c: C): R
+}
+
+interface CurriedFn4<A, B, C, D, R> {
+ (a: A): CurriedFn3<B, C, D, R>
+ (a: A, b: B): CurriedFn2<C, D, R>
+ (a: A, b: B, c: C): CurriedFn1<D, R>
+ (a: A, b: B, c: C, d: D): R
+}
+
+// Type Aliases
+
+type Interval = {
+ start: Date | number
+ end: Date | number
+}
+type IntervalAliased = Interval
+
+type Locale = {
+ code?: string
+ formatDistance?: (...args: Array<any>) => any
+ formatRelative?: (...args: Array<any>) => any
+ localize?: {
+ ordinalNumber: (...args: Array<any>) => any
+ era: (...args: Array<any>) => any
+ quarter: (...args: Array<any>) => any
+ month: (...args: Array<any>) => any
+ day: (...args: Array<any>) => any
+ dayPeriod: (...args: Array<any>) => any
+ }
+ formatLong?: {
+ date: (...args: Array<any>) => any
+ time: (...args: Array<any>) => any
+ dateTime: (...args: Array<any>) => any
+ }
+ match?: {
+ ordinalNumber: (...args: Array<any>) => any
+ era: (...args: Array<any>) => any
+ quarter: (...args: Array<any>) => any
+ month: (...args: Array<any>) => any
+ day: (...args: Array<any>) => any
+ dayPeriod: (...args: Array<any>) => any
+ }
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+}
+type LocaleAliased = Locale
+
+type Duration = {
+ years?: number
+ months?: number
+ weeks?: number
+ days?: number
+ hours?: number
+ minutes?: number
+ seconds?: number
+}
+type DurationAliased = Duration
+
+type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
+type DayAliased = Day
+
+// Exported Type Aliases
+
+declare module 'date-fns' {
+ export type Interval = IntervalAliased
+
+ export type Locale = LocaleAliased
+
+ export type Duration = DurationAliased
+
+ export type Day = DayAliased
+}
+
+// Regular Functions
+
+declare module 'date-fns' {
+ function add(date: Date | number, duration: Duration): Date
+ namespace add {}
+
+ function addBusinessDays(date: Date | number, amount: number): Date
+ namespace addBusinessDays {}
+
+ function addDays(date: Date | number, amount: number): Date
+ namespace addDays {}
+
+ function addHours(date: Date | number, amount: number): Date
+ namespace addHours {}
+
+ function addISOWeekYears(date: Date | number, amount: number): Date
+ namespace addISOWeekYears {}
+
+ function addMilliseconds(date: Date | number, amount: number): Date
+ namespace addMilliseconds {}
+
+ function addMinutes(date: Date | number, amount: number): Date
+ namespace addMinutes {}
+
+ function addMonths(date: Date | number, amount: number): Date
+ namespace addMonths {}
+
+ function addQuarters(date: Date | number, amount: number): Date
+ namespace addQuarters {}
+
+ function addSeconds(date: Date | number, amount: number): Date
+ namespace addSeconds {}
+
+ function addWeeks(date: Date | number, amount: number): Date
+ namespace addWeeks {}
+
+ function addYears(date: Date | number, amount: number): Date
+ namespace addYears {}
+
+ function areIntervalsOverlapping(
+ intervalLeft: Interval,
+ intervalRight: Interval,
+ options?: {
+ inclusive?: boolean
+ }
+ ): boolean
+ namespace areIntervalsOverlapping {}
+
+ function closestIndexTo(
+ dateToCompare: Date | number,
+ datesArray: (Date | number)[]
+ ): number
+ namespace closestIndexTo {}
+
+ function closestTo(
+ dateToCompare: Date | number,
+ datesArray: (Date | number)[]
+ ): Date
+ namespace closestTo {}
+
+ function compareAsc(dateLeft: Date | number, dateRight: Date | number): number
+ namespace compareAsc {}
+
+ function compareDesc(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace compareDesc {}
+
+ function daysToWeeks(days: number): number
+ namespace daysToWeeks {}
+
+ function differenceInBusinessDays(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInBusinessDays {}
+
+ function differenceInCalendarDays(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarDays {}
+
+ function differenceInCalendarISOWeeks(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarISOWeeks {}
+
+ function differenceInCalendarISOWeekYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarISOWeekYears {}
+
+ function differenceInCalendarMonths(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarMonths {}
+
+ function differenceInCalendarQuarters(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarQuarters {}
+
+ function differenceInCalendarWeeks(
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): number
+ namespace differenceInCalendarWeeks {}
+
+ function differenceInCalendarYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarYears {}
+
+ function differenceInDays(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInDays {}
+
+ function differenceInHours(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInHours {}
+
+ function differenceInISOWeekYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInISOWeekYears {}
+
+ function differenceInMilliseconds(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInMilliseconds {}
+
+ function differenceInMinutes(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInMinutes {}
+
+ function differenceInMonths(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInMonths {}
+
+ function differenceInQuarters(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInQuarters {}
+
+ function differenceInSeconds(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInSeconds {}
+
+ function differenceInWeeks(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInWeeks {}
+
+ function differenceInYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInYears {}
+
+ function eachDayOfInterval(
+ interval: Interval,
+ options?: {
+ step?: number
+ }
+ ): Date[]
+ namespace eachDayOfInterval {}
+
+ function eachHourOfInterval(
+ interval: Interval,
+ options?: {
+ step?: number
+ }
+ ): Date[]
+ namespace eachHourOfInterval {}
+
+ function eachMinuteOfInterval(
+ interval: Interval,
+ options?: {
+ step?: number
+ }
+ ): Date[]
+ namespace eachMinuteOfInterval {}
+
+ function eachMonthOfInterval(interval: Interval): Date[]
+ namespace eachMonthOfInterval {}
+
+ function eachQuarterOfInterval(interval: Interval): Date[]
+ namespace eachQuarterOfInterval {}
+
+ function eachWeekendOfInterval(interval: Interval): Date[]
+ namespace eachWeekendOfInterval {}
+
+ function eachWeekendOfMonth(date: Date | number): Date[]
+ namespace eachWeekendOfMonth {}
+
+ function eachWeekendOfYear(date: Date | number): Date[]
+ namespace eachWeekendOfYear {}
+
+ function eachWeekOfInterval(
+ interval: Interval,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date[]
+ namespace eachWeekOfInterval {}
+
+ function eachYearOfInterval(interval: Interval): Date[]
+ namespace eachYearOfInterval {}
+
+ function endOfDay(date: Date | number): Date
+ namespace endOfDay {}
+
+ function endOfDecade(
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2
+ }
+ ): Date
+ namespace endOfDecade {}
+
+ function endOfHour(date: Date | number): Date
+ namespace endOfHour {}
+
+ function endOfISOWeek(date: Date | number): Date
+ namespace endOfISOWeek {}
+
+ function endOfISOWeekYear(date: Date | number): Date
+ namespace endOfISOWeekYear {}
+
+ function endOfMinute(date: Date | number): Date
+ namespace endOfMinute {}
+
+ function endOfMonth(date: Date | number): Date
+ namespace endOfMonth {}
+
+ function endOfQuarter(date: Date | number): Date
+ namespace endOfQuarter {}
+
+ function endOfSecond(date: Date | number): Date
+ namespace endOfSecond {}
+
+ function endOfToday(): Date
+ namespace endOfToday {}
+
+ function endOfTomorrow(): Date
+ namespace endOfTomorrow {}
+
+ function endOfWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+ namespace endOfWeek {}
+
+ function endOfYear(date: Date | number): Date
+ namespace endOfYear {}
+
+ function endOfYesterday(): Date
+ namespace endOfYesterday {}
+
+ function format(
+ date: Date | number,
+ format: string,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: number
+ useAdditionalWeekYearTokens?: boolean
+ useAdditionalDayOfYearTokens?: boolean
+ }
+ ): string
+ namespace format {}
+
+ function formatDistance(
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ includeSeconds?: boolean
+ addSuffix?: boolean
+ locale?: Locale
+ }
+ ): string
+ namespace formatDistance {}
+
+ function formatDistanceStrict(
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ addSuffix?: boolean
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'
+ roundingMethod?: 'floor' | 'ceil' | 'round'
+ locale?: Locale
+ }
+ ): string
+ namespace formatDistanceStrict {}
+
+ function formatDistanceToNow(
+ date: Date | number,
+ options?: {
+ includeSeconds?: boolean
+ addSuffix?: boolean
+ locale?: Locale
+ }
+ ): string
+ namespace formatDistanceToNow {}
+
+ function formatDistanceToNowStrict(
+ date: Date | number,
+ options?: {
+ addSuffix?: boolean
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'
+ roundingMethod?: 'floor' | 'ceil' | 'round'
+ locale?: Locale
+ }
+ ): string
+ namespace formatDistanceToNowStrict {}
+
+ function formatDuration(
+ duration: Duration,
+ options?: {
+ format?: string[]
+ zero?: boolean
+ delimiter?: string
+ locale?: Locale
+ }
+ ): string
+ namespace formatDuration {}
+
+ function formatISO(
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic'
+ representation?: 'complete' | 'date' | 'time'
+ }
+ ): string
+ namespace formatISO {}
+
+ function formatISO9075(
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic'
+ representation?: 'complete' | 'date' | 'time'
+ }
+ ): string
+ namespace formatISO9075 {}
+
+ function formatISODuration(duration: Duration): string
+ namespace formatISODuration {}
+
+ function formatRelative(
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): string
+ namespace formatRelative {}
+
+ function formatRFC3339(
+ date: Date | number,
+ options?: {
+ fractionDigits?: 0 | 1 | 2 | 3
+ }
+ ): string
+ namespace formatRFC3339 {}
+
+ function formatRFC7231(date: Date | number): string
+ namespace formatRFC7231 {}
+
+ function fromUnixTime(unixTime: number): Date
+ namespace fromUnixTime {}
+
+ function getDate(date: Date | number): number
+ namespace getDate {}
+
+ function getDay(date: Date | number): 0 | 1 | 2 | 3 | 4 | 5 | 6
+ namespace getDay {}
+
+ function getDayOfYear(date: Date | number): number
+ namespace getDayOfYear {}
+
+ function getDaysInMonth(date: Date | number): number
+ namespace getDaysInMonth {}
+
+ function getDaysInYear(date: Date | number): number
+ namespace getDaysInYear {}
+
+ function getDecade(date: Date | number): number
+ namespace getDecade {}
+
+ function getHours(date: Date | number): number
+ namespace getHours {}
+
+ function getISODay(date: Date | number): number
+ namespace getISODay {}
+
+ function getISOWeek(date: Date | number): number
+ namespace getISOWeek {}
+
+ function getISOWeeksInYear(date: Date | number): number
+ namespace getISOWeeksInYear {}
+
+ function getISOWeekYear(date: Date | number): number
+ namespace getISOWeekYear {}
+
+ function getMilliseconds(date: Date | number): number
+ namespace getMilliseconds {}
+
+ function getMinutes(date: Date | number): number
+ namespace getMinutes {}
+
+ function getMonth(date: Date | number): number
+ namespace getMonth {}
+
+ function getOverlappingDaysInIntervals(
+ intervalLeft: Interval,
+ intervalRight: Interval
+ ): number
+ namespace getOverlappingDaysInIntervals {}
+
+ function getQuarter(date: Date | number): number
+ namespace getQuarter {}
+
+ function getSeconds(date: Date | number): number
+ namespace getSeconds {}
+
+ function getTime(date: Date | number): number
+ namespace getTime {}
+
+ function getUnixTime(date: Date | number): number
+ namespace getUnixTime {}
+
+ function getWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): number
+ namespace getWeek {}
+
+ function getWeekOfMonth(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): number
+ namespace getWeekOfMonth {}
+
+ function getWeeksInMonth(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): number
+ namespace getWeeksInMonth {}
+
+ function getWeekYear(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): number
+ namespace getWeekYear {}
+
+ function getYear(date: Date | number): number
+ namespace getYear {}
+
+ function hoursToMilliseconds(hours: number): number
+ namespace hoursToMilliseconds {}
+
+ function hoursToMinutes(hours: number): number
+ namespace hoursToMinutes {}
+
+ function hoursToSeconds(hours: number): number
+ namespace hoursToSeconds {}
+
+ function intervalToDuration(interval: Interval): Duration
+ namespace intervalToDuration {}
+
+ function intlFormat(
+ argument: Date | number,
+ formatOptions?: {
+ localeMatcher?: 'lookup' | 'best fit'
+ weekday?: 'narrow' | 'short' | 'long'
+ era?: 'narrow' | 'short' | 'long'
+ year?: 'numeric' | '2-digit'
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long'
+ day?: 'numeric' | '2-digit'
+ hour?: 'numeric' | '2-digit'
+ minute?: 'numeric' | '2-digit'
+ second?: 'numeric' | '2-digit'
+ timeZoneName?: 'short' | 'long'
+ formatMatcher?: 'basic' | 'best fit'
+ hour12?: boolean
+ timeZone?: string
+ },
+ localeOptions?: {
+ locale?: string | string[]
+ }
+ ): string
+ namespace intlFormat {}
+
+ function isAfter(date: Date | number, dateToCompare: Date | number): boolean
+ namespace isAfter {}
+
+ function isBefore(date: Date | number, dateToCompare: Date | number): boolean
+ namespace isBefore {}
+
+ function isDate(value: any): boolean
+ namespace isDate {}
+
+ function isEqual(dateLeft: Date | number, dateRight: Date | number): boolean
+ namespace isEqual {}
+
+ function isExists(year: number, month: number, day: number): boolean
+ namespace isExists {}
+
+ function isFirstDayOfMonth(date: Date | number): boolean
+ namespace isFirstDayOfMonth {}
+
+ function isFriday(date: Date | number): boolean
+ namespace isFriday {}
+
+ function isFuture(date: Date | number): boolean
+ namespace isFuture {}
+
+ function isLastDayOfMonth(date: Date | number): boolean
+ namespace isLastDayOfMonth {}
+
+ function isLeapYear(date: Date | number): boolean
+ namespace isLeapYear {}
+
+ function isMatch(
+ dateString: string,
+ formatString: string,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ useAdditionalWeekYearTokens?: boolean
+ useAdditionalDayOfYearTokens?: boolean
+ }
+ ): boolean
+ namespace isMatch {}
+
+ function isMonday(date: Date | number): boolean
+ namespace isMonday {}
+
+ function isPast(date: Date | number): boolean
+ namespace isPast {}
+
+ function isSameDay(dateLeft: Date | number, dateRight: Date | number): boolean
+ namespace isSameDay {}
+
+ function isSameHour(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameHour {}
+
+ function isSameISOWeek(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameISOWeek {}
+
+ function isSameISOWeekYear(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameISOWeekYear {}
+
+ function isSameMinute(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameMinute {}
+
+ function isSameMonth(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameMonth {}
+
+ function isSameQuarter(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameQuarter {}
+
+ function isSameSecond(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameSecond {}
+
+ function isSameWeek(
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): boolean
+ namespace isSameWeek {}
+
+ function isSameYear(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameYear {}
+
+ function isSaturday(date: Date | number): boolean
+ namespace isSaturday {}
+
+ function isSunday(date: Date | number): boolean
+ namespace isSunday {}
+
+ function isThisHour(date: Date | number): boolean
+ namespace isThisHour {}
+
+ function isThisISOWeek(date: Date | number): boolean
+ namespace isThisISOWeek {}
+
+ function isThisMinute(date: Date | number): boolean
+ namespace isThisMinute {}
+
+ function isThisMonth(date: Date | number): boolean
+ namespace isThisMonth {}
+
+ function isThisQuarter(date: Date | number): boolean
+ namespace isThisQuarter {}
+
+ function isThisSecond(date: Date | number): boolean
+ namespace isThisSecond {}
+
+ function isThisWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): boolean
+ namespace isThisWeek {}
+
+ function isThisYear(date: Date | number): boolean
+ namespace isThisYear {}
+
+ function isThursday(date: Date | number): boolean
+ namespace isThursday {}
+
+ function isToday(date: Date | number): boolean
+ namespace isToday {}
+
+ function isTomorrow(date: Date | number): boolean
+ namespace isTomorrow {}
+
+ function isTuesday(date: Date | number): boolean
+ namespace isTuesday {}
+
+ function isValid(date: any): boolean
+ namespace isValid {}
+
+ function isWednesday(date: Date | number): boolean
+ namespace isWednesday {}
+
+ function isWeekend(date: Date | number): boolean
+ namespace isWeekend {}
+
+ function isWithinInterval(date: Date | number, interval: Interval): boolean
+ namespace isWithinInterval {}
+
+ function isYesterday(date: Date | number): boolean
+ namespace isYesterday {}
+
+ function lastDayOfDecade(date: Date | number): Date
+ namespace lastDayOfDecade {}
+
+ function lastDayOfISOWeek(date: Date | number): Date
+ namespace lastDayOfISOWeek {}
+
+ function lastDayOfISOWeekYear(date: Date | number): Date
+ namespace lastDayOfISOWeekYear {}
+
+ function lastDayOfMonth(date: Date | number): Date
+ namespace lastDayOfMonth {}
+
+ function lastDayOfQuarter(
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2
+ }
+ ): Date
+ namespace lastDayOfQuarter {}
+
+ function lastDayOfWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+ namespace lastDayOfWeek {}
+
+ function lastDayOfYear(date: Date | number): Date
+ namespace lastDayOfYear {}
+
+ function lightFormat(date: Date | number, format: string): string
+ namespace lightFormat {}
+
+ function max(datesArray: (Date | number)[]): Date
+ namespace max {}
+
+ function milliseconds(duration: Duration): number
+ namespace milliseconds {}
+
+ function millisecondsToHours(milliseconds: number): number
+ namespace millisecondsToHours {}
+
+ function millisecondsToMinutes(milliseconds: number): number
+ namespace millisecondsToMinutes {}
+
+ function millisecondsToSeconds(milliseconds: number): number
+ namespace millisecondsToSeconds {}
+
+ function min(datesArray: (Date | number)[]): Date
+ namespace min {}
+
+ function minutesToHours(minutes: number): number
+ namespace minutesToHours {}
+
+ function minutesToMilliseconds(minutes: number): number
+ namespace minutesToMilliseconds {}
+
+ function minutesToSeconds(minutes: number): number
+ namespace minutesToSeconds {}
+
+ function monthsToQuarters(months: number): number
+ namespace monthsToQuarters {}
+
+ function monthsToYears(months: number): number
+ namespace monthsToYears {}
+
+ function nextDay(date: Date | number, day: Day): Date
+ namespace nextDay {}
+
+ function nextFriday(date: Date | number): Date
+ namespace nextFriday {}
+
+ function nextMonday(date: Date | number): Date
+ namespace nextMonday {}
+
+ function nextSaturday(date: Date | number): Date
+ namespace nextSaturday {}
+
+ function nextSunday(date: Date | number): Date
+ namespace nextSunday {}
+
+ function nextThursday(date: Date | number): Date
+ namespace nextThursday {}
+
+ function nextTuesday(date: Date | number): Date
+ namespace nextTuesday {}
+
+ function nextWednesday(date: Date | number): Date
+ namespace nextWednesday {}
+
+ function parse(
+ dateString: string,
+ formatString: string,
+ referenceDate: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ useAdditionalWeekYearTokens?: boolean
+ useAdditionalDayOfYearTokens?: boolean
+ }
+ ): Date
+ namespace parse {}
+
+ function parseISO(
+ argument: string,
+ options?: {
+ additionalDigits?: 0 | 1 | 2
+ }
+ ): Date
+ namespace parseISO {}
+
+ function parseJSON(argument: string | number | Date): Date
+ namespace parseJSON {}
+
+ function quartersToMonths(quarters: number): number
+ namespace quartersToMonths {}
+
+ function quartersToYears(quarters: number): number
+ namespace quartersToYears {}
+
+ function roundToNearestMinutes(
+ date: Date | number,
+ options?: {
+ nearestTo?: number
+ }
+ ): Date
+ namespace roundToNearestMinutes {}
+
+ function secondsToHours(seconds: number): number
+ namespace secondsToHours {}
+
+ function secondsToMilliseconds(seconds: number): number
+ namespace secondsToMilliseconds {}
+
+ function secondsToMinutes(seconds: number): number
+ namespace secondsToMinutes {}
+
+ function set(
+ date: Date | number,
+ values: {
+ year?: number
+ month?: number
+ date?: number
+ hours?: number
+ minutes?: number
+ seconds?: number
+ milliseconds?: number
+ }
+ ): Date
+ namespace set {}
+
+ function setDate(date: Date | number, dayOfMonth: number): Date
+ namespace setDate {}
+
+ function setDay(
+ date: Date | number,
+ day: number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+ namespace setDay {}
+
+ function setDayOfYear(date: Date | number, dayOfYear: number): Date
+ namespace setDayOfYear {}
+
+ function setHours(date: Date | number, hours: number): Date
+ namespace setHours {}
+
+ function setISODay(date: Date | number, day: number): Date
+ namespace setISODay {}
+
+ function setISOWeek(date: Date | number, isoWeek: number): Date
+ namespace setISOWeek {}
+
+ function setISOWeekYear(date: Date | number, isoWeekYear: number): Date
+ namespace setISOWeekYear {}
+
+ function setMilliseconds(date: Date | number, milliseconds: number): Date
+ namespace setMilliseconds {}
+
+ function setMinutes(date: Date | number, minutes: number): Date
+ namespace setMinutes {}
+
+ function setMonth(date: Date | number, month: number): Date
+ namespace setMonth {}
+
+ function setQuarter(date: Date | number, quarter: number): Date
+ namespace setQuarter {}
+
+ function setSeconds(date: Date | number, seconds: number): Date
+ namespace setSeconds {}
+
+ function setWeek(
+ date: Date | number,
+ week: number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): Date
+ namespace setWeek {}
+
+ function setWeekYear(
+ date: Date | number,
+ weekYear: number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): Date
+ namespace setWeekYear {}
+
+ function setYear(date: Date | number, year: number): Date
+ namespace setYear {}
+
+ function startOfDay(date: Date | number): Date
+ namespace startOfDay {}
+
+ function startOfDecade(date: Date | number): Date
+ namespace startOfDecade {}
+
+ function startOfHour(date: Date | number): Date
+ namespace startOfHour {}
+
+ function startOfISOWeek(date: Date | number): Date
+ namespace startOfISOWeek {}
+
+ function startOfISOWeekYear(date: Date | number): Date
+ namespace startOfISOWeekYear {}
+
+ function startOfMinute(date: Date | number): Date
+ namespace startOfMinute {}
+
+ function startOfMonth(date: Date | number): Date
+ namespace startOfMonth {}
+
+ function startOfQuarter(date: Date | number): Date
+ namespace startOfQuarter {}
+
+ function startOfSecond(date: Date | number): Date
+ namespace startOfSecond {}
+
+ function startOfToday(): Date
+ namespace startOfToday {}
+
+ function startOfTomorrow(): Date
+ namespace startOfTomorrow {}
+
+ function startOfWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+ namespace startOfWeek {}
+
+ function startOfWeekYear(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): Date
+ namespace startOfWeekYear {}
+
+ function startOfYear(date: Date | number): Date
+ namespace startOfYear {}
+
+ function startOfYesterday(): Date
+ namespace startOfYesterday {}
+
+ function sub(date: Date | number, duration: Duration): Date
+ namespace sub {}
+
+ function subBusinessDays(date: Date | number, amount: number): Date
+ namespace subBusinessDays {}
+
+ function subDays(date: Date | number, amount: number): Date
+ namespace subDays {}
+
+ function subHours(date: Date | number, amount: number): Date
+ namespace subHours {}
+
+ function subISOWeekYears(date: Date | number, amount: number): Date
+ namespace subISOWeekYears {}
+
+ function subMilliseconds(date: Date | number, amount: number): Date
+ namespace subMilliseconds {}
+
+ function subMinutes(date: Date | number, amount: number): Date
+ namespace subMinutes {}
+
+ function subMonths(date: Date | number, amount: number): Date
+ namespace subMonths {}
+
+ function subQuarters(date: Date | number, amount: number): Date
+ namespace subQuarters {}
+
+ function subSeconds(date: Date | number, amount: number): Date
+ namespace subSeconds {}
+
+ function subWeeks(date: Date | number, amount: number): Date
+ namespace subWeeks {}
+
+ function subYears(date: Date | number, amount: number): Date
+ namespace subYears {}
+
+ function toDate(argument: Date | number): Date
+ namespace toDate {}
+
+ function weeksToDays(weeks: number): number
+ namespace weeksToDays {}
+
+ function yearsToMonths(years: number): number
+ namespace yearsToMonths {}
+
+ function yearsToQuarters(years: number): number
+ namespace yearsToQuarters {}
+
+ const daysInWeek: number
+
+ const maxTime: number
+
+ const millisecondsInMinute: number
+
+ const millisecondsInHour: number
+
+ const millisecondsInSecond: number
+
+ const minTime: number
+
+ const minutesInHour: number
+
+ const monthsInQuarter: number
+
+ const monthsInYear: number
+
+ const quartersInYear: number
+
+ const secondsInHour: number
+
+ const secondsInMinute: number
+}
+
+declare module 'date-fns/add' {
+ import { add } from 'date-fns'
+ export default add
+}
+
+declare module 'date-fns/addBusinessDays' {
+ import { addBusinessDays } from 'date-fns'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/addDays' {
+ import { addDays } from 'date-fns'
+ export default addDays
+}
+
+declare module 'date-fns/addHours' {
+ import { addHours } from 'date-fns'
+ export default addHours
+}
+
+declare module 'date-fns/addISOWeekYears' {
+ import { addISOWeekYears } from 'date-fns'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/addMilliseconds' {
+ import { addMilliseconds } from 'date-fns'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/addMinutes' {
+ import { addMinutes } from 'date-fns'
+ export default addMinutes
+}
+
+declare module 'date-fns/addMonths' {
+ import { addMonths } from 'date-fns'
+ export default addMonths
+}
+
+declare module 'date-fns/addQuarters' {
+ import { addQuarters } from 'date-fns'
+ export default addQuarters
+}
+
+declare module 'date-fns/addSeconds' {
+ import { addSeconds } from 'date-fns'
+ export default addSeconds
+}
+
+declare module 'date-fns/addWeeks' {
+ import { addWeeks } from 'date-fns'
+ export default addWeeks
+}
+
+declare module 'date-fns/addYears' {
+ import { addYears } from 'date-fns'
+ export default addYears
+}
+
+declare module 'date-fns/areIntervalsOverlapping' {
+ import { areIntervalsOverlapping } from 'date-fns'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/closestIndexTo' {
+ import { closestIndexTo } from 'date-fns'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/closestTo' {
+ import { closestTo } from 'date-fns'
+ export default closestTo
+}
+
+declare module 'date-fns/compareAsc' {
+ import { compareAsc } from 'date-fns'
+ export default compareAsc
+}
+
+declare module 'date-fns/compareDesc' {
+ import { compareDesc } from 'date-fns'
+ export default compareDesc
+}
+
+declare module 'date-fns/daysToWeeks' {
+ import { daysToWeeks } from 'date-fns'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/differenceInBusinessDays' {
+ import { differenceInBusinessDays } from 'date-fns'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/differenceInCalendarDays' {
+ import { differenceInCalendarDays } from 'date-fns'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/differenceInCalendarISOWeeks' {
+ import { differenceInCalendarISOWeeks } from 'date-fns'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/differenceInCalendarISOWeekYears' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/differenceInCalendarMonths' {
+ import { differenceInCalendarMonths } from 'date-fns'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/differenceInCalendarQuarters' {
+ import { differenceInCalendarQuarters } from 'date-fns'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/differenceInCalendarWeeks' {
+ import { differenceInCalendarWeeks } from 'date-fns'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/differenceInCalendarYears' {
+ import { differenceInCalendarYears } from 'date-fns'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/differenceInDays' {
+ import { differenceInDays } from 'date-fns'
+ export default differenceInDays
+}
+
+declare module 'date-fns/differenceInHours' {
+ import { differenceInHours } from 'date-fns'
+ export default differenceInHours
+}
+
+declare module 'date-fns/differenceInISOWeekYears' {
+ import { differenceInISOWeekYears } from 'date-fns'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/differenceInMilliseconds' {
+ import { differenceInMilliseconds } from 'date-fns'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/differenceInMinutes' {
+ import { differenceInMinutes } from 'date-fns'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/differenceInMonths' {
+ import { differenceInMonths } from 'date-fns'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/differenceInQuarters' {
+ import { differenceInQuarters } from 'date-fns'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/differenceInSeconds' {
+ import { differenceInSeconds } from 'date-fns'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/differenceInWeeks' {
+ import { differenceInWeeks } from 'date-fns'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/differenceInYears' {
+ import { differenceInYears } from 'date-fns'
+ export default differenceInYears
+}
+
+declare module 'date-fns/eachDayOfInterval' {
+ import { eachDayOfInterval } from 'date-fns'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/eachHourOfInterval' {
+ import { eachHourOfInterval } from 'date-fns'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/eachMinuteOfInterval' {
+ import { eachMinuteOfInterval } from 'date-fns'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/eachMonthOfInterval' {
+ import { eachMonthOfInterval } from 'date-fns'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/eachQuarterOfInterval' {
+ import { eachQuarterOfInterval } from 'date-fns'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/eachWeekendOfInterval' {
+ import { eachWeekendOfInterval } from 'date-fns'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/eachWeekendOfMonth' {
+ import { eachWeekendOfMonth } from 'date-fns'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/eachWeekendOfYear' {
+ import { eachWeekendOfYear } from 'date-fns'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/eachWeekOfInterval' {
+ import { eachWeekOfInterval } from 'date-fns'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/eachYearOfInterval' {
+ import { eachYearOfInterval } from 'date-fns'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/endOfDay' {
+ import { endOfDay } from 'date-fns'
+ export default endOfDay
+}
+
+declare module 'date-fns/endOfDecade' {
+ import { endOfDecade } from 'date-fns'
+ export default endOfDecade
+}
+
+declare module 'date-fns/endOfHour' {
+ import { endOfHour } from 'date-fns'
+ export default endOfHour
+}
+
+declare module 'date-fns/endOfISOWeek' {
+ import { endOfISOWeek } from 'date-fns'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/endOfISOWeekYear' {
+ import { endOfISOWeekYear } from 'date-fns'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/endOfMinute' {
+ import { endOfMinute } from 'date-fns'
+ export default endOfMinute
+}
+
+declare module 'date-fns/endOfMonth' {
+ import { endOfMonth } from 'date-fns'
+ export default endOfMonth
+}
+
+declare module 'date-fns/endOfQuarter' {
+ import { endOfQuarter } from 'date-fns'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/endOfSecond' {
+ import { endOfSecond } from 'date-fns'
+ export default endOfSecond
+}
+
+declare module 'date-fns/endOfToday' {
+ import { endOfToday } from 'date-fns'
+ export default endOfToday
+}
+
+declare module 'date-fns/endOfTomorrow' {
+ import { endOfTomorrow } from 'date-fns'
+ export default endOfTomorrow
+}
+
+declare module 'date-fns/endOfWeek' {
+ import { endOfWeek } from 'date-fns'
+ export default endOfWeek
+}
+
+declare module 'date-fns/endOfYear' {
+ import { endOfYear } from 'date-fns'
+ export default endOfYear
+}
+
+declare module 'date-fns/endOfYesterday' {
+ import { endOfYesterday } from 'date-fns'
+ export default endOfYesterday
+}
+
+declare module 'date-fns/format' {
+ import { format } from 'date-fns'
+ export default format
+}
+
+declare module 'date-fns/formatDistance' {
+ import { formatDistance } from 'date-fns'
+ export default formatDistance
+}
+
+declare module 'date-fns/formatDistanceStrict' {
+ import { formatDistanceStrict } from 'date-fns'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/formatDistanceToNow' {
+ import { formatDistanceToNow } from 'date-fns'
+ export default formatDistanceToNow
+}
+
+declare module 'date-fns/formatDistanceToNowStrict' {
+ import { formatDistanceToNowStrict } from 'date-fns'
+ export default formatDistanceToNowStrict
+}
+
+declare module 'date-fns/formatDuration' {
+ import { formatDuration } from 'date-fns'
+ export default formatDuration
+}
+
+declare module 'date-fns/formatISO' {
+ import { formatISO } from 'date-fns'
+ export default formatISO
+}
+
+declare module 'date-fns/formatISO9075' {
+ import { formatISO9075 } from 'date-fns'
+ export default formatISO9075
+}
+
+declare module 'date-fns/formatISODuration' {
+ import { formatISODuration } from 'date-fns'
+ export default formatISODuration
+}
+
+declare module 'date-fns/formatRelative' {
+ import { formatRelative } from 'date-fns'
+ export default formatRelative
+}
+
+declare module 'date-fns/formatRFC3339' {
+ import { formatRFC3339 } from 'date-fns'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/formatRFC7231' {
+ import { formatRFC7231 } from 'date-fns'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/fromUnixTime' {
+ import { fromUnixTime } from 'date-fns'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/getDate' {
+ import { getDate } from 'date-fns'
+ export default getDate
+}
+
+declare module 'date-fns/getDay' {
+ import { getDay } from 'date-fns'
+ export default getDay
+}
+
+declare module 'date-fns/getDayOfYear' {
+ import { getDayOfYear } from 'date-fns'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/getDaysInMonth' {
+ import { getDaysInMonth } from 'date-fns'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/getDaysInYear' {
+ import { getDaysInYear } from 'date-fns'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/getDecade' {
+ import { getDecade } from 'date-fns'
+ export default getDecade
+}
+
+declare module 'date-fns/getHours' {
+ import { getHours } from 'date-fns'
+ export default getHours
+}
+
+declare module 'date-fns/getISODay' {
+ import { getISODay } from 'date-fns'
+ export default getISODay
+}
+
+declare module 'date-fns/getISOWeek' {
+ import { getISOWeek } from 'date-fns'
+ export default getISOWeek
+}
+
+declare module 'date-fns/getISOWeeksInYear' {
+ import { getISOWeeksInYear } from 'date-fns'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/getISOWeekYear' {
+ import { getISOWeekYear } from 'date-fns'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/getMilliseconds' {
+ import { getMilliseconds } from 'date-fns'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/getMinutes' {
+ import { getMinutes } from 'date-fns'
+ export default getMinutes
+}
+
+declare module 'date-fns/getMonth' {
+ import { getMonth } from 'date-fns'
+ export default getMonth
+}
+
+declare module 'date-fns/getOverlappingDaysInIntervals' {
+ import { getOverlappingDaysInIntervals } from 'date-fns'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/getQuarter' {
+ import { getQuarter } from 'date-fns'
+ export default getQuarter
+}
+
+declare module 'date-fns/getSeconds' {
+ import { getSeconds } from 'date-fns'
+ export default getSeconds
+}
+
+declare module 'date-fns/getTime' {
+ import { getTime } from 'date-fns'
+ export default getTime
+}
+
+declare module 'date-fns/getUnixTime' {
+ import { getUnixTime } from 'date-fns'
+ export default getUnixTime
+}
+
+declare module 'date-fns/getWeek' {
+ import { getWeek } from 'date-fns'
+ export default getWeek
+}
+
+declare module 'date-fns/getWeekOfMonth' {
+ import { getWeekOfMonth } from 'date-fns'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/getWeeksInMonth' {
+ import { getWeeksInMonth } from 'date-fns'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/getWeekYear' {
+ import { getWeekYear } from 'date-fns'
+ export default getWeekYear
+}
+
+declare module 'date-fns/getYear' {
+ import { getYear } from 'date-fns'
+ export default getYear
+}
+
+declare module 'date-fns/hoursToMilliseconds' {
+ import { hoursToMilliseconds } from 'date-fns'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/hoursToMinutes' {
+ import { hoursToMinutes } from 'date-fns'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/hoursToSeconds' {
+ import { hoursToSeconds } from 'date-fns'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/intervalToDuration' {
+ import { intervalToDuration } from 'date-fns'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/intlFormat' {
+ import { intlFormat } from 'date-fns'
+ export default intlFormat
+}
+
+declare module 'date-fns/isAfter' {
+ import { isAfter } from 'date-fns'
+ export default isAfter
+}
+
+declare module 'date-fns/isBefore' {
+ import { isBefore } from 'date-fns'
+ export default isBefore
+}
+
+declare module 'date-fns/isDate' {
+ import { isDate } from 'date-fns'
+ export default isDate
+}
+
+declare module 'date-fns/isEqual' {
+ import { isEqual } from 'date-fns'
+ export default isEqual
+}
+
+declare module 'date-fns/isExists' {
+ import { isExists } from 'date-fns'
+ export default isExists
+}
+
+declare module 'date-fns/isFirstDayOfMonth' {
+ import { isFirstDayOfMonth } from 'date-fns'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/isFriday' {
+ import { isFriday } from 'date-fns'
+ export default isFriday
+}
+
+declare module 'date-fns/isFuture' {
+ import { isFuture } from 'date-fns'
+ export default isFuture
+}
+
+declare module 'date-fns/isLastDayOfMonth' {
+ import { isLastDayOfMonth } from 'date-fns'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/isLeapYear' {
+ import { isLeapYear } from 'date-fns'
+ export default isLeapYear
+}
+
+declare module 'date-fns/isMatch' {
+ import { isMatch } from 'date-fns'
+ export default isMatch
+}
+
+declare module 'date-fns/isMonday' {
+ import { isMonday } from 'date-fns'
+ export default isMonday
+}
+
+declare module 'date-fns/isPast' {
+ import { isPast } from 'date-fns'
+ export default isPast
+}
+
+declare module 'date-fns/isSameDay' {
+ import { isSameDay } from 'date-fns'
+ export default isSameDay
+}
+
+declare module 'date-fns/isSameHour' {
+ import { isSameHour } from 'date-fns'
+ export default isSameHour
+}
+
+declare module 'date-fns/isSameISOWeek' {
+ import { isSameISOWeek } from 'date-fns'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/isSameISOWeekYear' {
+ import { isSameISOWeekYear } from 'date-fns'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/isSameMinute' {
+ import { isSameMinute } from 'date-fns'
+ export default isSameMinute
+}
+
+declare module 'date-fns/isSameMonth' {
+ import { isSameMonth } from 'date-fns'
+ export default isSameMonth
+}
+
+declare module 'date-fns/isSameQuarter' {
+ import { isSameQuarter } from 'date-fns'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/isSameSecond' {
+ import { isSameSecond } from 'date-fns'
+ export default isSameSecond
+}
+
+declare module 'date-fns/isSameWeek' {
+ import { isSameWeek } from 'date-fns'
+ export default isSameWeek
+}
+
+declare module 'date-fns/isSameYear' {
+ import { isSameYear } from 'date-fns'
+ export default isSameYear
+}
+
+declare module 'date-fns/isSaturday' {
+ import { isSaturday } from 'date-fns'
+ export default isSaturday
+}
+
+declare module 'date-fns/isSunday' {
+ import { isSunday } from 'date-fns'
+ export default isSunday
+}
+
+declare module 'date-fns/isThisHour' {
+ import { isThisHour } from 'date-fns'
+ export default isThisHour
+}
+
+declare module 'date-fns/isThisISOWeek' {
+ import { isThisISOWeek } from 'date-fns'
+ export default isThisISOWeek
+}
+
+declare module 'date-fns/isThisMinute' {
+ import { isThisMinute } from 'date-fns'
+ export default isThisMinute
+}
+
+declare module 'date-fns/isThisMonth' {
+ import { isThisMonth } from 'date-fns'
+ export default isThisMonth
+}
+
+declare module 'date-fns/isThisQuarter' {
+ import { isThisQuarter } from 'date-fns'
+ export default isThisQuarter
+}
+
+declare module 'date-fns/isThisSecond' {
+ import { isThisSecond } from 'date-fns'
+ export default isThisSecond
+}
+
+declare module 'date-fns/isThisWeek' {
+ import { isThisWeek } from 'date-fns'
+ export default isThisWeek
+}
+
+declare module 'date-fns/isThisYear' {
+ import { isThisYear } from 'date-fns'
+ export default isThisYear
+}
+
+declare module 'date-fns/isThursday' {
+ import { isThursday } from 'date-fns'
+ export default isThursday
+}
+
+declare module 'date-fns/isToday' {
+ import { isToday } from 'date-fns'
+ export default isToday
+}
+
+declare module 'date-fns/isTomorrow' {
+ import { isTomorrow } from 'date-fns'
+ export default isTomorrow
+}
+
+declare module 'date-fns/isTuesday' {
+ import { isTuesday } from 'date-fns'
+ export default isTuesday
+}
+
+declare module 'date-fns/isValid' {
+ import { isValid } from 'date-fns'
+ export default isValid
+}
+
+declare module 'date-fns/isWednesday' {
+ import { isWednesday } from 'date-fns'
+ export default isWednesday
+}
+
+declare module 'date-fns/isWeekend' {
+ import { isWeekend } from 'date-fns'
+ export default isWeekend
+}
+
+declare module 'date-fns/isWithinInterval' {
+ import { isWithinInterval } from 'date-fns'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/isYesterday' {
+ import { isYesterday } from 'date-fns'
+ export default isYesterday
+}
+
+declare module 'date-fns/lastDayOfDecade' {
+ import { lastDayOfDecade } from 'date-fns'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/lastDayOfISOWeek' {
+ import { lastDayOfISOWeek } from 'date-fns'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/lastDayOfISOWeekYear' {
+ import { lastDayOfISOWeekYear } from 'date-fns'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/lastDayOfMonth' {
+ import { lastDayOfMonth } from 'date-fns'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/lastDayOfQuarter' {
+ import { lastDayOfQuarter } from 'date-fns'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/lastDayOfWeek' {
+ import { lastDayOfWeek } from 'date-fns'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/lastDayOfYear' {
+ import { lastDayOfYear } from 'date-fns'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/lightFormat' {
+ import { lightFormat } from 'date-fns'
+ export default lightFormat
+}
+
+declare module 'date-fns/max' {
+ import { max } from 'date-fns'
+ export default max
+}
+
+declare module 'date-fns/milliseconds' {
+ import { milliseconds } from 'date-fns'
+ export default milliseconds
+}
+
+declare module 'date-fns/millisecondsToHours' {
+ import { millisecondsToHours } from 'date-fns'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/millisecondsToMinutes' {
+ import { millisecondsToMinutes } from 'date-fns'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/millisecondsToSeconds' {
+ import { millisecondsToSeconds } from 'date-fns'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/min' {
+ import { min } from 'date-fns'
+ export default min
+}
+
+declare module 'date-fns/minutesToHours' {
+ import { minutesToHours } from 'date-fns'
+ export default minutesToHours
+}
+
+declare module 'date-fns/minutesToMilliseconds' {
+ import { minutesToMilliseconds } from 'date-fns'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/minutesToSeconds' {
+ import { minutesToSeconds } from 'date-fns'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/monthsToQuarters' {
+ import { monthsToQuarters } from 'date-fns'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/monthsToYears' {
+ import { monthsToYears } from 'date-fns'
+ export default monthsToYears
+}
+
+declare module 'date-fns/nextDay' {
+ import { nextDay } from 'date-fns'
+ export default nextDay
+}
+
+declare module 'date-fns/nextFriday' {
+ import { nextFriday } from 'date-fns'
+ export default nextFriday
+}
+
+declare module 'date-fns/nextMonday' {
+ import { nextMonday } from 'date-fns'
+ export default nextMonday
+}
+
+declare module 'date-fns/nextSaturday' {
+ import { nextSaturday } from 'date-fns'
+ export default nextSaturday
+}
+
+declare module 'date-fns/nextSunday' {
+ import { nextSunday } from 'date-fns'
+ export default nextSunday
+}
+
+declare module 'date-fns/nextThursday' {
+ import { nextThursday } from 'date-fns'
+ export default nextThursday
+}
+
+declare module 'date-fns/nextTuesday' {
+ import { nextTuesday } from 'date-fns'
+ export default nextTuesday
+}
+
+declare module 'date-fns/nextWednesday' {
+ import { nextWednesday } from 'date-fns'
+ export default nextWednesday
+}
+
+declare module 'date-fns/parse' {
+ import { parse } from 'date-fns'
+ export default parse
+}
+
+declare module 'date-fns/parseISO' {
+ import { parseISO } from 'date-fns'
+ export default parseISO
+}
+
+declare module 'date-fns/parseJSON' {
+ import { parseJSON } from 'date-fns'
+ export default parseJSON
+}
+
+declare module 'date-fns/quartersToMonths' {
+ import { quartersToMonths } from 'date-fns'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/quartersToYears' {
+ import { quartersToYears } from 'date-fns'
+ export default quartersToYears
+}
+
+declare module 'date-fns/roundToNearestMinutes' {
+ import { roundToNearestMinutes } from 'date-fns'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/secondsToHours' {
+ import { secondsToHours } from 'date-fns'
+ export default secondsToHours
+}
+
+declare module 'date-fns/secondsToMilliseconds' {
+ import { secondsToMilliseconds } from 'date-fns'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/secondsToMinutes' {
+ import { secondsToMinutes } from 'date-fns'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/set' {
+ import { set } from 'date-fns'
+ export default set
+}
+
+declare module 'date-fns/setDate' {
+ import { setDate } from 'date-fns'
+ export default setDate
+}
+
+declare module 'date-fns/setDay' {
+ import { setDay } from 'date-fns'
+ export default setDay
+}
+
+declare module 'date-fns/setDayOfYear' {
+ import { setDayOfYear } from 'date-fns'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/setHours' {
+ import { setHours } from 'date-fns'
+ export default setHours
+}
+
+declare module 'date-fns/setISODay' {
+ import { setISODay } from 'date-fns'
+ export default setISODay
+}
+
+declare module 'date-fns/setISOWeek' {
+ import { setISOWeek } from 'date-fns'
+ export default setISOWeek
+}
+
+declare module 'date-fns/setISOWeekYear' {
+ import { setISOWeekYear } from 'date-fns'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/setMilliseconds' {
+ import { setMilliseconds } from 'date-fns'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/setMinutes' {
+ import { setMinutes } from 'date-fns'
+ export default setMinutes
+}
+
+declare module 'date-fns/setMonth' {
+ import { setMonth } from 'date-fns'
+ export default setMonth
+}
+
+declare module 'date-fns/setQuarter' {
+ import { setQuarter } from 'date-fns'
+ export default setQuarter
+}
+
+declare module 'date-fns/setSeconds' {
+ import { setSeconds } from 'date-fns'
+ export default setSeconds
+}
+
+declare module 'date-fns/setWeek' {
+ import { setWeek } from 'date-fns'
+ export default setWeek
+}
+
+declare module 'date-fns/setWeekYear' {
+ import { setWeekYear } from 'date-fns'
+ export default setWeekYear
+}
+
+declare module 'date-fns/setYear' {
+ import { setYear } from 'date-fns'
+ export default setYear
+}
+
+declare module 'date-fns/startOfDay' {
+ import { startOfDay } from 'date-fns'
+ export default startOfDay
+}
+
+declare module 'date-fns/startOfDecade' {
+ import { startOfDecade } from 'date-fns'
+ export default startOfDecade
+}
+
+declare module 'date-fns/startOfHour' {
+ import { startOfHour } from 'date-fns'
+ export default startOfHour
+}
+
+declare module 'date-fns/startOfISOWeek' {
+ import { startOfISOWeek } from 'date-fns'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/startOfISOWeekYear' {
+ import { startOfISOWeekYear } from 'date-fns'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/startOfMinute' {
+ import { startOfMinute } from 'date-fns'
+ export default startOfMinute
+}
+
+declare module 'date-fns/startOfMonth' {
+ import { startOfMonth } from 'date-fns'
+ export default startOfMonth
+}
+
+declare module 'date-fns/startOfQuarter' {
+ import { startOfQuarter } from 'date-fns'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/startOfSecond' {
+ import { startOfSecond } from 'date-fns'
+ export default startOfSecond
+}
+
+declare module 'date-fns/startOfToday' {
+ import { startOfToday } from 'date-fns'
+ export default startOfToday
+}
+
+declare module 'date-fns/startOfTomorrow' {
+ import { startOfTomorrow } from 'date-fns'
+ export default startOfTomorrow
+}
+
+declare module 'date-fns/startOfWeek' {
+ import { startOfWeek } from 'date-fns'
+ export default startOfWeek
+}
+
+declare module 'date-fns/startOfWeekYear' {
+ import { startOfWeekYear } from 'date-fns'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/startOfYear' {
+ import { startOfYear } from 'date-fns'
+ export default startOfYear
+}
+
+declare module 'date-fns/startOfYesterday' {
+ import { startOfYesterday } from 'date-fns'
+ export default startOfYesterday
+}
+
+declare module 'date-fns/sub' {
+ import { sub } from 'date-fns'
+ export default sub
+}
+
+declare module 'date-fns/subBusinessDays' {
+ import { subBusinessDays } from 'date-fns'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/subDays' {
+ import { subDays } from 'date-fns'
+ export default subDays
+}
+
+declare module 'date-fns/subHours' {
+ import { subHours } from 'date-fns'
+ export default subHours
+}
+
+declare module 'date-fns/subISOWeekYears' {
+ import { subISOWeekYears } from 'date-fns'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/subMilliseconds' {
+ import { subMilliseconds } from 'date-fns'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/subMinutes' {
+ import { subMinutes } from 'date-fns'
+ export default subMinutes
+}
+
+declare module 'date-fns/subMonths' {
+ import { subMonths } from 'date-fns'
+ export default subMonths
+}
+
+declare module 'date-fns/subQuarters' {
+ import { subQuarters } from 'date-fns'
+ export default subQuarters
+}
+
+declare module 'date-fns/subSeconds' {
+ import { subSeconds } from 'date-fns'
+ export default subSeconds
+}
+
+declare module 'date-fns/subWeeks' {
+ import { subWeeks } from 'date-fns'
+ export default subWeeks
+}
+
+declare module 'date-fns/subYears' {
+ import { subYears } from 'date-fns'
+ export default subYears
+}
+
+declare module 'date-fns/toDate' {
+ import { toDate } from 'date-fns'
+ export default toDate
+}
+
+declare module 'date-fns/weeksToDays' {
+ import { weeksToDays } from 'date-fns'
+ export default weeksToDays
+}
+
+declare module 'date-fns/yearsToMonths' {
+ import { yearsToMonths } from 'date-fns'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/yearsToQuarters' {
+ import { yearsToQuarters } from 'date-fns'
+ export default yearsToQuarters
+}
+
+declare module 'date-fns/add/index' {
+ import { add } from 'date-fns'
+ export default add
+}
+
+declare module 'date-fns/addBusinessDays/index' {
+ import { addBusinessDays } from 'date-fns'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/addDays/index' {
+ import { addDays } from 'date-fns'
+ export default addDays
+}
+
+declare module 'date-fns/addHours/index' {
+ import { addHours } from 'date-fns'
+ export default addHours
+}
+
+declare module 'date-fns/addISOWeekYears/index' {
+ import { addISOWeekYears } from 'date-fns'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/addMilliseconds/index' {
+ import { addMilliseconds } from 'date-fns'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/addMinutes/index' {
+ import { addMinutes } from 'date-fns'
+ export default addMinutes
+}
+
+declare module 'date-fns/addMonths/index' {
+ import { addMonths } from 'date-fns'
+ export default addMonths
+}
+
+declare module 'date-fns/addQuarters/index' {
+ import { addQuarters } from 'date-fns'
+ export default addQuarters
+}
+
+declare module 'date-fns/addSeconds/index' {
+ import { addSeconds } from 'date-fns'
+ export default addSeconds
+}
+
+declare module 'date-fns/addWeeks/index' {
+ import { addWeeks } from 'date-fns'
+ export default addWeeks
+}
+
+declare module 'date-fns/addYears/index' {
+ import { addYears } from 'date-fns'
+ export default addYears
+}
+
+declare module 'date-fns/areIntervalsOverlapping/index' {
+ import { areIntervalsOverlapping } from 'date-fns'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/closestIndexTo/index' {
+ import { closestIndexTo } from 'date-fns'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/closestTo/index' {
+ import { closestTo } from 'date-fns'
+ export default closestTo
+}
+
+declare module 'date-fns/compareAsc/index' {
+ import { compareAsc } from 'date-fns'
+ export default compareAsc
+}
+
+declare module 'date-fns/compareDesc/index' {
+ import { compareDesc } from 'date-fns'
+ export default compareDesc
+}
+
+declare module 'date-fns/daysToWeeks/index' {
+ import { daysToWeeks } from 'date-fns'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/differenceInBusinessDays/index' {
+ import { differenceInBusinessDays } from 'date-fns'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/differenceInCalendarDays/index' {
+ import { differenceInCalendarDays } from 'date-fns'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/differenceInCalendarISOWeeks/index' {
+ import { differenceInCalendarISOWeeks } from 'date-fns'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/differenceInCalendarISOWeekYears/index' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/differenceInCalendarMonths/index' {
+ import { differenceInCalendarMonths } from 'date-fns'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/differenceInCalendarQuarters/index' {
+ import { differenceInCalendarQuarters } from 'date-fns'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/differenceInCalendarWeeks/index' {
+ import { differenceInCalendarWeeks } from 'date-fns'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/differenceInCalendarYears/index' {
+ import { differenceInCalendarYears } from 'date-fns'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/differenceInDays/index' {
+ import { differenceInDays } from 'date-fns'
+ export default differenceInDays
+}
+
+declare module 'date-fns/differenceInHours/index' {
+ import { differenceInHours } from 'date-fns'
+ export default differenceInHours
+}
+
+declare module 'date-fns/differenceInISOWeekYears/index' {
+ import { differenceInISOWeekYears } from 'date-fns'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/differenceInMilliseconds/index' {
+ import { differenceInMilliseconds } from 'date-fns'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/differenceInMinutes/index' {
+ import { differenceInMinutes } from 'date-fns'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/differenceInMonths/index' {
+ import { differenceInMonths } from 'date-fns'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/differenceInQuarters/index' {
+ import { differenceInQuarters } from 'date-fns'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/differenceInSeconds/index' {
+ import { differenceInSeconds } from 'date-fns'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/differenceInWeeks/index' {
+ import { differenceInWeeks } from 'date-fns'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/differenceInYears/index' {
+ import { differenceInYears } from 'date-fns'
+ export default differenceInYears
+}
+
+declare module 'date-fns/eachDayOfInterval/index' {
+ import { eachDayOfInterval } from 'date-fns'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/eachHourOfInterval/index' {
+ import { eachHourOfInterval } from 'date-fns'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/eachMinuteOfInterval/index' {
+ import { eachMinuteOfInterval } from 'date-fns'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/eachMonthOfInterval/index' {
+ import { eachMonthOfInterval } from 'date-fns'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/eachQuarterOfInterval/index' {
+ import { eachQuarterOfInterval } from 'date-fns'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/eachWeekendOfInterval/index' {
+ import { eachWeekendOfInterval } from 'date-fns'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/eachWeekendOfMonth/index' {
+ import { eachWeekendOfMonth } from 'date-fns'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/eachWeekendOfYear/index' {
+ import { eachWeekendOfYear } from 'date-fns'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/eachWeekOfInterval/index' {
+ import { eachWeekOfInterval } from 'date-fns'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/eachYearOfInterval/index' {
+ import { eachYearOfInterval } from 'date-fns'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/endOfDay/index' {
+ import { endOfDay } from 'date-fns'
+ export default endOfDay
+}
+
+declare module 'date-fns/endOfDecade/index' {
+ import { endOfDecade } from 'date-fns'
+ export default endOfDecade
+}
+
+declare module 'date-fns/endOfHour/index' {
+ import { endOfHour } from 'date-fns'
+ export default endOfHour
+}
+
+declare module 'date-fns/endOfISOWeek/index' {
+ import { endOfISOWeek } from 'date-fns'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/endOfISOWeekYear/index' {
+ import { endOfISOWeekYear } from 'date-fns'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/endOfMinute/index' {
+ import { endOfMinute } from 'date-fns'
+ export default endOfMinute
+}
+
+declare module 'date-fns/endOfMonth/index' {
+ import { endOfMonth } from 'date-fns'
+ export default endOfMonth
+}
+
+declare module 'date-fns/endOfQuarter/index' {
+ import { endOfQuarter } from 'date-fns'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/endOfSecond/index' {
+ import { endOfSecond } from 'date-fns'
+ export default endOfSecond
+}
+
+declare module 'date-fns/endOfToday/index' {
+ import { endOfToday } from 'date-fns'
+ export default endOfToday
+}
+
+declare module 'date-fns/endOfTomorrow/index' {
+ import { endOfTomorrow } from 'date-fns'
+ export default endOfTomorrow
+}
+
+declare module 'date-fns/endOfWeek/index' {
+ import { endOfWeek } from 'date-fns'
+ export default endOfWeek
+}
+
+declare module 'date-fns/endOfYear/index' {
+ import { endOfYear } from 'date-fns'
+ export default endOfYear
+}
+
+declare module 'date-fns/endOfYesterday/index' {
+ import { endOfYesterday } from 'date-fns'
+ export default endOfYesterday
+}
+
+declare module 'date-fns/format/index' {
+ import { format } from 'date-fns'
+ export default format
+}
+
+declare module 'date-fns/formatDistance/index' {
+ import { formatDistance } from 'date-fns'
+ export default formatDistance
+}
+
+declare module 'date-fns/formatDistanceStrict/index' {
+ import { formatDistanceStrict } from 'date-fns'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/formatDistanceToNow/index' {
+ import { formatDistanceToNow } from 'date-fns'
+ export default formatDistanceToNow
+}
+
+declare module 'date-fns/formatDistanceToNowStrict/index' {
+ import { formatDistanceToNowStrict } from 'date-fns'
+ export default formatDistanceToNowStrict
+}
+
+declare module 'date-fns/formatDuration/index' {
+ import { formatDuration } from 'date-fns'
+ export default formatDuration
+}
+
+declare module 'date-fns/formatISO/index' {
+ import { formatISO } from 'date-fns'
+ export default formatISO
+}
+
+declare module 'date-fns/formatISO9075/index' {
+ import { formatISO9075 } from 'date-fns'
+ export default formatISO9075
+}
+
+declare module 'date-fns/formatISODuration/index' {
+ import { formatISODuration } from 'date-fns'
+ export default formatISODuration
+}
+
+declare module 'date-fns/formatRelative/index' {
+ import { formatRelative } from 'date-fns'
+ export default formatRelative
+}
+
+declare module 'date-fns/formatRFC3339/index' {
+ import { formatRFC3339 } from 'date-fns'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/formatRFC7231/index' {
+ import { formatRFC7231 } from 'date-fns'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/fromUnixTime/index' {
+ import { fromUnixTime } from 'date-fns'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/getDate/index' {
+ import { getDate } from 'date-fns'
+ export default getDate
+}
+
+declare module 'date-fns/getDay/index' {
+ import { getDay } from 'date-fns'
+ export default getDay
+}
+
+declare module 'date-fns/getDayOfYear/index' {
+ import { getDayOfYear } from 'date-fns'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/getDaysInMonth/index' {
+ import { getDaysInMonth } from 'date-fns'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/getDaysInYear/index' {
+ import { getDaysInYear } from 'date-fns'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/getDecade/index' {
+ import { getDecade } from 'date-fns'
+ export default getDecade
+}
+
+declare module 'date-fns/getHours/index' {
+ import { getHours } from 'date-fns'
+ export default getHours
+}
+
+declare module 'date-fns/getISODay/index' {
+ import { getISODay } from 'date-fns'
+ export default getISODay
+}
+
+declare module 'date-fns/getISOWeek/index' {
+ import { getISOWeek } from 'date-fns'
+ export default getISOWeek
+}
+
+declare module 'date-fns/getISOWeeksInYear/index' {
+ import { getISOWeeksInYear } from 'date-fns'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/getISOWeekYear/index' {
+ import { getISOWeekYear } from 'date-fns'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/getMilliseconds/index' {
+ import { getMilliseconds } from 'date-fns'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/getMinutes/index' {
+ import { getMinutes } from 'date-fns'
+ export default getMinutes
+}
+
+declare module 'date-fns/getMonth/index' {
+ import { getMonth } from 'date-fns'
+ export default getMonth
+}
+
+declare module 'date-fns/getOverlappingDaysInIntervals/index' {
+ import { getOverlappingDaysInIntervals } from 'date-fns'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/getQuarter/index' {
+ import { getQuarter } from 'date-fns'
+ export default getQuarter
+}
+
+declare module 'date-fns/getSeconds/index' {
+ import { getSeconds } from 'date-fns'
+ export default getSeconds
+}
+
+declare module 'date-fns/getTime/index' {
+ import { getTime } from 'date-fns'
+ export default getTime
+}
+
+declare module 'date-fns/getUnixTime/index' {
+ import { getUnixTime } from 'date-fns'
+ export default getUnixTime
+}
+
+declare module 'date-fns/getWeek/index' {
+ import { getWeek } from 'date-fns'
+ export default getWeek
+}
+
+declare module 'date-fns/getWeekOfMonth/index' {
+ import { getWeekOfMonth } from 'date-fns'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/getWeeksInMonth/index' {
+ import { getWeeksInMonth } from 'date-fns'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/getWeekYear/index' {
+ import { getWeekYear } from 'date-fns'
+ export default getWeekYear
+}
+
+declare module 'date-fns/getYear/index' {
+ import { getYear } from 'date-fns'
+ export default getYear
+}
+
+declare module 'date-fns/hoursToMilliseconds/index' {
+ import { hoursToMilliseconds } from 'date-fns'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/hoursToMinutes/index' {
+ import { hoursToMinutes } from 'date-fns'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/hoursToSeconds/index' {
+ import { hoursToSeconds } from 'date-fns'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/intervalToDuration/index' {
+ import { intervalToDuration } from 'date-fns'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/intlFormat/index' {
+ import { intlFormat } from 'date-fns'
+ export default intlFormat
+}
+
+declare module 'date-fns/isAfter/index' {
+ import { isAfter } from 'date-fns'
+ export default isAfter
+}
+
+declare module 'date-fns/isBefore/index' {
+ import { isBefore } from 'date-fns'
+ export default isBefore
+}
+
+declare module 'date-fns/isDate/index' {
+ import { isDate } from 'date-fns'
+ export default isDate
+}
+
+declare module 'date-fns/isEqual/index' {
+ import { isEqual } from 'date-fns'
+ export default isEqual
+}
+
+declare module 'date-fns/isExists/index' {
+ import { isExists } from 'date-fns'
+ export default isExists
+}
+
+declare module 'date-fns/isFirstDayOfMonth/index' {
+ import { isFirstDayOfMonth } from 'date-fns'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/isFriday/index' {
+ import { isFriday } from 'date-fns'
+ export default isFriday
+}
+
+declare module 'date-fns/isFuture/index' {
+ import { isFuture } from 'date-fns'
+ export default isFuture
+}
+
+declare module 'date-fns/isLastDayOfMonth/index' {
+ import { isLastDayOfMonth } from 'date-fns'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/isLeapYear/index' {
+ import { isLeapYear } from 'date-fns'
+ export default isLeapYear
+}
+
+declare module 'date-fns/isMatch/index' {
+ import { isMatch } from 'date-fns'
+ export default isMatch
+}
+
+declare module 'date-fns/isMonday/index' {
+ import { isMonday } from 'date-fns'
+ export default isMonday
+}
+
+declare module 'date-fns/isPast/index' {
+ import { isPast } from 'date-fns'
+ export default isPast
+}
+
+declare module 'date-fns/isSameDay/index' {
+ import { isSameDay } from 'date-fns'
+ export default isSameDay
+}
+
+declare module 'date-fns/isSameHour/index' {
+ import { isSameHour } from 'date-fns'
+ export default isSameHour
+}
+
+declare module 'date-fns/isSameISOWeek/index' {
+ import { isSameISOWeek } from 'date-fns'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/isSameISOWeekYear/index' {
+ import { isSameISOWeekYear } from 'date-fns'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/isSameMinute/index' {
+ import { isSameMinute } from 'date-fns'
+ export default isSameMinute
+}
+
+declare module 'date-fns/isSameMonth/index' {
+ import { isSameMonth } from 'date-fns'
+ export default isSameMonth
+}
+
+declare module 'date-fns/isSameQuarter/index' {
+ import { isSameQuarter } from 'date-fns'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/isSameSecond/index' {
+ import { isSameSecond } from 'date-fns'
+ export default isSameSecond
+}
+
+declare module 'date-fns/isSameWeek/index' {
+ import { isSameWeek } from 'date-fns'
+ export default isSameWeek
+}
+
+declare module 'date-fns/isSameYear/index' {
+ import { isSameYear } from 'date-fns'
+ export default isSameYear
+}
+
+declare module 'date-fns/isSaturday/index' {
+ import { isSaturday } from 'date-fns'
+ export default isSaturday
+}
+
+declare module 'date-fns/isSunday/index' {
+ import { isSunday } from 'date-fns'
+ export default isSunday
+}
+
+declare module 'date-fns/isThisHour/index' {
+ import { isThisHour } from 'date-fns'
+ export default isThisHour
+}
+
+declare module 'date-fns/isThisISOWeek/index' {
+ import { isThisISOWeek } from 'date-fns'
+ export default isThisISOWeek
+}
+
+declare module 'date-fns/isThisMinute/index' {
+ import { isThisMinute } from 'date-fns'
+ export default isThisMinute
+}
+
+declare module 'date-fns/isThisMonth/index' {
+ import { isThisMonth } from 'date-fns'
+ export default isThisMonth
+}
+
+declare module 'date-fns/isThisQuarter/index' {
+ import { isThisQuarter } from 'date-fns'
+ export default isThisQuarter
+}
+
+declare module 'date-fns/isThisSecond/index' {
+ import { isThisSecond } from 'date-fns'
+ export default isThisSecond
+}
+
+declare module 'date-fns/isThisWeek/index' {
+ import { isThisWeek } from 'date-fns'
+ export default isThisWeek
+}
+
+declare module 'date-fns/isThisYear/index' {
+ import { isThisYear } from 'date-fns'
+ export default isThisYear
+}
+
+declare module 'date-fns/isThursday/index' {
+ import { isThursday } from 'date-fns'
+ export default isThursday
+}
+
+declare module 'date-fns/isToday/index' {
+ import { isToday } from 'date-fns'
+ export default isToday
+}
+
+declare module 'date-fns/isTomorrow/index' {
+ import { isTomorrow } from 'date-fns'
+ export default isTomorrow
+}
+
+declare module 'date-fns/isTuesday/index' {
+ import { isTuesday } from 'date-fns'
+ export default isTuesday
+}
+
+declare module 'date-fns/isValid/index' {
+ import { isValid } from 'date-fns'
+ export default isValid
+}
+
+declare module 'date-fns/isWednesday/index' {
+ import { isWednesday } from 'date-fns'
+ export default isWednesday
+}
+
+declare module 'date-fns/isWeekend/index' {
+ import { isWeekend } from 'date-fns'
+ export default isWeekend
+}
+
+declare module 'date-fns/isWithinInterval/index' {
+ import { isWithinInterval } from 'date-fns'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/isYesterday/index' {
+ import { isYesterday } from 'date-fns'
+ export default isYesterday
+}
+
+declare module 'date-fns/lastDayOfDecade/index' {
+ import { lastDayOfDecade } from 'date-fns'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/lastDayOfISOWeek/index' {
+ import { lastDayOfISOWeek } from 'date-fns'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/lastDayOfISOWeekYear/index' {
+ import { lastDayOfISOWeekYear } from 'date-fns'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/lastDayOfMonth/index' {
+ import { lastDayOfMonth } from 'date-fns'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/lastDayOfQuarter/index' {
+ import { lastDayOfQuarter } from 'date-fns'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/lastDayOfWeek/index' {
+ import { lastDayOfWeek } from 'date-fns'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/lastDayOfYear/index' {
+ import { lastDayOfYear } from 'date-fns'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/lightFormat/index' {
+ import { lightFormat } from 'date-fns'
+ export default lightFormat
+}
+
+declare module 'date-fns/max/index' {
+ import { max } from 'date-fns'
+ export default max
+}
+
+declare module 'date-fns/milliseconds/index' {
+ import { milliseconds } from 'date-fns'
+ export default milliseconds
+}
+
+declare module 'date-fns/millisecondsToHours/index' {
+ import { millisecondsToHours } from 'date-fns'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/millisecondsToMinutes/index' {
+ import { millisecondsToMinutes } from 'date-fns'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/millisecondsToSeconds/index' {
+ import { millisecondsToSeconds } from 'date-fns'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/min/index' {
+ import { min } from 'date-fns'
+ export default min
+}
+
+declare module 'date-fns/minutesToHours/index' {
+ import { minutesToHours } from 'date-fns'
+ export default minutesToHours
+}
+
+declare module 'date-fns/minutesToMilliseconds/index' {
+ import { minutesToMilliseconds } from 'date-fns'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/minutesToSeconds/index' {
+ import { minutesToSeconds } from 'date-fns'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/monthsToQuarters/index' {
+ import { monthsToQuarters } from 'date-fns'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/monthsToYears/index' {
+ import { monthsToYears } from 'date-fns'
+ export default monthsToYears
+}
+
+declare module 'date-fns/nextDay/index' {
+ import { nextDay } from 'date-fns'
+ export default nextDay
+}
+
+declare module 'date-fns/nextFriday/index' {
+ import { nextFriday } from 'date-fns'
+ export default nextFriday
+}
+
+declare module 'date-fns/nextMonday/index' {
+ import { nextMonday } from 'date-fns'
+ export default nextMonday
+}
+
+declare module 'date-fns/nextSaturday/index' {
+ import { nextSaturday } from 'date-fns'
+ export default nextSaturday
+}
+
+declare module 'date-fns/nextSunday/index' {
+ import { nextSunday } from 'date-fns'
+ export default nextSunday
+}
+
+declare module 'date-fns/nextThursday/index' {
+ import { nextThursday } from 'date-fns'
+ export default nextThursday
+}
+
+declare module 'date-fns/nextTuesday/index' {
+ import { nextTuesday } from 'date-fns'
+ export default nextTuesday
+}
+
+declare module 'date-fns/nextWednesday/index' {
+ import { nextWednesday } from 'date-fns'
+ export default nextWednesday
+}
+
+declare module 'date-fns/parse/index' {
+ import { parse } from 'date-fns'
+ export default parse
+}
+
+declare module 'date-fns/parseISO/index' {
+ import { parseISO } from 'date-fns'
+ export default parseISO
+}
+
+declare module 'date-fns/parseJSON/index' {
+ import { parseJSON } from 'date-fns'
+ export default parseJSON
+}
+
+declare module 'date-fns/quartersToMonths/index' {
+ import { quartersToMonths } from 'date-fns'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/quartersToYears/index' {
+ import { quartersToYears } from 'date-fns'
+ export default quartersToYears
+}
+
+declare module 'date-fns/roundToNearestMinutes/index' {
+ import { roundToNearestMinutes } from 'date-fns'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/secondsToHours/index' {
+ import { secondsToHours } from 'date-fns'
+ export default secondsToHours
+}
+
+declare module 'date-fns/secondsToMilliseconds/index' {
+ import { secondsToMilliseconds } from 'date-fns'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/secondsToMinutes/index' {
+ import { secondsToMinutes } from 'date-fns'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/set/index' {
+ import { set } from 'date-fns'
+ export default set
+}
+
+declare module 'date-fns/setDate/index' {
+ import { setDate } from 'date-fns'
+ export default setDate
+}
+
+declare module 'date-fns/setDay/index' {
+ import { setDay } from 'date-fns'
+ export default setDay
+}
+
+declare module 'date-fns/setDayOfYear/index' {
+ import { setDayOfYear } from 'date-fns'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/setHours/index' {
+ import { setHours } from 'date-fns'
+ export default setHours
+}
+
+declare module 'date-fns/setISODay/index' {
+ import { setISODay } from 'date-fns'
+ export default setISODay
+}
+
+declare module 'date-fns/setISOWeek/index' {
+ import { setISOWeek } from 'date-fns'
+ export default setISOWeek
+}
+
+declare module 'date-fns/setISOWeekYear/index' {
+ import { setISOWeekYear } from 'date-fns'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/setMilliseconds/index' {
+ import { setMilliseconds } from 'date-fns'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/setMinutes/index' {
+ import { setMinutes } from 'date-fns'
+ export default setMinutes
+}
+
+declare module 'date-fns/setMonth/index' {
+ import { setMonth } from 'date-fns'
+ export default setMonth
+}
+
+declare module 'date-fns/setQuarter/index' {
+ import { setQuarter } from 'date-fns'
+ export default setQuarter
+}
+
+declare module 'date-fns/setSeconds/index' {
+ import { setSeconds } from 'date-fns'
+ export default setSeconds
+}
+
+declare module 'date-fns/setWeek/index' {
+ import { setWeek } from 'date-fns'
+ export default setWeek
+}
+
+declare module 'date-fns/setWeekYear/index' {
+ import { setWeekYear } from 'date-fns'
+ export default setWeekYear
+}
+
+declare module 'date-fns/setYear/index' {
+ import { setYear } from 'date-fns'
+ export default setYear
+}
+
+declare module 'date-fns/startOfDay/index' {
+ import { startOfDay } from 'date-fns'
+ export default startOfDay
+}
+
+declare module 'date-fns/startOfDecade/index' {
+ import { startOfDecade } from 'date-fns'
+ export default startOfDecade
+}
+
+declare module 'date-fns/startOfHour/index' {
+ import { startOfHour } from 'date-fns'
+ export default startOfHour
+}
+
+declare module 'date-fns/startOfISOWeek/index' {
+ import { startOfISOWeek } from 'date-fns'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/startOfISOWeekYear/index' {
+ import { startOfISOWeekYear } from 'date-fns'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/startOfMinute/index' {
+ import { startOfMinute } from 'date-fns'
+ export default startOfMinute
+}
+
+declare module 'date-fns/startOfMonth/index' {
+ import { startOfMonth } from 'date-fns'
+ export default startOfMonth
+}
+
+declare module 'date-fns/startOfQuarter/index' {
+ import { startOfQuarter } from 'date-fns'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/startOfSecond/index' {
+ import { startOfSecond } from 'date-fns'
+ export default startOfSecond
+}
+
+declare module 'date-fns/startOfToday/index' {
+ import { startOfToday } from 'date-fns'
+ export default startOfToday
+}
+
+declare module 'date-fns/startOfTomorrow/index' {
+ import { startOfTomorrow } from 'date-fns'
+ export default startOfTomorrow
+}
+
+declare module 'date-fns/startOfWeek/index' {
+ import { startOfWeek } from 'date-fns'
+ export default startOfWeek
+}
+
+declare module 'date-fns/startOfWeekYear/index' {
+ import { startOfWeekYear } from 'date-fns'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/startOfYear/index' {
+ import { startOfYear } from 'date-fns'
+ export default startOfYear
+}
+
+declare module 'date-fns/startOfYesterday/index' {
+ import { startOfYesterday } from 'date-fns'
+ export default startOfYesterday
+}
+
+declare module 'date-fns/sub/index' {
+ import { sub } from 'date-fns'
+ export default sub
+}
+
+declare module 'date-fns/subBusinessDays/index' {
+ import { subBusinessDays } from 'date-fns'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/subDays/index' {
+ import { subDays } from 'date-fns'
+ export default subDays
+}
+
+declare module 'date-fns/subHours/index' {
+ import { subHours } from 'date-fns'
+ export default subHours
+}
+
+declare module 'date-fns/subISOWeekYears/index' {
+ import { subISOWeekYears } from 'date-fns'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/subMilliseconds/index' {
+ import { subMilliseconds } from 'date-fns'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/subMinutes/index' {
+ import { subMinutes } from 'date-fns'
+ export default subMinutes
+}
+
+declare module 'date-fns/subMonths/index' {
+ import { subMonths } from 'date-fns'
+ export default subMonths
+}
+
+declare module 'date-fns/subQuarters/index' {
+ import { subQuarters } from 'date-fns'
+ export default subQuarters
+}
+
+declare module 'date-fns/subSeconds/index' {
+ import { subSeconds } from 'date-fns'
+ export default subSeconds
+}
+
+declare module 'date-fns/subWeeks/index' {
+ import { subWeeks } from 'date-fns'
+ export default subWeeks
+}
+
+declare module 'date-fns/subYears/index' {
+ import { subYears } from 'date-fns'
+ export default subYears
+}
+
+declare module 'date-fns/toDate/index' {
+ import { toDate } from 'date-fns'
+ export default toDate
+}
+
+declare module 'date-fns/weeksToDays/index' {
+ import { weeksToDays } from 'date-fns'
+ export default weeksToDays
+}
+
+declare module 'date-fns/yearsToMonths/index' {
+ import { yearsToMonths } from 'date-fns'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/yearsToQuarters/index' {
+ import { yearsToQuarters } from 'date-fns'
+ export default yearsToQuarters
+}
+
+declare module 'date-fns/add/index.js' {
+ import { add } from 'date-fns'
+ export default add
+}
+
+declare module 'date-fns/addBusinessDays/index.js' {
+ import { addBusinessDays } from 'date-fns'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/addDays/index.js' {
+ import { addDays } from 'date-fns'
+ export default addDays
+}
+
+declare module 'date-fns/addHours/index.js' {
+ import { addHours } from 'date-fns'
+ export default addHours
+}
+
+declare module 'date-fns/addISOWeekYears/index.js' {
+ import { addISOWeekYears } from 'date-fns'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/addMilliseconds/index.js' {
+ import { addMilliseconds } from 'date-fns'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/addMinutes/index.js' {
+ import { addMinutes } from 'date-fns'
+ export default addMinutes
+}
+
+declare module 'date-fns/addMonths/index.js' {
+ import { addMonths } from 'date-fns'
+ export default addMonths
+}
+
+declare module 'date-fns/addQuarters/index.js' {
+ import { addQuarters } from 'date-fns'
+ export default addQuarters
+}
+
+declare module 'date-fns/addSeconds/index.js' {
+ import { addSeconds } from 'date-fns'
+ export default addSeconds
+}
+
+declare module 'date-fns/addWeeks/index.js' {
+ import { addWeeks } from 'date-fns'
+ export default addWeeks
+}
+
+declare module 'date-fns/addYears/index.js' {
+ import { addYears } from 'date-fns'
+ export default addYears
+}
+
+declare module 'date-fns/areIntervalsOverlapping/index.js' {
+ import { areIntervalsOverlapping } from 'date-fns'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/closestIndexTo/index.js' {
+ import { closestIndexTo } from 'date-fns'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/closestTo/index.js' {
+ import { closestTo } from 'date-fns'
+ export default closestTo
+}
+
+declare module 'date-fns/compareAsc/index.js' {
+ import { compareAsc } from 'date-fns'
+ export default compareAsc
+}
+
+declare module 'date-fns/compareDesc/index.js' {
+ import { compareDesc } from 'date-fns'
+ export default compareDesc
+}
+
+declare module 'date-fns/daysToWeeks/index.js' {
+ import { daysToWeeks } from 'date-fns'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/differenceInBusinessDays/index.js' {
+ import { differenceInBusinessDays } from 'date-fns'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/differenceInCalendarDays/index.js' {
+ import { differenceInCalendarDays } from 'date-fns'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/differenceInCalendarISOWeeks/index.js' {
+ import { differenceInCalendarISOWeeks } from 'date-fns'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/differenceInCalendarISOWeekYears/index.js' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/differenceInCalendarMonths/index.js' {
+ import { differenceInCalendarMonths } from 'date-fns'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/differenceInCalendarQuarters/index.js' {
+ import { differenceInCalendarQuarters } from 'date-fns'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/differenceInCalendarWeeks/index.js' {
+ import { differenceInCalendarWeeks } from 'date-fns'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/differenceInCalendarYears/index.js' {
+ import { differenceInCalendarYears } from 'date-fns'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/differenceInDays/index.js' {
+ import { differenceInDays } from 'date-fns'
+ export default differenceInDays
+}
+
+declare module 'date-fns/differenceInHours/index.js' {
+ import { differenceInHours } from 'date-fns'
+ export default differenceInHours
+}
+
+declare module 'date-fns/differenceInISOWeekYears/index.js' {
+ import { differenceInISOWeekYears } from 'date-fns'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/differenceInMilliseconds/index.js' {
+ import { differenceInMilliseconds } from 'date-fns'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/differenceInMinutes/index.js' {
+ import { differenceInMinutes } from 'date-fns'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/differenceInMonths/index.js' {
+ import { differenceInMonths } from 'date-fns'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/differenceInQuarters/index.js' {
+ import { differenceInQuarters } from 'date-fns'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/differenceInSeconds/index.js' {
+ import { differenceInSeconds } from 'date-fns'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/differenceInWeeks/index.js' {
+ import { differenceInWeeks } from 'date-fns'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/differenceInYears/index.js' {
+ import { differenceInYears } from 'date-fns'
+ export default differenceInYears
+}
+
+declare module 'date-fns/eachDayOfInterval/index.js' {
+ import { eachDayOfInterval } from 'date-fns'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/eachHourOfInterval/index.js' {
+ import { eachHourOfInterval } from 'date-fns'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/eachMinuteOfInterval/index.js' {
+ import { eachMinuteOfInterval } from 'date-fns'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/eachMonthOfInterval/index.js' {
+ import { eachMonthOfInterval } from 'date-fns'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/eachQuarterOfInterval/index.js' {
+ import { eachQuarterOfInterval } from 'date-fns'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/eachWeekendOfInterval/index.js' {
+ import { eachWeekendOfInterval } from 'date-fns'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/eachWeekendOfMonth/index.js' {
+ import { eachWeekendOfMonth } from 'date-fns'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/eachWeekendOfYear/index.js' {
+ import { eachWeekendOfYear } from 'date-fns'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/eachWeekOfInterval/index.js' {
+ import { eachWeekOfInterval } from 'date-fns'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/eachYearOfInterval/index.js' {
+ import { eachYearOfInterval } from 'date-fns'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/endOfDay/index.js' {
+ import { endOfDay } from 'date-fns'
+ export default endOfDay
+}
+
+declare module 'date-fns/endOfDecade/index.js' {
+ import { endOfDecade } from 'date-fns'
+ export default endOfDecade
+}
+
+declare module 'date-fns/endOfHour/index.js' {
+ import { endOfHour } from 'date-fns'
+ export default endOfHour
+}
+
+declare module 'date-fns/endOfISOWeek/index.js' {
+ import { endOfISOWeek } from 'date-fns'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/endOfISOWeekYear/index.js' {
+ import { endOfISOWeekYear } from 'date-fns'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/endOfMinute/index.js' {
+ import { endOfMinute } from 'date-fns'
+ export default endOfMinute
+}
+
+declare module 'date-fns/endOfMonth/index.js' {
+ import { endOfMonth } from 'date-fns'
+ export default endOfMonth
+}
+
+declare module 'date-fns/endOfQuarter/index.js' {
+ import { endOfQuarter } from 'date-fns'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/endOfSecond/index.js' {
+ import { endOfSecond } from 'date-fns'
+ export default endOfSecond
+}
+
+declare module 'date-fns/endOfToday/index.js' {
+ import { endOfToday } from 'date-fns'
+ export default endOfToday
+}
+
+declare module 'date-fns/endOfTomorrow/index.js' {
+ import { endOfTomorrow } from 'date-fns'
+ export default endOfTomorrow
+}
+
+declare module 'date-fns/endOfWeek/index.js' {
+ import { endOfWeek } from 'date-fns'
+ export default endOfWeek
+}
+
+declare module 'date-fns/endOfYear/index.js' {
+ import { endOfYear } from 'date-fns'
+ export default endOfYear
+}
+
+declare module 'date-fns/endOfYesterday/index.js' {
+ import { endOfYesterday } from 'date-fns'
+ export default endOfYesterday
+}
+
+declare module 'date-fns/format/index.js' {
+ import { format } from 'date-fns'
+ export default format
+}
+
+declare module 'date-fns/formatDistance/index.js' {
+ import { formatDistance } from 'date-fns'
+ export default formatDistance
+}
+
+declare module 'date-fns/formatDistanceStrict/index.js' {
+ import { formatDistanceStrict } from 'date-fns'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/formatDistanceToNow/index.js' {
+ import { formatDistanceToNow } from 'date-fns'
+ export default formatDistanceToNow
+}
+
+declare module 'date-fns/formatDistanceToNowStrict/index.js' {
+ import { formatDistanceToNowStrict } from 'date-fns'
+ export default formatDistanceToNowStrict
+}
+
+declare module 'date-fns/formatDuration/index.js' {
+ import { formatDuration } from 'date-fns'
+ export default formatDuration
+}
+
+declare module 'date-fns/formatISO/index.js' {
+ import { formatISO } from 'date-fns'
+ export default formatISO
+}
+
+declare module 'date-fns/formatISO9075/index.js' {
+ import { formatISO9075 } from 'date-fns'
+ export default formatISO9075
+}
+
+declare module 'date-fns/formatISODuration/index.js' {
+ import { formatISODuration } from 'date-fns'
+ export default formatISODuration
+}
+
+declare module 'date-fns/formatRelative/index.js' {
+ import { formatRelative } from 'date-fns'
+ export default formatRelative
+}
+
+declare module 'date-fns/formatRFC3339/index.js' {
+ import { formatRFC3339 } from 'date-fns'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/formatRFC7231/index.js' {
+ import { formatRFC7231 } from 'date-fns'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/fromUnixTime/index.js' {
+ import { fromUnixTime } from 'date-fns'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/getDate/index.js' {
+ import { getDate } from 'date-fns'
+ export default getDate
+}
+
+declare module 'date-fns/getDay/index.js' {
+ import { getDay } from 'date-fns'
+ export default getDay
+}
+
+declare module 'date-fns/getDayOfYear/index.js' {
+ import { getDayOfYear } from 'date-fns'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/getDaysInMonth/index.js' {
+ import { getDaysInMonth } from 'date-fns'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/getDaysInYear/index.js' {
+ import { getDaysInYear } from 'date-fns'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/getDecade/index.js' {
+ import { getDecade } from 'date-fns'
+ export default getDecade
+}
+
+declare module 'date-fns/getHours/index.js' {
+ import { getHours } from 'date-fns'
+ export default getHours
+}
+
+declare module 'date-fns/getISODay/index.js' {
+ import { getISODay } from 'date-fns'
+ export default getISODay
+}
+
+declare module 'date-fns/getISOWeek/index.js' {
+ import { getISOWeek } from 'date-fns'
+ export default getISOWeek
+}
+
+declare module 'date-fns/getISOWeeksInYear/index.js' {
+ import { getISOWeeksInYear } from 'date-fns'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/getISOWeekYear/index.js' {
+ import { getISOWeekYear } from 'date-fns'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/getMilliseconds/index.js' {
+ import { getMilliseconds } from 'date-fns'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/getMinutes/index.js' {
+ import { getMinutes } from 'date-fns'
+ export default getMinutes
+}
+
+declare module 'date-fns/getMonth/index.js' {
+ import { getMonth } from 'date-fns'
+ export default getMonth
+}
+
+declare module 'date-fns/getOverlappingDaysInIntervals/index.js' {
+ import { getOverlappingDaysInIntervals } from 'date-fns'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/getQuarter/index.js' {
+ import { getQuarter } from 'date-fns'
+ export default getQuarter
+}
+
+declare module 'date-fns/getSeconds/index.js' {
+ import { getSeconds } from 'date-fns'
+ export default getSeconds
+}
+
+declare module 'date-fns/getTime/index.js' {
+ import { getTime } from 'date-fns'
+ export default getTime
+}
+
+declare module 'date-fns/getUnixTime/index.js' {
+ import { getUnixTime } from 'date-fns'
+ export default getUnixTime
+}
+
+declare module 'date-fns/getWeek/index.js' {
+ import { getWeek } from 'date-fns'
+ export default getWeek
+}
+
+declare module 'date-fns/getWeekOfMonth/index.js' {
+ import { getWeekOfMonth } from 'date-fns'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/getWeeksInMonth/index.js' {
+ import { getWeeksInMonth } from 'date-fns'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/getWeekYear/index.js' {
+ import { getWeekYear } from 'date-fns'
+ export default getWeekYear
+}
+
+declare module 'date-fns/getYear/index.js' {
+ import { getYear } from 'date-fns'
+ export default getYear
+}
+
+declare module 'date-fns/hoursToMilliseconds/index.js' {
+ import { hoursToMilliseconds } from 'date-fns'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/hoursToMinutes/index.js' {
+ import { hoursToMinutes } from 'date-fns'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/hoursToSeconds/index.js' {
+ import { hoursToSeconds } from 'date-fns'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/intervalToDuration/index.js' {
+ import { intervalToDuration } from 'date-fns'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/intlFormat/index.js' {
+ import { intlFormat } from 'date-fns'
+ export default intlFormat
+}
+
+declare module 'date-fns/isAfter/index.js' {
+ import { isAfter } from 'date-fns'
+ export default isAfter
+}
+
+declare module 'date-fns/isBefore/index.js' {
+ import { isBefore } from 'date-fns'
+ export default isBefore
+}
+
+declare module 'date-fns/isDate/index.js' {
+ import { isDate } from 'date-fns'
+ export default isDate
+}
+
+declare module 'date-fns/isEqual/index.js' {
+ import { isEqual } from 'date-fns'
+ export default isEqual
+}
+
+declare module 'date-fns/isExists/index.js' {
+ import { isExists } from 'date-fns'
+ export default isExists
+}
+
+declare module 'date-fns/isFirstDayOfMonth/index.js' {
+ import { isFirstDayOfMonth } from 'date-fns'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/isFriday/index.js' {
+ import { isFriday } from 'date-fns'
+ export default isFriday
+}
+
+declare module 'date-fns/isFuture/index.js' {
+ import { isFuture } from 'date-fns'
+ export default isFuture
+}
+
+declare module 'date-fns/isLastDayOfMonth/index.js' {
+ import { isLastDayOfMonth } from 'date-fns'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/isLeapYear/index.js' {
+ import { isLeapYear } from 'date-fns'
+ export default isLeapYear
+}
+
+declare module 'date-fns/isMatch/index.js' {
+ import { isMatch } from 'date-fns'
+ export default isMatch
+}
+
+declare module 'date-fns/isMonday/index.js' {
+ import { isMonday } from 'date-fns'
+ export default isMonday
+}
+
+declare module 'date-fns/isPast/index.js' {
+ import { isPast } from 'date-fns'
+ export default isPast
+}
+
+declare module 'date-fns/isSameDay/index.js' {
+ import { isSameDay } from 'date-fns'
+ export default isSameDay
+}
+
+declare module 'date-fns/isSameHour/index.js' {
+ import { isSameHour } from 'date-fns'
+ export default isSameHour
+}
+
+declare module 'date-fns/isSameISOWeek/index.js' {
+ import { isSameISOWeek } from 'date-fns'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/isSameISOWeekYear/index.js' {
+ import { isSameISOWeekYear } from 'date-fns'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/isSameMinute/index.js' {
+ import { isSameMinute } from 'date-fns'
+ export default isSameMinute
+}
+
+declare module 'date-fns/isSameMonth/index.js' {
+ import { isSameMonth } from 'date-fns'
+ export default isSameMonth
+}
+
+declare module 'date-fns/isSameQuarter/index.js' {
+ import { isSameQuarter } from 'date-fns'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/isSameSecond/index.js' {
+ import { isSameSecond } from 'date-fns'
+ export default isSameSecond
+}
+
+declare module 'date-fns/isSameWeek/index.js' {
+ import { isSameWeek } from 'date-fns'
+ export default isSameWeek
+}
+
+declare module 'date-fns/isSameYear/index.js' {
+ import { isSameYear } from 'date-fns'
+ export default isSameYear
+}
+
+declare module 'date-fns/isSaturday/index.js' {
+ import { isSaturday } from 'date-fns'
+ export default isSaturday
+}
+
+declare module 'date-fns/isSunday/index.js' {
+ import { isSunday } from 'date-fns'
+ export default isSunday
+}
+
+declare module 'date-fns/isThisHour/index.js' {
+ import { isThisHour } from 'date-fns'
+ export default isThisHour
+}
+
+declare module 'date-fns/isThisISOWeek/index.js' {
+ import { isThisISOWeek } from 'date-fns'
+ export default isThisISOWeek
+}
+
+declare module 'date-fns/isThisMinute/index.js' {
+ import { isThisMinute } from 'date-fns'
+ export default isThisMinute
+}
+
+declare module 'date-fns/isThisMonth/index.js' {
+ import { isThisMonth } from 'date-fns'
+ export default isThisMonth
+}
+
+declare module 'date-fns/isThisQuarter/index.js' {
+ import { isThisQuarter } from 'date-fns'
+ export default isThisQuarter
+}
+
+declare module 'date-fns/isThisSecond/index.js' {
+ import { isThisSecond } from 'date-fns'
+ export default isThisSecond
+}
+
+declare module 'date-fns/isThisWeek/index.js' {
+ import { isThisWeek } from 'date-fns'
+ export default isThisWeek
+}
+
+declare module 'date-fns/isThisYear/index.js' {
+ import { isThisYear } from 'date-fns'
+ export default isThisYear
+}
+
+declare module 'date-fns/isThursday/index.js' {
+ import { isThursday } from 'date-fns'
+ export default isThursday
+}
+
+declare module 'date-fns/isToday/index.js' {
+ import { isToday } from 'date-fns'
+ export default isToday
+}
+
+declare module 'date-fns/isTomorrow/index.js' {
+ import { isTomorrow } from 'date-fns'
+ export default isTomorrow
+}
+
+declare module 'date-fns/isTuesday/index.js' {
+ import { isTuesday } from 'date-fns'
+ export default isTuesday
+}
+
+declare module 'date-fns/isValid/index.js' {
+ import { isValid } from 'date-fns'
+ export default isValid
+}
+
+declare module 'date-fns/isWednesday/index.js' {
+ import { isWednesday } from 'date-fns'
+ export default isWednesday
+}
+
+declare module 'date-fns/isWeekend/index.js' {
+ import { isWeekend } from 'date-fns'
+ export default isWeekend
+}
+
+declare module 'date-fns/isWithinInterval/index.js' {
+ import { isWithinInterval } from 'date-fns'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/isYesterday/index.js' {
+ import { isYesterday } from 'date-fns'
+ export default isYesterday
+}
+
+declare module 'date-fns/lastDayOfDecade/index.js' {
+ import { lastDayOfDecade } from 'date-fns'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/lastDayOfISOWeek/index.js' {
+ import { lastDayOfISOWeek } from 'date-fns'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/lastDayOfISOWeekYear/index.js' {
+ import { lastDayOfISOWeekYear } from 'date-fns'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/lastDayOfMonth/index.js' {
+ import { lastDayOfMonth } from 'date-fns'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/lastDayOfQuarter/index.js' {
+ import { lastDayOfQuarter } from 'date-fns'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/lastDayOfWeek/index.js' {
+ import { lastDayOfWeek } from 'date-fns'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/lastDayOfYear/index.js' {
+ import { lastDayOfYear } from 'date-fns'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/lightFormat/index.js' {
+ import { lightFormat } from 'date-fns'
+ export default lightFormat
+}
+
+declare module 'date-fns/max/index.js' {
+ import { max } from 'date-fns'
+ export default max
+}
+
+declare module 'date-fns/milliseconds/index.js' {
+ import { milliseconds } from 'date-fns'
+ export default milliseconds
+}
+
+declare module 'date-fns/millisecondsToHours/index.js' {
+ import { millisecondsToHours } from 'date-fns'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/millisecondsToMinutes/index.js' {
+ import { millisecondsToMinutes } from 'date-fns'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/millisecondsToSeconds/index.js' {
+ import { millisecondsToSeconds } from 'date-fns'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/min/index.js' {
+ import { min } from 'date-fns'
+ export default min
+}
+
+declare module 'date-fns/minutesToHours/index.js' {
+ import { minutesToHours } from 'date-fns'
+ export default minutesToHours
+}
+
+declare module 'date-fns/minutesToMilliseconds/index.js' {
+ import { minutesToMilliseconds } from 'date-fns'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/minutesToSeconds/index.js' {
+ import { minutesToSeconds } from 'date-fns'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/monthsToQuarters/index.js' {
+ import { monthsToQuarters } from 'date-fns'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/monthsToYears/index.js' {
+ import { monthsToYears } from 'date-fns'
+ export default monthsToYears
+}
+
+declare module 'date-fns/nextDay/index.js' {
+ import { nextDay } from 'date-fns'
+ export default nextDay
+}
+
+declare module 'date-fns/nextFriday/index.js' {
+ import { nextFriday } from 'date-fns'
+ export default nextFriday
+}
+
+declare module 'date-fns/nextMonday/index.js' {
+ import { nextMonday } from 'date-fns'
+ export default nextMonday
+}
+
+declare module 'date-fns/nextSaturday/index.js' {
+ import { nextSaturday } from 'date-fns'
+ export default nextSaturday
+}
+
+declare module 'date-fns/nextSunday/index.js' {
+ import { nextSunday } from 'date-fns'
+ export default nextSunday
+}
+
+declare module 'date-fns/nextThursday/index.js' {
+ import { nextThursday } from 'date-fns'
+ export default nextThursday
+}
+
+declare module 'date-fns/nextTuesday/index.js' {
+ import { nextTuesday } from 'date-fns'
+ export default nextTuesday
+}
+
+declare module 'date-fns/nextWednesday/index.js' {
+ import { nextWednesday } from 'date-fns'
+ export default nextWednesday
+}
+
+declare module 'date-fns/parse/index.js' {
+ import { parse } from 'date-fns'
+ export default parse
+}
+
+declare module 'date-fns/parseISO/index.js' {
+ import { parseISO } from 'date-fns'
+ export default parseISO
+}
+
+declare module 'date-fns/parseJSON/index.js' {
+ import { parseJSON } from 'date-fns'
+ export default parseJSON
+}
+
+declare module 'date-fns/quartersToMonths/index.js' {
+ import { quartersToMonths } from 'date-fns'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/quartersToYears/index.js' {
+ import { quartersToYears } from 'date-fns'
+ export default quartersToYears
+}
+
+declare module 'date-fns/roundToNearestMinutes/index.js' {
+ import { roundToNearestMinutes } from 'date-fns'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/secondsToHours/index.js' {
+ import { secondsToHours } from 'date-fns'
+ export default secondsToHours
+}
+
+declare module 'date-fns/secondsToMilliseconds/index.js' {
+ import { secondsToMilliseconds } from 'date-fns'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/secondsToMinutes/index.js' {
+ import { secondsToMinutes } from 'date-fns'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/set/index.js' {
+ import { set } from 'date-fns'
+ export default set
+}
+
+declare module 'date-fns/setDate/index.js' {
+ import { setDate } from 'date-fns'
+ export default setDate
+}
+
+declare module 'date-fns/setDay/index.js' {
+ import { setDay } from 'date-fns'
+ export default setDay
+}
+
+declare module 'date-fns/setDayOfYear/index.js' {
+ import { setDayOfYear } from 'date-fns'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/setHours/index.js' {
+ import { setHours } from 'date-fns'
+ export default setHours
+}
+
+declare module 'date-fns/setISODay/index.js' {
+ import { setISODay } from 'date-fns'
+ export default setISODay
+}
+
+declare module 'date-fns/setISOWeek/index.js' {
+ import { setISOWeek } from 'date-fns'
+ export default setISOWeek
+}
+
+declare module 'date-fns/setISOWeekYear/index.js' {
+ import { setISOWeekYear } from 'date-fns'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/setMilliseconds/index.js' {
+ import { setMilliseconds } from 'date-fns'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/setMinutes/index.js' {
+ import { setMinutes } from 'date-fns'
+ export default setMinutes
+}
+
+declare module 'date-fns/setMonth/index.js' {
+ import { setMonth } from 'date-fns'
+ export default setMonth
+}
+
+declare module 'date-fns/setQuarter/index.js' {
+ import { setQuarter } from 'date-fns'
+ export default setQuarter
+}
+
+declare module 'date-fns/setSeconds/index.js' {
+ import { setSeconds } from 'date-fns'
+ export default setSeconds
+}
+
+declare module 'date-fns/setWeek/index.js' {
+ import { setWeek } from 'date-fns'
+ export default setWeek
+}
+
+declare module 'date-fns/setWeekYear/index.js' {
+ import { setWeekYear } from 'date-fns'
+ export default setWeekYear
+}
+
+declare module 'date-fns/setYear/index.js' {
+ import { setYear } from 'date-fns'
+ export default setYear
+}
+
+declare module 'date-fns/startOfDay/index.js' {
+ import { startOfDay } from 'date-fns'
+ export default startOfDay
+}
+
+declare module 'date-fns/startOfDecade/index.js' {
+ import { startOfDecade } from 'date-fns'
+ export default startOfDecade
+}
+
+declare module 'date-fns/startOfHour/index.js' {
+ import { startOfHour } from 'date-fns'
+ export default startOfHour
+}
+
+declare module 'date-fns/startOfISOWeek/index.js' {
+ import { startOfISOWeek } from 'date-fns'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/startOfISOWeekYear/index.js' {
+ import { startOfISOWeekYear } from 'date-fns'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/startOfMinute/index.js' {
+ import { startOfMinute } from 'date-fns'
+ export default startOfMinute
+}
+
+declare module 'date-fns/startOfMonth/index.js' {
+ import { startOfMonth } from 'date-fns'
+ export default startOfMonth
+}
+
+declare module 'date-fns/startOfQuarter/index.js' {
+ import { startOfQuarter } from 'date-fns'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/startOfSecond/index.js' {
+ import { startOfSecond } from 'date-fns'
+ export default startOfSecond
+}
+
+declare module 'date-fns/startOfToday/index.js' {
+ import { startOfToday } from 'date-fns'
+ export default startOfToday
+}
+
+declare module 'date-fns/startOfTomorrow/index.js' {
+ import { startOfTomorrow } from 'date-fns'
+ export default startOfTomorrow
+}
+
+declare module 'date-fns/startOfWeek/index.js' {
+ import { startOfWeek } from 'date-fns'
+ export default startOfWeek
+}
+
+declare module 'date-fns/startOfWeekYear/index.js' {
+ import { startOfWeekYear } from 'date-fns'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/startOfYear/index.js' {
+ import { startOfYear } from 'date-fns'
+ export default startOfYear
+}
+
+declare module 'date-fns/startOfYesterday/index.js' {
+ import { startOfYesterday } from 'date-fns'
+ export default startOfYesterday
+}
+
+declare module 'date-fns/sub/index.js' {
+ import { sub } from 'date-fns'
+ export default sub
+}
+
+declare module 'date-fns/subBusinessDays/index.js' {
+ import { subBusinessDays } from 'date-fns'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/subDays/index.js' {
+ import { subDays } from 'date-fns'
+ export default subDays
+}
+
+declare module 'date-fns/subHours/index.js' {
+ import { subHours } from 'date-fns'
+ export default subHours
+}
+
+declare module 'date-fns/subISOWeekYears/index.js' {
+ import { subISOWeekYears } from 'date-fns'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/subMilliseconds/index.js' {
+ import { subMilliseconds } from 'date-fns'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/subMinutes/index.js' {
+ import { subMinutes } from 'date-fns'
+ export default subMinutes
+}
+
+declare module 'date-fns/subMonths/index.js' {
+ import { subMonths } from 'date-fns'
+ export default subMonths
+}
+
+declare module 'date-fns/subQuarters/index.js' {
+ import { subQuarters } from 'date-fns'
+ export default subQuarters
+}
+
+declare module 'date-fns/subSeconds/index.js' {
+ import { subSeconds } from 'date-fns'
+ export default subSeconds
+}
+
+declare module 'date-fns/subWeeks/index.js' {
+ import { subWeeks } from 'date-fns'
+ export default subWeeks
+}
+
+declare module 'date-fns/subYears/index.js' {
+ import { subYears } from 'date-fns'
+ export default subYears
+}
+
+declare module 'date-fns/toDate/index.js' {
+ import { toDate } from 'date-fns'
+ export default toDate
+}
+
+declare module 'date-fns/weeksToDays/index.js' {
+ import { weeksToDays } from 'date-fns'
+ export default weeksToDays
+}
+
+declare module 'date-fns/yearsToMonths/index.js' {
+ import { yearsToMonths } from 'date-fns'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/yearsToQuarters/index.js' {
+ import { yearsToQuarters } from 'date-fns'
+ export default yearsToQuarters
+}
+
+// FP Functions
+
+declare module 'date-fns/fp' {
+ const add: CurriedFn2<Duration, Date | number, Date>
+ namespace add {}
+
+ const addBusinessDays: CurriedFn2<number, Date | number, Date>
+ namespace addBusinessDays {}
+
+ const addDays: CurriedFn2<number, Date | number, Date>
+ namespace addDays {}
+
+ const addHours: CurriedFn2<number, Date | number, Date>
+ namespace addHours {}
+
+ const addISOWeekYears: CurriedFn2<number, Date | number, Date>
+ namespace addISOWeekYears {}
+
+ const addMilliseconds: CurriedFn2<number, Date | number, Date>
+ namespace addMilliseconds {}
+
+ const addMinutes: CurriedFn2<number, Date | number, Date>
+ namespace addMinutes {}
+
+ const addMonths: CurriedFn2<number, Date | number, Date>
+ namespace addMonths {}
+
+ const addQuarters: CurriedFn2<number, Date | number, Date>
+ namespace addQuarters {}
+
+ const addSeconds: CurriedFn2<number, Date | number, Date>
+ namespace addSeconds {}
+
+ const addWeeks: CurriedFn2<number, Date | number, Date>
+ namespace addWeeks {}
+
+ const addYears: CurriedFn2<number, Date | number, Date>
+ namespace addYears {}
+
+ const areIntervalsOverlapping: CurriedFn2<Interval, Interval, boolean>
+ namespace areIntervalsOverlapping {}
+
+ const areIntervalsOverlappingWithOptions: CurriedFn3<
+ {
+ inclusive?: boolean
+ },
+ Interval,
+ Interval,
+ boolean
+ >
+ namespace areIntervalsOverlappingWithOptions {}
+
+ const closestIndexTo: CurriedFn2<(Date | number)[], Date | number, number>
+ namespace closestIndexTo {}
+
+ const closestTo: CurriedFn2<(Date | number)[], Date | number, Date>
+ namespace closestTo {}
+
+ const compareAsc: CurriedFn2<Date | number, Date | number, number>
+ namespace compareAsc {}
+
+ const compareDesc: CurriedFn2<Date | number, Date | number, number>
+ namespace compareDesc {}
+
+ const daysToWeeks: CurriedFn1<number, number>
+ namespace daysToWeeks {}
+
+ const differenceInBusinessDays: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInBusinessDays {}
+
+ const differenceInCalendarDays: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarDays {}
+
+ const differenceInCalendarISOWeeks: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarISOWeeks {}
+
+ const differenceInCalendarISOWeekYears: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarISOWeekYears {}
+
+ const differenceInCalendarMonths: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarMonths {}
+
+ const differenceInCalendarQuarters: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarQuarters {}
+
+ const differenceInCalendarWeeks: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarWeeks {}
+
+ const differenceInCalendarWeeksWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarWeeksWithOptions {}
+
+ const differenceInCalendarYears: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarYears {}
+
+ const differenceInDays: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInDays {}
+
+ const differenceInHours: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInHours {}
+
+ const differenceInISOWeekYears: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInISOWeekYears {}
+
+ const differenceInMilliseconds: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInMilliseconds {}
+
+ const differenceInMinutes: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInMinutes {}
+
+ const differenceInMonths: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInMonths {}
+
+ const differenceInQuarters: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInQuarters {}
+
+ const differenceInSeconds: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInSeconds {}
+
+ const differenceInWeeks: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInWeeks {}
+
+ const differenceInYears: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInYears {}
+
+ const eachDayOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachDayOfInterval {}
+
+ const eachDayOfIntervalWithOptions: CurriedFn2<
+ {
+ step?: number
+ },
+ Interval,
+ Date[]
+ >
+ namespace eachDayOfIntervalWithOptions {}
+
+ const eachHourOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachHourOfInterval {}
+
+ const eachHourOfIntervalWithOptions: CurriedFn2<
+ {
+ step?: number
+ },
+ Interval,
+ Date[]
+ >
+ namespace eachHourOfIntervalWithOptions {}
+
+ const eachMinuteOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachMinuteOfInterval {}
+
+ const eachMinuteOfIntervalWithOptions: CurriedFn2<
+ {
+ step?: number
+ },
+ Interval,
+ Date[]
+ >
+ namespace eachMinuteOfIntervalWithOptions {}
+
+ const eachMonthOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachMonthOfInterval {}
+
+ const eachQuarterOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachQuarterOfInterval {}
+
+ const eachWeekendOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachWeekendOfInterval {}
+
+ const eachWeekendOfMonth: CurriedFn1<Date | number, Date[]>
+ namespace eachWeekendOfMonth {}
+
+ const eachWeekendOfYear: CurriedFn1<Date | number, Date[]>
+ namespace eachWeekendOfYear {}
+
+ const eachWeekOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachWeekOfInterval {}
+
+ const eachWeekOfIntervalWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Interval,
+ Date[]
+ >
+ namespace eachWeekOfIntervalWithOptions {}
+
+ const eachYearOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachYearOfInterval {}
+
+ const endOfDay: CurriedFn1<Date | number, Date>
+ namespace endOfDay {}
+
+ const endOfDecade: CurriedFn1<Date | number, Date>
+ namespace endOfDecade {}
+
+ const endOfDecadeWithOptions: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2
+ },
+ Date | number,
+ Date
+ >
+ namespace endOfDecadeWithOptions {}
+
+ const endOfHour: CurriedFn1<Date | number, Date>
+ namespace endOfHour {}
+
+ const endOfISOWeek: CurriedFn1<Date | number, Date>
+ namespace endOfISOWeek {}
+
+ const endOfISOWeekYear: CurriedFn1<Date | number, Date>
+ namespace endOfISOWeekYear {}
+
+ const endOfMinute: CurriedFn1<Date | number, Date>
+ namespace endOfMinute {}
+
+ const endOfMonth: CurriedFn1<Date | number, Date>
+ namespace endOfMonth {}
+
+ const endOfQuarter: CurriedFn1<Date | number, Date>
+ namespace endOfQuarter {}
+
+ const endOfSecond: CurriedFn1<Date | number, Date>
+ namespace endOfSecond {}
+
+ const endOfWeek: CurriedFn1<Date | number, Date>
+ namespace endOfWeek {}
+
+ const endOfWeekWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date
+ >
+ namespace endOfWeekWithOptions {}
+
+ const endOfYear: CurriedFn1<Date | number, Date>
+ namespace endOfYear {}
+
+ const format: CurriedFn2<string, Date | number, string>
+ namespace format {}
+
+ const formatDistance: CurriedFn2<Date | number, Date | number, string>
+ namespace formatDistance {}
+
+ const formatDistanceStrict: CurriedFn2<Date | number, Date | number, string>
+ namespace formatDistanceStrict {}
+
+ const formatDistanceStrictWithOptions: CurriedFn3<
+ {
+ locale?: Locale
+ roundingMethod?: 'floor' | 'ceil' | 'round'
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'
+ addSuffix?: boolean
+ },
+ Date | number,
+ Date | number,
+ string
+ >
+ namespace formatDistanceStrictWithOptions {}
+
+ const formatDistanceWithOptions: CurriedFn3<
+ {
+ locale?: Locale
+ addSuffix?: boolean
+ includeSeconds?: boolean
+ },
+ Date | number,
+ Date | number,
+ string
+ >
+ namespace formatDistanceWithOptions {}
+
+ const formatDuration: CurriedFn1<Duration, string>
+ namespace formatDuration {}
+
+ const formatDurationWithOptions: CurriedFn2<
+ {
+ locale?: Locale
+ delimiter?: string
+ zero?: boolean
+ format?: string[]
+ },
+ Duration,
+ string
+ >
+ namespace formatDurationWithOptions {}
+
+ const formatISO: CurriedFn1<Date | number, string>
+ namespace formatISO {}
+
+ const formatISO9075: CurriedFn1<Date | number, string>
+ namespace formatISO9075 {}
+
+ const formatISO9075WithOptions: CurriedFn2<
+ {
+ representation?: 'complete' | 'date' | 'time'
+ format?: 'extended' | 'basic'
+ },
+ Date | number,
+ string
+ >
+ namespace formatISO9075WithOptions {}
+
+ const formatISODuration: CurriedFn1<Duration, string>
+ namespace formatISODuration {}
+
+ const formatISOWithOptions: CurriedFn2<
+ {
+ representation?: 'complete' | 'date' | 'time'
+ format?: 'extended' | 'basic'
+ },
+ Date | number,
+ string
+ >
+ namespace formatISOWithOptions {}
+
+ const formatRelative: CurriedFn2<Date | number, Date | number, string>
+ namespace formatRelative {}
+
+ const formatRelativeWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date | number,
+ string
+ >
+ namespace formatRelativeWithOptions {}
+
+ const formatRFC3339: CurriedFn1<Date | number, string>
+ namespace formatRFC3339 {}
+
+ const formatRFC3339WithOptions: CurriedFn2<
+ {
+ fractionDigits?: 0 | 1 | 2 | 3
+ },
+ Date | number,
+ string
+ >
+ namespace formatRFC3339WithOptions {}
+
+ const formatRFC7231: CurriedFn1<Date | number, string>
+ namespace formatRFC7231 {}
+
+ const formatWithOptions: CurriedFn3<
+ {
+ useAdditionalDayOfYearTokens?: boolean
+ useAdditionalWeekYearTokens?: boolean
+ firstWeekContainsDate?: number
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ string,
+ Date | number,
+ string
+ >
+ namespace formatWithOptions {}
+
+ const fromUnixTime: CurriedFn1<number, Date>
+ namespace fromUnixTime {}
+
+ const getDate: CurriedFn1<Date | number, number>
+ namespace getDate {}
+
+ const getDay: CurriedFn1<Date | number, 0 | 1 | 2 | 3 | 4 | 5 | 6>
+ namespace getDay {}
+
+ const getDayOfYear: CurriedFn1<Date | number, number>
+ namespace getDayOfYear {}
+
+ const getDaysInMonth: CurriedFn1<Date | number, number>
+ namespace getDaysInMonth {}
+
+ const getDaysInYear: CurriedFn1<Date | number, number>
+ namespace getDaysInYear {}
+
+ const getDecade: CurriedFn1<Date | number, number>
+ namespace getDecade {}
+
+ const getHours: CurriedFn1<Date | number, number>
+ namespace getHours {}
+
+ const getISODay: CurriedFn1<Date | number, number>
+ namespace getISODay {}
+
+ const getISOWeek: CurriedFn1<Date | number, number>
+ namespace getISOWeek {}
+
+ const getISOWeeksInYear: CurriedFn1<Date | number, number>
+ namespace getISOWeeksInYear {}
+
+ const getISOWeekYear: CurriedFn1<Date | number, number>
+ namespace getISOWeekYear {}
+
+ const getMilliseconds: CurriedFn1<Date | number, number>
+ namespace getMilliseconds {}
+
+ const getMinutes: CurriedFn1<Date | number, number>
+ namespace getMinutes {}
+
+ const getMonth: CurriedFn1<Date | number, number>
+ namespace getMonth {}
+
+ const getOverlappingDaysInIntervals: CurriedFn2<Interval, Interval, number>
+ namespace getOverlappingDaysInIntervals {}
+
+ const getQuarter: CurriedFn1<Date | number, number>
+ namespace getQuarter {}
+
+ const getSeconds: CurriedFn1<Date | number, number>
+ namespace getSeconds {}
+
+ const getTime: CurriedFn1<Date | number, number>
+ namespace getTime {}
+
+ const getUnixTime: CurriedFn1<Date | number, number>
+ namespace getUnixTime {}
+
+ const getWeek: CurriedFn1<Date | number, number>
+ namespace getWeek {}
+
+ const getWeekOfMonth: CurriedFn1<Date | number, number>
+ namespace getWeekOfMonth {}
+
+ const getWeekOfMonthWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ number
+ >
+ namespace getWeekOfMonthWithOptions {}
+
+ const getWeeksInMonth: CurriedFn1<Date | number, number>
+ namespace getWeeksInMonth {}
+
+ const getWeeksInMonthWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ number
+ >
+ namespace getWeeksInMonthWithOptions {}
+
+ const getWeekWithOptions: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ number
+ >
+ namespace getWeekWithOptions {}
+
+ const getWeekYear: CurriedFn1<Date | number, number>
+ namespace getWeekYear {}
+
+ const getWeekYearWithOptions: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ number
+ >
+ namespace getWeekYearWithOptions {}
+
+ const getYear: CurriedFn1<Date | number, number>
+ namespace getYear {}
+
+ const hoursToMilliseconds: CurriedFn1<number, number>
+ namespace hoursToMilliseconds {}
+
+ const hoursToMinutes: CurriedFn1<number, number>
+ namespace hoursToMinutes {}
+
+ const hoursToSeconds: CurriedFn1<number, number>
+ namespace hoursToSeconds {}
+
+ const intervalToDuration: CurriedFn1<Interval, Duration>
+ namespace intervalToDuration {}
+
+ const intlFormat: CurriedFn3<
+ {
+ locale?: string | string[]
+ },
+ {
+ timeZone?: string
+ hour12?: boolean
+ formatMatcher?: 'basic' | 'best fit'
+ timeZoneName?: 'short' | 'long'
+ second?: 'numeric' | '2-digit'
+ minute?: 'numeric' | '2-digit'
+ hour?: 'numeric' | '2-digit'
+ day?: 'numeric' | '2-digit'
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long'
+ year?: 'numeric' | '2-digit'
+ era?: 'narrow' | 'short' | 'long'
+ weekday?: 'narrow' | 'short' | 'long'
+ localeMatcher?: 'lookup' | 'best fit'
+ },
+ Date | number,
+ string
+ >
+ namespace intlFormat {}
+
+ const isAfter: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isAfter {}
+
+ const isBefore: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isBefore {}
+
+ const isDate: CurriedFn1<any, boolean>
+ namespace isDate {}
+
+ const isEqual: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isEqual {}
+
+ const isExists: CurriedFn3<number, number, number, boolean>
+ namespace isExists {}
+
+ const isFirstDayOfMonth: CurriedFn1<Date | number, boolean>
+ namespace isFirstDayOfMonth {}
+
+ const isFriday: CurriedFn1<Date | number, boolean>
+ namespace isFriday {}
+
+ const isLastDayOfMonth: CurriedFn1<Date | number, boolean>
+ namespace isLastDayOfMonth {}
+
+ const isLeapYear: CurriedFn1<Date | number, boolean>
+ namespace isLeapYear {}
+
+ const isMatch: CurriedFn2<string, string, boolean>
+ namespace isMatch {}
+
+ const isMatchWithOptions: CurriedFn3<
+ {
+ useAdditionalDayOfYearTokens?: boolean
+ useAdditionalWeekYearTokens?: boolean
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ string,
+ string,
+ boolean
+ >
+ namespace isMatchWithOptions {}
+
+ const isMonday: CurriedFn1<Date | number, boolean>
+ namespace isMonday {}
+
+ const isSameDay: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameDay {}
+
+ const isSameHour: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameHour {}
+
+ const isSameISOWeek: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameISOWeek {}
+
+ const isSameISOWeekYear: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameISOWeekYear {}
+
+ const isSameMinute: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameMinute {}
+
+ const isSameMonth: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameMonth {}
+
+ const isSameQuarter: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameQuarter {}
+
+ const isSameSecond: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameSecond {}
+
+ const isSameWeek: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameWeek {}
+
+ const isSameWeekWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date | number,
+ boolean
+ >
+ namespace isSameWeekWithOptions {}
+
+ const isSameYear: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameYear {}
+
+ const isSaturday: CurriedFn1<Date | number, boolean>
+ namespace isSaturday {}
+
+ const isSunday: CurriedFn1<Date | number, boolean>
+ namespace isSunday {}
+
+ const isThursday: CurriedFn1<Date | number, boolean>
+ namespace isThursday {}
+
+ const isTuesday: CurriedFn1<Date | number, boolean>
+ namespace isTuesday {}
+
+ const isValid: CurriedFn1<any, boolean>
+ namespace isValid {}
+
+ const isWednesday: CurriedFn1<Date | number, boolean>
+ namespace isWednesday {}
+
+ const isWeekend: CurriedFn1<Date | number, boolean>
+ namespace isWeekend {}
+
+ const isWithinInterval: CurriedFn2<Interval, Date | number, boolean>
+ namespace isWithinInterval {}
+
+ const lastDayOfDecade: CurriedFn1<Date | number, Date>
+ namespace lastDayOfDecade {}
+
+ const lastDayOfISOWeek: CurriedFn1<Date | number, Date>
+ namespace lastDayOfISOWeek {}
+
+ const lastDayOfISOWeekYear: CurriedFn1<Date | number, Date>
+ namespace lastDayOfISOWeekYear {}
+
+ const lastDayOfMonth: CurriedFn1<Date | number, Date>
+ namespace lastDayOfMonth {}
+
+ const lastDayOfQuarter: CurriedFn1<Date | number, Date>
+ namespace lastDayOfQuarter {}
+
+ const lastDayOfQuarterWithOptions: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2
+ },
+ Date | number,
+ Date
+ >
+ namespace lastDayOfQuarterWithOptions {}
+
+ const lastDayOfWeek: CurriedFn1<Date | number, Date>
+ namespace lastDayOfWeek {}
+
+ const lastDayOfWeekWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date
+ >
+ namespace lastDayOfWeekWithOptions {}
+
+ const lastDayOfYear: CurriedFn1<Date | number, Date>
+ namespace lastDayOfYear {}
+
+ const lightFormat: CurriedFn2<string, Date | number, string>
+ namespace lightFormat {}
+
+ const max: CurriedFn1<(Date | number)[], Date>
+ namespace max {}
+
+ const milliseconds: CurriedFn1<Duration, number>
+ namespace milliseconds {}
+
+ const millisecondsToHours: CurriedFn1<number, number>
+ namespace millisecondsToHours {}
+
+ const millisecondsToMinutes: CurriedFn1<number, number>
+ namespace millisecondsToMinutes {}
+
+ const millisecondsToSeconds: CurriedFn1<number, number>
+ namespace millisecondsToSeconds {}
+
+ const min: CurriedFn1<(Date | number)[], Date>
+ namespace min {}
+
+ const minutesToHours: CurriedFn1<number, number>
+ namespace minutesToHours {}
+
+ const minutesToMilliseconds: CurriedFn1<number, number>
+ namespace minutesToMilliseconds {}
+
+ const minutesToSeconds: CurriedFn1<number, number>
+ namespace minutesToSeconds {}
+
+ const monthsToQuarters: CurriedFn1<number, number>
+ namespace monthsToQuarters {}
+
+ const monthsToYears: CurriedFn1<number, number>
+ namespace monthsToYears {}
+
+ const nextDay: CurriedFn2<Day, Date | number, Date>
+ namespace nextDay {}
+
+ const nextFriday: CurriedFn1<Date | number, Date>
+ namespace nextFriday {}
+
+ const nextMonday: CurriedFn1<Date | number, Date>
+ namespace nextMonday {}
+
+ const nextSaturday: CurriedFn1<Date | number, Date>
+ namespace nextSaturday {}
+
+ const nextSunday: CurriedFn1<Date | number, Date>
+ namespace nextSunday {}
+
+ const nextThursday: CurriedFn1<Date | number, Date>
+ namespace nextThursday {}
+
+ const nextTuesday: CurriedFn1<Date | number, Date>
+ namespace nextTuesday {}
+
+ const nextWednesday: CurriedFn1<Date | number, Date>
+ namespace nextWednesday {}
+
+ const parse: CurriedFn3<Date | number, string, string, Date>
+ namespace parse {}
+
+ const parseISO: CurriedFn1<string, Date>
+ namespace parseISO {}
+
+ const parseISOWithOptions: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2
+ },
+ string,
+ Date
+ >
+ namespace parseISOWithOptions {}
+
+ const parseJSON: CurriedFn1<string | number | Date, Date>
+ namespace parseJSON {}
+
+ const parseWithOptions: CurriedFn4<
+ {
+ useAdditionalDayOfYearTokens?: boolean
+ useAdditionalWeekYearTokens?: boolean
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ string,
+ string,
+ Date
+ >
+ namespace parseWithOptions {}
+
+ const quartersToMonths: CurriedFn1<number, number>
+ namespace quartersToMonths {}
+
+ const quartersToYears: CurriedFn1<number, number>
+ namespace quartersToYears {}
+
+ const roundToNearestMinutes: CurriedFn1<Date | number, Date>
+ namespace roundToNearestMinutes {}
+
+ const roundToNearestMinutesWithOptions: CurriedFn2<
+ {
+ nearestTo?: number
+ },
+ Date | number,
+ Date
+ >
+ namespace roundToNearestMinutesWithOptions {}
+
+ const secondsToHours: CurriedFn1<number, number>
+ namespace secondsToHours {}
+
+ const secondsToMilliseconds: CurriedFn1<number, number>
+ namespace secondsToMilliseconds {}
+
+ const secondsToMinutes: CurriedFn1<number, number>
+ namespace secondsToMinutes {}
+
+ const set: CurriedFn2<
+ {
+ milliseconds?: number
+ seconds?: number
+ minutes?: number
+ hours?: number
+ date?: number
+ month?: number
+ year?: number
+ },
+ Date | number,
+ Date
+ >
+ namespace set {}
+
+ const setDate: CurriedFn2<number, Date | number, Date>
+ namespace setDate {}
+
+ const setDay: CurriedFn2<number, Date | number, Date>
+ namespace setDay {}
+
+ const setDayOfYear: CurriedFn2<number, Date | number, Date>
+ namespace setDayOfYear {}
+
+ const setDayWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ number,
+ Date | number,
+ Date
+ >
+ namespace setDayWithOptions {}
+
+ const setHours: CurriedFn2<number, Date | number, Date>
+ namespace setHours {}
+
+ const setISODay: CurriedFn2<number, Date | number, Date>
+ namespace setISODay {}
+
+ const setISOWeek: CurriedFn2<number, Date | number, Date>
+ namespace setISOWeek {}
+
+ const setISOWeekYear: CurriedFn2<number, Date | number, Date>
+ namespace setISOWeekYear {}
+
+ const setMilliseconds: CurriedFn2<number, Date | number, Date>
+ namespace setMilliseconds {}
+
+ const setMinutes: CurriedFn2<number, Date | number, Date>
+ namespace setMinutes {}
+
+ const setMonth: CurriedFn2<number, Date | number, Date>
+ namespace setMonth {}
+
+ const setQuarter: CurriedFn2<number, Date | number, Date>
+ namespace setQuarter {}
+
+ const setSeconds: CurriedFn2<number, Date | number, Date>
+ namespace setSeconds {}
+
+ const setWeek: CurriedFn2<number, Date | number, Date>
+ namespace setWeek {}
+
+ const setWeekWithOptions: CurriedFn3<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ number,
+ Date | number,
+ Date
+ >
+ namespace setWeekWithOptions {}
+
+ const setWeekYear: CurriedFn2<number, Date | number, Date>
+ namespace setWeekYear {}
+
+ const setWeekYearWithOptions: CurriedFn3<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ number,
+ Date | number,
+ Date
+ >
+ namespace setWeekYearWithOptions {}
+
+ const setYear: CurriedFn2<number, Date | number, Date>
+ namespace setYear {}
+
+ const startOfDay: CurriedFn1<Date | number, Date>
+ namespace startOfDay {}
+
+ const startOfDecade: CurriedFn1<Date | number, Date>
+ namespace startOfDecade {}
+
+ const startOfHour: CurriedFn1<Date | number, Date>
+ namespace startOfHour {}
+
+ const startOfISOWeek: CurriedFn1<Date | number, Date>
+ namespace startOfISOWeek {}
+
+ const startOfISOWeekYear: CurriedFn1<Date | number, Date>
+ namespace startOfISOWeekYear {}
+
+ const startOfMinute: CurriedFn1<Date | number, Date>
+ namespace startOfMinute {}
+
+ const startOfMonth: CurriedFn1<Date | number, Date>
+ namespace startOfMonth {}
+
+ const startOfQuarter: CurriedFn1<Date | number, Date>
+ namespace startOfQuarter {}
+
+ const startOfSecond: CurriedFn1<Date | number, Date>
+ namespace startOfSecond {}
+
+ const startOfWeek: CurriedFn1<Date | number, Date>
+ namespace startOfWeek {}
+
+ const startOfWeekWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date
+ >
+ namespace startOfWeekWithOptions {}
+
+ const startOfWeekYear: CurriedFn1<Date | number, Date>
+ namespace startOfWeekYear {}
+
+ const startOfWeekYearWithOptions: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date
+ >
+ namespace startOfWeekYearWithOptions {}
+
+ const startOfYear: CurriedFn1<Date | number, Date>
+ namespace startOfYear {}
+
+ const sub: CurriedFn2<Duration, Date | number, Date>
+ namespace sub {}
+
+ const subBusinessDays: CurriedFn2<number, Date | number, Date>
+ namespace subBusinessDays {}
+
+ const subDays: CurriedFn2<number, Date | number, Date>
+ namespace subDays {}
+
+ const subHours: CurriedFn2<number, Date | number, Date>
+ namespace subHours {}
+
+ const subISOWeekYears: CurriedFn2<number, Date | number, Date>
+ namespace subISOWeekYears {}
+
+ const subMilliseconds: CurriedFn2<number, Date | number, Date>
+ namespace subMilliseconds {}
+
+ const subMinutes: CurriedFn2<number, Date | number, Date>
+ namespace subMinutes {}
+
+ const subMonths: CurriedFn2<number, Date | number, Date>
+ namespace subMonths {}
+
+ const subQuarters: CurriedFn2<number, Date | number, Date>
+ namespace subQuarters {}
+
+ const subSeconds: CurriedFn2<number, Date | number, Date>
+ namespace subSeconds {}
+
+ const subWeeks: CurriedFn2<number, Date | number, Date>
+ namespace subWeeks {}
+
+ const subYears: CurriedFn2<number, Date | number, Date>
+ namespace subYears {}
+
+ const toDate: CurriedFn1<Date | number, Date>
+ namespace toDate {}
+
+ const weeksToDays: CurriedFn1<number, number>
+ namespace weeksToDays {}
+
+ const yearsToMonths: CurriedFn1<number, number>
+ namespace yearsToMonths {}
+
+ const yearsToQuarters: CurriedFn1<number, number>
+ namespace yearsToQuarters {}
+
+ const daysInWeek: number
+
+ const maxTime: number
+
+ const millisecondsInMinute: number
+
+ const millisecondsInHour: number
+
+ const millisecondsInSecond: number
+
+ const minTime: number
+
+ const minutesInHour: number
+
+ const monthsInQuarter: number
+
+ const monthsInYear: number
+
+ const quartersInYear: number
+
+ const secondsInHour: number
+
+ const secondsInMinute: number
+}
+
+declare module 'date-fns/fp/add' {
+ import { add } from 'date-fns/fp'
+ export default add
+}
+
+declare module 'date-fns/fp/addBusinessDays' {
+ import { addBusinessDays } from 'date-fns/fp'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/fp/addDays' {
+ import { addDays } from 'date-fns/fp'
+ export default addDays
+}
+
+declare module 'date-fns/fp/addHours' {
+ import { addHours } from 'date-fns/fp'
+ export default addHours
+}
+
+declare module 'date-fns/fp/addISOWeekYears' {
+ import { addISOWeekYears } from 'date-fns/fp'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/fp/addMilliseconds' {
+ import { addMilliseconds } from 'date-fns/fp'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/fp/addMinutes' {
+ import { addMinutes } from 'date-fns/fp'
+ export default addMinutes
+}
+
+declare module 'date-fns/fp/addMonths' {
+ import { addMonths } from 'date-fns/fp'
+ export default addMonths
+}
+
+declare module 'date-fns/fp/addQuarters' {
+ import { addQuarters } from 'date-fns/fp'
+ export default addQuarters
+}
+
+declare module 'date-fns/fp/addSeconds' {
+ import { addSeconds } from 'date-fns/fp'
+ export default addSeconds
+}
+
+declare module 'date-fns/fp/addWeeks' {
+ import { addWeeks } from 'date-fns/fp'
+ export default addWeeks
+}
+
+declare module 'date-fns/fp/addYears' {
+ import { addYears } from 'date-fns/fp'
+ export default addYears
+}
+
+declare module 'date-fns/fp/areIntervalsOverlapping' {
+ import { areIntervalsOverlapping } from 'date-fns/fp'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/fp/areIntervalsOverlappingWithOptions' {
+ import { areIntervalsOverlappingWithOptions } from 'date-fns/fp'
+ export default areIntervalsOverlappingWithOptions
+}
+
+declare module 'date-fns/fp/closestIndexTo' {
+ import { closestIndexTo } from 'date-fns/fp'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/fp/closestTo' {
+ import { closestTo } from 'date-fns/fp'
+ export default closestTo
+}
+
+declare module 'date-fns/fp/compareAsc' {
+ import { compareAsc } from 'date-fns/fp'
+ export default compareAsc
+}
+
+declare module 'date-fns/fp/compareDesc' {
+ import { compareDesc } from 'date-fns/fp'
+ export default compareDesc
+}
+
+declare module 'date-fns/fp/daysToWeeks' {
+ import { daysToWeeks } from 'date-fns/fp'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/fp/differenceInBusinessDays' {
+ import { differenceInBusinessDays } from 'date-fns/fp'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/fp/differenceInCalendarDays' {
+ import { differenceInCalendarDays } from 'date-fns/fp'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/fp/differenceInCalendarISOWeeks' {
+ import { differenceInCalendarISOWeeks } from 'date-fns/fp'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/fp/differenceInCalendarISOWeekYears' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns/fp'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/fp/differenceInCalendarMonths' {
+ import { differenceInCalendarMonths } from 'date-fns/fp'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/fp/differenceInCalendarQuarters' {
+ import { differenceInCalendarQuarters } from 'date-fns/fp'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/fp/differenceInCalendarWeeks' {
+ import { differenceInCalendarWeeks } from 'date-fns/fp'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/fp/differenceInCalendarWeeksWithOptions' {
+ import { differenceInCalendarWeeksWithOptions } from 'date-fns/fp'
+ export default differenceInCalendarWeeksWithOptions
+}
+
+declare module 'date-fns/fp/differenceInCalendarYears' {
+ import { differenceInCalendarYears } from 'date-fns/fp'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/fp/differenceInDays' {
+ import { differenceInDays } from 'date-fns/fp'
+ export default differenceInDays
+}
+
+declare module 'date-fns/fp/differenceInHours' {
+ import { differenceInHours } from 'date-fns/fp'
+ export default differenceInHours
+}
+
+declare module 'date-fns/fp/differenceInISOWeekYears' {
+ import { differenceInISOWeekYears } from 'date-fns/fp'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/fp/differenceInMilliseconds' {
+ import { differenceInMilliseconds } from 'date-fns/fp'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/fp/differenceInMinutes' {
+ import { differenceInMinutes } from 'date-fns/fp'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/fp/differenceInMonths' {
+ import { differenceInMonths } from 'date-fns/fp'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/fp/differenceInQuarters' {
+ import { differenceInQuarters } from 'date-fns/fp'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/fp/differenceInSeconds' {
+ import { differenceInSeconds } from 'date-fns/fp'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/fp/differenceInWeeks' {
+ import { differenceInWeeks } from 'date-fns/fp'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/fp/differenceInYears' {
+ import { differenceInYears } from 'date-fns/fp'
+ export default differenceInYears
+}
+
+declare module 'date-fns/fp/eachDayOfInterval' {
+ import { eachDayOfInterval } from 'date-fns/fp'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/fp/eachDayOfIntervalWithOptions' {
+ import { eachDayOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachDayOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachHourOfInterval' {
+ import { eachHourOfInterval } from 'date-fns/fp'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/fp/eachHourOfIntervalWithOptions' {
+ import { eachHourOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachHourOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachMinuteOfInterval' {
+ import { eachMinuteOfInterval } from 'date-fns/fp'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/fp/eachMinuteOfIntervalWithOptions' {
+ import { eachMinuteOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachMinuteOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachMonthOfInterval' {
+ import { eachMonthOfInterval } from 'date-fns/fp'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/fp/eachQuarterOfInterval' {
+ import { eachQuarterOfInterval } from 'date-fns/fp'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/fp/eachWeekendOfInterval' {
+ import { eachWeekendOfInterval } from 'date-fns/fp'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/fp/eachWeekendOfMonth' {
+ import { eachWeekendOfMonth } from 'date-fns/fp'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/fp/eachWeekendOfYear' {
+ import { eachWeekendOfYear } from 'date-fns/fp'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/fp/eachWeekOfInterval' {
+ import { eachWeekOfInterval } from 'date-fns/fp'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/fp/eachWeekOfIntervalWithOptions' {
+ import { eachWeekOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachWeekOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachYearOfInterval' {
+ import { eachYearOfInterval } from 'date-fns/fp'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/fp/endOfDay' {
+ import { endOfDay } from 'date-fns/fp'
+ export default endOfDay
+}
+
+declare module 'date-fns/fp/endOfDecade' {
+ import { endOfDecade } from 'date-fns/fp'
+ export default endOfDecade
+}
+
+declare module 'date-fns/fp/endOfDecadeWithOptions' {
+ import { endOfDecadeWithOptions } from 'date-fns/fp'
+ export default endOfDecadeWithOptions
+}
+
+declare module 'date-fns/fp/endOfHour' {
+ import { endOfHour } from 'date-fns/fp'
+ export default endOfHour
+}
+
+declare module 'date-fns/fp/endOfISOWeek' {
+ import { endOfISOWeek } from 'date-fns/fp'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/fp/endOfISOWeekYear' {
+ import { endOfISOWeekYear } from 'date-fns/fp'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/fp/endOfMinute' {
+ import { endOfMinute } from 'date-fns/fp'
+ export default endOfMinute
+}
+
+declare module 'date-fns/fp/endOfMonth' {
+ import { endOfMonth } from 'date-fns/fp'
+ export default endOfMonth
+}
+
+declare module 'date-fns/fp/endOfQuarter' {
+ import { endOfQuarter } from 'date-fns/fp'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/fp/endOfSecond' {
+ import { endOfSecond } from 'date-fns/fp'
+ export default endOfSecond
+}
+
+declare module 'date-fns/fp/endOfWeek' {
+ import { endOfWeek } from 'date-fns/fp'
+ export default endOfWeek
+}
+
+declare module 'date-fns/fp/endOfWeekWithOptions' {
+ import { endOfWeekWithOptions } from 'date-fns/fp'
+ export default endOfWeekWithOptions
+}
+
+declare module 'date-fns/fp/endOfYear' {
+ import { endOfYear } from 'date-fns/fp'
+ export default endOfYear
+}
+
+declare module 'date-fns/fp/format' {
+ import { format } from 'date-fns/fp'
+ export default format
+}
+
+declare module 'date-fns/fp/formatDistance' {
+ import { formatDistance } from 'date-fns/fp'
+ export default formatDistance
+}
+
+declare module 'date-fns/fp/formatDistanceStrict' {
+ import { formatDistanceStrict } from 'date-fns/fp'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/fp/formatDistanceStrictWithOptions' {
+ import { formatDistanceStrictWithOptions } from 'date-fns/fp'
+ export default formatDistanceStrictWithOptions
+}
+
+declare module 'date-fns/fp/formatDistanceWithOptions' {
+ import { formatDistanceWithOptions } from 'date-fns/fp'
+ export default formatDistanceWithOptions
+}
+
+declare module 'date-fns/fp/formatDuration' {
+ import { formatDuration } from 'date-fns/fp'
+ export default formatDuration
+}
+
+declare module 'date-fns/fp/formatDurationWithOptions' {
+ import { formatDurationWithOptions } from 'date-fns/fp'
+ export default formatDurationWithOptions
+}
+
+declare module 'date-fns/fp/formatISO' {
+ import { formatISO } from 'date-fns/fp'
+ export default formatISO
+}
+
+declare module 'date-fns/fp/formatISO9075' {
+ import { formatISO9075 } from 'date-fns/fp'
+ export default formatISO9075
+}
+
+declare module 'date-fns/fp/formatISO9075WithOptions' {
+ import { formatISO9075WithOptions } from 'date-fns/fp'
+ export default formatISO9075WithOptions
+}
+
+declare module 'date-fns/fp/formatISODuration' {
+ import { formatISODuration } from 'date-fns/fp'
+ export default formatISODuration
+}
+
+declare module 'date-fns/fp/formatISOWithOptions' {
+ import { formatISOWithOptions } from 'date-fns/fp'
+ export default formatISOWithOptions
+}
+
+declare module 'date-fns/fp/formatRelative' {
+ import { formatRelative } from 'date-fns/fp'
+ export default formatRelative
+}
+
+declare module 'date-fns/fp/formatRelativeWithOptions' {
+ import { formatRelativeWithOptions } from 'date-fns/fp'
+ export default formatRelativeWithOptions
+}
+
+declare module 'date-fns/fp/formatRFC3339' {
+ import { formatRFC3339 } from 'date-fns/fp'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/fp/formatRFC3339WithOptions' {
+ import { formatRFC3339WithOptions } from 'date-fns/fp'
+ export default formatRFC3339WithOptions
+}
+
+declare module 'date-fns/fp/formatRFC7231' {
+ import { formatRFC7231 } from 'date-fns/fp'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/fp/formatWithOptions' {
+ import { formatWithOptions } from 'date-fns/fp'
+ export default formatWithOptions
+}
+
+declare module 'date-fns/fp/fromUnixTime' {
+ import { fromUnixTime } from 'date-fns/fp'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/fp/getDate' {
+ import { getDate } from 'date-fns/fp'
+ export default getDate
+}
+
+declare module 'date-fns/fp/getDay' {
+ import { getDay } from 'date-fns/fp'
+ export default getDay
+}
+
+declare module 'date-fns/fp/getDayOfYear' {
+ import { getDayOfYear } from 'date-fns/fp'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/fp/getDaysInMonth' {
+ import { getDaysInMonth } from 'date-fns/fp'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/fp/getDaysInYear' {
+ import { getDaysInYear } from 'date-fns/fp'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/fp/getDecade' {
+ import { getDecade } from 'date-fns/fp'
+ export default getDecade
+}
+
+declare module 'date-fns/fp/getHours' {
+ import { getHours } from 'date-fns/fp'
+ export default getHours
+}
+
+declare module 'date-fns/fp/getISODay' {
+ import { getISODay } from 'date-fns/fp'
+ export default getISODay
+}
+
+declare module 'date-fns/fp/getISOWeek' {
+ import { getISOWeek } from 'date-fns/fp'
+ export default getISOWeek
+}
+
+declare module 'date-fns/fp/getISOWeeksInYear' {
+ import { getISOWeeksInYear } from 'date-fns/fp'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/fp/getISOWeekYear' {
+ import { getISOWeekYear } from 'date-fns/fp'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/fp/getMilliseconds' {
+ import { getMilliseconds } from 'date-fns/fp'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/fp/getMinutes' {
+ import { getMinutes } from 'date-fns/fp'
+ export default getMinutes
+}
+
+declare module 'date-fns/fp/getMonth' {
+ import { getMonth } from 'date-fns/fp'
+ export default getMonth
+}
+
+declare module 'date-fns/fp/getOverlappingDaysInIntervals' {
+ import { getOverlappingDaysInIntervals } from 'date-fns/fp'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/fp/getQuarter' {
+ import { getQuarter } from 'date-fns/fp'
+ export default getQuarter
+}
+
+declare module 'date-fns/fp/getSeconds' {
+ import { getSeconds } from 'date-fns/fp'
+ export default getSeconds
+}
+
+declare module 'date-fns/fp/getTime' {
+ import { getTime } from 'date-fns/fp'
+ export default getTime
+}
+
+declare module 'date-fns/fp/getUnixTime' {
+ import { getUnixTime } from 'date-fns/fp'
+ export default getUnixTime
+}
+
+declare module 'date-fns/fp/getWeek' {
+ import { getWeek } from 'date-fns/fp'
+ export default getWeek
+}
+
+declare module 'date-fns/fp/getWeekOfMonth' {
+ import { getWeekOfMonth } from 'date-fns/fp'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/fp/getWeekOfMonthWithOptions' {
+ import { getWeekOfMonthWithOptions } from 'date-fns/fp'
+ export default getWeekOfMonthWithOptions
+}
+
+declare module 'date-fns/fp/getWeeksInMonth' {
+ import { getWeeksInMonth } from 'date-fns/fp'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/fp/getWeeksInMonthWithOptions' {
+ import { getWeeksInMonthWithOptions } from 'date-fns/fp'
+ export default getWeeksInMonthWithOptions
+}
+
+declare module 'date-fns/fp/getWeekWithOptions' {
+ import { getWeekWithOptions } from 'date-fns/fp'
+ export default getWeekWithOptions
+}
+
+declare module 'date-fns/fp/getWeekYear' {
+ import { getWeekYear } from 'date-fns/fp'
+ export default getWeekYear
+}
+
+declare module 'date-fns/fp/getWeekYearWithOptions' {
+ import { getWeekYearWithOptions } from 'date-fns/fp'
+ export default getWeekYearWithOptions
+}
+
+declare module 'date-fns/fp/getYear' {
+ import { getYear } from 'date-fns/fp'
+ export default getYear
+}
+
+declare module 'date-fns/fp/hoursToMilliseconds' {
+ import { hoursToMilliseconds } from 'date-fns/fp'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/fp/hoursToMinutes' {
+ import { hoursToMinutes } from 'date-fns/fp'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/fp/hoursToSeconds' {
+ import { hoursToSeconds } from 'date-fns/fp'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/fp/intervalToDuration' {
+ import { intervalToDuration } from 'date-fns/fp'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/fp/intlFormat' {
+ import { intlFormat } from 'date-fns/fp'
+ export default intlFormat
+}
+
+declare module 'date-fns/fp/isAfter' {
+ import { isAfter } from 'date-fns/fp'
+ export default isAfter
+}
+
+declare module 'date-fns/fp/isBefore' {
+ import { isBefore } from 'date-fns/fp'
+ export default isBefore
+}
+
+declare module 'date-fns/fp/isDate' {
+ import { isDate } from 'date-fns/fp'
+ export default isDate
+}
+
+declare module 'date-fns/fp/isEqual' {
+ import { isEqual } from 'date-fns/fp'
+ export default isEqual
+}
+
+declare module 'date-fns/fp/isExists' {
+ import { isExists } from 'date-fns/fp'
+ export default isExists
+}
+
+declare module 'date-fns/fp/isFirstDayOfMonth' {
+ import { isFirstDayOfMonth } from 'date-fns/fp'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/fp/isFriday' {
+ import { isFriday } from 'date-fns/fp'
+ export default isFriday
+}
+
+declare module 'date-fns/fp/isLastDayOfMonth' {
+ import { isLastDayOfMonth } from 'date-fns/fp'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/fp/isLeapYear' {
+ import { isLeapYear } from 'date-fns/fp'
+ export default isLeapYear
+}
+
+declare module 'date-fns/fp/isMatch' {
+ import { isMatch } from 'date-fns/fp'
+ export default isMatch
+}
+
+declare module 'date-fns/fp/isMatchWithOptions' {
+ import { isMatchWithOptions } from 'date-fns/fp'
+ export default isMatchWithOptions
+}
+
+declare module 'date-fns/fp/isMonday' {
+ import { isMonday } from 'date-fns/fp'
+ export default isMonday
+}
+
+declare module 'date-fns/fp/isSameDay' {
+ import { isSameDay } from 'date-fns/fp'
+ export default isSameDay
+}
+
+declare module 'date-fns/fp/isSameHour' {
+ import { isSameHour } from 'date-fns/fp'
+ export default isSameHour
+}
+
+declare module 'date-fns/fp/isSameISOWeek' {
+ import { isSameISOWeek } from 'date-fns/fp'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/fp/isSameISOWeekYear' {
+ import { isSameISOWeekYear } from 'date-fns/fp'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/fp/isSameMinute' {
+ import { isSameMinute } from 'date-fns/fp'
+ export default isSameMinute
+}
+
+declare module 'date-fns/fp/isSameMonth' {
+ import { isSameMonth } from 'date-fns/fp'
+ export default isSameMonth
+}
+
+declare module 'date-fns/fp/isSameQuarter' {
+ import { isSameQuarter } from 'date-fns/fp'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/fp/isSameSecond' {
+ import { isSameSecond } from 'date-fns/fp'
+ export default isSameSecond
+}
+
+declare module 'date-fns/fp/isSameWeek' {
+ import { isSameWeek } from 'date-fns/fp'
+ export default isSameWeek
+}
+
+declare module 'date-fns/fp/isSameWeekWithOptions' {
+ import { isSameWeekWithOptions } from 'date-fns/fp'
+ export default isSameWeekWithOptions
+}
+
+declare module 'date-fns/fp/isSameYear' {
+ import { isSameYear } from 'date-fns/fp'
+ export default isSameYear
+}
+
+declare module 'date-fns/fp/isSaturday' {
+ import { isSaturday } from 'date-fns/fp'
+ export default isSaturday
+}
+
+declare module 'date-fns/fp/isSunday' {
+ import { isSunday } from 'date-fns/fp'
+ export default isSunday
+}
+
+declare module 'date-fns/fp/isThursday' {
+ import { isThursday } from 'date-fns/fp'
+ export default isThursday
+}
+
+declare module 'date-fns/fp/isTuesday' {
+ import { isTuesday } from 'date-fns/fp'
+ export default isTuesday
+}
+
+declare module 'date-fns/fp/isValid' {
+ import { isValid } from 'date-fns/fp'
+ export default isValid
+}
+
+declare module 'date-fns/fp/isWednesday' {
+ import { isWednesday } from 'date-fns/fp'
+ export default isWednesday
+}
+
+declare module 'date-fns/fp/isWeekend' {
+ import { isWeekend } from 'date-fns/fp'
+ export default isWeekend
+}
+
+declare module 'date-fns/fp/isWithinInterval' {
+ import { isWithinInterval } from 'date-fns/fp'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/fp/lastDayOfDecade' {
+ import { lastDayOfDecade } from 'date-fns/fp'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/fp/lastDayOfISOWeek' {
+ import { lastDayOfISOWeek } from 'date-fns/fp'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/fp/lastDayOfISOWeekYear' {
+ import { lastDayOfISOWeekYear } from 'date-fns/fp'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/fp/lastDayOfMonth' {
+ import { lastDayOfMonth } from 'date-fns/fp'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/fp/lastDayOfQuarter' {
+ import { lastDayOfQuarter } from 'date-fns/fp'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/fp/lastDayOfQuarterWithOptions' {
+ import { lastDayOfQuarterWithOptions } from 'date-fns/fp'
+ export default lastDayOfQuarterWithOptions
+}
+
+declare module 'date-fns/fp/lastDayOfWeek' {
+ import { lastDayOfWeek } from 'date-fns/fp'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/fp/lastDayOfWeekWithOptions' {
+ import { lastDayOfWeekWithOptions } from 'date-fns/fp'
+ export default lastDayOfWeekWithOptions
+}
+
+declare module 'date-fns/fp/lastDayOfYear' {
+ import { lastDayOfYear } from 'date-fns/fp'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/fp/lightFormat' {
+ import { lightFormat } from 'date-fns/fp'
+ export default lightFormat
+}
+
+declare module 'date-fns/fp/max' {
+ import { max } from 'date-fns/fp'
+ export default max
+}
+
+declare module 'date-fns/fp/milliseconds' {
+ import { milliseconds } from 'date-fns/fp'
+ export default milliseconds
+}
+
+declare module 'date-fns/fp/millisecondsToHours' {
+ import { millisecondsToHours } from 'date-fns/fp'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/fp/millisecondsToMinutes' {
+ import { millisecondsToMinutes } from 'date-fns/fp'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/fp/millisecondsToSeconds' {
+ import { millisecondsToSeconds } from 'date-fns/fp'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/fp/min' {
+ import { min } from 'date-fns/fp'
+ export default min
+}
+
+declare module 'date-fns/fp/minutesToHours' {
+ import { minutesToHours } from 'date-fns/fp'
+ export default minutesToHours
+}
+
+declare module 'date-fns/fp/minutesToMilliseconds' {
+ import { minutesToMilliseconds } from 'date-fns/fp'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/fp/minutesToSeconds' {
+ import { minutesToSeconds } from 'date-fns/fp'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/fp/monthsToQuarters' {
+ import { monthsToQuarters } from 'date-fns/fp'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/fp/monthsToYears' {
+ import { monthsToYears } from 'date-fns/fp'
+ export default monthsToYears
+}
+
+declare module 'date-fns/fp/nextDay' {
+ import { nextDay } from 'date-fns/fp'
+ export default nextDay
+}
+
+declare module 'date-fns/fp/nextFriday' {
+ import { nextFriday } from 'date-fns/fp'
+ export default nextFriday
+}
+
+declare module 'date-fns/fp/nextMonday' {
+ import { nextMonday } from 'date-fns/fp'
+ export default nextMonday
+}
+
+declare module 'date-fns/fp/nextSaturday' {
+ import { nextSaturday } from 'date-fns/fp'
+ export default nextSaturday
+}
+
+declare module 'date-fns/fp/nextSunday' {
+ import { nextSunday } from 'date-fns/fp'
+ export default nextSunday
+}
+
+declare module 'date-fns/fp/nextThursday' {
+ import { nextThursday } from 'date-fns/fp'
+ export default nextThursday
+}
+
+declare module 'date-fns/fp/nextTuesday' {
+ import { nextTuesday } from 'date-fns/fp'
+ export default nextTuesday
+}
+
+declare module 'date-fns/fp/nextWednesday' {
+ import { nextWednesday } from 'date-fns/fp'
+ export default nextWednesday
+}
+
+declare module 'date-fns/fp/parse' {
+ import { parse } from 'date-fns/fp'
+ export default parse
+}
+
+declare module 'date-fns/fp/parseISO' {
+ import { parseISO } from 'date-fns/fp'
+ export default parseISO
+}
+
+declare module 'date-fns/fp/parseISOWithOptions' {
+ import { parseISOWithOptions } from 'date-fns/fp'
+ export default parseISOWithOptions
+}
+
+declare module 'date-fns/fp/parseJSON' {
+ import { parseJSON } from 'date-fns/fp'
+ export default parseJSON
+}
+
+declare module 'date-fns/fp/parseWithOptions' {
+ import { parseWithOptions } from 'date-fns/fp'
+ export default parseWithOptions
+}
+
+declare module 'date-fns/fp/quartersToMonths' {
+ import { quartersToMonths } from 'date-fns/fp'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/fp/quartersToYears' {
+ import { quartersToYears } from 'date-fns/fp'
+ export default quartersToYears
+}
+
+declare module 'date-fns/fp/roundToNearestMinutes' {
+ import { roundToNearestMinutes } from 'date-fns/fp'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/fp/roundToNearestMinutesWithOptions' {
+ import { roundToNearestMinutesWithOptions } from 'date-fns/fp'
+ export default roundToNearestMinutesWithOptions
+}
+
+declare module 'date-fns/fp/secondsToHours' {
+ import { secondsToHours } from 'date-fns/fp'
+ export default secondsToHours
+}
+
+declare module 'date-fns/fp/secondsToMilliseconds' {
+ import { secondsToMilliseconds } from 'date-fns/fp'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/fp/secondsToMinutes' {
+ import { secondsToMinutes } from 'date-fns/fp'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/fp/set' {
+ import { set } from 'date-fns/fp'
+ export default set
+}
+
+declare module 'date-fns/fp/setDate' {
+ import { setDate } from 'date-fns/fp'
+ export default setDate
+}
+
+declare module 'date-fns/fp/setDay' {
+ import { setDay } from 'date-fns/fp'
+ export default setDay
+}
+
+declare module 'date-fns/fp/setDayOfYear' {
+ import { setDayOfYear } from 'date-fns/fp'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/fp/setDayWithOptions' {
+ import { setDayWithOptions } from 'date-fns/fp'
+ export default setDayWithOptions
+}
+
+declare module 'date-fns/fp/setHours' {
+ import { setHours } from 'date-fns/fp'
+ export default setHours
+}
+
+declare module 'date-fns/fp/setISODay' {
+ import { setISODay } from 'date-fns/fp'
+ export default setISODay
+}
+
+declare module 'date-fns/fp/setISOWeek' {
+ import { setISOWeek } from 'date-fns/fp'
+ export default setISOWeek
+}
+
+declare module 'date-fns/fp/setISOWeekYear' {
+ import { setISOWeekYear } from 'date-fns/fp'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/fp/setMilliseconds' {
+ import { setMilliseconds } from 'date-fns/fp'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/fp/setMinutes' {
+ import { setMinutes } from 'date-fns/fp'
+ export default setMinutes
+}
+
+declare module 'date-fns/fp/setMonth' {
+ import { setMonth } from 'date-fns/fp'
+ export default setMonth
+}
+
+declare module 'date-fns/fp/setQuarter' {
+ import { setQuarter } from 'date-fns/fp'
+ export default setQuarter
+}
+
+declare module 'date-fns/fp/setSeconds' {
+ import { setSeconds } from 'date-fns/fp'
+ export default setSeconds
+}
+
+declare module 'date-fns/fp/setWeek' {
+ import { setWeek } from 'date-fns/fp'
+ export default setWeek
+}
+
+declare module 'date-fns/fp/setWeekWithOptions' {
+ import { setWeekWithOptions } from 'date-fns/fp'
+ export default setWeekWithOptions
+}
+
+declare module 'date-fns/fp/setWeekYear' {
+ import { setWeekYear } from 'date-fns/fp'
+ export default setWeekYear
+}
+
+declare module 'date-fns/fp/setWeekYearWithOptions' {
+ import { setWeekYearWithOptions } from 'date-fns/fp'
+ export default setWeekYearWithOptions
+}
+
+declare module 'date-fns/fp/setYear' {
+ import { setYear } from 'date-fns/fp'
+ export default setYear
+}
+
+declare module 'date-fns/fp/startOfDay' {
+ import { startOfDay } from 'date-fns/fp'
+ export default startOfDay
+}
+
+declare module 'date-fns/fp/startOfDecade' {
+ import { startOfDecade } from 'date-fns/fp'
+ export default startOfDecade
+}
+
+declare module 'date-fns/fp/startOfHour' {
+ import { startOfHour } from 'date-fns/fp'
+ export default startOfHour
+}
+
+declare module 'date-fns/fp/startOfISOWeek' {
+ import { startOfISOWeek } from 'date-fns/fp'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/fp/startOfISOWeekYear' {
+ import { startOfISOWeekYear } from 'date-fns/fp'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/fp/startOfMinute' {
+ import { startOfMinute } from 'date-fns/fp'
+ export default startOfMinute
+}
+
+declare module 'date-fns/fp/startOfMonth' {
+ import { startOfMonth } from 'date-fns/fp'
+ export default startOfMonth
+}
+
+declare module 'date-fns/fp/startOfQuarter' {
+ import { startOfQuarter } from 'date-fns/fp'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/fp/startOfSecond' {
+ import { startOfSecond } from 'date-fns/fp'
+ export default startOfSecond
+}
+
+declare module 'date-fns/fp/startOfWeek' {
+ import { startOfWeek } from 'date-fns/fp'
+ export default startOfWeek
+}
+
+declare module 'date-fns/fp/startOfWeekWithOptions' {
+ import { startOfWeekWithOptions } from 'date-fns/fp'
+ export default startOfWeekWithOptions
+}
+
+declare module 'date-fns/fp/startOfWeekYear' {
+ import { startOfWeekYear } from 'date-fns/fp'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/fp/startOfWeekYearWithOptions' {
+ import { startOfWeekYearWithOptions } from 'date-fns/fp'
+ export default startOfWeekYearWithOptions
+}
+
+declare module 'date-fns/fp/startOfYear' {
+ import { startOfYear } from 'date-fns/fp'
+ export default startOfYear
+}
+
+declare module 'date-fns/fp/sub' {
+ import { sub } from 'date-fns/fp'
+ export default sub
+}
+
+declare module 'date-fns/fp/subBusinessDays' {
+ import { subBusinessDays } from 'date-fns/fp'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/fp/subDays' {
+ import { subDays } from 'date-fns/fp'
+ export default subDays
+}
+
+declare module 'date-fns/fp/subHours' {
+ import { subHours } from 'date-fns/fp'
+ export default subHours
+}
+
+declare module 'date-fns/fp/subISOWeekYears' {
+ import { subISOWeekYears } from 'date-fns/fp'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/fp/subMilliseconds' {
+ import { subMilliseconds } from 'date-fns/fp'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/fp/subMinutes' {
+ import { subMinutes } from 'date-fns/fp'
+ export default subMinutes
+}
+
+declare module 'date-fns/fp/subMonths' {
+ import { subMonths } from 'date-fns/fp'
+ export default subMonths
+}
+
+declare module 'date-fns/fp/subQuarters' {
+ import { subQuarters } from 'date-fns/fp'
+ export default subQuarters
+}
+
+declare module 'date-fns/fp/subSeconds' {
+ import { subSeconds } from 'date-fns/fp'
+ export default subSeconds
+}
+
+declare module 'date-fns/fp/subWeeks' {
+ import { subWeeks } from 'date-fns/fp'
+ export default subWeeks
+}
+
+declare module 'date-fns/fp/subYears' {
+ import { subYears } from 'date-fns/fp'
+ export default subYears
+}
+
+declare module 'date-fns/fp/toDate' {
+ import { toDate } from 'date-fns/fp'
+ export default toDate
+}
+
+declare module 'date-fns/fp/weeksToDays' {
+ import { weeksToDays } from 'date-fns/fp'
+ export default weeksToDays
+}
+
+declare module 'date-fns/fp/yearsToMonths' {
+ import { yearsToMonths } from 'date-fns/fp'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/fp/yearsToQuarters' {
+ import { yearsToQuarters } from 'date-fns/fp'
+ export default yearsToQuarters
+}
+
+declare module 'date-fns/fp/add/index' {
+ import { add } from 'date-fns/fp'
+ export default add
+}
+
+declare module 'date-fns/fp/addBusinessDays/index' {
+ import { addBusinessDays } from 'date-fns/fp'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/fp/addDays/index' {
+ import { addDays } from 'date-fns/fp'
+ export default addDays
+}
+
+declare module 'date-fns/fp/addHours/index' {
+ import { addHours } from 'date-fns/fp'
+ export default addHours
+}
+
+declare module 'date-fns/fp/addISOWeekYears/index' {
+ import { addISOWeekYears } from 'date-fns/fp'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/fp/addMilliseconds/index' {
+ import { addMilliseconds } from 'date-fns/fp'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/fp/addMinutes/index' {
+ import { addMinutes } from 'date-fns/fp'
+ export default addMinutes
+}
+
+declare module 'date-fns/fp/addMonths/index' {
+ import { addMonths } from 'date-fns/fp'
+ export default addMonths
+}
+
+declare module 'date-fns/fp/addQuarters/index' {
+ import { addQuarters } from 'date-fns/fp'
+ export default addQuarters
+}
+
+declare module 'date-fns/fp/addSeconds/index' {
+ import { addSeconds } from 'date-fns/fp'
+ export default addSeconds
+}
+
+declare module 'date-fns/fp/addWeeks/index' {
+ import { addWeeks } from 'date-fns/fp'
+ export default addWeeks
+}
+
+declare module 'date-fns/fp/addYears/index' {
+ import { addYears } from 'date-fns/fp'
+ export default addYears
+}
+
+declare module 'date-fns/fp/areIntervalsOverlapping/index' {
+ import { areIntervalsOverlapping } from 'date-fns/fp'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/fp/areIntervalsOverlappingWithOptions/index' {
+ import { areIntervalsOverlappingWithOptions } from 'date-fns/fp'
+ export default areIntervalsOverlappingWithOptions
+}
+
+declare module 'date-fns/fp/closestIndexTo/index' {
+ import { closestIndexTo } from 'date-fns/fp'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/fp/closestTo/index' {
+ import { closestTo } from 'date-fns/fp'
+ export default closestTo
+}
+
+declare module 'date-fns/fp/compareAsc/index' {
+ import { compareAsc } from 'date-fns/fp'
+ export default compareAsc
+}
+
+declare module 'date-fns/fp/compareDesc/index' {
+ import { compareDesc } from 'date-fns/fp'
+ export default compareDesc
+}
+
+declare module 'date-fns/fp/daysToWeeks/index' {
+ import { daysToWeeks } from 'date-fns/fp'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/fp/differenceInBusinessDays/index' {
+ import { differenceInBusinessDays } from 'date-fns/fp'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/fp/differenceInCalendarDays/index' {
+ import { differenceInCalendarDays } from 'date-fns/fp'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/fp/differenceInCalendarISOWeeks/index' {
+ import { differenceInCalendarISOWeeks } from 'date-fns/fp'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/fp/differenceInCalendarISOWeekYears/index' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns/fp'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/fp/differenceInCalendarMonths/index' {
+ import { differenceInCalendarMonths } from 'date-fns/fp'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/fp/differenceInCalendarQuarters/index' {
+ import { differenceInCalendarQuarters } from 'date-fns/fp'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/fp/differenceInCalendarWeeks/index' {
+ import { differenceInCalendarWeeks } from 'date-fns/fp'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/fp/differenceInCalendarWeeksWithOptions/index' {
+ import { differenceInCalendarWeeksWithOptions } from 'date-fns/fp'
+ export default differenceInCalendarWeeksWithOptions
+}
+
+declare module 'date-fns/fp/differenceInCalendarYears/index' {
+ import { differenceInCalendarYears } from 'date-fns/fp'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/fp/differenceInDays/index' {
+ import { differenceInDays } from 'date-fns/fp'
+ export default differenceInDays
+}
+
+declare module 'date-fns/fp/differenceInHours/index' {
+ import { differenceInHours } from 'date-fns/fp'
+ export default differenceInHours
+}
+
+declare module 'date-fns/fp/differenceInISOWeekYears/index' {
+ import { differenceInISOWeekYears } from 'date-fns/fp'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/fp/differenceInMilliseconds/index' {
+ import { differenceInMilliseconds } from 'date-fns/fp'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/fp/differenceInMinutes/index' {
+ import { differenceInMinutes } from 'date-fns/fp'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/fp/differenceInMonths/index' {
+ import { differenceInMonths } from 'date-fns/fp'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/fp/differenceInQuarters/index' {
+ import { differenceInQuarters } from 'date-fns/fp'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/fp/differenceInSeconds/index' {
+ import { differenceInSeconds } from 'date-fns/fp'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/fp/differenceInWeeks/index' {
+ import { differenceInWeeks } from 'date-fns/fp'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/fp/differenceInYears/index' {
+ import { differenceInYears } from 'date-fns/fp'
+ export default differenceInYears
+}
+
+declare module 'date-fns/fp/eachDayOfInterval/index' {
+ import { eachDayOfInterval } from 'date-fns/fp'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/fp/eachDayOfIntervalWithOptions/index' {
+ import { eachDayOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachDayOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachHourOfInterval/index' {
+ import { eachHourOfInterval } from 'date-fns/fp'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/fp/eachHourOfIntervalWithOptions/index' {
+ import { eachHourOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachHourOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachMinuteOfInterval/index' {
+ import { eachMinuteOfInterval } from 'date-fns/fp'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/fp/eachMinuteOfIntervalWithOptions/index' {
+ import { eachMinuteOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachMinuteOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachMonthOfInterval/index' {
+ import { eachMonthOfInterval } from 'date-fns/fp'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/fp/eachQuarterOfInterval/index' {
+ import { eachQuarterOfInterval } from 'date-fns/fp'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/fp/eachWeekendOfInterval/index' {
+ import { eachWeekendOfInterval } from 'date-fns/fp'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/fp/eachWeekendOfMonth/index' {
+ import { eachWeekendOfMonth } from 'date-fns/fp'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/fp/eachWeekendOfYear/index' {
+ import { eachWeekendOfYear } from 'date-fns/fp'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/fp/eachWeekOfInterval/index' {
+ import { eachWeekOfInterval } from 'date-fns/fp'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/fp/eachWeekOfIntervalWithOptions/index' {
+ import { eachWeekOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachWeekOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachYearOfInterval/index' {
+ import { eachYearOfInterval } from 'date-fns/fp'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/fp/endOfDay/index' {
+ import { endOfDay } from 'date-fns/fp'
+ export default endOfDay
+}
+
+declare module 'date-fns/fp/endOfDecade/index' {
+ import { endOfDecade } from 'date-fns/fp'
+ export default endOfDecade
+}
+
+declare module 'date-fns/fp/endOfDecadeWithOptions/index' {
+ import { endOfDecadeWithOptions } from 'date-fns/fp'
+ export default endOfDecadeWithOptions
+}
+
+declare module 'date-fns/fp/endOfHour/index' {
+ import { endOfHour } from 'date-fns/fp'
+ export default endOfHour
+}
+
+declare module 'date-fns/fp/endOfISOWeek/index' {
+ import { endOfISOWeek } from 'date-fns/fp'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/fp/endOfISOWeekYear/index' {
+ import { endOfISOWeekYear } from 'date-fns/fp'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/fp/endOfMinute/index' {
+ import { endOfMinute } from 'date-fns/fp'
+ export default endOfMinute
+}
+
+declare module 'date-fns/fp/endOfMonth/index' {
+ import { endOfMonth } from 'date-fns/fp'
+ export default endOfMonth
+}
+
+declare module 'date-fns/fp/endOfQuarter/index' {
+ import { endOfQuarter } from 'date-fns/fp'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/fp/endOfSecond/index' {
+ import { endOfSecond } from 'date-fns/fp'
+ export default endOfSecond
+}
+
+declare module 'date-fns/fp/endOfWeek/index' {
+ import { endOfWeek } from 'date-fns/fp'
+ export default endOfWeek
+}
+
+declare module 'date-fns/fp/endOfWeekWithOptions/index' {
+ import { endOfWeekWithOptions } from 'date-fns/fp'
+ export default endOfWeekWithOptions
+}
+
+declare module 'date-fns/fp/endOfYear/index' {
+ import { endOfYear } from 'date-fns/fp'
+ export default endOfYear
+}
+
+declare module 'date-fns/fp/format/index' {
+ import { format } from 'date-fns/fp'
+ export default format
+}
+
+declare module 'date-fns/fp/formatDistance/index' {
+ import { formatDistance } from 'date-fns/fp'
+ export default formatDistance
+}
+
+declare module 'date-fns/fp/formatDistanceStrict/index' {
+ import { formatDistanceStrict } from 'date-fns/fp'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/fp/formatDistanceStrictWithOptions/index' {
+ import { formatDistanceStrictWithOptions } from 'date-fns/fp'
+ export default formatDistanceStrictWithOptions
+}
+
+declare module 'date-fns/fp/formatDistanceWithOptions/index' {
+ import { formatDistanceWithOptions } from 'date-fns/fp'
+ export default formatDistanceWithOptions
+}
+
+declare module 'date-fns/fp/formatDuration/index' {
+ import { formatDuration } from 'date-fns/fp'
+ export default formatDuration
+}
+
+declare module 'date-fns/fp/formatDurationWithOptions/index' {
+ import { formatDurationWithOptions } from 'date-fns/fp'
+ export default formatDurationWithOptions
+}
+
+declare module 'date-fns/fp/formatISO/index' {
+ import { formatISO } from 'date-fns/fp'
+ export default formatISO
+}
+
+declare module 'date-fns/fp/formatISO9075/index' {
+ import { formatISO9075 } from 'date-fns/fp'
+ export default formatISO9075
+}
+
+declare module 'date-fns/fp/formatISO9075WithOptions/index' {
+ import { formatISO9075WithOptions } from 'date-fns/fp'
+ export default formatISO9075WithOptions
+}
+
+declare module 'date-fns/fp/formatISODuration/index' {
+ import { formatISODuration } from 'date-fns/fp'
+ export default formatISODuration
+}
+
+declare module 'date-fns/fp/formatISOWithOptions/index' {
+ import { formatISOWithOptions } from 'date-fns/fp'
+ export default formatISOWithOptions
+}
+
+declare module 'date-fns/fp/formatRelative/index' {
+ import { formatRelative } from 'date-fns/fp'
+ export default formatRelative
+}
+
+declare module 'date-fns/fp/formatRelativeWithOptions/index' {
+ import { formatRelativeWithOptions } from 'date-fns/fp'
+ export default formatRelativeWithOptions
+}
+
+declare module 'date-fns/fp/formatRFC3339/index' {
+ import { formatRFC3339 } from 'date-fns/fp'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/fp/formatRFC3339WithOptions/index' {
+ import { formatRFC3339WithOptions } from 'date-fns/fp'
+ export default formatRFC3339WithOptions
+}
+
+declare module 'date-fns/fp/formatRFC7231/index' {
+ import { formatRFC7231 } from 'date-fns/fp'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/fp/formatWithOptions/index' {
+ import { formatWithOptions } from 'date-fns/fp'
+ export default formatWithOptions
+}
+
+declare module 'date-fns/fp/fromUnixTime/index' {
+ import { fromUnixTime } from 'date-fns/fp'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/fp/getDate/index' {
+ import { getDate } from 'date-fns/fp'
+ export default getDate
+}
+
+declare module 'date-fns/fp/getDay/index' {
+ import { getDay } from 'date-fns/fp'
+ export default getDay
+}
+
+declare module 'date-fns/fp/getDayOfYear/index' {
+ import { getDayOfYear } from 'date-fns/fp'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/fp/getDaysInMonth/index' {
+ import { getDaysInMonth } from 'date-fns/fp'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/fp/getDaysInYear/index' {
+ import { getDaysInYear } from 'date-fns/fp'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/fp/getDecade/index' {
+ import { getDecade } from 'date-fns/fp'
+ export default getDecade
+}
+
+declare module 'date-fns/fp/getHours/index' {
+ import { getHours } from 'date-fns/fp'
+ export default getHours
+}
+
+declare module 'date-fns/fp/getISODay/index' {
+ import { getISODay } from 'date-fns/fp'
+ export default getISODay
+}
+
+declare module 'date-fns/fp/getISOWeek/index' {
+ import { getISOWeek } from 'date-fns/fp'
+ export default getISOWeek
+}
+
+declare module 'date-fns/fp/getISOWeeksInYear/index' {
+ import { getISOWeeksInYear } from 'date-fns/fp'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/fp/getISOWeekYear/index' {
+ import { getISOWeekYear } from 'date-fns/fp'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/fp/getMilliseconds/index' {
+ import { getMilliseconds } from 'date-fns/fp'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/fp/getMinutes/index' {
+ import { getMinutes } from 'date-fns/fp'
+ export default getMinutes
+}
+
+declare module 'date-fns/fp/getMonth/index' {
+ import { getMonth } from 'date-fns/fp'
+ export default getMonth
+}
+
+declare module 'date-fns/fp/getOverlappingDaysInIntervals/index' {
+ import { getOverlappingDaysInIntervals } from 'date-fns/fp'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/fp/getQuarter/index' {
+ import { getQuarter } from 'date-fns/fp'
+ export default getQuarter
+}
+
+declare module 'date-fns/fp/getSeconds/index' {
+ import { getSeconds } from 'date-fns/fp'
+ export default getSeconds
+}
+
+declare module 'date-fns/fp/getTime/index' {
+ import { getTime } from 'date-fns/fp'
+ export default getTime
+}
+
+declare module 'date-fns/fp/getUnixTime/index' {
+ import { getUnixTime } from 'date-fns/fp'
+ export default getUnixTime
+}
+
+declare module 'date-fns/fp/getWeek/index' {
+ import { getWeek } from 'date-fns/fp'
+ export default getWeek
+}
+
+declare module 'date-fns/fp/getWeekOfMonth/index' {
+ import { getWeekOfMonth } from 'date-fns/fp'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/fp/getWeekOfMonthWithOptions/index' {
+ import { getWeekOfMonthWithOptions } from 'date-fns/fp'
+ export default getWeekOfMonthWithOptions
+}
+
+declare module 'date-fns/fp/getWeeksInMonth/index' {
+ import { getWeeksInMonth } from 'date-fns/fp'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/fp/getWeeksInMonthWithOptions/index' {
+ import { getWeeksInMonthWithOptions } from 'date-fns/fp'
+ export default getWeeksInMonthWithOptions
+}
+
+declare module 'date-fns/fp/getWeekWithOptions/index' {
+ import { getWeekWithOptions } from 'date-fns/fp'
+ export default getWeekWithOptions
+}
+
+declare module 'date-fns/fp/getWeekYear/index' {
+ import { getWeekYear } from 'date-fns/fp'
+ export default getWeekYear
+}
+
+declare module 'date-fns/fp/getWeekYearWithOptions/index' {
+ import { getWeekYearWithOptions } from 'date-fns/fp'
+ export default getWeekYearWithOptions
+}
+
+declare module 'date-fns/fp/getYear/index' {
+ import { getYear } from 'date-fns/fp'
+ export default getYear
+}
+
+declare module 'date-fns/fp/hoursToMilliseconds/index' {
+ import { hoursToMilliseconds } from 'date-fns/fp'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/fp/hoursToMinutes/index' {
+ import { hoursToMinutes } from 'date-fns/fp'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/fp/hoursToSeconds/index' {
+ import { hoursToSeconds } from 'date-fns/fp'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/fp/intervalToDuration/index' {
+ import { intervalToDuration } from 'date-fns/fp'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/fp/intlFormat/index' {
+ import { intlFormat } from 'date-fns/fp'
+ export default intlFormat
+}
+
+declare module 'date-fns/fp/isAfter/index' {
+ import { isAfter } from 'date-fns/fp'
+ export default isAfter
+}
+
+declare module 'date-fns/fp/isBefore/index' {
+ import { isBefore } from 'date-fns/fp'
+ export default isBefore
+}
+
+declare module 'date-fns/fp/isDate/index' {
+ import { isDate } from 'date-fns/fp'
+ export default isDate
+}
+
+declare module 'date-fns/fp/isEqual/index' {
+ import { isEqual } from 'date-fns/fp'
+ export default isEqual
+}
+
+declare module 'date-fns/fp/isExists/index' {
+ import { isExists } from 'date-fns/fp'
+ export default isExists
+}
+
+declare module 'date-fns/fp/isFirstDayOfMonth/index' {
+ import { isFirstDayOfMonth } from 'date-fns/fp'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/fp/isFriday/index' {
+ import { isFriday } from 'date-fns/fp'
+ export default isFriday
+}
+
+declare module 'date-fns/fp/isLastDayOfMonth/index' {
+ import { isLastDayOfMonth } from 'date-fns/fp'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/fp/isLeapYear/index' {
+ import { isLeapYear } from 'date-fns/fp'
+ export default isLeapYear
+}
+
+declare module 'date-fns/fp/isMatch/index' {
+ import { isMatch } from 'date-fns/fp'
+ export default isMatch
+}
+
+declare module 'date-fns/fp/isMatchWithOptions/index' {
+ import { isMatchWithOptions } from 'date-fns/fp'
+ export default isMatchWithOptions
+}
+
+declare module 'date-fns/fp/isMonday/index' {
+ import { isMonday } from 'date-fns/fp'
+ export default isMonday
+}
+
+declare module 'date-fns/fp/isSameDay/index' {
+ import { isSameDay } from 'date-fns/fp'
+ export default isSameDay
+}
+
+declare module 'date-fns/fp/isSameHour/index' {
+ import { isSameHour } from 'date-fns/fp'
+ export default isSameHour
+}
+
+declare module 'date-fns/fp/isSameISOWeek/index' {
+ import { isSameISOWeek } from 'date-fns/fp'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/fp/isSameISOWeekYear/index' {
+ import { isSameISOWeekYear } from 'date-fns/fp'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/fp/isSameMinute/index' {
+ import { isSameMinute } from 'date-fns/fp'
+ export default isSameMinute
+}
+
+declare module 'date-fns/fp/isSameMonth/index' {
+ import { isSameMonth } from 'date-fns/fp'
+ export default isSameMonth
+}
+
+declare module 'date-fns/fp/isSameQuarter/index' {
+ import { isSameQuarter } from 'date-fns/fp'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/fp/isSameSecond/index' {
+ import { isSameSecond } from 'date-fns/fp'
+ export default isSameSecond
+}
+
+declare module 'date-fns/fp/isSameWeek/index' {
+ import { isSameWeek } from 'date-fns/fp'
+ export default isSameWeek
+}
+
+declare module 'date-fns/fp/isSameWeekWithOptions/index' {
+ import { isSameWeekWithOptions } from 'date-fns/fp'
+ export default isSameWeekWithOptions
+}
+
+declare module 'date-fns/fp/isSameYear/index' {
+ import { isSameYear } from 'date-fns/fp'
+ export default isSameYear
+}
+
+declare module 'date-fns/fp/isSaturday/index' {
+ import { isSaturday } from 'date-fns/fp'
+ export default isSaturday
+}
+
+declare module 'date-fns/fp/isSunday/index' {
+ import { isSunday } from 'date-fns/fp'
+ export default isSunday
+}
+
+declare module 'date-fns/fp/isThursday/index' {
+ import { isThursday } from 'date-fns/fp'
+ export default isThursday
+}
+
+declare module 'date-fns/fp/isTuesday/index' {
+ import { isTuesday } from 'date-fns/fp'
+ export default isTuesday
+}
+
+declare module 'date-fns/fp/isValid/index' {
+ import { isValid } from 'date-fns/fp'
+ export default isValid
+}
+
+declare module 'date-fns/fp/isWednesday/index' {
+ import { isWednesday } from 'date-fns/fp'
+ export default isWednesday
+}
+
+declare module 'date-fns/fp/isWeekend/index' {
+ import { isWeekend } from 'date-fns/fp'
+ export default isWeekend
+}
+
+declare module 'date-fns/fp/isWithinInterval/index' {
+ import { isWithinInterval } from 'date-fns/fp'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/fp/lastDayOfDecade/index' {
+ import { lastDayOfDecade } from 'date-fns/fp'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/fp/lastDayOfISOWeek/index' {
+ import { lastDayOfISOWeek } from 'date-fns/fp'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/fp/lastDayOfISOWeekYear/index' {
+ import { lastDayOfISOWeekYear } from 'date-fns/fp'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/fp/lastDayOfMonth/index' {
+ import { lastDayOfMonth } from 'date-fns/fp'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/fp/lastDayOfQuarter/index' {
+ import { lastDayOfQuarter } from 'date-fns/fp'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/fp/lastDayOfQuarterWithOptions/index' {
+ import { lastDayOfQuarterWithOptions } from 'date-fns/fp'
+ export default lastDayOfQuarterWithOptions
+}
+
+declare module 'date-fns/fp/lastDayOfWeek/index' {
+ import { lastDayOfWeek } from 'date-fns/fp'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/fp/lastDayOfWeekWithOptions/index' {
+ import { lastDayOfWeekWithOptions } from 'date-fns/fp'
+ export default lastDayOfWeekWithOptions
+}
+
+declare module 'date-fns/fp/lastDayOfYear/index' {
+ import { lastDayOfYear } from 'date-fns/fp'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/fp/lightFormat/index' {
+ import { lightFormat } from 'date-fns/fp'
+ export default lightFormat
+}
+
+declare module 'date-fns/fp/max/index' {
+ import { max } from 'date-fns/fp'
+ export default max
+}
+
+declare module 'date-fns/fp/milliseconds/index' {
+ import { milliseconds } from 'date-fns/fp'
+ export default milliseconds
+}
+
+declare module 'date-fns/fp/millisecondsToHours/index' {
+ import { millisecondsToHours } from 'date-fns/fp'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/fp/millisecondsToMinutes/index' {
+ import { millisecondsToMinutes } from 'date-fns/fp'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/fp/millisecondsToSeconds/index' {
+ import { millisecondsToSeconds } from 'date-fns/fp'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/fp/min/index' {
+ import { min } from 'date-fns/fp'
+ export default min
+}
+
+declare module 'date-fns/fp/minutesToHours/index' {
+ import { minutesToHours } from 'date-fns/fp'
+ export default minutesToHours
+}
+
+declare module 'date-fns/fp/minutesToMilliseconds/index' {
+ import { minutesToMilliseconds } from 'date-fns/fp'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/fp/minutesToSeconds/index' {
+ import { minutesToSeconds } from 'date-fns/fp'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/fp/monthsToQuarters/index' {
+ import { monthsToQuarters } from 'date-fns/fp'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/fp/monthsToYears/index' {
+ import { monthsToYears } from 'date-fns/fp'
+ export default monthsToYears
+}
+
+declare module 'date-fns/fp/nextDay/index' {
+ import { nextDay } from 'date-fns/fp'
+ export default nextDay
+}
+
+declare module 'date-fns/fp/nextFriday/index' {
+ import { nextFriday } from 'date-fns/fp'
+ export default nextFriday
+}
+
+declare module 'date-fns/fp/nextMonday/index' {
+ import { nextMonday } from 'date-fns/fp'
+ export default nextMonday
+}
+
+declare module 'date-fns/fp/nextSaturday/index' {
+ import { nextSaturday } from 'date-fns/fp'
+ export default nextSaturday
+}
+
+declare module 'date-fns/fp/nextSunday/index' {
+ import { nextSunday } from 'date-fns/fp'
+ export default nextSunday
+}
+
+declare module 'date-fns/fp/nextThursday/index' {
+ import { nextThursday } from 'date-fns/fp'
+ export default nextThursday
+}
+
+declare module 'date-fns/fp/nextTuesday/index' {
+ import { nextTuesday } from 'date-fns/fp'
+ export default nextTuesday
+}
+
+declare module 'date-fns/fp/nextWednesday/index' {
+ import { nextWednesday } from 'date-fns/fp'
+ export default nextWednesday
+}
+
+declare module 'date-fns/fp/parse/index' {
+ import { parse } from 'date-fns/fp'
+ export default parse
+}
+
+declare module 'date-fns/fp/parseISO/index' {
+ import { parseISO } from 'date-fns/fp'
+ export default parseISO
+}
+
+declare module 'date-fns/fp/parseISOWithOptions/index' {
+ import { parseISOWithOptions } from 'date-fns/fp'
+ export default parseISOWithOptions
+}
+
+declare module 'date-fns/fp/parseJSON/index' {
+ import { parseJSON } from 'date-fns/fp'
+ export default parseJSON
+}
+
+declare module 'date-fns/fp/parseWithOptions/index' {
+ import { parseWithOptions } from 'date-fns/fp'
+ export default parseWithOptions
+}
+
+declare module 'date-fns/fp/quartersToMonths/index' {
+ import { quartersToMonths } from 'date-fns/fp'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/fp/quartersToYears/index' {
+ import { quartersToYears } from 'date-fns/fp'
+ export default quartersToYears
+}
+
+declare module 'date-fns/fp/roundToNearestMinutes/index' {
+ import { roundToNearestMinutes } from 'date-fns/fp'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/fp/roundToNearestMinutesWithOptions/index' {
+ import { roundToNearestMinutesWithOptions } from 'date-fns/fp'
+ export default roundToNearestMinutesWithOptions
+}
+
+declare module 'date-fns/fp/secondsToHours/index' {
+ import { secondsToHours } from 'date-fns/fp'
+ export default secondsToHours
+}
+
+declare module 'date-fns/fp/secondsToMilliseconds/index' {
+ import { secondsToMilliseconds } from 'date-fns/fp'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/fp/secondsToMinutes/index' {
+ import { secondsToMinutes } from 'date-fns/fp'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/fp/set/index' {
+ import { set } from 'date-fns/fp'
+ export default set
+}
+
+declare module 'date-fns/fp/setDate/index' {
+ import { setDate } from 'date-fns/fp'
+ export default setDate
+}
+
+declare module 'date-fns/fp/setDay/index' {
+ import { setDay } from 'date-fns/fp'
+ export default setDay
+}
+
+declare module 'date-fns/fp/setDayOfYear/index' {
+ import { setDayOfYear } from 'date-fns/fp'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/fp/setDayWithOptions/index' {
+ import { setDayWithOptions } from 'date-fns/fp'
+ export default setDayWithOptions
+}
+
+declare module 'date-fns/fp/setHours/index' {
+ import { setHours } from 'date-fns/fp'
+ export default setHours
+}
+
+declare module 'date-fns/fp/setISODay/index' {
+ import { setISODay } from 'date-fns/fp'
+ export default setISODay
+}
+
+declare module 'date-fns/fp/setISOWeek/index' {
+ import { setISOWeek } from 'date-fns/fp'
+ export default setISOWeek
+}
+
+declare module 'date-fns/fp/setISOWeekYear/index' {
+ import { setISOWeekYear } from 'date-fns/fp'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/fp/setMilliseconds/index' {
+ import { setMilliseconds } from 'date-fns/fp'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/fp/setMinutes/index' {
+ import { setMinutes } from 'date-fns/fp'
+ export default setMinutes
+}
+
+declare module 'date-fns/fp/setMonth/index' {
+ import { setMonth } from 'date-fns/fp'
+ export default setMonth
+}
+
+declare module 'date-fns/fp/setQuarter/index' {
+ import { setQuarter } from 'date-fns/fp'
+ export default setQuarter
+}
+
+declare module 'date-fns/fp/setSeconds/index' {
+ import { setSeconds } from 'date-fns/fp'
+ export default setSeconds
+}
+
+declare module 'date-fns/fp/setWeek/index' {
+ import { setWeek } from 'date-fns/fp'
+ export default setWeek
+}
+
+declare module 'date-fns/fp/setWeekWithOptions/index' {
+ import { setWeekWithOptions } from 'date-fns/fp'
+ export default setWeekWithOptions
+}
+
+declare module 'date-fns/fp/setWeekYear/index' {
+ import { setWeekYear } from 'date-fns/fp'
+ export default setWeekYear
+}
+
+declare module 'date-fns/fp/setWeekYearWithOptions/index' {
+ import { setWeekYearWithOptions } from 'date-fns/fp'
+ export default setWeekYearWithOptions
+}
+
+declare module 'date-fns/fp/setYear/index' {
+ import { setYear } from 'date-fns/fp'
+ export default setYear
+}
+
+declare module 'date-fns/fp/startOfDay/index' {
+ import { startOfDay } from 'date-fns/fp'
+ export default startOfDay
+}
+
+declare module 'date-fns/fp/startOfDecade/index' {
+ import { startOfDecade } from 'date-fns/fp'
+ export default startOfDecade
+}
+
+declare module 'date-fns/fp/startOfHour/index' {
+ import { startOfHour } from 'date-fns/fp'
+ export default startOfHour
+}
+
+declare module 'date-fns/fp/startOfISOWeek/index' {
+ import { startOfISOWeek } from 'date-fns/fp'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/fp/startOfISOWeekYear/index' {
+ import { startOfISOWeekYear } from 'date-fns/fp'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/fp/startOfMinute/index' {
+ import { startOfMinute } from 'date-fns/fp'
+ export default startOfMinute
+}
+
+declare module 'date-fns/fp/startOfMonth/index' {
+ import { startOfMonth } from 'date-fns/fp'
+ export default startOfMonth
+}
+
+declare module 'date-fns/fp/startOfQuarter/index' {
+ import { startOfQuarter } from 'date-fns/fp'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/fp/startOfSecond/index' {
+ import { startOfSecond } from 'date-fns/fp'
+ export default startOfSecond
+}
+
+declare module 'date-fns/fp/startOfWeek/index' {
+ import { startOfWeek } from 'date-fns/fp'
+ export default startOfWeek
+}
+
+declare module 'date-fns/fp/startOfWeekWithOptions/index' {
+ import { startOfWeekWithOptions } from 'date-fns/fp'
+ export default startOfWeekWithOptions
+}
+
+declare module 'date-fns/fp/startOfWeekYear/index' {
+ import { startOfWeekYear } from 'date-fns/fp'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/fp/startOfWeekYearWithOptions/index' {
+ import { startOfWeekYearWithOptions } from 'date-fns/fp'
+ export default startOfWeekYearWithOptions
+}
+
+declare module 'date-fns/fp/startOfYear/index' {
+ import { startOfYear } from 'date-fns/fp'
+ export default startOfYear
+}
+
+declare module 'date-fns/fp/sub/index' {
+ import { sub } from 'date-fns/fp'
+ export default sub
+}
+
+declare module 'date-fns/fp/subBusinessDays/index' {
+ import { subBusinessDays } from 'date-fns/fp'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/fp/subDays/index' {
+ import { subDays } from 'date-fns/fp'
+ export default subDays
+}
+
+declare module 'date-fns/fp/subHours/index' {
+ import { subHours } from 'date-fns/fp'
+ export default subHours
+}
+
+declare module 'date-fns/fp/subISOWeekYears/index' {
+ import { subISOWeekYears } from 'date-fns/fp'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/fp/subMilliseconds/index' {
+ import { subMilliseconds } from 'date-fns/fp'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/fp/subMinutes/index' {
+ import { subMinutes } from 'date-fns/fp'
+ export default subMinutes
+}
+
+declare module 'date-fns/fp/subMonths/index' {
+ import { subMonths } from 'date-fns/fp'
+ export default subMonths
+}
+
+declare module 'date-fns/fp/subQuarters/index' {
+ import { subQuarters } from 'date-fns/fp'
+ export default subQuarters
+}
+
+declare module 'date-fns/fp/subSeconds/index' {
+ import { subSeconds } from 'date-fns/fp'
+ export default subSeconds
+}
+
+declare module 'date-fns/fp/subWeeks/index' {
+ import { subWeeks } from 'date-fns/fp'
+ export default subWeeks
+}
+
+declare module 'date-fns/fp/subYears/index' {
+ import { subYears } from 'date-fns/fp'
+ export default subYears
+}
+
+declare module 'date-fns/fp/toDate/index' {
+ import { toDate } from 'date-fns/fp'
+ export default toDate
+}
+
+declare module 'date-fns/fp/weeksToDays/index' {
+ import { weeksToDays } from 'date-fns/fp'
+ export default weeksToDays
+}
+
+declare module 'date-fns/fp/yearsToMonths/index' {
+ import { yearsToMonths } from 'date-fns/fp'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/fp/yearsToQuarters/index' {
+ import { yearsToQuarters } from 'date-fns/fp'
+ export default yearsToQuarters
+}
+
+declare module 'date-fns/fp/add/index.js' {
+ import { add } from 'date-fns/fp'
+ export default add
+}
+
+declare module 'date-fns/fp/addBusinessDays/index.js' {
+ import { addBusinessDays } from 'date-fns/fp'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/fp/addDays/index.js' {
+ import { addDays } from 'date-fns/fp'
+ export default addDays
+}
+
+declare module 'date-fns/fp/addHours/index.js' {
+ import { addHours } from 'date-fns/fp'
+ export default addHours
+}
+
+declare module 'date-fns/fp/addISOWeekYears/index.js' {
+ import { addISOWeekYears } from 'date-fns/fp'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/fp/addMilliseconds/index.js' {
+ import { addMilliseconds } from 'date-fns/fp'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/fp/addMinutes/index.js' {
+ import { addMinutes } from 'date-fns/fp'
+ export default addMinutes
+}
+
+declare module 'date-fns/fp/addMonths/index.js' {
+ import { addMonths } from 'date-fns/fp'
+ export default addMonths
+}
+
+declare module 'date-fns/fp/addQuarters/index.js' {
+ import { addQuarters } from 'date-fns/fp'
+ export default addQuarters
+}
+
+declare module 'date-fns/fp/addSeconds/index.js' {
+ import { addSeconds } from 'date-fns/fp'
+ export default addSeconds
+}
+
+declare module 'date-fns/fp/addWeeks/index.js' {
+ import { addWeeks } from 'date-fns/fp'
+ export default addWeeks
+}
+
+declare module 'date-fns/fp/addYears/index.js' {
+ import { addYears } from 'date-fns/fp'
+ export default addYears
+}
+
+declare module 'date-fns/fp/areIntervalsOverlapping/index.js' {
+ import { areIntervalsOverlapping } from 'date-fns/fp'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/fp/areIntervalsOverlappingWithOptions/index.js' {
+ import { areIntervalsOverlappingWithOptions } from 'date-fns/fp'
+ export default areIntervalsOverlappingWithOptions
+}
+
+declare module 'date-fns/fp/closestIndexTo/index.js' {
+ import { closestIndexTo } from 'date-fns/fp'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/fp/closestTo/index.js' {
+ import { closestTo } from 'date-fns/fp'
+ export default closestTo
+}
+
+declare module 'date-fns/fp/compareAsc/index.js' {
+ import { compareAsc } from 'date-fns/fp'
+ export default compareAsc
+}
+
+declare module 'date-fns/fp/compareDesc/index.js' {
+ import { compareDesc } from 'date-fns/fp'
+ export default compareDesc
+}
+
+declare module 'date-fns/fp/daysToWeeks/index.js' {
+ import { daysToWeeks } from 'date-fns/fp'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/fp/differenceInBusinessDays/index.js' {
+ import { differenceInBusinessDays } from 'date-fns/fp'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/fp/differenceInCalendarDays/index.js' {
+ import { differenceInCalendarDays } from 'date-fns/fp'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/fp/differenceInCalendarISOWeeks/index.js' {
+ import { differenceInCalendarISOWeeks } from 'date-fns/fp'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/fp/differenceInCalendarISOWeekYears/index.js' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns/fp'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/fp/differenceInCalendarMonths/index.js' {
+ import { differenceInCalendarMonths } from 'date-fns/fp'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/fp/differenceInCalendarQuarters/index.js' {
+ import { differenceInCalendarQuarters } from 'date-fns/fp'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/fp/differenceInCalendarWeeks/index.js' {
+ import { differenceInCalendarWeeks } from 'date-fns/fp'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/fp/differenceInCalendarWeeksWithOptions/index.js' {
+ import { differenceInCalendarWeeksWithOptions } from 'date-fns/fp'
+ export default differenceInCalendarWeeksWithOptions
+}
+
+declare module 'date-fns/fp/differenceInCalendarYears/index.js' {
+ import { differenceInCalendarYears } from 'date-fns/fp'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/fp/differenceInDays/index.js' {
+ import { differenceInDays } from 'date-fns/fp'
+ export default differenceInDays
+}
+
+declare module 'date-fns/fp/differenceInHours/index.js' {
+ import { differenceInHours } from 'date-fns/fp'
+ export default differenceInHours
+}
+
+declare module 'date-fns/fp/differenceInISOWeekYears/index.js' {
+ import { differenceInISOWeekYears } from 'date-fns/fp'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/fp/differenceInMilliseconds/index.js' {
+ import { differenceInMilliseconds } from 'date-fns/fp'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/fp/differenceInMinutes/index.js' {
+ import { differenceInMinutes } from 'date-fns/fp'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/fp/differenceInMonths/index.js' {
+ import { differenceInMonths } from 'date-fns/fp'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/fp/differenceInQuarters/index.js' {
+ import { differenceInQuarters } from 'date-fns/fp'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/fp/differenceInSeconds/index.js' {
+ import { differenceInSeconds } from 'date-fns/fp'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/fp/differenceInWeeks/index.js' {
+ import { differenceInWeeks } from 'date-fns/fp'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/fp/differenceInYears/index.js' {
+ import { differenceInYears } from 'date-fns/fp'
+ export default differenceInYears
+}
+
+declare module 'date-fns/fp/eachDayOfInterval/index.js' {
+ import { eachDayOfInterval } from 'date-fns/fp'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/fp/eachDayOfIntervalWithOptions/index.js' {
+ import { eachDayOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachDayOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachHourOfInterval/index.js' {
+ import { eachHourOfInterval } from 'date-fns/fp'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/fp/eachHourOfIntervalWithOptions/index.js' {
+ import { eachHourOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachHourOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachMinuteOfInterval/index.js' {
+ import { eachMinuteOfInterval } from 'date-fns/fp'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/fp/eachMinuteOfIntervalWithOptions/index.js' {
+ import { eachMinuteOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachMinuteOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachMonthOfInterval/index.js' {
+ import { eachMonthOfInterval } from 'date-fns/fp'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/fp/eachQuarterOfInterval/index.js' {
+ import { eachQuarterOfInterval } from 'date-fns/fp'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/fp/eachWeekendOfInterval/index.js' {
+ import { eachWeekendOfInterval } from 'date-fns/fp'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/fp/eachWeekendOfMonth/index.js' {
+ import { eachWeekendOfMonth } from 'date-fns/fp'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/fp/eachWeekendOfYear/index.js' {
+ import { eachWeekendOfYear } from 'date-fns/fp'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/fp/eachWeekOfInterval/index.js' {
+ import { eachWeekOfInterval } from 'date-fns/fp'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/fp/eachWeekOfIntervalWithOptions/index.js' {
+ import { eachWeekOfIntervalWithOptions } from 'date-fns/fp'
+ export default eachWeekOfIntervalWithOptions
+}
+
+declare module 'date-fns/fp/eachYearOfInterval/index.js' {
+ import { eachYearOfInterval } from 'date-fns/fp'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/fp/endOfDay/index.js' {
+ import { endOfDay } from 'date-fns/fp'
+ export default endOfDay
+}
+
+declare module 'date-fns/fp/endOfDecade/index.js' {
+ import { endOfDecade } from 'date-fns/fp'
+ export default endOfDecade
+}
+
+declare module 'date-fns/fp/endOfDecadeWithOptions/index.js' {
+ import { endOfDecadeWithOptions } from 'date-fns/fp'
+ export default endOfDecadeWithOptions
+}
+
+declare module 'date-fns/fp/endOfHour/index.js' {
+ import { endOfHour } from 'date-fns/fp'
+ export default endOfHour
+}
+
+declare module 'date-fns/fp/endOfISOWeek/index.js' {
+ import { endOfISOWeek } from 'date-fns/fp'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/fp/endOfISOWeekYear/index.js' {
+ import { endOfISOWeekYear } from 'date-fns/fp'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/fp/endOfMinute/index.js' {
+ import { endOfMinute } from 'date-fns/fp'
+ export default endOfMinute
+}
+
+declare module 'date-fns/fp/endOfMonth/index.js' {
+ import { endOfMonth } from 'date-fns/fp'
+ export default endOfMonth
+}
+
+declare module 'date-fns/fp/endOfQuarter/index.js' {
+ import { endOfQuarter } from 'date-fns/fp'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/fp/endOfSecond/index.js' {
+ import { endOfSecond } from 'date-fns/fp'
+ export default endOfSecond
+}
+
+declare module 'date-fns/fp/endOfWeek/index.js' {
+ import { endOfWeek } from 'date-fns/fp'
+ export default endOfWeek
+}
+
+declare module 'date-fns/fp/endOfWeekWithOptions/index.js' {
+ import { endOfWeekWithOptions } from 'date-fns/fp'
+ export default endOfWeekWithOptions
+}
+
+declare module 'date-fns/fp/endOfYear/index.js' {
+ import { endOfYear } from 'date-fns/fp'
+ export default endOfYear
+}
+
+declare module 'date-fns/fp/format/index.js' {
+ import { format } from 'date-fns/fp'
+ export default format
+}
+
+declare module 'date-fns/fp/formatDistance/index.js' {
+ import { formatDistance } from 'date-fns/fp'
+ export default formatDistance
+}
+
+declare module 'date-fns/fp/formatDistanceStrict/index.js' {
+ import { formatDistanceStrict } from 'date-fns/fp'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/fp/formatDistanceStrictWithOptions/index.js' {
+ import { formatDistanceStrictWithOptions } from 'date-fns/fp'
+ export default formatDistanceStrictWithOptions
+}
+
+declare module 'date-fns/fp/formatDistanceWithOptions/index.js' {
+ import { formatDistanceWithOptions } from 'date-fns/fp'
+ export default formatDistanceWithOptions
+}
+
+declare module 'date-fns/fp/formatDuration/index.js' {
+ import { formatDuration } from 'date-fns/fp'
+ export default formatDuration
+}
+
+declare module 'date-fns/fp/formatDurationWithOptions/index.js' {
+ import { formatDurationWithOptions } from 'date-fns/fp'
+ export default formatDurationWithOptions
+}
+
+declare module 'date-fns/fp/formatISO/index.js' {
+ import { formatISO } from 'date-fns/fp'
+ export default formatISO
+}
+
+declare module 'date-fns/fp/formatISO9075/index.js' {
+ import { formatISO9075 } from 'date-fns/fp'
+ export default formatISO9075
+}
+
+declare module 'date-fns/fp/formatISO9075WithOptions/index.js' {
+ import { formatISO9075WithOptions } from 'date-fns/fp'
+ export default formatISO9075WithOptions
+}
+
+declare module 'date-fns/fp/formatISODuration/index.js' {
+ import { formatISODuration } from 'date-fns/fp'
+ export default formatISODuration
+}
+
+declare module 'date-fns/fp/formatISOWithOptions/index.js' {
+ import { formatISOWithOptions } from 'date-fns/fp'
+ export default formatISOWithOptions
+}
+
+declare module 'date-fns/fp/formatRelative/index.js' {
+ import { formatRelative } from 'date-fns/fp'
+ export default formatRelative
+}
+
+declare module 'date-fns/fp/formatRelativeWithOptions/index.js' {
+ import { formatRelativeWithOptions } from 'date-fns/fp'
+ export default formatRelativeWithOptions
+}
+
+declare module 'date-fns/fp/formatRFC3339/index.js' {
+ import { formatRFC3339 } from 'date-fns/fp'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/fp/formatRFC3339WithOptions/index.js' {
+ import { formatRFC3339WithOptions } from 'date-fns/fp'
+ export default formatRFC3339WithOptions
+}
+
+declare module 'date-fns/fp/formatRFC7231/index.js' {
+ import { formatRFC7231 } from 'date-fns/fp'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/fp/formatWithOptions/index.js' {
+ import { formatWithOptions } from 'date-fns/fp'
+ export default formatWithOptions
+}
+
+declare module 'date-fns/fp/fromUnixTime/index.js' {
+ import { fromUnixTime } from 'date-fns/fp'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/fp/getDate/index.js' {
+ import { getDate } from 'date-fns/fp'
+ export default getDate
+}
+
+declare module 'date-fns/fp/getDay/index.js' {
+ import { getDay } from 'date-fns/fp'
+ export default getDay
+}
+
+declare module 'date-fns/fp/getDayOfYear/index.js' {
+ import { getDayOfYear } from 'date-fns/fp'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/fp/getDaysInMonth/index.js' {
+ import { getDaysInMonth } from 'date-fns/fp'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/fp/getDaysInYear/index.js' {
+ import { getDaysInYear } from 'date-fns/fp'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/fp/getDecade/index.js' {
+ import { getDecade } from 'date-fns/fp'
+ export default getDecade
+}
+
+declare module 'date-fns/fp/getHours/index.js' {
+ import { getHours } from 'date-fns/fp'
+ export default getHours
+}
+
+declare module 'date-fns/fp/getISODay/index.js' {
+ import { getISODay } from 'date-fns/fp'
+ export default getISODay
+}
+
+declare module 'date-fns/fp/getISOWeek/index.js' {
+ import { getISOWeek } from 'date-fns/fp'
+ export default getISOWeek
+}
+
+declare module 'date-fns/fp/getISOWeeksInYear/index.js' {
+ import { getISOWeeksInYear } from 'date-fns/fp'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/fp/getISOWeekYear/index.js' {
+ import { getISOWeekYear } from 'date-fns/fp'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/fp/getMilliseconds/index.js' {
+ import { getMilliseconds } from 'date-fns/fp'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/fp/getMinutes/index.js' {
+ import { getMinutes } from 'date-fns/fp'
+ export default getMinutes
+}
+
+declare module 'date-fns/fp/getMonth/index.js' {
+ import { getMonth } from 'date-fns/fp'
+ export default getMonth
+}
+
+declare module 'date-fns/fp/getOverlappingDaysInIntervals/index.js' {
+ import { getOverlappingDaysInIntervals } from 'date-fns/fp'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/fp/getQuarter/index.js' {
+ import { getQuarter } from 'date-fns/fp'
+ export default getQuarter
+}
+
+declare module 'date-fns/fp/getSeconds/index.js' {
+ import { getSeconds } from 'date-fns/fp'
+ export default getSeconds
+}
+
+declare module 'date-fns/fp/getTime/index.js' {
+ import { getTime } from 'date-fns/fp'
+ export default getTime
+}
+
+declare module 'date-fns/fp/getUnixTime/index.js' {
+ import { getUnixTime } from 'date-fns/fp'
+ export default getUnixTime
+}
+
+declare module 'date-fns/fp/getWeek/index.js' {
+ import { getWeek } from 'date-fns/fp'
+ export default getWeek
+}
+
+declare module 'date-fns/fp/getWeekOfMonth/index.js' {
+ import { getWeekOfMonth } from 'date-fns/fp'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/fp/getWeekOfMonthWithOptions/index.js' {
+ import { getWeekOfMonthWithOptions } from 'date-fns/fp'
+ export default getWeekOfMonthWithOptions
+}
+
+declare module 'date-fns/fp/getWeeksInMonth/index.js' {
+ import { getWeeksInMonth } from 'date-fns/fp'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/fp/getWeeksInMonthWithOptions/index.js' {
+ import { getWeeksInMonthWithOptions } from 'date-fns/fp'
+ export default getWeeksInMonthWithOptions
+}
+
+declare module 'date-fns/fp/getWeekWithOptions/index.js' {
+ import { getWeekWithOptions } from 'date-fns/fp'
+ export default getWeekWithOptions
+}
+
+declare module 'date-fns/fp/getWeekYear/index.js' {
+ import { getWeekYear } from 'date-fns/fp'
+ export default getWeekYear
+}
+
+declare module 'date-fns/fp/getWeekYearWithOptions/index.js' {
+ import { getWeekYearWithOptions } from 'date-fns/fp'
+ export default getWeekYearWithOptions
+}
+
+declare module 'date-fns/fp/getYear/index.js' {
+ import { getYear } from 'date-fns/fp'
+ export default getYear
+}
+
+declare module 'date-fns/fp/hoursToMilliseconds/index.js' {
+ import { hoursToMilliseconds } from 'date-fns/fp'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/fp/hoursToMinutes/index.js' {
+ import { hoursToMinutes } from 'date-fns/fp'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/fp/hoursToSeconds/index.js' {
+ import { hoursToSeconds } from 'date-fns/fp'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/fp/intervalToDuration/index.js' {
+ import { intervalToDuration } from 'date-fns/fp'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/fp/intlFormat/index.js' {
+ import { intlFormat } from 'date-fns/fp'
+ export default intlFormat
+}
+
+declare module 'date-fns/fp/isAfter/index.js' {
+ import { isAfter } from 'date-fns/fp'
+ export default isAfter
+}
+
+declare module 'date-fns/fp/isBefore/index.js' {
+ import { isBefore } from 'date-fns/fp'
+ export default isBefore
+}
+
+declare module 'date-fns/fp/isDate/index.js' {
+ import { isDate } from 'date-fns/fp'
+ export default isDate
+}
+
+declare module 'date-fns/fp/isEqual/index.js' {
+ import { isEqual } from 'date-fns/fp'
+ export default isEqual
+}
+
+declare module 'date-fns/fp/isExists/index.js' {
+ import { isExists } from 'date-fns/fp'
+ export default isExists
+}
+
+declare module 'date-fns/fp/isFirstDayOfMonth/index.js' {
+ import { isFirstDayOfMonth } from 'date-fns/fp'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/fp/isFriday/index.js' {
+ import { isFriday } from 'date-fns/fp'
+ export default isFriday
+}
+
+declare module 'date-fns/fp/isLastDayOfMonth/index.js' {
+ import { isLastDayOfMonth } from 'date-fns/fp'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/fp/isLeapYear/index.js' {
+ import { isLeapYear } from 'date-fns/fp'
+ export default isLeapYear
+}
+
+declare module 'date-fns/fp/isMatch/index.js' {
+ import { isMatch } from 'date-fns/fp'
+ export default isMatch
+}
+
+declare module 'date-fns/fp/isMatchWithOptions/index.js' {
+ import { isMatchWithOptions } from 'date-fns/fp'
+ export default isMatchWithOptions
+}
+
+declare module 'date-fns/fp/isMonday/index.js' {
+ import { isMonday } from 'date-fns/fp'
+ export default isMonday
+}
+
+declare module 'date-fns/fp/isSameDay/index.js' {
+ import { isSameDay } from 'date-fns/fp'
+ export default isSameDay
+}
+
+declare module 'date-fns/fp/isSameHour/index.js' {
+ import { isSameHour } from 'date-fns/fp'
+ export default isSameHour
+}
+
+declare module 'date-fns/fp/isSameISOWeek/index.js' {
+ import { isSameISOWeek } from 'date-fns/fp'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/fp/isSameISOWeekYear/index.js' {
+ import { isSameISOWeekYear } from 'date-fns/fp'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/fp/isSameMinute/index.js' {
+ import { isSameMinute } from 'date-fns/fp'
+ export default isSameMinute
+}
+
+declare module 'date-fns/fp/isSameMonth/index.js' {
+ import { isSameMonth } from 'date-fns/fp'
+ export default isSameMonth
+}
+
+declare module 'date-fns/fp/isSameQuarter/index.js' {
+ import { isSameQuarter } from 'date-fns/fp'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/fp/isSameSecond/index.js' {
+ import { isSameSecond } from 'date-fns/fp'
+ export default isSameSecond
+}
+
+declare module 'date-fns/fp/isSameWeek/index.js' {
+ import { isSameWeek } from 'date-fns/fp'
+ export default isSameWeek
+}
+
+declare module 'date-fns/fp/isSameWeekWithOptions/index.js' {
+ import { isSameWeekWithOptions } from 'date-fns/fp'
+ export default isSameWeekWithOptions
+}
+
+declare module 'date-fns/fp/isSameYear/index.js' {
+ import { isSameYear } from 'date-fns/fp'
+ export default isSameYear
+}
+
+declare module 'date-fns/fp/isSaturday/index.js' {
+ import { isSaturday } from 'date-fns/fp'
+ export default isSaturday
+}
+
+declare module 'date-fns/fp/isSunday/index.js' {
+ import { isSunday } from 'date-fns/fp'
+ export default isSunday
+}
+
+declare module 'date-fns/fp/isThursday/index.js' {
+ import { isThursday } from 'date-fns/fp'
+ export default isThursday
+}
+
+declare module 'date-fns/fp/isTuesday/index.js' {
+ import { isTuesday } from 'date-fns/fp'
+ export default isTuesday
+}
+
+declare module 'date-fns/fp/isValid/index.js' {
+ import { isValid } from 'date-fns/fp'
+ export default isValid
+}
+
+declare module 'date-fns/fp/isWednesday/index.js' {
+ import { isWednesday } from 'date-fns/fp'
+ export default isWednesday
+}
+
+declare module 'date-fns/fp/isWeekend/index.js' {
+ import { isWeekend } from 'date-fns/fp'
+ export default isWeekend
+}
+
+declare module 'date-fns/fp/isWithinInterval/index.js' {
+ import { isWithinInterval } from 'date-fns/fp'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/fp/lastDayOfDecade/index.js' {
+ import { lastDayOfDecade } from 'date-fns/fp'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/fp/lastDayOfISOWeek/index.js' {
+ import { lastDayOfISOWeek } from 'date-fns/fp'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/fp/lastDayOfISOWeekYear/index.js' {
+ import { lastDayOfISOWeekYear } from 'date-fns/fp'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/fp/lastDayOfMonth/index.js' {
+ import { lastDayOfMonth } from 'date-fns/fp'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/fp/lastDayOfQuarter/index.js' {
+ import { lastDayOfQuarter } from 'date-fns/fp'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/fp/lastDayOfQuarterWithOptions/index.js' {
+ import { lastDayOfQuarterWithOptions } from 'date-fns/fp'
+ export default lastDayOfQuarterWithOptions
+}
+
+declare module 'date-fns/fp/lastDayOfWeek/index.js' {
+ import { lastDayOfWeek } from 'date-fns/fp'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/fp/lastDayOfWeekWithOptions/index.js' {
+ import { lastDayOfWeekWithOptions } from 'date-fns/fp'
+ export default lastDayOfWeekWithOptions
+}
+
+declare module 'date-fns/fp/lastDayOfYear/index.js' {
+ import { lastDayOfYear } from 'date-fns/fp'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/fp/lightFormat/index.js' {
+ import { lightFormat } from 'date-fns/fp'
+ export default lightFormat
+}
+
+declare module 'date-fns/fp/max/index.js' {
+ import { max } from 'date-fns/fp'
+ export default max
+}
+
+declare module 'date-fns/fp/milliseconds/index.js' {
+ import { milliseconds } from 'date-fns/fp'
+ export default milliseconds
+}
+
+declare module 'date-fns/fp/millisecondsToHours/index.js' {
+ import { millisecondsToHours } from 'date-fns/fp'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/fp/millisecondsToMinutes/index.js' {
+ import { millisecondsToMinutes } from 'date-fns/fp'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/fp/millisecondsToSeconds/index.js' {
+ import { millisecondsToSeconds } from 'date-fns/fp'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/fp/min/index.js' {
+ import { min } from 'date-fns/fp'
+ export default min
+}
+
+declare module 'date-fns/fp/minutesToHours/index.js' {
+ import { minutesToHours } from 'date-fns/fp'
+ export default minutesToHours
+}
+
+declare module 'date-fns/fp/minutesToMilliseconds/index.js' {
+ import { minutesToMilliseconds } from 'date-fns/fp'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/fp/minutesToSeconds/index.js' {
+ import { minutesToSeconds } from 'date-fns/fp'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/fp/monthsToQuarters/index.js' {
+ import { monthsToQuarters } from 'date-fns/fp'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/fp/monthsToYears/index.js' {
+ import { monthsToYears } from 'date-fns/fp'
+ export default monthsToYears
+}
+
+declare module 'date-fns/fp/nextDay/index.js' {
+ import { nextDay } from 'date-fns/fp'
+ export default nextDay
+}
+
+declare module 'date-fns/fp/nextFriday/index.js' {
+ import { nextFriday } from 'date-fns/fp'
+ export default nextFriday
+}
+
+declare module 'date-fns/fp/nextMonday/index.js' {
+ import { nextMonday } from 'date-fns/fp'
+ export default nextMonday
+}
+
+declare module 'date-fns/fp/nextSaturday/index.js' {
+ import { nextSaturday } from 'date-fns/fp'
+ export default nextSaturday
+}
+
+declare module 'date-fns/fp/nextSunday/index.js' {
+ import { nextSunday } from 'date-fns/fp'
+ export default nextSunday
+}
+
+declare module 'date-fns/fp/nextThursday/index.js' {
+ import { nextThursday } from 'date-fns/fp'
+ export default nextThursday
+}
+
+declare module 'date-fns/fp/nextTuesday/index.js' {
+ import { nextTuesday } from 'date-fns/fp'
+ export default nextTuesday
+}
+
+declare module 'date-fns/fp/nextWednesday/index.js' {
+ import { nextWednesday } from 'date-fns/fp'
+ export default nextWednesday
+}
+
+declare module 'date-fns/fp/parse/index.js' {
+ import { parse } from 'date-fns/fp'
+ export default parse
+}
+
+declare module 'date-fns/fp/parseISO/index.js' {
+ import { parseISO } from 'date-fns/fp'
+ export default parseISO
+}
+
+declare module 'date-fns/fp/parseISOWithOptions/index.js' {
+ import { parseISOWithOptions } from 'date-fns/fp'
+ export default parseISOWithOptions
+}
+
+declare module 'date-fns/fp/parseJSON/index.js' {
+ import { parseJSON } from 'date-fns/fp'
+ export default parseJSON
+}
+
+declare module 'date-fns/fp/parseWithOptions/index.js' {
+ import { parseWithOptions } from 'date-fns/fp'
+ export default parseWithOptions
+}
+
+declare module 'date-fns/fp/quartersToMonths/index.js' {
+ import { quartersToMonths } from 'date-fns/fp'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/fp/quartersToYears/index.js' {
+ import { quartersToYears } from 'date-fns/fp'
+ export default quartersToYears
+}
+
+declare module 'date-fns/fp/roundToNearestMinutes/index.js' {
+ import { roundToNearestMinutes } from 'date-fns/fp'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/fp/roundToNearestMinutesWithOptions/index.js' {
+ import { roundToNearestMinutesWithOptions } from 'date-fns/fp'
+ export default roundToNearestMinutesWithOptions
+}
+
+declare module 'date-fns/fp/secondsToHours/index.js' {
+ import { secondsToHours } from 'date-fns/fp'
+ export default secondsToHours
+}
+
+declare module 'date-fns/fp/secondsToMilliseconds/index.js' {
+ import { secondsToMilliseconds } from 'date-fns/fp'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/fp/secondsToMinutes/index.js' {
+ import { secondsToMinutes } from 'date-fns/fp'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/fp/set/index.js' {
+ import { set } from 'date-fns/fp'
+ export default set
+}
+
+declare module 'date-fns/fp/setDate/index.js' {
+ import { setDate } from 'date-fns/fp'
+ export default setDate
+}
+
+declare module 'date-fns/fp/setDay/index.js' {
+ import { setDay } from 'date-fns/fp'
+ export default setDay
+}
+
+declare module 'date-fns/fp/setDayOfYear/index.js' {
+ import { setDayOfYear } from 'date-fns/fp'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/fp/setDayWithOptions/index.js' {
+ import { setDayWithOptions } from 'date-fns/fp'
+ export default setDayWithOptions
+}
+
+declare module 'date-fns/fp/setHours/index.js' {
+ import { setHours } from 'date-fns/fp'
+ export default setHours
+}
+
+declare module 'date-fns/fp/setISODay/index.js' {
+ import { setISODay } from 'date-fns/fp'
+ export default setISODay
+}
+
+declare module 'date-fns/fp/setISOWeek/index.js' {
+ import { setISOWeek } from 'date-fns/fp'
+ export default setISOWeek
+}
+
+declare module 'date-fns/fp/setISOWeekYear/index.js' {
+ import { setISOWeekYear } from 'date-fns/fp'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/fp/setMilliseconds/index.js' {
+ import { setMilliseconds } from 'date-fns/fp'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/fp/setMinutes/index.js' {
+ import { setMinutes } from 'date-fns/fp'
+ export default setMinutes
+}
+
+declare module 'date-fns/fp/setMonth/index.js' {
+ import { setMonth } from 'date-fns/fp'
+ export default setMonth
+}
+
+declare module 'date-fns/fp/setQuarter/index.js' {
+ import { setQuarter } from 'date-fns/fp'
+ export default setQuarter
+}
+
+declare module 'date-fns/fp/setSeconds/index.js' {
+ import { setSeconds } from 'date-fns/fp'
+ export default setSeconds
+}
+
+declare module 'date-fns/fp/setWeek/index.js' {
+ import { setWeek } from 'date-fns/fp'
+ export default setWeek
+}
+
+declare module 'date-fns/fp/setWeekWithOptions/index.js' {
+ import { setWeekWithOptions } from 'date-fns/fp'
+ export default setWeekWithOptions
+}
+
+declare module 'date-fns/fp/setWeekYear/index.js' {
+ import { setWeekYear } from 'date-fns/fp'
+ export default setWeekYear
+}
+
+declare module 'date-fns/fp/setWeekYearWithOptions/index.js' {
+ import { setWeekYearWithOptions } from 'date-fns/fp'
+ export default setWeekYearWithOptions
+}
+
+declare module 'date-fns/fp/setYear/index.js' {
+ import { setYear } from 'date-fns/fp'
+ export default setYear
+}
+
+declare module 'date-fns/fp/startOfDay/index.js' {
+ import { startOfDay } from 'date-fns/fp'
+ export default startOfDay
+}
+
+declare module 'date-fns/fp/startOfDecade/index.js' {
+ import { startOfDecade } from 'date-fns/fp'
+ export default startOfDecade
+}
+
+declare module 'date-fns/fp/startOfHour/index.js' {
+ import { startOfHour } from 'date-fns/fp'
+ export default startOfHour
+}
+
+declare module 'date-fns/fp/startOfISOWeek/index.js' {
+ import { startOfISOWeek } from 'date-fns/fp'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/fp/startOfISOWeekYear/index.js' {
+ import { startOfISOWeekYear } from 'date-fns/fp'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/fp/startOfMinute/index.js' {
+ import { startOfMinute } from 'date-fns/fp'
+ export default startOfMinute
+}
+
+declare module 'date-fns/fp/startOfMonth/index.js' {
+ import { startOfMonth } from 'date-fns/fp'
+ export default startOfMonth
+}
+
+declare module 'date-fns/fp/startOfQuarter/index.js' {
+ import { startOfQuarter } from 'date-fns/fp'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/fp/startOfSecond/index.js' {
+ import { startOfSecond } from 'date-fns/fp'
+ export default startOfSecond
+}
+
+declare module 'date-fns/fp/startOfWeek/index.js' {
+ import { startOfWeek } from 'date-fns/fp'
+ export default startOfWeek
+}
+
+declare module 'date-fns/fp/startOfWeekWithOptions/index.js' {
+ import { startOfWeekWithOptions } from 'date-fns/fp'
+ export default startOfWeekWithOptions
+}
+
+declare module 'date-fns/fp/startOfWeekYear/index.js' {
+ import { startOfWeekYear } from 'date-fns/fp'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/fp/startOfWeekYearWithOptions/index.js' {
+ import { startOfWeekYearWithOptions } from 'date-fns/fp'
+ export default startOfWeekYearWithOptions
+}
+
+declare module 'date-fns/fp/startOfYear/index.js' {
+ import { startOfYear } from 'date-fns/fp'
+ export default startOfYear
+}
+
+declare module 'date-fns/fp/sub/index.js' {
+ import { sub } from 'date-fns/fp'
+ export default sub
+}
+
+declare module 'date-fns/fp/subBusinessDays/index.js' {
+ import { subBusinessDays } from 'date-fns/fp'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/fp/subDays/index.js' {
+ import { subDays } from 'date-fns/fp'
+ export default subDays
+}
+
+declare module 'date-fns/fp/subHours/index.js' {
+ import { subHours } from 'date-fns/fp'
+ export default subHours
+}
+
+declare module 'date-fns/fp/subISOWeekYears/index.js' {
+ import { subISOWeekYears } from 'date-fns/fp'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/fp/subMilliseconds/index.js' {
+ import { subMilliseconds } from 'date-fns/fp'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/fp/subMinutes/index.js' {
+ import { subMinutes } from 'date-fns/fp'
+ export default subMinutes
+}
+
+declare module 'date-fns/fp/subMonths/index.js' {
+ import { subMonths } from 'date-fns/fp'
+ export default subMonths
+}
+
+declare module 'date-fns/fp/subQuarters/index.js' {
+ import { subQuarters } from 'date-fns/fp'
+ export default subQuarters
+}
+
+declare module 'date-fns/fp/subSeconds/index.js' {
+ import { subSeconds } from 'date-fns/fp'
+ export default subSeconds
+}
+
+declare module 'date-fns/fp/subWeeks/index.js' {
+ import { subWeeks } from 'date-fns/fp'
+ export default subWeeks
+}
+
+declare module 'date-fns/fp/subYears/index.js' {
+ import { subYears } from 'date-fns/fp'
+ export default subYears
+}
+
+declare module 'date-fns/fp/toDate/index.js' {
+ import { toDate } from 'date-fns/fp'
+ export default toDate
+}
+
+declare module 'date-fns/fp/weeksToDays/index.js' {
+ import { weeksToDays } from 'date-fns/fp'
+ export default weeksToDays
+}
+
+declare module 'date-fns/fp/yearsToMonths/index.js' {
+ import { yearsToMonths } from 'date-fns/fp'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/fp/yearsToQuarters/index.js' {
+ import { yearsToQuarters } from 'date-fns/fp'
+ export default yearsToQuarters
+}
+
+// ECMAScript Module Functions
+
+declare module 'date-fns/esm' {
+ function add(date: Date | number, duration: Duration): Date
+ namespace add {}
+
+ function addBusinessDays(date: Date | number, amount: number): Date
+ namespace addBusinessDays {}
+
+ function addDays(date: Date | number, amount: number): Date
+ namespace addDays {}
+
+ function addHours(date: Date | number, amount: number): Date
+ namespace addHours {}
+
+ function addISOWeekYears(date: Date | number, amount: number): Date
+ namespace addISOWeekYears {}
+
+ function addMilliseconds(date: Date | number, amount: number): Date
+ namespace addMilliseconds {}
+
+ function addMinutes(date: Date | number, amount: number): Date
+ namespace addMinutes {}
+
+ function addMonths(date: Date | number, amount: number): Date
+ namespace addMonths {}
+
+ function addQuarters(date: Date | number, amount: number): Date
+ namespace addQuarters {}
+
+ function addSeconds(date: Date | number, amount: number): Date
+ namespace addSeconds {}
+
+ function addWeeks(date: Date | number, amount: number): Date
+ namespace addWeeks {}
+
+ function addYears(date: Date | number, amount: number): Date
+ namespace addYears {}
+
+ function areIntervalsOverlapping(
+ intervalLeft: Interval,
+ intervalRight: Interval,
+ options?: {
+ inclusive?: boolean
+ }
+ ): boolean
+ namespace areIntervalsOverlapping {}
+
+ function closestIndexTo(
+ dateToCompare: Date | number,
+ datesArray: (Date | number)[]
+ ): number
+ namespace closestIndexTo {}
+
+ function closestTo(
+ dateToCompare: Date | number,
+ datesArray: (Date | number)[]
+ ): Date
+ namespace closestTo {}
+
+ function compareAsc(dateLeft: Date | number, dateRight: Date | number): number
+ namespace compareAsc {}
+
+ function compareDesc(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace compareDesc {}
+
+ function daysToWeeks(days: number): number
+ namespace daysToWeeks {}
+
+ function differenceInBusinessDays(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInBusinessDays {}
+
+ function differenceInCalendarDays(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarDays {}
+
+ function differenceInCalendarISOWeeks(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarISOWeeks {}
+
+ function differenceInCalendarISOWeekYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarISOWeekYears {}
+
+ function differenceInCalendarMonths(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarMonths {}
+
+ function differenceInCalendarQuarters(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarQuarters {}
+
+ function differenceInCalendarWeeks(
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): number
+ namespace differenceInCalendarWeeks {}
+
+ function differenceInCalendarYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInCalendarYears {}
+
+ function differenceInDays(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInDays {}
+
+ function differenceInHours(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInHours {}
+
+ function differenceInISOWeekYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInISOWeekYears {}
+
+ function differenceInMilliseconds(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInMilliseconds {}
+
+ function differenceInMinutes(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInMinutes {}
+
+ function differenceInMonths(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInMonths {}
+
+ function differenceInQuarters(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInQuarters {}
+
+ function differenceInSeconds(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInSeconds {}
+
+ function differenceInWeeks(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInWeeks {}
+
+ function differenceInYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+ namespace differenceInYears {}
+
+ function eachDayOfInterval(
+ interval: Interval,
+ options?: {
+ step?: number
+ }
+ ): Date[]
+ namespace eachDayOfInterval {}
+
+ function eachHourOfInterval(
+ interval: Interval,
+ options?: {
+ step?: number
+ }
+ ): Date[]
+ namespace eachHourOfInterval {}
+
+ function eachMinuteOfInterval(
+ interval: Interval,
+ options?: {
+ step?: number
+ }
+ ): Date[]
+ namespace eachMinuteOfInterval {}
+
+ function eachMonthOfInterval(interval: Interval): Date[]
+ namespace eachMonthOfInterval {}
+
+ function eachQuarterOfInterval(interval: Interval): Date[]
+ namespace eachQuarterOfInterval {}
+
+ function eachWeekendOfInterval(interval: Interval): Date[]
+ namespace eachWeekendOfInterval {}
+
+ function eachWeekendOfMonth(date: Date | number): Date[]
+ namespace eachWeekendOfMonth {}
+
+ function eachWeekendOfYear(date: Date | number): Date[]
+ namespace eachWeekendOfYear {}
+
+ function eachWeekOfInterval(
+ interval: Interval,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date[]
+ namespace eachWeekOfInterval {}
+
+ function eachYearOfInterval(interval: Interval): Date[]
+ namespace eachYearOfInterval {}
+
+ function endOfDay(date: Date | number): Date
+ namespace endOfDay {}
+
+ function endOfDecade(
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2
+ }
+ ): Date
+ namespace endOfDecade {}
+
+ function endOfHour(date: Date | number): Date
+ namespace endOfHour {}
+
+ function endOfISOWeek(date: Date | number): Date
+ namespace endOfISOWeek {}
+
+ function endOfISOWeekYear(date: Date | number): Date
+ namespace endOfISOWeekYear {}
+
+ function endOfMinute(date: Date | number): Date
+ namespace endOfMinute {}
+
+ function endOfMonth(date: Date | number): Date
+ namespace endOfMonth {}
+
+ function endOfQuarter(date: Date | number): Date
+ namespace endOfQuarter {}
+
+ function endOfSecond(date: Date | number): Date
+ namespace endOfSecond {}
+
+ function endOfToday(): Date
+ namespace endOfToday {}
+
+ function endOfTomorrow(): Date
+ namespace endOfTomorrow {}
+
+ function endOfWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+ namespace endOfWeek {}
+
+ function endOfYear(date: Date | number): Date
+ namespace endOfYear {}
+
+ function endOfYesterday(): Date
+ namespace endOfYesterday {}
+
+ function format(
+ date: Date | number,
+ format: string,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: number
+ useAdditionalWeekYearTokens?: boolean
+ useAdditionalDayOfYearTokens?: boolean
+ }
+ ): string
+ namespace format {}
+
+ function formatDistance(
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ includeSeconds?: boolean
+ addSuffix?: boolean
+ locale?: Locale
+ }
+ ): string
+ namespace formatDistance {}
+
+ function formatDistanceStrict(
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ addSuffix?: boolean
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'
+ roundingMethod?: 'floor' | 'ceil' | 'round'
+ locale?: Locale
+ }
+ ): string
+ namespace formatDistanceStrict {}
+
+ function formatDistanceToNow(
+ date: Date | number,
+ options?: {
+ includeSeconds?: boolean
+ addSuffix?: boolean
+ locale?: Locale
+ }
+ ): string
+ namespace formatDistanceToNow {}
+
+ function formatDistanceToNowStrict(
+ date: Date | number,
+ options?: {
+ addSuffix?: boolean
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'
+ roundingMethod?: 'floor' | 'ceil' | 'round'
+ locale?: Locale
+ }
+ ): string
+ namespace formatDistanceToNowStrict {}
+
+ function formatDuration(
+ duration: Duration,
+ options?: {
+ format?: string[]
+ zero?: boolean
+ delimiter?: string
+ locale?: Locale
+ }
+ ): string
+ namespace formatDuration {}
+
+ function formatISO(
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic'
+ representation?: 'complete' | 'date' | 'time'
+ }
+ ): string
+ namespace formatISO {}
+
+ function formatISO9075(
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic'
+ representation?: 'complete' | 'date' | 'time'
+ }
+ ): string
+ namespace formatISO9075 {}
+
+ function formatISODuration(duration: Duration): string
+ namespace formatISODuration {}
+
+ function formatRelative(
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): string
+ namespace formatRelative {}
+
+ function formatRFC3339(
+ date: Date | number,
+ options?: {
+ fractionDigits?: 0 | 1 | 2 | 3
+ }
+ ): string
+ namespace formatRFC3339 {}
+
+ function formatRFC7231(date: Date | number): string
+ namespace formatRFC7231 {}
+
+ function fromUnixTime(unixTime: number): Date
+ namespace fromUnixTime {}
+
+ function getDate(date: Date | number): number
+ namespace getDate {}
+
+ function getDay(date: Date | number): 0 | 1 | 2 | 3 | 4 | 5 | 6
+ namespace getDay {}
+
+ function getDayOfYear(date: Date | number): number
+ namespace getDayOfYear {}
+
+ function getDaysInMonth(date: Date | number): number
+ namespace getDaysInMonth {}
+
+ function getDaysInYear(date: Date | number): number
+ namespace getDaysInYear {}
+
+ function getDecade(date: Date | number): number
+ namespace getDecade {}
+
+ function getHours(date: Date | number): number
+ namespace getHours {}
+
+ function getISODay(date: Date | number): number
+ namespace getISODay {}
+
+ function getISOWeek(date: Date | number): number
+ namespace getISOWeek {}
+
+ function getISOWeeksInYear(date: Date | number): number
+ namespace getISOWeeksInYear {}
+
+ function getISOWeekYear(date: Date | number): number
+ namespace getISOWeekYear {}
+
+ function getMilliseconds(date: Date | number): number
+ namespace getMilliseconds {}
+
+ function getMinutes(date: Date | number): number
+ namespace getMinutes {}
+
+ function getMonth(date: Date | number): number
+ namespace getMonth {}
+
+ function getOverlappingDaysInIntervals(
+ intervalLeft: Interval,
+ intervalRight: Interval
+ ): number
+ namespace getOverlappingDaysInIntervals {}
+
+ function getQuarter(date: Date | number): number
+ namespace getQuarter {}
+
+ function getSeconds(date: Date | number): number
+ namespace getSeconds {}
+
+ function getTime(date: Date | number): number
+ namespace getTime {}
+
+ function getUnixTime(date: Date | number): number
+ namespace getUnixTime {}
+
+ function getWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): number
+ namespace getWeek {}
+
+ function getWeekOfMonth(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): number
+ namespace getWeekOfMonth {}
+
+ function getWeeksInMonth(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): number
+ namespace getWeeksInMonth {}
+
+ function getWeekYear(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): number
+ namespace getWeekYear {}
+
+ function getYear(date: Date | number): number
+ namespace getYear {}
+
+ function hoursToMilliseconds(hours: number): number
+ namespace hoursToMilliseconds {}
+
+ function hoursToMinutes(hours: number): number
+ namespace hoursToMinutes {}
+
+ function hoursToSeconds(hours: number): number
+ namespace hoursToSeconds {}
+
+ function intervalToDuration(interval: Interval): Duration
+ namespace intervalToDuration {}
+
+ function intlFormat(
+ argument: Date | number,
+ formatOptions?: {
+ localeMatcher?: 'lookup' | 'best fit'
+ weekday?: 'narrow' | 'short' | 'long'
+ era?: 'narrow' | 'short' | 'long'
+ year?: 'numeric' | '2-digit'
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long'
+ day?: 'numeric' | '2-digit'
+ hour?: 'numeric' | '2-digit'
+ minute?: 'numeric' | '2-digit'
+ second?: 'numeric' | '2-digit'
+ timeZoneName?: 'short' | 'long'
+ formatMatcher?: 'basic' | 'best fit'
+ hour12?: boolean
+ timeZone?: string
+ },
+ localeOptions?: {
+ locale?: string | string[]
+ }
+ ): string
+ namespace intlFormat {}
+
+ function isAfter(date: Date | number, dateToCompare: Date | number): boolean
+ namespace isAfter {}
+
+ function isBefore(date: Date | number, dateToCompare: Date | number): boolean
+ namespace isBefore {}
+
+ function isDate(value: any): boolean
+ namespace isDate {}
+
+ function isEqual(dateLeft: Date | number, dateRight: Date | number): boolean
+ namespace isEqual {}
+
+ function isExists(year: number, month: number, day: number): boolean
+ namespace isExists {}
+
+ function isFirstDayOfMonth(date: Date | number): boolean
+ namespace isFirstDayOfMonth {}
+
+ function isFriday(date: Date | number): boolean
+ namespace isFriday {}
+
+ function isFuture(date: Date | number): boolean
+ namespace isFuture {}
+
+ function isLastDayOfMonth(date: Date | number): boolean
+ namespace isLastDayOfMonth {}
+
+ function isLeapYear(date: Date | number): boolean
+ namespace isLeapYear {}
+
+ function isMatch(
+ dateString: string,
+ formatString: string,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ useAdditionalWeekYearTokens?: boolean
+ useAdditionalDayOfYearTokens?: boolean
+ }
+ ): boolean
+ namespace isMatch {}
+
+ function isMonday(date: Date | number): boolean
+ namespace isMonday {}
+
+ function isPast(date: Date | number): boolean
+ namespace isPast {}
+
+ function isSameDay(dateLeft: Date | number, dateRight: Date | number): boolean
+ namespace isSameDay {}
+
+ function isSameHour(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameHour {}
+
+ function isSameISOWeek(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameISOWeek {}
+
+ function isSameISOWeekYear(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameISOWeekYear {}
+
+ function isSameMinute(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameMinute {}
+
+ function isSameMonth(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameMonth {}
+
+ function isSameQuarter(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameQuarter {}
+
+ function isSameSecond(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameSecond {}
+
+ function isSameWeek(
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): boolean
+ namespace isSameWeek {}
+
+ function isSameYear(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): boolean
+ namespace isSameYear {}
+
+ function isSaturday(date: Date | number): boolean
+ namespace isSaturday {}
+
+ function isSunday(date: Date | number): boolean
+ namespace isSunday {}
+
+ function isThisHour(date: Date | number): boolean
+ namespace isThisHour {}
+
+ function isThisISOWeek(date: Date | number): boolean
+ namespace isThisISOWeek {}
+
+ function isThisMinute(date: Date | number): boolean
+ namespace isThisMinute {}
+
+ function isThisMonth(date: Date | number): boolean
+ namespace isThisMonth {}
+
+ function isThisQuarter(date: Date | number): boolean
+ namespace isThisQuarter {}
+
+ function isThisSecond(date: Date | number): boolean
+ namespace isThisSecond {}
+
+ function isThisWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): boolean
+ namespace isThisWeek {}
+
+ function isThisYear(date: Date | number): boolean
+ namespace isThisYear {}
+
+ function isThursday(date: Date | number): boolean
+ namespace isThursday {}
+
+ function isToday(date: Date | number): boolean
+ namespace isToday {}
+
+ function isTomorrow(date: Date | number): boolean
+ namespace isTomorrow {}
+
+ function isTuesday(date: Date | number): boolean
+ namespace isTuesday {}
+
+ function isValid(date: any): boolean
+ namespace isValid {}
+
+ function isWednesday(date: Date | number): boolean
+ namespace isWednesday {}
+
+ function isWeekend(date: Date | number): boolean
+ namespace isWeekend {}
+
+ function isWithinInterval(date: Date | number, interval: Interval): boolean
+ namespace isWithinInterval {}
+
+ function isYesterday(date: Date | number): boolean
+ namespace isYesterday {}
+
+ function lastDayOfDecade(date: Date | number): Date
+ namespace lastDayOfDecade {}
+
+ function lastDayOfISOWeek(date: Date | number): Date
+ namespace lastDayOfISOWeek {}
+
+ function lastDayOfISOWeekYear(date: Date | number): Date
+ namespace lastDayOfISOWeekYear {}
+
+ function lastDayOfMonth(date: Date | number): Date
+ namespace lastDayOfMonth {}
+
+ function lastDayOfQuarter(
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2
+ }
+ ): Date
+ namespace lastDayOfQuarter {}
+
+ function lastDayOfWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+ namespace lastDayOfWeek {}
+
+ function lastDayOfYear(date: Date | number): Date
+ namespace lastDayOfYear {}
+
+ function lightFormat(date: Date | number, format: string): string
+ namespace lightFormat {}
+
+ function max(datesArray: (Date | number)[]): Date
+ namespace max {}
+
+ function milliseconds(duration: Duration): number
+ namespace milliseconds {}
+
+ function millisecondsToHours(milliseconds: number): number
+ namespace millisecondsToHours {}
+
+ function millisecondsToMinutes(milliseconds: number): number
+ namespace millisecondsToMinutes {}
+
+ function millisecondsToSeconds(milliseconds: number): number
+ namespace millisecondsToSeconds {}
+
+ function min(datesArray: (Date | number)[]): Date
+ namespace min {}
+
+ function minutesToHours(minutes: number): number
+ namespace minutesToHours {}
+
+ function minutesToMilliseconds(minutes: number): number
+ namespace minutesToMilliseconds {}
+
+ function minutesToSeconds(minutes: number): number
+ namespace minutesToSeconds {}
+
+ function monthsToQuarters(months: number): number
+ namespace monthsToQuarters {}
+
+ function monthsToYears(months: number): number
+ namespace monthsToYears {}
+
+ function nextDay(date: Date | number, day: Day): Date
+ namespace nextDay {}
+
+ function nextFriday(date: Date | number): Date
+ namespace nextFriday {}
+
+ function nextMonday(date: Date | number): Date
+ namespace nextMonday {}
+
+ function nextSaturday(date: Date | number): Date
+ namespace nextSaturday {}
+
+ function nextSunday(date: Date | number): Date
+ namespace nextSunday {}
+
+ function nextThursday(date: Date | number): Date
+ namespace nextThursday {}
+
+ function nextTuesday(date: Date | number): Date
+ namespace nextTuesday {}
+
+ function nextWednesday(date: Date | number): Date
+ namespace nextWednesday {}
+
+ function parse(
+ dateString: string,
+ formatString: string,
+ referenceDate: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ useAdditionalWeekYearTokens?: boolean
+ useAdditionalDayOfYearTokens?: boolean
+ }
+ ): Date
+ namespace parse {}
+
+ function parseISO(
+ argument: string,
+ options?: {
+ additionalDigits?: 0 | 1 | 2
+ }
+ ): Date
+ namespace parseISO {}
+
+ function parseJSON(argument: string | number | Date): Date
+ namespace parseJSON {}
+
+ function quartersToMonths(quarters: number): number
+ namespace quartersToMonths {}
+
+ function quartersToYears(quarters: number): number
+ namespace quartersToYears {}
+
+ function roundToNearestMinutes(
+ date: Date | number,
+ options?: {
+ nearestTo?: number
+ }
+ ): Date
+ namespace roundToNearestMinutes {}
+
+ function secondsToHours(seconds: number): number
+ namespace secondsToHours {}
+
+ function secondsToMilliseconds(seconds: number): number
+ namespace secondsToMilliseconds {}
+
+ function secondsToMinutes(seconds: number): number
+ namespace secondsToMinutes {}
+
+ function set(
+ date: Date | number,
+ values: {
+ year?: number
+ month?: number
+ date?: number
+ hours?: number
+ minutes?: number
+ seconds?: number
+ milliseconds?: number
+ }
+ ): Date
+ namespace set {}
+
+ function setDate(date: Date | number, dayOfMonth: number): Date
+ namespace setDate {}
+
+ function setDay(
+ date: Date | number,
+ day: number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+ namespace setDay {}
+
+ function setDayOfYear(date: Date | number, dayOfYear: number): Date
+ namespace setDayOfYear {}
+
+ function setHours(date: Date | number, hours: number): Date
+ namespace setHours {}
+
+ function setISODay(date: Date | number, day: number): Date
+ namespace setISODay {}
+
+ function setISOWeek(date: Date | number, isoWeek: number): Date
+ namespace setISOWeek {}
+
+ function setISOWeekYear(date: Date | number, isoWeekYear: number): Date
+ namespace setISOWeekYear {}
+
+ function setMilliseconds(date: Date | number, milliseconds: number): Date
+ namespace setMilliseconds {}
+
+ function setMinutes(date: Date | number, minutes: number): Date
+ namespace setMinutes {}
+
+ function setMonth(date: Date | number, month: number): Date
+ namespace setMonth {}
+
+ function setQuarter(date: Date | number, quarter: number): Date
+ namespace setQuarter {}
+
+ function setSeconds(date: Date | number, seconds: number): Date
+ namespace setSeconds {}
+
+ function setWeek(
+ date: Date | number,
+ week: number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): Date
+ namespace setWeek {}
+
+ function setWeekYear(
+ date: Date | number,
+ weekYear: number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): Date
+ namespace setWeekYear {}
+
+ function setYear(date: Date | number, year: number): Date
+ namespace setYear {}
+
+ function startOfDay(date: Date | number): Date
+ namespace startOfDay {}
+
+ function startOfDecade(date: Date | number): Date
+ namespace startOfDecade {}
+
+ function startOfHour(date: Date | number): Date
+ namespace startOfHour {}
+
+ function startOfISOWeek(date: Date | number): Date
+ namespace startOfISOWeek {}
+
+ function startOfISOWeekYear(date: Date | number): Date
+ namespace startOfISOWeekYear {}
+
+ function startOfMinute(date: Date | number): Date
+ namespace startOfMinute {}
+
+ function startOfMonth(date: Date | number): Date
+ namespace startOfMonth {}
+
+ function startOfQuarter(date: Date | number): Date
+ namespace startOfQuarter {}
+
+ function startOfSecond(date: Date | number): Date
+ namespace startOfSecond {}
+
+ function startOfToday(): Date
+ namespace startOfToday {}
+
+ function startOfTomorrow(): Date
+ namespace startOfTomorrow {}
+
+ function startOfWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+ namespace startOfWeek {}
+
+ function startOfWeekYear(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): Date
+ namespace startOfWeekYear {}
+
+ function startOfYear(date: Date | number): Date
+ namespace startOfYear {}
+
+ function startOfYesterday(): Date
+ namespace startOfYesterday {}
+
+ function sub(date: Date | number, duration: Duration): Date
+ namespace sub {}
+
+ function subBusinessDays(date: Date | number, amount: number): Date
+ namespace subBusinessDays {}
+
+ function subDays(date: Date | number, amount: number): Date
+ namespace subDays {}
+
+ function subHours(date: Date | number, amount: number): Date
+ namespace subHours {}
+
+ function subISOWeekYears(date: Date | number, amount: number): Date
+ namespace subISOWeekYears {}
+
+ function subMilliseconds(date: Date | number, amount: number): Date
+ namespace subMilliseconds {}
+
+ function subMinutes(date: Date | number, amount: number): Date
+ namespace subMinutes {}
+
+ function subMonths(date: Date | number, amount: number): Date
+ namespace subMonths {}
+
+ function subQuarters(date: Date | number, amount: number): Date
+ namespace subQuarters {}
+
+ function subSeconds(date: Date | number, amount: number): Date
+ namespace subSeconds {}
+
+ function subWeeks(date: Date | number, amount: number): Date
+ namespace subWeeks {}
+
+ function subYears(date: Date | number, amount: number): Date
+ namespace subYears {}
+
+ function toDate(argument: Date | number): Date
+ namespace toDate {}
+
+ function weeksToDays(weeks: number): number
+ namespace weeksToDays {}
+
+ function yearsToMonths(years: number): number
+ namespace yearsToMonths {}
+
+ function yearsToQuarters(years: number): number
+ namespace yearsToQuarters {}
+
+ const daysInWeek: number
+
+ const maxTime: number
+
+ const millisecondsInMinute: number
+
+ const millisecondsInHour: number
+
+ const millisecondsInSecond: number
+
+ const minTime: number
+
+ const minutesInHour: number
+
+ const monthsInQuarter: number
+
+ const monthsInYear: number
+
+ const quartersInYear: number
+
+ const secondsInHour: number
+
+ const secondsInMinute: number
+}
+
+declare module 'date-fns/esm/add' {
+ import { add } from 'date-fns/esm'
+ export default add
+}
+
+declare module 'date-fns/esm/addBusinessDays' {
+ import { addBusinessDays } from 'date-fns/esm'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/esm/addDays' {
+ import { addDays } from 'date-fns/esm'
+ export default addDays
+}
+
+declare module 'date-fns/esm/addHours' {
+ import { addHours } from 'date-fns/esm'
+ export default addHours
+}
+
+declare module 'date-fns/esm/addISOWeekYears' {
+ import { addISOWeekYears } from 'date-fns/esm'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/esm/addMilliseconds' {
+ import { addMilliseconds } from 'date-fns/esm'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/esm/addMinutes' {
+ import { addMinutes } from 'date-fns/esm'
+ export default addMinutes
+}
+
+declare module 'date-fns/esm/addMonths' {
+ import { addMonths } from 'date-fns/esm'
+ export default addMonths
+}
+
+declare module 'date-fns/esm/addQuarters' {
+ import { addQuarters } from 'date-fns/esm'
+ export default addQuarters
+}
+
+declare module 'date-fns/esm/addSeconds' {
+ import { addSeconds } from 'date-fns/esm'
+ export default addSeconds
+}
+
+declare module 'date-fns/esm/addWeeks' {
+ import { addWeeks } from 'date-fns/esm'
+ export default addWeeks
+}
+
+declare module 'date-fns/esm/addYears' {
+ import { addYears } from 'date-fns/esm'
+ export default addYears
+}
+
+declare module 'date-fns/esm/areIntervalsOverlapping' {
+ import { areIntervalsOverlapping } from 'date-fns/esm'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/esm/closestIndexTo' {
+ import { closestIndexTo } from 'date-fns/esm'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/esm/closestTo' {
+ import { closestTo } from 'date-fns/esm'
+ export default closestTo
+}
+
+declare module 'date-fns/esm/compareAsc' {
+ import { compareAsc } from 'date-fns/esm'
+ export default compareAsc
+}
+
+declare module 'date-fns/esm/compareDesc' {
+ import { compareDesc } from 'date-fns/esm'
+ export default compareDesc
+}
+
+declare module 'date-fns/esm/daysToWeeks' {
+ import { daysToWeeks } from 'date-fns/esm'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/esm/differenceInBusinessDays' {
+ import { differenceInBusinessDays } from 'date-fns/esm'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/esm/differenceInCalendarDays' {
+ import { differenceInCalendarDays } from 'date-fns/esm'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/esm/differenceInCalendarISOWeeks' {
+ import { differenceInCalendarISOWeeks } from 'date-fns/esm'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/esm/differenceInCalendarISOWeekYears' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns/esm'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/esm/differenceInCalendarMonths' {
+ import { differenceInCalendarMonths } from 'date-fns/esm'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/esm/differenceInCalendarQuarters' {
+ import { differenceInCalendarQuarters } from 'date-fns/esm'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/esm/differenceInCalendarWeeks' {
+ import { differenceInCalendarWeeks } from 'date-fns/esm'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/esm/differenceInCalendarYears' {
+ import { differenceInCalendarYears } from 'date-fns/esm'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/esm/differenceInDays' {
+ import { differenceInDays } from 'date-fns/esm'
+ export default differenceInDays
+}
+
+declare module 'date-fns/esm/differenceInHours' {
+ import { differenceInHours } from 'date-fns/esm'
+ export default differenceInHours
+}
+
+declare module 'date-fns/esm/differenceInISOWeekYears' {
+ import { differenceInISOWeekYears } from 'date-fns/esm'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/esm/differenceInMilliseconds' {
+ import { differenceInMilliseconds } from 'date-fns/esm'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/esm/differenceInMinutes' {
+ import { differenceInMinutes } from 'date-fns/esm'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/esm/differenceInMonths' {
+ import { differenceInMonths } from 'date-fns/esm'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/esm/differenceInQuarters' {
+ import { differenceInQuarters } from 'date-fns/esm'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/esm/differenceInSeconds' {
+ import { differenceInSeconds } from 'date-fns/esm'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/esm/differenceInWeeks' {
+ import { differenceInWeeks } from 'date-fns/esm'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/esm/differenceInYears' {
+ import { differenceInYears } from 'date-fns/esm'
+ export default differenceInYears
+}
+
+declare module 'date-fns/esm/eachDayOfInterval' {
+ import { eachDayOfInterval } from 'date-fns/esm'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/esm/eachHourOfInterval' {
+ import { eachHourOfInterval } from 'date-fns/esm'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/esm/eachMinuteOfInterval' {
+ import { eachMinuteOfInterval } from 'date-fns/esm'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/esm/eachMonthOfInterval' {
+ import { eachMonthOfInterval } from 'date-fns/esm'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/esm/eachQuarterOfInterval' {
+ import { eachQuarterOfInterval } from 'date-fns/esm'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/esm/eachWeekendOfInterval' {
+ import { eachWeekendOfInterval } from 'date-fns/esm'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/esm/eachWeekendOfMonth' {
+ import { eachWeekendOfMonth } from 'date-fns/esm'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/esm/eachWeekendOfYear' {
+ import { eachWeekendOfYear } from 'date-fns/esm'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/esm/eachWeekOfInterval' {
+ import { eachWeekOfInterval } from 'date-fns/esm'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/esm/eachYearOfInterval' {
+ import { eachYearOfInterval } from 'date-fns/esm'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/esm/endOfDay' {
+ import { endOfDay } from 'date-fns/esm'
+ export default endOfDay
+}
+
+declare module 'date-fns/esm/endOfDecade' {
+ import { endOfDecade } from 'date-fns/esm'
+ export default endOfDecade
+}
+
+declare module 'date-fns/esm/endOfHour' {
+ import { endOfHour } from 'date-fns/esm'
+ export default endOfHour
+}
+
+declare module 'date-fns/esm/endOfISOWeek' {
+ import { endOfISOWeek } from 'date-fns/esm'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/esm/endOfISOWeekYear' {
+ import { endOfISOWeekYear } from 'date-fns/esm'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/esm/endOfMinute' {
+ import { endOfMinute } from 'date-fns/esm'
+ export default endOfMinute
+}
+
+declare module 'date-fns/esm/endOfMonth' {
+ import { endOfMonth } from 'date-fns/esm'
+ export default endOfMonth
+}
+
+declare module 'date-fns/esm/endOfQuarter' {
+ import { endOfQuarter } from 'date-fns/esm'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/esm/endOfSecond' {
+ import { endOfSecond } from 'date-fns/esm'
+ export default endOfSecond
+}
+
+declare module 'date-fns/esm/endOfToday' {
+ import { endOfToday } from 'date-fns/esm'
+ export default endOfToday
+}
+
+declare module 'date-fns/esm/endOfTomorrow' {
+ import { endOfTomorrow } from 'date-fns/esm'
+ export default endOfTomorrow
+}
+
+declare module 'date-fns/esm/endOfWeek' {
+ import { endOfWeek } from 'date-fns/esm'
+ export default endOfWeek
+}
+
+declare module 'date-fns/esm/endOfYear' {
+ import { endOfYear } from 'date-fns/esm'
+ export default endOfYear
+}
+
+declare module 'date-fns/esm/endOfYesterday' {
+ import { endOfYesterday } from 'date-fns/esm'
+ export default endOfYesterday
+}
+
+declare module 'date-fns/esm/format' {
+ import { format } from 'date-fns/esm'
+ export default format
+}
+
+declare module 'date-fns/esm/formatDistance' {
+ import { formatDistance } from 'date-fns/esm'
+ export default formatDistance
+}
+
+declare module 'date-fns/esm/formatDistanceStrict' {
+ import { formatDistanceStrict } from 'date-fns/esm'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/esm/formatDistanceToNow' {
+ import { formatDistanceToNow } from 'date-fns/esm'
+ export default formatDistanceToNow
+}
+
+declare module 'date-fns/esm/formatDistanceToNowStrict' {
+ import { formatDistanceToNowStrict } from 'date-fns/esm'
+ export default formatDistanceToNowStrict
+}
+
+declare module 'date-fns/esm/formatDuration' {
+ import { formatDuration } from 'date-fns/esm'
+ export default formatDuration
+}
+
+declare module 'date-fns/esm/formatISO' {
+ import { formatISO } from 'date-fns/esm'
+ export default formatISO
+}
+
+declare module 'date-fns/esm/formatISO9075' {
+ import { formatISO9075 } from 'date-fns/esm'
+ export default formatISO9075
+}
+
+declare module 'date-fns/esm/formatISODuration' {
+ import { formatISODuration } from 'date-fns/esm'
+ export default formatISODuration
+}
+
+declare module 'date-fns/esm/formatRelative' {
+ import { formatRelative } from 'date-fns/esm'
+ export default formatRelative
+}
+
+declare module 'date-fns/esm/formatRFC3339' {
+ import { formatRFC3339 } from 'date-fns/esm'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/esm/formatRFC7231' {
+ import { formatRFC7231 } from 'date-fns/esm'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/esm/fromUnixTime' {
+ import { fromUnixTime } from 'date-fns/esm'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/esm/getDate' {
+ import { getDate } from 'date-fns/esm'
+ export default getDate
+}
+
+declare module 'date-fns/esm/getDay' {
+ import { getDay } from 'date-fns/esm'
+ export default getDay
+}
+
+declare module 'date-fns/esm/getDayOfYear' {
+ import { getDayOfYear } from 'date-fns/esm'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/esm/getDaysInMonth' {
+ import { getDaysInMonth } from 'date-fns/esm'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/esm/getDaysInYear' {
+ import { getDaysInYear } from 'date-fns/esm'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/esm/getDecade' {
+ import { getDecade } from 'date-fns/esm'
+ export default getDecade
+}
+
+declare module 'date-fns/esm/getHours' {
+ import { getHours } from 'date-fns/esm'
+ export default getHours
+}
+
+declare module 'date-fns/esm/getISODay' {
+ import { getISODay } from 'date-fns/esm'
+ export default getISODay
+}
+
+declare module 'date-fns/esm/getISOWeek' {
+ import { getISOWeek } from 'date-fns/esm'
+ export default getISOWeek
+}
+
+declare module 'date-fns/esm/getISOWeeksInYear' {
+ import { getISOWeeksInYear } from 'date-fns/esm'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/esm/getISOWeekYear' {
+ import { getISOWeekYear } from 'date-fns/esm'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/esm/getMilliseconds' {
+ import { getMilliseconds } from 'date-fns/esm'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/esm/getMinutes' {
+ import { getMinutes } from 'date-fns/esm'
+ export default getMinutes
+}
+
+declare module 'date-fns/esm/getMonth' {
+ import { getMonth } from 'date-fns/esm'
+ export default getMonth
+}
+
+declare module 'date-fns/esm/getOverlappingDaysInIntervals' {
+ import { getOverlappingDaysInIntervals } from 'date-fns/esm'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/esm/getQuarter' {
+ import { getQuarter } from 'date-fns/esm'
+ export default getQuarter
+}
+
+declare module 'date-fns/esm/getSeconds' {
+ import { getSeconds } from 'date-fns/esm'
+ export default getSeconds
+}
+
+declare module 'date-fns/esm/getTime' {
+ import { getTime } from 'date-fns/esm'
+ export default getTime
+}
+
+declare module 'date-fns/esm/getUnixTime' {
+ import { getUnixTime } from 'date-fns/esm'
+ export default getUnixTime
+}
+
+declare module 'date-fns/esm/getWeek' {
+ import { getWeek } from 'date-fns/esm'
+ export default getWeek
+}
+
+declare module 'date-fns/esm/getWeekOfMonth' {
+ import { getWeekOfMonth } from 'date-fns/esm'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/esm/getWeeksInMonth' {
+ import { getWeeksInMonth } from 'date-fns/esm'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/esm/getWeekYear' {
+ import { getWeekYear } from 'date-fns/esm'
+ export default getWeekYear
+}
+
+declare module 'date-fns/esm/getYear' {
+ import { getYear } from 'date-fns/esm'
+ export default getYear
+}
+
+declare module 'date-fns/esm/hoursToMilliseconds' {
+ import { hoursToMilliseconds } from 'date-fns/esm'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/esm/hoursToMinutes' {
+ import { hoursToMinutes } from 'date-fns/esm'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/esm/hoursToSeconds' {
+ import { hoursToSeconds } from 'date-fns/esm'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/esm/intervalToDuration' {
+ import { intervalToDuration } from 'date-fns/esm'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/esm/intlFormat' {
+ import { intlFormat } from 'date-fns/esm'
+ export default intlFormat
+}
+
+declare module 'date-fns/esm/isAfter' {
+ import { isAfter } from 'date-fns/esm'
+ export default isAfter
+}
+
+declare module 'date-fns/esm/isBefore' {
+ import { isBefore } from 'date-fns/esm'
+ export default isBefore
+}
+
+declare module 'date-fns/esm/isDate' {
+ import { isDate } from 'date-fns/esm'
+ export default isDate
+}
+
+declare module 'date-fns/esm/isEqual' {
+ import { isEqual } from 'date-fns/esm'
+ export default isEqual
+}
+
+declare module 'date-fns/esm/isExists' {
+ import { isExists } from 'date-fns/esm'
+ export default isExists
+}
+
+declare module 'date-fns/esm/isFirstDayOfMonth' {
+ import { isFirstDayOfMonth } from 'date-fns/esm'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/esm/isFriday' {
+ import { isFriday } from 'date-fns/esm'
+ export default isFriday
+}
+
+declare module 'date-fns/esm/isFuture' {
+ import { isFuture } from 'date-fns/esm'
+ export default isFuture
+}
+
+declare module 'date-fns/esm/isLastDayOfMonth' {
+ import { isLastDayOfMonth } from 'date-fns/esm'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/esm/isLeapYear' {
+ import { isLeapYear } from 'date-fns/esm'
+ export default isLeapYear
+}
+
+declare module 'date-fns/esm/isMatch' {
+ import { isMatch } from 'date-fns/esm'
+ export default isMatch
+}
+
+declare module 'date-fns/esm/isMonday' {
+ import { isMonday } from 'date-fns/esm'
+ export default isMonday
+}
+
+declare module 'date-fns/esm/isPast' {
+ import { isPast } from 'date-fns/esm'
+ export default isPast
+}
+
+declare module 'date-fns/esm/isSameDay' {
+ import { isSameDay } from 'date-fns/esm'
+ export default isSameDay
+}
+
+declare module 'date-fns/esm/isSameHour' {
+ import { isSameHour } from 'date-fns/esm'
+ export default isSameHour
+}
+
+declare module 'date-fns/esm/isSameISOWeek' {
+ import { isSameISOWeek } from 'date-fns/esm'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/esm/isSameISOWeekYear' {
+ import { isSameISOWeekYear } from 'date-fns/esm'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/esm/isSameMinute' {
+ import { isSameMinute } from 'date-fns/esm'
+ export default isSameMinute
+}
+
+declare module 'date-fns/esm/isSameMonth' {
+ import { isSameMonth } from 'date-fns/esm'
+ export default isSameMonth
+}
+
+declare module 'date-fns/esm/isSameQuarter' {
+ import { isSameQuarter } from 'date-fns/esm'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/esm/isSameSecond' {
+ import { isSameSecond } from 'date-fns/esm'
+ export default isSameSecond
+}
+
+declare module 'date-fns/esm/isSameWeek' {
+ import { isSameWeek } from 'date-fns/esm'
+ export default isSameWeek
+}
+
+declare module 'date-fns/esm/isSameYear' {
+ import { isSameYear } from 'date-fns/esm'
+ export default isSameYear
+}
+
+declare module 'date-fns/esm/isSaturday' {
+ import { isSaturday } from 'date-fns/esm'
+ export default isSaturday
+}
+
+declare module 'date-fns/esm/isSunday' {
+ import { isSunday } from 'date-fns/esm'
+ export default isSunday
+}
+
+declare module 'date-fns/esm/isThisHour' {
+ import { isThisHour } from 'date-fns/esm'
+ export default isThisHour
+}
+
+declare module 'date-fns/esm/isThisISOWeek' {
+ import { isThisISOWeek } from 'date-fns/esm'
+ export default isThisISOWeek
+}
+
+declare module 'date-fns/esm/isThisMinute' {
+ import { isThisMinute } from 'date-fns/esm'
+ export default isThisMinute
+}
+
+declare module 'date-fns/esm/isThisMonth' {
+ import { isThisMonth } from 'date-fns/esm'
+ export default isThisMonth
+}
+
+declare module 'date-fns/esm/isThisQuarter' {
+ import { isThisQuarter } from 'date-fns/esm'
+ export default isThisQuarter
+}
+
+declare module 'date-fns/esm/isThisSecond' {
+ import { isThisSecond } from 'date-fns/esm'
+ export default isThisSecond
+}
+
+declare module 'date-fns/esm/isThisWeek' {
+ import { isThisWeek } from 'date-fns/esm'
+ export default isThisWeek
+}
+
+declare module 'date-fns/esm/isThisYear' {
+ import { isThisYear } from 'date-fns/esm'
+ export default isThisYear
+}
+
+declare module 'date-fns/esm/isThursday' {
+ import { isThursday } from 'date-fns/esm'
+ export default isThursday
+}
+
+declare module 'date-fns/esm/isToday' {
+ import { isToday } from 'date-fns/esm'
+ export default isToday
+}
+
+declare module 'date-fns/esm/isTomorrow' {
+ import { isTomorrow } from 'date-fns/esm'
+ export default isTomorrow
+}
+
+declare module 'date-fns/esm/isTuesday' {
+ import { isTuesday } from 'date-fns/esm'
+ export default isTuesday
+}
+
+declare module 'date-fns/esm/isValid' {
+ import { isValid } from 'date-fns/esm'
+ export default isValid
+}
+
+declare module 'date-fns/esm/isWednesday' {
+ import { isWednesday } from 'date-fns/esm'
+ export default isWednesday
+}
+
+declare module 'date-fns/esm/isWeekend' {
+ import { isWeekend } from 'date-fns/esm'
+ export default isWeekend
+}
+
+declare module 'date-fns/esm/isWithinInterval' {
+ import { isWithinInterval } from 'date-fns/esm'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/esm/isYesterday' {
+ import { isYesterday } from 'date-fns/esm'
+ export default isYesterday
+}
+
+declare module 'date-fns/esm/lastDayOfDecade' {
+ import { lastDayOfDecade } from 'date-fns/esm'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/esm/lastDayOfISOWeek' {
+ import { lastDayOfISOWeek } from 'date-fns/esm'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/esm/lastDayOfISOWeekYear' {
+ import { lastDayOfISOWeekYear } from 'date-fns/esm'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/esm/lastDayOfMonth' {
+ import { lastDayOfMonth } from 'date-fns/esm'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/esm/lastDayOfQuarter' {
+ import { lastDayOfQuarter } from 'date-fns/esm'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/esm/lastDayOfWeek' {
+ import { lastDayOfWeek } from 'date-fns/esm'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/esm/lastDayOfYear' {
+ import { lastDayOfYear } from 'date-fns/esm'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/esm/lightFormat' {
+ import { lightFormat } from 'date-fns/esm'
+ export default lightFormat
+}
+
+declare module 'date-fns/esm/max' {
+ import { max } from 'date-fns/esm'
+ export default max
+}
+
+declare module 'date-fns/esm/milliseconds' {
+ import { milliseconds } from 'date-fns/esm'
+ export default milliseconds
+}
+
+declare module 'date-fns/esm/millisecondsToHours' {
+ import { millisecondsToHours } from 'date-fns/esm'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/esm/millisecondsToMinutes' {
+ import { millisecondsToMinutes } from 'date-fns/esm'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/esm/millisecondsToSeconds' {
+ import { millisecondsToSeconds } from 'date-fns/esm'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/esm/min' {
+ import { min } from 'date-fns/esm'
+ export default min
+}
+
+declare module 'date-fns/esm/minutesToHours' {
+ import { minutesToHours } from 'date-fns/esm'
+ export default minutesToHours
+}
+
+declare module 'date-fns/esm/minutesToMilliseconds' {
+ import { minutesToMilliseconds } from 'date-fns/esm'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/esm/minutesToSeconds' {
+ import { minutesToSeconds } from 'date-fns/esm'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/esm/monthsToQuarters' {
+ import { monthsToQuarters } from 'date-fns/esm'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/esm/monthsToYears' {
+ import { monthsToYears } from 'date-fns/esm'
+ export default monthsToYears
+}
+
+declare module 'date-fns/esm/nextDay' {
+ import { nextDay } from 'date-fns/esm'
+ export default nextDay
+}
+
+declare module 'date-fns/esm/nextFriday' {
+ import { nextFriday } from 'date-fns/esm'
+ export default nextFriday
+}
+
+declare module 'date-fns/esm/nextMonday' {
+ import { nextMonday } from 'date-fns/esm'
+ export default nextMonday
+}
+
+declare module 'date-fns/esm/nextSaturday' {
+ import { nextSaturday } from 'date-fns/esm'
+ export default nextSaturday
+}
+
+declare module 'date-fns/esm/nextSunday' {
+ import { nextSunday } from 'date-fns/esm'
+ export default nextSunday
+}
+
+declare module 'date-fns/esm/nextThursday' {
+ import { nextThursday } from 'date-fns/esm'
+ export default nextThursday
+}
+
+declare module 'date-fns/esm/nextTuesday' {
+ import { nextTuesday } from 'date-fns/esm'
+ export default nextTuesday
+}
+
+declare module 'date-fns/esm/nextWednesday' {
+ import { nextWednesday } from 'date-fns/esm'
+ export default nextWednesday
+}
+
+declare module 'date-fns/esm/parse' {
+ import { parse } from 'date-fns/esm'
+ export default parse
+}
+
+declare module 'date-fns/esm/parseISO' {
+ import { parseISO } from 'date-fns/esm'
+ export default parseISO
+}
+
+declare module 'date-fns/esm/parseJSON' {
+ import { parseJSON } from 'date-fns/esm'
+ export default parseJSON
+}
+
+declare module 'date-fns/esm/quartersToMonths' {
+ import { quartersToMonths } from 'date-fns/esm'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/esm/quartersToYears' {
+ import { quartersToYears } from 'date-fns/esm'
+ export default quartersToYears
+}
+
+declare module 'date-fns/esm/roundToNearestMinutes' {
+ import { roundToNearestMinutes } from 'date-fns/esm'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/esm/secondsToHours' {
+ import { secondsToHours } from 'date-fns/esm'
+ export default secondsToHours
+}
+
+declare module 'date-fns/esm/secondsToMilliseconds' {
+ import { secondsToMilliseconds } from 'date-fns/esm'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/esm/secondsToMinutes' {
+ import { secondsToMinutes } from 'date-fns/esm'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/esm/set' {
+ import { set } from 'date-fns/esm'
+ export default set
+}
+
+declare module 'date-fns/esm/setDate' {
+ import { setDate } from 'date-fns/esm'
+ export default setDate
+}
+
+declare module 'date-fns/esm/setDay' {
+ import { setDay } from 'date-fns/esm'
+ export default setDay
+}
+
+declare module 'date-fns/esm/setDayOfYear' {
+ import { setDayOfYear } from 'date-fns/esm'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/esm/setHours' {
+ import { setHours } from 'date-fns/esm'
+ export default setHours
+}
+
+declare module 'date-fns/esm/setISODay' {
+ import { setISODay } from 'date-fns/esm'
+ export default setISODay
+}
+
+declare module 'date-fns/esm/setISOWeek' {
+ import { setISOWeek } from 'date-fns/esm'
+ export default setISOWeek
+}
+
+declare module 'date-fns/esm/setISOWeekYear' {
+ import { setISOWeekYear } from 'date-fns/esm'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/esm/setMilliseconds' {
+ import { setMilliseconds } from 'date-fns/esm'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/esm/setMinutes' {
+ import { setMinutes } from 'date-fns/esm'
+ export default setMinutes
+}
+
+declare module 'date-fns/esm/setMonth' {
+ import { setMonth } from 'date-fns/esm'
+ export default setMonth
+}
+
+declare module 'date-fns/esm/setQuarter' {
+ import { setQuarter } from 'date-fns/esm'
+ export default setQuarter
+}
+
+declare module 'date-fns/esm/setSeconds' {
+ import { setSeconds } from 'date-fns/esm'
+ export default setSeconds
+}
+
+declare module 'date-fns/esm/setWeek' {
+ import { setWeek } from 'date-fns/esm'
+ export default setWeek
+}
+
+declare module 'date-fns/esm/setWeekYear' {
+ import { setWeekYear } from 'date-fns/esm'
+ export default setWeekYear
+}
+
+declare module 'date-fns/esm/setYear' {
+ import { setYear } from 'date-fns/esm'
+ export default setYear
+}
+
+declare module 'date-fns/esm/startOfDay' {
+ import { startOfDay } from 'date-fns/esm'
+ export default startOfDay
+}
+
+declare module 'date-fns/esm/startOfDecade' {
+ import { startOfDecade } from 'date-fns/esm'
+ export default startOfDecade
+}
+
+declare module 'date-fns/esm/startOfHour' {
+ import { startOfHour } from 'date-fns/esm'
+ export default startOfHour
+}
+
+declare module 'date-fns/esm/startOfISOWeek' {
+ import { startOfISOWeek } from 'date-fns/esm'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/esm/startOfISOWeekYear' {
+ import { startOfISOWeekYear } from 'date-fns/esm'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/esm/startOfMinute' {
+ import { startOfMinute } from 'date-fns/esm'
+ export default startOfMinute
+}
+
+declare module 'date-fns/esm/startOfMonth' {
+ import { startOfMonth } from 'date-fns/esm'
+ export default startOfMonth
+}
+
+declare module 'date-fns/esm/startOfQuarter' {
+ import { startOfQuarter } from 'date-fns/esm'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/esm/startOfSecond' {
+ import { startOfSecond } from 'date-fns/esm'
+ export default startOfSecond
+}
+
+declare module 'date-fns/esm/startOfToday' {
+ import { startOfToday } from 'date-fns/esm'
+ export default startOfToday
+}
+
+declare module 'date-fns/esm/startOfTomorrow' {
+ import { startOfTomorrow } from 'date-fns/esm'
+ export default startOfTomorrow
+}
+
+declare module 'date-fns/esm/startOfWeek' {
+ import { startOfWeek } from 'date-fns/esm'
+ export default startOfWeek
+}
+
+declare module 'date-fns/esm/startOfWeekYear' {
+ import { startOfWeekYear } from 'date-fns/esm'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/esm/startOfYear' {
+ import { startOfYear } from 'date-fns/esm'
+ export default startOfYear
+}
+
+declare module 'date-fns/esm/startOfYesterday' {
+ import { startOfYesterday } from 'date-fns/esm'
+ export default startOfYesterday
+}
+
+declare module 'date-fns/esm/sub' {
+ import { sub } from 'date-fns/esm'
+ export default sub
+}
+
+declare module 'date-fns/esm/subBusinessDays' {
+ import { subBusinessDays } from 'date-fns/esm'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/esm/subDays' {
+ import { subDays } from 'date-fns/esm'
+ export default subDays
+}
+
+declare module 'date-fns/esm/subHours' {
+ import { subHours } from 'date-fns/esm'
+ export default subHours
+}
+
+declare module 'date-fns/esm/subISOWeekYears' {
+ import { subISOWeekYears } from 'date-fns/esm'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/esm/subMilliseconds' {
+ import { subMilliseconds } from 'date-fns/esm'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/esm/subMinutes' {
+ import { subMinutes } from 'date-fns/esm'
+ export default subMinutes
+}
+
+declare module 'date-fns/esm/subMonths' {
+ import { subMonths } from 'date-fns/esm'
+ export default subMonths
+}
+
+declare module 'date-fns/esm/subQuarters' {
+ import { subQuarters } from 'date-fns/esm'
+ export default subQuarters
+}
+
+declare module 'date-fns/esm/subSeconds' {
+ import { subSeconds } from 'date-fns/esm'
+ export default subSeconds
+}
+
+declare module 'date-fns/esm/subWeeks' {
+ import { subWeeks } from 'date-fns/esm'
+ export default subWeeks
+}
+
+declare module 'date-fns/esm/subYears' {
+ import { subYears } from 'date-fns/esm'
+ export default subYears
+}
+
+declare module 'date-fns/esm/toDate' {
+ import { toDate } from 'date-fns/esm'
+ export default toDate
+}
+
+declare module 'date-fns/esm/weeksToDays' {
+ import { weeksToDays } from 'date-fns/esm'
+ export default weeksToDays
+}
+
+declare module 'date-fns/esm/yearsToMonths' {
+ import { yearsToMonths } from 'date-fns/esm'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/esm/yearsToQuarters' {
+ import { yearsToQuarters } from 'date-fns/esm'
+ export default yearsToQuarters
+}
+
+declare module 'date-fns/esm/add/index' {
+ import { add } from 'date-fns/esm'
+ export default add
+}
+
+declare module 'date-fns/esm/addBusinessDays/index' {
+ import { addBusinessDays } from 'date-fns/esm'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/esm/addDays/index' {
+ import { addDays } from 'date-fns/esm'
+ export default addDays
+}
+
+declare module 'date-fns/esm/addHours/index' {
+ import { addHours } from 'date-fns/esm'
+ export default addHours
+}
+
+declare module 'date-fns/esm/addISOWeekYears/index' {
+ import { addISOWeekYears } from 'date-fns/esm'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/esm/addMilliseconds/index' {
+ import { addMilliseconds } from 'date-fns/esm'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/esm/addMinutes/index' {
+ import { addMinutes } from 'date-fns/esm'
+ export default addMinutes
+}
+
+declare module 'date-fns/esm/addMonths/index' {
+ import { addMonths } from 'date-fns/esm'
+ export default addMonths
+}
+
+declare module 'date-fns/esm/addQuarters/index' {
+ import { addQuarters } from 'date-fns/esm'
+ export default addQuarters
+}
+
+declare module 'date-fns/esm/addSeconds/index' {
+ import { addSeconds } from 'date-fns/esm'
+ export default addSeconds
+}
+
+declare module 'date-fns/esm/addWeeks/index' {
+ import { addWeeks } from 'date-fns/esm'
+ export default addWeeks
+}
+
+declare module 'date-fns/esm/addYears/index' {
+ import { addYears } from 'date-fns/esm'
+ export default addYears
+}
+
+declare module 'date-fns/esm/areIntervalsOverlapping/index' {
+ import { areIntervalsOverlapping } from 'date-fns/esm'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/esm/closestIndexTo/index' {
+ import { closestIndexTo } from 'date-fns/esm'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/esm/closestTo/index' {
+ import { closestTo } from 'date-fns/esm'
+ export default closestTo
+}
+
+declare module 'date-fns/esm/compareAsc/index' {
+ import { compareAsc } from 'date-fns/esm'
+ export default compareAsc
+}
+
+declare module 'date-fns/esm/compareDesc/index' {
+ import { compareDesc } from 'date-fns/esm'
+ export default compareDesc
+}
+
+declare module 'date-fns/esm/daysToWeeks/index' {
+ import { daysToWeeks } from 'date-fns/esm'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/esm/differenceInBusinessDays/index' {
+ import { differenceInBusinessDays } from 'date-fns/esm'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/esm/differenceInCalendarDays/index' {
+ import { differenceInCalendarDays } from 'date-fns/esm'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/esm/differenceInCalendarISOWeeks/index' {
+ import { differenceInCalendarISOWeeks } from 'date-fns/esm'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/esm/differenceInCalendarISOWeekYears/index' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns/esm'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/esm/differenceInCalendarMonths/index' {
+ import { differenceInCalendarMonths } from 'date-fns/esm'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/esm/differenceInCalendarQuarters/index' {
+ import { differenceInCalendarQuarters } from 'date-fns/esm'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/esm/differenceInCalendarWeeks/index' {
+ import { differenceInCalendarWeeks } from 'date-fns/esm'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/esm/differenceInCalendarYears/index' {
+ import { differenceInCalendarYears } from 'date-fns/esm'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/esm/differenceInDays/index' {
+ import { differenceInDays } from 'date-fns/esm'
+ export default differenceInDays
+}
+
+declare module 'date-fns/esm/differenceInHours/index' {
+ import { differenceInHours } from 'date-fns/esm'
+ export default differenceInHours
+}
+
+declare module 'date-fns/esm/differenceInISOWeekYears/index' {
+ import { differenceInISOWeekYears } from 'date-fns/esm'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/esm/differenceInMilliseconds/index' {
+ import { differenceInMilliseconds } from 'date-fns/esm'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/esm/differenceInMinutes/index' {
+ import { differenceInMinutes } from 'date-fns/esm'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/esm/differenceInMonths/index' {
+ import { differenceInMonths } from 'date-fns/esm'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/esm/differenceInQuarters/index' {
+ import { differenceInQuarters } from 'date-fns/esm'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/esm/differenceInSeconds/index' {
+ import { differenceInSeconds } from 'date-fns/esm'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/esm/differenceInWeeks/index' {
+ import { differenceInWeeks } from 'date-fns/esm'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/esm/differenceInYears/index' {
+ import { differenceInYears } from 'date-fns/esm'
+ export default differenceInYears
+}
+
+declare module 'date-fns/esm/eachDayOfInterval/index' {
+ import { eachDayOfInterval } from 'date-fns/esm'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/esm/eachHourOfInterval/index' {
+ import { eachHourOfInterval } from 'date-fns/esm'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/esm/eachMinuteOfInterval/index' {
+ import { eachMinuteOfInterval } from 'date-fns/esm'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/esm/eachMonthOfInterval/index' {
+ import { eachMonthOfInterval } from 'date-fns/esm'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/esm/eachQuarterOfInterval/index' {
+ import { eachQuarterOfInterval } from 'date-fns/esm'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/esm/eachWeekendOfInterval/index' {
+ import { eachWeekendOfInterval } from 'date-fns/esm'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/esm/eachWeekendOfMonth/index' {
+ import { eachWeekendOfMonth } from 'date-fns/esm'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/esm/eachWeekendOfYear/index' {
+ import { eachWeekendOfYear } from 'date-fns/esm'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/esm/eachWeekOfInterval/index' {
+ import { eachWeekOfInterval } from 'date-fns/esm'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/esm/eachYearOfInterval/index' {
+ import { eachYearOfInterval } from 'date-fns/esm'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/esm/endOfDay/index' {
+ import { endOfDay } from 'date-fns/esm'
+ export default endOfDay
+}
+
+declare module 'date-fns/esm/endOfDecade/index' {
+ import { endOfDecade } from 'date-fns/esm'
+ export default endOfDecade
+}
+
+declare module 'date-fns/esm/endOfHour/index' {
+ import { endOfHour } from 'date-fns/esm'
+ export default endOfHour
+}
+
+declare module 'date-fns/esm/endOfISOWeek/index' {
+ import { endOfISOWeek } from 'date-fns/esm'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/esm/endOfISOWeekYear/index' {
+ import { endOfISOWeekYear } from 'date-fns/esm'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/esm/endOfMinute/index' {
+ import { endOfMinute } from 'date-fns/esm'
+ export default endOfMinute
+}
+
+declare module 'date-fns/esm/endOfMonth/index' {
+ import { endOfMonth } from 'date-fns/esm'
+ export default endOfMonth
+}
+
+declare module 'date-fns/esm/endOfQuarter/index' {
+ import { endOfQuarter } from 'date-fns/esm'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/esm/endOfSecond/index' {
+ import { endOfSecond } from 'date-fns/esm'
+ export default endOfSecond
+}
+
+declare module 'date-fns/esm/endOfToday/index' {
+ import { endOfToday } from 'date-fns/esm'
+ export default endOfToday
+}
+
+declare module 'date-fns/esm/endOfTomorrow/index' {
+ import { endOfTomorrow } from 'date-fns/esm'
+ export default endOfTomorrow
+}
+
+declare module 'date-fns/esm/endOfWeek/index' {
+ import { endOfWeek } from 'date-fns/esm'
+ export default endOfWeek
+}
+
+declare module 'date-fns/esm/endOfYear/index' {
+ import { endOfYear } from 'date-fns/esm'
+ export default endOfYear
+}
+
+declare module 'date-fns/esm/endOfYesterday/index' {
+ import { endOfYesterday } from 'date-fns/esm'
+ export default endOfYesterday
+}
+
+declare module 'date-fns/esm/format/index' {
+ import { format } from 'date-fns/esm'
+ export default format
+}
+
+declare module 'date-fns/esm/formatDistance/index' {
+ import { formatDistance } from 'date-fns/esm'
+ export default formatDistance
+}
+
+declare module 'date-fns/esm/formatDistanceStrict/index' {
+ import { formatDistanceStrict } from 'date-fns/esm'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/esm/formatDistanceToNow/index' {
+ import { formatDistanceToNow } from 'date-fns/esm'
+ export default formatDistanceToNow
+}
+
+declare module 'date-fns/esm/formatDistanceToNowStrict/index' {
+ import { formatDistanceToNowStrict } from 'date-fns/esm'
+ export default formatDistanceToNowStrict
+}
+
+declare module 'date-fns/esm/formatDuration/index' {
+ import { formatDuration } from 'date-fns/esm'
+ export default formatDuration
+}
+
+declare module 'date-fns/esm/formatISO/index' {
+ import { formatISO } from 'date-fns/esm'
+ export default formatISO
+}
+
+declare module 'date-fns/esm/formatISO9075/index' {
+ import { formatISO9075 } from 'date-fns/esm'
+ export default formatISO9075
+}
+
+declare module 'date-fns/esm/formatISODuration/index' {
+ import { formatISODuration } from 'date-fns/esm'
+ export default formatISODuration
+}
+
+declare module 'date-fns/esm/formatRelative/index' {
+ import { formatRelative } from 'date-fns/esm'
+ export default formatRelative
+}
+
+declare module 'date-fns/esm/formatRFC3339/index' {
+ import { formatRFC3339 } from 'date-fns/esm'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/esm/formatRFC7231/index' {
+ import { formatRFC7231 } from 'date-fns/esm'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/esm/fromUnixTime/index' {
+ import { fromUnixTime } from 'date-fns/esm'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/esm/getDate/index' {
+ import { getDate } from 'date-fns/esm'
+ export default getDate
+}
+
+declare module 'date-fns/esm/getDay/index' {
+ import { getDay } from 'date-fns/esm'
+ export default getDay
+}
+
+declare module 'date-fns/esm/getDayOfYear/index' {
+ import { getDayOfYear } from 'date-fns/esm'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/esm/getDaysInMonth/index' {
+ import { getDaysInMonth } from 'date-fns/esm'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/esm/getDaysInYear/index' {
+ import { getDaysInYear } from 'date-fns/esm'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/esm/getDecade/index' {
+ import { getDecade } from 'date-fns/esm'
+ export default getDecade
+}
+
+declare module 'date-fns/esm/getHours/index' {
+ import { getHours } from 'date-fns/esm'
+ export default getHours
+}
+
+declare module 'date-fns/esm/getISODay/index' {
+ import { getISODay } from 'date-fns/esm'
+ export default getISODay
+}
+
+declare module 'date-fns/esm/getISOWeek/index' {
+ import { getISOWeek } from 'date-fns/esm'
+ export default getISOWeek
+}
+
+declare module 'date-fns/esm/getISOWeeksInYear/index' {
+ import { getISOWeeksInYear } from 'date-fns/esm'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/esm/getISOWeekYear/index' {
+ import { getISOWeekYear } from 'date-fns/esm'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/esm/getMilliseconds/index' {
+ import { getMilliseconds } from 'date-fns/esm'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/esm/getMinutes/index' {
+ import { getMinutes } from 'date-fns/esm'
+ export default getMinutes
+}
+
+declare module 'date-fns/esm/getMonth/index' {
+ import { getMonth } from 'date-fns/esm'
+ export default getMonth
+}
+
+declare module 'date-fns/esm/getOverlappingDaysInIntervals/index' {
+ import { getOverlappingDaysInIntervals } from 'date-fns/esm'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/esm/getQuarter/index' {
+ import { getQuarter } from 'date-fns/esm'
+ export default getQuarter
+}
+
+declare module 'date-fns/esm/getSeconds/index' {
+ import { getSeconds } from 'date-fns/esm'
+ export default getSeconds
+}
+
+declare module 'date-fns/esm/getTime/index' {
+ import { getTime } from 'date-fns/esm'
+ export default getTime
+}
+
+declare module 'date-fns/esm/getUnixTime/index' {
+ import { getUnixTime } from 'date-fns/esm'
+ export default getUnixTime
+}
+
+declare module 'date-fns/esm/getWeek/index' {
+ import { getWeek } from 'date-fns/esm'
+ export default getWeek
+}
+
+declare module 'date-fns/esm/getWeekOfMonth/index' {
+ import { getWeekOfMonth } from 'date-fns/esm'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/esm/getWeeksInMonth/index' {
+ import { getWeeksInMonth } from 'date-fns/esm'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/esm/getWeekYear/index' {
+ import { getWeekYear } from 'date-fns/esm'
+ export default getWeekYear
+}
+
+declare module 'date-fns/esm/getYear/index' {
+ import { getYear } from 'date-fns/esm'
+ export default getYear
+}
+
+declare module 'date-fns/esm/hoursToMilliseconds/index' {
+ import { hoursToMilliseconds } from 'date-fns/esm'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/esm/hoursToMinutes/index' {
+ import { hoursToMinutes } from 'date-fns/esm'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/esm/hoursToSeconds/index' {
+ import { hoursToSeconds } from 'date-fns/esm'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/esm/intervalToDuration/index' {
+ import { intervalToDuration } from 'date-fns/esm'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/esm/intlFormat/index' {
+ import { intlFormat } from 'date-fns/esm'
+ export default intlFormat
+}
+
+declare module 'date-fns/esm/isAfter/index' {
+ import { isAfter } from 'date-fns/esm'
+ export default isAfter
+}
+
+declare module 'date-fns/esm/isBefore/index' {
+ import { isBefore } from 'date-fns/esm'
+ export default isBefore
+}
+
+declare module 'date-fns/esm/isDate/index' {
+ import { isDate } from 'date-fns/esm'
+ export default isDate
+}
+
+declare module 'date-fns/esm/isEqual/index' {
+ import { isEqual } from 'date-fns/esm'
+ export default isEqual
+}
+
+declare module 'date-fns/esm/isExists/index' {
+ import { isExists } from 'date-fns/esm'
+ export default isExists
+}
+
+declare module 'date-fns/esm/isFirstDayOfMonth/index' {
+ import { isFirstDayOfMonth } from 'date-fns/esm'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/esm/isFriday/index' {
+ import { isFriday } from 'date-fns/esm'
+ export default isFriday
+}
+
+declare module 'date-fns/esm/isFuture/index' {
+ import { isFuture } from 'date-fns/esm'
+ export default isFuture
+}
+
+declare module 'date-fns/esm/isLastDayOfMonth/index' {
+ import { isLastDayOfMonth } from 'date-fns/esm'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/esm/isLeapYear/index' {
+ import { isLeapYear } from 'date-fns/esm'
+ export default isLeapYear
+}
+
+declare module 'date-fns/esm/isMatch/index' {
+ import { isMatch } from 'date-fns/esm'
+ export default isMatch
+}
+
+declare module 'date-fns/esm/isMonday/index' {
+ import { isMonday } from 'date-fns/esm'
+ export default isMonday
+}
+
+declare module 'date-fns/esm/isPast/index' {
+ import { isPast } from 'date-fns/esm'
+ export default isPast
+}
+
+declare module 'date-fns/esm/isSameDay/index' {
+ import { isSameDay } from 'date-fns/esm'
+ export default isSameDay
+}
+
+declare module 'date-fns/esm/isSameHour/index' {
+ import { isSameHour } from 'date-fns/esm'
+ export default isSameHour
+}
+
+declare module 'date-fns/esm/isSameISOWeek/index' {
+ import { isSameISOWeek } from 'date-fns/esm'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/esm/isSameISOWeekYear/index' {
+ import { isSameISOWeekYear } from 'date-fns/esm'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/esm/isSameMinute/index' {
+ import { isSameMinute } from 'date-fns/esm'
+ export default isSameMinute
+}
+
+declare module 'date-fns/esm/isSameMonth/index' {
+ import { isSameMonth } from 'date-fns/esm'
+ export default isSameMonth
+}
+
+declare module 'date-fns/esm/isSameQuarter/index' {
+ import { isSameQuarter } from 'date-fns/esm'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/esm/isSameSecond/index' {
+ import { isSameSecond } from 'date-fns/esm'
+ export default isSameSecond
+}
+
+declare module 'date-fns/esm/isSameWeek/index' {
+ import { isSameWeek } from 'date-fns/esm'
+ export default isSameWeek
+}
+
+declare module 'date-fns/esm/isSameYear/index' {
+ import { isSameYear } from 'date-fns/esm'
+ export default isSameYear
+}
+
+declare module 'date-fns/esm/isSaturday/index' {
+ import { isSaturday } from 'date-fns/esm'
+ export default isSaturday
+}
+
+declare module 'date-fns/esm/isSunday/index' {
+ import { isSunday } from 'date-fns/esm'
+ export default isSunday
+}
+
+declare module 'date-fns/esm/isThisHour/index' {
+ import { isThisHour } from 'date-fns/esm'
+ export default isThisHour
+}
+
+declare module 'date-fns/esm/isThisISOWeek/index' {
+ import { isThisISOWeek } from 'date-fns/esm'
+ export default isThisISOWeek
+}
+
+declare module 'date-fns/esm/isThisMinute/index' {
+ import { isThisMinute } from 'date-fns/esm'
+ export default isThisMinute
+}
+
+declare module 'date-fns/esm/isThisMonth/index' {
+ import { isThisMonth } from 'date-fns/esm'
+ export default isThisMonth
+}
+
+declare module 'date-fns/esm/isThisQuarter/index' {
+ import { isThisQuarter } from 'date-fns/esm'
+ export default isThisQuarter
+}
+
+declare module 'date-fns/esm/isThisSecond/index' {
+ import { isThisSecond } from 'date-fns/esm'
+ export default isThisSecond
+}
+
+declare module 'date-fns/esm/isThisWeek/index' {
+ import { isThisWeek } from 'date-fns/esm'
+ export default isThisWeek
+}
+
+declare module 'date-fns/esm/isThisYear/index' {
+ import { isThisYear } from 'date-fns/esm'
+ export default isThisYear
+}
+
+declare module 'date-fns/esm/isThursday/index' {
+ import { isThursday } from 'date-fns/esm'
+ export default isThursday
+}
+
+declare module 'date-fns/esm/isToday/index' {
+ import { isToday } from 'date-fns/esm'
+ export default isToday
+}
+
+declare module 'date-fns/esm/isTomorrow/index' {
+ import { isTomorrow } from 'date-fns/esm'
+ export default isTomorrow
+}
+
+declare module 'date-fns/esm/isTuesday/index' {
+ import { isTuesday } from 'date-fns/esm'
+ export default isTuesday
+}
+
+declare module 'date-fns/esm/isValid/index' {
+ import { isValid } from 'date-fns/esm'
+ export default isValid
+}
+
+declare module 'date-fns/esm/isWednesday/index' {
+ import { isWednesday } from 'date-fns/esm'
+ export default isWednesday
+}
+
+declare module 'date-fns/esm/isWeekend/index' {
+ import { isWeekend } from 'date-fns/esm'
+ export default isWeekend
+}
+
+declare module 'date-fns/esm/isWithinInterval/index' {
+ import { isWithinInterval } from 'date-fns/esm'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/esm/isYesterday/index' {
+ import { isYesterday } from 'date-fns/esm'
+ export default isYesterday
+}
+
+declare module 'date-fns/esm/lastDayOfDecade/index' {
+ import { lastDayOfDecade } from 'date-fns/esm'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/esm/lastDayOfISOWeek/index' {
+ import { lastDayOfISOWeek } from 'date-fns/esm'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/esm/lastDayOfISOWeekYear/index' {
+ import { lastDayOfISOWeekYear } from 'date-fns/esm'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/esm/lastDayOfMonth/index' {
+ import { lastDayOfMonth } from 'date-fns/esm'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/esm/lastDayOfQuarter/index' {
+ import { lastDayOfQuarter } from 'date-fns/esm'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/esm/lastDayOfWeek/index' {
+ import { lastDayOfWeek } from 'date-fns/esm'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/esm/lastDayOfYear/index' {
+ import { lastDayOfYear } from 'date-fns/esm'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/esm/lightFormat/index' {
+ import { lightFormat } from 'date-fns/esm'
+ export default lightFormat
+}
+
+declare module 'date-fns/esm/max/index' {
+ import { max } from 'date-fns/esm'
+ export default max
+}
+
+declare module 'date-fns/esm/milliseconds/index' {
+ import { milliseconds } from 'date-fns/esm'
+ export default milliseconds
+}
+
+declare module 'date-fns/esm/millisecondsToHours/index' {
+ import { millisecondsToHours } from 'date-fns/esm'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/esm/millisecondsToMinutes/index' {
+ import { millisecondsToMinutes } from 'date-fns/esm'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/esm/millisecondsToSeconds/index' {
+ import { millisecondsToSeconds } from 'date-fns/esm'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/esm/min/index' {
+ import { min } from 'date-fns/esm'
+ export default min
+}
+
+declare module 'date-fns/esm/minutesToHours/index' {
+ import { minutesToHours } from 'date-fns/esm'
+ export default minutesToHours
+}
+
+declare module 'date-fns/esm/minutesToMilliseconds/index' {
+ import { minutesToMilliseconds } from 'date-fns/esm'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/esm/minutesToSeconds/index' {
+ import { minutesToSeconds } from 'date-fns/esm'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/esm/monthsToQuarters/index' {
+ import { monthsToQuarters } from 'date-fns/esm'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/esm/monthsToYears/index' {
+ import { monthsToYears } from 'date-fns/esm'
+ export default monthsToYears
+}
+
+declare module 'date-fns/esm/nextDay/index' {
+ import { nextDay } from 'date-fns/esm'
+ export default nextDay
+}
+
+declare module 'date-fns/esm/nextFriday/index' {
+ import { nextFriday } from 'date-fns/esm'
+ export default nextFriday
+}
+
+declare module 'date-fns/esm/nextMonday/index' {
+ import { nextMonday } from 'date-fns/esm'
+ export default nextMonday
+}
+
+declare module 'date-fns/esm/nextSaturday/index' {
+ import { nextSaturday } from 'date-fns/esm'
+ export default nextSaturday
+}
+
+declare module 'date-fns/esm/nextSunday/index' {
+ import { nextSunday } from 'date-fns/esm'
+ export default nextSunday
+}
+
+declare module 'date-fns/esm/nextThursday/index' {
+ import { nextThursday } from 'date-fns/esm'
+ export default nextThursday
+}
+
+declare module 'date-fns/esm/nextTuesday/index' {
+ import { nextTuesday } from 'date-fns/esm'
+ export default nextTuesday
+}
+
+declare module 'date-fns/esm/nextWednesday/index' {
+ import { nextWednesday } from 'date-fns/esm'
+ export default nextWednesday
+}
+
+declare module 'date-fns/esm/parse/index' {
+ import { parse } from 'date-fns/esm'
+ export default parse
+}
+
+declare module 'date-fns/esm/parseISO/index' {
+ import { parseISO } from 'date-fns/esm'
+ export default parseISO
+}
+
+declare module 'date-fns/esm/parseJSON/index' {
+ import { parseJSON } from 'date-fns/esm'
+ export default parseJSON
+}
+
+declare module 'date-fns/esm/quartersToMonths/index' {
+ import { quartersToMonths } from 'date-fns/esm'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/esm/quartersToYears/index' {
+ import { quartersToYears } from 'date-fns/esm'
+ export default quartersToYears
+}
+
+declare module 'date-fns/esm/roundToNearestMinutes/index' {
+ import { roundToNearestMinutes } from 'date-fns/esm'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/esm/secondsToHours/index' {
+ import { secondsToHours } from 'date-fns/esm'
+ export default secondsToHours
+}
+
+declare module 'date-fns/esm/secondsToMilliseconds/index' {
+ import { secondsToMilliseconds } from 'date-fns/esm'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/esm/secondsToMinutes/index' {
+ import { secondsToMinutes } from 'date-fns/esm'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/esm/set/index' {
+ import { set } from 'date-fns/esm'
+ export default set
+}
+
+declare module 'date-fns/esm/setDate/index' {
+ import { setDate } from 'date-fns/esm'
+ export default setDate
+}
+
+declare module 'date-fns/esm/setDay/index' {
+ import { setDay } from 'date-fns/esm'
+ export default setDay
+}
+
+declare module 'date-fns/esm/setDayOfYear/index' {
+ import { setDayOfYear } from 'date-fns/esm'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/esm/setHours/index' {
+ import { setHours } from 'date-fns/esm'
+ export default setHours
+}
+
+declare module 'date-fns/esm/setISODay/index' {
+ import { setISODay } from 'date-fns/esm'
+ export default setISODay
+}
+
+declare module 'date-fns/esm/setISOWeek/index' {
+ import { setISOWeek } from 'date-fns/esm'
+ export default setISOWeek
+}
+
+declare module 'date-fns/esm/setISOWeekYear/index' {
+ import { setISOWeekYear } from 'date-fns/esm'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/esm/setMilliseconds/index' {
+ import { setMilliseconds } from 'date-fns/esm'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/esm/setMinutes/index' {
+ import { setMinutes } from 'date-fns/esm'
+ export default setMinutes
+}
+
+declare module 'date-fns/esm/setMonth/index' {
+ import { setMonth } from 'date-fns/esm'
+ export default setMonth
+}
+
+declare module 'date-fns/esm/setQuarter/index' {
+ import { setQuarter } from 'date-fns/esm'
+ export default setQuarter
+}
+
+declare module 'date-fns/esm/setSeconds/index' {
+ import { setSeconds } from 'date-fns/esm'
+ export default setSeconds
+}
+
+declare module 'date-fns/esm/setWeek/index' {
+ import { setWeek } from 'date-fns/esm'
+ export default setWeek
+}
+
+declare module 'date-fns/esm/setWeekYear/index' {
+ import { setWeekYear } from 'date-fns/esm'
+ export default setWeekYear
+}
+
+declare module 'date-fns/esm/setYear/index' {
+ import { setYear } from 'date-fns/esm'
+ export default setYear
+}
+
+declare module 'date-fns/esm/startOfDay/index' {
+ import { startOfDay } from 'date-fns/esm'
+ export default startOfDay
+}
+
+declare module 'date-fns/esm/startOfDecade/index' {
+ import { startOfDecade } from 'date-fns/esm'
+ export default startOfDecade
+}
+
+declare module 'date-fns/esm/startOfHour/index' {
+ import { startOfHour } from 'date-fns/esm'
+ export default startOfHour
+}
+
+declare module 'date-fns/esm/startOfISOWeek/index' {
+ import { startOfISOWeek } from 'date-fns/esm'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/esm/startOfISOWeekYear/index' {
+ import { startOfISOWeekYear } from 'date-fns/esm'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/esm/startOfMinute/index' {
+ import { startOfMinute } from 'date-fns/esm'
+ export default startOfMinute
+}
+
+declare module 'date-fns/esm/startOfMonth/index' {
+ import { startOfMonth } from 'date-fns/esm'
+ export default startOfMonth
+}
+
+declare module 'date-fns/esm/startOfQuarter/index' {
+ import { startOfQuarter } from 'date-fns/esm'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/esm/startOfSecond/index' {
+ import { startOfSecond } from 'date-fns/esm'
+ export default startOfSecond
+}
+
+declare module 'date-fns/esm/startOfToday/index' {
+ import { startOfToday } from 'date-fns/esm'
+ export default startOfToday
+}
+
+declare module 'date-fns/esm/startOfTomorrow/index' {
+ import { startOfTomorrow } from 'date-fns/esm'
+ export default startOfTomorrow
+}
+
+declare module 'date-fns/esm/startOfWeek/index' {
+ import { startOfWeek } from 'date-fns/esm'
+ export default startOfWeek
+}
+
+declare module 'date-fns/esm/startOfWeekYear/index' {
+ import { startOfWeekYear } from 'date-fns/esm'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/esm/startOfYear/index' {
+ import { startOfYear } from 'date-fns/esm'
+ export default startOfYear
+}
+
+declare module 'date-fns/esm/startOfYesterday/index' {
+ import { startOfYesterday } from 'date-fns/esm'
+ export default startOfYesterday
+}
+
+declare module 'date-fns/esm/sub/index' {
+ import { sub } from 'date-fns/esm'
+ export default sub
+}
+
+declare module 'date-fns/esm/subBusinessDays/index' {
+ import { subBusinessDays } from 'date-fns/esm'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/esm/subDays/index' {
+ import { subDays } from 'date-fns/esm'
+ export default subDays
+}
+
+declare module 'date-fns/esm/subHours/index' {
+ import { subHours } from 'date-fns/esm'
+ export default subHours
+}
+
+declare module 'date-fns/esm/subISOWeekYears/index' {
+ import { subISOWeekYears } from 'date-fns/esm'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/esm/subMilliseconds/index' {
+ import { subMilliseconds } from 'date-fns/esm'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/esm/subMinutes/index' {
+ import { subMinutes } from 'date-fns/esm'
+ export default subMinutes
+}
+
+declare module 'date-fns/esm/subMonths/index' {
+ import { subMonths } from 'date-fns/esm'
+ export default subMonths
+}
+
+declare module 'date-fns/esm/subQuarters/index' {
+ import { subQuarters } from 'date-fns/esm'
+ export default subQuarters
+}
+
+declare module 'date-fns/esm/subSeconds/index' {
+ import { subSeconds } from 'date-fns/esm'
+ export default subSeconds
+}
+
+declare module 'date-fns/esm/subWeeks/index' {
+ import { subWeeks } from 'date-fns/esm'
+ export default subWeeks
+}
+
+declare module 'date-fns/esm/subYears/index' {
+ import { subYears } from 'date-fns/esm'
+ export default subYears
+}
+
+declare module 'date-fns/esm/toDate/index' {
+ import { toDate } from 'date-fns/esm'
+ export default toDate
+}
+
+declare module 'date-fns/esm/weeksToDays/index' {
+ import { weeksToDays } from 'date-fns/esm'
+ export default weeksToDays
+}
+
+declare module 'date-fns/esm/yearsToMonths/index' {
+ import { yearsToMonths } from 'date-fns/esm'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/esm/yearsToQuarters/index' {
+ import { yearsToQuarters } from 'date-fns/esm'
+ export default yearsToQuarters
+}
+
+declare module 'date-fns/esm/add/index.js' {
+ import { add } from 'date-fns/esm'
+ export default add
+}
+
+declare module 'date-fns/esm/addBusinessDays/index.js' {
+ import { addBusinessDays } from 'date-fns/esm'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/esm/addDays/index.js' {
+ import { addDays } from 'date-fns/esm'
+ export default addDays
+}
+
+declare module 'date-fns/esm/addHours/index.js' {
+ import { addHours } from 'date-fns/esm'
+ export default addHours
+}
+
+declare module 'date-fns/esm/addISOWeekYears/index.js' {
+ import { addISOWeekYears } from 'date-fns/esm'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/esm/addMilliseconds/index.js' {
+ import { addMilliseconds } from 'date-fns/esm'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/esm/addMinutes/index.js' {
+ import { addMinutes } from 'date-fns/esm'
+ export default addMinutes
+}
+
+declare module 'date-fns/esm/addMonths/index.js' {
+ import { addMonths } from 'date-fns/esm'
+ export default addMonths
+}
+
+declare module 'date-fns/esm/addQuarters/index.js' {
+ import { addQuarters } from 'date-fns/esm'
+ export default addQuarters
+}
+
+declare module 'date-fns/esm/addSeconds/index.js' {
+ import { addSeconds } from 'date-fns/esm'
+ export default addSeconds
+}
+
+declare module 'date-fns/esm/addWeeks/index.js' {
+ import { addWeeks } from 'date-fns/esm'
+ export default addWeeks
+}
+
+declare module 'date-fns/esm/addYears/index.js' {
+ import { addYears } from 'date-fns/esm'
+ export default addYears
+}
+
+declare module 'date-fns/esm/areIntervalsOverlapping/index.js' {
+ import { areIntervalsOverlapping } from 'date-fns/esm'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/esm/closestIndexTo/index.js' {
+ import { closestIndexTo } from 'date-fns/esm'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/esm/closestTo/index.js' {
+ import { closestTo } from 'date-fns/esm'
+ export default closestTo
+}
+
+declare module 'date-fns/esm/compareAsc/index.js' {
+ import { compareAsc } from 'date-fns/esm'
+ export default compareAsc
+}
+
+declare module 'date-fns/esm/compareDesc/index.js' {
+ import { compareDesc } from 'date-fns/esm'
+ export default compareDesc
+}
+
+declare module 'date-fns/esm/daysToWeeks/index.js' {
+ import { daysToWeeks } from 'date-fns/esm'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/esm/differenceInBusinessDays/index.js' {
+ import { differenceInBusinessDays } from 'date-fns/esm'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/esm/differenceInCalendarDays/index.js' {
+ import { differenceInCalendarDays } from 'date-fns/esm'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/esm/differenceInCalendarISOWeeks/index.js' {
+ import { differenceInCalendarISOWeeks } from 'date-fns/esm'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/esm/differenceInCalendarISOWeekYears/index.js' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns/esm'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/esm/differenceInCalendarMonths/index.js' {
+ import { differenceInCalendarMonths } from 'date-fns/esm'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/esm/differenceInCalendarQuarters/index.js' {
+ import { differenceInCalendarQuarters } from 'date-fns/esm'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/esm/differenceInCalendarWeeks/index.js' {
+ import { differenceInCalendarWeeks } from 'date-fns/esm'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/esm/differenceInCalendarYears/index.js' {
+ import { differenceInCalendarYears } from 'date-fns/esm'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/esm/differenceInDays/index.js' {
+ import { differenceInDays } from 'date-fns/esm'
+ export default differenceInDays
+}
+
+declare module 'date-fns/esm/differenceInHours/index.js' {
+ import { differenceInHours } from 'date-fns/esm'
+ export default differenceInHours
+}
+
+declare module 'date-fns/esm/differenceInISOWeekYears/index.js' {
+ import { differenceInISOWeekYears } from 'date-fns/esm'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/esm/differenceInMilliseconds/index.js' {
+ import { differenceInMilliseconds } from 'date-fns/esm'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/esm/differenceInMinutes/index.js' {
+ import { differenceInMinutes } from 'date-fns/esm'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/esm/differenceInMonths/index.js' {
+ import { differenceInMonths } from 'date-fns/esm'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/esm/differenceInQuarters/index.js' {
+ import { differenceInQuarters } from 'date-fns/esm'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/esm/differenceInSeconds/index.js' {
+ import { differenceInSeconds } from 'date-fns/esm'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/esm/differenceInWeeks/index.js' {
+ import { differenceInWeeks } from 'date-fns/esm'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/esm/differenceInYears/index.js' {
+ import { differenceInYears } from 'date-fns/esm'
+ export default differenceInYears
+}
+
+declare module 'date-fns/esm/eachDayOfInterval/index.js' {
+ import { eachDayOfInterval } from 'date-fns/esm'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/esm/eachHourOfInterval/index.js' {
+ import { eachHourOfInterval } from 'date-fns/esm'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/esm/eachMinuteOfInterval/index.js' {
+ import { eachMinuteOfInterval } from 'date-fns/esm'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/esm/eachMonthOfInterval/index.js' {
+ import { eachMonthOfInterval } from 'date-fns/esm'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/esm/eachQuarterOfInterval/index.js' {
+ import { eachQuarterOfInterval } from 'date-fns/esm'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/esm/eachWeekendOfInterval/index.js' {
+ import { eachWeekendOfInterval } from 'date-fns/esm'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/esm/eachWeekendOfMonth/index.js' {
+ import { eachWeekendOfMonth } from 'date-fns/esm'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/esm/eachWeekendOfYear/index.js' {
+ import { eachWeekendOfYear } from 'date-fns/esm'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/esm/eachWeekOfInterval/index.js' {
+ import { eachWeekOfInterval } from 'date-fns/esm'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/esm/eachYearOfInterval/index.js' {
+ import { eachYearOfInterval } from 'date-fns/esm'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/esm/endOfDay/index.js' {
+ import { endOfDay } from 'date-fns/esm'
+ export default endOfDay
+}
+
+declare module 'date-fns/esm/endOfDecade/index.js' {
+ import { endOfDecade } from 'date-fns/esm'
+ export default endOfDecade
+}
+
+declare module 'date-fns/esm/endOfHour/index.js' {
+ import { endOfHour } from 'date-fns/esm'
+ export default endOfHour
+}
+
+declare module 'date-fns/esm/endOfISOWeek/index.js' {
+ import { endOfISOWeek } from 'date-fns/esm'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/esm/endOfISOWeekYear/index.js' {
+ import { endOfISOWeekYear } from 'date-fns/esm'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/esm/endOfMinute/index.js' {
+ import { endOfMinute } from 'date-fns/esm'
+ export default endOfMinute
+}
+
+declare module 'date-fns/esm/endOfMonth/index.js' {
+ import { endOfMonth } from 'date-fns/esm'
+ export default endOfMonth
+}
+
+declare module 'date-fns/esm/endOfQuarter/index.js' {
+ import { endOfQuarter } from 'date-fns/esm'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/esm/endOfSecond/index.js' {
+ import { endOfSecond } from 'date-fns/esm'
+ export default endOfSecond
+}
+
+declare module 'date-fns/esm/endOfToday/index.js' {
+ import { endOfToday } from 'date-fns/esm'
+ export default endOfToday
+}
+
+declare module 'date-fns/esm/endOfTomorrow/index.js' {
+ import { endOfTomorrow } from 'date-fns/esm'
+ export default endOfTomorrow
+}
+
+declare module 'date-fns/esm/endOfWeek/index.js' {
+ import { endOfWeek } from 'date-fns/esm'
+ export default endOfWeek
+}
+
+declare module 'date-fns/esm/endOfYear/index.js' {
+ import { endOfYear } from 'date-fns/esm'
+ export default endOfYear
+}
+
+declare module 'date-fns/esm/endOfYesterday/index.js' {
+ import { endOfYesterday } from 'date-fns/esm'
+ export default endOfYesterday
+}
+
+declare module 'date-fns/esm/format/index.js' {
+ import { format } from 'date-fns/esm'
+ export default format
+}
+
+declare module 'date-fns/esm/formatDistance/index.js' {
+ import { formatDistance } from 'date-fns/esm'
+ export default formatDistance
+}
+
+declare module 'date-fns/esm/formatDistanceStrict/index.js' {
+ import { formatDistanceStrict } from 'date-fns/esm'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/esm/formatDistanceToNow/index.js' {
+ import { formatDistanceToNow } from 'date-fns/esm'
+ export default formatDistanceToNow
+}
+
+declare module 'date-fns/esm/formatDistanceToNowStrict/index.js' {
+ import { formatDistanceToNowStrict } from 'date-fns/esm'
+ export default formatDistanceToNowStrict
+}
+
+declare module 'date-fns/esm/formatDuration/index.js' {
+ import { formatDuration } from 'date-fns/esm'
+ export default formatDuration
+}
+
+declare module 'date-fns/esm/formatISO/index.js' {
+ import { formatISO } from 'date-fns/esm'
+ export default formatISO
+}
+
+declare module 'date-fns/esm/formatISO9075/index.js' {
+ import { formatISO9075 } from 'date-fns/esm'
+ export default formatISO9075
+}
+
+declare module 'date-fns/esm/formatISODuration/index.js' {
+ import { formatISODuration } from 'date-fns/esm'
+ export default formatISODuration
+}
+
+declare module 'date-fns/esm/formatRelative/index.js' {
+ import { formatRelative } from 'date-fns/esm'
+ export default formatRelative
+}
+
+declare module 'date-fns/esm/formatRFC3339/index.js' {
+ import { formatRFC3339 } from 'date-fns/esm'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/esm/formatRFC7231/index.js' {
+ import { formatRFC7231 } from 'date-fns/esm'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/esm/fromUnixTime/index.js' {
+ import { fromUnixTime } from 'date-fns/esm'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/esm/getDate/index.js' {
+ import { getDate } from 'date-fns/esm'
+ export default getDate
+}
+
+declare module 'date-fns/esm/getDay/index.js' {
+ import { getDay } from 'date-fns/esm'
+ export default getDay
+}
+
+declare module 'date-fns/esm/getDayOfYear/index.js' {
+ import { getDayOfYear } from 'date-fns/esm'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/esm/getDaysInMonth/index.js' {
+ import { getDaysInMonth } from 'date-fns/esm'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/esm/getDaysInYear/index.js' {
+ import { getDaysInYear } from 'date-fns/esm'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/esm/getDecade/index.js' {
+ import { getDecade } from 'date-fns/esm'
+ export default getDecade
+}
+
+declare module 'date-fns/esm/getHours/index.js' {
+ import { getHours } from 'date-fns/esm'
+ export default getHours
+}
+
+declare module 'date-fns/esm/getISODay/index.js' {
+ import { getISODay } from 'date-fns/esm'
+ export default getISODay
+}
+
+declare module 'date-fns/esm/getISOWeek/index.js' {
+ import { getISOWeek } from 'date-fns/esm'
+ export default getISOWeek
+}
+
+declare module 'date-fns/esm/getISOWeeksInYear/index.js' {
+ import { getISOWeeksInYear } from 'date-fns/esm'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/esm/getISOWeekYear/index.js' {
+ import { getISOWeekYear } from 'date-fns/esm'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/esm/getMilliseconds/index.js' {
+ import { getMilliseconds } from 'date-fns/esm'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/esm/getMinutes/index.js' {
+ import { getMinutes } from 'date-fns/esm'
+ export default getMinutes
+}
+
+declare module 'date-fns/esm/getMonth/index.js' {
+ import { getMonth } from 'date-fns/esm'
+ export default getMonth
+}
+
+declare module 'date-fns/esm/getOverlappingDaysInIntervals/index.js' {
+ import { getOverlappingDaysInIntervals } from 'date-fns/esm'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/esm/getQuarter/index.js' {
+ import { getQuarter } from 'date-fns/esm'
+ export default getQuarter
+}
+
+declare module 'date-fns/esm/getSeconds/index.js' {
+ import { getSeconds } from 'date-fns/esm'
+ export default getSeconds
+}
+
+declare module 'date-fns/esm/getTime/index.js' {
+ import { getTime } from 'date-fns/esm'
+ export default getTime
+}
+
+declare module 'date-fns/esm/getUnixTime/index.js' {
+ import { getUnixTime } from 'date-fns/esm'
+ export default getUnixTime
+}
+
+declare module 'date-fns/esm/getWeek/index.js' {
+ import { getWeek } from 'date-fns/esm'
+ export default getWeek
+}
+
+declare module 'date-fns/esm/getWeekOfMonth/index.js' {
+ import { getWeekOfMonth } from 'date-fns/esm'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/esm/getWeeksInMonth/index.js' {
+ import { getWeeksInMonth } from 'date-fns/esm'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/esm/getWeekYear/index.js' {
+ import { getWeekYear } from 'date-fns/esm'
+ export default getWeekYear
+}
+
+declare module 'date-fns/esm/getYear/index.js' {
+ import { getYear } from 'date-fns/esm'
+ export default getYear
+}
+
+declare module 'date-fns/esm/hoursToMilliseconds/index.js' {
+ import { hoursToMilliseconds } from 'date-fns/esm'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/esm/hoursToMinutes/index.js' {
+ import { hoursToMinutes } from 'date-fns/esm'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/esm/hoursToSeconds/index.js' {
+ import { hoursToSeconds } from 'date-fns/esm'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/esm/intervalToDuration/index.js' {
+ import { intervalToDuration } from 'date-fns/esm'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/esm/intlFormat/index.js' {
+ import { intlFormat } from 'date-fns/esm'
+ export default intlFormat
+}
+
+declare module 'date-fns/esm/isAfter/index.js' {
+ import { isAfter } from 'date-fns/esm'
+ export default isAfter
+}
+
+declare module 'date-fns/esm/isBefore/index.js' {
+ import { isBefore } from 'date-fns/esm'
+ export default isBefore
+}
+
+declare module 'date-fns/esm/isDate/index.js' {
+ import { isDate } from 'date-fns/esm'
+ export default isDate
+}
+
+declare module 'date-fns/esm/isEqual/index.js' {
+ import { isEqual } from 'date-fns/esm'
+ export default isEqual
+}
+
+declare module 'date-fns/esm/isExists/index.js' {
+ import { isExists } from 'date-fns/esm'
+ export default isExists
+}
+
+declare module 'date-fns/esm/isFirstDayOfMonth/index.js' {
+ import { isFirstDayOfMonth } from 'date-fns/esm'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/esm/isFriday/index.js' {
+ import { isFriday } from 'date-fns/esm'
+ export default isFriday
+}
+
+declare module 'date-fns/esm/isFuture/index.js' {
+ import { isFuture } from 'date-fns/esm'
+ export default isFuture
+}
+
+declare module 'date-fns/esm/isLastDayOfMonth/index.js' {
+ import { isLastDayOfMonth } from 'date-fns/esm'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/esm/isLeapYear/index.js' {
+ import { isLeapYear } from 'date-fns/esm'
+ export default isLeapYear
+}
+
+declare module 'date-fns/esm/isMatch/index.js' {
+ import { isMatch } from 'date-fns/esm'
+ export default isMatch
+}
+
+declare module 'date-fns/esm/isMonday/index.js' {
+ import { isMonday } from 'date-fns/esm'
+ export default isMonday
+}
+
+declare module 'date-fns/esm/isPast/index.js' {
+ import { isPast } from 'date-fns/esm'
+ export default isPast
+}
+
+declare module 'date-fns/esm/isSameDay/index.js' {
+ import { isSameDay } from 'date-fns/esm'
+ export default isSameDay
+}
+
+declare module 'date-fns/esm/isSameHour/index.js' {
+ import { isSameHour } from 'date-fns/esm'
+ export default isSameHour
+}
+
+declare module 'date-fns/esm/isSameISOWeek/index.js' {
+ import { isSameISOWeek } from 'date-fns/esm'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/esm/isSameISOWeekYear/index.js' {
+ import { isSameISOWeekYear } from 'date-fns/esm'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/esm/isSameMinute/index.js' {
+ import { isSameMinute } from 'date-fns/esm'
+ export default isSameMinute
+}
+
+declare module 'date-fns/esm/isSameMonth/index.js' {
+ import { isSameMonth } from 'date-fns/esm'
+ export default isSameMonth
+}
+
+declare module 'date-fns/esm/isSameQuarter/index.js' {
+ import { isSameQuarter } from 'date-fns/esm'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/esm/isSameSecond/index.js' {
+ import { isSameSecond } from 'date-fns/esm'
+ export default isSameSecond
+}
+
+declare module 'date-fns/esm/isSameWeek/index.js' {
+ import { isSameWeek } from 'date-fns/esm'
+ export default isSameWeek
+}
+
+declare module 'date-fns/esm/isSameYear/index.js' {
+ import { isSameYear } from 'date-fns/esm'
+ export default isSameYear
+}
+
+declare module 'date-fns/esm/isSaturday/index.js' {
+ import { isSaturday } from 'date-fns/esm'
+ export default isSaturday
+}
+
+declare module 'date-fns/esm/isSunday/index.js' {
+ import { isSunday } from 'date-fns/esm'
+ export default isSunday
+}
+
+declare module 'date-fns/esm/isThisHour/index.js' {
+ import { isThisHour } from 'date-fns/esm'
+ export default isThisHour
+}
+
+declare module 'date-fns/esm/isThisISOWeek/index.js' {
+ import { isThisISOWeek } from 'date-fns/esm'
+ export default isThisISOWeek
+}
+
+declare module 'date-fns/esm/isThisMinute/index.js' {
+ import { isThisMinute } from 'date-fns/esm'
+ export default isThisMinute
+}
+
+declare module 'date-fns/esm/isThisMonth/index.js' {
+ import { isThisMonth } from 'date-fns/esm'
+ export default isThisMonth
+}
+
+declare module 'date-fns/esm/isThisQuarter/index.js' {
+ import { isThisQuarter } from 'date-fns/esm'
+ export default isThisQuarter
+}
+
+declare module 'date-fns/esm/isThisSecond/index.js' {
+ import { isThisSecond } from 'date-fns/esm'
+ export default isThisSecond
+}
+
+declare module 'date-fns/esm/isThisWeek/index.js' {
+ import { isThisWeek } from 'date-fns/esm'
+ export default isThisWeek
+}
+
+declare module 'date-fns/esm/isThisYear/index.js' {
+ import { isThisYear } from 'date-fns/esm'
+ export default isThisYear
+}
+
+declare module 'date-fns/esm/isThursday/index.js' {
+ import { isThursday } from 'date-fns/esm'
+ export default isThursday
+}
+
+declare module 'date-fns/esm/isToday/index.js' {
+ import { isToday } from 'date-fns/esm'
+ export default isToday
+}
+
+declare module 'date-fns/esm/isTomorrow/index.js' {
+ import { isTomorrow } from 'date-fns/esm'
+ export default isTomorrow
+}
+
+declare module 'date-fns/esm/isTuesday/index.js' {
+ import { isTuesday } from 'date-fns/esm'
+ export default isTuesday
+}
+
+declare module 'date-fns/esm/isValid/index.js' {
+ import { isValid } from 'date-fns/esm'
+ export default isValid
+}
+
+declare module 'date-fns/esm/isWednesday/index.js' {
+ import { isWednesday } from 'date-fns/esm'
+ export default isWednesday
+}
+
+declare module 'date-fns/esm/isWeekend/index.js' {
+ import { isWeekend } from 'date-fns/esm'
+ export default isWeekend
+}
+
+declare module 'date-fns/esm/isWithinInterval/index.js' {
+ import { isWithinInterval } from 'date-fns/esm'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/esm/isYesterday/index.js' {
+ import { isYesterday } from 'date-fns/esm'
+ export default isYesterday
+}
+
+declare module 'date-fns/esm/lastDayOfDecade/index.js' {
+ import { lastDayOfDecade } from 'date-fns/esm'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/esm/lastDayOfISOWeek/index.js' {
+ import { lastDayOfISOWeek } from 'date-fns/esm'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/esm/lastDayOfISOWeekYear/index.js' {
+ import { lastDayOfISOWeekYear } from 'date-fns/esm'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/esm/lastDayOfMonth/index.js' {
+ import { lastDayOfMonth } from 'date-fns/esm'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/esm/lastDayOfQuarter/index.js' {
+ import { lastDayOfQuarter } from 'date-fns/esm'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/esm/lastDayOfWeek/index.js' {
+ import { lastDayOfWeek } from 'date-fns/esm'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/esm/lastDayOfYear/index.js' {
+ import { lastDayOfYear } from 'date-fns/esm'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/esm/lightFormat/index.js' {
+ import { lightFormat } from 'date-fns/esm'
+ export default lightFormat
+}
+
+declare module 'date-fns/esm/max/index.js' {
+ import { max } from 'date-fns/esm'
+ export default max
+}
+
+declare module 'date-fns/esm/milliseconds/index.js' {
+ import { milliseconds } from 'date-fns/esm'
+ export default milliseconds
+}
+
+declare module 'date-fns/esm/millisecondsToHours/index.js' {
+ import { millisecondsToHours } from 'date-fns/esm'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/esm/millisecondsToMinutes/index.js' {
+ import { millisecondsToMinutes } from 'date-fns/esm'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/esm/millisecondsToSeconds/index.js' {
+ import { millisecondsToSeconds } from 'date-fns/esm'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/esm/min/index.js' {
+ import { min } from 'date-fns/esm'
+ export default min
+}
+
+declare module 'date-fns/esm/minutesToHours/index.js' {
+ import { minutesToHours } from 'date-fns/esm'
+ export default minutesToHours
+}
+
+declare module 'date-fns/esm/minutesToMilliseconds/index.js' {
+ import { minutesToMilliseconds } from 'date-fns/esm'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/esm/minutesToSeconds/index.js' {
+ import { minutesToSeconds } from 'date-fns/esm'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/esm/monthsToQuarters/index.js' {
+ import { monthsToQuarters } from 'date-fns/esm'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/esm/monthsToYears/index.js' {
+ import { monthsToYears } from 'date-fns/esm'
+ export default monthsToYears
+}
+
+declare module 'date-fns/esm/nextDay/index.js' {
+ import { nextDay } from 'date-fns/esm'
+ export default nextDay
+}
+
+declare module 'date-fns/esm/nextFriday/index.js' {
+ import { nextFriday } from 'date-fns/esm'
+ export default nextFriday
+}
+
+declare module 'date-fns/esm/nextMonday/index.js' {
+ import { nextMonday } from 'date-fns/esm'
+ export default nextMonday
+}
+
+declare module 'date-fns/esm/nextSaturday/index.js' {
+ import { nextSaturday } from 'date-fns/esm'
+ export default nextSaturday
+}
+
+declare module 'date-fns/esm/nextSunday/index.js' {
+ import { nextSunday } from 'date-fns/esm'
+ export default nextSunday
+}
+
+declare module 'date-fns/esm/nextThursday/index.js' {
+ import { nextThursday } from 'date-fns/esm'
+ export default nextThursday
+}
+
+declare module 'date-fns/esm/nextTuesday/index.js' {
+ import { nextTuesday } from 'date-fns/esm'
+ export default nextTuesday
+}
+
+declare module 'date-fns/esm/nextWednesday/index.js' {
+ import { nextWednesday } from 'date-fns/esm'
+ export default nextWednesday
+}
+
+declare module 'date-fns/esm/parse/index.js' {
+ import { parse } from 'date-fns/esm'
+ export default parse
+}
+
+declare module 'date-fns/esm/parseISO/index.js' {
+ import { parseISO } from 'date-fns/esm'
+ export default parseISO
+}
+
+declare module 'date-fns/esm/parseJSON/index.js' {
+ import { parseJSON } from 'date-fns/esm'
+ export default parseJSON
+}
+
+declare module 'date-fns/esm/quartersToMonths/index.js' {
+ import { quartersToMonths } from 'date-fns/esm'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/esm/quartersToYears/index.js' {
+ import { quartersToYears } from 'date-fns/esm'
+ export default quartersToYears
+}
+
+declare module 'date-fns/esm/roundToNearestMinutes/index.js' {
+ import { roundToNearestMinutes } from 'date-fns/esm'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/esm/secondsToHours/index.js' {
+ import { secondsToHours } from 'date-fns/esm'
+ export default secondsToHours
+}
+
+declare module 'date-fns/esm/secondsToMilliseconds/index.js' {
+ import { secondsToMilliseconds } from 'date-fns/esm'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/esm/secondsToMinutes/index.js' {
+ import { secondsToMinutes } from 'date-fns/esm'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/esm/set/index.js' {
+ import { set } from 'date-fns/esm'
+ export default set
+}
+
+declare module 'date-fns/esm/setDate/index.js' {
+ import { setDate } from 'date-fns/esm'
+ export default setDate
+}
+
+declare module 'date-fns/esm/setDay/index.js' {
+ import { setDay } from 'date-fns/esm'
+ export default setDay
+}
+
+declare module 'date-fns/esm/setDayOfYear/index.js' {
+ import { setDayOfYear } from 'date-fns/esm'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/esm/setHours/index.js' {
+ import { setHours } from 'date-fns/esm'
+ export default setHours
+}
+
+declare module 'date-fns/esm/setISODay/index.js' {
+ import { setISODay } from 'date-fns/esm'
+ export default setISODay
+}
+
+declare module 'date-fns/esm/setISOWeek/index.js' {
+ import { setISOWeek } from 'date-fns/esm'
+ export default setISOWeek
+}
+
+declare module 'date-fns/esm/setISOWeekYear/index.js' {
+ import { setISOWeekYear } from 'date-fns/esm'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/esm/setMilliseconds/index.js' {
+ import { setMilliseconds } from 'date-fns/esm'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/esm/setMinutes/index.js' {
+ import { setMinutes } from 'date-fns/esm'
+ export default setMinutes
+}
+
+declare module 'date-fns/esm/setMonth/index.js' {
+ import { setMonth } from 'date-fns/esm'
+ export default setMonth
+}
+
+declare module 'date-fns/esm/setQuarter/index.js' {
+ import { setQuarter } from 'date-fns/esm'
+ export default setQuarter
+}
+
+declare module 'date-fns/esm/setSeconds/index.js' {
+ import { setSeconds } from 'date-fns/esm'
+ export default setSeconds
+}
+
+declare module 'date-fns/esm/setWeek/index.js' {
+ import { setWeek } from 'date-fns/esm'
+ export default setWeek
+}
+
+declare module 'date-fns/esm/setWeekYear/index.js' {
+ import { setWeekYear } from 'date-fns/esm'
+ export default setWeekYear
+}
+
+declare module 'date-fns/esm/setYear/index.js' {
+ import { setYear } from 'date-fns/esm'
+ export default setYear
+}
+
+declare module 'date-fns/esm/startOfDay/index.js' {
+ import { startOfDay } from 'date-fns/esm'
+ export default startOfDay
+}
+
+declare module 'date-fns/esm/startOfDecade/index.js' {
+ import { startOfDecade } from 'date-fns/esm'
+ export default startOfDecade
+}
+
+declare module 'date-fns/esm/startOfHour/index.js' {
+ import { startOfHour } from 'date-fns/esm'
+ export default startOfHour
+}
+
+declare module 'date-fns/esm/startOfISOWeek/index.js' {
+ import { startOfISOWeek } from 'date-fns/esm'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/esm/startOfISOWeekYear/index.js' {
+ import { startOfISOWeekYear } from 'date-fns/esm'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/esm/startOfMinute/index.js' {
+ import { startOfMinute } from 'date-fns/esm'
+ export default startOfMinute
+}
+
+declare module 'date-fns/esm/startOfMonth/index.js' {
+ import { startOfMonth } from 'date-fns/esm'
+ export default startOfMonth
+}
+
+declare module 'date-fns/esm/startOfQuarter/index.js' {
+ import { startOfQuarter } from 'date-fns/esm'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/esm/startOfSecond/index.js' {
+ import { startOfSecond } from 'date-fns/esm'
+ export default startOfSecond
+}
+
+declare module 'date-fns/esm/startOfToday/index.js' {
+ import { startOfToday } from 'date-fns/esm'
+ export default startOfToday
+}
+
+declare module 'date-fns/esm/startOfTomorrow/index.js' {
+ import { startOfTomorrow } from 'date-fns/esm'
+ export default startOfTomorrow
+}
+
+declare module 'date-fns/esm/startOfWeek/index.js' {
+ import { startOfWeek } from 'date-fns/esm'
+ export default startOfWeek
+}
+
+declare module 'date-fns/esm/startOfWeekYear/index.js' {
+ import { startOfWeekYear } from 'date-fns/esm'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/esm/startOfYear/index.js' {
+ import { startOfYear } from 'date-fns/esm'
+ export default startOfYear
+}
+
+declare module 'date-fns/esm/startOfYesterday/index.js' {
+ import { startOfYesterday } from 'date-fns/esm'
+ export default startOfYesterday
+}
+
+declare module 'date-fns/esm/sub/index.js' {
+ import { sub } from 'date-fns/esm'
+ export default sub
+}
+
+declare module 'date-fns/esm/subBusinessDays/index.js' {
+ import { subBusinessDays } from 'date-fns/esm'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/esm/subDays/index.js' {
+ import { subDays } from 'date-fns/esm'
+ export default subDays
+}
+
+declare module 'date-fns/esm/subHours/index.js' {
+ import { subHours } from 'date-fns/esm'
+ export default subHours
+}
+
+declare module 'date-fns/esm/subISOWeekYears/index.js' {
+ import { subISOWeekYears } from 'date-fns/esm'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/esm/subMilliseconds/index.js' {
+ import { subMilliseconds } from 'date-fns/esm'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/esm/subMinutes/index.js' {
+ import { subMinutes } from 'date-fns/esm'
+ export default subMinutes
+}
+
+declare module 'date-fns/esm/subMonths/index.js' {
+ import { subMonths } from 'date-fns/esm'
+ export default subMonths
+}
+
+declare module 'date-fns/esm/subQuarters/index.js' {
+ import { subQuarters } from 'date-fns/esm'
+ export default subQuarters
+}
+
+declare module 'date-fns/esm/subSeconds/index.js' {
+ import { subSeconds } from 'date-fns/esm'
+ export default subSeconds
+}
+
+declare module 'date-fns/esm/subWeeks/index.js' {
+ import { subWeeks } from 'date-fns/esm'
+ export default subWeeks
+}
+
+declare module 'date-fns/esm/subYears/index.js' {
+ import { subYears } from 'date-fns/esm'
+ export default subYears
+}
+
+declare module 'date-fns/esm/toDate/index.js' {
+ import { toDate } from 'date-fns/esm'
+ export default toDate
+}
+
+declare module 'date-fns/esm/weeksToDays/index.js' {
+ import { weeksToDays } from 'date-fns/esm'
+ export default weeksToDays
+}
+
+declare module 'date-fns/esm/yearsToMonths/index.js' {
+ import { yearsToMonths } from 'date-fns/esm'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/esm/yearsToQuarters/index.js' {
+ import { yearsToQuarters } from 'date-fns/esm'
+ export default yearsToQuarters
+}
+
+// ECMAScript Module FP Functions
+
+declare module 'date-fns/esm/fp' {
+ const add: CurriedFn2<Duration, Date | number, Date>
+ namespace add {}
+
+ const addBusinessDays: CurriedFn2<number, Date | number, Date>
+ namespace addBusinessDays {}
+
+ const addDays: CurriedFn2<number, Date | number, Date>
+ namespace addDays {}
+
+ const addHours: CurriedFn2<number, Date | number, Date>
+ namespace addHours {}
+
+ const addISOWeekYears: CurriedFn2<number, Date | number, Date>
+ namespace addISOWeekYears {}
+
+ const addMilliseconds: CurriedFn2<number, Date | number, Date>
+ namespace addMilliseconds {}
+
+ const addMinutes: CurriedFn2<number, Date | number, Date>
+ namespace addMinutes {}
+
+ const addMonths: CurriedFn2<number, Date | number, Date>
+ namespace addMonths {}
+
+ const addQuarters: CurriedFn2<number, Date | number, Date>
+ namespace addQuarters {}
+
+ const addSeconds: CurriedFn2<number, Date | number, Date>
+ namespace addSeconds {}
+
+ const addWeeks: CurriedFn2<number, Date | number, Date>
+ namespace addWeeks {}
+
+ const addYears: CurriedFn2<number, Date | number, Date>
+ namespace addYears {}
+
+ const areIntervalsOverlapping: CurriedFn2<Interval, Interval, boolean>
+ namespace areIntervalsOverlapping {}
+
+ const areIntervalsOverlappingWithOptions: CurriedFn3<
+ {
+ inclusive?: boolean
+ },
+ Interval,
+ Interval,
+ boolean
+ >
+ namespace areIntervalsOverlappingWithOptions {}
+
+ const closestIndexTo: CurriedFn2<(Date | number)[], Date | number, number>
+ namespace closestIndexTo {}
+
+ const closestTo: CurriedFn2<(Date | number)[], Date | number, Date>
+ namespace closestTo {}
+
+ const compareAsc: CurriedFn2<Date | number, Date | number, number>
+ namespace compareAsc {}
+
+ const compareDesc: CurriedFn2<Date | number, Date | number, number>
+ namespace compareDesc {}
+
+ const daysToWeeks: CurriedFn1<number, number>
+ namespace daysToWeeks {}
+
+ const differenceInBusinessDays: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInBusinessDays {}
+
+ const differenceInCalendarDays: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarDays {}
+
+ const differenceInCalendarISOWeeks: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarISOWeeks {}
+
+ const differenceInCalendarISOWeekYears: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarISOWeekYears {}
+
+ const differenceInCalendarMonths: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarMonths {}
+
+ const differenceInCalendarQuarters: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarQuarters {}
+
+ const differenceInCalendarWeeks: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarWeeks {}
+
+ const differenceInCalendarWeeksWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarWeeksWithOptions {}
+
+ const differenceInCalendarYears: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInCalendarYears {}
+
+ const differenceInDays: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInDays {}
+
+ const differenceInHours: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInHours {}
+
+ const differenceInISOWeekYears: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInISOWeekYears {}
+
+ const differenceInMilliseconds: CurriedFn2<
+ Date | number,
+ Date | number,
+ number
+ >
+ namespace differenceInMilliseconds {}
+
+ const differenceInMinutes: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInMinutes {}
+
+ const differenceInMonths: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInMonths {}
+
+ const differenceInQuarters: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInQuarters {}
+
+ const differenceInSeconds: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInSeconds {}
+
+ const differenceInWeeks: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInWeeks {}
+
+ const differenceInYears: CurriedFn2<Date | number, Date | number, number>
+ namespace differenceInYears {}
+
+ const eachDayOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachDayOfInterval {}
+
+ const eachDayOfIntervalWithOptions: CurriedFn2<
+ {
+ step?: number
+ },
+ Interval,
+ Date[]
+ >
+ namespace eachDayOfIntervalWithOptions {}
+
+ const eachHourOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachHourOfInterval {}
+
+ const eachHourOfIntervalWithOptions: CurriedFn2<
+ {
+ step?: number
+ },
+ Interval,
+ Date[]
+ >
+ namespace eachHourOfIntervalWithOptions {}
+
+ const eachMinuteOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachMinuteOfInterval {}
+
+ const eachMinuteOfIntervalWithOptions: CurriedFn2<
+ {
+ step?: number
+ },
+ Interval,
+ Date[]
+ >
+ namespace eachMinuteOfIntervalWithOptions {}
+
+ const eachMonthOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachMonthOfInterval {}
+
+ const eachQuarterOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachQuarterOfInterval {}
+
+ const eachWeekendOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachWeekendOfInterval {}
+
+ const eachWeekendOfMonth: CurriedFn1<Date | number, Date[]>
+ namespace eachWeekendOfMonth {}
+
+ const eachWeekendOfYear: CurriedFn1<Date | number, Date[]>
+ namespace eachWeekendOfYear {}
+
+ const eachWeekOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachWeekOfInterval {}
+
+ const eachWeekOfIntervalWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Interval,
+ Date[]
+ >
+ namespace eachWeekOfIntervalWithOptions {}
+
+ const eachYearOfInterval: CurriedFn1<Interval, Date[]>
+ namespace eachYearOfInterval {}
+
+ const endOfDay: CurriedFn1<Date | number, Date>
+ namespace endOfDay {}
+
+ const endOfDecade: CurriedFn1<Date | number, Date>
+ namespace endOfDecade {}
+
+ const endOfDecadeWithOptions: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2
+ },
+ Date | number,
+ Date
+ >
+ namespace endOfDecadeWithOptions {}
+
+ const endOfHour: CurriedFn1<Date | number, Date>
+ namespace endOfHour {}
+
+ const endOfISOWeek: CurriedFn1<Date | number, Date>
+ namespace endOfISOWeek {}
+
+ const endOfISOWeekYear: CurriedFn1<Date | number, Date>
+ namespace endOfISOWeekYear {}
+
+ const endOfMinute: CurriedFn1<Date | number, Date>
+ namespace endOfMinute {}
+
+ const endOfMonth: CurriedFn1<Date | number, Date>
+ namespace endOfMonth {}
+
+ const endOfQuarter: CurriedFn1<Date | number, Date>
+ namespace endOfQuarter {}
+
+ const endOfSecond: CurriedFn1<Date | number, Date>
+ namespace endOfSecond {}
+
+ const endOfWeek: CurriedFn1<Date | number, Date>
+ namespace endOfWeek {}
+
+ const endOfWeekWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date
+ >
+ namespace endOfWeekWithOptions {}
+
+ const endOfYear: CurriedFn1<Date | number, Date>
+ namespace endOfYear {}
+
+ const format: CurriedFn2<string, Date | number, string>
+ namespace format {}
+
+ const formatDistance: CurriedFn2<Date | number, Date | number, string>
+ namespace formatDistance {}
+
+ const formatDistanceStrict: CurriedFn2<Date | number, Date | number, string>
+ namespace formatDistanceStrict {}
+
+ const formatDistanceStrictWithOptions: CurriedFn3<
+ {
+ locale?: Locale
+ roundingMethod?: 'floor' | 'ceil' | 'round'
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'
+ addSuffix?: boolean
+ },
+ Date | number,
+ Date | number,
+ string
+ >
+ namespace formatDistanceStrictWithOptions {}
+
+ const formatDistanceWithOptions: CurriedFn3<
+ {
+ locale?: Locale
+ addSuffix?: boolean
+ includeSeconds?: boolean
+ },
+ Date | number,
+ Date | number,
+ string
+ >
+ namespace formatDistanceWithOptions {}
+
+ const formatDuration: CurriedFn1<Duration, string>
+ namespace formatDuration {}
+
+ const formatDurationWithOptions: CurriedFn2<
+ {
+ locale?: Locale
+ delimiter?: string
+ zero?: boolean
+ format?: string[]
+ },
+ Duration,
+ string
+ >
+ namespace formatDurationWithOptions {}
+
+ const formatISO: CurriedFn1<Date | number, string>
+ namespace formatISO {}
+
+ const formatISO9075: CurriedFn1<Date | number, string>
+ namespace formatISO9075 {}
+
+ const formatISO9075WithOptions: CurriedFn2<
+ {
+ representation?: 'complete' | 'date' | 'time'
+ format?: 'extended' | 'basic'
+ },
+ Date | number,
+ string
+ >
+ namespace formatISO9075WithOptions {}
+
+ const formatISODuration: CurriedFn1<Duration, string>
+ namespace formatISODuration {}
+
+ const formatISOWithOptions: CurriedFn2<
+ {
+ representation?: 'complete' | 'date' | 'time'
+ format?: 'extended' | 'basic'
+ },
+ Date | number,
+ string
+ >
+ namespace formatISOWithOptions {}
+
+ const formatRelative: CurriedFn2<Date | number, Date | number, string>
+ namespace formatRelative {}
+
+ const formatRelativeWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date | number,
+ string
+ >
+ namespace formatRelativeWithOptions {}
+
+ const formatRFC3339: CurriedFn1<Date | number, string>
+ namespace formatRFC3339 {}
+
+ const formatRFC3339WithOptions: CurriedFn2<
+ {
+ fractionDigits?: 0 | 1 | 2 | 3
+ },
+ Date | number,
+ string
+ >
+ namespace formatRFC3339WithOptions {}
+
+ const formatRFC7231: CurriedFn1<Date | number, string>
+ namespace formatRFC7231 {}
+
+ const formatWithOptions: CurriedFn3<
+ {
+ useAdditionalDayOfYearTokens?: boolean
+ useAdditionalWeekYearTokens?: boolean
+ firstWeekContainsDate?: number
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ string,
+ Date | number,
+ string
+ >
+ namespace formatWithOptions {}
+
+ const fromUnixTime: CurriedFn1<number, Date>
+ namespace fromUnixTime {}
+
+ const getDate: CurriedFn1<Date | number, number>
+ namespace getDate {}
+
+ const getDay: CurriedFn1<Date | number, 0 | 1 | 2 | 3 | 4 | 5 | 6>
+ namespace getDay {}
+
+ const getDayOfYear: CurriedFn1<Date | number, number>
+ namespace getDayOfYear {}
+
+ const getDaysInMonth: CurriedFn1<Date | number, number>
+ namespace getDaysInMonth {}
+
+ const getDaysInYear: CurriedFn1<Date | number, number>
+ namespace getDaysInYear {}
+
+ const getDecade: CurriedFn1<Date | number, number>
+ namespace getDecade {}
+
+ const getHours: CurriedFn1<Date | number, number>
+ namespace getHours {}
+
+ const getISODay: CurriedFn1<Date | number, number>
+ namespace getISODay {}
+
+ const getISOWeek: CurriedFn1<Date | number, number>
+ namespace getISOWeek {}
+
+ const getISOWeeksInYear: CurriedFn1<Date | number, number>
+ namespace getISOWeeksInYear {}
+
+ const getISOWeekYear: CurriedFn1<Date | number, number>
+ namespace getISOWeekYear {}
+
+ const getMilliseconds: CurriedFn1<Date | number, number>
+ namespace getMilliseconds {}
+
+ const getMinutes: CurriedFn1<Date | number, number>
+ namespace getMinutes {}
+
+ const getMonth: CurriedFn1<Date | number, number>
+ namespace getMonth {}
+
+ const getOverlappingDaysInIntervals: CurriedFn2<Interval, Interval, number>
+ namespace getOverlappingDaysInIntervals {}
+
+ const getQuarter: CurriedFn1<Date | number, number>
+ namespace getQuarter {}
+
+ const getSeconds: CurriedFn1<Date | number, number>
+ namespace getSeconds {}
+
+ const getTime: CurriedFn1<Date | number, number>
+ namespace getTime {}
+
+ const getUnixTime: CurriedFn1<Date | number, number>
+ namespace getUnixTime {}
+
+ const getWeek: CurriedFn1<Date | number, number>
+ namespace getWeek {}
+
+ const getWeekOfMonth: CurriedFn1<Date | number, number>
+ namespace getWeekOfMonth {}
+
+ const getWeekOfMonthWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ number
+ >
+ namespace getWeekOfMonthWithOptions {}
+
+ const getWeeksInMonth: CurriedFn1<Date | number, number>
+ namespace getWeeksInMonth {}
+
+ const getWeeksInMonthWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ number
+ >
+ namespace getWeeksInMonthWithOptions {}
+
+ const getWeekWithOptions: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ number
+ >
+ namespace getWeekWithOptions {}
+
+ const getWeekYear: CurriedFn1<Date | number, number>
+ namespace getWeekYear {}
+
+ const getWeekYearWithOptions: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ number
+ >
+ namespace getWeekYearWithOptions {}
+
+ const getYear: CurriedFn1<Date | number, number>
+ namespace getYear {}
+
+ const hoursToMilliseconds: CurriedFn1<number, number>
+ namespace hoursToMilliseconds {}
+
+ const hoursToMinutes: CurriedFn1<number, number>
+ namespace hoursToMinutes {}
+
+ const hoursToSeconds: CurriedFn1<number, number>
+ namespace hoursToSeconds {}
+
+ const intervalToDuration: CurriedFn1<Interval, Duration>
+ namespace intervalToDuration {}
+
+ const intlFormat: CurriedFn3<
+ {
+ locale?: string | string[]
+ },
+ {
+ timeZone?: string
+ hour12?: boolean
+ formatMatcher?: 'basic' | 'best fit'
+ timeZoneName?: 'short' | 'long'
+ second?: 'numeric' | '2-digit'
+ minute?: 'numeric' | '2-digit'
+ hour?: 'numeric' | '2-digit'
+ day?: 'numeric' | '2-digit'
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long'
+ year?: 'numeric' | '2-digit'
+ era?: 'narrow' | 'short' | 'long'
+ weekday?: 'narrow' | 'short' | 'long'
+ localeMatcher?: 'lookup' | 'best fit'
+ },
+ Date | number,
+ string
+ >
+ namespace intlFormat {}
+
+ const isAfter: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isAfter {}
+
+ const isBefore: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isBefore {}
+
+ const isDate: CurriedFn1<any, boolean>
+ namespace isDate {}
+
+ const isEqual: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isEqual {}
+
+ const isExists: CurriedFn3<number, number, number, boolean>
+ namespace isExists {}
+
+ const isFirstDayOfMonth: CurriedFn1<Date | number, boolean>
+ namespace isFirstDayOfMonth {}
+
+ const isFriday: CurriedFn1<Date | number, boolean>
+ namespace isFriday {}
+
+ const isLastDayOfMonth: CurriedFn1<Date | number, boolean>
+ namespace isLastDayOfMonth {}
+
+ const isLeapYear: CurriedFn1<Date | number, boolean>
+ namespace isLeapYear {}
+
+ const isMatch: CurriedFn2<string, string, boolean>
+ namespace isMatch {}
+
+ const isMatchWithOptions: CurriedFn3<
+ {
+ useAdditionalDayOfYearTokens?: boolean
+ useAdditionalWeekYearTokens?: boolean
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ string,
+ string,
+ boolean
+ >
+ namespace isMatchWithOptions {}
+
+ const isMonday: CurriedFn1<Date | number, boolean>
+ namespace isMonday {}
+
+ const isSameDay: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameDay {}
+
+ const isSameHour: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameHour {}
+
+ const isSameISOWeek: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameISOWeek {}
+
+ const isSameISOWeekYear: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameISOWeekYear {}
+
+ const isSameMinute: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameMinute {}
+
+ const isSameMonth: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameMonth {}
+
+ const isSameQuarter: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameQuarter {}
+
+ const isSameSecond: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameSecond {}
+
+ const isSameWeek: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameWeek {}
+
+ const isSameWeekWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date | number,
+ boolean
+ >
+ namespace isSameWeekWithOptions {}
+
+ const isSameYear: CurriedFn2<Date | number, Date | number, boolean>
+ namespace isSameYear {}
+
+ const isSaturday: CurriedFn1<Date | number, boolean>
+ namespace isSaturday {}
+
+ const isSunday: CurriedFn1<Date | number, boolean>
+ namespace isSunday {}
+
+ const isThursday: CurriedFn1<Date | number, boolean>
+ namespace isThursday {}
+
+ const isTuesday: CurriedFn1<Date | number, boolean>
+ namespace isTuesday {}
+
+ const isValid: CurriedFn1<any, boolean>
+ namespace isValid {}
+
+ const isWednesday: CurriedFn1<Date | number, boolean>
+ namespace isWednesday {}
+
+ const isWeekend: CurriedFn1<Date | number, boolean>
+ namespace isWeekend {}
+
+ const isWithinInterval: CurriedFn2<Interval, Date | number, boolean>
+ namespace isWithinInterval {}
+
+ const lastDayOfDecade: CurriedFn1<Date | number, Date>
+ namespace lastDayOfDecade {}
+
+ const lastDayOfISOWeek: CurriedFn1<Date | number, Date>
+ namespace lastDayOfISOWeek {}
+
+ const lastDayOfISOWeekYear: CurriedFn1<Date | number, Date>
+ namespace lastDayOfISOWeekYear {}
+
+ const lastDayOfMonth: CurriedFn1<Date | number, Date>
+ namespace lastDayOfMonth {}
+
+ const lastDayOfQuarter: CurriedFn1<Date | number, Date>
+ namespace lastDayOfQuarter {}
+
+ const lastDayOfQuarterWithOptions: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2
+ },
+ Date | number,
+ Date
+ >
+ namespace lastDayOfQuarterWithOptions {}
+
+ const lastDayOfWeek: CurriedFn1<Date | number, Date>
+ namespace lastDayOfWeek {}
+
+ const lastDayOfWeekWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date
+ >
+ namespace lastDayOfWeekWithOptions {}
+
+ const lastDayOfYear: CurriedFn1<Date | number, Date>
+ namespace lastDayOfYear {}
+
+ const lightFormat: CurriedFn2<string, Date | number, string>
+ namespace lightFormat {}
+
+ const max: CurriedFn1<(Date | number)[], Date>
+ namespace max {}
+
+ const milliseconds: CurriedFn1<Duration, number>
+ namespace milliseconds {}
+
+ const millisecondsToHours: CurriedFn1<number, number>
+ namespace millisecondsToHours {}
+
+ const millisecondsToMinutes: CurriedFn1<number, number>
+ namespace millisecondsToMinutes {}
+
+ const millisecondsToSeconds: CurriedFn1<number, number>
+ namespace millisecondsToSeconds {}
+
+ const min: CurriedFn1<(Date | number)[], Date>
+ namespace min {}
+
+ const minutesToHours: CurriedFn1<number, number>
+ namespace minutesToHours {}
+
+ const minutesToMilliseconds: CurriedFn1<number, number>
+ namespace minutesToMilliseconds {}
+
+ const minutesToSeconds: CurriedFn1<number, number>
+ namespace minutesToSeconds {}
+
+ const monthsToQuarters: CurriedFn1<number, number>
+ namespace monthsToQuarters {}
+
+ const monthsToYears: CurriedFn1<number, number>
+ namespace monthsToYears {}
+
+ const nextDay: CurriedFn2<Day, Date | number, Date>
+ namespace nextDay {}
+
+ const nextFriday: CurriedFn1<Date | number, Date>
+ namespace nextFriday {}
+
+ const nextMonday: CurriedFn1<Date | number, Date>
+ namespace nextMonday {}
+
+ const nextSaturday: CurriedFn1<Date | number, Date>
+ namespace nextSaturday {}
+
+ const nextSunday: CurriedFn1<Date | number, Date>
+ namespace nextSunday {}
+
+ const nextThursday: CurriedFn1<Date | number, Date>
+ namespace nextThursday {}
+
+ const nextTuesday: CurriedFn1<Date | number, Date>
+ namespace nextTuesday {}
+
+ const nextWednesday: CurriedFn1<Date | number, Date>
+ namespace nextWednesday {}
+
+ const parse: CurriedFn3<Date | number, string, string, Date>
+ namespace parse {}
+
+ const parseISO: CurriedFn1<string, Date>
+ namespace parseISO {}
+
+ const parseISOWithOptions: CurriedFn2<
+ {
+ additionalDigits?: 0 | 1 | 2
+ },
+ string,
+ Date
+ >
+ namespace parseISOWithOptions {}
+
+ const parseJSON: CurriedFn1<string | number | Date, Date>
+ namespace parseJSON {}
+
+ const parseWithOptions: CurriedFn4<
+ {
+ useAdditionalDayOfYearTokens?: boolean
+ useAdditionalWeekYearTokens?: boolean
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ string,
+ string,
+ Date
+ >
+ namespace parseWithOptions {}
+
+ const quartersToMonths: CurriedFn1<number, number>
+ namespace quartersToMonths {}
+
+ const quartersToYears: CurriedFn1<number, number>
+ namespace quartersToYears {}
+
+ const roundToNearestMinutes: CurriedFn1<Date | number, Date>
+ namespace roundToNearestMinutes {}
+
+ const roundToNearestMinutesWithOptions: CurriedFn2<
+ {
+ nearestTo?: number
+ },
+ Date | number,
+ Date
+ >
+ namespace roundToNearestMinutesWithOptions {}
+
+ const secondsToHours: CurriedFn1<number, number>
+ namespace secondsToHours {}
+
+ const secondsToMilliseconds: CurriedFn1<number, number>
+ namespace secondsToMilliseconds {}
+
+ const secondsToMinutes: CurriedFn1<number, number>
+ namespace secondsToMinutes {}
+
+ const set: CurriedFn2<
+ {
+ milliseconds?: number
+ seconds?: number
+ minutes?: number
+ hours?: number
+ date?: number
+ month?: number
+ year?: number
+ },
+ Date | number,
+ Date
+ >
+ namespace set {}
+
+ const setDate: CurriedFn2<number, Date | number, Date>
+ namespace setDate {}
+
+ const setDay: CurriedFn2<number, Date | number, Date>
+ namespace setDay {}
+
+ const setDayOfYear: CurriedFn2<number, Date | number, Date>
+ namespace setDayOfYear {}
+
+ const setDayWithOptions: CurriedFn3<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ number,
+ Date | number,
+ Date
+ >
+ namespace setDayWithOptions {}
+
+ const setHours: CurriedFn2<number, Date | number, Date>
+ namespace setHours {}
+
+ const setISODay: CurriedFn2<number, Date | number, Date>
+ namespace setISODay {}
+
+ const setISOWeek: CurriedFn2<number, Date | number, Date>
+ namespace setISOWeek {}
+
+ const setISOWeekYear: CurriedFn2<number, Date | number, Date>
+ namespace setISOWeekYear {}
+
+ const setMilliseconds: CurriedFn2<number, Date | number, Date>
+ namespace setMilliseconds {}
+
+ const setMinutes: CurriedFn2<number, Date | number, Date>
+ namespace setMinutes {}
+
+ const setMonth: CurriedFn2<number, Date | number, Date>
+ namespace setMonth {}
+
+ const setQuarter: CurriedFn2<number, Date | number, Date>
+ namespace setQuarter {}
+
+ const setSeconds: CurriedFn2<number, Date | number, Date>
+ namespace setSeconds {}
+
+ const setWeek: CurriedFn2<number, Date | number, Date>
+ namespace setWeek {}
+
+ const setWeekWithOptions: CurriedFn3<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ number,
+ Date | number,
+ Date
+ >
+ namespace setWeekWithOptions {}
+
+ const setWeekYear: CurriedFn2<number, Date | number, Date>
+ namespace setWeekYear {}
+
+ const setWeekYearWithOptions: CurriedFn3<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ number,
+ Date | number,
+ Date
+ >
+ namespace setWeekYearWithOptions {}
+
+ const setYear: CurriedFn2<number, Date | number, Date>
+ namespace setYear {}
+
+ const startOfDay: CurriedFn1<Date | number, Date>
+ namespace startOfDay {}
+
+ const startOfDecade: CurriedFn1<Date | number, Date>
+ namespace startOfDecade {}
+
+ const startOfHour: CurriedFn1<Date | number, Date>
+ namespace startOfHour {}
+
+ const startOfISOWeek: CurriedFn1<Date | number, Date>
+ namespace startOfISOWeek {}
+
+ const startOfISOWeekYear: CurriedFn1<Date | number, Date>
+ namespace startOfISOWeekYear {}
+
+ const startOfMinute: CurriedFn1<Date | number, Date>
+ namespace startOfMinute {}
+
+ const startOfMonth: CurriedFn1<Date | number, Date>
+ namespace startOfMonth {}
+
+ const startOfQuarter: CurriedFn1<Date | number, Date>
+ namespace startOfQuarter {}
+
+ const startOfSecond: CurriedFn1<Date | number, Date>
+ namespace startOfSecond {}
+
+ const startOfWeek: CurriedFn1<Date | number, Date>
+ namespace startOfWeek {}
+
+ const startOfWeekWithOptions: CurriedFn2<
+ {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date
+ >
+ namespace startOfWeekWithOptions {}
+
+ const startOfWeekYear: CurriedFn1<Date | number, Date>
+ namespace startOfWeekYear {}
+
+ const startOfWeekYearWithOptions: CurriedFn2<
+ {
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ locale?: Locale
+ },
+ Date | number,
+ Date
+ >
+ namespace startOfWeekYearWithOptions {}
+
+ const startOfYear: CurriedFn1<Date | number, Date>
+ namespace startOfYear {}
+
+ const sub: CurriedFn2<Duration, Date | number, Date>
+ namespace sub {}
+
+ const subBusinessDays: CurriedFn2<number, Date | number, Date>
+ namespace subBusinessDays {}
+
+ const subDays: CurriedFn2<number, Date | number, Date>
+ namespace subDays {}
+
+ const subHours: CurriedFn2<number, Date | number, Date>
+ namespace subHours {}
+
+ const subISOWeekYears: CurriedFn2<number, Date | number, Date>
+ namespace subISOWeekYears {}
+
+ const subMilliseconds: CurriedFn2<number, Date | number, Date>
+ namespace subMilliseconds {}
+
+ const subMinutes: CurriedFn2<number, Date | number, Date>
+ namespace subMinutes {}
+
+ const subMonths: CurriedFn2<number, Date | number, Date>
+ namespace subMonths {}
+
+ const subQuarters: CurriedFn2<number, Date | number, Date>
+ namespace subQuarters {}
+
+ const subSeconds: CurriedFn2<number, Date | number, Date>
+ namespace subSeconds {}
+
+ const subWeeks: CurriedFn2<number, Date | number, Date>
+ namespace subWeeks {}
+
+ const subYears: CurriedFn2<number, Date | number, Date>
+ namespace subYears {}
+
+ const toDate: CurriedFn1<Date | number, Date>
+ namespace toDate {}
+
+ const weeksToDays: CurriedFn1<number, number>
+ namespace weeksToDays {}
+
+ const yearsToMonths: CurriedFn1<number, number>
+ namespace yearsToMonths {}
+
+ const yearsToQuarters: CurriedFn1<number, number>
+ namespace yearsToQuarters {}
+
+ const daysInWeek: number
+
+ const maxTime: number
+
+ const millisecondsInMinute: number
+
+ const millisecondsInHour: number
+
+ const millisecondsInSecond: number
+
+ const minTime: number
+
+ const minutesInHour: number
+
+ const monthsInQuarter: number
+
+ const monthsInYear: number
+
+ const quartersInYear: number
+
+ const secondsInHour: number
+
+ const secondsInMinute: number
+}
+
+declare module 'date-fns/esm/fp/add' {
+ import { add } from 'date-fns/esm/fp'
+ export default add
+}
+
+declare module 'date-fns/esm/fp/addBusinessDays' {
+ import { addBusinessDays } from 'date-fns/esm/fp'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/esm/fp/addDays' {
+ import { addDays } from 'date-fns/esm/fp'
+ export default addDays
+}
+
+declare module 'date-fns/esm/fp/addHours' {
+ import { addHours } from 'date-fns/esm/fp'
+ export default addHours
+}
+
+declare module 'date-fns/esm/fp/addISOWeekYears' {
+ import { addISOWeekYears } from 'date-fns/esm/fp'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/addMilliseconds' {
+ import { addMilliseconds } from 'date-fns/esm/fp'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/esm/fp/addMinutes' {
+ import { addMinutes } from 'date-fns/esm/fp'
+ export default addMinutes
+}
+
+declare module 'date-fns/esm/fp/addMonths' {
+ import { addMonths } from 'date-fns/esm/fp'
+ export default addMonths
+}
+
+declare module 'date-fns/esm/fp/addQuarters' {
+ import { addQuarters } from 'date-fns/esm/fp'
+ export default addQuarters
+}
+
+declare module 'date-fns/esm/fp/addSeconds' {
+ import { addSeconds } from 'date-fns/esm/fp'
+ export default addSeconds
+}
+
+declare module 'date-fns/esm/fp/addWeeks' {
+ import { addWeeks } from 'date-fns/esm/fp'
+ export default addWeeks
+}
+
+declare module 'date-fns/esm/fp/addYears' {
+ import { addYears } from 'date-fns/esm/fp'
+ export default addYears
+}
+
+declare module 'date-fns/esm/fp/areIntervalsOverlapping' {
+ import { areIntervalsOverlapping } from 'date-fns/esm/fp'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/esm/fp/areIntervalsOverlappingWithOptions' {
+ import { areIntervalsOverlappingWithOptions } from 'date-fns/esm/fp'
+ export default areIntervalsOverlappingWithOptions
+}
+
+declare module 'date-fns/esm/fp/closestIndexTo' {
+ import { closestIndexTo } from 'date-fns/esm/fp'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/esm/fp/closestTo' {
+ import { closestTo } from 'date-fns/esm/fp'
+ export default closestTo
+}
+
+declare module 'date-fns/esm/fp/compareAsc' {
+ import { compareAsc } from 'date-fns/esm/fp'
+ export default compareAsc
+}
+
+declare module 'date-fns/esm/fp/compareDesc' {
+ import { compareDesc } from 'date-fns/esm/fp'
+ export default compareDesc
+}
+
+declare module 'date-fns/esm/fp/daysToWeeks' {
+ import { daysToWeeks } from 'date-fns/esm/fp'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInBusinessDays' {
+ import { differenceInBusinessDays } from 'date-fns/esm/fp'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarDays' {
+ import { differenceInCalendarDays } from 'date-fns/esm/fp'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarISOWeeks' {
+ import { differenceInCalendarISOWeeks } from 'date-fns/esm/fp'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarISOWeekYears' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns/esm/fp'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarMonths' {
+ import { differenceInCalendarMonths } from 'date-fns/esm/fp'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarQuarters' {
+ import { differenceInCalendarQuarters } from 'date-fns/esm/fp'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarWeeks' {
+ import { differenceInCalendarWeeks } from 'date-fns/esm/fp'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarWeeksWithOptions' {
+ import { differenceInCalendarWeeksWithOptions } from 'date-fns/esm/fp'
+ export default differenceInCalendarWeeksWithOptions
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarYears' {
+ import { differenceInCalendarYears } from 'date-fns/esm/fp'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/esm/fp/differenceInDays' {
+ import { differenceInDays } from 'date-fns/esm/fp'
+ export default differenceInDays
+}
+
+declare module 'date-fns/esm/fp/differenceInHours' {
+ import { differenceInHours } from 'date-fns/esm/fp'
+ export default differenceInHours
+}
+
+declare module 'date-fns/esm/fp/differenceInISOWeekYears' {
+ import { differenceInISOWeekYears } from 'date-fns/esm/fp'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/differenceInMilliseconds' {
+ import { differenceInMilliseconds } from 'date-fns/esm/fp'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/esm/fp/differenceInMinutes' {
+ import { differenceInMinutes } from 'date-fns/esm/fp'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/esm/fp/differenceInMonths' {
+ import { differenceInMonths } from 'date-fns/esm/fp'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/esm/fp/differenceInQuarters' {
+ import { differenceInQuarters } from 'date-fns/esm/fp'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/esm/fp/differenceInSeconds' {
+ import { differenceInSeconds } from 'date-fns/esm/fp'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/esm/fp/differenceInWeeks' {
+ import { differenceInWeeks } from 'date-fns/esm/fp'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInYears' {
+ import { differenceInYears } from 'date-fns/esm/fp'
+ export default differenceInYears
+}
+
+declare module 'date-fns/esm/fp/eachDayOfInterval' {
+ import { eachDayOfInterval } from 'date-fns/esm/fp'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachDayOfIntervalWithOptions' {
+ import { eachDayOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachDayOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachHourOfInterval' {
+ import { eachHourOfInterval } from 'date-fns/esm/fp'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachHourOfIntervalWithOptions' {
+ import { eachHourOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachHourOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachMinuteOfInterval' {
+ import { eachMinuteOfInterval } from 'date-fns/esm/fp'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachMinuteOfIntervalWithOptions' {
+ import { eachMinuteOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachMinuteOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachMonthOfInterval' {
+ import { eachMonthOfInterval } from 'date-fns/esm/fp'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachQuarterOfInterval' {
+ import { eachQuarterOfInterval } from 'date-fns/esm/fp'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachWeekendOfInterval' {
+ import { eachWeekendOfInterval } from 'date-fns/esm/fp'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachWeekendOfMonth' {
+ import { eachWeekendOfMonth } from 'date-fns/esm/fp'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/esm/fp/eachWeekendOfYear' {
+ import { eachWeekendOfYear } from 'date-fns/esm/fp'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/esm/fp/eachWeekOfInterval' {
+ import { eachWeekOfInterval } from 'date-fns/esm/fp'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachWeekOfIntervalWithOptions' {
+ import { eachWeekOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachWeekOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachYearOfInterval' {
+ import { eachYearOfInterval } from 'date-fns/esm/fp'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/esm/fp/endOfDay' {
+ import { endOfDay } from 'date-fns/esm/fp'
+ export default endOfDay
+}
+
+declare module 'date-fns/esm/fp/endOfDecade' {
+ import { endOfDecade } from 'date-fns/esm/fp'
+ export default endOfDecade
+}
+
+declare module 'date-fns/esm/fp/endOfDecadeWithOptions' {
+ import { endOfDecadeWithOptions } from 'date-fns/esm/fp'
+ export default endOfDecadeWithOptions
+}
+
+declare module 'date-fns/esm/fp/endOfHour' {
+ import { endOfHour } from 'date-fns/esm/fp'
+ export default endOfHour
+}
+
+declare module 'date-fns/esm/fp/endOfISOWeek' {
+ import { endOfISOWeek } from 'date-fns/esm/fp'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/esm/fp/endOfISOWeekYear' {
+ import { endOfISOWeekYear } from 'date-fns/esm/fp'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/endOfMinute' {
+ import { endOfMinute } from 'date-fns/esm/fp'
+ export default endOfMinute
+}
+
+declare module 'date-fns/esm/fp/endOfMonth' {
+ import { endOfMonth } from 'date-fns/esm/fp'
+ export default endOfMonth
+}
+
+declare module 'date-fns/esm/fp/endOfQuarter' {
+ import { endOfQuarter } from 'date-fns/esm/fp'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/esm/fp/endOfSecond' {
+ import { endOfSecond } from 'date-fns/esm/fp'
+ export default endOfSecond
+}
+
+declare module 'date-fns/esm/fp/endOfWeek' {
+ import { endOfWeek } from 'date-fns/esm/fp'
+ export default endOfWeek
+}
+
+declare module 'date-fns/esm/fp/endOfWeekWithOptions' {
+ import { endOfWeekWithOptions } from 'date-fns/esm/fp'
+ export default endOfWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/endOfYear' {
+ import { endOfYear } from 'date-fns/esm/fp'
+ export default endOfYear
+}
+
+declare module 'date-fns/esm/fp/format' {
+ import { format } from 'date-fns/esm/fp'
+ export default format
+}
+
+declare module 'date-fns/esm/fp/formatDistance' {
+ import { formatDistance } from 'date-fns/esm/fp'
+ export default formatDistance
+}
+
+declare module 'date-fns/esm/fp/formatDistanceStrict' {
+ import { formatDistanceStrict } from 'date-fns/esm/fp'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/esm/fp/formatDistanceStrictWithOptions' {
+ import { formatDistanceStrictWithOptions } from 'date-fns/esm/fp'
+ export default formatDistanceStrictWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatDistanceWithOptions' {
+ import { formatDistanceWithOptions } from 'date-fns/esm/fp'
+ export default formatDistanceWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatDuration' {
+ import { formatDuration } from 'date-fns/esm/fp'
+ export default formatDuration
+}
+
+declare module 'date-fns/esm/fp/formatDurationWithOptions' {
+ import { formatDurationWithOptions } from 'date-fns/esm/fp'
+ export default formatDurationWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatISO' {
+ import { formatISO } from 'date-fns/esm/fp'
+ export default formatISO
+}
+
+declare module 'date-fns/esm/fp/formatISO9075' {
+ import { formatISO9075 } from 'date-fns/esm/fp'
+ export default formatISO9075
+}
+
+declare module 'date-fns/esm/fp/formatISO9075WithOptions' {
+ import { formatISO9075WithOptions } from 'date-fns/esm/fp'
+ export default formatISO9075WithOptions
+}
+
+declare module 'date-fns/esm/fp/formatISODuration' {
+ import { formatISODuration } from 'date-fns/esm/fp'
+ export default formatISODuration
+}
+
+declare module 'date-fns/esm/fp/formatISOWithOptions' {
+ import { formatISOWithOptions } from 'date-fns/esm/fp'
+ export default formatISOWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatRelative' {
+ import { formatRelative } from 'date-fns/esm/fp'
+ export default formatRelative
+}
+
+declare module 'date-fns/esm/fp/formatRelativeWithOptions' {
+ import { formatRelativeWithOptions } from 'date-fns/esm/fp'
+ export default formatRelativeWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatRFC3339' {
+ import { formatRFC3339 } from 'date-fns/esm/fp'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/esm/fp/formatRFC3339WithOptions' {
+ import { formatRFC3339WithOptions } from 'date-fns/esm/fp'
+ export default formatRFC3339WithOptions
+}
+
+declare module 'date-fns/esm/fp/formatRFC7231' {
+ import { formatRFC7231 } from 'date-fns/esm/fp'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/esm/fp/formatWithOptions' {
+ import { formatWithOptions } from 'date-fns/esm/fp'
+ export default formatWithOptions
+}
+
+declare module 'date-fns/esm/fp/fromUnixTime' {
+ import { fromUnixTime } from 'date-fns/esm/fp'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/esm/fp/getDate' {
+ import { getDate } from 'date-fns/esm/fp'
+ export default getDate
+}
+
+declare module 'date-fns/esm/fp/getDay' {
+ import { getDay } from 'date-fns/esm/fp'
+ export default getDay
+}
+
+declare module 'date-fns/esm/fp/getDayOfYear' {
+ import { getDayOfYear } from 'date-fns/esm/fp'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/esm/fp/getDaysInMonth' {
+ import { getDaysInMonth } from 'date-fns/esm/fp'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/esm/fp/getDaysInYear' {
+ import { getDaysInYear } from 'date-fns/esm/fp'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/esm/fp/getDecade' {
+ import { getDecade } from 'date-fns/esm/fp'
+ export default getDecade
+}
+
+declare module 'date-fns/esm/fp/getHours' {
+ import { getHours } from 'date-fns/esm/fp'
+ export default getHours
+}
+
+declare module 'date-fns/esm/fp/getISODay' {
+ import { getISODay } from 'date-fns/esm/fp'
+ export default getISODay
+}
+
+declare module 'date-fns/esm/fp/getISOWeek' {
+ import { getISOWeek } from 'date-fns/esm/fp'
+ export default getISOWeek
+}
+
+declare module 'date-fns/esm/fp/getISOWeeksInYear' {
+ import { getISOWeeksInYear } from 'date-fns/esm/fp'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/esm/fp/getISOWeekYear' {
+ import { getISOWeekYear } from 'date-fns/esm/fp'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/getMilliseconds' {
+ import { getMilliseconds } from 'date-fns/esm/fp'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/esm/fp/getMinutes' {
+ import { getMinutes } from 'date-fns/esm/fp'
+ export default getMinutes
+}
+
+declare module 'date-fns/esm/fp/getMonth' {
+ import { getMonth } from 'date-fns/esm/fp'
+ export default getMonth
+}
+
+declare module 'date-fns/esm/fp/getOverlappingDaysInIntervals' {
+ import { getOverlappingDaysInIntervals } from 'date-fns/esm/fp'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/esm/fp/getQuarter' {
+ import { getQuarter } from 'date-fns/esm/fp'
+ export default getQuarter
+}
+
+declare module 'date-fns/esm/fp/getSeconds' {
+ import { getSeconds } from 'date-fns/esm/fp'
+ export default getSeconds
+}
+
+declare module 'date-fns/esm/fp/getTime' {
+ import { getTime } from 'date-fns/esm/fp'
+ export default getTime
+}
+
+declare module 'date-fns/esm/fp/getUnixTime' {
+ import { getUnixTime } from 'date-fns/esm/fp'
+ export default getUnixTime
+}
+
+declare module 'date-fns/esm/fp/getWeek' {
+ import { getWeek } from 'date-fns/esm/fp'
+ export default getWeek
+}
+
+declare module 'date-fns/esm/fp/getWeekOfMonth' {
+ import { getWeekOfMonth } from 'date-fns/esm/fp'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/esm/fp/getWeekOfMonthWithOptions' {
+ import { getWeekOfMonthWithOptions } from 'date-fns/esm/fp'
+ export default getWeekOfMonthWithOptions
+}
+
+declare module 'date-fns/esm/fp/getWeeksInMonth' {
+ import { getWeeksInMonth } from 'date-fns/esm/fp'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/esm/fp/getWeeksInMonthWithOptions' {
+ import { getWeeksInMonthWithOptions } from 'date-fns/esm/fp'
+ export default getWeeksInMonthWithOptions
+}
+
+declare module 'date-fns/esm/fp/getWeekWithOptions' {
+ import { getWeekWithOptions } from 'date-fns/esm/fp'
+ export default getWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/getWeekYear' {
+ import { getWeekYear } from 'date-fns/esm/fp'
+ export default getWeekYear
+}
+
+declare module 'date-fns/esm/fp/getWeekYearWithOptions' {
+ import { getWeekYearWithOptions } from 'date-fns/esm/fp'
+ export default getWeekYearWithOptions
+}
+
+declare module 'date-fns/esm/fp/getYear' {
+ import { getYear } from 'date-fns/esm/fp'
+ export default getYear
+}
+
+declare module 'date-fns/esm/fp/hoursToMilliseconds' {
+ import { hoursToMilliseconds } from 'date-fns/esm/fp'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/esm/fp/hoursToMinutes' {
+ import { hoursToMinutes } from 'date-fns/esm/fp'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/esm/fp/hoursToSeconds' {
+ import { hoursToSeconds } from 'date-fns/esm/fp'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/esm/fp/intervalToDuration' {
+ import { intervalToDuration } from 'date-fns/esm/fp'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/esm/fp/intlFormat' {
+ import { intlFormat } from 'date-fns/esm/fp'
+ export default intlFormat
+}
+
+declare module 'date-fns/esm/fp/isAfter' {
+ import { isAfter } from 'date-fns/esm/fp'
+ export default isAfter
+}
+
+declare module 'date-fns/esm/fp/isBefore' {
+ import { isBefore } from 'date-fns/esm/fp'
+ export default isBefore
+}
+
+declare module 'date-fns/esm/fp/isDate' {
+ import { isDate } from 'date-fns/esm/fp'
+ export default isDate
+}
+
+declare module 'date-fns/esm/fp/isEqual' {
+ import { isEqual } from 'date-fns/esm/fp'
+ export default isEqual
+}
+
+declare module 'date-fns/esm/fp/isExists' {
+ import { isExists } from 'date-fns/esm/fp'
+ export default isExists
+}
+
+declare module 'date-fns/esm/fp/isFirstDayOfMonth' {
+ import { isFirstDayOfMonth } from 'date-fns/esm/fp'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/esm/fp/isFriday' {
+ import { isFriday } from 'date-fns/esm/fp'
+ export default isFriday
+}
+
+declare module 'date-fns/esm/fp/isLastDayOfMonth' {
+ import { isLastDayOfMonth } from 'date-fns/esm/fp'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/esm/fp/isLeapYear' {
+ import { isLeapYear } from 'date-fns/esm/fp'
+ export default isLeapYear
+}
+
+declare module 'date-fns/esm/fp/isMatch' {
+ import { isMatch } from 'date-fns/esm/fp'
+ export default isMatch
+}
+
+declare module 'date-fns/esm/fp/isMatchWithOptions' {
+ import { isMatchWithOptions } from 'date-fns/esm/fp'
+ export default isMatchWithOptions
+}
+
+declare module 'date-fns/esm/fp/isMonday' {
+ import { isMonday } from 'date-fns/esm/fp'
+ export default isMonday
+}
+
+declare module 'date-fns/esm/fp/isSameDay' {
+ import { isSameDay } from 'date-fns/esm/fp'
+ export default isSameDay
+}
+
+declare module 'date-fns/esm/fp/isSameHour' {
+ import { isSameHour } from 'date-fns/esm/fp'
+ export default isSameHour
+}
+
+declare module 'date-fns/esm/fp/isSameISOWeek' {
+ import { isSameISOWeek } from 'date-fns/esm/fp'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/esm/fp/isSameISOWeekYear' {
+ import { isSameISOWeekYear } from 'date-fns/esm/fp'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/isSameMinute' {
+ import { isSameMinute } from 'date-fns/esm/fp'
+ export default isSameMinute
+}
+
+declare module 'date-fns/esm/fp/isSameMonth' {
+ import { isSameMonth } from 'date-fns/esm/fp'
+ export default isSameMonth
+}
+
+declare module 'date-fns/esm/fp/isSameQuarter' {
+ import { isSameQuarter } from 'date-fns/esm/fp'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/esm/fp/isSameSecond' {
+ import { isSameSecond } from 'date-fns/esm/fp'
+ export default isSameSecond
+}
+
+declare module 'date-fns/esm/fp/isSameWeek' {
+ import { isSameWeek } from 'date-fns/esm/fp'
+ export default isSameWeek
+}
+
+declare module 'date-fns/esm/fp/isSameWeekWithOptions' {
+ import { isSameWeekWithOptions } from 'date-fns/esm/fp'
+ export default isSameWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/isSameYear' {
+ import { isSameYear } from 'date-fns/esm/fp'
+ export default isSameYear
+}
+
+declare module 'date-fns/esm/fp/isSaturday' {
+ import { isSaturday } from 'date-fns/esm/fp'
+ export default isSaturday
+}
+
+declare module 'date-fns/esm/fp/isSunday' {
+ import { isSunday } from 'date-fns/esm/fp'
+ export default isSunday
+}
+
+declare module 'date-fns/esm/fp/isThursday' {
+ import { isThursday } from 'date-fns/esm/fp'
+ export default isThursday
+}
+
+declare module 'date-fns/esm/fp/isTuesday' {
+ import { isTuesday } from 'date-fns/esm/fp'
+ export default isTuesday
+}
+
+declare module 'date-fns/esm/fp/isValid' {
+ import { isValid } from 'date-fns/esm/fp'
+ export default isValid
+}
+
+declare module 'date-fns/esm/fp/isWednesday' {
+ import { isWednesday } from 'date-fns/esm/fp'
+ export default isWednesday
+}
+
+declare module 'date-fns/esm/fp/isWeekend' {
+ import { isWeekend } from 'date-fns/esm/fp'
+ export default isWeekend
+}
+
+declare module 'date-fns/esm/fp/isWithinInterval' {
+ import { isWithinInterval } from 'date-fns/esm/fp'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/esm/fp/lastDayOfDecade' {
+ import { lastDayOfDecade } from 'date-fns/esm/fp'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/esm/fp/lastDayOfISOWeek' {
+ import { lastDayOfISOWeek } from 'date-fns/esm/fp'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/esm/fp/lastDayOfISOWeekYear' {
+ import { lastDayOfISOWeekYear } from 'date-fns/esm/fp'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/lastDayOfMonth' {
+ import { lastDayOfMonth } from 'date-fns/esm/fp'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/esm/fp/lastDayOfQuarter' {
+ import { lastDayOfQuarter } from 'date-fns/esm/fp'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/esm/fp/lastDayOfQuarterWithOptions' {
+ import { lastDayOfQuarterWithOptions } from 'date-fns/esm/fp'
+ export default lastDayOfQuarterWithOptions
+}
+
+declare module 'date-fns/esm/fp/lastDayOfWeek' {
+ import { lastDayOfWeek } from 'date-fns/esm/fp'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/esm/fp/lastDayOfWeekWithOptions' {
+ import { lastDayOfWeekWithOptions } from 'date-fns/esm/fp'
+ export default lastDayOfWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/lastDayOfYear' {
+ import { lastDayOfYear } from 'date-fns/esm/fp'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/esm/fp/lightFormat' {
+ import { lightFormat } from 'date-fns/esm/fp'
+ export default lightFormat
+}
+
+declare module 'date-fns/esm/fp/max' {
+ import { max } from 'date-fns/esm/fp'
+ export default max
+}
+
+declare module 'date-fns/esm/fp/milliseconds' {
+ import { milliseconds } from 'date-fns/esm/fp'
+ export default milliseconds
+}
+
+declare module 'date-fns/esm/fp/millisecondsToHours' {
+ import { millisecondsToHours } from 'date-fns/esm/fp'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/esm/fp/millisecondsToMinutes' {
+ import { millisecondsToMinutes } from 'date-fns/esm/fp'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/esm/fp/millisecondsToSeconds' {
+ import { millisecondsToSeconds } from 'date-fns/esm/fp'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/esm/fp/min' {
+ import { min } from 'date-fns/esm/fp'
+ export default min
+}
+
+declare module 'date-fns/esm/fp/minutesToHours' {
+ import { minutesToHours } from 'date-fns/esm/fp'
+ export default minutesToHours
+}
+
+declare module 'date-fns/esm/fp/minutesToMilliseconds' {
+ import { minutesToMilliseconds } from 'date-fns/esm/fp'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/esm/fp/minutesToSeconds' {
+ import { minutesToSeconds } from 'date-fns/esm/fp'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/esm/fp/monthsToQuarters' {
+ import { monthsToQuarters } from 'date-fns/esm/fp'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/esm/fp/monthsToYears' {
+ import { monthsToYears } from 'date-fns/esm/fp'
+ export default monthsToYears
+}
+
+declare module 'date-fns/esm/fp/nextDay' {
+ import { nextDay } from 'date-fns/esm/fp'
+ export default nextDay
+}
+
+declare module 'date-fns/esm/fp/nextFriday' {
+ import { nextFriday } from 'date-fns/esm/fp'
+ export default nextFriday
+}
+
+declare module 'date-fns/esm/fp/nextMonday' {
+ import { nextMonday } from 'date-fns/esm/fp'
+ export default nextMonday
+}
+
+declare module 'date-fns/esm/fp/nextSaturday' {
+ import { nextSaturday } from 'date-fns/esm/fp'
+ export default nextSaturday
+}
+
+declare module 'date-fns/esm/fp/nextSunday' {
+ import { nextSunday } from 'date-fns/esm/fp'
+ export default nextSunday
+}
+
+declare module 'date-fns/esm/fp/nextThursday' {
+ import { nextThursday } from 'date-fns/esm/fp'
+ export default nextThursday
+}
+
+declare module 'date-fns/esm/fp/nextTuesday' {
+ import { nextTuesday } from 'date-fns/esm/fp'
+ export default nextTuesday
+}
+
+declare module 'date-fns/esm/fp/nextWednesday' {
+ import { nextWednesday } from 'date-fns/esm/fp'
+ export default nextWednesday
+}
+
+declare module 'date-fns/esm/fp/parse' {
+ import { parse } from 'date-fns/esm/fp'
+ export default parse
+}
+
+declare module 'date-fns/esm/fp/parseISO' {
+ import { parseISO } from 'date-fns/esm/fp'
+ export default parseISO
+}
+
+declare module 'date-fns/esm/fp/parseISOWithOptions' {
+ import { parseISOWithOptions } from 'date-fns/esm/fp'
+ export default parseISOWithOptions
+}
+
+declare module 'date-fns/esm/fp/parseJSON' {
+ import { parseJSON } from 'date-fns/esm/fp'
+ export default parseJSON
+}
+
+declare module 'date-fns/esm/fp/parseWithOptions' {
+ import { parseWithOptions } from 'date-fns/esm/fp'
+ export default parseWithOptions
+}
+
+declare module 'date-fns/esm/fp/quartersToMonths' {
+ import { quartersToMonths } from 'date-fns/esm/fp'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/esm/fp/quartersToYears' {
+ import { quartersToYears } from 'date-fns/esm/fp'
+ export default quartersToYears
+}
+
+declare module 'date-fns/esm/fp/roundToNearestMinutes' {
+ import { roundToNearestMinutes } from 'date-fns/esm/fp'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/esm/fp/roundToNearestMinutesWithOptions' {
+ import { roundToNearestMinutesWithOptions } from 'date-fns/esm/fp'
+ export default roundToNearestMinutesWithOptions
+}
+
+declare module 'date-fns/esm/fp/secondsToHours' {
+ import { secondsToHours } from 'date-fns/esm/fp'
+ export default secondsToHours
+}
+
+declare module 'date-fns/esm/fp/secondsToMilliseconds' {
+ import { secondsToMilliseconds } from 'date-fns/esm/fp'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/esm/fp/secondsToMinutes' {
+ import { secondsToMinutes } from 'date-fns/esm/fp'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/esm/fp/set' {
+ import { set } from 'date-fns/esm/fp'
+ export default set
+}
+
+declare module 'date-fns/esm/fp/setDate' {
+ import { setDate } from 'date-fns/esm/fp'
+ export default setDate
+}
+
+declare module 'date-fns/esm/fp/setDay' {
+ import { setDay } from 'date-fns/esm/fp'
+ export default setDay
+}
+
+declare module 'date-fns/esm/fp/setDayOfYear' {
+ import { setDayOfYear } from 'date-fns/esm/fp'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/esm/fp/setDayWithOptions' {
+ import { setDayWithOptions } from 'date-fns/esm/fp'
+ export default setDayWithOptions
+}
+
+declare module 'date-fns/esm/fp/setHours' {
+ import { setHours } from 'date-fns/esm/fp'
+ export default setHours
+}
+
+declare module 'date-fns/esm/fp/setISODay' {
+ import { setISODay } from 'date-fns/esm/fp'
+ export default setISODay
+}
+
+declare module 'date-fns/esm/fp/setISOWeek' {
+ import { setISOWeek } from 'date-fns/esm/fp'
+ export default setISOWeek
+}
+
+declare module 'date-fns/esm/fp/setISOWeekYear' {
+ import { setISOWeekYear } from 'date-fns/esm/fp'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/setMilliseconds' {
+ import { setMilliseconds } from 'date-fns/esm/fp'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/esm/fp/setMinutes' {
+ import { setMinutes } from 'date-fns/esm/fp'
+ export default setMinutes
+}
+
+declare module 'date-fns/esm/fp/setMonth' {
+ import { setMonth } from 'date-fns/esm/fp'
+ export default setMonth
+}
+
+declare module 'date-fns/esm/fp/setQuarter' {
+ import { setQuarter } from 'date-fns/esm/fp'
+ export default setQuarter
+}
+
+declare module 'date-fns/esm/fp/setSeconds' {
+ import { setSeconds } from 'date-fns/esm/fp'
+ export default setSeconds
+}
+
+declare module 'date-fns/esm/fp/setWeek' {
+ import { setWeek } from 'date-fns/esm/fp'
+ export default setWeek
+}
+
+declare module 'date-fns/esm/fp/setWeekWithOptions' {
+ import { setWeekWithOptions } from 'date-fns/esm/fp'
+ export default setWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/setWeekYear' {
+ import { setWeekYear } from 'date-fns/esm/fp'
+ export default setWeekYear
+}
+
+declare module 'date-fns/esm/fp/setWeekYearWithOptions' {
+ import { setWeekYearWithOptions } from 'date-fns/esm/fp'
+ export default setWeekYearWithOptions
+}
+
+declare module 'date-fns/esm/fp/setYear' {
+ import { setYear } from 'date-fns/esm/fp'
+ export default setYear
+}
+
+declare module 'date-fns/esm/fp/startOfDay' {
+ import { startOfDay } from 'date-fns/esm/fp'
+ export default startOfDay
+}
+
+declare module 'date-fns/esm/fp/startOfDecade' {
+ import { startOfDecade } from 'date-fns/esm/fp'
+ export default startOfDecade
+}
+
+declare module 'date-fns/esm/fp/startOfHour' {
+ import { startOfHour } from 'date-fns/esm/fp'
+ export default startOfHour
+}
+
+declare module 'date-fns/esm/fp/startOfISOWeek' {
+ import { startOfISOWeek } from 'date-fns/esm/fp'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/esm/fp/startOfISOWeekYear' {
+ import { startOfISOWeekYear } from 'date-fns/esm/fp'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/startOfMinute' {
+ import { startOfMinute } from 'date-fns/esm/fp'
+ export default startOfMinute
+}
+
+declare module 'date-fns/esm/fp/startOfMonth' {
+ import { startOfMonth } from 'date-fns/esm/fp'
+ export default startOfMonth
+}
+
+declare module 'date-fns/esm/fp/startOfQuarter' {
+ import { startOfQuarter } from 'date-fns/esm/fp'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/esm/fp/startOfSecond' {
+ import { startOfSecond } from 'date-fns/esm/fp'
+ export default startOfSecond
+}
+
+declare module 'date-fns/esm/fp/startOfWeek' {
+ import { startOfWeek } from 'date-fns/esm/fp'
+ export default startOfWeek
+}
+
+declare module 'date-fns/esm/fp/startOfWeekWithOptions' {
+ import { startOfWeekWithOptions } from 'date-fns/esm/fp'
+ export default startOfWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/startOfWeekYear' {
+ import { startOfWeekYear } from 'date-fns/esm/fp'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/esm/fp/startOfWeekYearWithOptions' {
+ import { startOfWeekYearWithOptions } from 'date-fns/esm/fp'
+ export default startOfWeekYearWithOptions
+}
+
+declare module 'date-fns/esm/fp/startOfYear' {
+ import { startOfYear } from 'date-fns/esm/fp'
+ export default startOfYear
+}
+
+declare module 'date-fns/esm/fp/sub' {
+ import { sub } from 'date-fns/esm/fp'
+ export default sub
+}
+
+declare module 'date-fns/esm/fp/subBusinessDays' {
+ import { subBusinessDays } from 'date-fns/esm/fp'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/esm/fp/subDays' {
+ import { subDays } from 'date-fns/esm/fp'
+ export default subDays
+}
+
+declare module 'date-fns/esm/fp/subHours' {
+ import { subHours } from 'date-fns/esm/fp'
+ export default subHours
+}
+
+declare module 'date-fns/esm/fp/subISOWeekYears' {
+ import { subISOWeekYears } from 'date-fns/esm/fp'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/subMilliseconds' {
+ import { subMilliseconds } from 'date-fns/esm/fp'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/esm/fp/subMinutes' {
+ import { subMinutes } from 'date-fns/esm/fp'
+ export default subMinutes
+}
+
+declare module 'date-fns/esm/fp/subMonths' {
+ import { subMonths } from 'date-fns/esm/fp'
+ export default subMonths
+}
+
+declare module 'date-fns/esm/fp/subQuarters' {
+ import { subQuarters } from 'date-fns/esm/fp'
+ export default subQuarters
+}
+
+declare module 'date-fns/esm/fp/subSeconds' {
+ import { subSeconds } from 'date-fns/esm/fp'
+ export default subSeconds
+}
+
+declare module 'date-fns/esm/fp/subWeeks' {
+ import { subWeeks } from 'date-fns/esm/fp'
+ export default subWeeks
+}
+
+declare module 'date-fns/esm/fp/subYears' {
+ import { subYears } from 'date-fns/esm/fp'
+ export default subYears
+}
+
+declare module 'date-fns/esm/fp/toDate' {
+ import { toDate } from 'date-fns/esm/fp'
+ export default toDate
+}
+
+declare module 'date-fns/esm/fp/weeksToDays' {
+ import { weeksToDays } from 'date-fns/esm/fp'
+ export default weeksToDays
+}
+
+declare module 'date-fns/esm/fp/yearsToMonths' {
+ import { yearsToMonths } from 'date-fns/esm/fp'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/esm/fp/yearsToQuarters' {
+ import { yearsToQuarters } from 'date-fns/esm/fp'
+ export default yearsToQuarters
+}
+
+declare module 'date-fns/esm/fp/add/index' {
+ import { add } from 'date-fns/esm/fp'
+ export default add
+}
+
+declare module 'date-fns/esm/fp/addBusinessDays/index' {
+ import { addBusinessDays } from 'date-fns/esm/fp'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/esm/fp/addDays/index' {
+ import { addDays } from 'date-fns/esm/fp'
+ export default addDays
+}
+
+declare module 'date-fns/esm/fp/addHours/index' {
+ import { addHours } from 'date-fns/esm/fp'
+ export default addHours
+}
+
+declare module 'date-fns/esm/fp/addISOWeekYears/index' {
+ import { addISOWeekYears } from 'date-fns/esm/fp'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/addMilliseconds/index' {
+ import { addMilliseconds } from 'date-fns/esm/fp'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/esm/fp/addMinutes/index' {
+ import { addMinutes } from 'date-fns/esm/fp'
+ export default addMinutes
+}
+
+declare module 'date-fns/esm/fp/addMonths/index' {
+ import { addMonths } from 'date-fns/esm/fp'
+ export default addMonths
+}
+
+declare module 'date-fns/esm/fp/addQuarters/index' {
+ import { addQuarters } from 'date-fns/esm/fp'
+ export default addQuarters
+}
+
+declare module 'date-fns/esm/fp/addSeconds/index' {
+ import { addSeconds } from 'date-fns/esm/fp'
+ export default addSeconds
+}
+
+declare module 'date-fns/esm/fp/addWeeks/index' {
+ import { addWeeks } from 'date-fns/esm/fp'
+ export default addWeeks
+}
+
+declare module 'date-fns/esm/fp/addYears/index' {
+ import { addYears } from 'date-fns/esm/fp'
+ export default addYears
+}
+
+declare module 'date-fns/esm/fp/areIntervalsOverlapping/index' {
+ import { areIntervalsOverlapping } from 'date-fns/esm/fp'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/esm/fp/areIntervalsOverlappingWithOptions/index' {
+ import { areIntervalsOverlappingWithOptions } from 'date-fns/esm/fp'
+ export default areIntervalsOverlappingWithOptions
+}
+
+declare module 'date-fns/esm/fp/closestIndexTo/index' {
+ import { closestIndexTo } from 'date-fns/esm/fp'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/esm/fp/closestTo/index' {
+ import { closestTo } from 'date-fns/esm/fp'
+ export default closestTo
+}
+
+declare module 'date-fns/esm/fp/compareAsc/index' {
+ import { compareAsc } from 'date-fns/esm/fp'
+ export default compareAsc
+}
+
+declare module 'date-fns/esm/fp/compareDesc/index' {
+ import { compareDesc } from 'date-fns/esm/fp'
+ export default compareDesc
+}
+
+declare module 'date-fns/esm/fp/daysToWeeks/index' {
+ import { daysToWeeks } from 'date-fns/esm/fp'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInBusinessDays/index' {
+ import { differenceInBusinessDays } from 'date-fns/esm/fp'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarDays/index' {
+ import { differenceInCalendarDays } from 'date-fns/esm/fp'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarISOWeeks/index' {
+ import { differenceInCalendarISOWeeks } from 'date-fns/esm/fp'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarISOWeekYears/index' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns/esm/fp'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarMonths/index' {
+ import { differenceInCalendarMonths } from 'date-fns/esm/fp'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarQuarters/index' {
+ import { differenceInCalendarQuarters } from 'date-fns/esm/fp'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarWeeks/index' {
+ import { differenceInCalendarWeeks } from 'date-fns/esm/fp'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarWeeksWithOptions/index' {
+ import { differenceInCalendarWeeksWithOptions } from 'date-fns/esm/fp'
+ export default differenceInCalendarWeeksWithOptions
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarYears/index' {
+ import { differenceInCalendarYears } from 'date-fns/esm/fp'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/esm/fp/differenceInDays/index' {
+ import { differenceInDays } from 'date-fns/esm/fp'
+ export default differenceInDays
+}
+
+declare module 'date-fns/esm/fp/differenceInHours/index' {
+ import { differenceInHours } from 'date-fns/esm/fp'
+ export default differenceInHours
+}
+
+declare module 'date-fns/esm/fp/differenceInISOWeekYears/index' {
+ import { differenceInISOWeekYears } from 'date-fns/esm/fp'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/differenceInMilliseconds/index' {
+ import { differenceInMilliseconds } from 'date-fns/esm/fp'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/esm/fp/differenceInMinutes/index' {
+ import { differenceInMinutes } from 'date-fns/esm/fp'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/esm/fp/differenceInMonths/index' {
+ import { differenceInMonths } from 'date-fns/esm/fp'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/esm/fp/differenceInQuarters/index' {
+ import { differenceInQuarters } from 'date-fns/esm/fp'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/esm/fp/differenceInSeconds/index' {
+ import { differenceInSeconds } from 'date-fns/esm/fp'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/esm/fp/differenceInWeeks/index' {
+ import { differenceInWeeks } from 'date-fns/esm/fp'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInYears/index' {
+ import { differenceInYears } from 'date-fns/esm/fp'
+ export default differenceInYears
+}
+
+declare module 'date-fns/esm/fp/eachDayOfInterval/index' {
+ import { eachDayOfInterval } from 'date-fns/esm/fp'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachDayOfIntervalWithOptions/index' {
+ import { eachDayOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachDayOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachHourOfInterval/index' {
+ import { eachHourOfInterval } from 'date-fns/esm/fp'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachHourOfIntervalWithOptions/index' {
+ import { eachHourOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachHourOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachMinuteOfInterval/index' {
+ import { eachMinuteOfInterval } from 'date-fns/esm/fp'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachMinuteOfIntervalWithOptions/index' {
+ import { eachMinuteOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachMinuteOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachMonthOfInterval/index' {
+ import { eachMonthOfInterval } from 'date-fns/esm/fp'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachQuarterOfInterval/index' {
+ import { eachQuarterOfInterval } from 'date-fns/esm/fp'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachWeekendOfInterval/index' {
+ import { eachWeekendOfInterval } from 'date-fns/esm/fp'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachWeekendOfMonth/index' {
+ import { eachWeekendOfMonth } from 'date-fns/esm/fp'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/esm/fp/eachWeekendOfYear/index' {
+ import { eachWeekendOfYear } from 'date-fns/esm/fp'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/esm/fp/eachWeekOfInterval/index' {
+ import { eachWeekOfInterval } from 'date-fns/esm/fp'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachWeekOfIntervalWithOptions/index' {
+ import { eachWeekOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachWeekOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachYearOfInterval/index' {
+ import { eachYearOfInterval } from 'date-fns/esm/fp'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/esm/fp/endOfDay/index' {
+ import { endOfDay } from 'date-fns/esm/fp'
+ export default endOfDay
+}
+
+declare module 'date-fns/esm/fp/endOfDecade/index' {
+ import { endOfDecade } from 'date-fns/esm/fp'
+ export default endOfDecade
+}
+
+declare module 'date-fns/esm/fp/endOfDecadeWithOptions/index' {
+ import { endOfDecadeWithOptions } from 'date-fns/esm/fp'
+ export default endOfDecadeWithOptions
+}
+
+declare module 'date-fns/esm/fp/endOfHour/index' {
+ import { endOfHour } from 'date-fns/esm/fp'
+ export default endOfHour
+}
+
+declare module 'date-fns/esm/fp/endOfISOWeek/index' {
+ import { endOfISOWeek } from 'date-fns/esm/fp'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/esm/fp/endOfISOWeekYear/index' {
+ import { endOfISOWeekYear } from 'date-fns/esm/fp'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/endOfMinute/index' {
+ import { endOfMinute } from 'date-fns/esm/fp'
+ export default endOfMinute
+}
+
+declare module 'date-fns/esm/fp/endOfMonth/index' {
+ import { endOfMonth } from 'date-fns/esm/fp'
+ export default endOfMonth
+}
+
+declare module 'date-fns/esm/fp/endOfQuarter/index' {
+ import { endOfQuarter } from 'date-fns/esm/fp'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/esm/fp/endOfSecond/index' {
+ import { endOfSecond } from 'date-fns/esm/fp'
+ export default endOfSecond
+}
+
+declare module 'date-fns/esm/fp/endOfWeek/index' {
+ import { endOfWeek } from 'date-fns/esm/fp'
+ export default endOfWeek
+}
+
+declare module 'date-fns/esm/fp/endOfWeekWithOptions/index' {
+ import { endOfWeekWithOptions } from 'date-fns/esm/fp'
+ export default endOfWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/endOfYear/index' {
+ import { endOfYear } from 'date-fns/esm/fp'
+ export default endOfYear
+}
+
+declare module 'date-fns/esm/fp/format/index' {
+ import { format } from 'date-fns/esm/fp'
+ export default format
+}
+
+declare module 'date-fns/esm/fp/formatDistance/index' {
+ import { formatDistance } from 'date-fns/esm/fp'
+ export default formatDistance
+}
+
+declare module 'date-fns/esm/fp/formatDistanceStrict/index' {
+ import { formatDistanceStrict } from 'date-fns/esm/fp'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/esm/fp/formatDistanceStrictWithOptions/index' {
+ import { formatDistanceStrictWithOptions } from 'date-fns/esm/fp'
+ export default formatDistanceStrictWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatDistanceWithOptions/index' {
+ import { formatDistanceWithOptions } from 'date-fns/esm/fp'
+ export default formatDistanceWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatDuration/index' {
+ import { formatDuration } from 'date-fns/esm/fp'
+ export default formatDuration
+}
+
+declare module 'date-fns/esm/fp/formatDurationWithOptions/index' {
+ import { formatDurationWithOptions } from 'date-fns/esm/fp'
+ export default formatDurationWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatISO/index' {
+ import { formatISO } from 'date-fns/esm/fp'
+ export default formatISO
+}
+
+declare module 'date-fns/esm/fp/formatISO9075/index' {
+ import { formatISO9075 } from 'date-fns/esm/fp'
+ export default formatISO9075
+}
+
+declare module 'date-fns/esm/fp/formatISO9075WithOptions/index' {
+ import { formatISO9075WithOptions } from 'date-fns/esm/fp'
+ export default formatISO9075WithOptions
+}
+
+declare module 'date-fns/esm/fp/formatISODuration/index' {
+ import { formatISODuration } from 'date-fns/esm/fp'
+ export default formatISODuration
+}
+
+declare module 'date-fns/esm/fp/formatISOWithOptions/index' {
+ import { formatISOWithOptions } from 'date-fns/esm/fp'
+ export default formatISOWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatRelative/index' {
+ import { formatRelative } from 'date-fns/esm/fp'
+ export default formatRelative
+}
+
+declare module 'date-fns/esm/fp/formatRelativeWithOptions/index' {
+ import { formatRelativeWithOptions } from 'date-fns/esm/fp'
+ export default formatRelativeWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatRFC3339/index' {
+ import { formatRFC3339 } from 'date-fns/esm/fp'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/esm/fp/formatRFC3339WithOptions/index' {
+ import { formatRFC3339WithOptions } from 'date-fns/esm/fp'
+ export default formatRFC3339WithOptions
+}
+
+declare module 'date-fns/esm/fp/formatRFC7231/index' {
+ import { formatRFC7231 } from 'date-fns/esm/fp'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/esm/fp/formatWithOptions/index' {
+ import { formatWithOptions } from 'date-fns/esm/fp'
+ export default formatWithOptions
+}
+
+declare module 'date-fns/esm/fp/fromUnixTime/index' {
+ import { fromUnixTime } from 'date-fns/esm/fp'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/esm/fp/getDate/index' {
+ import { getDate } from 'date-fns/esm/fp'
+ export default getDate
+}
+
+declare module 'date-fns/esm/fp/getDay/index' {
+ import { getDay } from 'date-fns/esm/fp'
+ export default getDay
+}
+
+declare module 'date-fns/esm/fp/getDayOfYear/index' {
+ import { getDayOfYear } from 'date-fns/esm/fp'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/esm/fp/getDaysInMonth/index' {
+ import { getDaysInMonth } from 'date-fns/esm/fp'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/esm/fp/getDaysInYear/index' {
+ import { getDaysInYear } from 'date-fns/esm/fp'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/esm/fp/getDecade/index' {
+ import { getDecade } from 'date-fns/esm/fp'
+ export default getDecade
+}
+
+declare module 'date-fns/esm/fp/getHours/index' {
+ import { getHours } from 'date-fns/esm/fp'
+ export default getHours
+}
+
+declare module 'date-fns/esm/fp/getISODay/index' {
+ import { getISODay } from 'date-fns/esm/fp'
+ export default getISODay
+}
+
+declare module 'date-fns/esm/fp/getISOWeek/index' {
+ import { getISOWeek } from 'date-fns/esm/fp'
+ export default getISOWeek
+}
+
+declare module 'date-fns/esm/fp/getISOWeeksInYear/index' {
+ import { getISOWeeksInYear } from 'date-fns/esm/fp'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/esm/fp/getISOWeekYear/index' {
+ import { getISOWeekYear } from 'date-fns/esm/fp'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/getMilliseconds/index' {
+ import { getMilliseconds } from 'date-fns/esm/fp'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/esm/fp/getMinutes/index' {
+ import { getMinutes } from 'date-fns/esm/fp'
+ export default getMinutes
+}
+
+declare module 'date-fns/esm/fp/getMonth/index' {
+ import { getMonth } from 'date-fns/esm/fp'
+ export default getMonth
+}
+
+declare module 'date-fns/esm/fp/getOverlappingDaysInIntervals/index' {
+ import { getOverlappingDaysInIntervals } from 'date-fns/esm/fp'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/esm/fp/getQuarter/index' {
+ import { getQuarter } from 'date-fns/esm/fp'
+ export default getQuarter
+}
+
+declare module 'date-fns/esm/fp/getSeconds/index' {
+ import { getSeconds } from 'date-fns/esm/fp'
+ export default getSeconds
+}
+
+declare module 'date-fns/esm/fp/getTime/index' {
+ import { getTime } from 'date-fns/esm/fp'
+ export default getTime
+}
+
+declare module 'date-fns/esm/fp/getUnixTime/index' {
+ import { getUnixTime } from 'date-fns/esm/fp'
+ export default getUnixTime
+}
+
+declare module 'date-fns/esm/fp/getWeek/index' {
+ import { getWeek } from 'date-fns/esm/fp'
+ export default getWeek
+}
+
+declare module 'date-fns/esm/fp/getWeekOfMonth/index' {
+ import { getWeekOfMonth } from 'date-fns/esm/fp'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/esm/fp/getWeekOfMonthWithOptions/index' {
+ import { getWeekOfMonthWithOptions } from 'date-fns/esm/fp'
+ export default getWeekOfMonthWithOptions
+}
+
+declare module 'date-fns/esm/fp/getWeeksInMonth/index' {
+ import { getWeeksInMonth } from 'date-fns/esm/fp'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/esm/fp/getWeeksInMonthWithOptions/index' {
+ import { getWeeksInMonthWithOptions } from 'date-fns/esm/fp'
+ export default getWeeksInMonthWithOptions
+}
+
+declare module 'date-fns/esm/fp/getWeekWithOptions/index' {
+ import { getWeekWithOptions } from 'date-fns/esm/fp'
+ export default getWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/getWeekYear/index' {
+ import { getWeekYear } from 'date-fns/esm/fp'
+ export default getWeekYear
+}
+
+declare module 'date-fns/esm/fp/getWeekYearWithOptions/index' {
+ import { getWeekYearWithOptions } from 'date-fns/esm/fp'
+ export default getWeekYearWithOptions
+}
+
+declare module 'date-fns/esm/fp/getYear/index' {
+ import { getYear } from 'date-fns/esm/fp'
+ export default getYear
+}
+
+declare module 'date-fns/esm/fp/hoursToMilliseconds/index' {
+ import { hoursToMilliseconds } from 'date-fns/esm/fp'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/esm/fp/hoursToMinutes/index' {
+ import { hoursToMinutes } from 'date-fns/esm/fp'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/esm/fp/hoursToSeconds/index' {
+ import { hoursToSeconds } from 'date-fns/esm/fp'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/esm/fp/intervalToDuration/index' {
+ import { intervalToDuration } from 'date-fns/esm/fp'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/esm/fp/intlFormat/index' {
+ import { intlFormat } from 'date-fns/esm/fp'
+ export default intlFormat
+}
+
+declare module 'date-fns/esm/fp/isAfter/index' {
+ import { isAfter } from 'date-fns/esm/fp'
+ export default isAfter
+}
+
+declare module 'date-fns/esm/fp/isBefore/index' {
+ import { isBefore } from 'date-fns/esm/fp'
+ export default isBefore
+}
+
+declare module 'date-fns/esm/fp/isDate/index' {
+ import { isDate } from 'date-fns/esm/fp'
+ export default isDate
+}
+
+declare module 'date-fns/esm/fp/isEqual/index' {
+ import { isEqual } from 'date-fns/esm/fp'
+ export default isEqual
+}
+
+declare module 'date-fns/esm/fp/isExists/index' {
+ import { isExists } from 'date-fns/esm/fp'
+ export default isExists
+}
+
+declare module 'date-fns/esm/fp/isFirstDayOfMonth/index' {
+ import { isFirstDayOfMonth } from 'date-fns/esm/fp'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/esm/fp/isFriday/index' {
+ import { isFriday } from 'date-fns/esm/fp'
+ export default isFriday
+}
+
+declare module 'date-fns/esm/fp/isLastDayOfMonth/index' {
+ import { isLastDayOfMonth } from 'date-fns/esm/fp'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/esm/fp/isLeapYear/index' {
+ import { isLeapYear } from 'date-fns/esm/fp'
+ export default isLeapYear
+}
+
+declare module 'date-fns/esm/fp/isMatch/index' {
+ import { isMatch } from 'date-fns/esm/fp'
+ export default isMatch
+}
+
+declare module 'date-fns/esm/fp/isMatchWithOptions/index' {
+ import { isMatchWithOptions } from 'date-fns/esm/fp'
+ export default isMatchWithOptions
+}
+
+declare module 'date-fns/esm/fp/isMonday/index' {
+ import { isMonday } from 'date-fns/esm/fp'
+ export default isMonday
+}
+
+declare module 'date-fns/esm/fp/isSameDay/index' {
+ import { isSameDay } from 'date-fns/esm/fp'
+ export default isSameDay
+}
+
+declare module 'date-fns/esm/fp/isSameHour/index' {
+ import { isSameHour } from 'date-fns/esm/fp'
+ export default isSameHour
+}
+
+declare module 'date-fns/esm/fp/isSameISOWeek/index' {
+ import { isSameISOWeek } from 'date-fns/esm/fp'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/esm/fp/isSameISOWeekYear/index' {
+ import { isSameISOWeekYear } from 'date-fns/esm/fp'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/isSameMinute/index' {
+ import { isSameMinute } from 'date-fns/esm/fp'
+ export default isSameMinute
+}
+
+declare module 'date-fns/esm/fp/isSameMonth/index' {
+ import { isSameMonth } from 'date-fns/esm/fp'
+ export default isSameMonth
+}
+
+declare module 'date-fns/esm/fp/isSameQuarter/index' {
+ import { isSameQuarter } from 'date-fns/esm/fp'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/esm/fp/isSameSecond/index' {
+ import { isSameSecond } from 'date-fns/esm/fp'
+ export default isSameSecond
+}
+
+declare module 'date-fns/esm/fp/isSameWeek/index' {
+ import { isSameWeek } from 'date-fns/esm/fp'
+ export default isSameWeek
+}
+
+declare module 'date-fns/esm/fp/isSameWeekWithOptions/index' {
+ import { isSameWeekWithOptions } from 'date-fns/esm/fp'
+ export default isSameWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/isSameYear/index' {
+ import { isSameYear } from 'date-fns/esm/fp'
+ export default isSameYear
+}
+
+declare module 'date-fns/esm/fp/isSaturday/index' {
+ import { isSaturday } from 'date-fns/esm/fp'
+ export default isSaturday
+}
+
+declare module 'date-fns/esm/fp/isSunday/index' {
+ import { isSunday } from 'date-fns/esm/fp'
+ export default isSunday
+}
+
+declare module 'date-fns/esm/fp/isThursday/index' {
+ import { isThursday } from 'date-fns/esm/fp'
+ export default isThursday
+}
+
+declare module 'date-fns/esm/fp/isTuesday/index' {
+ import { isTuesday } from 'date-fns/esm/fp'
+ export default isTuesday
+}
+
+declare module 'date-fns/esm/fp/isValid/index' {
+ import { isValid } from 'date-fns/esm/fp'
+ export default isValid
+}
+
+declare module 'date-fns/esm/fp/isWednesday/index' {
+ import { isWednesday } from 'date-fns/esm/fp'
+ export default isWednesday
+}
+
+declare module 'date-fns/esm/fp/isWeekend/index' {
+ import { isWeekend } from 'date-fns/esm/fp'
+ export default isWeekend
+}
+
+declare module 'date-fns/esm/fp/isWithinInterval/index' {
+ import { isWithinInterval } from 'date-fns/esm/fp'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/esm/fp/lastDayOfDecade/index' {
+ import { lastDayOfDecade } from 'date-fns/esm/fp'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/esm/fp/lastDayOfISOWeek/index' {
+ import { lastDayOfISOWeek } from 'date-fns/esm/fp'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/esm/fp/lastDayOfISOWeekYear/index' {
+ import { lastDayOfISOWeekYear } from 'date-fns/esm/fp'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/lastDayOfMonth/index' {
+ import { lastDayOfMonth } from 'date-fns/esm/fp'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/esm/fp/lastDayOfQuarter/index' {
+ import { lastDayOfQuarter } from 'date-fns/esm/fp'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/esm/fp/lastDayOfQuarterWithOptions/index' {
+ import { lastDayOfQuarterWithOptions } from 'date-fns/esm/fp'
+ export default lastDayOfQuarterWithOptions
+}
+
+declare module 'date-fns/esm/fp/lastDayOfWeek/index' {
+ import { lastDayOfWeek } from 'date-fns/esm/fp'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/esm/fp/lastDayOfWeekWithOptions/index' {
+ import { lastDayOfWeekWithOptions } from 'date-fns/esm/fp'
+ export default lastDayOfWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/lastDayOfYear/index' {
+ import { lastDayOfYear } from 'date-fns/esm/fp'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/esm/fp/lightFormat/index' {
+ import { lightFormat } from 'date-fns/esm/fp'
+ export default lightFormat
+}
+
+declare module 'date-fns/esm/fp/max/index' {
+ import { max } from 'date-fns/esm/fp'
+ export default max
+}
+
+declare module 'date-fns/esm/fp/milliseconds/index' {
+ import { milliseconds } from 'date-fns/esm/fp'
+ export default milliseconds
+}
+
+declare module 'date-fns/esm/fp/millisecondsToHours/index' {
+ import { millisecondsToHours } from 'date-fns/esm/fp'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/esm/fp/millisecondsToMinutes/index' {
+ import { millisecondsToMinutes } from 'date-fns/esm/fp'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/esm/fp/millisecondsToSeconds/index' {
+ import { millisecondsToSeconds } from 'date-fns/esm/fp'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/esm/fp/min/index' {
+ import { min } from 'date-fns/esm/fp'
+ export default min
+}
+
+declare module 'date-fns/esm/fp/minutesToHours/index' {
+ import { minutesToHours } from 'date-fns/esm/fp'
+ export default minutesToHours
+}
+
+declare module 'date-fns/esm/fp/minutesToMilliseconds/index' {
+ import { minutesToMilliseconds } from 'date-fns/esm/fp'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/esm/fp/minutesToSeconds/index' {
+ import { minutesToSeconds } from 'date-fns/esm/fp'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/esm/fp/monthsToQuarters/index' {
+ import { monthsToQuarters } from 'date-fns/esm/fp'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/esm/fp/monthsToYears/index' {
+ import { monthsToYears } from 'date-fns/esm/fp'
+ export default monthsToYears
+}
+
+declare module 'date-fns/esm/fp/nextDay/index' {
+ import { nextDay } from 'date-fns/esm/fp'
+ export default nextDay
+}
+
+declare module 'date-fns/esm/fp/nextFriday/index' {
+ import { nextFriday } from 'date-fns/esm/fp'
+ export default nextFriday
+}
+
+declare module 'date-fns/esm/fp/nextMonday/index' {
+ import { nextMonday } from 'date-fns/esm/fp'
+ export default nextMonday
+}
+
+declare module 'date-fns/esm/fp/nextSaturday/index' {
+ import { nextSaturday } from 'date-fns/esm/fp'
+ export default nextSaturday
+}
+
+declare module 'date-fns/esm/fp/nextSunday/index' {
+ import { nextSunday } from 'date-fns/esm/fp'
+ export default nextSunday
+}
+
+declare module 'date-fns/esm/fp/nextThursday/index' {
+ import { nextThursday } from 'date-fns/esm/fp'
+ export default nextThursday
+}
+
+declare module 'date-fns/esm/fp/nextTuesday/index' {
+ import { nextTuesday } from 'date-fns/esm/fp'
+ export default nextTuesday
+}
+
+declare module 'date-fns/esm/fp/nextWednesday/index' {
+ import { nextWednesday } from 'date-fns/esm/fp'
+ export default nextWednesday
+}
+
+declare module 'date-fns/esm/fp/parse/index' {
+ import { parse } from 'date-fns/esm/fp'
+ export default parse
+}
+
+declare module 'date-fns/esm/fp/parseISO/index' {
+ import { parseISO } from 'date-fns/esm/fp'
+ export default parseISO
+}
+
+declare module 'date-fns/esm/fp/parseISOWithOptions/index' {
+ import { parseISOWithOptions } from 'date-fns/esm/fp'
+ export default parseISOWithOptions
+}
+
+declare module 'date-fns/esm/fp/parseJSON/index' {
+ import { parseJSON } from 'date-fns/esm/fp'
+ export default parseJSON
+}
+
+declare module 'date-fns/esm/fp/parseWithOptions/index' {
+ import { parseWithOptions } from 'date-fns/esm/fp'
+ export default parseWithOptions
+}
+
+declare module 'date-fns/esm/fp/quartersToMonths/index' {
+ import { quartersToMonths } from 'date-fns/esm/fp'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/esm/fp/quartersToYears/index' {
+ import { quartersToYears } from 'date-fns/esm/fp'
+ export default quartersToYears
+}
+
+declare module 'date-fns/esm/fp/roundToNearestMinutes/index' {
+ import { roundToNearestMinutes } from 'date-fns/esm/fp'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/esm/fp/roundToNearestMinutesWithOptions/index' {
+ import { roundToNearestMinutesWithOptions } from 'date-fns/esm/fp'
+ export default roundToNearestMinutesWithOptions
+}
+
+declare module 'date-fns/esm/fp/secondsToHours/index' {
+ import { secondsToHours } from 'date-fns/esm/fp'
+ export default secondsToHours
+}
+
+declare module 'date-fns/esm/fp/secondsToMilliseconds/index' {
+ import { secondsToMilliseconds } from 'date-fns/esm/fp'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/esm/fp/secondsToMinutes/index' {
+ import { secondsToMinutes } from 'date-fns/esm/fp'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/esm/fp/set/index' {
+ import { set } from 'date-fns/esm/fp'
+ export default set
+}
+
+declare module 'date-fns/esm/fp/setDate/index' {
+ import { setDate } from 'date-fns/esm/fp'
+ export default setDate
+}
+
+declare module 'date-fns/esm/fp/setDay/index' {
+ import { setDay } from 'date-fns/esm/fp'
+ export default setDay
+}
+
+declare module 'date-fns/esm/fp/setDayOfYear/index' {
+ import { setDayOfYear } from 'date-fns/esm/fp'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/esm/fp/setDayWithOptions/index' {
+ import { setDayWithOptions } from 'date-fns/esm/fp'
+ export default setDayWithOptions
+}
+
+declare module 'date-fns/esm/fp/setHours/index' {
+ import { setHours } from 'date-fns/esm/fp'
+ export default setHours
+}
+
+declare module 'date-fns/esm/fp/setISODay/index' {
+ import { setISODay } from 'date-fns/esm/fp'
+ export default setISODay
+}
+
+declare module 'date-fns/esm/fp/setISOWeek/index' {
+ import { setISOWeek } from 'date-fns/esm/fp'
+ export default setISOWeek
+}
+
+declare module 'date-fns/esm/fp/setISOWeekYear/index' {
+ import { setISOWeekYear } from 'date-fns/esm/fp'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/setMilliseconds/index' {
+ import { setMilliseconds } from 'date-fns/esm/fp'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/esm/fp/setMinutes/index' {
+ import { setMinutes } from 'date-fns/esm/fp'
+ export default setMinutes
+}
+
+declare module 'date-fns/esm/fp/setMonth/index' {
+ import { setMonth } from 'date-fns/esm/fp'
+ export default setMonth
+}
+
+declare module 'date-fns/esm/fp/setQuarter/index' {
+ import { setQuarter } from 'date-fns/esm/fp'
+ export default setQuarter
+}
+
+declare module 'date-fns/esm/fp/setSeconds/index' {
+ import { setSeconds } from 'date-fns/esm/fp'
+ export default setSeconds
+}
+
+declare module 'date-fns/esm/fp/setWeek/index' {
+ import { setWeek } from 'date-fns/esm/fp'
+ export default setWeek
+}
+
+declare module 'date-fns/esm/fp/setWeekWithOptions/index' {
+ import { setWeekWithOptions } from 'date-fns/esm/fp'
+ export default setWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/setWeekYear/index' {
+ import { setWeekYear } from 'date-fns/esm/fp'
+ export default setWeekYear
+}
+
+declare module 'date-fns/esm/fp/setWeekYearWithOptions/index' {
+ import { setWeekYearWithOptions } from 'date-fns/esm/fp'
+ export default setWeekYearWithOptions
+}
+
+declare module 'date-fns/esm/fp/setYear/index' {
+ import { setYear } from 'date-fns/esm/fp'
+ export default setYear
+}
+
+declare module 'date-fns/esm/fp/startOfDay/index' {
+ import { startOfDay } from 'date-fns/esm/fp'
+ export default startOfDay
+}
+
+declare module 'date-fns/esm/fp/startOfDecade/index' {
+ import { startOfDecade } from 'date-fns/esm/fp'
+ export default startOfDecade
+}
+
+declare module 'date-fns/esm/fp/startOfHour/index' {
+ import { startOfHour } from 'date-fns/esm/fp'
+ export default startOfHour
+}
+
+declare module 'date-fns/esm/fp/startOfISOWeek/index' {
+ import { startOfISOWeek } from 'date-fns/esm/fp'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/esm/fp/startOfISOWeekYear/index' {
+ import { startOfISOWeekYear } from 'date-fns/esm/fp'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/startOfMinute/index' {
+ import { startOfMinute } from 'date-fns/esm/fp'
+ export default startOfMinute
+}
+
+declare module 'date-fns/esm/fp/startOfMonth/index' {
+ import { startOfMonth } from 'date-fns/esm/fp'
+ export default startOfMonth
+}
+
+declare module 'date-fns/esm/fp/startOfQuarter/index' {
+ import { startOfQuarter } from 'date-fns/esm/fp'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/esm/fp/startOfSecond/index' {
+ import { startOfSecond } from 'date-fns/esm/fp'
+ export default startOfSecond
+}
+
+declare module 'date-fns/esm/fp/startOfWeek/index' {
+ import { startOfWeek } from 'date-fns/esm/fp'
+ export default startOfWeek
+}
+
+declare module 'date-fns/esm/fp/startOfWeekWithOptions/index' {
+ import { startOfWeekWithOptions } from 'date-fns/esm/fp'
+ export default startOfWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/startOfWeekYear/index' {
+ import { startOfWeekYear } from 'date-fns/esm/fp'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/esm/fp/startOfWeekYearWithOptions/index' {
+ import { startOfWeekYearWithOptions } from 'date-fns/esm/fp'
+ export default startOfWeekYearWithOptions
+}
+
+declare module 'date-fns/esm/fp/startOfYear/index' {
+ import { startOfYear } from 'date-fns/esm/fp'
+ export default startOfYear
+}
+
+declare module 'date-fns/esm/fp/sub/index' {
+ import { sub } from 'date-fns/esm/fp'
+ export default sub
+}
+
+declare module 'date-fns/esm/fp/subBusinessDays/index' {
+ import { subBusinessDays } from 'date-fns/esm/fp'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/esm/fp/subDays/index' {
+ import { subDays } from 'date-fns/esm/fp'
+ export default subDays
+}
+
+declare module 'date-fns/esm/fp/subHours/index' {
+ import { subHours } from 'date-fns/esm/fp'
+ export default subHours
+}
+
+declare module 'date-fns/esm/fp/subISOWeekYears/index' {
+ import { subISOWeekYears } from 'date-fns/esm/fp'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/subMilliseconds/index' {
+ import { subMilliseconds } from 'date-fns/esm/fp'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/esm/fp/subMinutes/index' {
+ import { subMinutes } from 'date-fns/esm/fp'
+ export default subMinutes
+}
+
+declare module 'date-fns/esm/fp/subMonths/index' {
+ import { subMonths } from 'date-fns/esm/fp'
+ export default subMonths
+}
+
+declare module 'date-fns/esm/fp/subQuarters/index' {
+ import { subQuarters } from 'date-fns/esm/fp'
+ export default subQuarters
+}
+
+declare module 'date-fns/esm/fp/subSeconds/index' {
+ import { subSeconds } from 'date-fns/esm/fp'
+ export default subSeconds
+}
+
+declare module 'date-fns/esm/fp/subWeeks/index' {
+ import { subWeeks } from 'date-fns/esm/fp'
+ export default subWeeks
+}
+
+declare module 'date-fns/esm/fp/subYears/index' {
+ import { subYears } from 'date-fns/esm/fp'
+ export default subYears
+}
+
+declare module 'date-fns/esm/fp/toDate/index' {
+ import { toDate } from 'date-fns/esm/fp'
+ export default toDate
+}
+
+declare module 'date-fns/esm/fp/weeksToDays/index' {
+ import { weeksToDays } from 'date-fns/esm/fp'
+ export default weeksToDays
+}
+
+declare module 'date-fns/esm/fp/yearsToMonths/index' {
+ import { yearsToMonths } from 'date-fns/esm/fp'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/esm/fp/yearsToQuarters/index' {
+ import { yearsToQuarters } from 'date-fns/esm/fp'
+ export default yearsToQuarters
+}
+
+declare module 'date-fns/esm/fp/add/index.js' {
+ import { add } from 'date-fns/esm/fp'
+ export default add
+}
+
+declare module 'date-fns/esm/fp/addBusinessDays/index.js' {
+ import { addBusinessDays } from 'date-fns/esm/fp'
+ export default addBusinessDays
+}
+
+declare module 'date-fns/esm/fp/addDays/index.js' {
+ import { addDays } from 'date-fns/esm/fp'
+ export default addDays
+}
+
+declare module 'date-fns/esm/fp/addHours/index.js' {
+ import { addHours } from 'date-fns/esm/fp'
+ export default addHours
+}
+
+declare module 'date-fns/esm/fp/addISOWeekYears/index.js' {
+ import { addISOWeekYears } from 'date-fns/esm/fp'
+ export default addISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/addMilliseconds/index.js' {
+ import { addMilliseconds } from 'date-fns/esm/fp'
+ export default addMilliseconds
+}
+
+declare module 'date-fns/esm/fp/addMinutes/index.js' {
+ import { addMinutes } from 'date-fns/esm/fp'
+ export default addMinutes
+}
+
+declare module 'date-fns/esm/fp/addMonths/index.js' {
+ import { addMonths } from 'date-fns/esm/fp'
+ export default addMonths
+}
+
+declare module 'date-fns/esm/fp/addQuarters/index.js' {
+ import { addQuarters } from 'date-fns/esm/fp'
+ export default addQuarters
+}
+
+declare module 'date-fns/esm/fp/addSeconds/index.js' {
+ import { addSeconds } from 'date-fns/esm/fp'
+ export default addSeconds
+}
+
+declare module 'date-fns/esm/fp/addWeeks/index.js' {
+ import { addWeeks } from 'date-fns/esm/fp'
+ export default addWeeks
+}
+
+declare module 'date-fns/esm/fp/addYears/index.js' {
+ import { addYears } from 'date-fns/esm/fp'
+ export default addYears
+}
+
+declare module 'date-fns/esm/fp/areIntervalsOverlapping/index.js' {
+ import { areIntervalsOverlapping } from 'date-fns/esm/fp'
+ export default areIntervalsOverlapping
+}
+
+declare module 'date-fns/esm/fp/areIntervalsOverlappingWithOptions/index.js' {
+ import { areIntervalsOverlappingWithOptions } from 'date-fns/esm/fp'
+ export default areIntervalsOverlappingWithOptions
+}
+
+declare module 'date-fns/esm/fp/closestIndexTo/index.js' {
+ import { closestIndexTo } from 'date-fns/esm/fp'
+ export default closestIndexTo
+}
+
+declare module 'date-fns/esm/fp/closestTo/index.js' {
+ import { closestTo } from 'date-fns/esm/fp'
+ export default closestTo
+}
+
+declare module 'date-fns/esm/fp/compareAsc/index.js' {
+ import { compareAsc } from 'date-fns/esm/fp'
+ export default compareAsc
+}
+
+declare module 'date-fns/esm/fp/compareDesc/index.js' {
+ import { compareDesc } from 'date-fns/esm/fp'
+ export default compareDesc
+}
+
+declare module 'date-fns/esm/fp/daysToWeeks/index.js' {
+ import { daysToWeeks } from 'date-fns/esm/fp'
+ export default daysToWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInBusinessDays/index.js' {
+ import { differenceInBusinessDays } from 'date-fns/esm/fp'
+ export default differenceInBusinessDays
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarDays/index.js' {
+ import { differenceInCalendarDays } from 'date-fns/esm/fp'
+ export default differenceInCalendarDays
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarISOWeeks/index.js' {
+ import { differenceInCalendarISOWeeks } from 'date-fns/esm/fp'
+ export default differenceInCalendarISOWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarISOWeekYears/index.js' {
+ import { differenceInCalendarISOWeekYears } from 'date-fns/esm/fp'
+ export default differenceInCalendarISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarMonths/index.js' {
+ import { differenceInCalendarMonths } from 'date-fns/esm/fp'
+ export default differenceInCalendarMonths
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarQuarters/index.js' {
+ import { differenceInCalendarQuarters } from 'date-fns/esm/fp'
+ export default differenceInCalendarQuarters
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarWeeks/index.js' {
+ import { differenceInCalendarWeeks } from 'date-fns/esm/fp'
+ export default differenceInCalendarWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarWeeksWithOptions/index.js' {
+ import { differenceInCalendarWeeksWithOptions } from 'date-fns/esm/fp'
+ export default differenceInCalendarWeeksWithOptions
+}
+
+declare module 'date-fns/esm/fp/differenceInCalendarYears/index.js' {
+ import { differenceInCalendarYears } from 'date-fns/esm/fp'
+ export default differenceInCalendarYears
+}
+
+declare module 'date-fns/esm/fp/differenceInDays/index.js' {
+ import { differenceInDays } from 'date-fns/esm/fp'
+ export default differenceInDays
+}
+
+declare module 'date-fns/esm/fp/differenceInHours/index.js' {
+ import { differenceInHours } from 'date-fns/esm/fp'
+ export default differenceInHours
+}
+
+declare module 'date-fns/esm/fp/differenceInISOWeekYears/index.js' {
+ import { differenceInISOWeekYears } from 'date-fns/esm/fp'
+ export default differenceInISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/differenceInMilliseconds/index.js' {
+ import { differenceInMilliseconds } from 'date-fns/esm/fp'
+ export default differenceInMilliseconds
+}
+
+declare module 'date-fns/esm/fp/differenceInMinutes/index.js' {
+ import { differenceInMinutes } from 'date-fns/esm/fp'
+ export default differenceInMinutes
+}
+
+declare module 'date-fns/esm/fp/differenceInMonths/index.js' {
+ import { differenceInMonths } from 'date-fns/esm/fp'
+ export default differenceInMonths
+}
+
+declare module 'date-fns/esm/fp/differenceInQuarters/index.js' {
+ import { differenceInQuarters } from 'date-fns/esm/fp'
+ export default differenceInQuarters
+}
+
+declare module 'date-fns/esm/fp/differenceInSeconds/index.js' {
+ import { differenceInSeconds } from 'date-fns/esm/fp'
+ export default differenceInSeconds
+}
+
+declare module 'date-fns/esm/fp/differenceInWeeks/index.js' {
+ import { differenceInWeeks } from 'date-fns/esm/fp'
+ export default differenceInWeeks
+}
+
+declare module 'date-fns/esm/fp/differenceInYears/index.js' {
+ import { differenceInYears } from 'date-fns/esm/fp'
+ export default differenceInYears
+}
+
+declare module 'date-fns/esm/fp/eachDayOfInterval/index.js' {
+ import { eachDayOfInterval } from 'date-fns/esm/fp'
+ export default eachDayOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachDayOfIntervalWithOptions/index.js' {
+ import { eachDayOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachDayOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachHourOfInterval/index.js' {
+ import { eachHourOfInterval } from 'date-fns/esm/fp'
+ export default eachHourOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachHourOfIntervalWithOptions/index.js' {
+ import { eachHourOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachHourOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachMinuteOfInterval/index.js' {
+ import { eachMinuteOfInterval } from 'date-fns/esm/fp'
+ export default eachMinuteOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachMinuteOfIntervalWithOptions/index.js' {
+ import { eachMinuteOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachMinuteOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachMonthOfInterval/index.js' {
+ import { eachMonthOfInterval } from 'date-fns/esm/fp'
+ export default eachMonthOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachQuarterOfInterval/index.js' {
+ import { eachQuarterOfInterval } from 'date-fns/esm/fp'
+ export default eachQuarterOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachWeekendOfInterval/index.js' {
+ import { eachWeekendOfInterval } from 'date-fns/esm/fp'
+ export default eachWeekendOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachWeekendOfMonth/index.js' {
+ import { eachWeekendOfMonth } from 'date-fns/esm/fp'
+ export default eachWeekendOfMonth
+}
+
+declare module 'date-fns/esm/fp/eachWeekendOfYear/index.js' {
+ import { eachWeekendOfYear } from 'date-fns/esm/fp'
+ export default eachWeekendOfYear
+}
+
+declare module 'date-fns/esm/fp/eachWeekOfInterval/index.js' {
+ import { eachWeekOfInterval } from 'date-fns/esm/fp'
+ export default eachWeekOfInterval
+}
+
+declare module 'date-fns/esm/fp/eachWeekOfIntervalWithOptions/index.js' {
+ import { eachWeekOfIntervalWithOptions } from 'date-fns/esm/fp'
+ export default eachWeekOfIntervalWithOptions
+}
+
+declare module 'date-fns/esm/fp/eachYearOfInterval/index.js' {
+ import { eachYearOfInterval } from 'date-fns/esm/fp'
+ export default eachYearOfInterval
+}
+
+declare module 'date-fns/esm/fp/endOfDay/index.js' {
+ import { endOfDay } from 'date-fns/esm/fp'
+ export default endOfDay
+}
+
+declare module 'date-fns/esm/fp/endOfDecade/index.js' {
+ import { endOfDecade } from 'date-fns/esm/fp'
+ export default endOfDecade
+}
+
+declare module 'date-fns/esm/fp/endOfDecadeWithOptions/index.js' {
+ import { endOfDecadeWithOptions } from 'date-fns/esm/fp'
+ export default endOfDecadeWithOptions
+}
+
+declare module 'date-fns/esm/fp/endOfHour/index.js' {
+ import { endOfHour } from 'date-fns/esm/fp'
+ export default endOfHour
+}
+
+declare module 'date-fns/esm/fp/endOfISOWeek/index.js' {
+ import { endOfISOWeek } from 'date-fns/esm/fp'
+ export default endOfISOWeek
+}
+
+declare module 'date-fns/esm/fp/endOfISOWeekYear/index.js' {
+ import { endOfISOWeekYear } from 'date-fns/esm/fp'
+ export default endOfISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/endOfMinute/index.js' {
+ import { endOfMinute } from 'date-fns/esm/fp'
+ export default endOfMinute
+}
+
+declare module 'date-fns/esm/fp/endOfMonth/index.js' {
+ import { endOfMonth } from 'date-fns/esm/fp'
+ export default endOfMonth
+}
+
+declare module 'date-fns/esm/fp/endOfQuarter/index.js' {
+ import { endOfQuarter } from 'date-fns/esm/fp'
+ export default endOfQuarter
+}
+
+declare module 'date-fns/esm/fp/endOfSecond/index.js' {
+ import { endOfSecond } from 'date-fns/esm/fp'
+ export default endOfSecond
+}
+
+declare module 'date-fns/esm/fp/endOfWeek/index.js' {
+ import { endOfWeek } from 'date-fns/esm/fp'
+ export default endOfWeek
+}
+
+declare module 'date-fns/esm/fp/endOfWeekWithOptions/index.js' {
+ import { endOfWeekWithOptions } from 'date-fns/esm/fp'
+ export default endOfWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/endOfYear/index.js' {
+ import { endOfYear } from 'date-fns/esm/fp'
+ export default endOfYear
+}
+
+declare module 'date-fns/esm/fp/format/index.js' {
+ import { format } from 'date-fns/esm/fp'
+ export default format
+}
+
+declare module 'date-fns/esm/fp/formatDistance/index.js' {
+ import { formatDistance } from 'date-fns/esm/fp'
+ export default formatDistance
+}
+
+declare module 'date-fns/esm/fp/formatDistanceStrict/index.js' {
+ import { formatDistanceStrict } from 'date-fns/esm/fp'
+ export default formatDistanceStrict
+}
+
+declare module 'date-fns/esm/fp/formatDistanceStrictWithOptions/index.js' {
+ import { formatDistanceStrictWithOptions } from 'date-fns/esm/fp'
+ export default formatDistanceStrictWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatDistanceWithOptions/index.js' {
+ import { formatDistanceWithOptions } from 'date-fns/esm/fp'
+ export default formatDistanceWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatDuration/index.js' {
+ import { formatDuration } from 'date-fns/esm/fp'
+ export default formatDuration
+}
+
+declare module 'date-fns/esm/fp/formatDurationWithOptions/index.js' {
+ import { formatDurationWithOptions } from 'date-fns/esm/fp'
+ export default formatDurationWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatISO/index.js' {
+ import { formatISO } from 'date-fns/esm/fp'
+ export default formatISO
+}
+
+declare module 'date-fns/esm/fp/formatISO9075/index.js' {
+ import { formatISO9075 } from 'date-fns/esm/fp'
+ export default formatISO9075
+}
+
+declare module 'date-fns/esm/fp/formatISO9075WithOptions/index.js' {
+ import { formatISO9075WithOptions } from 'date-fns/esm/fp'
+ export default formatISO9075WithOptions
+}
+
+declare module 'date-fns/esm/fp/formatISODuration/index.js' {
+ import { formatISODuration } from 'date-fns/esm/fp'
+ export default formatISODuration
+}
+
+declare module 'date-fns/esm/fp/formatISOWithOptions/index.js' {
+ import { formatISOWithOptions } from 'date-fns/esm/fp'
+ export default formatISOWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatRelative/index.js' {
+ import { formatRelative } from 'date-fns/esm/fp'
+ export default formatRelative
+}
+
+declare module 'date-fns/esm/fp/formatRelativeWithOptions/index.js' {
+ import { formatRelativeWithOptions } from 'date-fns/esm/fp'
+ export default formatRelativeWithOptions
+}
+
+declare module 'date-fns/esm/fp/formatRFC3339/index.js' {
+ import { formatRFC3339 } from 'date-fns/esm/fp'
+ export default formatRFC3339
+}
+
+declare module 'date-fns/esm/fp/formatRFC3339WithOptions/index.js' {
+ import { formatRFC3339WithOptions } from 'date-fns/esm/fp'
+ export default formatRFC3339WithOptions
+}
+
+declare module 'date-fns/esm/fp/formatRFC7231/index.js' {
+ import { formatRFC7231 } from 'date-fns/esm/fp'
+ export default formatRFC7231
+}
+
+declare module 'date-fns/esm/fp/formatWithOptions/index.js' {
+ import { formatWithOptions } from 'date-fns/esm/fp'
+ export default formatWithOptions
+}
+
+declare module 'date-fns/esm/fp/fromUnixTime/index.js' {
+ import { fromUnixTime } from 'date-fns/esm/fp'
+ export default fromUnixTime
+}
+
+declare module 'date-fns/esm/fp/getDate/index.js' {
+ import { getDate } from 'date-fns/esm/fp'
+ export default getDate
+}
+
+declare module 'date-fns/esm/fp/getDay/index.js' {
+ import { getDay } from 'date-fns/esm/fp'
+ export default getDay
+}
+
+declare module 'date-fns/esm/fp/getDayOfYear/index.js' {
+ import { getDayOfYear } from 'date-fns/esm/fp'
+ export default getDayOfYear
+}
+
+declare module 'date-fns/esm/fp/getDaysInMonth/index.js' {
+ import { getDaysInMonth } from 'date-fns/esm/fp'
+ export default getDaysInMonth
+}
+
+declare module 'date-fns/esm/fp/getDaysInYear/index.js' {
+ import { getDaysInYear } from 'date-fns/esm/fp'
+ export default getDaysInYear
+}
+
+declare module 'date-fns/esm/fp/getDecade/index.js' {
+ import { getDecade } from 'date-fns/esm/fp'
+ export default getDecade
+}
+
+declare module 'date-fns/esm/fp/getHours/index.js' {
+ import { getHours } from 'date-fns/esm/fp'
+ export default getHours
+}
+
+declare module 'date-fns/esm/fp/getISODay/index.js' {
+ import { getISODay } from 'date-fns/esm/fp'
+ export default getISODay
+}
+
+declare module 'date-fns/esm/fp/getISOWeek/index.js' {
+ import { getISOWeek } from 'date-fns/esm/fp'
+ export default getISOWeek
+}
+
+declare module 'date-fns/esm/fp/getISOWeeksInYear/index.js' {
+ import { getISOWeeksInYear } from 'date-fns/esm/fp'
+ export default getISOWeeksInYear
+}
+
+declare module 'date-fns/esm/fp/getISOWeekYear/index.js' {
+ import { getISOWeekYear } from 'date-fns/esm/fp'
+ export default getISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/getMilliseconds/index.js' {
+ import { getMilliseconds } from 'date-fns/esm/fp'
+ export default getMilliseconds
+}
+
+declare module 'date-fns/esm/fp/getMinutes/index.js' {
+ import { getMinutes } from 'date-fns/esm/fp'
+ export default getMinutes
+}
+
+declare module 'date-fns/esm/fp/getMonth/index.js' {
+ import { getMonth } from 'date-fns/esm/fp'
+ export default getMonth
+}
+
+declare module 'date-fns/esm/fp/getOverlappingDaysInIntervals/index.js' {
+ import { getOverlappingDaysInIntervals } from 'date-fns/esm/fp'
+ export default getOverlappingDaysInIntervals
+}
+
+declare module 'date-fns/esm/fp/getQuarter/index.js' {
+ import { getQuarter } from 'date-fns/esm/fp'
+ export default getQuarter
+}
+
+declare module 'date-fns/esm/fp/getSeconds/index.js' {
+ import { getSeconds } from 'date-fns/esm/fp'
+ export default getSeconds
+}
+
+declare module 'date-fns/esm/fp/getTime/index.js' {
+ import { getTime } from 'date-fns/esm/fp'
+ export default getTime
+}
+
+declare module 'date-fns/esm/fp/getUnixTime/index.js' {
+ import { getUnixTime } from 'date-fns/esm/fp'
+ export default getUnixTime
+}
+
+declare module 'date-fns/esm/fp/getWeek/index.js' {
+ import { getWeek } from 'date-fns/esm/fp'
+ export default getWeek
+}
+
+declare module 'date-fns/esm/fp/getWeekOfMonth/index.js' {
+ import { getWeekOfMonth } from 'date-fns/esm/fp'
+ export default getWeekOfMonth
+}
+
+declare module 'date-fns/esm/fp/getWeekOfMonthWithOptions/index.js' {
+ import { getWeekOfMonthWithOptions } from 'date-fns/esm/fp'
+ export default getWeekOfMonthWithOptions
+}
+
+declare module 'date-fns/esm/fp/getWeeksInMonth/index.js' {
+ import { getWeeksInMonth } from 'date-fns/esm/fp'
+ export default getWeeksInMonth
+}
+
+declare module 'date-fns/esm/fp/getWeeksInMonthWithOptions/index.js' {
+ import { getWeeksInMonthWithOptions } from 'date-fns/esm/fp'
+ export default getWeeksInMonthWithOptions
+}
+
+declare module 'date-fns/esm/fp/getWeekWithOptions/index.js' {
+ import { getWeekWithOptions } from 'date-fns/esm/fp'
+ export default getWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/getWeekYear/index.js' {
+ import { getWeekYear } from 'date-fns/esm/fp'
+ export default getWeekYear
+}
+
+declare module 'date-fns/esm/fp/getWeekYearWithOptions/index.js' {
+ import { getWeekYearWithOptions } from 'date-fns/esm/fp'
+ export default getWeekYearWithOptions
+}
+
+declare module 'date-fns/esm/fp/getYear/index.js' {
+ import { getYear } from 'date-fns/esm/fp'
+ export default getYear
+}
+
+declare module 'date-fns/esm/fp/hoursToMilliseconds/index.js' {
+ import { hoursToMilliseconds } from 'date-fns/esm/fp'
+ export default hoursToMilliseconds
+}
+
+declare module 'date-fns/esm/fp/hoursToMinutes/index.js' {
+ import { hoursToMinutes } from 'date-fns/esm/fp'
+ export default hoursToMinutes
+}
+
+declare module 'date-fns/esm/fp/hoursToSeconds/index.js' {
+ import { hoursToSeconds } from 'date-fns/esm/fp'
+ export default hoursToSeconds
+}
+
+declare module 'date-fns/esm/fp/intervalToDuration/index.js' {
+ import { intervalToDuration } from 'date-fns/esm/fp'
+ export default intervalToDuration
+}
+
+declare module 'date-fns/esm/fp/intlFormat/index.js' {
+ import { intlFormat } from 'date-fns/esm/fp'
+ export default intlFormat
+}
+
+declare module 'date-fns/esm/fp/isAfter/index.js' {
+ import { isAfter } from 'date-fns/esm/fp'
+ export default isAfter
+}
+
+declare module 'date-fns/esm/fp/isBefore/index.js' {
+ import { isBefore } from 'date-fns/esm/fp'
+ export default isBefore
+}
+
+declare module 'date-fns/esm/fp/isDate/index.js' {
+ import { isDate } from 'date-fns/esm/fp'
+ export default isDate
+}
+
+declare module 'date-fns/esm/fp/isEqual/index.js' {
+ import { isEqual } from 'date-fns/esm/fp'
+ export default isEqual
+}
+
+declare module 'date-fns/esm/fp/isExists/index.js' {
+ import { isExists } from 'date-fns/esm/fp'
+ export default isExists
+}
+
+declare module 'date-fns/esm/fp/isFirstDayOfMonth/index.js' {
+ import { isFirstDayOfMonth } from 'date-fns/esm/fp'
+ export default isFirstDayOfMonth
+}
+
+declare module 'date-fns/esm/fp/isFriday/index.js' {
+ import { isFriday } from 'date-fns/esm/fp'
+ export default isFriday
+}
+
+declare module 'date-fns/esm/fp/isLastDayOfMonth/index.js' {
+ import { isLastDayOfMonth } from 'date-fns/esm/fp'
+ export default isLastDayOfMonth
+}
+
+declare module 'date-fns/esm/fp/isLeapYear/index.js' {
+ import { isLeapYear } from 'date-fns/esm/fp'
+ export default isLeapYear
+}
+
+declare module 'date-fns/esm/fp/isMatch/index.js' {
+ import { isMatch } from 'date-fns/esm/fp'
+ export default isMatch
+}
+
+declare module 'date-fns/esm/fp/isMatchWithOptions/index.js' {
+ import { isMatchWithOptions } from 'date-fns/esm/fp'
+ export default isMatchWithOptions
+}
+
+declare module 'date-fns/esm/fp/isMonday/index.js' {
+ import { isMonday } from 'date-fns/esm/fp'
+ export default isMonday
+}
+
+declare module 'date-fns/esm/fp/isSameDay/index.js' {
+ import { isSameDay } from 'date-fns/esm/fp'
+ export default isSameDay
+}
+
+declare module 'date-fns/esm/fp/isSameHour/index.js' {
+ import { isSameHour } from 'date-fns/esm/fp'
+ export default isSameHour
+}
+
+declare module 'date-fns/esm/fp/isSameISOWeek/index.js' {
+ import { isSameISOWeek } from 'date-fns/esm/fp'
+ export default isSameISOWeek
+}
+
+declare module 'date-fns/esm/fp/isSameISOWeekYear/index.js' {
+ import { isSameISOWeekYear } from 'date-fns/esm/fp'
+ export default isSameISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/isSameMinute/index.js' {
+ import { isSameMinute } from 'date-fns/esm/fp'
+ export default isSameMinute
+}
+
+declare module 'date-fns/esm/fp/isSameMonth/index.js' {
+ import { isSameMonth } from 'date-fns/esm/fp'
+ export default isSameMonth
+}
+
+declare module 'date-fns/esm/fp/isSameQuarter/index.js' {
+ import { isSameQuarter } from 'date-fns/esm/fp'
+ export default isSameQuarter
+}
+
+declare module 'date-fns/esm/fp/isSameSecond/index.js' {
+ import { isSameSecond } from 'date-fns/esm/fp'
+ export default isSameSecond
+}
+
+declare module 'date-fns/esm/fp/isSameWeek/index.js' {
+ import { isSameWeek } from 'date-fns/esm/fp'
+ export default isSameWeek
+}
+
+declare module 'date-fns/esm/fp/isSameWeekWithOptions/index.js' {
+ import { isSameWeekWithOptions } from 'date-fns/esm/fp'
+ export default isSameWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/isSameYear/index.js' {
+ import { isSameYear } from 'date-fns/esm/fp'
+ export default isSameYear
+}
+
+declare module 'date-fns/esm/fp/isSaturday/index.js' {
+ import { isSaturday } from 'date-fns/esm/fp'
+ export default isSaturday
+}
+
+declare module 'date-fns/esm/fp/isSunday/index.js' {
+ import { isSunday } from 'date-fns/esm/fp'
+ export default isSunday
+}
+
+declare module 'date-fns/esm/fp/isThursday/index.js' {
+ import { isThursday } from 'date-fns/esm/fp'
+ export default isThursday
+}
+
+declare module 'date-fns/esm/fp/isTuesday/index.js' {
+ import { isTuesday } from 'date-fns/esm/fp'
+ export default isTuesday
+}
+
+declare module 'date-fns/esm/fp/isValid/index.js' {
+ import { isValid } from 'date-fns/esm/fp'
+ export default isValid
+}
+
+declare module 'date-fns/esm/fp/isWednesday/index.js' {
+ import { isWednesday } from 'date-fns/esm/fp'
+ export default isWednesday
+}
+
+declare module 'date-fns/esm/fp/isWeekend/index.js' {
+ import { isWeekend } from 'date-fns/esm/fp'
+ export default isWeekend
+}
+
+declare module 'date-fns/esm/fp/isWithinInterval/index.js' {
+ import { isWithinInterval } from 'date-fns/esm/fp'
+ export default isWithinInterval
+}
+
+declare module 'date-fns/esm/fp/lastDayOfDecade/index.js' {
+ import { lastDayOfDecade } from 'date-fns/esm/fp'
+ export default lastDayOfDecade
+}
+
+declare module 'date-fns/esm/fp/lastDayOfISOWeek/index.js' {
+ import { lastDayOfISOWeek } from 'date-fns/esm/fp'
+ export default lastDayOfISOWeek
+}
+
+declare module 'date-fns/esm/fp/lastDayOfISOWeekYear/index.js' {
+ import { lastDayOfISOWeekYear } from 'date-fns/esm/fp'
+ export default lastDayOfISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/lastDayOfMonth/index.js' {
+ import { lastDayOfMonth } from 'date-fns/esm/fp'
+ export default lastDayOfMonth
+}
+
+declare module 'date-fns/esm/fp/lastDayOfQuarter/index.js' {
+ import { lastDayOfQuarter } from 'date-fns/esm/fp'
+ export default lastDayOfQuarter
+}
+
+declare module 'date-fns/esm/fp/lastDayOfQuarterWithOptions/index.js' {
+ import { lastDayOfQuarterWithOptions } from 'date-fns/esm/fp'
+ export default lastDayOfQuarterWithOptions
+}
+
+declare module 'date-fns/esm/fp/lastDayOfWeek/index.js' {
+ import { lastDayOfWeek } from 'date-fns/esm/fp'
+ export default lastDayOfWeek
+}
+
+declare module 'date-fns/esm/fp/lastDayOfWeekWithOptions/index.js' {
+ import { lastDayOfWeekWithOptions } from 'date-fns/esm/fp'
+ export default lastDayOfWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/lastDayOfYear/index.js' {
+ import { lastDayOfYear } from 'date-fns/esm/fp'
+ export default lastDayOfYear
+}
+
+declare module 'date-fns/esm/fp/lightFormat/index.js' {
+ import { lightFormat } from 'date-fns/esm/fp'
+ export default lightFormat
+}
+
+declare module 'date-fns/esm/fp/max/index.js' {
+ import { max } from 'date-fns/esm/fp'
+ export default max
+}
+
+declare module 'date-fns/esm/fp/milliseconds/index.js' {
+ import { milliseconds } from 'date-fns/esm/fp'
+ export default milliseconds
+}
+
+declare module 'date-fns/esm/fp/millisecondsToHours/index.js' {
+ import { millisecondsToHours } from 'date-fns/esm/fp'
+ export default millisecondsToHours
+}
+
+declare module 'date-fns/esm/fp/millisecondsToMinutes/index.js' {
+ import { millisecondsToMinutes } from 'date-fns/esm/fp'
+ export default millisecondsToMinutes
+}
+
+declare module 'date-fns/esm/fp/millisecondsToSeconds/index.js' {
+ import { millisecondsToSeconds } from 'date-fns/esm/fp'
+ export default millisecondsToSeconds
+}
+
+declare module 'date-fns/esm/fp/min/index.js' {
+ import { min } from 'date-fns/esm/fp'
+ export default min
+}
+
+declare module 'date-fns/esm/fp/minutesToHours/index.js' {
+ import { minutesToHours } from 'date-fns/esm/fp'
+ export default minutesToHours
+}
+
+declare module 'date-fns/esm/fp/minutesToMilliseconds/index.js' {
+ import { minutesToMilliseconds } from 'date-fns/esm/fp'
+ export default minutesToMilliseconds
+}
+
+declare module 'date-fns/esm/fp/minutesToSeconds/index.js' {
+ import { minutesToSeconds } from 'date-fns/esm/fp'
+ export default minutesToSeconds
+}
+
+declare module 'date-fns/esm/fp/monthsToQuarters/index.js' {
+ import { monthsToQuarters } from 'date-fns/esm/fp'
+ export default monthsToQuarters
+}
+
+declare module 'date-fns/esm/fp/monthsToYears/index.js' {
+ import { monthsToYears } from 'date-fns/esm/fp'
+ export default monthsToYears
+}
+
+declare module 'date-fns/esm/fp/nextDay/index.js' {
+ import { nextDay } from 'date-fns/esm/fp'
+ export default nextDay
+}
+
+declare module 'date-fns/esm/fp/nextFriday/index.js' {
+ import { nextFriday } from 'date-fns/esm/fp'
+ export default nextFriday
+}
+
+declare module 'date-fns/esm/fp/nextMonday/index.js' {
+ import { nextMonday } from 'date-fns/esm/fp'
+ export default nextMonday
+}
+
+declare module 'date-fns/esm/fp/nextSaturday/index.js' {
+ import { nextSaturday } from 'date-fns/esm/fp'
+ export default nextSaturday
+}
+
+declare module 'date-fns/esm/fp/nextSunday/index.js' {
+ import { nextSunday } from 'date-fns/esm/fp'
+ export default nextSunday
+}
+
+declare module 'date-fns/esm/fp/nextThursday/index.js' {
+ import { nextThursday } from 'date-fns/esm/fp'
+ export default nextThursday
+}
+
+declare module 'date-fns/esm/fp/nextTuesday/index.js' {
+ import { nextTuesday } from 'date-fns/esm/fp'
+ export default nextTuesday
+}
+
+declare module 'date-fns/esm/fp/nextWednesday/index.js' {
+ import { nextWednesday } from 'date-fns/esm/fp'
+ export default nextWednesday
+}
+
+declare module 'date-fns/esm/fp/parse/index.js' {
+ import { parse } from 'date-fns/esm/fp'
+ export default parse
+}
+
+declare module 'date-fns/esm/fp/parseISO/index.js' {
+ import { parseISO } from 'date-fns/esm/fp'
+ export default parseISO
+}
+
+declare module 'date-fns/esm/fp/parseISOWithOptions/index.js' {
+ import { parseISOWithOptions } from 'date-fns/esm/fp'
+ export default parseISOWithOptions
+}
+
+declare module 'date-fns/esm/fp/parseJSON/index.js' {
+ import { parseJSON } from 'date-fns/esm/fp'
+ export default parseJSON
+}
+
+declare module 'date-fns/esm/fp/parseWithOptions/index.js' {
+ import { parseWithOptions } from 'date-fns/esm/fp'
+ export default parseWithOptions
+}
+
+declare module 'date-fns/esm/fp/quartersToMonths/index.js' {
+ import { quartersToMonths } from 'date-fns/esm/fp'
+ export default quartersToMonths
+}
+
+declare module 'date-fns/esm/fp/quartersToYears/index.js' {
+ import { quartersToYears } from 'date-fns/esm/fp'
+ export default quartersToYears
+}
+
+declare module 'date-fns/esm/fp/roundToNearestMinutes/index.js' {
+ import { roundToNearestMinutes } from 'date-fns/esm/fp'
+ export default roundToNearestMinutes
+}
+
+declare module 'date-fns/esm/fp/roundToNearestMinutesWithOptions/index.js' {
+ import { roundToNearestMinutesWithOptions } from 'date-fns/esm/fp'
+ export default roundToNearestMinutesWithOptions
+}
+
+declare module 'date-fns/esm/fp/secondsToHours/index.js' {
+ import { secondsToHours } from 'date-fns/esm/fp'
+ export default secondsToHours
+}
+
+declare module 'date-fns/esm/fp/secondsToMilliseconds/index.js' {
+ import { secondsToMilliseconds } from 'date-fns/esm/fp'
+ export default secondsToMilliseconds
+}
+
+declare module 'date-fns/esm/fp/secondsToMinutes/index.js' {
+ import { secondsToMinutes } from 'date-fns/esm/fp'
+ export default secondsToMinutes
+}
+
+declare module 'date-fns/esm/fp/set/index.js' {
+ import { set } from 'date-fns/esm/fp'
+ export default set
+}
+
+declare module 'date-fns/esm/fp/setDate/index.js' {
+ import { setDate } from 'date-fns/esm/fp'
+ export default setDate
+}
+
+declare module 'date-fns/esm/fp/setDay/index.js' {
+ import { setDay } from 'date-fns/esm/fp'
+ export default setDay
+}
+
+declare module 'date-fns/esm/fp/setDayOfYear/index.js' {
+ import { setDayOfYear } from 'date-fns/esm/fp'
+ export default setDayOfYear
+}
+
+declare module 'date-fns/esm/fp/setDayWithOptions/index.js' {
+ import { setDayWithOptions } from 'date-fns/esm/fp'
+ export default setDayWithOptions
+}
+
+declare module 'date-fns/esm/fp/setHours/index.js' {
+ import { setHours } from 'date-fns/esm/fp'
+ export default setHours
+}
+
+declare module 'date-fns/esm/fp/setISODay/index.js' {
+ import { setISODay } from 'date-fns/esm/fp'
+ export default setISODay
+}
+
+declare module 'date-fns/esm/fp/setISOWeek/index.js' {
+ import { setISOWeek } from 'date-fns/esm/fp'
+ export default setISOWeek
+}
+
+declare module 'date-fns/esm/fp/setISOWeekYear/index.js' {
+ import { setISOWeekYear } from 'date-fns/esm/fp'
+ export default setISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/setMilliseconds/index.js' {
+ import { setMilliseconds } from 'date-fns/esm/fp'
+ export default setMilliseconds
+}
+
+declare module 'date-fns/esm/fp/setMinutes/index.js' {
+ import { setMinutes } from 'date-fns/esm/fp'
+ export default setMinutes
+}
+
+declare module 'date-fns/esm/fp/setMonth/index.js' {
+ import { setMonth } from 'date-fns/esm/fp'
+ export default setMonth
+}
+
+declare module 'date-fns/esm/fp/setQuarter/index.js' {
+ import { setQuarter } from 'date-fns/esm/fp'
+ export default setQuarter
+}
+
+declare module 'date-fns/esm/fp/setSeconds/index.js' {
+ import { setSeconds } from 'date-fns/esm/fp'
+ export default setSeconds
+}
+
+declare module 'date-fns/esm/fp/setWeek/index.js' {
+ import { setWeek } from 'date-fns/esm/fp'
+ export default setWeek
+}
+
+declare module 'date-fns/esm/fp/setWeekWithOptions/index.js' {
+ import { setWeekWithOptions } from 'date-fns/esm/fp'
+ export default setWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/setWeekYear/index.js' {
+ import { setWeekYear } from 'date-fns/esm/fp'
+ export default setWeekYear
+}
+
+declare module 'date-fns/esm/fp/setWeekYearWithOptions/index.js' {
+ import { setWeekYearWithOptions } from 'date-fns/esm/fp'
+ export default setWeekYearWithOptions
+}
+
+declare module 'date-fns/esm/fp/setYear/index.js' {
+ import { setYear } from 'date-fns/esm/fp'
+ export default setYear
+}
+
+declare module 'date-fns/esm/fp/startOfDay/index.js' {
+ import { startOfDay } from 'date-fns/esm/fp'
+ export default startOfDay
+}
+
+declare module 'date-fns/esm/fp/startOfDecade/index.js' {
+ import { startOfDecade } from 'date-fns/esm/fp'
+ export default startOfDecade
+}
+
+declare module 'date-fns/esm/fp/startOfHour/index.js' {
+ import { startOfHour } from 'date-fns/esm/fp'
+ export default startOfHour
+}
+
+declare module 'date-fns/esm/fp/startOfISOWeek/index.js' {
+ import { startOfISOWeek } from 'date-fns/esm/fp'
+ export default startOfISOWeek
+}
+
+declare module 'date-fns/esm/fp/startOfISOWeekYear/index.js' {
+ import { startOfISOWeekYear } from 'date-fns/esm/fp'
+ export default startOfISOWeekYear
+}
+
+declare module 'date-fns/esm/fp/startOfMinute/index.js' {
+ import { startOfMinute } from 'date-fns/esm/fp'
+ export default startOfMinute
+}
+
+declare module 'date-fns/esm/fp/startOfMonth/index.js' {
+ import { startOfMonth } from 'date-fns/esm/fp'
+ export default startOfMonth
+}
+
+declare module 'date-fns/esm/fp/startOfQuarter/index.js' {
+ import { startOfQuarter } from 'date-fns/esm/fp'
+ export default startOfQuarter
+}
+
+declare module 'date-fns/esm/fp/startOfSecond/index.js' {
+ import { startOfSecond } from 'date-fns/esm/fp'
+ export default startOfSecond
+}
+
+declare module 'date-fns/esm/fp/startOfWeek/index.js' {
+ import { startOfWeek } from 'date-fns/esm/fp'
+ export default startOfWeek
+}
+
+declare module 'date-fns/esm/fp/startOfWeekWithOptions/index.js' {
+ import { startOfWeekWithOptions } from 'date-fns/esm/fp'
+ export default startOfWeekWithOptions
+}
+
+declare module 'date-fns/esm/fp/startOfWeekYear/index.js' {
+ import { startOfWeekYear } from 'date-fns/esm/fp'
+ export default startOfWeekYear
+}
+
+declare module 'date-fns/esm/fp/startOfWeekYearWithOptions/index.js' {
+ import { startOfWeekYearWithOptions } from 'date-fns/esm/fp'
+ export default startOfWeekYearWithOptions
+}
+
+declare module 'date-fns/esm/fp/startOfYear/index.js' {
+ import { startOfYear } from 'date-fns/esm/fp'
+ export default startOfYear
+}
+
+declare module 'date-fns/esm/fp/sub/index.js' {
+ import { sub } from 'date-fns/esm/fp'
+ export default sub
+}
+
+declare module 'date-fns/esm/fp/subBusinessDays/index.js' {
+ import { subBusinessDays } from 'date-fns/esm/fp'
+ export default subBusinessDays
+}
+
+declare module 'date-fns/esm/fp/subDays/index.js' {
+ import { subDays } from 'date-fns/esm/fp'
+ export default subDays
+}
+
+declare module 'date-fns/esm/fp/subHours/index.js' {
+ import { subHours } from 'date-fns/esm/fp'
+ export default subHours
+}
+
+declare module 'date-fns/esm/fp/subISOWeekYears/index.js' {
+ import { subISOWeekYears } from 'date-fns/esm/fp'
+ export default subISOWeekYears
+}
+
+declare module 'date-fns/esm/fp/subMilliseconds/index.js' {
+ import { subMilliseconds } from 'date-fns/esm/fp'
+ export default subMilliseconds
+}
+
+declare module 'date-fns/esm/fp/subMinutes/index.js' {
+ import { subMinutes } from 'date-fns/esm/fp'
+ export default subMinutes
+}
+
+declare module 'date-fns/esm/fp/subMonths/index.js' {
+ import { subMonths } from 'date-fns/esm/fp'
+ export default subMonths
+}
+
+declare module 'date-fns/esm/fp/subQuarters/index.js' {
+ import { subQuarters } from 'date-fns/esm/fp'
+ export default subQuarters
+}
+
+declare module 'date-fns/esm/fp/subSeconds/index.js' {
+ import { subSeconds } from 'date-fns/esm/fp'
+ export default subSeconds
+}
+
+declare module 'date-fns/esm/fp/subWeeks/index.js' {
+ import { subWeeks } from 'date-fns/esm/fp'
+ export default subWeeks
+}
+
+declare module 'date-fns/esm/fp/subYears/index.js' {
+ import { subYears } from 'date-fns/esm/fp'
+ export default subYears
+}
+
+declare module 'date-fns/esm/fp/toDate/index.js' {
+ import { toDate } from 'date-fns/esm/fp'
+ export default toDate
+}
+
+declare module 'date-fns/esm/fp/weeksToDays/index.js' {
+ import { weeksToDays } from 'date-fns/esm/fp'
+ export default weeksToDays
+}
+
+declare module 'date-fns/esm/fp/yearsToMonths/index.js' {
+ import { yearsToMonths } from 'date-fns/esm/fp'
+ export default yearsToMonths
+}
+
+declare module 'date-fns/esm/fp/yearsToQuarters/index.js' {
+ import { yearsToQuarters } from 'date-fns/esm/fp'
+ export default yearsToQuarters
+}
+
+// Regular Locales
+
+declare module 'date-fns/locale' {
+ const af: Locale
+ namespace af {}
+
+ const ar: Locale
+ namespace ar {}
+
+ const arDZ: Locale
+ namespace arDZ {}
+
+ const arMA: Locale
+ namespace arMA {}
+
+ const arSA: Locale
+ namespace arSA {}
+
+ const az: Locale
+ namespace az {}
+
+ const be: Locale
+ namespace be {}
+
+ const bg: Locale
+ namespace bg {}
+
+ const bn: Locale
+ namespace bn {}
+
+ const ca: Locale
+ namespace ca {}
+
+ const cs: Locale
+ namespace cs {}
+
+ const cy: Locale
+ namespace cy {}
+
+ const da: Locale
+ namespace da {}
+
+ const de: Locale
+ namespace de {}
+
+ const deAT: Locale
+ namespace deAT {}
+
+ const el: Locale
+ namespace el {}
+
+ const enAU: Locale
+ namespace enAU {}
+
+ const enCA: Locale
+ namespace enCA {}
+
+ const enGB: Locale
+ namespace enGB {}
+
+ const enIN: Locale
+ namespace enIN {}
+
+ const enNZ: Locale
+ namespace enNZ {}
+
+ const enUS: Locale
+ namespace enUS {}
+
+ const enZA: Locale
+ namespace enZA {}
+
+ const eo: Locale
+ namespace eo {}
+
+ const es: Locale
+ namespace es {}
+
+ const et: Locale
+ namespace et {}
+
+ const eu: Locale
+ namespace eu {}
+
+ const faIR: Locale
+ namespace faIR {}
+
+ const fi: Locale
+ namespace fi {}
+
+ const fil: Locale
+ namespace fil {}
+
+ const fr: Locale
+ namespace fr {}
+
+ const frCA: Locale
+ namespace frCA {}
+
+ const frCH: Locale
+ namespace frCH {}
+
+ const gd: Locale
+ namespace gd {}
+
+ const gl: Locale
+ namespace gl {}
+
+ const gu: Locale
+ namespace gu {}
+
+ const he: Locale
+ namespace he {}
+
+ const hi: Locale
+ namespace hi {}
+
+ const hr: Locale
+ namespace hr {}
+
+ const ht: Locale
+ namespace ht {}
+
+ const hu: Locale
+ namespace hu {}
+
+ const hy: Locale
+ namespace hy {}
+
+ const id: Locale
+ namespace id {}
+
+ const is: Locale
+ namespace is {}
+
+ const it: Locale
+ namespace it {}
+
+ const ja: Locale
+ namespace ja {}
+
+ const ka: Locale
+ namespace ka {}
+
+ const kk: Locale
+ namespace kk {}
+
+ const kn: Locale
+ namespace kn {}
+
+ const ko: Locale
+ namespace ko {}
+
+ const lb: Locale
+ namespace lb {}
+
+ const lt: Locale
+ namespace lt {}
+
+ const lv: Locale
+ namespace lv {}
+
+ const mk: Locale
+ namespace mk {}
+
+ const mn: Locale
+ namespace mn {}
+
+ const ms: Locale
+ namespace ms {}
+
+ const mt: Locale
+ namespace mt {}
+
+ const nb: Locale
+ namespace nb {}
+
+ const nl: Locale
+ namespace nl {}
+
+ const nlBE: Locale
+ namespace nlBE {}
+
+ const nn: Locale
+ namespace nn {}
+
+ const pl: Locale
+ namespace pl {}
+
+ const pt: Locale
+ namespace pt {}
+
+ const ptBR: Locale
+ namespace ptBR {}
+
+ const ro: Locale
+ namespace ro {}
+
+ const ru: Locale
+ namespace ru {}
+
+ const sk: Locale
+ namespace sk {}
+
+ const sl: Locale
+ namespace sl {}
+
+ const sq: Locale
+ namespace sq {}
+
+ const sr: Locale
+ namespace sr {}
+
+ const srLatn: Locale
+ namespace srLatn {}
+
+ const sv: Locale
+ namespace sv {}
+
+ const ta: Locale
+ namespace ta {}
+
+ const te: Locale
+ namespace te {}
+
+ const th: Locale
+ namespace th {}
+
+ const tr: Locale
+ namespace tr {}
+
+ const ug: Locale
+ namespace ug {}
+
+ const uk: Locale
+ namespace uk {}
+
+ const uz: Locale
+ namespace uz {}
+
+ const vi: Locale
+ namespace vi {}
+
+ const zhCN: Locale
+ namespace zhCN {}
+
+ const zhTW: Locale
+ namespace zhTW {}
+}
+
+declare module 'date-fns/locale/af' {
+ import { af } from 'date-fns/locale'
+ export default af
+}
+
+declare module 'date-fns/locale/ar' {
+ import { ar } from 'date-fns/locale'
+ export default ar
+}
+
+declare module 'date-fns/locale/ar-DZ' {
+ import { arDZ } from 'date-fns/locale'
+ export default arDZ
+}
+
+declare module 'date-fns/locale/ar-MA' {
+ import { arMA } from 'date-fns/locale'
+ export default arMA
+}
+
+declare module 'date-fns/locale/ar-SA' {
+ import { arSA } from 'date-fns/locale'
+ export default arSA
+}
+
+declare module 'date-fns/locale/az' {
+ import { az } from 'date-fns/locale'
+ export default az
+}
+
+declare module 'date-fns/locale/be' {
+ import { be } from 'date-fns/locale'
+ export default be
+}
+
+declare module 'date-fns/locale/bg' {
+ import { bg } from 'date-fns/locale'
+ export default bg
+}
+
+declare module 'date-fns/locale/bn' {
+ import { bn } from 'date-fns/locale'
+ export default bn
+}
+
+declare module 'date-fns/locale/ca' {
+ import { ca } from 'date-fns/locale'
+ export default ca
+}
+
+declare module 'date-fns/locale/cs' {
+ import { cs } from 'date-fns/locale'
+ export default cs
+}
+
+declare module 'date-fns/locale/cy' {
+ import { cy } from 'date-fns/locale'
+ export default cy
+}
+
+declare module 'date-fns/locale/da' {
+ import { da } from 'date-fns/locale'
+ export default da
+}
+
+declare module 'date-fns/locale/de' {
+ import { de } from 'date-fns/locale'
+ export default de
+}
+
+declare module 'date-fns/locale/de-AT' {
+ import { deAT } from 'date-fns/locale'
+ export default deAT
+}
+
+declare module 'date-fns/locale/el' {
+ import { el } from 'date-fns/locale'
+ export default el
+}
+
+declare module 'date-fns/locale/en-AU' {
+ import { enAU } from 'date-fns/locale'
+ export default enAU
+}
+
+declare module 'date-fns/locale/en-CA' {
+ import { enCA } from 'date-fns/locale'
+ export default enCA
+}
+
+declare module 'date-fns/locale/en-GB' {
+ import { enGB } from 'date-fns/locale'
+ export default enGB
+}
+
+declare module 'date-fns/locale/en-IN' {
+ import { enIN } from 'date-fns/locale'
+ export default enIN
+}
+
+declare module 'date-fns/locale/en-NZ' {
+ import { enNZ } from 'date-fns/locale'
+ export default enNZ
+}
+
+declare module 'date-fns/locale/en-US' {
+ import { enUS } from 'date-fns/locale'
+ export default enUS
+}
+
+declare module 'date-fns/locale/en-ZA' {
+ import { enZA } from 'date-fns/locale'
+ export default enZA
+}
+
+declare module 'date-fns/locale/eo' {
+ import { eo } from 'date-fns/locale'
+ export default eo
+}
+
+declare module 'date-fns/locale/es' {
+ import { es } from 'date-fns/locale'
+ export default es
+}
+
+declare module 'date-fns/locale/et' {
+ import { et } from 'date-fns/locale'
+ export default et
+}
+
+declare module 'date-fns/locale/eu' {
+ import { eu } from 'date-fns/locale'
+ export default eu
+}
+
+declare module 'date-fns/locale/fa-IR' {
+ import { faIR } from 'date-fns/locale'
+ export default faIR
+}
+
+declare module 'date-fns/locale/fi' {
+ import { fi } from 'date-fns/locale'
+ export default fi
+}
+
+declare module 'date-fns/locale/fil' {
+ import { fil } from 'date-fns/locale'
+ export default fil
+}
+
+declare module 'date-fns/locale/fr' {
+ import { fr } from 'date-fns/locale'
+ export default fr
+}
+
+declare module 'date-fns/locale/fr-CA' {
+ import { frCA } from 'date-fns/locale'
+ export default frCA
+}
+
+declare module 'date-fns/locale/fr-CH' {
+ import { frCH } from 'date-fns/locale'
+ export default frCH
+}
+
+declare module 'date-fns/locale/gd' {
+ import { gd } from 'date-fns/locale'
+ export default gd
+}
+
+declare module 'date-fns/locale/gl' {
+ import { gl } from 'date-fns/locale'
+ export default gl
+}
+
+declare module 'date-fns/locale/gu' {
+ import { gu } from 'date-fns/locale'
+ export default gu
+}
+
+declare module 'date-fns/locale/he' {
+ import { he } from 'date-fns/locale'
+ export default he
+}
+
+declare module 'date-fns/locale/hi' {
+ import { hi } from 'date-fns/locale'
+ export default hi
+}
+
+declare module 'date-fns/locale/hr' {
+ import { hr } from 'date-fns/locale'
+ export default hr
+}
+
+declare module 'date-fns/locale/ht' {
+ import { ht } from 'date-fns/locale'
+ export default ht
+}
+
+declare module 'date-fns/locale/hu' {
+ import { hu } from 'date-fns/locale'
+ export default hu
+}
+
+declare module 'date-fns/locale/hy' {
+ import { hy } from 'date-fns/locale'
+ export default hy
+}
+
+declare module 'date-fns/locale/id' {
+ import { id } from 'date-fns/locale'
+ export default id
+}
+
+declare module 'date-fns/locale/is' {
+ import { is } from 'date-fns/locale'
+ export default is
+}
+
+declare module 'date-fns/locale/it' {
+ import { it } from 'date-fns/locale'
+ export default it
+}
+
+declare module 'date-fns/locale/ja' {
+ import { ja } from 'date-fns/locale'
+ export default ja
+}
+
+declare module 'date-fns/locale/ka' {
+ import { ka } from 'date-fns/locale'
+ export default ka
+}
+
+declare module 'date-fns/locale/kk' {
+ import { kk } from 'date-fns/locale'
+ export default kk
+}
+
+declare module 'date-fns/locale/kn' {
+ import { kn } from 'date-fns/locale'
+ export default kn
+}
+
+declare module 'date-fns/locale/ko' {
+ import { ko } from 'date-fns/locale'
+ export default ko
+}
+
+declare module 'date-fns/locale/lb' {
+ import { lb } from 'date-fns/locale'
+ export default lb
+}
+
+declare module 'date-fns/locale/lt' {
+ import { lt } from 'date-fns/locale'
+ export default lt
+}
+
+declare module 'date-fns/locale/lv' {
+ import { lv } from 'date-fns/locale'
+ export default lv
+}
+
+declare module 'date-fns/locale/mk' {
+ import { mk } from 'date-fns/locale'
+ export default mk
+}
+
+declare module 'date-fns/locale/mn' {
+ import { mn } from 'date-fns/locale'
+ export default mn
+}
+
+declare module 'date-fns/locale/ms' {
+ import { ms } from 'date-fns/locale'
+ export default ms
+}
+
+declare module 'date-fns/locale/mt' {
+ import { mt } from 'date-fns/locale'
+ export default mt
+}
+
+declare module 'date-fns/locale/nb' {
+ import { nb } from 'date-fns/locale'
+ export default nb
+}
+
+declare module 'date-fns/locale/nl' {
+ import { nl } from 'date-fns/locale'
+ export default nl
+}
+
+declare module 'date-fns/locale/nl-BE' {
+ import { nlBE } from 'date-fns/locale'
+ export default nlBE
+}
+
+declare module 'date-fns/locale/nn' {
+ import { nn } from 'date-fns/locale'
+ export default nn
+}
+
+declare module 'date-fns/locale/pl' {
+ import { pl } from 'date-fns/locale'
+ export default pl
+}
+
+declare module 'date-fns/locale/pt' {
+ import { pt } from 'date-fns/locale'
+ export default pt
+}
+
+declare module 'date-fns/locale/pt-BR' {
+ import { ptBR } from 'date-fns/locale'
+ export default ptBR
+}
+
+declare module 'date-fns/locale/ro' {
+ import { ro } from 'date-fns/locale'
+ export default ro
+}
+
+declare module 'date-fns/locale/ru' {
+ import { ru } from 'date-fns/locale'
+ export default ru
+}
+
+declare module 'date-fns/locale/sk' {
+ import { sk } from 'date-fns/locale'
+ export default sk
+}
+
+declare module 'date-fns/locale/sl' {
+ import { sl } from 'date-fns/locale'
+ export default sl
+}
+
+declare module 'date-fns/locale/sq' {
+ import { sq } from 'date-fns/locale'
+ export default sq
+}
+
+declare module 'date-fns/locale/sr' {
+ import { sr } from 'date-fns/locale'
+ export default sr
+}
+
+declare module 'date-fns/locale/sr-Latn' {
+ import { srLatn } from 'date-fns/locale'
+ export default srLatn
+}
+
+declare module 'date-fns/locale/sv' {
+ import { sv } from 'date-fns/locale'
+ export default sv
+}
+
+declare module 'date-fns/locale/ta' {
+ import { ta } from 'date-fns/locale'
+ export default ta
+}
+
+declare module 'date-fns/locale/te' {
+ import { te } from 'date-fns/locale'
+ export default te
+}
+
+declare module 'date-fns/locale/th' {
+ import { th } from 'date-fns/locale'
+ export default th
+}
+
+declare module 'date-fns/locale/tr' {
+ import { tr } from 'date-fns/locale'
+ export default tr
+}
+
+declare module 'date-fns/locale/ug' {
+ import { ug } from 'date-fns/locale'
+ export default ug
+}
+
+declare module 'date-fns/locale/uk' {
+ import { uk } from 'date-fns/locale'
+ export default uk
+}
+
+declare module 'date-fns/locale/uz' {
+ import { uz } from 'date-fns/locale'
+ export default uz
+}
+
+declare module 'date-fns/locale/vi' {
+ import { vi } from 'date-fns/locale'
+ export default vi
+}
+
+declare module 'date-fns/locale/zh-CN' {
+ import { zhCN } from 'date-fns/locale'
+ export default zhCN
+}
+
+declare module 'date-fns/locale/zh-TW' {
+ import { zhTW } from 'date-fns/locale'
+ export default zhTW
+}
+
+declare module 'date-fns/locale/af/index' {
+ import { af } from 'date-fns/locale'
+ export default af
+}
+
+declare module 'date-fns/locale/ar/index' {
+ import { ar } from 'date-fns/locale'
+ export default ar
+}
+
+declare module 'date-fns/locale/ar-DZ/index' {
+ import { arDZ } from 'date-fns/locale'
+ export default arDZ
+}
+
+declare module 'date-fns/locale/ar-MA/index' {
+ import { arMA } from 'date-fns/locale'
+ export default arMA
+}
+
+declare module 'date-fns/locale/ar-SA/index' {
+ import { arSA } from 'date-fns/locale'
+ export default arSA
+}
+
+declare module 'date-fns/locale/az/index' {
+ import { az } from 'date-fns/locale'
+ export default az
+}
+
+declare module 'date-fns/locale/be/index' {
+ import { be } from 'date-fns/locale'
+ export default be
+}
+
+declare module 'date-fns/locale/bg/index' {
+ import { bg } from 'date-fns/locale'
+ export default bg
+}
+
+declare module 'date-fns/locale/bn/index' {
+ import { bn } from 'date-fns/locale'
+ export default bn
+}
+
+declare module 'date-fns/locale/ca/index' {
+ import { ca } from 'date-fns/locale'
+ export default ca
+}
+
+declare module 'date-fns/locale/cs/index' {
+ import { cs } from 'date-fns/locale'
+ export default cs
+}
+
+declare module 'date-fns/locale/cy/index' {
+ import { cy } from 'date-fns/locale'
+ export default cy
+}
+
+declare module 'date-fns/locale/da/index' {
+ import { da } from 'date-fns/locale'
+ export default da
+}
+
+declare module 'date-fns/locale/de/index' {
+ import { de } from 'date-fns/locale'
+ export default de
+}
+
+declare module 'date-fns/locale/de-AT/index' {
+ import { deAT } from 'date-fns/locale'
+ export default deAT
+}
+
+declare module 'date-fns/locale/el/index' {
+ import { el } from 'date-fns/locale'
+ export default el
+}
+
+declare module 'date-fns/locale/en-AU/index' {
+ import { enAU } from 'date-fns/locale'
+ export default enAU
+}
+
+declare module 'date-fns/locale/en-CA/index' {
+ import { enCA } from 'date-fns/locale'
+ export default enCA
+}
+
+declare module 'date-fns/locale/en-GB/index' {
+ import { enGB } from 'date-fns/locale'
+ export default enGB
+}
+
+declare module 'date-fns/locale/en-IN/index' {
+ import { enIN } from 'date-fns/locale'
+ export default enIN
+}
+
+declare module 'date-fns/locale/en-NZ/index' {
+ import { enNZ } from 'date-fns/locale'
+ export default enNZ
+}
+
+declare module 'date-fns/locale/en-US/index' {
+ import { enUS } from 'date-fns/locale'
+ export default enUS
+}
+
+declare module 'date-fns/locale/en-ZA/index' {
+ import { enZA } from 'date-fns/locale'
+ export default enZA
+}
+
+declare module 'date-fns/locale/eo/index' {
+ import { eo } from 'date-fns/locale'
+ export default eo
+}
+
+declare module 'date-fns/locale/es/index' {
+ import { es } from 'date-fns/locale'
+ export default es
+}
+
+declare module 'date-fns/locale/et/index' {
+ import { et } from 'date-fns/locale'
+ export default et
+}
+
+declare module 'date-fns/locale/eu/index' {
+ import { eu } from 'date-fns/locale'
+ export default eu
+}
+
+declare module 'date-fns/locale/fa-IR/index' {
+ import { faIR } from 'date-fns/locale'
+ export default faIR
+}
+
+declare module 'date-fns/locale/fi/index' {
+ import { fi } from 'date-fns/locale'
+ export default fi
+}
+
+declare module 'date-fns/locale/fil/index' {
+ import { fil } from 'date-fns/locale'
+ export default fil
+}
+
+declare module 'date-fns/locale/fr/index' {
+ import { fr } from 'date-fns/locale'
+ export default fr
+}
+
+declare module 'date-fns/locale/fr-CA/index' {
+ import { frCA } from 'date-fns/locale'
+ export default frCA
+}
+
+declare module 'date-fns/locale/fr-CH/index' {
+ import { frCH } from 'date-fns/locale'
+ export default frCH
+}
+
+declare module 'date-fns/locale/gd/index' {
+ import { gd } from 'date-fns/locale'
+ export default gd
+}
+
+declare module 'date-fns/locale/gl/index' {
+ import { gl } from 'date-fns/locale'
+ export default gl
+}
+
+declare module 'date-fns/locale/gu/index' {
+ import { gu } from 'date-fns/locale'
+ export default gu
+}
+
+declare module 'date-fns/locale/he/index' {
+ import { he } from 'date-fns/locale'
+ export default he
+}
+
+declare module 'date-fns/locale/hi/index' {
+ import { hi } from 'date-fns/locale'
+ export default hi
+}
+
+declare module 'date-fns/locale/hr/index' {
+ import { hr } from 'date-fns/locale'
+ export default hr
+}
+
+declare module 'date-fns/locale/ht/index' {
+ import { ht } from 'date-fns/locale'
+ export default ht
+}
+
+declare module 'date-fns/locale/hu/index' {
+ import { hu } from 'date-fns/locale'
+ export default hu
+}
+
+declare module 'date-fns/locale/hy/index' {
+ import { hy } from 'date-fns/locale'
+ export default hy
+}
+
+declare module 'date-fns/locale/id/index' {
+ import { id } from 'date-fns/locale'
+ export default id
+}
+
+declare module 'date-fns/locale/is/index' {
+ import { is } from 'date-fns/locale'
+ export default is
+}
+
+declare module 'date-fns/locale/it/index' {
+ import { it } from 'date-fns/locale'
+ export default it
+}
+
+declare module 'date-fns/locale/ja/index' {
+ import { ja } from 'date-fns/locale'
+ export default ja
+}
+
+declare module 'date-fns/locale/ka/index' {
+ import { ka } from 'date-fns/locale'
+ export default ka
+}
+
+declare module 'date-fns/locale/kk/index' {
+ import { kk } from 'date-fns/locale'
+ export default kk
+}
+
+declare module 'date-fns/locale/kn/index' {
+ import { kn } from 'date-fns/locale'
+ export default kn
+}
+
+declare module 'date-fns/locale/ko/index' {
+ import { ko } from 'date-fns/locale'
+ export default ko
+}
+
+declare module 'date-fns/locale/lb/index' {
+ import { lb } from 'date-fns/locale'
+ export default lb
+}
+
+declare module 'date-fns/locale/lt/index' {
+ import { lt } from 'date-fns/locale'
+ export default lt
+}
+
+declare module 'date-fns/locale/lv/index' {
+ import { lv } from 'date-fns/locale'
+ export default lv
+}
+
+declare module 'date-fns/locale/mk/index' {
+ import { mk } from 'date-fns/locale'
+ export default mk
+}
+
+declare module 'date-fns/locale/mn/index' {
+ import { mn } from 'date-fns/locale'
+ export default mn
+}
+
+declare module 'date-fns/locale/ms/index' {
+ import { ms } from 'date-fns/locale'
+ export default ms
+}
+
+declare module 'date-fns/locale/mt/index' {
+ import { mt } from 'date-fns/locale'
+ export default mt
+}
+
+declare module 'date-fns/locale/nb/index' {
+ import { nb } from 'date-fns/locale'
+ export default nb
+}
+
+declare module 'date-fns/locale/nl/index' {
+ import { nl } from 'date-fns/locale'
+ export default nl
+}
+
+declare module 'date-fns/locale/nl-BE/index' {
+ import { nlBE } from 'date-fns/locale'
+ export default nlBE
+}
+
+declare module 'date-fns/locale/nn/index' {
+ import { nn } from 'date-fns/locale'
+ export default nn
+}
+
+declare module 'date-fns/locale/pl/index' {
+ import { pl } from 'date-fns/locale'
+ export default pl
+}
+
+declare module 'date-fns/locale/pt/index' {
+ import { pt } from 'date-fns/locale'
+ export default pt
+}
+
+declare module 'date-fns/locale/pt-BR/index' {
+ import { ptBR } from 'date-fns/locale'
+ export default ptBR
+}
+
+declare module 'date-fns/locale/ro/index' {
+ import { ro } from 'date-fns/locale'
+ export default ro
+}
+
+declare module 'date-fns/locale/ru/index' {
+ import { ru } from 'date-fns/locale'
+ export default ru
+}
+
+declare module 'date-fns/locale/sk/index' {
+ import { sk } from 'date-fns/locale'
+ export default sk
+}
+
+declare module 'date-fns/locale/sl/index' {
+ import { sl } from 'date-fns/locale'
+ export default sl
+}
+
+declare module 'date-fns/locale/sq/index' {
+ import { sq } from 'date-fns/locale'
+ export default sq
+}
+
+declare module 'date-fns/locale/sr/index' {
+ import { sr } from 'date-fns/locale'
+ export default sr
+}
+
+declare module 'date-fns/locale/sr-Latn/index' {
+ import { srLatn } from 'date-fns/locale'
+ export default srLatn
+}
+
+declare module 'date-fns/locale/sv/index' {
+ import { sv } from 'date-fns/locale'
+ export default sv
+}
+
+declare module 'date-fns/locale/ta/index' {
+ import { ta } from 'date-fns/locale'
+ export default ta
+}
+
+declare module 'date-fns/locale/te/index' {
+ import { te } from 'date-fns/locale'
+ export default te
+}
+
+declare module 'date-fns/locale/th/index' {
+ import { th } from 'date-fns/locale'
+ export default th
+}
+
+declare module 'date-fns/locale/tr/index' {
+ import { tr } from 'date-fns/locale'
+ export default tr
+}
+
+declare module 'date-fns/locale/ug/index' {
+ import { ug } from 'date-fns/locale'
+ export default ug
+}
+
+declare module 'date-fns/locale/uk/index' {
+ import { uk } from 'date-fns/locale'
+ export default uk
+}
+
+declare module 'date-fns/locale/uz/index' {
+ import { uz } from 'date-fns/locale'
+ export default uz
+}
+
+declare module 'date-fns/locale/vi/index' {
+ import { vi } from 'date-fns/locale'
+ export default vi
+}
+
+declare module 'date-fns/locale/zh-CN/index' {
+ import { zhCN } from 'date-fns/locale'
+ export default zhCN
+}
+
+declare module 'date-fns/locale/zh-TW/index' {
+ import { zhTW } from 'date-fns/locale'
+ export default zhTW
+}
+
+declare module 'date-fns/locale/af/index.js' {
+ import { af } from 'date-fns/locale'
+ export default af
+}
+
+declare module 'date-fns/locale/ar/index.js' {
+ import { ar } from 'date-fns/locale'
+ export default ar
+}
+
+declare module 'date-fns/locale/ar-DZ/index.js' {
+ import { arDZ } from 'date-fns/locale'
+ export default arDZ
+}
+
+declare module 'date-fns/locale/ar-MA/index.js' {
+ import { arMA } from 'date-fns/locale'
+ export default arMA
+}
+
+declare module 'date-fns/locale/ar-SA/index.js' {
+ import { arSA } from 'date-fns/locale'
+ export default arSA
+}
+
+declare module 'date-fns/locale/az/index.js' {
+ import { az } from 'date-fns/locale'
+ export default az
+}
+
+declare module 'date-fns/locale/be/index.js' {
+ import { be } from 'date-fns/locale'
+ export default be
+}
+
+declare module 'date-fns/locale/bg/index.js' {
+ import { bg } from 'date-fns/locale'
+ export default bg
+}
+
+declare module 'date-fns/locale/bn/index.js' {
+ import { bn } from 'date-fns/locale'
+ export default bn
+}
+
+declare module 'date-fns/locale/ca/index.js' {
+ import { ca } from 'date-fns/locale'
+ export default ca
+}
+
+declare module 'date-fns/locale/cs/index.js' {
+ import { cs } from 'date-fns/locale'
+ export default cs
+}
+
+declare module 'date-fns/locale/cy/index.js' {
+ import { cy } from 'date-fns/locale'
+ export default cy
+}
+
+declare module 'date-fns/locale/da/index.js' {
+ import { da } from 'date-fns/locale'
+ export default da
+}
+
+declare module 'date-fns/locale/de/index.js' {
+ import { de } from 'date-fns/locale'
+ export default de
+}
+
+declare module 'date-fns/locale/de-AT/index.js' {
+ import { deAT } from 'date-fns/locale'
+ export default deAT
+}
+
+declare module 'date-fns/locale/el/index.js' {
+ import { el } from 'date-fns/locale'
+ export default el
+}
+
+declare module 'date-fns/locale/en-AU/index.js' {
+ import { enAU } from 'date-fns/locale'
+ export default enAU
+}
+
+declare module 'date-fns/locale/en-CA/index.js' {
+ import { enCA } from 'date-fns/locale'
+ export default enCA
+}
+
+declare module 'date-fns/locale/en-GB/index.js' {
+ import { enGB } from 'date-fns/locale'
+ export default enGB
+}
+
+declare module 'date-fns/locale/en-IN/index.js' {
+ import { enIN } from 'date-fns/locale'
+ export default enIN
+}
+
+declare module 'date-fns/locale/en-NZ/index.js' {
+ import { enNZ } from 'date-fns/locale'
+ export default enNZ
+}
+
+declare module 'date-fns/locale/en-US/index.js' {
+ import { enUS } from 'date-fns/locale'
+ export default enUS
+}
+
+declare module 'date-fns/locale/en-ZA/index.js' {
+ import { enZA } from 'date-fns/locale'
+ export default enZA
+}
+
+declare module 'date-fns/locale/eo/index.js' {
+ import { eo } from 'date-fns/locale'
+ export default eo
+}
+
+declare module 'date-fns/locale/es/index.js' {
+ import { es } from 'date-fns/locale'
+ export default es
+}
+
+declare module 'date-fns/locale/et/index.js' {
+ import { et } from 'date-fns/locale'
+ export default et
+}
+
+declare module 'date-fns/locale/eu/index.js' {
+ import { eu } from 'date-fns/locale'
+ export default eu
+}
+
+declare module 'date-fns/locale/fa-IR/index.js' {
+ import { faIR } from 'date-fns/locale'
+ export default faIR
+}
+
+declare module 'date-fns/locale/fi/index.js' {
+ import { fi } from 'date-fns/locale'
+ export default fi
+}
+
+declare module 'date-fns/locale/fil/index.js' {
+ import { fil } from 'date-fns/locale'
+ export default fil
+}
+
+declare module 'date-fns/locale/fr/index.js' {
+ import { fr } from 'date-fns/locale'
+ export default fr
+}
+
+declare module 'date-fns/locale/fr-CA/index.js' {
+ import { frCA } from 'date-fns/locale'
+ export default frCA
+}
+
+declare module 'date-fns/locale/fr-CH/index.js' {
+ import { frCH } from 'date-fns/locale'
+ export default frCH
+}
+
+declare module 'date-fns/locale/gd/index.js' {
+ import { gd } from 'date-fns/locale'
+ export default gd
+}
+
+declare module 'date-fns/locale/gl/index.js' {
+ import { gl } from 'date-fns/locale'
+ export default gl
+}
+
+declare module 'date-fns/locale/gu/index.js' {
+ import { gu } from 'date-fns/locale'
+ export default gu
+}
+
+declare module 'date-fns/locale/he/index.js' {
+ import { he } from 'date-fns/locale'
+ export default he
+}
+
+declare module 'date-fns/locale/hi/index.js' {
+ import { hi } from 'date-fns/locale'
+ export default hi
+}
+
+declare module 'date-fns/locale/hr/index.js' {
+ import { hr } from 'date-fns/locale'
+ export default hr
+}
+
+declare module 'date-fns/locale/ht/index.js' {
+ import { ht } from 'date-fns/locale'
+ export default ht
+}
+
+declare module 'date-fns/locale/hu/index.js' {
+ import { hu } from 'date-fns/locale'
+ export default hu
+}
+
+declare module 'date-fns/locale/hy/index.js' {
+ import { hy } from 'date-fns/locale'
+ export default hy
+}
+
+declare module 'date-fns/locale/id/index.js' {
+ import { id } from 'date-fns/locale'
+ export default id
+}
+
+declare module 'date-fns/locale/is/index.js' {
+ import { is } from 'date-fns/locale'
+ export default is
+}
+
+declare module 'date-fns/locale/it/index.js' {
+ import { it } from 'date-fns/locale'
+ export default it
+}
+
+declare module 'date-fns/locale/ja/index.js' {
+ import { ja } from 'date-fns/locale'
+ export default ja
+}
+
+declare module 'date-fns/locale/ka/index.js' {
+ import { ka } from 'date-fns/locale'
+ export default ka
+}
+
+declare module 'date-fns/locale/kk/index.js' {
+ import { kk } from 'date-fns/locale'
+ export default kk
+}
+
+declare module 'date-fns/locale/kn/index.js' {
+ import { kn } from 'date-fns/locale'
+ export default kn
+}
+
+declare module 'date-fns/locale/ko/index.js' {
+ import { ko } from 'date-fns/locale'
+ export default ko
+}
+
+declare module 'date-fns/locale/lb/index.js' {
+ import { lb } from 'date-fns/locale'
+ export default lb
+}
+
+declare module 'date-fns/locale/lt/index.js' {
+ import { lt } from 'date-fns/locale'
+ export default lt
+}
+
+declare module 'date-fns/locale/lv/index.js' {
+ import { lv } from 'date-fns/locale'
+ export default lv
+}
+
+declare module 'date-fns/locale/mk/index.js' {
+ import { mk } from 'date-fns/locale'
+ export default mk
+}
+
+declare module 'date-fns/locale/mn/index.js' {
+ import { mn } from 'date-fns/locale'
+ export default mn
+}
+
+declare module 'date-fns/locale/ms/index.js' {
+ import { ms } from 'date-fns/locale'
+ export default ms
+}
+
+declare module 'date-fns/locale/mt/index.js' {
+ import { mt } from 'date-fns/locale'
+ export default mt
+}
+
+declare module 'date-fns/locale/nb/index.js' {
+ import { nb } from 'date-fns/locale'
+ export default nb
+}
+
+declare module 'date-fns/locale/nl/index.js' {
+ import { nl } from 'date-fns/locale'
+ export default nl
+}
+
+declare module 'date-fns/locale/nl-BE/index.js' {
+ import { nlBE } from 'date-fns/locale'
+ export default nlBE
+}
+
+declare module 'date-fns/locale/nn/index.js' {
+ import { nn } from 'date-fns/locale'
+ export default nn
+}
+
+declare module 'date-fns/locale/pl/index.js' {
+ import { pl } from 'date-fns/locale'
+ export default pl
+}
+
+declare module 'date-fns/locale/pt/index.js' {
+ import { pt } from 'date-fns/locale'
+ export default pt
+}
+
+declare module 'date-fns/locale/pt-BR/index.js' {
+ import { ptBR } from 'date-fns/locale'
+ export default ptBR
+}
+
+declare module 'date-fns/locale/ro/index.js' {
+ import { ro } from 'date-fns/locale'
+ export default ro
+}
+
+declare module 'date-fns/locale/ru/index.js' {
+ import { ru } from 'date-fns/locale'
+ export default ru
+}
+
+declare module 'date-fns/locale/sk/index.js' {
+ import { sk } from 'date-fns/locale'
+ export default sk
+}
+
+declare module 'date-fns/locale/sl/index.js' {
+ import { sl } from 'date-fns/locale'
+ export default sl
+}
+
+declare module 'date-fns/locale/sq/index.js' {
+ import { sq } from 'date-fns/locale'
+ export default sq
+}
+
+declare module 'date-fns/locale/sr/index.js' {
+ import { sr } from 'date-fns/locale'
+ export default sr
+}
+
+declare module 'date-fns/locale/sr-Latn/index.js' {
+ import { srLatn } from 'date-fns/locale'
+ export default srLatn
+}
+
+declare module 'date-fns/locale/sv/index.js' {
+ import { sv } from 'date-fns/locale'
+ export default sv
+}
+
+declare module 'date-fns/locale/ta/index.js' {
+ import { ta } from 'date-fns/locale'
+ export default ta
+}
+
+declare module 'date-fns/locale/te/index.js' {
+ import { te } from 'date-fns/locale'
+ export default te
+}
+
+declare module 'date-fns/locale/th/index.js' {
+ import { th } from 'date-fns/locale'
+ export default th
+}
+
+declare module 'date-fns/locale/tr/index.js' {
+ import { tr } from 'date-fns/locale'
+ export default tr
+}
+
+declare module 'date-fns/locale/ug/index.js' {
+ import { ug } from 'date-fns/locale'
+ export default ug
+}
+
+declare module 'date-fns/locale/uk/index.js' {
+ import { uk } from 'date-fns/locale'
+ export default uk
+}
+
+declare module 'date-fns/locale/uz/index.js' {
+ import { uz } from 'date-fns/locale'
+ export default uz
+}
+
+declare module 'date-fns/locale/vi/index.js' {
+ import { vi } from 'date-fns/locale'
+ export default vi
+}
+
+declare module 'date-fns/locale/zh-CN/index.js' {
+ import { zhCN } from 'date-fns/locale'
+ export default zhCN
+}
+
+declare module 'date-fns/locale/zh-TW/index.js' {
+ import { zhTW } from 'date-fns/locale'
+ export default zhTW
+}
+
+// ECMAScript Module Locales
+
+declare module 'date-fns/esm/locale' {
+ const af: Locale
+ namespace af {}
+
+ const ar: Locale
+ namespace ar {}
+
+ const arDZ: Locale
+ namespace arDZ {}
+
+ const arMA: Locale
+ namespace arMA {}
+
+ const arSA: Locale
+ namespace arSA {}
+
+ const az: Locale
+ namespace az {}
+
+ const be: Locale
+ namespace be {}
+
+ const bg: Locale
+ namespace bg {}
+
+ const bn: Locale
+ namespace bn {}
+
+ const ca: Locale
+ namespace ca {}
+
+ const cs: Locale
+ namespace cs {}
+
+ const cy: Locale
+ namespace cy {}
+
+ const da: Locale
+ namespace da {}
+
+ const de: Locale
+ namespace de {}
+
+ const deAT: Locale
+ namespace deAT {}
+
+ const el: Locale
+ namespace el {}
+
+ const enAU: Locale
+ namespace enAU {}
+
+ const enCA: Locale
+ namespace enCA {}
+
+ const enGB: Locale
+ namespace enGB {}
+
+ const enIN: Locale
+ namespace enIN {}
+
+ const enNZ: Locale
+ namespace enNZ {}
+
+ const enUS: Locale
+ namespace enUS {}
+
+ const enZA: Locale
+ namespace enZA {}
+
+ const eo: Locale
+ namespace eo {}
+
+ const es: Locale
+ namespace es {}
+
+ const et: Locale
+ namespace et {}
+
+ const eu: Locale
+ namespace eu {}
+
+ const faIR: Locale
+ namespace faIR {}
+
+ const fi: Locale
+ namespace fi {}
+
+ const fil: Locale
+ namespace fil {}
+
+ const fr: Locale
+ namespace fr {}
+
+ const frCA: Locale
+ namespace frCA {}
+
+ const frCH: Locale
+ namespace frCH {}
+
+ const gd: Locale
+ namespace gd {}
+
+ const gl: Locale
+ namespace gl {}
+
+ const gu: Locale
+ namespace gu {}
+
+ const he: Locale
+ namespace he {}
+
+ const hi: Locale
+ namespace hi {}
+
+ const hr: Locale
+ namespace hr {}
+
+ const ht: Locale
+ namespace ht {}
+
+ const hu: Locale
+ namespace hu {}
+
+ const hy: Locale
+ namespace hy {}
+
+ const id: Locale
+ namespace id {}
+
+ const is: Locale
+ namespace is {}
+
+ const it: Locale
+ namespace it {}
+
+ const ja: Locale
+ namespace ja {}
+
+ const ka: Locale
+ namespace ka {}
+
+ const kk: Locale
+ namespace kk {}
+
+ const kn: Locale
+ namespace kn {}
+
+ const ko: Locale
+ namespace ko {}
+
+ const lb: Locale
+ namespace lb {}
+
+ const lt: Locale
+ namespace lt {}
+
+ const lv: Locale
+ namespace lv {}
+
+ const mk: Locale
+ namespace mk {}
+
+ const mn: Locale
+ namespace mn {}
+
+ const ms: Locale
+ namespace ms {}
+
+ const mt: Locale
+ namespace mt {}
+
+ const nb: Locale
+ namespace nb {}
+
+ const nl: Locale
+ namespace nl {}
+
+ const nlBE: Locale
+ namespace nlBE {}
+
+ const nn: Locale
+ namespace nn {}
+
+ const pl: Locale
+ namespace pl {}
+
+ const pt: Locale
+ namespace pt {}
+
+ const ptBR: Locale
+ namespace ptBR {}
+
+ const ro: Locale
+ namespace ro {}
+
+ const ru: Locale
+ namespace ru {}
+
+ const sk: Locale
+ namespace sk {}
+
+ const sl: Locale
+ namespace sl {}
+
+ const sq: Locale
+ namespace sq {}
+
+ const sr: Locale
+ namespace sr {}
+
+ const srLatn: Locale
+ namespace srLatn {}
+
+ const sv: Locale
+ namespace sv {}
+
+ const ta: Locale
+ namespace ta {}
+
+ const te: Locale
+ namespace te {}
+
+ const th: Locale
+ namespace th {}
+
+ const tr: Locale
+ namespace tr {}
+
+ const ug: Locale
+ namespace ug {}
+
+ const uk: Locale
+ namespace uk {}
+
+ const uz: Locale
+ namespace uz {}
+
+ const vi: Locale
+ namespace vi {}
+
+ const zhCN: Locale
+ namespace zhCN {}
+
+ const zhTW: Locale
+ namespace zhTW {}
+}
+
+declare module 'date-fns/esm/locale/af' {
+ import { af } from 'date-fns/esm/locale'
+ export default af
+}
+
+declare module 'date-fns/esm/locale/ar' {
+ import { ar } from 'date-fns/esm/locale'
+ export default ar
+}
+
+declare module 'date-fns/esm/locale/ar-DZ' {
+ import { arDZ } from 'date-fns/esm/locale'
+ export default arDZ
+}
+
+declare module 'date-fns/esm/locale/ar-MA' {
+ import { arMA } from 'date-fns/esm/locale'
+ export default arMA
+}
+
+declare module 'date-fns/esm/locale/ar-SA' {
+ import { arSA } from 'date-fns/esm/locale'
+ export default arSA
+}
+
+declare module 'date-fns/esm/locale/az' {
+ import { az } from 'date-fns/esm/locale'
+ export default az
+}
+
+declare module 'date-fns/esm/locale/be' {
+ import { be } from 'date-fns/esm/locale'
+ export default be
+}
+
+declare module 'date-fns/esm/locale/bg' {
+ import { bg } from 'date-fns/esm/locale'
+ export default bg
+}
+
+declare module 'date-fns/esm/locale/bn' {
+ import { bn } from 'date-fns/esm/locale'
+ export default bn
+}
+
+declare module 'date-fns/esm/locale/ca' {
+ import { ca } from 'date-fns/esm/locale'
+ export default ca
+}
+
+declare module 'date-fns/esm/locale/cs' {
+ import { cs } from 'date-fns/esm/locale'
+ export default cs
+}
+
+declare module 'date-fns/esm/locale/cy' {
+ import { cy } from 'date-fns/esm/locale'
+ export default cy
+}
+
+declare module 'date-fns/esm/locale/da' {
+ import { da } from 'date-fns/esm/locale'
+ export default da
+}
+
+declare module 'date-fns/esm/locale/de' {
+ import { de } from 'date-fns/esm/locale'
+ export default de
+}
+
+declare module 'date-fns/esm/locale/de-AT' {
+ import { deAT } from 'date-fns/esm/locale'
+ export default deAT
+}
+
+declare module 'date-fns/esm/locale/el' {
+ import { el } from 'date-fns/esm/locale'
+ export default el
+}
+
+declare module 'date-fns/esm/locale/en-AU' {
+ import { enAU } from 'date-fns/esm/locale'
+ export default enAU
+}
+
+declare module 'date-fns/esm/locale/en-CA' {
+ import { enCA } from 'date-fns/esm/locale'
+ export default enCA
+}
+
+declare module 'date-fns/esm/locale/en-GB' {
+ import { enGB } from 'date-fns/esm/locale'
+ export default enGB
+}
+
+declare module 'date-fns/esm/locale/en-IN' {
+ import { enIN } from 'date-fns/esm/locale'
+ export default enIN
+}
+
+declare module 'date-fns/esm/locale/en-NZ' {
+ import { enNZ } from 'date-fns/esm/locale'
+ export default enNZ
+}
+
+declare module 'date-fns/esm/locale/en-US' {
+ import { enUS } from 'date-fns/esm/locale'
+ export default enUS
+}
+
+declare module 'date-fns/esm/locale/en-ZA' {
+ import { enZA } from 'date-fns/esm/locale'
+ export default enZA
+}
+
+declare module 'date-fns/esm/locale/eo' {
+ import { eo } from 'date-fns/esm/locale'
+ export default eo
+}
+
+declare module 'date-fns/esm/locale/es' {
+ import { es } from 'date-fns/esm/locale'
+ export default es
+}
+
+declare module 'date-fns/esm/locale/et' {
+ import { et } from 'date-fns/esm/locale'
+ export default et
+}
+
+declare module 'date-fns/esm/locale/eu' {
+ import { eu } from 'date-fns/esm/locale'
+ export default eu
+}
+
+declare module 'date-fns/esm/locale/fa-IR' {
+ import { faIR } from 'date-fns/esm/locale'
+ export default faIR
+}
+
+declare module 'date-fns/esm/locale/fi' {
+ import { fi } from 'date-fns/esm/locale'
+ export default fi
+}
+
+declare module 'date-fns/esm/locale/fil' {
+ import { fil } from 'date-fns/esm/locale'
+ export default fil
+}
+
+declare module 'date-fns/esm/locale/fr' {
+ import { fr } from 'date-fns/esm/locale'
+ export default fr
+}
+
+declare module 'date-fns/esm/locale/fr-CA' {
+ import { frCA } from 'date-fns/esm/locale'
+ export default frCA
+}
+
+declare module 'date-fns/esm/locale/fr-CH' {
+ import { frCH } from 'date-fns/esm/locale'
+ export default frCH
+}
+
+declare module 'date-fns/esm/locale/gd' {
+ import { gd } from 'date-fns/esm/locale'
+ export default gd
+}
+
+declare module 'date-fns/esm/locale/gl' {
+ import { gl } from 'date-fns/esm/locale'
+ export default gl
+}
+
+declare module 'date-fns/esm/locale/gu' {
+ import { gu } from 'date-fns/esm/locale'
+ export default gu
+}
+
+declare module 'date-fns/esm/locale/he' {
+ import { he } from 'date-fns/esm/locale'
+ export default he
+}
+
+declare module 'date-fns/esm/locale/hi' {
+ import { hi } from 'date-fns/esm/locale'
+ export default hi
+}
+
+declare module 'date-fns/esm/locale/hr' {
+ import { hr } from 'date-fns/esm/locale'
+ export default hr
+}
+
+declare module 'date-fns/esm/locale/ht' {
+ import { ht } from 'date-fns/esm/locale'
+ export default ht
+}
+
+declare module 'date-fns/esm/locale/hu' {
+ import { hu } from 'date-fns/esm/locale'
+ export default hu
+}
+
+declare module 'date-fns/esm/locale/hy' {
+ import { hy } from 'date-fns/esm/locale'
+ export default hy
+}
+
+declare module 'date-fns/esm/locale/id' {
+ import { id } from 'date-fns/esm/locale'
+ export default id
+}
+
+declare module 'date-fns/esm/locale/is' {
+ import { is } from 'date-fns/esm/locale'
+ export default is
+}
+
+declare module 'date-fns/esm/locale/it' {
+ import { it } from 'date-fns/esm/locale'
+ export default it
+}
+
+declare module 'date-fns/esm/locale/ja' {
+ import { ja } from 'date-fns/esm/locale'
+ export default ja
+}
+
+declare module 'date-fns/esm/locale/ka' {
+ import { ka } from 'date-fns/esm/locale'
+ export default ka
+}
+
+declare module 'date-fns/esm/locale/kk' {
+ import { kk } from 'date-fns/esm/locale'
+ export default kk
+}
+
+declare module 'date-fns/esm/locale/kn' {
+ import { kn } from 'date-fns/esm/locale'
+ export default kn
+}
+
+declare module 'date-fns/esm/locale/ko' {
+ import { ko } from 'date-fns/esm/locale'
+ export default ko
+}
+
+declare module 'date-fns/esm/locale/lb' {
+ import { lb } from 'date-fns/esm/locale'
+ export default lb
+}
+
+declare module 'date-fns/esm/locale/lt' {
+ import { lt } from 'date-fns/esm/locale'
+ export default lt
+}
+
+declare module 'date-fns/esm/locale/lv' {
+ import { lv } from 'date-fns/esm/locale'
+ export default lv
+}
+
+declare module 'date-fns/esm/locale/mk' {
+ import { mk } from 'date-fns/esm/locale'
+ export default mk
+}
+
+declare module 'date-fns/esm/locale/mn' {
+ import { mn } from 'date-fns/esm/locale'
+ export default mn
+}
+
+declare module 'date-fns/esm/locale/ms' {
+ import { ms } from 'date-fns/esm/locale'
+ export default ms
+}
+
+declare module 'date-fns/esm/locale/mt' {
+ import { mt } from 'date-fns/esm/locale'
+ export default mt
+}
+
+declare module 'date-fns/esm/locale/nb' {
+ import { nb } from 'date-fns/esm/locale'
+ export default nb
+}
+
+declare module 'date-fns/esm/locale/nl' {
+ import { nl } from 'date-fns/esm/locale'
+ export default nl
+}
+
+declare module 'date-fns/esm/locale/nl-BE' {
+ import { nlBE } from 'date-fns/esm/locale'
+ export default nlBE
+}
+
+declare module 'date-fns/esm/locale/nn' {
+ import { nn } from 'date-fns/esm/locale'
+ export default nn
+}
+
+declare module 'date-fns/esm/locale/pl' {
+ import { pl } from 'date-fns/esm/locale'
+ export default pl
+}
+
+declare module 'date-fns/esm/locale/pt' {
+ import { pt } from 'date-fns/esm/locale'
+ export default pt
+}
+
+declare module 'date-fns/esm/locale/pt-BR' {
+ import { ptBR } from 'date-fns/esm/locale'
+ export default ptBR
+}
+
+declare module 'date-fns/esm/locale/ro' {
+ import { ro } from 'date-fns/esm/locale'
+ export default ro
+}
+
+declare module 'date-fns/esm/locale/ru' {
+ import { ru } from 'date-fns/esm/locale'
+ export default ru
+}
+
+declare module 'date-fns/esm/locale/sk' {
+ import { sk } from 'date-fns/esm/locale'
+ export default sk
+}
+
+declare module 'date-fns/esm/locale/sl' {
+ import { sl } from 'date-fns/esm/locale'
+ export default sl
+}
+
+declare module 'date-fns/esm/locale/sq' {
+ import { sq } from 'date-fns/esm/locale'
+ export default sq
+}
+
+declare module 'date-fns/esm/locale/sr' {
+ import { sr } from 'date-fns/esm/locale'
+ export default sr
+}
+
+declare module 'date-fns/esm/locale/sr-Latn' {
+ import { srLatn } from 'date-fns/esm/locale'
+ export default srLatn
+}
+
+declare module 'date-fns/esm/locale/sv' {
+ import { sv } from 'date-fns/esm/locale'
+ export default sv
+}
+
+declare module 'date-fns/esm/locale/ta' {
+ import { ta } from 'date-fns/esm/locale'
+ export default ta
+}
+
+declare module 'date-fns/esm/locale/te' {
+ import { te } from 'date-fns/esm/locale'
+ export default te
+}
+
+declare module 'date-fns/esm/locale/th' {
+ import { th } from 'date-fns/esm/locale'
+ export default th
+}
+
+declare module 'date-fns/esm/locale/tr' {
+ import { tr } from 'date-fns/esm/locale'
+ export default tr
+}
+
+declare module 'date-fns/esm/locale/ug' {
+ import { ug } from 'date-fns/esm/locale'
+ export default ug
+}
+
+declare module 'date-fns/esm/locale/uk' {
+ import { uk } from 'date-fns/esm/locale'
+ export default uk
+}
+
+declare module 'date-fns/esm/locale/uz' {
+ import { uz } from 'date-fns/esm/locale'
+ export default uz
+}
+
+declare module 'date-fns/esm/locale/vi' {
+ import { vi } from 'date-fns/esm/locale'
+ export default vi
+}
+
+declare module 'date-fns/esm/locale/zh-CN' {
+ import { zhCN } from 'date-fns/esm/locale'
+ export default zhCN
+}
+
+declare module 'date-fns/esm/locale/zh-TW' {
+ import { zhTW } from 'date-fns/esm/locale'
+ export default zhTW
+}
+
+declare module 'date-fns/esm/locale/af/index' {
+ import { af } from 'date-fns/esm/locale'
+ export default af
+}
+
+declare module 'date-fns/esm/locale/ar/index' {
+ import { ar } from 'date-fns/esm/locale'
+ export default ar
+}
+
+declare module 'date-fns/esm/locale/ar-DZ/index' {
+ import { arDZ } from 'date-fns/esm/locale'
+ export default arDZ
+}
+
+declare module 'date-fns/esm/locale/ar-MA/index' {
+ import { arMA } from 'date-fns/esm/locale'
+ export default arMA
+}
+
+declare module 'date-fns/esm/locale/ar-SA/index' {
+ import { arSA } from 'date-fns/esm/locale'
+ export default arSA
+}
+
+declare module 'date-fns/esm/locale/az/index' {
+ import { az } from 'date-fns/esm/locale'
+ export default az
+}
+
+declare module 'date-fns/esm/locale/be/index' {
+ import { be } from 'date-fns/esm/locale'
+ export default be
+}
+
+declare module 'date-fns/esm/locale/bg/index' {
+ import { bg } from 'date-fns/esm/locale'
+ export default bg
+}
+
+declare module 'date-fns/esm/locale/bn/index' {
+ import { bn } from 'date-fns/esm/locale'
+ export default bn
+}
+
+declare module 'date-fns/esm/locale/ca/index' {
+ import { ca } from 'date-fns/esm/locale'
+ export default ca
+}
+
+declare module 'date-fns/esm/locale/cs/index' {
+ import { cs } from 'date-fns/esm/locale'
+ export default cs
+}
+
+declare module 'date-fns/esm/locale/cy/index' {
+ import { cy } from 'date-fns/esm/locale'
+ export default cy
+}
+
+declare module 'date-fns/esm/locale/da/index' {
+ import { da } from 'date-fns/esm/locale'
+ export default da
+}
+
+declare module 'date-fns/esm/locale/de/index' {
+ import { de } from 'date-fns/esm/locale'
+ export default de
+}
+
+declare module 'date-fns/esm/locale/de-AT/index' {
+ import { deAT } from 'date-fns/esm/locale'
+ export default deAT
+}
+
+declare module 'date-fns/esm/locale/el/index' {
+ import { el } from 'date-fns/esm/locale'
+ export default el
+}
+
+declare module 'date-fns/esm/locale/en-AU/index' {
+ import { enAU } from 'date-fns/esm/locale'
+ export default enAU
+}
+
+declare module 'date-fns/esm/locale/en-CA/index' {
+ import { enCA } from 'date-fns/esm/locale'
+ export default enCA
+}
+
+declare module 'date-fns/esm/locale/en-GB/index' {
+ import { enGB } from 'date-fns/esm/locale'
+ export default enGB
+}
+
+declare module 'date-fns/esm/locale/en-IN/index' {
+ import { enIN } from 'date-fns/esm/locale'
+ export default enIN
+}
+
+declare module 'date-fns/esm/locale/en-NZ/index' {
+ import { enNZ } from 'date-fns/esm/locale'
+ export default enNZ
+}
+
+declare module 'date-fns/esm/locale/en-US/index' {
+ import { enUS } from 'date-fns/esm/locale'
+ export default enUS
+}
+
+declare module 'date-fns/esm/locale/en-ZA/index' {
+ import { enZA } from 'date-fns/esm/locale'
+ export default enZA
+}
+
+declare module 'date-fns/esm/locale/eo/index' {
+ import { eo } from 'date-fns/esm/locale'
+ export default eo
+}
+
+declare module 'date-fns/esm/locale/es/index' {
+ import { es } from 'date-fns/esm/locale'
+ export default es
+}
+
+declare module 'date-fns/esm/locale/et/index' {
+ import { et } from 'date-fns/esm/locale'
+ export default et
+}
+
+declare module 'date-fns/esm/locale/eu/index' {
+ import { eu } from 'date-fns/esm/locale'
+ export default eu
+}
+
+declare module 'date-fns/esm/locale/fa-IR/index' {
+ import { faIR } from 'date-fns/esm/locale'
+ export default faIR
+}
+
+declare module 'date-fns/esm/locale/fi/index' {
+ import { fi } from 'date-fns/esm/locale'
+ export default fi
+}
+
+declare module 'date-fns/esm/locale/fil/index' {
+ import { fil } from 'date-fns/esm/locale'
+ export default fil
+}
+
+declare module 'date-fns/esm/locale/fr/index' {
+ import { fr } from 'date-fns/esm/locale'
+ export default fr
+}
+
+declare module 'date-fns/esm/locale/fr-CA/index' {
+ import { frCA } from 'date-fns/esm/locale'
+ export default frCA
+}
+
+declare module 'date-fns/esm/locale/fr-CH/index' {
+ import { frCH } from 'date-fns/esm/locale'
+ export default frCH
+}
+
+declare module 'date-fns/esm/locale/gd/index' {
+ import { gd } from 'date-fns/esm/locale'
+ export default gd
+}
+
+declare module 'date-fns/esm/locale/gl/index' {
+ import { gl } from 'date-fns/esm/locale'
+ export default gl
+}
+
+declare module 'date-fns/esm/locale/gu/index' {
+ import { gu } from 'date-fns/esm/locale'
+ export default gu
+}
+
+declare module 'date-fns/esm/locale/he/index' {
+ import { he } from 'date-fns/esm/locale'
+ export default he
+}
+
+declare module 'date-fns/esm/locale/hi/index' {
+ import { hi } from 'date-fns/esm/locale'
+ export default hi
+}
+
+declare module 'date-fns/esm/locale/hr/index' {
+ import { hr } from 'date-fns/esm/locale'
+ export default hr
+}
+
+declare module 'date-fns/esm/locale/ht/index' {
+ import { ht } from 'date-fns/esm/locale'
+ export default ht
+}
+
+declare module 'date-fns/esm/locale/hu/index' {
+ import { hu } from 'date-fns/esm/locale'
+ export default hu
+}
+
+declare module 'date-fns/esm/locale/hy/index' {
+ import { hy } from 'date-fns/esm/locale'
+ export default hy
+}
+
+declare module 'date-fns/esm/locale/id/index' {
+ import { id } from 'date-fns/esm/locale'
+ export default id
+}
+
+declare module 'date-fns/esm/locale/is/index' {
+ import { is } from 'date-fns/esm/locale'
+ export default is
+}
+
+declare module 'date-fns/esm/locale/it/index' {
+ import { it } from 'date-fns/esm/locale'
+ export default it
+}
+
+declare module 'date-fns/esm/locale/ja/index' {
+ import { ja } from 'date-fns/esm/locale'
+ export default ja
+}
+
+declare module 'date-fns/esm/locale/ka/index' {
+ import { ka } from 'date-fns/esm/locale'
+ export default ka
+}
+
+declare module 'date-fns/esm/locale/kk/index' {
+ import { kk } from 'date-fns/esm/locale'
+ export default kk
+}
+
+declare module 'date-fns/esm/locale/kn/index' {
+ import { kn } from 'date-fns/esm/locale'
+ export default kn
+}
+
+declare module 'date-fns/esm/locale/ko/index' {
+ import { ko } from 'date-fns/esm/locale'
+ export default ko
+}
+
+declare module 'date-fns/esm/locale/lb/index' {
+ import { lb } from 'date-fns/esm/locale'
+ export default lb
+}
+
+declare module 'date-fns/esm/locale/lt/index' {
+ import { lt } from 'date-fns/esm/locale'
+ export default lt
+}
+
+declare module 'date-fns/esm/locale/lv/index' {
+ import { lv } from 'date-fns/esm/locale'
+ export default lv
+}
+
+declare module 'date-fns/esm/locale/mk/index' {
+ import { mk } from 'date-fns/esm/locale'
+ export default mk
+}
+
+declare module 'date-fns/esm/locale/mn/index' {
+ import { mn } from 'date-fns/esm/locale'
+ export default mn
+}
+
+declare module 'date-fns/esm/locale/ms/index' {
+ import { ms } from 'date-fns/esm/locale'
+ export default ms
+}
+
+declare module 'date-fns/esm/locale/mt/index' {
+ import { mt } from 'date-fns/esm/locale'
+ export default mt
+}
+
+declare module 'date-fns/esm/locale/nb/index' {
+ import { nb } from 'date-fns/esm/locale'
+ export default nb
+}
+
+declare module 'date-fns/esm/locale/nl/index' {
+ import { nl } from 'date-fns/esm/locale'
+ export default nl
+}
+
+declare module 'date-fns/esm/locale/nl-BE/index' {
+ import { nlBE } from 'date-fns/esm/locale'
+ export default nlBE
+}
+
+declare module 'date-fns/esm/locale/nn/index' {
+ import { nn } from 'date-fns/esm/locale'
+ export default nn
+}
+
+declare module 'date-fns/esm/locale/pl/index' {
+ import { pl } from 'date-fns/esm/locale'
+ export default pl
+}
+
+declare module 'date-fns/esm/locale/pt/index' {
+ import { pt } from 'date-fns/esm/locale'
+ export default pt
+}
+
+declare module 'date-fns/esm/locale/pt-BR/index' {
+ import { ptBR } from 'date-fns/esm/locale'
+ export default ptBR
+}
+
+declare module 'date-fns/esm/locale/ro/index' {
+ import { ro } from 'date-fns/esm/locale'
+ export default ro
+}
+
+declare module 'date-fns/esm/locale/ru/index' {
+ import { ru } from 'date-fns/esm/locale'
+ export default ru
+}
+
+declare module 'date-fns/esm/locale/sk/index' {
+ import { sk } from 'date-fns/esm/locale'
+ export default sk
+}
+
+declare module 'date-fns/esm/locale/sl/index' {
+ import { sl } from 'date-fns/esm/locale'
+ export default sl
+}
+
+declare module 'date-fns/esm/locale/sq/index' {
+ import { sq } from 'date-fns/esm/locale'
+ export default sq
+}
+
+declare module 'date-fns/esm/locale/sr/index' {
+ import { sr } from 'date-fns/esm/locale'
+ export default sr
+}
+
+declare module 'date-fns/esm/locale/sr-Latn/index' {
+ import { srLatn } from 'date-fns/esm/locale'
+ export default srLatn
+}
+
+declare module 'date-fns/esm/locale/sv/index' {
+ import { sv } from 'date-fns/esm/locale'
+ export default sv
+}
+
+declare module 'date-fns/esm/locale/ta/index' {
+ import { ta } from 'date-fns/esm/locale'
+ export default ta
+}
+
+declare module 'date-fns/esm/locale/te/index' {
+ import { te } from 'date-fns/esm/locale'
+ export default te
+}
+
+declare module 'date-fns/esm/locale/th/index' {
+ import { th } from 'date-fns/esm/locale'
+ export default th
+}
+
+declare module 'date-fns/esm/locale/tr/index' {
+ import { tr } from 'date-fns/esm/locale'
+ export default tr
+}
+
+declare module 'date-fns/esm/locale/ug/index' {
+ import { ug } from 'date-fns/esm/locale'
+ export default ug
+}
+
+declare module 'date-fns/esm/locale/uk/index' {
+ import { uk } from 'date-fns/esm/locale'
+ export default uk
+}
+
+declare module 'date-fns/esm/locale/uz/index' {
+ import { uz } from 'date-fns/esm/locale'
+ export default uz
+}
+
+declare module 'date-fns/esm/locale/vi/index' {
+ import { vi } from 'date-fns/esm/locale'
+ export default vi
+}
+
+declare module 'date-fns/esm/locale/zh-CN/index' {
+ import { zhCN } from 'date-fns/esm/locale'
+ export default zhCN
+}
+
+declare module 'date-fns/esm/locale/zh-TW/index' {
+ import { zhTW } from 'date-fns/esm/locale'
+ export default zhTW
+}
+
+declare module 'date-fns/esm/locale/af/index.js' {
+ import { af } from 'date-fns/esm/locale'
+ export default af
+}
+
+declare module 'date-fns/esm/locale/ar/index.js' {
+ import { ar } from 'date-fns/esm/locale'
+ export default ar
+}
+
+declare module 'date-fns/esm/locale/ar-DZ/index.js' {
+ import { arDZ } from 'date-fns/esm/locale'
+ export default arDZ
+}
+
+declare module 'date-fns/esm/locale/ar-MA/index.js' {
+ import { arMA } from 'date-fns/esm/locale'
+ export default arMA
+}
+
+declare module 'date-fns/esm/locale/ar-SA/index.js' {
+ import { arSA } from 'date-fns/esm/locale'
+ export default arSA
+}
+
+declare module 'date-fns/esm/locale/az/index.js' {
+ import { az } from 'date-fns/esm/locale'
+ export default az
+}
+
+declare module 'date-fns/esm/locale/be/index.js' {
+ import { be } from 'date-fns/esm/locale'
+ export default be
+}
+
+declare module 'date-fns/esm/locale/bg/index.js' {
+ import { bg } from 'date-fns/esm/locale'
+ export default bg
+}
+
+declare module 'date-fns/esm/locale/bn/index.js' {
+ import { bn } from 'date-fns/esm/locale'
+ export default bn
+}
+
+declare module 'date-fns/esm/locale/ca/index.js' {
+ import { ca } from 'date-fns/esm/locale'
+ export default ca
+}
+
+declare module 'date-fns/esm/locale/cs/index.js' {
+ import { cs } from 'date-fns/esm/locale'
+ export default cs
+}
+
+declare module 'date-fns/esm/locale/cy/index.js' {
+ import { cy } from 'date-fns/esm/locale'
+ export default cy
+}
+
+declare module 'date-fns/esm/locale/da/index.js' {
+ import { da } from 'date-fns/esm/locale'
+ export default da
+}
+
+declare module 'date-fns/esm/locale/de/index.js' {
+ import { de } from 'date-fns/esm/locale'
+ export default de
+}
+
+declare module 'date-fns/esm/locale/de-AT/index.js' {
+ import { deAT } from 'date-fns/esm/locale'
+ export default deAT
+}
+
+declare module 'date-fns/esm/locale/el/index.js' {
+ import { el } from 'date-fns/esm/locale'
+ export default el
+}
+
+declare module 'date-fns/esm/locale/en-AU/index.js' {
+ import { enAU } from 'date-fns/esm/locale'
+ export default enAU
+}
+
+declare module 'date-fns/esm/locale/en-CA/index.js' {
+ import { enCA } from 'date-fns/esm/locale'
+ export default enCA
+}
+
+declare module 'date-fns/esm/locale/en-GB/index.js' {
+ import { enGB } from 'date-fns/esm/locale'
+ export default enGB
+}
+
+declare module 'date-fns/esm/locale/en-IN/index.js' {
+ import { enIN } from 'date-fns/esm/locale'
+ export default enIN
+}
+
+declare module 'date-fns/esm/locale/en-NZ/index.js' {
+ import { enNZ } from 'date-fns/esm/locale'
+ export default enNZ
+}
+
+declare module 'date-fns/esm/locale/en-US/index.js' {
+ import { enUS } from 'date-fns/esm/locale'
+ export default enUS
+}
+
+declare module 'date-fns/esm/locale/en-ZA/index.js' {
+ import { enZA } from 'date-fns/esm/locale'
+ export default enZA
+}
+
+declare module 'date-fns/esm/locale/eo/index.js' {
+ import { eo } from 'date-fns/esm/locale'
+ export default eo
+}
+
+declare module 'date-fns/esm/locale/es/index.js' {
+ import { es } from 'date-fns/esm/locale'
+ export default es
+}
+
+declare module 'date-fns/esm/locale/et/index.js' {
+ import { et } from 'date-fns/esm/locale'
+ export default et
+}
+
+declare module 'date-fns/esm/locale/eu/index.js' {
+ import { eu } from 'date-fns/esm/locale'
+ export default eu
+}
+
+declare module 'date-fns/esm/locale/fa-IR/index.js' {
+ import { faIR } from 'date-fns/esm/locale'
+ export default faIR
+}
+
+declare module 'date-fns/esm/locale/fi/index.js' {
+ import { fi } from 'date-fns/esm/locale'
+ export default fi
+}
+
+declare module 'date-fns/esm/locale/fil/index.js' {
+ import { fil } from 'date-fns/esm/locale'
+ export default fil
+}
+
+declare module 'date-fns/esm/locale/fr/index.js' {
+ import { fr } from 'date-fns/esm/locale'
+ export default fr
+}
+
+declare module 'date-fns/esm/locale/fr-CA/index.js' {
+ import { frCA } from 'date-fns/esm/locale'
+ export default frCA
+}
+
+declare module 'date-fns/esm/locale/fr-CH/index.js' {
+ import { frCH } from 'date-fns/esm/locale'
+ export default frCH
+}
+
+declare module 'date-fns/esm/locale/gd/index.js' {
+ import { gd } from 'date-fns/esm/locale'
+ export default gd
+}
+
+declare module 'date-fns/esm/locale/gl/index.js' {
+ import { gl } from 'date-fns/esm/locale'
+ export default gl
+}
+
+declare module 'date-fns/esm/locale/gu/index.js' {
+ import { gu } from 'date-fns/esm/locale'
+ export default gu
+}
+
+declare module 'date-fns/esm/locale/he/index.js' {
+ import { he } from 'date-fns/esm/locale'
+ export default he
+}
+
+declare module 'date-fns/esm/locale/hi/index.js' {
+ import { hi } from 'date-fns/esm/locale'
+ export default hi
+}
+
+declare module 'date-fns/esm/locale/hr/index.js' {
+ import { hr } from 'date-fns/esm/locale'
+ export default hr
+}
+
+declare module 'date-fns/esm/locale/ht/index.js' {
+ import { ht } from 'date-fns/esm/locale'
+ export default ht
+}
+
+declare module 'date-fns/esm/locale/hu/index.js' {
+ import { hu } from 'date-fns/esm/locale'
+ export default hu
+}
+
+declare module 'date-fns/esm/locale/hy/index.js' {
+ import { hy } from 'date-fns/esm/locale'
+ export default hy
+}
+
+declare module 'date-fns/esm/locale/id/index.js' {
+ import { id } from 'date-fns/esm/locale'
+ export default id
+}
+
+declare module 'date-fns/esm/locale/is/index.js' {
+ import { is } from 'date-fns/esm/locale'
+ export default is
+}
+
+declare module 'date-fns/esm/locale/it/index.js' {
+ import { it } from 'date-fns/esm/locale'
+ export default it
+}
+
+declare module 'date-fns/esm/locale/ja/index.js' {
+ import { ja } from 'date-fns/esm/locale'
+ export default ja
+}
+
+declare module 'date-fns/esm/locale/ka/index.js' {
+ import { ka } from 'date-fns/esm/locale'
+ export default ka
+}
+
+declare module 'date-fns/esm/locale/kk/index.js' {
+ import { kk } from 'date-fns/esm/locale'
+ export default kk
+}
+
+declare module 'date-fns/esm/locale/kn/index.js' {
+ import { kn } from 'date-fns/esm/locale'
+ export default kn
+}
+
+declare module 'date-fns/esm/locale/ko/index.js' {
+ import { ko } from 'date-fns/esm/locale'
+ export default ko
+}
+
+declare module 'date-fns/esm/locale/lb/index.js' {
+ import { lb } from 'date-fns/esm/locale'
+ export default lb
+}
+
+declare module 'date-fns/esm/locale/lt/index.js' {
+ import { lt } from 'date-fns/esm/locale'
+ export default lt
+}
+
+declare module 'date-fns/esm/locale/lv/index.js' {
+ import { lv } from 'date-fns/esm/locale'
+ export default lv
+}
+
+declare module 'date-fns/esm/locale/mk/index.js' {
+ import { mk } from 'date-fns/esm/locale'
+ export default mk
+}
+
+declare module 'date-fns/esm/locale/mn/index.js' {
+ import { mn } from 'date-fns/esm/locale'
+ export default mn
+}
+
+declare module 'date-fns/esm/locale/ms/index.js' {
+ import { ms } from 'date-fns/esm/locale'
+ export default ms
+}
+
+declare module 'date-fns/esm/locale/mt/index.js' {
+ import { mt } from 'date-fns/esm/locale'
+ export default mt
+}
+
+declare module 'date-fns/esm/locale/nb/index.js' {
+ import { nb } from 'date-fns/esm/locale'
+ export default nb
+}
+
+declare module 'date-fns/esm/locale/nl/index.js' {
+ import { nl } from 'date-fns/esm/locale'
+ export default nl
+}
+
+declare module 'date-fns/esm/locale/nl-BE/index.js' {
+ import { nlBE } from 'date-fns/esm/locale'
+ export default nlBE
+}
+
+declare module 'date-fns/esm/locale/nn/index.js' {
+ import { nn } from 'date-fns/esm/locale'
+ export default nn
+}
+
+declare module 'date-fns/esm/locale/pl/index.js' {
+ import { pl } from 'date-fns/esm/locale'
+ export default pl
+}
+
+declare module 'date-fns/esm/locale/pt/index.js' {
+ import { pt } from 'date-fns/esm/locale'
+ export default pt
+}
+
+declare module 'date-fns/esm/locale/pt-BR/index.js' {
+ import { ptBR } from 'date-fns/esm/locale'
+ export default ptBR
+}
+
+declare module 'date-fns/esm/locale/ro/index.js' {
+ import { ro } from 'date-fns/esm/locale'
+ export default ro
+}
+
+declare module 'date-fns/esm/locale/ru/index.js' {
+ import { ru } from 'date-fns/esm/locale'
+ export default ru
+}
+
+declare module 'date-fns/esm/locale/sk/index.js' {
+ import { sk } from 'date-fns/esm/locale'
+ export default sk
+}
+
+declare module 'date-fns/esm/locale/sl/index.js' {
+ import { sl } from 'date-fns/esm/locale'
+ export default sl
+}
+
+declare module 'date-fns/esm/locale/sq/index.js' {
+ import { sq } from 'date-fns/esm/locale'
+ export default sq
+}
+
+declare module 'date-fns/esm/locale/sr/index.js' {
+ import { sr } from 'date-fns/esm/locale'
+ export default sr
+}
+
+declare module 'date-fns/esm/locale/sr-Latn/index.js' {
+ import { srLatn } from 'date-fns/esm/locale'
+ export default srLatn
+}
+
+declare module 'date-fns/esm/locale/sv/index.js' {
+ import { sv } from 'date-fns/esm/locale'
+ export default sv
+}
+
+declare module 'date-fns/esm/locale/ta/index.js' {
+ import { ta } from 'date-fns/esm/locale'
+ export default ta
+}
+
+declare module 'date-fns/esm/locale/te/index.js' {
+ import { te } from 'date-fns/esm/locale'
+ export default te
+}
+
+declare module 'date-fns/esm/locale/th/index.js' {
+ import { th } from 'date-fns/esm/locale'
+ export default th
+}
+
+declare module 'date-fns/esm/locale/tr/index.js' {
+ import { tr } from 'date-fns/esm/locale'
+ export default tr
+}
+
+declare module 'date-fns/esm/locale/ug/index.js' {
+ import { ug } from 'date-fns/esm/locale'
+ export default ug
+}
+
+declare module 'date-fns/esm/locale/uk/index.js' {
+ import { uk } from 'date-fns/esm/locale'
+ export default uk
+}
+
+declare module 'date-fns/esm/locale/uz/index.js' {
+ import { uz } from 'date-fns/esm/locale'
+ export default uz
+}
+
+declare module 'date-fns/esm/locale/vi/index.js' {
+ import { vi } from 'date-fns/esm/locale'
+ export default vi
+}
+
+declare module 'date-fns/esm/locale/zh-CN/index.js' {
+ import { zhCN } from 'date-fns/esm/locale'
+ export default zhCN
+}
+
+declare module 'date-fns/esm/locale/zh-TW/index.js' {
+ import { zhTW } from 'date-fns/esm/locale'
+ export default zhTW
+}
+
+// dateFns Global Interface
+
+interface dateFns {
+ add(date: Date | number, duration: Duration): Date
+
+ addBusinessDays(date: Date | number, amount: number): Date
+
+ addDays(date: Date | number, amount: number): Date
+
+ addHours(date: Date | number, amount: number): Date
+
+ addISOWeekYears(date: Date | number, amount: number): Date
+
+ addMilliseconds(date: Date | number, amount: number): Date
+
+ addMinutes(date: Date | number, amount: number): Date
+
+ addMonths(date: Date | number, amount: number): Date
+
+ addQuarters(date: Date | number, amount: number): Date
+
+ addSeconds(date: Date | number, amount: number): Date
+
+ addWeeks(date: Date | number, amount: number): Date
+
+ addYears(date: Date | number, amount: number): Date
+
+ areIntervalsOverlapping(
+ intervalLeft: Interval,
+ intervalRight: Interval,
+ options?: {
+ inclusive?: boolean
+ }
+ ): boolean
+
+ closestIndexTo(
+ dateToCompare: Date | number,
+ datesArray: (Date | number)[]
+ ): number
+
+ closestTo(dateToCompare: Date | number, datesArray: (Date | number)[]): Date
+
+ compareAsc(dateLeft: Date | number, dateRight: Date | number): number
+
+ compareDesc(dateLeft: Date | number, dateRight: Date | number): number
+
+ daysToWeeks(days: number): number
+
+ differenceInBusinessDays(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInCalendarDays(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInCalendarISOWeeks(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInCalendarISOWeekYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInCalendarMonths(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInCalendarQuarters(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInCalendarWeeks(
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): number
+
+ differenceInCalendarYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInDays(dateLeft: Date | number, dateRight: Date | number): number
+
+ differenceInHours(dateLeft: Date | number, dateRight: Date | number): number
+
+ differenceInISOWeekYears(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInMilliseconds(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInMinutes(dateLeft: Date | number, dateRight: Date | number): number
+
+ differenceInMonths(dateLeft: Date | number, dateRight: Date | number): number
+
+ differenceInQuarters(
+ dateLeft: Date | number,
+ dateRight: Date | number
+ ): number
+
+ differenceInSeconds(dateLeft: Date | number, dateRight: Date | number): number
+
+ differenceInWeeks(dateLeft: Date | number, dateRight: Date | number): number
+
+ differenceInYears(dateLeft: Date | number, dateRight: Date | number): number
+
+ eachDayOfInterval(
+ interval: Interval,
+ options?: {
+ step?: number
+ }
+ ): Date[]
+
+ eachHourOfInterval(
+ interval: Interval,
+ options?: {
+ step?: number
+ }
+ ): Date[]
+
+ eachMinuteOfInterval(
+ interval: Interval,
+ options?: {
+ step?: number
+ }
+ ): Date[]
+
+ eachMonthOfInterval(interval: Interval): Date[]
+
+ eachQuarterOfInterval(interval: Interval): Date[]
+
+ eachWeekendOfInterval(interval: Interval): Date[]
+
+ eachWeekendOfMonth(date: Date | number): Date[]
+
+ eachWeekendOfYear(date: Date | number): Date[]
+
+ eachWeekOfInterval(
+ interval: Interval,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date[]
+
+ eachYearOfInterval(interval: Interval): Date[]
+
+ endOfDay(date: Date | number): Date
+
+ endOfDecade(
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2
+ }
+ ): Date
+
+ endOfHour(date: Date | number): Date
+
+ endOfISOWeek(date: Date | number): Date
+
+ endOfISOWeekYear(date: Date | number): Date
+
+ endOfMinute(date: Date | number): Date
+
+ endOfMonth(date: Date | number): Date
+
+ endOfQuarter(date: Date | number): Date
+
+ endOfSecond(date: Date | number): Date
+
+ endOfToday(): Date
+
+ endOfTomorrow(): Date
+
+ endOfWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+
+ endOfYear(date: Date | number): Date
+
+ endOfYesterday(): Date
+
+ format(
+ date: Date | number,
+ format: string,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: number
+ useAdditionalWeekYearTokens?: boolean
+ useAdditionalDayOfYearTokens?: boolean
+ }
+ ): string
+
+ formatDistance(
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ includeSeconds?: boolean
+ addSuffix?: boolean
+ locale?: Locale
+ }
+ ): string
+
+ formatDistanceStrict(
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ addSuffix?: boolean
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'
+ roundingMethod?: 'floor' | 'ceil' | 'round'
+ locale?: Locale
+ }
+ ): string
+
+ formatDistanceToNow(
+ date: Date | number,
+ options?: {
+ includeSeconds?: boolean
+ addSuffix?: boolean
+ locale?: Locale
+ }
+ ): string
+
+ formatDistanceToNowStrict(
+ date: Date | number,
+ options?: {
+ addSuffix?: boolean
+ unit?: 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'
+ roundingMethod?: 'floor' | 'ceil' | 'round'
+ locale?: Locale
+ }
+ ): string
+
+ formatDuration(
+ duration: Duration,
+ options?: {
+ format?: string[]
+ zero?: boolean
+ delimiter?: string
+ locale?: Locale
+ }
+ ): string
+
+ formatISO(
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic'
+ representation?: 'complete' | 'date' | 'time'
+ }
+ ): string
+
+ formatISO9075(
+ date: Date | number,
+ options?: {
+ format?: 'extended' | 'basic'
+ representation?: 'complete' | 'date' | 'time'
+ }
+ ): string
+
+ formatISODuration(duration: Duration): string
+
+ formatRelative(
+ date: Date | number,
+ baseDate: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): string
+
+ formatRFC3339(
+ date: Date | number,
+ options?: {
+ fractionDigits?: 0 | 1 | 2 | 3
+ }
+ ): string
+
+ formatRFC7231(date: Date | number): string
+
+ fromUnixTime(unixTime: number): Date
+
+ getDate(date: Date | number): number
+
+ getDay(date: Date | number): 0 | 1 | 2 | 3 | 4 | 5 | 6
+
+ getDayOfYear(date: Date | number): number
+
+ getDaysInMonth(date: Date | number): number
+
+ getDaysInYear(date: Date | number): number
+
+ getDecade(date: Date | number): number
+
+ getHours(date: Date | number): number
+
+ getISODay(date: Date | number): number
+
+ getISOWeek(date: Date | number): number
+
+ getISOWeeksInYear(date: Date | number): number
+
+ getISOWeekYear(date: Date | number): number
+
+ getMilliseconds(date: Date | number): number
+
+ getMinutes(date: Date | number): number
+
+ getMonth(date: Date | number): number
+
+ getOverlappingDaysInIntervals(
+ intervalLeft: Interval,
+ intervalRight: Interval
+ ): number
+
+ getQuarter(date: Date | number): number
+
+ getSeconds(date: Date | number): number
+
+ getTime(date: Date | number): number
+
+ getUnixTime(date: Date | number): number
+
+ getWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): number
+
+ getWeekOfMonth(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): number
+
+ getWeeksInMonth(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): number
+
+ getWeekYear(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): number
+
+ getYear(date: Date | number): number
+
+ hoursToMilliseconds(hours: number): number
+
+ hoursToMinutes(hours: number): number
+
+ hoursToSeconds(hours: number): number
+
+ intervalToDuration(interval: Interval): Duration
+
+ intlFormat(
+ argument: Date | number,
+ formatOptions?: {
+ localeMatcher?: 'lookup' | 'best fit'
+ weekday?: 'narrow' | 'short' | 'long'
+ era?: 'narrow' | 'short' | 'long'
+ year?: 'numeric' | '2-digit'
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long'
+ day?: 'numeric' | '2-digit'
+ hour?: 'numeric' | '2-digit'
+ minute?: 'numeric' | '2-digit'
+ second?: 'numeric' | '2-digit'
+ timeZoneName?: 'short' | 'long'
+ formatMatcher?: 'basic' | 'best fit'
+ hour12?: boolean
+ timeZone?: string
+ },
+ localeOptions?: {
+ locale?: string | string[]
+ }
+ ): string
+
+ isAfter(date: Date | number, dateToCompare: Date | number): boolean
+
+ isBefore(date: Date | number, dateToCompare: Date | number): boolean
+
+ isDate(value: any): boolean
+
+ isEqual(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isExists(year: number, month: number, day: number): boolean
+
+ isFirstDayOfMonth(date: Date | number): boolean
+
+ isFriday(date: Date | number): boolean
+
+ isFuture(date: Date | number): boolean
+
+ isLastDayOfMonth(date: Date | number): boolean
+
+ isLeapYear(date: Date | number): boolean
+
+ isMatch(
+ dateString: string,
+ formatString: string,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ useAdditionalWeekYearTokens?: boolean
+ useAdditionalDayOfYearTokens?: boolean
+ }
+ ): boolean
+
+ isMonday(date: Date | number): boolean
+
+ isPast(date: Date | number): boolean
+
+ isSameDay(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isSameHour(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isSameISOWeek(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isSameISOWeekYear(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isSameMinute(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isSameMonth(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isSameQuarter(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isSameSecond(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isSameWeek(
+ dateLeft: Date | number,
+ dateRight: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): boolean
+
+ isSameYear(dateLeft: Date | number, dateRight: Date | number): boolean
+
+ isSaturday(date: Date | number): boolean
+
+ isSunday(date: Date | number): boolean
+
+ isThisHour(date: Date | number): boolean
+
+ isThisISOWeek(date: Date | number): boolean
+
+ isThisMinute(date: Date | number): boolean
+
+ isThisMonth(date: Date | number): boolean
+
+ isThisQuarter(date: Date | number): boolean
+
+ isThisSecond(date: Date | number): boolean
+
+ isThisWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): boolean
+
+ isThisYear(date: Date | number): boolean
+
+ isThursday(date: Date | number): boolean
+
+ isToday(date: Date | number): boolean
+
+ isTomorrow(date: Date | number): boolean
+
+ isTuesday(date: Date | number): boolean
+
+ isValid(date: any): boolean
+
+ isWednesday(date: Date | number): boolean
+
+ isWeekend(date: Date | number): boolean
+
+ isWithinInterval(date: Date | number, interval: Interval): boolean
+
+ isYesterday(date: Date | number): boolean
+
+ lastDayOfDecade(date: Date | number): Date
+
+ lastDayOfISOWeek(date: Date | number): Date
+
+ lastDayOfISOWeekYear(date: Date | number): Date
+
+ lastDayOfMonth(date: Date | number): Date
+
+ lastDayOfQuarter(
+ date: Date | number,
+ options?: {
+ additionalDigits?: 0 | 1 | 2
+ }
+ ): Date
+
+ lastDayOfWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+
+ lastDayOfYear(date: Date | number): Date
+
+ lightFormat(date: Date | number, format: string): string
+
+ max(datesArray: (Date | number)[]): Date
+
+ milliseconds(duration: Duration): number
+
+ millisecondsToHours(milliseconds: number): number
+
+ millisecondsToMinutes(milliseconds: number): number
+
+ millisecondsToSeconds(milliseconds: number): number
+
+ min(datesArray: (Date | number)[]): Date
+
+ minutesToHours(minutes: number): number
+
+ minutesToMilliseconds(minutes: number): number
+
+ minutesToSeconds(minutes: number): number
+
+ monthsToQuarters(months: number): number
+
+ monthsToYears(months: number): number
+
+ nextDay(date: Date | number, day: Day): Date
+
+ nextFriday(date: Date | number): Date
+
+ nextMonday(date: Date | number): Date
+
+ nextSaturday(date: Date | number): Date
+
+ nextSunday(date: Date | number): Date
+
+ nextThursday(date: Date | number): Date
+
+ nextTuesday(date: Date | number): Date
+
+ nextWednesday(date: Date | number): Date
+
+ parse(
+ dateString: string,
+ formatString: string,
+ referenceDate: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ useAdditionalWeekYearTokens?: boolean
+ useAdditionalDayOfYearTokens?: boolean
+ }
+ ): Date
+
+ parseISO(
+ argument: string,
+ options?: {
+ additionalDigits?: 0 | 1 | 2
+ }
+ ): Date
+
+ parseJSON(argument: string | number | Date): Date
+
+ quartersToMonths(quarters: number): number
+
+ quartersToYears(quarters: number): number
+
+ roundToNearestMinutes(
+ date: Date | number,
+ options?: {
+ nearestTo?: number
+ }
+ ): Date
+
+ secondsToHours(seconds: number): number
+
+ secondsToMilliseconds(seconds: number): number
+
+ secondsToMinutes(seconds: number): number
+
+ set(
+ date: Date | number,
+ values: {
+ year?: number
+ month?: number
+ date?: number
+ hours?: number
+ minutes?: number
+ seconds?: number
+ milliseconds?: number
+ }
+ ): Date
+
+ setDate(date: Date | number, dayOfMonth: number): Date
+
+ setDay(
+ date: Date | number,
+ day: number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+
+ setDayOfYear(date: Date | number, dayOfYear: number): Date
+
+ setHours(date: Date | number, hours: number): Date
+
+ setISODay(date: Date | number, day: number): Date
+
+ setISOWeek(date: Date | number, isoWeek: number): Date
+
+ setISOWeekYear(date: Date | number, isoWeekYear: number): Date
+
+ setMilliseconds(date: Date | number, milliseconds: number): Date
+
+ setMinutes(date: Date | number, minutes: number): Date
+
+ setMonth(date: Date | number, month: number): Date
+
+ setQuarter(date: Date | number, quarter: number): Date
+
+ setSeconds(date: Date | number, seconds: number): Date
+
+ setWeek(
+ date: Date | number,
+ week: number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): Date
+
+ setWeekYear(
+ date: Date | number,
+ weekYear: number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): Date
+
+ setYear(date: Date | number, year: number): Date
+
+ startOfDay(date: Date | number): Date
+
+ startOfDecade(date: Date | number): Date
+
+ startOfHour(date: Date | number): Date
+
+ startOfISOWeek(date: Date | number): Date
+
+ startOfISOWeekYear(date: Date | number): Date
+
+ startOfMinute(date: Date | number): Date
+
+ startOfMonth(date: Date | number): Date
+
+ startOfQuarter(date: Date | number): Date
+
+ startOfSecond(date: Date | number): Date
+
+ startOfToday(): Date
+
+ startOfTomorrow(): Date
+
+ startOfWeek(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+ ): Date
+
+ startOfWeekYear(
+ date: Date | number,
+ options?: {
+ locale?: Locale
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7
+ }
+ ): Date
+
+ startOfYear(date: Date | number): Date
+
+ startOfYesterday(): Date
+
+ sub(date: Date | number, duration: Duration): Date
+
+ subBusinessDays(date: Date | number, amount: number): Date
+
+ subDays(date: Date | number, amount: number): Date
+
+ subHours(date: Date | number, amount: number): Date
+
+ subISOWeekYears(date: Date | number, amount: number): Date
+
+ subMilliseconds(date: Date | number, amount: number): Date
+
+ subMinutes(date: Date | number, amount: number): Date
+
+ subMonths(date: Date | number, amount: number): Date
+
+ subQuarters(date: Date | number, amount: number): Date
+
+ subSeconds(date: Date | number, amount: number): Date
+
+ subWeeks(date: Date | number, amount: number): Date
+
+ subYears(date: Date | number, amount: number): Date
+
+ toDate(argument: Date | number): Date
+
+ weeksToDays(weeks: number): number
+
+ yearsToMonths(years: number): number
+
+ yearsToQuarters(years: number): number
+
+ daysInWeek: number
+
+ maxTime: number
+
+ millisecondsInMinute: number
+
+ millisecondsInHour: number
+
+ millisecondsInSecond: number
+
+ minTime: number
+
+ minutesInHour: number
+
+ monthsInQuarter: number
+
+ monthsInYear: number
+
+ quartersInYear: number
+
+ secondsInHour: number
+
+ secondsInMinute: number
+}
diff --git a/date-fns/yarn.lock b/date-fns/yarn.lock
new file mode 100644
index 0000000..c53cbe0
--- /dev/null
+++ b/date-fns/yarn.lock
@@ -0,0 +1,12767 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/cli@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.5.5.tgz#bdb6d9169e93e241a08f5f7b0265195bf38ef5ec"
+ integrity sha512-UHI+7pHv/tk9g6WXQKYz+kmXTI77YtuY3vqC59KIqcoWEjsJJSG6rAxKaLsgj3LDyadsPrCB929gVOKM6Hui0w==
+ dependencies:
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.1.0"
+ glob "^7.0.0"
+ lodash "^4.17.13"
+ mkdirp "^0.5.1"
+ output-file-sync "^2.0.0"
+ slash "^2.0.0"
+ source-map "^0.5.0"
+ optionalDependencies:
+ chokidar "^2.0.4"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
+ integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/code-frame@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
+ integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
+ dependencies:
+ "@babel/highlight" "^7.10.4"
+
+"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c"
+ integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==
+ dependencies:
+ browserslist "^4.12.0"
+ invariant "^2.2.4"
+ semver "^5.5.0"
+
+"@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.8":
+ version "7.13.15"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4"
+ integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==
+
+"@babel/core@^7.1.0", "@babel/core@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30"
+ integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==
+ dependencies:
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.5.5"
+ "@babel/helpers" "^7.5.5"
+ "@babel/parser" "^7.5.5"
+ "@babel/template" "^7.4.4"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
+ convert-source-map "^1.1.0"
+ debug "^4.1.0"
+ json5 "^2.1.0"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.0.0", "@babel/generator@^7.4.0", "@babel/generator@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf"
+ integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==
+ dependencies:
+ "@babel/types" "^7.5.5"
+ jsesc "^2.5.1"
+ lodash "^4.17.13"
+ source-map "^0.5.0"
+ trim-right "^1.0.1"
+
+"@babel/generator@^7.11.5":
+ version "7.11.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.5.tgz#a5582773425a468e4ba269d9a1f701fbca6a7a82"
+ integrity sha512-9UqHWJ4IwRTy4l0o8gq2ef8ws8UPzvtMkVKjTLAiRmza9p9V6Z+OfuNd9fB1j5Q67F+dVJtPC2sZXI8NM9br4g==
+ dependencies:
+ "@babel/types" "^7.11.5"
+ jsesc "^2.5.1"
+ source-map "^0.6.1"
+
+"@babel/helper-annotate-as-pure@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
+ integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-annotate-as-pure@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
+ integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3"
+ integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-call-delegate@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
+ integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.4.4"
+ "@babel/traverse" "^7.4.4"
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-compilation-targets@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2"
+ integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==
+ dependencies:
+ "@babel/compat-data" "^7.10.4"
+ browserslist "^4.12.0"
+ invariant "^2.2.4"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/helper-compilation-targets@^7.13.8":
+ version "7.13.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5"
+ integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==
+ dependencies:
+ "@babel/compat-data" "^7.13.12"
+ "@babel/helper-validator-option" "^7.12.17"
+ browserslist "^4.14.5"
+ semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d"
+ integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-member-expression-to-functions" "^7.10.5"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.10.4"
+
+"@babel/helper-create-regexp-features-plugin@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8"
+ integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-regex" "^7.10.4"
+ regexpu-core "^4.7.0"
+
+"@babel/helper-define-map@^7.10.4":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30"
+ integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/types" "^7.10.5"
+ lodash "^4.17.19"
+
+"@babel/helper-explode-assignable-expression@^7.10.4":
+ version "7.11.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b"
+ integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-function-name@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
+ integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-function-name@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a"
+ integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-get-function-arity@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
+ integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-get-function-arity@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
+ integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-hoist-variables@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e"
+ integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-hoist-variables@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
+ integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==
+ dependencies:
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df"
+ integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==
+ dependencies:
+ "@babel/types" "^7.11.0"
+
+"@babel/helper-module-imports@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
+ integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-module-imports@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
+ integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359"
+ integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==
+ dependencies:
+ "@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-module-transforms@^7.4.4":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
+ integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+ "@babel/template" "^7.4.4"
+ "@babel/types" "^7.5.5"
+ lodash "^4.17.13"
+
+"@babel/helper-optimise-call-expression@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673"
+ integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-plugin-utils@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
+ integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+
+"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
+ integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
+
+"@babel/helper-plugin-utils@^7.13.0":
+ version "7.13.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af"
+ integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==
+
+"@babel/helper-regex@^7.10.4":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0"
+ integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==
+ dependencies:
+ lodash "^4.17.19"
+
+"@babel/helper-remap-async-to-generator@^7.10.4":
+ version "7.11.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d"
+ integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-wrap-function" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-replace-supers@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf"
+ integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==
+ dependencies:
+ "@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@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
+ integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+ dependencies:
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-simple-access@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461"
+ integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==
+ dependencies:
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729"
+ integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==
+ dependencies:
+ "@babel/types" "^7.11.0"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf"
+ integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==
+ dependencies:
+ "@babel/types" "^7.12.1"
+
+"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f"
+ integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==
+ dependencies:
+ "@babel/types" "^7.11.0"
+
+"@babel/helper-split-export-declaration@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
+ integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==
+ dependencies:
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-validator-identifier@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
+ integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
+
+"@babel/helper-validator-identifier@^7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
+ integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
+
+"@babel/helper-validator-option@^7.12.17":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
+ integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==
+
+"@babel/helper-wrap-function@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87"
+ integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helpers@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e"
+ integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==
+ dependencies:
+ "@babel/template" "^7.4.4"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
+
+"@babel/highlight@^7.0.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
+ integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/highlight@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
+ integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.4"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/node@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.5.5.tgz#5db48a3bcee64d9eda6474f2a0a55b235d0438b5"
+ integrity sha512-xsW6il+yY+lzXMsQuvIJNA7tU8ix/f4G6bDt4DrnCkVpsR6clk9XgEbp7QF+xGNDdoD7M7QYokCH83pm+UjD0w==
+ dependencies:
+ "@babel/polyfill" "^7.0.0"
+ "@babel/register" "^7.5.5"
+ commander "^2.8.1"
+ lodash "^4.17.13"
+ node-environment-flags "^1.0.5"
+ v8flags "^3.1.1"
+
+"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
+ integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
+
+"@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.9.4":
+ version "7.11.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037"
+ integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==
+
+"@babel/plugin-proposal-async-generator-functions@^7.10.4":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558"
+ integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-remap-async-to-generator" "^7.10.4"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+
+"@babel/plugin-proposal-class-properties@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807"
+ integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-proposal-dynamic-import@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e"
+ integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+
+"@babel/plugin-proposal-export-namespace-from@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54"
+ integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db"
+ integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8"
+ integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a"
+ integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+
+"@babel/plugin-proposal-numeric-separator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06"
+ integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af"
+ integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-transform-parameters" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.13.8":
+ version "7.13.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a"
+ integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==
+ dependencies:
+ "@babel/compat-data" "^7.13.8"
+ "@babel/helper-compilation-targets" "^7.13.8"
+ "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.13.0"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd"
+ integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+
+"@babel/plugin-proposal-optional-chaining@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076"
+ integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+
+"@babel/plugin-proposal-optional-chaining@^7.12.7":
+ version "7.12.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c"
+ integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+
+"@babel/plugin-proposal-private-methods@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909"
+ integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d"
+ integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-async-generators@^7.8.0":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c"
+ integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+ integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-json-strings@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.0.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
+ integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-top-level-await@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d"
+ integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-typescript@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz#2f55e770d3501e83af217d782cb7517d7bb34d25"
+ integrity sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-arrow-functions@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd"
+ integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-arrow-functions@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
+ integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-async-to-generator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37"
+ integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-remap-async-to-generator" "^7.10.4"
+
+"@babel/plugin-transform-block-scoped-functions@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8"
+ integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-block-scoping@^7.10.4":
+ version "7.11.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215"
+ integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-block-scoping@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce"
+ integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ lodash "^4.17.13"
+
+"@babel/plugin-transform-classes@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7"
+ integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-define-map" "^7.10.4"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.10.4"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb"
+ integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-destructuring@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5"
+ integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-destructuring@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a"
+ integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee"
+ integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-duplicate-keys@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47"
+ integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-exponentiation-operator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e"
+ integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-for-of@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9"
+ integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-function-name@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7"
+ integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-literals@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c"
+ integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-member-expression-literals@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7"
+ integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-modules-amd@^7.10.4":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1"
+ integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.10.5"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0"
+ integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-simple-access" "^7.10.4"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74"
+ integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.4.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-systemjs@^7.10.4":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85"
+ integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.10.4"
+ "@babel/helper-module-transforms" "^7.10.5"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e"
+ integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6"
+ integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+
+"@babel/plugin-transform-new-target@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888"
+ integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-object-super@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894"
+ integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.10.4"
+
+"@babel/plugin-transform-parameters@^7.10.4":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a"
+ integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-parameters@^7.13.0":
+ version "7.13.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007"
+ integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.13.0"
+
+"@babel/plugin-transform-parameters@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16"
+ integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==
+ dependencies:
+ "@babel/helper-call-delegate" "^7.4.4"
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-property-literals@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0"
+ integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-regenerator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63"
+ integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==
+ dependencies:
+ regenerator-transform "^0.14.2"
+
+"@babel/plugin-transform-reserved-words@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd"
+ integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-shorthand-properties@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6"
+ integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-spread@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc"
+ integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0"
+
+"@babel/plugin-transform-sticky-regex@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d"
+ integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-regex" "^7.10.4"
+
+"@babel/plugin-transform-template-literals@^7.10.4":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c"
+ integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-template-literals@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0"
+ integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-typeof-symbol@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc"
+ integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-typescript@^7.10.4":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz#2b4879676af37342ebb278216dd090ac67f13abb"
+ integrity sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.10.5"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-typescript" "^7.10.4"
+
+"@babel/plugin-transform-unicode-escapes@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007"
+ integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-unicode-regex@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8"
+ integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/polyfill@^7.0.0":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.4.4.tgz#78801cf3dbe657844eeabf31c1cae3828051e893"
+ integrity sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==
+ dependencies:
+ core-js "^2.6.5"
+ regenerator-runtime "^0.13.2"
+
+"@babel/preset-env@^7.11.5":
+ version "7.11.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272"
+ integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==
+ dependencies:
+ "@babel/compat-data" "^7.11.0"
+ "@babel/helper-compilation-targets" "^7.10.4"
+ "@babel/helper-module-imports" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-proposal-async-generator-functions" "^7.10.4"
+ "@babel/plugin-proposal-class-properties" "^7.10.4"
+ "@babel/plugin-proposal-dynamic-import" "^7.10.4"
+ "@babel/plugin-proposal-export-namespace-from" "^7.10.4"
+ "@babel/plugin-proposal-json-strings" "^7.10.4"
+ "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4"
+ "@babel/plugin-proposal-numeric-separator" "^7.10.4"
+ "@babel/plugin-proposal-object-rest-spread" "^7.11.0"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.10.4"
+ "@babel/plugin-proposal-optional-chaining" "^7.11.0"
+ "@babel/plugin-proposal-private-methods" "^7.10.4"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.10.4"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+ "@babel/plugin-syntax-class-properties" "^7.10.4"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+ "@babel/plugin-syntax-top-level-await" "^7.10.4"
+ "@babel/plugin-transform-arrow-functions" "^7.10.4"
+ "@babel/plugin-transform-async-to-generator" "^7.10.4"
+ "@babel/plugin-transform-block-scoped-functions" "^7.10.4"
+ "@babel/plugin-transform-block-scoping" "^7.10.4"
+ "@babel/plugin-transform-classes" "^7.10.4"
+ "@babel/plugin-transform-computed-properties" "^7.10.4"
+ "@babel/plugin-transform-destructuring" "^7.10.4"
+ "@babel/plugin-transform-dotall-regex" "^7.10.4"
+ "@babel/plugin-transform-duplicate-keys" "^7.10.4"
+ "@babel/plugin-transform-exponentiation-operator" "^7.10.4"
+ "@babel/plugin-transform-for-of" "^7.10.4"
+ "@babel/plugin-transform-function-name" "^7.10.4"
+ "@babel/plugin-transform-literals" "^7.10.4"
+ "@babel/plugin-transform-member-expression-literals" "^7.10.4"
+ "@babel/plugin-transform-modules-amd" "^7.10.4"
+ "@babel/plugin-transform-modules-commonjs" "^7.10.4"
+ "@babel/plugin-transform-modules-systemjs" "^7.10.4"
+ "@babel/plugin-transform-modules-umd" "^7.10.4"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4"
+ "@babel/plugin-transform-new-target" "^7.10.4"
+ "@babel/plugin-transform-object-super" "^7.10.4"
+ "@babel/plugin-transform-parameters" "^7.10.4"
+ "@babel/plugin-transform-property-literals" "^7.10.4"
+ "@babel/plugin-transform-regenerator" "^7.10.4"
+ "@babel/plugin-transform-reserved-words" "^7.10.4"
+ "@babel/plugin-transform-shorthand-properties" "^7.10.4"
+ "@babel/plugin-transform-spread" "^7.11.0"
+ "@babel/plugin-transform-sticky-regex" "^7.10.4"
+ "@babel/plugin-transform-template-literals" "^7.10.4"
+ "@babel/plugin-transform-typeof-symbol" "^7.10.4"
+ "@babel/plugin-transform-unicode-escapes" "^7.10.4"
+ "@babel/plugin-transform-unicode-regex" "^7.10.4"
+ "@babel/preset-modules" "^0.1.3"
+ "@babel/types" "^7.11.5"
+ browserslist "^4.12.0"
+ core-js-compat "^3.6.2"
+ invariant "^2.2.2"
+ levenary "^1.1.1"
+ semver "^5.5.0"
+
+"@babel/preset-modules@^0.1.3":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e"
+ integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/preset-typescript@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz#7d5d052e52a682480d6e2cc5aa31be61c8c25e36"
+ integrity sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-transform-typescript" "^7.10.4"
+
+"@babel/register@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.5.5.tgz#40fe0d474c8c8587b28d6ae18a03eddad3dac3c1"
+ integrity sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ==
+ dependencies:
+ core-js "^3.0.0"
+ find-cache-dir "^2.0.0"
+ lodash "^4.17.13"
+ mkdirp "^0.5.1"
+ pirates "^4.0.0"
+ source-map-support "^0.5.9"
+
+"@babel/runtime@^7.8.4":
+ version "7.11.2"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
+ integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
+ integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.4.4"
+ "@babel/types" "^7.4.4"
+
+"@babel/template@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
+ integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/parser" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb"
+ integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==
+ dependencies:
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.5.5"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+ "@babel/parser" "^7.5.5"
+ "@babel/types" "^7.5.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.13"
+
+"@babel/traverse@^7.10.4":
+ version "7.11.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3"
+ integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/generator" "^7.11.5"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.11.0"
+ "@babel/parser" "^7.11.5"
+ "@babel/types" "^7.11.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.19"
+
+"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a"
+ integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
+"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5":
+ version "7.11.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d"
+ integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.4"
+ lodash "^4.17.19"
+ to-fast-properties "^2.0.0"
+
+"@babel/types@^7.12.1":
+ version "7.12.12"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299"
+ integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.12.11"
+ lodash "^4.17.19"
+ to-fast-properties "^2.0.0"
+
+"@cnakazawa/watch@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef"
+ integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==
+ dependencies:
+ exec-sh "^0.3.2"
+ minimist "^1.2.0"
+
+"@date-fns/date-fns-db@^0.0.14":
+ version "0.0.14"
+ resolved "https://registry.yarnpkg.com/@date-fns/date-fns-db/-/date-fns-db-0.0.14.tgz#7ca0eee070bfdb789778a5972afbcefe57971aba"
+ integrity sha512-4Cg+IDM2XRl+cPN08i7c4ohb7wlF1FDxvf4e6GjQtX5dn9yZLAhVCvdu72lD8C71SjyO7DLY7KC9cEtSrRMx4g==
+
+"@date-fns/date-fns-scripts@0.0.4":
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/@date-fns/date-fns-scripts/-/date-fns-scripts-0.0.4.tgz#c4ba7fbf766e3024eb77d57f64d3a39d29b2977a"
+ integrity sha512-USNncRFPROEgDmpb4iuqfgvw2Ok+lm6juXrVheW6714rKkbgubgE4Ob5c4KLN2TGPZg4ZC5AcXo381vCAlGVTA==
+ dependencies:
+ "@date-fns/date-fns-db" "^0.0.14"
+ firebase "^8.2.2"
+ firebase-admin "^9.4.2"
+ json-bond "^0.1.0"
+ typesaurus "^7.1.0"
+
+"@firebase/analytics-types@0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.4.0.tgz#d6716f9fa36a6e340bc0ecfe68af325aa6f60508"
+ integrity sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA==
+
+"@firebase/analytics@0.6.2":
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.6.2.tgz#7f45675a1b524fff4d9e9fe318fd6e2ed067a325"
+ integrity sha512-4Ceov+rPfOEPIdbjlpTim/wbcUUneIesHag4UOzvmFsRRXqbxLwQpyZQWEbTSriUeU8uTKj9yOW32hsskV9Klg==
+ dependencies:
+ "@firebase/analytics-types" "0.4.0"
+ "@firebase/component" "0.1.21"
+ "@firebase/installations" "0.4.19"
+ "@firebase/logger" "0.2.6"
+ "@firebase/util" "0.3.4"
+ tslib "^1.11.1"
+
+"@firebase/app-types@0.6.1":
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.6.1.tgz#dcbd23030a71c0c74fc95d4a3f75ba81653850e9"
+ integrity sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==
+
+"@firebase/app@0.6.13":
+ version "0.6.13"
+ resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.6.13.tgz#f2e9fa9e75815e54161dc34659a60f1fffd9a450"
+ integrity sha512-xGrJETzvCb89VYbGSHFHCW7O/y067HRxT7MGehUE1xMxdPVBDNayHnxEuKwzfGvXAjVmajXBKFlKxaCWpgSjCQ==
+ dependencies:
+ "@firebase/app-types" "0.6.1"
+ "@firebase/component" "0.1.21"
+ "@firebase/logger" "0.2.6"
+ "@firebase/util" "0.3.4"
+ dom-storage "2.1.0"
+ tslib "^1.11.1"
+ xmlhttprequest "1.8.0"
+
+"@firebase/auth-interop-types@0.1.5":
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz#9fc9bd7c879f16b8d1bb08373a0f48c3a8b74557"
+ integrity sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==
+
+"@firebase/auth-types@0.10.1":
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.10.1.tgz#7815e71c9c6f072034415524b29ca8f1d1770660"
+ integrity sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw==
+
+"@firebase/auth@0.16.1":
+ version "0.16.1"
+ resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.16.1.tgz#8b0c9a9c6ab29694ea6d7f467d91b9d3dd22fce8"
+ integrity sha512-7juD7D/kaxNti/xa5G+ZGJJs+bdJUWOW0MlNBtXwiG+TjMh69EDmwJnQmmc9h/32QVvXt1qo1OGWOoMMpF/2Gg==
+ dependencies:
+ "@firebase/auth-types" "0.10.1"
+
+"@firebase/component@0.1.21":
+ version "0.1.21"
+ resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.1.21.tgz#56062eb0d449dc1e7bbef3c084a9b5fa48c7c14d"
+ integrity sha512-kd5sVmCLB95EK81Pj+yDTea8pzN2qo/1yr0ua9yVi6UgMzm6zAeih73iVUkaat96MAHy26yosMufkvd3zC4IKg==
+ dependencies:
+ "@firebase/util" "0.3.4"
+ tslib "^1.11.1"
+
+"@firebase/database-types@0.6.1", "@firebase/database-types@^0.6.1":
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.6.1.tgz#cf1cfc03e617ed4c2561703781f85ba4c707ff65"
+ integrity sha512-JtL3FUbWG+bM59iYuphfx9WOu2Mzf0OZNaqWiQ7lJR8wBe7bS9rIm9jlBFtksB7xcya1lZSQPA/GAy2jIlMIkA==
+ dependencies:
+ "@firebase/app-types" "0.6.1"
+
+"@firebase/database@0.8.2":
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.8.2.tgz#cfe893fa467bb5e55056ab2ffa8b2abc66a8ad52"
+ integrity sha512-E86yrom0Ii+61UScG44y1q3H3NuozzGGTGbYmiyTe1qK8Qvzuiu7yyfdDnqFW2fkeKvTRLoDeCpgZy27FgEndQ==
+ dependencies:
+ "@firebase/auth-interop-types" "0.1.5"
+ "@firebase/component" "0.1.21"
+ "@firebase/database-types" "0.6.1"
+ "@firebase/logger" "0.2.6"
+ "@firebase/util" "0.3.4"
+ faye-websocket "0.11.3"
+ tslib "^1.11.1"
+
+"@firebase/database@^0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.8.1.tgz#a7bc1c01052d35817a242c21bfe09ab29ee485a3"
+ integrity sha512-/1HhR4ejpqUaM9Cn3KSeNdQvdlehWIhdfTVWFxS73ZlLYf7ayk9jITwH10H3ZOIm5yNzxF67p/U7Z/0IPhgWaQ==
+ dependencies:
+ "@firebase/auth-interop-types" "0.1.5"
+ "@firebase/component" "0.1.21"
+ "@firebase/database-types" "0.6.1"
+ "@firebase/logger" "0.2.6"
+ "@firebase/util" "0.3.4"
+ faye-websocket "0.11.3"
+ tslib "^1.11.1"
+
+"@firebase/firestore-types@2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.1.0.tgz#ad406c6fd7f0eae7ea52979f712daa0166aef665"
+ integrity sha512-jietErBWihMvJkqqEquQy5GgoEwzHnMXXC/TsVoe9FPysXm1/AeJS12taS7ZYvenAtyvL/AEJyKrRKRh4adcJQ==
+
+"@firebase/firestore@2.1.2":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-2.1.2.tgz#6a09062e4e4212ef52e46a9ce44b1e0c37c553f3"
+ integrity sha512-8yUdBLLr6UhE+IjPR+fxLBD0bDnEqF9GalohfURZeLQPaL3b+LtqqGCLvvXC4MKT0lJAHOV8J9LA6rHj8vI0/Q==
+ dependencies:
+ "@firebase/component" "0.1.21"
+ "@firebase/firestore-types" "2.1.0"
+ "@firebase/logger" "0.2.6"
+ "@firebase/util" "0.3.4"
+ "@firebase/webchannel-wrapper" "0.4.1"
+ "@grpc/grpc-js" "^1.0.0"
+ "@grpc/proto-loader" "^0.5.0"
+ node-fetch "2.6.1"
+ tslib "^1.11.1"
+
+"@firebase/functions-types@0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.4.0.tgz#0b789f4fe9a9c0b987606c4da10139345b40f6b9"
+ integrity sha512-3KElyO3887HNxtxNF1ytGFrNmqD+hheqjwmT3sI09FaDCuaxGbOnsXAXH2eQ049XRXw9YQpHMgYws/aUNgXVyQ==
+
+"@firebase/functions@0.6.1":
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.6.1.tgz#32640b8f877637057dfaaeb122be8c8e99ad1af7"
+ integrity sha512-xNCAY3cLlVWE8Azf+/84OjnaXMoyUstJ3vwVRG0ie22QhsdQuPa1tXTiPX4Tmm+Hbbd/Aw0A/7dkEnuW+zYzaQ==
+ dependencies:
+ "@firebase/component" "0.1.21"
+ "@firebase/functions-types" "0.4.0"
+ "@firebase/messaging-types" "0.5.0"
+ node-fetch "2.6.1"
+ tslib "^1.11.1"
+
+"@firebase/installations-types@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.3.4.tgz#589a941d713f4f64bf9f4feb7f463505bab1afa2"
+ integrity sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==
+
+"@firebase/installations@0.4.19":
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.4.19.tgz#53f50aeb022996963f89f59560d7b4cf801869da"
+ integrity sha512-QqAQzosKVVqIx7oMt5ujF4NsIXgtlTnej4JXGJ8sQQuJoMnt3T+PFQRHbr7uOfVaBiHYhEaXCcmmhfKUHwKftw==
+ dependencies:
+ "@firebase/component" "0.1.21"
+ "@firebase/installations-types" "0.3.4"
+ "@firebase/util" "0.3.4"
+ idb "3.0.2"
+ tslib "^1.11.1"
+
+"@firebase/logger@0.2.6":
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.2.6.tgz#3aa2ca4fe10327cabf7808bd3994e88db26d7989"
+ integrity sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==
+
+"@firebase/messaging-types@0.5.0":
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/@firebase/messaging-types/-/messaging-types-0.5.0.tgz#c5d0ef309ced1758fda93ef3ac70a786de2e73c4"
+ integrity sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==
+
+"@firebase/messaging@0.7.3":
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.7.3.tgz#31dded892455e4d0680e1452ff2fbfdfb9e4ce9b"
+ integrity sha512-63nOP2SmQJrj9jrhV3K96L5MRKS6AqmFVLX1XbGk6K6lz38ZC4LIoCcHxzUBXY7fCAuZvNmh/YB3pE8B2mTs8A==
+ dependencies:
+ "@firebase/component" "0.1.21"
+ "@firebase/installations" "0.4.19"
+ "@firebase/messaging-types" "0.5.0"
+ "@firebase/util" "0.3.4"
+ idb "3.0.2"
+ tslib "^1.11.1"
+
+"@firebase/performance-types@0.0.13":
+ version "0.0.13"
+ resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.0.13.tgz#58ce5453f57e34b18186f74ef11550dfc558ede6"
+ integrity sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==
+
+"@firebase/performance@0.4.5":
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.4.5.tgz#3ab89208ed6fb80165e5594058e46dc85113cd78"
+ integrity sha512-oenEOaV/UzvV8XPi8afYQ71RzyrHoBesqOyXqb1TOg7dpU+i+UJ5PS8K64DytKUHTxQl+UJFcuxNpsoy9BpWzw==
+ dependencies:
+ "@firebase/component" "0.1.21"
+ "@firebase/installations" "0.4.19"
+ "@firebase/logger" "0.2.6"
+ "@firebase/performance-types" "0.0.13"
+ "@firebase/util" "0.3.4"
+ tslib "^1.11.1"
+
+"@firebase/polyfill@0.3.36":
+ version "0.3.36"
+ resolved "https://registry.yarnpkg.com/@firebase/polyfill/-/polyfill-0.3.36.tgz#c057cce6748170f36966b555749472b25efdb145"
+ integrity sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==
+ dependencies:
+ core-js "3.6.5"
+ promise-polyfill "8.1.3"
+ whatwg-fetch "2.0.4"
+
+"@firebase/remote-config-types@0.1.9":
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz#fe6bbe4d08f3b6e92fce30e4b7a9f4d6a96d6965"
+ integrity sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==
+
+"@firebase/remote-config@0.1.30":
+ version "0.1.30"
+ resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.1.30.tgz#2cd6bbbed526a98b154e13a2cc73e748a77d7c3d"
+ integrity sha512-LAfLDcp1AN0V/7AkxBuTKy+Qnq9fKYKxbA5clrXRNVzJbTVnF5eFGsaUOlkes0ESG6lbqKy5ZcDgdl73zBIhAA==
+ dependencies:
+ "@firebase/component" "0.1.21"
+ "@firebase/installations" "0.4.19"
+ "@firebase/logger" "0.2.6"
+ "@firebase/remote-config-types" "0.1.9"
+ "@firebase/util" "0.3.4"
+ tslib "^1.11.1"
+
+"@firebase/storage-types@0.3.13":
+ version "0.3.13"
+ resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.3.13.tgz#cd43e939a2ab5742e109eb639a313673a48b5458"
+ integrity sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==
+
+"@firebase/storage@0.4.2":
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.4.2.tgz#bc5924b87bd2fdd4ab0de49851c0125ebc236b89"
+ integrity sha512-87CrvKrf8kijVekRBmUs8htsNz7N5X/pDhv3BvJBqw8K65GsUolpyjx0f4QJRkCRUYmh3MSkpa5P08lpVbC6nQ==
+ dependencies:
+ "@firebase/component" "0.1.21"
+ "@firebase/storage-types" "0.3.13"
+ "@firebase/util" "0.3.4"
+ tslib "^1.11.1"
+
+"@firebase/util@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.3.4.tgz#e389d0e0e2aac88a5235b06ba9431db999d4892b"
+ integrity sha512-VwjJUE2Vgr2UMfH63ZtIX9Hd7x+6gayi6RUXaTqEYxSbf/JmehLmAEYSuxS/NckfzAXWeGnKclvnXVibDgpjQQ==
+ dependencies:
+ tslib "^1.11.1"
+
+"@firebase/webchannel-wrapper@0.4.1":
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.4.1.tgz#600f2275ff54739ad5ac0102f1467b8963cd5f71"
+ integrity sha512-0yPjzuzGMkW1GkrC8yWsiN7vt1OzkMIi9HgxRmKREZl2wnNPOKo/yScTjXf/O57HM8dltqxPF6jlNLFVtc2qdw==
+
+"@google-cloud/common@^3.5.0":
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.5.0.tgz#0959e769e8075a06eb0823cc567eef00fd0c2d02"
+ integrity sha512-10d7ZAvKhq47L271AqvHEd8KzJqGU45TY+rwM2Z3JHuB070FeTi7oJJd7elfrnKaEvaktw3hH2wKnRWxk/3oWQ==
+ dependencies:
+ "@google-cloud/projectify" "^2.0.0"
+ "@google-cloud/promisify" "^2.0.0"
+ arrify "^2.0.1"
+ duplexify "^4.1.1"
+ ent "^2.2.0"
+ extend "^3.0.2"
+ google-auth-library "^6.1.1"
+ retry-request "^4.1.1"
+ teeny-request "^7.0.0"
+
+"@google-cloud/firestore@^4.5.0":
+ version "4.8.1"
+ resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-4.8.1.tgz#bcba4d45d4d53dd4eaed5b19300ae238e65a3106"
+ integrity sha512-x/8ixlYqQuH9DoluhBj/uj3MqwoQN1lSCT2v+ieOXuh2L+8eoA7H+FF7f+UJ/D6hzo0MMWJd6q7QaBkpzp203Q==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ functional-red-black-tree "^1.0.1"
+ google-gax "^2.9.2"
+
+"@google-cloud/paginator@^3.0.0":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.5.tgz#9d6b96c421a89bd560c1bc2c197c7611ef21db6c"
+ integrity sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw==
+ dependencies:
+ arrify "^2.0.0"
+ extend "^3.0.2"
+
+"@google-cloud/projectify@^2.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.0.1.tgz#13350ee609346435c795bbfe133a08dfeab78d65"
+ integrity sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ==
+
+"@google-cloud/promisify@^2.0.0":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.3.tgz#f934b5cdc939e3c7039ff62b9caaf59a9d89e3a8"
+ integrity sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==
+
+"@google-cloud/storage@^5.3.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-5.7.0.tgz#1cdbeeaab21f78b69de060c11b765c2b5591de91"
+ integrity sha512-6nPTylNaYWsVo5yHDdjQfUSh9qP/DFwahhyvOAf9CSDKfeoOys8+PAyHsoKyL29uyYoC6ymws7uJDO48y/SzBA==
+ dependencies:
+ "@google-cloud/common" "^3.5.0"
+ "@google-cloud/paginator" "^3.0.0"
+ "@google-cloud/promisify" "^2.0.0"
+ arrify "^2.0.0"
+ compressible "^2.0.12"
+ date-and-time "^0.14.0"
+ duplexify "^4.0.0"
+ extend "^3.0.2"
+ gaxios "^4.0.0"
+ gcs-resumable-upload "^3.1.0"
+ get-stream "^6.0.0"
+ hash-stream-validation "^0.2.2"
+ mime "^2.2.0"
+ mime-types "^2.0.8"
+ onetime "^5.1.0"
+ p-limit "^3.0.1"
+ pumpify "^2.0.0"
+ snakeize "^0.1.0"
+ stream-events "^1.0.1"
+ xdg-basedir "^4.0.0"
+
+"@grpc/grpc-js@^1.0.0", "@grpc/grpc-js@~1.2.0":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.2.2.tgz#ee4a7417fe15a686a8e369c36ec4c80678445c67"
+ integrity sha512-iK/T984Ni6VnmlQK/LJdUk+VsXSaYIWkgzJ0LyOcxN2SowAmoRjG28kS7B1ui/q/MAv42iM3051WBt5QorFxmg==
+ dependencies:
+ "@types/node" "^12.12.47"
+ google-auth-library "^6.1.1"
+ semver "^6.2.0"
+
+"@grpc/proto-loader@^0.5.0", "@grpc/proto-loader@^0.5.1":
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.5.tgz#6725e7a1827bdf8e92e29fbf4e9ef0203c0906a9"
+ integrity sha512-WwN9jVNdHRQoOBo9FDH7qU+mgfjPc8GygPYms3M+y3fbQLfnCe/Kv/E01t7JRgnrsOHH8euvSbed3mIalXhwqQ==
+ dependencies:
+ lodash.camelcase "^4.3.0"
+ protobufjs "^6.8.6"
+
+"@jest/console@^24.7.1":
+ version "24.7.1"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545"
+ integrity sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==
+ dependencies:
+ "@jest/source-map" "^24.3.0"
+ chalk "^2.0.1"
+ slash "^2.0.0"
+
+"@jest/core@^24.8.0":
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.8.0.tgz#fbbdcd42a41d0d39cddbc9f520c8bab0c33eed5b"
+ integrity sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/reporters" "^24.8.0"
+ "@jest/test-result" "^24.8.0"
+ "@jest/transform" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-changed-files "^24.8.0"
+ jest-config "^24.8.0"
+ jest-haste-map "^24.8.0"
+ jest-message-util "^24.8.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve-dependencies "^24.8.0"
+ jest-runner "^24.8.0"
+ jest-runtime "^24.8.0"
+ jest-snapshot "^24.8.0"
+ jest-util "^24.8.0"
+ jest-validate "^24.8.0"
+ jest-watcher "^24.8.0"
+ micromatch "^3.1.10"
+ p-each-series "^1.0.0"
+ pirates "^4.0.1"
+ realpath-native "^1.1.0"
+ rimraf "^2.5.4"
+ strip-ansi "^5.0.0"
+
+"@jest/environment@^24.8.0":
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.8.0.tgz#0342261383c776bdd652168f68065ef144af0eac"
+ integrity sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==
+ dependencies:
+ "@jest/fake-timers" "^24.8.0"
+ "@jest/transform" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ jest-mock "^24.8.0"
+
+"@jest/fake-timers@^24.8.0":
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1"
+ integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==
+ dependencies:
+ "@jest/types" "^24.8.0"
+ jest-message-util "^24.8.0"
+ jest-mock "^24.8.0"
+
+"@jest/reporters@^24.8.0":
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.8.0.tgz#075169cd029bddec54b8f2c0fc489fd0b9e05729"
+ integrity sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==
+ dependencies:
+ "@jest/environment" "^24.8.0"
+ "@jest/test-result" "^24.8.0"
+ "@jest/transform" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ istanbul-lib-coverage "^2.0.2"
+ istanbul-lib-instrument "^3.0.1"
+ istanbul-lib-report "^2.0.4"
+ istanbul-lib-source-maps "^3.0.1"
+ istanbul-reports "^2.1.1"
+ jest-haste-map "^24.8.0"
+ jest-resolve "^24.8.0"
+ jest-runtime "^24.8.0"
+ jest-util "^24.8.0"
+ jest-worker "^24.6.0"
+ node-notifier "^5.2.1"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+ string-length "^2.0.0"
+
+"@jest/source-map@^24.3.0":
+ version "24.3.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28"
+ integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.1.15"
+ source-map "^0.6.0"
+
+"@jest/test-result@^24.8.0":
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3"
+ integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/types" "^24.8.0"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+
+"@jest/test-sequencer@^24.8.0":
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz#2f993bcf6ef5eb4e65e8233a95a3320248cf994b"
+ integrity sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==
+ dependencies:
+ "@jest/test-result" "^24.8.0"
+ jest-haste-map "^24.8.0"
+ jest-runner "^24.8.0"
+ jest-runtime "^24.8.0"
+
+"@jest/transform@^24.8.0":
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.8.0.tgz#628fb99dce4f9d254c6fd9341e3eea262e06fef5"
+ integrity sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^24.8.0"
+ babel-plugin-istanbul "^5.1.0"
+ chalk "^2.0.1"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.1.15"
+ jest-haste-map "^24.8.0"
+ jest-regex-util "^24.3.0"
+ jest-util "^24.8.0"
+ micromatch "^3.1.10"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "2.4.1"
+
+"@jest/types@^24.8.0":
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad"
+ integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^12.0.9"
+
+"@jest/types@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
+ integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^15.0.0"
+ chalk "^3.0.0"
+
+"@kwsites/file-exists@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99"
+ integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==
+ dependencies:
+ debug "^4.1.1"
+
+"@kwsites/promise-deferred@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919"
+ integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+ integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ glob-to-regexp "^0.3.0"
+
+"@nodelib/fs.scandir@2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
+ integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.4"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655"
+ integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==
+
+"@nodelib/fs.stat@^1.1.2":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063"
+ integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.4"
+ fastq "^1.6.0"
+
+"@octokit/auth-token@^2.4.4":
+ version "2.4.5"
+ resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3"
+ integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+
+"@octokit/core@^3.2.5":
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.5.tgz#57becbd5fd789b0592b915840855f3a5f233d554"
+ integrity sha512-+DCtPykGnvXKWWQI0E1XD+CCeWSBhB6kwItXqfFmNBlIlhczuDPbg+P6BtLnVBaRJDAjv+1mrUJuRsFSjktopg==
+ dependencies:
+ "@octokit/auth-token" "^2.4.4"
+ "@octokit/graphql" "^4.5.8"
+ "@octokit/request" "^5.4.12"
+ "@octokit/types" "^6.0.3"
+ before-after-hook "^2.1.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/endpoint@^6.0.1":
+ version "6.0.11"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.11.tgz#082adc2aebca6dcefa1fb383f5efb3ed081949d1"
+ integrity sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+ is-plain-object "^5.0.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/graphql@^4.5.8":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.0.tgz#f9abca55f82183964a33439d5264674c701c3327"
+ integrity sha512-CJ6n7izLFXLvPZaWzCQDjU/RP+vHiZmWdOunaCS87v+2jxMsW9FB5ktfIxybRBxZjxuJGRnxk7xJecWTVxFUYQ==
+ dependencies:
+ "@octokit/request" "^5.3.0"
+ "@octokit/types" "^6.0.3"
+ universal-user-agent "^6.0.0"
+
+"@octokit/openapi-types@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.2.1.tgz#5e846f86104aef96ace20091d8afb6be27979d8a"
+ integrity sha512-Bf7MBvQ1nMpv15ANaQtRBsC7YnwQFPM0eUztp3luQs9L6sBEiQ6ArM1Wx5CG+N7tXETtd0oE0DMcU4wbLlCZIw==
+
+"@octokit/request-error@^2.0.0":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143"
+ integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+ deprecation "^2.0.0"
+ once "^1.4.0"
+
+"@octokit/request@^5.3.0", "@octokit/request@^5.4.12":
+ version "5.4.14"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96"
+ integrity sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA==
+ dependencies:
+ "@octokit/endpoint" "^6.0.1"
+ "@octokit/request-error" "^2.0.0"
+ "@octokit/types" "^6.7.1"
+ deprecation "^2.0.0"
+ is-plain-object "^5.0.0"
+ node-fetch "^2.6.1"
+ once "^1.4.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/types@^6.0.3", "@octokit/types@^6.7.1":
+ version "6.11.1"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.11.1.tgz#54ece128029526fa99bd71e757b9e35478403d95"
+ integrity sha512-UiSRTG2lrFbMUMwhKNR0uSV33Fzv4bNu1n5iFuuNOg80XCh0VYNhR4TQWgrkLhVxdDuej6s61aP3eQvVm6K6uA==
+ dependencies:
+ "@octokit/openapi-types" "^5.2.1"
+
+"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
+ integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
+
+"@protobufjs/base64@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
+ integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
+
+"@protobufjs/codegen@^2.0.4":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
+ integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
+
+"@protobufjs/eventemitter@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
+ integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
+
+"@protobufjs/fetch@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
+ integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.1"
+ "@protobufjs/inquire" "^1.1.0"
+
+"@protobufjs/float@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
+ integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
+
+"@protobufjs/inquire@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
+ integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
+
+"@protobufjs/path@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
+ integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
+
+"@protobufjs/pool@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
+ integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
+
+"@protobufjs/utf8@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
+ integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
+
+"@samverschueren/stream-to-observable@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f"
+ integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==
+ dependencies:
+ any-observable "^0.3.0"
+
+"@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.4.0.tgz#7b3ec2d96af481d7a0321252e7b1c94724ec5a78"
+ integrity sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw==
+ dependencies:
+ type-detect "4.0.8"
+
+"@sinonjs/formatio@^3.2.1":
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.1.tgz#52310f2f9bcbc67bdac18c94ad4901b95fde267e"
+ integrity sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==
+ dependencies:
+ "@sinonjs/commons" "^1"
+ "@sinonjs/samsam" "^3.1.0"
+
+"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.2.tgz#63942e3d5eb0b79f6de3bef9abfad15fb4b6401b"
+ integrity sha512-ILO/rR8LfAb60Y1Yfp9vxfYAASK43NFC2mLzpvLUbCQY/Qu8YwReboseu8aheCEkyElZF2L2T9mHcR2bgdvZyA==
+ dependencies:
+ "@sinonjs/commons" "^1.0.2"
+ array-from "^2.1.1"
+ lodash "^4.17.11"
+
+"@sinonjs/text-encoding@^0.7.1":
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5"
+ integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==
+
+"@tootallnate/once@1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+
+"@types/babel__core@^7.1.0":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f"
+ integrity sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc"
+ integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
+ integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+ version "7.0.7"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f"
+ integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==
+ dependencies:
+ "@babel/types" "^7.3.0"
+
+"@types/color-name@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
+ integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
+
+"@types/empower@*":
+ version "1.2.30"
+ resolved "https://registry.yarnpkg.com/@types/empower/-/empower-1.2.30.tgz#c7cfc14b3a61e54c74c674c1fbc91ba2df0d1392"
+ integrity sha1-x8/BSzph5Ux0xnTB+8kbot8NE5I=
+
+"@types/eslint-visitor-keys@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
+ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
+ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
+
+"@types/istanbul-lib-report@*":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c"
+ integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
+ integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+ "@types/istanbul-lib-report" "*"
+
+"@types/jest@^26.0.13":
+ version "26.0.13"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.13.tgz#5a7b9d5312f5dd521a38329c38ee9d3802a0b85e"
+ integrity sha512-sCzjKow4z9LILc6DhBvn5AkIfmQzDZkgtVVKmGwVrs5tuid38ws281D4l+7x1kP487+FlKDh5kfMZ8WSPAdmdA==
+ dependencies:
+ jest-diff "^25.2.1"
+ pretty-format "^25.2.1"
+
+"@types/json-schema@^7.0.3":
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
+ integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==
+
+"@types/long@^4.0.0", "@types/long@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
+ integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
+
+"@types/node@^10.10.0":
+ version "10.17.50"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.50.tgz#7a20902af591282aa9176baefc37d4372131c32d"
+ integrity sha512-vwX+/ija9xKc/z9VqMCdbf4WYcMTGsI0I/L/6shIF3qXURxZOhPQlPRHtjTpiNhAwn0paMJzlOQqw6mAGEQnTA==
+
+"@types/node@^12.12.47":
+ version "12.19.12"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.12.tgz#04793c2afa4ce833a9972e4c476432e30f9df47b"
+ integrity sha512-UwfL2uIU9arX/+/PRcIkT08/iBadGN2z6ExOROA2Dh5mAuWTBj6iJbQX4nekiV5H8cTrEG569LeX+HRco9Cbxw==
+
+"@types/node@^13.7.0":
+ version "13.13.39"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.39.tgz#237d071fb593d3aaa96f655a8eb2f91e0fb1480c"
+ integrity sha512-wct+WgRTTkBm2R3vbrFOqyZM5w0g+D8KnhstG9463CJBVC3UVZHMToge7iMBR1vDl/I+NWFHUeK9X+JcF0rWKw==
+
+"@types/node@^14.6.3":
+ version "14.6.3"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.3.tgz#cc4f979548ca4d8e7b90bc0180052ab99ee64224"
+ integrity sha512-pC/hkcREG6YfDfui1FBmj8e20jFU5Exjw4NYDm8kEdrW+mOh0T1Zve8DWKnS7ZIZvgncrctcNCXF4Q2I+loyww==
+
+"@types/power-assert-formatter@*":
+ version "1.4.29"
+ resolved "https://registry.yarnpkg.com/@types/power-assert-formatter/-/power-assert-formatter-1.4.29.tgz#d423428085cb2a16c6a1c8b96e4b0bed22936aa8"
+ integrity sha512-K3kBfCD4xnx+W5xLVbkyiKUKHvkZBL3R2fS3/wSoFJORcXdzN3ir13zTok1wNnH+hbv8Wc+YTWJDyqEdNsEXzg==
+
+"@types/power-assert@^1.5.3":
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/@types/power-assert/-/power-assert-1.5.3.tgz#9e415f8d5703375c3d5d7bf912ca7ac334faf0c6"
+ integrity sha512-PzV9RX7RRUBYLxp52ipXo9dSvBnqVR09mcvGt3hXuzoJt0EUpPPv0X3btjCQqrhQ1xLbyt0dfPiGfRfrZB4G0A==
+ dependencies:
+ "@types/empower" "*"
+ "@types/power-assert-formatter" "*"
+
+"@types/q@^1.5.1":
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
+ integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
+
+"@types/sinon@^9.0.6":
+ version "9.0.6"
+ resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.6.tgz#fb4b6883fe0417e6a1ac5d9753bdcb7016dd4dd0"
+ integrity sha512-j3GK0fiHgn8fe7sqOpInMjm0A2Tary1NBZ8gbI/sZ0C0JxYeO+nh8H0/pW/0l94vNWcH1FnZOZu/cOvIfNZTrg==
+ dependencies:
+ "@types/sinonjs__fake-timers" "*"
+
+"@types/sinonjs__fake-timers@*":
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae"
+ integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg==
+
+"@types/stack-utils@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
+ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+
+"@types/yargs-parser@*":
+ version "15.0.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
+ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
+
+"@types/yargs@^12.0.2", "@types/yargs@^12.0.9":
+ version "12.0.12"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916"
+ integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==
+
+"@types/yargs@^15.0.0":
+ version "15.0.5"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79"
+ integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^2.9.0":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.9.0.tgz#fa810282c0e45f6c2310b9c0dfcd25bff97ab7e9"
+ integrity sha512-98rfOt3NYn5Gr9wekTB8TexxN6oM8ZRvYuphPs1Atfsy419SDLYCaE30aJkRiiTCwGEY98vOhFsEVm7Zs4toQQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "2.9.0"
+ eslint-utils "^1.4.3"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^3.0.0"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/experimental-utils@2.9.0":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.9.0.tgz#bbe99a8d9510240c055fc4b17230dd0192ba3c7f"
+ integrity sha512-0lOLFdpdJsCMqMSZT7l7W2ta0+GX8A3iefG3FovJjrX+QR8y6htFlFdU7aOVPL6pDvt6XcsOb8fxk5sq+girTw==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/typescript-estree" "2.9.0"
+ eslint-scope "^5.0.0"
+
+"@typescript-eslint/parser@^2.9.0":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.9.0.tgz#2e9cf438de119b143f642a3a406e1e27eb70b7cd"
+ integrity sha512-fJ+dNs3CCvEsJK2/Vg5c2ZjuQ860ySOAsodDPwBaVlrGvRN+iCNC8kUfLFL8cT49W4GSiLPa/bHiMjYXA7EhKQ==
+ dependencies:
+ "@types/eslint-visitor-keys" "^1.0.0"
+ "@typescript-eslint/experimental-utils" "2.9.0"
+ "@typescript-eslint/typescript-estree" "2.9.0"
+ eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/typescript-estree@2.9.0":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.9.0.tgz#09138daf8f47d0e494ba7db9e77394e928803017"
+ integrity sha512-v6btSPXEWCP594eZbM+JCXuFoXWXyF/z8kaSBSdCb83DF+Y7+xItW29SsKtSULgLemqJBT+LpT+0ZqdfH7QVmA==
+ dependencies:
+ debug "^4.1.1"
+ eslint-visitor-keys "^1.1.0"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ lodash.unescape "4.0.1"
+ semver "^6.3.0"
+ tsutils "^3.17.1"
+
+"@webassemblyjs/ast@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+ integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+
+"@webassemblyjs/floating-point-hex-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+ integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+
+"@webassemblyjs/helper-api-error@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+ integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+
+"@webassemblyjs/helper-buffer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+ integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+
+"@webassemblyjs/helper-code-frame@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+ integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/helper-fsm@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+ integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+
+"@webassemblyjs/helper-module-context@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+ integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/helper-wasm-bytecode@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+ integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
+
+"@webassemblyjs/helper-wasm-section@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+ integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+
+"@webassemblyjs/ieee754@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+ integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+ integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+ integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+
+"@webassemblyjs/wasm-edit@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+ integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/helper-wasm-section" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-opt" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/wasm-gen@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+ integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wasm-opt@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+ integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+
+"@webassemblyjs/wasm-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+ integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wast-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+ integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/floating-point-hex-parser" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-code-frame" "1.8.5"
+ "@webassemblyjs/helper-fsm" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+ integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abab@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"
+ integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+abbrev@1.0.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+abort-controller@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+ integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+ dependencies:
+ event-target-shim "^5.0.0"
+
+accepts@~1.3.4, accepts@~1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn-es7-plugin@^1.0.12:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b"
+ integrity sha1-8u4fMiipDurRJF+asZIusucdM2s=
+
+acorn-globals@^4.1.0:
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.3.tgz#a86f75b69680b8780d30edd21eee4e0ea170c05e"
+ integrity sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==
+ dependencies:
+ acorn "^6.0.1"
+ acorn-walk "^6.0.1"
+
+acorn-jsx@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
+ integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
+
+acorn-walk@^6.0.1, acorn-walk@^6.1.1:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
+
+acorn@^5.0.0, acorn@^5.5.3:
+ version "5.7.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+ integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+
+acorn@^6.0.1, acorn@^6.0.7, acorn@^6.2.1:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
+ integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==
+
+adm-zip@~0.4.3:
+ version "0.4.13"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a"
+ integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==
+
+after@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+ integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+agent-base@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
+ integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
+ dependencies:
+ es6-promisify "^5.0.0"
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@6.8.1, ajv@^5.0.0, ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1:
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.8.1.tgz#0890b93742985ebf8973cd365c5b23920ce3cb20"
+ integrity sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+alphanum-sort@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+ integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+ansi-colors@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9"
+ integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==
+ dependencies:
+ ansi-wrap "^0.1.0"
+
+ansi-colors@^3.0.0:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+ integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
+ansi-escape-sequences@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz#2483c8773f50dd9174dd9557e92b1718f1816097"
+ integrity sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==
+ dependencies:
+ array-back "^3.0.1"
+
+ansi-escapes@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-escapes@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228"
+ integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==
+ dependencies:
+ type-fest "^0.5.2"
+
+ansi-gray@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251"
+ integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE=
+ dependencies:
+ ansi-wrap "0.1.0"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.0.0, ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
+ integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
+ dependencies:
+ "@types/color-name" "^1.1.1"
+ color-convert "^2.0.1"
+
+ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
+ integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768=
+
+any-observable@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
+ integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
+
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+append-transform@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab"
+ integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==
+ dependencies:
+ default-require-extensions "^2.0.0"
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+archiver-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2"
+ integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==
+ dependencies:
+ glob "^7.1.4"
+ graceful-fs "^4.2.0"
+ lazystream "^1.0.0"
+ lodash.defaults "^4.2.0"
+ lodash.difference "^4.5.0"
+ lodash.flatten "^4.4.0"
+ lodash.isplainobject "^4.0.6"
+ lodash.union "^4.6.0"
+ normalize-path "^3.0.0"
+ readable-stream "^2.0.0"
+
+archiver@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0"
+ integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==
+ dependencies:
+ archiver-utils "^2.1.0"
+ async "^2.6.3"
+ buffer-crc32 "^0.2.1"
+ glob "^7.1.4"
+ readable-stream "^3.4.0"
+ tar-stream "^2.1.0"
+ zip-stream "^2.1.2"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+arg@^4.1.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+ integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-back@^1.0.2, array-back@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b"
+ integrity sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=
+ dependencies:
+ typical "^2.6.0"
+
+array-back@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/array-back/-/array-back-2.0.0.tgz#6877471d51ecc9c9bfa6136fb6c7d5fe69748022"
+ integrity sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==
+ dependencies:
+ typical "^2.6.1"
+
+array-back@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0"
+ integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==
+
+array-back@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90"
+ integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==
+
+array-back@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/array-back/-/array-back-5.0.0.tgz#e196609edcec48376236d163958df76e659a0d36"
+ integrity sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
+
+array-filter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
+ integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-from@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195"
+ integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=
+
+array-slice@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
+ integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU=
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arraybuffer.slice@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
+ integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+arrify@^2.0.0, arrify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+ integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async@1.x:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+
+async@^2.0.0, async@^2.1.2, async@^2.6.2, async@^2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+ integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
+
+babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+babel-eslint@^10.0.2:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.2.tgz#182d5ac204579ff0881684b040560fdcc1558456"
+ integrity sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.0.0"
+ "@babel/traverse" "^7.0.0"
+ "@babel/types" "^7.0.0"
+ eslint-scope "3.7.1"
+ eslint-visitor-keys "^1.0.0"
+
+babel-generator@^6.18.0:
+ version "6.26.1"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
+ integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
+ dependencies:
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.17.4"
+ source-map "^0.5.7"
+ trim-right "^1.0.1"
+
+babel-jest@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.8.0.tgz#5c15ff2b28e20b0f45df43fe6b7f2aae93dba589"
+ integrity sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==
+ dependencies:
+ "@jest/transform" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ "@types/babel__core" "^7.1.0"
+ babel-plugin-istanbul "^5.1.0"
+ babel-preset-jest "^24.6.0"
+ chalk "^2.4.2"
+ slash "^2.0.0"
+
+babel-loader@8.0.6:
+ version "8.0.6"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb"
+ integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==
+ dependencies:
+ find-cache-dir "^2.0.0"
+ loader-utils "^1.0.2"
+ mkdirp "^0.5.1"
+ pify "^4.0.1"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-add-import-extension@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-add-import-extension/-/babel-plugin-add-import-extension-1.4.3.tgz#9a153095f3c8bb820abbf168bbc71aba837e4e4a"
+ integrity sha512-NiKs80ucIlktWtQ6VGovyVprpgaDxqlo3fT2e2vIyF6k3+02YMmQt+QrBDOq/YImkK/pIXb/SKaO+FxKsfvNlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+babel-plugin-add-module-exports@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.2.tgz#96cd610d089af664f016467fc4567c099cce2d9c"
+ integrity sha512-4paN7RivvU3Rzju1vGSHWPjO8Y0rI6droWvSFKI6dvEQ4mvoV0zGojnlzVRfI6N8zISo6VERXt3coIuVmzuvNg==
+ optionalDependencies:
+ chokidar "^2.0.4"
+
+babel-plugin-dynamic-import-node@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f"
+ integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+ integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-empower-assert@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-empower-assert/-/babel-plugin-empower-assert-2.0.0.tgz#41087d602b5debea7a6b28654d5a458394c879d7"
+ integrity sha512-xAzOOTEYIp8BnbHNmU7xKj7mePlPP3/bvFqcjBTeJBDzl+pne4ZjNcpOnaV6WUYnux3fcOOgRW622CsWlU4SGg==
+
+babel-plugin-espower@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-espower/-/babel-plugin-espower-3.0.1.tgz#180db17126f88e754105b8b5216d21e520a6bd4e"
+ integrity sha512-Ms49U7VIAtQ/TtcqRbD6UBmJBUCSxiC3+zPc+eGqxKUIFO1lTshyEDRUjhoAbd2rWfwYf3cZ62oXozrd8W6J0A==
+ dependencies:
+ "@babel/generator" "^7.0.0"
+ "@babel/parser" "^7.0.0"
+ call-matcher "^1.0.0"
+ core-js "^2.0.0"
+ espower-location-detector "^1.0.0"
+ espurify "^1.6.0"
+ estraverse "^4.1.1"
+
+babel-plugin-istanbul@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
+ integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ find-up "^3.0.0"
+ istanbul-lib-instrument "^3.3.0"
+ test-exclude "^5.2.3"
+
+babel-plugin-jest-hoist@^24.6.0:
+ version "24.6.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019"
+ integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==
+ dependencies:
+ "@types/babel__traverse" "^7.0.6"
+
+babel-preset-jest@^24.6.0:
+ version "24.6.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984"
+ integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==
+ dependencies:
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ babel-plugin-jest-hoist "^24.6.0"
+
+babel-preset-power-assert@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-power-assert/-/babel-preset-power-assert-3.0.0.tgz#3ceba576d57eb3f1b2e5e1865277539d9dc6570d"
+ integrity sha512-StkhBJsKdLemlsujCWjuHjjd/h+u7L2bgb/9/YsgBj1FBnE0BUthyaY8Xdpiqthf3NUudhd8BJMZFjGtXVKE6A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ babel-plugin-empower-assert "^2.0.0"
+ babel-plugin-espower "^3.0.0"
+
+babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babel-template@^6.16.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+ integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ lodash "^4.17.4"
+
+babel-traverse@^6.18.0, babel-traverse@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+ integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ debug "^2.6.8"
+ globals "^9.18.0"
+ invariant "^2.2.2"
+ lodash "^4.17.4"
+
+babel-types@^6.18.0, babel-types@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
+ dependencies:
+ babel-runtime "^6.26.0"
+ esutils "^2.0.2"
+ lodash "^4.17.4"
+ to-fast-properties "^1.0.3"
+
+babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+ integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+backo2@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+ integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-arraybuffer@0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+ integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
+
+base64-js@^1.0.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
+base64-js@^1.3.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+base64id@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
+ integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+before-after-hook@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.1.tgz#99ae36992b5cfab4a83f6bee74ab27835f28f405"
+ integrity sha512-5ekuQOvO04MDj7kYZJaMab2S8SPjGJbotVNyv7QYFCOAwrGZs/YnoDNlh1U+m5hl7H2D/+n0taaAV/tfyd3KMA==
+
+better-assert@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+ integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
+ dependencies:
+ callsite "1.0.0"
+
+bfj@^6.1.1:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f"
+ integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==
+ dependencies:
+ bluebird "^3.5.5"
+ check-types "^8.0.3"
+ hoopy "^0.1.4"
+ tryer "^1.0.1"
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+bignumber.js@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5"
+ integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+bl@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88"
+ integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==
+ dependencies:
+ readable-stream "^3.0.1"
+
+blob@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
+ integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==
+
+bluebird@^3.3.0, bluebird@^3.5.5:
+ version "3.5.5"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
+ integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
+
+bluebird@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+body-parser@1.19.0, body-parser@^1.16.1:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+ integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+ dependencies:
+ bytes "3.1.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ on-finished "~2.3.0"
+ qs "6.7.0"
+ raw-body "2.4.0"
+ type-is "~1.6.17"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^0.1.2:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6"
+ integrity sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=
+ dependencies:
+ expand-range "^0.1.0"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-process-hrtime@^0.1.2:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"
+ integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==
+
+browser-resolve@^1.11.3:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+ dependencies:
+ resolve "1.1.7"
+
+browser-stdout@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+ integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8=
+
+browser-stdout@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+ integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^4.0.0:
+ version "4.6.6"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453"
+ integrity sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==
+ dependencies:
+ caniuse-lite "^1.0.30000984"
+ electron-to-chromium "^1.3.191"
+ node-releases "^1.1.25"
+
+browserslist@^4.12.0, browserslist@^4.8.5:
+ version "4.14.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000"
+ integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==
+ dependencies:
+ caniuse-lite "^1.0.30001111"
+ electron-to-chromium "^1.3.523"
+ escalade "^3.0.2"
+ node-releases "^1.1.60"
+
+browserslist@^4.14.5:
+ version "4.16.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717"
+ integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==
+ dependencies:
+ caniuse-lite "^1.0.30001181"
+ colorette "^1.2.1"
+ electron-to-chromium "^1.3.649"
+ escalade "^3.1.1"
+ node-releases "^1.1.70"
+
+bser@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5"
+ integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-alloc-unsafe@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+ integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+ integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+ dependencies:
+ buffer-alloc-unsafe "^1.1.0"
+ buffer-fill "^1.0.0"
+
+buffer-crc32@^0.2.1, buffer-crc32@^0.2.13:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+
+buffer-equal-constant-time@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+ integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
+
+buffer-fill@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+ integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+buffer@^5.1.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.0.tgz#33294f5c1f26e08461e528b69fa06de3c45cbd8c"
+ integrity sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.1.0, bytes@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^11.2.0:
+ version "11.3.3"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc"
+ integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cacache@^12.0.2:
+ version "12.0.2"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c"
+ integrity sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cache-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/cache-point/-/cache-point-2.0.0.tgz#91e03c38da9cfba9d95ac6a34d24cfe6eff8920f"
+ integrity sha512-4gkeHlFpSKgm3vm2gJN5sPqfmijYRFYCQ6tv5cLw0xVmT6r1z1vd4FNnpuOREco3cBs1G709sZ72LdgddKvL5w==
+ dependencies:
+ array-back "^4.0.1"
+ fs-then-native "^2.0.0"
+ mkdirp2 "^1.0.4"
+
+call-matcher@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-1.1.0.tgz#23b2c1bc7a8394c8be28609d77ddbd5786680432"
+ integrity sha512-IoQLeNwwf9KTNbtSA7aEBb1yfDbdnzwjCetjkC8io5oGeOmK2CBNdg0xr+tadRYKO0p7uQyZzvon0kXlZbvGrw==
+ dependencies:
+ core-js "^2.0.0"
+ deep-equal "^1.0.0"
+ espurify "^1.6.0"
+ estraverse "^4.0.0"
+
+call-me-maybe@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+ integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+call-signature@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996"
+ integrity sha1-qEq8glpV70yysCi9dOIFpluaSZY=
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsite@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+ integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^5.0.0, camelcase@^5.2.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-api@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+ integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-lite "^1.0.0"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000984:
+ version "1.0.30000989"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9"
+ integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==
+
+caniuse-lite@^1.0.30001111:
+ version "1.0.30001122"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001122.tgz#2c8ff631330d986a07a7ba7125cce77a1373b475"
+ integrity sha512-pxjw28CThdrqfz06nJkpAc5SXM404TXB/h5f4UJX+rrXJKE/1bu/KAILc2AY+O6cQIFtRjV9qOR2vaEp9LDGUA==
+
+caniuse-lite@^1.0.30001181:
+ version "1.0.30001208"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz#a999014a35cebd4f98c405930a057a0d75352eb9"
+ integrity sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==
+
+capture-exit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ dependencies:
+ rsvp "^4.8.4"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+catharsis@^0.8.11:
+ version "0.8.11"
+ resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.11.tgz#d0eb3d2b82b7da7a3ce2efb1a7b00becc6643468"
+ integrity sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==
+ dependencies:
+ lodash "^4.17.14"
+
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^1.0.0, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+check-types@^8.0.3:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
+ integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==
+
+chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.0.4:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5"
+ integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chownr@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
+ integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+ci-job-number@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/ci-job-number/-/ci-job-number-0.3.0.tgz#34bdd114b0dece1960287bd40a57051041a2a800"
+ integrity sha1-NL3RFLDezhlgKHvUClcFEEGiqAA=
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+circular-json@^0.5.5:
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d"
+ integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cli-cursor@^2.0.0, cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-truncate@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+ integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=
+ dependencies:
+ slice-ansi "0.0.4"
+ string-width "^1.0.1"
+
+cli-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+ integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+
+cliui@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
+ integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+cloc@^2.2.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/cloc/-/cloc-2.5.0.tgz#5463371e2eee7735744211c9b9a3641bbdafcfa6"
+ integrity sha512-ZPJI2BZ0mvE8bV6IkxVa3RvDoclsW1SqYwmaGTBGBtvXpu6CD271W2ishYDBHCOubec0HgeVisVy1AybkLTWnw==
+
+clone-deep@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+ integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+ dependencies:
+ is-plain-object "^2.0.4"
+ kind-of "^6.0.2"
+ shallow-clone "^3.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+coa@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+ integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+ dependencies:
+ "@types/q" "^1.5.1"
+ chalk "^2.4.1"
+ q "^1.1.2"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collect-all@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/collect-all/-/collect-all-1.0.3.tgz#1abcc20448b58a1447487fcf34130e9512b0acf8"
+ integrity sha512-0y0rBgoX8IzIjBAUnO73SEtSb4Mhk3IoceWJq5zZSxb9mWORhWH8xLYo4EDSOE1jRBk1LhmfjqWFFt10h/+MEA==
+ dependencies:
+ stream-connect "^1.0.2"
+ stream-via "^1.0.4"
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0, color-convert@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@^1.0.0, color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^1.5.2:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+ integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color-support@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+ integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+
+color@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
+ integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
+ dependencies:
+ color-convert "^1.9.1"
+ color-string "^1.5.2"
+
+colorette@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
+ integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
+
+colors@^1.1.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
+ integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==
+
+combine-lists@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6"
+ integrity sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=
+ dependencies:
+ lodash "^4.5.0"
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+command-line-args@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.1.1.tgz#88e793e5bb3ceb30754a86863f0401ac92fd369a"
+ integrity sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==
+ dependencies:
+ array-back "^3.0.1"
+ find-replace "^3.0.0"
+ lodash.camelcase "^4.3.0"
+ typical "^4.0.0"
+
+command-line-tool@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/command-line-tool/-/command-line-tool-0.8.0.tgz#b00290ef1dfc11cc731dd1f43a92cfa5f21e715b"
+ integrity sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==
+ dependencies:
+ ansi-escape-sequences "^4.0.0"
+ array-back "^2.0.0"
+ command-line-args "^5.0.0"
+ command-line-usage "^4.1.0"
+ typical "^2.6.1"
+
+command-line-usage@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-4.1.0.tgz#a6b3b2e2703b4dcf8bd46ae19e118a9a52972882"
+ integrity sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==
+ dependencies:
+ ansi-escape-sequences "^4.0.0"
+ array-back "^2.0.0"
+ table-layout "^0.4.2"
+ typical "^2.6.1"
+
+commander@2.15.1:
+ version "2.15.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
+ integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
+
+commander@2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+commander@^2.14.1, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, commander@^2.9.0, commander@~2.20.0:
+ version "2.20.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
+ integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
+
+common-sequence@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/common-sequence/-/common-sequence-2.0.0.tgz#a4f01aaf5aebd0ac1ce43653e8c8fe6f0ef3a987"
+ integrity sha512-f0QqPLpRTgMQn/pQIynf+SdE73Lw5Q1jn4hjirHLgH/NJ71TiHjXusV16BmOyuK5rRQ1W2f++II+TFZbQOh4hA==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+compare-versions@^3.4.0:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.5.1.tgz#26e1f5cf0d48a77eced5046b9f67b6b61075a393"
+ integrity sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==
+
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+ integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
+
+component-emitter@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+ integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
+
+compress-commons@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610"
+ integrity sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==
+ dependencies:
+ buffer-crc32 "^0.2.13"
+ crc32-stream "^3.0.1"
+ normalize-path "^3.0.0"
+ readable-stream "^2.3.6"
+
+compressible@^2.0.12:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+compression-webpack-plugin@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-2.0.0.tgz#46476350c1eb27f783dccc79ac2f709baa2cffbc"
+ integrity sha512-bDgd7oTUZC8EkRx8j0sjyCfeiO+e5sFcfgaFcjVhfQf5lLya7oY2BczxcJ7IUuVjz5m6fy8IECFmVFew3xLk8Q==
+ dependencies:
+ cacache "^11.2.0"
+ find-cache-dir "^2.0.0"
+ neo-async "^2.5.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^1.4.0"
+ webpack-sources "^1.0.1"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@1.6.2, concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+concat-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
+ integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.0.2"
+ typedarray "^0.0.6"
+
+config-chain@^1.1.12:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
+ integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
+config-master@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/config-master/-/config-master-3.1.0.tgz#667663590505a283bf26a484d68489d74c5485da"
+ integrity sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=
+ dependencies:
+ walk-back "^2.0.1"
+
+configstore@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
+ integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
+ dependencies:
+ dot-prop "^5.2.0"
+ graceful-fs "^4.1.2"
+ make-dir "^3.0.0"
+ unique-string "^2.0.0"
+ write-file-atomic "^3.0.0"
+ xdg-basedir "^4.0.0"
+
+connect@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8"
+ integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==
+ dependencies:
+ debug "2.6.9"
+ finalhandler "1.1.2"
+ parseurl "~1.3.3"
+ utils-merge "1.0.1"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+content-disposition@0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
+
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+ integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+
+cookie@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
+ integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js-compat@^3.6.2:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"
+ integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==
+ dependencies:
+ browserslist "^4.8.5"
+ semver "7.0.0"
+
+core-js@3.6.5:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
+ integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
+
+core-js@^2.0.0, core-js@^2.2.0, core-js@^2.4.0, core-js@^2.6.5:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
+ integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
+
+core-js@^3.0.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09"
+ integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^5.0.0, cosmiconfig@^5.0.2, cosmiconfig@^5.0.7:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.1"
+ parse-json "^4.0.0"
+
+coveralls@^3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.6.tgz#5c63b2759b6781118e7439bd870ba5e9ee428b25"
+ integrity sha512-Pgh4v3gCI4T/9VijVrm8Ym5v0OgjvGLKj3zTUwkvsCiwqae/p6VLzpsFNjQS2i6ewV7ef+DjFJ5TSKxYt/mCrA==
+ dependencies:
+ growl "~> 1.10.0"
+ js-yaml "^3.13.1"
+ lcov-parse "^0.0.10"
+ log-driver "^1.2.7"
+ minimist "^1.2.0"
+ request "^2.86.0"
+
+crc32-stream@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85"
+ integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==
+ dependencies:
+ crc "^3.4.4"
+ readable-stream "^3.4.0"
+
+crc@^3.4.4:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
+ integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==
+ dependencies:
+ buffer "^5.1.0"
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
+ integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+
+cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+
+css-color-names@0.0.4, css-color-names@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+ integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
+
+css-declaration-sorter@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
+ integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
+ dependencies:
+ postcss "^7.0.1"
+ timsort "^0.3.0"
+
+css-loader@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea"
+ integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==
+ dependencies:
+ camelcase "^5.2.0"
+ icss-utils "^4.1.0"
+ loader-utils "^1.2.3"
+ normalize-path "^3.0.0"
+ postcss "^7.0.14"
+ postcss-modules-extract-imports "^2.0.0"
+ postcss-modules-local-by-default "^2.0.6"
+ postcss-modules-scope "^2.1.0"
+ postcss-modules-values "^2.0.0"
+ postcss-value-parser "^3.3.0"
+ schema-utils "^1.0.0"
+
+css-select-base-adapter@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+ integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede"
+ integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^2.1.2"
+ domutils "^1.7.0"
+ nth-check "^1.0.2"
+
+css-tree@1.0.0-alpha.29:
+ version "1.0.0-alpha.29"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39"
+ integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==
+ dependencies:
+ mdn-data "~1.1.0"
+ source-map "^0.5.3"
+
+css-tree@1.0.0-alpha.33:
+ version "1.0.0-alpha.33"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.33.tgz#970e20e5a91f7a378ddd0fc58d0b6c8d4f3be93e"
+ integrity sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==
+ dependencies:
+ mdn-data "2.0.4"
+ source-map "^0.5.3"
+
+css-unit-converter@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
+ integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=
+
+css-what@^2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+ integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+
+cssesc@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
+ integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano-preset-default@^4.0.7:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
+ integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==
+ dependencies:
+ css-declaration-sorter "^4.0.1"
+ cssnano-util-raw-cache "^4.0.1"
+ postcss "^7.0.0"
+ postcss-calc "^7.0.1"
+ postcss-colormin "^4.0.3"
+ postcss-convert-values "^4.0.1"
+ postcss-discard-comments "^4.0.2"
+ postcss-discard-duplicates "^4.0.2"
+ postcss-discard-empty "^4.0.1"
+ postcss-discard-overridden "^4.0.1"
+ postcss-merge-longhand "^4.0.11"
+ postcss-merge-rules "^4.0.3"
+ postcss-minify-font-values "^4.0.2"
+ postcss-minify-gradients "^4.0.2"
+ postcss-minify-params "^4.0.2"
+ postcss-minify-selectors "^4.0.2"
+ postcss-normalize-charset "^4.0.1"
+ postcss-normalize-display-values "^4.0.2"
+ postcss-normalize-positions "^4.0.2"
+ postcss-normalize-repeat-style "^4.0.2"
+ postcss-normalize-string "^4.0.2"
+ postcss-normalize-timing-functions "^4.0.2"
+ postcss-normalize-unicode "^4.0.1"
+ postcss-normalize-url "^4.0.1"
+ postcss-normalize-whitespace "^4.0.2"
+ postcss-ordered-values "^4.1.2"
+ postcss-reduce-initial "^4.0.3"
+ postcss-reduce-transforms "^4.0.2"
+ postcss-svgo "^4.0.2"
+ postcss-unique-selectors "^4.0.1"
+
+cssnano-util-get-arguments@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
+ integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=
+
+cssnano-util-get-match@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
+ integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=
+
+cssnano-util-raw-cache@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
+ integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
+ dependencies:
+ postcss "^7.0.0"
+
+cssnano-util-same-parent@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
+ integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
+
+cssnano@^4.1.10:
+ version "4.1.10"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
+ integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==
+ dependencies:
+ cosmiconfig "^5.0.0"
+ cssnano-preset-default "^4.0.7"
+ is-resolvable "^1.0.0"
+ postcss "^7.0.0"
+
+csso@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b"
+ integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==
+ dependencies:
+ css-tree "1.0.0-alpha.29"
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1"
+ integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==
+ dependencies:
+ cssom "0.3.x"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+custom-event@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
+ integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=
+
+cyclist@~0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
+ integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
+
+dargs@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829"
+ integrity sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+data-urls@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
+ integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
+ dependencies:
+ abab "^2.0.0"
+ whatwg-mimetype "^2.2.0"
+ whatwg-url "^7.0.0"
+
+date-and-time@^0.14.0:
+ version "0.14.2"
+ resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-0.14.2.tgz#a4266c3dead460f6c231fe9674e585908dac354e"
+ integrity sha512-EFTCh9zRSEpGPmJaexg7HTuzZHh6cnJj1ui7IGCFNXzd2QdpsNh05Db5TF3xzJm30YN+A8/6xHSuRcQqoc3kFA==
+
+date-fns@^1.27.2:
+ 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==
+
+date-format@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8"
+ integrity sha1-YV6CjiM90aubua4JUODOzPpuytg=
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+dateformat@^1.0.6:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
+ integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=
+ dependencies:
+ get-stdin "^4.0.1"
+ meow "^3.3.0"
+
+debug@2.6.8:
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
+ integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=
+ dependencies:
+ ms "2.0.0"
+
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@3.1.0, debug@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+debug@4:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ dependencies:
+ ms "2.1.2"
+
+debug@^3.1.0, debug@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
+ integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
+ dependencies:
+ ms "2.1.2"
+
+decamelize@^1.1.2, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-equal@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+ integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
+
+deep-extend@^0.6.0, deep-extend@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+default-require-extensions@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7"
+ integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=
+ dependencies:
+ strip-bom "^3.0.0"
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+deprecation@^2.0.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
+ integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+detect-newline@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
+ integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+
+di@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
+ integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=
+
+dicer@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872"
+ integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==
+ dependencies:
+ streamsearch "0.1.2"
+
+diff-match-patch@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.4.tgz#6ac4b55237463761c4daf0dc603eb869124744b1"
+ integrity sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==
+
+diff-sequences@^24.3.0:
+ version "24.3.0"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975"
+ integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==
+
+diff-sequences@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
+ integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
+
+diff@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
+ integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k=
+
+diff@3.5.0, diff@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+ integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+
+diff@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+ integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
+ dependencies:
+ arrify "^1.0.1"
+ path-type "^3.0.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+dmd@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/dmd/-/dmd-6.0.0.tgz#660ae23d9f4e38b08d143dced2cfc4b95f813ba6"
+ integrity sha512-PwWZlqZnJPETwqZZ70haRa+UDZcD5jeBD3ywW1Kf+jYYv0MHu/S7Ri9jsSoeTMwkcMVW9hXOMA1IZUMEufBhOg==
+ dependencies:
+ array-back "^5.0.0"
+ cache-point "^2.0.0"
+ common-sequence "^2.0.0"
+ file-set "^4.0.1"
+ handlebars "^4.7.7"
+ marked "^2.0.0"
+ object-get "^2.1.1"
+ reduce-flatten "^3.0.0"
+ reduce-unique "^2.0.1"
+ reduce-without "^1.0.1"
+ test-value "^3.0.0"
+ walk-back "^5.0.0"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-serialize@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
+ integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=
+ dependencies:
+ custom-event "~1.0.0"
+ ent "~2.2.0"
+ extend "^3.0.0"
+ void-elements "^2.0.0"
+
+dom-serializer@0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb"
+ integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
+dom-storage@2.1.0, dom-storage@^2.0.2:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.1.0.tgz#00fb868bc9201357ea243c7bcfd3304c1e34ea39"
+ integrity sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
+ integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==
+
+domexception@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+ integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
+ dependencies:
+ webidl-conversions "^4.0.2"
+
+domutils@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dot-prop@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
+ integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
+ dependencies:
+ is-obj "^2.0.0"
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+duplexify@^4.0.0, duplexify@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61"
+ integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==
+ dependencies:
+ end-of-stream "^1.4.1"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+ stream-shift "^1.0.0"
+
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
+ integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
+ dependencies:
+ safe-buffer "^5.0.1"
+
+editorconfig@^0.15.3:
+ version "0.15.3"
+ resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5"
+ integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==
+ dependencies:
+ commander "^2.19.0"
+ lru-cache "^4.1.5"
+ semver "^5.6.0"
+ sigmund "^1.0.1"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+ejs@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.2.tgz#3a32c63d1cd16d11266cd4703b14fec4e74ab4f6"
+ integrity sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==
+
+electron-to-chromium@^1.3.191:
+ version "1.3.229"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.229.tgz#accc9a08dd07d0a4d6c76937821bc94eb2e49eae"
+ integrity sha512-N6pUbSuKFBeUifxBZp9hODS1N9jFobJYW47QT2VvZIr+G5AWnHK/iG3ON9RPRGH7lHDQ6KUDVhzpNkj4ZiznoA==
+
+electron-to-chromium@^1.3.523:
+ version "1.3.556"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.556.tgz#d2a8fed6b93051c5c27d182c43c7bc4d88b77afb"
+ integrity sha512-g5cGpg6rOCXxyfaLCQIWz9Fx+raFfbZ6sc4QLfvvaiCERBzY6YD6rh5d12QN++bEF1Tm9osYnxP37lbN/92j4A==
+
+electron-to-chromium@^1.3.649:
+ version "1.3.712"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.712.tgz#ae467ffe5f95961c6d41ceefe858fc36eb53b38f"
+ integrity sha512-3kRVibBeCM4vsgoHHGKHmPocLqtFAGTrebXxxtgKs87hNUzXrX2NuS3jnBys7IozCnw7viQlozxKkmty2KNfrw==
+
+elegant-spinner@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
+ integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
+
+elliptic@^6.0.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca"
+ integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+empower-core@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-1.2.0.tgz#ce3fb2484d5187fa29c23fba8344b0b2fdf5601c"
+ integrity sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ==
+ dependencies:
+ call-signature "0.0.2"
+ core-js "^2.0.0"
+
+empower@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/empower/-/empower-1.3.1.tgz#768979cbbb36d71d8f5edaab663deacb9dab916c"
+ integrity sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA==
+ dependencies:
+ core-js "^2.0.0"
+ empower-core "^1.2.0"
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+encoding@^0.1.11:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
+ dependencies:
+ iconv-lite "~0.4.13"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+ dependencies:
+ once "^1.4.0"
+
+engine.io-client@~3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36"
+ integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==
+ dependencies:
+ component-emitter "1.2.1"
+ component-inherit "0.0.3"
+ debug "~3.1.0"
+ engine.io-parser "~2.1.1"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ ws "~3.3.1"
+ xmlhttprequest-ssl "~1.5.4"
+ yeast "0.1.2"
+
+engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6"
+ integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "~0.0.7"
+ base64-arraybuffer "0.1.5"
+ blob "0.0.5"
+ has-binary2 "~1.0.2"
+
+engine.io@~3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2"
+ integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==
+ dependencies:
+ accepts "~1.3.4"
+ base64id "1.0.0"
+ cookie "0.3.1"
+ debug "~3.1.0"
+ engine.io-parser "~2.1.0"
+ ws "~3.3.1"
+
+enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
+ integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ tapable "^1.0.0"
+
+ent@^2.2.0, ent@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+ integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0=
+
+entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
+ integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
+
+entities@~2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
+ integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.12.0, es-abstract@^1.5.1:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
+ integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
+ dependencies:
+ es-to-primitive "^1.2.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ is-callable "^1.1.4"
+ is-regex "^1.0.4"
+ object-keys "^1.0.12"
+
+es-to-primitive@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+ integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es6-promise@^4.0.3:
+ version "4.2.8"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+ integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
+
+es6-promisify@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
+ integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
+ dependencies:
+ es6-promise "^4.0.3"
+
+escalade@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4"
+ integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escodegen@1.8.x:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+ integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=
+ dependencies:
+ esprima "^2.7.1"
+ estraverse "^1.9.1"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.2.0"
+
+escodegen@^1.9.1:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541"
+ integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==
+ dependencies:
+ esprima "^3.1.3"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+eslint-config-prettier@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-4.3.0.tgz#c55c1fcac8ce4518aeb77906984e134d9eb5a4f0"
+ integrity sha512-sZwhSTHVVz78+kYD3t5pCWSYEdVSBR0PXnwjDRsUs8ytIrK8PLXw+6FKp8r3Z7rx4ZszdetWlXYKOHoUrrwPlA==
+ dependencies:
+ get-stdin "^6.0.0"
+
+eslint-scope@3.7.1:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
+ integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
+ integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^1.3.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.0.tgz#e2c3c8dba768425f897cf0f9e51fe2e241485d4c"
+ integrity sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ==
+ dependencies:
+ eslint-visitor-keys "^1.0.0"
+
+eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+ integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+
+eslint@^5.16.0:
+ version "5.16.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
+ integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ ajv "^6.9.1"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ eslint-scope "^4.0.3"
+ eslint-utils "^1.3.1"
+ eslint-visitor-keys "^1.0.0"
+ espree "^5.0.1"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob "^7.1.2"
+ globals "^11.7.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ inquirer "^6.2.2"
+ js-yaml "^3.13.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.11"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.2"
+ progress "^2.0.0"
+ regexpp "^2.0.1"
+ semver "^5.5.1"
+ strip-ansi "^4.0.0"
+ strip-json-comments "^2.0.1"
+ table "^5.2.3"
+ text-table "^0.2.0"
+
+espower-location-detector@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/espower-location-detector/-/espower-location-detector-1.0.0.tgz#a17b7ecc59d30e179e2bef73fb4137704cb331b5"
+ integrity sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU=
+ dependencies:
+ is-url "^1.2.1"
+ path-is-absolute "^1.0.0"
+ source-map "^0.5.0"
+ xtend "^4.0.0"
+
+espree@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
+ integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
+ dependencies:
+ acorn "^6.0.7"
+ acorn-jsx "^5.0.0"
+ eslint-visitor-keys "^1.0.0"
+
+esprima@2.7.x, esprima@^2.7.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+ integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
+
+esprima@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+ integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+espurify@^1.6.0:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.8.1.tgz#5746c6c1ab42d302de10bd1d5bf7f0e8c0515056"
+ integrity sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg==
+ dependencies:
+ core-js "^2.0.0"
+
+esquery@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+ integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+ integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+event-target-shim@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+ integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
+eventemitter3@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+ integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+
+events@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
+ integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+exec-sh@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
+ integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==
+
+execa@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
+ integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01"
+ integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expand-braces@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
+ integrity sha1-SIsdHSRRyz06axks/AMPRMWFX+o=
+ dependencies:
+ array-slice "^0.2.3"
+ array-unique "^0.2.1"
+ braces "^0.1.2"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-range@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
+ integrity sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=
+ dependencies:
+ is-number "^0.1.1"
+ repeat-string "^0.2.2"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+expect@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-24.8.0.tgz#471f8ec256b7b6129ca2524b2a62f030df38718d"
+ integrity sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==
+ dependencies:
+ "@jest/types" "^24.8.0"
+ ansi-styles "^3.2.0"
+ jest-get-type "^24.8.0"
+ jest-matcher-utils "^24.8.0"
+ jest-message-util "^24.8.0"
+ jest-regex-util "^24.3.0"
+
+express@^4.16.3:
+ version "4.17.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
+ integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
+ dependencies:
+ accepts "~1.3.7"
+ array-flatten "1.1.1"
+ body-parser "1.19.0"
+ content-disposition "0.5.3"
+ content-type "~1.0.4"
+ cookie "0.4.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "~1.1.2"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.5"
+ qs "6.7.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.1.2"
+ send "0.17.1"
+ serve-static "1.14.1"
+ setprototypeof "1.1.1"
+ statuses "~1.5.0"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0, extend@^3.0.2, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extract-zip@^1.6.5:
+ version "1.6.7"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9"
+ integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=
+ dependencies:
+ concat-stream "1.6.2"
+ debug "2.6.9"
+ mkdirp "0.5.1"
+ yauzl "2.4.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fancy-log@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7"
+ integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==
+ dependencies:
+ ansi-gray "^0.1.1"
+ color-support "^1.1.3"
+ parse-node-version "^1.0.0"
+ time-stamp "^1.0.0"
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+ integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^2.0.2:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+ integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
+ dependencies:
+ "@mrmlnc/readdir-enhanced" "^2.2.1"
+ "@nodelib/fs.stat" "^1.1.2"
+ glob-parent "^3.1.0"
+ is-glob "^4.0.0"
+ merge2 "^1.2.3"
+ micromatch "^3.1.10"
+
+fast-glob@^3.1.1:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
+ integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+ integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53"
+ integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==
+
+fastq@^1.6.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
+ integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
+ dependencies:
+ reusify "^1.0.4"
+
+faye-websocket@0.11.3:
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
+ integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+faye-websocket@0.9.3:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.9.3.tgz#482a505b0df0ae626b969866d3bd740cdb962e83"
+ integrity sha1-SCpQWw3wrmJrlphm0710DNuWLoM=
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+fb-watchman@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
+ integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=
+ dependencies:
+ bser "^2.0.0"
+
+fd-slicer@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+ integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=
+ dependencies:
+ pend "~1.2.0"
+
+figgy-pudding@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+ integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+
+figures@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+figures@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.0.0.tgz#756275c964646163cc6f9197c7a0295dbfd04de9"
+ integrity sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+file-loader@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
+ integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^1.0.0"
+
+file-set@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/file-set/-/file-set-4.0.1.tgz#d8a4485a89c8db7ca414f05a043bce44a2d6a913"
+ integrity sha512-tRzX4kGPmxS2HDK2q2L4qcPopTl/gcyahve2/O8l8hHNJgJ7m+r/ZncCJ1MmFWEMp1yHxJGIU9gAcsWu5jPMpg==
+ dependencies:
+ array-back "^4.0.1"
+ glob "^7.1.6"
+
+fileset@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
+ integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=
+ dependencies:
+ glob "^7.0.3"
+ minimatch "^3.0.3"
+
+filesize@^3.6.1:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
+ integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+finalhandler@1.1.2, finalhandler@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
+ unpipe "~1.0.0"
+
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-parent-dir@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54"
+ integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=
+
+find-replace@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38"
+ integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==
+ dependencies:
+ array-back "^3.0.1"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+findup-sync@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+firebase-admin@^9.4.2:
+ version "9.4.2"
+ resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.4.2.tgz#190d5d7ca5e3f251d99503feb6e05e7ab1623851"
+ integrity sha512-mRnBJbW6BAz6DJkZ0GOUTkmnmCrwVzMreMc6O+RXWukFydOzi5Xr6TKSiPKxoOQw41r9IluP2AZ3Qzvlx2SR+g==
+ dependencies:
+ "@firebase/database" "^0.8.1"
+ "@firebase/database-types" "^0.6.1"
+ "@types/node" "^10.10.0"
+ dicer "^0.3.0"
+ jsonwebtoken "^8.5.1"
+ node-forge "^0.10.0"
+ optionalDependencies:
+ "@google-cloud/firestore" "^4.5.0"
+ "@google-cloud/storage" "^5.3.0"
+
+firebase@^3.7.1:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/firebase/-/firebase-3.9.0.tgz#c4237f50f58eeb25081b1839d6cbf175f8f7ed9b"
+ integrity sha1-xCN/UPWO6yUIGxg51svxdfj37Zs=
+ dependencies:
+ dom-storage "^2.0.2"
+ faye-websocket "0.9.3"
+ jsonwebtoken "^7.3.0"
+ promise-polyfill "^6.0.2"
+ xmlhttprequest "^1.8.0"
+
+firebase@^8.2.2:
+ version "8.2.2"
+ resolved "https://registry.yarnpkg.com/firebase/-/firebase-8.2.2.tgz#3ba46cad0470055bbedf68cb1ded7c4c07cbc525"
+ integrity sha512-a07aW2TTAA9S7p4mx5pu8hvtVokJEjAQlAocHKOWwmRJRIduE9Vvr/3i50FtujT5gGNr0Qm+EyWyB+/7TJiwnw==
+ dependencies:
+ "@firebase/analytics" "0.6.2"
+ "@firebase/app" "0.6.13"
+ "@firebase/app-types" "0.6.1"
+ "@firebase/auth" "0.16.1"
+ "@firebase/database" "0.8.2"
+ "@firebase/firestore" "2.1.2"
+ "@firebase/functions" "0.6.1"
+ "@firebase/installations" "0.4.19"
+ "@firebase/messaging" "0.7.3"
+ "@firebase/performance" "0.4.5"
+ "@firebase/polyfill" "0.3.36"
+ "@firebase/remote-config" "0.1.30"
+ "@firebase/storage" "0.4.2"
+ "@firebase/util" "0.3.4"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flatted@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
+ integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
+
+flow-bin@0.84.0:
+ version "0.84.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.84.0.tgz#4cb2364c750fb37a7840524fa62456b53f64cdcb"
+ integrity sha512-ocji8eEYp+YfICsm+F6cIHUcD7v5sb0/ADEXm6gyUKdjQzmSckMrPUdZtyfP973t3YGHKliUMxMvIBHyR5LbXQ==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+follow-redirects@^1.0.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76"
+ integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==
+ dependencies:
+ debug "^3.2.6"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-access@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
+ integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=
+ dependencies:
+ null-check "^1.0.0"
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
+ integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
+ integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==
+ dependencies:
+ minipass "^2.2.1"
+
+fs-readdir-recursive@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
+ integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==
+
+fs-then-native@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fs-then-native/-/fs-then-native-2.0.0.tgz#19a124d94d90c22c8e045f2e8dd6ebea36d48c67"
+ integrity sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc=
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
+ integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
+ dependencies:
+ nan "^2.12.1"
+ node-pre-gyp "^0.12.0"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gaxios@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-3.2.0.tgz#11b6f0e8fb08d94a10d4d58b044ad3bec6dd486a"
+ integrity sha512-+6WPeVzPvOshftpxJwRi2Ozez80tn/hdtOUag7+gajDHRJvAblKxTFSSMPtr2hmnLy7p0mvYz0rMXLBl8pSO7Q==
+ dependencies:
+ abort-controller "^3.0.0"
+ extend "^3.0.2"
+ https-proxy-agent "^5.0.0"
+ is-stream "^2.0.0"
+ node-fetch "^2.3.0"
+
+gaxios@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.1.0.tgz#e8ad466db5a4383c70b9d63bfd14dfaa87eb0099"
+ integrity sha512-vb0to8xzGnA2qcgywAjtshOKKVDf2eQhJoiL6fHhgW5tVN7wNk7egnYIO9zotfn3lQ3De1VPdf7V5/BWfCtCmg==
+ dependencies:
+ abort-controller "^3.0.0"
+ extend "^3.0.2"
+ https-proxy-agent "^5.0.0"
+ is-stream "^2.0.0"
+ node-fetch "^2.3.0"
+
+gcp-metadata@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.1.tgz#31849fbcf9025ef34c2297c32a89a1e7e9f2cd62"
+ integrity sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==
+ dependencies:
+ gaxios "^4.0.0"
+ json-bigint "^1.0.0"
+
+gcs-resumable-upload@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-3.1.1.tgz#67c766a0555d6a352f9651b7603337207167d0de"
+ integrity sha512-RS1osvAicj9+MjCc6jAcVL1Pt3tg7NK2C2gXM5nqD1Gs0klF2kj5nnAFSBy97JrtslMIQzpb7iSuxaG8rFWd2A==
+ dependencies:
+ abort-controller "^3.0.0"
+ configstore "^5.0.0"
+ extend "^3.0.2"
+ gaxios "^3.0.0"
+ google-auth-library "^6.0.0"
+ pumpify "^2.0.0"
+ stream-events "^1.0.4"
+
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203"
+ integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+ integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718"
+ integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.1.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-promise@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-2.0.0.tgz#7a0f42660f42d0964f62ffec37fd41ecb64f5eb5"
+ integrity sha1-eg9CZg9C0JZPYv/sN/1B7LZPXrU=
+
+glob-to-regexp@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+ integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
+glob@7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
+ dependencies:
+ 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"
+
+glob@^5.0.15:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+ integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ dependencies:
+ 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"
+
+glob@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ 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"
+
+global-modules@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+globals@^11.1.0, globals@^11.7.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^9.18.0:
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+ integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
+
+globby@^11.0.3:
+ version "11.0.3"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
+ integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+globby@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
+ integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
+ dependencies:
+ array-union "^1.0.1"
+ dir-glob "2.0.0"
+ fast-glob "^2.0.2"
+ glob "^7.1.2"
+ ignore "^3.3.5"
+ pify "^3.0.0"
+ slash "^1.0.0"
+
+google-auth-library@^6.0.0, google-auth-library@^6.1.1, google-auth-library@^6.1.3:
+ version "6.1.3"
+ resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.3.tgz#39d868140b70d0c4b32c6f6d8f4ccc1400d84dca"
+ integrity sha512-m9mwvY3GWbr7ZYEbl61isWmk+fvTmOt0YNUfPOUY2VH8K5pZlAIWJjxEi0PqR3OjMretyiQLI6GURMrPSwHQ2g==
+ dependencies:
+ arrify "^2.0.0"
+ base64-js "^1.3.0"
+ ecdsa-sig-formatter "^1.0.11"
+ fast-text-encoding "^1.0.0"
+ gaxios "^4.0.0"
+ gcp-metadata "^4.2.0"
+ gtoken "^5.0.4"
+ jws "^4.0.0"
+ lru-cache "^6.0.0"
+
+google-gax@^2.9.2:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-2.10.0.tgz#7918e5194fe3c5f4330cccb3a3b66e368ac70d8f"
+ integrity sha512-K+1JK5ofNl5k30LsI8UQb/DeLMEbhL/SWirCx0L9pnMcApSfAjRAO7yajXT5X1vicxDBnNSwKs+cu4elxpYraw==
+ dependencies:
+ "@grpc/grpc-js" "~1.2.0"
+ "@grpc/proto-loader" "^0.5.1"
+ "@types/long" "^4.0.0"
+ abort-controller "^3.0.0"
+ duplexify "^4.0.0"
+ fast-text-encoding "^1.0.3"
+ google-auth-library "^6.1.3"
+ is-stream-ended "^0.1.4"
+ node-fetch "^2.6.1"
+ protobufjs "^6.10.2"
+ retry-request "^4.0.0"
+
+google-p12-pem@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.3.tgz#673ac3a75d3903a87f05878f3c75e06fc151669e"
+ integrity sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==
+ dependencies:
+ node-forge "^0.10.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
+ integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+growl@1.10.5, "growl@~> 1.10.0":
+ version "1.10.5"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
+ integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
+
+growl@1.9.2:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+ integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
+gtoken@^5.0.4:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.1.0.tgz#4ba8d2fc9a8459098f76e7e8fd7beaa39fda9fe4"
+ integrity sha512-4d8N6Lk8TEAHl9vVoRVMh9BNOKWVgl2DdNtr3428O75r3QFrF/a5MMu851VmK0AA8+iSvbwRv69k5XnMLURGhg==
+ dependencies:
+ gaxios "^4.0.0"
+ google-p12-pem "^3.0.3"
+ jws "^4.0.0"
+ mime "^2.2.0"
+
+gulp-mocha@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/gulp-mocha/-/gulp-mocha-6.0.0.tgz#80f32bc705ce30747f355ddb8ccd96a1c73bef13"
+ integrity sha512-FfBldW5ttnDpKf4Sg6/BLOOKCCbr5mbixDGK1t02/8oSrTCwNhgN/mdszG3cuQuYNzuouUdw4EH/mlYtgUscPg==
+ dependencies:
+ dargs "^5.1.0"
+ execa "^0.10.0"
+ mocha "^5.2.0"
+ npm-run-path "^2.0.2"
+ plugin-error "^1.0.1"
+ supports-color "^5.4.0"
+ through2 "^2.0.3"
+
+gzip-size-cli@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size-cli/-/gzip-size-cli-1.0.0.tgz#97ef47b1600a2ad8f9c31539661eab39ec36caed"
+ integrity sha1-l+9HsWAKKtj5wxU5Zh6rOew2yu0=
+ dependencies:
+ gzip-size "^3.0.0"
+ meow "^3.3.0"
+
+gzip-size@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
+ dependencies:
+ duplexer "^0.1.1"
+
+gzip-size@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
+ integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
+ dependencies:
+ duplexer "^0.1.1"
+ pify "^4.0.1"
+
+handlebars@^4.0.1, handlebars@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67"
+ integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==
+ dependencies:
+ neo-async "^2.6.0"
+ optimist "^0.6.1"
+ source-map "^0.6.1"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
+handlebars@^4.7.7:
+ version "4.7.7"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
+ integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==
+ dependencies:
+ minimist "^1.2.5"
+ neo-async "^2.6.0"
+ source-map "^0.6.1"
+ wordwrap "^1.0.0"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.0:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-binary2@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
+ integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==
+ dependencies:
+ isarray "2.0.1"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+ integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+ integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.0, has@^1.0.1, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash-stream-validation@^0.2.2:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz#ee68b41bf822f7f44db1142ec28ba9ee7ccb7512"
+ integrity sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hasha@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1"
+ integrity sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=
+ dependencies:
+ is-stream "^1.0.1"
+ pinkie-promise "^2.0.0"
+
+he@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+ integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
+
+hex-color-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
+ integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hoopy@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
+ integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
+
+hosted-git-info@^2.1.4:
+ version "2.8.4"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546"
+ integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==
+
+hsl-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
+ integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=
+
+hsla-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
+ integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg=
+
+html-comment-regex@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
+ integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
+
+html-encoding-sniffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+http-errors@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+"http-parser-js@>=0.4.0 <0.4.11":
+ version "0.4.10"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
+ integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=
+
+http-proxy-agent@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+ integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
+ dependencies:
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
+
+http-proxy@^1.13.0:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
+ integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==
+ dependencies:
+ eventemitter3 "^3.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+https-proxy-agent@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz#271ea8e90f836ac9f119daccd39c19ff7dfb0793"
+ integrity sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==
+ dependencies:
+ agent-base "^4.3.0"
+ debug "^3.1.0"
+
+https-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
+ integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+husky@^1.0.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0"
+ integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==
+ dependencies:
+ cosmiconfig "^5.0.7"
+ execa "^1.0.0"
+ find-up "^3.0.0"
+ get-stdin "^6.0.0"
+ is-ci "^2.0.0"
+ pkg-dir "^3.0.0"
+ please-upgrade-node "^3.1.1"
+ read-pkg "^4.0.1"
+ run-node "^1.0.0"
+ slash "^2.0.0"
+
+iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+ integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
+
+icss-utils@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
+ integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==
+ dependencies:
+ postcss "^7.0.14"
+
+idb@3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/idb/-/idb-3.0.2.tgz#c8e9122d5ddd40f13b60ae665e4862f8b13fa384"
+ integrity sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==
+
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
+ dependencies:
+ minimatch "^3.0.4"
+
+ignore@^3.3.5:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.1.4:
+ version "5.1.8"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-fresh@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118"
+ integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-local@2.0.0, import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+ integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+
+indexes-of@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+ integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+inquirer@^6.2.2:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.1.tgz#8bfb7a5ac02dac6ff641ac4c5ff17da112fcdb42"
+ integrity sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^2.4.2"
+ cli-cursor "^3.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.15"
+ mute-stream "0.0.8"
+ run-async "^2.2.0"
+ rxjs "^6.4.0"
+ string-width "^4.1.0"
+ strip-ansi "^5.1.0"
+ through "^2.3.6"
+
+interpret@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+ integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
+invariant@^2.2.2, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+ integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+
+ipaddr.js@1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
+ integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
+
+is-absolute-url@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+ integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+ integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
+is-color-stop@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
+ integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=
+ dependencies:
+ css-color-names "^0.0.4"
+ hex-color-regex "^1.1.0"
+ hsl-regex "^1.0.0"
+ hsla-regex "^1.0.0"
+ rgb-regex "^1.0.1"
+ rgba-regex "^1.0.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
+ integrity sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.0, is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-observable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
+ integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==
+ dependencies:
+ symbol-observable "^1.1.0"
+
+is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-plain-object@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
+ integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+ integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
+is-regex@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+ dependencies:
+ has "^1.0.1"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-resolvable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+ integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-stream-ended@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda"
+ integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==
+
+is-stream@^1.0.1, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+is-svg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
+ integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==
+ dependencies:
+ html-comment-regex "^1.1.0"
+
+is-symbol@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+ integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+ dependencies:
+ has-symbols "^1.0.0"
+
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-url@^1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
+ integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isarray@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
+ integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
+
+isbinaryfile@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80"
+ integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==
+ dependencies:
+ buffer-alloc "^1.2.0"
+
+isemail@1.x.x:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a"
+ integrity sha1-vgPfjMPineTSxd9lASY/H6RZXpo=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+istanbul-api@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.6.tgz#d61702a9d1c66ad89d92e66d401e16b0bda4a35f"
+ integrity sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==
+ dependencies:
+ async "^2.6.2"
+ compare-versions "^3.4.0"
+ fileset "^2.0.3"
+ istanbul-lib-coverage "^2.0.5"
+ istanbul-lib-hook "^2.0.7"
+ istanbul-lib-instrument "^3.3.0"
+ istanbul-lib-report "^2.0.8"
+ istanbul-lib-source-maps "^3.0.6"
+ istanbul-reports "^2.2.4"
+ js-yaml "^3.13.1"
+ make-dir "^2.1.0"
+ minimatch "^3.0.4"
+ once "^1.4.0"
+
+istanbul-instrumenter-loader@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz#9957bd59252b373fae5c52b7b5188e6fde2a0949"
+ integrity sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==
+ dependencies:
+ convert-source-map "^1.5.0"
+ istanbul-lib-instrument "^1.7.3"
+ loader-utils "^1.1.0"
+ schema-utils "^0.3.0"
+
+istanbul-lib-coverage@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"
+ integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==
+
+istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49"
+ integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==
+
+istanbul-lib-hook@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133"
+ integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==
+ dependencies:
+ append-transform "^1.0.0"
+
+istanbul-lib-instrument@^1.7.3:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca"
+ integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==
+ dependencies:
+ babel-generator "^6.18.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+ babylon "^6.18.0"
+ istanbul-lib-coverage "^1.2.1"
+ semver "^5.3.0"
+
+istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630"
+ integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==
+ dependencies:
+ "@babel/generator" "^7.4.0"
+ "@babel/parser" "^7.4.3"
+ "@babel/template" "^7.4.0"
+ "@babel/traverse" "^7.4.3"
+ "@babel/types" "^7.4.0"
+ istanbul-lib-coverage "^2.0.5"
+ semver "^6.0.0"
+
+istanbul-lib-report@^2.0.4, istanbul-lib-report@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33"
+ integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==
+ dependencies:
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ supports-color "^6.1.0"
+
+istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8"
+ integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ rimraf "^2.6.3"
+ source-map "^0.6.1"
+
+istanbul-reports@^2.1.1, istanbul-reports@^2.2.4:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af"
+ integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==
+ dependencies:
+ handlebars "^4.1.2"
+
+istanbul@^0.4.0:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
+ integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=
+ dependencies:
+ abbrev "1.0.x"
+ async "1.x"
+ escodegen "1.8.x"
+ esprima "2.7.x"
+ glob "^5.0.15"
+ handlebars "^4.0.1"
+ js-yaml "3.x"
+ mkdirp "0.5.x"
+ nopt "3.x"
+ once "1.x"
+ resolve "1.1.x"
+ supports-color "^3.1.0"
+ which "^1.1.1"
+ wordwrap "^1.0.0"
+
+jest-changed-files@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.8.0.tgz#7e7eb21cf687587a85e50f3d249d1327e15b157b"
+ integrity sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==
+ dependencies:
+ "@jest/types" "^24.8.0"
+ execa "^1.0.0"
+ throat "^4.0.0"
+
+jest-cli@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.8.0.tgz#b075ac914492ed114fa338ade7362a301693e989"
+ integrity sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==
+ dependencies:
+ "@jest/core" "^24.8.0"
+ "@jest/test-result" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ import-local "^2.0.0"
+ is-ci "^2.0.0"
+ jest-config "^24.8.0"
+ jest-util "^24.8.0"
+ jest-validate "^24.8.0"
+ prompts "^2.0.1"
+ realpath-native "^1.1.0"
+ yargs "^12.0.2"
+
+jest-config@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.8.0.tgz#77db3d265a6f726294687cbbccc36f8a76ee0f4f"
+ integrity sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/test-sequencer" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ babel-jest "^24.8.0"
+ chalk "^2.0.1"
+ glob "^7.1.1"
+ jest-environment-jsdom "^24.8.0"
+ jest-environment-node "^24.8.0"
+ jest-get-type "^24.8.0"
+ jest-jasmine2 "^24.8.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.8.0"
+ jest-util "^24.8.0"
+ jest-validate "^24.8.0"
+ micromatch "^3.1.10"
+ pretty-format "^24.8.0"
+ realpath-native "^1.1.0"
+
+jest-diff@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.8.0.tgz#146435e7d1e3ffdf293d53ff97e193f1d1546172"
+ integrity sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==
+ dependencies:
+ chalk "^2.0.1"
+ diff-sequences "^24.3.0"
+ jest-get-type "^24.8.0"
+ pretty-format "^24.8.0"
+
+jest-diff@^25.2.1:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
+ integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
+ dependencies:
+ chalk "^3.0.0"
+ diff-sequences "^25.2.6"
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
+
+jest-docblock@^24.3.0:
+ version "24.3.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd"
+ integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==
+ dependencies:
+ detect-newline "^2.1.0"
+
+jest-each@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.8.0.tgz#a05fd2bf94ddc0b1da66c6d13ec2457f35e52775"
+ integrity sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==
+ dependencies:
+ "@jest/types" "^24.8.0"
+ chalk "^2.0.1"
+ jest-get-type "^24.8.0"
+ jest-util "^24.8.0"
+ pretty-format "^24.8.0"
+
+jest-environment-jsdom@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz#300f6949a146cabe1c9357ad9e9ecf9f43f38857"
+ integrity sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==
+ dependencies:
+ "@jest/environment" "^24.8.0"
+ "@jest/fake-timers" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ jest-mock "^24.8.0"
+ jest-util "^24.8.0"
+ jsdom "^11.5.1"
+
+jest-environment-node@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.8.0.tgz#d3f726ba8bc53087a60e7a84ca08883a4c892231"
+ integrity sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==
+ dependencies:
+ "@jest/environment" "^24.8.0"
+ "@jest/fake-timers" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ jest-mock "^24.8.0"
+ jest-util "^24.8.0"
+
+jest-get-type@^22.1.0:
+ version "22.4.3"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
+ integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==
+
+jest-get-type@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.8.0.tgz#a7440de30b651f5a70ea3ed7ff073a32dfe646fc"
+ integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==
+
+jest-get-type@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
+ integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
+
+jest-haste-map@^24.8.0:
+ version "24.8.1"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.1.tgz#f39cc1d2b1d907e014165b4bd5a957afcb992982"
+ integrity sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==
+ dependencies:
+ "@jest/types" "^24.8.0"
+ anymatch "^2.0.0"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.15"
+ invariant "^2.2.4"
+ jest-serializer "^24.4.0"
+ jest-util "^24.8.0"
+ jest-worker "^24.6.0"
+ micromatch "^3.1.10"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+jest-jasmine2@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz#a9c7e14c83dd77d8b15e820549ce8987cc8cd898"
+ integrity sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@jest/environment" "^24.8.0"
+ "@jest/test-result" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ chalk "^2.0.1"
+ co "^4.6.0"
+ expect "^24.8.0"
+ is-generator-fn "^2.0.0"
+ jest-each "^24.8.0"
+ jest-matcher-utils "^24.8.0"
+ jest-message-util "^24.8.0"
+ jest-runtime "^24.8.0"
+ jest-snapshot "^24.8.0"
+ jest-util "^24.8.0"
+ pretty-format "^24.8.0"
+ throat "^4.0.0"
+
+jest-leak-detector@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz#c0086384e1f650c2d8348095df769f29b48e6980"
+ integrity sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==
+ dependencies:
+ pretty-format "^24.8.0"
+
+jest-matcher-utils@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz#2bce42204c9af12bde46f83dc839efe8be832495"
+ integrity sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==
+ dependencies:
+ chalk "^2.0.1"
+ jest-diff "^24.8.0"
+ jest-get-type "^24.8.0"
+ pretty-format "^24.8.0"
+
+jest-message-util@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b"
+ integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/test-result" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ "@types/stack-utils" "^1.0.1"
+ chalk "^2.0.1"
+ micromatch "^3.1.10"
+ slash "^2.0.0"
+ stack-utils "^1.0.1"
+
+jest-mock@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56"
+ integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==
+ dependencies:
+ "@jest/types" "^24.8.0"
+
+jest-pnp-resolver@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a"
+ integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==
+
+jest-regex-util@^24.3.0:
+ version "24.3.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36"
+ integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==
+
+jest-resolve-dependencies@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz#19eec3241f2045d3f990dba331d0d7526acff8e0"
+ integrity sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==
+ dependencies:
+ "@jest/types" "^24.8.0"
+ jest-regex-util "^24.3.0"
+ jest-snapshot "^24.8.0"
+
+jest-resolve@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.8.0.tgz#84b8e5408c1f6a11539793e2b5feb1b6e722439f"
+ integrity sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==
+ dependencies:
+ "@jest/types" "^24.8.0"
+ browser-resolve "^1.11.3"
+ chalk "^2.0.1"
+ jest-pnp-resolver "^1.2.1"
+ realpath-native "^1.1.0"
+
+jest-runner@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.8.0.tgz#4f9ae07b767db27b740d7deffad0cf67ccb4c5bb"
+ integrity sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.8.0"
+ "@jest/test-result" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ chalk "^2.4.2"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-config "^24.8.0"
+ jest-docblock "^24.3.0"
+ jest-haste-map "^24.8.0"
+ jest-jasmine2 "^24.8.0"
+ jest-leak-detector "^24.8.0"
+ jest-message-util "^24.8.0"
+ jest-resolve "^24.8.0"
+ jest-runtime "^24.8.0"
+ jest-util "^24.8.0"
+ jest-worker "^24.6.0"
+ source-map-support "^0.5.6"
+ throat "^4.0.0"
+
+jest-runtime@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.8.0.tgz#05f94d5b05c21f6dc54e427cd2e4980923350620"
+ integrity sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.8.0"
+ "@jest/source-map" "^24.3.0"
+ "@jest/transform" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ "@types/yargs" "^12.0.2"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.1.15"
+ jest-config "^24.8.0"
+ jest-haste-map "^24.8.0"
+ jest-message-util "^24.8.0"
+ jest-mock "^24.8.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.8.0"
+ jest-snapshot "^24.8.0"
+ jest-util "^24.8.0"
+ jest-validate "^24.8.0"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ strip-bom "^3.0.0"
+ yargs "^12.0.2"
+
+jest-serializer@^24.4.0:
+ version "24.4.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3"
+ integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==
+
+jest-snapshot@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.8.0.tgz#3bec6a59da2ff7bc7d097a853fb67f9d415cb7c6"
+ integrity sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==
+ dependencies:
+ "@babel/types" "^7.0.0"
+ "@jest/types" "^24.8.0"
+ chalk "^2.0.1"
+ expect "^24.8.0"
+ jest-diff "^24.8.0"
+ jest-matcher-utils "^24.8.0"
+ jest-message-util "^24.8.0"
+ jest-resolve "^24.8.0"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^24.8.0"
+ semver "^5.5.0"
+
+jest-util@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1"
+ integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/fake-timers" "^24.8.0"
+ "@jest/source-map" "^24.3.0"
+ "@jest/test-result" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ callsites "^3.0.0"
+ chalk "^2.0.1"
+ graceful-fs "^4.1.15"
+ is-ci "^2.0.0"
+ mkdirp "^0.5.1"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+
+jest-validate@^23.5.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474"
+ integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==
+ dependencies:
+ chalk "^2.0.1"
+ jest-get-type "^22.1.0"
+ leven "^2.1.0"
+ pretty-format "^23.6.0"
+
+jest-validate@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.8.0.tgz#624c41533e6dfe356ffadc6e2423a35c2d3b4849"
+ integrity sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==
+ dependencies:
+ "@jest/types" "^24.8.0"
+ camelcase "^5.0.0"
+ chalk "^2.0.1"
+ jest-get-type "^24.8.0"
+ leven "^2.1.0"
+ pretty-format "^24.8.0"
+
+jest-watcher@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.8.0.tgz#58d49915ceddd2de85e238f6213cef1c93715de4"
+ integrity sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==
+ dependencies:
+ "@jest/test-result" "^24.8.0"
+ "@jest/types" "^24.8.0"
+ "@types/yargs" "^12.0.9"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ jest-util "^24.8.0"
+ string-length "^2.0.0"
+
+jest-worker@^24.6.0:
+ version "24.6.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3"
+ integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==
+ dependencies:
+ merge-stream "^1.0.1"
+ supports-color "^6.1.0"
+
+jest@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-24.8.0.tgz#d5dff1984d0d1002196e9b7f12f75af1b2809081"
+ integrity sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==
+ dependencies:
+ import-local "^2.0.0"
+ jest-cli "^24.8.0"
+
+joi@^6.10.1:
+ version "6.10.1"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06"
+ integrity sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=
+ dependencies:
+ hoek "2.x.x"
+ isemail "1.x.x"
+ moment "2.x.x"
+ topo "1.x.x"
+
+js-beautify@^1.5.10:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.10.2.tgz#88c9099cd6559402b124cfab18754936f8a7b178"
+ integrity sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==
+ dependencies:
+ config-chain "^1.1.12"
+ editorconfig "^0.15.3"
+ glob "^7.1.3"
+ mkdirp "~0.5.1"
+ nopt "~4.0.1"
+
+js-fns@^2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/js-fns/-/js-fns-2.5.1.tgz#8b3de33c5da0ba58cd02a1f2f44c49c9fee0b89f"
+ integrity sha512-407HErrcBhMeLa1gUDEHJEIGzHoEH26j79rQnQ2vjeMMYUES87ObDjkVXLMIbY7lCzXfsgh4bVJLgP5GYDazcQ==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@3.x, js-yaml@^3.13.0, js-yaml@^3.13.1:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js2xmlparser@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.1.tgz#670ef71bc5661f089cc90481b99a05a1227ae3bd"
+ integrity sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==
+ dependencies:
+ xmlcreate "^2.0.3"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsdoc-api@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/jsdoc-api/-/jsdoc-api-6.0.0.tgz#fbba403ef59de0480b7e5aadd563a7bb715b0187"
+ integrity sha512-zvfB63nAc9e+Rv2kKmJfE6tmo4x8KFho5vKr6VfYTlCCgqtrfPv0McCdqT4betUT9rWtw0zGkNUVkVqeQipY6Q==
+ dependencies:
+ array-back "^4.0.1"
+ cache-point "^2.0.0"
+ collect-all "^1.0.3"
+ file-set "^4.0.1"
+ fs-then-native "^2.0.0"
+ jsdoc "^3.6.4"
+ object-to-spawn-args "^2.0.0"
+ temp-path "^1.0.0"
+ walk-back "^4.0.0"
+
+jsdoc-babel@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsdoc-babel/-/jsdoc-babel-0.5.0.tgz#7217b8820469fe600dccfdee895648c6a0dd4a2e"
+ integrity sha512-PYfTbc3LNTeR8TpZs2M94NLDWqARq0r9gx3SvuziJfmJS7/AeMKvtj0xjzOX0R/4MOVA7/FqQQK7d6U0iEoztQ==
+ dependencies:
+ jsdoc-regex "^1.0.1"
+ lodash "^4.17.10"
+
+jsdoc-parse@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/jsdoc-parse/-/jsdoc-parse-6.0.0.tgz#e9652cc43618e6940d166386a4ab1dd5d6a88289"
+ integrity sha512-35DhfCHL1bq5r0TvolhyyGhhoem700IfEvviL8I1t99Qxa3aSmWbBEpnvvouA7TyXlwxcQfSg75ryXW8Ppq7FA==
+ dependencies:
+ array-back "^5.0.0"
+ lodash.omit "^4.5.0"
+ lodash.pick "^4.4.0"
+ reduce-extract "^1.0.0"
+ sort-array "^4.1.3"
+ test-value "^3.0.0"
+
+jsdoc-regex@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/jsdoc-regex/-/jsdoc-regex-1.0.1.tgz#8424428d5b563ad8c5c7fbec079b9a8b09c8dcfa"
+ integrity sha1-hCRCjVtWOtjFx/vsB5uaiwnI3Po=
+
+jsdoc-to-markdown@7:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/jsdoc-to-markdown/-/jsdoc-to-markdown-7.0.0.tgz#949a03690315c408adced452311bf8e5c3be91f8"
+ integrity sha512-pcZluhsRqi+qx/BKcBfdUWBOXPk7G0aRKGkBgxemedqnqM0XfxO+SYFeouExrIsuAGGmsQ/eQk2uqynG6FM2ug==
+ dependencies:
+ array-back "^5.0.0"
+ command-line-tool "^0.8.0"
+ config-master "^3.1.0"
+ dmd "^6.0.0"
+ jsdoc-api "^6.0.0"
+ jsdoc-parse "^6.0.0"
+ walk-back "^5.0.0"
+
+jsdoc@^3.6.4:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.6.5.tgz#e004372ca6f2dcdf19b3d2ebcd7c725528485502"
+ integrity sha512-SbY+i9ONuxSK35cgVHaI8O9senTE4CDYAmGSDJ5l3+sfe62Ff4gy96osy6OW84t4K4A8iGnMrlRrsSItSNp3RQ==
+ dependencies:
+ "@babel/parser" "^7.9.4"
+ bluebird "^3.7.2"
+ catharsis "^0.8.11"
+ escape-string-regexp "^2.0.0"
+ js2xmlparser "^4.0.1"
+ klaw "^3.0.0"
+ markdown-it "^10.0.0"
+ markdown-it-anchor "^5.2.7"
+ marked "^0.8.2"
+ mkdirp "^1.0.4"
+ requizzle "^0.2.3"
+ strip-json-comments "^3.1.0"
+ taffydb "2.6.2"
+ underscore "~1.10.2"
+
+jsdom@^11.5.1:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
+ integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
+ dependencies:
+ abab "^2.0.0"
+ acorn "^5.5.3"
+ acorn-globals "^4.1.0"
+ array-equal "^1.0.0"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle "^1.0.0"
+ data-urls "^1.0.0"
+ domexception "^1.0.1"
+ escodegen "^1.9.1"
+ html-encoding-sniffer "^1.0.2"
+ left-pad "^1.3.0"
+ nwsapi "^2.0.7"
+ parse5 "4.0.0"
+ pn "^1.1.0"
+ request "^2.87.0"
+ request-promise-native "^1.0.5"
+ sax "^1.2.4"
+ symbol-tree "^3.2.2"
+ tough-cookie "^2.3.4"
+ w3c-hr-time "^1.0.1"
+ webidl-conversions "^4.0.2"
+ whatwg-encoding "^1.0.3"
+ whatwg-mimetype "^2.1.0"
+ whatwg-url "^6.4.1"
+ ws "^5.2.0"
+ xml-name-validator "^3.0.0"
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-bigint@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1"
+ integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==
+ dependencies:
+ bignumber.js "^9.0.0"
+
+json-bond@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/json-bond/-/json-bond-0.1.0.tgz#a679e6c7f2c9a7b622208da4226f5a2c6e304a34"
+ integrity sha512-oOTXdcq0PCJr6OUnzyLN2n0b5msex2KWP60/mgZpop8P6WGWQgZr9frPs4vap+cJG89Mn+hSE8dsEPwNU2B3Ig==
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json3@3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+ integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850"
+ integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
+ dependencies:
+ minimist "^1.2.0"
+
+jsonfile@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonwebtoken@^7.3.0:
+ version "7.4.3"
+ resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz#77f5021de058b605a1783fa1283e99812e645638"
+ integrity sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=
+ dependencies:
+ joi "^6.10.1"
+ jws "^3.1.4"
+ lodash.once "^4.0.0"
+ ms "^2.0.0"
+ xtend "^4.0.1"
+
+jsonwebtoken@^8.5.1:
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
+ integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
+ dependencies:
+ jws "^3.2.2"
+ lodash.includes "^4.3.0"
+ lodash.isboolean "^3.0.3"
+ lodash.isinteger "^4.0.4"
+ lodash.isnumber "^3.0.3"
+ lodash.isplainobject "^4.0.6"
+ lodash.isstring "^4.0.1"
+ lodash.once "^4.0.0"
+ ms "^2.1.1"
+ semver "^5.6.0"
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+just-extend@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc"
+ integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==
+
+jwa@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
+ integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
+ dependencies:
+ buffer-equal-constant-time "1.0.1"
+ ecdsa-sig-formatter "1.0.11"
+ safe-buffer "^5.0.1"
+
+jwa@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc"
+ integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==
+ dependencies:
+ buffer-equal-constant-time "1.0.1"
+ ecdsa-sig-formatter "1.0.11"
+ safe-buffer "^5.0.1"
+
+jws@^3.1.4, jws@^3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
+ integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
+ dependencies:
+ jwa "^1.4.1"
+ safe-buffer "^5.0.1"
+
+jws@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4"
+ integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==
+ dependencies:
+ jwa "^2.0.0"
+ safe-buffer "^5.0.1"
+
+karma-benchmark-reporter@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/karma-benchmark-reporter/-/karma-benchmark-reporter-0.1.1.tgz#3b7e49f05700e428ff10824ad0d410ae2d07d27a"
+ integrity sha1-O35J8FcA5Cj/EIJK0NQQri0H0no=
+
+karma-benchmark@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/karma-benchmark/-/karma-benchmark-1.0.4.tgz#42fb9ea8a8fa42f3b6f49f72d9025bff026aba1a"
+ integrity sha512-e9YmWrX3xk7BSosBaL/7lg0ZKSOpwQySKlLb1xa2m5VbwMVFffS29QB9f2UCT7+aMCnJlNRWjcKym4Ch/60OsA==
+ dependencies:
+ lodash "4.17.15"
+ platform "1.3.5"
+
+karma-chrome-launcher@2.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf"
+ integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==
+ dependencies:
+ fs-access "^1.0.0"
+ which "^1.2.1"
+
+karma-cli@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-1.0.1.tgz#ae6c3c58a313a1d00b45164c455b9b86ce17f960"
+ integrity sha1-rmw8WKMTodALRRZMRVubhs4X+WA=
+ dependencies:
+ resolve "^1.1.6"
+
+karma-coverage-istanbul-reporter@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.0.tgz#5f1bcc13c5e14ee1d91821ee8946861674f54c75"
+ integrity sha512-UH0mXPJFJyK5uiK7EkwGtQ8f30lCBAfqRResnZ4pzLJ04SOp4SPlYkmwbbZ6iVJ6sQFVzlDUXlntBEsLRdgZpg==
+ dependencies:
+ istanbul-api "^2.1.6"
+ minimatch "^3.0.4"
+
+karma-coverage@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.2.tgz#cc09dceb589a83101aca5fe70c287645ef387689"
+ integrity sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==
+ dependencies:
+ dateformat "^1.0.6"
+ istanbul "^0.4.0"
+ lodash "^4.17.0"
+ minimatch "^3.0.0"
+ source-map "^0.5.1"
+
+karma-mocha-reporter@^2.2.5:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560"
+ integrity sha1-FRIAlejtgZGG5HoLAS8810GJVWA=
+ dependencies:
+ chalk "^2.1.0"
+ log-symbols "^2.1.0"
+ strip-ansi "^4.0.0"
+
+karma-mocha@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-1.3.0.tgz#eeaac7ffc0e201eb63c467440d2b69c7cf3778bf"
+ integrity sha1-7qrH/8DiAetjxGdEDStpx883eL8=
+ dependencies:
+ minimist "1.2.0"
+
+karma-phantomjs-launcher@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz#d23ca34801bda9863ad318e3bb4bd4062b13acd2"
+ integrity sha1-0jyjSAG9qYY60xjju0vUBisTrNI=
+ dependencies:
+ lodash "^4.0.1"
+ phantomjs-prebuilt "^2.1.7"
+
+karma-sauce-launcher@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-1.2.0.tgz#6f2558ddef3cf56879fa27540c8ae9f8bfd16bca"
+ integrity sha512-lEhtGRGS+3Yw6JSx/vJY9iQyHNtTjcojrSwNzqNUOaDceKDu9dPZqA/kr69bUO9G2T6GKbu8AZgXqy94qo31Jg==
+ dependencies:
+ q "^1.5.0"
+ sauce-connect-launcher "^1.2.2"
+ saucelabs "^1.4.0"
+ wd "^1.4.0"
+
+karma-sourcemap-loader@^0.3.5:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8"
+ integrity sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=
+ dependencies:
+ graceful-fs "^4.1.2"
+
+karma-webpack@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-4.0.2.tgz#23219bd95bdda853e3073d3874d34447c77bced0"
+ integrity sha512-970/okAsdUOmiMOCY8sb17A2I8neS25Ad9uhyK3GHgmRSIFJbDcNEFE8dqqUhNe9OHiCC9k3DMrSmtd/0ymP1A==
+ dependencies:
+ clone-deep "^4.0.1"
+ loader-utils "^1.1.0"
+ neo-async "^2.6.1"
+ schema-utils "^1.0.0"
+ source-map "^0.7.3"
+ webpack-dev-middleware "^3.7.0"
+
+karma@^3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/karma/-/karma-3.1.4.tgz#3890ca9722b10d1d14b726e1335931455788499e"
+ integrity sha512-31Vo8Qr5glN+dZEVIpnPCxEGleqE0EY6CtC2X9TagRV3rRQ3SNrvfhddICkJgUK3AgqpeKSZau03QumTGhGoSw==
+ dependencies:
+ bluebird "^3.3.0"
+ body-parser "^1.16.1"
+ chokidar "^2.0.3"
+ colors "^1.1.0"
+ combine-lists "^1.0.0"
+ connect "^3.6.0"
+ core-js "^2.2.0"
+ di "^0.0.1"
+ dom-serialize "^2.2.0"
+ expand-braces "^0.1.1"
+ flatted "^2.0.0"
+ glob "^7.1.1"
+ graceful-fs "^4.1.2"
+ http-proxy "^1.13.0"
+ isbinaryfile "^3.0.0"
+ lodash "^4.17.5"
+ log4js "^3.0.0"
+ mime "^2.3.1"
+ minimatch "^3.0.2"
+ optimist "^0.6.1"
+ qjobs "^1.1.4"
+ range-parser "^1.2.0"
+ rimraf "^2.6.0"
+ safe-buffer "^5.0.1"
+ socket.io "2.1.1"
+ source-map "^0.6.1"
+ tmp "0.0.33"
+ useragent "2.3.0"
+
+kew@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
+ integrity sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+klaw@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
+ optionalDependencies:
+ graceful-fs "^4.1.9"
+
+klaw@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146"
+ integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==
+ dependencies:
+ graceful-fs "^4.1.9"
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+last-call-webpack-plugin@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
+ integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==
+ dependencies:
+ lodash "^4.17.5"
+ webpack-sources "^1.1.0"
+
+lazystream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
+ integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=
+ dependencies:
+ readable-stream "^2.0.5"
+
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+ dependencies:
+ invert-kv "^2.0.0"
+
+lcov-parse@^0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3"
+ integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=
+
+left-pad@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
+ integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
+
+leven@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+ integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levenary@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77"
+ integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==
+ dependencies:
+ leven "^3.1.0"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+linkify-it@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf"
+ integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==
+ dependencies:
+ uc.micro "^1.0.1"
+
+lint-staged@^7.3.0:
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.3.0.tgz#90ff33e5ca61ed3dbac35b6f6502dbefdc0db58d"
+ integrity sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw==
+ dependencies:
+ chalk "^2.3.1"
+ commander "^2.14.1"
+ cosmiconfig "^5.0.2"
+ debug "^3.1.0"
+ dedent "^0.7.0"
+ execa "^0.9.0"
+ find-parent-dir "^0.3.0"
+ is-glob "^4.0.0"
+ is-windows "^1.0.2"
+ jest-validate "^23.5.0"
+ listr "^0.14.1"
+ lodash "^4.17.5"
+ log-symbols "^2.2.0"
+ micromatch "^3.1.8"
+ npm-which "^3.0.1"
+ p-map "^1.1.1"
+ path-is-inside "^1.0.2"
+ pify "^3.0.0"
+ please-upgrade-node "^3.0.2"
+ staged-git-files "1.1.1"
+ string-argv "^0.0.2"
+ stringify-object "^3.2.2"
+
+listr-silent-renderer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
+ integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=
+
+listr-update-renderer@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2"
+ integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==
+ dependencies:
+ chalk "^1.1.3"
+ cli-truncate "^0.2.1"
+ elegant-spinner "^1.0.1"
+ figures "^1.7.0"
+ indent-string "^3.0.0"
+ log-symbols "^1.0.2"
+ log-update "^2.3.0"
+ strip-ansi "^3.0.1"
+
+listr-verbose-renderer@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
+ integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==
+ dependencies:
+ chalk "^2.4.1"
+ cli-cursor "^2.1.0"
+ date-fns "^1.27.2"
+ figures "^2.0.0"
+
+listr@^0.14.1:
+ version "0.14.3"
+ resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586"
+ integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==
+ dependencies:
+ "@samverschueren/stream-to-observable" "^0.3.0"
+ is-observable "^1.1.0"
+ is-promise "^2.1.0"
+ is-stream "^1.1.0"
+ listr-silent-renderer "^1.1.1"
+ listr-update-renderer "^0.5.0"
+ listr-verbose-renderer "^0.5.0"
+ p-map "^2.0.0"
+ rxjs "^6.3.3"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+ integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^2.0.0"
+ json5 "^1.0.1"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+lodash._baseassign@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
+ integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=
+ dependencies:
+ lodash._basecopy "^3.0.0"
+ lodash.keys "^3.0.0"
+
+lodash._basecopy@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+ integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=
+
+lodash._basecreate@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
+ integrity sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=
+
+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._isiterateecall@^3.0.0:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+ integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=
+
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
+
+lodash.clonedeep@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+
+lodash.create@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
+ integrity sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=
+ dependencies:
+ lodash._baseassign "^3.0.0"
+ lodash._basecreate "^3.0.0"
+ lodash._isiterateecall "^3.0.0"
+
+lodash.defaults@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
+ integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
+
+lodash.difference@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
+ integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=
+
+lodash.flatten@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+ integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
+
+lodash.includes@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
+ integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=
+
+lodash.isarguments@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+ integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=
+
+lodash.isarray@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+ integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=
+
+lodash.isboolean@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
+ integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=
+
+lodash.isinteger@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
+ integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=
+
+lodash.isnumber@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
+ integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
+
+lodash.isstring@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+ integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=
+
+lodash.keys@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+ integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=
+ dependencies:
+ lodash._getnative "^3.0.0"
+ lodash.isarguments "^3.0.0"
+ lodash.isarray "^3.0.0"
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.omit@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60"
+ integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=
+
+lodash.once@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+ integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
+
+lodash.padend@^4.6.1:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e"
+ integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=
+
+lodash.pick@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
+ integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
+lodash.unescape@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
+ integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+
+lodash.union@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
+ integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash@4.17.15, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.16.6, lodash@^4.17.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.5.0:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+lodash@^4.17.10, lodash@^4.17.19:
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
+ integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
+
+log-driver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"
+ integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==
+
+log-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+ integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
+ dependencies:
+ chalk "^1.0.0"
+
+log-symbols@^2.1.0, log-symbols@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+ integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+ dependencies:
+ chalk "^2.0.1"
+
+log-update@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
+ integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg=
+ dependencies:
+ ansi-escapes "^3.0.0"
+ cli-cursor "^2.0.0"
+ wrap-ansi "^3.0.1"
+
+log4js@^3.0.0:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/log4js/-/log4js-3.0.6.tgz#e6caced94967eeeb9ce399f9f8682a4b2b28c8ff"
+ integrity sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==
+ dependencies:
+ circular-json "^0.5.5"
+ date-format "^1.2.0"
+ debug "^3.1.0"
+ rfdc "^1.1.2"
+ streamroller "0.7.0"
+
+lolex@^4.1.0, lolex@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7"
+ integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==
+
+long@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
+ integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
+
+loose-envify@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lru-cache@4.1.x, lru-cache@^4.0.1, lru-cache@^4.1.5:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+make-dir@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+make-error@^1.1.1:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ dependencies:
+ tmpl "1.0.x"
+
+mamacro@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+ integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+
+map-age-cleaner@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+ integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+markdown-it-anchor@^5.2.7:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz#d549acd64856a8ecd1bea58365ef385effbac744"
+ integrity sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==
+
+markdown-it@^10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc"
+ integrity sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==
+ dependencies:
+ argparse "^1.0.7"
+ entities "~2.0.0"
+ linkify-it "^2.0.0"
+ mdurl "^1.0.1"
+ uc.micro "^1.0.5"
+
+marked@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-0.8.2.tgz#4faad28d26ede351a7a1aaa5fec67915c869e355"
+ integrity sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==
+
+marked@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-2.0.1.tgz#5e7ed7009bfa5c95182e4eb696f85e948cefcee3"
+ integrity sha512-5+/fKgMv2hARmMW7DOpykr2iLhl0NgjyELk5yn92iE7z8Se1IS9n3UsFm86hFXIkvMBmVxki8+ckcpjBeyo/hw==
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+mdn-data@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+ integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
+mdn-data@~1.1.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
+ integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==
+
+mdurl@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+mem@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+ integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^2.0.0"
+ p-is-promise "^2.0.0"
+
+memory-fs@^0.4.0, memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.3.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+merge-stream@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+ integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=
+ dependencies:
+ readable-stream "^2.0.1"
+
+merge2@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3"
+ integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.2:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
+ integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.2.3"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.40.0:
+ version "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.45.0, "mime-db@>= 1.43.0 < 2":
+ version "1.45.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea"
+ integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==
+
+mime-types@^2.0.8:
+ version "2.1.28"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd"
+ integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==
+ dependencies:
+ mime-db "1.45.0"
+
+mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24:
+ 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@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^2.2.0:
+ version "2.4.7"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74"
+ integrity sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==
+
+mime@^2.3.1, mime@^2.4.2:
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
+ integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+mimic-fn@^2.0.0, mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
+minipass@^2.2.1, minipass@^2.3.5:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
+ integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
+ integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
+ dependencies:
+ minipass "^2.2.1"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp2@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp2/-/mkdirp2-1.0.4.tgz#56de1f8f5c93cf2199906362eba0f9f262ee4437"
+ integrity sha512-Q2PKB4ZR4UPtjLl76JfzlgSCUZhSV1AXQgAZa1qt5RiaALFjP/CDrGvFBrOz7Ck6McPcwMAxTsJvWOUjOU8XMw==
+
+mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+mkdirp@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+mocha@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d"
+ integrity sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==
+ dependencies:
+ browser-stdout "1.3.0"
+ commander "2.9.0"
+ debug "2.6.8"
+ diff "3.2.0"
+ escape-string-regexp "1.0.5"
+ glob "7.1.1"
+ growl "1.9.2"
+ he "1.1.1"
+ json3 "3.3.2"
+ lodash.create "3.1.1"
+ mkdirp "0.5.1"
+ supports-color "3.1.2"
+
+mocha@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
+ integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==
+ dependencies:
+ browser-stdout "1.3.1"
+ commander "2.15.1"
+ debug "3.1.0"
+ diff "3.5.0"
+ escape-string-regexp "1.0.5"
+ glob "7.1.2"
+ growl "1.10.5"
+ he "1.1.1"
+ minimatch "3.0.4"
+ mkdirp "0.5.1"
+ supports-color "5.4.0"
+
+moment@2.x.x, moment@^2.24.0:
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+ integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+ms@2.1.2, ms@^2.0.0, ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
+nan@^2.12.1:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+needle@^2.2.1:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
+ integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
+ dependencies:
+ debug "^3.2.6"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+nise@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.1.tgz#de61d99a1d3b46b5233be4531569b9a8e27372b2"
+ integrity sha512-edFWm0fsFG2n318rfEnKlTZTkjlbVOFF9XIA+fj+Ed+Qz1laYW2lobwavWoMzGrYDHH1EpiNJgDfvGnkZztR/g==
+ dependencies:
+ "@sinonjs/formatio" "^3.2.1"
+ "@sinonjs/text-encoding" "^0.7.1"
+ just-extend "^4.0.2"
+ lolex "^4.1.0"
+ path-to-regexp "^1.7.0"
+
+node-environment-flags@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088"
+ integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==
+ dependencies:
+ object.getownpropertydescriptors "^2.0.3"
+ semver "^5.7.0"
+
+node-fetch@2.6.1, node-fetch@^2.3.0, node-fetch@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
+ integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
+
+node-fetch@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
+node-forge@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
+ integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-notifier@^5.2.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.1.tgz#7c0192cc63aedb25cd99619174daa27902b10903"
+ integrity sha512-p52B+onAEHKW1OF9MGO/S7k/ahGEHfhP5/tvwYzog/5XLYOd8ZuD6vdNZdUuWMONRnKPneXV43v3s6Snx1wsCQ==
+ dependencies:
+ growly "^1.3.0"
+ is-wsl "^1.1.0"
+ semver "^5.5.0"
+ shellwords "^0.1.1"
+ which "^1.3.0"
+
+node-pre-gyp@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
+ integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+node-releases@^1.1.25:
+ version "1.1.27"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.27.tgz#b19ec8add2afe9a826a99dceccc516104c1edaf4"
+ integrity sha512-9iXUqHKSGo6ph/tdXVbHFbhRVQln4ZDTIBJCzsa90HimnBYc5jw8RWYt4wBYFHehGyC3koIz5O4mb2fHrbPOuA==
+ dependencies:
+ semver "^5.3.0"
+
+node-releases@^1.1.60:
+ version "1.1.60"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084"
+ integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==
+
+node-releases@^1.1.70:
+ version "1.1.71"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
+ integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==
+
+nopt@3.x:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+nopt@^4.0.1, nopt@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-url@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+ integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
+
+npm-bundled@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
+ integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
+
+npm-packlist@^1.1.6:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44"
+ integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npm-path@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
+ integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==
+ dependencies:
+ which "^1.2.10"
+
+npm-run-path@^2.0.0, npm-run-path@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npm-which@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa"
+ integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=
+ dependencies:
+ commander "^2.9.0"
+ npm-path "^2.0.2"
+ which "^1.2.10"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
+null-check@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
+ integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+nwsapi@^2.0.7:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f"
+ integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-component@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+ integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-get@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/object-get/-/object-get-2.1.1.tgz#1dad63baf6d94df184d1c58756cc9be55b174dac"
+ integrity sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==
+
+object-keys@^1.0.0, object-keys@^1.0.11, object-keys@^1.0.12:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-to-spawn-args@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/object-to-spawn-args/-/object-to-spawn-args-2.0.0.tgz#00484be684e9213fb5a67f988b18a9d11ad5fcbd"
+ integrity sha512-ZMT4owlXg3JGegecLlAgAA/6BsdKHn63R3ayXcAa3zFkF7oUBHcSb0oxszeutYe0FO2c1lT5pwCuidLkC4Gx3g==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
+object.getownpropertydescriptors@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
+ integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.5.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
+ integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.12.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+onetime@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+ integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+opener@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
+ integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
+
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optimize-css-assets-webpack-plugin@^5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572"
+ integrity sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==
+ dependencies:
+ cssnano "^4.1.10"
+ last-call-webpack-plugin "^3.0.0"
+
+optionator@^0.8.1, optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-locale@^3.0.0, os-locale@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
+ integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
+ dependencies:
+ execa "^1.0.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+output-file-sync@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0"
+ integrity sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ is-plain-obj "^1.1.0"
+ mkdirp "^0.5.1"
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-each-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71"
+ integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-is-promise@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+ integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2"
+ integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^3.0.1, p-limit@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+ integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
+
+p-map@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-reduce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+ integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@~1.0.5:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
+ integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
+
+parallel-transform@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
+ integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=
+ dependencies:
+ cyclist "~0.2.2"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-asn1@^5.0.0:
+ version "5.1.4"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc"
+ integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-node-version@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
+ integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parse5@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
+ integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
+
+parseqs@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+ integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseuri@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+ integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-to-regexp@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
+ integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=
+ dependencies:
+ isarray "0.0.1"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+phantomjs-prebuilt@^2.1.7:
+ version "2.1.16"
+ resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef"
+ integrity sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=
+ dependencies:
+ es6-promise "^4.0.3"
+ extract-zip "^1.6.5"
+ fs-extra "^1.0.0"
+ hasha "^2.2.0"
+ kew "^0.7.0"
+ progress "^1.1.8"
+ request "^2.81.0"
+ request-progress "^2.0.1"
+ which "^1.2.10"
+
+picomatch@^2.2.1, picomatch@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
+ integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pirates@^4.0.0, pirates@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+platform@1.3.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444"
+ integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==
+
+please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
+ integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
+ dependencies:
+ semver-compare "^1.0.0"
+
+plugin-error@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c"
+ integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==
+ dependencies:
+ ansi-colors "^1.0.1"
+ arr-diff "^4.0.0"
+ arr-union "^3.1.0"
+ extend-shallow "^3.0.2"
+
+pn@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-calc@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436"
+ integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==
+ dependencies:
+ css-unit-converter "^1.1.1"
+ postcss "^7.0.5"
+ postcss-selector-parser "^5.0.0-rc.4"
+ postcss-value-parser "^3.3.1"
+
+postcss-colormin@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
+ integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==
+ dependencies:
+ browserslist "^4.0.0"
+ color "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-convert-values@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
+ integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-discard-comments@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
+ integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-duplicates@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
+ integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-empty@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
+ integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-discard-overridden@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
+ integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-merge-longhand@^4.0.11:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
+ integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==
+ dependencies:
+ css-color-names "0.0.4"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ stylehacks "^4.0.0"
+
+postcss-merge-rules@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
+ integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ cssnano-util-same-parent "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+ vendors "^1.0.0"
+
+postcss-minify-font-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
+ integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-minify-gradients@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
+ integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ is-color-stop "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-minify-params@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
+ integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ browserslist "^4.0.0"
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ uniqs "^2.0.0"
+
+postcss-minify-selectors@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
+ integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
+postcss-modules-extract-imports@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
+ integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
+ dependencies:
+ postcss "^7.0.5"
+
+postcss-modules-local-by-default@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63"
+ integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+ postcss-value-parser "^3.3.1"
+
+postcss-modules-scope@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb"
+ integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+
+postcss-modules-values@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64"
+ integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^7.0.6"
+
+postcss-normalize-charset@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
+ integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==
+ dependencies:
+ postcss "^7.0.0"
+
+postcss-normalize-display-values@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
+ integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-positions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
+ integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-repeat-style@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
+ integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-string@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
+ integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==
+ dependencies:
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-timing-functions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
+ integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-unicode@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
+ integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-url@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
+ integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==
+ dependencies:
+ is-absolute-url "^2.0.0"
+ normalize-url "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-normalize-whitespace@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
+ integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==
+ dependencies:
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-ordered-values@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
+ integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==
+ dependencies:
+ cssnano-util-get-arguments "^4.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-reduce-initial@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
+ integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-api "^3.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+
+postcss-reduce-transforms@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
+ integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==
+ dependencies:
+ cssnano-util-get-match "^4.0.0"
+ has "^1.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+
+postcss-selector-parser@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
+ integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=
+ dependencies:
+ dot-prop "^4.1.1"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-selector-parser@^5.0.0-rc.4:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
+ integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
+ dependencies:
+ cssesc "^2.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-selector-parser@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
+ integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
+ dependencies:
+ cssesc "^3.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-svgo@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
+ integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==
+ dependencies:
+ is-svg "^3.0.0"
+ postcss "^7.0.0"
+ postcss-value-parser "^3.0.0"
+ svgo "^1.0.0"
+
+postcss-unique-selectors@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
+ integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==
+ dependencies:
+ alphanum-sort "^1.0.0"
+ postcss "^7.0.0"
+ uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6:
+ version "7.0.17"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f"
+ integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+power-assert-context-formatter@^1.0.7:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz#8fbe72692288ec5a7203cdf215c8b838a6061d2a"
+ integrity sha512-HLNEW8Bin+BFCpk/zbyKwkEu9W8/zThIStxGo7weYcFkKgMuGCHUJhvJeBGXDZf0Qm2xis4pbnnciGZiX0EpSg==
+ dependencies:
+ core-js "^2.0.0"
+ power-assert-context-traversal "^1.2.0"
+
+power-assert-context-reducer-ast@^1.0.7:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.2.0.tgz#c7ca1c9e39a6fb717f7ac5fe9e76e192bf525df3"
+ integrity sha512-EgOxmZ/Lb7tw4EwSKX7ZnfC0P/qRZFEG28dx/690qvhmOJ6hgThYFm5TUWANDLK5NiNKlPBi5WekVGd2+5wPrw==
+ dependencies:
+ acorn "^5.0.0"
+ acorn-es7-plugin "^1.0.12"
+ core-js "^2.0.0"
+ espurify "^1.6.0"
+ estraverse "^4.2.0"
+
+power-assert-context-traversal@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/power-assert-context-traversal/-/power-assert-context-traversal-1.2.0.tgz#f6e71454baf640de5c1c9c270349f5c9ab0b2e94"
+ integrity sha512-NFoHU6g2umNajiP2l4qb0BRWD773Aw9uWdWYH9EQsVwIZnog5bd2YYLFCVvaxWpwNzWeEfZIon2xtyc63026pQ==
+ dependencies:
+ core-js "^2.0.0"
+ estraverse "^4.1.0"
+
+power-assert-formatter@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz#5dc125ed50a3dfb1dda26c19347f3bf58ec2884a"
+ integrity sha1-XcEl7VCj37HdomwZNH879Y7CiEo=
+ dependencies:
+ core-js "^2.0.0"
+ power-assert-context-formatter "^1.0.7"
+ power-assert-context-reducer-ast "^1.0.7"
+ power-assert-renderer-assertion "^1.0.7"
+ power-assert-renderer-comparison "^1.0.7"
+ power-assert-renderer-diagram "^1.0.7"
+ power-assert-renderer-file "^1.0.7"
+
+power-assert-renderer-assertion@^1.0.7:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.2.0.tgz#3db6ffcda106b37bc1e06432ad0d748a682b147a"
+ integrity sha512-3F7Q1ZLmV2ZCQv7aV7NJLNK9G7QsostrhOU7U0RhEQS/0vhEqrRg2jEJl1jtUL4ZyL2dXUlaaqrmPv5r9kRvIg==
+ dependencies:
+ power-assert-renderer-base "^1.1.1"
+ power-assert-util-string-width "^1.2.0"
+
+power-assert-renderer-base@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb"
+ integrity sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s=
+
+power-assert-renderer-comparison@^1.0.7:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.2.0.tgz#e4f88113225a69be8aa586ead05aef99462c0495"
+ integrity sha512-7c3RKPDBKK4E3JqdPtYRE9cM8AyX4LC4yfTvvTYyx8zSqmT5kJnXwzR0yWQLOavACllZfwrAGQzFiXPc5sWa+g==
+ dependencies:
+ core-js "^2.0.0"
+ diff-match-patch "^1.0.0"
+ power-assert-renderer-base "^1.1.1"
+ stringifier "^1.3.0"
+ type-name "^2.0.1"
+
+power-assert-renderer-diagram@^1.0.7:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.2.0.tgz#37f66e8542e5677c5b58e6d72b01c0d9a30e2219"
+ integrity sha512-JZ6PC+DJPQqfU6dwSmpcoD7gNnb/5U77bU5KgNwPPa+i1Pxiz6UuDeM3EUBlhZ1HvH9tMjI60anqVyi5l2oNdg==
+ dependencies:
+ core-js "^2.0.0"
+ power-assert-renderer-base "^1.1.1"
+ power-assert-util-string-width "^1.2.0"
+ stringifier "^1.3.0"
+
+power-assert-renderer-file@^1.0.7:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/power-assert-renderer-file/-/power-assert-renderer-file-1.2.0.tgz#3f4bebd9e1455d75cf2ac541e7bb515a87d4ce4b"
+ integrity sha512-/oaVrRbeOtGoyyd7e4IdLP/jIIUFJdqJtsYzP9/88R39CMnfF/S/rUc8ZQalENfUfQ/wQHu+XZYRMaCEZmEesg==
+ dependencies:
+ power-assert-renderer-base "^1.1.1"
+
+power-assert-util-string-width@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/power-assert-util-string-width/-/power-assert-util-string-width-1.2.0.tgz#6e06d5e3581bb876c5d377c53109fffa95bd91a0"
+ integrity sha512-lX90G0igAW0iyORTILZ/QjZWsa1MZ6VVY3L0K86e2eKun3S4LKPH4xZIl8fdeMYLfOjkaszbNSzf1uugLeAm2A==
+ dependencies:
+ eastasianwidth "^0.2.0"
+
+power-assert@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/power-assert/-/power-assert-1.6.1.tgz#b28cbc02ae808afd1431d0cd5093a39ac5a5b1fe"
+ integrity sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ==
+ dependencies:
+ define-properties "^1.1.2"
+ empower "^1.3.1"
+ power-assert-formatter "^1.4.1"
+ universal-deep-strict-equal "^1.2.1"
+ xtend "^4.0.0"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prettier@2:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
+ integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
+
+pretty-format@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
+ integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==
+ dependencies:
+ ansi-regex "^3.0.0"
+ ansi-styles "^3.2.0"
+
+pretty-format@^24.8.0:
+ version "24.8.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.8.0.tgz#8dae7044f58db7cb8be245383b565a963e3c27f2"
+ integrity sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==
+ dependencies:
+ "@jest/types" "^24.8.0"
+ ansi-regex "^4.0.0"
+ ansi-styles "^3.2.0"
+ react-is "^16.8.4"
+
+pretty-format@^25.2.1, pretty-format@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
+ integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^16.12.0"
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+ integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+promise-polyfill@8.1.3:
+ version "8.1.3"
+ resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116"
+ integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==
+
+promise-polyfill@^6.0.2:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057"
+ integrity sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=
+
+prompts@^2.0.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.2.1.tgz#f901dd2a2dfee080359c0e20059b24188d75ad35"
+ integrity sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.3"
+
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+ integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+
+protobufjs@^6.10.2, protobufjs@^6.8.6:
+ version "6.10.2"
+ resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.2.tgz#b9cb6bd8ec8f87514592ba3fdfd28e93f33a469b"
+ integrity sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.2"
+ "@protobufjs/base64" "^1.1.2"
+ "@protobufjs/codegen" "^2.0.4"
+ "@protobufjs/eventemitter" "^1.1.0"
+ "@protobufjs/fetch" "^1.1.0"
+ "@protobufjs/float" "^1.0.2"
+ "@protobufjs/inquire" "^1.1.0"
+ "@protobufjs/path" "^1.1.2"
+ "@protobufjs/pool" "^1.1.0"
+ "@protobufjs/utf8" "^1.1.0"
+ "@types/long" "^4.0.1"
+ "@types/node" "^13.7.0"
+ long "^4.0.0"
+
+proxy-addr@~2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
+ integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.9.0"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.24, psl@^1.1.28:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd"
+ integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+pumpify@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e"
+ integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==
+ dependencies:
+ duplexify "^4.1.1"
+ inherits "^2.0.3"
+ pump "^3.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.1.2, q@^1.5.0, q@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qjobs@^1.1.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071"
+ integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==
+
+qs@6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@^1.2.0, range-parser@^1.2.1, range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-is@^16.12.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-is@^16.8.4:
+ version "16.9.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
+ integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
+ integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==
+ dependencies:
+ find-up "^3.0.0"
+ read-pkg "^3.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.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=
+ dependencies:
+ normalize-package-data "^2.3.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
+ integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+realpath-native@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
+ integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==
+ dependencies:
+ util.promisify "^1.0.0"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+reduce-extract@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/reduce-extract/-/reduce-extract-1.0.0.tgz#67f2385beda65061b5f5f4312662e8b080ca1525"
+ integrity sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU=
+ dependencies:
+ test-value "^1.0.1"
+
+reduce-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-1.0.1.tgz#258c78efd153ddf93cb561237f61184f3696e327"
+ integrity sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=
+
+reduce-flatten@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-3.0.0.tgz#da477d68453fd9510f9a5fbef86e0fa04b4fd315"
+ integrity sha512-eczl8wAYBxJ6Egl6I1ECIF+8z6sHu+KE7BzaEDZTpPXKXfy9SUDQlVYwkRcNTjJLC3Iakxbhss50KuT/R6SYfg==
+
+reduce-unique@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/reduce-unique/-/reduce-unique-2.0.1.tgz#fb34b90e89297c1e08d75dcf17e9a6443ea71081"
+ integrity sha512-x4jH/8L1eyZGR785WY+ePtyMNhycl1N2XOLxhCbzZFaqF4AXjLzqSxa2UHgJ2ZVR/HHyPOvl1L7xRnW8ye5MdA==
+
+reduce-without@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/reduce-without/-/reduce-without-1.0.1.tgz#68ad0ead11855c9a37d4e8256c15bbf87972fc8c"
+ integrity sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw=
+ dependencies:
+ test-value "^2.0.0"
+
+regenerate-unicode-properties@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
+ integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f"
+ integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.2:
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
+ integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
+
+regenerator-runtime@^0.13.4:
+ version "0.13.7"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
+ integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
+
+regenerator-transform@^0.14.2:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"
+ integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+regexpp@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e"
+ integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==
+
+regexpu-core@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938"
+ integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.2.0"
+ regjsgen "^0.5.1"
+ regjsparser "^0.6.4"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.2.0"
+
+regjsgen@^0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
+ integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
+
+regjsparser@^0.6.4:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272"
+ integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==
+ dependencies:
+ jsesc "~0.5.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae"
+ integrity sha1-x6jTI2BoNiBZp+RlH8aITosftK4=
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request-progress@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08"
+ integrity sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=
+ dependencies:
+ throttleit "^1.0.0"
+
+request-promise-core@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346"
+ integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==
+ dependencies:
+ lodash "^4.17.11"
+
+request-promise-native@^1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59"
+ integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==
+ dependencies:
+ request-promise-core "1.1.2"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
+request@2.88.0, request@^2.81.0, request@^2.86.0, request@^2.87.0:
+ version "2.88.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+requizzle@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.3.tgz#4675c90aacafb2c036bd39ba2daa4a1cb777fded"
+ integrity sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==
+ dependencies:
+ lodash "^4.17.14"
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@1.1.7, resolve@1.1.x:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
+ integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
+ dependencies:
+ path-parse "^1.0.6"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retry-request@^4.0.0, retry-request@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.1.3.tgz#d5f74daf261372cff58d08b0a1979b4d7cab0fde"
+ integrity sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ==
+ dependencies:
+ debug "^4.1.1"
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rfdc@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2"
+ integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==
+
+rgb-regex@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
+ integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE=
+
+rgba-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
+ integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
+
+rimraf@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rsvp@^4.8.4:
+ version "4.8.5"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+ dependencies:
+ is-promise "^2.1.0"
+
+run-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"
+ integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+rxjs@^6.3.3, rxjs@^6.4.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7"
+ integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sane@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
+ integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
+ dependencies:
+ "@cnakazawa/watch" "^1.0.3"
+ anymatch "^2.0.0"
+ capture-exit "^2.0.0"
+ exec-sh "^0.3.2"
+ execa "^1.0.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+
+sauce-connect-launcher@^1.2.2:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-1.2.7.tgz#c7f8b3d4eb354d07a9922b4cd67356f527192556"
+ integrity sha512-v07+QhFrxgz3seMFuRSonu3gW1s6DbcLQlFhjsRrmKUauzPbbudHdnn91WYgEwhoZVdPNzeZpAEJwcQyd9xnTA==
+ dependencies:
+ adm-zip "~0.4.3"
+ async "^2.1.2"
+ https-proxy-agent "^2.2.1"
+ lodash "^4.16.6"
+ rimraf "^2.5.4"
+
+saucelabs@^1.4.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d"
+ integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==
+ dependencies:
+ https-proxy-agent "^2.2.1"
+
+sax@^1.2.4, sax@~1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+schema-utils@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
+ integrity sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=
+ dependencies:
+ ajv "^5.0.0"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+semver-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
+ integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
+
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@^5.4.1, semver@^5.5.1, semver@^5.7.0:
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
+ integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
+
+semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+send@0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+ integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.7.2"
+ mime "1.6.0"
+ ms "2.1.1"
+ on-finished "~2.3.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
+
+serialize-javascript@^1.4.0, serialize-javascript@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65"
+ integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==
+
+serve-static@1.14.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+ integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.17.1"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shallow-clone@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+ integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+ dependencies:
+ kind-of "^6.0.2"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
+sigmund@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
+ integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+simple-git@^2.35.2:
+ version "2.35.2"
+ resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.35.2.tgz#b0f4d30bfba2b6998a3f435f25ef13ccef26305e"
+ integrity sha512-UjOKsrz92Bx7z00Wla5V6qLSf5X2XSp0sL2gzKw1Bh7iJfDPDaU7gK5avIup0yo1/sMOSUMQer2b9GcnF6nmTQ==
+ dependencies:
+ "@kwsites/file-exists" "^1.1.1"
+ "@kwsites/promise-deferred" "^1.1.1"
+ debug "^4.3.2"
+
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
+ dependencies:
+ is-arrayish "^0.3.1"
+
+sinon@^7.4.1:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.4.1.tgz#bcd0c63953893e87fa0cc502f52489c32a83d4d9"
+ integrity sha512-7s9buHGHN/jqoy/v4bJgmt0m1XEkCEd/tqdHXumpBp0JSujaT4Ng84JU5wDdK4E85ZMq78NuDe0I3NAqXY8TFg==
+ dependencies:
+ "@sinonjs/commons" "^1.4.0"
+ "@sinonjs/formatio" "^3.2.1"
+ "@sinonjs/samsam" "^3.3.2"
+ diff "^3.5.0"
+ lolex "^4.2.0"
+ nise "^1.5.1"
+ supports-color "^5.5.0"
+
+sisteransi@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb"
+ integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==
+
+size-limit@^0.21.0:
+ version "0.21.1"
+ resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-0.21.1.tgz#755ecd318a02570574ff7a815b88c6801f9a9995"
+ integrity sha512-bBSSU4l6iT+hHRdhbXTpn9Ee4MWQhPW5EaBgNRV5T5/KJLCRZBTLwSY94L2RW90aRKruDP+veuSmrE98NRzQww==
+ dependencies:
+ bytes "^3.0.0"
+ chalk "^2.4.1"
+ ci-job-number "^0.3.0"
+ compression-webpack-plugin "^2.0.0"
+ cosmiconfig "^5.0.7"
+ css-loader "^2.1.0"
+ escape-string-regexp "^1.0.5"
+ file-loader "^3.0.1"
+ globby "^8.0.1"
+ gzip-size "^5.0.0"
+ memory-fs "^0.4.1"
+ optimize-css-assets-webpack-plugin "^5.0.1"
+ read-pkg-up "^4.0.0"
+ style-loader "^0.23.1"
+ webpack "^4.28.2"
+ webpack-bundle-analyzer "^3.0.3"
+ yargs "^12.0.5"
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+slash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+ integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+snakeize@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d"
+ integrity sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+snazzy@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/snazzy/-/snazzy-7.1.1.tgz#26639b19a72c4d542c762049f829d14a1ad16879"
+ integrity sha512-gJ46s+jcwOeRhO9uEkTyzcREFZ0c5LZOgcVakLxTPIvhRIywKvbvArvMg5e8bBbpWe4InC/8eyEQOGXgJVNOfw==
+ dependencies:
+ chalk "^2.3.0"
+ inherits "^2.0.1"
+ minimist "^1.1.1"
+ readable-stream "^2.0.6"
+ standard-json "^1.0.0"
+ strip-ansi "^4.0.0"
+ text-table "^0.2.0"
+
+socket.io-adapter@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
+ integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=
+
+socket.io-client@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f"
+ integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==
+ dependencies:
+ backo2 "1.0.2"
+ base64-arraybuffer "0.1.5"
+ component-bind "1.0.0"
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ engine.io-client "~3.2.0"
+ has-binary2 "~1.0.2"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ socket.io-parser "~3.2.0"
+ to-array "0.1.4"
+
+socket.io-parser@~3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077"
+ integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ isarray "2.0.1"
+
+socket.io@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980"
+ integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==
+ dependencies:
+ debug "~3.1.0"
+ engine.io "~3.2.0"
+ has-binary2 "~1.0.2"
+ socket.io-adapter "~1.1.0"
+ socket.io-client "2.1.1"
+ socket.io-parser "~3.2.0"
+
+sort-array@^4.1.3:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/sort-array/-/sort-array-4.1.3.tgz#ede740ab6c82c900524b157feff79bcfd610b36d"
+ integrity sha512-6auiM0DNob/zF+7Ae/SM4BFL5D7DPK/HVcllhVu5V+FgoCPs0A6b6ZwJDuvJpXQgFpxqLZUOD2kdxqO4Z59dkg==
+ dependencies:
+ array-back "^5.0.0"
+ typical "^6.0.1"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.17:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-support@^0.5.6, source-map-support@^0.5.9, source-map-support@~0.5.12:
+ version "0.5.13"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
+ integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+source-map@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50=
+ dependencies:
+ amdefine ">=0.0.4"
+
+spdx-correct@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+ integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+ integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+stable@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+ integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+stack-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
+ integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+
+staged-git-files@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b"
+ integrity sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==
+
+standard-json@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/standard-json/-/standard-json-1.1.0.tgz#33ac0d2eccaddb0556f5ae28c43a35624cf1fb25"
+ integrity sha512-nkonX+n5g3pyVBvJZmvRlFtT/7JyLbNh4CtrYC3Qfxihgs8PKX52f6ONKQXORStuBWJ5PI83EUrNXme7LKfiTQ==
+ dependencies:
+ concat-stream "^2.0.0"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-connect@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/stream-connect/-/stream-connect-1.0.2.tgz#18bc81f2edb35b8b5d9a8009200a985314428a97"
+ integrity sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc=
+ dependencies:
+ array-back "^1.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-events@^1.0.1, stream-events@^1.0.4, stream-events@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5"
+ integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==
+ dependencies:
+ stubs "^3.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+ integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
+
+stream-via@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/stream-via/-/stream-via-1.0.4.tgz#8dccbb0ac909328eb8bc8e2a4bd3934afdaf606c"
+ integrity sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==
+
+streamroller@0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b"
+ integrity sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==
+ dependencies:
+ date-format "^1.2.0"
+ debug "^3.1.0"
+ mkdirp "^0.5.1"
+ readable-stream "^2.3.0"
+
+streamsearch@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
+ integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=
+
+string-argv@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736"
+ integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY=
+
+string-length@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
+ integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff"
+ integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^5.2.0"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringifier@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/stringifier/-/stringifier-1.4.0.tgz#d704581567f4526265d00ed8ecb354a02c3fec28"
+ integrity sha512-cNsMOqqrcbLcHTXEVmkw9y0fwDwkdgtZwlfyolzpQDoAE1xdNGhQhxBUfiDvvZIKl1hnUEgMv66nHwtMz3OjPw==
+ dependencies:
+ core-js "^2.0.0"
+ traverse "^0.6.6"
+ type-name "^2.0.1"
+
+stringify-object@^3.2.2:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+strip-json-comments@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+stubs@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b"
+ integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls=
+
+style-loader@^0.23.1:
+ version "0.23.1"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+ integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+
+stylehacks@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
+ integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==
+ dependencies:
+ browserslist "^4.0.0"
+ postcss "^7.0.0"
+ postcss-selector-parser "^3.0.0"
+
+supports-color@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU=
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
+ integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@6.1.0, supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^3.1.0:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+svgo@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313"
+ integrity sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==
+ dependencies:
+ chalk "^2.4.1"
+ coa "^2.0.2"
+ css-select "^2.0.0"
+ css-select-base-adapter "^0.1.1"
+ css-tree "1.0.0-alpha.33"
+ csso "^3.5.1"
+ js-yaml "^3.13.1"
+ mkdirp "~0.5.1"
+ object.values "^1.1.0"
+ sax "~1.2.4"
+ stable "^0.1.8"
+ unquote "~1.1.1"
+ util.promisify "~1.0.0"
+
+symbol-observable@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+symbol-tree@^3.2.2:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+table-layout@^0.4.2:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.4.5.tgz#d906de6a25fa09c0c90d1d08ecd833ecedcb7378"
+ integrity sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==
+ dependencies:
+ array-back "^2.0.0"
+ deep-extend "~0.6.0"
+ lodash.padend "^4.6.1"
+ typical "^2.6.1"
+ wordwrapjs "^3.0.0"
+
+table@^5.2.3:
+ version "5.4.5"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.5.tgz#c8f4ea2d8fee08c0027fac27b0ec0a4fe01dfa42"
+ integrity sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+taffydb@2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268"
+ integrity sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tar-stream@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3"
+ integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==
+ dependencies:
+ bl "^3.0.0"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+tar@^4:
+ version "4.4.10"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1"
+ integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.5"
+ minizlib "^1.2.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.3"
+
+teeny-request@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.0.1.tgz#bdd41fdffea5f8fbc0d29392cb47bec4f66b2b4c"
+ integrity sha512-sasJmQ37klOlplL4Ia/786M5YlOcoLGQyq2TE4WHSRupbAuDaQW0PfVxV4MtdBtRJ4ngzS+1qim8zP6Zp35qCw==
+ dependencies:
+ http-proxy-agent "^4.0.0"
+ https-proxy-agent "^5.0.0"
+ node-fetch "^2.6.1"
+ stream-events "^1.0.5"
+ uuid "^8.0.0"
+
+temp-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/temp-path/-/temp-path-1.0.0.tgz#24b1543973ab442896d9ad367dd9cbdbfafe918b"
+ integrity sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=
+
+terser-webpack-plugin@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4"
+ integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^1.7.0"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^4.1.2:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.4.tgz#4478b6a08bb096a61e793fea1a4434408bab936c"
+ integrity sha512-+ZwXJvdSwbd60jG0Illav0F06GDJF0R4ydZ21Q3wGAFKoBGyJGo34F63vzJHgvYxc1ukOtIjvwEvl9MkjzM6Pg==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+test-exclude@^5.2.3:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0"
+ integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==
+ dependencies:
+ glob "^7.1.3"
+ minimatch "^3.0.4"
+ read-pkg-up "^4.0.0"
+ require-main-filename "^2.0.0"
+
+test-value@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/test-value/-/test-value-1.1.0.tgz#a09136f72ec043d27c893707c2b159bfad7de93f"
+ integrity sha1-oJE29y7AQ9J8iTcHwrFZv6196T8=
+ dependencies:
+ array-back "^1.0.2"
+ typical "^2.4.2"
+
+test-value@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291"
+ integrity sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=
+ dependencies:
+ array-back "^1.0.3"
+ typical "^2.6.0"
+
+test-value@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/test-value/-/test-value-3.0.0.tgz#9168c062fab11a86b8d444dd968bb4b73851ce92"
+ integrity sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==
+ dependencies:
+ array-back "^2.0.0"
+ typical "^2.6.1"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
+ integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
+ dependencies:
+ any-promise "^1.0.0"
+
+throat@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
+ integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
+
+throttleit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+ integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=
+
+through2@^2.0.0, through2@^2.0.3:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+time-stamp@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
+ integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=
+
+timers-browserify@^2.0.4:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+timsort@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
+ integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+
+tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+ integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+ integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+topo@1.x.x:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5"
+ integrity sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=
+ dependencies:
+ hoek "2.x.x"
+
+tough-cookie@^2.3.3, tough-cookie@^2.3.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
+ dependencies:
+ punycode "^2.1.0"
+
+traverse@^0.6.6:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
+ integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+ integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+
+tryer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
+ integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
+
+ts-node@^9.1.1:
+ version "9.1.1"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d"
+ integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==
+ dependencies:
+ arg "^4.1.0"
+ create-require "^1.1.0"
+ diff "^4.0.1"
+ make-error "^1.1.1"
+ source-map-support "^0.5.17"
+ yn "3.1.1"
+
+tslib@^1.11.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^1.8.1, tslib@^1.9.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+ integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+
+tsutils@^3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
+ integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+ dependencies:
+ tslib "^1.8.1"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-detect@4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2"
+ integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==
+
+type-is@~1.6.17, type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+type-name@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4"
+ integrity sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typesaurus@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/typesaurus/-/typesaurus-7.1.0.tgz#f030083a201f6e4d02e7f3287bec271d84fba229"
+ integrity sha512-2Az/QN4FprxtT/6Grr3gFb8v6dY1NkSkGvEt6l0b4/cY28p6HmNY/VaZP9p9wQP2GdU8lAbOi+Ip6j1gehCarA==
+
+typescript@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2"
+ integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==
+
+typical@^2.4.2, typical@^2.6.0, typical@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d"
+ integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=
+
+typical@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4"
+ integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==
+
+typical@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/typical/-/typical-6.0.1.tgz#89bd1a6aa5e5e96fa907fb6b7579223bff558a06"
+ integrity sha512-+g3NEp7fJLe9DPa1TArHm9QAA7YciZmWnfAqEaFrBihQ7epOv9i99rjtgb6Iz0wh3WuQDjsCTDfgRoGnmHN81A==
+
+uc.micro@^1.0.1, uc.micro@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
+ integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
+
+uglify-js@^3.1.4:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5"
+ integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==
+ dependencies:
+ commander "~2.20.0"
+ source-map "~0.6.1"
+
+ultron@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
+ integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==
+
+underscore@~1.10.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.10.2.tgz#73d6aa3668f3188e4adb0f1943bd12cfd7efaaaf"
+ integrity sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"
+ integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
+ integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+uniqs@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+ integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ dependencies:
+ crypto-random-string "^2.0.0"
+
+universal-deep-strict-equal@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz#0da4ac2f73cff7924c81fa4de018ca562ca2b0a7"
+ integrity sha1-DaSsL3PP95JMgfpN4BjKViyisKc=
+ dependencies:
+ array-filter "^1.0.0"
+ indexof "0.0.1"
+ object-keys "^1.0.0"
+
+universal-user-agent@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
+ integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unquote@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+ integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
+ integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+useragent@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972"
+ integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==
+ dependencies:
+ lru-cache "4.1.x"
+ tmp "0.0.x"
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@^1.0.0, util.promisify@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+ integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+ dependencies:
+ define-properties "^1.1.2"
+ object.getownpropertydescriptors "^2.0.3"
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
+ integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+
+uuid@^8.0.0:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+v8-compile-cache@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
+ integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
+
+v8flags@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8"
+ integrity sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+vargs@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff"
+ integrity sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+vendors@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0"
+ integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019"
+ integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==
+
+void-elements@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
+ integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
+
+w3c-hr-time@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
+ integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=
+ dependencies:
+ browser-process-hrtime "^0.1.2"
+
+walk-back@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-2.0.1.tgz#554e2a9d874fac47a8cb006bf44c2f0c4998a0a4"
+ integrity sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=
+
+walk-back@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-4.0.0.tgz#9e4ad2bd72038f3beed2d83180f9fd40b233bfab"
+ integrity sha512-kudCA8PXVQfrqv2mFTG72vDBRi8BKWxGgFLwPpzHcpZnSwZk93WMwUDVcLHWNsnm+Y0AC4Vb6MUNRgaHfyV2DQ==
+
+walk-back@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-5.0.0.tgz#ba29d399957f87abb27645ebe885d53cf4f2f373"
+ integrity sha512-ASerU3aOj9ok+uMNiW0A6/SEwNOxhPmiprbHmPFw1faz7Qmoy9wD3sbmL5HYG+IBxT5c/4cX9O2kSpNv8OAM9A==
+
+walker@^1.0.7, walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ dependencies:
+ makeerror "1.0.x"
+
+watchpack@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
+ dependencies:
+ chokidar "^2.0.2"
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+
+wd@^1.4.0:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/wd/-/wd-1.11.3.tgz#db228863e15648e0c1466df45b263fc30470dbc4"
+ integrity sha512-doB7E6DDhis6sSCfWps9Uz0UBBPAySv1x96KH6klfHp8y89HvhqEq3c0O8LPZhG37egJULN0m7+M9t16xUTG0g==
+ dependencies:
+ archiver "^3.0.0"
+ async "^2.0.0"
+ fancy-log "^1.3.3"
+ gulp-mocha "^6.0.0"
+ lodash "^4.0.0"
+ mkdirp "^0.5.1"
+ q "^1.5.1"
+ request "2.88.0"
+ vargs "^0.1.0"
+
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+webpack-bundle-analyzer@^3.0.3:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.4.1.tgz#430544c7ba1631baccf673475ca8300cb74a3c47"
+ integrity sha512-Bs8D/1zF+17lhqj2OYmzi7HEVYqEVxu7lCO9Ff8BwajenOU0vAwEoV8e4ICCPNZAcqR1PCR/7o2SkW+cnCmF0A==
+ dependencies:
+ acorn "^6.0.7"
+ acorn-walk "^6.1.1"
+ bfj "^6.1.1"
+ chalk "^2.4.1"
+ commander "^2.18.0"
+ ejs "^2.6.1"
+ express "^4.16.3"
+ filesize "^3.6.1"
+ gzip-size "^5.0.0"
+ lodash "^4.17.15"
+ mkdirp "^0.5.1"
+ opener "^1.5.1"
+ ws "^6.0.0"
+
+webpack-cli@^3.1.2:
+ version "3.3.6"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.6.tgz#2c8c399a2642133f8d736a359007a052e060032c"
+ integrity sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A==
+ dependencies:
+ chalk "2.4.2"
+ cross-spawn "6.0.5"
+ enhanced-resolve "4.1.0"
+ findup-sync "3.0.0"
+ global-modules "2.0.0"
+ import-local "2.0.0"
+ interpret "1.2.0"
+ loader-utils "1.2.3"
+ supports-color "6.1.0"
+ v8-compile-cache "2.0.3"
+ yargs "13.2.4"
+
+webpack-dev-middleware@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff"
+ integrity sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==
+ dependencies:
+ memory-fs "^0.4.1"
+ mime "^2.4.2"
+ range-parser "^1.2.1"
+ webpack-log "^2.0.0"
+
+webpack-log@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
+ integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
+ dependencies:
+ ansi-colors "^3.0.0"
+ uuid "^3.3.2"
+
+webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@4, webpack@^4.28.2:
+ version "4.39.2"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.39.2.tgz#c9aa5c1776d7c309d1b3911764f0288c8c2816aa"
+ integrity sha512-AKgTfz3xPSsEibH00JfZ9sHXGUwIQ6eZ9tLN8+VLzachk1Cw2LVmy+4R7ZiwTa9cZZ15tzySjeMui/UnSCAZhA==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/wasm-edit" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ acorn "^6.2.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.1"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.1"
+ watchpack "^1.6.0"
+ webpack-sources "^1.4.1"
+
+websocket-driver@>=0.5.1:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"
+ integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==
+ dependencies:
+ http-parser-js ">=0.4.0 <0.4.11"
+ safe-buffer ">=5.1.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
+ integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
+
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-fetch@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
+ integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
+
+whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^6.4.1:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
+ integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+whatwg-url@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd"
+ integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.1.1, which@^1.2.1, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+wordwrap@^1.0.0, wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wordwrapjs@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-3.0.0.tgz#c94c372894cadc6feb1a66bff64e1d9af92c5d1e"
+ integrity sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==
+ dependencies:
+ reduce-flatten "^1.0.1"
+ typical "^2.6.1"
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+world-countries@^1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/world-countries/-/world-countries-1.8.1.tgz#14ba7d735d422d63de70deb6e35ec5e49341b209"
+ integrity sha1-FLp9c11CLWPecN62417F5JNBsgk=
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrap-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
+ integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529"
+ integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@^5.2.0:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
+ integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+ws@^6.0.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
+ integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+ws@~3.3.1:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
+ integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==
+ dependencies:
+ async-limiter "~1.0.0"
+ safe-buffer "~5.1.0"
+ ultron "~1.1.0"
+
+xdg-basedir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
+ integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xmlcreate@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.3.tgz#df9ecd518fd3890ab3548e1b811d040614993497"
+ integrity sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==
+
+xmlhttprequest-ssl@~1.5.4:
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
+ integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
+
+xmlhttprequest@1.8.0, xmlhttprequest@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
+ integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=
+
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
+ integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^11.1.1:
+ version "11.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
+ integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^13.1.0:
+ version "13.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+ integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@13.2.4:
+ version "13.2.4"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
+ integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ os-locale "^3.1.0"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.0"
+
+yargs@^12.0.2, yargs@^12.0.5:
+ version "12.0.5"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
+ integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^1.2.0"
+ find-up "^3.0.0"
+ get-caller-file "^1.0.1"
+ os-locale "^3.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1 || ^4.0.0"
+ yargs-parser "^11.1.1"
+
+yauzl@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+ integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=
+ dependencies:
+ fd-slicer "~1.0.1"
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+ integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
+
+yn@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+ integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+zip-stream@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.2.tgz#841efd23214b602ff49c497cba1a85d8b5fbc39c"
+ integrity sha512-ykebHGa2+uzth/R4HZLkZh3XFJzivhVsjJt8bN3GvBzLaqqrUdRacu+c4QtnUgjkkQfsOuNE1JgLKMCPNmkKgg==
+ dependencies:
+ archiver-utils "^2.1.0"
+ compress-commons "^2.1.1"
+ readable-stream "^3.4.0"
diff --git a/history/.browserslistrc b/history/.browserslistrc
new file mode 100644
index 0000000..b73f951
--- /dev/null
+++ b/history/.browserslistrc
@@ -0,0 +1,9 @@
+# Browsers we support
+> 0.5%
+Chrome >= 73
+ChromeAndroid >= 75
+Firefox >= 67
+Edge >= 17
+IE 11
+Safari >= 12.1
+iOS >= 11.3
diff --git a/history/.github/lock.yml b/history/.github/lock.yml
new file mode 100644
index 0000000..df9daf8
--- /dev/null
+++ b/history/.github/lock.yml
@@ -0,0 +1,25 @@
+# Configuration for lock-threads - https://github.com/dessant/lock-threads
+
+# Number of days of inactivity before a closed issue or pull request is locked
+daysUntilLock: 60
+
+# Issues and pull requests with these labels will not be locked. Set to `[]` to disable
+exemptLabels: []
+
+# Label to add before locking, such as `outdated`. Set to `false` to disable
+lockLabel: false
+
+# Comment to post before locking. Set to `false` to disable
+lockComment: false
+
+# Limit to only `issues` or `pulls`
+# only: issues
+
+# Optionally, specify configuration settings just for `issues` or `pulls`
+# issues:
+# exemptLabels:
+# - help-wanted
+# lockLabel: outdated
+
+# pulls:
+# daysUntilLock: 30
diff --git a/history/.gitignore b/history/.gitignore
new file mode 100644
index 0000000..5ea1708
--- /dev/null
+++ b/history/.gitignore
@@ -0,0 +1,5 @@
+/node_modules/
+/esm/
+/cjs/
+/umd/
+/local.log
diff --git a/history/.prettierignore b/history/.prettierignore
new file mode 100644
index 0000000..c99ed47
--- /dev/null
+++ b/history/.prettierignore
@@ -0,0 +1,3 @@
+.travis.yml
+package.json
+package-lock.json
diff --git a/history/.prettierrc b/history/.prettierrc
new file mode 100644
index 0000000..544138b
--- /dev/null
+++ b/history/.prettierrc
@@ -0,0 +1,3 @@
+{
+ "singleQuote": true
+}
diff --git a/history/.size-snapshot.json b/history/.size-snapshot.json
new file mode 100644
index 0000000..c9b0bf5
--- /dev/null
+++ b/history/.size-snapshot.json
@@ -0,0 +1,26 @@
+{
+ "esm/history.js": {
+ "bundled": 28076,
+ "minified": 12353,
+ "gzipped": 3575,
+ "treeshaked": {
+ "rollup": {
+ "code": 208,
+ "import_statements": 132
+ },
+ "webpack": {
+ "code": 1324
+ }
+ }
+ },
+ "umd/history.js": {
+ "bundled": 33021,
+ "minified": 11943,
+ "gzipped": 3917
+ },
+ "umd/history.min.js": {
+ "bundled": 30384,
+ "minified": 9993,
+ "gzipped": 3501
+ }
+}
diff --git a/history/.travis.yml b/history/.travis.yml
new file mode 100644
index 0000000..093b896
--- /dev/null
+++ b/history/.travis.yml
@@ -0,0 +1,26 @@
+language: node_js
+node_js: node
+cache: yarn
+env:
+- TEST_ENV=cjs BUILD_ENV=cjs
+- TEST_ENV=umd BUILD_ENV=umd
+- TEST_ENV=source
+before_script:
+- ([[ -z "$BUILD_ENV" ]] || yarn build)
+script:
+- yarn lint
+- yarn test
+jobs:
+ include:
+ - stage: Release
+ if: tag =~ ^v[0-9]
+ env: NPM_TAG=$([[ "$TRAVIS_TAG" == *-* ]] && echo "next" || echo "latest")
+ script: echo "Releasing $TRAVIS_TAG to npm with tag \"$NPM_TAG\" ..."
+ deploy:
+ provider: npm
+ skip_cleanup: true
+ tag: "$NPM_TAG"
+ email: npm@mjackson.me
+ api_key: "$NPM_TOKEN"
+ on:
+ tags: true
diff --git a/history/CONTRIBUTING.md b/history/CONTRIBUTING.md
new file mode 100644
index 0000000..56c2461
--- /dev/null
+++ b/history/CONTRIBUTING.md
@@ -0,0 +1,9 @@
+All development happens [on GitHub](https://github.com/ReactTraining/history). When [creating a pull request](https://help.github.com/articles/creating-a-pull-request/), please make sure that all of the following apply:
+
+- If you're adding a new feature or "fixing" a bug, please go into detail about your use case and why you think you need that feature or that bug fixed. This library has lots and lots of dependents, and we can't afford to make changes lightly without understanding why.
+- The tests pass. The test suite will automatically run when you create the PR. All you need to do is wait a few minutes to see the result in the PR.
+- Each commit in your PR should describe a significant piece of work. Work that was done in one commit and then undone later should be squashed into a single commit.
+
+If your PR fails to meet these guidelines, it may be closed without much of an explanation besides a link to this document.
+
+Thank you for your contribution!
diff --git a/history/DOMUtils.js b/history/DOMUtils.js
new file mode 100644
index 0000000..c4f93d3
--- /dev/null
+++ b/history/DOMUtils.js
@@ -0,0 +1,3 @@
+'use strict';
+require('./warnAboutDeprecatedCJSRequire.js')('DOMUtils');
+module.exports = require('./index.js').DOMUtils;
diff --git a/history/ExecutionEnvironment.js b/history/ExecutionEnvironment.js
new file mode 100644
index 0000000..44de3b2
--- /dev/null
+++ b/history/ExecutionEnvironment.js
@@ -0,0 +1,3 @@
+'use strict';
+require('./warnAboutDeprecatedCJSRequire.js')('ExecutionEnvironment');
+module.exports = require('./index.js').ExecutionEnvironment;
diff --git a/history/LICENSE b/history/LICENSE
new file mode 100644
index 0000000..dc15fe3
--- /dev/null
+++ b/history/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) React Training 2016-2018
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/history/LocationUtils.js b/history/LocationUtils.js
new file mode 100644
index 0000000..a861205
--- /dev/null
+++ b/history/LocationUtils.js
@@ -0,0 +1,3 @@
+'use strict';
+require('./warnAboutDeprecatedCJSRequire.js')('LocationUtils');
+module.exports = require('./index.js').LocationUtils;
diff --git a/history/PathUtils.js b/history/PathUtils.js
new file mode 100644
index 0000000..7dc98c2
--- /dev/null
+++ b/history/PathUtils.js
@@ -0,0 +1,3 @@
+'use strict';
+require('./warnAboutDeprecatedCJSRequire.js')('PathUtils');
+module.exports = require('./index.js').PathUtils;
diff --git a/history/README.md b/history/README.md
new file mode 100644
index 0000000..bfa8554
--- /dev/null
+++ b/history/README.md
@@ -0,0 +1,38 @@
+# history &middot; [![npm package][npm-badge]][npm] [![Travis][build-badge]][build]
+
+[npm-badge]: https://img.shields.io/npm/v/history.svg?style=flat-square
+[npm]: https://www.npmjs.org/package/history
+[build-badge]: https://img.shields.io/travis/ReactTraining/history/master.svg?style=flat-square
+[build]: https://travis-ci.org/ReactTraining/history
+
+The history library lets you easily manage session history anywhere JavaScript runs. `history` abstracts away the differences in various environments and provides a minimal API that lets you manage the history stack, navigate, and persist state between sessions.
+
+## Documentation
+
+Documentation for the current branch can be found in the [docs](docs) directory.
+
+## Changes
+
+To see the changes that were made in a given release, please lookup the tag on [the releases page](https://github.com/ReactTraining/history/releases).
+
+For changes released in version 4.6.3 and earlier, please see [the `CHANGES.md` file](https://github.com/ReactTraining/history/blob/845d690c5576c7f55ecbe14babe0092e8e5bc2bb/CHANGES.md).
+
+## Development
+
+Development of the current stable release, version 4, happens on [the `master` branch](https://github.com/ReactTraining/history/tree/master). Please keep in mind that this branch may include some work that has not yet been published as part of an official release. However, since `master` is always stable, you should feel free to build your own working release straight from master at any time.
+
+Development of the next major release, version 5, happens on [the `dev` branch](https://github.com/ReactTraining/history/tree/dev).
+
+If you're interested in helping out, please read [our contributing guidelines](CONTRIBUTING.md).
+
+## About
+
+`history` is developed and maintained by [React Training](https://reacttraining.com). If
+you're interested in learning more about what React can do for your company, please
+[get in touch](mailto:hello@reacttraining.com)!
+
+## Thanks
+
+A big thank-you to [BrowserStack](https://www.browserstack.com/) for providing the infrastructure that allows us to run our build in real browsers.
+
+Also, thanks to [Dan Shaw](https://www.npmjs.com/~dshaw) for letting us use the `history` npm package name. Thanks, Dan!
diff --git a/history/createBrowserHistory.js b/history/createBrowserHistory.js
new file mode 100644
index 0000000..34f12c3
--- /dev/null
+++ b/history/createBrowserHistory.js
@@ -0,0 +1,3 @@
+'use strict';
+require('./warnAboutDeprecatedCJSRequire.js')('createBrowserHistory');
+module.exports = require('./index.js').createBrowserHistory;
diff --git a/history/createHashHistory.js b/history/createHashHistory.js
new file mode 100644
index 0000000..7686422
--- /dev/null
+++ b/history/createHashHistory.js
@@ -0,0 +1,3 @@
+'use strict';
+require('./warnAboutDeprecatedCJSRequire.js')('createHashHistory');
+module.exports = require('./index.js').createHashHistory;
diff --git a/history/createMemoryHistory.js b/history/createMemoryHistory.js
new file mode 100644
index 0000000..a0ce3ff
--- /dev/null
+++ b/history/createMemoryHistory.js
@@ -0,0 +1,3 @@
+'use strict';
+require('./warnAboutDeprecatedCJSRequire.js')('createMemoryHistory');
+module.exports = require('./index.js').createMemoryHistory;
diff --git a/history/createTransitionManager.js b/history/createTransitionManager.js
new file mode 100644
index 0000000..f8cf2f6
--- /dev/null
+++ b/history/createTransitionManager.js
@@ -0,0 +1,3 @@
+'use strict';
+require('./warnAboutDeprecatedCJSRequire.js')('createTransitionManager');
+module.exports = require('./index.js').createTransitionManager;
diff --git a/history/docs/Blocking.md b/history/docs/Blocking.md
new file mode 100644
index 0000000..b3c1aab
--- /dev/null
+++ b/history/docs/Blocking.md
@@ -0,0 +1,38 @@
+# Blocking Transitions
+
+`history` lets you register a prompt message that will be shown to the user before location listeners are notified. This allows you to make sure the user wants to leave the current page before they navigate away.
+
+```js
+// Register a simple prompt message that will be shown the
+// user before they navigate away from the current page.
+const unblock = history.block('Are you sure you want to leave this page?');
+
+// Or use a function that returns the message when it's needed.
+history.block((location, action) => {
+ // The location and action arguments indicate the location
+ // we're transitioning to and how we're getting there.
+
+ // A common use case is to prevent the user from leaving the
+ // page if there's a form they haven't submitted yet.
+ if (input.value !== '') return 'Are you sure you want to leave this page?';
+});
+
+// To stop blocking transitions, call the function returned from block().
+unblock();
+```
+
+**Note:** You'll need to provide a `getUserConfirmation` function to use this feature with `createMemoryHistory` (see below).
+
+## Customizing the Confirm Dialog
+
+By default, [`window.confirm`](https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm) is used to show prompt messages to the user. If you need to override this behavior (or if you're using `createMemoryHistory`, which doesn't assume a DOM environment), provide a `getUserConfirmation` function when you create your history object.
+
+```js
+const history = createHistory({
+ getUserConfirmation(message, callback) {
+ // Show some custom dialog to the user and call
+ // callback(true) to continue the transiton, or
+ // callback(false) to abort it.
+ }
+});
+```
diff --git a/history/docs/GettingStarted.md b/history/docs/GettingStarted.md
new file mode 100644
index 0000000..f7e9656
--- /dev/null
+++ b/history/docs/GettingStarted.md
@@ -0,0 +1,110 @@
+# Intro
+
+The history library is a lightweight layer over browsers' built-in [History](https://developer.mozilla.org/en-US/docs/Web/API/History) and [Location](https://developer.mozilla.org/en-US/docs/Web/API/Location) APIs. The goal is not to provide a full implementation of these APIs, but rather to make it easy for users to opt-in to different methods of navigation.
+
+We provide 3 different methods for creating a `history` object, depending on the needs of your environment:
+
+- `createBrowserHistory` is for use in modern web browsers that support the [HTML5 history API](http://diveintohtml5.info/history.html) (see [cross-browser compatibility](http://caniuse.com/#feat=history))
+- `createHashHistory` is for use in situations where you want to store the location in the [hash](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/hash) of the current URL to avoid sending it to the server when the page reloads
+- `createMemoryHistory` is used as a reference implementation and may also be used in non-DOM environments, like [React Native](https://facebook.github.io/react-native/) or tests
+
+Depending on the method you want to use to keep track of history, you'll `import` (or `require`, if you're using CommonJS) only one of these methods.
+
+## Basic Usage
+
+Basic usage looks like this:
+
+```js
+import { createBrowserHistory } from 'history';
+
+const history = createBrowserHistory();
+
+// Get the current location.
+const location = history.location;
+
+// Listen for changes to the current location.
+const unlisten = history.listen((location, action) => {
+ // location is an object like window.location
+ console.log(action, location.pathname, location.state);
+});
+
+// Use push, replace, and go to navigate around.
+history.push('/home', { some: 'state' });
+
+// To stop listening, call the function returned from listen().
+unlisten();
+```
+
+The options that each `create` method takes, along with its default values, are:
+
+```js
+createBrowserHistory({
+ basename: '', // The base URL of the app (see below)
+ forceRefresh: false, // Set true to force full page refreshes
+ keyLength: 6, // The length of location.key
+ // A function to use to confirm navigation with the user (see below)
+ getUserConfirmation: (message, callback) => callback(window.confirm(message))
+});
+
+createHashHistory({
+ basename: '', // The base URL of the app (see below)
+ hashType: 'slash', // The hash type to use (see below)
+ // A function to use to confirm navigation with the user (see below)
+ getUserConfirmation: (message, callback) => callback(window.confirm(message))
+});
+
+createMemoryHistory({
+ initialEntries: ['/'], // The initial URLs in the history stack
+ initialIndex: 0, // The starting index in the history stack
+ keyLength: 6, // The length of location.key
+ // A function to use to confirm navigation with the user. Required
+ // if you return string prompts from transition hooks (see below)
+ getUserConfirmation: null
+});
+```
+
+## Properties
+
+Each `history` object has the following properties:
+
+- `history.length` - The number of entries in the history stack
+- `history.location` - The current location (see below)
+- `history.action` - The current navigation action (see below)
+
+Additionally, `createMemoryHistory` provides `history.index` and `history.entries` properties that let you inspect the history stack.
+
+## Listening
+
+You can listen for changes to the current location using `history.listen`:
+
+```js
+history.listen((location, action) => {
+ console.log(
+ `The current URL is ${location.pathname}${location.search}${location.hash}`
+ );
+ console.log(`The last navigation action was ${action}`);
+});
+```
+
+The `location` object implements a subset of [the `window.location` interface](https://developer.mozilla.org/en-US/docs/Web/API/Location), including:
+
+- `location.pathname` - The path of the URL
+- `location.search` - The URL query string
+- `location.hash` - The URL hash fragment
+
+Locations may also have the following properties:
+
+- `location.state` - Some extra state for this location that does not reside in the URL (supported in `createBrowserHistory` and `createMemoryHistory`)
+- `location.key` - A unique string representing this location (supported in `createBrowserHistory` and `createMemoryHistory`)
+
+The `action` is one of `PUSH`, `REPLACE`, or `POP` depending on how the user got to the current URL.
+
+## Cleaning up
+
+When you attach a listener using `history.listen`, it returns a function that can be used to remove the listener, which can then be invoked in cleanup logic:
+
+```js
+const unlisten = history.listen(myListener);
+// ...
+unlisten();
+```
diff --git a/history/docs/Installation.md b/history/docs/Installation.md
new file mode 100644
index 0000000..5f55fb2
--- /dev/null
+++ b/history/docs/Installation.md
@@ -0,0 +1,25 @@
+# Installation
+
+The history library is published to the public [npm](https://www.npmjs.com/) registry. You can install it using:
+
+ $ npm install --save history
+
+Then, use as you would anything else:
+
+```js
+// using ES6 modules
+import { createBrowserHistory } from 'history';
+
+// using CommonJS modules
+var createBrowserHistory = require('history').createBrowserHistory;
+```
+
+## Using Globals
+
+If you really just want a `<script>` tag, the UMD build is available on [unpkg](https://unpkg.com):
+
+```html
+<script src="https://unpkg.com/history"></script>
+```
+
+You can find the library on `window.History`.
diff --git a/history/docs/Misc.md b/history/docs/Misc.md
new file mode 100644
index 0000000..cff65e4
--- /dev/null
+++ b/history/docs/Misc.md
@@ -0,0 +1,51 @@
+## Using a Base URL
+
+If all the URLs in your app are relative to some other "base" URL, use the `basename` option. This option transparently adds the given string to the front of all URLs you use.
+
+```js
+const history = createHistory({
+ basename: '/the/base'
+});
+
+history.listen(location => {
+ console.log(location.pathname); // /home
+});
+
+history.push('/home'); // URL is now /the/base/home
+```
+
+**Note:** `basename` is not supported in `createMemoryHistory`.
+
+## Forcing Full Page Refreshes in createBrowserHistory
+
+By default `createBrowserHistory` uses HTML5 `pushState` and `replaceState` to prevent reloading the entire page from the server while navigating around. If instead you would like to reload as the URL changes, use the `forceRefresh` option.
+
+```js
+const history = createBrowserHistory({
+ forceRefresh: true
+});
+```
+
+## Modifying the Hash Type in createHashHistory
+
+By default `createHashHistory` uses a leading slash in hash-based URLs. You can use the `hashType` option to use a different hash formatting.
+
+```js
+const history = createHashHistory({
+ hashType: 'slash' // the default
+});
+
+history.push('/home'); // window.location.hash is #/home
+
+const history = createHashHistory({
+ hashType: 'noslash' // Omit the leading slash
+});
+
+history.push('/home'); // window.location.hash is #home
+
+const history = createHashHistory({
+ hashType: 'hashbang' // Google's legacy AJAX URL format
+});
+
+history.push('/home'); // window.location.hash is #!/home
+```
diff --git a/history/docs/Navigation.md b/history/docs/Navigation.md
new file mode 100644
index 0000000..bc3804e
--- /dev/null
+++ b/history/docs/Navigation.md
@@ -0,0 +1,39 @@
+# Navigation
+
+`history` objects may be used to programmatically change the current location using the following methods:
+
+- `history.push(path, [state])`
+- `history.replace(path, [state])`
+- `history.go(n)`
+- `history.goBack()`
+- `history.goForward()`
+- `history.canGo(n)` (only in `createMemoryHistory`)
+
+When using `push` or `replace` you can either specify both the URL path and state as separate arguments or include everything in a single location-like object as the first argument.
+
+1. A URL path _or_
+2. A location-like object with `{ pathname, search, hash, state }`
+
+```js
+// Push a new entry onto the history stack.
+history.push('/home');
+
+// Push a new entry onto the history stack with a query string
+// and some state. Location state does not appear in the URL.
+history.push('/home?the=query', { some: 'state' });
+
+// If you prefer, use a single location-like object to specify both
+// the URL and state. This is equivalent to the example above.
+history.push({
+ pathname: '/home',
+ search: '?the=query',
+ state: { some: 'state' }
+});
+
+// Go back to the previous history entry. The following
+// two lines are synonymous.
+history.go(-1);
+history.goBack();
+```
+
+**Note:** Location state is only supported in `createBrowserHistory` and `createMemoryHistory`.
diff --git a/history/docs/README.md b/history/docs/README.md
new file mode 100644
index 0000000..e9c6f95
--- /dev/null
+++ b/history/docs/README.md
@@ -0,0 +1,11 @@
+Welcome to the history docs! The library isn't huge, so there are really just a few files here for you to browse.
+
+If this is your first time here, I'd recommend you first [install](Installation.md) the library and then read both:
+
+- [Getting Started](GettingStarted.md)
+- [Navigation](Navigation.md)
+
+For more advanced usage, check out:
+
+- [Blocking](Blocking.md) - Details about how to block navigation attempts
+- [Misc](Misc.md) - Miscellaneous topics about several API details
diff --git a/history/es/DOMUtils.js b/history/es/DOMUtils.js
new file mode 100644
index 0000000..265a991
--- /dev/null
+++ b/history/es/DOMUtils.js
@@ -0,0 +1,7 @@
+'use strict';
+
+import warnAboutDeprecatedESMImport from './warnAboutDeprecatedESMImport.js';
+warnAboutDeprecatedESMImport('DOMUtils');
+
+import { DOMUtils } from '../esm/history.js';
+export default DOMUtils;
diff --git a/history/es/ExecutionEnvironment.js b/history/es/ExecutionEnvironment.js
new file mode 100644
index 0000000..9043609
--- /dev/null
+++ b/history/es/ExecutionEnvironment.js
@@ -0,0 +1,7 @@
+'use strict';
+
+import warnAboutDeprecatedESMImport from './warnAboutDeprecatedESMImport.js';
+warnAboutDeprecatedESMImport('ExecutionEnvironment');
+
+import { ExecutionEnvironment } from '../esm/history.js';
+export default ExecutionEnvironment;
diff --git a/history/es/LocationUtils.js b/history/es/LocationUtils.js
new file mode 100644
index 0000000..3dc1816
--- /dev/null
+++ b/history/es/LocationUtils.js
@@ -0,0 +1,7 @@
+'use strict';
+
+import warnAboutDeprecatedESMImport from './warnAboutDeprecatedESMImport.js';
+warnAboutDeprecatedESMImport('LocationUtils');
+
+import { LocationUtils } from '../esm/history.js';
+export default LocationUtils;
diff --git a/history/es/PathUtils.js b/history/es/PathUtils.js
new file mode 100644
index 0000000..7414d26
--- /dev/null
+++ b/history/es/PathUtils.js
@@ -0,0 +1,7 @@
+'use strict';
+
+import warnAboutDeprecatedESMImport from './warnAboutDeprecatedESMImport.js';
+warnAboutDeprecatedESMImport('PathUtils');
+
+import { PathUtils } from '../esm/history.js';
+export default PathUtils;
diff --git a/history/es/createBrowserHistory.js b/history/es/createBrowserHistory.js
new file mode 100644
index 0000000..c05b105
--- /dev/null
+++ b/history/es/createBrowserHistory.js
@@ -0,0 +1,7 @@
+'use strict';
+
+import warnAboutDeprecatedESMImport from './warnAboutDeprecatedESMImport.js';
+warnAboutDeprecatedESMImport('createBrowserHistory');
+
+import { createBrowserHistory } from '../esm/history.js';
+export default createBrowserHistory;
diff --git a/history/es/createHashHistory.js b/history/es/createHashHistory.js
new file mode 100644
index 0000000..ff40c25
--- /dev/null
+++ b/history/es/createHashHistory.js
@@ -0,0 +1,7 @@
+'use strict';
+
+import warnAboutDeprecatedESMImport from './warnAboutDeprecatedESMImport.js';
+warnAboutDeprecatedESMImport('createHashHistory');
+
+import { createHashHistory } from '../esm/history.js';
+export default createHashHistory;
diff --git a/history/es/createMemoryHistory.js b/history/es/createMemoryHistory.js
new file mode 100644
index 0000000..1cc4caa
--- /dev/null
+++ b/history/es/createMemoryHistory.js
@@ -0,0 +1,7 @@
+'use strict';
+
+import warnAboutDeprecatedESMImport from './warnAboutDeprecatedESMImport.js';
+warnAboutDeprecatedESMImport('createMemoryHistory');
+
+import { createMemoryHistory } from '../esm/history.js';
+export default createMemoryHistory;
diff --git a/history/es/createTransitionManager.js b/history/es/createTransitionManager.js
new file mode 100644
index 0000000..37d4540
--- /dev/null
+++ b/history/es/createTransitionManager.js
@@ -0,0 +1,7 @@
+'use strict';
+
+import warnAboutDeprecatedESMImport from './warnAboutDeprecatedESMImport.js';
+warnAboutDeprecatedESMImport('createTransitionManager');
+
+import { createTransitionManager } from '../esm/history.js';
+export default createTransitionManager;
diff --git a/history/es/warnAboutDeprecatedESMImport.js b/history/es/warnAboutDeprecatedESMImport.js
new file mode 100644
index 0000000..8215fb2
--- /dev/null
+++ b/history/es/warnAboutDeprecatedESMImport.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var printWarning = function() {};
+
+if (process.env.NODE_ENV !== 'production') {
+ printWarning = function(format, subs) {
+ var index = 0;
+ var message =
+ 'Warning: ' +
+ (subs.length > 0
+ ? format.replace(/%s/g, function() {
+ return subs[index++];
+ })
+ : format);
+
+ if (typeof console !== 'undefined') {
+ console.error(message);
+ }
+
+ try {
+ // --- Welcome to debugging history ---
+ // This error was thrown as a convenience so that you can use the
+ // stack trace to find the callsite that triggered this warning.
+ throw new Error(message);
+ } catch (e) {}
+ };
+}
+
+export default function(member) {
+ printWarning(
+ 'Please use `import { %s } from "history"` instead of `import %s from "history/es/%s"`. ' +
+ 'Support for the latter will be removed in the next major release.',
+ [member, member]
+ );
+}
diff --git a/history/index.js b/history/index.js
new file mode 100644
index 0000000..1e506e5
--- /dev/null
+++ b/history/index.js
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./cjs/history.min.js');
+} else {
+ module.exports = require('./cjs/history.js');
+}
diff --git a/history/karma.conf.js b/history/karma.conf.js
new file mode 100644
index 0000000..192885e
--- /dev/null
+++ b/history/karma.conf.js
@@ -0,0 +1,131 @@
+var path = require('path');
+var webpack = require('webpack');
+var projectName = require('./package').name;
+
+module.exports = function(config) {
+ var customLaunchers = {
+ BS_Chrome: {
+ base: 'BrowserStack',
+ os: 'Windows',
+ os_version: '10',
+ browser: 'Chrome',
+ browser_version: '73.0'
+ },
+ // BS_ChromeAndroid: {
+ // base: 'BrowserStack',
+ // device: 'Samsung Galaxy S8',
+ // os_version: '7.0',
+ // real_mobile: true
+ // },
+ BS_Firefox: {
+ base: 'BrowserStack',
+ os: 'Windows',
+ os_version: '10',
+ browser: 'Firefox',
+ browser_version: '67.0'
+ },
+ BS_Edge: {
+ base: 'BrowserStack',
+ os: 'Windows',
+ os_version: '10',
+ browser: 'Edge',
+ browser_version: '17.0'
+ },
+ BS_IE11: {
+ base: 'BrowserStack',
+ os: 'Windows',
+ os_version: '10',
+ browser: 'IE',
+ browser_version: '11.0'
+ },
+ BS_Safari: {
+ base: 'BrowserStack',
+ os: 'OS X',
+ os_version: 'Mojave',
+ browser: 'Safari',
+ browser_version: '12.1'
+ }
+ // BS_iPhoneX: {
+ // base: 'BrowserStack',
+ // device: 'iPhone X',
+ // os_version: '11',
+ // real_mobile: true
+ // },
+ // BS_iPhoneXS: {
+ // base: 'BrowserStack',
+ // device: 'iPhone XS',
+ // os_version: '12',
+ // real_mobile: true
+ // },
+ };
+
+ var historyAlias;
+ switch (process.env.TEST_ENV) {
+ case 'cjs':
+ historyAlias = 'cjs/history.js';
+ break;
+ case 'umd':
+ historyAlias = 'umd/history.js';
+ break;
+ case 'source':
+ default:
+ historyAlias = 'modules/index.js';
+ }
+
+ config.set({
+ customLaunchers: customLaunchers,
+ browsers: ['Chrome' /*, 'Firefox'*/],
+ frameworks: ['mocha'],
+ reporters: ['mocha'],
+ files: ['tests.webpack.js'],
+ preprocessors: {
+ 'tests.webpack.js': ['webpack', 'sourcemap']
+ },
+ webpack: {
+ devtool: 'inline-source-map',
+ module: {
+ loaders: [
+ {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ loader: 'babel-loader'
+ }
+ ]
+ },
+ resolve: {
+ alias: {
+ history$: path.resolve(__dirname, historyAlias)
+ }
+ },
+ plugins: [
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify('test')
+ })
+ ]
+ },
+ webpackServer: {
+ noInfo: true
+ }
+ });
+
+ if (process.env.USE_CLOUD) {
+ config.browsers = Object.keys(customLaunchers);
+ config.reporters = ['dots'];
+ config.concurrency = 2;
+ config.browserDisconnectTimeout = 10000;
+ config.browserDisconnectTolerance = 3;
+
+ if (process.env.TRAVIS) {
+ config.singleRun = true;
+ config.browserStack = {
+ project: projectName,
+ build: process.env.TRAVIS_BUILD_NUMBER,
+ name: process.env.TRAVIS_JOB_NUMBER
+ };
+ } else {
+ config.browserStack = {
+ project: projectName
+ };
+ }
+ }
+};
diff --git a/history/modules/.babelrc b/history/modules/.babelrc
new file mode 100644
index 0000000..9b2b3bf
--- /dev/null
+++ b/history/modules/.babelrc
@@ -0,0 +1,4 @@
+{
+ "presets": [["@babel/env", { "loose": true }]],
+ "plugins": ["dev-expression", "@babel/transform-object-assign"]
+}
diff --git a/history/modules/.eslintrc b/history/modules/.eslintrc
new file mode 100644
index 0000000..dc32b84
--- /dev/null
+++ b/history/modules/.eslintrc
@@ -0,0 +1,15 @@
+{
+ "parser": "babel-eslint",
+ "plugins": ["import"],
+ "env": {
+ "browser": true
+ },
+ "extends": ["eslint:recommended", "plugin:import/errors"],
+ "rules": {
+ "prefer-arrow-callback": 2
+ },
+ "parserOptions": {
+ "ecmaVersion": 6,
+ "sourceType": "module"
+ }
+}
diff --git a/history/modules/DOMUtils.js b/history/modules/DOMUtils.js
new file mode 100644
index 0000000..95c3a6e
--- /dev/null
+++ b/history/modules/DOMUtils.js
@@ -0,0 +1,54 @@
+export const canUseDOM = !!(
+ typeof window !== 'undefined' &&
+ window.document &&
+ window.document.createElement
+);
+
+export function getConfirmation(message, callback) {
+ callback(window.confirm(message)); // eslint-disable-line no-alert
+}
+
+/**
+ * Returns true if the HTML5 history API is supported. Taken from Modernizr.
+ *
+ * https://github.com/Modernizr/Modernizr/blob/master/LICENSE
+ * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js
+ * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586
+ */
+export function supportsHistory() {
+ const ua = window.navigator.userAgent;
+
+ if (
+ (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&
+ ua.indexOf('Mobile Safari') !== -1 &&
+ ua.indexOf('Chrome') === -1 &&
+ ua.indexOf('Windows Phone') === -1
+ )
+ return false;
+
+ return window.history && 'pushState' in window.history;
+}
+
+/**
+ * Returns true if browser fires popstate on hash change.
+ * IE10 and IE11 do not.
+ */
+export function supportsPopStateOnHashChange() {
+ return window.navigator.userAgent.indexOf('Trident') === -1;
+}
+
+/**
+ * Returns false if using go(n) with hash history causes a full page reload.
+ */
+export function supportsGoWithoutReloadUsingHash() {
+ return window.navigator.userAgent.indexOf('Firefox') === -1;
+}
+
+/**
+ * Returns true if a given popstate event is an extraneous WebKit event.
+ * Accounts for the fact that Chrome on iOS fires real popstate events
+ * containing undefined state when pressing the back button.
+ */
+export function isExtraneousPopstateEvent(event) {
+ return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;
+}
diff --git a/history/modules/LocationUtils.js b/history/modules/LocationUtils.js
new file mode 100644
index 0000000..27cb0f8
--- /dev/null
+++ b/history/modules/LocationUtils.js
@@ -0,0 +1,80 @@
+import resolvePathname from 'resolve-pathname';
+import valueEqual from 'value-equal';
+
+import { parsePath } from './PathUtils.js';
+
+export function createLocation(path, state, key, currentLocation) {
+ let location;
+ if (typeof path === 'string') {
+ // Two-arg form: push(path, state)
+ location = parsePath(path);
+ location.state = state;
+ } else {
+ // One-arg form: push(location)
+ location = { ...path };
+
+ if (location.pathname === undefined) location.pathname = '';
+
+ if (location.search) {
+ if (location.search.charAt(0) !== '?')
+ location.search = '?' + location.search;
+ } else {
+ location.search = '';
+ }
+
+ if (location.hash) {
+ if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;
+ } else {
+ location.hash = '';
+ }
+
+ if (state !== undefined && location.state === undefined)
+ location.state = state;
+ }
+
+ try {
+ location.pathname = decodeURI(location.pathname);
+ } catch (e) {
+ if (e instanceof URIError) {
+ throw new URIError(
+ 'Pathname "' +
+ location.pathname +
+ '" could not be decoded. ' +
+ 'This is likely caused by an invalid percent-encoding.'
+ );
+ } else {
+ throw e;
+ }
+ }
+
+ if (key) location.key = key;
+
+ if (currentLocation) {
+ // Resolve incomplete/relative pathname relative to current location.
+ if (!location.pathname) {
+ location.pathname = currentLocation.pathname;
+ } else if (location.pathname.charAt(0) !== '/') {
+ location.pathname = resolvePathname(
+ location.pathname,
+ currentLocation.pathname
+ );
+ }
+ } else {
+ // When there is no prior location and pathname is empty, set it to /
+ if (!location.pathname) {
+ location.pathname = '/';
+ }
+ }
+
+ return location;
+}
+
+export function locationsAreEqual(a, b) {
+ return (
+ a.pathname === b.pathname &&
+ a.search === b.search &&
+ a.hash === b.hash &&
+ a.key === b.key &&
+ valueEqual(a.state, b.state)
+ );
+}
diff --git a/history/modules/PathUtils.js b/history/modules/PathUtils.js
new file mode 100644
index 0000000..e5abec7
--- /dev/null
+++ b/history/modules/PathUtils.js
@@ -0,0 +1,59 @@
+export function addLeadingSlash(path) {
+ return path.charAt(0) === '/' ? path : '/' + path;
+}
+
+export function stripLeadingSlash(path) {
+ return path.charAt(0) === '/' ? path.substr(1) : path;
+}
+
+export function hasBasename(path, prefix) {
+ return (
+ path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 &&
+ '/?#'.indexOf(path.charAt(prefix.length)) !== -1
+ );
+}
+
+export function stripBasename(path, prefix) {
+ return hasBasename(path, prefix) ? path.substr(prefix.length) : path;
+}
+
+export function stripTrailingSlash(path) {
+ return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;
+}
+
+export function parsePath(path) {
+ let pathname = path || '/';
+ let search = '';
+ let hash = '';
+
+ const hashIndex = pathname.indexOf('#');
+ if (hashIndex !== -1) {
+ hash = pathname.substr(hashIndex);
+ pathname = pathname.substr(0, hashIndex);
+ }
+
+ const searchIndex = pathname.indexOf('?');
+ if (searchIndex !== -1) {
+ search = pathname.substr(searchIndex);
+ pathname = pathname.substr(0, searchIndex);
+ }
+
+ return {
+ pathname,
+ search: search === '?' ? '' : search,
+ hash: hash === '#' ? '' : hash
+ };
+}
+
+export function createPath(location) {
+ const { pathname, search, hash } = location;
+
+ let path = pathname || '/';
+
+ if (search && search !== '?')
+ path += search.charAt(0) === '?' ? search : `?${search}`;
+
+ if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : `#${hash}`;
+
+ return path;
+}
diff --git a/history/modules/__tests__/.eslintrc b/history/modules/__tests__/.eslintrc
new file mode 100644
index 0000000..09113c6
--- /dev/null
+++ b/history/modules/__tests__/.eslintrc
@@ -0,0 +1,8 @@
+{
+ "env": {
+ "mocha": true
+ },
+ "rules": {
+ "import/no-unresolved": [2, { "ignore": ["history"] }]
+ }
+}
diff --git a/history/modules/__tests__/BrowserHistory-basename-test.js b/history/modules/__tests__/BrowserHistory-basename-test.js
new file mode 100644
index 0000000..97a67fa
--- /dev/null
+++ b/history/modules/__tests__/BrowserHistory-basename-test.js
@@ -0,0 +1,88 @@
+import expect from 'expect';
+import mock from 'jest-mock';
+import { createBrowserHistory } from 'history';
+
+describe('a browser history with a basename', () => {
+ it('knows how to create hrefs', () => {
+ window.history.replaceState(null, null, '/the/base');
+ const history = createBrowserHistory({ basename: '/the/base' });
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual('/the/base/the/path?the=query#the-hash');
+ });
+
+ describe('with a bad basename', () => {
+ it('knows how to create hrefs', () => {
+ window.history.replaceState(null, null, '/the/bad/base');
+ const history = createBrowserHistory({ basename: '/the/bad/base/' });
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual('/the/bad/base/the/path?the=query#the-hash');
+ });
+ });
+
+ describe('with a slash basename', () => {
+ it('knows how to create hrefs', () => {
+ window.history.replaceState(null, null, '/');
+ const history = createBrowserHistory({ basename: '/' });
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual('/the/path?the=query#the-hash');
+ });
+ });
+
+ it('strips the basename from the pathname', () => {
+ window.history.replaceState(null, null, '/prefix/pathname');
+ const history = createBrowserHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/pathname');
+ });
+
+ it('is not case-sensitive', () => {
+ window.history.replaceState(null, null, '/PREFIX/pathname');
+ const history = createBrowserHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/pathname');
+ });
+
+ it('does not strip partial prefix matches', () => {
+ const spy = mock.spyOn(console, 'warn').mockImplementation(() => {});
+
+ window.history.replaceState(null, null, '/prefixed/pathname');
+ const history = createBrowserHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/prefixed/pathname');
+
+ expect(spy).toHaveBeenCalledTimes(1);
+ spy.mockRestore();
+ });
+
+ describe('when the pathname is only the prefix', () => {
+ it('strips the prefix', () => {
+ window.history.replaceState(null, null, '/prefix');
+ const history = createBrowserHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/');
+ });
+
+ it('strips the prefix when there is a search string', () => {
+ window.history.replaceState(null, null, '/prefix?a=b');
+ const history = createBrowserHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/');
+ });
+
+ it('strips the prefix when there is a hash', () => {
+ window.history.replaceState(null, null, '/prefix#rest');
+ const history = createBrowserHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/');
+ });
+ });
+});
diff --git a/history/modules/__tests__/BrowserHistory-test.js b/history/modules/__tests__/BrowserHistory-test.js
new file mode 100644
index 0000000..a9ac32d
--- /dev/null
+++ b/history/modules/__tests__/BrowserHistory-test.js
@@ -0,0 +1,214 @@
+import expect from 'expect';
+import { createBrowserHistory } from 'history';
+
+import * as TestSequences from './TestSequences/index.js';
+
+describe('a browser history', () => {
+ let history;
+ beforeEach(() => {
+ if (window.location.pathname !== '/') {
+ window.history.replaceState(null, null, '/');
+ }
+ history = createBrowserHistory();
+ });
+
+ it('knows how to create hrefs', () => {
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual('/the/path?the=query#the-hash');
+ });
+
+ it('does not encode the generated path', () => {
+ // encoded
+ const encodedHref = history.createHref({
+ pathname: '/%23abc'
+ });
+ // unencoded
+ const unencodedHref = history.createHref({
+ pathname: '/#abc'
+ });
+
+ expect(encodedHref).toEqual('/%23abc');
+ expect(unencodedHref).toEqual('/#abc');
+ });
+
+ describe('listen', () => {
+ it('does not immediately call listeners', done => {
+ TestSequences.Listen(history, done);
+ });
+ });
+
+ describe('the initial location', () => {
+ it('does not have a key', done => {
+ TestSequences.InitialLocationNoKey(history, done);
+ });
+ });
+
+ describe('push a new path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.PushNewLocation(history, done);
+ });
+ });
+
+ describe('push the same path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.PushSamePath(history, done);
+ });
+ });
+
+ describe('push state', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.PushState(history, done);
+ });
+ });
+
+ describe('push with no pathname', () => {
+ it('calls change listeners with the normalized location', done => {
+ TestSequences.PushMissingPathname(history, done);
+ });
+ });
+
+ describe('push with a relative pathname', () => {
+ it('calls change listeners with the normalized location', done => {
+ TestSequences.PushRelativePathname(history, done);
+ });
+ });
+
+ describe('push with an invalid pathname (bad percent-encoding)', () => {
+ it('throws an error', done => {
+ TestSequences.PushInvalidPathname(history, done);
+ });
+ });
+
+ describe('push with a unicode path string', () => {
+ it('creates a location with decoded properties', done => {
+ TestSequences.PushUnicodeLocation(history, done);
+ });
+ });
+
+ describe('push with an encoded path string', () => {
+ it('creates a location object with encoded pathname', done => {
+ TestSequences.PushEncodedLocation(history, done);
+ });
+ });
+
+ describe('replace a new path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.ReplaceNewLocation(history, done);
+ });
+ });
+
+ describe('replace the same path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.ReplaceSamePath(history, done);
+ });
+ });
+
+ describe('replace with an invalid pathname (bad percent-encoding)', () => {
+ it('throws an error', done => {
+ TestSequences.ReplaceInvalidPathname(history, done);
+ });
+ });
+
+ describe('replace state', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.ReplaceState(history, done);
+ });
+ });
+
+ describe('location created by encoded and unencoded pathname', () => {
+ it('produces the same location.pathname', done => {
+ TestSequences.LocationPathnameAlwaysSame(history, done);
+ });
+ });
+
+ describe('location created with encoded/unencoded reserved characters', () => {
+ it('produces different location objects', done => {
+ TestSequences.EncodedReservedCharacters(history, done);
+ });
+ });
+
+ describe('goBack', () => {
+ it('calls change listeners with the previous location', done => {
+ TestSequences.GoBack(history, done);
+ });
+ });
+
+ describe('goForward', () => {
+ it('calls change listeners with the next location', done => {
+ TestSequences.GoForward(history, done);
+ });
+ });
+
+ describe('block', () => {
+ it('blocks all transitions', done => {
+ TestSequences.BlockEverything(history, done);
+ });
+ });
+
+ describe('block a POP without listening', () => {
+ it('receives the next location and action as arguments', done => {
+ TestSequences.BlockPopWithoutListening(history, done);
+ });
+ });
+
+ describe('that accepts all transitions', () => {
+ let history;
+ beforeEach(() => {
+ history = createBrowserHistory({
+ getUserConfirmation(_, callback) {
+ callback(true);
+ }
+ });
+ });
+
+ it('receives the next location and action as arguments', done => {
+ TestSequences.TransitionHookArgs(history, done);
+ });
+
+ it('cancels the transition when it returns false', done => {
+ TestSequences.ReturnFalseTransitionHook(history, done);
+ });
+
+ it('is called when the back button is clicked', done => {
+ TestSequences.BackButtonTransitionHook(history, done);
+ });
+
+ it('is called on the hashchange event', done => {
+ TestSequences.HashChangeTransitionHook(history, done);
+ });
+ });
+
+ describe('that denies all transitions', () => {
+ let history;
+ beforeEach(() => {
+ history = createBrowserHistory({
+ getUserConfirmation(_, callback) {
+ callback(false);
+ }
+ });
+ });
+
+ describe('clicking on a link (push)', () => {
+ it('does not update the location', done => {
+ TestSequences.DenyPush(history, done);
+ });
+ });
+
+ describe('clicking the back button (goBack)', () => {
+ it('does not update the location', done => {
+ TestSequences.DenyGoBack(history, done);
+ });
+ });
+
+ describe('clicking the forward button (goForward)', () => {
+ it('does not update the location', done => {
+ TestSequences.DenyGoForward(history, done);
+ });
+ });
+ });
+});
diff --git a/history/modules/__tests__/HashHistory-base-test.js b/history/modules/__tests__/HashHistory-base-test.js
new file mode 100644
index 0000000..b3bd8b9
--- /dev/null
+++ b/history/modules/__tests__/HashHistory-base-test.js
@@ -0,0 +1,34 @@
+import expect from 'expect';
+import { createHashHistory } from 'history';
+
+describe('a hash history on a page with a <base> tag', () => {
+ let history, base;
+ beforeEach(() => {
+ base = document.createElement('base');
+ base.setAttribute('href', '/prefix');
+
+ document.head.appendChild(base);
+
+ history = createHashHistory();
+ });
+
+ afterEach(() => {
+ document.head.removeChild(base);
+ });
+
+ it('knows how to create hrefs', () => {
+ const hashIndex = window.location.href.indexOf('#');
+ const upToHash =
+ hashIndex === -1
+ ? window.location.href
+ : window.location.href.slice(0, hashIndex);
+
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual(upToHash + '#/the/path?the=query#the-hash');
+ });
+});
diff --git a/history/modules/__tests__/HashHistory-basename-test.js b/history/modules/__tests__/HashHistory-basename-test.js
new file mode 100644
index 0000000..1f5e530
--- /dev/null
+++ b/history/modules/__tests__/HashHistory-basename-test.js
@@ -0,0 +1,92 @@
+import expect from 'expect';
+import mock from 'jest-mock';
+import { createHashHistory } from 'history';
+
+describe('a hash history with a basename', () => {
+ it('knows how to create hrefs', () => {
+ window.location.hash = '#/the/base';
+ const history = createHashHistory({ basename: '/the/base' });
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query'
+ });
+
+ expect(href).toEqual('#/the/base/the/path?the=query');
+ });
+
+ describe('with a bad basename', () => {
+ it('knows how to create hrefs', () => {
+ window.location.hash = '#/the/bad/base/';
+ const history = createHashHistory({ basename: '/the/bad/base/' });
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query'
+ });
+
+ expect(href).toEqual('#/the/bad/base/the/path?the=query');
+ });
+ });
+
+ describe('with a slash basename', () => {
+ it('knows how to create hrefs', () => {
+ const history = createHashHistory({ basename: '/' });
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query'
+ });
+
+ expect(href).toEqual('#/the/path?the=query');
+ });
+ });
+
+ it('strips the basename from the pathname', () => {
+ window.location.hash = '/prefix/hello';
+ const history = createHashHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/hello');
+ });
+
+ it('is not case-sensitive', () => {
+ window.location.hash = '/PREFIX/hello';
+ const history = createHashHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/hello');
+ });
+
+ it('allows special regex characters', () => {
+ window.location.hash = '/prefix$special/hello';
+ const history = createHashHistory({ basename: '/prefix$special' });
+ expect(history.location.pathname).toEqual('/hello');
+ });
+
+ it('does not strip partial prefix matches', () => {
+ window.location.hash = '/no-match/hello';
+
+ // A warning is issued when the prefix is not present.
+ const spy = mock.spyOn(console, 'warn').mockImplementation(() => {});
+
+ const history = createHashHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/no-match/hello');
+
+ expect(spy).toHaveBeenCalledTimes(1);
+ spy.mockRestore();
+ });
+
+ describe('when the pathname is only the prefix', () => {
+ it('strips the prefix', () => {
+ window.location.hash = '/prefix';
+ const history = createHashHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/');
+ });
+
+ it('strips the prefix when there is a search string', () => {
+ window.location.hash = '/prefix?a=b';
+ const history = createHashHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/');
+ });
+
+ it('strips the prefix when there is a hash', () => {
+ window.location.hash = '/prefix#hash';
+ const history = createHashHistory({ basename: '/prefix' });
+ expect(history.location.pathname).toEqual('/');
+ });
+ });
+});
diff --git a/history/modules/__tests__/HashHistory-coding-test.js b/history/modules/__tests__/HashHistory-coding-test.js
new file mode 100644
index 0000000..8faae20
--- /dev/null
+++ b/history/modules/__tests__/HashHistory-coding-test.js
@@ -0,0 +1,76 @@
+import expect from 'expect';
+import { createHashHistory } from 'history';
+
+import * as TestSequences from './TestSequences/index.js';
+
+describe('a hash history with "slash" path coding', () => {
+ beforeEach(() => {
+ if (window.location.hash !== '#/') {
+ window.location.hash = '/';
+ }
+ });
+
+ it('knows how to create hrefs', () => {
+ const history = createHashHistory({ hashType: 'slash' });
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual('#/the/path?the=query#the-hash');
+ });
+
+ it('properly encodes and decodes window.location.hash', done => {
+ const history = createHashHistory({ hashType: 'slash' });
+ TestSequences.SlashHashPathCoding(history, done);
+ });
+});
+
+describe('a hash history with "hashbang" path coding', () => {
+ beforeEach(() => {
+ if (window.location.hash !== '#!/') {
+ window.location.hash = '!/';
+ }
+ });
+
+ it('knows how to create hrefs', () => {
+ const history = createHashHistory({ hashType: 'hashbang' });
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual('#!/the/path?the=query#the-hash');
+ });
+
+ it('properly encodes and decodes window.location.hash', done => {
+ const history = createHashHistory({ hashType: 'hashbang' });
+ TestSequences.HashbangHashPathCoding(history, done);
+ });
+});
+
+describe('a hash history with "noslash" path coding', () => {
+ beforeEach(() => {
+ if (window.location.hash !== '') {
+ window.location.hash = '';
+ }
+ });
+
+ it('knows how to create hrefs', () => {
+ const history = createHashHistory({ hashType: 'noslash' });
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual('#the/path?the=query#the-hash');
+ });
+
+ it('properly encodes and decodes window.location.hash', done => {
+ const history = createHashHistory({ hashType: 'noslash' });
+ TestSequences.NoslashHashPathCoding(history, done);
+ });
+});
diff --git a/history/modules/__tests__/HashHistory-test.js b/history/modules/__tests__/HashHistory-test.js
new file mode 100644
index 0000000..63c4432
--- /dev/null
+++ b/history/modules/__tests__/HashHistory-test.js
@@ -0,0 +1,215 @@
+import expect from 'expect';
+import { createHashHistory } from 'history';
+
+import * as TestSequences from './TestSequences/index.js';
+
+const canGoWithoutReload = window.navigator.userAgent.indexOf('Firefox') === -1;
+const describeGo = canGoWithoutReload ? describe : describe.skip;
+
+describe('a hash history', () => {
+ let history;
+ beforeEach(() => {
+ if (window.location.hash !== '#/') {
+ window.location.hash = '/';
+ }
+ history = createHashHistory();
+ });
+
+ it('knows how to create hrefs', () => {
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual('#/the/path?the=query#the-hash');
+ });
+
+ it('does not encode the generated path', () => {
+ // encoded
+ const encodedHref = history.createHref({
+ pathname: '/%23abc'
+ });
+ // unencoded
+ const unencodedHref = history.createHref({
+ pathname: '/#abc'
+ });
+
+ expect(encodedHref).toEqual('#/%23abc');
+ expect(unencodedHref).toEqual('#/#abc');
+ });
+
+ describe('listen', () => {
+ it('does not immediately call listeners', done => {
+ TestSequences.Listen(history, done);
+ });
+ });
+
+ describe('the initial location', () => {
+ it('does not have a key', done => {
+ TestSequences.InitialLocationNoKey(history, done);
+ });
+ });
+
+ describe('push a new path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.PushNewLocation(history, done);
+ });
+ });
+
+ describe('push the same path', () => {
+ it('calls change listeners with the same location and emits a warning', done => {
+ TestSequences.PushSamePathWarning(history, done);
+ });
+ });
+
+ describe('push state', () => {
+ it('calls change listeners with the new location and emits a warning', done => {
+ TestSequences.PushStateWarning(history, done);
+ });
+ });
+
+ describe('push with no pathname', () => {
+ it('calls change listeners with the normalized location', done => {
+ TestSequences.PushMissingPathname(history, done);
+ });
+ });
+
+ describe('push with a relative pathname', () => {
+ it('calls change listeners with the normalized location', done => {
+ TestSequences.PushRelativePathname(history, done);
+ });
+ });
+
+ describe('push with an invalid pathname (bad percent-encoding)', () => {
+ it('throws an error', done => {
+ TestSequences.PushInvalidPathname(history, done);
+ });
+ });
+
+ describe('push with a unicode path string', () => {
+ it('creates a location with decoded properties', done => {
+ TestSequences.PushUnicodeLocation(history, done);
+ });
+ });
+
+ describe('push with an encoded path string', () => {
+ it('creates a location object with encoded pathname', done => {
+ TestSequences.PushEncodedLocation(history, done);
+ });
+ });
+
+ describe('replace a new path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.ReplaceNewLocation(history, done);
+ });
+ });
+
+ describe('replace the same path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.ReplaceSamePath(history, done);
+ });
+ });
+
+ describe('replace with an invalid pathname (bad percent-encoding)', () => {
+ it('throws an error', done => {
+ TestSequences.ReplaceInvalidPathname(history, done);
+ });
+ });
+
+ describe('replace state', () => {
+ it('calls change listeners with the new location and emits a warning', done => {
+ TestSequences.ReplaceStateWarning(history, done);
+ });
+ });
+
+ describe('location created by encoded and unencoded pathname', () => {
+ it('produces the same location.pathname', done => {
+ TestSequences.LocationPathnameAlwaysSame(history, done);
+ });
+ });
+
+ describe('location created with encoded/unencoded reserved characters', () => {
+ it('produces different location objects', done => {
+ TestSequences.EncodedReservedCharacters(history, done);
+ });
+ });
+
+ describeGo('goBack', () => {
+ it('calls change listeners with the previous location', done => {
+ TestSequences.GoBack(history, done);
+ });
+ });
+
+ describeGo('goForward', () => {
+ it('calls change listeners with the next location', done => {
+ TestSequences.GoForward(history, done);
+ });
+ });
+
+ describe('block', () => {
+ it('blocks all transitions', done => {
+ TestSequences.BlockEverything(history, done);
+ });
+ });
+
+ describeGo('block a POP without listening', () => {
+ it('receives the next location and action as arguments', done => {
+ TestSequences.BlockPopWithoutListening(history, done);
+ });
+ });
+
+ describe('that accepts all transitions', () => {
+ let history;
+ beforeEach(() => {
+ history = createHashHistory({
+ getUserConfirmation(_, callback) {
+ callback(true);
+ }
+ });
+ });
+
+ it('receives the next location and action as arguments', done => {
+ TestSequences.TransitionHookArgs(history, done);
+ });
+
+ const itBackButton = canGoWithoutReload ? it : it.skip;
+
+ itBackButton('is called when the back button is clicked', done => {
+ TestSequences.BackButtonTransitionHook(history, done);
+ });
+
+ it('cancels the transition when it returns false', done => {
+ TestSequences.ReturnFalseTransitionHook(history, done);
+ });
+ });
+
+ describe('that denies all transitions', () => {
+ let history;
+ beforeEach(() => {
+ history = createHashHistory({
+ getUserConfirmation(_, callback) {
+ callback(false);
+ }
+ });
+ });
+
+ describe('clicking on a link (push)', () => {
+ it('does not update the location', done => {
+ TestSequences.DenyPush(history, done);
+ });
+ });
+
+ describeGo('clicking the back button (goBack)', () => {
+ it('does not update the location', done => {
+ TestSequences.DenyGoBack(history, done);
+ });
+ });
+
+ describeGo('clicking the forward button (goForward)', () => {
+ it('does not update the location', done => {
+ TestSequences.DenyGoForward(history, done);
+ });
+ });
+ });
+});
diff --git a/history/modules/__tests__/MemoryHistory-test.js b/history/modules/__tests__/MemoryHistory-test.js
new file mode 100644
index 0000000..176f874
--- /dev/null
+++ b/history/modules/__tests__/MemoryHistory-test.js
@@ -0,0 +1,203 @@
+import expect from 'expect';
+import { createMemoryHistory } from 'history';
+
+import * as TestSequences from './TestSequences/index.js';
+
+describe('a memory history', () => {
+ let history;
+ beforeEach(() => {
+ history = createMemoryHistory();
+ });
+
+ it('knows how to create hrefs', () => {
+ const href = history.createHref({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(href).toEqual('/the/path?the=query#the-hash');
+ });
+
+ it('does not encode the generated path', () => {
+ // encoded
+ const encodedHref = history.createHref({
+ pathname: '/%23abc'
+ });
+ // unencoded
+ const unencodedHref = history.createHref({
+ pathname: '/#abc'
+ });
+
+ expect(encodedHref).toEqual('/%23abc');
+ expect(unencodedHref).toEqual('/#abc');
+ });
+
+ describe('listen', () => {
+ it('does not immediately call listeners', done => {
+ TestSequences.Listen(history, done);
+ });
+ });
+
+ describe('the initial location', () => {
+ it('has a key', done => {
+ TestSequences.InitialLocationHasKey(history, done);
+ });
+ });
+
+ describe('push a new path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.PushNewLocation(history, done);
+ });
+ });
+
+ describe('push the same path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.PushSamePath(history, done);
+ });
+ });
+
+ describe('push state', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.PushState(history, done);
+ });
+ });
+
+ describe('push with no pathname', () => {
+ it('calls change listeners with the normalized location', done => {
+ TestSequences.PushMissingPathname(history, done);
+ });
+ });
+
+ describe('push with a relative pathname', () => {
+ it('calls change listeners with the normalized location', done => {
+ TestSequences.PushRelativePathname(history, done);
+ });
+ });
+
+ describe('push with an invalid pathname (bad percent-encoding)', () => {
+ it('throws an error', done => {
+ TestSequences.PushInvalidPathname(history, done);
+ });
+ });
+
+ describe('push with a unicode path string', () => {
+ it('creates a location with decoded properties', done => {
+ TestSequences.PushUnicodeLocation(history, done);
+ });
+ });
+
+ describe('push with an encoded path string', () => {
+ it('creates a location object with encoded pathname', done => {
+ TestSequences.PushEncodedLocation(history, done);
+ });
+ });
+
+ describe('replace a new path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.ReplaceNewLocation(history, done);
+ });
+ });
+
+ describe('replace the same path', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.ReplaceSamePath(history, done);
+ });
+ });
+
+ describe('replace with an invalid pathname (bad percent-encoding)', () => {
+ it('throws an error', done => {
+ TestSequences.ReplaceInvalidPathname(history, done);
+ });
+ });
+
+ describe('replace state', () => {
+ it('calls change listeners with the new location', done => {
+ TestSequences.ReplaceState(history, done);
+ });
+ });
+
+ describe('location created by encoded and unencoded pathname', () => {
+ it('produces the same location.pathname', done => {
+ TestSequences.LocationPathnameAlwaysSame(history, done);
+ });
+ });
+
+ describe('location created with encoded/unencoded reserved characters', () => {
+ it('produces different location objects', done => {
+ TestSequences.EncodedReservedCharacters(history, done);
+ });
+ });
+
+ describe('goBack', () => {
+ it('calls change listeners with the previous location', done => {
+ TestSequences.GoBack(history, done);
+ });
+ });
+
+ describe('goForward', () => {
+ it('calls change listeners with the next location', done => {
+ TestSequences.GoForward(history, done);
+ });
+ });
+
+ describe('block', () => {
+ it('blocks all transitions', done => {
+ TestSequences.BlockEverything(history, done);
+ });
+ });
+
+ describe('block a POP without listening', () => {
+ it('receives the next location and action as arguments', done => {
+ TestSequences.BlockPopWithoutListening(history, done);
+ });
+ });
+
+ describe('that accepts all transitions', () => {
+ let history;
+ beforeEach(() => {
+ history = createMemoryHistory({
+ getUserConfirmation(_, callback) {
+ callback(true);
+ }
+ });
+ });
+
+ it('receives the next location and action as arguments', done => {
+ TestSequences.TransitionHookArgs(history, done);
+ });
+
+ it('cancels the transition when it returns false', done => {
+ TestSequences.ReturnFalseTransitionHook(history, done);
+ });
+ });
+
+ describe('that denies all transitions', () => {
+ let history;
+ beforeEach(() => {
+ history = createMemoryHistory({
+ getUserConfirmation(_, callback) {
+ callback(false);
+ }
+ });
+ });
+
+ describe('push', () => {
+ it('does not update the location', done => {
+ TestSequences.DenyPush(history, done);
+ });
+ });
+
+ describe('goBack', () => {
+ it('does not update the location', done => {
+ TestSequences.DenyGoBack(history, done);
+ });
+ });
+
+ describe('goForward', () => {
+ it('does not update the location', done => {
+ TestSequences.DenyGoForward(history, done);
+ });
+ });
+ });
+});
diff --git a/history/modules/__tests__/TestSequences/BackButtonTransitionHook.js b/history/modules/__tests__/TestSequences/BackButtonTransitionHook.js
new file mode 100644
index 0000000..9c6783c
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/BackButtonTransitionHook.js
@@ -0,0 +1,41 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ let unblock,
+ hookWasCalled = false;
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ unblock = history.block(() => {
+ hookWasCalled = true;
+ });
+
+ window.history.go(-1);
+ },
+ (location, action) => {
+ expect(action).toBe('POP');
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ expect(hookWasCalled).toBe(true);
+
+ unblock();
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/BlockEverything.js b/history/modules/__tests__/TestSequences/BlockEverything.js
new file mode 100644
index 0000000..b5860c3
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/BlockEverything.js
@@ -0,0 +1,25 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ const unblock = history.block();
+
+ history.push('/home');
+
+ expect(history.location).toMatchObject({
+ pathname: '/'
+ });
+
+ unblock();
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/BlockPopWithoutListening.js b/history/modules/__tests__/TestSequences/BlockPopWithoutListening.js
new file mode 100644
index 0000000..883fce3
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/BlockPopWithoutListening.js
@@ -0,0 +1,33 @@
+import expect from 'expect';
+
+export default function(history, done) {
+ expect(history.location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home');
+
+ let transitionHookWasCalled = false;
+ const unblock = history.block(() => {
+ transitionHookWasCalled = true;
+ });
+
+ // These timeouts are a hack to allow for the time it takes
+ // for histories to reflect the change in the URL. Normally
+ // we could just listen and avoid the waiting time. But this
+ // test is designed to test what happens when we don't listen(),
+ // so that's not an option here.
+
+ // Allow some time for history to detect the PUSH.
+ setTimeout(() => {
+ history.goBack();
+
+ // Allow some time for history to detect the POP.
+ setTimeout(() => {
+ expect(transitionHookWasCalled).toBe(true);
+ unblock();
+
+ done();
+ }, 100);
+ }, 10);
+}
diff --git a/history/modules/__tests__/TestSequences/DenyGoBack.js b/history/modules/__tests__/TestSequences/DenyGoBack.js
new file mode 100644
index 0000000..122d336
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/DenyGoBack.js
@@ -0,0 +1,42 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ let unblock;
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ unblock = history.block(nextLocation => {
+ expect(nextLocation).toMatchObject({
+ pathname: '/'
+ });
+
+ return 'Are you sure?';
+ });
+
+ history.goBack();
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ unblock();
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/DenyGoForward.js b/history/modules/__tests__/TestSequences/DenyGoForward.js
new file mode 100644
index 0000000..fa27a93
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/DenyGoForward.js
@@ -0,0 +1,50 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ let unblock;
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ history.goBack();
+ },
+ (location, action) => {
+ expect(action).toBe('POP');
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ unblock = history.block(nextLocation => {
+ expect(nextLocation).toMatchObject({
+ pathname: '/home'
+ });
+
+ return 'Are you sure?';
+ });
+
+ history.goForward();
+ },
+ (location, action) => {
+ expect(action).toBe('POP');
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ unblock();
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/DenyPush.js b/history/modules/__tests__/TestSequences/DenyPush.js
new file mode 100644
index 0000000..1fd82ae
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/DenyPush.js
@@ -0,0 +1,31 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ const unblock = history.block(nextLocation => {
+ expect(nextLocation).toMatchObject({
+ pathname: '/home'
+ });
+
+ return 'Are you sure?';
+ });
+
+ history.push('/home');
+
+ expect(history.location).toMatchObject({
+ pathname: '/'
+ });
+
+ unblock();
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/EncodedReservedCharacters.js b/history/modules/__tests__/TestSequences/EncodedReservedCharacters.js
new file mode 100644
index 0000000..355a2ff
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/EncodedReservedCharacters.js
@@ -0,0 +1,38 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ () => {
+ // encoded string
+ const pathname = '/view/%23abc';
+ history.replace(pathname);
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/view/%23abc'
+ });
+
+ // encoded object
+ const pathname = '/view/%23abc';
+ history.replace({ pathname });
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/view/%23abc'
+ });
+ // unencoded string
+ const pathname = '/view/#abc';
+ history.replace(pathname);
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/view/',
+ hash: '#abc'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/GoBack.js b/history/modules/__tests__/TestSequences/GoBack.js
new file mode 100644
index 0000000..b5a5752
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/GoBack.js
@@ -0,0 +1,31 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(action).toEqual('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ history.goBack();
+ },
+ (location, action) => {
+ expect(action).toEqual('POP');
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/GoForward.js b/history/modules/__tests__/TestSequences/GoForward.js
new file mode 100644
index 0000000..06d7f61
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/GoForward.js
@@ -0,0 +1,39 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(action).toEqual('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ history.goBack();
+ },
+ (location, action) => {
+ expect(action).toEqual('POP');
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.goForward();
+ },
+ (location, action) => {
+ expect(action).toEqual('POP');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/HashChangeTransitionHook.js b/history/modules/__tests__/TestSequences/HashChangeTransitionHook.js
new file mode 100644
index 0000000..73fdeb9
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/HashChangeTransitionHook.js
@@ -0,0 +1,33 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ let unblock,
+ hookWasCalled = false;
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ unblock = history.block(() => {
+ hookWasCalled = true;
+ });
+
+ window.location.hash = 'something-new';
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/',
+ hash: '#something-new'
+ });
+
+ expect(hookWasCalled).toBe(true);
+
+ unblock();
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/HashbangHashPathCoding.js b/history/modules/__tests__/TestSequences/HashbangHashPathCoding.js
new file mode 100644
index 0000000..3380797
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/HashbangHashPathCoding.js
@@ -0,0 +1,48 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ expect(window.location.hash).toBe('#!/');
+
+ history.push('/home?the=query#the-hash');
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(window.location.hash).toBe('#!/home?the=query#the-hash');
+
+ history.goBack();
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ expect(window.location.hash).toBe('#!/');
+
+ history.goForward();
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(window.location.hash).toBe('#!/home?the=query#the-hash');
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/InitialLocationHasKey.js b/history/modules/__tests__/TestSequences/InitialLocationHasKey.js
new file mode 100644
index 0000000..e9a22b6
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/InitialLocationHasKey.js
@@ -0,0 +1,13 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location.key).toBeTruthy();
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/InitialLocationNoKey.js b/history/modules/__tests__/TestSequences/InitialLocationNoKey.js
new file mode 100644
index 0000000..8c79d34
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/InitialLocationNoKey.js
@@ -0,0 +1,13 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location.key).toBeFalsy();
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/Listen.js b/history/modules/__tests__/TestSequences/Listen.js
new file mode 100644
index 0000000..84393eb
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/Listen.js
@@ -0,0 +1,12 @@
+import expect from 'expect';
+import mock from 'jest-mock';
+
+export default function(history, done) {
+ const spy = mock.fn();
+ const unlisten = history.listen(spy);
+
+ expect(spy).not.toHaveBeenCalled();
+
+ unlisten();
+ done();
+}
diff --git a/history/modules/__tests__/TestSequences/LocationPathnameAlwaysSame.js b/history/modules/__tests__/TestSequences/LocationPathnameAlwaysSame.js
new file mode 100644
index 0000000..48facbc
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/LocationPathnameAlwaysSame.js
@@ -0,0 +1,44 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ () => {
+ // encoded string
+ const pathname = '/%E6%AD%B4%E5%8F%B2';
+ history.replace(pathname);
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/歴史'
+ });
+ // encoded object
+ const pathname = '/%E6%AD%B4%E5%8F%B2';
+ history.replace({ pathname });
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/歴史'
+ });
+ // unencoded string
+ const pathname = '/歴史';
+ history.replace(pathname);
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/歴史'
+ });
+ // unencoded object
+ const pathname = '/歴史';
+ history.replace({ pathname });
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/歴史'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/NoslashHashPathCoding.js b/history/modules/__tests__/TestSequences/NoslashHashPathCoding.js
new file mode 100644
index 0000000..e6df14f
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/NoslashHashPathCoding.js
@@ -0,0 +1,50 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ // IE 10+ gives us "#", everyone else gives us ""
+ expect(window.location.hash).toMatch(/^#?$/);
+
+ history.push('/home?the=query#the-hash');
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(window.location.hash).toBe('#home?the=query#the-hash');
+
+ history.goBack();
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ // IE 10+ gives us "#", everyone else gives us ""
+ expect(window.location.hash).toMatch(/^#?$/);
+
+ history.goForward();
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(window.location.hash).toBe('#home?the=query#the-hash');
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/PushEncodedLocation.js b/history/modules/__tests__/TestSequences/PushEncodedLocation.js
new file mode 100644
index 0000000..f71d671
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushEncodedLocation.js
@@ -0,0 +1,28 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ const pathname = '/歴史';
+ const search = '?%E3%82%AD%E3%83%BC=%E5%80%A4';
+ const hash = '#%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5';
+ history.push(pathname + search + hash);
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/歴史',
+ search: '?%E3%82%AD%E3%83%BC=%E5%80%A4',
+ hash: '#%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/PushInvalidPathname.js b/history/modules/__tests__/TestSequences/PushInvalidPathname.js
new file mode 100644
index 0000000..5024eeb
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushInvalidPathname.js
@@ -0,0 +1,17 @@
+import expect from 'expect';
+
+import execSteps from './execSteps';
+
+export default function(history, done) {
+ const steps = [
+ () => {
+ expect(() => {
+ history.push('/hello%');
+ }).toThrow(
+ 'Pathname "/hello%" could not be decoded. This is likely caused by an invalid percent-encoding.'
+ );
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/PushMissingPathname.js b/history/modules/__tests__/TestSequences/PushMissingPathname.js
new file mode 100644
index 0000000..28e7da7
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushMissingPathname.js
@@ -0,0 +1,35 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home?the=query#the-hash');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ history.push('?another=query#another-hash');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?another=query',
+ hash: '#another-hash'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/PushNewLocation.js b/history/modules/__tests__/TestSequences/PushNewLocation.js
new file mode 100644
index 0000000..073f630
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushNewLocation.js
@@ -0,0 +1,25 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home?the=query#the-hash');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/PushRelativePathname.js b/history/modules/__tests__/TestSequences/PushRelativePathname.js
new file mode 100644
index 0000000..418bf37
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushRelativePathname.js
@@ -0,0 +1,35 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/the/path?the=query#the-hash');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ history.push('../other/path?another=query#another-hash');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/other/path',
+ search: '?another=query',
+ hash: '#another-hash'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/PushSamePath.js b/history/modules/__tests__/TestSequences/PushSamePath.js
new file mode 100644
index 0000000..07cdc7e
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushSamePath.js
@@ -0,0 +1,39 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ history.goBack();
+ },
+ (location, action) => {
+ expect(action).toBe('POP');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/PushSamePathWarning.js b/history/modules/__tests__/TestSequences/PushSamePathWarning.js
new file mode 100644
index 0000000..df144ef
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushSamePathWarning.js
@@ -0,0 +1,55 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ let prevLocation;
+
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ prevLocation = location;
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ // We should get the SAME location object. Nothing
+ // new was added to the history stack.
+ expect(location).toBe(prevLocation);
+
+ // We should see a warning message.
+ expect(warningMessage).toMatch(
+ 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack'
+ );
+ }
+ ];
+
+ let consoleWarn = console.error; // eslint-disable-line no-console
+ let warningMessage;
+
+ // eslint-disable-next-line no-console
+ console.warn = message => {
+ warningMessage = message;
+ };
+
+ execSteps(steps, history, (...args) => {
+ console.warn = consoleWarn; // eslint-disable-line no-console
+ done(...args);
+ });
+}
diff --git a/history/modules/__tests__/TestSequences/PushState.js b/history/modules/__tests__/TestSequences/PushState.js
new file mode 100644
index 0000000..b22813b
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushState.js
@@ -0,0 +1,26 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home?the=query#the-hash', { the: 'state' });
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash',
+ state: { the: 'state' }
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/PushStateWarning.js b/history/modules/__tests__/TestSequences/PushStateWarning.js
new file mode 100644
index 0000000..d19fdab
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushStateWarning.js
@@ -0,0 +1,40 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home', { the: 'state' });
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/home',
+ state: undefined
+ });
+
+ // We should see a warning message.
+ expect(warningMessage).toMatch(
+ 'Hash history cannot push state; it is ignored'
+ );
+ }
+ ];
+
+ let consoleWarn = console.warn; // eslint-disable-line no-console
+ let warningMessage;
+
+ // eslint-disable-next-line no-console
+ console.warn = message => {
+ warningMessage = message;
+ };
+
+ execSteps(steps, history, (...args) => {
+ console.warn = consoleWarn; // eslint-disable-line no-console
+ done(...args);
+ });
+}
diff --git a/history/modules/__tests__/TestSequences/PushUnicodeLocation.js b/history/modules/__tests__/TestSequences/PushUnicodeLocation.js
new file mode 100644
index 0000000..2bad464
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/PushUnicodeLocation.js
@@ -0,0 +1,28 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ const pathname = '/歴史';
+ const search = '?キー=値';
+ const hash = '#ハッシュ';
+ history.push(pathname + search + hash);
+ },
+ (location, action) => {
+ expect(action).toBe('PUSH');
+ expect(location).toMatchObject({
+ pathname: '/歴史',
+ search: '?キー=値',
+ hash: '#ハッシュ'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/ReplaceInvalidPathname.js b/history/modules/__tests__/TestSequences/ReplaceInvalidPathname.js
new file mode 100644
index 0000000..5b85431
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/ReplaceInvalidPathname.js
@@ -0,0 +1,17 @@
+import expect from 'expect';
+
+import execSteps from './execSteps';
+
+export default function(history, done) {
+ const steps = [
+ () => {
+ expect(() => {
+ history.replace('/hello%');
+ }).toThrow(
+ 'Pathname "/hello%" could not be decoded. This is likely caused by an invalid percent-encoding.'
+ );
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/ReplaceNewLocation.js b/history/modules/__tests__/TestSequences/ReplaceNewLocation.js
new file mode 100644
index 0000000..7fb49c8
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/ReplaceNewLocation.js
@@ -0,0 +1,25 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.replace('/home?the=query#the-hash');
+ },
+ (location, action) => {
+ expect(action).toBe('REPLACE');
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/ReplaceSamePath.js b/history/modules/__tests__/TestSequences/ReplaceSamePath.js
new file mode 100644
index 0000000..2dd7ce3
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/ReplaceSamePath.js
@@ -0,0 +1,37 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ let prevLocation;
+
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.replace('/home');
+ },
+ (location, action) => {
+ expect(action).toBe('REPLACE');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ prevLocation = location;
+
+ history.replace('/home');
+ },
+ (location, action) => {
+ expect(action).toBe('REPLACE');
+ expect(location).toMatchObject({
+ pathname: '/home'
+ });
+
+ expect(location).not.toBe(prevLocation);
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/ReplaceState.js b/history/modules/__tests__/TestSequences/ReplaceState.js
new file mode 100644
index 0000000..7f425d7
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/ReplaceState.js
@@ -0,0 +1,26 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.replace('/home?the=query#the-hash', { the: 'state' });
+ },
+ (location, action) => {
+ expect(action).toBe('REPLACE');
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash',
+ state: { the: 'state' }
+ });
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/ReplaceStateWarning.js b/history/modules/__tests__/TestSequences/ReplaceStateWarning.js
new file mode 100644
index 0000000..a2804ab
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/ReplaceStateWarning.js
@@ -0,0 +1,40 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.replace('/home', { the: 'state' });
+ },
+ (location, action) => {
+ expect(action).toBe('REPLACE');
+ expect(location).toMatchObject({
+ pathname: '/home',
+ state: undefined
+ });
+
+ // We should see a warning message.
+ expect(warningMessage).toMatch(
+ 'Hash history cannot replace state; it is ignored'
+ );
+ }
+ ];
+
+ let consoleWarn = console.warn; // eslint-disable-line no-console
+ let warningMessage;
+
+ // eslint-disable-next-line no-console
+ console.warn = message => {
+ warningMessage = message;
+ };
+
+ execSteps(steps, history, (...args) => {
+ console.warn = consoleWarn; // eslint-disable-line no-console
+ done(...args);
+ });
+}
diff --git a/history/modules/__tests__/TestSequences/ReturnFalseTransitionHook.js b/history/modules/__tests__/TestSequences/ReturnFalseTransitionHook.js
new file mode 100644
index 0000000..d3894fb
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/ReturnFalseTransitionHook.js
@@ -0,0 +1,32 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ const unblock = history.block(nextLocation => {
+ expect(nextLocation).toMatchObject({
+ pathname: '/home'
+ });
+
+ // Cancel the transition.
+ return false;
+ });
+
+ history.push('/home');
+
+ expect(history.location).toMatchObject({
+ pathname: '/'
+ });
+
+ unblock();
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/SlashHashPathCoding.js b/history/modules/__tests__/TestSequences/SlashHashPathCoding.js
new file mode 100644
index 0000000..6911d21
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/SlashHashPathCoding.js
@@ -0,0 +1,48 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ expect(window.location.hash).toBe('#/');
+
+ history.push('/home?the=query#the-hash');
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(window.location.hash).toBe('#/home?the=query#the-hash');
+
+ history.goBack();
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ expect(window.location.hash).toBe('#/');
+
+ history.goForward();
+ },
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/home',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+
+ expect(window.location.hash).toBe('#/home?the=query#the-hash');
+ }
+ ];
+
+ execSteps(steps, history, done);
+}
diff --git a/history/modules/__tests__/TestSequences/TransitionHookArgs.js b/history/modules/__tests__/TestSequences/TransitionHookArgs.js
new file mode 100644
index 0000000..bc79f02
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/TransitionHookArgs.js
@@ -0,0 +1,32 @@
+import expect from 'expect';
+
+import execSteps from './execSteps.js';
+
+export default function(history, done) {
+ let hookLocation, hookAction;
+ const steps = [
+ location => {
+ expect(location).toMatchObject({
+ pathname: '/'
+ });
+
+ history.push('/home');
+ },
+ (location, action) => {
+ expect(hookAction).toBe(action);
+ expect(hookLocation).toBe(location);
+ }
+ ];
+
+ const unblock = history.block((location, action) => {
+ hookLocation = location;
+ hookAction = action;
+
+ return 'Are you sure?';
+ });
+
+ execSteps(steps, history, (...args) => {
+ unblock();
+ done(...args);
+ });
+}
diff --git a/history/modules/__tests__/TestSequences/execSteps.js b/history/modules/__tests__/TestSequences/execSteps.js
new file mode 100644
index 0000000..264560a
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/execSteps.js
@@ -0,0 +1,34 @@
+export default function execSteps(steps, history, done) {
+ let index = 0,
+ unlisten,
+ cleanedUp = false;
+
+ const cleanup = (...args) => {
+ if (!cleanedUp) {
+ cleanedUp = true;
+ unlisten();
+ done(...args);
+ }
+ };
+
+ const execNextStep = (...args) => {
+ try {
+ const nextStep = steps[index++];
+
+ if (!nextStep) throw new Error('Test is missing step ' + index);
+
+ nextStep(...args);
+
+ if (index === steps.length) cleanup();
+ } catch (error) {
+ cleanup(error);
+ }
+ };
+
+ if (steps.length) {
+ unlisten = history.listen(execNextStep);
+ execNextStep(history.location);
+ } else {
+ done();
+ }
+}
diff --git a/history/modules/__tests__/TestSequences/index.js b/history/modules/__tests__/TestSequences/index.js
new file mode 100644
index 0000000..e48e6e7
--- /dev/null
+++ b/history/modules/__tests__/TestSequences/index.js
@@ -0,0 +1,46 @@
+export {
+ default as BackButtonTransitionHook
+} from './BackButtonTransitionHook.js';
+export { default as BlockEverything } from './BlockEverything.js';
+export {
+ default as BlockPopWithoutListening
+} from './BlockPopWithoutListening.js';
+export { default as DenyPush } from './DenyPush.js';
+export { default as DenyGoBack } from './DenyGoBack.js';
+export { default as DenyGoForward } from './DenyGoForward.js';
+export {
+ default as EncodedReservedCharacters
+} from './EncodedReservedCharacters.js';
+export { default as GoBack } from './GoBack.js';
+export { default as GoForward } from './GoForward.js';
+export { default as HashbangHashPathCoding } from './HashbangHashPathCoding.js';
+export {
+ default as HashChangeTransitionHook
+} from './HashChangeTransitionHook.js';
+export { default as InitialLocationNoKey } from './InitialLocationNoKey.js';
+export { default as InitialLocationHasKey } from './InitialLocationHasKey.js';
+export { default as Listen } from './Listen.js';
+export {
+ default as LocationPathnameAlwaysSame
+} from './LocationPathnameAlwaysSame.js';
+export { default as NoslashHashPathCoding } from './NoslashHashPathCoding.js';
+export { default as PushEncodedLocation } from './PushEncodedLocation.js';
+export { default as PushInvalidPathname } from './PushInvalidPathname.js';
+export { default as PushNewLocation } from './PushNewLocation.js';
+export { default as PushMissingPathname } from './PushMissingPathname.js';
+export { default as PushSamePath } from './PushSamePath.js';
+export { default as PushSamePathWarning } from './PushSamePathWarning.js';
+export { default as PushState } from './PushState.js';
+export { default as PushStateWarning } from './PushStateWarning.js';
+export { default as PushRelativePathname } from './PushRelativePathname.js';
+export { default as PushUnicodeLocation } from './PushUnicodeLocation.js';
+export { default as ReplaceInvalidPathname } from './ReplaceInvalidPathname.js';
+export { default as ReplaceNewLocation } from './ReplaceNewLocation.js';
+export { default as ReplaceSamePath } from './ReplaceSamePath.js';
+export { default as ReplaceState } from './ReplaceState.js';
+export { default as ReplaceStateWarning } from './ReplaceStateWarning.js';
+export {
+ default as ReturnFalseTransitionHook
+} from './ReturnFalseTransitionHook.js';
+export { default as SlashHashPathCoding } from './SlashHashPathCoding.js';
+export { default as TransitionHookArgs } from './TransitionHookArgs.js';
diff --git a/history/modules/__tests__/createLocation-test.js b/history/modules/__tests__/createLocation-test.js
new file mode 100644
index 0000000..27e0842
--- /dev/null
+++ b/history/modules/__tests__/createLocation-test.js
@@ -0,0 +1,144 @@
+import expect from 'expect';
+import { createLocation } from 'history';
+
+describe('createLocation', () => {
+ describe('with a full path', () => {
+ describe('given as a string', () => {
+ it('has the correct properties', () => {
+ expect(createLocation('/the/path?the=query#the-hash')).toMatchObject({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+ });
+ });
+
+ describe('given as an object', () => {
+ it('has the correct properties', () => {
+ expect(
+ createLocation({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ })
+ ).toMatchObject({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+ });
+ });
+ });
+
+ describe('with a relative path', () => {
+ describe('given as a string', () => {
+ it('has the correct properties', () => {
+ expect(createLocation('the/path?the=query#the-hash')).toMatchObject({
+ pathname: 'the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+ });
+ });
+
+ describe('given as an object', () => {
+ it('has the correct properties', () => {
+ expect(
+ createLocation({
+ pathname: 'the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ })
+ ).toMatchObject({
+ pathname: 'the/path',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+ });
+ });
+ });
+
+ describe('with a path with no pathname', () => {
+ describe('given as a string', () => {
+ it('has the correct properties', () => {
+ expect(createLocation('?the=query#the-hash')).toMatchObject({
+ pathname: '/',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+ });
+ });
+
+ describe('given as an object', () => {
+ it('has the correct properties', () => {
+ expect(
+ createLocation({ search: '?the=query', hash: '#the-hash' })
+ ).toMatchObject({
+ pathname: '/',
+ search: '?the=query',
+ hash: '#the-hash'
+ });
+ });
+ });
+ });
+
+ describe('with a path with no search', () => {
+ describe('given as a string', () => {
+ it('has the correct properties', () => {
+ expect(createLocation('/the/path#the-hash')).toMatchObject({
+ pathname: '/the/path',
+ search: '',
+ hash: '#the-hash'
+ });
+ });
+ });
+
+ describe('given as an object', () => {
+ it('has the correct properties', () => {
+ expect(
+ createLocation({ pathname: '/the/path', hash: '#the-hash' })
+ ).toMatchObject({
+ pathname: '/the/path',
+ search: '',
+ hash: '#the-hash'
+ });
+ });
+ });
+ });
+
+ describe('with a path with no hash', () => {
+ describe('given as a string', () => {
+ it('has the correct properties', () => {
+ expect(createLocation('/the/path?the=query')).toMatchObject({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: ''
+ });
+ });
+ });
+
+ describe('given as an object', () => {
+ it('has the correct properties', () => {
+ expect(
+ createLocation({ pathname: '/the/path', search: '?the=query' })
+ ).toMatchObject({
+ pathname: '/the/path',
+ search: '?the=query',
+ hash: ''
+ });
+ });
+ });
+ });
+
+ describe('key', () => {
+ it('has a key property if a key is provided', () => {
+ const location = createLocation('/the/path', undefined, 'key');
+ expect(Object.keys(location)).toContain('key');
+ });
+
+ it('has no key property if no key is provided', () => {
+ const location = createLocation('/the/path');
+ expect(Object.keys(location)).not.toContain('key');
+ });
+ });
+});
diff --git a/history/modules/createBrowserHistory.js b/history/modules/createBrowserHistory.js
new file mode 100644
index 0000000..dd1983d
--- /dev/null
+++ b/history/modules/createBrowserHistory.js
@@ -0,0 +1,329 @@
+import { createLocation } from './LocationUtils.js';
+import {
+ addLeadingSlash,
+ stripTrailingSlash,
+ hasBasename,
+ stripBasename,
+ createPath
+} from './PathUtils.js';
+import createTransitionManager from './createTransitionManager.js';
+import {
+ canUseDOM,
+ getConfirmation,
+ supportsHistory,
+ supportsPopStateOnHashChange,
+ isExtraneousPopstateEvent
+} from './DOMUtils.js';
+import invariant from './invariant.js';
+import warning from './warning.js';
+
+const PopStateEvent = 'popstate';
+const HashChangeEvent = 'hashchange';
+
+function getHistoryState() {
+ try {
+ return window.history.state || {};
+ } catch (e) {
+ // IE 11 sometimes throws when accessing window.history.state
+ // See https://github.com/ReactTraining/history/pull/289
+ return {};
+ }
+}
+
+/**
+ * Creates a history object that uses the HTML5 history API including
+ * pushState, replaceState, and the popstate event.
+ */
+function createBrowserHistory(props = {}) {
+ invariant(canUseDOM, 'Browser history needs a DOM');
+
+ const globalHistory = window.history;
+ const canUseHistory = supportsHistory();
+ const needsHashChangeListener = !supportsPopStateOnHashChange();
+
+ const {
+ forceRefresh = false,
+ getUserConfirmation = getConfirmation,
+ keyLength = 6
+ } = props;
+ const basename = props.basename
+ ? stripTrailingSlash(addLeadingSlash(props.basename))
+ : '';
+
+ function getDOMLocation(historyState) {
+ const { key, state } = historyState || {};
+ const { pathname, search, hash } = window.location;
+
+ let path = pathname + search + hash;
+
+ warning(
+ !basename || hasBasename(path, basename),
+ 'You are attempting to use a basename on a page whose URL path does not begin ' +
+ 'with the basename. Expected path "' +
+ path +
+ '" to begin with "' +
+ basename +
+ '".'
+ );
+
+ if (basename) path = stripBasename(path, basename);
+
+ return createLocation(path, state, key);
+ }
+
+ function createKey() {
+ return Math.random()
+ .toString(36)
+ .substr(2, keyLength);
+ }
+
+ const transitionManager = createTransitionManager();
+
+ function setState(nextState) {
+ Object.assign(history, nextState);
+ history.length = globalHistory.length;
+ transitionManager.notifyListeners(history.location, history.action);
+ }
+
+ function handlePopState(event) {
+ // Ignore extraneous popstate events in WebKit.
+ if (isExtraneousPopstateEvent(event)) return;
+ handlePop(getDOMLocation(event.state));
+ }
+
+ function handleHashChange() {
+ handlePop(getDOMLocation(getHistoryState()));
+ }
+
+ let forceNextPop = false;
+
+ function handlePop(location) {
+ if (forceNextPop) {
+ forceNextPop = false;
+ setState();
+ } else {
+ const action = 'POP';
+
+ transitionManager.confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ ok => {
+ if (ok) {
+ setState({ action, location });
+ } else {
+ revertPop(location);
+ }
+ }
+ );
+ }
+ }
+
+ function revertPop(fromLocation) {
+ const toLocation = history.location;
+
+ // TODO: We could probably make this more reliable by
+ // keeping a list of keys we've seen in sessionStorage.
+ // Instead, we just default to 0 for keys we don't know.
+
+ let toIndex = allKeys.indexOf(toLocation.key);
+
+ if (toIndex === -1) toIndex = 0;
+
+ let fromIndex = allKeys.indexOf(fromLocation.key);
+
+ if (fromIndex === -1) fromIndex = 0;
+
+ const delta = toIndex - fromIndex;
+
+ if (delta) {
+ forceNextPop = true;
+ go(delta);
+ }
+ }
+
+ const initialLocation = getDOMLocation(getHistoryState());
+ let allKeys = [initialLocation.key];
+
+ // Public interface
+
+ function createHref(location) {
+ return basename + createPath(location);
+ }
+
+ function push(path, state) {
+ warning(
+ !(
+ typeof path === 'object' &&
+ path.state !== undefined &&
+ state !== undefined
+ ),
+ 'You should avoid providing a 2nd state argument to push when the 1st ' +
+ 'argument is a location-like object that already has state; it is ignored'
+ );
+
+ const action = 'PUSH';
+ const location = createLocation(path, state, createKey(), history.location);
+
+ transitionManager.confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ ok => {
+ if (!ok) return;
+
+ const href = createHref(location);
+ const { key, state } = location;
+
+ if (canUseHistory) {
+ globalHistory.pushState({ key, state }, null, href);
+
+ if (forceRefresh) {
+ window.location.href = href;
+ } else {
+ const prevIndex = allKeys.indexOf(history.location.key);
+ const nextKeys = allKeys.slice(0, prevIndex + 1);
+
+ nextKeys.push(location.key);
+ allKeys = nextKeys;
+
+ setState({ action, location });
+ }
+ } else {
+ warning(
+ state === undefined,
+ 'Browser history cannot push state in browsers that do not support HTML5 history'
+ );
+
+ window.location.href = href;
+ }
+ }
+ );
+ }
+
+ function replace(path, state) {
+ warning(
+ !(
+ typeof path === 'object' &&
+ path.state !== undefined &&
+ state !== undefined
+ ),
+ 'You should avoid providing a 2nd state argument to replace when the 1st ' +
+ 'argument is a location-like object that already has state; it is ignored'
+ );
+
+ const action = 'REPLACE';
+ const location = createLocation(path, state, createKey(), history.location);
+
+ transitionManager.confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ ok => {
+ if (!ok) return;
+
+ const href = createHref(location);
+ const { key, state } = location;
+
+ if (canUseHistory) {
+ globalHistory.replaceState({ key, state }, null, href);
+
+ if (forceRefresh) {
+ window.location.replace(href);
+ } else {
+ const prevIndex = allKeys.indexOf(history.location.key);
+
+ if (prevIndex !== -1) allKeys[prevIndex] = location.key;
+
+ setState({ action, location });
+ }
+ } else {
+ warning(
+ state === undefined,
+ 'Browser history cannot replace state in browsers that do not support HTML5 history'
+ );
+
+ window.location.replace(href);
+ }
+ }
+ );
+ }
+
+ function go(n) {
+ globalHistory.go(n);
+ }
+
+ function goBack() {
+ go(-1);
+ }
+
+ function goForward() {
+ go(1);
+ }
+
+ let listenerCount = 0;
+
+ function checkDOMListeners(delta) {
+ listenerCount += delta;
+
+ if (listenerCount === 1 && delta === 1) {
+ window.addEventListener(PopStateEvent, handlePopState);
+
+ if (needsHashChangeListener)
+ window.addEventListener(HashChangeEvent, handleHashChange);
+ } else if (listenerCount === 0) {
+ window.removeEventListener(PopStateEvent, handlePopState);
+
+ if (needsHashChangeListener)
+ window.removeEventListener(HashChangeEvent, handleHashChange);
+ }
+ }
+
+ let isBlocked = false;
+
+ function block(prompt = false) {
+ const unblock = transitionManager.setPrompt(prompt);
+
+ if (!isBlocked) {
+ checkDOMListeners(1);
+ isBlocked = true;
+ }
+
+ return () => {
+ if (isBlocked) {
+ isBlocked = false;
+ checkDOMListeners(-1);
+ }
+
+ return unblock();
+ };
+ }
+
+ function listen(listener) {
+ const unlisten = transitionManager.appendListener(listener);
+ checkDOMListeners(1);
+
+ return () => {
+ checkDOMListeners(-1);
+ unlisten();
+ };
+ }
+
+ const history = {
+ length: globalHistory.length,
+ action: 'POP',
+ location: initialLocation,
+ createHref,
+ push,
+ replace,
+ go,
+ goBack,
+ goForward,
+ block,
+ listen
+ };
+
+ return history;
+}
+
+export default createBrowserHistory;
diff --git a/history/modules/createHashHistory.js b/history/modules/createHashHistory.js
new file mode 100644
index 0000000..6c29725
--- /dev/null
+++ b/history/modules/createHashHistory.js
@@ -0,0 +1,361 @@
+import { createLocation } from './LocationUtils.js';
+import {
+ addLeadingSlash,
+ stripLeadingSlash,
+ stripTrailingSlash,
+ hasBasename,
+ stripBasename,
+ createPath
+} from './PathUtils.js';
+import createTransitionManager from './createTransitionManager.js';
+import {
+ canUseDOM,
+ getConfirmation,
+ supportsGoWithoutReloadUsingHash
+} from './DOMUtils.js';
+import invariant from './invariant.js';
+import warning from './warning.js';
+
+const HashChangeEvent = 'hashchange';
+
+const HashPathCoders = {
+ hashbang: {
+ encodePath: path =>
+ path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path),
+ decodePath: path => (path.charAt(0) === '!' ? path.substr(1) : path)
+ },
+ noslash: {
+ encodePath: stripLeadingSlash,
+ decodePath: addLeadingSlash
+ },
+ slash: {
+ encodePath: addLeadingSlash,
+ decodePath: addLeadingSlash
+ }
+};
+
+function stripHash(url) {
+ const hashIndex = url.indexOf('#');
+ return hashIndex === -1 ? url : url.slice(0, hashIndex);
+}
+
+function getHashPath() {
+ // We can't use window.location.hash here because it's not
+ // consistent across browsers - Firefox will pre-decode it!
+ const href = window.location.href;
+ const hashIndex = href.indexOf('#');
+ return hashIndex === -1 ? '' : href.substring(hashIndex + 1);
+}
+
+function pushHashPath(path) {
+ window.location.hash = path;
+}
+
+function replaceHashPath(path) {
+ window.location.replace(stripHash(window.location.href) + '#' + path);
+}
+
+function createHashHistory(props = {}) {
+ invariant(canUseDOM, 'Hash history needs a DOM');
+
+ const globalHistory = window.history;
+ const canGoWithoutReload = supportsGoWithoutReloadUsingHash();
+
+ const { getUserConfirmation = getConfirmation, hashType = 'slash' } = props;
+ const basename = props.basename
+ ? stripTrailingSlash(addLeadingSlash(props.basename))
+ : '';
+
+ const { encodePath, decodePath } = HashPathCoders[hashType];
+
+ function getDOMLocation() {
+ let path = decodePath(getHashPath());
+
+ warning(
+ !basename || hasBasename(path, basename),
+ 'You are attempting to use a basename on a page whose URL path does not begin ' +
+ 'with the basename. Expected path "' +
+ path +
+ '" to begin with "' +
+ basename +
+ '".'
+ );
+
+ if (basename) path = stripBasename(path, basename);
+
+ return createLocation(path);
+ }
+
+ const transitionManager = createTransitionManager();
+
+ function setState(nextState) {
+ Object.assign(history, nextState);
+ history.length = globalHistory.length;
+ transitionManager.notifyListeners(history.location, history.action);
+ }
+
+ let forceNextPop = false;
+ let ignorePath = null;
+
+ function locationsAreEqual(a, b) {
+ return (
+ a.pathname === b.pathname && a.search === b.search && a.hash === b.hash
+ );
+ }
+
+ function handleHashChange() {
+ const path = getHashPath();
+ const encodedPath = encodePath(path);
+
+ if (path !== encodedPath) {
+ // Ensure we always have a properly-encoded hash.
+ replaceHashPath(encodedPath);
+ } else {
+ const location = getDOMLocation();
+ const prevLocation = history.location;
+
+ if (!forceNextPop && locationsAreEqual(prevLocation, location)) return; // A hashchange doesn't always == location change.
+
+ if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.
+
+ ignorePath = null;
+
+ handlePop(location);
+ }
+ }
+
+ function handlePop(location) {
+ if (forceNextPop) {
+ forceNextPop = false;
+ setState();
+ } else {
+ const action = 'POP';
+
+ transitionManager.confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ ok => {
+ if (ok) {
+ setState({ action, location });
+ } else {
+ revertPop(location);
+ }
+ }
+ );
+ }
+ }
+
+ function revertPop(fromLocation) {
+ const toLocation = history.location;
+
+ // TODO: We could probably make this more reliable by
+ // keeping a list of paths we've seen in sessionStorage.
+ // Instead, we just default to 0 for paths we don't know.
+
+ let toIndex = allPaths.lastIndexOf(createPath(toLocation));
+
+ if (toIndex === -1) toIndex = 0;
+
+ let fromIndex = allPaths.lastIndexOf(createPath(fromLocation));
+
+ if (fromIndex === -1) fromIndex = 0;
+
+ const delta = toIndex - fromIndex;
+
+ if (delta) {
+ forceNextPop = true;
+ go(delta);
+ }
+ }
+
+ // Ensure the hash is encoded properly before doing anything else.
+ const path = getHashPath();
+ const encodedPath = encodePath(path);
+
+ if (path !== encodedPath) replaceHashPath(encodedPath);
+
+ const initialLocation = getDOMLocation();
+ let allPaths = [createPath(initialLocation)];
+
+ // Public interface
+
+ function createHref(location) {
+ const baseTag = document.querySelector('base');
+ let href = '';
+ if (baseTag && baseTag.getAttribute('href')) {
+ href = stripHash(window.location.href);
+ }
+ return href + '#' + encodePath(basename + createPath(location));
+ }
+
+ function push(path, state) {
+ warning(
+ state === undefined,
+ 'Hash history cannot push state; it is ignored'
+ );
+
+ const action = 'PUSH';
+ const location = createLocation(
+ path,
+ undefined,
+ undefined,
+ history.location
+ );
+
+ transitionManager.confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ ok => {
+ if (!ok) return;
+
+ const path = createPath(location);
+ const encodedPath = encodePath(basename + path);
+ const hashChanged = getHashPath() !== encodedPath;
+
+ if (hashChanged) {
+ // We cannot tell if a hashchange was caused by a PUSH, so we'd
+ // rather setState here and ignore the hashchange. The caveat here
+ // is that other hash histories in the page will consider it a POP.
+ ignorePath = path;
+ pushHashPath(encodedPath);
+
+ const prevIndex = allPaths.lastIndexOf(createPath(history.location));
+ const nextPaths = allPaths.slice(0, prevIndex + 1);
+
+ nextPaths.push(path);
+ allPaths = nextPaths;
+
+ setState({ action, location });
+ } else {
+ warning(
+ false,
+ 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack'
+ );
+
+ setState();
+ }
+ }
+ );
+ }
+
+ function replace(path, state) {
+ warning(
+ state === undefined,
+ 'Hash history cannot replace state; it is ignored'
+ );
+
+ const action = 'REPLACE';
+ const location = createLocation(
+ path,
+ undefined,
+ undefined,
+ history.location
+ );
+
+ transitionManager.confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ ok => {
+ if (!ok) return;
+
+ const path = createPath(location);
+ const encodedPath = encodePath(basename + path);
+ const hashChanged = getHashPath() !== encodedPath;
+
+ if (hashChanged) {
+ // We cannot tell if a hashchange was caused by a REPLACE, so we'd
+ // rather setState here and ignore the hashchange. The caveat here
+ // is that other hash histories in the page will consider it a POP.
+ ignorePath = path;
+ replaceHashPath(encodedPath);
+ }
+
+ const prevIndex = allPaths.indexOf(createPath(history.location));
+
+ if (prevIndex !== -1) allPaths[prevIndex] = path;
+
+ setState({ action, location });
+ }
+ );
+ }
+
+ function go(n) {
+ warning(
+ canGoWithoutReload,
+ 'Hash history go(n) causes a full page reload in this browser'
+ );
+
+ globalHistory.go(n);
+ }
+
+ function goBack() {
+ go(-1);
+ }
+
+ function goForward() {
+ go(1);
+ }
+
+ let listenerCount = 0;
+
+ function checkDOMListeners(delta) {
+ listenerCount += delta;
+
+ if (listenerCount === 1 && delta === 1) {
+ window.addEventListener(HashChangeEvent, handleHashChange);
+ } else if (listenerCount === 0) {
+ window.removeEventListener(HashChangeEvent, handleHashChange);
+ }
+ }
+
+ let isBlocked = false;
+
+ function block(prompt = false) {
+ const unblock = transitionManager.setPrompt(prompt);
+
+ if (!isBlocked) {
+ checkDOMListeners(1);
+ isBlocked = true;
+ }
+
+ return () => {
+ if (isBlocked) {
+ isBlocked = false;
+ checkDOMListeners(-1);
+ }
+
+ return unblock();
+ };
+ }
+
+ function listen(listener) {
+ const unlisten = transitionManager.appendListener(listener);
+ checkDOMListeners(1);
+
+ return () => {
+ checkDOMListeners(-1);
+ unlisten();
+ };
+ }
+
+ const history = {
+ length: globalHistory.length,
+ action: 'POP',
+ location: initialLocation,
+ createHref,
+ push,
+ replace,
+ go,
+ goBack,
+ goForward,
+ block,
+ listen
+ };
+
+ return history;
+}
+
+export default createHashHistory;
diff --git a/history/modules/createMemoryHistory.js b/history/modules/createMemoryHistory.js
new file mode 100644
index 0000000..8b541ea
--- /dev/null
+++ b/history/modules/createMemoryHistory.js
@@ -0,0 +1,186 @@
+import { createPath } from './PathUtils.js';
+import { createLocation } from './LocationUtils.js';
+import createTransitionManager from './createTransitionManager.js';
+import warning from './warning.js';
+
+function clamp(n, lowerBound, upperBound) {
+ return Math.min(Math.max(n, lowerBound), upperBound);
+}
+
+/**
+ * Creates a history object that stores locations in memory.
+ */
+function createMemoryHistory(props = {}) {
+ const {
+ getUserConfirmation,
+ initialEntries = ['/'],
+ initialIndex = 0,
+ keyLength = 6
+ } = props;
+
+ const transitionManager = createTransitionManager();
+
+ function setState(nextState) {
+ Object.assign(history, nextState);
+ history.length = history.entries.length;
+ transitionManager.notifyListeners(history.location, history.action);
+ }
+
+ function createKey() {
+ return Math.random()
+ .toString(36)
+ .substr(2, keyLength);
+ }
+
+ const index = clamp(initialIndex, 0, initialEntries.length - 1);
+ const entries = initialEntries.map(entry =>
+ typeof entry === 'string'
+ ? createLocation(entry, undefined, createKey())
+ : createLocation(entry, undefined, entry.key || createKey())
+ );
+
+ // Public interface
+
+ const createHref = createPath;
+
+ function push(path, state) {
+ warning(
+ !(
+ typeof path === 'object' &&
+ path.state !== undefined &&
+ state !== undefined
+ ),
+ 'You should avoid providing a 2nd state argument to push when the 1st ' +
+ 'argument is a location-like object that already has state; it is ignored'
+ );
+
+ const action = 'PUSH';
+ const location = createLocation(path, state, createKey(), history.location);
+
+ transitionManager.confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ ok => {
+ if (!ok) return;
+
+ const prevIndex = history.index;
+ const nextIndex = prevIndex + 1;
+
+ const nextEntries = history.entries.slice(0);
+ if (nextEntries.length > nextIndex) {
+ nextEntries.splice(
+ nextIndex,
+ nextEntries.length - nextIndex,
+ location
+ );
+ } else {
+ nextEntries.push(location);
+ }
+
+ setState({
+ action,
+ location,
+ index: nextIndex,
+ entries: nextEntries
+ });
+ }
+ );
+ }
+
+ function replace(path, state) {
+ warning(
+ !(
+ typeof path === 'object' &&
+ path.state !== undefined &&
+ state !== undefined
+ ),
+ 'You should avoid providing a 2nd state argument to replace when the 1st ' +
+ 'argument is a location-like object that already has state; it is ignored'
+ );
+
+ const action = 'REPLACE';
+ const location = createLocation(path, state, createKey(), history.location);
+
+ transitionManager.confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ ok => {
+ if (!ok) return;
+
+ history.entries[history.index] = location;
+
+ setState({ action, location });
+ }
+ );
+ }
+
+ function go(n) {
+ const nextIndex = clamp(history.index + n, 0, history.entries.length - 1);
+
+ const action = 'POP';
+ const location = history.entries[nextIndex];
+
+ transitionManager.confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ ok => {
+ if (ok) {
+ setState({
+ action,
+ location,
+ index: nextIndex
+ });
+ } else {
+ // Mimic the behavior of DOM histories by
+ // causing a render after a cancelled POP.
+ setState();
+ }
+ }
+ );
+ }
+
+ function goBack() {
+ go(-1);
+ }
+
+ function goForward() {
+ go(1);
+ }
+
+ function canGo(n) {
+ const nextIndex = history.index + n;
+ return nextIndex >= 0 && nextIndex < history.entries.length;
+ }
+
+ function block(prompt = false) {
+ return transitionManager.setPrompt(prompt);
+ }
+
+ function listen(listener) {
+ return transitionManager.appendListener(listener);
+ }
+
+ const history = {
+ length: entries.length,
+ action: 'POP',
+ location: entries[index],
+ index,
+ entries,
+ createHref,
+ push,
+ replace,
+ go,
+ goBack,
+ goForward,
+ canGo,
+ block,
+ listen
+ };
+
+ return history;
+}
+
+export default createMemoryHistory;
diff --git a/history/modules/createTransitionManager.js b/history/modules/createTransitionManager.js
new file mode 100644
index 0000000..4373250
--- /dev/null
+++ b/history/modules/createTransitionManager.js
@@ -0,0 +1,78 @@
+import warning from './warning.js';
+
+function createTransitionManager() {
+ let prompt = null;
+
+ function setPrompt(nextPrompt) {
+ warning(prompt == null, 'A history supports only one prompt at a time');
+
+ prompt = nextPrompt;
+
+ return () => {
+ if (prompt === nextPrompt) prompt = null;
+ };
+ }
+
+ function confirmTransitionTo(
+ location,
+ action,
+ getUserConfirmation,
+ callback
+ ) {
+ // TODO: If another transition starts while we're still confirming
+ // the previous one, we may end up in a weird state. Figure out the
+ // best way to handle this.
+ if (prompt != null) {
+ const result =
+ typeof prompt === 'function' ? prompt(location, action) : prompt;
+
+ if (typeof result === 'string') {
+ if (typeof getUserConfirmation === 'function') {
+ getUserConfirmation(result, callback);
+ } else {
+ warning(
+ false,
+ 'A history needs a getUserConfirmation function in order to use a prompt message'
+ );
+
+ callback(true);
+ }
+ } else {
+ // Return false from a transition hook to cancel the transition.
+ callback(result !== false);
+ }
+ } else {
+ callback(true);
+ }
+ }
+
+ let listeners = [];
+
+ function appendListener(fn) {
+ let isActive = true;
+
+ function listener(...args) {
+ if (isActive) fn(...args);
+ }
+
+ listeners.push(listener);
+
+ return () => {
+ isActive = false;
+ listeners = listeners.filter(item => item !== listener);
+ };
+ }
+
+ function notifyListeners(...args) {
+ listeners.forEach(listener => listener(...args));
+ }
+
+ return {
+ setPrompt,
+ confirmTransitionTo,
+ appendListener,
+ notifyListeners
+ };
+}
+
+export default createTransitionManager;
diff --git a/history/modules/index.js b/history/modules/index.js
new file mode 100644
index 0000000..b02317d
--- /dev/null
+++ b/history/modules/index.js
@@ -0,0 +1,5 @@
+export { default as createBrowserHistory } from './createBrowserHistory';
+export { default as createHashHistory } from './createHashHistory';
+export { default as createMemoryHistory } from './createMemoryHistory';
+export { createLocation, locationsAreEqual } from './LocationUtils';
+export { parsePath, createPath } from './PathUtils';
diff --git a/history/modules/invariant.js b/history/modules/invariant.js
new file mode 100644
index 0000000..98b4860
--- /dev/null
+++ b/history/modules/invariant.js
@@ -0,0 +1 @@
+export { default } from 'tiny-invariant';
diff --git a/history/modules/warning.js b/history/modules/warning.js
new file mode 100644
index 0000000..510d489
--- /dev/null
+++ b/history/modules/warning.js
@@ -0,0 +1 @@
+export { default } from 'tiny-warning';
diff --git a/history/package.json b/history/package.json
new file mode 100644
index 0000000..e48a21a
--- /dev/null
+++ b/history/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "history",
+ "version": "4.10.1",
+ "description": "Manage session history with JavaScript",
+ "repository": "ReactTraining/history",
+ "license": "MIT",
+ "author": "Michael Jackson",
+ "main": "index.js",
+ "module": "esm/history.js",
+ "unpkg": "umd/history.js",
+ "files": [
+ "DOMUtils.js",
+ "ExecutionEnvironment.js",
+ "LocationUtils.js",
+ "PathUtils.js",
+ "cjs",
+ "createBrowserHistory.js",
+ "createHashHistory.js",
+ "createMemoryHistory.js",
+ "createTransitionManager.js",
+ "es",
+ "esm",
+ "umd",
+ "warnAboutDeprecatedCJSRequire.js"
+ ],
+ "sideEffects": false,
+ "scripts": {
+ "build": "rollup -c",
+ "clean": "git clean -fdX .",
+ "lint": "eslint modules",
+ "prepublishOnly": "yarn build",
+ "test": "karma start --single-run"
+ },
+ "dependencies": {
+ "@babel/runtime": "^7.1.2",
+ "loose-envify": "^1.2.0",
+ "resolve-pathname": "^3.0.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0",
+ "value-equal": "^1.0.1"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.1.2",
+ "@babel/plugin-transform-object-assign": "^7.0.0",
+ "@babel/plugin-transform-runtime": "^7.1.0",
+ "@babel/preset-env": "^7.1.0",
+ "babel-core": "^7.0.0-bridge.0",
+ "babel-eslint": "^7.0.0",
+ "babel-loader": "^8.0.4",
+ "babel-plugin-dev-expression": "^0.2.1",
+ "eslint": "^3.3.0",
+ "eslint-plugin-import": "^2.0.0",
+ "expect": "^21.0.0",
+ "jest-mock": "^21.0.0",
+ "karma": "^3.1.3",
+ "karma-browserstack-launcher": "^1.3.0",
+ "karma-chrome-launcher": "^2.2.0",
+ "karma-firefox-launcher": "^1.1.0",
+ "karma-mocha": "^1.3.0",
+ "karma-mocha-reporter": "^2.2.5",
+ "karma-sourcemap-loader": "^0.3.7",
+ "karma-webpack": "^3.0.5",
+ "mocha": "^5.2.0",
+ "rollup": "^0.66.6",
+ "rollup-plugin-babel": "^4.0.3",
+ "rollup-plugin-commonjs": "^9.2.0",
+ "rollup-plugin-node-resolve": "^3.4.0",
+ "rollup-plugin-replace": "^2.1.0",
+ "rollup-plugin-size-snapshot": "^0.7.0",
+ "rollup-plugin-uglify": "^6.0.0",
+ "webpack": "^3.12.0"
+ },
+ "browserify": {
+ "transform": [
+ "loose-envify"
+ ]
+ },
+ "keywords": [
+ "history",
+ "location"
+ ]
+}
diff --git a/history/rollup.config.js b/history/rollup.config.js
new file mode 100644
index 0000000..575cbdc
--- /dev/null
+++ b/history/rollup.config.js
@@ -0,0 +1,104 @@
+import babel from 'rollup-plugin-babel';
+import nodeResolve from 'rollup-plugin-node-resolve';
+import commonjs from 'rollup-plugin-commonjs';
+import replace from 'rollup-plugin-replace';
+import { sizeSnapshot } from 'rollup-plugin-size-snapshot';
+import { uglify } from 'rollup-plugin-uglify';
+
+import pkg from './package.json';
+
+const input = './modules/index.js';
+const globalName = 'History';
+
+function external(id) {
+ return !id.startsWith('.') && !id.startsWith('/');
+}
+
+const cjs = [
+ {
+ input,
+ output: { file: `cjs/${pkg.name}.js`, format: 'cjs' },
+ external,
+ plugins: [
+ babel({ exclude: /node_modules/ }),
+ replace({ 'process.env.NODE_ENV': JSON.stringify('development') })
+ ]
+ },
+ {
+ input,
+ output: { file: `cjs/${pkg.name}.min.js`, format: 'cjs' },
+ external,
+ plugins: [
+ babel({ exclude: /node_modules/ }),
+ replace({ 'process.env.NODE_ENV': JSON.stringify('production') }),
+ uglify()
+ ]
+ }
+];
+
+const esm = [
+ {
+ input,
+ output: { file: `esm/${pkg.name}.js`, format: 'esm' },
+ external,
+ plugins: [
+ babel({
+ exclude: /node_modules/,
+ runtimeHelpers: true,
+ plugins: [['@babel/transform-runtime', { useESModules: true }]]
+ }),
+ sizeSnapshot()
+ ]
+ }
+];
+
+const umd = [
+ {
+ input,
+ output: { file: `umd/${pkg.name}.js`, format: 'umd', name: globalName },
+ plugins: [
+ babel({
+ exclude: /node_modules/,
+ runtimeHelpers: true,
+ plugins: [['@babel/transform-runtime', { useESModules: true }]]
+ }),
+ nodeResolve(),
+ commonjs({ include: /node_modules/ }),
+ replace({ 'process.env.NODE_ENV': JSON.stringify('development') }),
+ sizeSnapshot()
+ ]
+ },
+ {
+ input,
+ output: { file: `umd/${pkg.name}.min.js`, format: 'umd', name: globalName },
+ plugins: [
+ babel({
+ exclude: /node_modules/,
+ runtimeHelpers: true,
+ plugins: [['@babel/transform-runtime', { useESModules: true }]]
+ }),
+ nodeResolve(),
+ commonjs({ include: /node_modules/ }),
+ replace({ 'process.env.NODE_ENV': JSON.stringify('production') }),
+ sizeSnapshot(),
+ uglify()
+ ]
+ }
+];
+
+let config;
+switch (process.env.BUILD_ENV) {
+ case 'cjs':
+ config = cjs;
+ break;
+ case 'esm':
+ config = esm;
+ break;
+ case 'umd':
+ config = umd;
+ break;
+ default:
+ config = cjs.concat(esm).concat(umd);
+}
+
+export default config;
diff --git a/history/tests.webpack.js b/history/tests.webpack.js
new file mode 100644
index 0000000..6459e7f
--- /dev/null
+++ b/history/tests.webpack.js
@@ -0,0 +1,2 @@
+var context = require.context('./modules', true, /-test\.js$/);
+context.keys().forEach(context);
diff --git a/history/warnAboutDeprecatedCJSRequire.js b/history/warnAboutDeprecatedCJSRequire.js
new file mode 100644
index 0000000..3957859
--- /dev/null
+++ b/history/warnAboutDeprecatedCJSRequire.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var printWarning = function() {};
+
+if (process.env.NODE_ENV !== 'production') {
+ printWarning = function(format, subs) {
+ var index = 0;
+ var message =
+ 'Warning: ' +
+ (subs.length > 0
+ ? format.replace(/%s/g, function() {
+ return subs[index++];
+ })
+ : format);
+
+ if (typeof console !== 'undefined') {
+ console.error(message);
+ }
+
+ try {
+ // --- Welcome to debugging history ---
+ // This error was thrown as a convenience so that you can use the
+ // stack trace to find the callsite that triggered this warning.
+ throw new Error(message);
+ } catch (e) {}
+ };
+}
+
+module.exports = function(member) {
+ printWarning(
+ 'Please use `require("history").%s` instead of `require("history/%s")`. ' +
+ 'Support for the latter will be removed in the next major release.',
+ [member, member]
+ );
+};
diff --git a/history/yarn.lock b/history/yarn.lock
new file mode 100644
index 0000000..b8ab388
--- /dev/null
+++ b/history/yarn.lock
@@ -0,0 +1,6268 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
+ integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/core@^7.1.2":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48"
+ integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw==
+ dependencies:
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.6.0"
+ "@babel/helpers" "^7.6.0"
+ "@babel/parser" "^7.6.0"
+ "@babel/template" "^7.6.0"
+ "@babel/traverse" "^7.6.0"
+ "@babel/types" "^7.6.0"
+ convert-source-map "^1.1.0"
+ debug "^4.1.0"
+ json5 "^2.1.0"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56"
+ integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA==
+ dependencies:
+ "@babel/types" "^7.6.0"
+ jsesc "^2.5.1"
+ lodash "^4.17.13"
+ source-map "^0.5.0"
+ trim-right "^1.0.1"
+
+"@babel/helper-annotate-as-pure@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
+ integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
+ integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-call-delegate@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
+ integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.4.4"
+ "@babel/traverse" "^7.4.4"
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-define-map@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369"
+ integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/types" "^7.5.5"
+ lodash "^4.17.13"
+
+"@babel/helper-explode-assignable-expression@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
+ integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-function-name@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
+ integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-get-function-arity@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
+ integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-hoist-variables@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
+ integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==
+ dependencies:
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-member-expression-to-functions@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590"
+ integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==
+ dependencies:
+ "@babel/types" "^7.5.5"
+
+"@babel/helper-module-imports@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
+ integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
+ integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+ "@babel/template" "^7.4.4"
+ "@babel/types" "^7.5.5"
+ lodash "^4.17.13"
+
+"@babel/helper-optimise-call-expression@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
+ integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-plugin-utils@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
+ integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+
+"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351"
+ integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==
+ dependencies:
+ lodash "^4.17.13"
+
+"@babel/helper-remap-async-to-generator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
+ integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-wrap-function" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-replace-supers@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2"
+ integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.5.5"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
+
+"@babel/helper-simple-access@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
+ integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+ dependencies:
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-split-export-declaration@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
+ integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==
+ dependencies:
+ "@babel/types" "^7.4.4"
+
+"@babel/helper-wrap-function@^7.1.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
+ integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.2.0"
+
+"@babel/helpers@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.0.tgz#21961d16c6a3c3ab597325c34c465c0887d31c6e"
+ integrity sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ==
+ dependencies:
+ "@babel/template" "^7.6.0"
+ "@babel/traverse" "^7.6.0"
+ "@babel/types" "^7.6.0"
+
+"@babel/highlight@^7.0.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
+ integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b"
+ integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ==
+
+"@babel/plugin-proposal-async-generator-functions@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e"
+ integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+ "@babel/plugin-syntax-async-generators" "^7.2.0"
+
+"@babel/plugin-proposal-dynamic-import@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506"
+ integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+
+"@babel/plugin-proposal-json-strings@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317"
+ integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-json-strings" "^7.2.0"
+
+"@babel/plugin-proposal-object-rest-spread@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58"
+ integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5"
+ integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78"
+ integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.4.4"
+ regexpu-core "^4.5.4"
+
+"@babel/plugin-syntax-async-generators@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f"
+ integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-dynamic-import@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
+ integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-json-strings@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470"
+ integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-object-rest-spread@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
+ integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c"
+ integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-arrow-functions@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
+ integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-async-to-generator@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e"
+ integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+
+"@babel/plugin-transform-block-scoped-functions@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190"
+ integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-block-scoping@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.0.tgz#c49e21228c4bbd4068a35667e6d951c75439b1dc"
+ integrity sha512-tIt4E23+kw6TgL/edACZwP1OUKrjOTyMrFMLoT5IOFrfMRabCgekjqFd5o6PaAMildBu46oFkekIdMuGkkPEpA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ lodash "^4.17.13"
+
+"@babel/plugin-transform-classes@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9"
+ integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-define-map" "^7.5.5"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.5.5"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da"
+ integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-destructuring@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6"
+ integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3"
+ integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.4.4"
+ regexpu-core "^4.5.4"
+
+"@babel/plugin-transform-duplicate-keys@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853"
+ integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-exponentiation-operator@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008"
+ integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-for-of@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556"
+ integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-function-name@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad"
+ integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-literals@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1"
+ integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-member-expression-literals@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d"
+ integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-amd@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91"
+ integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-commonjs@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486"
+ integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.4.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-systemjs@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249"
+ integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.4.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-umd@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae"
+ integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.0.tgz#1e6e663097813bb4f53d42df0750cf28ad3bb3f1"
+ integrity sha512-jem7uytlmrRl3iCAuQyw8BpB4c4LWvSpvIeXKpMb+7j84lkx4m4mYr5ErAcmN5KM7B6BqrAvRGjBIbbzqCczew==
+ dependencies:
+ regexp-tree "^0.1.13"
+
+"@babel/plugin-transform-new-target@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5"
+ integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-object-assign@^7.0.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz#6fdeea42be17040f119e38e23ea0f49f31968bde"
+ integrity sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-object-super@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9"
+ integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.5.5"
+
+"@babel/plugin-transform-parameters@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16"
+ integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==
+ dependencies:
+ "@babel/helper-call-delegate" "^7.4.4"
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-property-literals@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905"
+ integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-regenerator@^7.4.5":
+ version "7.4.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
+ integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==
+ dependencies:
+ regenerator-transform "^0.14.0"
+
+"@babel/plugin-transform-reserved-words@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634"
+ integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-runtime@^7.1.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.0.tgz#85a3cce402b28586138e368fce20ab3019b9713e"
+ integrity sha512-Da8tMf7uClzwUm/pnJ1S93m/aRXmoYNDD7TkHua8xBDdaAs54uZpTWvEt6NGwmoVMb9mZbntfTqmG2oSzN/7Vg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ resolve "^1.8.1"
+ semver "^5.5.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
+ integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-spread@^7.2.0":
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406"
+ integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-sticky-regex@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1"
+ integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+
+"@babel/plugin-transform-template-literals@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0"
+ integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-typeof-symbol@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2"
+ integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-unicode-regex@^7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f"
+ integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.4.4"
+ regexpu-core "^4.5.4"
+
+"@babel/preset-env@^7.1.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.0.tgz#aae4141c506100bb2bfaa4ac2a5c12b395619e50"
+ integrity sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-async-generator-functions" "^7.2.0"
+ "@babel/plugin-proposal-dynamic-import" "^7.5.0"
+ "@babel/plugin-proposal-json-strings" "^7.2.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.5.5"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-syntax-async-generators" "^7.2.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+ "@babel/plugin-syntax-json-strings" "^7.2.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+ "@babel/plugin-transform-arrow-functions" "^7.2.0"
+ "@babel/plugin-transform-async-to-generator" "^7.5.0"
+ "@babel/plugin-transform-block-scoped-functions" "^7.2.0"
+ "@babel/plugin-transform-block-scoping" "^7.6.0"
+ "@babel/plugin-transform-classes" "^7.5.5"
+ "@babel/plugin-transform-computed-properties" "^7.2.0"
+ "@babel/plugin-transform-destructuring" "^7.6.0"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/plugin-transform-duplicate-keys" "^7.5.0"
+ "@babel/plugin-transform-exponentiation-operator" "^7.2.0"
+ "@babel/plugin-transform-for-of" "^7.4.4"
+ "@babel/plugin-transform-function-name" "^7.4.4"
+ "@babel/plugin-transform-literals" "^7.2.0"
+ "@babel/plugin-transform-member-expression-literals" "^7.2.0"
+ "@babel/plugin-transform-modules-amd" "^7.5.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.6.0"
+ "@babel/plugin-transform-modules-systemjs" "^7.5.0"
+ "@babel/plugin-transform-modules-umd" "^7.2.0"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.0"
+ "@babel/plugin-transform-new-target" "^7.4.4"
+ "@babel/plugin-transform-object-super" "^7.5.5"
+ "@babel/plugin-transform-parameters" "^7.4.4"
+ "@babel/plugin-transform-property-literals" "^7.2.0"
+ "@babel/plugin-transform-regenerator" "^7.4.5"
+ "@babel/plugin-transform-reserved-words" "^7.2.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.2.0"
+ "@babel/plugin-transform-spread" "^7.2.0"
+ "@babel/plugin-transform-sticky-regex" "^7.2.0"
+ "@babel/plugin-transform-template-literals" "^7.4.4"
+ "@babel/plugin-transform-typeof-symbol" "^7.2.0"
+ "@babel/plugin-transform-unicode-regex" "^7.4.4"
+ "@babel/types" "^7.6.0"
+ browserslist "^4.6.0"
+ core-js-compat "^3.1.1"
+ invariant "^2.2.2"
+ js-levenshtein "^1.1.3"
+ semver "^5.5.0"
+
+"@babel/runtime@^7.1.2":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.0.tgz#4fc1d642a9fd0299754e8b5de62c631cf5568205"
+ integrity sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
+"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6"
+ integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.6.0"
+ "@babel/types" "^7.6.0"
+
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516"
+ integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ==
+ dependencies:
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.6.0"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+ "@babel/parser" "^7.6.0"
+ "@babel/types" "^7.6.0"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.13"
+
+"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0":
+ version "7.6.1"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648"
+ integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
+"@types/estree@0.0.39":
+ version "0.0.39"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+
+"@types/node@*":
+ version "12.7.4"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04"
+ integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ==
+
+"@webassemblyjs/ast@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+ integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+
+"@webassemblyjs/floating-point-hex-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+ integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+
+"@webassemblyjs/helper-api-error@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+ integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+
+"@webassemblyjs/helper-buffer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+ integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+
+"@webassemblyjs/helper-code-frame@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+ integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/helper-fsm@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+ integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+
+"@webassemblyjs/helper-module-context@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+ integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/helper-wasm-bytecode@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+ integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
+
+"@webassemblyjs/helper-wasm-section@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+ integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+
+"@webassemblyjs/ieee754@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+ integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+ integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+ integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+
+"@webassemblyjs/wasm-edit@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+ integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/helper-wasm-section" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-opt" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/wasm-gen@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+ integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wasm-opt@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+ integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+
+"@webassemblyjs/wasm-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+ integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wast-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+ integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/floating-point-hex-parser" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-code-frame" "1.8.5"
+ "@webassemblyjs/helper-fsm" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+ integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+accepts@~1.3.4:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn-dynamic-import@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
+ integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=
+ dependencies:
+ acorn "^4.0.3"
+
+acorn-jsx@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+ integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
+ dependencies:
+ acorn "^3.0.4"
+
+acorn@^3.0.4:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+ integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
+
+acorn@^4.0.3:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
+ integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=
+
+acorn@^5.0.0, acorn@^5.5.0:
+ version "5.7.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+ integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+
+acorn@^6.0.1, acorn@^6.2.1:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
+ integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==
+
+after@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+ integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
+
+agent-base@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
+ integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
+ dependencies:
+ es6-promisify "^5.0.0"
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^1.0.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+ integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw=
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@^4.7.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+ajv@^6.1.0, ajv@^6.10.2:
+ version "6.10.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
+ integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+ansi-escapes@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+ integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-includes@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
+ integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.7.0"
+
+array-slice@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
+ integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arraybuffer.slice@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
+ integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async@^2.0.0, async@^2.1.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+babel-core@^7.0.0-bridge.0:
+ version "7.0.0-bridge.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
+ integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
+
+babel-eslint@^7.0.0:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827"
+ integrity sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-traverse "^6.23.1"
+ babel-types "^6.23.0"
+ babylon "^6.17.0"
+
+babel-loader@^8.0.4:
+ version "8.0.6"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb"
+ integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==
+ dependencies:
+ find-cache-dir "^2.0.0"
+ loader-utils "^1.0.2"
+ mkdirp "^0.5.1"
+ pify "^4.0.1"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-dev-expression@^0.2.1:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.2.tgz#c18de18a06150f9480edd151acbb01d2e65e999b"
+ integrity sha512-y32lfBif+c2FIh5dwGfcc/IfX5aw/Bru7Du7W2n17sJE/GJGAsmIk5DPW/8JOoeKpXW5evJfJOvRq5xkiS6vng==
+
+babel-plugin-dynamic-import-node@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f"
+ integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-runtime@^6.0.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babel-traverse@^6.23.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+ integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ debug "^2.6.8"
+ globals "^9.18.0"
+ invariant "^2.2.2"
+ lodash "^4.17.4"
+
+babel-types@^6.23.0, babel-types@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
+ dependencies:
+ babel-runtime "^6.26.0"
+ esutils "^2.0.2"
+ lodash "^4.17.4"
+ to-fast-properties "^1.0.3"
+
+babylon@^6.17.0, babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+ integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+backo2@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+ integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-arraybuffer@0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+ integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
+
+base64-js@^1.0.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
+base64id@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
+ integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+better-assert@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+ integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
+ dependencies:
+ callsite "1.0.0"
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+blob@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
+ integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==
+
+bluebird@^3.3.0, bluebird@^3.5.5:
+ version "3.5.5"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
+ integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+body-parser@^1.16.1:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+ integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+ dependencies:
+ bytes "3.1.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ on-finished "~2.3.0"
+ qs "6.7.0"
+ raw-body "2.4.0"
+ type-is "~1.6.17"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^0.1.2:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6"
+ integrity sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=
+ dependencies:
+ expand-range "^0.1.0"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-stdout@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+ integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^4.6.0, browserslist@^4.6.6:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17"
+ integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==
+ dependencies:
+ caniuse-lite "^1.0.30000989"
+ electron-to-chromium "^1.3.247"
+ node-releases "^1.1.29"
+
+browserstack-local@^1.3.7:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.4.2.tgz#5d2248384b8aa0fc521df32001127f010a92458d"
+ integrity sha512-fRaynjF0MvtyyfPRy2NFnVwxLyNtD28K/v9xRsIjUVf7xLc80NIm7Nfr3KXlFmWizhG91PL/UAOXlHkoxQjaNw==
+ dependencies:
+ https-proxy-agent "^2.2.1"
+ is-running "^2.0.0"
+ ps-tree "=1.1.1"
+ temp-fs "^0.9.9"
+
+browserstack@~1.5.1:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac"
+ integrity sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==
+ dependencies:
+ https-proxy-agent "^2.2.1"
+
+buffer-alloc-unsafe@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+ integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+ integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+ dependencies:
+ buffer-alloc-unsafe "^1.1.0"
+ buffer-fill "^1.0.0"
+
+buffer-fill@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+ integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e"
+ integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.1.0, bytes@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^12.0.2:
+ version "12.0.3"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390"
+ integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
+ dependencies:
+ callsites "^0.2.0"
+
+callsite@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+ integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+ integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+caniuse-lite@^1.0.30000989:
+ version "1.0.30000989"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9"
+ integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chokidar@^2.0.2, chokidar@^2.0.3:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chownr@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
+ integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+circular-json@^0.3.1:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+ integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
+
+circular-json@^0.5.5:
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d"
+ integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cli-cursor@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+ integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+colors@^1.1.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
+ integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==
+
+combine-lists@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6"
+ integrity sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=
+ dependencies:
+ lodash "^4.5.0"
+
+commander@2.15.1:
+ version "2.15.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
+ integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
+
+commander@^2.19.0, commander@^2.20.0, commander@~2.20.0:
+ version "2.20.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
+ integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+ integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
+
+component-emitter@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+ integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0, concat-stream@^1.5.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+connect@^3.6.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8"
+ integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==
+ dependencies:
+ debug "2.6.9"
+ finalhandler "1.1.2"
+ parseurl "~1.3.3"
+ utils-merge "1.0.1"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-source-map@^1.1.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+ integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js-compat@^3.1.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150"
+ integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==
+ dependencies:
+ browserslist "^4.6.6"
+ semver "^6.3.0"
+
+core-js@^2.2.0, core-js@^2.4.0:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
+ integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+custom-event@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
+ integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=
+
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
+date-format@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8"
+ integrity sha1-YV6CjiM90aubua4JUODOzPpuytg=
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@3.1.0, debug@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.0.0, debug@^3.1.0, debug@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.0.0, decamelize@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+di@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
+ integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=
+
+diff@3.5.0, diff@^3.2.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+ integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-serialize@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
+ integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=
+ dependencies:
+ custom-event "~1.0.0"
+ ent "~2.2.0"
+ extend "^3.0.0"
+ void-elements "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+duplexer@^0.1.1, duplexer@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-to-chromium@^1.3.247:
+ version "1.3.252"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.252.tgz#5b6261965b564a0f4df0f1c86246487897017f52"
+ integrity sha512-NWJ5TztDnjExFISZHFwpoJjMbLUifsNBnx7u2JI0gCw6SbKyQYYWWtBHasO/jPtHym69F4EZuTpRNGN11MT/jg==
+
+elliptic@^6.0.0:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b"
+ integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+ dependencies:
+ once "^1.4.0"
+
+engine.io-client@~3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36"
+ integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==
+ dependencies:
+ component-emitter "1.2.1"
+ component-inherit "0.0.3"
+ debug "~3.1.0"
+ engine.io-parser "~2.1.1"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ ws "~3.3.1"
+ xmlhttprequest-ssl "~1.5.4"
+ yeast "0.1.2"
+
+engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6"
+ integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "~0.0.7"
+ base64-arraybuffer "0.1.5"
+ blob "0.0.5"
+ has-binary2 "~1.0.2"
+
+engine.io@~3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2"
+ integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==
+ dependencies:
+ accepts "~1.3.4"
+ base64id "1.0.0"
+ cookie "0.3.1"
+ debug "~3.1.0"
+ engine.io-parser "~2.1.0"
+ ws "~3.3.1"
+
+enhanced-resolve@^3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
+ integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ object-assign "^4.0.1"
+ tapable "^0.2.7"
+
+enhanced-resolve@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
+ integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ tapable "^1.0.0"
+
+ent@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+ integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0=
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.12.0, es-abstract@^1.7.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.1.tgz#6e8d84b445ec9c610781e74a6d52cc31aac5b4ca"
+ integrity sha512-cp/Tb1oA/rh2X7vqeSOvM+TSo3UkJLX70eNihgVEvnzwAgikjkTFr/QVgRCaxjm0knCNQzNoxxxcw2zO2LJdZA==
+ dependencies:
+ es-to-primitive "^1.2.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.0"
+ is-callable "^1.1.4"
+ is-regex "^1.0.4"
+ object-inspect "^1.6.0"
+ object-keys "^1.1.1"
+ string.prototype.trimleft "^2.0.0"
+ string.prototype.trimright "^2.0.0"
+
+es-to-primitive@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+ integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.51, es5-ext@~0.10.14:
+ version "0.10.51"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.51.tgz#ed2d7d9d48a12df86e0299287e93a09ff478842f"
+ integrity sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==
+ dependencies:
+ es6-iterator "~2.0.3"
+ es6-symbol "~3.1.1"
+ next-tick "^1.0.0"
+
+es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
+es6-map@^0.1.3:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+ integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-set "~0.1.5"
+ es6-symbol "~3.1.1"
+ event-emitter "~0.3.5"
+
+es6-promise@^4.0.3:
+ version "4.2.8"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+ integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
+
+es6-promisify@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
+ integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
+ dependencies:
+ es6-promise "^4.0.3"
+
+es6-set@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+ integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-symbol "3.1.1"
+ event-emitter "~0.3.5"
+
+es6-symbol@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+ integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+es6-symbol@^3.1.1, es6-symbol@~3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.2.tgz#859fdd34f32e905ff06d752e7171ddd4444a7ed1"
+ integrity sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==
+ dependencies:
+ d "^1.0.1"
+ es5-ext "^0.10.51"
+
+es6-weak-map@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
+ integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
+ dependencies:
+ d "1"
+ es5-ext "^0.10.46"
+ es6-iterator "^2.0.3"
+ es6-symbol "^3.1.1"
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escope@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=
+ dependencies:
+ es6-map "^0.1.3"
+ es6-weak-map "^2.0.1"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-import-resolver-node@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
+ integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.5.0"
+
+eslint-module-utils@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c"
+ integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==
+ dependencies:
+ debug "^2.6.8"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-import@^2.0.0:
+ version "2.18.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6"
+ integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==
+ dependencies:
+ array-includes "^3.0.3"
+ contains-path "^0.1.0"
+ debug "^2.6.9"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.2"
+ eslint-module-utils "^2.4.0"
+ has "^1.0.3"
+ minimatch "^3.0.4"
+ object.values "^1.1.0"
+ read-pkg-up "^2.0.0"
+ resolve "^1.11.0"
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint@^3.3.0:
+ version "3.19.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
+ integrity sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=
+ dependencies:
+ babel-code-frame "^6.16.0"
+ chalk "^1.1.3"
+ concat-stream "^1.5.2"
+ debug "^2.1.1"
+ doctrine "^2.0.0"
+ escope "^3.6.0"
+ espree "^3.4.0"
+ esquery "^1.0.0"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ glob "^7.0.3"
+ globals "^9.14.0"
+ ignore "^3.2.0"
+ imurmurhash "^0.1.4"
+ inquirer "^0.12.0"
+ is-my-json-valid "^2.10.0"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.5.1"
+ json-stable-stringify "^1.0.0"
+ levn "^0.3.0"
+ lodash "^4.0.0"
+ mkdirp "^0.5.0"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.1"
+ pluralize "^1.2.1"
+ progress "^1.1.8"
+ require-uncached "^1.0.2"
+ shelljs "^0.7.5"
+ strip-bom "^3.0.0"
+ strip-json-comments "~2.0.1"
+ table "^3.7.8"
+ text-table "~0.2.0"
+ user-home "^2.0.0"
+
+espree@^3.4.0:
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
+ integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
+ dependencies:
+ acorn "^5.5.0"
+ acorn-jsx "^3.0.0"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+ integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estree-walker@^0.6.0, estree-walker@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
+ integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+event-emitter@~0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+ integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+event-stream@=3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
+ integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=
+ dependencies:
+ duplexer "~0.1.1"
+ from "~0"
+ map-stream "~0.1.0"
+ pause-stream "0.0.11"
+ split "0.3"
+ stream-combiner "~0.0.4"
+ through "~2.3.1"
+
+eventemitter3@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+ integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+
+events@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
+ integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+ integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=
+
+expand-braces@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
+ integrity sha1-SIsdHSRRyz06axks/AMPRMWFX+o=
+ dependencies:
+ array-slice "^0.2.3"
+ array-unique "^0.2.1"
+ braces "^0.1.2"
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-range@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
+ integrity sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=
+ dependencies:
+ is-number "^0.1.1"
+ repeat-string "^0.2.2"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+expect@^21.0.0:
+ version "21.2.1"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b"
+ integrity sha512-orfQQqFRTX0jH7znRIGi8ZMR8kTNpXklTTz8+HGTpmTKZo3Occ6JNB5FXMb8cRuiiC/GyDqsr30zUa66ACYlYw==
+ dependencies:
+ ansi-styles "^3.2.0"
+ jest-diff "^21.2.1"
+ jest-get-type "^21.2.0"
+ jest-matcher-utils "^21.2.1"
+ jest-message-util "^21.2.1"
+ jest-regex-util "^21.2.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+ integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+ integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+figgy-pudding@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+ integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+
+figures@^1.3.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+ integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
+
+fill-range@^2.1.0:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
+ integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^3.0.0"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+finalhandler@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
+ unpipe "~1.0.0"
+
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+flat-cache@^1.2.1:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
+ integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
+ dependencies:
+ circular-json "^0.3.1"
+ graceful-fs "^4.1.2"
+ rimraf "~2.6.2"
+ write "^0.2.1"
+
+flatted@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
+ integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+follow-redirects@^1.0.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f"
+ integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==
+ dependencies:
+ debug "^3.0.0"
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
+ dependencies:
+ for-in "^1.0.1"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+from@~0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
+ integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=
+
+fs-access@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
+ integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=
+ dependencies:
+ null-check "^1.0.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
+ integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==
+ dependencies:
+ minipass "^2.2.1"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
+ integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
+ dependencies:
+ nan "^2.12.1"
+ node-pre-gyp "^0.12.0"
+
+function-bind@^1.0.2, function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
+ integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
+ dependencies:
+ is-property "^1.0.2"
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
+ dependencies:
+ is-property "^1.0.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob@7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
+ dependencies:
+ 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"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+ integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ dependencies:
+ 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"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^9.14.0, globals@^9.18.0:
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+ integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
+ integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
+
+growl@1.10.5:
+ version "1.10.5"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
+ integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
+
+gzip-size@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
+ integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
+ dependencies:
+ duplexer "^0.1.1"
+ pify "^4.0.1"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-binary2@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
+ integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==
+ dependencies:
+ isarray "2.0.1"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+ integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
+
+has-flag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+ integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+ integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.1, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+he@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+ integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.8.4"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546"
+ integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==
+
+http-errors@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-proxy@^1.13.0:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
+ integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==
+ dependencies:
+ eventemitter3 "^3.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+https-proxy-agent@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz#271ea8e90f836ac9f119daccd39c19ff7dfb0793"
+ integrity sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==
+ dependencies:
+ agent-base "^4.3.0"
+ debug "^3.1.0"
+
+iconv-lite@0.4.24, iconv-lite@^0.4.4:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore-walk@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b"
+ integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw==
+ dependencies:
+ minimatch "^3.0.4"
+
+ignore@^3.2.0:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+inquirer@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+ integrity sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=
+ dependencies:
+ ansi-escapes "^1.1.0"
+ ansi-regex "^2.0.0"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^2.0.0"
+ figures "^1.3.5"
+ lodash "^4.3.0"
+ readline2 "^1.0.1"
+ run-async "^0.1.0"
+ rx-lite "^3.1.2"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
+interpret@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+ integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
+invariant@^2.2.2:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+ integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+ integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+ integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
+
+is-my-ip-valid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824"
+ integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==
+
+is-my-json-valid@^2.10.0:
+ version "2.20.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a"
+ integrity sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ is-my-ip-valid "^1.0.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-number@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
+ integrity sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=
+
+is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+ integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-property@^1.0.0, is-property@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-regex@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+ dependencies:
+ has "^1.0.1"
+
+is-resolvable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+ integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-running@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-running/-/is-running-2.1.0.tgz#30a73ff5cc3854e4fc25490809e9f5abf8de09e0"
+ integrity sha1-MKc/9cw4VOT8JUkICen1q/jeCeA=
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-symbol@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+ integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+ dependencies:
+ has-symbols "^1.0.0"
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+is-wsl@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.0.tgz#94369bbeb2249ef07b831b1b08590e686330ccbb"
+ integrity sha512-pFTjpv/x5HRj8kbZ/Msxi9VrvtOMRBqaDi3OIcbwPI3OuH+r3lLxVWukLITBaOGJIbA/w2+M1eVmVa4XNQlAmQ==
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isarray@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
+ integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
+
+isbinaryfile@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80"
+ integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==
+ dependencies:
+ buffer-alloc "^1.2.0"
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+jest-diff@^21.2.1:
+ version "21.2.1"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f"
+ integrity sha512-E5fu6r7PvvPr5qAWE1RaUwIh/k6Zx/3OOkZ4rk5dBJkEWRrUuSgbMt2EO8IUTPTd6DOqU3LW6uTIwX5FRvXoFA==
+ dependencies:
+ chalk "^2.0.1"
+ diff "^3.2.0"
+ jest-get-type "^21.2.0"
+ pretty-format "^21.2.1"
+
+jest-diff@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d"
+ integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==
+ dependencies:
+ chalk "^2.0.1"
+ diff "^3.2.0"
+ jest-get-type "^22.1.0"
+ pretty-format "^23.6.0"
+
+jest-get-type@^21.2.0:
+ version "21.2.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23"
+ integrity sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q==
+
+jest-get-type@^22.1.0:
+ version "22.4.3"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
+ integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==
+
+jest-matcher-utils@^21.2.1:
+ version "21.2.1"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64"
+ integrity sha512-kn56My+sekD43dwQPrXBl9Zn9tAqwoy25xxe7/iY4u+mG8P3ALj5IK7MLHZ4Mi3xW7uWVCjGY8cm4PqgbsqMCg==
+ dependencies:
+ chalk "^2.0.1"
+ jest-get-type "^21.2.0"
+ pretty-format "^21.2.1"
+
+jest-message-util@^21.2.1:
+ version "21.2.1"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe"
+ integrity sha512-EbC1X2n0t9IdeMECJn2BOg7buOGivCvVNjqKMXTzQOu7uIfLml+keUfCALDh8o4rbtndIeyGU8/BKfoTr/LVDQ==
+ dependencies:
+ chalk "^2.0.1"
+ micromatch "^2.3.11"
+ slash "^1.0.0"
+
+jest-mock@^21.0.0:
+ version "21.2.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f"
+ integrity sha512-aZDfyVf0LEoABWiY6N0d+O963dUQSyUa4qgzurHR3TBDPen0YxKCJ6l2i7lQGh1tVdsuvdrCZ4qPj+A7PievCw==
+
+jest-regex-util@^21.2.0:
+ version "21.2.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530"
+ integrity sha512-BKQ1F83EQy0d9Jen/mcVX7D+lUt2tthhK/2gDWRgLDJRNOdRgSp1iVqFxP8EN1ARuypvDflRfPzYT8fQnoBQFQ==
+
+jest-worker@^24.0.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
+ integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^6.1.0"
+
+js-levenshtein@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
+ integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.5.1:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-loader@^0.5.4:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+ integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==
+
+json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
+ dependencies:
+ jsonify "~0.0.0"
+
+json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850"
+ integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
+ dependencies:
+ minimist "^1.2.0"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+ integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
+
+karma-browserstack-launcher@^1.3.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/karma-browserstack-launcher/-/karma-browserstack-launcher-1.5.1.tgz#4caf4cd476a76d3c88205818d8994fc170a68fb4"
+ integrity sha512-zt9Ukow5A9WZHZXCFVO/h5kRsAdaZYeMNJK9Uan8v42amQXt3B/DZVxl24NCcAIxufKjW13UWd9iJ9knG9OCYw==
+ dependencies:
+ browserstack "~1.5.1"
+ browserstack-local "^1.3.7"
+ q "~1.5.0"
+
+karma-chrome-launcher@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf"
+ integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==
+ dependencies:
+ fs-access "^1.0.0"
+ which "^1.2.1"
+
+karma-firefox-launcher@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.2.0.tgz#64fe03dd10300f9754d48f9ebfbf31f6c94a200c"
+ integrity sha512-j9Zp8M8+VLq1nI/5xZGfzeaEPtGQ/vk3G+Y8vpmFWLvKLNZ2TDjD6cu2dUu7lDbu1HXNgatsAX4jgCZTkR9qhQ==
+ dependencies:
+ is-wsl "^2.1.0"
+
+karma-mocha-reporter@^2.2.5:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560"
+ integrity sha1-FRIAlejtgZGG5HoLAS8810GJVWA=
+ dependencies:
+ chalk "^2.1.0"
+ log-symbols "^2.1.0"
+ strip-ansi "^4.0.0"
+
+karma-mocha@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-1.3.0.tgz#eeaac7ffc0e201eb63c467440d2b69c7cf3778bf"
+ integrity sha1-7qrH/8DiAetjxGdEDStpx883eL8=
+ dependencies:
+ minimist "1.2.0"
+
+karma-sourcemap-loader@^0.3.7:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8"
+ integrity sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=
+ dependencies:
+ graceful-fs "^4.1.2"
+
+karma-webpack@^3.0.5:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-3.0.5.tgz#1ff1e3a690fb73ae95ee95f9ab58f341cfc7b40f"
+ integrity sha512-nRudGJWstvVuA6Tbju9tyGUfXTtI1UXMXoRHVmM2/78D0q6s/Ye2IC157PKNDC15PWFGR0mVIRtWLAdcfsRJoA==
+ dependencies:
+ async "^2.0.0"
+ babel-runtime "^6.0.0"
+ loader-utils "^1.0.0"
+ lodash "^4.0.0"
+ source-map "^0.5.6"
+ webpack-dev-middleware "^2.0.6"
+
+karma@^3.1.3:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/karma/-/karma-3.1.4.tgz#3890ca9722b10d1d14b726e1335931455788499e"
+ integrity sha512-31Vo8Qr5glN+dZEVIpnPCxEGleqE0EY6CtC2X9TagRV3rRQ3SNrvfhddICkJgUK3AgqpeKSZau03QumTGhGoSw==
+ dependencies:
+ bluebird "^3.3.0"
+ body-parser "^1.16.1"
+ chokidar "^2.0.3"
+ colors "^1.1.0"
+ combine-lists "^1.0.0"
+ connect "^3.6.0"
+ core-js "^2.2.0"
+ di "^0.0.1"
+ dom-serialize "^2.2.0"
+ expand-braces "^0.1.1"
+ flatted "^2.0.0"
+ glob "^7.1.1"
+ graceful-fs "^4.1.2"
+ http-proxy "^1.13.0"
+ isbinaryfile "^3.0.0"
+ lodash "^4.17.5"
+ log4js "^3.0.0"
+ mime "^2.3.1"
+ minimatch "^3.0.2"
+ optimist "^0.6.1"
+ qjobs "^1.1.4"
+ range-parser "^1.2.0"
+ rimraf "^2.6.0"
+ safe-buffer "^5.0.1"
+ socket.io "2.1.1"
+ source-map "^0.6.1"
+ tmp "0.0.33"
+ useragent "2.3.0"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
+ dependencies:
+ invert-kv "^1.0.0"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+loader-runner@^2.3.0, loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+ integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^2.0.0"
+ json5 "^1.0.1"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+lodash@^4.0.0, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+log-symbols@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+ integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+ dependencies:
+ chalk "^2.0.1"
+
+log4js@^3.0.0:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/log4js/-/log4js-3.0.6.tgz#e6caced94967eeeb9ce399f9f8682a4b2b28c8ff"
+ integrity sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==
+ dependencies:
+ circular-json "^0.5.5"
+ date-format "^1.2.0"
+ debug "^3.1.0"
+ rfdc "^1.1.2"
+ streamroller "0.7.0"
+
+loglevelnext@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2"
+ integrity sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==
+ dependencies:
+ es6-symbol "^3.1.1"
+ object.assign "^4.1.0"
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0, loose-envify@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loud-rejection@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lru-cache@4.1.x, lru-cache@^4.0.1:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+magic-string@^0.25.2:
+ version "0.25.3"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.3.tgz#34b8d2a2c7fec9d9bdf9929a3fd81d271ef35be9"
+ integrity sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==
+ dependencies:
+ sourcemap-codec "^1.4.4"
+
+make-dir@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+mamacro@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+ integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-stream@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
+ integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+math-random@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
+ integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+mem@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+ integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+micromatch@^2.3.11:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.40.0:
+ version "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-types@~2.1.24:
+ 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@^2.1.0, mime@^2.3.1:
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
+ integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@1.2.0, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
+minipass@^2.2.1, minipass@^2.3.5:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.0.tgz#dddb1d001976978158a05badfcbef4a771612857"
+ integrity sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
+ integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
+ dependencies:
+ minipass "^2.2.1"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+mocha@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
+ integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==
+ dependencies:
+ browser-stdout "1.3.1"
+ commander "2.15.1"
+ debug "3.1.0"
+ diff "3.5.0"
+ escape-string-regexp "1.0.5"
+ glob "7.1.2"
+ growl "1.10.5"
+ he "1.1.1"
+ minimatch "3.0.4"
+ mkdirp "0.5.1"
+ supports-color "5.4.0"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mute-stream@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+ integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=
+
+nan@^2.12.1:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+needle@^2.2.1:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
+ integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
+ dependencies:
+ debug "^3.2.6"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0, neo-async@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+next-tick@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+ integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
+
+node-libs-browser@^2.0.0, node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-pre-gyp@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
+ integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+node-releases@^1.1.29:
+ version "1.1.29"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.29.tgz#86a57c6587a30ecd6726449e5d293466b0a0bb86"
+ integrity sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ==
+ dependencies:
+ semver "^5.3.0"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1, normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+npm-bundled@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
+ integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
+
+npm-packlist@^1.1.6:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44"
+ integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+null-check@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
+ integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-component@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+ integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
+ integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
+ integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.12.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+ integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=
+
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-locale@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+ integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
+ dependencies:
+ execa "^0.7.0"
+ lcid "^1.0.0"
+ mem "^1.1.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
+ integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@~1.0.5:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
+ integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parse-asn1@^5.0.0:
+ version "5.1.4"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc"
+ integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parseqs@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+ integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseuri@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+ integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+pause-stream@0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
+ integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=
+ dependencies:
+ through "~2.3"
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+pluralize@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+ integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+pretty-format@^21.2.1:
+ version "21.2.1"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36"
+ integrity sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==
+ dependencies:
+ ansi-regex "^3.0.0"
+ ansi-styles "^3.2.0"
+
+pretty-format@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
+ integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==
+ dependencies:
+ ansi-regex "^3.0.0"
+ ansi-styles "^3.2.0"
+
+private@^0.1.6:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+ integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+ integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+ps-tree@=1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.1.tgz#5f1ba35455b8c25eeb718d04c37de1555d96d3db"
+ integrity sha512-kef7fYYSKVqQffmzTMsVcUD1ObNJMp8sNSmHGlGKsZQyL/ht9MZKk86u0Rd1NhpTOAuhqwKCLLpktwkqz+MF8A==
+ dependencies:
+ event-stream "=3.3.4"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@~1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qjobs@^1.1.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071"
+ integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==
+
+qs@6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+randomatic@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
+ integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
+ dependencies:
+ is-number "^4.0.0"
+ kind-of "^6.0.0"
+ math-random "^1.0.1"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@^1.0.3, range-parser@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+readline2@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+ integrity sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ mute-stream "0.0.5"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
+ dependencies:
+ resolve "^1.1.6"
+
+regenerate-unicode-properties@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
+ integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+ integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.2:
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
+ integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
+
+regenerator-transform@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb"
+ integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==
+ dependencies:
+ private "^0.1.6"
+
+regex-cache@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
+ dependencies:
+ is-equal-shallow "^0.1.3"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp-tree@^0.1.13:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.13.tgz#5b19ab9377edc68bc3679256840bb29afc158d7f"
+ integrity sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw==
+
+regexpu-core@^4.5.4:
+ version "4.5.5"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411"
+ integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.1.0"
+ regjsgen "^0.5.0"
+ regjsparser "^0.6.0"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.1.0"
+
+regjsgen@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
+ integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==
+
+regjsparser@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c"
+ integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==
+ dependencies:
+ jsesc "~0.5.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae"
+ integrity sha1-x6jTI2BoNiBZp+RlH8aITosftK4=
+
+repeat-string@^1.5.2, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+require-uncached@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+ integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
+
+resolve-pathname@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
+ integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
+ integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
+ dependencies:
+ path-parse "^1.0.6"
+
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rfdc@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2"
+ integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@~2.5.2:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=
+ dependencies:
+ glob "^7.0.5"
+
+rimraf@~2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rollup-plugin-babel@^4.0.3:
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.3.tgz#7eb5ac16d9b5831c3fd5d97e8df77ba25c72a2aa"
+ integrity sha512-tKzWOCmIJD/6aKNz0H1GMM+lW1q9KyFubbWzGiOG540zxPPifnEAHTZwjo0g991Y+DyOZcLqBgqOdqazYE5fkw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ rollup-pluginutils "^2.8.1"
+
+rollup-plugin-commonjs@^9.2.0:
+ version "9.3.4"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz#2b3dddbbbded83d45c36ff101cdd29e924fd23bc"
+ integrity sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==
+ dependencies:
+ estree-walker "^0.6.0"
+ magic-string "^0.25.2"
+ resolve "^1.10.0"
+ rollup-pluginutils "^2.6.0"
+
+rollup-plugin-node-resolve@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89"
+ integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==
+ dependencies:
+ builtin-modules "^2.0.0"
+ is-module "^1.0.0"
+ resolve "^1.1.6"
+
+rollup-plugin-replace@^2.0.0, rollup-plugin-replace@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz#f41ae5372e11e7a217cde349c8b5d5fd115e70e3"
+ integrity sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA==
+ dependencies:
+ magic-string "^0.25.2"
+ rollup-pluginutils "^2.6.0"
+
+rollup-plugin-size-snapshot@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-size-snapshot/-/rollup-plugin-size-snapshot-0.7.0.tgz#f0070e4aeee736f45f8eb6b96e12e6238705c13b"
+ integrity sha512-wlFRHInOfJZbXHWA4rftymqHuVDCeKUhJF3vuBZuU5y+O0LAj6RQM7vGn2/UoLImENFci31ff3pnKjW36DDP2A==
+ dependencies:
+ acorn "^6.0.1"
+ bytes "^3.0.0"
+ chalk "^2.4.1"
+ gzip-size "^5.0.0"
+ jest-diff "^23.6.0"
+ memory-fs "^0.4.1"
+ rollup-plugin-replace "^2.0.0"
+ terser "^3.8.2"
+ webpack "^4.19.0"
+
+rollup-plugin-uglify@^6.0.0:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.3.tgz#e3f776171344b580bec6c6ab8888622b67099457"
+ integrity sha512-PIv3CfhZJlOG8C85N0GX+uK09TPggmAS6Nk6fpp2ELzDAV5VUhNzOURDU2j7+MwuRr0zq9IZttUTADc/jH8Gkg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ jest-worker "^24.0.0"
+ serialize-javascript "^1.9.0"
+ uglify-js "^3.4.9"
+
+rollup-pluginutils@^2.6.0, rollup-pluginutils@^2.8.1:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97"
+ integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==
+ dependencies:
+ estree-walker "^0.6.1"
+
+rollup@^0.66.6:
+ version "0.66.6"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.66.6.tgz#ce7d6185beb7acea644ce220c25e71ae03275482"
+ integrity sha512-J7/SWanrcb83vfIHqa8+aVVGzy457GcjA6GVZEnD0x2u4OnOd0Q1pCrEoNe8yLwM6z6LZP02zBT2uW0yh5TqOw==
+ dependencies:
+ "@types/estree" "0.0.39"
+ "@types/node" "*"
+
+run-async@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+ integrity sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=
+ dependencies:
+ once "^1.3.0"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+rx-lite@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+ integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+serialize-javascript@^1.7.0, serialize-javascript@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb"
+ integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shelljs@^0.7.5:
+ version "0.7.8"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
+ integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM=
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+ integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+socket.io-adapter@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
+ integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=
+
+socket.io-client@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f"
+ integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==
+ dependencies:
+ backo2 "1.0.2"
+ base64-arraybuffer "0.1.5"
+ component-bind "1.0.0"
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ engine.io-client "~3.2.0"
+ has-binary2 "~1.0.2"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ socket.io-parser "~3.2.0"
+ to-array "0.1.4"
+
+socket.io-parser@~3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077"
+ integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ isarray "2.0.1"
+
+socket.io@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980"
+ integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==
+ dependencies:
+ debug "~3.1.0"
+ engine.io "~3.2.0"
+ has-binary2 "~1.0.2"
+ socket.io-adapter "~1.1.0"
+ socket.io-client "2.1.1"
+ socket.io-parser "~3.2.0"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@~0.5.10, source-map-support@~0.5.12:
+ version "0.5.13"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
+ integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sourcemap-codec@^1.4.4:
+ version "1.4.6"
+ resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9"
+ integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==
+
+spdx-correct@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+ integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+ integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+split@0.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
+ integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=
+ dependencies:
+ through "2"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-combiner@~0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
+ integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=
+ dependencies:
+ duplexer "~0.1.1"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+ integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
+
+streamroller@0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b"
+ integrity sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==
+ dependencies:
+ date-format "^1.2.0"
+ debug "^3.1.0"
+ mkdirp "^0.5.1"
+ readable-stream "^2.3.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string.prototype.trimleft@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz#68b6aa8e162c6a80e76e3a8a0c2e747186e271ff"
+ integrity sha1-aLaqjhYsaoDnbjqKDC50cYbicf8=
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.0.2"
+
+string.prototype.trimright@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz#ab4a56d802a01fbe7293e11e84f24dc8164661dd"
+ integrity sha1-q0pW2AKgH75yk+EehPJNyBZGYd0=
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.0.2"
+
+string_decoder@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+supports-color@5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
+ integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^4.2.1:
+ 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.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+table@^3.7.8:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+ integrity sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=
+ dependencies:
+ ajv "^4.7.0"
+ ajv-keywords "^1.0.0"
+ chalk "^1.1.1"
+ lodash "^4.0.0"
+ slice-ansi "0.0.4"
+ string-width "^2.0.0"
+
+tapable@^0.2.7:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8"
+ integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tar@^4:
+ version "4.4.10"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1"
+ integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.5"
+ minizlib "^1.2.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.3"
+
+temp-fs@^0.9.9:
+ version "0.9.9"
+ resolved "https://registry.yarnpkg.com/temp-fs/-/temp-fs-0.9.9.tgz#8071730437870720e9431532fe2814364f8803d7"
+ integrity sha1-gHFzBDeHByDpQxUy/igUNk+IA9c=
+ dependencies:
+ rimraf "~2.5.2"
+
+terser-webpack-plugin@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4"
+ integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^1.7.0"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^3.8.2:
+ version "3.17.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2"
+ integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==
+ dependencies:
+ commander "^2.19.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.10"
+
+terser@^4.1.2:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.2.1.tgz#1052cfe17576c66e7bc70fcc7119f22b155bdac1"
+ integrity sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+text-table@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+through2@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through@2, through@^2.3.6, through@~2.3, through@~2.3.1:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+timers-browserify@^2.0.4:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+tiny-invariant@^1.0.2:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73"
+ integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==
+
+tiny-warning@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+ integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tmp@0.0.33, tmp@0.0.x:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+ integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+ integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+ integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+
+tslib@^1.9.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+ integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-is@~1.6.17:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+type@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.0.3.tgz#16f5d39f27a2d28d86e48f8981859e9d3296c179"
+ integrity sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+uglify-js@^2.8.29:
+ version "2.8.29"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+ integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
+ dependencies:
+ source-map "~0.5.1"
+ yargs "~3.10.0"
+ optionalDependencies:
+ uglify-to-browserify "~1.0.0"
+
+uglify-js@^3.4.9:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5"
+ integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==
+ dependencies:
+ commander "~2.20.0"
+ source-map "~0.6.1"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+uglifyjs-webpack-plugin@^0.4.6:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309"
+ integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=
+ dependencies:
+ source-map "^0.5.6"
+ uglify-js "^2.8.29"
+ webpack-sources "^1.0.1"
+
+ultron@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
+ integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277"
+ integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57"
+ integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-join@^2.0.2:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728"
+ integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+user-home@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+ integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8=
+ dependencies:
+ os-homedir "^1.0.0"
+
+useragent@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972"
+ integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==
+ dependencies:
+ lru-cache "4.1.x"
+ tmp "0.0.x"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@^3.1.0:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
+ integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+value-equal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
+ integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
+
+vm-browserify@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019"
+ integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==
+
+void-elements@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
+ integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
+
+watchpack@^1.4.0, watchpack@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
+ dependencies:
+ chokidar "^2.0.2"
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+
+webpack-dev-middleware@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz#a51692801e8310844ef3e3790e1eacfe52326fd4"
+ integrity sha512-tj5LLD9r4tDuRIDa5Mu9lnY2qBBehAITv6A9irqXhw/HQquZgTx3BCd57zYbU2gMDnncA49ufK2qVQSbaKJwOw==
+ dependencies:
+ loud-rejection "^1.6.0"
+ memory-fs "~0.4.1"
+ mime "^2.1.0"
+ path-is-absolute "^1.0.0"
+ range-parser "^1.0.3"
+ url-join "^2.0.2"
+ webpack-log "^1.0.1"
+
+webpack-log@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d"
+ integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==
+ dependencies:
+ chalk "^2.1.0"
+ log-symbols "^2.1.0"
+ loglevelnext "^1.0.1"
+ uuid "^3.1.0"
+
+webpack-sources@^1.0.1, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^3.12.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74"
+ integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==
+ dependencies:
+ acorn "^5.0.0"
+ acorn-dynamic-import "^2.0.0"
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+ async "^2.1.2"
+ enhanced-resolve "^3.4.0"
+ escope "^3.6.0"
+ interpret "^1.0.0"
+ json-loader "^0.5.4"
+ json5 "^0.5.1"
+ loader-runner "^2.3.0"
+ loader-utils "^1.1.0"
+ memory-fs "~0.4.1"
+ mkdirp "~0.5.0"
+ node-libs-browser "^2.0.0"
+ source-map "^0.5.3"
+ supports-color "^4.2.1"
+ tapable "^0.2.7"
+ uglifyjs-webpack-plugin "^0.4.6"
+ watchpack "^1.4.0"
+ webpack-sources "^1.0.1"
+ yargs "^8.0.2"
+
+webpack@^4.19.0:
+ version "4.39.3"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.39.3.tgz#a02179d1032156b713b6ec2da7e0df9d037def50"
+ integrity sha512-BXSI9M211JyCVc3JxHWDpze85CvjC842EvpRsVTc/d15YJGlox7GIDd38kJgWrb3ZluyvIjgenbLDMBQPDcxYQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/wasm-edit" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ acorn "^6.2.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.1"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.1"
+ watchpack "^1.6.0"
+ webpack-sources "^1.4.1"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.1, which@^1.2.9:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@~3.3.1:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
+ integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==
+ dependencies:
+ async-limiter "~1.0.0"
+ safe-buffer "~5.1.0"
+ ultron "~1.1.0"
+
+xmlhttprequest-ssl@~1.5.4:
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
+ integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+ integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+
+y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
+ integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
+
+yargs-parser@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
+ integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k=
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
+ integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A=
+ dependencies:
+ camelcase "^4.1.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^2.0.0"
+ read-pkg-up "^2.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^7.0.0"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+ integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
diff --git a/preact-router/.babelrc b/preact-router/.babelrc
new file mode 100644
index 0000000..37a1945
--- /dev/null
+++ b/preact-router/.babelrc
@@ -0,0 +1,9 @@
+{
+ "presets": ["es2015", "stage-0"],
+ "plugins": [
+ "transform-class-properties",
+ ["transform-es2015-classes", { "loose":true }],
+ "transform-object-assign",
+ ["transform-react-jsx", { "pragma":"h" }]
+ ]
+}
diff --git a/preact-router/.eslintrc b/preact-router/.eslintrc
new file mode 100644
index 0000000..84f71a1
--- /dev/null
+++ b/preact-router/.eslintrc
@@ -0,0 +1,66 @@
+{
+ "parser": "babel-eslint",
+ "extends": "eslint:recommended",
+ "plugins": [
+ "react"
+ ],
+ "env": {
+ "browser": true,
+ "mocha": true,
+ "es6": true,
+ "node": true
+ },
+ "parserOptions": {
+ "ecmaFeatures": {
+ "modules": true,
+ "jsx": true
+ }
+ },
+ "globals": {
+ "chai": true,
+ "sinon": true,
+ "expect": true
+ },
+ "rules": {
+ "react/jsx-uses-react": 2,
+ "react/jsx-uses-vars": 2,
+ "no-unused-vars": [1, { "varsIgnorePattern": "^h$" }],
+ "no-cond-assign": 1,
+ "no-empty": 0,
+ "no-console": 1,
+ "semi": 2,
+ "camelcase": 0,
+ "comma-style": 2,
+ "comma-dangle": [2, "never"],
+ "indent": [2, "tab", {"SwitchCase": 1}],
+ "no-mixed-spaces-and-tabs": [2, "smart-tabs"],
+ "no-trailing-spaces": [2, { "skipBlankLines": true }],
+ "no-eval": 2,
+ "no-implied-eval": 2,
+ "no-new-func": 2,
+ "guard-for-in": 2,
+ "eqeqeq": 0,
+ "no-else-return": 2,
+ "no-redeclare": 2,
+ "no-dupe-keys": 2,
+ "radix": 2,
+ "strict": [2, "never"],
+ "no-shadow": 0,
+ "callback-return": [1, ["callback", "cb", "next", "done"]],
+ "no-delete-var": 2,
+ "no-undef-init": 2,
+ "no-shadow-restricted-names": 2,
+ "handle-callback-err": 0,
+ "no-lonely-if": 2,
+ "keyword-spacing": 2,
+ "constructor-super": 2,
+ "no-this-before-super": 2,
+ "no-dupe-class-members": 2,
+ "no-const-assign": 2,
+ "prefer-spread": 2,
+ "no-useless-concat": 2,
+ "no-var": 2,
+ "object-shorthand": 2,
+ "prefer-arrow-callback": 2
+ }
+}
diff --git a/preact-router/.gitignore b/preact-router/.gitignore
new file mode 100644
index 0000000..c8fe2af
--- /dev/null
+++ b/preact-router/.gitignore
@@ -0,0 +1,6 @@
+/dist
+/node_modules
+/npm-debug.log
+/match.js
+/*.d.ts
+.DS_Store
diff --git a/preact-router/.travis.yml b/preact-router/.travis.yml
new file mode 100644
index 0000000..833d09d
--- /dev/null
+++ b/preact-router/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - stable
diff --git a/preact-router/LICENSE b/preact-router/LICENSE
new file mode 100644
index 0000000..38d8969
--- /dev/null
+++ b/preact-router/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jason Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/preact-router/README.md b/preact-router/README.md
new file mode 100644
index 0000000..ab74790
--- /dev/null
+++ b/preact-router/README.md
@@ -0,0 +1,254 @@
+# preact-router
+
+[![NPM](https://img.shields.io/npm/v/preact-router.svg)](https://www.npmjs.com/package/preact-router)
+[![travis-ci](https://travis-ci.org/developit/preact-router.svg)](https://travis-ci.org/developit/preact-router)
+
+Connect your [Preact] components up to that address bar.
+
+`preact-router` provides a `<Router />` component that conditionally renders its children when the URL matches their `path`. It also automatically wires up `<a />` elements to the router.
+
+> 💁 **Note:** This is not a preact-compatible version of React Router. `preact-router` is a simple URL wiring and does no orchestration for you.
+>
+> If you're looking for more complex solutions like nested routes and view composition, [react-router](https://github.com/ReactTraining/react-router) works great with preact as long as you alias in [preact-compat](https://github.com/developit/preact-compat). React Router 4 even [works directly with Preact](https://codepen.io/developit/pen/BWxepY?editors=0010), no compatibility layer needed!
+
+#### [See a Real-world Example :arrow_right:](https://jsfiddle.net/developit/qc73v9va/)
+
+
+---
+
+
+### Usage Example
+
+```js
+import Router from 'preact-router';
+import { h, render } from 'preact';
+/** @jsx h */
+
+const Main = () => (
+ <Router>
+ <Home path="/" />
+ <About path="/about" />
+ // Advanced is an optional query
+ <Search path="/search/:query/:advanced?" />
+ </Router>
+);
+
+render(<Main />, document.body);
+```
+
+If there is an error rendering the destination route, a 404 will be displayed.
+
+
+### Handling URLS
+
+:information_desk_person: Pages are just regular components that get mounted when you navigate to a certain URL.
+Any URL parameters get passed to the component as `props`.
+
+Defining what component(s) to load for a given URL is easy and declarative.
+You can even mix-and-match URL parameters and normal `props`.
+You can also make params optional by adding a `?` to it.
+
+```js
+<Router>
+ <A path="/" />
+ <B path="/b" id="42" />
+ <C path="/c/:id" />
+ <C path="/d/:optional?/:params?" />
+ <D default />
+</Router>
+```
+
+
+### Lazy Loading
+
+Lazy loading (code splitting) with `preact-router` can be implemented easily using the [AsyncRoute](https://www.npmjs.com/package/preact-async-route) module:
+
+```js
+import AsyncRoute from 'preact-async-route';
+<Router>
+ <Home path="/" />
+ <AsyncRoute
+ path="/friends"
+ getComponent={ () => import('./friends').then(module => module.default) }
+ />
+ <AsyncRoute
+ path="/friends/:id"
+ getComponent={ () => import('./friend').then(module => module.default) }
+ loading={ () => <div>loading...</div> }
+ />
+</Router>
+```
+
+
+### Active Matching & Links
+
+`preact-router` includes an add-on module called `match` that lets you wire your components up to Router changes.
+
+Here's a demo of `<Match>`, which invokes the function you pass it (as its only child) in response to any routing:
+
+```js
+import Router from 'preact-router';
+import Match from 'preact-router/match';
+
+render(
+ <div>
+ <Match path="/">
+ { ({ matches, path, url }) => (
+ <pre>{url}</pre>
+ ) }
+ </Match>
+ <Router>
+ <div default>demo fallback route</div>
+ </Router>
+ </div>
+)
+
+// another example: render only if at a given URL:
+
+render(
+ <div>
+ <Match path="/">
+ { ({ matches }) => matches && (
+ <h1>You are Home!</h1>
+ ) }
+ </Match>
+ <Router />
+ </div>
+)
+```
+
+`<Link>` is just a normal link, but it automatically adds and removes an "active" classname to itself based on whether it matches the current URL.
+
+```js
+import { Router } from 'preact-router';
+import { Link } from 'preact-router/match';
+
+render(
+ <div>
+ <nav>
+ <Link activeClassName="active" href="/">Home</Link>
+ <Link activeClassName="active" href="/foo">Foo</Link>
+ <Link activeClassName="active" href="/bar">Bar</Link>
+ </nav>
+ <Router>
+ <div default>
+ this is a demo route that always matches
+ </div>
+ </Router>
+ </div>
+)
+```
+
+
+### Default Link Behavior
+
+Sometimes it's necessary to bypass preact-router's link handling and let the browser perform routing on its own.
+
+This can be accomplished by adding a `native` boolean attribute to any link:
+
+```html
+<a href="/foo" native>Foo</a>
+```
+
+### Detecting Route Changes
+
+The `Router` notifies you when a change event occurs for a route with the `onChange` callback:
+
+```js
+import { render, Component } from 'preact';
+import { Router, route } from 'preact-router';
+
+class App extends Component {
+
+ // some method that returns a promise
+ isAuthenticated() { }
+
+ handleRoute = async e => {
+ switch (e.url) {
+ case '/profile':
+ const isAuthed = await this.isAuthenticated();
+ if (!isAuthed) route('/', true);
+ break;
+ }
+ };
+
+ render() {
+ return (
+ <Router onChange={this.handleRoute}>
+ <Home path="/" />
+ <Profile path="/profile" />
+ </Router>
+ );
+ }
+
+}
+```
+
+### Redirects
+
+Can easily be implemented with a custom `Redirect` component;
+
+```js
+import { Component } from 'preact';
+import { route } from 'preact-router';
+
+export default class Redirect extends Component {
+ componentWillMount() {
+ route(this.props.to, true);
+ }
+
+ render() {
+ return null;
+ }
+}
+```
+
+Now to create a redirect within your application, you can add this `Redirect` component to your router;
+
+```js
+<Router>
+ <Bar path="/bar" />
+ <Redirect path="/foo" to="/bar" />
+</Router>
+```
+
+
+### Custom History
+
+It's possible to use alternative history bindings, like `/#!/hash-history`:
+
+```js
+import { h } from 'preact';
+import Router from 'preact-router';
+import { createHashHistory } from 'history';
+
+const Main = () => (
+ <Router history={createHashHistory()}>
+ <Home path="/" />
+ <About path="/about" />
+ <Search path="/search/:query" />
+ </Router>
+);
+
+render(<Main />, document.body);
+```
+
+### Programmatically Triggering Route
+
+Its possible to programmatically trigger a route to a page (like `window.location = '/page-2'`)
+
+```js
+import { route } from 'preact-router';
+
+route('/page-2') // appends a history entry
+
+route('/page-3', true) // replaces the current history entry
+```
+
+### License
+
+[MIT]
+
+
+[Preact]: https://github.com/developit/preact
+[MIT]: https://choosealicense.com/licenses/mit/
diff --git a/preact-router/karma.conf.js b/preact-router/karma.conf.js
new file mode 100644
index 0000000..d8d6a4c
--- /dev/null
+++ b/preact-router/karma.conf.js
@@ -0,0 +1,37 @@
+module.exports = function(config) {
+ config.set({
+ frameworks: ['mocha', 'chai-sinon'],
+ reporters: ['mocha'],
+ browsers: ['ChromeHeadless'],
+
+ files: ['test/**/*.js'],
+
+ preprocessors: {
+ '{src,test}/**/*.js': ['webpack', 'sourcemap']
+ },
+
+ webpack: {
+ module: {
+ loaders: [{
+ test: /\.jsx?$/,
+ exclude: /node_modules/,
+ loader: 'babel'
+ }]
+ },
+ resolve: {
+ alias: {
+ 'preact-router': __dirname+'/src/index.js',
+ src: __dirname+'/src'
+ }
+ }
+ },
+
+ mochaReporter: {
+ showDiff: true
+ },
+
+ webpackMiddleware: {
+ noInfo: true
+ }
+ });
+};
diff --git a/preact-router/package-lock.json b/preact-router/package-lock.json
new file mode 100644
index 0000000..06b4c25
--- /dev/null
+++ b/preact-router/package-lock.json
@@ -0,0 +1,8412 @@
+{
+ "name": "preact-router",
+ "version": "3.2.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "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"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "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"
+ }
+ }
+ }
+ },
+ "@sinonjs/commons": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.0.tgz",
+ "integrity": "sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true
+ }
+ }
+ },
+ "@sinonjs/formatio": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
+ "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1",
+ "@sinonjs/samsam": "^3.1.0"
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
+ "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.3.0",
+ "array-from": "^2.1.1",
+ "lodash": "^4.17.15"
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz",
+ "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
+ "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
+ "dev": true
+ },
+ "acorn-object-spread": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-object-spread/-/acorn-object-spread-1.0.0.tgz",
+ "integrity": "sha1-SOrQ9KjrFplaF6Dbn/xqyq2kumg=",
+ "dev": true,
+ "requires": {
+ "acorn": "^3.1.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+ "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+ "dev": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ },
+ "ajv": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz",
+ "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^2.1.5",
+ "normalize-path": "^2.0.0"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-from": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
+ "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "array.prototype.find": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz",
+ "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.13.0"
+ }
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "dev": true
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "babel-cli": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
+ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-polyfill": "^6.26.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "chokidar": "^1.6.1",
+ "commander": "^2.11.0",
+ "convert-source-map": "^1.5.0",
+ "fs-readdir-recursive": "^1.0.0",
+ "glob": "^7.1.2",
+ "lodash": "^4.17.4",
+ "output-file-sync": "^1.1.2",
+ "path-is-absolute": "^1.0.1",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.6",
+ "v8flags": "^2.1.1"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ },
+ "babel-eslint": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz",
+ "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.22.0",
+ "babel-traverse": "^6.23.1",
+ "babel-types": "^6.23.0",
+ "babylon": "^6.17.0"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "babel-helper-bindify-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz",
+ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-assignable-expression": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-builder-react-jsx": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "esutils": "^2.0.2"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-helper-explode-assignable-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
+ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-explode-class": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
+ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
+ "dev": true,
+ "requires": {
+ "babel-helper-bindify-decorators": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-loader": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz",
+ "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^0.1.1",
+ "loader-utils": "^0.2.16",
+ "mkdirp": "^0.5.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
+ "dev": true
+ },
+ "babel-plugin-syntax-async-generators": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
+ "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
+ "dev": true
+ },
+ "babel-plugin-syntax-class-constructor-call": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz",
+ "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=",
+ "dev": true
+ },
+ "babel-plugin-syntax-class-properties": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
+ "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=",
+ "dev": true
+ },
+ "babel-plugin-syntax-decorators": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+ "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
+ "dev": true
+ },
+ "babel-plugin-syntax-do-expressions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz",
+ "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=",
+ "dev": true
+ },
+ "babel-plugin-syntax-dynamic-import": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+ "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
+ "dev": true
+ },
+ "babel-plugin-syntax-exponentiation-operator": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+ "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
+ "dev": true
+ },
+ "babel-plugin-syntax-export-extensions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz",
+ "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=",
+ "dev": true
+ },
+ "babel-plugin-syntax-flow": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
+ "dev": true
+ },
+ "babel-plugin-syntax-function-bind": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz",
+ "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=",
+ "dev": true
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
+ "dev": true
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+ "dev": true
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
+ "dev": true
+ },
+ "babel-plugin-transform-async-generator-functions": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
+ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "^6.24.1",
+ "babel-plugin-syntax-async-generators": "^6.5.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "^6.24.1",
+ "babel-plugin-syntax-async-functions": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-class-constructor-call": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz",
+ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-class-constructor-call": "^6.18.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-class-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
+ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-plugin-syntax-class-properties": "^6.8.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
+ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-class": "^6.24.1",
+ "babel-plugin-syntax-decorators": "^6.13.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-do-expressions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz",
+ "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-do-expressions": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "^6.24.1",
+ "babel-helper-function-name": "^6.24.1",
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
+ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-types": "^6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "^6.24.1",
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "regexpu-core": "^2.0.0"
+ }
+ },
+ "babel-plugin-transform-exponentiation-operator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
+ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-export-extensions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz",
+ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-export-extensions": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-flow-strip-types": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-flow": "^6.18.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-function-bind": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz",
+ "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-function-bind": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-object-assign": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz",
+ "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "^6.8.0",
+ "babel-runtime": "^6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-display-name": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-react-jsx": "^6.24.1",
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-self": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-source": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.10.0"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "regenerator-runtime": "^0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-es2015": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "^6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
+ "babel-plugin-transform-es2015-classes": "^6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "^6.22.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
+ "babel-plugin-transform-es2015-for-of": "^6.22.0",
+ "babel-plugin-transform-es2015-function-name": "^6.24.1",
+ "babel-plugin-transform-es2015-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
+ "babel-plugin-transform-es2015-object-super": "^6.24.1",
+ "babel-plugin-transform-es2015-parameters": "^6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-spread": "^6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
+ "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
+ "babel-plugin-transform-regenerator": "^6.24.1"
+ }
+ },
+ "babel-preset-flow": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-flow-strip-types": "^6.22.0"
+ }
+ },
+ "babel-preset-react": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "^6.3.13",
+ "babel-plugin-transform-react-display-name": "^6.23.0",
+ "babel-plugin-transform-react-jsx": "^6.24.1",
+ "babel-plugin-transform-react-jsx-self": "^6.22.0",
+ "babel-plugin-transform-react-jsx-source": "^6.22.0",
+ "babel-preset-flow": "^6.23.0"
+ }
+ },
+ "babel-preset-stage-0": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz",
+ "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-do-expressions": "^6.22.0",
+ "babel-plugin-transform-function-bind": "^6.22.0",
+ "babel-preset-stage-1": "^6.24.1"
+ }
+ },
+ "babel-preset-stage-1": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz",
+ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-class-constructor-call": "^6.24.1",
+ "babel-plugin-transform-export-extensions": "^6.22.0",
+ "babel-preset-stage-2": "^6.24.1"
+ }
+ },
+ "babel-preset-stage-2": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
+ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "^6.18.0",
+ "babel-plugin-transform-class-properties": "^6.24.1",
+ "babel-plugin-transform-decorators": "^6.24.1",
+ "babel-preset-stage-3": "^6.24.1"
+ }
+ },
+ "babel-preset-stage-3": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
+ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
+ "babel-plugin-transform-async-generator-functions": "^6.24.1",
+ "babel-plugin-transform-async-to-generator": "^6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "^6.24.1",
+ "babel-plugin-transform-object-rest-spread": "^6.22.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+ "dev": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+ "dev": true
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "blob": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz",
+ "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "dev": true,
+ "requires": {
+ "pako": "~0.2.0"
+ }
+ },
+ "buble": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/buble/-/buble-0.15.2.tgz",
+ "integrity": "sha1-VH/EdIP45egXbYKqXrzLGDsC1hM=",
+ "dev": true,
+ "requires": {
+ "acorn": "^3.3.0",
+ "acorn-jsx": "^3.0.1",
+ "acorn-object-spread": "^1.0.0",
+ "chalk": "^1.1.3",
+ "magic-string": "^0.14.0",
+ "minimist": "^1.2.0",
+ "os-homedir": "^1.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "^3.0.4"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "requires": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true
+ },
+ "buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+ "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "^1.0.1",
+ "deep-eql": "^0.1.3",
+ "type-detect": "^1.0.0"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
+ }
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz",
+ "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.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
+ },
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "dev": true
+ },
+ "combine-lists": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
+ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.5.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "connect": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.2",
+ "parseurl": "~1.3.3",
+ "utils-merge": "1.0.1"
+ }
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+ "dev": true
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "copyfiles": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-1.2.0.tgz",
+ "integrity": "sha1-qNo6xBqiIgrim9PFi2mEKU8sWTw=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5",
+ "ltcdr": "^2.2.1",
+ "minimatch": "^3.0.3",
+ "mkdirp": "^0.5.1",
+ "noms": "0.0.0",
+ "through2": "^2.0.1"
+ }
+ },
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz",
+ "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "0.4.0",
+ "pbkdf2-compat": "2.0.1",
+ "ripemd160": "0.2.0",
+ "sha.js": "2.2.6"
+ }
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "custom-event": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+ "dev": true
+ },
+ "date-format": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
+ "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-eql": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+ "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
+ "dev": true,
+ "requires": {
+ "type-detect": "0.1.1"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+ "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=",
+ "dev": true
+ }
+ }
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "di": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+ "dev": true
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serialize": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+ "dev": true,
+ "requires": {
+ "custom-event": "~1.0.0",
+ "ent": "~2.2.0",
+ "extend": "^3.0.0",
+ "void-elements": "^2.0.0"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "engine.io": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
+ "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "~3.1.0",
+ "engine.io-parser": "~2.1.0",
+ "ws": "~3.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
+ "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "~3.1.0",
+ "engine.io-parser": "~2.1.1",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "~3.3.1",
+ "xmlhttprequest-ssl": "~1.5.4",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
+ "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "~0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.5",
+ "has-binary2": "~1.0.2"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
+ "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.2.0",
+ "tapable": "^0.1.8"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz",
+ "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=",
+ "dev": true
+ }
+ }
+ },
+ "ent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.17.4",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz",
+ "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
+ "dev": true
+ },
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "^4.0.3"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "eslint": {
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+ "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.9.1",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^4.0.3",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^5.0.1",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.2.2",
+ "js-yaml": "^3.13.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.11",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "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==",
+ "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"
+ }
+ },
+ "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
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz",
+ "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=",
+ "dev": true,
+ "requires": {
+ "array.prototype.find": "^2.0.1",
+ "doctrine": "^1.2.2",
+ "has": "^1.0.1",
+ "jsx-ast-utils": "^1.3.4",
+ "object.assign": "^4.0.4"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "dev": true
+ },
+ "espree": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.7",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz",
+ "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "event-stream": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
+ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
+ "dev": true,
+ "requires": {
+ "duplexer": "~0.1.1",
+ "from": "~0",
+ "map-stream": "~0.1.0",
+ "pause-stream": "0.0.11",
+ "split": "0.3",
+ "stream-combiner": "~0.0.4",
+ "through": "~2.3.1"
+ }
+ },
+ "eventemitter3": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
+ "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "expand-braces": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
+ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
+ "dev": true,
+ "requires": {
+ "array-slice": "^0.2.3",
+ "array-unique": "^0.2.1",
+ "braces": "^0.1.2"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
+ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
+ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
+ "dev": true,
+ "requires": {
+ "is-number": "^0.1.1",
+ "repeat-string": "^0.2.2"
+ }
+ },
+ "is-number": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
+ "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
+ "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
+ "dev": true
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "extract-zip": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
+ "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.2",
+ "debug": "2.6.9",
+ "mkdirp": "0.5.1",
+ "yauzl": "2.4.1"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "dev": true,
+ "optional": true
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-cache-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "mkdirp": "^0.5.1",
+ "pkg-dir": "^1.0.0"
+ }
+ },
+ "find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "dev": true,
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "flatted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz",
+ "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "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
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "from": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+ "dev": true
+ },
+ "fs-access": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
+ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
+ "dev": true,
+ "requires": {
+ "null-check": "^1.0.0"
+ }
+ },
+ "fs-readdir-recursive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+ "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz",
+ "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1",
+ "node-pre-gyp": "*"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "3.2.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.6.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "bundled": true,
+ "dev": true,
+ "optional": 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"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.3.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.9.0"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.14.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4.4.2"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.4.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.13",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.8.6",
+ "minizlib": "^1.2.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true
+ },
+ "gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1"
+ }
+ },
+ "gzip-size-cli": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size-cli/-/gzip-size-cli-1.0.0.tgz",
+ "integrity": "sha1-l+9HsWAKKtj5wxU5Zh6rOew2yu0=",
+ "dev": true,
+ "requires": {
+ "gzip-size": "^3.0.0",
+ "meow": "^3.3.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-binary2": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+ "dev": true,
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "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
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
+ "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
+ "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "https-proxy-agent": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+ "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
+ "dev": true,
+ "requires": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "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
+ }
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.12",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.4.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.1.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "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==",
+ "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"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "interpret": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz",
+ "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.5.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isbinaryfile": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
+ "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
+ "dev": true,
+ "requires": {
+ "buffer-alloc": "^1.2.0"
+ }
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsx-ast-utils": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz",
+ "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=",
+ "dev": true
+ },
+ "just-extend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz",
+ "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==",
+ "dev": true
+ },
+ "karma": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.4.tgz",
+ "integrity": "sha512-31Vo8Qr5glN+dZEVIpnPCxEGleqE0EY6CtC2X9TagRV3rRQ3SNrvfhddICkJgUK3AgqpeKSZau03QumTGhGoSw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.3.0",
+ "body-parser": "^1.16.1",
+ "chokidar": "^2.0.3",
+ "colors": "^1.1.0",
+ "combine-lists": "^1.0.0",
+ "connect": "^3.6.0",
+ "core-js": "^2.2.0",
+ "di": "^0.0.1",
+ "dom-serialize": "^2.2.0",
+ "expand-braces": "^0.1.1",
+ "flatted": "^2.0.0",
+ "glob": "^7.1.1",
+ "graceful-fs": "^4.1.2",
+ "http-proxy": "^1.13.0",
+ "isbinaryfile": "^3.0.0",
+ "lodash": "^4.17.5",
+ "log4js": "^3.0.0",
+ "mime": "^2.3.1",
+ "minimatch": "^3.0.2",
+ "optimist": "^0.6.1",
+ "qjobs": "^1.1.4",
+ "range-parser": "^1.2.0",
+ "rimraf": "^2.6.0",
+ "safe-buffer": "^5.0.1",
+ "socket.io": "2.1.1",
+ "source-map": "^0.6.1",
+ "tmp": "0.0.33",
+ "useragent": "2.3.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "karma-chai-sinon": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/karma-chai-sinon/-/karma-chai-sinon-0.1.5.tgz",
+ "integrity": "sha1-XDksqVJHgYlR1rV5AvAsNugDdTo=",
+ "dev": true
+ },
+ "karma-chrome-launcher": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz",
+ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==",
+ "dev": true,
+ "requires": {
+ "fs-access": "^1.0.0",
+ "which": "^1.2.1"
+ }
+ },
+ "karma-mocha": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz",
+ "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "karma-mocha-reporter": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
+ "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.1.0",
+ "log-symbols": "^2.1.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "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==",
+ "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"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "karma-sourcemap-loader": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz",
+ "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "karma-webpack": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.13.tgz",
+ "integrity": "sha512-2cyII34jfrAabbI2+4Rk4j95Nazl98FvZQhgSiqKUDarT317rxfv/EdzZ60CyATN4PQxJdO5ucR5bOOXkEVrXw==",
+ "dev": true,
+ "requires": {
+ "async": "^2.0.0",
+ "babel-runtime": "^6.0.0",
+ "loader-utils": "^1.0.0",
+ "lodash": "^4.0.0",
+ "source-map": "^0.5.6",
+ "webpack-dev-middleware": "^1.12.0"
+ },
+ "dependencies": {
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "log4js": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz",
+ "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.5.5",
+ "date-format": "^1.2.0",
+ "debug": "^3.1.0",
+ "rfdc": "^1.1.2",
+ "streamroller": "0.7.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "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
+ }
+ }
+ },
+ "lolex": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz",
+ "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "ltcdr": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ltcdr/-/ltcdr-2.2.1.tgz",
+ "integrity": "sha1-Wrh60dTB2rjowIu/A37gwZAih88=",
+ "dev": true
+ },
+ "magic-string": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.14.0.tgz",
+ "integrity": "sha1-VyJK7xcByu7Sc7F6OalW5ysXJGI=",
+ "dev": true,
+ "requires": {
+ "vlq": "^0.2.1"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-stream": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
+ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "math-random": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+ "dev": true
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ }
+ },
+ "mime": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+ "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==",
+ "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==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.43.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "mocha": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
+ "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
+ "dev": true,
+ "requires": {
+ "browser-stdout": "1.3.1",
+ "commander": "2.15.1",
+ "debug": "3.1.0",
+ "diff": "3.5.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.2",
+ "growl": "1.10.5",
+ "he": "1.1.1",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "supports-color": "5.4.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "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"
+ }
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "nise": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz",
+ "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/formatio": "^3.2.1",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "lolex": "^5.0.1",
+ "path-to-regexp": "^1.7.0"
+ },
+ "dependencies": {
+ "lolex": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
+ "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ }
+ }
+ },
+ "node-libs-browser": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz",
+ "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=",
+ "dev": true,
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.1.4",
+ "buffer": "^4.9.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "3.3.0",
+ "domain-browser": "^1.1.1",
+ "events": "^1.0.0",
+ "https-browserify": "0.0.1",
+ "os-browserify": "^0.2.0",
+ "path-browserify": "0.0.0",
+ "process": "^0.11.0",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.0.5",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.3.1",
+ "string_decoder": "^0.10.25",
+ "timers-browserify": "^2.0.2",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.10.3",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "noms": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz",
+ "integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "~1.0.31"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-merge-driver": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/npm-merge-driver/-/npm-merge-driver-2.3.5.tgz",
+ "integrity": "sha512-MUxE26ZdDWAc+wlqwyOEIhRH1EdaIXCWSZbqAQ76dUkz3uSrxrLhfgQ3nb3oZbqC5e4NyLcCdzTSDVwkisoJpg==",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1",
+ "yargs": "^10.0.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "mem": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yargs": {
+ "version": "10.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^8.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "8.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-merge-driver-install": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/npm-merge-driver-install/-/npm-merge-driver-install-1.1.1.tgz",
+ "integrity": "sha512-QoEoJ1SAkkVPoZ9p84yel5xiMeXXqpkw1KwA8hP0iVO/NWZUYYgTUkXRL54YJ7HyLK3aTaiQrRVfpPpb9Cm/FA==",
+ "dev": true,
+ "requires": {
+ "find-root": "^1.1.0",
+ "is-ci": "^1.2.0",
+ "npm-merge-driver": "^2.3.5"
+ }
+ },
+ "npm-run-all": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-3.1.2.tgz",
+ "integrity": "sha1-x+P69KoKWb8Nz8EmARZhUWkhcc8=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "cross-spawn": "^4.0.0",
+ "minimatch": "^3.0.2",
+ "object-assign": "^4.0.1",
+ "pinkie-promise": "^2.0.1",
+ "ps-tree": "^1.0.1",
+ "read-pkg": "^1.1.0",
+ "read-pkg-up": "^1.0.1",
+ "shell-quote": "^1.6.1",
+ "string.prototype.padend": "^3.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+ "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ }
+ }
+ },
+ "null-check": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
+ "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "os-browserify": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz",
+ "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "output-file-sync": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
+ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.4",
+ "mkdirp": "^0.5.1",
+ "object-assign": "^4.1.0"
+ }
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pause-stream": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "dev": true,
+ "requires": {
+ "through": "~2.3"
+ }
+ },
+ "pbkdf2-compat": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz",
+ "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=",
+ "dev": true
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0"
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "preact": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.2.1.tgz",
+ "integrity": "sha512-BUNvmQcVtNElku7mYHexIiM5JlGNSW2BY9O2t9xk1NqA43O8wbE0cah6PAlvT7PBHvyDRJ5TAj5Fewdi9DqLoQ==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
+ "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "pretty-bytes-cli": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes-cli/-/pretty-bytes-cli-1.0.0.tgz",
+ "integrity": "sha1-EJNwv/NVXnBt5qjgJn0hndbNgSM=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^5.0.1",
+ "meow": "^3.6.0",
+ "pretty-bytes": "^3.0.0"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
+ "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
+ "dev": true
+ }
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=",
+ "dev": true
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "ps-tree": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
+ "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==",
+ "dev": true,
+ "requires": {
+ "event-stream": "=3.3.4"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "puppeteer": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.20.0.tgz",
+ "integrity": "sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "extract-zip": "^1.6.6",
+ "https-proxy-agent": "^2.2.1",
+ "mime": "^2.0.3",
+ "progress": "^2.0.1",
+ "proxy-from-env": "^1.0.0",
+ "rimraf": "^2.6.1",
+ "ws": "^6.1.0"
+ },
+ "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
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ }
+ }
+ },
+ "qjobs": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
+ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.18.0",
+ "babel-types": "^6.19.0",
+ "private": "^0.1.6"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.2.1",
+ "regjsgen": "^0.2.0",
+ "regjsparser": "^0.1.4"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz",
+ "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rfdc": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz",
+ "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==",
+ "dev": true
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz",
+ "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=",
+ "dev": true
+ },
+ "rollup": {
+ "version": "0.41.6",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.41.6.tgz",
+ "integrity": "sha1-4NBUl4d6OYwQTYFtJzOnGKepTio=",
+ "dev": true,
+ "requires": {
+ "source-map-support": "^0.4.0"
+ }
+ },
+ "rollup-plugin-buble": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.15.0.tgz",
+ "integrity": "sha1-g8PonH/SJmx5GPQbo5gDE1Gcf9A=",
+ "dev": true,
+ "requires": {
+ "buble": "^0.15.0",
+ "rollup-pluginutils": "^1.5.0"
+ }
+ },
+ "rollup-plugin-es3": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-es3/-/rollup-plugin-es3-1.1.0.tgz",
+ "integrity": "sha512-jTMqQgMZ/tkjRW4scf4ln5c0OiTSi+Lx/IEyFd41ldgGoLvvg9AQxmVOl93+KaoyB7XRYToYjiHDvO40NPF/fA==",
+ "dev": true,
+ "requires": {
+ "magic-string": "^0.22.4"
+ },
+ "dependencies": {
+ "magic-string": {
+ "version": "0.22.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "dev": true,
+ "requires": {
+ "vlq": "^0.2.2"
+ }
+ }
+ }
+ },
+ "rollup-plugin-memory": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-memory/-/rollup-plugin-memory-2.0.0.tgz",
+ "integrity": "sha1-CorGtX+g5xT4mhXDrIK8k/icR8U=",
+ "dev": true
+ },
+ "rollup-plugin-post-replace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-post-replace/-/rollup-plugin-post-replace-1.0.0.tgz",
+ "integrity": "sha1-r7pc2y6saw7YJUDUcGZww0MZsg4=",
+ "dev": true,
+ "requires": {
+ "magic-string": "^0.16.0"
+ },
+ "dependencies": {
+ "magic-string": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz",
+ "integrity": "sha1-lw67DacZMwEoX7GqZQ85vdgetFo=",
+ "dev": true,
+ "requires": {
+ "vlq": "^0.2.1"
+ }
+ }
+ }
+ },
+ "rollup-plugin-uglify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-1.0.2.tgz",
+ "integrity": "sha1-1KpvXfE1Iurhuhd4DHxMcJYDg1k=",
+ "dev": true,
+ "requires": {
+ "uglify-js": "^2.6.1"
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
+ "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^0.2.1",
+ "minimatch": "^3.0.2"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rxjs": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
+ "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz",
+ "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shell-quote": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
+ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "sinon": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz",
+ "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.4.0",
+ "@sinonjs/formatio": "^3.2.1",
+ "@sinonjs/samsam": "^3.3.3",
+ "diff": "^3.5.0",
+ "lolex": "^4.2.0",
+ "nise": "^1.5.2",
+ "supports-color": "^5.5.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"
+ }
+ }
+ }
+ },
+ "sinon-chai": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz",
+ "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+ "dev": true,
+ "requires": {
+ "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"
+ }
+ }
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "socket.io": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
+ "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
+ "dev": true,
+ "requires": {
+ "debug": "~3.1.0",
+ "engine.io": "~3.2.0",
+ "has-binary2": "~1.0.2",
+ "socket.io-adapter": "~1.1.0",
+ "socket.io-client": "2.1.1",
+ "socket.io-parser": "~3.2.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
+ "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==",
+ "dev": true
+ },
+ "socket.io-client": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
+ "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "~3.1.0",
+ "engine.io-client": "~3.2.0",
+ "has-binary2": "~1.0.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "~3.2.0",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
+ "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "~3.1.0",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "source-list-map": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
+ "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+ "dev": true
+ },
+ "split": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-combiner": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
+ "dev": true,
+ "requires": {
+ "duplexer": "~0.1.1"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "streamroller": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
+ "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
+ "dev": true,
+ "requires": {
+ "date-format": "^1.2.0",
+ "debug": "^3.1.0",
+ "mkdirp": "^0.5.1",
+ "readable-stream": "^2.3.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "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
+ }
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string.prototype.padend": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz",
+ "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
+ "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
+ "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "tapable": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
+ "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "time-stamp": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz",
+ "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+ "dev": true,
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ }
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+ "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "3.7.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz",
+ "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "useragent": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz",
+ "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.x",
+ "tmp": "0.0.x"
+ }
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "^1.1.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vlq": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+ "dev": true
+ },
+ "watchpack": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz",
+ "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=",
+ "dev": true,
+ "requires": {
+ "async": "^0.9.0",
+ "chokidar": "^1.0.0",
+ "graceful-fs": "^4.1.2"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "dev": true
+ }
+ }
+ },
+ "webpack": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz",
+ "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=",
+ "dev": true,
+ "requires": {
+ "acorn": "^3.0.0",
+ "async": "^1.3.0",
+ "clone": "^1.0.2",
+ "enhanced-resolve": "~0.9.0",
+ "interpret": "^0.6.4",
+ "loader-utils": "^0.2.11",
+ "memory-fs": "~0.3.0",
+ "mkdirp": "~0.5.0",
+ "node-libs-browser": "^0.7.0",
+ "optimist": "~0.6.0",
+ "supports-color": "^3.1.0",
+ "tapable": "~0.1.8",
+ "uglify-js": "~2.7.3",
+ "watchpack": "^0.2.1",
+ "webpack-core": "~0.6.9"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "memory-fs": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz",
+ "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ },
+ "uglify-js": {
+ "version": "2.7.5",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz",
+ "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=",
+ "dev": true,
+ "requires": {
+ "async": "~0.2.6",
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "webpack-core": {
+ "version": "0.6.9",
+ "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz",
+ "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=",
+ "dev": true,
+ "requires": {
+ "source-list-map": "~0.1.7",
+ "source-map": "~0.4.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz",
+ "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==",
+ "dev": true,
+ "requires": {
+ "memory-fs": "~0.4.1",
+ "mime": "^1.5.0",
+ "path-is-absolute": "^1.0.0",
+ "range-parser": "^1.0.3",
+ "time-stamp": "^2.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0",
+ "safe-buffer": "~5.1.0",
+ "ultron": "~1.1.0"
+ }
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ }
+ }
+ },
+ "yauzl": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
+ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
+ "dev": true,
+ "requires": {
+ "fd-slicer": "~1.0.1"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ }
+ }
+}
diff --git a/preact-router/package.json b/preact-router/package.json
new file mode 100644
index 0000000..db0790f
--- /dev/null
+++ b/preact-router/package.json
@@ -0,0 +1,94 @@
+{
+ "name": "preact-router",
+ "amdName": "preactRouter",
+ "version": "3.2.1",
+ "description": "Connect your components up to that address bar.",
+ "main": "dist/preact-router.js",
+ "jsnext:main": "dist/preact-router.es.js",
+ "module": "dist/preact-router.es.js",
+ "scripts": {
+ "clean": "rimraf dist/",
+ "copy-typescript-definition": "copyfiles -f src/index.d.ts src/match.d.ts .",
+ "build": "npm-run-all --silent clean transpile transpile:match copy-typescript-definition size",
+ "transpile": "rollup -c --environment FORMAT:umd && rollup -c --environment FORMAT:es",
+ "transpile:match": "babel src/match.js -o match.js -f umd",
+ "size": "size=$(gzip-size $npm_package_main) && echo \"gzip size: $size / $(pretty-bytes $size)\"",
+ "test": "npm-run-all lint build test:karma test:ts",
+ "lint": "eslint ./{src,test,test_helpers}/**/*.js",
+ "fix": "npm run lint -- --fix",
+ "test:karma": "karma start --single-run",
+ "test:watch": "karma start",
+ "test:ts": "tsc -p ./test",
+ "prepublishOnly": "npm-run-all build test",
+ "release": "npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"
+ },
+ "files": [
+ "src",
+ "dist",
+ "match.js",
+ "match.d.ts",
+ "index.d.ts"
+ ],
+ "typings": "./index.d.ts",
+ "keywords": [
+ "preact",
+ "router"
+ ],
+ "author": "Jason Miller <jason@developit.ca>",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/developit/preact-router.git"
+ },
+ "bugs": {
+ "url": "https://github.com/developit/preact-router/issues"
+ },
+ "homepage": "https://github.com/developit/preact-router",
+ "peerDependencies": {
+ "preact": ">=10"
+ },
+ "devDependencies": {
+ "babel-cli": "^6.9.0",
+ "babel-core": "^6.9.1",
+ "babel-eslint": "^7.0.0",
+ "babel-loader": "^6.2.4",
+ "babel-plugin-transform-class-properties": "^6.9.1",
+ "babel-plugin-transform-es2015-classes": "^6.9.0",
+ "babel-plugin-transform-object-assign": "^6.0.0",
+ "babel-plugin-transform-react-jsx": "^6.8.0",
+ "babel-preset-es2015": "^6.9.0",
+ "babel-preset-react": "^6.5.0",
+ "babel-preset-stage-0": "^6.5.0",
+ "chai": "^3.5.0",
+ "copyfiles": "^1.0.0",
+ "diff": "^3.0.0",
+ "eslint": "^5.8.0",
+ "eslint-plugin-react": "^6.0.0",
+ "gzip-size-cli": "^1.0.0",
+ "karma": "^3.1.1",
+ "karma-chai-sinon": "^0.1.5",
+ "karma-chrome-launcher": "^2.2.0",
+ "karma-mocha": "^1.3.0",
+ "karma-mocha-reporter": "^2.2.5",
+ "karma-sourcemap-loader": "^0.3.7",
+ "karma-webpack": "^2.0.1",
+ "mkdirp": "^0.5.1",
+ "mocha": "^5.2.0",
+ "npm-merge-driver-install": "^1.1.1",
+ "npm-run-all": "^3.0.0",
+ "preact": "^10.0.0-rc.0",
+ "pretty-bytes-cli": "^1.0.0",
+ "puppeteer": "^1.9.0",
+ "rimraf": "^2.5.1",
+ "rollup": "^0.41.6",
+ "rollup-plugin-buble": "^0.15.0",
+ "rollup-plugin-es3": "^1.0.3",
+ "rollup-plugin-memory": "^2.0.0",
+ "rollup-plugin-post-replace": "^1.0.0",
+ "rollup-plugin-uglify": "^1.0.1",
+ "sinon": "^7.1.0",
+ "sinon-chai": "^2.8.0",
+ "typescript": "^3.4.4",
+ "webpack": "^1.13.1"
+ }
+}
diff --git a/preact-router/rollup.config.js b/preact-router/rollup.config.js
new file mode 100644
index 0000000..e4e7fa1
--- /dev/null
+++ b/preact-router/rollup.config.js
@@ -0,0 +1,56 @@
+import fs from 'fs';
+import buble from 'rollup-plugin-buble';
+import memory from 'rollup-plugin-memory';
+import uglify from 'rollup-plugin-uglify';
+import es3 from 'rollup-plugin-es3';
+import replace from 'rollup-plugin-post-replace';
+
+let pkg = JSON.parse(fs.readFileSync('./package.json'));
+
+let format = process.env.FORMAT;
+
+export default {
+ entry: 'src/index.js',
+ moduleName: pkg.amdName,
+ dest: format==='es' ? pkg.module : pkg.main,
+ sourceMap: true,
+ useStrict: false,
+ format,
+ external: ['preact'],
+ globals: {
+ preact: 'preact'
+ },
+ plugins: [
+ format!=='es' && memory({
+ path: 'src/index',
+ contents: "export { default } from './index';"
+ }),
+
+ buble({
+ jsx: 'h'
+ }),
+
+ // strip Object.freeze()
+ es3(),
+
+ // remove Babel helpers
+ replace({
+ 'throw ': 'return; throw '
+ }),
+
+ format!=='es' && uglify({
+ output: { comments: false },
+ mangle: {
+ topLevel: true
+ },
+ compress: {
+ unsafe: true,
+ dead_code: true,
+ pure_getters: true,
+ pure_funcs: [
+ '_classCallCheck'
+ ]
+ }
+ })
+ ].filter(Boolean)
+};
diff --git a/preact-router/src/index.d.ts b/preact-router/src/index.d.ts
new file mode 100644
index 0000000..fed2cf6
--- /dev/null
+++ b/preact-router/src/index.d.ts
@@ -0,0 +1,71 @@
+import * as preact from 'preact';
+
+export function route(url: string, replace?: boolean): boolean;
+export function route(options: { url: string; replace?: boolean }): boolean;
+
+export function getCurrentUrl(): string;
+
+export interface Location {
+ pathname: string;
+ search: string;
+}
+
+export interface CustomHistory {
+ listen(callback: (location: Location) => void): () => void;
+ location: Location;
+ push(path: string): void;
+ replace(path: string): void;
+}
+
+export interface RoutableProps {
+ path?: string;
+ default?: boolean;
+}
+
+export interface RouterOnChangeArgs {
+ router: Router;
+ url: string;
+ previous?: string;
+ active: preact.VNode[];
+ current: preact.VNode;
+}
+
+export interface RouterProps extends RoutableProps {
+ history?: CustomHistory;
+ static?: boolean;
+ url?: string;
+ onChange?: (args: RouterOnChangeArgs) => void;
+}
+
+export class Router extends preact.Component<RouterProps, {}> {
+ canRoute(url: string): boolean;
+ getMatchingChildren(
+ children: preact.VNode[],
+ url: string,
+ invoke: boolean
+ ): preact.VNode[];
+ routeTo(url: string): boolean;
+ render(props: RouterProps, {}): preact.VNode;
+}
+
+export const subscribers: Array<(url: string) => void>
+
+type AnyComponent<Props> =
+ | preact.FunctionalComponent<Props>
+ | preact.ComponentConstructor<Props, any>;
+
+export interface RouteProps<Props> extends RoutableProps {
+ component: AnyComponent<Props>;
+}
+
+export function Route<Props>(
+ props: RouteProps<Props> & Partial<Props>
+): preact.VNode;
+
+export function Link(props: {activeClassName?: string} & preact.JSX.HTMLAttributes): preact.VNode;
+
+declare module 'preact' {
+ export interface Attributes extends RoutableProps {}
+}
+
+export default Router;
diff --git a/preact-router/src/index.js b/preact-router/src/index.js
new file mode 100644
index 0000000..464ec54
--- /dev/null
+++ b/preact-router/src/index.js
@@ -0,0 +1,264 @@
+import { cloneElement, createElement, Component, toChildArray } from 'preact';
+import { exec, prepareVNodeForRanking, assign, pathRankSort } from './util';
+
+let customHistory = null;
+
+const ROUTERS = [];
+
+const subscribers = [];
+
+const EMPTY = {};
+
+function setUrl(url, type='push') {
+ if (customHistory && customHistory[type]) {
+ customHistory[type](url);
+ }
+ else if (typeof history!=='undefined' && history[type+'State']) {
+ history[type+'State'](null, null, url);
+ }
+}
+
+
+function getCurrentUrl() {
+ let url;
+ if (customHistory && customHistory.location) {
+ url = customHistory.location;
+ }
+ else if (customHistory && customHistory.getCurrentLocation) {
+ url = customHistory.getCurrentLocation();
+ }
+ else {
+ url = typeof location!=='undefined' ? location : EMPTY;
+ }
+ return `${url.pathname || ''}${url.search || ''}`;
+}
+
+
+
+function route(url, replace=false) {
+ if (typeof url!=='string' && url.url) {
+ replace = url.replace;
+ url = url.url;
+ }
+
+ // only push URL into history if we can handle it
+ if (canRoute(url)) {
+ setUrl(url, replace ? 'replace' : 'push');
+ }
+
+ return routeTo(url);
+}
+
+
+/** Check if the given URL can be handled by any router instances. */
+function canRoute(url) {
+ for (let i=ROUTERS.length; i--; ) {
+ if (ROUTERS[i].canRoute(url)) return true;
+ }
+ return false;
+}
+
+
+/** Tell all router instances to handle the given URL. */
+function routeTo(url) {
+ let didRoute = false;
+ for (let i=0; i<ROUTERS.length; i++) {
+ if (ROUTERS[i].routeTo(url)===true) {
+ didRoute = true;
+ }
+ }
+ for (let i=subscribers.length; i--; ) {
+ subscribers[i](url);
+ }
+ return didRoute;
+}
+
+
+function routeFromLink(node) {
+ // only valid elements
+ if (!node || !node.getAttribute) return;
+
+ let href = node.getAttribute('href'),
+ target = node.getAttribute('target');
+
+ // ignore links with targets and non-path URLs
+ if (!href || !href.match(/^\//g) || (target && !target.match(/^_?self$/i))) return;
+
+ // attempt to route, if no match simply cede control to browser
+ return route(href);
+}
+
+
+function handleLinkClick(e) {
+ if (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey || e.button!==0) return;
+ routeFromLink(e.currentTarget || e.target || this);
+ return prevent(e);
+}
+
+
+function prevent(e) {
+ if (e) {
+ if (e.stopImmediatePropagation) e.stopImmediatePropagation();
+ if (e.stopPropagation) e.stopPropagation();
+ e.preventDefault();
+ }
+ return false;
+}
+
+
+function delegateLinkHandler(e) {
+ // ignore events the browser takes care of already:
+ if (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey || e.button!==0) return;
+
+ let t = e.target;
+ do {
+ if (String(t.nodeName).toUpperCase()==='A' && t.getAttribute('href')) {
+ if (t.hasAttribute('native')) return;
+ // if link is handled by the router, prevent browser defaults
+ if (routeFromLink(t)) {
+ return prevent(e);
+ }
+ }
+ } while ((t=t.parentNode));
+}
+
+
+let eventListenersInitialized = false;
+
+function initEventListeners() {
+ if (eventListenersInitialized) return;
+
+ if (typeof addEventListener==='function') {
+ if (!customHistory) {
+ addEventListener('popstate', () => {
+ routeTo(getCurrentUrl());
+ });
+ }
+ addEventListener('click', delegateLinkHandler);
+ }
+ eventListenersInitialized = true;
+}
+
+
+class Router extends Component {
+ constructor(props) {
+ super(props);
+ if (props.history) {
+ customHistory = props.history;
+ }
+
+ this.state = {
+ url: props.url || getCurrentUrl()
+ };
+
+ initEventListeners();
+ }
+
+ shouldComponentUpdate(props) {
+ if (props.static!==true) return true;
+ return props.url!==this.props.url || props.onChange!==this.props.onChange;
+ }
+
+ /** Check if the given URL can be matched against any children */
+ canRoute(url) {
+ const children = toChildArray(this.props.children);
+ return this.getMatchingChildren(children, url, false).length > 0;
+ }
+
+ /** Re-render children with a new URL to match against. */
+ routeTo(url) {
+ this.setState({ url });
+
+ const didRoute = this.canRoute(url);
+
+ // trigger a manual re-route if we're not in the middle of an update:
+ if (!this.updating) this.forceUpdate();
+
+ return didRoute;
+ }
+
+ componentWillMount() {
+ ROUTERS.push(this);
+ this.updating = true;
+ }
+
+ componentDidMount() {
+ if (customHistory) {
+ this.unlisten = customHistory.listen((location) => {
+ this.routeTo(`${location.pathname || ''}${location.search || ''}`);
+ });
+ }
+ this.updating = false;
+ }
+
+ componentWillUnmount() {
+ if (typeof this.unlisten==='function') this.unlisten();
+ ROUTERS.splice(ROUTERS.indexOf(this), 1);
+ }
+
+ componentWillUpdate() {
+ this.updating = true;
+ }
+
+ componentDidUpdate() {
+ this.updating = false;
+ }
+
+ getMatchingChildren(children, url, invoke) {
+ return children
+ .filter(prepareVNodeForRanking)
+ .sort(pathRankSort)
+ .map( vnode => {
+ let matches = exec(url, vnode.props.path, vnode.props);
+ if (matches) {
+ if (invoke !== false) {
+ let newProps = { url, matches };
+ assign(newProps, matches);
+ delete newProps.ref;
+ delete newProps.key;
+ return cloneElement(vnode, newProps);
+ }
+ return vnode;
+ }
+ }).filter(Boolean);
+ }
+
+ render({ children, onChange }, { url }) {
+ let active = this.getMatchingChildren(toChildArray(children), url, true);
+
+ let current = active[0] || null;
+
+ let previous = this.previousUrl;
+ if (url!==previous) {
+ this.previousUrl = url;
+ if (typeof onChange==='function') {
+ onChange({
+ router: this,
+ url,
+ previous,
+ active,
+ current
+ });
+ }
+ }
+
+ return current;
+ }
+}
+
+const Link = (props) => (
+ createElement('a', assign({ onClick: handleLinkClick }, props))
+);
+
+const Route = props => createElement(props.component, props);
+
+Router.subscribers = subscribers;
+Router.getCurrentUrl = getCurrentUrl;
+Router.route = route;
+Router.Router = Router;
+Router.Route = Route;
+Router.Link = Link;
+Router.exec = exec;
+
+export { subscribers, getCurrentUrl, route, Router, Route, Link, exec };
+export default Router;
diff --git a/preact-router/src/match.d.ts b/preact-router/src/match.d.ts
new file mode 100644
index 0000000..9d800c3
--- /dev/null
+++ b/preact-router/src/match.d.ts
@@ -0,0 +1,16 @@
+import * as preact from 'preact';
+
+import { Link as StaticLink, RoutableProps } from './';
+
+export class Match extends preact.Component<RoutableProps, {}> {
+ render(): preact.VNode;
+}
+
+export interface LinkProps extends preact.JSX.HTMLAttributes {
+ activeClassName?: string;
+ children?: preact.ComponentChildren;
+}
+
+export function Link(props: LinkProps): preact.VNode;
+
+export default Match;
diff --git a/preact-router/src/match.js b/preact-router/src/match.js
new file mode 100644
index 0000000..90243d0
--- /dev/null
+++ b/preact-router/src/match.js
@@ -0,0 +1,36 @@
+import { h, Component } from 'preact';
+import { subscribers, getCurrentUrl, Link as StaticLink, exec } from 'preact-router';
+
+export class Match extends Component {
+ update = url => {
+ this.nextUrl = url;
+ this.setState({});
+ };
+ componentDidMount() {
+ subscribers.push(this.update);
+ }
+ componentWillUnmount() {
+ subscribers.splice(subscribers.indexOf(this.update)>>>0, 1);
+ }
+ render(props) {
+ let url = this.nextUrl || getCurrentUrl(),
+ path = url.replace(/\?.+$/,'');
+ this.nextUrl = null;
+ return props.children({
+ url,
+ path,
+ matches: exec(path, props.path, {}) !== false
+ });
+ }
+}
+
+export const Link = ({ activeClassName, path, ...props }) => (
+ <Match path={path || props.href}>
+ { ({ matches }) => (
+ <StaticLink {...props} class={[props.class || props.className, matches && activeClassName].filter(Boolean).join(' ')} />
+ ) }
+ </Match>
+);
+
+export default Match;
+Match.Link = Link;
diff --git a/preact-router/src/util.js b/preact-router/src/util.js
new file mode 100644
index 0000000..8bd989c
--- /dev/null
+++ b/preact-router/src/util.js
@@ -0,0 +1,82 @@
+
+const EMPTY = {};
+
+export function assign(obj, props) {
+ // eslint-disable-next-line guard-for-in
+ for (let i in props) {
+ obj[i] = props[i];
+ }
+ return obj;
+}
+
+export function exec(url, route, opts) {
+ let reg = /(?:\?([^#]*))?(#.*)?$/,
+ c = url.match(reg),
+ matches = {},
+ ret;
+ if (c && c[1]) {
+ let p = c[1].split('&');
+ for (let i=0; i<p.length; i++) {
+ let r = p[i].split('=');
+ matches[decodeURIComponent(r[0])] = decodeURIComponent(r.slice(1).join('='));
+ }
+ }
+ url = segmentize(url.replace(reg, ''));
+ route = segmentize(route || '');
+ let max = Math.max(url.length, route.length);
+ for (let i=0; i<max; i++) {
+ if (route[i] && route[i].charAt(0)===':') {
+ let param = route[i].replace(/(^:|[+*?]+$)/g, ''),
+ flags = (route[i].match(/[+*?]+$/) || EMPTY)[0] || '',
+ plus = ~flags.indexOf('+'),
+ star = ~flags.indexOf('*'),
+ val = url[i] || '';
+ if (!val && !star && (flags.indexOf('?')<0 || plus)) {
+ ret = false;
+ break;
+ }
+ matches[param] = decodeURIComponent(val);
+ if (plus || star) {
+ matches[param] = url.slice(i).map(decodeURIComponent).join('/');
+ break;
+ }
+ }
+ else if (route[i]!==url[i]) {
+ ret = false;
+ break;
+ }
+ }
+ if (opts.default!==true && ret===false) return false;
+ return matches;
+}
+
+export function pathRankSort(a, b) {
+ return (
+ (a.rank < b.rank) ? 1 :
+ (a.rank > b.rank) ? -1 :
+ (a.index - b.index)
+ );
+}
+
+// filter out VNodes without attributes (which are unrankeable), and add `index`/`rank` properties to be used in sorting.
+export function prepareVNodeForRanking(vnode, index) {
+ vnode.index = index;
+ vnode.rank = rankChild(vnode);
+ return vnode.props;
+}
+
+export function segmentize(url) {
+ return url.replace(/(^\/+|\/+$)/g, '').split('/');
+}
+
+export function rankSegment(segment) {
+ return segment.charAt(0)==':' ? (1 + '*+?'.indexOf(segment.charAt(segment.length-1))) || 4 : 5;
+}
+
+export function rank(path) {
+ return segmentize(path).map(rankSegment).join('');
+}
+
+function rankChild(vnode) {
+ return vnode.props.default ? 0 : rank(vnode.props.path);
+}
diff --git a/preact-router/test/dist.js b/preact-router/test/dist.js
new file mode 100644
index 0000000..0017e6f
--- /dev/null
+++ b/preact-router/test/dist.js
@@ -0,0 +1,39 @@
+import { h } from 'preact';
+import assertCloneOf from '../test_helpers/assert-clone-of';
+
+const router = require('../');
+const { Router, Link, route } = router;
+
+chai.use(assertCloneOf);
+
+describe('dist', () => {
+ it('should export Router, Link and route', () => {
+ expect(Router).to.be.a('function');
+ expect(Link).to.be.a('function');
+ expect(route).to.be.a('function');
+ expect(router).to.equal(Router);
+ });
+
+ describe('Router', () => {
+ it('should be instantiable', () => {
+ let router = new Router({});
+ let children = [
+ <foo path="/" />,
+ <foo path="/foo" />,
+ <foo path="/foo/bar" />
+ ];
+
+ expect(
+ router.render({ children }, { url:'/foo' })
+ ).to.be.cloneOf(children[1]);
+
+ expect(
+ router.render({ children }, { url:'/' })
+ ).to.be.cloneOf(children[0]);
+
+ expect(
+ router.render({ children }, { url:'/foo/bar' })
+ ).to.be.cloneOf(children[2]);
+ });
+ });
+});
diff --git a/preact-router/test/dom.js b/preact-router/test/dom.js
new file mode 100644
index 0000000..ccec629
--- /dev/null
+++ b/preact-router/test/dom.js
@@ -0,0 +1,293 @@
+import { Router, Link, route } from 'src';
+import { Match, Link as ActiveLink } from 'src/match';
+import { h, render } from 'preact';
+import { act } from 'preact/test-utils';
+
+const Empty = () => null;
+
+function fireEvent(on, type) {
+ let e = document.createEvent('Event');
+ e.initEvent(type, true, true);
+ on.dispatchEvent(e);
+}
+
+describe('dom', () => {
+ let scratch, $, mount;
+
+ before( () => {
+ scratch = document.createElement('div');
+ document.body.appendChild(scratch);
+ $ = s => scratch.querySelector(s);
+ mount = jsx => {render(jsx, scratch); return scratch.lastChild;};
+ });
+
+ beforeEach( () => {
+ // manually reset the URL before every test
+ history.replaceState(null, null, '/');
+ fireEvent(window, 'popstate');
+ });
+
+ afterEach( () => {
+ mount(<Empty />);
+ scratch.innerHTML = '';
+ });
+
+ after( () => {
+ document.body.removeChild(scratch);
+ });
+
+ describe('<Link />', () => {
+ it('should render a normal link', () => {
+ expect(
+ mount(<Link href="/foo" bar="baz">hello</Link>).outerHTML
+ ).to.eql(
+ mount(<a href="/foo" bar="baz">hello</a>).outerHTML
+ );
+ });
+
+ it('should route when clicked', () => {
+ let onChange = sinon.spy();
+ mount(
+ <div>
+ <Link href="/foo">foo</Link>
+ <Router onChange={onChange}>
+ <div default />
+ </Router>
+ </div>
+ );
+ onChange.resetHistory();
+ act(() => {
+ $('a').click();
+ });
+ expect(onChange)
+ .to.have.been.calledOnce
+ .and.to.have.been.calledWithMatch({ url:'/foo' });
+ });
+ });
+
+ describe('<a>', () => {
+ it('should route for existing routes', () => {
+ let onChange = sinon.spy();
+ mount(
+ <div>
+ <a href="/foo">foo</a>
+ <Router onChange={onChange}>
+ <div default />
+ </Router>
+ </div>
+ );
+ onChange.resetHistory();
+ act(() => {
+ $('a').click();
+ });
+ // fireEvent($('a'), 'click');
+ expect(onChange)
+ .to.have.been.calledOnce
+ .and.to.have.been.calledWithMatch({ url:'/foo' });
+ });
+
+ it('should not intercept non-preact elements', () => {
+ let onChange = sinon.spy();
+ mount(
+ <div>
+ <div dangerouslySetInnerHTML={{ __html: `<a href="#foo">foo</a>` }} />
+ <Router onChange={onChange}>
+ <div default />
+ </Router>
+ </div>
+ );
+ onChange.resetHistory();
+ act(() => {
+ $('a').click();
+ });
+ expect(onChange).not.to.have.been.called;
+ expect(location.href).to.contain('#foo');
+ });
+ });
+
+ describe('Router', () => {
+ it('should add and remove children', () => {
+ class A {
+ componentWillMount() {}
+ componentWillUnmount() {}
+ render(){ return <div />; }
+ }
+ sinon.spy(A.prototype, 'componentWillMount');
+ sinon.spy(A.prototype, 'componentWillUnmount');
+ mount(
+ <Router>
+ <A path="/foo" />
+ </Router>
+ );
+ expect(A.prototype.componentWillMount).not.to.have.been.called;
+ act(() => {
+ route('/foo');
+ });
+ expect(A.prototype.componentWillMount).to.have.been.calledOnce;
+ expect(A.prototype.componentWillUnmount).not.to.have.been.called;
+ act(() => {
+ route('/bar');
+ });
+ expect(A.prototype.componentWillMount).to.have.been.calledOnce;
+ expect(A.prototype.componentWillUnmount).to.have.been.calledOnce;
+ });
+
+ it('should support re-routing', done => {
+ class A {
+ componentWillMount() {
+ route('/b');
+ }
+ render(){ return <div class="a" />; }
+ }
+ class B {
+ componentWillMount(){}
+ render(){ return <div class="b" />; }
+ }
+ sinon.spy(A.prototype, 'componentWillMount');
+ sinon.spy(B.prototype, 'componentWillMount');
+ mount(
+ <Router>
+ <A path="/a" />
+ <B path="/b" />
+ </Router>
+ );
+ expect(A.prototype.componentWillMount).not.to.have.been.called;
+ act(() => {
+ route('/a');
+ });
+ expect(A.prototype.componentWillMount).to.have.been.calledOnce;
+ A.prototype.componentWillMount.resetHistory();
+ expect(location.pathname).to.equal('/b');
+ setTimeout( () => {
+ expect(A.prototype.componentWillMount).not.to.have.been.called;
+ expect(B.prototype.componentWillMount).to.have.been.calledOnce;
+ expect(scratch).to.have.deep.property('firstElementChild.className', 'b');
+ done();
+ }, 10);
+ });
+
+ it('should not carry over the previous value of a query parameter', () => {
+ class A {
+ render({ bar }){ return <p>bar is {bar}</p>; }
+ }
+ let routerRef;
+ mount(
+ <Router ref={r => routerRef = r}>
+ <A path="/foo" />
+ </Router>
+ );
+ act(() => {
+ route('/foo');
+ });
+ expect(routerRef.base.outerHTML).to.eql('<p>bar is </p>');
+ act(() => {
+ route('/foo?bar=5');
+ });
+ expect(routerRef.base.outerHTML).to.eql('<p>bar is 5</p>');
+ act(() => {
+ route('/foo');
+ });
+ expect(routerRef.base.outerHTML).to.eql('<p>bar is </p>');
+ });
+ });
+
+ describe('preact-router/match', () => {
+ describe('<Match>', () => {
+ it('should invoke child function with match status when routing', done => {
+ let spy1 = sinon.spy(),
+ spy2 = sinon.spy(),
+ spy3 = sinon.spy();
+ mount(
+ <div>
+ <Router />
+ <Match path="/foo">{spy1}</Match>
+ <Match path="/bar">{spy2}</Match>
+ <Match path="/bar/:param">{spy3}</Match>
+ </div>
+ );
+
+ expect(spy1, 'spy1 /foo').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/', url:'/' });
+ expect(spy2, 'spy2 /foo').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/', url:'/' });
+ expect(spy3, 'spy3 /foo').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/', url:'/' });
+
+ spy1.resetHistory();
+ spy2.resetHistory();
+ spy3.resetHistory();
+
+ route('/foo');
+
+ setTimeout( () => {
+ expect(spy1, 'spy1 /foo').to.have.been.calledOnce.and.calledWithMatch({ matches: true, path:'/foo', url:'/foo' });
+ expect(spy2, 'spy2 /foo').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/foo', url:'/foo' });
+ expect(spy3, 'spy3 /foo').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/foo', url:'/foo' });
+ spy1.resetHistory();
+ spy2.resetHistory();
+ spy3.resetHistory();
+
+ route('/foo?bar=5');
+
+ setTimeout( () => {
+ expect(spy1, 'spy1 /foo?bar=5').to.have.been.calledOnce.and.calledWithMatch({ matches: true, path:'/foo', url:'/foo?bar=5' });
+ expect(spy2, 'spy2 /foo?bar=5').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/foo', url:'/foo?bar=5' });
+ expect(spy3, 'spy3 /foo?bar=5').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/foo', url:'/foo?bar=5' });
+ spy1.resetHistory();
+ spy2.resetHistory();
+ spy3.resetHistory();
+
+ route('/bar');
+
+ setTimeout( () => {
+ expect(spy1, 'spy1 /bar').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/bar', url:'/bar' });
+ expect(spy2, 'spy2 /bar').to.have.been.calledOnce.and.calledWithMatch({ matches: true, path:'/bar', url:'/bar' });
+ expect(spy3, 'spy3 /bar').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/bar', url:'/bar' });
+ spy1.resetHistory();
+ spy2.resetHistory();
+ spy3.resetHistory();
+
+ route('/bar/123');
+
+ setTimeout( () => {
+ expect(spy1, 'spy1 /bar/123').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/bar/123', url:'/bar/123' });
+ expect(spy2, 'spy2 /bar/123').to.have.been.calledOnce.and.calledWithMatch({ matches: false, path:'/bar/123', url:'/bar/123' });
+ expect(spy3, 'spy3 /bar/123').to.have.been.calledOnce.and.calledWithMatch({ matches: true, path:'/bar/123', url:'/bar/123' });
+
+ done();
+ }, 20);
+ }, 20);
+ }, 20);
+ }, 20);
+ });
+ });
+
+ describe('<Link>', () => {
+ it('should render with active class when active', done => {
+ mount(
+ <div>
+ <Router />
+ <ActiveLink activeClassName="active" path="/foo">foo</ActiveLink>
+ <ActiveLink activeClassName="active" class="bar" path="/bar">bar</ActiveLink>
+ </div>
+ );
+ route('/foo');
+
+ setTimeout( () => {
+ expect(scratch.innerHTML).to.eql('<div><a class="active">foo</a><a class="bar">bar</a></div>');
+
+ route('/foo?bar=5');
+
+ setTimeout( () => {
+ expect(scratch.innerHTML).to.eql('<div><a class="active">foo</a><a class="bar">bar</a></div>');
+
+ route('/bar');
+
+ setTimeout( () => {
+ expect(scratch.innerHTML).to.eql('<div><a class="">foo</a><a class="bar active">bar</a></div>');
+
+ done();
+ });
+ });
+ });
+ });
+ });
+ });
+});
diff --git a/preact-router/test/index.js b/preact-router/test/index.js
new file mode 100644
index 0000000..842eecb
--- /dev/null
+++ b/preact-router/test/index.js
@@ -0,0 +1,249 @@
+import { Router, Link, route } from 'src';
+import { h, render } from 'preact';
+import assertCloneOf from '../test_helpers/assert-clone-of';
+
+chai.use(assertCloneOf);
+
+describe('preact-router', () => {
+ it('should export Router, Link and route', () => {
+ expect(Router).to.be.a('function');
+ expect(Link).to.be.a('function');
+ expect(route).to.be.a('function');
+ });
+
+ describe('Router', () => {
+ let scratch;
+ let router;
+
+ beforeEach(() => {
+ scratch = document.createElement('div');
+ document.body.appendChild(scratch);
+ });
+
+ afterEach(() => {
+ document.body.removeChild(scratch);
+ router.componentWillUnmount();
+ });
+
+ it('should filter children based on URL', () => {
+ let children = [
+ <foo path="/" />,
+ <foo path="/foo" />,
+ <foo path="/foo/bar" />
+ ];
+
+ render(
+ (
+ <Router ref={ref => (router = ref)}>
+ {children}
+ </Router>
+ ),
+ scratch
+ );
+
+ expect(
+ router.render({ children }, { url:'/foo' })
+ ).to.be.cloneOf(children[1]);
+
+ expect(
+ router.render({ children }, { url:'/' })
+ ).to.be.cloneOf(children[0]);
+
+ expect(
+ router.render({ children }, { url:'/foo/bar' })
+ ).to.be.cloneOf(children[2]);
+ });
+
+ it('should support nested parameterized routes', () => {
+ let children = [
+ <foo path="/foo" />,
+ <foo path="/foo/:bar" />,
+ <foo path="/foo/:bar/:baz" />
+ ];
+
+ render(
+ (
+ <Router ref={ref => (router = ref)}>
+ {children}
+ </Router>
+ ),
+ scratch
+ );
+
+
+ expect(
+ router.render({ children }, { url:'/foo' })
+ ).to.be.cloneOf(children[0]);
+
+ expect(
+ router.render({ children }, { url:'/foo/bar' })
+ ).to.be.cloneOf(children[1], { matches: { bar:'bar' }, url:'/foo/bar' });
+
+ expect(
+ router.render({ children }, { url:'/foo/bar/baz' })
+ ).be.cloneOf(children[2], { matches: { bar:'bar', baz:'baz' }, url:'/foo/bar/baz' });
+ });
+
+ it('should support default routes', () => {
+ let children = [
+ <foo default />,
+ <foo path="/" />,
+ <foo path="/foo" />
+ ];
+
+ render(
+ (
+ <Router ref={ref => (router = ref)}>
+ {children}
+ </Router>
+ ),
+ scratch
+ );
+
+ expect(
+ router.render({ children }, { url:'/foo' })
+ ).to.be.cloneOf(children[2]);
+
+ expect(
+ router.render({ children }, { url:'/' })
+ ).to.be.cloneOf(children[1]);
+
+ expect(
+ router.render({ children }, { url:'/asdf/asdf' })
+ ).to.be.cloneOf(children[0], { matches: {}, url:'/asdf/asdf' });
+ });
+
+ it('should support initial route prop', () => {
+ let children = [
+ <foo default />,
+ <foo path="/" />,
+ <foo path="/foo" />
+ ];
+
+ render(
+ (
+ <Router url="/foo" ref={ref => (router = ref)}>
+ {children}
+ </Router>
+ ),
+ scratch
+ );
+
+ expect(
+ router.render({ children }, router.state)
+ ).to.be.cloneOf(children[2]);
+
+ render(null, scratch);
+
+ render(
+ (
+ <Router ref={ref => (router = ref)}>
+ {children}
+ </Router>
+ ),
+ scratch
+ );
+
+ expect(router).to.have.deep.property('state.url', location.pathname + (location.search || ''));
+ });
+
+ it('should support custom history', () => {
+ let push = sinon.spy();
+ let replace = sinon.spy();
+ let listen = sinon.spy();
+ let getCurrentLocation = sinon.spy(() => ({pathname: '/initial'}));
+
+ let children = [
+ <index path="/" />,
+ <foo path="/foo" />,
+ <bar path="/bar" />
+ ];
+
+ render(
+ (
+ <Router history={{ push, replace, getCurrentLocation, listen }} ref={ref => (router = ref)}>
+ {children}
+ </Router>
+ ),
+ scratch
+ );
+
+ router.componentWillMount();
+
+ router.render(router.props, router.state);
+ expect(getCurrentLocation, 'getCurrentLocation').to.have.been.calledOnce;
+ expect(router).to.have.deep.property('state.url', '/initial');
+
+ route('/foo');
+ expect(push, 'push').to.have.been.calledOnce.and.calledWith('/foo');
+
+ route('/bar', true);
+ expect(replace, 'replace').to.have.been.calledOnce.and.calledWith('/bar');
+
+ router.componentWillUnmount();
+ });
+ });
+
+ describe('route()', () => {
+ let router;
+ let scratch;
+
+ beforeEach(() => {
+ scratch = document.createElement('div');
+ document.body.appendChild(scratch);
+
+ render(
+ (
+ <Router url="/foo" ref={ref => (router = ref)}>
+ <foo path="/" />
+ <foo path="/foo" />
+ </Router>
+ ),
+ scratch
+ );
+
+ sinon.spy(router, 'routeTo');
+ });
+
+ afterEach(() => {
+ router.componentWillUnmount();
+ document.body.removeChild(scratch);
+ });
+
+ it('should return true for existing route', () => {
+ router.routeTo.resetHistory();
+ expect(route('/')).to.equal(true);
+ expect(router.routeTo)
+ .to.have.been.calledOnce
+ .and.calledWithExactly('/');
+
+ router.routeTo.resetHistory();
+ expect(route('/foo')).to.equal(true);
+ expect(router.routeTo)
+ .to.have.been.calledOnce
+ .and.calledWithExactly('/foo');
+ });
+
+ it('should return false for missing route', () => {
+ router.routeTo.resetHistory();
+ expect(route('/asdf')).to.equal(false);
+ expect(router.routeTo)
+ .to.have.been.calledOnce
+ .and.calledWithExactly('/asdf');
+ });
+
+ it('should return true for fallback route', () => {
+ let oldChildren = router.props.children;
+ router.props.children = [
+ <foo default />,
+ ...oldChildren
+ ];
+
+ router.routeTo.resetHistory();
+ expect(route('/asdf')).to.equal(true);
+ expect(router.routeTo)
+ .to.have.been.calledOnce
+ .and.calledWithExactly('/asdf');
+ });
+ });
+});
diff --git a/preact-router/test/match.tsx b/preact-router/test/match.tsx
new file mode 100644
index 0000000..8e1c175
--- /dev/null
+++ b/preact-router/test/match.tsx
@@ -0,0 +1,26 @@
+import { h } from 'preact';
+import { Link, RoutableProps } from '../';
+import { Match } from '../match';
+
+function ChildComponent({}: {}) {
+ return <div></div>;
+}
+
+function LinkComponent({}: {}) {
+ return (
+ <div>
+ <Link href="/a" />
+ <Link activeClassName="active" href="/b" />
+ </div>
+ );
+}
+
+function MatchComponent({}: {}) {
+ return (
+ <Match path="/b">
+ {({ matches, path, url }) => matches && (
+ <ChildComponent />
+ )}
+ </Match>
+ );
+} \ No newline at end of file
diff --git a/preact-router/test/router.tsx b/preact-router/test/router.tsx
new file mode 100644
index 0000000..fceeea5
--- /dev/null
+++ b/preact-router/test/router.tsx
@@ -0,0 +1,36 @@
+import { h, render, Component, FunctionalComponent } from 'preact';
+import Router, { Route, RoutableProps } from '../';
+
+class ClassComponent extends Component<{}, {}> {
+ render() {
+ return <div></div>;
+ }
+}
+
+const SomeFunctionalComponent: FunctionalComponent<{}> = ({}) => {
+ return <div></div>;
+};
+
+function RouterWithComponents() {
+ return (
+ <Router>
+ <div default></div>
+ <ClassComponent default />
+ <SomeFunctionalComponent default />
+ <div path="/a"></div>
+ <ClassComponent path="/b" />
+ <SomeFunctionalComponent path="/c" />
+ </Router>
+ )
+}
+
+function RouterWithRoutes() {
+ return (
+ <Router>
+ <Route default component={ClassComponent} />
+ <Route default component={SomeFunctionalComponent} />
+ <Route path="/a" component={ClassComponent} />
+ <Route path="/b" component={SomeFunctionalComponent} />
+ </Router>
+ );
+} \ No newline at end of file
diff --git a/preact-router/test/tsconfig.json b/preact-router/test/tsconfig.json
new file mode 100644
index 0000000..4096c8c
--- /dev/null
+++ b/preact-router/test/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "compilerOptions": {
+ "noEmit": true,
+ "jsx": "react",
+ "jsxFactory": "h"
+ },
+ "files": [
+ "router.tsx",
+ "match.tsx",
+ "../src/index.d.ts",
+ "../src/match.d.ts"
+ ]
+} \ No newline at end of file
diff --git a/preact-router/test/util.js b/preact-router/test/util.js
new file mode 100644
index 0000000..69921b7
--- /dev/null
+++ b/preact-router/test/util.js
@@ -0,0 +1,110 @@
+import { exec, pathRankSort, prepareVNodeForRanking, segmentize, rank } from 'src/util';
+
+const strip = str => segmentize(str).join('/');
+
+describe('util', () => {
+ describe('strip', () => {
+ it('should strip preceeding slashes', () => {
+ expect(strip('')).to.equal('');
+ expect(strip('/')).to.equal('');
+ expect(strip('/a')).to.equal('a');
+ expect(strip('//a')).to.equal('a');
+ expect(strip('//a/')).to.equal('a');
+ });
+
+ it('should strip trailing slashes', () => {
+ expect(strip('')).to.equal('');
+ expect(strip('/')).to.equal('');
+ expect(strip('a/')).to.equal('a');
+ expect(strip('/a//')).to.equal('a');
+ });
+ });
+
+ describe('rank', () => {
+ it('should return rank of path segments', () => {
+ expect(rank('')).to.equal('5');
+ expect(rank('/')).to.equal('5');
+ expect(rank('//')).to.equal('5');
+ expect(rank('a/b/c')).to.equal('555');
+ expect(rank('/a/b/c/')).to.equal('555');
+ expect(rank('/:a/b?/:c?/:d*/:e+')).to.eql('45312');
+ });
+ });
+
+ describe('segmentize', () => {
+ it('should split path on slashes', () => {
+ expect(segmentize('')).to.eql(['']);
+ expect(segmentize('/')).to.eql(['']);
+ expect(segmentize('//')).to.eql(['']);
+ expect(segmentize('a/b/c')).to.eql(['a','b','c']);
+ expect(segmentize('/a/b/c/')).to.eql(['a','b','c']);
+ });
+ });
+
+ describe('pathRankSort', () => {
+ it('should sort by highest rank first', () => {
+ let paths = arr => arr.map( path => ({ props:{path}} ) );
+ let clean = vnode => { delete vnode.rank; delete vnode.index; return vnode; };
+
+ expect(
+ paths(['/:a*', '/a', '/:a+', '/:a?', '/a/:b*']).filter(prepareVNodeForRanking).sort(pathRankSort).map(clean)
+ ).to.eql(
+ paths(['/a/:b*', '/a', '/:a?', '/:a+', '/:a*'])
+ );
+ });
+
+ it('should return default routes last', () => {
+ let paths = arr => arr.map( path => ({props:{path}}) );
+ let clean = vnode => { delete vnode.rank; delete vnode.index; return vnode; };
+
+ let defaultPath = {props:{default:true}};
+ let p = paths(['/a/b/', '/a/b', '/', 'b']);
+ p.splice(2,0,defaultPath);
+
+ expect(
+ p.filter(prepareVNodeForRanking).sort(pathRankSort).map(clean)
+ ).to.eql(
+ paths(['/a/b/', '/a/b', '/', 'b']).concat(defaultPath)
+ );
+ });
+ });
+
+ describe('exec', () => {
+ it('should match explicit equality', () => {
+ expect(exec('/','/', {})).to.eql({});
+ expect(exec('/a', '/a', {})).to.eql({});
+ expect(exec('/a', '/b', {})).to.eql(false);
+ expect(exec('/a/b', '/a/b', {})).to.eql({});
+ expect(exec('/a/b', '/a/a', {})).to.eql(false);
+ expect(exec('/a/b', '/b/b', {})).to.eql(false);
+ });
+
+ it('should match param segments', () => {
+ expect(exec('/', '/:foo', {})).to.eql(false);
+ expect(exec('/bar', '/:foo', {})).to.eql({ foo:'bar' });
+ });
+
+ it('should match optional param segments', () => {
+ expect(exec('/', '/:foo?', {})).to.eql({ foo:'' });
+ expect(exec('/bar', '/:foo?', {})).to.eql({ foo:'bar' });
+ expect(exec('/', '/:foo?/:bar?', {})).to.eql({ foo:'', bar:'' });
+ expect(exec('/bar', '/:foo?/:bar?', {})).to.eql({ foo:'bar', bar:'' });
+ expect(exec('/bar', '/:foo?/bar', {})).to.eql(false);
+ expect(exec('/foo/bar', '/:foo?/bar', {})).to.eql({ foo:'foo' });
+ });
+
+ it('should match splat param segments', () => {
+ expect(exec('/', '/:foo*', {})).to.eql({ foo:'' });
+ expect(exec('/a', '/:foo*', {})).to.eql({ foo:'a' });
+ expect(exec('/a/b', '/:foo*', {})).to.eql({ foo:'a/b' });
+ expect(exec('/a/b/c', '/:foo*', {})).to.eql({ foo:'a/b/c' });
+ });
+
+ it('should match required splat param segments', () => {
+ expect(exec('/', '/:foo+', {})).to.eql(false);
+ expect(exec('/a', '/:foo+', {})).to.eql({ foo:'a' });
+ expect(exec('/a/b', '/:foo+', {})).to.eql({ foo:'a/b' });
+ expect(exec('/a/b/c', '/:foo+', {})).to.eql({ foo:'a/b/c' });
+ });
+ });
+});
diff --git a/preact-router/test_helpers/assert-clone-of.js b/preact-router/test_helpers/assert-clone-of.js
new file mode 100644
index 0000000..5a1a707
--- /dev/null
+++ b/preact-router/test_helpers/assert-clone-of.js
@@ -0,0 +1,12 @@
+import { cloneElement } from 'preact';
+
+export default function assertCloneOf({ Assertion }) {
+ if (Assertion.__assertCloneOfMounted === true) return;
+ Assertion.__assertCloneOfMounted = true;
+
+ Assertion.addMethod('cloneOf', function(routeJsx, { matches = {}, url = this._obj.props.path } = {}) {
+ const vnode = this._obj;
+ const clonedRoute = cloneElement(routeJsx, { url, matches, ...matches });
+ new chai.Assertion(vnode).to.be.eql(clonedRoute);
+ });
+}
diff --git a/preact/.codesandbox/ci.json b/preact/.codesandbox/ci.json
new file mode 100644
index 0000000..5f3f859
--- /dev/null
+++ b/preact/.codesandbox/ci.json
@@ -0,0 +1,4 @@
+{
+ "sandboxes": ["preact-x-preact-cli-3-starter-vj285y2rn3"],
+ "silent": true
+}
diff --git a/preact/.editorconfig b/preact/.editorconfig
new file mode 100644
index 0000000..0024e9d
--- /dev/null
+++ b/preact/.editorconfig
@@ -0,0 +1,16 @@
+root = true
+
+[*]
+indent_style = tab
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[{*.json,.*rc,*.yml}]
+indent_style = space
+indent_size = 2
+insert_final_newline = false
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/preact/.github/CODE_OF_CONDUCT.md b/preact/.github/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..9e81e67
--- /dev/null
+++ b/preact/.github/CODE_OF_CONDUCT.md
@@ -0,0 +1,46 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@preactjs.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/4/
diff --git a/preact/.github/FUNDING.yml b/preact/.github/FUNDING.yml
new file mode 100644
index 0000000..bbe0c7d
--- /dev/null
+++ b/preact/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+github: [preactjs]
+open_collective: preact
diff --git a/preact/.github/ISSUE_TEMPLATE/bug_report.md b/preact/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..b0dd055
--- /dev/null
+++ b/preact/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,25 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+- [ ] Check if updating to the latest Preact version resolves the issue
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+
+If possible, please provide a CodeSandbox/Codepen that demonstrates the issue. You can use the following template: https://codesandbox.io/s/preact-x-preact-cli-3-starter-vj285y2rn3
+
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. See error
+
+**Expected behavior**
+What should have happened when following the steps above?
diff --git a/preact/.github/ISSUE_TEMPLATE/feature_request.md b/preact/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..b289625
--- /dev/null
+++ b/preact/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,14 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: feature request
+assignees: ''
+
+---
+
+**Describe the feature you'd love to see**
+A clear and concise description of what you'd love to see added to Preact.
+
+**Additional context (optional)**
+Add any other context or screenshots about the feature request here.
diff --git a/preact/.github/workflows/benchmarks.yml b/preact/.github/workflows/benchmarks.yml
new file mode 100644
index 0000000..0cb6685
--- /dev/null
+++ b/preact/.github/workflows/benchmarks.yml
@@ -0,0 +1,256 @@
+name: Benchmarks
+
+on:
+ workflow_dispatch:
+ pull_request:
+ branches:
+ - '**'
+ paths:
+ - 'src/**.js'
+ push:
+ branches:
+ - master
+ - restructure
+ paths:
+ - 'src/**.js'
+
+jobs:
+ prepare:
+ name: Prepare benchmarks
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - name: Cache node modules
+ uses: actions/cache@v1
+ env:
+ cache-name: cache-node-modules
+ with:
+ path: ~/.npm
+ # This uses the same name as the build-action so we can share the caches.
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-build-${{ env.cache-name }}-
+ ${{ runner.os }}-build-
+ ${{ runner.os }}-
+ - run: npm ci
+ - name: Package
+ # Use --ignore-scripts here to avoid re-building again before pack
+ run: |
+ npm pack --ignore-scripts
+ mv preact-*.tgz preact.tgz
+ tar -xzf preact.tgz
+ rm preact.tgz
+ - name: Upload build output
+ uses: actions/upload-artifact@v2
+ with:
+ name: build-output
+ path: package/
+ - uses: andrewiggins/download-base-artifact@v1
+ with:
+ artifact: npm-package
+ workflow: ci.yml
+ required: false
+ - name: Upload base preact package
+ uses: actions/upload-artifact@v2
+ with:
+ name: build-output
+ path: preact.tgz
+
+ bench_text_update:
+ name: Bench text_update
+ runs-on: ubuntu-latest
+ needs: prepare
+ timeout-minutes: 10
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - uses: actions/download-artifact@v2
+ with:
+ name: build-output
+ - name: install & build
+ run: |
+ cd benches
+ npm ci
+ - name: bench
+ run: |
+ export CHROMEDRIVER_FILEPATH=$(which chromedriver)
+ cd benches
+ npm run bench text_update.html
+ - name: Upload results
+ uses: actions/upload-artifact@v2
+ with:
+ name: results
+ path: benches/results/text_update.json
+
+ bench_many_updates:
+ name: Bench many_updates
+ runs-on: ubuntu-latest
+ needs: prepare
+ timeout-minutes: 10
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - uses: actions/download-artifact@v2
+ with:
+ name: build-output
+ - name: install & build
+ run: |
+ cd benches
+ npm ci
+ - name: bench
+ run: |
+ export CHROMEDRIVER_FILEPATH=$(which chromedriver)
+ cd benches
+ npm run bench many_updates.html
+ - name: Upload results
+ uses: actions/upload-artifact@v2
+ with:
+ name: results
+ path: benches/results/many_updates.json
+
+ bench_02_replace1k:
+ name: Bench 02_replace1k
+ runs-on: ubuntu-latest
+ needs: prepare
+ timeout-minutes: 10
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - uses: actions/download-artifact@v2
+ with:
+ name: build-output
+ - name: install & build
+ run: |
+ cd benches
+ npm ci
+ - name: bench
+ run: |
+ export CHROMEDRIVER_FILEPATH=$(which chromedriver)
+ cd benches
+ npm run bench 02_replace1k.html
+ - name: Upload results
+ uses: actions/upload-artifact@v2
+ with:
+ name: results
+ path: benches/results/02_replace1k.json
+
+ bench_03_update10th1k_x16:
+ name: Bench 03_update10th1k_x16
+ runs-on: ubuntu-latest
+ needs: prepare
+ timeout-minutes: 10
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - uses: actions/download-artifact@v2
+ with:
+ name: build-output
+ - name: install & build
+ run: |
+ cd benches
+ npm ci
+ - name: bench
+ run: |
+ export CHROMEDRIVER_FILEPATH=$(which chromedriver)
+ cd benches
+ npm run bench 03_update10th1k_x16.html
+ - name: Upload results
+ uses: actions/upload-artifact@v2
+ with:
+ name: results
+ path: benches/results/03_update10th1k_x16.json
+
+ bench_07_create10k:
+ name: Bench 07_create10k
+ runs-on: ubuntu-latest
+ needs: prepare
+ timeout-minutes: 20
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - uses: actions/download-artifact@v2
+ with:
+ name: build-output
+ - name: install & build
+ run: |
+ cd benches
+ npm ci
+ - name: bench
+ run: |
+ export CHROMEDRIVER_FILEPATH=$(which chromedriver)
+ cd benches
+ npm run bench 07_create10k.html
+ - name: Upload results
+ uses: actions/upload-artifact@v2
+ with:
+ name: results
+ path: benches/results/07_create10k.json
+
+ bench_hydrate1k:
+ name: Bench hydrate1k
+ runs-on: ubuntu-latest
+ needs: prepare
+ timeout-minutes: 20
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - uses: actions/download-artifact@v2
+ with:
+ name: build-output
+ - name: install & build
+ run: |
+ cd benches
+ npm ci
+ - name: bench
+ run: |
+ export CHROMEDRIVER_FILEPATH=$(which chromedriver)
+ cd benches
+ npm run bench hydrate1k.html
+ - name: Upload results
+ uses: actions/upload-artifact@v2
+ with:
+ name: results
+ path: benches/results/hydrate1k.json
+
+ bench_filter_list:
+ name: Bench filter_list
+ runs-on: ubuntu-latest
+ needs: prepare
+ timeout-minutes: 10
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - uses: actions/download-artifact@v2
+ with:
+ name: build-output
+ - name: install & build
+ run: |
+ cd benches
+ npm ci
+ - name: bench
+ run: |
+ export CHROMEDRIVER_FILEPATH=$(which chromedriver)
+ cd benches
+ npm run bench filter_list.html
+ - name: Upload results
+ uses: actions/upload-artifact@v2
+ with:
+ name: results
+ path: benches/results/filter_list.json
diff --git a/preact/.github/workflows/ci.yml b/preact/.github/workflows/ci.yml
new file mode 100644
index 0000000..80dcd86
--- /dev/null
+++ b/preact/.github/workflows/ci.yml
@@ -0,0 +1,57 @@
+name: CI
+
+on:
+ workflow_dispatch:
+ pull_request:
+ branches:
+ - '**'
+ push:
+ branches:
+ - master
+ - restructure
+
+jobs:
+ build_test:
+ name: Build & Test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - name: Cache node modules
+ uses: actions/cache@v1
+ env:
+ cache-name: cache-node-modules
+ with:
+ path: ~/.npm
+ # This uses the same name as the build-action so we can share the caches.
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-build-${{ env.cache-name }}-
+ ${{ runner.os }}-build-
+ ${{ runner.os }}-
+ - run: npm ci
+ - name: test
+ env:
+ CI: true
+ COVERAGE: true
+ FLAKEY: false
+ # Not using `npm test` since it rebuilds source which npm ci has already done
+ run: |
+ npm run lint
+ npm run test:unit
+ - name: Coveralls GitHub Action
+ uses: coverallsapp/github-action@v1.0.1
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Package
+ # Use --ignore-scripts here to avoid re-building again before pack
+ run: |
+ npm pack --ignore-scripts
+ mv preact-*.tgz preact.tgz
+ - name: Upload npm package
+ uses: actions/upload-artifact@v2
+ with:
+ name: npm-package
+ path: preact.tgz
diff --git a/preact/.github/workflows/pr-reporter.yml b/preact/.github/workflows/pr-reporter.yml
new file mode 100644
index 0000000..b5e2f1b
--- /dev/null
+++ b/preact/.github/workflows/pr-reporter.yml
@@ -0,0 +1,51 @@
+name: Report Results to PR
+
+on:
+ # The pull_request event can't write comments for PRs from forks so using this
+ # workflow_run workflow as a workaround
+ workflow_run:
+ workflows: ['Benchmarks']
+ branches: ['**']
+ types:
+ - completed
+ - requested
+
+jobs:
+ report_running:
+ name: Report benchmarks are in-progress
+ runs-on: ubuntu-latest
+ # Only add the "benchmarks are running" text when a workflow_run is
+ # requested (a.k.a starting)
+ if: ${{ github.event.action == 'requested' }}
+ steps:
+ - name: Report Tachometer Running
+ uses: andrewiggins/tachometer-reporter-action@v2
+ with:
+ # Set initialize to true so this action just creates the comment or
+ # adds the "benchmarks are running" text
+ initialize: true
+
+ report_results:
+ name: Report benchmark results
+ runs-on: ubuntu-latest
+ # Only run this job if the event action was "completed" and the triggering
+ # workflow_run was successful
+ if: ${{ github.event.action == 'completed' && github.event.workflow_run.conclusion == 'success' }}
+ steps:
+ # Download the artifact from the triggering workflow that contains the
+ # Tachometer results to report
+ - uses: dawidd6/action-download-artifact@v2
+ with:
+ workflow: ${{ github.event.workflow.id }}
+ run_id: ${{ github.event.workflow_run.id }}
+ name: results
+ path: results
+
+ # Create/update the comment with the latest results
+ - name: Report Tachometer Results
+ uses: andrewiggins/tachometer-reporter-action@v2
+ with:
+ path: results/*.json
+ base-bench-name: preact-master
+ pr-bench-name: preact-local
+ summarize: 'duration, usedJSHeapSize'
diff --git a/preact/.github/workflows/saucelabs.yml b/preact/.github/workflows/saucelabs.yml
new file mode 100644
index 0000000..e26ae2b
--- /dev/null
+++ b/preact/.github/workflows/saucelabs.yml
@@ -0,0 +1,42 @@
+name: Saucelabs
+
+on:
+ push:
+ branches:
+ - master
+ - restructure
+
+jobs:
+ build_test:
+ name: Build & Test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 1
+ - uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - name: Cache node modules
+ uses: actions/cache@v1
+ env:
+ cache-name: cache-node-modules
+ with:
+ path: ~/.npm
+ # This uses the same name as the build-action so we can share the caches.
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-build-${{ env.cache-name }}-
+ ${{ runner.os }}-build-
+ ${{ runner.os }}-
+ - run: npm ci
+ - name: test
+ env:
+ CI: true
+ COVERAGE: true
+ FLAKEY: false
+ RUN_SAUCE_LABS: true
+ SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }}
+ SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }}
+ # Not using `npm test` since it rebuilds source which npm ci has already done
+ run: npm run test:unit
diff --git a/preact/.github/workflows/size.yml b/preact/.github/workflows/size.yml
new file mode 100644
index 0000000..f886534
--- /dev/null
+++ b/preact/.github/workflows/size.yml
@@ -0,0 +1,17 @@
+name: Compressed Size
+
+on:
+ pull_request:
+ branches:
+ - '**'
+ paths:
+ - '**/src/**.js'
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: preactjs/compressed-size-action@v1
+ with:
+ repo-token: '${{ secrets.GITHUB_TOKEN }}'
diff --git a/preact/.gitignore b/preact/.gitignore
new file mode 100644
index 0000000..54e501b
--- /dev/null
+++ b/preact/.gitignore
@@ -0,0 +1,16 @@
+.DS_Store
+node_modules
+npm-debug.log
+dist
+*/package-lock.json
+yarn.lock
+.vscode
+.idea
+test/ts/**/*.js
+coverage
+*.sw[op]
+*.log
+package/
+preact-*.tgz
+preact.tgz
+jsx-csstype.d.ts
diff --git a/preact/CODE_OF_CONDUCT.md b/preact/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..9e81e67
--- /dev/null
+++ b/preact/CODE_OF_CONDUCT.md
@@ -0,0 +1,46 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@preactjs.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/4/
diff --git a/preact/CONTRIBUTING.md b/preact/CONTRIBUTING.md
new file mode 100644
index 0000000..465acad
--- /dev/null
+++ b/preact/CONTRIBUTING.md
@@ -0,0 +1,237 @@
+# Contributing
+
+This document is intended for developers interest in making contributions to Preact and document our internal processes like releasing a new version.
+
+## Getting Started
+
+This steps will help you to set up your development environment. That includes all dependencies we use to build Preact and developer tooling like git commit hooks.
+
+1. Clone the git repository: `git clone git@github.com:preactjs/preact.git`
+2. Go into the cloned folder: `cd preact/`
+3. Install all dependencies: `npm install`
+
+## The Repo Structure
+
+This repository contains Preact itself, as well as several addons like the debugging package for example. This is reflected in the directory structure of this repository. Each package has a `src/` folder where the source code can be found, a `test` folder for all sorts of tests that check if the code in `src/` is correct, and a `dist/` folder where you can find the bundled artifacts. Note that the `dist/` folder may not be present initially. It will be created as soon as you run any of the build scripts inside `package.json`. More on that later ;)
+
+A quick overview of our repository:
+
+```bash
+# The repo root (folder where you cloned the repo into)
+/
+ src/ # Source code of our core
+ test/ # Unit tests for core
+ dist/ # Build artifacts for publishing on npm (may not be present)
+
+ # Sub-package, can be imported via `preact/compat` by users.
+ # Compat stands for react-compatibility layer which tries to mirror the
+ # react API as close as possible (mostly legacy APIs)
+ compat/
+ src/ # Source code of the compat addon
+ test/ # Tests related to the compat addon
+ dist/ # Build artifacts for publishing on npm (may not be present)
+
+ # Sub-package, can be imported via `preact/hooks` by users.
+ # The hooks API is an effect based API to deal with component lifcycles.
+ # It's similar to hooks in React
+ hooks/
+ src/ # Source code of the hooks addon
+ test/ # Tests related to the hooks addon
+ dist/ # Build artifacts for publishing on npm (may not be present)
+
+ # Sub-package, can be imported via `preact/debug` by users.
+ # Includes debugging warnings and error messages for common mistakes found
+ # in Preact application. Also hosts the devtools bridge
+ debug/
+ src/ # Source code of the debug addon
+ test/ # Tests related to the debug addon
+ dist/ # Build artifacts for publishing on npm (may not be present)
+
+ # Sub-package, can be imported via `preact/test-utils` by users.
+ # Provides helpers to make testing Preact applications easier
+ test-utils/
+ src/ # Source code of the test-utils addon
+ test/ # Tests related to the test-utils addon
+ dist/ # Build artifacts for publishing on npm (may not be present)
+
+ # A demo application that we use to debug tricky errors and play with new
+ # features.
+ demo/
+
+ # Contains build scripts and dependencies for development
+ package.json
+```
+
+_Note: The code for rendering Preact on the server lives in another repo and is a completely separate npm package. It can be found here: [https://github.com/preactjs/preact-render-to-string](https://github.com/preactjs/preact-render-to-string)_
+
+### What does `mangle.json` do?
+
+It's a special file that can be used to specify how `terser` (previously known as `uglify`) will minify variable names. Because each sub-package has it's own distribution files we need to ensure that the variable names stay consistent across bundles.
+
+## What does `options.js` do?
+
+Unique to Preact we do support several ways to hook into our renderer. All our addons use that to inject code at different stages of a render process. They are documented in our typings in `internal.d.ts`. The core itself doesn't make use of them, which is why the file only contains an empty `object`.
+
+## Important Branches
+
+We merge every PR into the `master` branch which is the one that we'll use to publish code to npm. For the previous Preact release line we have a branch called `8` which is in maintenance mode. As a new contributor you won't have to deal with that ;)
+
+## Creating your first Pull-Request
+
+We try to make it as easy as possible to contribute to Preact and make heavy use of GitHub's "Draft PR" feature which tags Pull-Requests (short = PR) as work in progress. PRs tend to be published as soon as there is an idea that the developer deems worthwhile to include into Preact and has written some rough code. The PR doesn't have to be perfect or anything really ;)
+
+Once a PR or a Draft PR has been created our community typically joins the discussion about the proposed change. Sometimes that includes ideas for test cases or even different ways to go about implementing a feature. Often this also includes ideas on how to make the code smaller. We usually refer to the latter as "code-golfing" or just "golfing".
+
+When everything is good to go someone will approve the PR and the changes will be merged into the `master` branch and we usually cut a release a few days/ a week later.
+
+_The big takeaway for you here is, that we will guide you along the way. We're here to help to make a PR ready for approval!_
+
+The short summary is:
+
+1. Make changes and submit a PR
+2. Modify change according to feedback (if there is any)
+3. PR will be merged into `master`
+4. A new release will be cut (every 2-3 weeks).
+
+## Commonly used scripts for contributions
+
+Scripts can be executed via `npm run [script]` or `yarn [script]` respectively.
+
+- `build` - compiles all packages ready for publishing to npm
+- `build:core` - builds just Preact itself
+- `build:debug` - builds the debug addon only
+- `build:hooks` - builds the hook addon only
+- `build:test-utils` - builds the test-utils addon only
+- `test:ts` - Run all tests for TypeScript definitions
+- `test:karma` - Run all unit/integration tests.
+- `test:karma:watch` - Same as above, but it will automatically re-run the test suite if a code change was detected.
+
+But to be fair, the only ones we use ourselves are `build` and `test:karma:watch`. The other ones are mainly used on our CI pipeline and we rarely use them.
+
+_Note: Both `test:karma` and `test:karma:watch` listen to the environment variable `COVERAGE=true`. Disabling code coverage can significantly speed up the time it takes to complete the test suite._
+
+_Note2: The test suite is based on `karma` and `mocha`. Individual tests can be executed by appending `.only`:_
+
+```jsx
+it.only('should test something', () => {
+ expect(1).to.equal(1);
+});
+```
+
+## Common terminology and variable names
+
+- `vnode` -> shorthand for `virtual-node` which is an object that specifies how a Component or DOM-node looks like
+- `commit` -> A commit is the moment in time when you flush all changes to the DOM
+- `c` -> The variable `c` always refers to a `component` instance throughout our code base.
+- `diff/diffing` -> Diffing describes the process of comparing two "things". In our case we compare the previous `vnode` tree with the new one and apply the delta to the DOM.
+- `root` -> The topmost node of a `vnode` tree
+
+## Tips for getting to know the code base
+
+- Check the JSDoc block right above the function definition to understand what it does. It contains a short description of each function argument and what it does.
+- Check the callsites of a function to understand how it's used. Modern editors/IDEs allow you to quickly find those, or use the plain old search feature instead.
+
+## FAQ
+
+### Why does the JSDoc use TypeScript syntax to specify types?
+
+Several members of the team are very fond of TypeScript and we wanted to leverage as many of its advantages, like improved autocompletion, for Preact. We even attempted to port Preact to TypeScript a few times, but we ran into many issues with the DOM typings. Those would force us to fill our codebase with many `any` castings, making our code very noisy.
+
+Luckily TypeScript has a mode where it can somewhat reliably typecheck JavaScript code by reusing the types defined in JSDoc blocks. It's not perfect and it often has trouble inferring the correct types the further one strays away from the function arguments, but it's good enough that it helps us a lot with autocompletion. Another plus is that we can make sure that our TypeScript definitons are correct at the same time.
+
+Check out the [official TypeScript documentation](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html) for more information.
+
+_Note that we have separate tests for our TypeScript definition files. We only use `ts-check` for local development and don't check it anywhere else like on the CI._
+
+### Why does the code base often use `let` instead of `const`?
+
+There is no real reason for that other a historical one. Back before auto-formatting via prettier was a thing and minifiers weren't as advanced as they are today we used a pretty terse code-style. The code-style deliberately was aimed at making code look as concise and short as possible. The `let` keyword is a bit shorter than `const` to write, so we only used that. This was done only for stylistic reasons.
+
+This helped our minds to not lose sight of focusing on size, but made it difficult for newcomers to start contributing to Preact. For that reason alone we switched to `prettier` and loosened our rule regarding usage of `let` or `const`. Today we use both, but you can still find many existing places where `let` is still in use.
+
+In the end there is no effect on size regardless if you use `const`, `let` or use both. Our code is downtranspiled to `ES5` for npm so both will be replaced with `var` anyways. Therefore it doesn't really matter at all which one is used in our codebase.
+
+This will only become important once shipping modern JavaScript code on npm becomes a thing and bundlers follow suit.
+
+## How to create a good bug report
+
+To be able to fix issues we need to see them on our machine. This is only possible when we can reproduce the error. The easiest way to do that is narrow down the problem to specific components or combination of them. This can be done by removing as much unrelated code as possible.
+
+The perfect way to do that is to make a [codesandbox](https://codesandbox.io/). That way you can easily share the problematic code and ensure that others can see the same issue you are seeing.
+
+For us a [codesandbox](https://codesandbox.io/) says more than a 1000 words :tada:
+
+## I have more questions on how to contribute to Preact. How can I reach you?
+
+We closely watch our issues and have a pretty active [Slack workspace](https://chat.preactjs.com/). Nearly all our communication happens via these two forms of communication.
+
+## Releasing Preact (Maintainers only)
+
+This guide is intended for core team members that have the necessary
+rights to publish new releases on npm.
+
+1. [Write the release notes](#writing-release-notes) and keep them as a draft in GitHub
+ 1. I'd recommend writing them in an offline editor because each edit to a draft will change the URL in GitHub.
+2. Make a PR where **only** the version number is incremented in `package.json` (note: We follow `SemVer` conventions)
+3. Wait until the PR is approved and merged.
+4. Switch back to the `master` branch and pull the merged PR
+5. Run `npm run build && npm publish`
+ 1. Make sure you have 2FA enabled in npm, otherwise the above command will fail.
+ 2. If you're doing a pre-release add `--tag next` to the `npm publish` command to publish it under a different tag (default is `latest`)
+6. Publish the release notes and create the correct git tag.
+7. Tweet it out
+
+## Legacy Releases (8.x)
+
+> **ATTENTION:** Make sure that you've cleared the project correctly
+> when switching from a 10.x branch.
+
+0. Run `rm -rf dist node_modules && npm i` to make sure to have the correct dependencies.
+
+Apart from that it's the same as above.
+
+## Writing release notes
+
+The release notes have become a sort of tiny blog post about what's
+happening in preact-land. The title usually has this format:
+
+```txt
+Version Name
+```
+
+Example:
+
+```txt
+10.0.0-beta.1 Los Compresseros
+```
+
+The name is optional, we just have fun finding creative names :wink:
+
+To keep them interesting we try to be as
+concise as possible and to just reflect where we are. There are some
+rules we follow while writing them:
+
+- Be nice, use a positive tone. Avoid negative words
+- Show, don't just tell.
+- Be honest.
+- Don't write too much, keep it simple and short.
+- Avoid making promises and don't overpromise. That leads to unhappy users
+- Avoid framework comparisons if possible
+- Highlight awesome community contributions (or great issue reports)
+- If in doubt, praise the users.
+
+After this section we typically follow with a changelog part that's
+divided into 4 groups in order of importance for the user:
+
+- Features
+- Bug Fixes
+- Typings
+- Maintenance
+
+We generate it via this handy cli program: [changelogged](https://github.com/marvinhagemeister/changelogged). It will collect and format
+the descriptions of all PRs that have been merged between two tags.
+The usual command is `changelogged 10.0.0-rc.2..HEAD` similar to how
+you'd diff two points in time with git. This will get you 90% there,
+but you still need to divide it into groups. It's also a good idea
+to unify the formatting of the descriptions, so that they're easier
+to read and don't look like a mess.
diff --git a/preact/LICENSE b/preact/LICENSE
new file mode 100644
index 0000000..da5389a
--- /dev/null
+++ b/preact/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Jason Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/preact/README.md b/preact/README.md
new file mode 100644
index 0000000..458cdae
--- /dev/null
+++ b/preact/README.md
@@ -0,0 +1,187 @@
+<p align="center">
+<a href="https://preactjs.com" target="_blank">
+
+![Preact](https://raw.githubusercontent.com/preactjs/preact/8b0bcc927995c188eca83cba30fbc83491cc0b2f/logo.svg?sanitize=true "Preact")
+
+</a>
+</p>
+<p align="center">Fast <b>3kB</b> alternative to React with the same modern API.</p>
+
+**All the power of Virtual DOM components, without the overhead:**
+
+- Familiar React API & patterns: ES6 Class, hooks, and Functional Components
+- Extensive React compatibility via a simple [preact/compat] alias
+- Everything you need: JSX, <abbr title="Virtual DOM">VDOM</abbr>, [DevTools], <abbr title="Hot Module Replacement">HMR</abbr>, <abbr title="Server-Side Rendering">SSR</abbr>.
+- Highly optimized diff algorithm and seamless hydration from Server Side Rendering
+- Supports all modern browsers and IE11
+- Transparent asynchronous rendering with a pluggable scheduler
+- **Instant production-grade app setup with [Preact CLI](https://github.com/preactjs/preact-cli)**
+
+### 💁 More information at the [Preact Website ➞](https://preactjs.com)
+
+
+<table border="0">
+<tbody>
+<tr>
+<td>
+
+[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)
+[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://chat.preactjs.com)
+[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)
+[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)
+
+[![coveralls](https://img.shields.io/coveralls/preactjs/preact/master.svg)](https://coveralls.io/github/preactjs/preact)
+[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip&label=gzip)](https://unpkg.com/preact/dist/preact.min.js)
+[![brotli size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=brotli&label=brotli)](https://unpkg.com/preact/dist/preact.min.js)
+</td>
+<td>
+
+<img src="https://saucelabs.com/browser-matrix/preact.svg" title="Browser support matrix">
+
+</td>
+</tr>
+</tbody>
+</table>
+
+
+You can find some awesome libraries in the [awesome-preact list](https://github.com/preactjs/awesome-preact) :sunglasses:
+
+---
+
+## Getting Started
+
+> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_
+
+The easiest way to get started with Preact is to use [Preact CLI](https://github.com/preactjs/preact-cli). This simple command-line tool wraps up the best possible tooling for you, and even keeps things like Webpack and Babel up-to-date as they change. Best of all, it's easy to understand! Start a project or compile for production in a single command (`preact build`), with no configuration needed and best practices baked in! 🙌
+
+#### Tutorial: Building UI with Preact
+
+With Preact, you create user interfaces by assembling trees of components and elements. Components are functions or classes that return a description of what their tree should output. These descriptions are typically written in [JSX](https://facebook.github.io/jsx/) (shown underneath), or [HTM](https://github.com/developit/htm) which leverages standard JavaScript Tagged Templates. Both syntaxes can express trees of elements with "props" (similar to HTML attributes) and children.
+
+To get started using Preact, first look at the render() function. This function accepts a tree description and creates the structure described. Next, it appends this structure to a parent DOM element provided as the second argument. Future calls to render() will reuse the existing tree and update it in-place in the DOM. Internally, render() will calculate the difference from previous outputted structures in an attempt to perform as few DOM operations as possible.
+
+```js
+import { h, render } from 'preact';
+// Tells babel to use h for JSX. It's better to configure this globally.
+// See https://babeljs.io/docs/en/babel-plugin-transform-react-jsx#usage
+// In tsconfig you can specify this with the jsxFactory
+/** @jsx h */
+
+// create our tree and append it to document.body:
+render(<main><h1>Hello</h1></main>, document.body);
+
+// update the tree in-place:
+render(<main><h1>Hello World!</h1></main>, document.body);
+// ^ this second invocation of render(...) will use a single DOM call to update the text of the <h1>
+```
+
+Hooray! render() has taken our structure and output a User Interface! This approach demonstrates a simple case, but would be difficult to use as an application grows in complexity. Each change would be forced to calculate the difference between the current and updated structure for the entire application. Components can help here – by dividing the User Interface into nested Components each can calculate their difference from their mounted point. Here's an example:
+
+```js
+import { render, h } from 'preact';
+import { useState } from 'preact/hooks';
+
+/** @jsx h */
+
+const App = () => {
+ const [input, setInput] = useState('');
+
+ return (
+ <div>
+ <p>Do you agree to the statement: "Preact is awesome"?</p>
+ <input value={input} onChange={e => setInput(e.target.value)} />
+ </div>
+ )
+}
+
+render(<App />, document.body);
+```
+
+---
+
+## Backers
+
+Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]
+
+<a href="https://opencollective.com/preact/backer/0/website" target="_blank"><img src="https://opencollective.com/preact/backer/0/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/1/website" target="_blank"><img src="https://opencollective.com/preact/backer/1/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/2/website" target="_blank"><img src="https://opencollective.com/preact/backer/2/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/3/website" target="_blank"><img src="https://opencollective.com/preact/backer/3/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/4/website" target="_blank"><img src="https://opencollective.com/preact/backer/4/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/5/website" target="_blank"><img src="https://opencollective.com/preact/backer/5/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/6/website" target="_blank"><img src="https://opencollective.com/preact/backer/6/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/7/website" target="_blank"><img src="https://opencollective.com/preact/backer/7/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/8/website" target="_blank"><img src="https://opencollective.com/preact/backer/8/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/9/website" target="_blank"><img src="https://opencollective.com/preact/backer/9/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/10/website" target="_blank"><img src="https://opencollective.com/preact/backer/10/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/11/website" target="_blank"><img src="https://opencollective.com/preact/backer/11/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/12/website" target="_blank"><img src="https://opencollective.com/preact/backer/12/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/13/website" target="_blank"><img src="https://opencollective.com/preact/backer/13/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/14/website" target="_blank"><img src="https://opencollective.com/preact/backer/14/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/15/website" target="_blank"><img src="https://opencollective.com/preact/backer/15/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/16/website" target="_blank"><img src="https://opencollective.com/preact/backer/16/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/17/website" target="_blank"><img src="https://opencollective.com/preact/backer/17/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/18/website" target="_blank"><img src="https://opencollective.com/preact/backer/18/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/19/website" target="_blank"><img src="https://opencollective.com/preact/backer/19/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/20/website" target="_blank"><img src="https://opencollective.com/preact/backer/20/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/21/website" target="_blank"><img src="https://opencollective.com/preact/backer/21/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/22/website" target="_blank"><img src="https://opencollective.com/preact/backer/22/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/23/website" target="_blank"><img src="https://opencollective.com/preact/backer/23/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/24/website" target="_blank"><img src="https://opencollective.com/preact/backer/24/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/25/website" target="_blank"><img src="https://opencollective.com/preact/backer/25/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/26/website" target="_blank"><img src="https://opencollective.com/preact/backer/26/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/27/website" target="_blank"><img src="https://opencollective.com/preact/backer/27/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/28/website" target="_blank"><img src="https://opencollective.com/preact/backer/28/avatar.svg"></a>
+<a href="https://opencollective.com/preact/backer/29/website" target="_blank"><img src="https://opencollective.com/preact/backer/29/avatar.svg"></a>
+<a href="https://github.com/guardian" target="_blank"><img src="https://github.com/guardian.png?size=64"></a>
+
+
+
+## Sponsors
+Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]
+
+<a href="https://opencollective.com/preact/sponsor/0/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/0/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/1/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/1/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/2/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/2/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/3/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/3/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/4/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/4/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/5/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/5/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/6/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/6/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/7/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/7/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/8/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/8/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/9/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/9/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/10/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/10/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/11/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/11/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/12/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/12/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/13/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/13/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/14/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/14/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/15/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/15/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/16/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/16/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/17/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/17/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/18/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/18/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/19/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/19/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/20/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/20/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/21/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/21/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/22/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/22/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/23/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/23/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/24/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/24/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/25/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/25/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/26/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/26/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/27/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/27/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/28/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/28/avatar.svg"></a>
+<a href="https://opencollective.com/preact/sponsor/29/website" target="_blank"><img src="https://opencollective.com/preact/sponsor/29/avatar.svg"></a>
+
+---
+
+## License
+
+MIT
+
+
+
+[![Preact](https://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)
+
+
+[preact/compat]: https://github.com/preactjs/preact/tree/master/compat
+[hyperscript]: https://github.com/dominictarr/hyperscript
+[DevTools]: https://github.com/preactjs/preact-devtools
diff --git a/preact/babel.config.js b/preact/babel.config.js
new file mode 100644
index 0000000..2a701eb
--- /dev/null
+++ b/preact/babel.config.js
@@ -0,0 +1,47 @@
+module.exports = function(api) {
+ api.cache(true);
+
+ const minify = String(process.env.MINIFY) === 'true';
+ const noModules = String(process.env.BABEL_NO_MODULES) === 'true';
+
+ const rename = {};
+ const mangle = require('./mangle.json');
+ for (let prop in mangle.props.props) {
+ let name = prop;
+ if (name[0] === '$') {
+ name = name.slice(1);
+ }
+
+ rename[name] = mangle.props.props[prop];
+ }
+
+ return {
+ presets: [
+ [
+ '@babel/preset-env',
+ {
+ loose: true,
+ // Don't transform modules when using esbuild
+ modules: noModules ? false : 'auto',
+ exclude: ['@babel/plugin-transform-typeof-symbol'],
+ targets: {
+ browsers: ['last 2 versions', 'IE >= 9']
+ }
+ }
+ ]
+ ],
+ plugins: [
+ '@babel/plugin-proposal-object-rest-spread',
+ '@babel/plugin-transform-react-jsx',
+ 'babel-plugin-transform-async-to-promises',
+ ['babel-plugin-transform-rename-properties', { rename }]
+ ],
+ include: ['**/src/**/*.js', '**/test/**/*.js'],
+ overrides: [
+ {
+ test: /(component-stack|debug)\.test\.js$/,
+ plugins: ['@babel/plugin-transform-react-jsx-source']
+ }
+ ]
+ };
+};
diff --git a/preact/benches/.gitignore b/preact/benches/.gitignore
new file mode 100644
index 0000000..507e011
--- /dev/null
+++ b/preact/benches/.gitignore
@@ -0,0 +1,6 @@
+dist/
+results/
+logs/
+logs-saved/
+node_modules/
+proxy-packages/*/package-lock.json
diff --git a/preact/benches/LICENSE b/preact/benches/LICENSE
new file mode 100644
index 0000000..da5389a
--- /dev/null
+++ b/preact/benches/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Jason Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/preact/benches/README.md b/preact/benches/README.md
new file mode 100644
index 0000000..066b5fa
--- /dev/null
+++ b/preact/benches/README.md
@@ -0,0 +1,72 @@
+# Preact Benchmarks
+
+This directory contains benchmarks for Preact, run using the [`polymer/tachometer`](https://github.com/polymer/tachometer) project.
+
+## Getting Started
+
+To run benchmark suite, use `npm bench`.
+
+To debug benches locally, use `npm start`.
+
+### bench
+
+Use the `npm bench` command to run some (or all, the default) benchmarks locally.
+
+```text
+> node ./scripts bench "--help"
+
+ Description
+ Run the benchmarks matching the given globs.
+ The root for the globs is the "src" directory.
+ Specify "all" to run all benchmarks.
+ To get more help on options, see polymer/tachometer help.
+ Result table is printed to stdout and written to a csv and json file in the results directory.
+
+ Usage
+ $ ./scripts bench [globs] [options]
+
+ Options
+ -n, --sample-size Minimum number of times to run each benchmark (default 50)
+ --horizon The degrees of difference to try and resolve when auto-sampling ("N%" or "Nms", comma-delimited) (default 10%)
+ --timeout The maximum number of minutes to spend auto-sampling (default 3)
+ -h, --help Displays this message
+
+ Examples
+ $ ./scripts bench text*
+ $ ./scripts bench **/*.html
+ $ ./scripts bench all
+
+```
+
+The `bench` command generates a tachometer config file for each benchmark matching the given globs. It then runs tachometer on each config file. If you would create one config file containing all the benchmarks, then Tachometer would produce one table comparing all package versions to each other across benchmarks which wouldn't be as useful. By generating a config per benchmark, Tachometer will output a table per benchmark comparing how each package version performed on just that benchmark.
+
+### start
+
+Use the `npm start` command to start the benchmark server but not run the benchmarks. This command is useful to debug or profile how a benchmark is doing. Tachometer starts a web server for each package version we run (note the port difference per package version in the sample output below). It provides a sample URL at which to point your browser to run a benchmark. You can run any benchmark in the `src` directory, not just the one in the sample URL.
+
+```bash
+> npm start
+
+...snipped some debug output...
+
+Visit these URLs in any browser:
+
+text_update [@preact8]
+http://127.0.0.1:8080/src/text_update.html
+
+text_update [@preact10]
+http://127.0.0.1:8081/src/text_update.html
+
+text_update [@preactLocal]
+http://127.0.0.1:8082/src/text_update.html
+```
+
+## Contributing
+
+To contribute a new benchmark, look at the existing benchmarks (the HTML files in `src`) to get an idea of what a benchmark can look like. Then read up on how [`polymer/tachometer`](https://github.com/polymer/tachometer) works to understand some of the options available to you.
+
+Add an HTML file containing the benchmark you'd like to run. Use `npm start` (documented above) to test and debug your benchmark. Then run `npm bench YOUR_BENCH.html` to run it. Note while initialling developing it may be easier to limit the amount of samples taken while benching. Use the options documented for the `npm bench` command to customize the sample size and auto-sample timeout.
+
+Currently this infra is only setup to run benchmarks against different preact versions and requires that your benchmark use the `bench.start()` and `bench.stop()` methods.
+
+The `src/util.js` file contains some utility functions for running your benchmark. For, example the `afterFrame/afterFrameAsync` functions can be used to run `bench.stop()` after the browser as painted the next frame. The `testElement/testElementText` functions can be used to verify that the benchmark implementation rendered the expected result properly.
diff --git a/preact/benches/TODO.md b/preact/benches/TODO.md
new file mode 100644
index 0000000..ec9430f
--- /dev/null
+++ b/preact/benches/TODO.md
@@ -0,0 +1,10 @@
+* Add `preact-release` proxy
+ - to capture slowdowns overtime
+* Report `initial-run` metric to PR
+ - to capture unoptimized runtime which would be an important metric to understand perf characteristic before optimizations kick in
+* Add warmup reporting to all benchmarks
+* Add `preact-compat` proxy
+* Add UIBench
+* Add bench mimicking speedometer
+* Add a realworld-like bench?
+* Add a specialized bench that hits certain code paths other's miss (e.g. style attribute handling?)
diff --git a/preact/benches/jsconfig.json b/preact/benches/jsconfig.json
new file mode 100644
index 0000000..28c8242
--- /dev/null
+++ b/preact/benches/jsconfig.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "target": "es2020",
+ "checkJs": true,
+ "moduleResolution": "node"
+ },
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/preact/benches/package.json b/preact/benches/package.json
new file mode 100644
index 0000000..e3bdd07
--- /dev/null
+++ b/preact/benches/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "preact-benchmarks",
+ "private": true,
+ "version": "1.0.0",
+ "type": "module",
+ "description": "Benchmarks for Preact",
+ "scripts": {
+ "start": "node ./scripts config many_updates.html && tach --force-clean-npm-install --config dist/many_updates.config.json --manual",
+ "analyze": "node ./scripts analyze",
+ "bench": "node ./scripts bench",
+ "deopts": "node ./scripts deopts",
+ "help": "node ./scripts --help"
+ },
+ "license": "MIT",
+ "dependencies": {
+ "afterframe": "^1.0.1"
+ },
+ "devDependencies": {
+ "@kristoferbaxter/async": "^1.0.0",
+ "del": "^6.0.0",
+ "escalade": "^3.0.2",
+ "escape-string-regexp": "^4.0.0",
+ "globby": "^11.0.0",
+ "prompts": "^2.4.0",
+ "sade": "^1.7.3",
+ "strip-ansi": "^6.0.0",
+ "tachometer": "^0.5.7",
+ "v8-deopt-viewer": "^0.2.1"
+ }
+}
diff --git a/preact/benches/proxy-packages/preact-local-proxy/index.js b/preact/benches/proxy-packages/preact-local-proxy/index.js
new file mode 100644
index 0000000..1b3d7b2
--- /dev/null
+++ b/preact/benches/proxy-packages/preact-local-proxy/index.js
@@ -0,0 +1,18 @@
+import { render, hydrate } from 'preact';
+
+export * from 'preact';
+
+/**
+ * @param {HTMLElement} rootDom
+ * @returns {{ render(vnode: JSX.Element): void; hydrate(vnode: JSX.Element): void; }}
+ */
+export function createRoot(rootDom) {
+ return {
+ render(vnode) {
+ render(vnode, rootDom);
+ },
+ hydrate(vnode) {
+ hydrate(vnode, rootDom);
+ }
+ };
+}
diff --git a/preact/benches/proxy-packages/preact-local-proxy/package.json b/preact/benches/proxy-packages/preact-local-proxy/package.json
new file mode 100644
index 0000000..344d845
--- /dev/null
+++ b/preact/benches/proxy-packages/preact-local-proxy/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "preact-local-proxy",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "main": "index.js",
+ "dependencies": {
+ "preact": "file:../../../"
+ }
+}
diff --git a/preact/benches/proxy-packages/preact-master-proxy/index.js b/preact/benches/proxy-packages/preact-master-proxy/index.js
new file mode 100644
index 0000000..1b3d7b2
--- /dev/null
+++ b/preact/benches/proxy-packages/preact-master-proxy/index.js
@@ -0,0 +1,18 @@
+import { render, hydrate } from 'preact';
+
+export * from 'preact';
+
+/**
+ * @param {HTMLElement} rootDom
+ * @returns {{ render(vnode: JSX.Element): void; hydrate(vnode: JSX.Element): void; }}
+ */
+export function createRoot(rootDom) {
+ return {
+ render(vnode) {
+ render(vnode, rootDom);
+ },
+ hydrate(vnode) {
+ hydrate(vnode, rootDom);
+ }
+ };
+}
diff --git a/preact/benches/proxy-packages/preact-master-proxy/package.json b/preact/benches/proxy-packages/preact-master-proxy/package.json
new file mode 100644
index 0000000..a73c202
--- /dev/null
+++ b/preact/benches/proxy-packages/preact-master-proxy/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "preact-proxy",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "main": "index.js",
+ "dependencies": {
+ "preact": "file:../../../preact.tgz"
+ }
+}
diff --git a/preact/benches/proxy-packages/preact-v8-proxy/index.js b/preact/benches/proxy-packages/preact-v8-proxy/index.js
new file mode 100644
index 0000000..8c75330
--- /dev/null
+++ b/preact/benches/proxy-packages/preact-v8-proxy/index.js
@@ -0,0 +1,23 @@
+import { render } from 'preact';
+
+export * from 'preact';
+
+/**
+ * @param {HTMLElement} rootDom
+ * @returns {{ render(vnode: JSX.Element): void; hydrate(vnode: JSX.Element): void; }}
+ */
+export function createRoot(rootDom) {
+ let result;
+ return {
+ render(vnode) {
+ if (result) {
+ result = render(vnode, rootDom, result);
+ } else {
+ result = render(vnode, rootDom);
+ }
+ },
+ hydrate(vnode) {
+ render(vnode, rootDom, rootDom.firstElementChild);
+ }
+ };
+}
diff --git a/preact/benches/proxy-packages/preact-v8-proxy/package.json b/preact/benches/proxy-packages/preact-v8-proxy/package.json
new file mode 100644
index 0000000..1ac098d
--- /dev/null
+++ b/preact/benches/proxy-packages/preact-v8-proxy/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "preact-v8-proxy",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "main": "index.js",
+ "dependencies": {
+ "preact": "^8.5.3"
+ }
+}
diff --git a/preact/benches/scripts/analyze.js b/preact/benches/scripts/analyze.js
new file mode 100644
index 0000000..b57f9d4
--- /dev/null
+++ b/preact/benches/scripts/analyze.js
@@ -0,0 +1,363 @@
+import { existsSync } from 'fs';
+import { readFile, readdir } from 'fs/promises';
+import prompts from 'prompts';
+import { baseTraceLogDir, frameworks } from './config.js';
+
+// @ts-ignore
+import tachometerStats from 'tachometer/lib/stats.js';
+// @ts-ignore
+import tachometerFormat from 'tachometer/lib/format.js';
+
+/**
+ * @typedef {import('./tracing').TraceEvent} TraceEvent
+ * @typedef {import('tachometer/lib/stats').SummaryStats} SummaryStats
+ * @typedef {import('tachometer/lib/stats').ResultStats} ResultStats
+ * @typedef {import('tachometer/lib/stats').ResultStatsWithDifferences} ResultStatsWithDifferences
+ * @type {import('tachometer/lib/stats')}
+ */
+const statsLib = tachometerStats;
+const { summaryStats, computeDifferences } = statsLib;
+/** @type {import('tachometer/lib/format')} */
+const formatLib = tachometerFormat;
+const { automaticResultTable, verticalTermResultTable } = formatLib;
+
+const toTrack = new Set([
+ // 'V8.CompileCode', // Might be tachometer code?? But maybe not?
+ 'V8.MarkCandidatesForOptimization',
+ 'V8.OptimizeCode',
+ 'V8.OptimizeConcurrentPrepare',
+ 'V8.OptimizeNonConcurrent',
+ // 'V8.OptimizeBackground', // Runs on background thread
+ 'V8.InstallOptimizedFunctions',
+ 'V8.DeoptimizeCode',
+ 'MinorGC',
+ 'V8.GCDeoptMarkedAllocationSites'
+]);
+
+/**
+ * @template T
+ * @param {Map<string, T[]>} grouping
+ * @param {Map<string, T | T[]>} results
+ */
+function addToGrouping(grouping, results) {
+ for (let [group, data] of results.entries()) {
+ if (grouping.has(group)) {
+ if (Array.isArray(data)) {
+ grouping.get(group).push(...data);
+ } else {
+ grouping.get(group).push(data);
+ }
+ } else {
+ if (Array.isArray(data)) {
+ grouping.set(group, data);
+ } else {
+ grouping.set(group, [data]);
+ }
+ }
+ }
+}
+
+/**
+ * @template K
+ * @template V
+ * @param {Map<K, V[]>} map
+ * @param {K} key
+ * @param {...V} values
+ */
+function addToMapArray(map, key, ...values) {
+ if (map.has(key)) {
+ map.get(key).push(...values);
+ } else {
+ map.set(key, values);
+ }
+}
+
+/**
+ * @template K
+ * @template V
+ * @param {Map<K, V[]>} map
+ * @param {K} key
+ * @param {number} index
+ * @param {V} value
+ */
+function setInMapArray(map, key, index, value) {
+ if (map.has(key)) {
+ map.get(key)[index] = value;
+ } else {
+ map.set(key, [value]);
+ }
+}
+
+/**
+ * @param {ResultStats[]} results
+ */
+function logDifferences(key, results) {
+ let withDifferences = computeDifferences(results);
+ console.log();
+ let { fixed, unfixed } = automaticResultTable(withDifferences);
+ // console.log(horizontalTermResultTable(fixed));
+ console.log(key);
+ console.log(verticalTermResultTable(unfixed));
+}
+
+/**
+ * @param {string} version
+ * @param {string[]} logPaths
+ * @param {(logs: TraceEvent[], logFilePath: string) => number} [getThreadId]
+ * @param {(log: TraceEvent) => boolean} [trackEventsIn]
+ * @returns {Promise<Map<string, ResultStats>>}
+ */
+async function getStatsFromLogs(version, logPaths, getThreadId, trackEventsIn) {
+ /** @type {Map<string, number[]>} Sums for each function for each file */
+ const data = new Map();
+ for (let logPath of logPaths) {
+ /** @type {TraceEvent[]} */
+ const logs = JSON.parse(await readFile(logPath, 'utf8'));
+
+ let tid = getThreadId ? getThreadId(logs, logPath) : null;
+
+ /** @type {Array<{ id: string; start: number; end: number; }>} Determine what durations to track events under */
+ const parentLogs = [];
+ for (let log of logs) {
+ if (trackEventsIn && trackEventsIn(log)) {
+ if (log.ph == 'X') {
+ parentLogs.push({
+ id: log.name,
+ start: log.ts,
+ end: log.ts + log.dur
+ });
+ } else if (log.ph == 'b') {
+ parentLogs.push({
+ id: log.name,
+ start: log.ts,
+ end: log.ts
+ });
+ } else if (log.ph == 'e') {
+ parentLogs.find(l => l.id == log.name).end = log.ts;
+ } else {
+ throw new Error(`Unsupported parent log type: ${log.ph}`);
+ }
+ }
+ }
+
+ /** @type {Map<string, import('./tracing').AsyncEvent>} */
+ const durationBeginEvents = new Map();
+
+ /** @type {Map<string, number[]>} Sum of time spent in each function for this log file */
+ const sumsForFile = new Map();
+ for (let log of logs) {
+ if (tid != null && log.tid !== tid) {
+ // if (toTrack.has(log.name)) {
+ // console.log(
+ // `Skipping ${log.name} on tid ${log.tid} (expected ${tid}) in ${logPath}`
+ // );
+ // }
+
+ continue;
+ }
+
+ if (log.ph == 'X') {
+ // Track duration event
+ if (toTrack.has(log.name)) {
+ let key = `Sum of ${log.name} time`;
+ let sum = sumsForFile.get(key)?.[0] ?? 0;
+ // sumsForFile.set(log.name, sum + log.dur / 1000);
+ setInMapArray(sumsForFile, key, 0, sum + log.dur / 1000);
+
+ key = `Count of ${log.name}`;
+ sum = sumsForFile.get(key)?.[0] ?? 0;
+ // sumsForFile.set(key, sum + 1);
+ setInMapArray(sumsForFile, key, 0, sum + 1);
+
+ key = `Sum of V8 runtime`;
+ sum = sumsForFile.get(key)?.[0] ?? 0;
+ // sumsForFile.set(key, sum + log.dur / 1000);
+ setInMapArray(sumsForFile, key, 0, sum + log.dur / 1000);
+
+ for (let parentLog of parentLogs) {
+ if (
+ parentLog.start <= log.ts &&
+ log.ts + log.dur <= parentLog.end
+ ) {
+ key = `In ${parentLog.id}, Sum of V8 runtime`;
+ sum = sumsForFile.get(key)?.[0] ?? 0;
+ setInMapArray(sumsForFile, key, 0, sum + log.dur / 1000);
+ }
+ }
+ }
+
+ if (log.name == 'MinorGC' || log.name == 'MajorGC') {
+ let key = `${log.name} usedHeapSizeBefore`;
+ addToMapArray(sumsForFile, key, log.args.usedHeapSizeBefore / 1e6);
+
+ key = `${log.name} usedHeapSizeAfter`;
+ addToMapArray(sumsForFile, key, log.args.usedHeapSizeAfter / 1e6);
+ }
+ } else if (
+ (log.ph == 'b' || log.ph == 'e') &&
+ log.cat == 'blink.user_timing' &&
+ log.scope == 'blink.user_timing'
+ ) {
+ // TODO: Doesn't handle nested events of same name. Oh well.
+ if (log.ph == 'b') {
+ durationBeginEvents.set(log.name, log);
+ } else {
+ const beginEvent = durationBeginEvents.get(log.name);
+ const endEvent = log;
+ durationBeginEvents.delete(log.name);
+
+ let key = beginEvent.name;
+ let duration = (endEvent.ts - beginEvent.ts) / 1000;
+ addToMapArray(sumsForFile, key, duration);
+
+ if (key.startsWith('run-') && key !== 'run-warmup-0') {
+ // Skip run-warmup-0 since it doesn't do unmounting
+ addToMapArray(sumsForFile, 'average run duration', duration);
+ }
+ }
+ }
+ }
+
+ addToGrouping(data, sumsForFile);
+ }
+
+ const stats = new Map();
+ for (let [key, sums] of data) {
+ stats.set(key, {
+ result: {
+ name: '02_replace1k',
+ version: version,
+ measurement: {
+ name: key,
+ mode: 'expression',
+ expression: key,
+ unit: key.startsWith('Count')
+ ? ''
+ : key.includes('usedHeapSize')
+ ? 'MB'
+ : null
+ },
+ browser: {
+ name: 'chrome'
+ },
+ millis: sums
+ },
+ stats: summaryStats(sums)
+ });
+ }
+
+ return stats;
+}
+
+/**
+ * @param {import('./tracing').TraceEvent[]} logs
+ * @param {string} logFilePath
+ * @returns {number}
+ */
+function getDurationThread(logs, logFilePath) {
+ let log = logs.find(isDurationLog);
+
+ if (log == null) {
+ throw new Error(
+ `Could not find blink.user_timing log for "run-final" or "duration" in ${logFilePath}.`
+ );
+ } else {
+ return log.tid;
+ }
+}
+
+/**
+ * @param {TraceEvent} log
+ */
+function isDurationLog(log) {
+ return (
+ (log.ph == 'b' || log.ph == 'e') &&
+ log.cat == 'blink.user_timing' &&
+ log.scope == 'blink.user_timing' &&
+ // Tachometer may kill the tab after seeing the duration measure before
+ // the tab can log it to the trace file
+ (log.name == 'run-final' || log.name == 'duration')
+ );
+}
+
+export async function analyze() {
+ // const frameworkNames = await readdir(p('logs'));
+ const frameworkNames = frameworks.map(f => f.label);
+ const listAtEnd = [
+ 'average run duration',
+ 'Sum of V8 runtime',
+ 'In run-final, Sum of V8 runtime',
+ 'In duration, Sum of V8 runtime',
+ 'duration'
+ ];
+
+ if (!existsSync(baseTraceLogDir())) {
+ console.log(
+ `Could not find log directory: "${baseTraceLogDir()}". Did you run the benchmarks?`
+ );
+ return;
+ }
+
+ const benchmarkNames = await readdir(baseTraceLogDir());
+ let selectedBench;
+ if (benchmarkNames.length == 0) {
+ console.log(`No benchmarks or results found in "${baseTraceLogDir()}".`);
+ return;
+ } else if (benchmarkNames.length == 1) {
+ selectedBench = benchmarkNames[0];
+ } else {
+ selectedBench = (
+ await prompts({
+ type: 'select',
+ name: 'value',
+ message: "Which benchmark's results would you like to analyze?",
+ choices: benchmarkNames.map(name => ({
+ title: name,
+ value: name
+ }))
+ })
+ ).value;
+ }
+
+ /** @type {Map<string, ResultStats[]>} */
+ const resultStatsMap = new Map();
+ for (let framework of frameworkNames) {
+ const logDir = baseTraceLogDir(selectedBench, framework);
+
+ let logFilePaths;
+ try {
+ logFilePaths = (await readdir(logDir)).map(fn =>
+ baseTraceLogDir(selectedBench, framework, fn)
+ );
+ } catch (e) {
+ // If directory doesn't exist or we fail to read it, just skip
+ continue;
+ }
+
+ const resultStats = await getStatsFromLogs(
+ framework,
+ logFilePaths,
+ getDurationThread,
+ isDurationLog
+ );
+ addToGrouping(resultStatsMap, resultStats);
+
+ // console.log(`${framework}:`);
+ // console.log(resultStats);
+ }
+
+ // Compute differences and print table
+ for (let [key, results] of resultStatsMap.entries()) {
+ if (listAtEnd.includes(key)) {
+ continue;
+ }
+
+ logDifferences(key, results);
+ }
+
+ for (let key of listAtEnd) {
+ if (resultStatsMap.has(key)) {
+ logDifferences(key, resultStatsMap.get(key));
+ }
+ }
+}
diff --git a/preact/benches/scripts/bench.js b/preact/benches/scripts/bench.js
new file mode 100644
index 0000000..eb7d464
--- /dev/null
+++ b/preact/benches/scripts/bench.js
@@ -0,0 +1,70 @@
+import { spawnSync } from 'child_process';
+import { mkdir } from 'fs/promises';
+import {
+ globSrc,
+ benchesRoot,
+ allBenches,
+ resultsPath,
+ IS_CI
+} from './utils.js';
+import { generateConfig } from './config.js';
+
+export const defaultBenchOptions = {
+ browser: 'chrome-headless',
+ // Tachometer default is 50, but locally let's only do 10
+ 'sample-size': !IS_CI ? 10 : 50,
+ // Tachometer default is 10% but let's do 5% to save some GitHub action
+ // minutes by reducing the likelihood of needing auto-sampling. See
+ // https://github.com/Polymer/tachometer#auto-sampling
+ horizon: '5%',
+ // Tachometer default is 3 minutes, but let's shrink it to 1 here to save some
+ // GitHub Action minutes
+ timeout: 1,
+ 'window-size': '1024,768',
+ framework: IS_CI ? ['preact-master', 'preact-local'] : null,
+ trace: false
+};
+
+/**
+ * @param {string} bench1
+ * @param {{ _: string[]; } & TachometerOptions} opts
+ */
+export async function runBenches(bench1 = 'all', opts) {
+ const globs = bench1 === 'all' ? allBenches : [bench1].concat(opts._);
+ const benchesToRun = await globSrc(globs);
+
+ if (benchesToRun.length == 0) {
+ console.log('No benchmarks found matching patterns:', globs);
+ } else {
+ console.log('Running benchmarks:', benchesToRun.join(', '));
+ console.log();
+ }
+
+ const configFileTasks = benchesToRun.map(async (benchPath, i) => {
+ return generateConfig(benchesRoot('src', benchPath), {
+ ...opts,
+ prepare: i === 0 // Only run prepare script for first config
+ });
+ });
+
+ await mkdir(resultsPath(), { recursive: true });
+
+ const configFiles = await Promise.all(configFileTasks);
+ for (const { name, configPath } of configFiles) {
+ const args = [
+ benchesRoot('node_modules/tachometer/bin/tach.js'),
+ '--force-clean-npm-install',
+ '--config',
+ configPath,
+ '--json-file',
+ benchesRoot('results', name + '.json')
+ ];
+
+ console.log('\n$', process.execPath, ...args);
+
+ spawnSync(process.execPath, args, {
+ cwd: benchesRoot(),
+ stdio: 'inherit'
+ });
+ }
+}
diff --git a/preact/benches/scripts/config.js b/preact/benches/scripts/config.js
new file mode 100644
index 0000000..cb8f582
--- /dev/null
+++ b/preact/benches/scripts/config.js
@@ -0,0 +1,317 @@
+import * as path from 'path';
+import del from 'del';
+import { writeFile, stat, mkdir } from 'fs/promises';
+import { repoRoot, benchesRoot, toUrl } from './utils.js';
+import { defaultBenchOptions } from './bench.js';
+import { prepare } from './prepare.js';
+
+const measureName = 'duration'; // Must match measureName in '../src/util.js'
+const warnings = new Set([]);
+const TACH_SCHEMA =
+ 'https://raw.githubusercontent.com/Polymer/tachometer/master/config.schema.json';
+
+export const baseTraceLogDir = (...args) =>
+ path.join(benchesRoot('logs'), ...args);
+
+/**
+ * @param {ConfigFileBenchmark["packageVersions"]["dependencies"]["framework"]} framework
+ * @returns {Promise<boolean>}
+ */
+async function validateFileDep(framework) {
+ try {
+ if (typeof framework === 'string') {
+ await stat(framework.replace(/^file:/, ''));
+ return true;
+ } else {
+ return false;
+ }
+ } catch (e) {
+ console.log('Stat error:', e);
+ return false;
+ }
+}
+
+/**
+ * @typedef {ConfigFileBenchmark["packageVersions"]} ConfigFilePackageVersion
+ * @typedef {ConfigFilePackageVersion & { isValid(): Promise<boolean>; }} BenchConfig
+ * @type {BenchConfig[]}
+ */
+export const frameworks = [
+ {
+ label: 'preact-v8',
+ dependencies: {
+ framework: 'file:' + repoRoot('benches/proxy-packages/preact-v8-proxy')
+ },
+ isValid() {
+ return validateFileDep(this.dependencies.framework);
+ }
+ },
+ {
+ label: 'preact-master',
+ dependencies: {
+ framework:
+ 'file:' + repoRoot('benches/proxy-packages/preact-master-proxy')
+ },
+ async isValid() {
+ try {
+ await stat(repoRoot('preact.tgz'));
+ return validateFileDep(this.dependencies.framework);
+ } catch (e) {
+ return false;
+ }
+ }
+ },
+ {
+ label: 'preact-local',
+ dependencies: {
+ framework: 'file:' + repoRoot('benches/proxy-packages/preact-local-proxy')
+ },
+ isValid() {
+ return validateFileDep(this.dependencies.framework);
+ }
+ }
+];
+
+/**
+ * @param {string} benchPath
+ * @returns {Pick<ConfigFileBenchmark, "name" | "url" | "measurement">}
+ */
+function getBaseBenchmarkConfig(benchPath) {
+ let name = path.basename(benchPath).replace('.html', '');
+ let url = path.posix.relative(toUrl(benchesRoot()), toUrl(benchPath));
+
+ /** @type {ConfigFileBenchmark["measurement"]} */
+ let measurement;
+ if (name == '02_replace1k') {
+ // MUST BE KEPT IN SYNC WITH WARMUP COUNT IN 02_replace1k.html
+ const WARMUP_COUNT = 5;
+
+ // For 02_replace1k, collect additional measurements focusing on the JS
+ // clock time for each warmup and the final duration.
+ measurement = [
+ {
+ name: 'duration',
+ mode: 'performance',
+ entryName: measureName
+ },
+ {
+ name: 'usedJSHeapSize',
+ mode: 'expression',
+ expression: 'window.usedJSHeapSize'
+ }
+ ];
+
+ for (let i = 0; i < WARMUP_COUNT; i++) {
+ const entryName = `run-warmup-${i}`;
+ measurement.push({
+ name: entryName,
+ mode: 'performance',
+ entryName
+ });
+ }
+
+ measurement.push({
+ name: 'run-final',
+ mode: 'performance',
+ entryName: 'run-final'
+ });
+ } else {
+ // Default measurements
+ measurement = [
+ {
+ name: 'duration',
+ mode: 'performance',
+ entryName: measureName
+ },
+ {
+ name: 'usedJSHeapSize',
+ mode: 'expression',
+ expression: 'window.usedJSHeapSize'
+ }
+ ];
+ }
+
+ return { name, url, measurement };
+}
+
+export async function generateSingleConfig(benchFile, opts) {
+ const benchPath = await benchesRoot('src', benchFile);
+ const results = await stat(benchPath);
+ if (!results.isFile) {
+ throw new Error(`Given path is not a file: ${benchPath}`);
+ }
+
+ await generateConfig(benchPath, { ...defaultBenchOptions, ...opts });
+}
+
+/**
+ * @typedef {import('tachometer/lib/configfile').ConfigFile} ConfigFile Expected
+ * format of a top-level tachometer JSON config file.
+ * @typedef {ConfigFile["benchmarks"][0]} ConfigFileBenchmark
+ * @typedef {{ name: string; configPath: string; config: ConfigFile; }} ConfigData
+ * @param {string} benchPath
+ * @param {TachometerOptions & { prepare?: boolean }} options
+ * @returns {Promise<ConfigData>}
+ */
+export async function generateConfig(benchPath, options) {
+ /** @type {ConfigFileBenchmark["expand"]} */
+ let expand;
+ /** @type {BrowserConfigs} */
+ let browser;
+
+ const baseBenchConfig = getBaseBenchmarkConfig(benchPath);
+
+ // See https://www.npmjs.com/package/tachometer#browsers
+ // and https://www.npmjs.com/package/tachometer#config-file
+ if (Array.isArray(options.browser)) {
+ expand = options.browser.map(browserOpt => ({
+ browser: parseBrowserOption(browserOpt)
+ }));
+ } else {
+ browser = parseBrowserOption(options.browser);
+ }
+
+ if (browser.name == 'chrome' && options.trace) {
+ const traceLogDir = baseTraceLogDir(baseBenchConfig.name);
+ await del('**/*', { cwd: traceLogDir });
+ await mkdir(traceLogDir, { recursive: true });
+
+ browser.trace = {
+ logDir: traceLogDir
+ };
+ }
+
+ /** @type {BenchConfig[]} */
+ let frameworksToRun;
+ if (!options.framework) {
+ frameworksToRun = frameworks;
+ } else if (typeof options.framework === 'string') {
+ const match = frameworks.find(f => f.label == options.framework);
+ frameworksToRun = match ? [match] : [];
+ } else if (Array.isArray(options.framework)) {
+ frameworksToRun = frameworks.filter(f =>
+ options.framework.includes(f.label)
+ );
+ } else {
+ throw new Error(`Unrecognized framework option: ${options.framework}`);
+ }
+
+ if (frameworksToRun.length == 0) {
+ console.error(
+ `Framework options did not match any configured frameworks:\n` +
+ `\tProvided option: ${options.framework}\n` +
+ `\tAvailable frameworks: [${frameworks
+ .map(f => JSON.stringify(f.label))
+ .join(', ')}]\n`
+ );
+
+ throw new Error(
+ `Framework option did not match any configured frameworks: ${options.framework}`
+ );
+ }
+
+ /** @type {ConfigFile["benchmarks"]} */
+ const benchmarks = [];
+ for (let framework of frameworksToRun) {
+ let frameworkPath = framework.dependencies.framework;
+ if (typeof frameworkPath !== 'string') {
+ throw new Error(
+ 'Only string/npm dependencies are supported at this time'
+ );
+ }
+
+ if (!(await framework.isValid())) {
+ const warnMsg = `Could not locate path for ${framework.label}: ${framework.dependencies.framework}. \nSkipping...`;
+ if (!warnings.has(warnMsg)) {
+ console.warn(warnMsg);
+ warnings.add(warnMsg);
+ }
+
+ continue;
+ }
+
+ benchmarks.push({
+ ...baseBenchConfig,
+ packageVersions: framework,
+ browser,
+ expand
+ });
+ }
+
+ if (options.prepare !== false) {
+ await prepare(benchmarks.map(b => b.packageVersions.label));
+ }
+
+ /** @type {ConfigFile} */
+ const config = {
+ $schema: TACH_SCHEMA,
+ sampleSize: options['sample-size'],
+ timeout: options.timeout,
+ horizons: options.horizon.split(','),
+ benchmarks
+ };
+
+ if (config.benchmarks.length == 0) {
+ if (options.framework) {
+ const configuredFrameworks = frameworks.map(f => f.label).join(', ');
+ throw new Error(
+ `No benchmarks created. Does the specified framework match one of the configured frameworks? ${configuredFrameworks}`
+ );
+ } else {
+ throw new Error(
+ `Unknown failure: no benchmarks created. frameworksToRun: ${frameworksToRun}`
+ );
+ }
+ }
+
+ const configPath = await writeConfig(baseBenchConfig.name, config);
+
+ return { name: baseBenchConfig.name, configPath, config };
+}
+
+async function writeConfig(name, config) {
+ const configPath = benchesRoot('dist', name + '.config.json');
+ await mkdir(path.dirname(configPath), { recursive: true });
+ await writeFile(configPath, JSON.stringify(config, null, 2), 'utf8');
+
+ return configPath;
+}
+
+/**
+ * @typedef {Exclude<ConfigFileBenchmark["browser"], string>} BrowserConfigs
+ * @param {string} str
+ * @returns {BrowserConfigs}
+ */
+function parseBrowserOption(str) {
+ // Source: https://github.com/Polymer/tachometer/blob/d4d5116acb2d7df18035ddc36f0a3a1730841a23/src/browser.ts#L100
+ let remoteUrl;
+ const at = str.indexOf('@');
+ if (at !== -1) {
+ remoteUrl = str.substring(at + 1);
+ str = str.substring(0, at);
+ }
+ const headless = str.endsWith('-headless');
+ if (headless === true) {
+ str = str.replace(/-headless$/, '');
+ }
+
+ /** @type {import('tachometer/lib/browser').BrowserName} */
+ // @ts-ignore
+ const name = str;
+
+ /** @type {BrowserConfigs} */
+ const config = { name, headless };
+ if (remoteUrl !== undefined) {
+ config.remoteUrl = remoteUrl;
+ }
+
+ // Custom browser options
+ if (config.name == 'chrome') {
+ config.addArguments = [
+ '--js-flags=--expose-gc',
+ '--enable-precise-memory-info'
+ ];
+ }
+
+ return config;
+}
diff --git a/preact/benches/scripts/deopts.js b/preact/benches/scripts/deopts.js
new file mode 100644
index 0000000..990a6cc
--- /dev/null
+++ b/preact/benches/scripts/deopts.js
@@ -0,0 +1,253 @@
+import * as path from 'path';
+import { mkdir } from 'fs/promises';
+import { spawn } from 'child_process';
+import { Transform } from 'stream';
+import escapeRe from 'escape-string-regexp';
+import stripAnsi from 'strip-ansi';
+import { pool } from '@kristoferbaxter/async';
+import {
+ globSrc,
+ benchesRoot,
+ getPkgBinPath,
+ resultsPath,
+ IS_CI
+} from './utils.js';
+import { generateConfig } from './config.js';
+import { defaultBenchOptions } from './bench.js';
+
+export const defaultDeoptsOptions = {
+ framework: 'preact-local',
+ timeout: 5,
+ open: IS_CI ? false : true
+};
+
+const getResultDir = (benchmark, framework) =>
+ resultsPath('v8-deopt-viewer', benchmark, framework);
+
+/**
+ * @param {string} pkgName
+ * @param {string[]} args
+ * @param {"pipe" | "inherit"} [stdio]
+ * @returns {Promise<import('child_process').ChildProcess>}
+ */
+async function runPackage(pkgName, args, stdio) {
+ const binPath = await getPkgBinPath(pkgName);
+ args.unshift(binPath);
+
+ return spawn(process.execPath, args, { stdio });
+}
+
+/**
+ * @param {import('child_process').ChildProcess} childProcess
+ */
+async function onExit(childProcess) {
+ return new Promise((resolve, reject) => {
+ childProcess.once('exit', (code, signal) => {
+ if (code === 0 || signal == 'SIGINT') {
+ resolve();
+ } else {
+ reject(new Error('Exit with error code: ' + code));
+ }
+ });
+
+ childProcess.once('error', err => {
+ reject(err);
+ });
+ });
+}
+
+/**
+ * @typedef {{ benchName: string; framework: string; url: string; }} TachURL
+ * @param {import('child_process').ChildProcess} tachProcess
+ * @param {import('./config').ConfigData} tachConfig
+ * @param {number} timeoutMs
+ * @returns {Promise<TachURL[]>}
+ */
+async function getTachometerURLs(tachProcess, tachConfig, timeoutMs = 60e3) {
+ return new Promise(async (resolve, reject) => {
+ let timeout;
+ if (timeoutMs > 0) {
+ timeout = setTimeout(() => {
+ reject(
+ new Error(
+ 'Timed out waiting for Tachometer to get set up. Did it output a URL?'
+ )
+ );
+ }, timeoutMs);
+ }
+
+ // Look for lines like:
+ // many_updates [@preact]
+ // http://127.0.0.1:56536/src/many_updates.html
+ const benchesToSearch = tachConfig.config.benchmarks.map(bench => ({
+ benchName: bench.name,
+ framework: bench.packageVersions.label,
+ regex: new RegExp(
+ escapeRe(`${bench.name} [@${bench.packageVersions.label}]`) +
+ `\\s+(http:\\/\\/.*)`,
+ 'im'
+ ),
+ url: null
+ }));
+
+ /** @type {TachURL[]} */
+ const results = [];
+ let output = '';
+ tachProcess.stdout.on('data', function onStdOutChunk(chunk) {
+ output += stripAnsi(chunk.toString('utf8'));
+
+ for (let bench of benchesToSearch) {
+ if (bench.url) {
+ continue;
+ }
+
+ let match = output.match(bench.regex);
+ if (match) {
+ bench.url = match[1];
+ results.push(bench);
+ }
+ }
+
+ if (results.length == benchesToSearch.length) {
+ // All URLs found, removeEventListener
+ tachProcess.off('data', onStdOutChunk);
+
+ clearTimeout(timeout);
+ resolve(results);
+ }
+ });
+ });
+}
+
+function createPrefixTransform(prefix) {
+ return new Transform({
+ transform(chunk, encoding, callback) {
+ try {
+ // @ts-ignore
+ chunk = encoding == 'buffer' ? chunk.toString() : chunk;
+ const lines = chunk.split('\n');
+
+ for (let line of lines) {
+ if (line) {
+ line = `[${prefix}] ${line}`;
+ this.push(line + '\n');
+ }
+ }
+
+ callback();
+ } catch (error) {
+ return callback(error);
+ }
+ }
+ });
+}
+
+/**
+ * @param {TachURL} tachURL
+ * @param {DeoptOptions} options
+ */
+async function runV8DeoptViewer(tachURL, options) {
+ const deoptOutputDir = getResultDir(tachURL.benchName, tachURL.framework);
+ await mkdir(deoptOutputDir, { recursive: true });
+
+ const deoptArgs = [
+ tachURL.url,
+ '-o',
+ deoptOutputDir,
+ '-t',
+ (options.timeout * 1000).toString()
+ ];
+
+ if (options.open) {
+ deoptArgs.push('--open');
+ }
+
+ const deoptProcess = await runPackage('v8-deopt-viewer', deoptArgs);
+ deoptProcess.stdout
+ .pipe(createPrefixTransform(tachURL.framework))
+ .pipe(process.stdout);
+ deoptProcess.stderr
+ .pipe(createPrefixTransform(tachURL.framework))
+ .pipe(process.stderr);
+
+ await onExit(deoptProcess);
+}
+
+/**
+ * @param {string} benchGlob
+ * @param {DeoptOptions} options
+ */
+export async function runDeopts(benchGlob, options) {
+ // TODO:
+ // * Handle multiple benchmarks
+
+ const frameworks = options.framework;
+ if (!benchGlob) {
+ benchGlob = 'many_updates.html';
+ }
+
+ const benchesToRun = await globSrc(benchGlob);
+ if (benchesToRun.length > 1) {
+ console.error('Matched multiple benchmarks. Only running the first one.');
+ }
+
+ const benchPath = benchesRoot('src', benchesToRun[0]);
+ const tachConfig = await generateConfig(benchPath, {
+ ...defaultBenchOptions,
+ ...defaultDeoptsOptions,
+ framework: frameworks
+ });
+
+ console.log('Benchmarks running:', benchPath);
+ console.log('Frameworks running:', frameworks);
+
+ /** @type {Promise<void>} */
+ let onTachExit;
+ /** @type {import('child_process').ChildProcess} */
+ let tachProcess;
+ try {
+ // Run tachometer in manual mode with generated config
+ const tachArgs = ['--config', tachConfig.configPath, '--manual'];
+ tachProcess = await runPackage('tachometer', tachArgs);
+ tachProcess.stdout.pipe(process.stdout);
+ tachProcess.stderr.pipe(process.stderr);
+ onTachExit = onExit(tachProcess);
+
+ // Parse URL from tachometer stdout
+ const tachURLs = await getTachometerURLs(tachProcess, tachConfig);
+
+ // Run v8-deopt-viewer against tachometer URL
+ console.log();
+ await pool(tachURLs, tachURL =>
+ runV8DeoptViewer(tachURL, {
+ ...options,
+ open: options.open && tachURLs.length == 1
+ })
+ );
+
+ if (tachURLs.length > 1) {
+ const rootResultDir = getResultDir('', '');
+ console.log(`\nOpen your browser to ${rootResultDir} to view results.`);
+
+ if (options.open) {
+ // TODO: Figure out how to open a directory in the user's default browser
+ }
+ }
+ } finally {
+ if (tachProcess) {
+ tachProcess.kill('SIGINT');
+
+ // Log a message is Tachometer takes a while to close
+ let logMsg = () => console.log('Waiting for Tachometer to exit...');
+ let t = setTimeout(logMsg, 2e3);
+
+ try {
+ await onTachExit;
+ } catch (error) {
+ console.error('Error waiting for Tachometer to exit:', error);
+ } finally {
+ clearTimeout(t);
+ }
+ }
+ }
+}
diff --git a/preact/benches/scripts/global.d.ts b/preact/benches/scripts/global.d.ts
new file mode 100644
index 0000000..0fb67a3
--- /dev/null
+++ b/preact/benches/scripts/global.d.ts
@@ -0,0 +1,15 @@
+interface TachometerOptions {
+ browser: string | string[];
+ framework: string | string[];
+ 'window-size': string;
+ 'sample-size': number;
+ horizon: string;
+ timeout: number;
+ trace: boolean;
+}
+
+interface DeoptOptions {
+ framework: string;
+ timeout: number;
+ open: boolean;
+}
diff --git a/preact/benches/scripts/index.js b/preact/benches/scripts/index.js
new file mode 100644
index 0000000..4eeb21a
--- /dev/null
+++ b/preact/benches/scripts/index.js
@@ -0,0 +1,110 @@
+import sade from 'sade';
+import { generateSingleConfig } from './config.js';
+import { defaultDeoptsOptions, runDeopts } from './deopts.js';
+import { defaultBenchOptions, runBenches } from './bench.js';
+import { analyze } from './analyze.js';
+
+const prog = sade('./scripts');
+
+// Tests:
+// - npm start
+prog
+ .command('config [bench]')
+ .describe('Generate the config for the given benchmark HTML file.')
+ .option(
+ '--trace',
+ 'Enable perf tracing for browsers that support it',
+ defaultBenchOptions.trace
+ )
+ .action(generateSingleConfig);
+
+// Tests:
+// - many* -n 2 -t 0
+// - many* -n 2 -t 0 -f preact-local -f preact-v8
+// - many* -n 2 -t 0 -f preact-local -f preact-v8 -b chrome
+prog
+ .command('bench [globs]')
+ .describe(
+ 'Run the benchmarks matching the given globs. The root for the globs is the "src" directory. Specify "all" to run all benchmarks (default). To get more help on options, see polymer/tachometer help. Result table is printed to stdout and written to a csv and json file in the results directory.'
+ )
+ .example('bench text*')
+ .example('bench *.html')
+ .example('bench all')
+ .example('bench many* -f preact-local -f preact-master')
+ .option(
+ '--browser, -b',
+ 'Which browsers to launch in automatic mode, comma-delimited (chrome, chrome-headless, firefox, firefox-headless, safari, edge, ie)',
+ defaultBenchOptions.browser
+ )
+ // TODO: Consider parsing and adding to configs
+ // .option(
+ // '--window-size',
+ // '"width,height" in pixels of the browser windows that will be created',
+ // defaultOptions['window-size']
+ // )
+ .option(
+ '--sample-size, -n',
+ 'Minimum number of times to run each benchmark',
+ defaultBenchOptions['sample-size']
+ )
+ .option(
+ '--horizon, -h',
+ 'The degrees of difference to try and resolve when auto-sampling ("N%" or "Nms", comma-delimited)',
+ defaultBenchOptions.horizon
+ )
+ .option(
+ '--timeout, -t',
+ 'The maximum number of minutes to spend auto-sampling',
+ defaultBenchOptions.timeout
+ )
+ .option(
+ '--framework, -f',
+ 'Which framework(s) to bench. Specify the flag multiple times to compare specific frameworks. Default is all frameworks',
+ defaultBenchOptions.framework
+ )
+ .option(
+ '--trace',
+ 'Enable perf tracing for browsers that support it',
+ defaultBenchOptions.trace
+ )
+ .action(runBenches);
+
+// Tests:
+// - (no args)
+// - many*
+// - many* -f preact-local -f preact-master
+prog
+ .command('deopts [benchmark]')
+ .describe(
+ 'Run v8-deopt-viewer against the specified benchmark file (defaults to many_updates.html). If a glob is given, only the first matching file will be run'
+ )
+ .example('deopts many_updates.html')
+ .example('deopts many*')
+ .example('deopts many* -f preact-local')
+ .example('deopts many* -f preact-local -f preact-master')
+ .option(
+ '--framework, -f',
+ 'The framework to run the benchmark with.',
+ defaultDeoptsOptions.framework
+ )
+ .option(
+ '--timeout, -t',
+ 'How long in seconds to keep the browser open while the benchmark runs. Passed to v8-deopt-viewer.',
+ defaultDeoptsOptions.timeout
+ )
+ .option(
+ '--open',
+ 'Open the resulting v8-deopt-viewer result in the browser upon completion',
+ defaultDeoptsOptions.open
+ )
+ .action(runDeopts);
+
+prog
+ .command('analyze')
+ .describe(
+ 'Analyze the trace logs created by running benchmarks with the --trace flag'
+ )
+ .example('analyze')
+ .action(analyze);
+
+prog.parse(process.argv);
diff --git a/preact/benches/scripts/prepare.js b/preact/benches/scripts/prepare.js
new file mode 100644
index 0000000..da1b7f3
--- /dev/null
+++ b/preact/benches/scripts/prepare.js
@@ -0,0 +1,44 @@
+import { readdir } from 'fs/promises';
+import path from 'path';
+import { execFileSync } from 'child_process';
+import del from 'del';
+import { repoRoot } from './utils.js';
+
+const npmCmd = process.platform == 'win32' ? 'npm.cmd' : 'npm';
+
+/**
+ * @param {string[]} frameworks
+ */
+export async function prepare(frameworks) {
+ const proxyRoot = repoRoot('benches/proxy-packages');
+ const proxyDirs = (await readdir(proxyRoot)).map(dirname =>
+ dirname.replace(/-proxy$/, '')
+ );
+
+ for (let framework of frameworks) {
+ const dirname = proxyDirs.find(dir => dir == framework);
+ if (dirname == null) {
+ continue;
+ }
+
+ const proxyDir = (...args) =>
+ path.join(proxyRoot, dirname + '-proxy', ...args);
+
+ // It appears from ad-hoc testing (npm v6.14.9 on Windows), npm will cache
+ // any locally referenced tarball files (e.g. "file:../../../preact.tgz") in
+ // its global cache.
+ //
+ // If a package-lock is present and the `npm ci` or `npm i` command is used,
+ // then npm will pull the tarball from the cache and not use the local
+ // tarball file even if the local reference has changed or is deleted.
+ //
+ // Because of the above behavior, we'll always delete the package-lock file
+ // and node_modules folder and use `npm i` to ensure we always get the
+ // latest packages
+ console.log(`Preparing ${dirname}: Cleaning ${proxyDir()}...`);
+ await del(['package-lock.json', 'node_modules'], { cwd: proxyDir() });
+
+ console.log(`Preparing ${dirname}: Running "npm i" in ${proxyDir()}...`);
+ execFileSync(npmCmd, ['i'], { cwd: proxyDir(), stdio: 'inherit' });
+ }
+}
diff --git a/preact/benches/scripts/tracing.d.ts b/preact/benches/scripts/tracing.d.ts
new file mode 100644
index 0000000..cc3f271
--- /dev/null
+++ b/preact/benches/scripts/tracing.d.ts
@@ -0,0 +1,224 @@
+// From: https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview
+
+export type TraceEvent =
+ | DurationEvent
+ | CompleteEvent
+ | InstantEvent
+ | AsyncEvent
+ | FlowEvent
+ | SampleEvent
+ | ProcessNameEvent
+ | ProcessLabelsEvent
+ | ProcessSortIndexEvent
+ | ThreadNameEvent
+ | ThreadSortIndexEvent
+ | MarkEvent
+ | ContextEvent
+ | ObjectCreatedEvent
+ | ObjectSnapshotEvent
+ | ObjectDestroyedEvent;
+
+interface BaseEvent {
+ /** The name of the event */
+ name: string;
+ /**
+ * The event categories. This is a comma separated list of categories for the
+ * event.
+ */
+ cat: string;
+ /** The event type (phase?) */
+ ph: string;
+ /** The tracing clock timestamp (microseconds) */
+ ts: number;
+ /** The thread clock timestamp of the event (microseconds) */
+ tts?: number;
+ /** Process ID */
+ pid: number;
+ /** Thread ID */
+ tid: number;
+ /** Any args provided for the event */
+ args: Record<string, any>;
+}
+
+interface StackData {
+ /**
+ * Stack frame at the start of the event. ID pointing the corresponding stack
+ * in the stackFrames map
+ */
+ sf?: number;
+ /**
+ * Stack at the start of the event. Usually contains program counter addresses
+ * as hex strings
+ */
+ stack?: string[];
+}
+
+/** Mark the beginning or end of a duration of work on a given thread */
+interface DurationEvent extends BaseEvent, StackData {
+ ph: 'B' | 'E';
+}
+
+/** Represents a duration of work on a given thread */
+interface CompleteEvent extends BaseEvent, StackData {
+ ph: 'X';
+ /** Tracing clock duration (microseconds) */
+ dur: number;
+ /** Thread clock duration? (microseconds) */
+ tdur?: number;
+ /** Stack frame at the end of this event */
+ esf?: number;
+ /** Stack at the end of this event */
+ estack?: string[];
+}
+
+/**
+ * Mark something happened but has no duration associated with it. Only threaded
+ * scoped events can have stack data associated with them.
+ */
+interface InstantEvent extends BaseEvent, StackData {
+ ph: 'i' | 'I';
+ /** Scope of the event. g = global, p = process, t = thread (default) */
+ s?: 'g' | 'p' | 't';
+}
+
+/**
+ * Async operations (e.g. frames in a game, network I/O). b = start, n =
+ * instant, e = end. Events with the same category, id, and scope (if provided)
+ * are considered events from the same event tree. Nested async events should
+ * have the same category and id as its parent (but perhaps a different name).
+ */
+interface AsyncEvent extends BaseEvent {
+ ph: 'b' | 'n' | 'e';
+ id: string;
+ scope?: string;
+}
+
+/**
+ * Similar to Async events but allows a duration to be associated with each
+ * other across threads/processes. Visually, think of a flow event as an arrow
+ * between two duration events. With flow events, each event will be drawn in
+ * the thread it is emitted from. The events will be linked together visually
+ * using lines and arrows.
+ *
+ * TODO: Finish filling out
+ */
+interface FlowEvent extends BaseEvent {
+ ph: 's' | 't' | 'f';
+}
+
+interface SampleEvent extends BaseEvent, StackData {
+ ph: 'P';
+}
+
+interface ProcessNameEvent extends BaseEvent {
+ ph: 'M';
+ name: 'process_name';
+ args: {
+ name: string;
+ };
+}
+
+interface ProcessLabelsEvent extends BaseEvent {
+ ph: 'M';
+ name: 'process_labels';
+ args: {
+ labels: string;
+ };
+}
+
+interface ProcessSortIndexEvent extends BaseEvent {
+ ph: 'M';
+ name: 'process_sort_index';
+ args: {
+ sort_index: number;
+ };
+}
+
+interface ProcessUptimeEvent extends BaseEvent {
+ ph: 'M';
+ name: 'process_uptime_seconds';
+ args: {
+ uptime: number;
+ };
+}
+
+interface ThreadNameEvent extends BaseEvent {
+ ph: 'M';
+ name: 'thread_name';
+ args: {
+ name: string;
+ };
+}
+
+interface ThreadSortIndexEvent extends BaseEvent {
+ ph: 'M';
+ name: 'thread_sort_index';
+ args: {
+ sort_index: number;
+ };
+}
+
+interface NumCPUsEvent extends BaseEvent {
+ ph: 'M';
+ name: 'num_cpus';
+ args: {
+ number: number;
+ };
+}
+
+/**
+ * Mark events are created whenever a corresponding navigation timing API mark
+ * is created
+ */
+interface MarkEvent extends BaseEvent {
+ ph: 'R';
+}
+
+/**
+ * Context events are used to mark sequences of trace events as belonging to a
+ * particular context (or a tree of contexts). "(" = enter context, ")" = exit
+ * context. The enter event adds a context to all following trace events on the
+ * same thread until a corresponding leave event exits that context. Context ids
+ * refer to context object snapshots.
+ */
+interface ContextEvent extends BaseEvent {
+ ph: '(' | ')';
+ id?: string;
+}
+
+/** Object was created. Time is inclusive */
+interface ObjectCreatedEvent extends BaseEvent {
+ ph: 'N';
+ id: string;
+ scope?: string;
+ args: undefined;
+}
+
+interface ObjectSnapshotEvent extends BaseEvent {
+ ph: 'O';
+ id: string;
+ scope?: string;
+ args: {
+ /**
+ * By default, an object snapshot inherits the category of its containing
+ * trace event. However, sometimes the object being snapshotted needs its
+ * own category. This happens because the place that creates an object
+ * snapshot's values is often separate form where the objects' constructor
+ * and destructor is called. Categories for the object creation and deletion
+ * commands must match the snapshot commands. Thus, the category of any
+ * object snapshot may be provided with the snapshot itself
+ */
+ cat?: string;
+ /** Name of base type object */
+ base_type?: string;
+ snapshot: any;
+ };
+}
+
+/** Object was destroyed. Time is exclusive */
+interface ObjectDestroyedEvent extends BaseEvent {
+ ph: 'D';
+ id: string;
+ scope?: string;
+ args: undefined;
+}
diff --git a/preact/benches/scripts/utils.js b/preact/benches/scripts/utils.js
new file mode 100644
index 0000000..f8404c0
--- /dev/null
+++ b/preact/benches/scripts/utils.js
@@ -0,0 +1,65 @@
+import { fileURLToPath } from 'url';
+import { stat, readFile } from 'fs/promises';
+import * as path from 'path';
+import escalade from 'escalade';
+import globby from 'globby';
+
+// TODO: Replace with import.meta.resolve when stable
+import { createRequire } from 'module';
+// @ts-ignore
+const require = createRequire(import.meta.url);
+
+export const IS_CI = process.env.CI === 'true';
+
+// @ts-ignore
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+export const repoRoot = (...args) => path.join(__dirname, '..', '..', ...args);
+export const benchesRoot = (...args) => repoRoot('benches', ...args);
+export const resultsPath = (...args) => benchesRoot('results', ...args);
+
+export const toUrl = str => str.replace(/^[A-Za-z]+:/, '/').replace(/\\/g, '/');
+
+export const allBenches = '**/*.html';
+export function globSrc(patterns) {
+ return globby(patterns, { cwd: benchesRoot('src') });
+}
+
+export async function getPkgBinPath(pkgName) {
+ /** @type {string | void} */
+ let packageJsonPath;
+ try {
+ // TODO: Replace with import.meta.resolve when stable
+ const pkgMainPath = require.resolve(pkgName);
+ packageJsonPath = await escalade(pkgMainPath, (dir, names) => {
+ if (names.includes('package.json')) {
+ return 'package.json';
+ }
+ });
+ } catch (e) {
+ // Tachometer doesn't have a valid 'main' entry
+ packageJsonPath = benchesRoot('node_modules', pkgName, 'package.json');
+ }
+
+ if (!packageJsonPath || !(await stat(packageJsonPath)).isFile()) {
+ throw new Error(
+ `Could not locate "${pkgName}" package.json at "${packageJsonPath}".`
+ );
+ }
+
+ const pkg = JSON.parse(await readFile(packageJsonPath, 'utf8'));
+ if (!pkg.bin) {
+ throw new Error(`${pkgName} package.json does not contain a "bin" entry.`);
+ }
+
+ let binSubPath = pkg.bin;
+ if (typeof pkg.bin == 'object') {
+ binSubPath = pkg.bin[pkgName];
+ }
+
+ const binPath = path.join(path.dirname(packageJsonPath), binSubPath);
+ if (!(await stat(binPath)).isFile()) {
+ throw new Error(`Bin path for ${pkgName} is not a file: ${binPath}`);
+ }
+
+ return binPath;
+}
diff --git a/preact/benches/src/02_replace1k.html b/preact/benches/src/02_replace1k.html
new file mode 100644
index 0000000..e6b6270
--- /dev/null
+++ b/preact/benches/src/02_replace1k.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>replace all rows</title>
+ <meta name="description" content="updating all 1,000 rows" />
+ <style>
+ .preloadicon {
+ display: none;
+ }
+ .glyphicon-remove:before {
+ content: '⨯';
+ }
+ </style>
+ </head>
+ <body>
+ <div id="main"></div>
+ <script type="module">
+ import {
+ measureName,
+ measureMemory,
+ testElementText,
+ afterFrame,
+ afterFrameAsync,
+ markRunStart,
+ markRunEnd
+ } from './util.js';
+ import * as framework from 'framework';
+ import { render } from '../src/keyed-children/index.js';
+
+ const { run } = render(framework, document.getElementById('main'));
+
+ async function main() {
+ const elementSelector = 'tr:first-child > td:first-child';
+
+ // MUST BE KEPT IN SYNC WITH WARMUP COUNT IN benches/scripts/config.js
+ const WARMUP_COUNT = 5;
+ for (let i = 0; i < WARMUP_COUNT; i++) {
+ markRunStart(`warmup-${i}`);
+ run();
+ await markRunEnd(`warmup-${i}`);
+
+ await afterFrameAsync();
+ testElementText(elementSelector, (i * 1000 + 1).toFixed());
+ }
+
+ await afterFrameAsync();
+
+ afterFrame(function () {
+ testElementText(elementSelector, WARMUP_COUNT + '001');
+ performance.mark('stop');
+ performance.measure(measureName, 'start', 'stop');
+
+ measureMemory();
+ });
+
+ markRunStart('final');
+ performance.mark('start');
+ run();
+ await markRunEnd('final');
+ }
+
+ afterFrame(main);
+ </script>
+ </body>
+</html>
diff --git a/preact/benches/src/03_update10th1k_x16.html b/preact/benches/src/03_update10th1k_x16.html
new file mode 100644
index 0000000..9de8fdb
--- /dev/null
+++ b/preact/benches/src/03_update10th1k_x16.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>partial update</title>
+ <meta
+ name="description"
+ content="updating every 10th row for 1,000 rows (3 warmup runs). 16x CPU slowdown."
+ />
+ <style>
+ .preloadicon {
+ display: none;
+ }
+ .glyphicon-remove:before {
+ content: "⨯";
+ }
+ </style>
+ </head>
+ <body>
+ <div id="main"></div>
+ <script type="module">
+ import {
+ measureName,
+ measureMemory,
+ afterFrame,
+ afterFrameAsync,
+ getRowLinkSel,
+ testElement,
+ testElementTextContains
+ } from './util.js';
+ import * as framework from 'framework';
+ import { render } from '../src/keyed-children/index.js';
+
+ const { run: mount, update } = render(
+ framework,
+ document.getElementById('main')
+ );
+
+ function repeat(pattern, repeats) {
+ let result = '';
+ for (let i = 0; i < repeats; i++) {
+ result += pattern;
+ }
+
+ return result;
+ }
+
+ async function init() {
+ mount();
+
+ await afterFrameAsync();
+ testElement(getRowLinkSel(1000));
+
+ for (let i = 0; i < 3; i++) {
+ update();
+
+ await afterFrameAsync();
+ testElementTextContains(getRowLinkSel(991), repeat(' !!!', i + 1));
+ }
+ }
+
+ async function run() {
+ performance.mark('start');
+ update();
+
+ await afterFrameAsync();
+ testElementTextContains(getRowLinkSel(991), repeat(' !!!', 3 + 1));
+ performance.mark('stop');
+ performance.measure(measureName, 'start', 'stop');
+
+ measureMemory();
+ }
+
+ init().then(run);
+ </script>
+ </body>
+</html>
diff --git a/preact/benches/src/07_create10k.html b/preact/benches/src/07_create10k.html
new file mode 100644
index 0000000..728d472
--- /dev/null
+++ b/preact/benches/src/07_create10k.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>create many rows</title>
+ <meta name="description" content="creating 10,000 rows" />
+ <style>
+ .preloadicon {
+ display: none;
+ }
+ .glyphicon-remove:before {
+ content: '⨯';
+ }
+ </style>
+ </head>
+ <body>
+ <div id="main"></div>
+ <script type="module">
+ import {
+ measureName,
+ measureMemory,
+ testElementText,
+ afterFrame
+ } from './util.js';
+ import * as framework from 'framework';
+ import { render } from '../src/keyed-children/index.js';
+
+ const { runLots } = render(framework, document.getElementById('main'));
+
+ async function main() {
+ const elementSelector = 'tr:last-child > td:first-child';
+
+ performance.mark('start');
+ runLots();
+
+ afterFrame(() => {
+ testElementText(elementSelector, '10000');
+ performance.mark('stop');
+ performance.measure(measureName, 'start', 'stop');
+
+ measureMemory();
+ });
+ }
+
+ main();
+ </script>
+ </body>
+</html>
diff --git a/preact/benches/src/filter_list.html b/preact/benches/src/filter_list.html
new file mode 100644
index 0000000..d31e1af
--- /dev/null
+++ b/preact/benches/src/filter_list.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Patching HTML</title>
+ <style>
+ .items {
+ margin: 1em 0;
+ padding: 0;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 2px;
+ }
+
+ .items > * {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 3em;
+ height: 2em;
+ margin: 0;
+ padding: 0;
+ background: #eee;
+ }
+ </style>
+ </head>
+ <body>
+ <div id="app"></div>
+ <script type="module">
+ import { measureName, measureMemory } from './util.js';
+ import { createRoot, createElement as h, Component } from 'framework';
+
+ function Row(props) {
+ return h('article', null, props.children);
+ }
+
+ function App(props) {
+ return h('div', {}, [
+ h(
+ 'div',
+ { class: 'items' },
+ props.items.map(id => h(Row, { key: id }, id))
+ )
+ ]);
+ }
+
+ const count = 1000;
+ const start = 20;
+ const end = 600;
+
+ const newItems = () =>
+ Array(count)
+ .fill(0)
+ .map((item, i) => i);
+ let items = newItems();
+ let currentItems = items;
+
+ const root = createRoot(document.getElementById('app'));
+ root.render(h(App, { items }));
+
+ function runPatch() {
+ items = newItems().filter(id => {
+ const isVisible = currentItems.includes(id);
+ return id >= start && id <= end ? !isVisible : isVisible;
+ });
+ currentItems = items;
+
+ root.render(h(App, { items }));
+ }
+
+ async function warmup() {
+ const count = 25;
+
+ for (let i = 0; i < count; i++) {
+ runPatch();
+ await new Promise(r => requestAnimationFrame(r));
+ }
+ }
+
+ warmup().then(async () => {
+ performance.mark('start');
+ runPatch();
+ await new Promise(r => requestAnimationFrame(r));
+ performance.mark('stop');
+ performance.measure(measureName, 'start', 'stop');
+
+ measureMemory();
+ });
+ </script>
+ </body>
+</html>
diff --git a/preact/benches/src/hydrate1k.html b/preact/benches/src/hydrate1k.html
new file mode 100644
index 0000000..bf43448
--- /dev/null
+++ b/preact/benches/src/hydrate1k.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>hydrate 1k table rows</title>
+ <meta name="description" content="hydrating 1,000 rows" />
+ <style>
+ .preloadicon {
+ display: none;
+ }
+ .glyphicon-remove:before {
+ content: '⨯';
+ }
+ </style>
+ </head>
+ <body>
+ <template id="template"></template>
+ <script type="module">
+ import {
+ measureName,
+ measureMemory,
+ testElementText,
+ afterFrame,
+ afterFrameAsync
+ } from './util.js';
+ import * as framework from 'framework';
+ import { getComponents } from '../src/keyed-children/components.js';
+ import { Store } from '../src/keyed-children/store.js';
+
+ /** @type {HTMLTemplateElement} */
+ const template = document.getElementById('template');
+ const { Main } = getComponents(framework);
+ const { createRoot, createElement } = framework;
+
+ const firstRowSel = 'tr:first-child > td:first-child';
+ const lastRowSel = 'tr:last-child > td:first-child';
+
+ const baseStore = new Store();
+ baseStore.run();
+
+ /**
+ * Delete the old hydrate root and create a new one with a clone of the
+ * template's content
+ */
+ function setupHydrateRoot() {
+ const hydrateRootId = 'hydrate-root';
+ let hydrateRoot = document.getElementById(hydrateRootId);
+ if (hydrateRoot) {
+ hydrateRoot.remove();
+ }
+
+ hydrateRoot = document.createElement('div');
+ hydrateRoot.id = hydrateRootId;
+ hydrateRoot.appendChild(template.content.cloneNode(true));
+ document.body.appendChild(hydrateRoot);
+ return hydrateRoot;
+ }
+
+ /** Render the app inside the template tag */
+ async function initializeTemplate() {
+ // Initialize template
+ createRoot(template.content).render(
+ createElement(Main, { store: baseStore })
+ );
+ await afterFrameAsync();
+ }
+
+ /**
+ * Click the second row's remove link and ensure the number of rows before
+ * and after the click are as expected
+ */
+ async function clickRemove(root, label, expectedBefore, expectedAfter) {
+ let rowCount = root.querySelectorAll('tr').length;
+ if (rowCount !== expectedBefore) {
+ throw new Error(
+ `${label}: Incorrect number of rows before remove click. Expected ${expectedBefore} but got ${rowCount}`
+ );
+ }
+
+ const removeLink = root.querySelector(
+ 'tr:nth-child(2) td:nth-child(3) a'
+ );
+ removeLink.click();
+ await afterFrameAsync();
+
+ rowCount = root.querySelectorAll('tr').length;
+ if (rowCount !== expectedAfter) {
+ throw new Error(
+ `${label}: Incorrect number of rows after after remove click. Expected ${expectedAfter} but got ${rowCount}`
+ );
+ }
+ }
+
+ async function warmupRun(i) {
+ // Test out hydrate and ensure it works
+ const hydrateRoot = setupHydrateRoot();
+
+ // Verify initial hydrate root isn't already hydrated and is static
+ testElementText(firstRowSel, '1');
+ testElementText(lastRowSel, '1000');
+ await clickRemove(hydrateRoot, `WARMUP ${i} - prehydrate`, 1000, 1000);
+
+ const store = new Store();
+ store.data = baseStore.data.slice();
+ createRoot(hydrateRoot).hydrate(createElement(Main, { store }));
+
+ // Verify hydrate has correct markup and is properly hydrated
+ testElementText(firstRowSel, '1');
+ testElementText(lastRowSel, '1000');
+ await clickRemove(hydrateRoot, `WARMUP ${i} - posthydrate`, 1000, 999);
+ }
+
+ function timedRun() {
+ afterFrame(function () {
+ performance.mark('stop');
+ performance.measure(measureName, 'start', 'stop');
+
+ measureMemory();
+ });
+
+ const hydrateRoot = setupHydrateRoot();
+ const store = new Store();
+ store.data = baseStore.data.slice();
+
+ performance.mark('start');
+ createRoot(hydrateRoot).hydrate(createElement(Main, { store }));
+ }
+
+ async function main() {
+ // const WARMUP_COUNT = 5;
+ const WARMUP_COUNT = 5;
+ for (let i = 0; i < WARMUP_COUNT; i++) {
+ await warmupRun(i);
+ }
+
+ await afterFrameAsync();
+
+ timedRun();
+ }
+
+ initializeTemplate().then(main);
+ </script>
+ </body>
+</html>
diff --git a/preact/benches/src/keyed-children/components.js b/preact/benches/src/keyed-children/components.js
new file mode 100644
index 0000000..0960b89
--- /dev/null
+++ b/preact/benches/src/keyed-children/components.js
@@ -0,0 +1,152 @@
+import { Store } from './store.js';
+
+/**
+ * @param {import('./index').Framework} framework
+ */
+export function getComponents({ createElement, Component }) {
+ class Row extends Component {
+ constructor(props) {
+ super(props);
+ this.onDelete = this.onDelete.bind(this);
+ this.onClick = this.onClick.bind(this);
+ }
+
+ shouldComponentUpdate(nextProps, nextState) {
+ return (
+ nextProps.data !== this.props.data ||
+ nextProps.styleClass !== this.props.styleClass
+ );
+ }
+
+ onDelete() {
+ this.props.onDelete(this.props.data.id);
+ }
+
+ onClick() {
+ this.props.onClick(this.props.data.id);
+ }
+
+ render() {
+ let { styleClass, onClick, onDelete, data } = this.props;
+ return createElement(
+ 'tr',
+ {
+ className: styleClass
+ },
+ createElement(
+ 'td',
+ {
+ className: 'col-md-1'
+ },
+ data.id
+ ),
+ createElement(
+ 'td',
+ {
+ className: 'col-md-4'
+ },
+ createElement(
+ 'a',
+ {
+ onClick: this.onClick
+ },
+ data.label
+ )
+ ),
+ createElement(
+ 'td',
+ {
+ className: 'col-md-1'
+ },
+ createElement(
+ 'a',
+ {
+ onClick: this.onDelete
+ },
+ createElement('span', {
+ className: 'glyphicon glyphicon-remove',
+ 'aria-hidden': 'true'
+ })
+ )
+ ),
+ createElement('td', {
+ className: 'col-md-6'
+ })
+ );
+ }
+ }
+
+ class Main extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { store: props.store ?? new Store() };
+ this.select = this.select.bind(this);
+ this.delete = this.delete.bind(this);
+
+ // @ts-ignore
+ window.app = this;
+ }
+ run() {
+ this.state.store.run();
+ this.setState({ store: this.state.store });
+ }
+ add() {
+ this.state.store.add();
+ this.setState({ store: this.state.store });
+ }
+ update() {
+ this.state.store.update();
+ this.setState({ store: this.state.store });
+ }
+ select(id) {
+ this.state.store.select(id);
+ this.setState({ store: this.state.store });
+ }
+ delete(id) {
+ this.state.store.delete(id);
+ this.setState({ store: this.state.store });
+ }
+ runLots() {
+ this.state.store.runLots();
+ this.setState({ store: this.state.store });
+ }
+ clear() {
+ this.state.store.clear();
+ this.setState({ store: this.state.store });
+ }
+ swapRows() {
+ this.state.store.swapRows();
+ this.setState({ store: this.state.store });
+ }
+ render() {
+ let rows = this.state.store.data.map((d, i) => {
+ return createElement(Row, {
+ key: d.id,
+ data: d,
+ onClick: this.select,
+ onDelete: this.delete,
+ styleClass: d.id === this.state.store.selected ? 'danger' : ''
+ });
+ });
+ return createElement(
+ 'div',
+ {
+ className: 'container'
+ },
+ createElement(
+ 'table',
+ {
+ className: 'table table-hover table-striped test-data'
+ },
+ createElement('tbody', {}, rows)
+ ),
+ createElement('span', {
+ className: 'preloadicon glyphicon glyphicon-remove',
+ 'aria-hidden': 'true'
+ })
+ );
+ }
+ }
+
+ return { Main, Row };
+}
diff --git a/preact/benches/src/keyed-children/index.js b/preact/benches/src/keyed-children/index.js
new file mode 100644
index 0000000..ece1265
--- /dev/null
+++ b/preact/benches/src/keyed-children/index.js
@@ -0,0 +1,29 @@
+import { getComponents } from './components.js';
+
+/**
+ * @typedef Framework
+ * @property {(type: any, props?: any, ...children: any) => JSX.Element} createElement
+ * @property {(root: HTMLElement) => ({ render(vnode: JSX.Element): void; hydrate(vnode: JSX.Element): void; })} createRoot
+ * @property {any} Component
+ *
+ * @param {Framework} framework
+ * @param {HTMLElement} rootDom
+ */
+export function render(framework, rootDom) {
+ const { Main } = getComponents(framework);
+ framework.createRoot(rootDom).render(framework.createElement(Main));
+
+ /** @type {Main} */
+ // @ts-ignore
+ const app = window.app;
+ return {
+ run: app.run.bind(app),
+ add: app.add.bind(app),
+ update: app.update.bind(app),
+ select: app.select.bind(app),
+ delete: app.delete.bind(app),
+ runLots: app.runLots.bind(app),
+ clear: app.clear.bind(app),
+ swapRows: app.swapRows.bind(app)
+ };
+}
diff --git a/preact/benches/src/keyed-children/store.js b/preact/benches/src/keyed-children/store.js
new file mode 100644
index 0000000..413208d
--- /dev/null
+++ b/preact/benches/src/keyed-children/store.js
@@ -0,0 +1,119 @@
+function _random(max) {
+ return Math.round(Math.random() * 1000) % max;
+}
+
+export class Store {
+ constructor() {
+ this.data = [];
+ this.selected = undefined;
+ this.id = 1;
+ }
+ buildData(count = 1000) {
+ var adjectives = [
+ 'pretty',
+ 'large',
+ 'big',
+ 'small',
+ 'tall',
+ 'short',
+ 'long',
+ 'handsome',
+ 'plain',
+ 'quaint',
+ 'clean',
+ 'elegant',
+ 'easy',
+ 'angry',
+ 'crazy',
+ 'helpful',
+ 'mushy',
+ 'odd',
+ 'unsightly',
+ 'adorable',
+ 'important',
+ 'inexpensive',
+ 'cheap',
+ 'expensive',
+ 'fancy'
+ ];
+ var colours = [
+ 'red',
+ 'yellow',
+ 'blue',
+ 'green',
+ 'pink',
+ 'brown',
+ 'purple',
+ 'brown',
+ 'white',
+ 'black',
+ 'orange'
+ ];
+ var nouns = [
+ 'table',
+ 'chair',
+ 'house',
+ 'bbq',
+ 'desk',
+ 'car',
+ 'pony',
+ 'cookie',
+ 'sandwich',
+ 'burger',
+ 'pizza',
+ 'mouse',
+ 'keyboard'
+ ];
+ var data = [];
+ for (var i = 0; i < count; i++)
+ data.push({
+ id: this.id++,
+ label:
+ adjectives[_random(adjectives.length)] +
+ ' ' +
+ colours[_random(colours.length)] +
+ ' ' +
+ nouns[_random(nouns.length)]
+ });
+ return data;
+ }
+ updateData(mod = 10) {
+ for (let i = 0; i < this.data.length; i += 10) {
+ this.data[i] = Object.assign({}, this.data[i], {
+ label: this.data[i].label + ' !!!'
+ });
+ }
+ }
+ delete(id) {
+ var idx = this.data.findIndex(d => d.id === id);
+ this.data.splice(idx, 1);
+ }
+ run() {
+ this.data = this.buildData();
+ this.selected = undefined;
+ }
+ add() {
+ this.data = this.data.concat(this.buildData(1000));
+ }
+ update() {
+ this.updateData();
+ }
+ select(id) {
+ this.selected = id;
+ }
+ runLots() {
+ this.data = this.buildData(10000);
+ this.selected = undefined;
+ }
+ clear() {
+ this.data = [];
+ this.selected = undefined;
+ }
+ swapRows() {
+ if (this.data.length > 998) {
+ var a = this.data[1];
+ this.data[1] = this.data[998];
+ this.data[998] = a;
+ }
+ }
+}
diff --git a/preact/benches/src/many_updates.html b/preact/benches/src/many_updates.html
new file mode 100644
index 0000000..e59b304
--- /dev/null
+++ b/preact/benches/src/many_updates.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Patching HTML</title>
+ <style>
+ .hello {
+ color: red;
+ }
+
+ .bye {
+ color: blue;
+ }
+ </style>
+ </head>
+ <body>
+ <div id="root"></div>
+ <script type="module">
+ import { measureName, measureMemory } from './util.js';
+ import { createRoot, createElement as h } from 'framework';
+
+ const state = {
+ msg: 'hello',
+ list: new Array(1000).fill(0).map((_, i) => ({
+ i,
+ text: 'foobar' + i
+ }))
+ };
+
+ let counter = 0;
+ function App() {
+ return h(
+ 'div',
+ { id: 'app' },
+ h('p', null, '> ', ++counter, ' <'),
+ h('p', null, state.msg),
+ ...state.list.map((obj, i) =>
+ h(
+ 'div',
+ { key: i, title: state.msg + i },
+ h('span', { className: state.msg }, obj.text),
+ h('span', { className: 'baz' }, 'one'),
+ h('span', { className: 'qux' }, 'two'),
+ h(
+ 'div',
+ null,
+ h('span', { className: 'qux' }, 'three'),
+ h('span', { className: 'qux' }, 'four'),
+ h('span', { className: 'baz' }, 'five'),
+ h(
+ 'div',
+ null,
+ h('span', { className: 'qux' }, 'six'),
+ h('span', { className: 'baz' }, 'seven'),
+ h('span', { className: state.msg }, 'eight')
+ )
+ )
+ )
+ )
+ );
+ }
+
+ const root = createRoot(document.getElementById('root'));
+
+ // const p = performance.now();
+ root.render(h(App));
+ // console.log(`mount: ${(performance.now() - p).toFixed(2)}ms`);
+
+ // const patchResults = [];
+
+ function runPatch() {
+ // const s = performance.now();
+ state.msg = state.msg === 'hello' ? 'bye' : 'hello';
+ state.list[0].text = state.msg;
+ root.render(h(App));
+ // patchResults.push(performance.now() - s);
+ }
+
+ async function warmup() {
+ // const count = 100;
+ const count = 25;
+
+ for (let i = 0; i < count; i++) {
+ runPatch();
+ await new Promise(r => requestAnimationFrame(r));
+ }
+
+ // let fastest = Infinity;
+ // const total = patchResults.reduce((all, cur) => {
+ // if (cur < fastest) {
+ // fastest = cur;
+ // }
+ // return all + cur;
+ // }, 0);
+
+ // console.log(`${count} runs average: ${(total / count).toFixed(2)}ms`);
+ // console.log(`fastest run: ${fastest.toFixed(2)}ms`);
+ }
+
+ warmup().then(async () => {
+ performance.mark('start');
+ runPatch();
+ await new Promise(r => requestAnimationFrame(r));
+ performance.mark('stop');
+ performance.measure(measureName, 'start', 'stop');
+
+ measureMemory();
+ });
+ </script>
+ </body>
+</html>
diff --git a/preact/benches/src/text_update.html b/preact/benches/src/text_update.html
new file mode 100644
index 0000000..6874558
--- /dev/null
+++ b/preact/benches/src/text_update.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Text Updates</title>
+ </head>
+ <body>
+ <div id="root"></div>
+ <script type="module">
+ import { measureName, measureMemory } from './util.js';
+ import { createRoot, createElement } from 'framework';
+
+ const root = createRoot(document.getElementById('root'));
+
+ function component({ randomValue }) {
+ return createElement('div', {}, [
+ createElement('h2', {}, 'Test ' + randomValue),
+ createElement('h1', {}, `===${randomValue}===`)
+ ]);
+ }
+
+ let result;
+
+ performance.mark('start');
+ for (let i = 0; i < 100; i++) {
+ root.render(createElement(component, { randomValue: i }));
+ }
+ performance.mark('stop');
+ performance.measure(measureName, 'start', 'stop');
+ measureMemory();
+ </script>
+ </body>
+</html>
diff --git a/preact/benches/src/util.js b/preact/benches/src/util.js
new file mode 100644
index 0000000..64c4765
--- /dev/null
+++ b/preact/benches/src/util.js
@@ -0,0 +1,98 @@
+// import afterFrame from "../node_modules/afterframe/dist/afterframe.module.js";
+import afterFrame from 'afterframe';
+
+export { afterFrame };
+
+export const measureName = 'duration';
+
+let promise = null;
+export function afterFrameAsync() {
+ if (promise === null) {
+ promise = new Promise(resolve =>
+ afterFrame(time => {
+ promise = null;
+ resolve(time);
+ })
+ );
+ }
+
+ return promise;
+}
+
+export function measureMemory() {
+ if ('gc' in window && 'memory' in performance) {
+ // Report results in MBs
+ window.gc();
+ window.usedJSHeapSize = performance.memory.usedJSHeapSize / 1e6;
+ } else {
+ window.usedJSHeapSize = 0;
+ }
+}
+
+export function markRunStart(runId) {
+ performance.mark(`run-${runId}-start`);
+}
+
+let staticPromise = Promise.resolve();
+export function markRunEnd(runId) {
+ return staticPromise.then(() => {
+ performance.mark(`run-${runId}-end`);
+ performance.measure(
+ `run-${runId}`,
+ `run-${runId}-start`,
+ `run-${runId}-end`
+ );
+ });
+}
+
+export function getRowIdSel(index) {
+ return `tbody > tr:nth-child(${index}) > td:first-child`;
+}
+
+export function getRowLinkSel(index) {
+ return `tbody > tr:nth-child(${index}) > td:nth-child(2) > a`;
+}
+
+/**
+ * @param {string} selector
+ * @returns {Element}
+ */
+export function getBySelector(selector) {
+ const element = document.querySelector(selector);
+ if (element == null) {
+ throw new Error(`Could not find element matching selector: ${selector}`);
+ }
+
+ return element;
+}
+
+export function testElement(selector) {
+ const testElement = document.querySelector(selector);
+ if (testElement == null) {
+ throw new Error(
+ 'Test failed. Rendering after one paint was not successful'
+ );
+ }
+}
+
+export function testElementText(selector, expectedText) {
+ const elm = document.querySelector(selector);
+ if (elm == null) {
+ throw new Error('Could not find element matching selector: ' + selector);
+ }
+
+ if (elm.textContent != expectedText) {
+ throw new Error(
+ `Element did not have expected text. Expected: '${expectedText}' Actual: '${elm.textContent}'`
+ );
+ }
+}
+
+export function testElementTextContains(selector, expectedText) {
+ const elm = getBySelector(selector);
+ if (!elm.textContent.includes(expectedText)) {
+ throw new Error(
+ `Element did not include expected text. Expected to include: '${expectedText}' Actual: '${elm.textContent}'`
+ );
+ }
+}
diff --git a/preact/compat/LICENSE b/preact/compat/LICENSE
new file mode 100644
index 0000000..da5389a
--- /dev/null
+++ b/preact/compat/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Jason Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/preact/compat/jsx-dev-runtime.js b/preact/compat/jsx-dev-runtime.js
new file mode 100644
index 0000000..355f008
--- /dev/null
+++ b/preact/compat/jsx-dev-runtime.js
@@ -0,0 +1 @@
+module.exports = require('preact/jsx-runtime');
diff --git a/preact/compat/jsx-dev-runtime.mjs b/preact/compat/jsx-dev-runtime.mjs
new file mode 100644
index 0000000..5e28f44
--- /dev/null
+++ b/preact/compat/jsx-dev-runtime.mjs
@@ -0,0 +1 @@
+export * from 'preact/jsx-runtime';
diff --git a/preact/compat/jsx-runtime.js b/preact/compat/jsx-runtime.js
new file mode 100644
index 0000000..355f008
--- /dev/null
+++ b/preact/compat/jsx-runtime.js
@@ -0,0 +1 @@
+module.exports = require('preact/jsx-runtime');
diff --git a/preact/compat/jsx-runtime.mjs b/preact/compat/jsx-runtime.mjs
new file mode 100644
index 0000000..5e28f44
--- /dev/null
+++ b/preact/compat/jsx-runtime.mjs
@@ -0,0 +1 @@
+export * from 'preact/jsx-runtime';
diff --git a/preact/compat/mangle.json b/preact/compat/mangle.json
new file mode 100644
index 0000000..506a6a4
--- /dev/null
+++ b/preact/compat/mangle.json
@@ -0,0 +1,21 @@
+{
+ "help": {
+ "what is this file?": "It controls protected/private property mangling so that minified builds have consistent property names.",
+ "why are there duplicate minified properties?": "Most properties are only used on one type of objects, so they can have the same name since they will never collide. Doing this reduces size."
+ },
+ "minify": {
+ "mangle": {
+ "properties": {
+ "regex": "^_[^_]",
+ "reserved": [
+ "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED",
+ "__REACT_DEVTOOLS_GLOBAL_HOOK__",
+ "__PREACT_DEVTOOLS__",
+ "_renderers",
+ "__source",
+ "__self"
+ ]
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/preact/compat/package.json b/preact/compat/package.json
new file mode 100644
index 0000000..c39ef14
--- /dev/null
+++ b/preact/compat/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "preact-compat",
+ "amdName": "preactCompat",
+ "version": "4.0.0",
+ "private": true,
+ "description": "A React compatibility layer for Preact",
+ "main": "dist/compat.js",
+ "module": "dist/compat.module.js",
+ "umd:main": "dist/compat.umd.js",
+ "source": "src/index.js",
+ "types": "src/index.d.ts",
+ "license": "MIT",
+ "mangle": {
+ "regex": "^_"
+ },
+ "peerDependencies": {
+ "preact": "^10.0.0"
+ }
+}
diff --git a/preact/compat/scheduler.js b/preact/compat/scheduler.js
new file mode 100644
index 0000000..01c4ceb
--- /dev/null
+++ b/preact/compat/scheduler.js
@@ -0,0 +1,15 @@
+// see scheduler.mjs
+
+function unstable_runWithPriority(priority, callback) {
+ return callback();
+}
+
+module.exports = {
+ unstable_ImmediatePriority: 1,
+ unstable_UserBlockingPriority: 2,
+ unstable_NormalPriority: 3,
+ unstable_LowPriority: 4,
+ unstable_IdlePriority: 5,
+ unstable_runWithPriority,
+ unstable_now: performance.now.bind(performance)
+};
diff --git a/preact/compat/scheduler.mjs b/preact/compat/scheduler.mjs
new file mode 100644
index 0000000..c51bd4b
--- /dev/null
+++ b/preact/compat/scheduler.mjs
@@ -0,0 +1,23 @@
+/* eslint-disable */
+
+// This file includes experimental React APIs exported from the "scheduler"
+// npm package. Despite being explicitely marked as unstable some libraries
+// already make use of them. This file is not a full replacement for the
+// scheduler package, but includes the necessary shims to make those libraries
+// work with Preact.
+
+export var unstable_ImmediatePriority = 1;
+export var unstable_UserBlockingPriority = 2;
+export var unstable_NormalPriority = 3;
+export var unstable_LowPriority = 4;
+export var unstable_IdlePriority = 5;
+
+/**
+ * @param {number} priority
+ * @param {() => void} callback
+ */
+export function unstable_runWithPriority(priority, callback) {
+ return callback();
+}
+
+export var unstable_now = performance.now.bind(performance);
diff --git a/preact/compat/server.js b/preact/compat/server.js
new file mode 100644
index 0000000..7156872
--- /dev/null
+++ b/preact/compat/server.js
@@ -0,0 +1,15 @@
+/* eslint-disable */
+var renderToString;
+try {
+ const mod = require('preact-render-to-string');
+ renderToString = mod.default || mod.renderToString || mod;
+} catch (e) {
+ throw Error(
+ 'renderToString() error: missing "preact-render-to-string" dependency.'
+ );
+}
+
+module.exports = {
+ renderToString: renderToString,
+ renderToStaticMarkup: renderToString
+};
diff --git a/preact/compat/server.mjs b/preact/compat/server.mjs
new file mode 100644
index 0000000..9e8858e
--- /dev/null
+++ b/preact/compat/server.mjs
@@ -0,0 +1,4 @@
+export {
+ renderToString,
+ renderToString as renderToStaticMarkup
+} from 'preact-render-to-string';
diff --git a/preact/compat/src/Children.js b/preact/compat/src/Children.js
new file mode 100644
index 0000000..0295d93
--- /dev/null
+++ b/preact/compat/src/Children.js
@@ -0,0 +1,21 @@
+import { toChildArray } from 'preact';
+
+const mapFn = (children, fn) => {
+ if (children == null) return null;
+ return toChildArray(toChildArray(children).map(fn));
+};
+
+// This API is completely unnecessary for Preact, so it's basically passthrough.
+export const Children = {
+ map: mapFn,
+ forEach: mapFn,
+ count(children) {
+ return children ? toChildArray(children).length : 0;
+ },
+ only(children) {
+ const normalized = toChildArray(children);
+ if (normalized.length !== 1) throw 'Children.only';
+ return normalized[0];
+ },
+ toArray: toChildArray
+};
diff --git a/preact/compat/src/PureComponent.js b/preact/compat/src/PureComponent.js
new file mode 100644
index 0000000..6396ce4
--- /dev/null
+++ b/preact/compat/src/PureComponent.js
@@ -0,0 +1,15 @@
+import { Component } from 'preact';
+import { shallowDiffers } from './util';
+
+/**
+ * Component class with a predefined `shouldComponentUpdate` implementation
+ */
+export function PureComponent(p) {
+ this.props = p;
+}
+PureComponent.prototype = new Component();
+// Some third-party libraries check if this property is present
+PureComponent.prototype.isPureReactComponent = true;
+PureComponent.prototype.shouldComponentUpdate = function(props, state) {
+ return shallowDiffers(this.props, props) || shallowDiffers(this.state, state);
+};
diff --git a/preact/compat/src/forwardRef.js b/preact/compat/src/forwardRef.js
new file mode 100644
index 0000000..39585cb
--- /dev/null
+++ b/preact/compat/src/forwardRef.js
@@ -0,0 +1,51 @@
+import { options } from 'preact';
+import { assign } from './util';
+
+let oldDiffHook = options._diff;
+options._diff = vnode => {
+ if (vnode.type && vnode.type._forwarded && vnode.ref) {
+ vnode.props.ref = vnode.ref;
+ vnode.ref = null;
+ }
+ if (oldDiffHook) oldDiffHook(vnode);
+};
+
+export const REACT_FORWARD_SYMBOL =
+ (typeof Symbol != 'undefined' &&
+ Symbol.for &&
+ Symbol.for('react.forward_ref')) ||
+ 0xf47;
+
+/**
+ * Pass ref down to a child. This is mainly used in libraries with HOCs that
+ * wrap components. Using `forwardRef` there is an easy way to get a reference
+ * of the wrapped component instead of one of the wrapper itself.
+ * @param {import('./index').ForwardFn} fn
+ * @returns {import('./internal').FunctionComponent}
+ */
+export function forwardRef(fn) {
+ // We always have ref in props.ref, except for
+ // mobx-react. It will call this function directly
+ // and always pass ref as the second argument.
+ function Forwarded(props, ref) {
+ let clone = assign({}, props);
+ delete clone.ref;
+ ref = props.ref || ref;
+ return fn(
+ clone,
+ !ref || (typeof ref === 'object' && !('current' in ref)) ? null : ref
+ );
+ }
+
+ // mobx-react checks for this being present
+ Forwarded.$$typeof = REACT_FORWARD_SYMBOL;
+ // mobx-react heavily relies on implementation details.
+ // It expects an object here with a `render` property,
+ // and prototype.render will fail. Without this
+ // mobx-react throws.
+ Forwarded.render = Forwarded;
+
+ Forwarded.prototype.isReactComponent = Forwarded._forwarded = true;
+ Forwarded.displayName = 'ForwardRef(' + (fn.displayName || fn.name) + ')';
+ return Forwarded;
+}
diff --git a/preact/compat/src/index.d.ts b/preact/compat/src/index.d.ts
new file mode 100644
index 0000000..82c1a4f
--- /dev/null
+++ b/preact/compat/src/index.d.ts
@@ -0,0 +1,140 @@
+import * as _hooks from '../../hooks';
+import * as preact from '../../src';
+import { JSXInternal } from '../../src/jsx';
+import * as _Suspense from './suspense';
+import * as _SuspenseList from './suspense-list';
+
+// export default React;
+export = React;
+export as namespace React;
+declare namespace React {
+ // Export JSX
+ export import JSX = JSXInternal;
+
+ // Hooks
+ export import CreateHandle = _hooks.CreateHandle;
+ export import EffectCallback = _hooks.EffectCallback;
+ export import Inputs = _hooks.Inputs;
+ export import PropRef = _hooks.PropRef;
+ export import Reducer = _hooks.Reducer;
+ export import Ref = _hooks.Ref;
+ export import StateUpdater = _hooks.StateUpdater;
+ export import useCallback = _hooks.useCallback;
+ export import useContext = _hooks.useContext;
+ export import useDebugValue = _hooks.useDebugValue;
+ export import useEffect = _hooks.useEffect;
+ export import useImperativeHandle = _hooks.useImperativeHandle;
+ export import useLayoutEffect = _hooks.useLayoutEffect;
+ export import useMemo = _hooks.useMemo;
+ export import useReducer = _hooks.useReducer;
+ export import useRef = _hooks.useRef;
+ export import useState = _hooks.useState;
+
+ // Preact Defaults
+ export import Component = preact.Component;
+ export import FunctionComponent = preact.FunctionComponent;
+ export import FC = preact.FunctionComponent;
+ export import createContext = preact.createContext;
+ export import createRef = preact.createRef;
+ export import Fragment = preact.Fragment;
+ export import createElement = preact.createElement;
+ export import cloneElement = preact.cloneElement;
+
+ // Suspense
+ export import Suspense = _Suspense.Suspense;
+ export import lazy = _Suspense.lazy;
+ export import SuspenseList = _SuspenseList.SuspenseList;
+
+ // Compat
+ export import StrictMode = preact.Fragment;
+ export const version: string;
+
+ export function createPortal(
+ vnode: preact.VNode,
+ container: Element
+ ): preact.VNode<any>;
+
+ export function render(
+ vnode: preact.VNode<any>,
+ parent: Element,
+ callback?: () => void
+ ): Component | null;
+
+ export function hydrate(
+ vnode: preact.VNode<any>,
+ parent: Element,
+ callback?: () => void
+ ): Component | null;
+
+ export function unmountComponentAtNode(
+ container: Element | Document | ShadowRoot | DocumentFragment
+ ): boolean;
+
+ export function createFactory(
+ type: preact.VNode<any>['type']
+ ): (
+ props?: any,
+ ...children: preact.ComponentChildren[]
+ ) => preact.VNode<any>;
+ export function isValidElement(element: any): boolean;
+ export function findDOMNode(component: preact.Component): Element | null;
+
+ export abstract class PureComponent<P = {}, S = {}> extends preact.Component<
+ P,
+ S
+ > {
+ isPureReactComponent: boolean;
+ }
+
+ export function memo<P = {}>(
+ component: preact.FunctionalComponent<P>,
+ comparer?: (prev: P, next: P) => boolean
+ ): preact.FunctionComponent<P>;
+ export function memo<C extends preact.FunctionalComponent<any>>(
+ component: C,
+ comparer?: (
+ prev: preact.ComponentProps<C>,
+ next: preact.ComponentProps<C>
+ ) => boolean
+ ): C;
+
+ export interface ForwardFn<P = {}, T = any> {
+ (props: P, ref: Ref<T>): preact.ComponentChild;
+ displayName?: string;
+ }
+
+ export function forwardRef<R, P = {}>(
+ fn: ForwardFn<P, R>
+ ): preact.FunctionalComponent<Omit<P, 'ref'> & { ref?: preact.RefObject<R> }>;
+
+ export function unstable_batchedUpdates(
+ callback: (arg?: any) => void,
+ arg?: any
+ ): void;
+
+ export const Children: {
+ map<T extends preact.ComponentChild, R>(
+ children: T | T[],
+ fn: (child: T, i: number) => R
+ ): R[];
+ forEach<T extends preact.ComponentChild>(
+ children: T | T[],
+ fn: (child: T, i: number) => void
+ ): void;
+ count: (children: preact.ComponentChildren) => number;
+ only: (children: preact.ComponentChildren) => preact.ComponentChild;
+ toArray: (children: preact.ComponentChildren) => preact.VNode<{}>[];
+ };
+
+ // scheduler
+ export const unstable_ImmediatePriority: number;
+ export const unstable_UserBlockingPriority: number;
+ export const unstable_NormalPriority: number;
+ export const unstable_LowPriority: number;
+ export const unstable_IdlePriority: number;
+ export function unstable_runWithPriority(
+ priority: number,
+ callback: () => void
+ ): void;
+ export const unstable_now: () => number;
+}
diff --git a/preact/compat/src/index.js b/preact/compat/src/index.js
new file mode 100644
index 0000000..c8f9a6c
--- /dev/null
+++ b/preact/compat/src/index.js
@@ -0,0 +1,187 @@
+import {
+ createElement,
+ render as preactRender,
+ cloneElement as preactCloneElement,
+ createRef,
+ Component,
+ createContext,
+ Fragment
+} from 'preact';
+import {
+ useState,
+ useReducer,
+ useEffect,
+ useLayoutEffect,
+ useRef,
+ useImperativeHandle,
+ useMemo,
+ useCallback,
+ useContext,
+ useDebugValue
+} from 'preact/hooks';
+import { PureComponent } from './PureComponent';
+import { memo } from './memo';
+import { forwardRef } from './forwardRef';
+import { Children } from './Children';
+import { Suspense, lazy } from './suspense';
+import { SuspenseList } from './suspense-list';
+import { createPortal } from './portals';
+import {
+ hydrate,
+ render,
+ REACT_ELEMENT_TYPE,
+ __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
+} from './render';
+
+const version = '17.0.2'; // trick libraries to think we are react
+
+/**
+ * Legacy version of createElement.
+ * @param {import('./internal').VNode["type"]} type The node name or Component constructor
+ */
+function createFactory(type) {
+ return createElement.bind(null, type);
+}
+
+/**
+ * Check if the passed element is a valid (p)react node.
+ * @param {*} element The element to check
+ * @returns {boolean}
+ */
+function isValidElement(element) {
+ return !!element && element.$$typeof === REACT_ELEMENT_TYPE;
+}
+
+/**
+ * Wrap `cloneElement` to abort if the passed element is not a valid element and apply
+ * all vnode normalizations.
+ * @param {import('./internal').VNode} element The vnode to clone
+ * @param {object} props Props to add when cloning
+ * @param {Array<import('./internal').ComponentChildren>} rest Optional component children
+ */
+function cloneElement(element) {
+ if (!isValidElement(element)) return element;
+ return preactCloneElement.apply(null, arguments);
+}
+
+/**
+ * Remove a component tree from the DOM, including state and event handlers.
+ * @param {import('./internal').PreactElement} container
+ * @returns {boolean}
+ */
+function unmountComponentAtNode(container) {
+ if (container._children) {
+ preactRender(null, container);
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Get the matching DOM node for a component
+ * @param {import('./internal').Component} component
+ * @returns {import('./internal').PreactElement | null}
+ */
+function findDOMNode(component) {
+ return (
+ (component &&
+ (component.base || (component.nodeType === 1 && component))) ||
+ null
+ );
+}
+
+/**
+ * Deprecated way to control batched rendering inside the reconciler, but we
+ * already schedule in batches inside our rendering code
+ * @template Arg
+ * @param {(arg: Arg) => void} callback function that triggers the updated
+ * @param {Arg} [arg] Optional argument that can be passed to the callback
+ */
+// eslint-disable-next-line camelcase
+const unstable_batchedUpdates = (callback, arg) => callback(arg);
+
+/**
+ * In React, `flushSync` flushes the entire tree and forces a rerender. It's
+ * implmented here as a no-op.
+ * @template Arg
+ * @template Result
+ * @param {(arg: Arg) => Result} callback function that runs before the flush
+ * @param {Arg} [arg] Optional arugment that can be passed to the callback
+ * @returns
+ */
+const flushSync = (callback, arg) => callback(arg);
+
+/**
+ * Strict Mode is not implemented in Preact, so we provide a stand-in for it
+ * that just renders its children without imposing any restrictions.
+ */
+const StrictMode = Fragment;
+
+export * from 'preact/hooks';
+export {
+ version,
+ Children,
+ render,
+ hydrate,
+ unmountComponentAtNode,
+ createPortal,
+ createElement,
+ createContext,
+ createFactory,
+ cloneElement,
+ createRef,
+ Fragment,
+ isValidElement,
+ findDOMNode,
+ Component,
+ PureComponent,
+ memo,
+ forwardRef,
+ flushSync,
+ // eslint-disable-next-line camelcase
+ unstable_batchedUpdates,
+ StrictMode,
+ Suspense,
+ SuspenseList,
+ lazy,
+ __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
+};
+
+// React copies the named exports to the default one.
+export default {
+ useState,
+ useReducer,
+ useEffect,
+ useLayoutEffect,
+ useRef,
+ useImperativeHandle,
+ useMemo,
+ useCallback,
+ useContext,
+ useDebugValue,
+ version,
+ Children,
+ render,
+ hydrate,
+ unmountComponentAtNode,
+ createPortal,
+ createElement,
+ createContext,
+ createFactory,
+ cloneElement,
+ createRef,
+ Fragment,
+ isValidElement,
+ findDOMNode,
+ Component,
+ PureComponent,
+ memo,
+ forwardRef,
+ flushSync,
+ unstable_batchedUpdates,
+ StrictMode,
+ Suspense,
+ SuspenseList,
+ lazy,
+ __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
+};
diff --git a/preact/compat/src/internal.d.ts b/preact/compat/src/internal.d.ts
new file mode 100644
index 0000000..cb68ffa
--- /dev/null
+++ b/preact/compat/src/internal.d.ts
@@ -0,0 +1,47 @@
+import {
+ Component as PreactComponent,
+ VNode as PreactVNode,
+ FunctionComponent as PreactFunctionComponent
+} from '../../src/internal';
+import { SuspenseProps } from './suspense';
+
+export { ComponentChildren } from '../..';
+
+export { PreactElement } from '../../src/internal';
+
+export interface Component<P = {}, S = {}> extends PreactComponent<P, S> {
+ isReactComponent?: object;
+ isPureReactComponent?: true;
+ _patchedLifecycles?: true;
+
+ // Suspense internal properties
+ _childDidSuspend?(error: Promise<void>, suspendingVNode: VNode): void;
+ _suspended: (vnode: VNode) => (unsuspend: () => void) => void;
+ _onResolve?(): void;
+
+ // Portal internal properties
+ _temp: any;
+ _container: PreactElement;
+}
+
+export interface FunctionComponent<P = {}> extends PreactFunctionComponent<P> {
+ shouldComponentUpdate?(nextProps: Readonly<P>): boolean;
+ _forwarded?: boolean;
+ _patchedLifecycles?: true;
+}
+
+export interface VNode<T = any> extends PreactVNode<T> {
+ $$typeof?: symbol | string;
+ preactCompatNormalized?: boolean;
+}
+
+export interface SuspenseState {
+ _suspended?: null | VNode<any>;
+}
+
+export interface SuspenseComponent
+ extends PreactComponent<SuspenseProps, SuspenseState> {
+ _pendingSuspensionCount: number;
+ _suspenders: Component[];
+ _detachOnNextRender: null | VNode<any>;
+}
diff --git a/preact/compat/src/memo.js b/preact/compat/src/memo.js
new file mode 100644
index 0000000..e743199
--- /dev/null
+++ b/preact/compat/src/memo.js
@@ -0,0 +1,34 @@
+import { createElement } from 'preact';
+import { shallowDiffers } from './util';
+
+/**
+ * Memoize a component, so that it only updates when the props actually have
+ * changed. This was previously known as `React.pure`.
+ * @param {import('./internal').FunctionComponent} c functional component
+ * @param {(prev: object, next: object) => boolean} [comparer] Custom equality function
+ * @returns {import('./internal').FunctionComponent}
+ */
+export function memo(c, comparer) {
+ function shouldUpdate(nextProps) {
+ let ref = this.props.ref;
+ let updateRef = ref == nextProps.ref;
+ if (!updateRef && ref) {
+ ref.call ? ref(null) : (ref.current = null);
+ }
+
+ if (!comparer) {
+ return shallowDiffers(this.props, nextProps);
+ }
+
+ return !comparer(this.props, nextProps) || !updateRef;
+ }
+
+ function Memoed(props) {
+ this.shouldComponentUpdate = shouldUpdate;
+ return createElement(c, props);
+ }
+ Memoed.displayName = 'Memo(' + (c.displayName || c.name) + ')';
+ Memoed.prototype.isReactComponent = true;
+ Memoed._forwarded = true;
+ return Memoed;
+}
diff --git a/preact/compat/src/portals.js b/preact/compat/src/portals.js
new file mode 100644
index 0000000..cf9f8f7
--- /dev/null
+++ b/preact/compat/src/portals.js
@@ -0,0 +1,80 @@
+import { createElement, render } from 'preact';
+
+/**
+ * @param {import('../../src/index').RenderableProps<{ context: any }>} props
+ */
+function ContextProvider(props) {
+ this.getChildContext = () => props.context;
+ return props.children;
+}
+
+/**
+ * Portal component
+ * @this {import('./internal').Component}
+ * @param {object | null | undefined} props
+ *
+ * TODO: use createRoot() instead of fake root
+ */
+function Portal(props) {
+ const _this = this;
+ let container = props._container;
+
+ _this.componentWillUnmount = function() {
+ render(null, _this._temp);
+ _this._temp = null;
+ _this._container = null;
+ };
+
+ // When we change container we should clear our old container and
+ // indicate a new mount.
+ if (_this._container && _this._container !== container) {
+ _this.componentWillUnmount();
+ }
+
+ // When props.vnode is undefined/false/null we are dealing with some kind of
+ // conditional vnode. This should not trigger a render.
+ if (props._vnode) {
+ if (!_this._temp) {
+ _this._container = container;
+
+ // Create a fake DOM parent node that manages a subset of `container`'s children:
+ _this._temp = {
+ nodeType: 1,
+ parentNode: container,
+ childNodes: [],
+ appendChild(child) {
+ this.childNodes.push(child);
+ _this._container.appendChild(child);
+ },
+ insertBefore(child, before) {
+ this.childNodes.push(child);
+ _this._container.appendChild(child);
+ },
+ removeChild(child) {
+ this.childNodes.splice(this.childNodes.indexOf(child) >>> 1, 1);
+ _this._container.removeChild(child);
+ }
+ };
+ }
+
+ // Render our wrapping element into temp.
+ render(
+ createElement(ContextProvider, { context: _this.context }, props._vnode),
+ _this._temp
+ );
+ }
+ // When we come from a conditional render, on a mounted
+ // portal we should clear the DOM.
+ else if (_this._temp) {
+ _this.componentWillUnmount();
+ }
+}
+
+/**
+ * Create a `Portal` to continue rendering the vnode tree at a different DOM node
+ * @param {import('./internal').VNode} vnode The vnode to render
+ * @param {import('./internal').PreactElement} container The DOM node to continue rendering in to.
+ */
+export function createPortal(vnode, container) {
+ return createElement(Portal, { _vnode: vnode, _container: container });
+}
diff --git a/preact/compat/src/render.js b/preact/compat/src/render.js
new file mode 100644
index 0000000..2448d2d
--- /dev/null
+++ b/preact/compat/src/render.js
@@ -0,0 +1,219 @@
+import {
+ render as preactRender,
+ hydrate as preactHydrate,
+ options,
+ toChildArray,
+ Component
+} from 'preact';
+
+export const REACT_ELEMENT_TYPE =
+ (typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||
+ 0xeac7;
+
+const CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;
+
+// Input types for which onchange should not be converted to oninput.
+// type="file|checkbox|radio", plus "range" in IE11.
+// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches "range")
+const onChangeInputType = type =>
+ (typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'
+ ? /fil|che|rad/i
+ : /fil|che|ra/i
+ ).test(type);
+
+// Some libraries like `react-virtualized` explicitly check for this.
+Component.prototype.isReactComponent = {};
+
+// `UNSAFE_*` lifecycle hooks
+// Preact only ever invokes the unprefixed methods.
+// Here we provide a base "fallback" implementation that calls any defined UNSAFE_ prefixed method.
+// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.
+// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.
+// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.
+// See https://github.com/preactjs/preact/issues/1941
+[
+ 'componentWillMount',
+ 'componentWillReceiveProps',
+ 'componentWillUpdate'
+].forEach(key => {
+ Object.defineProperty(Component.prototype, key, {
+ configurable: true,
+ get() {
+ return this['UNSAFE_' + key];
+ },
+ set(v) {
+ Object.defineProperty(this, key, {
+ configurable: true,
+ writable: true,
+ value: v
+ });
+ }
+ });
+});
+
+/**
+ * Proxy render() since React returns a Component reference.
+ * @param {import('./internal').VNode} vnode VNode tree to render
+ * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into
+ * @param {() => void} [callback] Optional callback that will be called after rendering
+ * @returns {import('./internal').Component | null} The root component reference or null
+ */
+export function render(vnode, parent, callback) {
+ // React destroys any existing DOM nodes, see #1727
+ // ...but only on the first render, see #1828
+ if (parent._children == null) {
+ parent.textContent = '';
+ }
+
+ preactRender(vnode, parent);
+ if (typeof callback == 'function') callback();
+
+ return vnode ? vnode._component : null;
+}
+
+export function hydrate(vnode, parent, callback) {
+ preactHydrate(vnode, parent);
+ if (typeof callback == 'function') callback();
+
+ return vnode ? vnode._component : null;
+}
+
+let oldEventHook = options.event;
+options.event = e => {
+ if (oldEventHook) e = oldEventHook(e);
+ e.persist = empty;
+ e.isPropagationStopped = isPropagationStopped;
+ e.isDefaultPrevented = isDefaultPrevented;
+ return (e.nativeEvent = e);
+};
+
+function empty() {}
+
+function isPropagationStopped() {
+ return this.cancelBubble;
+}
+
+function isDefaultPrevented() {
+ return this.defaultPrevented;
+}
+
+let classNameDescriptor = {
+ configurable: true,
+ get() {
+ return this.class;
+ }
+};
+
+let oldVNodeHook = options.vnode;
+options.vnode = vnode => {
+ let type = vnode.type;
+ let props = vnode.props;
+ let normalizedProps = props;
+
+ // only normalize props on Element nodes
+ if (typeof type === 'string') {
+ normalizedProps = {};
+
+ for (let i in props) {
+ let value = props[i];
+
+ if (i === 'value' && 'defaultValue' in props && value == null) {
+ // Skip applying value if it is null/undefined and we already set
+ // a default value
+ continue;
+ } else if (
+ i === 'defaultValue' &&
+ 'value' in props &&
+ props.value == null
+ ) {
+ // `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.
+ // `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.
+ i = 'value';
+ } else if (i === 'download' && value === true) {
+ // Calling `setAttribute` with a truthy value will lead to it being
+ // passed as a stringified value, e.g. `download="true"`. React
+ // converts it to an empty string instead, otherwise the attribute
+ // value will be used as the file name and the file will be called
+ // "true" upon downloading it.
+ value = '';
+ } else if (/ondoubleclick/i.test(i)) {
+ i = 'ondblclick';
+ } else if (
+ /^onchange(textarea|input)/i.test(i + type) &&
+ !onChangeInputType(props.type)
+ ) {
+ i = 'oninput';
+ } else if (/^on(Ani|Tra|Tou|BeforeInp)/.test(i)) {
+ i = i.toLowerCase();
+ } else if (CAMEL_PROPS.test(i)) {
+ i = i.replace(/[A-Z0-9]/, '-$&').toLowerCase();
+ } else if (value === null) {
+ value = undefined;
+ }
+
+ normalizedProps[i] = value;
+ }
+
+ // Add support for array select values: <select multiple value={[]} />
+ if (
+ type == 'select' &&
+ normalizedProps.multiple &&
+ Array.isArray(normalizedProps.value)
+ ) {
+ // forEach() always returns undefined, which we abuse here to unset the value prop.
+ normalizedProps.value = toChildArray(props.children).forEach(child => {
+ child.props.selected =
+ normalizedProps.value.indexOf(child.props.value) != -1;
+ });
+ }
+
+ // Adding support for defaultValue in select tag
+ if (type == 'select' && normalizedProps.defaultValue != null) {
+ normalizedProps.value = toChildArray(props.children).forEach(child => {
+ if (normalizedProps.multiple) {
+ child.props.selected =
+ normalizedProps.defaultValue.indexOf(child.props.value) != -1;
+ } else {
+ child.props.selected =
+ normalizedProps.defaultValue == child.props.value;
+ }
+ });
+ }
+
+ vnode.props = normalizedProps;
+ }
+
+ if (type && props.class != props.className) {
+ classNameDescriptor.enumerable = 'className' in props;
+ if (props.className != null) normalizedProps.class = props.className;
+ Object.defineProperty(normalizedProps, 'className', classNameDescriptor);
+ }
+
+ vnode.$$typeof = REACT_ELEMENT_TYPE;
+
+ if (oldVNodeHook) oldVNodeHook(vnode);
+};
+
+// Only needed for react-relay
+let currentComponent;
+const oldBeforeRender = options._render;
+options._render = function(vnode) {
+ if (oldBeforeRender) {
+ oldBeforeRender(vnode);
+ }
+ currentComponent = vnode._component;
+};
+
+// This is a very very private internal function for React it
+// is used to sort-of do runtime dependency injection. So far
+// only `react-relay` makes use of it. It uses it to read the
+// context value.
+export const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {
+ ReactCurrentDispatcher: {
+ current: {
+ readContext(context) {
+ return currentComponent._globalContext[context._id].props.value;
+ }
+ }
+ }
+};
diff --git a/preact/compat/src/suspense-list.d.ts b/preact/compat/src/suspense-list.d.ts
new file mode 100644
index 0000000..caa1eb6
--- /dev/null
+++ b/preact/compat/src/suspense-list.d.ts
@@ -0,0 +1,14 @@
+import { Component, ComponentChild, ComponentChildren } from '../../src';
+
+//
+// SuspenseList
+// -----------------------------------
+
+export interface SuspenseListProps {
+ children?: ComponentChildren;
+ revealOrder?: 'forwards' | 'backwards' | 'together';
+}
+
+export class SuspenseList extends Component<SuspenseListProps> {
+ render(): ComponentChild;
+}
diff --git a/preact/compat/src/suspense-list.js b/preact/compat/src/suspense-list.js
new file mode 100644
index 0000000..cf162cb
--- /dev/null
+++ b/preact/compat/src/suspense-list.js
@@ -0,0 +1,126 @@
+import { Component, toChildArray } from 'preact';
+import { suspended } from './suspense.js';
+
+// Indexes to linked list nodes (nodes are stored as arrays to save bytes).
+const SUSPENDED_COUNT = 0;
+const RESOLVED_COUNT = 1;
+const NEXT_NODE = 2;
+
+// Having custom inheritance instead of a class here saves a lot of bytes.
+export function SuspenseList() {
+ this._next = null;
+ this._map = null;
+}
+
+// Mark one of child's earlier suspensions as resolved.
+// Some pending callbacks may become callable due to this
+// (e.g. the last suspended descendant gets resolved when
+// revealOrder === 'together'). Process those callbacks as well.
+const resolve = (list, child, node) => {
+ if (++node[RESOLVED_COUNT] === node[SUSPENDED_COUNT]) {
+ // The number a child (or any of its descendants) has been suspended
+ // matches the number of times it's been resolved. Therefore we
+ // mark the child as completely resolved by deleting it from ._map.
+ // This is used to figure out when *all* children have been completely
+ // resolved when revealOrder is 'together'.
+ list._map.delete(child);
+ }
+
+ // If revealOrder is falsy then we can do an early exit, as the
+ // callbacks won't get queued in the node anyway.
+ // If revealOrder is 'together' then also do an early exit
+ // if all suspended descendants have not yet been resolved.
+ if (
+ !list.props.revealOrder ||
+ (list.props.revealOrder[0] === 't' && list._map.size)
+ ) {
+ return;
+ }
+
+ // Walk the currently suspended children in order, calling their
+ // stored callbacks on the way. Stop if we encounter a child that
+ // has not been completely resolved yet.
+ node = list._next;
+ while (node) {
+ while (node.length > 3) {
+ node.pop()();
+ }
+ if (node[RESOLVED_COUNT] < node[SUSPENDED_COUNT]) {
+ break;
+ }
+ list._next = node = node[NEXT_NODE];
+ }
+};
+
+// Things we do here to save some bytes but are not proper JS inheritance:
+// - call `new Component()` as the prototype
+// - do not set `Suspense.prototype.constructor` to `Suspense`
+SuspenseList.prototype = new Component();
+
+SuspenseList.prototype._suspended = function(child) {
+ const list = this;
+ const delegated = suspended(list._vnode);
+
+ let node = list._map.get(child);
+ node[SUSPENDED_COUNT]++;
+
+ return unsuspend => {
+ const wrappedUnsuspend = () => {
+ if (!list.props.revealOrder) {
+ // Special case the undefined (falsy) revealOrder, as there
+ // is no need to coordinate a specific order or unsuspends.
+ unsuspend();
+ } else {
+ node.push(unsuspend);
+ resolve(list, child, node);
+ }
+ };
+ if (delegated) {
+ delegated(wrappedUnsuspend);
+ } else {
+ wrappedUnsuspend();
+ }
+ };
+};
+
+SuspenseList.prototype.render = function(props) {
+ this._next = null;
+ this._map = new Map();
+
+ const children = toChildArray(props.children);
+ if (props.revealOrder && props.revealOrder[0] === 'b') {
+ // If order === 'backwards' (or, well, anything starting with a 'b')
+ // then flip the child list around so that the last child will be
+ // the first in the linked list.
+ children.reverse();
+ }
+ // Build the linked list. Iterate through the children in reverse order
+ // so that `_next` points to the first linked list node to be resolved.
+ for (let i = children.length; i--; ) {
+ // Create a new linked list node as an array of form:
+ // [suspended_count, resolved_count, next_node]
+ // where suspended_count and resolved_count are numeric counters for
+ // keeping track how many times a node has been suspended and resolved.
+ //
+ // Note that suspended_count starts from 1 instead of 0, so we can block
+ // processing callbacks until componentDidMount has been called. In a sense
+ // node is suspended at least until componentDidMount gets called!
+ //
+ // Pending callbacks are added to the end of the node:
+ // [suspended_count, resolved_count, next_node, callback_0, callback_1, ...]
+ this._map.set(children[i], (this._next = [1, 0, this._next]));
+ }
+ return props.children;
+};
+
+SuspenseList.prototype.componentDidUpdate = SuspenseList.prototype.componentDidMount = function() {
+ // Iterate through all children after mounting for two reasons:
+ // 1. As each node[SUSPENDED_COUNT] starts from 1, this iteration increases
+ // each node[RELEASED_COUNT] by 1, therefore balancing the counters.
+ // The nodes can now be completely consumed from the linked list.
+ // 2. Handle nodes that might have gotten resolved between render and
+ // componentDidMount.
+ this._map.forEach((node, child) => {
+ resolve(this, child, node);
+ });
+};
diff --git a/preact/compat/src/suspense.d.ts b/preact/compat/src/suspense.d.ts
new file mode 100644
index 0000000..9bd0e74
--- /dev/null
+++ b/preact/compat/src/suspense.d.ts
@@ -0,0 +1,15 @@
+import { Component, ComponentChild, ComponentChildren } from '../../src';
+
+//
+// Suspense/lazy
+// -----------------------------------
+export function lazy<T>(loader: () => Promise<{ default: T } | T>): T;
+
+export interface SuspenseProps {
+ children?: ComponentChildren;
+ fallback: ComponentChildren;
+}
+
+export class Suspense extends Component<SuspenseProps> {
+ render(): ComponentChild;
+}
diff --git a/preact/compat/src/suspense.js b/preact/compat/src/suspense.js
new file mode 100644
index 0000000..6244eaf
--- /dev/null
+++ b/preact/compat/src/suspense.js
@@ -0,0 +1,270 @@
+import { Component, createElement, options, Fragment } from 'preact';
+import { assign } from './util';
+
+const oldCatchError = options._catchError;
+options._catchError = function(error, newVNode, oldVNode) {
+ if (error.then) {
+ /** @type {import('./internal').Component} */
+ let component;
+ let vnode = newVNode;
+
+ for (; (vnode = vnode._parent); ) {
+ if ((component = vnode._component) && component._childDidSuspend) {
+ if (newVNode._dom == null) {
+ newVNode._dom = oldVNode._dom;
+ newVNode._children = oldVNode._children;
+ }
+ // Don't call oldCatchError if we found a Suspense
+ return component._childDidSuspend(error, newVNode);
+ }
+ }
+ }
+ oldCatchError(error, newVNode, oldVNode);
+};
+
+const oldUnmount = options.unmount;
+options.unmount = function(vnode) {
+ /** @type {import('./internal').Component} */
+ const component = vnode._component;
+ if (component && component._onResolve) {
+ component._onResolve();
+ }
+
+ // if the component is still hydrating
+ // most likely it is because the component is suspended
+ // we set the vnode.type as `null` so that it is not a typeof function
+ // so the unmount will remove the vnode._dom
+ if (component && vnode._hydrating === true) {
+ vnode.type = null;
+ }
+
+ if (oldUnmount) oldUnmount(vnode);
+};
+
+function detachedClone(vnode, detachedParent, parentDom) {
+ if (vnode) {
+ if (vnode._component && vnode._component.__hooks) {
+ vnode._component.__hooks._list.forEach(effect => {
+ if (typeof effect._cleanup == 'function') effect._cleanup();
+ });
+
+ vnode._component.__hooks = null;
+ }
+
+ vnode = assign({}, vnode);
+ if (vnode._component != null) {
+ if (vnode._component._parentDom === parentDom) {
+ vnode._component._parentDom = detachedParent;
+ }
+ vnode._component = null;
+ }
+
+ vnode._children =
+ vnode._children &&
+ vnode._children.map(child =>
+ detachedClone(child, detachedParent, parentDom)
+ );
+ }
+
+ return vnode;
+}
+
+function removeOriginal(vnode, detachedParent, originalParent) {
+ if (vnode) {
+ vnode._original = null;
+ vnode._children =
+ vnode._children &&
+ vnode._children.map(child =>
+ removeOriginal(child, detachedParent, originalParent)
+ );
+
+ if (vnode._component) {
+ if (vnode._component._parentDom === detachedParent) {
+ if (vnode._dom) {
+ originalParent.insertBefore(vnode._dom, vnode._nextDom);
+ }
+ vnode._component._force = true;
+ vnode._component._parentDom = originalParent;
+ }
+ }
+ }
+
+ return vnode;
+}
+
+// having custom inheritance instead of a class here saves a lot of bytes
+export function Suspense() {
+ // we do not call super here to golf some bytes...
+ this._pendingSuspensionCount = 0;
+ this._suspenders = null;
+ this._detachOnNextRender = null;
+}
+
+// Things we do here to save some bytes but are not proper JS inheritance:
+// - call `new Component()` as the prototype
+// - do not set `Suspense.prototype.constructor` to `Suspense`
+Suspense.prototype = new Component();
+
+/**
+ * @this {import('./internal').SuspenseComponent}
+ * @param {Promise} promise The thrown promise
+ * @param {import('./internal').VNode<any, any>} suspendingVNode The suspending component
+ */
+Suspense.prototype._childDidSuspend = function(promise, suspendingVNode) {
+ const suspendingComponent = suspendingVNode._component;
+
+ /** @type {import('./internal').SuspenseComponent} */
+ const c = this;
+
+ if (c._suspenders == null) {
+ c._suspenders = [];
+ }
+ c._suspenders.push(suspendingComponent);
+
+ const resolve = suspended(c._vnode);
+
+ let resolved = false;
+ const onResolved = () => {
+ if (resolved) return;
+
+ resolved = true;
+ suspendingComponent._onResolve = null;
+
+ if (resolve) {
+ resolve(onSuspensionComplete);
+ } else {
+ onSuspensionComplete();
+ }
+ };
+
+ suspendingComponent._onResolve = onResolved;
+
+ const onSuspensionComplete = () => {
+ if (!--c._pendingSuspensionCount) {
+ // If the suspension was during hydration we don't need to restore the
+ // suspended children into the _children array
+ if (c.state._suspended) {
+ const suspendedVNode = c.state._suspended;
+ c._vnode._children[0] = removeOriginal(
+ suspendedVNode,
+ suspendedVNode._component._parentDom,
+ suspendedVNode._component._originalParentDom
+ );
+ }
+
+ c.setState({ _suspended: (c._detachOnNextRender = null) });
+
+ let suspended;
+ while ((suspended = c._suspenders.pop())) {
+ suspended.forceUpdate();
+ }
+ }
+ };
+
+ /**
+ * We do not set `suspended: true` during hydration because we want the actual markup
+ * to remain on screen and hydrate it when the suspense actually gets resolved.
+ * While in non-hydration cases the usual fallback -> component flow would occour.
+ */
+ const wasHydrating = suspendingVNode._hydrating === true;
+ if (!c._pendingSuspensionCount++ && !wasHydrating) {
+ c.setState({ _suspended: (c._detachOnNextRender = c._vnode._children[0]) });
+ }
+ promise.then(onResolved, onResolved);
+};
+
+Suspense.prototype.componentWillUnmount = function() {
+ this._suspenders = [];
+};
+
+/**
+ * @this {import('./internal').SuspenseComponent}
+ * @param {import('./internal').SuspenseComponent["props"]} props
+ * @param {import('./internal').SuspenseState} state
+ */
+Suspense.prototype.render = function(props, state) {
+ if (this._detachOnNextRender) {
+ // When the Suspense's _vnode was created by a call to createVNode
+ // (i.e. due to a setState further up in the tree)
+ // it's _children prop is null, in this case we "forget" about the parked vnodes to detach
+ if (this._vnode._children) {
+ const detachedParent = document.createElement('div');
+ const detachedComponent = this._vnode._children[0]._component;
+ this._vnode._children[0] = detachedClone(
+ this._detachOnNextRender,
+ detachedParent,
+ (detachedComponent._originalParentDom = detachedComponent._parentDom)
+ );
+ }
+
+ this._detachOnNextRender = null;
+ }
+
+ // Wrap fallback tree in a VNode that prevents itself from being marked as aborting mid-hydration:
+ /** @type {import('./internal').VNode} */
+ const fallback =
+ state._suspended && createElement(Fragment, null, props.fallback);
+ if (fallback) fallback._hydrating = null;
+
+ return [
+ createElement(Fragment, null, state._suspended ? null : props.children),
+ fallback
+ ];
+};
+
+/**
+ * Checks and calls the parent component's _suspended method, passing in the
+ * suspended vnode. This is a way for a parent (e.g. SuspenseList) to get notified
+ * that one of its children/descendants suspended.
+ *
+ * The parent MAY return a callback. The callback will get called when the
+ * suspension resolves, notifying the parent of the fact.
+ * Moreover, the callback gets function `unsuspend` as a parameter. The resolved
+ * child descendant will not actually get unsuspended until `unsuspend` gets called.
+ * This is a way for the parent to delay unsuspending.
+ *
+ * If the parent does not return a callback then the resolved vnode
+ * gets unsuspended immediately when it resolves.
+ *
+ * @param {import('./internal').VNode} vnode
+ * @returns {((unsuspend: () => void) => void)?}
+ */
+export function suspended(vnode) {
+ /** @type {import('./internal').Component} */
+ let component = vnode._parent._component;
+ return component && component._suspended && component._suspended(vnode);
+}
+
+export function lazy(loader) {
+ let prom;
+ let component;
+ let error;
+
+ function Lazy(props) {
+ if (!prom) {
+ prom = loader();
+ prom.then(
+ exports => {
+ component = exports.default || exports;
+ },
+ e => {
+ error = e;
+ }
+ );
+ }
+
+ if (error) {
+ throw error;
+ }
+
+ if (!component) {
+ throw prom;
+ }
+
+ return createElement(component, props);
+ }
+
+ Lazy.displayName = 'Lazy';
+ Lazy._forwarded = true;
+ return Lazy;
+}
diff --git a/preact/compat/src/util.js b/preact/compat/src/util.js
new file mode 100644
index 0000000..fa12b09
--- /dev/null
+++ b/preact/compat/src/util.js
@@ -0,0 +1,28 @@
+/**
+ * Assign properties from `props` to `obj`
+ * @template O, P The obj and props types
+ * @param {O} obj The object to copy properties to
+ * @param {P} props The object to copy properties from
+ * @returns {O & P}
+ */
+export function assign(obj, props) {
+ for (let i in props) obj[i] = props[i];
+ return /** @type {O & P} */ (obj);
+}
+
+/**
+ * Check if two objects have a different shape
+ * @param {object} a
+ * @param {object} b
+ * @returns {boolean}
+ */
+export function shallowDiffers(a, b) {
+ for (let i in a) if (i !== '__source' && !(i in b)) return true;
+ for (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;
+ return false;
+}
+
+export function removeNode(node) {
+ let parentNode = node.parentNode;
+ if (parentNode) parentNode.removeChild(node);
+}
diff --git a/preact/compat/test-utils.js b/preact/compat/test-utils.js
new file mode 100644
index 0000000..2dac062
--- /dev/null
+++ b/preact/compat/test-utils.js
@@ -0,0 +1 @@
+module.exports = require('preact/test-utils');
diff --git a/preact/compat/test/browser/Children.test.js b/preact/compat/test/browser/Children.test.js
new file mode 100644
index 0000000..4e0c32d
--- /dev/null
+++ b/preact/compat/test/browser/Children.test.js
@@ -0,0 +1,185 @@
+import {
+ setupScratch,
+ teardown,
+ serializeHtml
+} from '../../../test/_util/helpers';
+import { div, span } from '../../../test/_util/dom';
+import React, { createElement, Children, render } from 'preact/compat';
+
+describe('Children', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('.count', () => {
+ let count;
+ function Foo(props) {
+ count = Children.count(props.children);
+ return <div>{count}</div>;
+ }
+
+ it('should return 0 for no children', () => {
+ render(<Foo />, scratch);
+ expect(count).to.equal(0);
+ });
+
+ it('should return number of children', () => {
+ render(
+ <Foo>
+ <div />
+ foo
+ </Foo>,
+ scratch
+ );
+ expect(count).to.equal(2);
+ });
+ });
+
+ describe('.only', () => {
+ let actual;
+ function Foo(props) {
+ actual = Children.only(props.children);
+ return <div>{actual}</div>;
+ }
+
+ it('should only allow 1 child', () => {
+ render(<Foo>foo</Foo>, scratch);
+ expect(actual).to.equal('foo');
+ });
+
+ it('should throw if no children are passed', () => {
+ // eslint-disable-next-line prefer-arrow-callback
+ expect(function() {
+ render(<Foo />, scratch);
+ }).to.throw();
+ });
+
+ it('should throw if more children are passed', () => {
+ // eslint-disable-next-line prefer-arrow-callback
+ expect(function() {
+ render(
+ <Foo>
+ foo
+ <span />
+ </Foo>,
+ scratch
+ );
+ }).to.throw();
+ });
+ });
+
+ describe('.map', () => {
+ function Foo(props) {
+ let children = Children.map(props.children, child => (
+ <span>{child}</span>
+ ));
+ return <div>{children}</div>;
+ }
+
+ it('should iterate over children', () => {
+ render(
+ <Foo>
+ foo<div>bar</div>
+ </Foo>,
+ scratch
+ );
+ let expected = div([span('foo'), span(div('bar'))]);
+ expect(serializeHtml(scratch)).to.equal(expected);
+ });
+
+ it('should work with no children', () => {
+ render(<Foo />, scratch);
+ expect(serializeHtml(scratch)).to.equal('<div></div>');
+ });
+
+ it('should work with children as zero number', () => {
+ const testNumber = 0;
+
+ render(<Foo>{testNumber}</Foo>, scratch);
+ expect(serializeHtml(scratch)).to.equal('<div><span>0</span></div>');
+ });
+
+ it('should flatten result', () => {
+ const ProblemChild = ({ children }) => {
+ return React.Children.map(children, child => {
+ return React.Children.map(child.props.children, x => x);
+ }).filter(React.isValidElement);
+ };
+
+ const App = () => {
+ return (
+ <ProblemChild>
+ <div>
+ <div>1</div>
+ <div>2</div>
+ </div>
+ </ProblemChild>
+ );
+ };
+
+ render(<App />, scratch);
+
+ expect(scratch.textContent).to.equal('12');
+ });
+
+ it('should call with indices', () => {
+ const assertion = [];
+ const ProblemChild = ({ children }) => {
+ return React.Children.map(children, (child, i) => {
+ assertion.push(i);
+ return React.Children.map(child.props.children, (x, j) => {
+ assertion.push(j);
+ return x;
+ });
+ }).filter(React.isValidElement);
+ };
+
+ const App = () => {
+ return (
+ <ProblemChild>
+ <div>
+ <div>1</div>
+ <div>2</div>
+ </div>
+ <div>
+ <div>3</div>
+ <div>4</div>
+ </div>
+ </ProblemChild>
+ );
+ };
+
+ render(<App />, scratch);
+ expect(scratch.textContent).to.equal('1234');
+ expect(assertion.length).to.equal(6);
+ });
+ });
+
+ describe('.forEach', () => {
+ function Foo(props) {
+ let children = [];
+ Children.forEach(props.children, child =>
+ children.push(<span>{child}</span>)
+ );
+ return <div>{children}</div>;
+ }
+
+ it('should iterate over children', () => {
+ render(
+ <Foo>
+ foo<div>bar</div>
+ </Foo>,
+ scratch
+ );
+ let expected = div([span('foo'), span(div('bar'))]);
+ expect(serializeHtml(scratch)).to.equal(expected);
+ });
+ });
+});
diff --git a/preact/compat/test/browser/PureComponent.test.js b/preact/compat/test/browser/PureComponent.test.js
new file mode 100644
index 0000000..1e69307
--- /dev/null
+++ b/preact/compat/test/browser/PureComponent.test.js
@@ -0,0 +1,125 @@
+import React, { createElement } from 'preact/compat';
+import { setupRerender } from 'preact/test-utils';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+describe('PureComponent', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should be a class', () => {
+ expect(React)
+ .to.have.property('PureComponent')
+ .that.is.a('function');
+ });
+
+ it('should pass props in constructor', () => {
+ let spy = sinon.spy();
+ class Foo extends React.PureComponent {
+ constructor(props) {
+ super(props);
+ spy(this.props, props);
+ }
+ }
+
+ React.render(<Foo foo="bar" />, scratch);
+
+ let expected = { foo: 'bar' };
+ expect(spy).to.be.calledWithMatch(expected, expected);
+ });
+
+ it('should ignore the __source variable', () => {
+ const pureSpy = sinon.spy();
+ const appSpy = sinon.spy();
+ let set;
+ class Pure extends React.PureComponent {
+ render() {
+ pureSpy();
+ return <div>Static</div>;
+ }
+ }
+
+ const App = () => {
+ const [, setState] = React.useState(0);
+ appSpy();
+ set = setState;
+ return <Pure __source={{}} />;
+ };
+
+ React.render(<App />, scratch);
+ expect(appSpy).to.be.calledOnce;
+ expect(pureSpy).to.be.calledOnce;
+
+ set(1);
+ rerender();
+ expect(appSpy).to.be.calledTwice;
+ expect(pureSpy).to.be.calledOnce;
+ });
+
+ it('should only re-render when props or state change', () => {
+ class C extends React.PureComponent {
+ render() {
+ return <div />;
+ }
+ }
+ let spy = sinon.spy(C.prototype, 'render');
+
+ let inst = React.render(<C />, scratch);
+ expect(spy).to.have.been.calledOnce;
+ spy.resetHistory();
+
+ inst = React.render(<C />, scratch);
+ expect(spy).not.to.have.been.called;
+
+ let b = { foo: 'bar' };
+ inst = React.render(<C a="a" b={b} />, scratch);
+ expect(spy).to.have.been.calledOnce;
+ spy.resetHistory();
+
+ inst = React.render(<C a="a" b={b} />, scratch);
+ expect(spy).not.to.have.been.called;
+
+ inst.setState({});
+ rerender();
+ expect(spy).not.to.have.been.called;
+
+ inst.setState({ a: 'a', b });
+ rerender();
+ expect(spy).to.have.been.calledOnce;
+ spy.resetHistory();
+
+ inst.setState({ a: 'a', b });
+ rerender();
+ expect(spy).not.to.have.been.called;
+ });
+
+ it('should update when props are removed', () => {
+ let spy = sinon.spy();
+ class App extends React.PureComponent {
+ render() {
+ spy();
+ return <div>foo</div>;
+ }
+ }
+
+ React.render(<App a="foo" />, scratch);
+ React.render(<App />, scratch);
+ expect(spy).to.be.calledTwice;
+ });
+
+ it('should have "isPureReactComponent" property', () => {
+ let Pure = new React.PureComponent();
+ expect(Pure.isReactComponent).to.deep.equal({});
+ });
+});
diff --git a/preact/compat/test/browser/cloneElement.test.js b/preact/compat/test/browser/cloneElement.test.js
new file mode 100644
index 0000000..460ef77
--- /dev/null
+++ b/preact/compat/test/browser/cloneElement.test.js
@@ -0,0 +1,96 @@
+import { createElement as preactH } from 'preact';
+import React, { createElement, render, cloneElement } from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+describe('compat cloneElement', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should clone elements', () => {
+ let element = (
+ <foo a="b" c="d">
+ a<span>b</span>
+ </foo>
+ );
+ const clone = cloneElement(element);
+ delete clone._original;
+ delete element._original;
+ expect(clone).to.eql(element);
+ });
+
+ it('should support props.children', () => {
+ let element = <foo children={<span>b</span>} />;
+ let clone = cloneElement(element);
+ delete clone._original;
+ delete element._original;
+ expect(clone).to.eql(element);
+ expect(cloneElement(clone).props.children).to.eql(element.props.children);
+ });
+
+ it('children take precedence over props.children', () => {
+ let element = (
+ <foo children={<span>c</span>}>
+ <div>b</div>
+ </foo>
+ );
+ let clone = cloneElement(element);
+ delete clone._original;
+ delete element._original;
+ expect(clone).to.eql(element);
+ expect(clone.props.children.type).to.eql('div');
+ });
+
+ it('should support children in prop argument', () => {
+ let element = <foo />;
+ let children = [<span>b</span>];
+ let clone = cloneElement(element, { children });
+ expect(clone.props.children).to.eql(children);
+ });
+
+ it('single child argument takes precedence over props.children', () => {
+ let element = <foo />;
+ let childrenA = [<span>b</span>];
+ let childrenB = [<div>c</div>];
+ let clone = cloneElement(element, { children: childrenA }, ...childrenB);
+ expect(clone.props.children).to.eql(childrenB[0]);
+ });
+
+ it('multiple children arguments take precedence over props.children', () => {
+ let element = <foo />;
+ let childrenA = [<span>b</span>];
+ let childrenB = [<div>c</div>, 'd'];
+ let clone = cloneElement(element, { children: childrenA }, ...childrenB);
+ expect(clone.props.children).to.eql(childrenB);
+ });
+
+ it('children argument takes precedence over props.children even if falsey', () => {
+ let element = <foo />;
+ let childrenA = [<span>b</span>];
+ let clone = cloneElement(element, { children: childrenA }, undefined);
+ expect(clone.children).to.eql(undefined);
+ });
+
+ it('should skip cloning on invalid element', () => {
+ let element = { foo: 42 };
+ let clone = cloneElement(element);
+ expect(clone).to.eql(element);
+ });
+
+ it('should work with jsx constructor from core', () => {
+ function Foo(props) {
+ return <div>{props.value}</div>;
+ }
+
+ let clone = cloneElement(preactH(Foo), { value: 'foo' });
+ render(clone, scratch);
+ expect(scratch.textContent).to.equal('foo');
+ });
+});
diff --git a/preact/compat/test/browser/compat.options.test.js b/preact/compat/test/browser/compat.options.test.js
new file mode 100644
index 0000000..6c52278
--- /dev/null
+++ b/preact/compat/test/browser/compat.options.test.js
@@ -0,0 +1,85 @@
+import { vnodeSpy, eventSpy } from '../../../test/_util/optionSpies';
+import React, {
+ createElement,
+ render,
+ Component,
+ createRef
+} from 'preact/compat';
+import { setupRerender } from 'preact/test-utils';
+import {
+ setupScratch,
+ teardown,
+ createEvent
+} from '../../../test/_util/helpers';
+
+describe('compat options', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ /** @type {() => void} */
+ let increment;
+
+ /** @type {import('../../src/index').PropRef<HTMLButtonElement | null>} */
+ let buttonRef;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+
+ vnodeSpy.resetHistory();
+ eventSpy.resetHistory();
+
+ buttonRef = createRef();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ class ClassApp extends Component {
+ constructor() {
+ super();
+ this.state = { count: 0 };
+ increment = () =>
+ this.setState(({ count }) => ({
+ count: count + 1
+ }));
+ }
+
+ render() {
+ return (
+ <button ref={buttonRef} onClick={increment}>
+ {this.state.count}
+ </button>
+ );
+ }
+ }
+
+ it('should call old options on mount', () => {
+ render(<ClassApp />, scratch);
+
+ expect(vnodeSpy).to.have.been.called;
+ });
+
+ it('should call old options on event and update', () => {
+ render(<ClassApp />, scratch);
+ expect(scratch.innerHTML).to.equal('<button>0</button>');
+
+ buttonRef.current.dispatchEvent(createEvent('click'));
+ rerender();
+ expect(scratch.innerHTML).to.equal('<button>1</button>');
+
+ expect(vnodeSpy).to.have.been.called;
+ expect(eventSpy).to.have.been.called;
+ });
+
+ it('should call old options on unmount', () => {
+ render(<ClassApp />, scratch);
+ render(null, scratch);
+
+ expect(vnodeSpy).to.have.been.called;
+ });
+});
diff --git a/preact/compat/test/browser/component.test.js b/preact/compat/test/browser/component.test.js
new file mode 100644
index 0000000..de78a1f
--- /dev/null
+++ b/preact/compat/test/browser/component.test.js
@@ -0,0 +1,243 @@
+import { setupRerender } from 'preact/test-utils';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import React, { createElement } from 'preact/compat';
+
+describe('components', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should have "isReactComponent" property', () => {
+ let Comp = new React.Component();
+ expect(Comp.isReactComponent).to.deep.equal({});
+ });
+
+ it('should be sane', () => {
+ let props;
+
+ class Demo extends React.Component {
+ render() {
+ props = this.props;
+ return <div id="demo">{this.props.children}</div>;
+ }
+ }
+
+ React.render(
+ <Demo a="b" c="d">
+ inner
+ </Demo>,
+ scratch
+ );
+
+ expect(props).to.exist.and.deep.equal({
+ a: 'b',
+ c: 'd',
+ children: 'inner'
+ });
+
+ expect(scratch.innerHTML).to.equal('<div id="demo">inner</div>');
+ });
+
+ it('should single out children before componentWillReceiveProps', () => {
+ let props;
+
+ class Child extends React.Component {
+ componentWillReceiveProps(newProps) {
+ props = newProps;
+ }
+ render() {
+ return this.props.children;
+ }
+ }
+
+ class Parent extends React.Component {
+ render() {
+ return <Child>second</Child>;
+ }
+ }
+
+ let a = React.render(<Parent />, scratch);
+ a.forceUpdate();
+ rerender();
+
+ expect(props).to.exist.and.deep.equal({
+ children: 'second'
+ });
+ });
+
+ describe('UNSAFE_* lifecycle methods', () => {
+ it('should support UNSAFE_componentWillMount', () => {
+ let spy = sinon.spy();
+
+ class Foo extends React.Component {
+ // eslint-disable-next-line camelcase
+ UNSAFE_componentWillMount() {
+ spy();
+ }
+
+ render() {
+ return <h1>foo</h1>;
+ }
+ }
+
+ React.render(<Foo />, scratch);
+
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should support UNSAFE_componentWillMount #2', () => {
+ let spy = sinon.spy();
+
+ class Foo extends React.Component {
+ render() {
+ return <h1>foo</h1>;
+ }
+ }
+
+ Object.defineProperty(Foo.prototype, 'UNSAFE_componentWillMount', {
+ value: spy
+ });
+
+ React.render(<Foo />, scratch);
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should support UNSAFE_componentWillReceiveProps', () => {
+ let spy = sinon.spy();
+
+ class Foo extends React.Component {
+ // eslint-disable-next-line camelcase
+ UNSAFE_componentWillReceiveProps() {
+ spy();
+ }
+
+ render() {
+ return <h1>foo</h1>;
+ }
+ }
+
+ React.render(<Foo />, scratch);
+ // Trigger an update
+ React.render(<Foo />, scratch);
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should support UNSAFE_componentWillReceiveProps #2', () => {
+ let spy = sinon.spy();
+
+ class Foo extends React.Component {
+ render() {
+ return <h1>foo</h1>;
+ }
+ }
+
+ Object.defineProperty(Foo.prototype, 'UNSAFE_componentWillReceiveProps', {
+ value: spy
+ });
+
+ React.render(<Foo />, scratch);
+ // Trigger an update
+ React.render(<Foo />, scratch);
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should support UNSAFE_componentWillUpdate', () => {
+ let spy = sinon.spy();
+
+ class Foo extends React.Component {
+ // eslint-disable-next-line camelcase
+ UNSAFE_componentWillUpdate() {
+ spy();
+ }
+
+ render() {
+ return <h1>foo</h1>;
+ }
+ }
+
+ React.render(<Foo />, scratch);
+ // Trigger an update
+ React.render(<Foo />, scratch);
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should support UNSAFE_componentWillUpdate #2', () => {
+ let spy = sinon.spy();
+
+ class Foo extends React.Component {
+ render() {
+ return <h1>foo</h1>;
+ }
+ }
+
+ Object.defineProperty(Foo.prototype, 'UNSAFE_componentWillUpdate', {
+ value: spy
+ });
+
+ React.render(<Foo />, scratch);
+ // Trigger an update
+ React.render(<Foo />, scratch);
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should alias UNSAFE_* method to non-prefixed variant', () => {
+ let inst;
+ class Foo extends React.Component {
+ // eslint-disable-next-line camelcase
+ UNSAFE_componentWillMount() {}
+ // eslint-disable-next-line camelcase
+ UNSAFE_componentWillReceiveProps() {}
+ // eslint-disable-next-line camelcase
+ UNSAFE_componentWillUpdate() {}
+ render() {
+ inst = this;
+ return <div>foo</div>;
+ }
+ }
+
+ React.render(<Foo />, scratch);
+
+ expect(inst.UNSAFE_componentWillMount).to.equal(inst.componentWillMount);
+ expect(inst.UNSAFE_componentWillReceiveProps).to.equal(
+ inst.UNSAFE_componentWillReceiveProps
+ );
+ expect(inst.UNSAFE_componentWillUpdate).to.equal(
+ inst.UNSAFE_componentWillUpdate
+ );
+ });
+
+ it('should call UNSAFE_* methods through Suspense with wrapper component #2525', () => {
+ class Page extends React.Component {
+ UNSAFE_componentWillMount() {}
+ render() {
+ return <h1>Example</h1>;
+ }
+ }
+
+ const Wrapper = () => <Page />;
+
+ sinon.spy(Page.prototype, 'UNSAFE_componentWillMount');
+
+ React.render(
+ <React.Suspense fallback={<div>fallback</div>}>
+ <Wrapper />
+ </React.Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal('<h1>Example</h1>');
+ expect(Page.prototype.UNSAFE_componentWillMount).to.have.been.called;
+ });
+ });
+});
diff --git a/preact/compat/test/browser/createElement.test.js b/preact/compat/test/browser/createElement.test.js
new file mode 100644
index 0000000..8a39b3f
--- /dev/null
+++ b/preact/compat/test/browser/createElement.test.js
@@ -0,0 +1,49 @@
+import React, { createElement, render } from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { getSymbol } from './testUtils';
+
+describe('compat createElement()', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should normalize vnodes', () => {
+ let vnode = (
+ <div a="b">
+ <a>t</a>
+ </div>
+ );
+
+ const $$typeof = getSymbol('react.element', 0xeac7);
+ expect(vnode).to.have.property('$$typeof', $$typeof);
+ expect(vnode).to.have.property('type', 'div');
+ expect(vnode)
+ .to.have.property('props')
+ .that.is.an('object');
+ expect(vnode.props).to.have.property('children');
+ expect(vnode.props.children).to.have.property('$$typeof', $$typeof);
+ expect(vnode.props.children).to.have.property('type', 'a');
+ expect(vnode.props.children)
+ .to.have.property('props')
+ .that.is.an('object');
+ expect(vnode.props.children.props).to.eql({ children: 't' });
+ });
+
+ it('should not normalize text nodes', () => {
+ String.prototype.capFLetter = function() {
+ return this.charAt(0).toUpperCase() + this.slice(1);
+ };
+ let vnode = <div>hi buddy</div>;
+
+ render(vnode, scratch);
+
+ expect(scratch.innerHTML).to.equal('<div>hi buddy</div>');
+ });
+});
diff --git a/preact/compat/test/browser/createFactory.test.js b/preact/compat/test/browser/createFactory.test.js
new file mode 100644
index 0000000..8d4f929
--- /dev/null
+++ b/preact/compat/test/browser/createFactory.test.js
@@ -0,0 +1,26 @@
+import React, { render, createElement, createFactory } from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+describe('createFactory', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should create a DOM element', () => {
+ render(createFactory('span')({ class: 'foo' }, '1'), scratch);
+ expect(scratch.innerHTML).to.equal('<span class="foo">1</span>');
+ });
+
+ it('should create a component', () => {
+ const Foo = ({ id, children }) => <div id={id}>foo {children}</div>;
+ render(createFactory(Foo)({ id: 'value' }, 'bar'), scratch);
+ expect(scratch.innerHTML).to.equal('<div id="value">foo bar</div>');
+ });
+});
diff --git a/preact/compat/test/browser/events.test.js b/preact/compat/test/browser/events.test.js
new file mode 100644
index 0000000..40e4ccc
--- /dev/null
+++ b/preact/compat/test/browser/events.test.js
@@ -0,0 +1,278 @@
+import { render } from 'preact';
+import {
+ setupScratch,
+ teardown,
+ createEvent
+} from '../../../test/_util/helpers';
+
+import React, { createElement } from 'preact/compat';
+
+describe('preact/compat events', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+ let proto;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+
+ proto = Element.prototype;
+ sinon.spy(proto, 'addEventListener');
+ sinon.spy(proto, 'removeEventListener');
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+
+ proto.addEventListener.restore();
+ proto.removeEventListener.restore();
+ });
+
+ it('should patch events', () => {
+ let spy = sinon.spy(event => {
+ // Calling ev.preventDefault() outside of an event handler
+ // does nothing in IE11. So we move these asserts inside
+ // the event handler. We ensure that it's called once
+ // in another assertion
+ expect(event.isDefaultPrevented()).to.be.false;
+ event.preventDefault();
+ expect(event.isDefaultPrevented()).to.be.true;
+
+ expect(event.isPropagationStopped()).to.be.false;
+ event.stopPropagation();
+ expect(event.isPropagationStopped()).to.be.true;
+ });
+
+ render(<div onClick={spy} />, scratch);
+ scratch.firstChild.click();
+
+ expect(spy).to.be.calledOnce;
+ const event = spy.args[0][0];
+ expect(event).to.haveOwnProperty('persist');
+ expect(event).to.haveOwnProperty('nativeEvent');
+ expect(event).to.haveOwnProperty('isDefaultPrevented');
+ expect(event).to.haveOwnProperty('isPropagationStopped');
+ expect(typeof event.persist).to.equal('function');
+ expect(typeof event.isDefaultPrevented).to.equal('function');
+ expect(typeof event.isPropagationStopped).to.equal('function');
+
+ expect(() => event.persist()).to.not.throw();
+ expect(() => event.isDefaultPrevented()).to.not.throw();
+ expect(() => event.isPropagationStopped()).to.not.throw();
+ });
+
+ it('should normalize ondoubleclick event', () => {
+ let vnode = <div onDoubleClick={() => null} />;
+ expect(vnode.props).to.haveOwnProperty('ondblclick');
+ });
+
+ it('should normalize onChange for textarea', () => {
+ let vnode = <textarea onChange={() => null} />;
+ expect(vnode.props).to.haveOwnProperty('oninput');
+ expect(vnode.props).to.not.haveOwnProperty('onchange');
+
+ vnode = <textarea oninput={() => null} onChange={() => null} />;
+ expect(vnode.props).to.haveOwnProperty('oninput');
+ expect(vnode.props).to.not.haveOwnProperty('onchange');
+ });
+
+ it('should normalize onChange for range, except in IE11', () => {
+ // NOTE: we don't normalize `onchange` for range inputs in IE11.
+ const eventType = /Trident\//.test(navigator.userAgent)
+ ? 'change'
+ : 'input';
+
+ render(<input type="range" onChange={() => null} />, scratch);
+ expect(proto.addEventListener).to.have.been.calledOnce;
+ expect(proto.addEventListener).to.have.been.calledWithExactly(
+ eventType,
+ sinon.match.func,
+ false
+ );
+ });
+
+ it('should normalize onChange for range, except in IE11, including when IE11 has Symbol polyfill', () => {
+ // NOTE: we don't normalize `onchange` for range inputs in IE11.
+ // This test mimics a specific scenario when a Symbol polyfill may
+ // be present, in which case onChange should still not be normalized
+
+ const isIE11 = /Trident\//.test(navigator.userAgent);
+ const eventType = isIE11 ? 'change' : 'input';
+
+ if (isIE11) {
+ window.Symbol = () => 'mockSymbolPolyfill';
+ }
+ sinon.spy(window, 'Symbol');
+
+ render(<input type="range" onChange={() => null} />, scratch);
+ expect(window.Symbol).to.have.been.calledOnce;
+ expect(proto.addEventListener).to.have.been.calledOnce;
+ expect(proto.addEventListener).to.have.been.calledWithExactly(
+ eventType,
+ sinon.match.func,
+ false
+ );
+
+ window.Symbol.restore();
+ if (isIE11) {
+ window.Symbol = undefined;
+ }
+ });
+
+ it('should support onAnimationEnd', () => {
+ const func = sinon.spy(() => {});
+ render(<div onAnimationEnd={func} />, scratch);
+
+ expect(
+ proto.addEventListener
+ ).to.have.been.calledOnce.and.to.have.been.calledWithExactly(
+ 'animationend',
+ sinon.match.func,
+ false
+ );
+
+ scratch.firstChild.dispatchEvent(createEvent('animationend'));
+ expect(func).to.have.been.calledOnce;
+
+ render(<div />, scratch);
+ expect(
+ proto.removeEventListener
+ ).to.have.been.calledOnce.and.to.have.been.calledWithExactly(
+ 'animationend',
+ sinon.match.func,
+ false
+ );
+ });
+
+ it('should support onTouch* events', () => {
+ const onTouchStart = sinon.spy();
+ const onTouchEnd = sinon.spy();
+ const onTouchMove = sinon.spy();
+ const onTouchCancel = sinon.spy();
+
+ render(
+ <div
+ onTouchStart={onTouchStart}
+ onTouchEnd={onTouchEnd}
+ onTouchMove={onTouchMove}
+ onTouchCancel={onTouchCancel}
+ />,
+ scratch
+ );
+
+ expect(proto.addEventListener.args.length).to.eql(4);
+ expect(proto.addEventListener.args[0].length).to.eql(3);
+ expect(proto.addEventListener.args[0][0]).to.eql('touchstart');
+ expect(proto.addEventListener.args[0][2]).to.eql(false);
+ expect(proto.addEventListener.args[1].length).to.eql(3);
+ expect(proto.addEventListener.args[1][0]).to.eql('touchend');
+ expect(proto.addEventListener.args[1][2]).to.eql(false);
+ expect(proto.addEventListener.args[2].length).to.eql(3);
+ expect(proto.addEventListener.args[2][0]).to.eql('touchmove');
+ expect(proto.addEventListener.args[2][2]).to.eql(false);
+ expect(proto.addEventListener.args[3].length).to.eql(3);
+ expect(proto.addEventListener.args[3][0]).to.eql('touchcancel');
+ expect(proto.addEventListener.args[3][2]).to.eql(false);
+
+ scratch.firstChild.dispatchEvent(createEvent('touchstart'));
+ expect(onTouchStart).to.have.been.calledOnce;
+
+ scratch.firstChild.dispatchEvent(createEvent('touchmove'));
+ expect(onTouchMove).to.have.been.calledOnce;
+
+ scratch.firstChild.dispatchEvent(createEvent('touchend'));
+ expect(onTouchEnd).to.have.been.calledOnce;
+
+ scratch.firstChild.dispatchEvent(createEvent('touchcancel'));
+ expect(onTouchCancel).to.have.been.calledOnce;
+
+ render(<div />, scratch);
+
+ expect(proto.removeEventListener.args.length).to.eql(4);
+ expect(proto.removeEventListener.args[0].length).to.eql(3);
+ expect(proto.removeEventListener.args[0][0]).to.eql('touchstart');
+ expect(proto.removeEventListener.args[0][2]).to.eql(false);
+ expect(proto.removeEventListener.args[1].length).to.eql(3);
+ expect(proto.removeEventListener.args[1][0]).to.eql('touchend');
+ expect(proto.removeEventListener.args[1][2]).to.eql(false);
+ expect(proto.removeEventListener.args[2].length).to.eql(3);
+ expect(proto.removeEventListener.args[2][0]).to.eql('touchmove');
+ expect(proto.removeEventListener.args[2][2]).to.eql(false);
+ expect(proto.removeEventListener.args[3].length).to.eql(3);
+ expect(proto.removeEventListener.args[3][0]).to.eql('touchcancel');
+ expect(proto.removeEventListener.args[3][2]).to.eql(false);
+ });
+
+ it('should support onTransitionEnd', () => {
+ const func = sinon.spy(() => {});
+ render(<div onTransitionEnd={func} />, scratch);
+
+ expect(
+ proto.addEventListener
+ ).to.have.been.calledOnce.and.to.have.been.calledWithExactly(
+ 'transitionend',
+ sinon.match.func,
+ false
+ );
+
+ scratch.firstChild.dispatchEvent(createEvent('transitionend'));
+ expect(func).to.have.been.calledOnce;
+
+ render(<div />, scratch);
+ expect(
+ proto.removeEventListener
+ ).to.have.been.calledOnce.and.to.have.been.calledWithExactly(
+ 'transitionend',
+ sinon.match.func,
+ false
+ );
+ });
+
+ it('should normalize onChange', () => {
+ let props = { onChange() {} };
+
+ function expectToBeNormalized(vnode, desc) {
+ expect(vnode, desc)
+ .to.have.property('props')
+ .with.all.keys(['oninput'].concat(vnode.props.type ? 'type' : []))
+ .and.property('oninput')
+ .that.is.a('function');
+ }
+
+ function expectToBeUnmodified(vnode, desc) {
+ expect(vnode, desc)
+ .to.have.property('props')
+ .eql({
+ ...props,
+ ...(vnode.props.type ? { type: vnode.props.type } : {})
+ });
+ }
+
+ expectToBeUnmodified(<div {...props} />, '<div>');
+ expectToBeUnmodified(
+ <input {...props} type="radio" />,
+ '<input type="radio">'
+ );
+ expectToBeUnmodified(
+ <input {...props} type="checkbox" />,
+ '<input type="checkbox">'
+ );
+ expectToBeUnmodified(
+ <input {...props} type="file" />,
+ '<input type="file">'
+ );
+
+ expectToBeNormalized(<textarea {...props} />, '<textarea>');
+ expectToBeNormalized(<input {...props} />, '<input>');
+ expectToBeNormalized(
+ <input {...props} type="text" />,
+ '<input type="text">'
+ );
+ });
+
+ it('should normalize beforeinput event listener', () => {
+ let spy = sinon.spy();
+ render(<input onBeforeInput={spy} />, scratch);
+ scratch.firstChild.dispatchEvent(createEvent('beforeinput'));
+ expect(spy).to.be.calledOnce;
+ });
+});
diff --git a/preact/compat/test/browser/exports.test.js b/preact/compat/test/browser/exports.test.js
new file mode 100644
index 0000000..f4a3f26
--- /dev/null
+++ b/preact/compat/test/browser/exports.test.js
@@ -0,0 +1,85 @@
+import Compat from 'preact/compat';
+// eslint-disable-next-line no-duplicate-imports
+import * as Named from 'preact/compat';
+
+describe('compat exports', () => {
+ it('should have a default export', () => {
+ expect(Compat.createElement).to.be.a('function');
+ expect(Compat.Component).to.be.a('function');
+ expect(Compat.Fragment).to.exist;
+ expect(Compat.render).to.be.a('function');
+ expect(Compat.hydrate).to.be.a('function');
+ expect(Compat.cloneElement).to.be.a('function');
+ expect(Compat.createContext).to.be.a('function');
+ expect(Compat.createRef).to.be.a('function');
+
+ // Hooks
+ expect(Compat.useState).to.be.a('function');
+ expect(Compat.useReducer).to.be.a('function');
+ expect(Compat.useEffect).to.be.a('function');
+ expect(Compat.useLayoutEffect).to.be.a('function');
+ expect(Compat.useRef).to.be.a('function');
+ expect(Compat.useMemo).to.be.a('function');
+ expect(Compat.useCallback).to.be.a('function');
+ expect(Compat.useContext).to.be.a('function');
+
+ // Suspense
+ expect(Compat.Suspense).to.be.a('function');
+ expect(Compat.lazy).to.be.a('function');
+
+ // Compat specific
+ expect(Compat.PureComponent).to.exist.and.be.a('function');
+ expect(Compat.createPortal).to.exist.and.be.a('function');
+ expect(Compat.createFactory).to.exist.and.be.a('function');
+ expect(Compat.isValidElement).to.exist.and.be.a('function');
+ expect(Compat.findDOMNode).to.exist.and.be.a('function');
+ expect(Compat.Children.map).to.exist.and.be.a('function');
+ expect(Compat.Children.forEach).to.exist.and.be.a('function');
+ expect(Compat.Children.count).to.exist.and.be.a('function');
+ expect(Compat.Children.toArray).to.exist.and.be.a('function');
+ expect(Compat.Children.only).to.exist.and.be.a('function');
+ expect(Compat.unmountComponentAtNode).to.exist.and.be.a('function');
+ expect(Compat.unstable_batchedUpdates).to.exist.and.be.a('function');
+ expect(Compat.version).to.exist.and.be.a('string');
+ });
+
+ it('should have named exports', () => {
+ expect(Named.createElement).to.be.a('function');
+ expect(Named.Component).to.be.a('function');
+ expect(Named.Fragment).to.exist;
+ expect(Named.render).to.be.a('function');
+ expect(Named.hydrate).to.be.a('function');
+ expect(Named.cloneElement).to.be.a('function');
+ expect(Named.createContext).to.be.a('function');
+ expect(Named.createRef).to.be.a('function');
+
+ // Hooks
+ expect(Named.useState).to.be.a('function');
+ expect(Named.useReducer).to.be.a('function');
+ expect(Named.useEffect).to.be.a('function');
+ expect(Named.useLayoutEffect).to.be.a('function');
+ expect(Named.useRef).to.be.a('function');
+ expect(Named.useMemo).to.be.a('function');
+ expect(Named.useCallback).to.be.a('function');
+ expect(Named.useContext).to.be.a('function');
+
+ // Suspense
+ expect(Named.Suspense).to.be.a('function');
+ expect(Named.lazy).to.be.a('function');
+
+ // Compat specific
+ expect(Named.PureComponent).to.exist.and.be.a('function');
+ expect(Named.createPortal).to.exist.and.be.a('function');
+ expect(Named.createFactory).to.exist.and.be.a('function');
+ expect(Named.isValidElement).to.exist.and.be.a('function');
+ expect(Named.findDOMNode).to.exist.and.be.a('function');
+ expect(Named.Children.map).to.exist.and.be.a('function');
+ expect(Named.Children.forEach).to.exist.and.be.a('function');
+ expect(Named.Children.count).to.exist.and.be.a('function');
+ expect(Named.Children.toArray).to.exist.and.be.a('function');
+ expect(Named.Children.only).to.exist.and.be.a('function');
+ expect(Named.unmountComponentAtNode).to.exist.and.be.a('function');
+ expect(Named.unstable_batchedUpdates).to.exist.and.be.a('function');
+ expect(Named.version).to.exist.and.be.a('string');
+ });
+});
diff --git a/preact/compat/test/browser/findDOMNode.test.js b/preact/compat/test/browser/findDOMNode.test.js
new file mode 100644
index 0000000..0812ed9
--- /dev/null
+++ b/preact/compat/test/browser/findDOMNode.test.js
@@ -0,0 +1,51 @@
+import React, { createElement, findDOMNode } from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+describe('findDOMNode()', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ class Helper extends React.Component {
+ render({ something }) {
+ if (something == null) return null;
+ if (something === false) return null;
+ return <div />;
+ }
+ }
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it.skip('should return DOM Node if render is not false nor null', () => {
+ const helper = React.render(<Helper />, scratch);
+ expect(findDOMNode(helper)).to.be.instanceof(Node);
+ });
+
+ it('should return null if given null', () => {
+ expect(findDOMNode(null)).to.be.null;
+ });
+
+ it('should return a regular DOM Element if given a regular DOM Element', () => {
+ let scratch = document.createElement('div');
+ expect(findDOMNode(scratch)).to.equalNode(scratch);
+ });
+
+ // NOTE: React.render() returning false or null has the component pointing
+ // to no DOM Node, in contrast, Preact always render an empty Text DOM Node.
+ it('should return null if render returns false', () => {
+ const helper = React.render(<Helper something={false} />, scratch);
+ expect(findDOMNode(helper)).to.be.null;
+ });
+
+ // NOTE: React.render() returning false or null has the component pointing
+ // to no DOM Node, in contrast, Preact always render an empty Text DOM Node.
+ it('should return null if render returns null', () => {
+ const helper = React.render(<Helper something={null} />, scratch);
+ expect(findDOMNode(helper)).to.be.null;
+ });
+});
diff --git a/preact/compat/test/browser/forwardRef.test.js b/preact/compat/test/browser/forwardRef.test.js
new file mode 100644
index 0000000..68f9219
--- /dev/null
+++ b/preact/compat/test/browser/forwardRef.test.js
@@ -0,0 +1,460 @@
+import React, {
+ createElement,
+ render,
+ createRef,
+ forwardRef,
+ hydrate,
+ memo,
+ useState,
+ useRef,
+ useImperativeHandle,
+ createPortal
+} from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { setupRerender, act } from 'preact/test-utils';
+import { getSymbol } from './testUtils';
+
+/* eslint-disable react/jsx-boolean-value, react/display-name, prefer-arrow-callback */
+
+describe('forwardRef', () => {
+ /** @type {HTMLDivElement} */
+ let scratch, rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should have isReactComponent flag', () => {
+ let App = forwardRef((_, ref) => <div ref={ref}>foo</div>);
+ expect(App.prototype.isReactComponent).to.equal(true);
+ });
+
+ it('should have $$typeof property', () => {
+ let App = forwardRef((_, ref) => <div ref={ref}>foo</div>);
+ const expected = getSymbol('react.forward_ref', 0xf47);
+ expect(App.$$typeof).to.equal(expected);
+ });
+
+ it('should pass ref with createRef', () => {
+ let App = forwardRef((_, ref) => <div ref={ref}>foo</div>);
+ let ref = createRef();
+ render(<App ref={ref} />, scratch);
+
+ expect(ref.current).to.equalNode(scratch.firstChild);
+ });
+
+ it('should share the same ref reference', () => {
+ let passedRef;
+ let App = forwardRef((_, ref) => {
+ passedRef = ref;
+ return <div ref={ref}>foo</div>;
+ });
+
+ let ref = createRef();
+ render(<App ref={ref} />, scratch);
+
+ expect(ref).to.equal(passedRef);
+ });
+
+ it('should pass ref with a callback', () => {
+ let App = forwardRef((_, ref) => (
+ <div>
+ <span ref={ref}>foo</span>
+ </div>
+ ));
+ let ref;
+ render(<App ref={x => (ref = x)} />, scratch);
+
+ expect(ref).to.equalNode(scratch.firstChild.firstChild);
+ });
+
+ it('should forward props', () => {
+ let spy = sinon.spy();
+ let App = forwardRef(spy);
+ render(<App foo="bar" />, scratch);
+
+ expect(spy).to.be.calledWithMatch({ foo: 'bar' });
+ });
+
+ it('should support nesting', () => {
+ let passedRef;
+ let Inner = forwardRef((_, ref) => {
+ passedRef = ref;
+ return <div ref={ref}>inner</div>;
+ });
+ let App = forwardRef((_, ref) => <Inner ref={ref} />);
+
+ let ref = createRef();
+ render(<App ref={ref} />, scratch);
+
+ expect(ref).to.equal(passedRef);
+ });
+
+ it('should forward null on unmount', () => {
+ let passedRef;
+ let App = forwardRef((_, ref) => {
+ passedRef = ref;
+ return <div ref={ref}>foo</div>;
+ });
+
+ let ref = createRef();
+ render(<App ref={ref} />, scratch);
+ render(null, scratch);
+
+ expect(passedRef.current).to.equal(null);
+ });
+
+ it('should be able to render and hydrate forwardRef components', () => {
+ const Foo = ({ label, forwardedRef }) => (
+ <div ref={forwardedRef}>{label}</div>
+ );
+ const App = forwardRef((props, ref) => (
+ <Foo {...props} forwardedRef={ref} />
+ ));
+
+ const ref = createRef();
+ const markup = <App ref={ref} label="Hi" />;
+
+ const element = document.createElement('div');
+ element.innerHTML = '<div>Hi</div>';
+ expect(element.textContent).to.equal('Hi');
+ expect(ref.current == null).to.equal(true);
+
+ hydrate(markup, element);
+ expect(element.textContent).to.equal('Hi');
+ expect(ref.current.tagName).to.equal('DIV');
+ });
+
+ it('should update refs when switching between children', () => {
+ function Foo({ forwardedRef, setRefOnDiv }) {
+ return (
+ <section>
+ <div ref={setRefOnDiv ? forwardedRef : null}>First</div>
+ <span ref={setRefOnDiv ? null : forwardedRef}>Second</span>
+ </section>
+ );
+ }
+
+ const App = forwardRef((props, ref) => (
+ <Foo {...props} forwardedRef={ref} />
+ ));
+
+ const ref = createRef();
+
+ render(<App ref={ref} setRefOnDiv={true} />, scratch);
+ expect(ref.current.nodeName).to.equal('DIV');
+
+ render(<App ref={ref} setRefOnDiv={false} />, scratch);
+ expect(ref.current.nodeName).to.equal('SPAN');
+ });
+
+ it('should support rendering null', () => {
+ const App = forwardRef(() => null);
+ const ref = createRef();
+
+ render(<App ref={ref} />, scratch);
+ expect(ref.current == null).to.equal(true);
+ });
+
+ it('should support rendering null for multiple children', () => {
+ const Foo = forwardRef(() => null);
+ const ref = createRef();
+
+ render(
+ <div>
+ <div />
+ <Foo ref={ref} />
+ <div />
+ </div>,
+ scratch
+ );
+ expect(ref.current == null).to.equal(true);
+ });
+
+ it('should support useImperativeHandle', () => {
+ let setValue;
+ const Foo = forwardRef((props, ref) => {
+ const result = useState('');
+ setValue = result[1];
+
+ useImperativeHandle(
+ ref,
+ () => ({
+ getValue: () => result[0]
+ }),
+ [result[0]]
+ );
+
+ return <input ref={ref} value={result[0]} />;
+ });
+
+ const ref = createRef();
+ render(<Foo ref={ref} />, scratch);
+
+ expect(typeof ref.current.getValue).to.equal('function');
+ expect(ref.current.getValue()).to.equal('');
+
+ setValue('x');
+ rerender();
+ expect(typeof ref.current.getValue).to.equal('function');
+ expect(ref.current.getValue()).to.equal('x');
+ });
+
+ it('should not bailout if forwardRef is not wrapped in memo', () => {
+ const Component = props => <div {...props} />;
+
+ let renderCount = 0;
+
+ const App = forwardRef((props, ref) => {
+ renderCount++;
+ return <Component {...props} forwardedRef={ref} />;
+ });
+
+ const ref = createRef();
+
+ render(<App ref={ref} optional="foo" />, scratch);
+ expect(renderCount).to.equal(1);
+
+ render(<App ref={ref} optional="foo" />, scratch);
+ expect(renderCount).to.equal(2);
+ });
+
+ it('should bailout if forwardRef is wrapped in memo', () => {
+ const Component = props => <div ref={props.forwardedRef} />;
+
+ let renderCount = 0;
+
+ const App = memo(
+ forwardRef((props, ref) => {
+ renderCount++;
+ return <Component {...props} forwardedRef={ref} />;
+ })
+ );
+
+ const ref = createRef();
+
+ render(<App ref={ref} optional="foo" />, scratch);
+ expect(renderCount).to.equal(1);
+
+ expect(ref.current.nodeName).to.equal('DIV');
+
+ render(<App ref={ref} optional="foo" />, scratch);
+ expect(renderCount).to.equal(1);
+
+ const differentRef = createRef();
+
+ render(<App ref={differentRef} optional="foo" />, scratch);
+ expect(renderCount).to.equal(2);
+
+ expect(ref.current == null).to.equal(true);
+ expect(differentRef.current.nodeName).to.equal('DIV');
+
+ render(<App ref={ref} optional="bar" />, scratch);
+ expect(renderCount).to.equal(3);
+ });
+
+ it('should bailout if forwardRef is wrapped in memo using function refs', () => {
+ const Component = props => <div ref={props.forwardedRef} />;
+
+ let renderCount = 0;
+
+ const App = memo(
+ forwardRef((props, ref) => {
+ renderCount++;
+ return <Component {...props} forwardedRef={ref} />;
+ })
+ );
+
+ const ref = sinon.spy();
+
+ render(<App ref={ref} optional="foo" />, scratch);
+ expect(renderCount).to.equal(1);
+
+ expect(ref).to.have.been.called;
+
+ ref.resetHistory();
+ render(<App ref={ref} optional="foo" />, scratch);
+ expect(renderCount).to.equal(1);
+
+ const differentRef = sinon.spy();
+
+ render(<App ref={differentRef} optional="foo" />, scratch);
+ expect(renderCount).to.equal(2);
+
+ expect(ref).to.have.been.calledWith(null);
+ expect(differentRef).to.have.been.called;
+
+ differentRef.resetHistory();
+ render(<App ref={ref} optional="bar" />, scratch);
+ expect(renderCount).to.equal(3);
+ });
+
+ it('should pass ref through memo() with custom comparer function', () => {
+ const Foo = props => <div ref={props.forwardedRef} />;
+
+ let renderCount = 0;
+
+ const App = memo(
+ forwardRef((props, ref) => {
+ renderCount++;
+ return <Foo {...props} forwardedRef={ref} />;
+ }),
+ (o, p) => o.a === p.a && o.b === p.b
+ );
+
+ const ref = createRef();
+
+ render(<App ref={ref} a="0" b="0" c="1" />, scratch);
+ expect(renderCount).to.equal(1);
+
+ expect(ref.current.nodeName).to.equal('DIV');
+
+ // Changing either a or b rerenders
+ render(<App ref={ref} a="0" b="1" c="1" />, scratch);
+ expect(renderCount).to.equal(2);
+
+ // Changing c doesn't rerender
+ render(<App ref={ref} a="0" b="1" c="2" />, scratch);
+ expect(renderCount).to.equal(2);
+
+ const App2 = memo(App, (o, p) => o.a === p.a && o.c === p.c);
+
+ render(<App2 ref={ref} a="0" b="0" c="0" />, scratch);
+ expect(renderCount).to.equal(3);
+
+ // Changing just b no longer updates
+ render(<App2 ref={ref} a="0" b="1" c="0" />, scratch);
+ expect(renderCount).to.equal(3);
+
+ // Changing just a and c updates
+ render(<App2 ref={ref} a="2" b="2" c="2" />, scratch);
+ expect(renderCount).to.equal(4);
+
+ // Changing just c does not update
+ render(<App2 ref={ref} a="2" b="2" c="3" />, scratch);
+ expect(renderCount).to.equal(4);
+
+ // Changing ref still rerenders
+ const differentRef = createRef();
+
+ render(<App2 ref={differentRef} a="2" b="2" c="3" />, scratch);
+ expect(renderCount).to.equal(5);
+
+ expect(ref.current == null).to.equal(true);
+ expect(differentRef.current.nodeName).to.equal('DIV');
+ });
+
+ it('calls ref when this is a function.', () => {
+ const spy = sinon.spy();
+ const Bar = forwardRef((props, ref) => {
+ useImperativeHandle(ref, () => ({ foo: 100 }));
+ return null;
+ });
+
+ render(<Bar ref={spy} />, scratch);
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWithExactly({ foo: 100 });
+ });
+
+ it('stale ref missing with passed useRef', () => {
+ let _ref = null;
+ let _set = null;
+ const Inner = forwardRef((props, ref) => {
+ const _hook = useState(null);
+ _ref = ref;
+ _set = _hook[1];
+ return <div ref={ref} />;
+ });
+
+ const Parent = () => {
+ const parentRef = useRef(null);
+ return <Inner ref={parentRef}>child</Inner>;
+ };
+
+ act(() => {
+ render(<Parent />, scratch);
+ });
+
+ expect(_ref.current).to.equal(scratch.firstChild);
+
+ act(() => {
+ _set(1);
+ rerender();
+ });
+
+ expect(_ref.current).to.equal(scratch.firstChild);
+ });
+
+ it('should forward at diff time instead vnode-creation.', () => {
+ let ref, forceTransition, forceOpen;
+
+ const Portal = ({ children, open }) =>
+ open ? createPortal(children, scratch) : null;
+
+ const Wrapper = forwardRef((_props, ref) => <div ref={ref}>Wrapper</div>);
+ const Transition = ({ children }) => {
+ const state = useState(0);
+ forceTransition = state[1];
+ expect(children.ref).to.not.be.undefined;
+ if (state[0] === 0) expect(children.props.ref).to.be.undefined;
+ return children;
+ };
+
+ const App = () => {
+ const openState = useState(false);
+ forceOpen = openState[1];
+ ref = useRef();
+ return (
+ <Portal open={openState[0]}>
+ <Transition>
+ <Wrapper ref={ref} />
+ </Transition>
+ </Portal>
+ );
+ };
+
+ render(<App />, scratch);
+
+ act(() => {
+ forceOpen(true);
+ });
+
+ expect(ref.current.innerHTML).to.equal('Wrapper');
+
+ act(() => {
+ forceTransition(1);
+ });
+
+ expect(ref.current.innerHTML).to.equal('Wrapper');
+ });
+
+ // Issue #2566
+ it('should pass null as ref when no ref is present', () => {
+ let actual;
+ const App = forwardRef((_, ref) => {
+ actual = ref;
+ return <div />;
+ });
+
+ render(<App />, scratch);
+ expect(actual).to.equal(null);
+ });
+
+ // Issue #2599
+ it('should not crash when explicitly passing null', () => {
+ let actual;
+ const App = forwardRef((_, ref) => {
+ actual = ref;
+ return <div />;
+ });
+
+ // eslint-disable-next-line new-cap
+ render(App({}, null), scratch);
+ expect(actual).to.equal(null);
+ });
+});
diff --git a/preact/compat/test/browser/hydrate.test.js b/preact/compat/test/browser/hydrate.test.js
new file mode 100644
index 0000000..e42cdb7
--- /dev/null
+++ b/preact/compat/test/browser/hydrate.test.js
@@ -0,0 +1,34 @@
+import React, { hydrate } from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+describe('compat hydrate', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should render react-style jsx', () => {
+ const input = document.createElement('input');
+ scratch.appendChild(input);
+ input.focus();
+ expect(document.activeElement).to.equal(input);
+
+ hydrate(<input />, scratch);
+ expect(document.activeElement).to.equal(input);
+ });
+
+ it('should call the callback', () => {
+ scratch.innerHTML = '<div></div>';
+
+ let spy = sinon.spy();
+ hydrate(<div />, scratch, spy);
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWithExactly();
+ });
+});
diff --git a/preact/compat/test/browser/isValidElement.test.js b/preact/compat/test/browser/isValidElement.test.js
new file mode 100644
index 0000000..0fa34ef
--- /dev/null
+++ b/preact/compat/test/browser/isValidElement.test.js
@@ -0,0 +1,22 @@
+import { createElement as preactCreateElement } from 'preact';
+import React, { isValidElement } from 'preact/compat';
+
+describe('isValidElement', () => {
+ it('should check return false for invalid arguments', () => {
+ expect(isValidElement(null)).to.equal(false);
+ expect(isValidElement(false)).to.equal(false);
+ expect(isValidElement(true)).to.equal(false);
+ expect(isValidElement('foo')).to.equal(false);
+ expect(isValidElement(123)).to.equal(false);
+ expect(isValidElement([])).to.equal(false);
+ expect(isValidElement({})).to.equal(false);
+ });
+
+ it('should detect a preact vnode', () => {
+ expect(isValidElement(preactCreateElement('div'))).to.equal(true);
+ });
+
+ it('should detect a compat vnode', () => {
+ expect(isValidElement(React.createElement('div'))).to.equal(true);
+ });
+});
diff --git a/preact/compat/test/browser/memo.test.js b/preact/compat/test/browser/memo.test.js
new file mode 100644
index 0000000..c1e155c
--- /dev/null
+++ b/preact/compat/test/browser/memo.test.js
@@ -0,0 +1,234 @@
+import { setupRerender } from 'preact/test-utils';
+import {
+ createEvent,
+ setupScratch,
+ teardown
+} from '../../../test/_util/helpers';
+import React, {
+ createElement,
+ Component,
+ render,
+ memo,
+ useState
+} from 'preact/compat';
+import { li, ol } from '../../../test/_util/dom';
+
+const h = React.createElement;
+
+describe('memo()', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should have isReactComponent flag', () => {
+ // eslint-disable-next-line react/display-name
+ let App = memo(() => <div>foo</div>);
+ expect(App.prototype.isReactComponent).to.equal(true);
+ });
+
+ it('should work with function components', () => {
+ let spy = sinon.spy();
+
+ function Foo() {
+ spy();
+ return <h1>Hello World</h1>;
+ }
+
+ let Memoized = memo(Foo);
+
+ let update;
+ class App extends Component {
+ constructor() {
+ super();
+ update = () => this.setState({});
+ }
+ render() {
+ return <Memoized />;
+ }
+ }
+ render(<App />, scratch);
+
+ expect(spy).to.be.calledOnce;
+
+ update();
+ rerender();
+
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should support adding refs', () => {
+ let spy = sinon.spy();
+
+ let ref = null;
+
+ function Foo() {
+ spy();
+ return <h1>Hello World</h1>;
+ }
+
+ let Memoized = memo(Foo);
+
+ let update;
+ class App extends Component {
+ constructor() {
+ super();
+ update = () => this.setState({});
+ }
+ render() {
+ return <Memoized ref={ref} />;
+ }
+ }
+ render(<App />, scratch);
+
+ expect(spy).to.be.calledOnce;
+
+ ref = {};
+
+ update();
+ rerender();
+
+ expect(ref.current).not.to.be.undefined;
+
+ // TODO: not sure whether this is in-line with react...
+ expect(spy).to.be.calledTwice;
+ });
+
+ it('should support custom comparer functions', () => {
+ function Foo() {
+ return <h1>Hello World</h1>;
+ }
+
+ let spy = sinon.spy(() => true);
+ let Memoized = memo(Foo, spy);
+
+ let update;
+ class App extends Component {
+ constructor() {
+ super();
+ update = () => this.setState({});
+ }
+ render() {
+ return <Memoized />;
+ }
+ }
+ render(<App />, scratch);
+
+ update();
+ rerender();
+
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWith({}, {});
+ });
+
+ it('should rerender when custom comparer returns false', () => {
+ const spy = sinon.spy();
+ function Foo() {
+ spy();
+ return <h1>Hello World</h1>;
+ }
+
+ const App = memo(Foo, () => false);
+ render(<App />, scratch);
+ expect(spy).to.be.calledOnce;
+
+ render(<App foo="bar" />, scratch);
+ expect(spy).to.be.calledTwice;
+ });
+
+ it('should pass props and nextProps to comparer fn', () => {
+ const spy = sinon.spy(() => false);
+ function Foo() {
+ return <div>foo</div>;
+ }
+
+ const props = { foo: true };
+ const nextProps = { foo: false };
+ const App = memo(Foo, spy);
+ render(h(App, props), scratch);
+ render(h(App, nextProps), scratch);
+
+ expect(spy).to.be.calledWith(props, nextProps);
+ });
+
+ it('should nest without errors', () => {
+ const Foo = () => <div>foo</div>;
+ const App = memo(memo(Foo));
+
+ // eslint-disable-next-line prefer-arrow-callback
+ expect(function() {
+ render(<App />, scratch);
+ }).to.not.throw();
+ });
+
+ it('should pass ref through nested memos', () => {
+ class Foo extends Component {
+ render() {
+ return <h1>Hello World</h1>;
+ }
+ }
+
+ const App = memo(memo(Foo));
+
+ const ref = {};
+
+ render(<App ref={ref} />, scratch);
+
+ expect(ref.current).not.to.be.undefined;
+ expect(ref.current).to.be.instanceOf(Foo);
+ });
+
+ it('should not unnecessarily reorder children #2895', () => {
+ const array = [{ name: 'A' }, { name: 'B' }, { name: 'C' }, { name: 'D' }];
+
+ const List = () => {
+ const [selected, setSelected] = useState('');
+ return (
+ <ol>
+ {array.map(item => (
+ <ListItem
+ {...{
+ isSelected: item.name === selected,
+ setSelected,
+ ...item
+ }}
+ key={item.name}
+ />
+ ))}
+ </ol>
+ );
+ };
+
+ const ListItem = memo(({ name, isSelected, setSelected }) => {
+ const handleClick = () => setSelected(name);
+ return (
+ <li class={isSelected ? 'selected' : null} onClick={handleClick}>
+ {name}
+ </li>
+ );
+ });
+
+ render(<List />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ `<ol><li>A</li><li>B</li><li>C</li><li>D</li></ol>`
+ );
+
+ let listItem = scratch.querySelector('li:nth-child(3)');
+ listItem.dispatchEvent(createEvent('click'));
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ `<ol><li>A</li><li>B</li><li class="selected">C</li><li>D</li></ol>`
+ );
+ });
+});
diff --git a/preact/compat/test/browser/portals.test.js b/preact/compat/test/browser/portals.test.js
new file mode 100644
index 0000000..c114657
--- /dev/null
+++ b/preact/compat/test/browser/portals.test.js
@@ -0,0 +1,627 @@
+import React, {
+ createElement,
+ render,
+ createPortal,
+ useState,
+ Component
+} from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { setupRerender, act } from 'preact/test-utils';
+
+/* eslint-disable react/jsx-boolean-value, react/display-name, prefer-arrow-callback */
+
+describe('Portal', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should render into a different root node', () => {
+ let root = document.createElement('div');
+ document.body.appendChild(root);
+
+ function Foo(props) {
+ return <div>{createPortal(props.children, root)}</div>;
+ }
+ render(<Foo>foobar</Foo>, scratch);
+
+ expect(root.innerHTML).to.equal('foobar');
+
+ root.parentNode.removeChild(root);
+ });
+
+ it('should insert the portal', () => {
+ let setFalse;
+ function Foo(props) {
+ const [mounted, setMounted] = useState(true);
+ setFalse = () => setMounted(() => false);
+ return (
+ <div>
+ <p>Hello</p>
+ {mounted && createPortal(props.children, scratch)}
+ </div>
+ );
+ }
+ render(<Foo>foobar</Foo>, scratch);
+ expect(scratch.innerHTML).to.equal('foobar<div><p>Hello</p></div>');
+
+ setFalse();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+ });
+
+ it('should toggle the portal', () => {
+ let toggle;
+
+ function Foo(props) {
+ const [mounted, setMounted] = useState(true);
+ toggle = () => setMounted(s => !s);
+ return (
+ <div>
+ <p>Hello</p>
+ {mounted && createPortal(props.children, scratch)}
+ </div>
+ );
+ }
+
+ render(
+ <Foo>
+ <div>foobar</div>
+ </Foo>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal(
+ '<div>foobar</div><div><p>Hello</p></div>'
+ );
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div>foobar</div>'
+ );
+ });
+
+ it('should notice prop changes on the portal', () => {
+ let set;
+
+ function Foo(props) {
+ const [additionalProps, setProps] = useState({
+ style: { backgroundColor: 'red' }
+ });
+ set = c => setProps(c);
+ return (
+ <div>
+ <p>Hello</p>
+ {createPortal(<p {...additionalProps}>Foo</p>, scratch)}
+ </div>
+ );
+ }
+
+ render(<Foo />, scratch);
+ expect(scratch.firstChild.style.backgroundColor).to.equal('red');
+
+ set({});
+ rerender();
+ expect(scratch.firstChild.style.backgroundColor).to.equal('');
+ });
+
+ it('should not unmount the portal component', () => {
+ let spy = sinon.spy();
+ let set;
+ class Child extends Component {
+ componentWillUnmount() {
+ spy();
+ }
+
+ render(props) {
+ return props.children;
+ }
+ }
+
+ function Foo(props) {
+ const [additionalProps, setProps] = useState({
+ style: { background: 'red' }
+ });
+ set = c => setProps(c);
+ return (
+ <div>
+ <p>Hello</p>
+ {createPortal(<Child {...additionalProps}>Foo</Child>, scratch)}
+ </div>
+ );
+ }
+
+ render(<Foo />, scratch);
+ expect(spy).not.to.be.called;
+
+ set({});
+ rerender();
+ expect(spy).not.to.be.called;
+ });
+
+ it('should not render <undefined> for Portal nodes', () => {
+ let root = document.createElement('div');
+ let dialog = document.createElement('div');
+ dialog.id = 'container';
+
+ scratch.appendChild(root);
+ scratch.appendChild(dialog);
+
+ function Dialog() {
+ return <div>Dialog content</div>;
+ }
+
+ function App() {
+ return <div>{createPortal(<Dialog />, dialog)}</div>;
+ }
+
+ render(<App />, root);
+ expect(scratch.firstChild.firstChild.childNodes.length).to.equal(0);
+ });
+
+ it('should unmount Portal', () => {
+ let root = document.createElement('div');
+ let dialog = document.createElement('div');
+ dialog.id = 'container';
+
+ scratch.appendChild(root);
+ scratch.appendChild(dialog);
+
+ function Dialog() {
+ return <div>Dialog content</div>;
+ }
+
+ function App() {
+ return <div>{createPortal(<Dialog />, dialog)}</div>;
+ }
+
+ render(<App />, root);
+ expect(dialog.childNodes.length).to.equal(1);
+ render(null, root);
+ expect(dialog.childNodes.length).to.equal(0);
+ });
+
+ it('should leave a working root after the portal', () => {
+ let toggle, toggle2;
+
+ function Foo(props) {
+ const [mounted, setMounted] = useState(false);
+ const [mounted2, setMounted2] = useState(true);
+ toggle = () => setMounted(s => !s);
+ toggle2 = () => setMounted2(s => !s);
+ return (
+ <div>
+ {mounted && createPortal(props.children, scratch)}
+ {mounted2 && <p>Hello</p>}
+ </div>
+ );
+ }
+
+ render(
+ <Foo>
+ <div>foobar</div>
+ </Foo>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div>foobar</div>'
+ );
+
+ toggle2();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div></div><div>foobar</div>');
+
+ toggle2();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div>foobar</div>'
+ );
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+
+ toggle2();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('should work with stacking portals', () => {
+ let toggle, toggle2;
+
+ function Foo(props) {
+ const [mounted, setMounted] = useState(false);
+ const [mounted2, setMounted2] = useState(false);
+ toggle = () => setMounted(s => !s);
+ toggle2 = () => setMounted2(s => !s);
+ return (
+ <div>
+ <p>Hello</p>
+ {mounted && createPortal(props.children, scratch)}
+ {mounted2 && createPortal(props.children2, scratch)}
+ </div>
+ );
+ }
+
+ render(
+ <Foo children2={<div>foobar2</div>}>
+ <div>foobar</div>
+ </Foo>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div>foobar</div>'
+ );
+
+ toggle2();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div>foobar</div><div>foobar2</div>'
+ );
+
+ toggle2();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div>foobar</div>'
+ );
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+ });
+
+ it('should work with changing the container', () => {
+ let set, ref;
+
+ function Foo(props) {
+ const [container, setContainer] = useState(scratch);
+ set = setContainer;
+
+ return (
+ <div
+ ref={r => {
+ ref = r;
+ }}
+ >
+ <p>Hello</p>
+ {createPortal(props.children, container)}
+ </div>
+ );
+ }
+
+ render(
+ <Foo>
+ <div>foobar</div>
+ </Foo>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal(
+ '<div>foobar</div><div><p>Hello</p></div>'
+ );
+
+ set(() => ref);
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p><div>foobar</div></div>'
+ );
+ });
+
+ it('should work with replacing placeholder portals', () => {
+ let toggle, toggle2;
+
+ function Foo(props) {
+ const [mounted, setMounted] = useState(false);
+ const [mounted2, setMounted2] = useState(false);
+ toggle = () => setMounted(s => !s);
+ toggle2 = () => setMounted2(s => !s);
+ return (
+ <div>
+ <p>Hello</p>
+ {createPortal(mounted && props.children, scratch)}
+ {createPortal(mounted2 && props.children, scratch)}
+ </div>
+ );
+ }
+
+ render(
+ <Foo>
+ <div>foobar</div>
+ </Foo>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div>foobar</div>'
+ );
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+
+ toggle2();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div>foobar</div>'
+ );
+
+ toggle2();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+ });
+
+ it('should work with removing an element from stacked container to new one', () => {
+ let toggle, root2;
+
+ function Foo(props) {
+ const [root, setRoot] = useState(scratch);
+ toggle = () => setRoot(() => root2);
+ return (
+ <div
+ ref={r => {
+ root2 = r;
+ }}
+ >
+ <p>Hello</p>
+ {createPortal(props.children, scratch)}
+ {createPortal(props.children, root)}
+ </div>
+ );
+ }
+
+ render(
+ <Foo>
+ <div>foobar</div>
+ </Foo>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal(
+ '<div>foobar</div><div>foobar</div><div><p>Hello</p></div>'
+ );
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div>foobar</div><div><p>Hello</p><div>foobar</div></div>'
+ );
+ });
+
+ it('should support nested portals', () => {
+ let toggle, toggle2, inner;
+
+ function Bar() {
+ const [mounted, setMounted] = useState(false);
+ toggle2 = () => setMounted(s => !s);
+ return (
+ <div
+ ref={r => {
+ inner = r;
+ }}
+ >
+ <p>Inner</p>
+ {mounted && createPortal(<p>hiFromBar</p>, scratch)}
+ {mounted && createPortal(<p>innerPortal</p>, inner)}
+ </div>
+ );
+ }
+
+ function Foo(props) {
+ const [mounted, setMounted] = useState(false);
+ toggle = () => setMounted(s => !s);
+ return (
+ <div>
+ <p>Hello</p>
+ {mounted && createPortal(<Bar />, scratch)}
+ </div>
+ );
+ }
+
+ render(<Foo />, scratch);
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div><p>Inner</p></div>'
+ );
+
+ toggle2();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>Hello</p></div><div><p>Inner</p><p>innerPortal</p></div><p>hiFromBar</p>'
+ );
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><p>Hello</p></div>');
+ });
+
+ it('should support nested portals remounting #2669', () => {
+ let setVisible;
+ let i = 0;
+
+ function PortalComponent(props) {
+ const innerVnode = <div id="inner">{i}</div>;
+ innerVnode.___id = 'inner_' + i++;
+ const outerVnode = (
+ <div id="outer">
+ {i}
+ {props.show && createPortal(innerVnode, scratch)}
+ </div>
+ );
+ outerVnode.___id = 'outer_' + i++;
+ return createPortal(outerVnode, scratch);
+ }
+
+ function App() {
+ const [visible, _setVisible] = useState(true);
+ setVisible = _setVisible;
+
+ return (
+ <div id="app">
+ test
+ <PortalComponent show={visible} />
+ </div>
+ );
+ }
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ '<div id="inner">0</div><div id="outer">1</div><div id="app">test</div>'
+ );
+
+ act(() => {
+ setVisible(false);
+ });
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div id="outer">3</div><div id="app">test</div>'
+ );
+
+ act(() => {
+ setVisible(true);
+ });
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div id="outer">5</div><div id="app">test</div><div id="inner">4</div>'
+ );
+
+ act(() => {
+ setVisible(false);
+ });
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div id="outer">7</div><div id="app">test</div>'
+ );
+ });
+
+ it('should not unmount when parent renders', () => {
+ let root = document.createElement('div');
+ let dialog = document.createElement('div');
+ dialog.id = 'container';
+
+ scratch.appendChild(root);
+ scratch.appendChild(dialog);
+
+ let spy = sinon.spy();
+ class Child extends Component {
+ componentDidMount() {
+ spy();
+ }
+
+ render() {
+ return <div id="child">child</div>;
+ }
+ }
+
+ let spyParent = sinon.spy();
+ class App extends Component {
+ componentDidMount() {
+ spyParent();
+ }
+ render() {
+ return <div>{createPortal(<Child />, dialog)}</div>;
+ }
+ }
+
+ render(<App />, root);
+ let dom = document.getElementById('child');
+ expect(spyParent).to.be.calledOnce;
+ expect(spy).to.be.calledOnce;
+
+ // Render twice to trigger update scenario
+ render(<App />, root);
+ render(<App />, root);
+
+ let domNew = document.getElementById('child');
+ expect(dom).to.equal(domNew);
+ expect(spyParent).to.be.calledOnce;
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should switch between non portal and portal node (Modal as lastChild)', () => {
+ let toggle;
+ const Modal = ({ children, open }) =>
+ open ? createPortal(<div>{children}</div>, scratch) : <div>Closed</div>;
+
+ const App = () => {
+ const [open, setOpen] = useState(false);
+ toggle = setOpen.bind(this, x => !x);
+ return (
+ <div>
+ <button onClick={() => setOpen(!open)}>Show</button>
+ {open ? 'Open' : 'Closed'}
+ <Modal open={open}>Hello</Modal>
+ </div>
+ );
+ };
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ '<div><button>Show</button>Closed<div>Closed</div></div>'
+ );
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><button>Show</button>Open</div><div>Hello</div>'
+ );
+ });
+
+ it('should switch between non portal and portal node (Modal as firstChild)', () => {
+ let toggle;
+ const Modal = ({ children, open }) =>
+ open ? createPortal(<div>{children}</div>, scratch) : <div>Closed</div>;
+
+ const App = () => {
+ const [open, setOpen] = useState(false);
+ toggle = setOpen.bind(this, x => !x);
+ return (
+ <div>
+ <Modal open={open}>Hello</Modal>
+ <button onClick={() => setOpen(!open)}>Show</button>
+ {open ? 'Open' : 'Closed'}
+ </div>
+ );
+ };
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ '<div><div>Closed</div><button>Show</button>Closed</div>'
+ );
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><button>Show</button>Open</div><div>Hello</div>'
+ );
+
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><div>Closed</div><button>Show</button>Closed</div>'
+ );
+ });
+});
diff --git a/preact/compat/test/browser/render.test.js b/preact/compat/test/browser/render.test.js
new file mode 100644
index 0000000..5d9ff5c
--- /dev/null
+++ b/preact/compat/test/browser/render.test.js
@@ -0,0 +1,454 @@
+import React, {
+ createElement,
+ render,
+ Component,
+ hydrate,
+ createContext
+} from 'preact/compat';
+import { setupRerender, act } from 'preact/test-utils';
+import {
+ setupScratch,
+ teardown,
+ serializeHtml,
+ createEvent
+} from '../../../test/_util/helpers';
+
+describe('compat render', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ const ce = type => document.createElement(type);
+ const text = text => document.createTextNode(text);
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should render react-style jsx', () => {
+ let jsx = (
+ <div className="foo bar" data-foo="bar">
+ <span id="some_id">inner!</span>
+ {['a', 'b']}
+ </div>
+ );
+
+ expect(jsx.props).to.have.property('className', 'foo bar');
+
+ React.render(jsx, scratch);
+ expect(serializeHtml(scratch)).to.equal(
+ '<div class="foo bar" data-foo="bar"><span id="some_id">inner!</span>ab</div>'
+ );
+ });
+
+ it('should replace isomorphic content', () => {
+ let root = ce('div');
+ let initialChild = ce('div');
+ initialChild.appendChild(text('initial content'));
+ root.appendChild(initialChild);
+
+ render(<div>dynamic content</div>, root);
+ expect(root)
+ .to.have.property('textContent')
+ .that.is.a('string')
+ .that.equals('dynamic content');
+ });
+
+ it('should remove extra elements', () => {
+ let root = ce('div');
+ let inner = ce('div');
+
+ root.appendChild(inner);
+
+ let c1 = ce('div');
+ c1.appendChild(text('isomorphic content'));
+ inner.appendChild(c1);
+
+ let c2 = ce('div');
+ c2.appendChild(text('extra content'));
+ inner.appendChild(c2);
+
+ render(<div>dynamic content</div>, root);
+ expect(root)
+ .to.have.property('textContent')
+ .that.is.a('string')
+ .that.equals('dynamic content');
+ });
+
+ // Note: Replacing text nodes inside the root itself is currently unsupported.
+ // We do replace them everywhere else, though.
+ it('should remove text nodes', () => {
+ let root = ce('div');
+
+ let div = ce('div');
+ root.appendChild(div);
+ div.appendChild(text('Text Content'));
+ div.appendChild(text('More Text Content'));
+
+ render(<div>dynamic content</div>, root);
+ expect(root)
+ .to.have.property('textContent')
+ .that.is.a('string')
+ .that.equals('dynamic content');
+ });
+
+ it('should ignore maxLength / minLength when is null', () => {
+ render(<input maxLength={null} minLength={null} />, scratch);
+ expect(scratch.firstElementChild.getAttribute('maxlength')).to.equal(null);
+ expect(scratch.firstElementChild.getAttribute('minlength')).to.equal(null);
+ });
+
+ it('should support defaultValue', () => {
+ render(<input defaultValue="foo" />, scratch);
+ expect(scratch.firstElementChild).to.have.property('value', 'foo');
+ });
+
+ it('should add defaultValue when value is null/undefined', () => {
+ render(<input defaultValue="foo" value={null} />, scratch);
+ expect(scratch.firstElementChild).to.have.property('value', 'foo');
+
+ render(<input defaultValue="foo" value={undefined} />, scratch);
+ expect(scratch.firstElementChild).to.have.property('value', 'foo');
+ });
+
+ it('should support defaultValue for select tag', () => {
+ function App() {
+ return (
+ <select defaultValue="2">
+ <option value="1">Picked 1</option>
+ <option value="2">Picked 2</option>
+ <option value="3">Picked 3</option>
+ </select>
+ );
+ }
+
+ render(<App />, scratch);
+ const options = scratch.firstChild.children;
+ expect(options[0]).to.have.property('selected', false);
+ expect(options[1]).to.have.property('selected', true);
+ });
+
+ it('should support defaultValue for select tag when using multi selection', () => {
+ function App() {
+ return (
+ <select multiple defaultValue={['1', '3']}>
+ <option value="1">Picked 1</option>
+ <option value="2">Picked 2</option>
+ <option value="3">Picked 3</option>
+ </select>
+ );
+ }
+
+ render(<App />, scratch);
+ const options = scratch.firstChild.children;
+ expect(options[0]).to.have.property('selected', true);
+ expect(options[1]).to.have.property('selected', false);
+ expect(options[2]).to.have.property('selected', true);
+ });
+
+ it('should ignore defaultValue when value is 0', () => {
+ render(<input defaultValue={2} value={0} />, scratch);
+ expect(scratch.firstElementChild.value).to.equal('0');
+ });
+
+ it('should keep value of uncontrolled inputs using defaultValue', () => {
+ // See https://github.com/preactjs/preact/issues/2391
+
+ const spy = sinon.spy();
+
+ class Input extends Component {
+ render() {
+ return (
+ <input
+ type="text"
+ defaultValue="bar"
+ onChange={() => {
+ spy();
+ this.forceUpdate();
+ }}
+ />
+ );
+ }
+ }
+
+ render(<Input />, scratch);
+ expect(scratch.firstChild.value).to.equal('bar');
+ scratch.firstChild.focus();
+ scratch.firstChild.value = 'foo';
+
+ scratch.firstChild.dispatchEvent(createEvent('input'));
+ rerender();
+ expect(scratch.firstChild.value).to.equal('foo');
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should call the callback', () => {
+ let spy = sinon.spy();
+ render(<div />, scratch, spy);
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWithExactly();
+ });
+
+ // Issue #1727
+ it('should destroy the any existing DOM nodes inside the container', () => {
+ scratch.appendChild(document.createElement('div'));
+ scratch.appendChild(document.createElement('div'));
+
+ render(<span>foo</span>, scratch);
+ expect(scratch.innerHTML).to.equal('<span>foo</span>');
+ });
+
+ it('should only destroy existing DOM nodes on first render', () => {
+ scratch.appendChild(document.createElement('div'));
+ scratch.appendChild(document.createElement('div'));
+
+ render(<input />, scratch);
+
+ let child = scratch.firstChild;
+ child.focus();
+ render(<input />, scratch);
+ expect(document.activeElement.nodeName).to.equal('INPUT');
+ });
+
+ it('should normalize class+className even on components', () => {
+ function Foo(props) {
+ return (
+ <div class={props.class} className={props.className}>
+ foo
+ </div>
+ );
+ }
+ render(<Foo class="foo" />, scratch);
+ expect(scratch.firstChild.className).to.equal('foo');
+ render(null, scratch);
+
+ render(<Foo className="foo" />, scratch);
+ expect(scratch.firstChild.className).to.equal('foo');
+ });
+
+ it('should normalize className when it has an empty string', () => {
+ function Foo(props) {
+ expect(props.className).to.equal('');
+ return <div className="">foo</div>;
+ }
+
+ render(<Foo className="" />, scratch);
+ });
+
+ // Issue #2275
+ it('should normalize class+className + DOM properties', () => {
+ function Foo(props) {
+ return <ul class="old" {...props} />;
+ }
+
+ render(<Foo fontSize="xlarge" className="new" />, scratch);
+ expect(scratch.firstChild.className).to.equal('new');
+ });
+
+ it('should give precedence to last-applied class/className prop', () => {
+ render(<ul className="from className" class="from class" />, scratch);
+ expect(scratch.firstChild.className).to.equal('from className');
+
+ render(<ul class="from class" className="from className" />, scratch);
+ expect(scratch.firstChild.className).to.equal('from className');
+ });
+
+ describe('className normalization', () => {
+ it('should give precedence to className over class', () => {
+ const { props } = <ul className="from className" class="from class" />;
+ expect(props).to.have.property('className', 'from className');
+ expect(props).to.have.property('class', 'from className');
+ });
+
+ it('should preserve className, add class alias', () => {
+ const { props } = <ul className="from className" />;
+ expect(props).to.have.property('className', 'from className');
+ expect(props).to.have.property('class', 'from className');
+ });
+
+ it('should preserve class, and add className alias', () => {
+ const { props } = <ul class="from class" />;
+ expect(props).to.have.property('class', 'from class');
+ expect(props.propertyIsEnumerable('className')).to.equal(false);
+ expect(props).to.have.property('className', 'from class');
+ });
+
+ it('should preserve class when spreading', () => {
+ const { props } = <ul class="from class" />;
+ const spreaded = (<li a {...props} />).props;
+ expect(spreaded).to.have.property('class', 'from class');
+ expect(spreaded.propertyIsEnumerable('className')).to.equal(false);
+ expect(spreaded).to.have.property('className', 'from class');
+ });
+
+ it('should preserve className when spreading', () => {
+ const { props } = <ul className="from className" />;
+ const spreaded = (<li a {...props} />).props;
+ expect(spreaded).to.have.property('className', 'from className');
+ expect(spreaded).to.have.property('class', 'from className');
+ expect(spreaded.propertyIsEnumerable('class')).to.equal(true);
+ });
+
+ // Issue #2772
+ it('should give precedence to className from spread props', () => {
+ const Foo = ({ className, ...props }) => {
+ return <div className={`${className} foo`} {...props} />;
+ };
+ render(<Foo className="bar" />, scratch);
+ expect(scratch.firstChild.className).to.equal('bar foo');
+ });
+
+ it('should give precedence to class from spread props', () => {
+ const Foo = ({ class: c, ...props }) => {
+ return <div class={`${c} foo`} {...props} />;
+ };
+ render(<Foo class="bar" />, scratch);
+ expect(scratch.firstChild.className).to.equal('bar foo');
+ });
+
+ // Issue #2224
+ it('should not mark both class and className as enumerable', () => {
+ function ClassNameCheck(props) {
+ return (
+ <div>{props.propertyIsEnumerable('className') ? 'Failed' : ''}</div>
+ );
+ }
+
+ let update;
+ class OtherThing extends Component {
+ render({ children }) {
+ update = () => this.forceUpdate();
+ return (
+ <div>
+ {children}
+ <ClassNameCheck class="test" />
+ </div>
+ );
+ }
+ }
+
+ function App() {
+ return (
+ <OtherThing>
+ <ClassNameCheck class="test" />
+ </OtherThing>
+ );
+ }
+
+ render(<App />, scratch);
+
+ update();
+ rerender();
+
+ expect(/Failed/g.test(scratch.textContent)).to.equal(
+ false,
+ 'not enumerable'
+ );
+ });
+ });
+
+ it('should cast boolean "download" values', () => {
+ render(<a download />, scratch);
+ expect(scratch.firstChild.getAttribute('download')).to.equal('');
+
+ render(<a download={false} />, scratch);
+ expect(scratch.firstChild.getAttribute('download')).to.equal(null);
+ });
+
+ it('should support static content', () => {
+ const updateSpy = sinon.spy();
+ const mountSpy = sinon.spy();
+ const renderSpy = sinon.spy();
+
+ function StaticContent({ children, element = 'div', staticMode }) {
+ // if we're in the server or a spa navigation, just render it
+ if (!staticMode) {
+ return createElement(element, {
+ children
+ });
+ }
+
+ // avoid re-render on the client
+ return createElement(element, {
+ dangerouslySetInnerHTML: { __html: '' }
+ });
+ }
+
+ class App extends Component {
+ componentDidMount() {
+ mountSpy();
+ }
+
+ componentDidUpdate() {
+ updateSpy();
+ }
+
+ render() {
+ renderSpy();
+ return <div>Staticness</div>;
+ }
+ }
+
+ act(() => {
+ render(
+ <StaticContent staticMode={false}>
+ <App />
+ </StaticContent>,
+ scratch
+ );
+ });
+
+ expect(scratch.innerHTML).to.eq('<div><div>Staticness</div></div>');
+ expect(renderSpy).to.be.calledOnce;
+ expect(mountSpy).to.be.calledOnce;
+ expect(updateSpy).to.not.be.calledOnce;
+
+ act(() => {
+ hydrate(
+ <StaticContent staticMode>
+ <App />
+ </StaticContent>,
+ scratch
+ );
+ });
+
+ expect(scratch.innerHTML).to.eq('<div><div>Staticness</div></div>');
+ expect(renderSpy).to.be.calledOnce;
+ expect(mountSpy).to.be.calledOnce;
+ expect(updateSpy).to.not.be.calledOnce;
+ });
+
+ it("should support react-relay's usage of __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", () => {
+ const Ctx = createContext('foo');
+
+ // Simplified version of: https://github.com/facebook/relay/blob/fba79309977bf6b356ee77a5421ca5e6f306223b/packages/react-relay/readContext.js#L17-L28
+ function readContext(Context) {
+ const {
+ ReactCurrentDispatcher
+ } = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
+ const dispatcher = ReactCurrentDispatcher.current;
+ return dispatcher.readContext(Context);
+ }
+
+ function Foo() {
+ const value = readContext(Ctx);
+ return <div>{value}</div>;
+ }
+
+ React.render(
+ <Ctx.Provider value="foo">
+ <Foo />
+ </Ctx.Provider>,
+ scratch
+ );
+
+ expect(scratch.textContent).to.equal('foo');
+ });
+});
diff --git a/preact/compat/test/browser/scheduler.test.js b/preact/compat/test/browser/scheduler.test.js
new file mode 100644
index 0000000..fdb426d
--- /dev/null
+++ b/preact/compat/test/browser/scheduler.test.js
@@ -0,0 +1,39 @@
+import {
+ unstable_runWithPriority,
+ unstable_NormalPriority,
+ unstable_LowPriority,
+ unstable_IdlePriority,
+ unstable_UserBlockingPriority,
+ unstable_ImmediatePriority,
+ unstable_now
+} from 'preact/compat/scheduler';
+
+describe('scheduler', () => {
+ describe('runWithPriority', () => {
+ it('should call callback ', () => {
+ const spy = sinon.spy();
+ unstable_runWithPriority(unstable_IdlePriority, spy);
+ expect(spy.callCount).to.equal(1);
+
+ unstable_runWithPriority(unstable_LowPriority, spy);
+ expect(spy.callCount).to.equal(2);
+
+ unstable_runWithPriority(unstable_NormalPriority, spy);
+ expect(spy.callCount).to.equal(3);
+
+ unstable_runWithPriority(unstable_UserBlockingPriority, spy);
+ expect(spy.callCount).to.equal(4);
+
+ unstable_runWithPriority(unstable_ImmediatePriority, spy);
+ expect(spy.callCount).to.equal(5);
+ });
+ });
+
+ describe('unstable_now', () => {
+ it('should return number', () => {
+ const res = unstable_now();
+ expect(res).is.a('number');
+ expect(res > 0).to.equal(true);
+ });
+ });
+});
diff --git a/preact/compat/test/browser/select.test.js b/preact/compat/test/browser/select.test.js
new file mode 100644
index 0000000..bf8c9b9
--- /dev/null
+++ b/preact/compat/test/browser/select.test.js
@@ -0,0 +1,33 @@
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import React, { createElement, render } from 'preact/compat';
+
+describe('Select', () => {
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should work with multiple selected (array of values)', () => {
+ function App() {
+ return (
+ <select multiple value={['B', 'C']}>
+ <option value="A">A</option>
+ <option value="B">B</option>
+ <option value="C">C</option>
+ </select>
+ );
+ }
+
+ render(<App />, scratch);
+ const options = scratch.firstChild.children;
+ expect(options[0]).to.have.property('selected', false);
+ expect(options[1]).to.have.property('selected', true);
+ expect(options[2]).to.have.property('selected', true);
+ expect(scratch.firstChild.value).to.equal('B');
+ });
+});
diff --git a/preact/compat/test/browser/suspense-hydration.test.js b/preact/compat/test/browser/suspense-hydration.test.js
new file mode 100644
index 0000000..b8d45f8
--- /dev/null
+++ b/preact/compat/test/browser/suspense-hydration.test.js
@@ -0,0 +1,778 @@
+import { setupRerender } from 'preact/test-utils';
+import React, {
+ createElement,
+ hydrate,
+ Fragment,
+ Suspense,
+ useState
+} from 'preact/compat';
+import { logCall, getLog, clearLog } from '../../../test/_util/logCall';
+import {
+ createEvent,
+ setupScratch,
+ teardown
+} from '../../../test/_util/helpers';
+import { ul, li, div } from '../../../test/_util/dom';
+import { createLazy } from './suspense-utils';
+
+/* eslint-env browser, mocha */
+describe('suspense hydration', () => {
+ /** @type {HTMLDivElement} */
+ let scratch,
+ rerender,
+ unhandledEvents = [];
+
+ const List = ({ children }) => <ul>{children}</ul>;
+ const ListItem = ({ children, onClick = null }) => (
+ <li onClick={onClick}>{children}</li>
+ );
+
+ function onUnhandledRejection(event) {
+ unhandledEvents.push(event);
+ }
+
+ let resetAppendChild;
+ let resetInsertBefore;
+ let resetRemoveChild;
+ let resetRemove;
+
+ before(() => {
+ resetAppendChild = logCall(Element.prototype, 'appendChild');
+ resetInsertBefore = logCall(Element.prototype, 'insertBefore');
+ resetRemoveChild = logCall(Element.prototype, 'removeChild');
+ resetRemove = logCall(Element.prototype, 'remove');
+ });
+
+ after(() => {
+ resetAppendChild();
+ resetInsertBefore();
+ resetRemoveChild();
+ resetRemove();
+ });
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+
+ unhandledEvents = [];
+ if ('onunhandledrejection' in window) {
+ window.addEventListener('unhandledrejection', onUnhandledRejection);
+ }
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+
+ if ('onunhandledrejection' in window) {
+ window.removeEventListener('unhandledrejection', onUnhandledRejection);
+
+ if (unhandledEvents.length) {
+ throw unhandledEvents[0].reason;
+ }
+ }
+ });
+
+ it('should leave DOM untouched when suspending while hydrating', () => {
+ scratch.innerHTML = '<div>Hello</div>';
+ clearLog();
+
+ const [Lazy, resolve] = createLazy();
+ hydrate(
+ <Suspense>
+ <Lazy />
+ </Suspense>,
+ scratch
+ );
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ return resolve(() => <div>Hello</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+ });
+ });
+
+ it('should properly attach event listeners when suspending while hydrating', () => {
+ scratch.innerHTML = '<div>Hello</div><div>World</div>';
+ clearLog();
+
+ const helloListener = sinon.spy();
+ const worldListener = sinon.spy();
+
+ const [Lazy, resolve] = createLazy();
+ hydrate(
+ <Suspense>
+ <Lazy />
+ <div onClick={worldListener}>World!</div>
+ </Suspense>,
+ scratch
+ );
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal('<div>Hello</div><div>World!</div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ scratch.querySelector('div:last-child').dispatchEvent(createEvent('click'));
+ expect(worldListener, 'worldListener 1').to.have.been.calledOnce;
+
+ return resolve(() => <div onClick={helloListener}>Hello</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Hello</div><div>World!</div>');
+ expect(getLog()).to.deep.equal([]);
+
+ scratch
+ .querySelector('div:first-child')
+ .dispatchEvent(createEvent('click'));
+ expect(helloListener, 'helloListener').to.have.been.calledOnce;
+
+ scratch
+ .querySelector('div:last-child')
+ .dispatchEvent(createEvent('click'));
+ expect(worldListener, 'worldListener 2').to.have.been.calledTwice;
+
+ clearLog();
+ });
+ });
+
+ it('should allow siblings to update around suspense boundary', () => {
+ scratch.innerHTML = '<div>Count: 0</div><div>Hello</div>';
+ clearLog();
+
+ const [Lazy, resolve] = createLazy();
+
+ /** @type {() => void} */
+ let increment;
+ function Counter() {
+ const [count, setCount] = useState(0);
+ increment = () => setCount(c => c + 1);
+ return <div>Count: {count}</div>;
+ }
+
+ hydrate(
+ <Fragment>
+ <Counter />
+ <Suspense>
+ <Lazy />
+ </Suspense>
+ </Fragment>,
+ scratch
+ );
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal('<div>Count: 0</div><div>Hello</div>');
+ // Re: DOM OP below - Known issue with hydrating merged text nodes
+ expect(getLog()).to.deep.equal(['<div>Count: .appendChild(#text)']);
+ clearLog();
+
+ increment();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('<div>Count: 1</div><div>Hello</div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ return resolve(() => <div>Hello</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Count: 1</div><div>Hello</div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+ });
+ });
+
+ it('should allow parents to update around suspense boundary and unmount', async () => {
+ scratch.innerHTML = '<div>Count: 0</div><div>Hello</div>';
+ clearLog();
+
+ const [Lazy, resolve] = createLazy();
+
+ /** @type {() => void} */
+ let increment;
+ function Counter() {
+ const [count, setCount] = useState(0);
+ increment = () => setCount(c => c + 1);
+ return (
+ <Fragment>
+ <div>Count: {count}</div>
+ <Suspense>
+ <Lazy />
+ </Suspense>
+ </Fragment>
+ );
+ }
+
+ let hide;
+ function Component() {
+ const [show, setShow] = useState(true);
+ hide = () => setShow(false);
+
+ return show ? <Counter /> : null;
+ }
+
+ hydrate(<Component />, scratch);
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal('<div>Count: 0</div><div>Hello</div>');
+ // Re: DOM OP below - Known issue with hydrating merged text nodes
+ expect(getLog()).to.deep.equal(['<div>Count: .appendChild(#text)']);
+ clearLog();
+
+ increment();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('<div>Count: 1</div><div>Hello</div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ await resolve(() => <div>Hello</div>);
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Count: 1</div><div>Hello</div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ hide();
+ rerender();
+ expect(scratch.innerHTML).to.equal('');
+ });
+
+ it('should allow parents to update around suspense boundary and unmount before resolves', async () => {
+ scratch.innerHTML = '<div>Count: 0</div><div>Hello</div>';
+ clearLog();
+
+ const [Lazy] = createLazy();
+
+ /** @type {() => void} */
+ let increment;
+ function Counter() {
+ const [count, setCount] = useState(0);
+ increment = () => setCount(c => c + 1);
+ return (
+ <Fragment>
+ <div>Count: {count}</div>
+ <Suspense>
+ <Lazy />
+ </Suspense>
+ </Fragment>
+ );
+ }
+
+ let hide;
+ function Component() {
+ const [show, setShow] = useState(true);
+ hide = () => setShow(false);
+
+ return show ? <Counter /> : null;
+ }
+
+ hydrate(<Component />, scratch);
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal('<div>Count: 0</div><div>Hello</div>');
+ // Re: DOM OP below - Known issue with hydrating merged text nodes
+ expect(getLog()).to.deep.equal(['<div>Count: .appendChild(#text)']);
+ clearLog();
+
+ increment();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('<div>Count: 1</div><div>Hello</div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ hide();
+ rerender();
+ expect(scratch.innerHTML).to.equal('');
+ });
+
+ it('should allow parents to unmount before resolves', async () => {
+ scratch.innerHTML = '<div>Count: 0</div><div>Hello</div>';
+
+ const [Lazy] = createLazy();
+
+ function Counter() {
+ return (
+ <Fragment>
+ <div>Count: 0</div>
+ <Suspense>
+ <Lazy />
+ </Suspense>
+ </Fragment>
+ );
+ }
+
+ let hide;
+ function Component() {
+ const [show, setShow] = useState(true);
+ hide = () => setShow(false);
+
+ return show ? <Counter /> : null;
+ }
+
+ hydrate(<Component />, scratch);
+ rerender(); // Flush rerender queue to mimic what preact will really do
+
+ hide();
+ rerender();
+ expect(scratch.innerHTML).to.equal('');
+ });
+
+ it('should properly hydrate when there is DOM and Components between Suspense and suspender', () => {
+ scratch.innerHTML = '<div><div>Hello</div></div>';
+ clearLog();
+
+ const [Lazy, resolve] = createLazy();
+ hydrate(
+ <Suspense>
+ <div>
+ <Fragment>
+ <Lazy />
+ </Fragment>
+ </div>
+ </Suspense>,
+ scratch
+ );
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal('<div><div>Hello</div></div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ return resolve(() => <div>Hello</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><div>Hello</div></div>');
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+ });
+ });
+
+ it('should properly hydrate suspense with Fragment siblings', () => {
+ const originalHtml = ul([li(0), li(1), li(2), li(3), li(4)]);
+
+ const listeners = [
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy()
+ ];
+
+ scratch.innerHTML = originalHtml;
+ clearLog();
+
+ const [Lazy, resolve] = createLazy();
+ hydrate(
+ <ul>
+ <Fragment>
+ <li onClick={listeners[0]}>0</li>
+ <li onClick={listeners[1]}>1</li>
+ </Fragment>
+ <Suspense>
+ <Lazy />
+ </Suspense>
+ <Fragment>
+ <li onClick={listeners[3]}>3</li>
+ <li onClick={listeners[4]}>4</li>
+ </Fragment>
+ </ul>,
+ scratch
+ );
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal(originalHtml);
+ expect(getLog()).to.deep.equal([]);
+ expect(listeners[4]).not.to.have.been.called;
+
+ clearLog();
+ scratch.querySelector('li:last-child').dispatchEvent(createEvent('click'));
+ expect(listeners[4]).to.have.been.calledOnce;
+
+ return resolve(() => (
+ <Fragment>
+ <li onClick={listeners[2]}>2</li>
+ </Fragment>
+ )).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(originalHtml);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ scratch
+ .querySelector('li:nth-child(3)')
+ .dispatchEvent(createEvent('click'));
+ expect(listeners[2]).to.have.been.calledOnce;
+
+ scratch
+ .querySelector('li:last-child')
+ .dispatchEvent(createEvent('click'));
+ expect(listeners[4]).to.have.been.calledTwice;
+ });
+ });
+
+ it('should properly hydrate suspense with Component & Fragment siblings', () => {
+ const originalHtml = ul([li(0), li(1), li(2), li(3), li(4)]);
+
+ const listeners = [
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy()
+ ];
+
+ scratch.innerHTML = originalHtml;
+ clearLog();
+
+ const [Lazy, resolve] = createLazy();
+ hydrate(
+ <List>
+ <Fragment>
+ <ListItem onClick={listeners[0]}>0</ListItem>
+ <ListItem onClick={listeners[1]}>1</ListItem>
+ </Fragment>
+ <Suspense>
+ <Lazy />
+ </Suspense>
+ <Fragment>
+ <ListItem onClick={listeners[3]}>3</ListItem>
+ <ListItem onClick={listeners[4]}>4</ListItem>
+ </Fragment>
+ </List>,
+ scratch
+ );
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal(originalHtml);
+ expect(getLog()).to.deep.equal([]);
+ expect(listeners[4]).not.to.have.been.called;
+
+ clearLog();
+ scratch.querySelector('li:last-child').dispatchEvent(createEvent('click'));
+ expect(listeners[4]).to.have.been.calledOnce;
+
+ return resolve(() => (
+ <Fragment>
+ <ListItem onClick={listeners[2]}>2</ListItem>
+ </Fragment>
+ )).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(originalHtml);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ scratch
+ .querySelector('li:nth-child(3)')
+ .dispatchEvent(createEvent('click'));
+ expect(listeners[2]).to.have.been.calledOnce;
+
+ scratch
+ .querySelector('li:last-child')
+ .dispatchEvent(createEvent('click'));
+ expect(listeners[4]).to.have.been.calledTwice;
+ });
+ });
+
+ it('should suspend hydration with components with state and event listeners between suspender and Suspense', () => {
+ let html = div([div('Count: 0'), div('Hello')]);
+ scratch.innerHTML = html;
+ clearLog();
+
+ function Counter({ children }) {
+ const [count, setCount] = useState(0);
+ return (
+ <div onClick={() => setCount(count + 1)}>
+ <div>Count: {count}</div>
+ {children}
+ </div>
+ );
+ }
+
+ const [Lazy, resolve] = createLazy();
+ hydrate(
+ <Suspense>
+ <Counter>
+ <Lazy />
+ </Counter>
+ </Suspense>,
+ scratch
+ );
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal(['<div>Count: .appendChild(#text)']);
+ clearLog();
+
+ scratch.firstElementChild.dispatchEvent(createEvent('click'));
+ rerender();
+
+ html = div([div('Count: 1'), div('Hello')]);
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ const lazySpy = sinon.spy();
+ return resolve(() => <div onClick={lazySpy}>Hello</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ const lazyDiv = scratch.firstChild.firstChild.nextSibling;
+ expect(lazyDiv.textContent).to.equal('Hello');
+ expect(lazySpy).not.to.have.been.called;
+
+ lazyDiv.dispatchEvent(createEvent('click'));
+ rerender();
+
+ expect(lazySpy).to.have.been.calledOnce;
+ });
+ });
+
+ it('should maintain state of sibling components around suspender', () => {
+ let html = [div('Count: 0'), div('Hello'), div('Count: 0')].join('');
+ scratch.innerHTML = html;
+ clearLog();
+
+ function Counter() {
+ const [count, setCount] = useState(0);
+ return <div onClick={() => setCount(count + 1)}>Count: {count}</div>;
+ }
+
+ const [Lazy, resolve] = createLazy();
+ hydrate(
+ <Suspense>
+ <Counter />
+ <Lazy />
+ <Counter />
+ </Suspense>,
+ scratch
+ );
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([
+ '<div>Count: .appendChild(#text)',
+ '<div>Count: .appendChild(#text)'
+ ]);
+ clearLog();
+
+ // Update state of first Counter
+ scratch.firstElementChild.dispatchEvent(createEvent('click'));
+ rerender();
+
+ html = [div('Count: 1'), div('Hello'), div('Count: 0')].join('');
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ // Update state of second Counter
+ scratch.lastElementChild.dispatchEvent(createEvent('click'));
+ rerender();
+
+ html = [div('Count: 1'), div('Hello'), div('Count: 1')].join('');
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ const lazySpy = sinon.spy();
+ return resolve(() => <div onClick={lazySpy}>Hello</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ const lazyDiv = scratch.firstChild.nextSibling;
+ expect(lazyDiv.textContent).to.equal('Hello');
+ expect(lazySpy).not.to.have.been.called;
+
+ lazyDiv.dispatchEvent(createEvent('click'));
+ rerender();
+
+ expect(lazySpy).to.have.been.calledOnce;
+ });
+ });
+
+ it('should allow component to re-suspend using normal suspension mechanics after initial suspended hydration resumes', () => {
+ const originalHtml = [div('a'), div('b1'), div('c')].join('');
+ scratch.innerHTML = originalHtml;
+ clearLog();
+
+ const bOnClickSpy = sinon.spy();
+ const cOnClickSpy = sinon.spy();
+
+ const [Lazy, resolve] = createLazy();
+
+ /** @type {(c: React.JSX.Element) => void} */
+ let setChild;
+ function App() {
+ // Mimic some state that may cause a suspend
+ const [child, setChildInternal] = useState(<Lazy />);
+ setChild = setChildInternal;
+
+ return (
+ <Suspense fallback={<div>fallback</div>}>
+ <div>a</div>
+ {child}
+ <div onClick={cOnClickSpy}>c</div>
+ </Suspense>
+ );
+ }
+
+ // Validate initial hydration suspend resumes (initial markup stays the same
+ // and event listeners attached)
+ hydrate(<App />, scratch);
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML, 'initial HTML').to.equal(originalHtml);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ scratch.lastChild.dispatchEvent(createEvent('click'));
+ rerender();
+ expect(cOnClickSpy).to.have.been.calledOnce;
+
+ return resolve(() => <div onClick={bOnClickSpy}>b1</div>)
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML, 'hydration resumes').to.equal(originalHtml);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ scratch.firstChild.nextSibling.dispatchEvent(createEvent('click'));
+ rerender();
+ expect(bOnClickSpy).to.have.been.calledOnce;
+
+ // suspend again and validate normal suspension works (fallback renders
+ // and result)
+ const [Lazy2, resolve2] = createLazy();
+ setChild(<Lazy2 />);
+ rerender();
+
+ expect(scratch.innerHTML, 'second suspend').to.equal(div('fallback'));
+
+ return resolve2(() => <div onClick={bOnClickSpy}>b2</div>);
+ })
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML, 'second suspend resumes').to.equal(
+ [div('a'), div('b2'), div('c')].join('')
+ );
+
+ scratch.lastChild.dispatchEvent(createEvent('click'));
+ expect(cOnClickSpy).to.have.been.calledTwice;
+
+ scratch.firstChild.nextSibling.dispatchEvent(createEvent('click'));
+ expect(bOnClickSpy).to.have.been.calledTwice;
+ });
+ });
+
+ // Currently not supported. Hydration doesn't set attributes... but should it
+ // when coming back from suspense if props were updated?
+ it.skip('should hydrate and update attributes with latest props', () => {
+ const originalHtml = '<p>Count: 0</p><p data-count="0">Lazy count: 0</p>';
+ scratch.innerHTML = originalHtml;
+ clearLog();
+
+ /** @type {() => void} */
+ let increment;
+ const [Lazy, resolve] = createLazy();
+ function App() {
+ const [count, setCount] = useState(0);
+ increment = () => setCount(c => c + 1);
+
+ return (
+ <Suspense>
+ <p>Count: {count}</p>
+ <Lazy count={count} />
+ </Suspense>
+ );
+ }
+
+ hydrate(<App />, scratch);
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal(originalHtml);
+ // Re: DOM OP below - Known issue with hydrating merged text nodes
+ expect(getLog()).to.deep.equal(['<p>Count: .appendChild(#text)']);
+ clearLog();
+
+ increment();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ '<p>Count: 1</p><p data-count="0">Lazy count: 0</p>'
+ );
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ return resolve(({ count }) => (
+ <p data-count={count}>Lazy count: {count}</p>
+ )).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<p>Count: 1</p><p data-count="1">Lazy count: 1</p>'
+ );
+ // Re: DOM OP below - Known issue with hydrating merged text nodes
+ expect(getLog()).to.deep.equal(['<p>Lazy count: .appendChild(#text)']);
+ clearLog();
+ });
+ });
+
+ // Currently not supported, but I wrote the test before I realized that so
+ // leaving it here in case we do support it eventually
+ it.skip('should properly hydrate suspense when resolves to a Fragment', () => {
+ const originalHtml = ul([li(0), li(1), li(2), li(3), li(4), li(5)]);
+
+ const listeners = [
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy()
+ ];
+
+ scratch.innerHTML = originalHtml;
+ clearLog();
+
+ const [Lazy, resolve] = createLazy();
+ hydrate(
+ <List>
+ <Fragment>
+ <ListItem onClick={listeners[0]}>0</ListItem>
+ <ListItem onClick={listeners[1]}>1</ListItem>
+ </Fragment>
+ <Suspense>
+ <Lazy />
+ </Suspense>
+ <Fragment>
+ <ListItem onClick={listeners[4]}>4</ListItem>
+ <ListItem onClick={listeners[5]}>5</ListItem>
+ </Fragment>
+ </List>,
+ scratch
+ );
+ rerender(); // Flush rerender queue to mimic what preact will really do
+ expect(scratch.innerHTML).to.equal(originalHtml);
+ expect(getLog()).to.deep.equal([]);
+ expect(listeners[5]).not.to.have.been.called;
+
+ clearLog();
+ scratch.querySelector('li:last-child').dispatchEvent(createEvent('click'));
+ expect(listeners[5]).to.have.been.calledOnce;
+
+ return resolve(() => (
+ <Fragment>
+ <ListItem onClick={listeners[2]}>2</ListItem>
+ <ListItem onClick={listeners[3]}>3</ListItem>
+ </Fragment>
+ )).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(originalHtml);
+ expect(getLog()).to.deep.equal([]);
+ clearLog();
+
+ scratch
+ .querySelector('li:nth-child(4)')
+ .dispatchEvent(createEvent('click'));
+ expect(listeners[3]).to.have.been.calledOnce;
+
+ scratch
+ .querySelector('li:last-child')
+ .dispatchEvent(createEvent('click'));
+ expect(listeners[5]).to.have.been.calledTwice;
+ });
+ });
+});
diff --git a/preact/compat/test/browser/suspense-list.test.js b/preact/compat/test/browser/suspense-list.test.js
new file mode 100644
index 0000000..f3d4c91
--- /dev/null
+++ b/preact/compat/test/browser/suspense-list.test.js
@@ -0,0 +1,588 @@
+import { setupRerender } from 'preact/test-utils';
+import React, {
+ createElement,
+ render,
+ Component,
+ Suspense,
+ SuspenseList
+} from 'preact/compat';
+import { useState } from 'preact/hooks';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+const h = React.createElement;
+/* eslint-env browser, mocha */
+
+function getSuspendableComponent(text) {
+ let resolve;
+ let resolved = false;
+ const promise = new Promise(_resolve => {
+ resolve = () => {
+ resolved = true;
+ _resolve();
+ return promise;
+ };
+ });
+
+ class LifecycleSuspender extends Component {
+ render() {
+ if (!resolved) {
+ throw promise;
+ }
+ return <span>{text}</span>;
+ }
+ }
+
+ LifecycleSuspender.resolve = () => {
+ resolve();
+ };
+
+ return LifecycleSuspender;
+}
+
+describe('suspense-list', () => {
+ /** @type {HTMLDivElement} */
+ let scratch,
+ rerender,
+ unhandledEvents = [];
+
+ function onUnhandledRejection(event) {
+ unhandledEvents.push(event);
+ }
+
+ function getSuspenseList(revealOrder) {
+ const A = getSuspendableComponent('A');
+ const B = getSuspendableComponent('B');
+ const C = getSuspendableComponent('C');
+ render(
+ <SuspenseList revealOrder={revealOrder}>
+ <Suspense fallback={<span>Loading...</span>}>
+ <A />
+ </Suspense>
+ <Suspense fallback={<span>Loading...</span>}>
+ <B />
+ </Suspense>
+ <Suspense fallback={<span>Loading...</span>}>
+ <C />
+ </Suspense>
+ </SuspenseList>,
+ scratch
+ ); // Render initial state
+
+ return [A.resolve, B.resolve, C.resolve];
+ }
+
+ function getNestedSuspenseList(outerRevealOrder, innerRevealOrder) {
+ const A = getSuspendableComponent('A');
+ const B = getSuspendableComponent('B');
+ const C = getSuspendableComponent('C');
+ const D = getSuspendableComponent('D');
+
+ render(
+ <SuspenseList revealOrder={outerRevealOrder}>
+ <Suspense fallback={<span>Loading...</span>}>
+ <A />
+ </Suspense>
+ <SuspenseList revealOrder={innerRevealOrder}>
+ <Suspense fallback={<span>Loading...</span>}>
+ <B />
+ </Suspense>
+ <Suspense fallback={<span>Loading...</span>}>
+ <C />
+ </Suspense>
+ </SuspenseList>
+ <Suspense fallback={<span>Loading...</span>}>
+ <D />
+ </Suspense>
+ </SuspenseList>,
+ scratch
+ );
+ return [A.resolve, B.resolve, C.resolve, D.resolve];
+ }
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ unhandledEvents = [];
+
+ if ('onunhandledrejection' in window) {
+ window.addEventListener('unhandledrejection', onUnhandledRejection);
+ }
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+
+ if ('onunhandledrejection' in window) {
+ window.removeEventListener('unhandledrejection', onUnhandledRejection);
+
+ if (unhandledEvents.length) {
+ throw unhandledEvents[0].reason;
+ }
+ }
+ });
+
+ it('should work for single element', async () => {
+ const Component = getSuspendableComponent('A');
+ render(
+ <SuspenseList>
+ <Suspense fallback={<span>Loading...</span>}>
+ <Component />
+ </Suspense>
+ </SuspenseList>,
+ scratch
+ ); // Render initial state
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(`<span>Loading...</span>`);
+
+ await Component.resolve();
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<span>A</span>`);
+ });
+
+ it('should let components appear backwards if no revealOrder is mentioned', async () => {
+ const [resolver1, resolver2, resolver3] = getSuspenseList();
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver2();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>B</span><span>Loading...</span>`
+ );
+
+ await resolver3();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>B</span><span>C</span>`
+ );
+
+ await resolver1();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span>`
+ );
+ });
+
+ it('should let components appear forwards if no revealOrder is mentioned', async () => {
+ const [resolver1, resolver2, resolver3] = getSuspenseList();
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver1();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver2();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>Loading...</span>`
+ );
+
+ await resolver3();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span>`
+ );
+ });
+
+ it('should let components appear in forwards if revealOrder=forwards and first one resolves before others', async () => {
+ const [resolver1, resolver2, resolver3] = getSuspenseList('forwards');
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver1();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver3();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver2();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span>`
+ );
+ });
+
+ it('should make components appear together if revealOrder=forwards and others resolves before first', async () => {
+ const [resolver1, resolver2, resolver3] = getSuspenseList('forwards');
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver2();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver3();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver1();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span>`
+ );
+ });
+
+ it('should let components appear backwards if revealOrder=backwards and others resolves before first', async () => {
+ const [resolver1, resolver2, resolver3] = getSuspenseList('backwards');
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver3();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>C</span>`
+ );
+
+ await resolver2();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>B</span><span>C</span>`
+ );
+
+ await resolver1();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span>`
+ );
+ });
+
+ it('should make components appear together if revealOrder=backwards and first one resolves others', async () => {
+ const [resolver1, resolver2, resolver3] = getSuspenseList('backwards');
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver1();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver3();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>C</span>`
+ );
+
+ await resolver2();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span>`
+ );
+ });
+
+ it('should make components appear together if revealOrder=together and first one resolves others', async () => {
+ const [resolver1, resolver2, resolver3] = getSuspenseList('together');
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver1();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver3();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver2();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span>`
+ );
+ });
+
+ it('should make components appear together if revealOrder=together and second one resolves before others', async () => {
+ const [resolver1, resolver2, resolver3] = getSuspenseList('together');
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver2();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver1();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolver3();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span>`
+ );
+ });
+
+ it('should not do anything to non suspense elements', async () => {
+ const A = getSuspendableComponent('A');
+ const B = getSuspendableComponent('B');
+ render(
+ <SuspenseList>
+ <Suspense fallback={<span>Loading...</span>}>
+ <A />
+ </Suspense>
+ <div>foo</div>
+ <Suspense fallback={<span>Loading...</span>}>
+ <B />
+ </Suspense>
+ <span>bar</span>
+ </SuspenseList>,
+ scratch
+ );
+
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><div>foo</div><span>Loading...</span><span>bar</span>`
+ );
+
+ await A.resolve();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><div>foo</div><span>Loading...</span><span>bar</span>`
+ );
+
+ await B.resolve();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><div>foo</div><span>B</span><span>bar</span>`
+ );
+ });
+
+ it('should make sure nested SuspenseList works with forwards', async () => {
+ const [resolveA, resolveB, resolveC, resolveD] = getNestedSuspenseList(
+ 'forwards',
+ 'forwards'
+ );
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolveB();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolveA();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolveC();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span><span>Loading...</span>`
+ );
+
+ await resolveD();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span><span>D</span>`
+ );
+ });
+
+ it('should make sure nested SuspenseList works with backwards', async () => {
+ const [resolveA, resolveB, resolveC, resolveD] = getNestedSuspenseList(
+ 'forwards',
+ 'backwards'
+ );
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolveA();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolveC();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>Loading...</span><span>C</span><span>Loading...</span>`
+ );
+
+ await resolveB();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span><span>Loading...</span>`
+ );
+
+ await resolveD();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span><span>D</span>`
+ );
+ });
+
+ it('should make sure nested SuspenseList works with together', async () => {
+ const [resolveA, resolveB, resolveC, resolveD] = getNestedSuspenseList(
+ 'together',
+ 'forwards'
+ );
+ rerender(); // Re-render with fallback cuz lazy threw
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolveA();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolveD();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolveB();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>Loading...</span><span>Loading...</span><span>Loading...</span><span>Loading...</span>`
+ );
+
+ await resolveC();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>A</span><span>B</span><span>C</span><span>D</span>`
+ );
+ });
+
+ it('should work with forwards even when a <Suspense> child does not suspend', async () => {
+ const Component = getSuspendableComponent('A');
+
+ render(
+ <SuspenseList revealOrder="forwards">
+ <Suspense fallback={<span>Loading...</span>}>
+ <div />
+ </Suspense>
+ <Suspense fallback={<span>Loading...</span>}>
+ <Component />
+ </Suspense>
+ </SuspenseList>,
+ scratch
+ ); // Render initial state
+
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div></div><span>Loading...</span>`);
+
+ await Component.resolve();
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div></div><span>A</span>`);
+ });
+
+ it('should work with together even when a <Suspense> child does not suspend', async () => {
+ const Component = getSuspendableComponent('A');
+
+ render(
+ <SuspenseList revealOrder="together">
+ <Suspense fallback={<span>Loading...</span>}>
+ <div />
+ </Suspense>
+ <Suspense fallback={<span>Loading...</span>}>
+ <Component />
+ </Suspense>
+ </SuspenseList>,
+ scratch
+ ); // Render initial state
+
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div></div><span>Loading...</span>`);
+
+ await Component.resolve();
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div></div><span>A</span>`);
+ });
+
+ it('should not suspend resolved children if a new suspense comes in between', async () => {
+ const ComponentA = getSuspendableComponent('A');
+ const ComponentB = getSuspendableComponent('B');
+
+ let showB;
+ function Container() {
+ const [showHidden, setShowHidden] = useState(false);
+ showB = setShowHidden;
+ return (
+ <SuspenseList revealOrder="together">
+ <Suspense fallback={<span>Loading...</span>}>
+ <div />
+ </Suspense>
+ {showHidden && (
+ <Suspense fallback={<span>Loading...</span>}>
+ <ComponentB />
+ </Suspense>
+ )}
+ <Suspense fallback={<span>Loading...</span>}>
+ <ComponentA />
+ </Suspense>
+ </SuspenseList>
+ );
+ }
+ render(<Container />, scratch); // Render initial state
+
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div></div><span>Loading...</span>`);
+
+ await ComponentA.resolve();
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div></div><span>A</span>`);
+
+ showB(true);
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<div></div><span>Loading...</span><span>A</span>`
+ );
+
+ await ComponentB.resolve();
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div></div><span>B</span><span>A</span>`);
+ });
+});
diff --git a/preact/compat/test/browser/suspense-utils.js b/preact/compat/test/browser/suspense-utils.js
new file mode 100644
index 0000000..f8f380b
--- /dev/null
+++ b/preact/compat/test/browser/suspense-utils.js
@@ -0,0 +1,116 @@
+import React, { Component, lazy } from 'preact/compat';
+
+const h = React.createElement;
+
+/**
+ * Create a Lazy component whose promise is controlled by by the test. This
+ * function returns 3 values: The Lazy component to render, a `resolve`
+ * function, and a `reject` function. Call `resolve` with the component the Lazy
+ * component should resolve with. Call `reject` with the error the Lazy
+ * component should reject with
+ *
+ * @example
+ * // 1. Create and render the Lazy component
+ * const [Lazy, resolve] = createLazy();
+ * render(
+ * <Suspense fallback={<div>Suspended...</div>}>
+ * <Lazy />
+ * </Suspense>,
+ * scratch
+ * );
+ * rerender(); // Rerender is required so the fallback is displayed
+ * expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+ *
+ * // 2. Resolve the Lazy with a new component to render
+ * return resolve(() => <div>Hello</div>).then(() => {
+ * rerender();
+ * expect(scratch.innerHTML).to.equal(`<div>Hello</div>`);
+ * });
+ *
+ * @typedef {import('../../../src').ComponentType<any>} ComponentType
+ * @returns {[typeof Component, (c: ComponentType) => Promise<void>, (e: Error) => Promise<void>]}
+ */
+export function createLazy() {
+ /** @type {(c: ComponentType) => Promise<void>} */
+ let resolver, rejecter;
+ const Lazy = lazy(() => {
+ let promise = new Promise((resolve, reject) => {
+ resolver = c => {
+ resolve({ default: c });
+ return promise;
+ };
+
+ rejecter = e => {
+ reject(e);
+ return promise;
+ };
+ });
+
+ return promise;
+ });
+
+ return [Lazy, c => resolver(c), e => rejecter(e)];
+}
+
+/**
+ * Returns a Component and a function (named `suspend`) that will suspend the component when called.
+ * `suspend` will return two functions, `resolve` and `reject`. Call `resolve` with a Component the
+ * suspended component should resume with or reject with the Error the suspended component should
+ * reject with
+ *
+ * @example
+ * // 1. Create a suspender with initial children (argument to createSuspender) and render it
+ * const [Suspender, suspend] = createSuspender(() => <div>Hello</div>);
+ * render(
+ * <Suspense fallback={<div>Suspended...</div>}>
+ * <Suspender />
+ * </Suspense>,
+ * scratch
+ * );
+ * expect(scratch.innerHTML).to.eql(`div>Hello</div>`);
+ *
+ * // 2. Cause the component to suspend and rerender the update (i.e. the fallback)
+ * const [resolve] = suspend();
+ * rerender();
+ * expect(scratch.innerHTML).to.eql(`div>Suspended...</div>`);
+ *
+ * // 3. Resolve the suspended component with a new component and rerender
+ * return resolve(() => <div>Hello2</div>).then(() => {
+ * rerender();
+ * expect(scratch.innerHTML).to.eql(`div>Hello2</div>`);
+ * });
+ *
+ * @typedef {Component<{}, any>} Suspender
+ * @typedef {[(c: ComponentType) => Promise<void>, (error: Error) => Promise<void>]} Resolvers
+ * @param {ComponentType} DefaultComponent
+ * @returns {[typeof Suspender, () => Resolvers]}
+ */
+export function createSuspender(DefaultComponent) {
+ /** @type {(lazy: typeof Component) => void} */
+ let renderLazy;
+ class Suspender extends Component {
+ constructor(props, context) {
+ super(props, context);
+ this.state = { Lazy: null };
+
+ renderLazy = Lazy => this.setState({ Lazy });
+ }
+
+ render(props, state) {
+ return state.Lazy ? h(state.Lazy, props) : h(DefaultComponent, props);
+ }
+ }
+
+ sinon.spy(Suspender.prototype, 'render');
+
+ /**
+ * @returns {Resolvers}
+ */
+ function suspend() {
+ const [Lazy, resolve, reject] = createLazy();
+ renderLazy(Lazy);
+ return [resolve, reject];
+ }
+
+ return [Suspender, suspend];
+}
diff --git a/preact/compat/test/browser/suspense.test.js b/preact/compat/test/browser/suspense.test.js
new file mode 100644
index 0000000..cc2cd84
--- /dev/null
+++ b/preact/compat/test/browser/suspense.test.js
@@ -0,0 +1,2091 @@
+import { setupRerender } from 'preact/test-utils';
+import React, {
+ createElement,
+ render,
+ Component,
+ Suspense,
+ lazy,
+ Fragment,
+ createContext,
+ useState,
+ useEffect,
+ useLayoutEffect
+} from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { createLazy, createSuspender } from './suspense-utils';
+
+const h = React.createElement;
+/* eslint-env browser, mocha */
+
+class Catcher extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { error: false };
+ }
+
+ componentDidCatch(e) {
+ if (e.then) {
+ this.setState({ error: { message: '{Promise}' } });
+ } else {
+ this.setState({ error: e });
+ }
+ }
+
+ render(props, state) {
+ return state.error ? (
+ <div>Catcher did catch: {state.error.message}</div>
+ ) : (
+ props.children
+ );
+ }
+}
+
+describe('suspense', () => {
+ /** @type {HTMLDivElement} */
+ let scratch,
+ rerender,
+ unhandledEvents = [];
+
+ function onUnhandledRejection(event) {
+ unhandledEvents.push(event);
+ }
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+
+ unhandledEvents = [];
+ if ('onunhandledrejection' in window) {
+ window.addEventListener('unhandledrejection', onUnhandledRejection);
+ }
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+
+ if ('onunhandledrejection' in window) {
+ window.removeEventListener('unhandledrejection', onUnhandledRejection);
+
+ if (unhandledEvents.length) {
+ throw unhandledEvents[0].reason;
+ }
+ }
+ });
+
+ it('should support lazy', () => {
+ const LazyComp = ({ name }) => <div>Hello from {name}</div>;
+
+ /** @type {() => Promise<void>} */
+ let resolve;
+ const Lazy = lazy(() => {
+ const p = new Promise(res => {
+ resolve = () => {
+ res({ default: LazyComp });
+ return p;
+ };
+ });
+
+ return p;
+ });
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Lazy name="LazyComp" />
+ </Suspense>,
+ scratch
+ ); // Render initial state
+ rerender(); // Re-render with fallback cuz lazy threw
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return resolve().then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Hello from LazyComp</div>`);
+ });
+ });
+
+ it('should reset hooks of components', () => {
+ let set;
+ const LazyComp = ({ name }) => <div>Hello from {name}</div>;
+
+ /** @type {() => Promise<void>} */
+ let resolve;
+ const Lazy = lazy(() => {
+ const p = new Promise(res => {
+ resolve = () => {
+ res({ default: LazyComp });
+ return p;
+ };
+ });
+
+ return p;
+ });
+
+ const Parent = ({ children }) => {
+ const [state, setState] = useState(false);
+ set = setState;
+
+ return (
+ <div>
+ <p>hi</p>
+ {state && children}
+ </div>
+ );
+ };
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Parent>
+ <Lazy name="LazyComp" />
+ </Parent>
+ </Suspense>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.eql(`<div><p>hi</p></div>`);
+
+ set(true);
+ rerender();
+
+ expect(scratch.innerHTML).to.eql('<div>Suspended...</div>');
+
+ return resolve().then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div><p>hi</p></div>`);
+ });
+ });
+
+ it('should call effect cleanups', () => {
+ let set;
+ const effectSpy = sinon.spy();
+ const layoutEffectSpy = sinon.spy();
+ const LazyComp = ({ name }) => <div>Hello from {name}</div>;
+
+ /** @type {() => Promise<void>} */
+ let resolve;
+ const Lazy = lazy(() => {
+ const p = new Promise(res => {
+ resolve = () => {
+ res({ default: LazyComp });
+ return p;
+ };
+ });
+
+ return p;
+ });
+
+ const Parent = ({ children }) => {
+ const [state, setState] = useState(false);
+ set = setState;
+ useEffect(() => {
+ return () => {
+ effectSpy();
+ };
+ }, []);
+
+ useLayoutEffect(() => {
+ return () => {
+ layoutEffectSpy();
+ };
+ }, []);
+
+ return state ? (
+ <div>{children}</div>
+ ) : (
+ <div>
+ <p>hi</p>
+ </div>
+ );
+ };
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Parent>
+ <Lazy name="LazyComp" />
+ </Parent>
+ </Suspense>,
+ scratch
+ );
+
+ set(true);
+ rerender();
+ expect(scratch.innerHTML).to.eql('<div>Suspended...</div>');
+ expect(effectSpy).to.be.calledOnce;
+ expect(layoutEffectSpy).to.be.calledOnce;
+
+ return resolve().then(() => {
+ rerender();
+ expect(effectSpy).to.be.calledOnce;
+ expect(layoutEffectSpy).to.be.calledOnce;
+ expect(scratch.innerHTML).to.eql(`<div><p>hi</p></div>`);
+ });
+ });
+
+ it('should support a call to setState before rendering the fallback', () => {
+ const LazyComp = ({ name }) => <div>Hello from {name}</div>;
+
+ /** @type {() => Promise<void>} */
+ let resolve;
+ const Lazy = lazy(() => {
+ const p = new Promise(res => {
+ resolve = () => {
+ res({ default: LazyComp });
+ return p;
+ };
+ });
+
+ return p;
+ });
+
+ /** @type {(Object) => void} */
+ let setState;
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {};
+ setState = this.setState.bind(this);
+ }
+ render(props, state) {
+ return (
+ <Fragment>
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Lazy name="LazyComp" />
+ </Suspense>
+ </Fragment>
+ );
+ }
+ }
+
+ render(<App />, scratch); // Render initial state
+
+ setState({ foo: 'bar' });
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return resolve().then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Hello from LazyComp</div>`);
+ });
+ });
+
+ it('lazy should forward refs', () => {
+ const LazyComp = () => <div>Hello from LazyComp</div>;
+ let ref = {};
+
+ /** @type {() => Promise<void>} */
+ let resolve;
+ const Lazy = lazy(() => {
+ const p = new Promise(res => {
+ resolve = () => {
+ res({ default: LazyComp });
+ return p;
+ };
+ });
+
+ return p;
+ });
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Lazy ref={ref} />
+ </Suspense>,
+ scratch
+ );
+ rerender();
+
+ return resolve().then(() => {
+ rerender();
+ expect(ref.current.constructor).to.equal(LazyComp);
+ });
+ });
+
+ it('should suspend when a promise is thrown', () => {
+ class ClassWrapper extends Component {
+ render(props) {
+ return <div id="class-wrapper">{props.children}</div>;
+ }
+ }
+
+ const FuncWrapper = props => <div id="func-wrapper">{props.children}</div>;
+
+ const [Suspender, suspend] = createSuspender(() => <div>Hello</div>);
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <ClassWrapper>
+ <FuncWrapper>
+ <Suspender />
+ </FuncWrapper>
+ </ClassWrapper>
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(
+ `<div id="class-wrapper"><div id="func-wrapper"><div>Hello</div></div></div>`
+ );
+
+ const [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return resolve(() => <div>Hello2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<div id="class-wrapper"><div id="func-wrapper"><div>Hello2</div></div></div>`
+ );
+ });
+ });
+
+ it('should not call lifecycle methods of an initially suspending component', () => {
+ let componentWillMount = sinon.spy();
+ let componentDidMount = sinon.spy();
+ let componentWillUnmount = sinon.spy();
+
+ /** @type {() => Promise<void>} */
+ let resolve;
+ let resolved = false;
+ const promise = new Promise(_resolve => {
+ resolve = () => {
+ resolved = true;
+ _resolve();
+ return promise;
+ };
+ });
+
+ class LifecycleSuspender extends Component {
+ render() {
+ if (!resolved) {
+ throw promise;
+ }
+ return <div>Lifecycle</div>;
+ }
+ componentWillMount() {
+ componentWillMount();
+ }
+ componentDidMount() {
+ componentDidMount();
+ }
+ componentWillUnmount() {
+ componentWillUnmount();
+ }
+ }
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <LifecycleSuspender />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(``);
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.not.have.been.called;
+ expect(componentWillUnmount).to.not.have.been.called;
+
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.not.have.been.called;
+ expect(componentWillUnmount).to.not.have.been.called;
+
+ return resolve().then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Lifecycle</div>`);
+
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ expect(componentWillUnmount).to.not.have.been.called;
+ });
+ });
+
+ it('should properly call lifecycle methods and maintain state of a delayed suspending component', () => {
+ let componentWillMount = sinon.spy();
+ let componentDidMount = sinon.spy();
+ let componentDidUpdate = sinon.spy();
+ let componentWillUnmount = sinon.spy();
+
+ /** @type {() => void} */
+ let increment;
+
+ /** @type {() => Promise<void>} */
+ let resolve;
+ let resolved = false;
+ const promise = new Promise(_resolve => {
+ resolve = () => {
+ resolved = true;
+ _resolve();
+ return promise;
+ };
+ });
+
+ class LifecycleSuspender extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { count: 0 };
+
+ increment = () => this.setState(({ count }) => ({ count: count + 1 }));
+ }
+ render() {
+ if (this.state.count == 2 && !resolved) {
+ throw promise;
+ }
+
+ return (
+ <Fragment>
+ <p>Count: {this.state.count}</p>
+ </Fragment>
+ );
+ }
+ componentWillMount() {
+ componentWillMount();
+ }
+ componentDidMount() {
+ componentDidMount();
+ }
+ componentWillUnmount() {
+ componentWillUnmount();
+ }
+ componentDidUpdate() {
+ componentDidUpdate();
+ }
+ }
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <LifecycleSuspender />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<p>Count: 0</p>`);
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ expect(componentDidUpdate).to.not.have.been.called;
+ expect(componentWillUnmount).to.not.have.been.called;
+
+ increment();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<p>Count: 1</p>`);
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ expect(componentDidUpdate).to.have.been.calledOnce;
+ expect(componentWillUnmount).to.not.have.been.called;
+
+ increment();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ expect(componentDidUpdate).to.have.been.calledOnce;
+ expect(componentWillUnmount).to.not.have.been.called;
+
+ return resolve().then(() => {
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<p>Count: 2</p>`);
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ // TODO: This is called thrice since the cDU queued up after the second
+ // increment is never cleared once the component suspends. So when it
+ // resumes and the component is rerendered, we queue up another cDU so
+ // cDU is called an extra time.
+ expect(componentDidUpdate).to.have.been.calledThrice;
+ expect(componentWillUnmount).to.not.have.been.called;
+ });
+ });
+
+ it('should not call lifecycle methods when a sibling suspends', () => {
+ let componentWillMount = sinon.spy();
+ let componentDidMount = sinon.spy();
+ let componentWillUnmount = sinon.spy();
+ class LifecycleLogger extends Component {
+ render() {
+ return <div>Lifecycle</div>;
+ }
+ componentWillMount() {
+ componentWillMount();
+ }
+ componentDidMount() {
+ componentDidMount();
+ }
+ componentWillUnmount() {
+ componentWillUnmount();
+ }
+ }
+
+ const [Suspender, suspend] = createSuspender(() => <div>Suspense</div>);
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Suspender />
+ <LifecycleLogger />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspense</div><div>Lifecycle</div>`);
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ expect(componentWillUnmount).to.not.have.been.called;
+
+ const [resolve] = suspend();
+
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ expect(componentWillUnmount).to.not.have.been.called;
+
+ return resolve(() => <div>Suspense 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense 2</div><div>Lifecycle</div>`
+ );
+
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ expect(componentWillUnmount).to.not.have.been.called;
+ });
+ });
+
+ it("should call fallback's lifecycle methods when suspending", () => {
+ class LifecycleLogger extends Component {
+ render() {
+ return <div>Lifecycle</div>;
+ }
+ componentWillMount() {}
+ componentDidMount() {}
+ componentWillUnmount() {}
+ }
+
+ const componentWillMount = sinon.spy(
+ LifecycleLogger.prototype,
+ 'componentWillMount'
+ );
+ const componentDidMount = sinon.spy(
+ LifecycleLogger.prototype,
+ 'componentDidMount'
+ );
+ const componentWillUnmount = sinon.spy(
+ LifecycleLogger.prototype,
+ 'componentWillUnmount'
+ );
+
+ const [Suspender, suspend] = createSuspender(() => <div>Suspense</div>);
+
+ render(
+ <Suspense fallback={<LifecycleLogger />}>
+ <Suspender />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspense</div>`);
+ expect(componentWillMount).to.not.have.been.called;
+ expect(componentDidMount).to.not.have.been.called;
+ expect(componentWillUnmount).to.not.have.been.called;
+
+ const [resolve] = suspend();
+
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Lifecycle</div>`);
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ expect(componentWillUnmount).to.not.have.been.called;
+
+ return resolve(() => <div>Suspense 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Suspense 2</div>`);
+
+ expect(componentWillMount).to.have.been.calledOnce;
+ expect(componentDidMount).to.have.been.calledOnce;
+ expect(componentWillUnmount).to.have.been.calledOnce;
+ });
+ });
+
+ it('should keep state of siblings when suspending', () => {
+ /** @type {(state: { s: string }) => void} */
+ let setState;
+ class Stateful extends Component {
+ constructor(props) {
+ super(props);
+ setState = this.setState.bind(this);
+ this.state = { s: 'initial' };
+ }
+ render(props, state) {
+ return <div>Stateful: {state.s}</div>;
+ }
+ }
+
+ const [Suspender, suspend] = createSuspender(() => <div>Suspense</div>);
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Suspender />
+ <Stateful />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense</div><div>Stateful: initial</div>`
+ );
+
+ setState({ s: 'first' });
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense</div><div>Stateful: first</div>`
+ );
+
+ const [resolve] = suspend();
+
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return resolve(() => <div>Suspense 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense 2</div><div>Stateful: first</div>`
+ );
+ });
+ });
+
+ it('should allow children to update state while suspending', () => {
+ /** @type {(state: { s: string }) => void} */
+ let setState;
+ class Stateful extends Component {
+ constructor(props) {
+ super(props);
+ setState = this.setState.bind(this);
+ this.state = { s: 'initial' };
+ }
+ render(props, state) {
+ return <div>Stateful: {state.s}</div>;
+ }
+ }
+
+ const [Suspender, suspend] = createSuspender(() => <div>Suspense</div>);
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Suspender />
+ <Stateful />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense</div><div>Stateful: initial</div>`
+ );
+
+ setState({ s: 'first' });
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense</div><div>Stateful: first</div>`
+ );
+
+ const [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ setState({ s: 'second' });
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return resolve(() => <div>Suspense 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense 2</div><div>Stateful: second</div>`
+ );
+ });
+ });
+
+ it('should allow siblings of Suspense to update state while suspending', () => {
+ /** @type {(state: { s: string }) => void} */
+ let setState;
+ class Stateful extends Component {
+ constructor(props) {
+ super(props);
+ setState = this.setState.bind(this);
+ this.state = { s: 'initial' };
+ }
+ render(props, state) {
+ return <div>Stateful: {state.s}</div>;
+ }
+ }
+
+ const [Suspender, suspend] = createSuspender(() => <div>Suspense</div>);
+
+ render(
+ <Fragment>
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Suspender />
+ </Suspense>
+ <Stateful />
+ </Fragment>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense</div><div>Stateful: initial</div>`
+ );
+
+ setState({ s: 'first' });
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense</div><div>Stateful: first</div>`
+ );
+
+ const [resolve] = suspend();
+
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspended...</div><div>Stateful: first</div>`
+ );
+
+ setState({ s: 'second' });
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspended...</div><div>Stateful: second</div>`
+ );
+
+ return resolve(() => <div>Suspense 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<div>Suspense 2</div><div>Stateful: second</div>`
+ );
+ });
+ });
+
+ it('should suspend with custom error boundary', () => {
+ const [Suspender, suspend] = createSuspender(() => (
+ <div>within error boundary</div>
+ ));
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Catcher>
+ <Suspender />
+ </Catcher>
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div>within error boundary</div>`);
+
+ const [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return resolve(() => <div>within error boundary 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>within error boundary 2</div>`);
+ });
+ });
+
+ it('should allow multiple sibling children to suspend', () => {
+ const [Suspender1, suspend1] = createSuspender(() => (
+ <div>Hello first</div>
+ ));
+ const [Suspender2, suspend2] = createSuspender(() => (
+ <div>Hello second</div>
+ ));
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Catcher>
+ <Suspender1 />
+ <Suspender2 />
+ </Catcher>
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Hello first</div><div>Hello second</div>`
+ );
+ expect(Suspender1.prototype.render).to.have.been.calledOnce;
+ expect(Suspender2.prototype.render).to.have.been.calledOnce;
+
+ const [resolve1] = suspend1();
+ const [resolve2] = suspend2();
+ expect(Suspender1.prototype.render).to.have.been.calledOnce;
+ expect(Suspender2.prototype.render).to.have.been.calledOnce;
+
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+ expect(Suspender1.prototype.render).to.have.been.calledTwice;
+ expect(Suspender2.prototype.render).to.have.been.calledTwice;
+
+ return resolve1(() => <div>Hello first 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+ expect(Suspender1.prototype.render).to.have.been.calledTwice;
+ expect(Suspender2.prototype.render).to.have.been.calledTwice;
+
+ return resolve2(() => <div>Hello second 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<div>Hello first 2</div><div>Hello second 2</div>`
+ );
+ expect(Suspender1.prototype.render).to.have.been.calledThrice;
+ expect(Suspender2.prototype.render).to.have.been.calledThrice;
+ });
+ });
+ });
+
+ it('should call multiple nested sibling suspending components render in one go', () => {
+ const [Suspender1, suspend1] = createSuspender(() => (
+ <div>Hello first</div>
+ ));
+ const [Suspender2, suspend2] = createSuspender(() => (
+ <div>Hello second</div>
+ ));
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Catcher>
+ <Suspender1 />
+ <div>
+ <Suspender2 />
+ </div>
+ </Catcher>
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>Hello first</div><div><div>Hello second</div></div>`
+ );
+ expect(Suspender1.prototype.render).to.have.been.calledOnce;
+ expect(Suspender2.prototype.render).to.have.been.calledOnce;
+
+ const [resolve1] = suspend1();
+ const [resolve2] = suspend2();
+ expect(Suspender1.prototype.render).to.have.been.calledOnce;
+ expect(Suspender2.prototype.render).to.have.been.calledOnce;
+
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+ expect(Suspender1.prototype.render).to.have.been.calledTwice;
+ expect(Suspender2.prototype.render).to.have.been.calledTwice;
+
+ return resolve1(() => <div>Hello first 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+ expect(Suspender1.prototype.render).to.have.been.calledTwice;
+ expect(Suspender2.prototype.render).to.have.been.calledTwice;
+
+ return resolve2(() => <div>Hello second 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<div>Hello first 2</div><div><div>Hello second 2</div></div>`
+ );
+ expect(Suspender1.prototype.render).to.have.been.calledThrice;
+ expect(Suspender2.prototype.render).to.have.been.calledThrice;
+ });
+ });
+ });
+
+ it('should support text directly under Suspense', () => {
+ const [Suspender, suspend] = createSuspender(() => <div>Hello</div>);
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ Text
+ {/* Adding a <div> here will make things work... */}
+ <Suspender />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`Text<div>Hello</div>`);
+
+ const [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return resolve(() => <div>Hello 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`Text<div>Hello 2</div>`);
+ });
+ });
+
+ it('should support to change DOM tag directly under suspense', () => {
+ /** @type {(state: {tag: string}) => void} */
+ let setState;
+ class StatefulComp extends Component {
+ constructor(props) {
+ super(props);
+ setState = this.setState.bind(this);
+ this.state = {
+ tag: props.defaultTag
+ };
+ }
+ render(props, { tag: Tag }) {
+ return <Tag>Stateful</Tag>;
+ }
+ }
+
+ const [Suspender, suspend] = createSuspender(() => <div>Hello</div>);
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <StatefulComp defaultTag="div" />
+ <Suspender />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div>Stateful</div><div>Hello</div>`);
+
+ const [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ setState({ tag: 'article' });
+
+ return resolve(() => <div>Hello 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<article>Stateful</article><div>Hello 2</div>`
+ );
+ });
+ });
+
+ it('should only suspend the most inner Suspend', () => {
+ const [Suspender, suspend] = createSuspender(() => <div>Hello</div>);
+
+ render(
+ <Suspense fallback={<div>Suspended... 1</div>}>
+ Not suspended...
+ <Suspense fallback={<div>Suspended... 2</div>}>
+ <Catcher>
+ <Suspender />
+ </Catcher>
+ </Suspense>
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`Not suspended...<div>Hello</div>`);
+
+ const [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `Not suspended...<div>Suspended... 2</div>`
+ );
+
+ return resolve(() => <div>Hello 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`Not suspended...<div>Hello 2</div>`);
+ });
+ });
+
+ it('should throw when missing Suspense', () => {
+ const [Suspender, suspend] = createSuspender(() => <div>Hello</div>);
+
+ render(
+ <Catcher>
+ <Suspender />
+ </Catcher>,
+ scratch
+ );
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Hello</div>`);
+
+ suspend();
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Catcher did catch: {Promise}</div>`);
+ });
+
+ it("should throw when lazy's loader throws", () => {
+ /** @type {() => Promise<any>} */
+ let reject;
+ const ThrowingLazy = lazy(() => {
+ const prom = new Promise((res, rej) => {
+ reject = () => {
+ rej(new Error("Thrown in lazy's loader..."));
+ return prom;
+ };
+ });
+
+ return prom;
+ });
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Catcher>
+ <ThrowingLazy />
+ </Catcher>
+ </Suspense>,
+ scratch
+ );
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return reject().then(
+ () => {
+ expect.fail('Suspended promises resolved instead of rejected.');
+ },
+ () => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<div>Catcher did catch: Thrown in lazy's loader...</div>`
+ );
+ }
+ );
+ });
+
+ it('should support null fallback', () => {
+ const [Suspender, suspend] = createSuspender(() => <div>Hello</div>);
+
+ render(
+ <div id="wrapper">
+ <Suspense fallback={null}>
+ <div id="inner">
+ <Suspender />
+ </div>
+ </Suspense>
+ </div>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal(
+ `<div id="wrapper"><div id="inner"><div>Hello</div></div></div>`
+ );
+
+ const [resolve] = suspend();
+ rerender();
+ expect(scratch.innerHTML).to.equal(`<div id="wrapper"></div>`);
+
+ return resolve(() => <div>Hello2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ `<div id="wrapper"><div id="inner"><div>Hello2</div></div></div>`
+ );
+ });
+ });
+
+ it('should support suspending multiple times', () => {
+ const [Suspender, suspend] = createSuspender(() => (
+ <div>initial render</div>
+ ));
+ const Loading = () => <div>Suspended...</div>;
+
+ render(
+ <Suspense fallback={<Loading />}>
+ <Suspender />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div>initial render</div>`);
+
+ let [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return resolve(() => <div>Hello1</div>)
+ .then(() => {
+ // Rerender promise resolution
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Hello1</div>`);
+
+ // suspend again
+ [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ return resolve(() => <div>Hello2</div>);
+ })
+ .then(() => {
+ // Rerender promise resolution
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>Hello2</div>`);
+ });
+ });
+
+ it("should correctly render when a suspended component's child also suspends", () => {
+ const [Suspender1, suspend1] = createSuspender(() => <div>Hello1</div>);
+ const [LazyChild, resolveChild] = createLazy();
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Suspender1 />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(`<div>Hello1</div>`);
+
+ let [resolve1] = suspend1();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Suspended...</div>');
+
+ return resolve1(() => <LazyChild />)
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Suspended...</div>');
+
+ return resolveChild(() => <div>All done!</div>);
+ })
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>All done!</div>');
+ });
+ });
+
+ it('should correctly render nested Suspense components', () => {
+ // Inspired by the nested-suspense demo from #1865
+ // TODO: Explore writing a test that varies the loading orders
+
+ const [Lazy1, resolve1] = createLazy();
+ const [Lazy2, resolve2] = createLazy();
+ const [Lazy3, resolve3] = createLazy();
+
+ const Loading = () => <div>Suspended...</div>;
+ const loadingHtml = `<div>Suspended...</div>`;
+
+ render(
+ <Suspense fallback={<Loading />}>
+ <Lazy1 />
+ <div>
+ <Suspense fallback={<Loading />}>
+ <Lazy2 />
+ </Suspense>
+ <Lazy3 />
+ </div>
+ <b>4</b>
+ </Suspense>,
+ scratch
+ );
+ rerender(); // Rerender with the fallback HTML
+
+ expect(scratch.innerHTML).to.equal(loadingHtml);
+
+ return resolve1(() => <b>1</b>)
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(loadingHtml);
+
+ return resolve3(() => <b>3</b>);
+ })
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ `<b>1</b><div>${loadingHtml}<b>3</b></div><b>4</b>`
+ );
+
+ return resolve2(() => <b>2</b>);
+ })
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ `<b>1</b><div><b>2</b><b>3</b></div><b>4</b>`
+ );
+ });
+ });
+
+ it('should correctly render nested Suspense components without intermediate DOM #2747', () => {
+ const [ProfileDetails, resolveDetails] = createLazy();
+ const [ProfileTimeline, resolveTimeline] = createLazy();
+
+ function ProfilePage() {
+ return (
+ <Suspense fallback={<h1>Loading profile...</h1>}>
+ <ProfileDetails />
+ <Suspense fallback={<h2>Loading posts...</h2>}>
+ <ProfileTimeline />
+ </Suspense>
+ </Suspense>
+ );
+ }
+
+ render(<ProfilePage />, scratch);
+ rerender(); // Render fallback
+
+ expect(scratch.innerHTML).to.equal('<h1>Loading profile...</h1>');
+
+ return resolveDetails(() => <h1>Ringo Starr</h1>)
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<h1>Ringo Starr</h1><h2>Loading posts...</h2>'
+ );
+
+ return resolveTimeline(() => <p>Timeline details</p>);
+ })
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<h1>Ringo Starr</h1><p>Timeline details</p>'
+ );
+ });
+ });
+
+ it('should correctly render Suspense components inside Fragments', () => {
+ // Issue #2106.
+
+ const [Lazy1, resolve1] = createLazy();
+ const [Lazy2, resolve2] = createLazy();
+ const [Lazy3, resolve3] = createLazy();
+
+ const Loading = () => <div>Suspended...</div>;
+ const loadingHtml = `<div>Suspended...</div>`;
+
+ render(
+ <Fragment>
+ <Suspense fallback={<Loading />}>
+ <Lazy1 />
+ </Suspense>
+ <Fragment>
+ <Suspense fallback={<Loading />}>
+ <Lazy2 />
+ </Suspense>
+ </Fragment>
+ <Suspense fallback={<Loading />}>
+ <Lazy3 />
+ </Suspense>
+ </Fragment>,
+ scratch
+ );
+
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `${loadingHtml}${loadingHtml}${loadingHtml}`
+ );
+
+ return resolve2(() => <span>2</span>)
+ .then(() => {
+ return resolve1(() => <span>1</span>);
+ })
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>1</span><span>2</span>${loadingHtml}`
+ );
+ return resolve3(() => <span>3</span>);
+ })
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ `<span>1</span><span>2</span><span>3</span>`
+ );
+ });
+ });
+
+ it('should not render any of the children if one child suspends', () => {
+ const [Lazy, resolve] = createLazy();
+
+ const Loading = () => <div>Suspended...</div>;
+ const loadingHtml = `<div>Suspended...</div>`;
+
+ render(
+ <Suspense fallback={<Loading />}>
+ <Lazy />
+ <div>World</div>
+ </Suspense>,
+ scratch
+ );
+ rerender();
+ expect(scratch.innerHTML).to.eql(loadingHtml);
+
+ return resolve(() => <div>Hello</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(`<div>Hello</div><div>World</div>`);
+ });
+ });
+
+ it('should render correctly when multiple children suspend with the same promise', () => {
+ /** @type {() => Promise<void>} */
+ let resolve;
+ let resolved = false;
+ const promise = new Promise(_resolve => {
+ resolve = () => {
+ resolved = true;
+ _resolve();
+ return promise;
+ };
+ });
+
+ const Child = props => {
+ if (!resolved) {
+ throw promise;
+ }
+ return props.children;
+ };
+
+ const Loading = () => <div>Suspended...</div>;
+ const loadingHtml = `<div>Suspended...</div>`;
+
+ render(
+ <Suspense fallback={<Loading />}>
+ <Child>
+ <div>A</div>
+ </Child>
+ <Child>
+ <div>B</div>
+ </Child>
+ </Suspense>,
+ scratch
+ );
+ rerender();
+ expect(scratch.innerHTML).to.eql(loadingHtml);
+
+ return resolve().then(() => {
+ resolved = true;
+ rerender();
+ expect(scratch.innerHTML).to.equal(`<div>A</div><div>B</div>`);
+ });
+ });
+
+ it('should un-suspend when suspender unmounts', () => {
+ const [Suspender, suspend] = createSuspender(() => <div>Suspender</div>);
+
+ let hide;
+
+ class Conditional extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: true };
+
+ hide = () => {
+ this.setState({ show: false });
+ };
+ }
+
+ render(props, { show }) {
+ return (
+ <div>
+ conditional {show ? 'show' : 'hide'}
+ {show && <Suspender />}
+ </div>
+ );
+ }
+ }
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Conditional />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(
+ `<div>conditional show<div>Suspender</div></div>`
+ );
+ expect(Suspender.prototype.render).to.have.been.calledOnce;
+
+ suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ hide();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>conditional hide</div>`);
+ });
+
+ it('should allow suspended multiple times', async () => {
+ const [Suspender1, suspend1] = createSuspender(() => (
+ <div>Suspender 1</div>
+ ));
+ const [Suspender2, suspend2] = createSuspender(() => (
+ <div>Suspender 2</div>
+ ));
+
+ let hide, resolve;
+
+ class Conditional extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: true };
+
+ hide = () => {
+ this.setState({ show: false });
+ };
+ }
+
+ render(props, { show }) {
+ return (
+ <div>
+ conditional {show ? 'show' : 'hide'}
+ {show && (
+ <Suspense fallback="Suspended">
+ <Suspender1 />
+ <Suspender2 />
+ </Suspense>
+ )}
+ </div>
+ );
+ }
+ }
+
+ render(<Conditional />, scratch);
+ expect(scratch.innerHTML).to.eql(
+ '<div>conditional show<div>Suspender 1</div><div>Suspender 2</div></div>'
+ );
+
+ resolve = suspend1()[0];
+ rerender();
+ expect(scratch.innerHTML).to.eql('<div>conditional showSuspended</div>');
+
+ await resolve(() => <div>Done 1</div>);
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ '<div>conditional show<div>Done 1</div><div>Suspender 2</div></div>'
+ );
+
+ resolve = suspend2()[0];
+ rerender();
+ expect(scratch.innerHTML).to.eql('<div>conditional showSuspended</div>');
+
+ await resolve(() => <div>Done 2</div>);
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ '<div>conditional show<div>Done 1</div><div>Done 2</div></div>'
+ );
+
+ hide();
+ rerender();
+ expect(scratch.innerHTML).to.eql('<div>conditional hide</div>');
+ });
+
+ it('should allow same component to be suspended multiple times', async () => {
+ const cache = { '1': true };
+ function Lazy({ value }) {
+ if (!cache[value]) {
+ throw new Promise(resolve => {
+ cache[value] = resolve;
+ });
+ }
+ return <div>{`Lazy ${value}`}</div>;
+ }
+
+ let hide, setValue;
+
+ class Conditional extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: true, value: '1' };
+
+ hide = () => {
+ this.setState({ show: false });
+ };
+ setValue = value => {
+ this.setState({ value });
+ };
+ }
+
+ render(props, { show, value }) {
+ return (
+ <div>
+ conditional {show ? 'show' : 'hide'}
+ {show && (
+ <Suspense fallback="Suspended">
+ <Lazy value={value} />
+ </Suspense>
+ )}
+ </div>
+ );
+ }
+ }
+
+ render(<Conditional />, scratch);
+ expect(scratch.innerHTML).to.eql(
+ '<div>conditional show<div>Lazy 1</div></div>'
+ );
+
+ setValue('2');
+ rerender();
+
+ expect(scratch.innerHTML).to.eql('<div>conditional showSuspended</div>');
+
+ await cache[2]();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ '<div>conditional show<div>Lazy 2</div></div>'
+ );
+
+ setValue('3');
+ rerender();
+
+ expect(scratch.innerHTML).to.eql('<div>conditional showSuspended</div>');
+
+ await cache[3]();
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ '<div>conditional show<div>Lazy 3</div></div>'
+ );
+
+ hide();
+ rerender();
+ expect(scratch.innerHTML).to.eql('<div>conditional hide</div>');
+ });
+
+ it('should allow resolve suspense promise after unmounts', async () => {
+ const [Suspender, suspend] = createSuspender(() => <div>Suspender</div>);
+
+ let hide, resolve;
+
+ class Conditional extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: true };
+
+ hide = () => {
+ this.setState({ show: false });
+ };
+ }
+
+ render(props, { show }) {
+ return (
+ <div>
+ conditional {show ? 'show' : 'hide'}
+ {show && (
+ <Suspense fallback="Suspended">
+ <Suspender />
+ </Suspense>
+ )}
+ </div>
+ );
+ }
+ }
+
+ render(<Conditional />, scratch);
+ expect(scratch.innerHTML).to.eql(
+ '<div>conditional show<div>Suspender</div></div>'
+ );
+
+ resolve = suspend()[0];
+ rerender();
+ expect(scratch.innerHTML).to.eql('<div>conditional showSuspended</div>');
+
+ hide();
+ rerender();
+ expect(scratch.innerHTML).to.eql('<div>conditional hide</div>');
+
+ await resolve(() => <div>Done</div>);
+ rerender();
+ expect(scratch.innerHTML).to.eql('<div>conditional hide</div>');
+ });
+
+ it('should support updating state while suspended', async () => {
+ const [Suspender, suspend] = createSuspender(() => <div>Suspender</div>);
+
+ let increment;
+
+ class Updater extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { i: 0 };
+
+ increment = () => {
+ this.setState(({ i }) => ({ i: i + 1 }));
+ };
+ }
+
+ render(props, { i }) {
+ return (
+ <div>
+ i: {i}
+ <Suspender />
+ </div>
+ );
+ }
+ }
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Updater />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div>i: 0<div>Suspender</div></div>`);
+ expect(Suspender.prototype.render).to.have.been.calledOnce;
+
+ const [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ increment();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ await resolve(() => <div>Resolved</div>);
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(`<div>i: 1<div>Resolved</div></div>`);
+
+ increment();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(`<div>i: 2<div>Resolved</div></div>`);
+ });
+
+ it('should call componentWillUnmount on a suspended component', () => {
+ const cWUSpy = sinon.spy();
+
+ // eslint-disable-next-line react/require-render-return
+ class Suspender extends Component {
+ render() {
+ throw new Promise(() => {});
+ }
+ }
+
+ Suspender.prototype.componentWillUnmount = cWUSpy;
+
+ let hide;
+
+ let suspender = null;
+ let suspenderRef = s => {
+ // skip null values as we want to keep the ref even after unmount
+ if (s) {
+ suspender = s;
+ }
+ };
+
+ class Conditional extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: true };
+
+ hide = () => {
+ this.setState({ show: false });
+ };
+ }
+
+ render(props, { show }) {
+ return (
+ <div>
+ conditional {show ? 'show' : 'hide'}
+ {show && <Suspender ref={suspenderRef} />}
+ </div>
+ );
+ }
+ }
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Conditional />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div>conditional show</div>`);
+ expect(cWUSpy).to.not.have.been.called;
+
+ hide();
+ rerender();
+
+ expect(cWUSpy).to.have.been.calledOnce;
+ expect(suspender).not.to.be.undefined;
+ expect(suspender).not.to.be.null;
+ expect(cWUSpy.getCall(0).thisValue).to.eql(suspender);
+ expect(scratch.innerHTML).to.eql(`<div>conditional hide</div>`);
+ });
+
+ it('should support sCU=false when un-suspending', () => {
+ // See #2176 #2125
+ const [Suspender, suspend] = createSuspender(() => <div>Hello</div>);
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ Text
+ {/* Adding a <div> here will make things work... */}
+ <Suspender />
+ </Suspense>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`Text<div>Hello</div>`);
+
+ const [resolve] = suspend();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div>Suspended...</div>`);
+
+ Suspender.prototype.shouldComponentUpdate = () => false;
+
+ return resolve(() => <div>Hello 2</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`Text<div>Hello 2</div>`);
+ });
+ });
+
+ // TODO: Revisit later. Consider using an "options.commit" plugin to detect
+ // when a suspended component has rerendered and trigger a rerender on the
+ // parent Suspense
+ it.skip('should allow suspended children to update', () => {
+ const log = [];
+ class Logger extends Component {
+ constructor(props) {
+ super(props);
+ log.push('construct');
+ }
+
+ render({ children }) {
+ log.push('render');
+ return children;
+ }
+ }
+
+ let suspender;
+ class Suspender extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { promise: new Promise(() => {}) };
+ suspender = this;
+ }
+
+ unsuspend() {
+ this.setState({ promise: null });
+ }
+
+ render() {
+ if (this.state.promise) {
+ throw this.state.promise;
+ }
+
+ return <div>Suspender un-suspended</div>;
+ }
+ }
+
+ render(
+ <section>
+ <Suspense fallback={<div>fallback</div>}>
+ <Suspender />
+ <Logger />
+ </Suspense>
+ </section>,
+ scratch
+ );
+
+ expect(log).to.eql(['construct', 'render']);
+ expect(scratch.innerHTML).to.eql('<section></section>');
+
+ // this rerender is needed because of Suspense issuing a forceUpdate itself
+ rerender();
+ expect(scratch.innerHTML).to.eql('<section><div>fallback</div></section>');
+
+ suspender.unsuspend();
+
+ rerender();
+
+ expect(log).to.eql(['construct', 'render', 'render']);
+ expect(scratch.innerHTML).to.eql(
+ '<section><div>Suspender un-suspended</div></section>'
+ );
+ });
+
+ // TODO: Revisit later. Consider using an "options.commit" plugin to detect
+ // when a suspended component has rerendered and trigger a rerender on the
+ // parent Suspense
+ it.skip('should allow multiple suspended children to update', () => {
+ function createSuspender() {
+ let suspender;
+ class Suspender extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { promise: new Promise(() => {}) };
+ suspender = this;
+ }
+
+ unsuspend(content) {
+ this.setState({ promise: null, content });
+ }
+
+ render() {
+ if (this.state.promise) {
+ throw this.state.promise;
+ }
+
+ return this.state.content;
+ }
+ }
+ return [content => suspender.unsuspend(content), Suspender];
+ }
+
+ const [unsuspender1, Suspender1] = createSuspender();
+ const [unsuspender2, Suspender2] = createSuspender();
+
+ render(
+ <section>
+ <Suspense fallback={<div>fallback</div>}>
+ <Suspender1 />
+ <div>
+ <Suspender2 />
+ </div>
+ </Suspense>
+ </section>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql('<section><div></div></section>');
+
+ // this rerender is needed because of Suspense issuing a forceUpdate itself
+ rerender();
+ expect(scratch.innerHTML).to.eql('<section><div>fallback</div></section>');
+
+ unsuspender1(
+ <>
+ <div>Suspender un-suspended 1</div>
+ <div>Suspender un-suspended 2</div>
+ </>
+ );
+
+ rerender();
+ expect(scratch.innerHTML).to.eql('<section><div>fallback</div></section>');
+
+ unsuspender2(<div>Suspender 2</div>);
+
+ rerender();
+ expect(scratch.innerHTML).to.eql(
+ '<section><div>Suspender un-suspended 1</div><div>Suspender un-suspended 2</div><div><div>Suspender 2</div></div></section>'
+ );
+ });
+
+ // TODO: Revisit later. Consider using an "options.commit" plugin to detect
+ // when a suspended component has rerendered and trigger a rerender on the
+ // parent Suspense
+ it.skip('should allow suspended children children to update', () => {
+ function Suspender({ promise, content }) {
+ if (promise) {
+ throw promise;
+ }
+ return content;
+ }
+
+ let parent;
+ class Parent extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { promise: new Promise(() => {}), condition: true };
+ parent = this;
+ }
+
+ render() {
+ const { condition, promise, content } = this.state;
+ if (condition) {
+ return <Suspender promise={promise} content={content} />;
+ }
+ return <div>Parent</div>;
+ }
+ }
+
+ render(
+ <section>
+ <Suspense fallback={<div>fallback</div>}>
+ <Parent />
+ </Suspense>
+ </section>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql('<section></section>');
+
+ // this rerender is needed because of Suspense issuing a forceUpdate itself
+ rerender();
+ expect(scratch.innerHTML).to.eql('<section><div>fallback</div></section>');
+
+ // hide the <Suspender /> thus unsuspends
+ parent.setState({ condition: false });
+
+ rerender();
+ expect(scratch.innerHTML).to.eql('<section><div>Parent</div></section>');
+
+ // show the <Suspender /> thus re-suspends
+ parent.setState({ condition: true });
+ rerender();
+
+ expect(scratch.innerHTML).to.eql('<section><div>fallback</div></section>');
+
+ // update state so that <Suspender /> no longer suspends
+ parent.setState({ promise: null, content: <div>Content</div> });
+ rerender();
+
+ expect(scratch.innerHTML).to.eql('<section><div>Content</div></section>');
+
+ // hide the <Suspender /> again
+ parent.setState({ condition: false });
+ rerender();
+
+ expect(scratch.innerHTML).to.eql('<section><div>Parent</div></section>');
+ });
+
+ it('should render delayed lazy components through components using shouldComponentUpdate', () => {
+ const [Suspender1, suspend1] = createSuspender(() => <i>1</i>);
+ const [Suspender2, suspend2] = createSuspender(() => <i>2</i>);
+
+ class Blocker extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render(props) {
+ return (
+ <b>
+ <i>a</i>
+ {props.children}
+ <i>d</i>
+ </b>
+ );
+ }
+ }
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Blocker>
+ <Suspender1 />
+ <Suspender2 />
+ </Blocker>
+ </Suspense>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal(
+ '<b><i>a</i><i>1</i><i>2</i><i>d</i></b>'
+ );
+
+ const [resolve1] = suspend1();
+ const [resolve2] = suspend2();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Suspended...</div>');
+
+ return resolve1(() => <i>b</i>)
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Suspended...</div>');
+
+ return resolve2(() => <i>c</i>);
+ })
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<b><i>a</i><i>b</i><i>c</i><i>d</i></b>'
+ );
+ });
+ });
+
+ it('should render initially lazy components through components using shouldComponentUpdate', () => {
+ const [Lazy1, resolve1] = createLazy();
+ const [Lazy2, resolve2] = createLazy();
+
+ class Blocker extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render(props) {
+ return (
+ <b>
+ <i>a</i>
+ {props.children}
+ <i>d</i>
+ </b>
+ );
+ }
+ }
+
+ render(
+ <Suspense fallback={<div>Suspended...</div>}>
+ <Blocker>
+ <Lazy1 />
+ <Lazy2 />
+ </Blocker>
+ </Suspense>,
+ scratch
+ );
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Suspended...</div>');
+
+ return resolve1(() => <i>b</i>)
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>Suspended...</div>');
+
+ return resolve2(() => <i>c</i>);
+ })
+ .then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<b><i>a</i><i>b</i><i>c</i><i>d</i></b>'
+ );
+ });
+ });
+
+ it('should render initially lazy components through createContext', () => {
+ const ctx = createContext(null);
+ const [Lazy, resolve] = createLazy();
+
+ const suspense = (
+ <Suspense fallback={<div>Suspended...</div>}>
+ <ctx.Provider value="123">
+ <ctx.Consumer>{value => <Lazy value={value} />}</ctx.Consumer>
+ </ctx.Provider>
+ </Suspense>
+ );
+
+ render(suspense, scratch);
+ rerender();
+ expect(scratch.innerHTML).to.equal(`<div>Suspended...</div>`);
+
+ return resolve(props => <div>{props.value}</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>123</div>`);
+ });
+ });
+
+ it('should render delayed lazy components through createContext', () => {
+ const ctx = createContext(null);
+ const [Suspender, suspend] = createSuspender(({ value }) => (
+ <span>{value}</span>
+ ));
+
+ const suspense = (
+ <Suspense fallback={<div>Suspended...</div>}>
+ <ctx.Provider value="123">
+ <ctx.Consumer>{value => <Suspender value={value} />}</ctx.Consumer>
+ </ctx.Provider>
+ </Suspense>
+ );
+
+ render(suspense, scratch);
+ expect(scratch.innerHTML).to.equal('<span>123</span>');
+
+ const [resolve] = suspend();
+ rerender();
+ expect(scratch.innerHTML).to.equal(`<div>Suspended...</div>`);
+
+ return resolve(props => <div>{props.value}</div>).then(() => {
+ rerender();
+ expect(scratch.innerHTML).to.eql(`<div>123</div>`);
+ });
+ });
+});
diff --git a/preact/compat/test/browser/svg.test.js b/preact/compat/test/browser/svg.test.js
new file mode 100644
index 0000000..3b45859
--- /dev/null
+++ b/preact/compat/test/browser/svg.test.js
@@ -0,0 +1,94 @@
+import React, { createElement } from 'preact/compat';
+import {
+ setupScratch,
+ teardown,
+ serializeHtml,
+ sortAttributes
+} from '../../../test/_util/helpers';
+
+describe('svg', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should render SVG to string', () => {
+ let svg = (
+ <svg viewBox="0 0 360 360">
+ <path
+ stroke="white"
+ fill="black"
+ d="M347.1 357.9L183.3 256.5 13 357.9V1.7h334.1v356.2zM58.5 47.2v231.4l124.8-74.1 118.3 72.8V47.2H58.5z"
+ />
+ </svg>
+ );
+ // string -> parse
+ expect(svg).to.eql(svg);
+ });
+
+ it('should render SVG to DOM #1', () => {
+ const Demo = () => (
+ <svg viewBox="0 0 360 360">
+ <path
+ stroke="white"
+ fill="black"
+ d="M347.1 357.9L183.3 256.5 L 13 357.9V1.7h334.1v356.2zM58.5 47.2v231.4l124.8-74.1 l 118.3 72.8V47.2H58.5z"
+ />
+ </svg>
+ );
+ React.render(<Demo />, scratch);
+
+ expect(serializeHtml(scratch)).to.equal(
+ sortAttributes(
+ '<svg viewBox="0 0 360 360"><path stroke="white" fill="black" d="M 347.1 357.9 L 183.3 256.5 L 13 357.9 V 1.7 h 334.1 v 356.2 Z M 58.5 47.2 v 231.4 l 124.8 -74.1 l 118.3 72.8 V 47.2 H 58.5 Z"></path></svg>'
+ )
+ );
+ });
+
+ it('should render SVG to DOM #2', () => {
+ React.render(
+ <svg viewBox="0 0 100 100">
+ <text textAnchor="mid">foo</text>
+ <path vectorEffect="non-scaling-stroke" d="M0 0 L100 100" />
+ </svg>,
+ scratch
+ );
+
+ expect(serializeHtml(scratch)).to.equal(
+ sortAttributes(
+ '<svg viewBox="0 0 100 100"><text text-anchor="mid">foo</text><path vector-effect="non-scaling-stroke" d="M 0 0 L 100 100"></path></svg>'
+ )
+ );
+ });
+
+ it('should render correct SVG attribute names to the DOM', () => {
+ React.render(
+ <svg
+ clipPath="value"
+ clipRule="value"
+ clipPathUnits="value"
+ glyphOrientationHorizontal="value"
+ glyphRef="value"
+ markerStart="value"
+ markerHeight="value"
+ markerUnits="value"
+ markerWidth="value"
+ x1="value"
+ xChannelSelector="value"
+ />,
+ scratch
+ );
+
+ expect(serializeHtml(scratch)).to.eql(
+ sortAttributes(
+ '<svg clip-path="value" clip-rule="value" clipPathUnits="value" glyph-orientationhorizontal="value" glyphRef="value" marker-start="value" markerHeight="value" markerUnits="value" markerWidth="value" x1="value" xChannelSelector="value"></svg>'
+ )
+ );
+ });
+});
diff --git a/preact/compat/test/browser/testUtils.js b/preact/compat/test/browser/testUtils.js
new file mode 100644
index 0000000..04ed784
--- /dev/null
+++ b/preact/compat/test/browser/testUtils.js
@@ -0,0 +1,24 @@
+/**
+ * Retrieve a Symbol if supported or use the fallback value
+ * @param {string} name The name of the Symbol to look up
+ * @param {number} fallback Fallback value if Symbols are not supported
+ */
+export function getSymbol(name, fallback) {
+ let out = fallback;
+
+ try {
+ // eslint-disable-next-line
+ if (
+ Function.prototype.toString
+ .call(eval('Symbol.for'))
+ .match(/\[native code\]/)
+ ) {
+ // Concatenate these string literals to prevent the test
+ // harness and/or Babel from modifying the symbol value.
+ // eslint-disable-next-line
+ out = eval('Sym' + 'bol.for("' + name + '")');
+ }
+ } catch (e) {}
+
+ return out;
+}
diff --git a/preact/compat/test/browser/textarea.test.js b/preact/compat/test/browser/textarea.test.js
new file mode 100644
index 0000000..d1c114e
--- /dev/null
+++ b/preact/compat/test/browser/textarea.test.js
@@ -0,0 +1,64 @@
+import React, { render, useState } from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { act } from 'preact/test-utils';
+
+describe('Textarea', () => {
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should alias value to children', () => {
+ render(<textarea value="foo" />, scratch);
+
+ expect(scratch.firstElementChild.value).to.equal('foo');
+ });
+
+ it('should alias defaultValue to children', () => {
+ // TODO: IE11 doesn't update `node.value` when
+ // `node.defaultValue` is set.
+ if (/Trident/.test(navigator.userAgent)) return;
+
+ render(<textarea defaultValue="foo" />, scratch);
+
+ expect(scratch.firstElementChild.value).to.equal('foo');
+ });
+
+ it('should support resetting the value', () => {
+ let set;
+ const App = () => {
+ const [state, setState] = useState('');
+ set = setState;
+ return <textarea value={state} />;
+ };
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal('<textarea></textarea>');
+
+ act(() => {
+ set('hello');
+ });
+ // Note: This looks counterintuitive, but it's working correctly - the value
+ // missing from HTML because innerHTML doesn't serialize form field values.
+ // See demo: https://jsfiddle.net/4had2Lu8
+ // Related renderToString PR: preactjs/preact-render-to-string#161
+ //
+ // This is not true for IE11. It displays the value in
+ // node.innerHTML regardless.
+ if (!/Trident/.test(window.navigator.userAgent)) {
+ expect(scratch.innerHTML).to.equal('<textarea></textarea>');
+ }
+ expect(scratch.firstElementChild.value).to.equal('hello');
+
+ act(() => {
+ set('');
+ });
+ expect(scratch.innerHTML).to.equal('<textarea></textarea>');
+ expect(scratch.firstElementChild.value).to.equal('');
+ });
+});
diff --git a/preact/compat/test/browser/unmountComponentAtNode.test.js b/preact/compat/test/browser/unmountComponentAtNode.test.js
new file mode 100644
index 0000000..bcf87df
--- /dev/null
+++ b/preact/compat/test/browser/unmountComponentAtNode.test.js
@@ -0,0 +1,28 @@
+import React, { createElement, unmountComponentAtNode } from 'preact/compat';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+describe('unmountComponentAtNode', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should unmount a root node', () => {
+ const App = () => <div>foo</div>;
+ React.render(<App />, scratch);
+
+ expect(unmountComponentAtNode(scratch)).to.equal(true);
+ expect(scratch.innerHTML).to.equal('');
+ });
+
+ it('should do nothing if root is not mounted', () => {
+ expect(unmountComponentAtNode(scratch)).to.equal(false);
+ expect(scratch.innerHTML).to.equal('');
+ });
+});
diff --git a/preact/compat/test/browser/unstable_batchedUpdates.test.js b/preact/compat/test/browser/unstable_batchedUpdates.test.js
new file mode 100644
index 0000000..61b2e8a
--- /dev/null
+++ b/preact/compat/test/browser/unstable_batchedUpdates.test.js
@@ -0,0 +1,15 @@
+import { unstable_batchedUpdates } from 'preact/compat';
+
+describe('unstable_batchedUpdates', () => {
+ it('should call the callback', () => {
+ const spy = sinon.spy();
+ unstable_batchedUpdates(spy);
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should call callback with only one arg', () => {
+ const spy = sinon.spy();
+ unstable_batchedUpdates(spy, 'foo', 'bar');
+ expect(spy).to.be.calledWithExactly('foo');
+ });
+});
diff --git a/preact/compat/test/ts/forward-ref.tsx b/preact/compat/test/ts/forward-ref.tsx
new file mode 100644
index 0000000..9a920cb
--- /dev/null
+++ b/preact/compat/test/ts/forward-ref.tsx
@@ -0,0 +1,26 @@
+import React from '../../src';
+
+const MyInput: React.ForwardFn<{ id: string }, { focus(): void }> = (
+ props,
+ ref
+) => {
+ const inputRef = React.useRef<HTMLInputElement>(null);
+
+ React.useImperativeHandle(ref, () => ({
+ focus: () => {
+ if (inputRef.current) {
+ inputRef.current.focus();
+ }
+ }
+ }));
+
+ return <input {...props} ref={inputRef} />;
+};
+
+export const foo = React.forwardRef(MyInput);
+
+export const Bar = React.forwardRef<HTMLDivElement, { children: any }>(
+ (props, ref) => {
+ return <div ref={ref}>{props.children}</div>;
+ }
+);
diff --git a/preact/compat/test/ts/lazy.tsx b/preact/compat/test/ts/lazy.tsx
new file mode 100644
index 0000000..b3797c1
--- /dev/null
+++ b/preact/compat/test/ts/lazy.tsx
@@ -0,0 +1,17 @@
+import * as React from '../../src';
+
+export interface LazyProps {
+ isProp: boolean;
+}
+
+interface LazyState {
+ forState: string;
+}
+export default class IsLazyComponent extends React.Component<
+ LazyProps,
+ LazyState
+> {
+ render({ isProp }: LazyProps) {
+ return <div>{isProp ? 'Super Lazy TRUE' : 'Super Lazy FALSE'}</div>;
+ }
+}
diff --git a/preact/compat/test/ts/memo.tsx b/preact/compat/test/ts/memo.tsx
new file mode 100644
index 0000000..4e89e26
--- /dev/null
+++ b/preact/compat/test/ts/memo.tsx
@@ -0,0 +1,56 @@
+import * as React from '../../src';
+import { expectType } from './utils';
+
+interface MemoProps {
+ required: string;
+ optional?: string;
+ defaulted: string;
+}
+
+interface MemoPropsExceptDefaults {
+ required: string;
+ optional?: string;
+}
+
+const ComponentExceptDefaults = () => <div></div>;
+
+const ReadonlyBaseComponent = (props: Readonly<MemoProps>) => (
+ <div>{props.required + props.optional + props.defaulted}</div>
+);
+ReadonlyBaseComponent.defaultProps = { defaulted: '' };
+
+const BaseComponent = (props: MemoProps) => (
+ <div>{props.required + props.optional + props.defaulted}</div>
+);
+BaseComponent.defaultProps = { defaulted: '' };
+
+// memo for readonly component with default comparison
+const MemoedReadonlyComponent = React.memo(ReadonlyBaseComponent);
+expectType<React.FunctionComponent<MemoProps>>(MemoedReadonlyComponent);
+export const memoedReadonlyComponent = (
+ <MemoedReadonlyComponent required="hi" />
+);
+
+// memo for non-readonly component with default comparison
+const MemoedComponent = React.memo(BaseComponent);
+expectType<React.FunctionComponent<MemoProps>>(MemoedComponent);
+export const memoedComponent = <MemoedComponent required="hi" />;
+
+// memo with custom comparison
+const CustomMemoedComponent = React.memo(BaseComponent, (a, b) => {
+ expectType<MemoProps>(a);
+ expectType<MemoProps>(b);
+ return a.required === b.required;
+});
+expectType<React.FunctionComponent<MemoProps>>(CustomMemoedComponent);
+export const customMemoedComponent = <CustomMemoedComponent required="hi" />;
+
+const MemoedComponentExceptDefaults = React.memo<MemoPropsExceptDefaults>(
+ ComponentExceptDefaults
+);
+expectType<React.FunctionComponent<MemoPropsExceptDefaults>>(
+ MemoedComponentExceptDefaults
+);
+export const memoedComponentExceptDefaults = (
+ <MemoedComponentExceptDefaults required="hi" />
+);
diff --git a/preact/compat/test/ts/react-default.tsx b/preact/compat/test/ts/react-default.tsx
new file mode 100644
index 0000000..f46c0b4
--- /dev/null
+++ b/preact/compat/test/ts/react-default.tsx
@@ -0,0 +1,6 @@
+import React from '../../src';
+class ReactIsh extends React.Component {
+ render() {
+ return <div>Text</div>;
+ }
+}
diff --git a/preact/compat/test/ts/react-star.tsx b/preact/compat/test/ts/react-star.tsx
new file mode 100644
index 0000000..da82690
--- /dev/null
+++ b/preact/compat/test/ts/react-star.tsx
@@ -0,0 +1,7 @@
+// import React from '../../src';
+import * as React from '../../src';
+class ReactIsh extends React.Component {
+ render() {
+ return <div>Text</div>;
+ }
+}
diff --git a/preact/compat/test/ts/scheduler.ts b/preact/compat/test/ts/scheduler.ts
new file mode 100644
index 0000000..999e652
--- /dev/null
+++ b/preact/compat/test/ts/scheduler.ts
@@ -0,0 +1,19 @@
+import {
+ unstable_runWithPriority,
+ unstable_NormalPriority,
+ unstable_LowPriority,
+ unstable_IdlePriority,
+ unstable_UserBlockingPriority,
+ unstable_ImmediatePriority,
+ unstable_now
+} from '../../src';
+
+const noop = () => null;
+unstable_runWithPriority(unstable_IdlePriority, noop);
+unstable_runWithPriority(unstable_LowPriority, noop);
+unstable_runWithPriority(unstable_NormalPriority, noop);
+unstable_runWithPriority(unstable_UserBlockingPriority, noop);
+unstable_runWithPriority(unstable_ImmediatePriority, noop);
+
+if (typeof unstable_now() === 'number') {
+}
diff --git a/preact/compat/test/ts/suspense.tsx b/preact/compat/test/ts/suspense.tsx
new file mode 100644
index 0000000..916dd6b
--- /dev/null
+++ b/preact/compat/test/ts/suspense.tsx
@@ -0,0 +1,52 @@
+import * as React from '../../src';
+
+interface LazyProps {
+ isProp: boolean;
+}
+
+const IsLazyFunctional = (props: LazyProps) => (
+ <div>{props.isProp ? 'Super Lazy TRUE' : 'Super Lazy FALSE'}</div>
+);
+
+const FallBack = () => <div>Still working...</div>;
+/**
+ * Have to mock dynamic import as import() throws a syntax error in the test runner
+ */
+const componentPromise = new Promise<{ default: typeof IsLazyFunctional }>(
+ resolve => {
+ setTimeout(() => {
+ resolve({ default: IsLazyFunctional });
+ }, 800);
+ }
+);
+
+/**
+ * For usage with import:
+ * const IsLazyComp = lazy(() => import('./lazy'));
+ */
+const IsLazyFunc = React.lazy(() => componentPromise);
+
+// Suspense using lazy component
+class SuspensefulFunc extends React.Component {
+ render() {
+ return (
+ <React.Suspense fallback={<FallBack />}>
+ <IsLazyFunc isProp={false} />
+ </React.Suspense>
+ );
+ }
+}
+
+//SuspenseList using lazy components
+function SuspenseListTester(props: any) {
+ return (
+ <React.SuspenseList revealOrder="together">
+ <React.Suspense fallback={<FallBack />}>
+ <IsLazyFunc isProp={false} />
+ </React.Suspense>
+ <React.Suspense fallback={<FallBack />}>
+ <IsLazyFunc isProp={false} />
+ </React.Suspense>
+ </React.SuspenseList>
+ );
+}
diff --git a/preact/compat/test/ts/tsconfig.json b/preact/compat/test/ts/tsconfig.json
new file mode 100644
index 0000000..742a039
--- /dev/null
+++ b/preact/compat/test/ts/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "target": "es6",
+ "module": "es6",
+ "moduleResolution": "node",
+ "lib": [
+ "es6",
+ "dom",
+ ],
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "jsx": "react",
+ "noEmit": true,
+ "allowSyntheticDefaultImports": true
+ },
+ "include": [
+ "./**/*.ts",
+ "./**/*.tsx"
+ ]
+}
diff --git a/preact/compat/test/ts/utils.ts b/preact/compat/test/ts/utils.ts
new file mode 100644
index 0000000..16ec22d
--- /dev/null
+++ b/preact/compat/test/ts/utils.ts
@@ -0,0 +1,4 @@
+/**
+ * Assert the parameter is of a specific type.
+ */
+export const expectType = <T>(_: T): void => undefined;
diff --git a/preact/config/codemod-const.js b/preact/config/codemod-const.js
new file mode 100644
index 0000000..37eee5b
--- /dev/null
+++ b/preact/config/codemod-const.js
@@ -0,0 +1,43 @@
+/* eslint no-console:0 */
+
+/** Find constants (identified by ALL_CAPS_DECLARATIONS), and inline them globally.
+ * This is safe because Preact *only* uses global constants.
+ */
+export default (file, api) => {
+ let j = api.jscodeshift,
+ code = j(file.source),
+ constants = {},
+ found = 0;
+
+ code
+ .find(j.VariableDeclaration)
+ .filter(decl => {
+ for (let i = decl.value.declarations.length; i--; ) {
+ let node = decl.value.declarations[i],
+ name = node.id && node.id.name,
+ init = node.init;
+ if (name && init && name.match(/^[A-Z0-9_$]+$/g) && !init.regex) {
+ if (init.type === 'Literal') {
+ // console.log(`Inlining constant: ${name}=${init.raw}`);
+ found++;
+ constants[name] = init;
+ // remove declaration
+ decl.value.declarations.splice(i, 1);
+ // if it's the last, we'll remove the whole statement
+ return !decl.value.declarations.length;
+ }
+ }
+ }
+ return false;
+ })
+ .remove();
+
+ code
+ .find(j.Identifier)
+ .filter(
+ path => path.value.name && constants.hasOwnProperty(path.value.name)
+ )
+ .replaceWith(path => (found++, constants[path.value.name]));
+
+ return found ? code.toSource({ quote: 'single' }) : null;
+};
diff --git a/preact/config/codemod-let-name.js b/preact/config/codemod-let-name.js
new file mode 100644
index 0000000..5f69411
--- /dev/null
+++ b/preact/config/codemod-let-name.js
@@ -0,0 +1,16 @@
+/**
+ * Restores var names transformed by babel's let block scoping
+ */
+export default (file, api) => {
+ let j = api.jscodeshift;
+ let code = j(file.source);
+
+ // @TODO unsafe, but without it we gain 20b gzipped: https://www.diffchecker.com/bVrOJWTO
+ code
+ .findVariableDeclarators()
+ .filter(d => /^_i/.test(d.value.id.name))
+ .renameTo('i');
+ code.findVariableDeclarators('_key').renameTo('key');
+
+ return code.toSource({ quote: 'single' });
+};
diff --git a/preact/config/codemod-strip-tdz.js b/preact/config/codemod-strip-tdz.js
new file mode 100644
index 0000000..469c9c3
--- /dev/null
+++ b/preact/config/codemod-strip-tdz.js
@@ -0,0 +1,60 @@
+/* eslint no-console:0 */
+
+// parent node types that we don't want to remove pointless initializations from (because it breaks hoisting)
+const BLOCKED = ['ForStatement', 'WhileStatement']; // 'IfStatement', 'SwitchStatement'
+
+/** Removes var initialization to `void 0`, which Babel adds for TDZ strictness. */
+export default (file, api) => {
+ let { jscodeshift } = api,
+ found = 0;
+
+ let code = jscodeshift(file.source)
+ .find(jscodeshift.VariableDeclaration)
+ .forEach(handleDeclaration);
+
+ function handleDeclaration(decl) {
+ let p = decl,
+ remove = true;
+
+ while ((p = p.parentPath)) {
+ if (~BLOCKED.indexOf(p.value.type)) {
+ remove = false;
+ break;
+ }
+ }
+
+ decl.value.declarations.filter(isPointless).forEach(node => {
+ if (remove === false) {
+ console.log(
+ `> Skipping removal of undefined init for "${node.id.name}": within ${p.value.type}`
+ );
+ } else {
+ removeNodeInitialization(node);
+ }
+ });
+ }
+
+ function removeNodeInitialization(node) {
+ node.init = null;
+ found++;
+ }
+
+ function isPointless(node) {
+ let { init } = node;
+ if (init) {
+ if (
+ init.type === 'UnaryExpression' &&
+ init.operator === 'void' &&
+ init.argument.value == 0
+ ) {
+ return true;
+ }
+ if (init.type === 'Identifier' && init.name === 'undefined') {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ return found ? code.toSource({ quote: 'single' }) : null;
+};
diff --git a/preact/config/compat-entries.js b/preact/config/compat-entries.js
new file mode 100644
index 0000000..6fd771b
--- /dev/null
+++ b/preact/config/compat-entries.js
@@ -0,0 +1,25 @@
+const path = require('path');
+const fs = require('fs');
+const kl = require('kolorist');
+
+const pkgFiles = new Set(require('../package.json').files);
+const compatDir = path.join(__dirname, '..', 'compat');
+const files = fs.readdirSync(compatDir);
+
+let missing = 0;
+for (const file of files) {
+ const expected = 'compat/' + file;
+ if (/\.(js|mjs)$/.test(file) && !pkgFiles.has(expected)) {
+ missing++;
+
+ const filePath = kl.cyan('compat/' + file);
+ const label = kl.inverse(kl.red(' ERROR '));
+ console.error(
+ `${label} File ${filePath} is missing in "files" entry in package.json`
+ );
+ }
+}
+
+if (missing > 0) {
+ process.exit(1);
+}
diff --git a/preact/config/node-13-exports.js b/preact/config/node-13-exports.js
new file mode 100644
index 0000000..9528d2a
--- /dev/null
+++ b/preact/config/node-13-exports.js
@@ -0,0 +1,32 @@
+const fs = require('fs');
+
+const subRepositories = [
+ 'compat',
+ 'debug',
+ 'devtools',
+ 'hooks',
+ 'jsx-runtime',
+ 'test-utils'
+];
+const snakeCaseToCamelCase = str =>
+ str.replace(/([-_][a-z])/g, group => group.toUpperCase().replace('-', ''));
+
+const copyPreact = () => {
+ // Copy .module.js --> .mjs for Node 13 compat.
+ fs.writeFileSync(
+ `${process.cwd()}/dist/preact.mjs`,
+ fs.readFileSync(`${process.cwd()}/dist/preact.module.js`)
+ );
+};
+
+const copy = name => {
+ // Copy .module.js --> .mjs for Node 13 compat.
+ const filename = name.includes('-') ? snakeCaseToCamelCase(name) : name;
+ fs.writeFileSync(
+ `${process.cwd()}/${name}/dist/${filename}.mjs`,
+ fs.readFileSync(`${process.cwd()}/${name}/dist/${filename}.module.js`)
+ );
+};
+
+copyPreact();
+subRepositories.forEach(copy);
diff --git a/preact/debug/LICENSE b/preact/debug/LICENSE
new file mode 100644
index 0000000..da5389a
--- /dev/null
+++ b/preact/debug/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Jason Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/preact/debug/mangle.json b/preact/debug/mangle.json
new file mode 100644
index 0000000..506a6a4
--- /dev/null
+++ b/preact/debug/mangle.json
@@ -0,0 +1,21 @@
+{
+ "help": {
+ "what is this file?": "It controls protected/private property mangling so that minified builds have consistent property names.",
+ "why are there duplicate minified properties?": "Most properties are only used on one type of objects, so they can have the same name since they will never collide. Doing this reduces size."
+ },
+ "minify": {
+ "mangle": {
+ "properties": {
+ "regex": "^_[^_]",
+ "reserved": [
+ "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED",
+ "__REACT_DEVTOOLS_GLOBAL_HOOK__",
+ "__PREACT_DEVTOOLS__",
+ "_renderers",
+ "__source",
+ "__self"
+ ]
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/preact/debug/package.json b/preact/debug/package.json
new file mode 100644
index 0000000..bc6ef7b
--- /dev/null
+++ b/preact/debug/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "preact-debug",
+ "amdName": "preactDebug",
+ "version": "1.0.0",
+ "private": true,
+ "description": "Preact extensions for development",
+ "main": "dist/debug.js",
+ "module": "dist/debug.module.js",
+ "umd:main": "dist/debug.umd.js",
+ "source": "src/index.js",
+ "license": "MIT",
+ "mangle": {
+ "regex": "^(?!_renderer)^_"
+ },
+ "peerDependencies": {
+ "preact": "^10.0.0"
+ }
+}
diff --git a/preact/debug/src/check-props.js b/preact/debug/src/check-props.js
new file mode 100644
index 0000000..6f48bbe
--- /dev/null
+++ b/preact/debug/src/check-props.js
@@ -0,0 +1,54 @@
+const ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
+
+let loggedTypeFailures = {};
+
+/**
+ * Reset the history of which prop type warnings have been logged.
+ */
+export function resetPropWarnings() {
+ loggedTypeFailures = {};
+}
+
+/**
+ * Assert that the values match with the type specs.
+ * Error messages are memorized and will only be shown once.
+ *
+ * Adapted from https://github.com/facebook/prop-types/blob/master/checkPropTypes.js
+ *
+ * @param {object} typeSpecs Map of name to a ReactPropType
+ * @param {object} values Runtime values that need to be type-checked
+ * @param {string} location e.g. "prop", "context", "child context"
+ * @param {string} componentName Name of the component for error messages.
+ * @param {?Function} getStack Returns the component stack.
+ */
+export function checkPropTypes(
+ typeSpecs,
+ values,
+ location,
+ componentName,
+ getStack
+) {
+ Object.keys(typeSpecs).forEach(typeSpecName => {
+ let error;
+ try {
+ error = typeSpecs[typeSpecName](
+ values,
+ typeSpecName,
+ componentName,
+ location,
+ null,
+ ReactPropTypesSecret
+ );
+ } catch (e) {
+ error = e;
+ }
+ if (error && !(error.message in loggedTypeFailures)) {
+ loggedTypeFailures[error.message] = true;
+ console.error(
+ `Failed ${location} type: ${error.message}${(getStack &&
+ `\n${getStack()}`) ||
+ ''}`
+ );
+ }
+ });
+}
diff --git a/preact/debug/src/component-stack.js b/preact/debug/src/component-stack.js
new file mode 100644
index 0000000..58830ed
--- /dev/null
+++ b/preact/debug/src/component-stack.js
@@ -0,0 +1,146 @@
+import { options, Fragment } from 'preact';
+
+/**
+ * Get human readable name of the component/dom node
+ * @param {import('./internal').VNode} vnode
+ * @param {import('./internal').VNode} vnode
+ * @returns {string}
+ */
+export function getDisplayName(vnode) {
+ if (vnode.type === Fragment) {
+ return 'Fragment';
+ } else if (typeof vnode.type == 'function') {
+ return vnode.type.displayName || vnode.type.name;
+ } else if (typeof vnode.type == 'string') {
+ return vnode.type;
+ }
+
+ return '#text';
+}
+
+/**
+ * Used to keep track of the currently rendered `vnode` and print it
+ * in debug messages.
+ */
+let renderStack = [];
+
+/**
+ * Keep track of the current owners. An owner describes a component
+ * which was responsible to render a specific `vnode`. This exclude
+ * children that are passed via `props.children`, because they belong
+ * to the parent owner.
+ *
+ * ```jsx
+ * const Foo = props => <div>{props.children}</div> // div's owner is Foo
+ * const Bar = props => {
+ * return (
+ * <Foo><span /></Foo> // Foo's owner is Bar, span's owner is Bar
+ * )
+ * }
+ * ```
+ *
+ * Note: A `vnode` may be hoisted to the root scope due to compiler
+ * optimiztions. In these cases the `_owner` will be different.
+ */
+let ownerStack = [];
+
+/**
+ * Get the currently rendered `vnode`
+ * @returns {import('./internal').VNode | null}
+ */
+export function getCurrentVNode() {
+ return renderStack.length > 0 ? renderStack[renderStack.length - 1] : null;
+}
+
+/**
+ * If the user doesn't have `@babel/plugin-transform-react-jsx-source`
+ * somewhere in his tool chain we can't print the filename and source
+ * location of a component. In that case we just omit that, but we'll
+ * print a helpful message to the console, notifying the user of it.
+ */
+let hasBabelPlugin = false;
+
+/**
+ * Check if a `vnode` is a possible owner.
+ * @param {import('./internal').VNode} vnode
+ */
+function isPossibleOwner(vnode) {
+ return typeof vnode.type == 'function' && vnode.type != Fragment;
+}
+
+/**
+ * Return the component stack that was captured up to this point.
+ * @param {import('./internal').VNode} vnode
+ * @returns {string}
+ */
+export function getOwnerStack(vnode) {
+ const stack = [vnode];
+ let next = vnode;
+ while (next._owner != null) {
+ stack.push(next._owner);
+ next = next._owner;
+ }
+
+ return stack.reduce((acc, owner) => {
+ acc += ` in ${getDisplayName(owner)}`;
+
+ const source = owner.__source;
+ if (source) {
+ acc += ` (at ${source.fileName}:${source.lineNumber})`;
+ } else if (!hasBabelPlugin) {
+ hasBabelPlugin = true;
+ console.warn(
+ 'Add @babel/plugin-transform-react-jsx-source to get a more detailed component stack. Note that you should not add it to production builds of your App for bundle size reasons.'
+ );
+ }
+
+ return (acc += '\n');
+ }, '');
+}
+
+/**
+ * Setup code to capture the component trace while rendering. Note that
+ * we cannot simply traverse `vnode._parent` upwards, because we have some
+ * debug messages for `this.setState` where the `vnode` is `undefined`.
+ */
+export function setupComponentStack() {
+ let oldDiff = options._diff;
+ let oldDiffed = options.diffed;
+ let oldRoot = options._root;
+ let oldVNode = options.vnode;
+ let oldRender = options._render;
+
+ options.diffed = vnode => {
+ if (isPossibleOwner(vnode)) {
+ ownerStack.pop();
+ }
+ renderStack.pop();
+ if (oldDiffed) oldDiffed(vnode);
+ };
+
+ options._diff = vnode => {
+ if (isPossibleOwner(vnode)) {
+ renderStack.push(vnode);
+ }
+ if (oldDiff) oldDiff(vnode);
+ };
+
+ options._root = (vnode, parent) => {
+ ownerStack = [];
+ if (oldRoot) oldRoot(vnode, parent);
+ };
+
+ options.vnode = vnode => {
+ vnode._owner =
+ ownerStack.length > 0 ? ownerStack[ownerStack.length - 1] : null;
+ if (oldVNode) oldVNode(vnode);
+ };
+
+ options._render = vnode => {
+ if (isPossibleOwner(vnode)) {
+ ownerStack.push(vnode);
+ }
+
+ if (oldRender) oldRender(vnode);
+ };
+}
diff --git a/preact/debug/src/constants.js b/preact/debug/src/constants.js
new file mode 100644
index 0000000..e15b547
--- /dev/null
+++ b/preact/debug/src/constants.js
@@ -0,0 +1,3 @@
+export const ELEMENT_NODE = 1;
+export const DOCUMENT_NODE = 9;
+export const DOCUMENT_FRAGMENT_NODE = 11;
diff --git a/preact/debug/src/debug.js b/preact/debug/src/debug.js
new file mode 100644
index 0000000..27927cb
--- /dev/null
+++ b/preact/debug/src/debug.js
@@ -0,0 +1,442 @@
+import { checkPropTypes } from './check-props';
+import { options, Component } from 'preact';
+import {
+ ELEMENT_NODE,
+ DOCUMENT_NODE,
+ DOCUMENT_FRAGMENT_NODE
+} from './constants';
+import {
+ getOwnerStack,
+ setupComponentStack,
+ getCurrentVNode,
+ getDisplayName
+} from './component-stack';
+import { assign } from './util';
+
+const isWeakMapSupported = typeof WeakMap == 'function';
+
+function getClosestDomNodeParent(parent) {
+ if (!parent) return {};
+ if (typeof parent.type == 'function') {
+ return getClosestDomNodeParent(parent._parent);
+ }
+ return parent;
+}
+
+export function initDebug() {
+ setupComponentStack();
+
+ let hooksAllowed = false;
+
+ /* eslint-disable no-console */
+ let oldBeforeDiff = options._diff;
+ let oldDiffed = options.diffed;
+ let oldVnode = options.vnode;
+ let oldCatchError = options._catchError;
+ let oldRoot = options._root;
+ let oldHook = options._hook;
+ const warnedComponents = !isWeakMapSupported
+ ? null
+ : {
+ useEffect: new WeakMap(),
+ useLayoutEffect: new WeakMap(),
+ lazyPropTypes: new WeakMap()
+ };
+ const deprecations = [];
+
+ options._catchError = (error, vnode, oldVNode) => {
+ let component = vnode && vnode._component;
+ if (component && typeof error.then == 'function') {
+ const promise = error;
+ error = new Error(
+ `Missing Suspense. The throwing component was: ${getDisplayName(vnode)}`
+ );
+
+ let parent = vnode;
+ for (; parent; parent = parent._parent) {
+ if (parent._component && parent._component._childDidSuspend) {
+ error = promise;
+ break;
+ }
+ }
+
+ // We haven't recovered and we know at this point that there is no
+ // Suspense component higher up in the tree
+ if (error instanceof Error) {
+ throw error;
+ }
+ }
+
+ try {
+ oldCatchError(error, vnode, oldVNode);
+
+ // when an error was handled by an ErrorBoundary we will nontheless emit an error
+ // event on the window object. This is to make up for react compatibility in dev mode
+ // and thus make the Next.js dev overlay work.
+ if (typeof error.then != 'function') {
+ setTimeout(() => {
+ throw error;
+ });
+ }
+ } catch (e) {
+ throw e;
+ }
+ };
+
+ options._root = (vnode, parentNode) => {
+ if (!parentNode) {
+ throw new Error(
+ 'Undefined parent passed to render(), this is the second argument.\n' +
+ 'Check if the element is available in the DOM/has the correct id.'
+ );
+ }
+
+ let isValid;
+ switch (parentNode.nodeType) {
+ case ELEMENT_NODE:
+ case DOCUMENT_FRAGMENT_NODE:
+ case DOCUMENT_NODE:
+ isValid = true;
+ break;
+ default:
+ isValid = false;
+ }
+
+ if (!isValid) {
+ let componentName = getDisplayName(vnode);
+ throw new Error(
+ `Expected a valid HTML node as a second argument to render. Received ${parentNode} instead: render(<${componentName} />, ${parentNode});`
+ );
+ }
+
+ if (oldRoot) oldRoot(vnode, parentNode);
+ };
+
+ options._diff = vnode => {
+ let { type, _parent: parent } = vnode;
+ let parentVNode = getClosestDomNodeParent(parent);
+
+ hooksAllowed = true;
+
+ if (type === undefined) {
+ throw new Error(
+ 'Undefined component passed to createElement()\n\n' +
+ 'You likely forgot to export your component or might have mixed up default and named imports' +
+ serializeVNode(vnode) +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+ } else if (type != null && typeof type == 'object') {
+ if (type._children !== undefined && type._dom !== undefined) {
+ throw new Error(
+ `Invalid type passed to createElement(): ${type}\n\n` +
+ 'Did you accidentally pass a JSX literal as JSX twice?\n\n' +
+ ` let My${getDisplayName(vnode)} = ${serializeVNode(type)};\n` +
+ ` let vnode = <My${getDisplayName(vnode)} />;\n\n` +
+ 'This usually happens when you export a JSX literal and not the component.' +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+ }
+
+ throw new Error(
+ 'Invalid type passed to createElement(): ' +
+ (Array.isArray(type) ? 'array' : type)
+ );
+ }
+
+ if (
+ (type === 'thead' || type === 'tfoot' || type === 'tbody') &&
+ parentVNode.type !== 'table'
+ ) {
+ console.error(
+ 'Improper nesting of table. Your <thead/tbody/tfoot> should have a <table> parent.' +
+ serializeVNode(vnode) +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+ } else if (
+ type === 'tr' &&
+ parentVNode.type !== 'thead' &&
+ parentVNode.type !== 'tfoot' &&
+ parentVNode.type !== 'tbody' &&
+ parentVNode.type !== 'table'
+ ) {
+ console.error(
+ 'Improper nesting of table. Your <tr> should have a <thead/tbody/tfoot/table> parent.' +
+ serializeVNode(vnode) +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+ } else if (type === 'td' && parentVNode.type !== 'tr') {
+ console.error(
+ 'Improper nesting of table. Your <td> should have a <tr> parent.' +
+ serializeVNode(vnode) +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+ } else if (type === 'th' && parentVNode.type !== 'tr') {
+ console.error(
+ 'Improper nesting of table. Your <th> should have a <tr>.' +
+ serializeVNode(vnode) +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+ }
+
+ if (
+ vnode.ref !== undefined &&
+ typeof vnode.ref != 'function' &&
+ typeof vnode.ref != 'object' &&
+ !('$$typeof' in vnode) // allow string refs when preact-compat is installed
+ ) {
+ throw new Error(
+ `Component's "ref" property should be a function, or an object created ` +
+ `by createRef(), but got [${typeof vnode.ref}] instead\n` +
+ serializeVNode(vnode) +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+ }
+
+ if (typeof vnode.type == 'string') {
+ for (const key in vnode.props) {
+ if (
+ key[0] === 'o' &&
+ key[1] === 'n' &&
+ typeof vnode.props[key] != 'function' &&
+ vnode.props[key] != null
+ ) {
+ throw new Error(
+ `Component's "${key}" property should be a function, ` +
+ `but got [${typeof vnode.props[key]}] instead\n` +
+ serializeVNode(vnode) +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+ }
+ }
+ }
+
+ // Check prop-types if available
+ if (typeof vnode.type == 'function' && vnode.type.propTypes) {
+ if (
+ vnode.type.displayName === 'Lazy' &&
+ warnedComponents &&
+ !warnedComponents.lazyPropTypes.has(vnode.type)
+ ) {
+ const m =
+ 'PropTypes are not supported on lazy(). Use propTypes on the wrapped component itself. ';
+ try {
+ const lazyVNode = vnode.type();
+ warnedComponents.lazyPropTypes.set(vnode.type, true);
+ console.warn(
+ m + `Component wrapped in lazy() is ${getDisplayName(lazyVNode)}`
+ );
+ } catch (promise) {
+ console.warn(
+ m + "We will log the wrapped component's name once it is loaded."
+ );
+ }
+ }
+
+ let values = vnode.props;
+ if (vnode.type._forwarded) {
+ values = assign({}, values);
+ delete values.ref;
+ }
+
+ checkPropTypes(
+ vnode.type.propTypes,
+ values,
+ 'prop',
+ getDisplayName(vnode),
+ () => getOwnerStack(vnode)
+ );
+ }
+
+ if (oldBeforeDiff) oldBeforeDiff(vnode);
+ };
+
+ options._hook = (comp, index, type) => {
+ if (!comp || !hooksAllowed) {
+ throw new Error('Hook can only be invoked from render methods.');
+ }
+
+ if (oldHook) oldHook(comp, index, type);
+ };
+
+ // Ideally we'd want to print a warning once per component, but we
+ // don't have access to the vnode that triggered it here. As a
+ // compromise and to avoid flooding the console with warnings we
+ // print each deprecation warning only once.
+ const warn = (property, message) => ({
+ get() {
+ const key = 'get' + property + message;
+ if (deprecations && deprecations.indexOf(key) < 0) {
+ deprecations.push(key);
+ console.warn(`getting vnode.${property} is deprecated, ${message}`);
+ }
+ },
+ set() {
+ const key = 'set' + property + message;
+ if (deprecations && deprecations.indexOf(key) < 0) {
+ deprecations.push(key);
+ console.warn(`setting vnode.${property} is not allowed, ${message}`);
+ }
+ }
+ });
+
+ const deprecatedAttributes = {
+ nodeName: warn('nodeName', 'use vnode.type'),
+ attributes: warn('attributes', 'use vnode.props'),
+ children: warn('children', 'use vnode.props.children')
+ };
+
+ const deprecatedProto = Object.create({}, deprecatedAttributes);
+
+ options.vnode = vnode => {
+ const props = vnode.props;
+ if (
+ vnode.type !== null &&
+ props != null &&
+ ('__source' in props || '__self' in props)
+ ) {
+ const newProps = (vnode.props = {});
+ for (let i in props) {
+ const v = props[i];
+ if (i === '__source') vnode.__source = v;
+ else if (i === '__self') vnode.__self = v;
+ else newProps[i] = v;
+ }
+ }
+
+ // eslint-disable-next-line
+ vnode.__proto__ = deprecatedProto;
+ if (oldVnode) oldVnode(vnode);
+ };
+
+ options.diffed = vnode => {
+ // Check if the user passed plain objects as children. Note that we cannot
+ // move this check into `options.vnode` because components can receive
+ // children in any shape they want (e.g.
+ // `<MyJSONFormatter>{{ foo: 123, bar: "abc" }}</MyJSONFormatter>`).
+ // Putting this check in `options.diffed` ensures that
+ // `vnode._children` is set and that we only validate the children
+ // that were actually rendered.
+ if (vnode._children) {
+ vnode._children.forEach(child => {
+ if (child && child.type === undefined) {
+ // Remove internal vnode keys that will always be patched
+ delete child._parent;
+ delete child._depth;
+ const keys = Object.keys(child).join(',');
+ throw new Error(
+ `Objects are not valid as a child. Encountered an object with the keys {${keys}}.` +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+ }
+ });
+ }
+
+ hooksAllowed = false;
+
+ if (oldDiffed) oldDiffed(vnode);
+
+ if (vnode._children != null) {
+ const keys = [];
+ for (let i = 0; i < vnode._children.length; i++) {
+ const child = vnode._children[i];
+ if (!child || child.key == null) continue;
+
+ const key = child.key;
+ if (keys.indexOf(key) !== -1) {
+ console.error(
+ 'Following component has two or more children with the ' +
+ `same key attribute: "${key}". This may cause glitches and misbehavior ` +
+ 'in rendering process. Component: \n\n' +
+ serializeVNode(vnode) +
+ `\n\n${getOwnerStack(vnode)}`
+ );
+
+ // Break early to not spam the console
+ break;
+ }
+
+ keys.push(key);
+ }
+ }
+ };
+}
+
+const setState = Component.prototype.setState;
+Component.prototype.setState = function(update, callback) {
+ if (this._vnode == null) {
+ // `this._vnode` will be `null` during componentWillMount. But it
+ // is perfectly valid to call `setState` during cWM. So we
+ // need an additional check to verify that we are dealing with a
+ // call inside constructor.
+ if (this.state == null) {
+ console.warn(
+ `Calling "this.setState" inside the constructor of a component is a ` +
+ `no-op and might be a bug in your application. Instead, set ` +
+ `"this.state = {}" directly.\n\n${getOwnerStack(getCurrentVNode())}`
+ );
+ }
+ } else if (this._parentDom == null) {
+ console.warn(
+ `Can't call "this.setState" on an unmounted component. This is a no-op, ` +
+ `but it indicates a memory leak in your application. To fix, cancel all ` +
+ `subscriptions and asynchronous tasks in the componentWillUnmount method.` +
+ `\n\n${getOwnerStack(this._vnode)}`
+ );
+ }
+
+ return setState.call(this, update, callback);
+};
+
+const forceUpdate = Component.prototype.forceUpdate;
+Component.prototype.forceUpdate = function(callback) {
+ if (this._vnode == null) {
+ console.warn(
+ `Calling "this.forceUpdate" inside the constructor of a component is a ` +
+ `no-op and might be a bug in your application.\n\n${getOwnerStack(
+ getCurrentVNode()
+ )}`
+ );
+ } else if (this._parentDom == null) {
+ console.warn(
+ `Can't call "this.forceUpdate" on an unmounted component. This is a no-op, ` +
+ `but it indicates a memory leak in your application. To fix, cancel all ` +
+ `subscriptions and asynchronous tasks in the componentWillUnmount method.` +
+ `\n\n${getOwnerStack(this._vnode)}`
+ );
+ }
+ return forceUpdate.call(this, callback);
+};
+
+/**
+ * Serialize a vnode tree to a string
+ * @param {import('./internal').VNode} vnode
+ * @returns {string}
+ */
+export function serializeVNode(vnode) {
+ let { props } = vnode;
+ let name = getDisplayName(vnode);
+
+ let attrs = '';
+ for (let prop in props) {
+ if (props.hasOwnProperty(prop) && prop !== 'children') {
+ let value = props[prop];
+
+ // If it is an object but doesn't have toString(), use Object.toString
+ if (typeof value == 'function') {
+ value = `function ${value.displayName || value.name}() {}`;
+ }
+
+ value =
+ Object(value) === value && !value.toString
+ ? Object.prototype.toString.call(value)
+ : value + '';
+
+ attrs += ` ${prop}=${JSON.stringify(value)}`;
+ }
+ }
+
+ let children = props.children;
+ return `<${name}${attrs}${
+ children && children.length ? '>..</' + name + '>' : ' />'
+ }`;
+}
diff --git a/preact/debug/src/index.js b/preact/debug/src/index.js
new file mode 100644
index 0000000..37eee3b
--- /dev/null
+++ b/preact/debug/src/index.js
@@ -0,0 +1,6 @@
+import { initDebug } from './debug';
+import 'preact/devtools';
+
+initDebug();
+
+export { resetPropWarnings } from './check-props';
diff --git a/preact/debug/src/internal.d.ts b/preact/debug/src/internal.d.ts
new file mode 100644
index 0000000..866943c
--- /dev/null
+++ b/preact/debug/src/internal.d.ts
@@ -0,0 +1,82 @@
+import { Component, PreactElement, VNode, Options } from '../../src/internal';
+
+export { Component, PreactElement, VNode, Options };
+
+export interface DevtoolsInjectOptions {
+ /** 1 = DEV, 0 = production */
+ bundleType: 1 | 0;
+ /** The devtools enable different features for different versions of react */
+ version: string;
+ /** Informative string, currently unused in the devtools */
+ rendererPackageName: string;
+ /** Find the root dom node of a vnode */
+ findHostInstanceByFiber(vnode: VNode): HTMLElement | null;
+ /** Find the closest vnode given a dom node */
+ findFiberByHostInstance(instance: HTMLElement): VNode | null;
+}
+
+export interface DevtoolsUpdater {
+ setState(objOrFn: any): void;
+ forceUpdate(): void;
+ setInState(path: Array<string | number>, value: any): void;
+ setInProps(path: Array<string | number>, value: any): void;
+ setInContext(): void;
+}
+
+export type NodeType = 'Composite' | 'Native' | 'Wrapper' | 'Text';
+
+export interface DevtoolData {
+ nodeType: NodeType;
+ // Component type
+ type: any;
+ name: string;
+ ref: any;
+ key: string | number;
+ updater: DevtoolsUpdater | null;
+ text: string | number | null;
+ state: any;
+ props: any;
+ children: VNode[] | string | number | null;
+ publicInstance: PreactElement | Text | Component;
+ memoizedInteractions: any[];
+
+ actualDuration: number;
+ actualStartTime: number;
+ treeBaseDuration: number;
+}
+
+export type EventType =
+ | 'unmount'
+ | 'rootCommitted'
+ | 'root'
+ | 'mount'
+ | 'update'
+ | 'updateProfileTimes';
+
+export interface DevtoolsEvent {
+ data?: DevtoolData;
+ internalInstance: VNode;
+ renderer: string;
+ type: EventType;
+}
+
+export interface DevtoolsHook {
+ _renderers: Record<string, any>;
+ _roots: Set<VNode>;
+ on(ev: string, listener: () => void): void;
+ emit(ev: string, data?: object): void;
+ helpers: Record<string, any>;
+ getFiberRoots(rendererId: string): Set<any>;
+ inject(config: DevtoolsInjectOptions): string;
+ onCommitFiberRoot(rendererId: string, root: VNode): void;
+ onCommitFiberUnmount(rendererId: string, vnode: VNode): void;
+}
+
+export interface DevtoolsWindow extends Window {
+ /**
+ * If the devtools extension is installed it will inject this object into
+ * the dom. This hook handles all communications between preact and the
+ * devtools panel.
+ */
+ __REACT_DEVTOOLS_GLOBAL_HOOK__?: DevtoolsHook;
+}
diff --git a/preact/debug/src/util.js b/preact/debug/src/util.js
new file mode 100644
index 0000000..7b7a5e1
--- /dev/null
+++ b/preact/debug/src/util.js
@@ -0,0 +1,11 @@
+/**
+ * Assign properties from `props` to `obj`
+ * @template O, P The obj and props types
+ * @param {O} obj The object to copy properties to
+ * @param {P} props The object to copy properties from
+ * @returns {O & P}
+ */
+export function assign(obj, props) {
+ for (let i in props) obj[i] = props[i];
+ return /** @type {O & P} */ (obj);
+}
diff --git a/preact/debug/test/browser/component-stack-2.test.js b/preact/debug/test/browser/component-stack-2.test.js
new file mode 100644
index 0000000..a9a75af
--- /dev/null
+++ b/preact/debug/test/browser/component-stack-2.test.js
@@ -0,0 +1,54 @@
+import { createElement, render, Component } from 'preact';
+import 'preact/debug';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+/** @jsx createElement */
+
+// This test is not part of component-stack.test.js to avoid it being
+// transpiled with '@babel/plugin-transform-react-jsx-source' enabled.
+
+describe('component stack', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ let errors = [];
+ let warnings = [];
+
+ beforeEach(() => {
+ scratch = setupScratch();
+
+ errors = [];
+ warnings = [];
+ sinon.stub(console, 'error').callsFake(e => errors.push(e));
+ sinon.stub(console, 'warn').callsFake(w => warnings.push(w));
+ });
+
+ afterEach(() => {
+ console.error.restore();
+ console.warn.restore();
+ teardown(scratch);
+ });
+
+ it('should print a warning when "@babel/plugin-transform-react-jsx-source" is not installed', () => {
+ function Foo() {
+ return <Thrower />;
+ }
+
+ class Thrower extends Component {
+ constructor(props) {
+ super(props);
+ this.setState({ foo: 1 });
+ }
+
+ render() {
+ return <div>foo</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+
+ expect(
+ warnings[0].indexOf('@babel/plugin-transform-react-jsx-source') > -1
+ ).to.equal(true);
+ });
+});
diff --git a/preact/debug/test/browser/component-stack.test.js b/preact/debug/test/browser/component-stack.test.js
new file mode 100644
index 0000000..87cd085
--- /dev/null
+++ b/preact/debug/test/browser/component-stack.test.js
@@ -0,0 +1,86 @@
+import { createElement, render, Component } from 'preact';
+import 'preact/debug';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+/** @jsx createElement */
+
+describe('component stack', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ let errors = [];
+ let warnings = [];
+
+ const getStack = arr => arr[0].split('\n\n')[1];
+
+ beforeEach(() => {
+ scratch = setupScratch();
+
+ errors = [];
+ warnings = [];
+ sinon.stub(console, 'error').callsFake(e => errors.push(e));
+ sinon.stub(console, 'warn').callsFake(w => warnings.push(w));
+ });
+
+ afterEach(() => {
+ console.error.restore();
+ console.warn.restore();
+ teardown(scratch);
+ });
+
+ it('should print component stack', () => {
+ function Foo() {
+ return <Thrower />;
+ }
+
+ class Thrower extends Component {
+ constructor(props) {
+ super(props);
+ this.setState({ foo: 1 });
+ }
+
+ render() {
+ return <div>foo</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+
+ let lines = getStack(warnings).split('\n');
+ expect(lines[0].indexOf('Thrower') > -1).to.equal(true);
+ expect(lines[1].indexOf('Foo') > -1).to.equal(true);
+ });
+
+ it('should only print owners', () => {
+ function Foo(props) {
+ return <div>{props.children}</div>;
+ }
+
+ function Bar() {
+ return (
+ <Foo>
+ <Thrower />
+ </Foo>
+ );
+ }
+
+ class Thrower extends Component {
+ render() {
+ return (
+ <table>
+ <td>
+ <tr>foo</tr>
+ </td>
+ </table>
+ );
+ }
+ }
+
+ render(<Bar />, scratch);
+
+ let lines = getStack(errors).split('\n');
+ expect(lines[0].indexOf('td') > -1).to.equal(true);
+ expect(lines[1].indexOf('Thrower') > -1).to.equal(true);
+ expect(lines[2].indexOf('Bar') > -1).to.equal(true);
+ });
+});
diff --git a/preact/debug/test/browser/debug-compat.test.js b/preact/debug/test/browser/debug-compat.test.js
new file mode 100644
index 0000000..aea131f
--- /dev/null
+++ b/preact/debug/test/browser/debug-compat.test.js
@@ -0,0 +1,81 @@
+import { createElement, render, createRef } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import './fakeDevTools';
+import 'preact/debug';
+import * as PropTypes from 'prop-types';
+
+// eslint-disable-next-line no-duplicate-imports
+import { resetPropWarnings } from 'preact/debug';
+import { forwardRef, createPortal } from 'preact/compat';
+
+const h = createElement;
+/** @jsx createElement */
+
+describe('debug compat', () => {
+ let scratch;
+ let root;
+ let errors = [];
+ let warnings = [];
+
+ beforeEach(() => {
+ errors = [];
+ warnings = [];
+ scratch = setupScratch();
+ sinon.stub(console, 'error').callsFake(e => errors.push(e));
+ sinon.stub(console, 'warn').callsFake(w => warnings.push(w));
+
+ root = document.createElement('div');
+ document.body.appendChild(root);
+ });
+
+ afterEach(() => {
+ /** @type {*} */
+ (console.error).restore();
+ console.warn.restore();
+ teardown(scratch);
+
+ document.body.removeChild(root);
+ });
+
+ describe('portals', () => {
+ it('should not throw an invalid render argument for a portal.', () => {
+ function Foo(props) {
+ return <div>{createPortal(props.children, root)}</div>;
+ }
+ expect(() => render(<Foo>foobar</Foo>, scratch)).not.to.throw();
+ });
+ });
+
+ describe('PropTypes', () => {
+ beforeEach(() => {
+ resetPropWarnings();
+ });
+
+ it('should not fail if ref is passed to comp wrapped in forwardRef', () => {
+ // This test ensures compat with airbnb/prop-types-exact, mui exact prop types util, etc.
+
+ const Foo = forwardRef(function Foo(props, ref) {
+ return <h1 ref={ref}>{props.text}</h1>;
+ });
+
+ Foo.propTypes = {
+ text: PropTypes.string.isRequired,
+ ref(props) {
+ if ('ref' in props) {
+ throw new Error(
+ 'ref should not be passed to prop-types valiation!'
+ );
+ }
+ }
+ };
+
+ const ref = createRef();
+
+ render(<Foo ref={ref} text="123" />, scratch);
+
+ expect(console.error).not.been.called;
+
+ expect(ref.current).to.not.be.undefined;
+ });
+ });
+});
diff --git a/preact/debug/test/browser/debug-hooks.test.js b/preact/debug/test/browser/debug-hooks.test.js
new file mode 100644
index 0000000..84bc028
--- /dev/null
+++ b/preact/debug/test/browser/debug-hooks.test.js
@@ -0,0 +1,111 @@
+import { createElement, render, Component } from 'preact';
+import { useState, useEffect } from 'preact/hooks';
+import 'preact/debug';
+import { act } from 'preact/test-utils';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+/** @jsx createElement */
+
+describe('debug with hooks', () => {
+ let scratch;
+ let errors = [];
+ let warnings = [];
+
+ beforeEach(() => {
+ errors = [];
+ warnings = [];
+ scratch = setupScratch();
+ sinon.stub(console, 'error').callsFake(e => errors.push(e));
+ sinon.stub(console, 'warn').callsFake(w => warnings.push(w));
+ });
+
+ afterEach(() => {
+ console.error.restore();
+ console.warn.restore();
+ teardown(scratch);
+ });
+
+ it('should throw an error when using a hook outside a render', () => {
+ class Foo extends Component {
+ componentWillMount() {
+ useState();
+ }
+
+ render() {
+ return this.props.children;
+ }
+ }
+
+ class App extends Component {
+ render() {
+ return <p>test</p>;
+ }
+ }
+ const fn = () =>
+ act(() =>
+ render(
+ <Foo>
+ <App />
+ </Foo>,
+ scratch
+ )
+ );
+ expect(fn).to.throw(/Hook can only be invoked from render/);
+ });
+
+ it('should throw an error when invoked outside of a component', () => {
+ function foo() {
+ useEffect(() => {}); // Pretend to use a hook
+ return <p>test</p>;
+ }
+
+ const fn = () =>
+ act(() => {
+ render(foo(), scratch);
+ });
+ expect(fn).to.throw(/Hook can only be invoked from render/);
+ });
+
+ it('should throw an error when invoked outside of a component before render', () => {
+ function Foo(props) {
+ useEffect(() => {}); // Pretend to use a hook
+ return props.children;
+ }
+
+ const fn = () =>
+ act(() => {
+ useState();
+ render(<Foo>Hello!</Foo>, scratch);
+ });
+ expect(fn).to.throw(/Hook can only be invoked from render/);
+ });
+
+ it('should throw an error when invoked outside of a component after render', () => {
+ function Foo(props) {
+ useEffect(() => {}); // Pretend to use a hook
+ return props.children;
+ }
+
+ const fn = () =>
+ act(() => {
+ render(<Foo>Hello!</Foo>, scratch);
+ useState();
+ });
+ expect(fn).to.throw(/Hook can only be invoked from render/);
+ });
+
+ it('should throw an error when invoked inside an effect callback', () => {
+ function Foo(props) {
+ useEffect(() => {
+ useState();
+ });
+ return props.children;
+ }
+
+ const fn = () =>
+ act(() => {
+ render(<Foo>Hello!</Foo>, scratch);
+ });
+ expect(fn).to.throw(/Hook can only be invoked from render/);
+ });
+});
diff --git a/preact/debug/test/browser/debug-suspense.test.js b/preact/debug/test/browser/debug-suspense.test.js
new file mode 100644
index 0000000..a436154
--- /dev/null
+++ b/preact/debug/test/browser/debug-suspense.test.js
@@ -0,0 +1,190 @@
+import { createElement, render, lazy, Suspense } from 'preact/compat';
+import 'preact/debug';
+import { setupRerender } from 'preact/test-utils';
+import {
+ setupScratch,
+ teardown,
+ serializeHtml
+} from '../../../test/_util/helpers';
+
+/** @jsx createElement */
+
+describe('debug with suspense', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+ let rerender;
+ let errors = [];
+ let warnings = [];
+
+ beforeEach(() => {
+ errors = [];
+ warnings = [];
+ scratch = setupScratch();
+ rerender = setupRerender();
+ sinon.stub(console, 'error').callsFake(e => errors.push(e));
+ sinon.stub(console, 'warn').callsFake(w => warnings.push(w));
+ });
+
+ afterEach(() => {
+ console.error.restore();
+ console.warn.restore();
+ teardown(scratch);
+ });
+
+ it('should throw on missing <Suspense>', () => {
+ function Foo() {
+ throw Promise.resolve();
+ }
+
+ expect(() => render(<Foo />, scratch)).to.throw;
+ });
+
+ it('should throw an error when using lazy and missing Suspense', () => {
+ const Foo = () => <div>Foo</div>;
+ const LazyComp = lazy(
+ () => new Promise(resolve => resolve({ default: Foo }))
+ );
+ const fn = () => {
+ render(<LazyComp />, scratch);
+ };
+
+ expect(fn).to.throw(/Missing Suspense/gi);
+ });
+
+ describe('PropTypes', () => {
+ it('should validate propTypes inside lazy()', () => {
+ function Baz(props) {
+ return <h1>{props.unhappy}</h1>;
+ }
+
+ Baz.propTypes = {
+ unhappy: function alwaysThrows(obj, key) {
+ if (obj[key] === 'signal') throw Error('got prop inside lazy()');
+ }
+ };
+
+ const loader = Promise.resolve({ default: Baz });
+ const LazyBaz = lazy(() => loader);
+
+ const suspense = (
+ <Suspense fallback={<div>fallback...</div>}>
+ <LazyBaz unhappy="signal" />
+ </Suspense>
+ );
+ render(suspense, scratch);
+ rerender(); // render fallback
+
+ expect(console.error).to.not.be.called;
+ expect(serializeHtml(scratch)).to.equal('<div>fallback...</div>');
+
+ return loader.then(() => {
+ rerender();
+ expect(errors.length).to.equal(1);
+ expect(errors[0].includes('got prop')).to.equal(true);
+ expect(serializeHtml(scratch)).to.equal('<h1>signal</h1>');
+ });
+ });
+
+ describe('warn for PropTypes on lazy()', () => {
+ it('should log the function name', () => {
+ const loader = Promise.resolve({
+ default: function MyLazyLoaded() {
+ return <div>Hi there</div>;
+ }
+ });
+ const FakeLazy = lazy(() => loader);
+ FakeLazy.propTypes = {};
+ const suspense = (
+ <Suspense fallback={<div>fallback...</div>}>
+ <FakeLazy />
+ </Suspense>
+ );
+ render(suspense, scratch);
+ rerender(); // Render fallback
+
+ expect(serializeHtml(scratch)).to.equal('<div>fallback...</div>');
+
+ return loader.then(() => {
+ rerender();
+ expect(console.warn).to.be.calledTwice;
+ expect(warnings[1].includes('MyLazyLoaded')).to.equal(true);
+ expect(serializeHtml(scratch)).to.equal('<div>Hi there</div>');
+ });
+ });
+
+ it('should log the displayName', () => {
+ function MyLazyLoadedComponent() {
+ return <div>Hi there</div>;
+ }
+ MyLazyLoadedComponent.displayName = 'HelloLazy';
+ const loader = Promise.resolve({ default: MyLazyLoadedComponent });
+ const FakeLazy = lazy(() => loader);
+ FakeLazy.propTypes = {};
+ const suspense = (
+ <Suspense fallback={<div>fallback...</div>}>
+ <FakeLazy />
+ </Suspense>
+ );
+ render(suspense, scratch);
+ rerender(); // Render fallback
+
+ expect(serializeHtml(scratch)).to.equal('<div>fallback...</div>');
+
+ return loader.then(() => {
+ rerender();
+ expect(console.warn).to.be.calledTwice;
+ expect(warnings[1].includes('HelloLazy')).to.equal(true);
+ expect(serializeHtml(scratch)).to.equal('<div>Hi there</div>');
+ });
+ });
+
+ it("should not log a component if lazy loader's Promise rejects", () => {
+ const loader = Promise.reject(new Error('Hey there'));
+ const FakeLazy = lazy(() => loader);
+ FakeLazy.propTypes = {};
+ render(
+ <Suspense fallback={<div>fallback...</div>}>
+ <FakeLazy />
+ </Suspense>,
+ scratch
+ );
+ rerender(); // Render fallback
+
+ expect(serializeHtml(scratch)).to.equal('<div>fallback...</div>');
+
+ return loader.catch(() => {
+ try {
+ rerender();
+ } catch (e) {
+ // Ignore the loader's bubbling error
+ }
+
+ // Called once on initial render, and again when promise rejects
+ expect(console.warn).to.be.calledTwice;
+ });
+ });
+
+ it("should not log a component if lazy's loader throws", () => {
+ const FakeLazy = lazy(() => {
+ throw new Error('Hello');
+ });
+ FakeLazy.propTypes = {};
+ let error;
+ try {
+ render(
+ <Suspense fallback={<div>fallback...</div>}>
+ <FakeLazy />
+ </Suspense>,
+ scratch
+ );
+ } catch (e) {
+ error = e;
+ }
+
+ expect(console.warn).to.be.calledOnce;
+ expect(error).not.to.be.undefined;
+ expect(error.message).to.eql('Hello');
+ });
+ });
+ });
+});
diff --git a/preact/debug/test/browser/debug.options.test.js b/preact/debug/test/browser/debug.options.test.js
new file mode 100644
index 0000000..21d2c3f
--- /dev/null
+++ b/preact/debug/test/browser/debug.options.test.js
@@ -0,0 +1,135 @@
+import {
+ vnodeSpy,
+ rootSpy,
+ beforeDiffSpy,
+ hookSpy,
+ afterDiffSpy,
+ catchErrorSpy
+} from '../../../test/_util/optionSpies';
+
+import { createElement, render, Component } from 'preact';
+import { useState } from 'preact/hooks';
+import { setupRerender } from 'preact/test-utils';
+import 'preact/debug';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+/** @jsx createElement */
+
+describe('debug options', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ /** @type {(count: number) => void} */
+ let setCount;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+
+ vnodeSpy.resetHistory();
+ rootSpy.resetHistory();
+ beforeDiffSpy.resetHistory();
+ hookSpy.resetHistory();
+ afterDiffSpy.resetHistory();
+ catchErrorSpy.resetHistory();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ class ClassApp extends Component {
+ constructor() {
+ super();
+ this.state = { count: 0 };
+ setCount = count => this.setState({ count });
+ }
+
+ render() {
+ return <div>{this.state.count}</div>;
+ }
+ }
+
+ it('should call old options on mount', () => {
+ render(<ClassApp />, scratch);
+
+ expect(vnodeSpy).to.have.been.called;
+ expect(rootSpy).to.have.been.called;
+ expect(beforeDiffSpy).to.have.been.called;
+ expect(afterDiffSpy).to.have.been.called;
+ });
+
+ it('should call old options on update', () => {
+ render(<ClassApp />, scratch);
+
+ setCount(1);
+ rerender();
+
+ expect(vnodeSpy).to.have.been.called;
+ expect(rootSpy).to.have.been.called;
+ expect(beforeDiffSpy).to.have.been.called;
+ expect(afterDiffSpy).to.have.been.called;
+ });
+
+ it('should call old options on unmount', () => {
+ render(<ClassApp />, scratch);
+ render(null, scratch);
+
+ expect(vnodeSpy).to.have.been.called;
+ expect(rootSpy).to.have.been.called;
+ expect(beforeDiffSpy).to.have.been.called;
+ expect(afterDiffSpy).to.have.been.called;
+ });
+
+ it('should call old hook options for hook components', () => {
+ function HookApp() {
+ const [count, realSetCount] = useState(0);
+ setCount = realSetCount;
+ return <div>{count}</div>;
+ }
+
+ render(<HookApp />, scratch);
+
+ expect(hookSpy).to.have.been.called;
+ });
+
+ it('should call old options on error', () => {
+ const e = new Error('test');
+ class ErrorApp extends Component {
+ constructor() {
+ super();
+ this.state = { error: true };
+ }
+ componentDidCatch() {
+ this.setState({ error: false });
+ }
+ render() {
+ return <Throw error={this.state.error} />;
+ }
+ }
+
+ function Throw({ error }) {
+ if (error) {
+ throw e;
+ } else {
+ return <div>no error</div>;
+ }
+ }
+
+ const clock = sinon.useFakeTimers();
+
+ render(<ErrorApp />, scratch);
+ rerender();
+
+ expect(catchErrorSpy).to.have.been.called;
+
+ // we expect to throw after setTimeout to trigger a window.onerror
+ // this is to ensure react compat (i.e. with next.js' dev overlay)
+ expect(() => clock.tick(0)).to.throw(e);
+
+ clock.restore();
+ });
+});
diff --git a/preact/debug/test/browser/debug.test.js b/preact/debug/test/browser/debug.test.js
new file mode 100644
index 0000000..65b3ab4
--- /dev/null
+++ b/preact/debug/test/browser/debug.test.js
@@ -0,0 +1,624 @@
+import { createElement, render, createRef, Component, Fragment } from 'preact';
+import {
+ setupScratch,
+ teardown,
+ serializeHtml
+} from '../../../test/_util/helpers';
+import './fakeDevTools';
+import 'preact/debug';
+import * as PropTypes from 'prop-types';
+
+// eslint-disable-next-line no-duplicate-imports
+import { resetPropWarnings } from 'preact/debug';
+
+const h = createElement;
+/** @jsx createElement */
+
+describe('debug', () => {
+ let scratch;
+ let errors = [];
+ let warnings = [];
+
+ beforeEach(() => {
+ errors = [];
+ warnings = [];
+ scratch = setupScratch();
+ sinon.stub(console, 'error').callsFake(e => errors.push(e));
+ sinon.stub(console, 'warn').callsFake(w => warnings.push(w));
+ });
+
+ afterEach(() => {
+ /** @type {*} */
+ (console.error).restore();
+ console.warn.restore();
+ teardown(scratch);
+ });
+
+ it('should initialize devtools', () => {
+ expect(window.__PREACT_DEVTOOLS__.attachPreact).to.have.been.called;
+ });
+
+ it('should print an error on rendering on undefined parent', () => {
+ let fn = () => render(<div />, undefined);
+ expect(fn).to.throw(/render/);
+ });
+
+ it('should print an error on rendering on invalid parent', () => {
+ let fn = () => render(<div />, 6);
+ expect(fn).to.throw(/valid HTML node/);
+ expect(fn).to.throw(/<div/);
+ });
+
+ it('should print an error with (function) component name when available', () => {
+ const App = () => <div />;
+ let fn = () => render(<App />, 6);
+ expect(fn).to.throw(/<App/);
+ expect(fn).to.throw(/6/);
+
+ fn = () => render(<App />, {});
+ expect(fn).to.throw(/<App/);
+ expect(fn).to.throw(/[object Object]/);
+
+ fn = () => render(<Fragment />, 'badroot');
+ expect(fn).to.throw(/<Fragment/);
+ expect(fn).to.throw(/badroot/);
+ });
+
+ it('should print an error with (class) component name when available', () => {
+ class App extends Component {
+ render() {
+ return <div />;
+ }
+ }
+ let fn = () => render(<App />, 6);
+ expect(fn).to.throw(/<App/);
+ });
+
+ it('should print an error on undefined component', () => {
+ let fn = () => render(h(undefined), scratch);
+ expect(fn).to.throw(/createElement/);
+ });
+
+ it('should print an error on invalid object component', () => {
+ let fn = () => render(h({}), scratch);
+ expect(fn).to.throw(/createElement/);
+ });
+
+ it('should print an error when component is an array', () => {
+ let fn = () => render(h([<div />]), scratch);
+ expect(fn).to.throw(/createElement/);
+ });
+
+ it('should print an error on double jsx conversion', () => {
+ let Foo = <div />;
+ let fn = () => render(h(<Foo />), scratch);
+ expect(fn).to.throw(/JSX twice/);
+ });
+
+ it('should add __source to the vnode in debug mode.', () => {
+ const vnode = h('div', {
+ __source: {
+ fileName: 'div.jsx',
+ lineNumber: 3
+ }
+ });
+ expect(vnode.__source).to.deep.equal({
+ fileName: 'div.jsx',
+ lineNumber: 3
+ });
+ expect(vnode.props.__source).to.be.undefined;
+ });
+
+ it('should add __self to the vnode in debug mode.', () => {
+ const vnode = h('div', {
+ __self: {}
+ });
+ expect(vnode.__self).to.deep.equal({});
+ expect(vnode.props.__self).to.be.undefined;
+ });
+
+ it('should warn when accessing certain attributes', () => {
+ const vnode = h('div', null);
+
+ // Push into an array to avoid empty statements being dead code eliminated
+ const res = [];
+ res.push(vnode);
+ res.push(vnode.attributes);
+ expect(console.warn).to.be.calledOnce;
+ expect(console.warn.args[0]).to.match(/use vnode.props/);
+ res.push(vnode.nodeName);
+ expect(console.warn).to.be.calledTwice;
+ expect(console.warn.args[1]).to.match(/use vnode.type/);
+ res.push(vnode.children);
+ expect(console.warn).to.be.calledThrice;
+ expect(console.warn.args[2]).to.match(/use vnode.props.children/);
+
+ // Should only warn once
+ res.push(vnode.attributes);
+ expect(console.warn).to.be.calledThrice;
+ res.push(vnode.nodeName);
+ expect(console.warn).to.be.calledThrice;
+ res.push(vnode.children);
+ expect(console.warn).to.be.calledThrice;
+
+ vnode.attributes = {};
+ expect(console.warn.args[3]).to.match(/use vnode.props/);
+ vnode.nodeName = '';
+ expect(console.warn.args[4]).to.match(/use vnode.type/);
+ vnode.children = [];
+ expect(console.warn.args[5]).to.match(/use vnode.props.children/);
+
+ // Should only warn once
+ vnode.attributes = {};
+ expect(console.warn.args.length).to.equal(6);
+ vnode.nodeName = '';
+ expect(console.warn.args.length).to.equal(6);
+ vnode.children = [];
+ expect(console.warn.args.length).to.equal(6);
+
+ // Mark res as used, otherwise it will be dead code eliminated
+ expect(res.length).to.equal(7);
+ });
+
+ it('should warn when calling setState inside the constructor', () => {
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.setState({ foo: true });
+ }
+ render() {
+ return <div>foo</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+ expect(console.warn).to.be.calledOnce;
+ expect(console.warn.args[0]).to.match(/no-op/);
+ });
+
+ it('should NOT warn when calling setState inside the cWM', () => {
+ class Foo extends Component {
+ componentWillMount() {
+ this.setState({ foo: true });
+ }
+ render() {
+ return <div>foo</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+ expect(console.warn).to.not.be.called;
+ });
+
+ it('should warn when calling setState on an unmounted Component', () => {
+ let setState;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ setState = () => this.setState({ foo: true });
+ }
+ render() {
+ return <div>foo</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+ expect(console.warn).to.not.be.called;
+
+ render(null, scratch);
+
+ setState();
+ expect(console.warn).to.be.calledOnce;
+ expect(console.warn.args[0]).to.match(/no-op/);
+ });
+
+ it('should warn when calling forceUpdate inside the constructor', () => {
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.forceUpdate();
+ }
+ render() {
+ return <div>foo</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+ expect(console.warn).to.be.calledOnce;
+ expect(console.warn.args[0]).to.match(/no-op/);
+ });
+
+ it('should warn when calling forceUpdate on an unmounted Component', () => {
+ let forceUpdate;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ forceUpdate = () => this.forceUpdate();
+ }
+ render() {
+ return <div>foo</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+ forceUpdate();
+ expect(console.warn).to.not.be.called;
+
+ render(null, scratch);
+
+ forceUpdate();
+ expect(console.warn).to.be.calledOnce;
+ expect(console.warn.args[0]).to.match(/no-op/);
+ });
+
+ it('should print an error when child is a plain object', () => {
+ let fn = () => render(<div>{{}}</div>, scratch);
+ expect(fn).to.throw(/not valid/);
+ });
+
+ it('should print an error on invalid refs', () => {
+ let fn = () => render(<div ref="a" />, scratch);
+ expect(fn).to.throw(/createRef/);
+ });
+
+ it('should not print for null as a handler', () => {
+ let fn = () => render(<div onclick={null} />, scratch);
+ expect(fn).not.to.throw();
+ });
+
+ it('should not print for undefined as a handler', () => {
+ let fn = () => render(<div onclick={undefined} />, scratch);
+ expect(fn).not.to.throw();
+ });
+
+ it('should not print for attributes starting with on for Components', () => {
+ const Comp = () => <p>online</p>;
+ let fn = () => render(<Comp online={false} />, scratch);
+ expect(fn).not.to.throw();
+ });
+
+ it('should print an error on invalid handler', () => {
+ let fn = () => render(<div onclick="a" />, scratch);
+ expect(fn).to.throw(/"onclick" property should be a function/);
+ });
+
+ it('should NOT print an error on valid refs', () => {
+ let noop = () => {};
+ render(<div ref={noop} />, scratch);
+
+ let ref = createRef();
+ render(<div ref={ref} />, scratch);
+ expect(console.error).to.not.be.called;
+ });
+
+ describe('duplicate keys', () => {
+ const List = props => <ul>{props.children}</ul>;
+ const ListItem = props => <li>{props.children}</li>;
+
+ it('should print an error on duplicate keys with DOM nodes', () => {
+ render(
+ <div>
+ <span key="a" />
+ <span key="a" />
+ </div>,
+ scratch
+ );
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('should allow distinct object keys', () => {
+ const A = { is: 'A' };
+ const B = { is: 'B' };
+ render(
+ <div>
+ <span key={A} />
+ <span key={B} />
+ </div>,
+ scratch
+ );
+ expect(console.error).not.to.be.called;
+ });
+
+ it('should print an error for duplicate object keys', () => {
+ const A = { is: 'A' };
+ render(
+ <div>
+ <span key={A} />
+ <span key={A} />
+ </div>,
+ scratch
+ );
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('should print an error on duplicate keys with Components', () => {
+ function App() {
+ return (
+ <List>
+ <ListItem key="a">a</ListItem>
+ <ListItem key="b">b</ListItem>
+ <ListItem key="b">d</ListItem>
+ <ListItem key="d">d</ListItem>
+ </List>
+ );
+ }
+
+ render(<App />, scratch);
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('should print an error on duplicate keys with Fragments', () => {
+ function App() {
+ return (
+ <Fragment>
+ <List key="list">
+ <ListItem key="a">a</ListItem>
+ <ListItem key="b">b</ListItem>
+ <Fragment key="b">
+ {/* Should be okay to duplicate keys since these are inside a Fragment */}
+ <ListItem key="a">c</ListItem>
+ <ListItem key="b">d</ListItem>
+ <ListItem key="c">e</ListItem>
+ </Fragment>
+ <ListItem key="f">f</ListItem>
+ </List>
+ <div key="list">sibling</div>
+ </Fragment>
+ );
+ }
+
+ render(<App />, scratch);
+ expect(console.error).to.be.calledTwice;
+ });
+ });
+
+ describe('table markup', () => {
+ it('missing <tbody>/<thead>/<tfoot>/<table>', () => {
+ const Table = () => (
+ <tr>
+ <td>hi</td>
+ </tr>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('missing <table> with <thead>', () => {
+ const Table = () => (
+ <thead>
+ <tr>
+ <td>hi</td>
+ </tr>
+ </thead>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('missing <table> with <tbody>', () => {
+ const Table = () => (
+ <tbody>
+ <tr>
+ <td>hi</td>
+ </tr>
+ </tbody>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('missing <table> with <tfoot>', () => {
+ const Table = () => (
+ <tfoot>
+ <tr>
+ <td>hi</td>
+ </tr>
+ </tfoot>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('missing <tr>', () => {
+ const Table = () => (
+ <table>
+ <tbody>
+ <td>Hi</td>
+ </tbody>
+ </table>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('missing <tr> with td component', () => {
+ const Cell = ({ children }) => <td>{children}</td>;
+ const Table = () => (
+ <table>
+ <tbody>
+ <Cell>Hi</Cell>
+ </tbody>
+ </table>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('missing <tr> with th component', () => {
+ const Cell = ({ children }) => <th>{children}</th>;
+ const Table = () => (
+ <table>
+ <tbody>
+ <Cell>Hi</Cell>
+ </tbody>
+ </table>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('Should accept <td> instead of <th> in <thead>', () => {
+ const Table = () => (
+ <table>
+ <thead>
+ <tr>
+ <td>Hi</td>
+ </tr>
+ </thead>
+ </table>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.not.be.called;
+ });
+
+ it('Accepts well formed table with TD components', () => {
+ const Cell = ({ children }) => <td>{children}</td>;
+ const Table = () => (
+ <table>
+ <thead>
+ <tr>
+ <th>Head</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Body</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <Cell>Body</Cell>
+ </tr>
+ </tfoot>
+ </table>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.not.be.called;
+ });
+
+ it('Accepts well formed table', () => {
+ const Table = () => (
+ <table>
+ <thead>
+ <tr>
+ <th>Head</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Body</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td>Body</td>
+ </tr>
+ </tfoot>
+ </table>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.not.be.called;
+ });
+
+ it('Accepts minimal well formed table', () => {
+ const Table = () => (
+ <table>
+ <tr>
+ <th>Head</th>
+ </tr>
+ <tr>
+ <td>Body</td>
+ </tr>
+ </table>
+ );
+ render(<Table />, scratch);
+ expect(console.error).to.not.be.called;
+ });
+ });
+
+ describe('PropTypes', () => {
+ beforeEach(() => {
+ resetPropWarnings();
+ });
+
+ it("should fail if props don't match prop-types", () => {
+ function Foo(props) {
+ return <h1>{props.text}</h1>;
+ }
+
+ Foo.propTypes = {
+ text: PropTypes.string.isRequired
+ };
+
+ render(<Foo text={123} />, scratch);
+
+ expect(console.error).to.be.calledOnce;
+
+ // The message here may change when the "prop-types" library is updated,
+ // but we check it exactly to make sure all parameters were supplied
+ // correctly.
+ expect(console.error).to.have.been.calledOnceWith(
+ sinon.match(
+ /^Failed prop type: Invalid prop `text` of type `number` supplied to `Foo`, expected `string`\.\n {2}in Foo \(at (.*)[/\\]debug[/\\]test[/\\]browser[/\\]debug\.test\.js:[0-9]+\)$/m
+ )
+ );
+ });
+
+ it('should only log a given prop type error once', () => {
+ function Foo(props) {
+ return <h1>{props.text}</h1>;
+ }
+
+ Foo.propTypes = {
+ text: PropTypes.string.isRequired,
+ count: PropTypes.number
+ };
+
+ // Trigger the same error twice. The error should only be logged
+ // once.
+ render(<Foo text={123} />, scratch);
+ render(<Foo text={123} />, scratch);
+
+ expect(console.error).to.be.calledOnce;
+
+ // Trigger a different error. This should result in a new log
+ // message.
+ console.error.resetHistory();
+ render(<Foo text="ok" count="123" />, scratch);
+ expect(console.error).to.be.calledOnce;
+ });
+
+ it('should render with error logged when validator gets signal and throws exception', () => {
+ function Baz(props) {
+ return <h1>{props.unhappy}</h1>;
+ }
+
+ Baz.propTypes = {
+ unhappy: function alwaysThrows(obj, key) {
+ if (obj[key] === 'signal') throw Error('got prop');
+ }
+ };
+
+ render(<Baz unhappy={'signal'} />, scratch);
+
+ expect(console.error).to.be.calledOnce;
+ expect(errors[0].includes('got prop')).to.equal(true);
+ expect(serializeHtml(scratch)).to.equal('<h1>signal</h1>');
+ });
+
+ it('should not print to console when types are correct', () => {
+ function Bar(props) {
+ return <h1>{props.text}</h1>;
+ }
+
+ Bar.propTypes = {
+ text: PropTypes.string.isRequired
+ };
+
+ render(<Bar text="foo" />, scratch);
+ expect(console.error).to.not.be.called;
+ });
+ });
+});
diff --git a/preact/debug/test/browser/fakeDevTools.js b/preact/debug/test/browser/fakeDevTools.js
new file mode 100644
index 0000000..e611df3
--- /dev/null
+++ b/preact/debug/test/browser/fakeDevTools.js
@@ -0,0 +1 @@
+window.__PREACT_DEVTOOLS__ = { attachPreact: sinon.spy() };
diff --git a/preact/debug/test/browser/serializeVNode.test.js b/preact/debug/test/browser/serializeVNode.test.js
new file mode 100644
index 0000000..f8c8515
--- /dev/null
+++ b/preact/debug/test/browser/serializeVNode.test.js
@@ -0,0 +1,66 @@
+import { createElement, Component } from 'preact';
+import { serializeVNode } from '../../src/debug';
+
+/** @jsx createElement */
+
+describe('serializeVNode', () => {
+ it("should prefer a function component's displayName", () => {
+ function Foo() {
+ return <div />;
+ }
+ Foo.displayName = 'Bar';
+
+ expect(serializeVNode(<Foo />)).to.equal('<Bar />');
+ });
+
+ it("should prefer a class component's displayName", () => {
+ class Bar extends Component {
+ render() {
+ return <div />;
+ }
+ }
+ Bar.displayName = 'Foo';
+
+ expect(serializeVNode(<Bar />)).to.equal('<Foo />');
+ });
+
+ it('should serialize vnodes without children', () => {
+ expect(serializeVNode(<br />)).to.equal('<br />');
+ });
+
+ it('should serialize vnodes with children', () => {
+ expect(serializeVNode(<div>Hello World</div>)).to.equal('<div>..</div>');
+ });
+
+ it('should serialize components', () => {
+ function Foo() {
+ return <div />;
+ }
+ expect(serializeVNode(<Foo />)).to.equal('<Foo />');
+ });
+
+ it('should serialize props', () => {
+ expect(serializeVNode(<div class="foo" />)).to.equal('<div class="foo" />');
+
+ // Ensure that we have a predictable function name. Our test runner
+ // creates an all inclusive bundle per file and the identifier
+ // "noop" may have already been used.
+ // eslint-disable-next-line func-style
+ let noop = function noopFn() {};
+ expect(serializeVNode(<div onClick={noop} />)).to.equal(
+ '<div onClick="function noopFn() {}" />'
+ );
+
+ function Foo(props) {
+ return props.foo;
+ }
+
+ expect(serializeVNode(<Foo foo={[1, 2, 3]} />)).to.equal(
+ '<Foo foo="1,2,3" />'
+ );
+
+ expect(serializeVNode(<div prop={Object.create(null)} />)).to.equal(
+ '<div prop="[object Object]" />'
+ );
+ });
+});
diff --git a/preact/demo/contenteditable.js b/preact/demo/contenteditable.js
new file mode 100644
index 0000000..4e913ba
--- /dev/null
+++ b/preact/demo/contenteditable.js
@@ -0,0 +1,25 @@
+import { createElement } from 'preact';
+import { useState } from 'preact/hooks';
+
+export default function Contenteditable() {
+ const [value, setValue] = useState("Hey there<br />I'm editable!");
+
+ return (
+ <div>
+ <div>
+ <button onClick={() => setValue('')}>Clear!</button>
+ </div>
+ <div
+ style={{
+ border: '1px solid gray',
+ padding: '8px',
+ margin: '8px 0',
+ background: 'white'
+ }}
+ contentEditable
+ onInput={e => setValue(e.currentTarget.innerHTML)}
+ dangerouslySetInnerHTML={{ __html: value }}
+ />
+ </div>
+ );
+}
diff --git a/preact/demo/context.js b/preact/demo/context.js
new file mode 100644
index 0000000..3fe3bc0
--- /dev/null
+++ b/preact/demo/context.js
@@ -0,0 +1,69 @@
+// eslint-disable-next-line no-unused-vars
+import { createElement, Component, createContext, Fragment } from 'preact';
+const { Provider, Consumer } = createContext();
+
+class ThemeProvider extends Component {
+ state = {
+ value: this.props.value
+ };
+
+ onClick = () => {
+ this.setState(prev => ({
+ value:
+ prev.value === this.props.value ? this.props.next : this.props.value
+ }));
+ };
+
+ render() {
+ return (
+ <div>
+ <button onClick={this.onClick}>Toggle</button>
+ <Provider value={this.state.value}>{this.props.children}</Provider>
+ </div>
+ );
+ }
+}
+
+class Child extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return (
+ <>
+ <p>(blocked update)</p>
+ {this.props.children}
+ </>
+ );
+ }
+}
+
+export default class ContextDemo extends Component {
+ render() {
+ return (
+ <ThemeProvider value="blue" next="red">
+ <Child>
+ <Consumer>
+ {data => (
+ <div>
+ <p>
+ current theme: <b>{data}</b>
+ </p>
+ <ThemeProvider value="black" next="white">
+ <Consumer>
+ {data => (
+ <p>
+ current sub theme: <b>{data}</b>
+ </p>
+ )}
+ </Consumer>
+ </ThemeProvider>
+ </div>
+ )}
+ </Consumer>
+ </Child>
+ </ThemeProvider>
+ );
+ }
+}
diff --git a/preact/demo/devtools.js b/preact/demo/devtools.js
new file mode 100644
index 0000000..0484582
--- /dev/null
+++ b/preact/demo/devtools.js
@@ -0,0 +1,42 @@
+// eslint-disable-next-line no-unused-vars
+import {
+ createElement,
+ Component,
+ memo,
+ Fragment,
+ Suspense,
+ lazy
+} from 'react';
+
+function Foo() {
+ return <div>I'm memoed</div>;
+}
+
+function LazyComp() {
+ return <div>I'm (fake) lazy loaded</div>;
+}
+
+const Lazy = lazy(() => Promise.resolve({ default: LazyComp }));
+
+const Memoed = memo(Foo);
+
+export default class DevtoolsDemo extends Component {
+ render() {
+ return (
+ <div>
+ <h1>memo()</h1>
+ <p>
+ <b>functional component:</b>
+ </p>
+ <Memoed />
+ <h1>lazy()</h1>
+ <p>
+ <b>functional component:</b>
+ </p>
+ <Suspense fallback={<div>Loading (fake) lazy loaded component...</div>}>
+ <Lazy />
+ </Suspense>
+ </div>
+ );
+ }
+}
diff --git a/preact/demo/fragments.js b/preact/demo/fragments.js
new file mode 100644
index 0000000..b713860
--- /dev/null
+++ b/preact/demo/fragments.js
@@ -0,0 +1,26 @@
+import { createElement, Component, Fragment } from 'preact';
+
+export default class extends Component {
+ state = { number: 0 };
+
+ componentDidMount() {
+ setInterval(_ => this.updateChildren(), 1000);
+ }
+
+ updateChildren() {
+ this.setState(state => ({ number: state.number + 1 }));
+ }
+
+ render(props, state) {
+ return (
+ <div>
+ <div>{state.number}</div>
+ <>
+ <div>one</div>
+ <div>{state.number}</div>
+ <div>three</div>
+ </>
+ </div>
+ );
+ }
+}
diff --git a/preact/demo/index.js b/preact/demo/index.js
new file mode 100644
index 0000000..72c58ee
--- /dev/null
+++ b/preact/demo/index.js
@@ -0,0 +1,187 @@
+import { createElement, render, Component, Fragment } from 'preact';
+// import renderToString from 'preact-render-to-string';
+import './style.scss';
+import { Router, Link } from 'preact-router';
+import Pythagoras from './pythagoras';
+import Spiral from './spiral';
+import Reorder from './reorder';
+import Todo from './todo';
+import Fragments from './fragments';
+import Context from './context';
+import installLogger from './logger';
+import ProfilerDemo from './profiler';
+import KeyBug from './key_bug';
+import StateOrderBug from './stateOrderBug';
+import PeopleBrowser from './people';
+import StyledComp from './styled-components';
+import { initDevTools } from 'preact/devtools/src/devtools';
+import { initDebug } from 'preact/debug/src/debug';
+import DevtoolsDemo from './devtools';
+import SuspenseDemo from './suspense';
+import Redux from './redux';
+import TextFields from './textFields';
+import ReduxBug from './reduxUpdate';
+import SuspenseRouterBug from './suspense-router';
+import NestedSuspenseBug from './nested-suspense';
+import Contenteditable from './contenteditable';
+import { MobXDemo } from './mobx';
+
+let isBenchmark = /(\/spiral|\/pythagoras|[#&]bench)/g.test(
+ window.location.href
+);
+if (!isBenchmark) {
+ // eslint-disable-next-line no-console
+ console.log('Enabling devtools and debug');
+ initDevTools();
+ initDebug();
+}
+
+// mobx-state-tree fix
+window.setImmediate = setTimeout;
+
+class Home extends Component {
+ render() {
+ return (
+ <div>
+ <h1>Hello</h1>
+ </div>
+ );
+ }
+}
+
+class DevtoolsWarning extends Component {
+ onClick = () => {
+ window.location.reload();
+ };
+
+ render() {
+ return (
+ <button onClick={this.onClick}>
+ Start Benchmark (disables devtools)
+ </button>
+ );
+ }
+}
+
+class App extends Component {
+ render({ url }) {
+ return (
+ <div class="app">
+ <header>
+ <nav>
+ <Link href="/" activeClassName="active">
+ Home
+ </Link>
+ <Link href="/reorder" activeClassName="active">
+ Reorder
+ </Link>
+ <Link href="/spiral" activeClassName="active">
+ Spiral
+ </Link>
+ <Link href="/pythagoras" activeClassName="active">
+ Pythagoras
+ </Link>
+ <Link href="/todo" activeClassName="active">
+ ToDo
+ </Link>
+ <Link href="/fragments" activeClassName="active">
+ Fragments
+ </Link>
+ <Link href="/key_bug" activeClassName="active">
+ Key Bug
+ </Link>
+ <Link href="/profiler" activeClassName="active">
+ Profiler
+ </Link>
+ <Link href="/context" activeClassName="active">
+ Context
+ </Link>
+ <Link href="/devtools" activeClassName="active">
+ Devtools
+ </Link>
+ <Link href="/empty-fragment" activeClassName="active">
+ Empty Fragment
+ </Link>
+ <Link href="/people" activeClassName="active">
+ People Browser
+ </Link>
+ <Link href="/state-order" activeClassName="active">
+ State Order
+ </Link>
+ <Link href="/styled-components" activeClassName="active">
+ Styled Components
+ </Link>
+ <Link href="/redux" activeClassName="active">
+ Redux
+ </Link>
+ <Link href="/mobx" activeClassName="active">
+ MobX
+ </Link>
+ <Link href="/suspense" activeClassName="active">
+ Suspense / lazy
+ </Link>
+ <Link href="/textfields" activeClassName="active">
+ Textfields
+ </Link>
+ <Link href="/reduxBug/1" activeClassName="active">
+ Redux Bug
+ </Link>
+ <Link href="/suspense-router" activeClassName="active">
+ Suspense Router Bug
+ </Link>
+ <Link href="/nested-suspense" activeClassName="active">
+ Nested Suspense Bug
+ </Link>
+ <Link href="/contenteditable" activeClassName="active">
+ contenteditable
+ </Link>
+ </nav>
+ </header>
+ <main>
+ <Router url={url}>
+ <Home path="/" />
+ <StateOrderBug path="/state-order" />
+ <Reorder path="/reorder" />
+ <div path="/spiral">
+ {!isBenchmark ? <DevtoolsWarning /> : <Spiral />}
+ </div>
+ <div path="/pythagoras">
+ {!isBenchmark ? <DevtoolsWarning /> : <Pythagoras />}
+ </div>
+ <Todo path="/todo" />
+ <Fragments path="/fragments" />
+ <ProfilerDemo path="/profiler" />
+ <KeyBug path="/key_bug" />
+ <Context path="/context" />
+ <DevtoolsDemo path="/devtools" />
+ <SuspenseDemo path="/suspense" />
+ <EmptyFragment path="/empty-fragment" />
+ <PeopleBrowser path="/people/:user?" />
+ <StyledComp path="/styled-components" />
+ <Redux path="/redux" />
+ <MobXDemo path="/mobx" />
+ <TextFields path="/textfields" />
+ <ReduxBug path="/reduxBug/:start" />
+ <SuspenseRouterBug path="/suspense-router" />
+ <NestedSuspenseBug path="/nested-suspense" />
+ <Contenteditable path="/contenteditable" />
+ </Router>
+ </main>
+ </div>
+ );
+ }
+}
+
+function EmptyFragment() {
+ return <Fragment />;
+}
+
+// document.body.innerHTML = renderToString(<App url={location.href.match(/[#&]ssr/) ? undefined : '/'} />);
+// document.body.firstChild.setAttribute('is-ssr', 'true');
+
+installLogger(
+ String(localStorage.LOG) === 'true' || location.href.match(/logger/),
+ String(localStorage.CONSOLE) === 'true' || location.href.match(/console/)
+);
+
+render(<App />, document.body);
diff --git a/preact/demo/key_bug.js b/preact/demo/key_bug.js
new file mode 100644
index 0000000..0ccb1a6
--- /dev/null
+++ b/preact/demo/key_bug.js
@@ -0,0 +1,32 @@
+import { createElement, Component } from 'preact';
+
+function Foo(props) {
+ return <div>This is: {props.children}</div>;
+}
+
+export default class KeyBug extends Component {
+ constructor() {
+ super();
+ this.onClick = this.onClick.bind(this);
+ this.state = { active: false };
+ }
+
+ onClick() {
+ this.setState(prev => ({ active: !prev.active }));
+ }
+
+ render() {
+ return (
+ <div>
+ {this.state.active && <Foo>foo</Foo>}
+ <h1>Hello World</h1>
+ <br />
+ <Foo>
+ bar <Foo>bar</Foo>
+ </Foo>
+ <br />
+ <button onClick={this.onClick}>Toggle</button>
+ </div>
+ );
+ }
+}
diff --git a/preact/demo/list.js b/preact/demo/list.js
new file mode 100644
index 0000000..2ef968c
--- /dev/null
+++ b/preact/demo/list.js
@@ -0,0 +1,63 @@
+import { h, render } from 'preact';
+import htm from 'htm';
+import './style.css';
+
+const html = htm.bind(h);
+const createRoot = parent => ({
+ render: v => render(v, parent)
+});
+
+function List({ items, renders, useKeys, useCounts, update }) {
+ const toggleKeys = () => update({ useKeys: !useKeys });
+ const toggleCounts = () => update({ useCounts: !useCounts });
+ const swap = () => {
+ const u = { items: items.slice() };
+ u.items[1] = items[8];
+ u.items[8] = items[1];
+ update(u);
+ };
+ return html`
+ <div>
+ <button onClick=${update}>Re-render</button>
+ <button onClick=${swap}>Swap 2 & 8</button>
+ <label>
+ <input type="checkbox" checked=${useKeys} onClick=${toggleKeys} />
+ Use Keys
+ </label>
+ <label>
+ <input type="checkbox" checked=${useCounts} onClick=${toggleCounts} />
+ Counts
+ </label>
+ <ul class="list">
+ ${items.map(
+ (item, i) => html`
+ <li
+ class=${i % 2 ? 'odd' : 'even'}
+ key=${useKeys ? item.name : undefined}
+ >
+ ${item.name} ${useCounts ? ` (${renders} renders)` : ''}
+ </li>
+ `
+ )}
+ </ul>
+ </div>
+ `;
+}
+
+const root = createRoot(document.body);
+
+let data = {
+ items: new Array(1000).fill(null).map((x, i) => ({ name: `Item ${i + 1}` })),
+ renders: 0,
+ useKeys: false,
+ useCounts: false
+};
+
+function update(partial) {
+ if (partial) Object.assign(data, partial);
+ data.renders++;
+ data.update = update;
+ root.render(List(data));
+}
+
+update();
diff --git a/preact/demo/logger.js b/preact/demo/logger.js
new file mode 100644
index 0000000..59df9b9
--- /dev/null
+++ b/preact/demo/logger.js
@@ -0,0 +1,170 @@
+export default function logger(logStats, logConsole) {
+ if (!logStats && !logConsole) {
+ return;
+ }
+
+ const consoleBuffer = new ConsoleBuffer();
+
+ let calls = {};
+ let lock = true;
+
+ function serialize(obj) {
+ if (obj instanceof Text) return '#text';
+ if (obj instanceof Element) return `<${obj.localName}>`;
+ if (obj === document) return 'document';
+ return Object.prototype.toString.call(obj).replace(/(^\[object |\]$)/g, '');
+ }
+
+ function count(key) {
+ if (lock === true) return;
+ calls[key] = (calls[key] || 0) + 1;
+
+ if (logConsole) {
+ consoleBuffer.log(key);
+ }
+ }
+
+ function logCall(obj, method, name) {
+ let old = obj[method];
+ obj[method] = function() {
+ let c = '';
+ for (let i = 0; i < arguments.length; i++) {
+ if (c) c += ', ';
+ c += serialize(arguments[i]);
+ }
+ count(`${serialize(this)}.${method}(${c})`);
+ return old.apply(this, arguments);
+ };
+ }
+
+ logCall(document, 'createElement');
+ logCall(document, 'createElementNS');
+ logCall(Element.prototype, 'remove');
+ logCall(Element.prototype, 'appendChild');
+ logCall(Element.prototype, 'removeChild');
+ logCall(Element.prototype, 'insertBefore');
+ logCall(Element.prototype, 'replaceChild');
+ logCall(Element.prototype, 'setAttribute');
+ logCall(Element.prototype, 'setAttributeNS');
+ logCall(Element.prototype, 'removeAttribute');
+ logCall(Element.prototype, 'removeAttributeNS');
+ let d =
+ Object.getOwnPropertyDescriptor(CharacterData.prototype, 'data') ||
+ Object.getOwnPropertyDescriptor(Node.prototype, 'data');
+ Object.defineProperty(Text.prototype, 'data', {
+ get() {
+ let value = d.get.call(this);
+ count(`get #text.data`);
+ return value;
+ },
+ set(v) {
+ count(`set #text.data`);
+ return d.set.call(this, v);
+ }
+ });
+
+ let root;
+ function setup() {
+ if (!logStats) return;
+
+ lock = true;
+ root = document.createElement('table');
+ root.style.cssText =
+ 'position: fixed; right: 0; top: 0; z-index:999; background: #000; font-size: 12px; color: #FFF; opacity: 0.9; white-space: nowrap;';
+ let header = document.createElement('thead');
+ header.innerHTML =
+ '<tr><td colspan="2">Stats <button id="clear-logs">clear</button></td></tr>';
+ root.tableBody = document.createElement('tbody');
+ root.appendChild(root.tableBody);
+ root.appendChild(header);
+ document.documentElement.appendChild(root);
+ let btn = document.getElementById('clear-logs');
+ btn.addEventListener('click', () => {
+ for (let key in calls) {
+ calls[key] = 0;
+ }
+ });
+ lock = false;
+ }
+
+ let rows = {};
+ function createRow(id) {
+ let row = document.createElement('tr');
+ row.key = document.createElement('td');
+ row.key.textContent = id;
+ row.appendChild(row.key);
+ row.value = document.createElement('td');
+ row.value.textContent = ' ';
+ row.appendChild(row.value);
+ root.tableBody.appendChild(row);
+ return (rows[id] = row);
+ }
+
+ function insertInto(parent) {
+ parent.appendChild(root);
+ }
+
+ function remove() {
+ clearInterval(updateTimer);
+ }
+
+ function update() {
+ if (!logStats) return;
+
+ lock = true;
+ for (let i in calls) {
+ if (calls.hasOwnProperty(i)) {
+ let row = rows[i] || createRow(i);
+ row.value.firstChild.nodeValue = calls[i];
+ }
+ }
+ lock = false;
+ }
+
+ let updateTimer = setInterval(update, 50);
+
+ setup();
+ lock = false;
+ return { insertInto, update, remove };
+}
+
+/**
+ * Logging to the console significantly affects performance.
+ * Buffer calls to console and replay them at the end of the
+ * current stack
+ * @extends {Console}
+ */
+class ConsoleBuffer {
+ constructor() {
+ /** @type {Array<[string, any[]]>} */
+ this.buffer = [];
+ this.deferred = null;
+
+ for (let methodName of Object.keys(console)) {
+ this[methodName] = this.proxy(methodName);
+ }
+ }
+
+ proxy(methodName) {
+ return (...args) => {
+ this.buffer.push([methodName, args]);
+ this.deferFlush();
+ };
+ }
+
+ deferFlush() {
+ if (this.deferred == null) {
+ this.deferred = Promise.resolve()
+ .then(() => this.flush())
+ .then(() => (this.deferred = null));
+ }
+ }
+
+ flush() {
+ let method;
+ while ((method = this.buffer.shift())) {
+ let [name, args] = method;
+ console[name](...args);
+ }
+ }
+}
diff --git a/preact/demo/mobx.js b/preact/demo/mobx.js
new file mode 100644
index 0000000..8e4159f
--- /dev/null
+++ b/preact/demo/mobx.js
@@ -0,0 +1,75 @@
+import React, { createElement, forwardRef, useRef, useState } from 'react';
+import { decorate, observable } from 'mobx';
+import { observer, useObserver } from 'mobx-react';
+import 'mobx-react-lite/batchingForReactDom';
+
+class Todo {
+ constructor() {
+ this.id = Math.random();
+ this.title = 'initial';
+ this.finished = false;
+ }
+}
+decorate(Todo, {
+ title: observable,
+ finished: observable
+});
+
+const Forward = observer(
+ // eslint-disable-next-line react/display-name
+ forwardRef(({ todo }, ref) => {
+ return (
+ <p ref={ref}>
+ Forward: "{todo.title}" {'' + todo.finished}
+ </p>
+ );
+ })
+);
+
+const todo = new Todo();
+
+const TodoView = observer(({ todo }) => {
+ return (
+ <p>
+ Todo View: "{todo.title}" {'' + todo.finished}
+ </p>
+ );
+});
+
+const HookView = ({ todo }) => {
+ return useObserver(() => {
+ return (
+ <p>
+ Todo View: "{todo.title}" {'' + todo.finished}
+ </p>
+ );
+ });
+};
+
+export function MobXDemo() {
+ const ref = useRef(null);
+ let [v, set] = useState(0);
+
+ const success = ref.current && ref.current.nodeName === 'P';
+
+ return (
+ <div>
+ <input
+ type="text"
+ placeholder="type here..."
+ onInput={e => {
+ todo.title = e.target.value;
+ set(v + 1);
+ }}
+ />
+ <p>
+ <b style={`color: ${success ? 'green' : 'red'}`}>
+ {success ? 'SUCCESS' : 'FAIL'}
+ </b>
+ </p>
+ <TodoView todo={todo} />
+ <Forward todo={todo} ref={ref} />
+ <HookView todo={todo} />
+ </div>
+ );
+}
diff --git a/preact/demo/nested-suspense/addnewcomponent.js b/preact/demo/nested-suspense/addnewcomponent.js
new file mode 100644
index 0000000..e3e4695
--- /dev/null
+++ b/preact/demo/nested-suspense/addnewcomponent.js
@@ -0,0 +1,5 @@
+import { createElement } from 'react';
+
+export default function AddNewComponent({ appearance }) {
+ return <div>AddNewComponent (component #{appearance})</div>;
+}
diff --git a/preact/demo/nested-suspense/component-container.js b/preact/demo/nested-suspense/component-container.js
new file mode 100644
index 0000000..b1da87b
--- /dev/null
+++ b/preact/demo/nested-suspense/component-container.js
@@ -0,0 +1,17 @@
+import { createElement, lazy } from 'react';
+
+const pause = timeout =>
+ new Promise(d => setTimeout(d, timeout), console.log(timeout));
+
+const SubComponent = lazy(() =>
+ pause(Math.random() * 1000).then(() => import('./subcomponent.js'))
+);
+
+export default function ComponentContainer({ appearance }) {
+ return (
+ <div>
+ GenerateComponents (component #{appearance})
+ <SubComponent />
+ </div>
+ );
+}
diff --git a/preact/demo/nested-suspense/dropzone.js b/preact/demo/nested-suspense/dropzone.js
new file mode 100644
index 0000000..c4a28b4
--- /dev/null
+++ b/preact/demo/nested-suspense/dropzone.js
@@ -0,0 +1,5 @@
+import { createElement } from 'react';
+
+export default function DropZone({ appearance }) {
+ return <div>DropZone (component #{appearance})</div>;
+}
diff --git a/preact/demo/nested-suspense/editor.js b/preact/demo/nested-suspense/editor.js
new file mode 100644
index 0000000..253d130
--- /dev/null
+++ b/preact/demo/nested-suspense/editor.js
@@ -0,0 +1,5 @@
+import { createElement } from 'react';
+
+export default function Editor({ children }) {
+ return <div className="Editor">{children}</div>;
+}
diff --git a/preact/demo/nested-suspense/index.js b/preact/demo/nested-suspense/index.js
new file mode 100644
index 0000000..6c525b3
--- /dev/null
+++ b/preact/demo/nested-suspense/index.js
@@ -0,0 +1,69 @@
+import { createElement, Suspense, lazy, Component } from 'react';
+
+const Loading = function() {
+ return <div>Loading...</div>;
+};
+const Error = function({ resetState }) {
+ return (
+ <div>
+ Error!&nbsp;
+ <a onClick={resetState} href="#">
+ Reset app
+ </a>
+ </div>
+ );
+};
+
+const pause = timeout =>
+ new Promise(d => setTimeout(d, timeout), console.log(timeout));
+
+const DropZone = lazy(() =>
+ pause(Math.random() * 1000).then(() => import('./dropzone.js'))
+);
+const Editor = lazy(() =>
+ pause(Math.random() * 1000).then(() => import('./editor.js'))
+);
+const AddNewComponent = lazy(() =>
+ pause(Math.random() * 1000).then(() => import('./addnewcomponent.js'))
+);
+const GenerateComponents = lazy(() =>
+ pause(Math.random() * 1000).then(() => import('./component-container.js'))
+);
+
+export default class App extends Component {
+ state = { hasError: false };
+
+ static getDerivedStateFromError(error) {
+ // Update state so the next render will show the fallback UI.
+ console.warn(error);
+ return { hasError: true };
+ }
+
+ render() {
+ return this.state.hasError ? (
+ <Error resetState={() => this.setState({ hasError: false })} />
+ ) : (
+ <Suspense fallback={<Loading />}>
+ <DropZone appearance={0} />
+ <Editor title="APP_TITLE">
+ <main>
+ <Suspense fallback={<Loading />}>
+ <GenerateComponents appearance={1} />
+ </Suspense>
+ <AddNewComponent appearance={2} />
+ </main>
+ <aside>
+ <section>
+ <Suspense fallback={<Loading />}>
+ <GenerateComponents appearance={3} />
+ </Suspense>
+ <AddNewComponent appearance={4} />
+ </section>
+ </aside>
+ </Editor>
+
+ <footer>Footer here</footer>
+ </Suspense>
+ );
+ }
+}
diff --git a/preact/demo/nested-suspense/subcomponent.js b/preact/demo/nested-suspense/subcomponent.js
new file mode 100644
index 0000000..74d6d1d
--- /dev/null
+++ b/preact/demo/nested-suspense/subcomponent.js
@@ -0,0 +1,5 @@
+import { createElement } from 'react';
+
+export default function SubComponent({ onClick }) {
+ return <div>Lazy loaded sub component</div>;
+}
diff --git a/preact/demo/old.js.bak b/preact/demo/old.js.bak
new file mode 100644
index 0000000..7f2b7c0
--- /dev/null
+++ b/preact/demo/old.js.bak
@@ -0,0 +1,103 @@
+
+// function createRoot(title) {
+// let div = document.createElement('div');
+// let h2 = document.createElement('h2');
+// h2.textContent = title;
+// div.appendChild(h2);
+// document.body.appendChild(div);
+// return div;
+// }
+
+
+/*
+function logCall(obj, method, name) {
+ let old = obj[method];
+ obj[method] = function(...args) {
+ console.log(`<${this.localName}>.`+(name || `${method}(${args})`));
+ return old.apply(this, args);
+ };
+}
+
+logCall(HTMLElement.prototype, 'appendChild');
+logCall(HTMLElement.prototype, 'removeChild');
+logCall(HTMLElement.prototype, 'insertBefore');
+logCall(HTMLElement.prototype, 'replaceChild');
+logCall(HTMLElement.prototype, 'setAttribute');
+logCall(HTMLElement.prototype, 'removeAttribute');
+let d = Object.getOwnPropertyDescriptor(Node.prototype, 'nodeValue');
+Object.defineProperty(Text.prototype, 'nodeValue', {
+ get() {
+ let value = d.get.call(this);
+ console.log('get Text#nodeValue: ', value);
+ return value;
+ },
+ set(v) {
+ console.log('set Text#nodeValue', v);
+ return d.set.call(this, v);
+ }
+});
+
+
+render((
+ <div>
+ <h4>This is a test.</h4>
+ <Foo />
+ <time>...</time>
+ </div>
+), createRoot('Stateful component update demo:'));
+
+
+class Foo extends Component {
+ componentDidMount() {
+ console.log('mounted');
+ this.timer = setInterval( () => {
+ this.setState({ time: Date.now() });
+ }, 5000);
+ }
+ componentWillUnmount() {
+ clearInterval(this.timer);
+ }
+ render(props, state, context) {
+ // console.log('rendering', props, state, context);
+ return <time>test: {state.time}</time>
+ }
+}
+
+
+render((
+ <div>
+ <h4>This is a test.</h4>
+ <Foo />
+ <time>...</time>
+ </div>
+), createRoot('Stateful component update demo:'));
+
+
+let items = [];
+let count = 0;
+let three = createRoot('Top-level render demo:');
+
+setInterval( () => {
+ if (count++ %20 < 10 ) {
+ items.push(<li key={count} style={{
+ position: 'relative',
+ transition: 'all 200ms ease',
+ paddingLeft: items.length*20 +'px'
+ }}>item #{items.length}</li>);
+ }
+ else {
+ items.shift();
+ }
+
+ render((
+ <div>
+ <h4>This is a test.</h4>
+ <time>{Date.now()}</time>
+ <ul>{items}</ul>
+ </div>
+ ), three);
+}, 5000);
+
+// Mount the top-level component to the DOM:
+render(<Main />, document.body);
+*/
diff --git a/preact/demo/package.json b/preact/demo/package.json
new file mode 100644
index 0000000..21cfb36
--- /dev/null
+++ b/preact/demo/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "demo",
+ "main": "index.js",
+ "scripts": {
+ "start": "webpack-dev-server --inline"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.0.0-beta.55",
+ "@babel/plugin-proposal-class-properties": "^7.0.0-beta.55",
+ "@babel/plugin-proposal-decorators": "^7.4.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+ "@babel/plugin-transform-react-constant-elements": "^7.0.0-beta.55",
+ "@babel/plugin-transform-react-jsx": "^7.0.0-beta.55",
+ "@babel/plugin-transform-runtime": "^7.4.0",
+ "@babel/preset-env": "^7.0.0-beta.55",
+ "@babel/preset-react": "^7.0.0-beta.55",
+ "@babel/preset-typescript": "^7.3.3",
+ "babel-loader": "^8.0.0-beta.0",
+ "css-loader": "2.1.1",
+ "html-webpack-plugin": "3.2.0",
+ "node-sass": "^4.12.0",
+ "sass-loader": "7.1.0",
+ "style-loader": "0.23.1",
+ "webpack": "4.33.0",
+ "webpack-cli": "^3.3.4",
+ "webpack-dev-server": "^3.7.1"
+ },
+ "dependencies": {
+ "@material-ui/core": "4.9.5",
+ "d3-scale": "^1.0.7",
+ "d3-selection": "^1.2.0",
+ "htm": "2.1.1",
+ "mobx": "^5.15.4",
+ "mobx-react": "^6.2.2",
+ "mobx-state-tree": "^3.16.0",
+ "preact-render-to-string": "^5.0.2",
+ "preact-router": "^3.0.0",
+ "react-redux": "^7.1.0",
+ "react-router": "^5.0.1",
+ "react-router-dom": "^5.0.1",
+ "redux": "^4.0.1",
+ "styled-components": "^4.2.0"
+ }
+}
diff --git a/preact/demo/people/Readme.md b/preact/demo/people/Readme.md
new file mode 100644
index 0000000..c18a1cb
--- /dev/null
+++ b/preact/demo/people/Readme.md
@@ -0,0 +1,3 @@
+# People demo page
+
+This section of our demo was originally made by [phaux](https://github.com/phaux) in the [web-app-boilerplate](https://github.com/phaux/web-app-boilerplate) repo. It has been slightly modified from it's original to better work inside of our demo app
diff --git a/preact/demo/people/index.tsx b/preact/demo/people/index.tsx
new file mode 100644
index 0000000..0e728ab
--- /dev/null
+++ b/preact/demo/people/index.tsx
@@ -0,0 +1,59 @@
+import { observer } from 'mobx-react';
+import { Component, h } from 'preact';
+import { Profile } from './profile';
+import { Link, Route, Router } from './router';
+import { store } from './store';
+
+import './styles/index.scss';
+
+@observer
+export default class App extends Component {
+ componentDidMount() {
+ store.loadUsers().catch(console.error);
+ }
+
+ render() {
+ return (
+ <Router>
+ <div id="people-app">
+ <nav>
+ <div style={{ margin: 16, textAlign: 'center' }}>
+ Sort by{' '}
+ <select
+ value={store.usersOrder}
+ onChange={(ev: any) => {
+ store.setUsersOrder(ev.target.value);
+ }}
+ >
+ <option value="name">Name</option>
+ <option value="id">ID</option>
+ </select>
+ </div>
+ <ul>
+ {store.getSortedUsers().map((user, i) => (
+ <li
+ key={user.id}
+ style={{
+ animationDelay: `${i * 20}ms`,
+ top: `calc(var(--menu-item-height) * ${i})`,
+ transitionDelay: `${i * 20}ms`
+ }}
+ >
+ <Link href={`people/${user.id}`} active>
+ <img class="avatar" src={user.picture.large} />
+ {user.name.first} {user.name.last}
+ </Link>
+ </li>
+ ))}
+ </ul>
+ </nav>
+ <section id="people-main">
+ <Route match="people">
+ <Route match="*" component={Profile} />
+ </Route>
+ </section>
+ </div>
+ </Router>
+ );
+ }
+}
diff --git a/preact/demo/people/profile.tsx b/preact/demo/people/profile.tsx
new file mode 100644
index 0000000..e1f44ea
--- /dev/null
+++ b/preact/demo/people/profile.tsx
@@ -0,0 +1,59 @@
+import { computed, observable } from 'mobx';
+import { observer } from 'mobx-react';
+import { Component, h } from 'preact';
+import { RouteChildProps } from './router';
+import { store } from './store';
+
+export type ProfileProps = RouteChildProps;
+@observer
+export class Profile extends Component<ProfileProps> {
+ @observable id = '';
+ @observable busy = false;
+
+ componentDidMount() {
+ this.id = this.props.route;
+ }
+
+ componentWillReceiveProps(props: ProfileProps) {
+ this.id = props.route;
+ }
+
+ render() {
+ const user = this.user;
+ if (user == null) return null;
+ return (
+ <div class="profile">
+ <img class="avatar" src={user.picture.large} />
+ <h2>
+ {user.name.first} {user.name.last}
+ </h2>
+ <div class="details">
+ <p>
+ {user.gender === 'female' ? '👩' : '👨'} {user.id}
+ </p>
+ <p>🖂 {user.email}</p>
+ </div>
+ <p>
+ <button
+ class={this.busy ? 'secondary busy' : 'secondary'}
+ disabled={this.busy}
+ onClick={this.remove}
+ >
+ Remove contact
+ </button>
+ </p>
+ </div>
+ );
+ }
+
+ @computed get user() {
+ return store.users.find(u => u.id === this.id);
+ }
+
+ remove = async () => {
+ this.busy = true;
+ await new Promise<void>(cb => setTimeout(cb, 1500));
+ store.deleteUser(this.id);
+ this.busy = false;
+ };
+}
diff --git a/preact/demo/people/router.tsx b/preact/demo/people/router.tsx
new file mode 100644
index 0000000..56fc420
--- /dev/null
+++ b/preact/demo/people/router.tsx
@@ -0,0 +1,153 @@
+import {
+ ComponentChild,
+ ComponentFactory,
+ createContext,
+ FunctionalComponent,
+ h,
+ JSX
+} from 'preact';
+import {
+ useCallback,
+ useContext,
+ useEffect,
+ useMemo,
+ useState
+} from 'preact/hooks';
+
+export type RouterData = {
+ match: string[];
+ path: string[];
+ navigate(path: string): void;
+};
+
+const RouterContext = createContext<RouterData>({
+ match: [],
+ path: [],
+ navigate() {}
+});
+export const useRouter = () => useContext(RouterContext);
+
+const useLocation = (cb: () => void) => {
+ useEffect(() => {
+ window.addEventListener('popstate', cb);
+ return () => {
+ window.removeEventListener('popstate', cb);
+ };
+ }, [cb]);
+};
+
+export const Router: FunctionalComponent = props => {
+ const [path, setPath] = useState(location.pathname);
+
+ const update = useCallback(() => {
+ setPath(location.pathname);
+ }, [setPath]);
+
+ useLocation(update);
+
+ const navigate = useCallback(
+ (path: string) => {
+ history.pushState(null, '', path);
+ update();
+ },
+ [update]
+ );
+
+ const router = useMemo<RouterData>(
+ () => ({
+ match: [],
+ navigate,
+ path: path.split('/').filter(Boolean)
+ }),
+ [navigate, path]
+ );
+
+ return <RouterContext.Provider children={props.children} value={router} />;
+};
+
+export type RouteChildProps = { route: string };
+export type RouteProps = {
+ component?: ComponentFactory<RouteChildProps>;
+ match: string;
+ render?(route: string): ComponentChild;
+};
+export const Route: FunctionalComponent<RouteProps> = props => {
+ const router = useRouter();
+ const [dir, ...subpath] = router.path;
+
+ if (dir == null) return null;
+ if (props.match !== '*' && dir !== props.match) return null;
+
+ const children = useMemo(() => {
+ if (props.component) return <props.component key={dir} route={dir} />;
+ if (props.render) return props.render(dir);
+ return props.children;
+ }, [props.component, props.render, props.children, dir]);
+
+ const innerRouter = useMemo<RouterData>(
+ () => ({
+ ...router,
+ match: [...router.match, dir],
+ path: subpath
+ }),
+ [router.match, dir, subpath.join('/')]
+ );
+
+ return <RouterContext.Provider children={children} value={innerRouter} />;
+};
+
+export type LinkProps = JSX.HTMLAttributes & {
+ active?: boolean | string;
+};
+export const Link: FunctionalComponent<LinkProps> = props => {
+ const router = useRouter();
+
+ const classProps = [props.class, props.className];
+ const originalClasses = useMemo(() => {
+ const classes = [];
+ for (const prop of classProps) if (prop) classes.push(...prop.split(/\s+/));
+ return classes;
+ }, classProps);
+
+ const activeClass = useMemo(() => {
+ if (!props.active || props.href == null) return undefined;
+ const href = props.href.split('/').filter(Boolean);
+ const path =
+ props.href[0] === '/' ? [...router.match, ...router.path] : router.path;
+ const isMatch = href.every((dir, i) => dir === path[i]);
+ if (isMatch) return props.active === true ? 'active' : props.active;
+ }, [originalClasses, props.active, props.href, router.match, router.path]);
+
+ const classes =
+ activeClass == null ? originalClasses : [...originalClasses, activeClass];
+
+ const getHref = useCallback(() => {
+ if (props.href == null || props.href[0] === '/') return props.href;
+ const path = props.href.split('/').filter(Boolean);
+ return '/' + [...router.match, ...path].join('/');
+ }, [router.match, props.href]);
+
+ const handleClick = useCallback(
+ (ev: MouseEvent) => {
+ const href = getHref();
+ if (props.onClick != null) props.onClick(ev);
+ if (ev.defaultPrevented) return;
+ if (href == null) return;
+ if (ev.button !== 0) return;
+ if (props.target != null && props.target !== '_self') return;
+ if (ev.metaKey || ev.altKey || ev.ctrlKey || ev.shiftKey) return;
+ ev.preventDefault();
+ router.navigate(href);
+ },
+ [getHref, router.navigate, props.onClick, props.target]
+ );
+
+ return (
+ <a
+ {...props}
+ class={classes.join(' ')}
+ href={getHref()}
+ onClick={handleClick}
+ />
+ );
+};
diff --git a/preact/demo/people/store.ts b/preact/demo/people/store.ts
new file mode 100644
index 0000000..1967afd
--- /dev/null
+++ b/preact/demo/people/store.ts
@@ -0,0 +1,83 @@
+import { flow, Instance, types } from 'mobx-state-tree';
+
+const cmp = <T, U>(fn: (x: T) => U) => (a: T, b: T): number =>
+ fn(a) > fn(b) ? 1 : -1;
+
+const User = types.model({
+ email: types.string,
+ gender: types.enumeration(['male', 'female']),
+ id: types.identifier,
+ name: types.model({
+ first: types.string,
+ last: types.string
+ }),
+ picture: types.model({
+ large: types.string
+ })
+});
+
+const Store = types
+ .model({
+ users: types.array(User),
+ usersOrder: types.enumeration(['name', 'id'])
+ })
+ .views(self => ({
+ getSortedUsers() {
+ if (self.usersOrder === 'name')
+ return self.users.slice().sort(cmp(x => x.name.first));
+ if (self.usersOrder === 'id')
+ return self.users.slice().sort(cmp(x => x.id));
+ throw Error(`Unknown ordering ${self.usersOrder}`);
+ }
+ }))
+ .actions(self => ({
+ addUser: flow<unknown, []>(function*() {
+ const data = yield fetch('https://randomuser.me/api?results=1')
+ .then(res => res.json())
+ .then(data =>
+ data.results.map((user: any) => ({
+ ...user,
+ id: user.login.username
+ }))
+ );
+ self.users.push(...data);
+ }),
+ loadUsers: flow<unknown, []>(function*() {
+ const data = yield fetch(
+ `https://randomuser.me/api?seed=${12321}&results=12`
+ )
+ .then(res => res.json())
+ .then(data =>
+ data.results.map((user: any) => ({
+ ...user,
+ id: user.login.username
+ }))
+ );
+ self.users.replace(data);
+ }),
+ deleteUser(id: string) {
+ const user = self.users.find(u => u.id === id);
+ if (user != null) self.users.remove(user);
+ },
+ setUsersOrder(order: 'name' | 'id') {
+ self.usersOrder = order;
+ }
+ }));
+
+export type StoreType = Instance<typeof Store>;
+export const store = Store.create({
+ usersOrder: 'name',
+ users: []
+});
+
+// const { Provider, Consumer } = createContext<StoreType>(undefined as any)
+
+// export const StoreProvider: FunctionalComponent = props => {
+// const store = Store.create({})
+// return <Provider value={store} children={props.children} />
+// }
+
+// export type StoreProps = {store: StoreType}
+// export function injectStore<T>(Child: AnyComponent<T & StoreProps>): FunctionalComponent<T> {
+// return props => <Consumer render={store => <Child {...props} store={store}/>}/>
+// }
diff --git a/preact/demo/people/styles/animations.scss b/preact/demo/people/styles/animations.scss
new file mode 100644
index 0000000..c7ce8cb
--- /dev/null
+++ b/preact/demo/people/styles/animations.scss
@@ -0,0 +1,34 @@
+@keyframes popup {
+ from {
+ box-shadow: 0 0 0 black;
+ opacity: 0;
+ transform: scale(0.9);
+ }
+ to {
+ box-shadow: 0 30px 70px rgba(0, 0, 0, 0.5);
+ opacity: 1;
+ transform: none;
+ }
+}
+
+@keyframes zoom {
+ from {
+ opacity: 0;
+ transform: scale(0.8);
+ }
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+@keyframes appear-from-left {
+ from {
+ opacity: 0;
+ transform: translateX(-25px);
+ }
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
diff --git a/preact/demo/people/styles/app.scss b/preact/demo/people/styles/app.scss
new file mode 100644
index 0000000..4473f9e
--- /dev/null
+++ b/preact/demo/people/styles/app.scss
@@ -0,0 +1,100 @@
+#people-app {
+ position: relative;
+ overflow: hidden;
+ min-height: 100vh;
+ animation: popup 300ms cubic-bezier(0.3, 0.7, 0.3, 1) forwards;
+ background: var(--app-background);
+ --menu-width: 260px;
+ --menu-item-height: 50px;
+
+ @media (min-width: 1280px) {
+ max-width: 1280px;
+ min-height: calc(100vh - 64px);
+ margin: 32px auto;
+ border-radius: 10px;
+ }
+
+ > nav {
+ position: absolute;
+ display: flow-root;
+ width: var(--menu-width);
+ height: 100%;
+ background-color: var(--app-background-secondary);
+ overflow-x: hidden;
+ overflow-y: auto;
+ }
+
+ > nav h4 {
+ padding-left: 16px;
+ font-weight: normal;
+ text-transform: uppercase;
+ }
+
+ > nav ul {
+ position: relative;
+ }
+
+ > nav li {
+ position: absolute;
+ width: 100%;
+ animation: zoom 200ms forwards;
+ opacity: 0;
+ transition: top 200ms;
+ }
+
+ > nav li > a {
+ position: relative;
+ display: flex;
+ overflow: hidden;
+ flex-flow: row;
+ align-items: center;
+ margin-left: 16px;
+ border-right: 2px solid transparent;
+ border-bottom-left-radius: 48px;
+ border-top-left-radius: 48px;
+ text-transform: capitalize;
+ transition: border 500ms;
+ }
+
+ > nav li > a:hover {
+ background-color: var(--app-highlight);
+ }
+
+ > nav li > a::after {
+ position: absolute;
+ top: 0;
+ right: -2px;
+ bottom: 0;
+ left: 0;
+ background-image: radial-gradient(
+ circle,
+ var(--app-ripple) 1%,
+ transparent 1%
+ );
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: 10000%;
+ content: '';
+ opacity: 0;
+ transition: opacity 700ms, background 300ms;
+ }
+
+ > nav li > a:active::after {
+ background-size: 100%;
+ opacity: 0.5;
+ transition: none;
+ }
+
+ > nav li > a.active {
+ border-color: var(--app-primary);
+ background-color: var(--app-highlight);
+ }
+
+ > nav li > a > * {
+ margin: 8px;
+ }
+
+ #people-main {
+ padding-left: var(--menu-width);
+ }
+}
diff --git a/preact/demo/people/styles/avatar.scss b/preact/demo/people/styles/avatar.scss
new file mode 100644
index 0000000..437c6c4
--- /dev/null
+++ b/preact/demo/people/styles/avatar.scss
@@ -0,0 +1,16 @@
+#people-app {
+ .avatar {
+ display: inline-block;
+ overflow: hidden;
+ width: var(--avatar-size, 32px);
+ height: var(--avatar-size, 32px);
+ background-color: var(--avatar-color, var(--app-primary));
+ border-radius: 50%;
+ font-size: calc(var(--avatar-size, 32px) * 0.5);
+ line-height: var(--avatar-size, 32px);
+ object-fit: cover;
+ text-align: center;
+ text-transform: uppercase;
+ white-space: nowrap;
+ }
+}
diff --git a/preact/demo/people/styles/button.scss b/preact/demo/people/styles/button.scss
new file mode 100644
index 0000000..ce43138
--- /dev/null
+++ b/preact/demo/people/styles/button.scss
@@ -0,0 +1,115 @@
+#people-app {
+ button {
+ position: relative;
+ overflow: hidden;
+ min-width: 36px;
+ height: 36px;
+ padding: 0 16px;
+ border: none;
+ background-color: transparent;
+ border-radius: 4px;
+ color: var(--app-text);
+ font-family: 'Montserrat', sans-serif;
+ font-size: 14px;
+ font-weight: 600;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ transition: background 300ms, color 200ms;
+ white-space: nowrap;
+ }
+
+ button::before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: var(--app-ripple);
+ content: '';
+ opacity: 0;
+ transition: opacity 200ms;
+ }
+
+ button:hover:not(:disabled)::before {
+ opacity: 0.3;
+ transition: opacity 100ms;
+ }
+
+ button:active:not(:disabled)::before {
+ opacity: 0.7;
+ transition: none;
+ }
+
+ button::after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-image: radial-gradient(
+ circle,
+ var(--app-ripple) 1%,
+ transparent 1%
+ );
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: 20000%;
+ content: '';
+ opacity: 0;
+ transition: opacity 700ms, background 400ms;
+ }
+
+ button:active:not(:disabled)::after {
+ background-size: 100%;
+ opacity: 1;
+ transition: none;
+ }
+
+ button.primary {
+ background-color: var(--app-primary);
+ box-shadow: 0 2px 6px var(--app-shadow);
+ }
+
+ button.secondary {
+ background-color: var(--app-secondary);
+ box-shadow: 0 2px 6px var(--app-shadow);
+ }
+
+ button:disabled {
+ color: var(--app-text-secondary);
+ }
+
+ button.busy {
+ animation: stripes 500ms linear infinite;
+ background-image: repeating-linear-gradient(
+ 45deg,
+ var(--app-shadow) 0%,
+ var(--app-shadow) 25%,
+ transparent 25%,
+ transparent 50%,
+ var(--app-shadow) 50%,
+ var(--app-shadow) 75%,
+ transparent 75%,
+ transparent 100%
+ );
+ color: var(--app-text);
+ /* letter-spacing: -.7em; */
+ }
+
+ button:disabled:not(.primary):not(.secondary).busy,
+ button:disabled.primary:not(.busy),
+ button:disabled.secondary:not(.busy) {
+ background-color: var(--app-background-disabled);
+ }
+
+ @keyframes stripes {
+ from {
+ background-position-x: 0;
+ background-size: 16px 16px;
+ }
+ to {
+ background-position-x: 16px;
+ background-size: 16px 16px;
+ }
+ }
+}
diff --git a/preact/demo/people/styles/index.scss b/preact/demo/people/styles/index.scss
new file mode 100644
index 0000000..80b342e
--- /dev/null
+++ b/preact/demo/people/styles/index.scss
@@ -0,0 +1,168 @@
+@import 'app.scss';
+@import 'animations.scss';
+@import 'avatar.scss';
+@import 'profile.scss';
+@import 'button.scss';
+
+// :root {
+#people-app {
+ --app-background: #2f2b43;
+ --app-background-secondary: #353249;
+ --app-background-disabled: #555366;
+ --app-highlight: rgba(255, 255, 255, 0.1);
+ --app-ripple: rgba(255, 255, 255, 0.5);
+ --app-shadow: rgba(0, 0, 0, 0.15);
+ --app-text: #fff;
+ --app-text-secondary: #807e97;
+ --app-primary: #ff0087;
+ --app-secondary: #4d7cfe;
+ --app-tertiary: #00ec97;
+ --app-danger: #f3c835;
+ --spinner-size: 200px;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+// body {
+#people-app {
+ // display: flow-root;
+ // overflow: auto;
+ // min-height: 100vh;
+ // margin: 0;
+ // animation: background-light 5s ease-out forwards;
+ // /* very fancy background */
+ // background: radial-gradient(
+ // circle 15px at 150px 90vh,
+ // rgba(255, 255, 255, 0.35),
+ // rgba(255, 255, 255, 0.35) 90%,
+ // transparent
+ // ),
+ // radial-gradient(
+ // circle 9px at 60px 50vh,
+ // rgba(255, 255, 255, 0.55),
+ // rgba(255, 255, 255, 0.55) 90%,
+ // transparent
+ // ),
+ // radial-gradient(
+ // circle 19px at 40vw 70px,
+ // rgba(255, 255, 255, 0.3),
+ // rgba(255, 255, 255, 0.3) 90%,
+ // transparent
+ // ),
+ // radial-gradient(
+ // circle 12px at 80vw 80px,
+ // rgba(255, 255, 255, 0.4),
+ // rgba(255, 255, 255, 0.4) 90%,
+ // transparent
+ // ),
+ // radial-gradient(
+ // circle 7px at 55vw calc(100vh - 95px),
+ // rgba(255, 255, 255, 0.6),
+ // rgba(255, 255, 255, 0.6) 90%,
+ // transparent
+ // ),
+ // radial-gradient(
+ // circle 14px at 25vw calc(100vh - 35px),
+ // rgba(255, 255, 255, 0.4),
+ // rgba(255, 255, 255, 0.4) 90%,
+ // transparent
+ // ),
+ // radial-gradient(
+ // circle 11px at calc(100vw - 95px) 55vh,
+ // rgba(255, 255, 255, 0.45),
+ // rgba(255, 255, 255, 0.45) 90%,
+ // transparent
+ // ),
+ // radial-gradient(
+ // circle 13px at calc(100vw - 35px) 85vh,
+ // rgba(255, 255, 255, 0.4),
+ // rgba(255, 255, 255, 0.4) 90%,
+ // transparent
+ // ),
+ // radial-gradient(
+ // circle 50vw at 0 -25%,
+ // rgba(255, 255, 255, 0.07),
+ // rgba(255, 255, 255, 0.07) 100%,
+ // transparent
+ // ),
+ // radial-gradient(
+ // circle 80vw at top left,
+ // rgba(255, 255, 255, 0.07),
+ // rgba(255, 255, 255, 0.07) 100%,
+ // transparent
+ // ),
+ // radial-gradient(circle at bottom right, #ef2fb8, transparent),
+ // radial-gradient(circle at top right, #c45af3, transparent),
+ // linear-gradient(#ee66ca, #ff47a6);
+ color: var(--app-text);
+ font-family: 'Montserrat', sans-serif;
+}
+
+#people-app {
+ .spinner {
+ position: absolute;
+ top: 200px;
+ left: calc(50% - var(--spinner-size) / 2);
+ width: var(--spinner-size);
+ height: var(--spinner-size);
+ animation: zoom 250ms 500ms forwards ease-out;
+ opacity: 0;
+ transition: opacity 200ms, transform 200ms ease-in;
+ }
+
+ .spinner.exit {
+ opacity: 0;
+ transform: scale(0.5);
+ }
+
+ .spinner::before,
+ .spinner::after {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: calc(var(--spinner-size) / 3);
+ height: calc(var(--spinner-size) / 3);
+ animation: spinner 2s infinite ease-in-out;
+ background-color: rgba(255, 255, 255, 0.6);
+ content: '';
+ }
+
+ .spinner::after {
+ animation-delay: -1s;
+ }
+
+ @keyframes spinner {
+ 25% {
+ transform: translateX(calc(var(--spinner-size) / 3 * 2 - 1px))
+ rotate(-90deg) scale(0.5);
+ }
+ 50% {
+ transform: translateX(calc(var(--spinner-size) / 3 * 2 - 1px))
+ translateY(calc(var(--spinner-size) / 3 * 2 - 1px)) rotate(-179deg);
+ }
+ 50.1% {
+ transform: translateX(calc(var(--spinner-size) / 3 * 2 - 1px))
+ translateY(calc(var(--spinner-size) / 3 * 2 - 1px)) rotate(-180deg);
+ }
+ 75% {
+ transform: translateX(0) translateY(calc(var(--spinner-size) / 3 * 2 - 1px))
+ rotate(-270deg) scale(0.5);
+ }
+ 100% {
+ transform: rotate(-360deg);
+ }
+ }
+
+ ul,
+ ol {
+ padding-left: 0;
+ list-style: none;
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+}
diff --git a/preact/demo/people/styles/profile.scss b/preact/demo/people/styles/profile.scss
new file mode 100644
index 0000000..f74b760
--- /dev/null
+++ b/preact/demo/people/styles/profile.scss
@@ -0,0 +1,26 @@
+#people-app {
+ .profile {
+ display: flex;
+ flex-flow: column;
+ align-items: center;
+ margin: 32px 0;
+ animation: appear-from-left 0.5s forwards;
+ --avatar-size: 80px;
+ }
+
+ .profile h2 {
+ text-transform: capitalize;
+ }
+
+ .profile .details {
+ display: flex;
+ flex-flow: column;
+ align-items: stretch;
+ margin: 16px auto;
+ }
+
+ .profile .details p {
+ margin-top: 8px;
+ margin-bottom: 8px;
+ }
+}
diff --git a/preact/demo/preact.js b/preact/demo/preact.js
new file mode 100644
index 0000000..9b053e0
--- /dev/null
+++ b/preact/demo/preact.js
@@ -0,0 +1,39 @@
+import {
+ options,
+ createElement,
+ cloneElement,
+ Component as CevicheComponent,
+ render
+} from 'preact';
+
+options.vnode = vnode => {
+ vnode.nodeName = vnode.type;
+ vnode.attributes = vnode.props;
+ vnode.children = vnode._children || [].concat(vnode.props.children || []);
+};
+
+function asArray(arr) {
+ return Array.isArray(arr) ? arr : [arr];
+}
+
+function normalize(obj) {
+ if (Array.isArray(obj)) {
+ return obj.map(normalize);
+ }
+ if ('type' in obj && !('attributes' in obj)) {
+ obj.attributes = obj.props;
+ }
+ return obj;
+}
+
+export function Component(props, context) {
+ CevicheComponent.call(this, props, context);
+ const render = this.render;
+ this.render = function(props, state, context) {
+ if (props.children) props.children = asArray(normalize(props.children));
+ return render.call(this, props, state, context);
+ };
+}
+Component.prototype = new CevicheComponent();
+
+export { createElement, createElement as h, cloneElement, render };
diff --git a/preact/demo/profiler.js b/preact/demo/profiler.js
new file mode 100644
index 0000000..bb44269
--- /dev/null
+++ b/preact/demo/profiler.js
@@ -0,0 +1,88 @@
+import { createElement, Component, options } from 'preact';
+
+function getPrimes(max) {
+ let sieve = [],
+ i,
+ j,
+ primes = [];
+ for (i = 2; i <= max; ++i) {
+ if (!sieve[i]) {
+ // i has not been marked -- it is prime
+ primes.push(i);
+ for (j = i << 1; j <= max; j += i) {
+ sieve[j] = true;
+ }
+ }
+ }
+ return primes.join('');
+}
+
+function Foo(props) {
+ return <div>{props.children}</div>;
+}
+
+function Bar() {
+ getPrimes(10000);
+ return (
+ <div>
+ <span>...yet another component</span>
+ </div>
+ );
+}
+
+function PrimeNumber(props) {
+ // Slow down rendering of this component
+ getPrimes(10);
+
+ return (
+ <div>
+ <span>I'm a slow component</span>
+ <br />
+ {props.children}
+ </div>
+ );
+}
+
+export default class ProfilerDemo extends Component {
+ constructor() {
+ super();
+ this.onClick = this.onClick.bind(this);
+ this.state = { counter: 0 };
+ }
+
+ componentDidMount() {
+ options._diff = vnode => (vnode.startTime = performance.now());
+ options.diffed = vnode => (vnode.endTime = performance.now());
+ }
+
+ componentWillUnmount() {
+ delete options._diff;
+ delete options.diffed;
+ }
+
+ onClick() {
+ this.setState(prev => ({ counter: ++prev.counter }));
+ }
+
+ render() {
+ return (
+ <div class="foo">
+ <h1>⚛ Preact</h1>
+ <p>
+ <b>Devtools Profiler integration 🕒</b>
+ </p>
+ <Foo>
+ <PrimeNumber>
+ <Foo>I'm a fast component</Foo>
+ <Bar />
+ </PrimeNumber>
+ </Foo>
+ <Foo>I'm the fastest component 🎉</Foo>
+ <span>Counter: {this.state.counter}</span>
+ <br />
+ <br />
+ <button onClick={this.onClick}>Force re-render</button>
+ </div>
+ );
+ }
+}
diff --git a/preact/demo/pythagoras/index.js b/preact/demo/pythagoras/index.js
new file mode 100644
index 0000000..470e304
--- /dev/null
+++ b/preact/demo/pythagoras/index.js
@@ -0,0 +1,86 @@
+import { createElement, Component } from 'preact';
+import { select as d3select, mouse as d3mouse } from 'd3-selection';
+import { scaleLinear } from 'd3-scale';
+import Pythagoras from './pythagoras';
+
+export default class PythagorasDemo extends Component {
+ svg = {
+ width: 1280,
+ height: 600
+ };
+
+ state = {
+ currentMax: 0,
+ baseW: 80,
+ heightFactor: 0,
+ lean: 0
+ };
+
+ realMax = 11;
+
+ svgRef = c => {
+ this.svgElement = c;
+ };
+
+ scaleFactor = scaleLinear()
+ .domain([this.svg.height, 0])
+ .range([0, 0.8]);
+
+ scaleLean = scaleLinear()
+ .domain([0, this.svg.width / 2, this.svg.width])
+ .range([0.5, 0, -0.5]);
+
+ onMouseMove = event => {
+ let [x, y] = d3mouse(this.svgElement);
+
+ this.setState({
+ heightFactor: this.scaleFactor(y),
+ lean: this.scaleLean(x)
+ });
+ };
+
+ restart = () => {
+ this.setState({ currentMax: 0 });
+ this.next();
+ };
+
+ next = () => {
+ let { currentMax } = this.state;
+
+ if (currentMax < this.realMax) {
+ this.setState({ currentMax: currentMax + 1 });
+ this.timer = setTimeout(this.next, 500);
+ }
+ };
+
+ componentDidMount() {
+ this.selected = d3select(this.svgElement).on('mousemove', this.onMouseMove);
+ this.next();
+ }
+
+ componentWillUnmount() {
+ this.selected.on('mousemove', null);
+ clearTimeout(this.timer);
+ }
+
+ render({}, { currentMax, baseW, heightFactor, lean }) {
+ let { width, height } = this.svg;
+
+ return (
+ <div class="App">
+ <svg width={width} height={height} ref={this.svgRef}>
+ <Pythagoras
+ w={baseW}
+ h={baseW}
+ heightFactor={heightFactor}
+ lean={lean}
+ x={width / 2 - 40}
+ y={height - baseW}
+ lvl={0}
+ maxlvl={currentMax}
+ />
+ </svg>
+ </div>
+ );
+ }
+}
diff --git a/preact/demo/pythagoras/pythagoras.js b/preact/demo/pythagoras/pythagoras.js
new file mode 100644
index 0000000..bbe3c65
--- /dev/null
+++ b/preact/demo/pythagoras/pythagoras.js
@@ -0,0 +1,97 @@
+import { interpolateViridis } from 'd3-scale';
+import { createElement } from 'preact';
+
+Math.deg = function(radians) {
+ return radians * (180 / Math.PI);
+};
+
+const memoizedCalc = (function() {
+ const memo = {};
+
+ const key = ({ w, heightFactor, lean }) => `${w}-${heightFactor}-${lean}`;
+
+ return args => {
+ let memoKey = key(args);
+
+ if (memo[memoKey]) {
+ return memo[memoKey];
+ }
+
+ let { w, heightFactor, lean } = args;
+ let trigH = heightFactor * w;
+
+ let result = {
+ nextRight: Math.sqrt(trigH ** 2 + (w * (0.5 + lean)) ** 2),
+ nextLeft: Math.sqrt(trigH ** 2 + (w * (0.5 - lean)) ** 2),
+ A: Math.deg(Math.atan(trigH / ((0.5 - lean) * w))),
+ B: Math.deg(Math.atan(trigH / ((0.5 + lean) * w)))
+ };
+
+ memo[memoKey] = result;
+ return result;
+ };
+})();
+
+export default function Pythagoras({
+ w,
+ x,
+ y,
+ heightFactor,
+ lean,
+ left,
+ right,
+ lvl,
+ maxlvl
+}) {
+ if (lvl >= maxlvl || w < 1) {
+ return null;
+ }
+
+ const { nextRight, nextLeft, A, B } = memoizedCalc({
+ w,
+ heightFactor,
+ lean
+ });
+
+ let rotate = '';
+
+ if (left) {
+ rotate = `rotate(${-A} 0 ${w})`;
+ } else if (right) {
+ rotate = `rotate(${B} ${w} ${w})`;
+ }
+
+ return (
+ <g transform={`translate(${x} ${y}) ${rotate}`}>
+ <rect
+ width={w}
+ height={w}
+ x={0}
+ y={0}
+ style={{ fill: interpolateViridis(lvl / maxlvl) }}
+ />
+
+ <Pythagoras
+ w={nextLeft}
+ x={0}
+ y={-nextLeft}
+ lvl={lvl + 1}
+ maxlvl={maxlvl}
+ heightFactor={heightFactor}
+ lean={lean}
+ left
+ />
+
+ <Pythagoras
+ w={nextRight}
+ x={w - nextRight}
+ y={-nextRight}
+ lvl={lvl + 1}
+ maxlvl={maxlvl}
+ heightFactor={heightFactor}
+ lean={lean}
+ right
+ />
+ </g>
+ );
+}
diff --git a/preact/demo/redux.js b/preact/demo/redux.js
new file mode 100644
index 0000000..d63dfb7
--- /dev/null
+++ b/preact/demo/redux.js
@@ -0,0 +1,48 @@
+import { createElement } from 'preact';
+import React from 'react';
+import { createStore } from 'redux';
+import { connect, Provider } from 'react-redux';
+
+const store = createStore((state = { value: 0 }, action) => {
+ switch (action.type) {
+ case 'increment':
+ return { value: state.value + 1 };
+ case 'decrement':
+ return { value: state.value - 1 };
+ default:
+ return state;
+ }
+});
+
+class Child extends React.Component {
+ render() {
+ return (
+ <div>
+ <div>Child #1: {this.props.foo}</div>
+ <ConnectedChild2 />
+ </div>
+ );
+ }
+}
+const ConnectedChild = connect(store => ({ foo: store.value }))(Child);
+
+class Child2 extends React.Component {
+ render() {
+ return <div>Child #2: {this.props.foo}</div>;
+ }
+}
+const ConnectedChild2 = connect(store => ({ foo: store.value }))(Child2);
+
+export default function Redux() {
+ return (
+ <div>
+ <h1>Counter</h1>
+ <Provider store={store}>
+ <ConnectedChild />
+ </Provider>
+ <br />
+ <button onClick={() => store.dispatch({ type: 'increment' })}>+</button>
+ <button onClick={() => store.dispatch({ type: 'decrement' })}>-</button>
+ </div>
+ );
+}
diff --git a/preact/demo/reduxUpdate.js b/preact/demo/reduxUpdate.js
new file mode 100644
index 0000000..37e1f9c
--- /dev/null
+++ b/preact/demo/reduxUpdate.js
@@ -0,0 +1,61 @@
+import { createElement, Component } from 'preact';
+import { connect, Provider } from 'react-redux';
+import { createStore } from 'redux';
+import { HashRouter, Route, Link } from 'react-router-dom';
+
+const store = createStore(
+ (state, action) => ({ ...state, display: action.display }),
+ { display: false }
+);
+
+function _Redux({ showMe, counter }) {
+ if (!showMe) return null;
+ return <div>showMe {counter}</div>;
+}
+const Redux = connect(
+ state => console.log('injecting', state.display) || { showMe: state.display }
+)(_Redux);
+
+let display = false;
+class Test extends Component {
+ componentDidUpdate(prevProps) {
+ if (this.props.start != prevProps.start) {
+ this.setState({ f: (this.props.start || 0) + 1 });
+ setTimeout(() => this.setState({ i: (this.state.i || 0) + 1 }));
+ }
+ }
+
+ render() {
+ const { f } = this.state;
+ return (
+ <div>
+ <button
+ onClick={() => {
+ display = !display;
+ store.dispatch({ type: 1, display });
+ }}
+ >
+ Toggle visibility
+ </button>
+ <Link to={`/${(parseInt(this.props.start) || 0) + 1}`}>Click me</Link>
+
+ <Redux counter={f} />
+ </div>
+ );
+ }
+}
+
+function App() {
+ return (
+ <Provider store={store}>
+ <HashRouter>
+ <Route
+ path="/:start?"
+ render={({ match }) => <Test start={match.params.start || 0} />}
+ />
+ </HashRouter>
+ </Provider>
+ );
+}
+
+export default App;
diff --git a/preact/demo/reorder.js b/preact/demo/reorder.js
new file mode 100644
index 0000000..35acc5e
--- /dev/null
+++ b/preact/demo/reorder.js
@@ -0,0 +1,104 @@
+import { createElement, Component } from 'preact';
+
+function createItems(count = 10) {
+ let items = [];
+ for (let i = 0; i < count; i++) {
+ items.push({
+ label: `Item #${i + 1}`,
+ key: i + 1
+ });
+ }
+ return items;
+}
+
+function random() {
+ return Math.random() < 0.5 ? 1 : -1;
+}
+
+export default class Reorder extends Component {
+ state = {
+ items: createItems(),
+ count: 1,
+ useKeys: false
+ };
+
+ shuffle = () => {
+ this.setState({ items: this.state.items.slice().sort(random) });
+ };
+
+ swapTwo = () => {
+ let items = this.state.items.slice(),
+ first = Math.floor(Math.random() * items.length),
+ second;
+ do {
+ second = Math.floor(Math.random() * items.length);
+ } while (second === first);
+ let other = items[first];
+ items[first] = items[second];
+ items[second] = other;
+ this.setState({ items });
+ };
+
+ reverse = () => {
+ this.setState({ items: this.state.items.slice().reverse() });
+ };
+
+ setCount = e => {
+ this.setState({ count: Math.round(e.target.value) });
+ };
+
+ rotate = () => {
+ let { items, count } = this.state;
+ items = items.slice(count).concat(items.slice(0, count));
+ this.setState({ items });
+ };
+
+ rotateBackward = () => {
+ let { items, count } = this.state,
+ len = items.length;
+ items = items.slice(len - count, len).concat(items.slice(0, len - count));
+ this.setState({ items });
+ };
+
+ toggleKeys = () => {
+ this.setState({ useKeys: !this.state.useKeys });
+ };
+
+ renderItem = item => (
+ <li key={this.state.useKeys ? item.key : null}>{item.label}</li>
+ );
+
+ render({}, { items, count, useKeys }) {
+ return (
+ <div class="reorder-demo">
+ <header>
+ <button onClick={this.shuffle}>Shuffle</button>
+ <button onClick={this.swapTwo}>Swap Two</button>
+ <button onClick={this.reverse}>Reverse</button>
+ <button onClick={this.rotate}>Rotate</button>
+ <button onClick={this.rotateBackward}>Rotate Backward</button>
+ <label>
+ <input
+ type="checkbox"
+ onClick={this.toggleKeys}
+ checked={useKeys}
+ />{' '}
+ use keys?
+ </label>
+ <label>
+ <input
+ type="number"
+ step="1"
+ min="1"
+ style={{ width: '3em' }}
+ onInput={this.setCount}
+ value={count}
+ />{' '}
+ count
+ </label>
+ </header>
+ <ul>{items.map(this.renderItem)}</ul>
+ </div>
+ );
+ }
+}
diff --git a/preact/demo/spiral.js b/preact/demo/spiral.js
new file mode 100644
index 0000000..baaa052
--- /dev/null
+++ b/preact/demo/spiral.js
@@ -0,0 +1,140 @@
+import { createElement, Component } from 'preact';
+
+const COUNT = 500;
+const LOOPS = 6;
+
+// Component.debounce = requestAnimationFrame;
+
+export default class Spiral extends Component {
+ state = { x: 0, y: 0, big: false, counter: 0 };
+
+ handleClick = e => {
+ console.log('click');
+ };
+
+ increment = () => {
+ if (this.stop) return;
+ // this.setState({ counter: this.state.counter + 1 }, this.increment);
+ this.setState({ counter: this.state.counter + 1 });
+ // this.forceUpdate();
+ requestAnimationFrame(this.increment);
+ };
+
+ setMouse({ pageX: x, pageY: y }) {
+ this.setState({ x, y });
+ return false;
+ }
+
+ setBig(big) {
+ this.setState({ big });
+ }
+
+ componentDidMount() {
+ console.log('mount');
+
+ // let touch = navigator.maxTouchPoints > 1;
+ let touch = false;
+
+ // set mouse position state on move:
+ addEventListener(touch ? 'touchmove' : 'mousemove', e => {
+ this.setMouse(e.touches ? e.touches[0] : e);
+ });
+
+ // holding the mouse down enables big mode:
+ addEventListener(touch ? 'touchstart' : 'mousedown', e => {
+ this.setBig(true);
+ e.preventDefault();
+ });
+ addEventListener(touch ? 'touchend' : 'mouseup', e => this.setBig(false));
+
+ requestAnimationFrame(this.increment);
+ }
+
+ componentWillUnmount() {
+ console.log('unmount');
+ this.stop = true;
+ }
+
+ // componentDidUpdate() {
+ // // invoking setState() in componentDidUpdate() creates an animation loop:
+ // this.increment();
+ // }
+
+ // builds and returns a brand new DOM (every time)
+ render(props, { x, y, big, counter }) {
+ let max =
+ COUNT +
+ Math.round(Math.sin((counter / 90) * 2 * Math.PI) * COUNT * 0.5),
+ cursors = [];
+
+ // the advantage of JSX is that you can use the entirety of JS to "template":
+ for (let i = max; i--; ) {
+ let f = (i / max) * LOOPS,
+ θ = f * 2 * Math.PI,
+ m = 20 + i * 2,
+ hue = (f * 255 + counter * 10) % 255;
+ cursors[i] = (
+ <Cursor
+ big={big}
+ color={'hsl(' + hue + ',100%,50%)'}
+ x={(x + Math.sin(θ) * m) | 0}
+ y={(y + Math.cos(θ) * m) | 0}
+ />
+ );
+ }
+
+ return (
+ <div id="main" onClick={this.handleClick}>
+ <Cursor label x={x} y={y} big={big} />
+ {cursors}
+ </div>
+ );
+ }
+}
+
+/** Represents a single coloured dot. */
+class Cursor extends Component {
+ // get shared/pooled class object
+ getClass(big, label) {
+ let cl = 'cursor';
+ if (big) cl += ' big';
+ if (label) cl += ' label';
+ return cl;
+ }
+
+ // skip any pointless re-renders
+ shouldComponentUpdate(props) {
+ for (let i in props)
+ if (i !== 'children' && props[i] !== this.props[i]) return true;
+ return false;
+ }
+
+ // first argument is "props", the attributes passed to <Cursor ...>
+ render({ x, y, label, color, big }) {
+ let inner = null;
+ if (label)
+ inner = (
+ <span class="label">
+ {x},{y}
+ </span>
+ );
+ return (
+ <div
+ class={this.getClass(big, label)}
+ style={{
+ transform: `translate(${x || 0}px, ${y || 0}px) scale(${
+ big ? 2 : 1
+ })`,
+ // transform: `translate3d(${x || 0}px, ${y || 0}px, 0) scale(${big?2:1})`,
+ borderColor: color
+ }}
+ // style={{ left: x || 0, top: y || 0, borderColor: color }}
+ >
+ {inner}
+ </div>
+ );
+ }
+}
+
+// Addendum: disable dragging on mobile
+addEventListener('touchstart', e => (e.preventDefault(), false));
diff --git a/preact/demo/stateOrderBug.js b/preact/demo/stateOrderBug.js
new file mode 100644
index 0000000..b9f333d
--- /dev/null
+++ b/preact/demo/stateOrderBug.js
@@ -0,0 +1,80 @@
+import htm from 'htm';
+import { h } from 'preact';
+import { useState, useCallback } from 'preact/hooks';
+
+const html = htm.bind(h);
+
+// configuration used to show behavior vs. workaround
+let childFirst = true;
+const Config = () => html`
+ <label>
+ <input
+ type="checkbox"
+ checked=${childFirst}
+ onchange=${evt => {
+ childFirst = evt.target.checked;
+ }}
+ />
+ Set child state before parent state.
+ </label>
+`;
+
+const Child = ({ items, setItems }) => {
+ let [pendingId, setPendingId] = useState(null);
+ if (!pendingId) {
+ setPendingId(
+ (pendingId = Math.random()
+ .toFixed(20)
+ .slice(2))
+ );
+ }
+
+ const onInput = useCallback(
+ evt => {
+ let val = evt.target.value,
+ _items = [...items, { _id: pendingId, val }];
+ if (childFirst) {
+ setPendingId(null);
+ setItems(_items);
+ } else {
+ setItems(_items);
+ setPendingId(null);
+ }
+ },
+ [childFirst, setPendingId, setItems, items, pendingId]
+ );
+
+ return html`
+ <div class="item-editor">
+ ${items.map(
+ (item, idx) => html`
+ <input
+ key=${item._id}
+ value=${item.val}
+ oninput=${evt => {
+ let val = evt.target.value,
+ _items = [...items];
+ _items.splice(idx, 1, { ...item, val });
+ setItems(_items);
+ }}
+ />
+ `
+ )}
+
+ <input
+ key=${pendingId}
+ placeholder="type to add an item"
+ oninput=${onInput}
+ />
+ </div>
+ `;
+};
+
+const Parent = () => {
+ let [items, setItems] = useState([]);
+ return html`
+ <div><${Config} /><${Child} items=${items} setItems=${setItems} /></div>
+ `;
+};
+
+export default Parent;
diff --git a/preact/demo/style.css b/preact/demo/style.css
new file mode 100644
index 0000000..52f0b34
--- /dev/null
+++ b/preact/demo/style.css
@@ -0,0 +1,24 @@
+html, body {
+ font: 14px system-ui, sans-serif;
+}
+.list {
+ list-style: none;
+ padding: 0;
+}
+.list > li {
+ position: relative;
+ padding: 5px 10px;
+ animation: fadeIn 1s ease;
+}
+@keyframes fadeIn {
+ 0% {
+ box-shadow: inset 0 0 2px 2px red,
+ 0 0 2px 2px red;
+ }
+}
+.list > .odd {
+ background-color: #def;
+}
+.list > .even {
+ background-color: #fed;
+}
diff --git a/preact/demo/style.scss b/preact/demo/style.scss
new file mode 100644
index 0000000..8466bbd
--- /dev/null
+++ b/preact/demo/style.scss
@@ -0,0 +1,149 @@
+html, body {
+ height: 100%;
+ margin: 0;
+ background: #eee;
+ font: 400 16px/1.3 'Helvetica Neue',helvetica,sans-serif;
+ text-rendering: optimizeSpeed;
+ color: #444;
+}
+
+.app {
+ display: block;
+ flex-direction: column;
+ height: 100%;
+
+ > header {
+ flex: 0;
+ background: #f9f9f9;
+ box-shadow: inset 0 -.5px 0 0 rgba(0,0,0,0.2), 0 .5px 0 0 rgba(255,255,255,0.6);
+
+ nav {
+ display: inline-block;
+ padding: 4px 7px;
+
+ a {
+ display: inline-block;
+ margin: 2px;
+ padding: 4px 10px;
+ background-color: rgba(255,255,255,0);
+ border-radius: 1em;
+ color: #6b1d8f;
+ text-decoration: none;
+ // transition: all 250ms ease;
+ transition: all 250ms cubic-bezier(.2,0,.4,2);
+ &:hover {
+ background-color: rgba(255,255,255,1);
+ box-shadow: 0 0 0 2px #6b1d8f;
+ }
+ &.active {
+ background-color: #6b1d8f;
+ color: white;
+ }
+ }
+ }
+ }
+
+ > main {
+ flex: 1;
+ padding: 10px;
+ }
+}
+
+
+h1 {
+ margin: 0;
+ color: #6b1d8f;
+ font-weight: 300;
+ font-size: 250%;
+}
+
+
+input, textarea {
+ box-sizing: border-box;
+ margin: 1px;
+ padding: .25em .5em;
+ background: #fff;
+ border: 1px solid #999;
+ border-radius: 3px;
+ font: inherit;
+ color: #000;
+ outline: none;
+
+ &:focus {
+ border-color: #6b1d8f;
+ }
+}
+
+
+button, input[type="submit"], input[type="reset"], input[type="button"] {
+ box-sizing: border-box;
+ margin: 1px;
+ padding: .25em .8em;
+ background: #6b1d8f;
+ border: 1px solid #6b1d8f;
+ // border: none;
+ border-radius: 1.5em;
+ font: inherit;
+ color: white;
+ outline: none;
+ cursor: pointer;
+}
+
+
+.cursor {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 8px;
+ height: 8px;
+ margin: -5px 0 0 -5px;
+ border: 2px solid #F00;
+ border-radius: 50%;
+ transform-origin: 50% 50%;
+ pointer-events: none;
+ overflow: hidden;
+ font-size: 9px;
+ line-height: 25px;
+ text-indent: 15px;
+ white-space: nowrap;
+
+ &:not(.label) {
+ contain: strict;
+ }
+
+ &.label {
+ overflow: visible;
+ }
+
+ // &.big {
+ // transform: scale(2);
+ // // width: 24px;
+ // // height: 24px;
+ // // margin: -13px 0 0 -13px;
+ // }
+
+ .label {
+ position: absolute;
+ left: 0;
+ top: 0;
+ //transform: translateZ(0);
+ // z-index: 10;
+ }
+}
+
+
+.animation-picker {
+ position: fixed;
+ display: inline-block;
+ right: 0;
+ top: 0;
+ padding: 10px;
+ background: #000;
+ color: #BBB;
+ z-index: 1000;
+
+ select {
+ font-size: 100%;
+ margin-left: 5px;
+ }
+}
diff --git a/preact/demo/styled-components.js b/preact/demo/styled-components.js
new file mode 100644
index 0000000..f8433ba
--- /dev/null
+++ b/preact/demo/styled-components.js
@@ -0,0 +1,31 @@
+import { createElement } from 'preact';
+import styled, { css } from 'styled-components';
+
+const Button = styled.button`
+ background: transparent;
+ border-radius: 3px;
+ border: 2px solid palevioletred;
+ color: palevioletred;
+ margin: 0.5em 1em;
+ padding: 0.25em 1em;
+
+ ${props =>
+ props.primary &&
+ css`
+ background: palevioletred;
+ color: white;
+ `}
+`;
+
+const Container = styled.div`
+ text-align: center;
+`;
+
+export default function StyledComp() {
+ return (
+ <Container>
+ <Button>Normal Button</Button>
+ <Button primary>Primary Button</Button>
+ </Container>
+ );
+}
diff --git a/preact/demo/suspense-router/bye.js b/preact/demo/suspense-router/bye.js
new file mode 100644
index 0000000..fe2a49c
--- /dev/null
+++ b/preact/demo/suspense-router/bye.js
@@ -0,0 +1,12 @@
+import { createElement } from 'react';
+import { Link } from './simple-router';
+
+/** @jsx createElement */
+
+export default function Bye() {
+ return (
+ <div>
+ Bye! <Link to="/">Go to Hello!</Link>
+ </div>
+ );
+}
diff --git a/preact/demo/suspense-router/hello.js b/preact/demo/suspense-router/hello.js
new file mode 100644
index 0000000..2566dd3
--- /dev/null
+++ b/preact/demo/suspense-router/hello.js
@@ -0,0 +1,12 @@
+import { createElement } from 'react';
+import { Link } from './simple-router';
+
+/** @jsx createElement */
+
+export default function Hello() {
+ return (
+ <div>
+ Hello! <Link to="/bye">Go to Bye!</Link>
+ </div>
+ );
+}
diff --git a/preact/demo/suspense-router/index.js b/preact/demo/suspense-router/index.js
new file mode 100644
index 0000000..2572209
--- /dev/null
+++ b/preact/demo/suspense-router/index.js
@@ -0,0 +1,30 @@
+import { createElement, Suspense, lazy } from 'react';
+
+import { Router, Route, Switch } from './simple-router';
+
+/** @jsx createElement */
+
+let Hello = lazy(() => import('./hello.js'));
+let Bye = lazy(() => import('./bye.js'));
+
+function Loading() {
+ return <div>Hey! This is a fallback because we're loading things! :D</div>;
+}
+
+export default function SuspenseRouterBug() {
+ return (
+ <Router>
+ <h1>Suspense Router bug</h1>
+ <Suspense fallback={<Loading />}>
+ <Switch>
+ <Route path="/" exact>
+ <Hello />
+ </Route>
+ <Route path="/bye">
+ <Bye />
+ </Route>
+ </Switch>
+ </Suspense>
+ </Router>
+ );
+}
diff --git a/preact/demo/suspense-router/simple-router.js b/preact/demo/suspense-router/simple-router.js
new file mode 100644
index 0000000..ed48ea6
--- /dev/null
+++ b/preact/demo/suspense-router/simple-router.js
@@ -0,0 +1,87 @@
+import {
+ createElement,
+ cloneElement,
+ createContext,
+ useState,
+ useContext,
+ Children,
+ useLayoutEffect
+} from 'react';
+
+/** @jsx createElement */
+
+const memoryHistory = {
+ /**
+ * @typedef {{ pathname: string }} Location
+ * @typedef {(location: Location) => void} HistoryListener
+ * @type {HistoryListener[]}
+ */
+ listeners: [],
+
+ /**
+ * @param {HistoryListener} listener
+ */
+ listen(listener) {
+ const newLength = this.listeners.push(listener);
+ return () => this.listeners.splice(newLength - 1, 1);
+ },
+
+ /**
+ * @param {Location} to
+ */
+ navigate(to) {
+ this.listeners.forEach(listener => listener(to));
+ }
+};
+
+/** @type {import('react').Context<{ history: typeof memoryHistory; location: Location }>} */
+const RouterContext = createContext(null);
+
+export function Router({ history = memoryHistory, children }) {
+ const [location, setLocation] = useState({ pathname: '/' });
+
+ useLayoutEffect(() => {
+ return history.listen(newLocation => setLocation(newLocation));
+ }, []);
+
+ return (
+ <RouterContext.Provider value={{ history, location }}>
+ {children}
+ </RouterContext.Provider>
+ );
+}
+
+export function Switch(props) {
+ const { location } = useContext(RouterContext);
+
+ let element = null;
+ Children.forEach(props.children, child => {
+ if (element == null && child.props.path == location.pathname) {
+ element = child;
+ }
+ });
+
+ return element;
+}
+
+/**
+ * @param {{ children: any; path: string; exact?: boolean; }} props
+ */
+export function Route({ children, path, exact }) {
+ return children;
+}
+
+export function Link({ to, children }) {
+ const { history } = useContext(RouterContext);
+ const onClick = event => {
+ event.preventDefault();
+ event.stopPropagation();
+ history.navigate({ pathname: to });
+ };
+
+ return (
+ <a href={to} onClick={onClick}>
+ {children}
+ </a>
+ );
+}
diff --git a/preact/demo/suspense.js b/preact/demo/suspense.js
new file mode 100644
index 0000000..9b620fa
--- /dev/null
+++ b/preact/demo/suspense.js
@@ -0,0 +1,97 @@
+// eslint-disable-next-line no-unused-vars
+import {
+ createElement,
+ Component,
+ memo,
+ Fragment,
+ Suspense,
+ lazy
+} from 'react';
+
+function LazyComp() {
+ return <div>I'm (fake) lazy loaded</div>;
+}
+
+const Lazy = lazy(() => Promise.resolve({ default: LazyComp }));
+
+function createSuspension(name, timeout, error) {
+ let done = false;
+ let prom;
+
+ return {
+ name,
+ timeout,
+ start: () => {
+ if (!prom) {
+ prom = new Promise((res, rej) => {
+ setTimeout(() => {
+ done = true;
+ if (error) {
+ rej(error);
+ } else {
+ res();
+ }
+ }, timeout);
+ });
+ }
+
+ return prom;
+ },
+ getPromise: () => prom,
+ isDone: () => done
+ };
+}
+
+function CustomSuspense({ isDone, start, timeout, name }) {
+ if (!isDone()) {
+ throw start();
+ }
+
+ return (
+ <div>
+ Hello from CustomSuspense {name}, loaded after {timeout / 1000}s
+ </div>
+ );
+}
+
+function init() {
+ return {
+ s1: createSuspension('1', 1000, null),
+ s2: createSuspension('2', 2000, null),
+ s3: createSuspension('3', 3000, null)
+ };
+}
+
+export default class DevtoolsDemo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = init();
+ this.onRerun = this.onRerun.bind(this);
+ }
+
+ onRerun() {
+ this.setState(init());
+ }
+
+ render(props, state) {
+ return (
+ <div>
+ <h1>lazy()</h1>
+ <Suspense fallback={<div>Loading (fake) lazy loaded component...</div>}>
+ <Lazy />
+ </Suspense>
+ <h1>Suspense</h1>
+ <div>
+ <button onClick={this.onRerun}>Rerun</button>
+ </div>
+ <Suspense fallback={<div>Fallback 1</div>}>
+ <CustomSuspense {...state.s1} />
+ <Suspense fallback={<div>Fallback 2</div>}>
+ <CustomSuspense {...state.s2} />
+ <CustomSuspense {...state.s3} />
+ </Suspense>
+ </Suspense>
+ </div>
+ );
+ }
+}
diff --git a/preact/demo/textFields.js b/preact/demo/textFields.js
new file mode 100644
index 0000000..58f69f1
--- /dev/null
+++ b/preact/demo/textFields.js
@@ -0,0 +1,37 @@
+import React, { useState } from 'react';
+import TextField from '@material-ui/core/TextField';
+
+/** @jsx React.createElement */
+
+const PatchedTextField = props => {
+ const [value, set] = useState(props.value);
+ return (
+ <TextField {...props} value={value} onChange={e => set(e.target.value)} />
+ );
+};
+
+const TextFields = () => (
+ <div>
+ <TextField
+ variant="outlined"
+ margin="normal"
+ fullWidth
+ label="Cannot type in"
+ />
+ <PatchedTextField
+ variant="outlined"
+ margin="normal"
+ fullWidth
+ label="I can"
+ />
+ <TextField
+ defaultValue="Reset after blur or empty"
+ variant="outlined"
+ margin="normal"
+ fullWidth
+ label="default value"
+ />
+ </div>
+);
+
+export default TextFields;
diff --git a/preact/demo/todo.js b/preact/demo/todo.js
new file mode 100644
index 0000000..189b4e8
--- /dev/null
+++ b/preact/demo/todo.js
@@ -0,0 +1,47 @@
+import { createElement, Component } from 'preact';
+
+let counter = 0;
+
+export default class TodoList extends Component {
+ state = { todos: [], text: '' };
+
+ setText = e => {
+ this.setState({ text: e.target.value });
+ };
+
+ addTodo = () => {
+ let { todos, text } = this.state;
+ todos = todos.concat({ text, id: ++counter });
+ this.setState({ todos, text: '' });
+ };
+
+ removeTodo = e => {
+ let id = e.target.getAttribute('data-id');
+ this.setState({ todos: this.state.todos.filter(t => t.id != id) });
+ };
+
+ render({}, { todos, text }) {
+ return (
+ <form onSubmit={this.addTodo} action="javascript:">
+ <input value={text} onInput={this.setText} />
+ <button type="submit">Add</button>
+ <ul>
+ <TodoItems todos={todos} removeTodo={this.removeTodo} />
+ </ul>
+ </form>
+ );
+ }
+}
+
+class TodoItems extends Component {
+ render({ todos, removeTodo }) {
+ return todos.map(todo => (
+ <li key={todo.id}>
+ <button type="button" onClick={removeTodo} data-id={todo.id}>
+ &times;
+ </button>{' '}
+ {todo.text}
+ </li>
+ ));
+ }
+}
diff --git a/preact/demo/tsconfig.json b/preact/demo/tsconfig.json
new file mode 100644
index 0000000..b252efc
--- /dev/null
+++ b/preact/demo/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "experimentalDecorators": true,
+ "jsx": "react",
+ "jsxFactory": "h",
+ "baseUrl": ".",
+ "target": "es2018",
+ "module": "es2015",
+ "moduleResolution": "node",
+ "paths": {
+ "preact/hooks": ["../hooks/src/index.js"],
+ "preact": ["../src/index.js"],
+ }
+ }
+}
diff --git a/preact/demo/webpack.config.js b/preact/demo/webpack.config.js
new file mode 100644
index 0000000..063f507
--- /dev/null
+++ b/preact/demo/webpack.config.js
@@ -0,0 +1,112 @@
+/* eslint-disable */
+const path = require('path');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+
+const preact = path.join(__dirname, '..', 'src');
+const compat = path.join(__dirname, '..', 'compat', 'src');
+
+module.exports = {
+ context: __dirname,
+ entry: './index',
+ output: {
+ publicPath: '/'
+ },
+ resolve: {
+ alias: {
+ ['preact/debug']: path.join(__dirname, '..', 'debug'),
+ ['preact/devtools']: path.join(__dirname, '..', 'devtools'),
+ ['preact/hooks']: path.join(__dirname, '..', 'hooks', 'src'),
+ preact: preact,
+ react: compat,
+ 'react-dom': compat
+ },
+ extensions: ['.tsx', '.ts', '.js']
+ },
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ loader: 'babel-loader',
+ options: {
+ sourceMap: true,
+ presets: [
+ [require.resolve('@babel/preset-typescript'), { jsxPragma: 'h' }],
+ [
+ require.resolve('@babel/preset-env'),
+ {
+ targets: {
+ browsers: ['last 2 versions', 'IE >= 9']
+ },
+ modules: false,
+ loose: true
+ }
+ ],
+ [require.resolve('@babel/preset-react')]
+ ],
+ plugins: [
+ [require.resolve('@babel/plugin-transform-runtime')],
+ [require.resolve('@babel/plugin-transform-react-jsx-source')],
+ [
+ require.resolve('@babel/plugin-transform-react-jsx'),
+ { pragma: 'h', pragmaFrag: 'Fragment' }
+ ],
+ [
+ require.resolve('@babel/plugin-proposal-decorators'),
+ { legacy: true }
+ ],
+ [
+ require.resolve('@babel/plugin-proposal-class-properties'),
+ { loose: true }
+ ]
+ ]
+ }
+ },
+ {
+ test: /\.js$/,
+ loader: 'babel-loader',
+ options: {
+ sourceMap: true,
+ presets: [
+ [
+ require.resolve('@babel/preset-env'),
+ {
+ targets: {
+ browsers: ['last 2 versions', 'IE >= 9']
+ },
+ modules: false,
+ loose: true
+ }
+ ],
+ [require.resolve('@babel/preset-react')]
+ ],
+ plugins: [
+ [require.resolve('@babel/plugin-transform-react-jsx-source')],
+ [
+ require.resolve('@babel/plugin-transform-react-jsx'),
+ { pragma: 'createElement', pragmaFrag: 'Fragment' }
+ ],
+ [require.resolve('@babel/plugin-proposal-class-properties')],
+ [
+ require.resolve('@babel/plugin-transform-react-constant-elements')
+ ],
+ [require.resolve('@babel/plugin-syntax-dynamic-import')]
+ ]
+ }
+ },
+ {
+ test: /\.s?css$/,
+ use: ['style-loader', 'css-loader', 'sass-loader']
+ }
+ ]
+ },
+ devtool: 'inline-source-map',
+ node: {
+ process: 'mock',
+ Buffer: false,
+ setImmediate: false
+ },
+ devServer: {
+ historyApiFallback: true
+ },
+ plugins: [new HtmlWebpackPlugin()]
+};
diff --git a/preact/devtools/LICENSE b/preact/devtools/LICENSE
new file mode 100644
index 0000000..da5389a
--- /dev/null
+++ b/preact/devtools/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Jason Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/preact/devtools/mangle.json b/preact/devtools/mangle.json
new file mode 100644
index 0000000..506a6a4
--- /dev/null
+++ b/preact/devtools/mangle.json
@@ -0,0 +1,21 @@
+{
+ "help": {
+ "what is this file?": "It controls protected/private property mangling so that minified builds have consistent property names.",
+ "why are there duplicate minified properties?": "Most properties are only used on one type of objects, so they can have the same name since they will never collide. Doing this reduces size."
+ },
+ "minify": {
+ "mangle": {
+ "properties": {
+ "regex": "^_[^_]",
+ "reserved": [
+ "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED",
+ "__REACT_DEVTOOLS_GLOBAL_HOOK__",
+ "__PREACT_DEVTOOLS__",
+ "_renderers",
+ "__source",
+ "__self"
+ ]
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/preact/devtools/package.json b/preact/devtools/package.json
new file mode 100644
index 0000000..92beb75
--- /dev/null
+++ b/preact/devtools/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "preact-devtools",
+ "amdName": "preactDevtools",
+ "version": "1.0.0",
+ "private": true,
+ "description": "Preact bridge for Preact devtools",
+ "main": "dist/devtools.js",
+ "module": "dist/devtools.module.js",
+ "umd:main": "dist/devtools.umd.js",
+ "source": "src/index.js",
+ "license": "MIT",
+ "types": "src/index.d.ts",
+ "peerDependencies": {
+ "preact": "^10.0.0"
+ }
+}
diff --git a/preact/devtools/src/devtools.js b/preact/devtools/src/devtools.js
new file mode 100644
index 0000000..2bd462d
--- /dev/null
+++ b/preact/devtools/src/devtools.js
@@ -0,0 +1,10 @@
+import { options, Fragment, Component } from 'preact';
+
+export function initDevTools() {
+ if (typeof window != 'undefined' && window.__PREACT_DEVTOOLS__) {
+ window.__PREACT_DEVTOOLS__.attachPreact('10.5.14', options, {
+ Fragment,
+ Component
+ });
+ }
+}
diff --git a/preact/devtools/src/index.d.ts b/preact/devtools/src/index.d.ts
new file mode 100644
index 0000000..230e5ab
--- /dev/null
+++ b/preact/devtools/src/index.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Customize the displayed name of a useState, useReducer or useRef hook
+ * in the devtools panel.
+ *
+ * @param value Wrapped native hook.
+ * @param name Custom name
+ */
+export function addHookName<T>(value: T, name: string): T;
diff --git a/preact/devtools/src/index.js b/preact/devtools/src/index.js
new file mode 100644
index 0000000..693429f
--- /dev/null
+++ b/preact/devtools/src/index.js
@@ -0,0 +1,15 @@
+import { options } from 'preact';
+import { initDevTools } from './devtools';
+
+initDevTools();
+
+/**
+ * Display a custom label for a custom hook for the devtools panel
+ * @type {<T>(value: T, name: string) => T}
+ */
+export function addHookName(value, name) {
+ if (options._addHookName) {
+ options._addHookName(name);
+ }
+ return value;
+}
diff --git a/preact/devtools/test/browser/addHookName.test.js b/preact/devtools/test/browser/addHookName.test.js
new file mode 100644
index 0000000..28b06b0
--- /dev/null
+++ b/preact/devtools/test/browser/addHookName.test.js
@@ -0,0 +1,51 @@
+import { createElement, render, options } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useState } from 'preact/hooks';
+import { addHookName } from 'preact/devtools';
+
+/** @jsx createElement */
+
+describe('addHookName', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ delete options._addHookName;
+ });
+
+ it('should do nothing when no options hook is present', () => {
+ function useFoo() {
+ return addHookName(useState(0), 'foo');
+ }
+
+ function App() {
+ let [v] = useFoo();
+ return <div>{v}</div>;
+ }
+
+ expect(() => render(<App />, scratch)).to.not.throw();
+ });
+
+ it('should call options hook with value', () => {
+ let spy = (options._addHookName = sinon.spy());
+
+ function useFoo() {
+ return addHookName(useState(0), 'foo');
+ }
+
+ function App() {
+ let [v] = useFoo();
+ return <div>{v}</div>;
+ }
+
+ render(<App />, scratch);
+
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWith('foo');
+ });
+});
diff --git a/preact/hooks/LICENSE b/preact/hooks/LICENSE
new file mode 100644
index 0000000..da5389a
--- /dev/null
+++ b/preact/hooks/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Jason Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/preact/hooks/mangle.json b/preact/hooks/mangle.json
new file mode 100644
index 0000000..506a6a4
--- /dev/null
+++ b/preact/hooks/mangle.json
@@ -0,0 +1,21 @@
+{
+ "help": {
+ "what is this file?": "It controls protected/private property mangling so that minified builds have consistent property names.",
+ "why are there duplicate minified properties?": "Most properties are only used on one type of objects, so they can have the same name since they will never collide. Doing this reduces size."
+ },
+ "minify": {
+ "mangle": {
+ "properties": {
+ "regex": "^_[^_]",
+ "reserved": [
+ "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED",
+ "__REACT_DEVTOOLS_GLOBAL_HOOK__",
+ "__PREACT_DEVTOOLS__",
+ "_renderers",
+ "__source",
+ "__self"
+ ]
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/preact/hooks/package.json b/preact/hooks/package.json
new file mode 100644
index 0000000..1e8d66a
--- /dev/null
+++ b/preact/hooks/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "preact-hooks",
+ "amdName": "preactHooks",
+ "version": "0.1.0",
+ "private": true,
+ "description": "Hook addon for Preact",
+ "main": "dist/hooks.js",
+ "module": "dist/hooks.module.js",
+ "umd:main": "dist/hooks.umd.js",
+ "source": "src/index.js",
+ "license": "MIT",
+ "types": "src/index.d.ts",
+ "scripts": {
+ "build": "microbundle build --raw",
+ "dev": "microbundle watch --raw --format cjs",
+ "test": "npm-run-all build --parallel test:karma",
+ "test:karma": "karma start test/karma.conf.js --single-run",
+ "test:karma:watch": "karma start test/karma.conf.js --no-single-run"
+ },
+ "peerDependencies": {
+ "preact": "^10.0.0"
+ },
+ "mangle": {
+ "regex": "^_"
+ }
+}
diff --git a/preact/hooks/src/index.d.ts b/preact/hooks/src/index.d.ts
new file mode 100644
index 0000000..c9f6788
--- /dev/null
+++ b/preact/hooks/src/index.d.ts
@@ -0,0 +1,133 @@
+import { PreactContext, Ref as PreactRef, RefObject } from '../..';
+
+type Inputs = ReadonlyArray<unknown>;
+
+export type StateUpdater<S> = (value: S | ((prevState: S) => S)) => void;
+/**
+ * Returns a stateful value, and a function to update it.
+ * @param initialState The initial value (or a function that returns the initial value)
+ */
+export function useState<S>(initialState: S | (() => S)): [S, StateUpdater<S>];
+
+export function useState<S = undefined>(): [
+ S | undefined,
+ StateUpdater<S | undefined>
+];
+
+export type Reducer<S, A> = (prevState: S, action: A) => S;
+/**
+ * An alternative to `useState`.
+ *
+ * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+ * multiple sub-values. It also lets you optimize performance for components that trigger deep
+ * updates because you can pass `dispatch` down instead of callbacks.
+ * @param reducer Given the current state and an action, returns the new state
+ * @param initialState The initial value to store as state
+ */
+export function useReducer<S, A>(
+ reducer: Reducer<S, A>,
+ initialState: S
+): [S, (action: A) => void];
+
+/**
+ * An alternative to `useState`.
+ *
+ * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+ * multiple sub-values. It also lets you optimize performance for components that trigger deep
+ * updates because you can pass `dispatch` down instead of callbacks.
+ * @param reducer Given the current state and an action, returns the new state
+ * @param initialArg The initial argument to pass to the `init` function
+ * @param init A function that, given the `initialArg`, returns the initial value to store as state
+ */
+export function useReducer<S, A, I>(
+ reducer: Reducer<S, A>,
+ initialArg: I,
+ init: (arg: I) => S
+): [S, (action: A) => void];
+
+/** @deprecated Use the `Ref` type instead. */
+type PropRef<T> = { current: T };
+type Ref<T> = { current: T };
+
+/**
+ * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument
+ * (`initialValue`). The returned object will persist for the full lifetime of the component.
+ *
+ * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable
+ * value around similar to how you’d use instance fields in classes.
+ *
+ * @param initialValue the initial value to store in the ref object
+ */
+export function useRef<T>(initialValue: null): RefObject<T>;
+export function useRef<T>(initialValue: T): Ref<T>;
+export function useRef<T>(): Ref<T | undefined>;
+
+type EffectCallback = () => void | (() => void);
+/**
+ * Accepts a function that contains imperative, possibly effectful code.
+ * The effects run after browser paint, without blocking it.
+ *
+ * @param effect Imperative function that can return a cleanup function
+ * @param inputs If present, effect will only activate if the values in the list change (using ===).
+ */
+export function useEffect(effect: EffectCallback, inputs?: Inputs): void;
+
+type CreateHandle = () => object;
+
+/**
+ * @param ref The ref that will be mutated
+ * @param create The function that will be executed to get the value that will be attached to
+ * ref.current
+ * @param inputs If present, effect will only activate if the values in the list change (using ===).
+ */
+export function useImperativeHandle<T, R extends T>(
+ ref: PreactRef<T>,
+ create: () => R,
+ inputs?: Inputs
+): void;
+
+/**
+ * Accepts a function that contains imperative, possibly effectful code.
+ * Use this to read layout from the DOM and synchronously re-render.
+ * Updates scheduled inside `useLayoutEffect` will be flushed synchronously, after all DOM mutations but before the browser has a chance to paint.
+ * Prefer the standard `useEffect` hook when possible to avoid blocking visual updates.
+ *
+ * @param effect Imperative function that can return a cleanup function
+ * @param inputs If present, effect will only activate if the values in the list change (using ===).
+ */
+export function useLayoutEffect(effect: EffectCallback, inputs?: Inputs): void;
+
+/**
+ * Returns a memoized version of the callback that only changes if one of the `inputs`
+ * has changed (using ===).
+ */
+export function useCallback<T extends Function>(callback: T, inputs: Inputs): T;
+
+/**
+ * Pass a factory function and an array of inputs.
+ * useMemo will only recompute the memoized value when one of the inputs has changed.
+ * This optimization helps to avoid expensive calculations on every render.
+ * If no array is provided, a new value will be computed whenever a new function instance is passed as the first argument.
+ */
+// for `inputs`, allow undefined, but don't make it optional as that is very likely a mistake
+export function useMemo<T>(factory: () => T, inputs: Inputs | undefined): T;
+
+/**
+ * Returns the current context value, as given by the nearest context provider for the given context.
+ * When the provider updates, this Hook will trigger a rerender with the latest context value.
+ *
+ * @param context The context you want to use
+ */
+export function useContext<T>(context: PreactContext<T>): T;
+
+/**
+ * Customize the displayed value in the devtools panel.
+ *
+ * @param value Custom hook name or object that is passed to formatter
+ * @param formatter Formatter to modify value before sending it to the devtools
+ */
+export function useDebugValue<T>(value: T, formatter?: (value: T) => any): void;
+
+export function useErrorBoundary(
+ callback?: (error: any) => Promise<void> | void
+): [any, () => void];
diff --git a/preact/hooks/src/index.js b/preact/hooks/src/index.js
new file mode 100644
index 0000000..e3840a2
--- /dev/null
+++ b/preact/hooks/src/index.js
@@ -0,0 +1,386 @@
+import { options } from 'preact';
+
+/** @type {number} */
+let currentIndex;
+
+/** @type {import('./internal').Component} */
+let currentComponent;
+/**
+ * Keep track of the previous component so that we can set
+ * `currentComponent` to `null` and throw when a hook is invoked
+ * outside of render
+ * @type {import('./internal').Component}
+ */
+let previousComponent;
+
+/** @type {number} */
+let currentHook = 0;
+
+/** @type {Array<import('./internal').Component>} */
+let afterPaintEffects = [];
+
+let oldBeforeDiff = options._diff;
+let oldBeforeRender = options._render;
+let oldAfterDiff = options.diffed;
+let oldCommit = options._commit;
+let oldBeforeUnmount = options.unmount;
+
+const RAF_TIMEOUT = 100;
+let prevRaf;
+
+options._diff = vnode => {
+ currentComponent = null;
+ if (oldBeforeDiff) oldBeforeDiff(vnode);
+};
+
+options._render = vnode => {
+ if (oldBeforeRender) oldBeforeRender(vnode);
+
+ currentComponent = vnode._component;
+ currentIndex = 0;
+
+ const hooks = currentComponent.__hooks;
+ if (hooks) {
+ hooks._pendingEffects.forEach(invokeCleanup);
+ hooks._pendingEffects.forEach(invokeEffect);
+ hooks._pendingEffects = [];
+ }
+};
+
+options.diffed = vnode => {
+ if (oldAfterDiff) oldAfterDiff(vnode);
+
+ const c = vnode._component;
+ if (c && c.__hooks && c.__hooks._pendingEffects.length) {
+ afterPaint(afterPaintEffects.push(c));
+ }
+ currentComponent = previousComponent;
+};
+
+options._commit = (vnode, commitQueue) => {
+ commitQueue.some(component => {
+ try {
+ component._renderCallbacks.forEach(invokeCleanup);
+ component._renderCallbacks = component._renderCallbacks.filter(cb =>
+ cb._value ? invokeEffect(cb) : true
+ );
+ } catch (e) {
+ commitQueue.some(c => {
+ if (c._renderCallbacks) c._renderCallbacks = [];
+ });
+ commitQueue = [];
+ options._catchError(e, component._vnode);
+ }
+ });
+
+ if (oldCommit) oldCommit(vnode, commitQueue);
+};
+
+options.unmount = vnode => {
+ if (oldBeforeUnmount) oldBeforeUnmount(vnode);
+
+ const c = vnode._component;
+ if (c && c.__hooks) {
+ try {
+ c.__hooks._list.forEach(invokeCleanup);
+ } catch (e) {
+ options._catchError(e, c._vnode);
+ }
+ }
+};
+
+/**
+ * Get a hook's state from the currentComponent
+ * @param {number} index The index of the hook to get
+ * @param {number} type The index of the hook to get
+ * @returns {any}
+ */
+function getHookState(index, type) {
+ if (options._hook) {
+ options._hook(currentComponent, index, currentHook || type);
+ }
+ currentHook = 0;
+
+ // Largely inspired by:
+ // * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs
+ // * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs
+ // Other implementations to look at:
+ // * https://codesandbox.io/s/mnox05qp8
+ const hooks =
+ currentComponent.__hooks ||
+ (currentComponent.__hooks = {
+ _list: [],
+ _pendingEffects: []
+ });
+
+ if (index >= hooks._list.length) {
+ hooks._list.push({});
+ }
+ return hooks._list[index];
+}
+
+/**
+ * @param {import('./index').StateUpdater<any>} [initialState]
+ */
+export function useState(initialState) {
+ currentHook = 1;
+ return useReducer(invokeOrReturn, initialState);
+}
+
+/**
+ * @param {import('./index').Reducer<any, any>} reducer
+ * @param {import('./index').StateUpdater<any>} initialState
+ * @param {(initialState: any) => void} [init]
+ * @returns {[ any, (state: any) => void ]}
+ */
+export function useReducer(reducer, initialState, init) {
+ /** @type {import('./internal').ReducerHookState} */
+ const hookState = getHookState(currentIndex++, 2);
+ hookState._reducer = reducer;
+ if (!hookState._component) {
+ hookState._value = [
+ !init ? invokeOrReturn(undefined, initialState) : init(initialState),
+
+ action => {
+ const nextValue = hookState._reducer(hookState._value[0], action);
+ if (hookState._value[0] !== nextValue) {
+ hookState._value = [nextValue, hookState._value[1]];
+ hookState._component.setState({});
+ }
+ }
+ ];
+
+ hookState._component = currentComponent;
+ }
+
+ return hookState._value;
+}
+
+/**
+ * @param {import('./internal').Effect} callback
+ * @param {any[]} args
+ */
+export function useEffect(callback, args) {
+ /** @type {import('./internal').EffectHookState} */
+ const state = getHookState(currentIndex++, 3);
+ if (!options._skipEffects && argsChanged(state._args, args)) {
+ state._value = callback;
+ state._args = args;
+
+ currentComponent.__hooks._pendingEffects.push(state);
+ }
+}
+
+/**
+ * @param {import('./internal').Effect} callback
+ * @param {any[]} args
+ */
+export function useLayoutEffect(callback, args) {
+ /** @type {import('./internal').EffectHookState} */
+ const state = getHookState(currentIndex++, 4);
+ if (!options._skipEffects && argsChanged(state._args, args)) {
+ state._value = callback;
+ state._args = args;
+
+ currentComponent._renderCallbacks.push(state);
+ }
+}
+
+export function useRef(initialValue) {
+ currentHook = 5;
+ return useMemo(() => ({ current: initialValue }), []);
+}
+
+/**
+ * @param {object} ref
+ * @param {() => object} createHandle
+ * @param {any[]} args
+ */
+export function useImperativeHandle(ref, createHandle, args) {
+ currentHook = 6;
+ useLayoutEffect(
+ () => {
+ if (typeof ref == 'function') ref(createHandle());
+ else if (ref) ref.current = createHandle();
+ },
+ args == null ? args : args.concat(ref)
+ );
+}
+
+/**
+ * @param {() => any} factory
+ * @param {any[]} args
+ */
+export function useMemo(factory, args) {
+ /** @type {import('./internal').MemoHookState} */
+ const state = getHookState(currentIndex++, 7);
+ if (argsChanged(state._args, args)) {
+ state._value = factory();
+ state._args = args;
+ state._factory = factory;
+ }
+
+ return state._value;
+}
+
+/**
+ * @param {() => void} callback
+ * @param {any[]} args
+ */
+export function useCallback(callback, args) {
+ currentHook = 8;
+ return useMemo(() => callback, args);
+}
+
+/**
+ * @param {import('./internal').PreactContext} context
+ */
+export function useContext(context) {
+ const provider = currentComponent.context[context._id];
+ // We could skip this call here, but than we'd not call
+ // `options._hook`. We need to do that in order to make
+ // the devtools aware of this hook.
+ /** @type {import('./internal').ContextHookState} */
+ const state = getHookState(currentIndex++, 9);
+ // The devtools needs access to the context object to
+ // be able to pull of the default value when no provider
+ // is present in the tree.
+ state._context = context;
+ if (!provider) return context._defaultValue;
+ // This is probably not safe to convert to "!"
+ if (state._value == null) {
+ state._value = true;
+ provider.sub(currentComponent);
+ }
+ return provider.props.value;
+}
+
+/**
+ * Display a custom label for a custom hook for the devtools panel
+ * @type {<T>(value: T, cb?: (value: T) => string | number) => void}
+ */
+export function useDebugValue(value, formatter) {
+ if (options.useDebugValue) {
+ options.useDebugValue(formatter ? formatter(value) : value);
+ }
+}
+
+/**
+ * @param {(error: any) => void} cb
+ */
+export function useErrorBoundary(cb) {
+ /** @type {import('./internal').ErrorBoundaryHookState} */
+ const state = getHookState(currentIndex++, 10);
+ const errState = useState();
+ state._value = cb;
+ if (!currentComponent.componentDidCatch) {
+ currentComponent.componentDidCatch = err => {
+ if (state._value) state._value(err);
+ errState[1](err);
+ };
+ }
+ return [
+ errState[0],
+ () => {
+ errState[1](undefined);
+ }
+ ];
+}
+
+/**
+ * After paint effects consumer.
+ */
+function flushAfterPaintEffects() {
+ afterPaintEffects.forEach(component => {
+ if (component._parentDom) {
+ try {
+ component.__hooks._pendingEffects.forEach(invokeCleanup);
+ component.__hooks._pendingEffects.forEach(invokeEffect);
+ component.__hooks._pendingEffects = [];
+ } catch (e) {
+ component.__hooks._pendingEffects = [];
+ options._catchError(e, component._vnode);
+ }
+ }
+ });
+ afterPaintEffects = [];
+}
+
+let HAS_RAF = typeof requestAnimationFrame == 'function';
+
+/**
+ * Schedule a callback to be invoked after the browser has a chance to paint a new frame.
+ * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after
+ * the next browser frame.
+ *
+ * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked
+ * even if RAF doesn't fire (for example if the browser tab is not visible)
+ *
+ * @param {() => void} callback
+ */
+function afterNextFrame(callback) {
+ const done = () => {
+ clearTimeout(timeout);
+ if (HAS_RAF) cancelAnimationFrame(raf);
+ setTimeout(callback);
+ };
+ const timeout = setTimeout(done, RAF_TIMEOUT);
+
+ let raf;
+ if (HAS_RAF) {
+ raf = requestAnimationFrame(done);
+ }
+}
+
+// Note: if someone used options.debounceRendering = requestAnimationFrame,
+// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.
+// Perhaps this is not such a big deal.
+/**
+ * Schedule afterPaintEffects flush after the browser paints
+ * @param {number} newQueueLength
+ */
+function afterPaint(newQueueLength) {
+ if (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {
+ prevRaf = options.requestAnimationFrame;
+ (prevRaf || afterNextFrame)(flushAfterPaintEffects);
+ }
+}
+
+/**
+ * @param {import('./internal').EffectHookState} hook
+ */
+function invokeCleanup(hook) {
+ // A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode
+ // and move the currentComponent away.
+ const comp = currentComponent;
+ if (typeof hook._cleanup == 'function') hook._cleanup();
+ currentComponent = comp;
+}
+
+/**
+ * Invoke a Hook's effect
+ * @param {import('./internal').EffectHookState} hook
+ */
+function invokeEffect(hook) {
+ // A hook call can introduce a call to render which creates a new root, this will call options.vnode
+ // and move the currentComponent away.
+ const comp = currentComponent;
+ hook._cleanup = hook._value();
+ currentComponent = comp;
+}
+
+/**
+ * @param {any[]} oldArgs
+ * @param {any[]} newArgs
+ */
+function argsChanged(oldArgs, newArgs) {
+ return (
+ !oldArgs ||
+ oldArgs.length !== newArgs.length ||
+ newArgs.some((arg, index) => arg !== oldArgs[index])
+ );
+}
+
+function invokeOrReturn(arg, f) {
+ return typeof f == 'function' ? f(arg) : f;
+}
diff --git a/preact/hooks/src/internal.d.ts b/preact/hooks/src/internal.d.ts
new file mode 100644
index 0000000..e6b51fb
--- /dev/null
+++ b/preact/hooks/src/internal.d.ts
@@ -0,0 +1,75 @@
+import {
+ Component as PreactComponent,
+ PreactContext
+} from '../../src/internal';
+import { Reducer } from '.';
+
+export { PreactContext };
+
+/**
+ * The type of arguments passed to a Hook function. While this type is not
+ * strictly necessary, they are given a type name to make it easier to read
+ * the following types and trace the flow of data.
+ */
+export type HookArgs = any;
+
+/**
+ * The return type of a Hook function. While this type is not
+ * strictly necessary, they are given a type name to make it easier to read
+ * the following types and trace the flow of data.
+ */
+export type HookReturnValue = any;
+
+/** The public function a user invokes to use a Hook */
+export type Hook = (...args: HookArgs[]) => HookReturnValue;
+
+// Hook tracking
+
+export interface ComponentHooks {
+ /** The list of hooks a component uses */
+ _list: HookState[];
+ /** List of Effects to be invoked after the next frame is rendered */
+ _pendingEffects: EffectHookState[];
+}
+
+export interface Component extends PreactComponent<any, any> {
+ __hooks?: ComponentHooks;
+}
+
+export type HookState =
+ | EffectHookState
+ | MemoHookState
+ | ReducerHookState
+ | ContextHookState
+ | ErrorBoundaryHookState;
+
+export type Effect = () => void | Cleanup;
+export type Cleanup = () => void;
+
+export interface EffectHookState {
+ _value?: Effect;
+ _args?: any[];
+ _cleanup?: Cleanup | void;
+}
+
+export interface MemoHookState {
+ _value?: any;
+ _args?: any[];
+ _factory?: () => any;
+}
+
+export interface ReducerHookState {
+ _value?: any;
+ _component?: Component;
+ _reducer?: Reducer<any, any>;
+}
+
+export interface ContextHookState {
+ /** Whether this hooks as subscribed to updates yet */
+ _value?: boolean;
+ _context?: PreactContext;
+}
+
+export interface ErrorBoundaryHookState {
+ _value?: (error: any) => void;
+}
diff --git a/preact/hooks/test/_util/useEffectUtil.js b/preact/hooks/test/_util/useEffectUtil.js
new file mode 100644
index 0000000..f04edc2
--- /dev/null
+++ b/preact/hooks/test/_util/useEffectUtil.js
@@ -0,0 +1,10 @@
+export function scheduleEffectAssert(assertFn) {
+ return new Promise(resolve => {
+ requestAnimationFrame(() =>
+ setTimeout(() => {
+ assertFn();
+ resolve();
+ }, 0)
+ );
+ });
+}
diff --git a/preact/hooks/test/browser/combinations.test.js b/preact/hooks/test/browser/combinations.test.js
new file mode 100644
index 0000000..986533c
--- /dev/null
+++ b/preact/hooks/test/browser/combinations.test.js
@@ -0,0 +1,301 @@
+import { setupRerender, act } from 'preact/test-utils';
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import {
+ useState,
+ useReducer,
+ useEffect,
+ useLayoutEffect,
+ useRef
+} from 'preact/hooks';
+import { scheduleEffectAssert } from '../_util/useEffectUtil';
+
+/** @jsx createElement */
+
+describe('combinations', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('can mix useState hooks', () => {
+ const states = {};
+ const setStates = {};
+
+ function Parent() {
+ const [state1, setState1] = useState(1);
+ const [state2, setState2] = useState(2);
+
+ Object.assign(states, { state1, state2 });
+ Object.assign(setStates, { setState1, setState2 });
+
+ return <Child />;
+ }
+
+ function Child() {
+ const [state3, setState3] = useState(3);
+ const [state4, setState4] = useState(4);
+
+ Object.assign(states, { state3, state4 });
+ Object.assign(setStates, { setState3, setState4 });
+
+ return null;
+ }
+
+ render(<Parent />, scratch);
+ expect(states).to.deep.equal({
+ state1: 1,
+ state2: 2,
+ state3: 3,
+ state4: 4
+ });
+
+ setStates.setState2(n => n * 10);
+ setStates.setState3(n => n * 10);
+ rerender();
+ expect(states).to.deep.equal({
+ state1: 1,
+ state2: 20,
+ state3: 30,
+ state4: 4
+ });
+ });
+
+ it('can rerender asynchronously from within an effect', () => {
+ const didRender = sinon.spy();
+
+ function Comp() {
+ const [counter, setCounter] = useState(0);
+
+ useEffect(() => {
+ if (counter === 0) setCounter(1);
+ });
+
+ didRender(counter);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+
+ return scheduleEffectAssert(() => {
+ rerender();
+ expect(didRender).to.have.been.calledTwice.and.calledWith(1);
+ });
+ });
+
+ it('can rerender synchronously from within a layout effect', () => {
+ const didRender = sinon.spy();
+
+ function Comp() {
+ const [counter, setCounter] = useState(0);
+
+ useLayoutEffect(() => {
+ if (counter === 0) setCounter(1);
+ });
+
+ didRender(counter);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ rerender();
+
+ expect(didRender).to.have.been.calledTwice.and.calledWith(1);
+ });
+
+ it('can access refs from within a layout effect callback', () => {
+ let refAtLayoutTime;
+
+ function Comp() {
+ const input = useRef();
+
+ useLayoutEffect(() => {
+ refAtLayoutTime = input.current;
+ });
+
+ return <input ref={input} value="hello" />;
+ }
+
+ render(<Comp />, scratch);
+
+ expect(refAtLayoutTime.value).to.equal('hello');
+ });
+
+ it('can use multiple useState and useReducer hooks', () => {
+ let states = [];
+ let dispatchState4;
+
+ function reducer1(state, action) {
+ switch (action.type) {
+ case 'increment':
+ return state + action.count;
+ }
+ }
+
+ function reducer2(state, action) {
+ switch (action.type) {
+ case 'increment':
+ return state + action.count * 2;
+ }
+ }
+
+ function Comp() {
+ const [state1] = useState(0);
+ const [state2] = useReducer(reducer1, 10);
+ const [state3] = useState(1);
+ const [state4, dispatch] = useReducer(reducer2, 20);
+
+ dispatchState4 = dispatch;
+ states.push(state1, state2, state3, state4);
+
+ return null;
+ }
+
+ render(<Comp />, scratch);
+
+ expect(states).to.deep.equal([0, 10, 1, 20]);
+
+ states = [];
+
+ dispatchState4({ type: 'increment', count: 10 });
+ rerender();
+
+ expect(states).to.deep.equal([0, 10, 1, 40]);
+ });
+
+ it('ensures useEffect always schedule after the next paint following a redraw effect, when using the default debounce strategy', () => {
+ let effectCount = 0;
+
+ function Comp() {
+ const [counter, setCounter] = useState(0);
+
+ useEffect(() => {
+ if (counter === 0) setCounter(1);
+ effectCount++;
+ });
+
+ return null;
+ }
+
+ render(<Comp />, scratch);
+
+ return scheduleEffectAssert(() => {
+ expect(effectCount).to.equal(1);
+ });
+ });
+
+ it('should not reuse functional components with hooks', () => {
+ let updater = { first: undefined, second: undefined };
+ function Foo(props) {
+ let [v, setter] = useState(0);
+ updater[props.id] = () => setter(++v);
+ return <div>{v}</div>;
+ }
+
+ let updateParent;
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { active: true };
+ updateParent = () => this.setState(p => ({ active: !p.active }));
+ }
+
+ render() {
+ return (
+ <div>
+ {this.state.active && <Foo id="first" />}
+ <Foo id="second" />
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ act(() => updater.second());
+ expect(scratch.textContent).to.equal('01');
+
+ updateParent();
+ rerender();
+ expect(scratch.textContent).to.equal('1');
+
+ updateParent();
+ rerender();
+
+ expect(scratch.textContent).to.equal('01');
+ });
+
+ it('should have a right call order with correct dom ref', () => {
+ let i = 0,
+ set;
+ const calls = [];
+
+ function Inner() {
+ useLayoutEffect(() => {
+ calls.push('layout inner call ' + scratch.innerHTML);
+ return () => calls.push('layout inner dispose ' + scratch.innerHTML);
+ });
+ useEffect(() => {
+ calls.push('effect inner call ' + scratch.innerHTML);
+ return () => calls.push('effect inner dispose ' + scratch.innerHTML);
+ });
+ return <span>hello {i}</span>;
+ }
+
+ function Outer() {
+ i++;
+ const [state, setState] = useState(false);
+ set = () => setState(!state);
+ useLayoutEffect(() => {
+ calls.push('layout outer call ' + scratch.innerHTML);
+ return () => calls.push('layout outer dispose ' + scratch.innerHTML);
+ });
+ useEffect(() => {
+ calls.push('effect outer call ' + scratch.innerHTML);
+ return () => calls.push('effect outer dispose ' + scratch.innerHTML);
+ });
+ return <Inner />;
+ }
+
+ act(() => render(<Outer />, scratch));
+ expect(calls).to.deep.equal([
+ 'layout inner call <span>hello 1</span>',
+ 'layout outer call <span>hello 1</span>',
+ 'effect inner call <span>hello 1</span>',
+ 'effect outer call <span>hello 1</span>'
+ ]);
+
+ // NOTE: this order is (at the time of writing) intentionally different from
+ // React. React calls all disposes across all components, and then invokes all
+ // effects across all components. We call disposes and effects in order of components:
+ // for each component, call its disposes and then its effects. If presented with a
+ // compelling use case to support inter-component dispose dependencies, then rewrite this
+ // test to test React's order. In other words, if there is a use case to support calling
+ // all disposes across components then re-order the lines below to demonstrate the desired behavior.
+
+ act(() => set());
+ expect(calls).to.deep.equal([
+ 'layout inner call <span>hello 1</span>',
+ 'layout outer call <span>hello 1</span>',
+ 'effect inner call <span>hello 1</span>',
+ 'effect outer call <span>hello 1</span>',
+ 'layout inner dispose <span>hello 2</span>',
+ 'layout inner call <span>hello 2</span>',
+ 'layout outer dispose <span>hello 2</span>',
+ 'layout outer call <span>hello 2</span>',
+ 'effect inner dispose <span>hello 2</span>',
+ 'effect inner call <span>hello 2</span>',
+ 'effect outer dispose <span>hello 2</span>',
+ 'effect outer call <span>hello 2</span>'
+ ]);
+ });
+});
diff --git a/preact/hooks/test/browser/errorBoundary.test.js b/preact/hooks/test/browser/errorBoundary.test.js
new file mode 100644
index 0000000..4c2f7f3
--- /dev/null
+++ b/preact/hooks/test/browser/errorBoundary.test.js
@@ -0,0 +1,92 @@
+import { createElement, render } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useErrorBoundary } from 'preact/hooks';
+import { setupRerender } from 'preact/test-utils';
+
+/** @jsx createElement */
+
+describe('errorBoundary', () => {
+ /** @type {HTMLDivElement} */
+ let scratch, rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('catches errors', () => {
+ let resetErr,
+ success = false;
+ const Throws = () => {
+ throw new Error('test');
+ };
+
+ const App = props => {
+ const [err, reset] = useErrorBoundary();
+ resetErr = reset;
+ return err ? <p>Error</p> : success ? <p>Success</p> : <Throws />;
+ };
+
+ render(<App />, scratch);
+ rerender();
+ expect(scratch.innerHTML).to.equal('<p>Error</p>');
+
+ success = true;
+ resetErr();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<p>Success</p>');
+ });
+
+ it('calls the errorBoundary callback', () => {
+ const spy = sinon.spy();
+ const error = new Error('test');
+ const Throws = () => {
+ throw error;
+ };
+
+ const App = props => {
+ const [err] = useErrorBoundary(spy);
+ return err ? <p>Error</p> : <Throws />;
+ };
+
+ render(<App />, scratch);
+ rerender();
+ expect(scratch.innerHTML).to.equal('<p>Error</p>');
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWith(error);
+ });
+
+ it('does not leave a stale closure', () => {
+ const spy = sinon.spy(),
+ spy2 = sinon.spy();
+ let resetErr;
+ const error = new Error('test');
+ const Throws = () => {
+ throw error;
+ };
+
+ const App = props => {
+ const [err, reset] = useErrorBoundary(props.onError);
+ resetErr = reset;
+ return err ? <p>Error</p> : <Throws />;
+ };
+
+ render(<App onError={spy} />, scratch);
+ rerender();
+ expect(scratch.innerHTML).to.equal('<p>Error</p>');
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWith(error);
+
+ resetErr();
+ render(<App onError={spy2} />, scratch);
+ rerender();
+ expect(scratch.innerHTML).to.equal('<p>Error</p>');
+ expect(spy).to.be.calledOnce;
+ expect(spy2).to.be.calledOnce;
+ expect(spy2).to.be.calledWith(error);
+ });
+});
diff --git a/preact/hooks/test/browser/hooks.options.test.js b/preact/hooks/test/browser/hooks.options.test.js
new file mode 100644
index 0000000..ca88d1f
--- /dev/null
+++ b/preact/hooks/test/browser/hooks.options.test.js
@@ -0,0 +1,154 @@
+import {
+ afterDiffSpy,
+ beforeRenderSpy,
+ unmountSpy,
+ hookSpy
+} from '../../../test/_util/optionSpies';
+
+import { setupRerender, act } from 'preact/test-utils';
+import { createElement, render, createContext, options } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import {
+ useState,
+ useReducer,
+ useEffect,
+ useLayoutEffect,
+ useRef,
+ useImperativeHandle,
+ useMemo,
+ useCallback,
+ useContext,
+ useErrorBoundary
+} from 'preact/hooks';
+
+/** @jsx createElement */
+
+describe('hook options', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ /** @type {() => void} */
+ let increment;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+
+ afterDiffSpy.resetHistory();
+ unmountSpy.resetHistory();
+ beforeRenderSpy.resetHistory();
+ hookSpy.resetHistory();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ function App() {
+ const [count, setCount] = useState(0);
+ increment = () => setCount(prevCount => prevCount + 1);
+ return <div>{count}</div>;
+ }
+
+ it('should call old options on mount', () => {
+ render(<App />, scratch);
+
+ expect(beforeRenderSpy).to.have.been.called;
+ expect(afterDiffSpy).to.have.been.called;
+ });
+
+ it('should call old options.diffed on update', () => {
+ render(<App />, scratch);
+
+ increment();
+ rerender();
+
+ expect(beforeRenderSpy).to.have.been.called;
+ expect(afterDiffSpy).to.have.been.called;
+ });
+
+ it('should call old options on unmount', () => {
+ render(<App />, scratch);
+ render(null, scratch);
+
+ expect(unmountSpy).to.have.been.called;
+ });
+
+ it('should detect hooks', () => {
+ const USE_STATE = 1;
+ const USE_REDUCER = 2;
+ const USE_EFFECT = 3;
+ const USE_LAYOUT_EFFECT = 4;
+ const USE_REF = 5;
+ const USE_IMPERATIVE_HANDLE = 6;
+ const USE_MEMO = 7;
+ const USE_CALLBACK = 8;
+ const USE_CONTEXT = 9;
+ const USE_ERROR_BOUNDARY = 10;
+
+ const Ctx = createContext(null);
+
+ function App() {
+ useState(0);
+ useReducer(x => x, 0);
+ useEffect(() => null, []);
+ useLayoutEffect(() => null, []);
+ const ref = useRef(null);
+ useImperativeHandle(ref, () => null);
+ useMemo(() => null, []);
+ useCallback(() => null, []);
+ useContext(Ctx);
+ useErrorBoundary(() => null);
+ }
+
+ render(
+ <Ctx.Provider value="a">
+ <App />
+ </Ctx.Provider>,
+ scratch
+ );
+
+ expect(hookSpy.args.map(arg => [arg[1], arg[2]])).to.deep.equal([
+ [0, USE_STATE],
+ [1, USE_REDUCER],
+ [2, USE_EFFECT],
+ [3, USE_LAYOUT_EFFECT],
+ [4, USE_REF],
+ [5, USE_IMPERATIVE_HANDLE],
+ [6, USE_MEMO],
+ [7, USE_CALLBACK],
+ [8, USE_CONTEXT],
+ [9, USE_ERROR_BOUNDARY],
+ // Belongs to useErrorBoundary that uses multiple native hooks.
+ [10, USE_STATE]
+ ]);
+ });
+
+ describe('Effects', () => {
+ beforeEach(() => {
+ options._skipEffects = options.__s = true;
+ });
+
+ afterEach(() => {
+ options._skipEffects = options.__s = false;
+ });
+
+ it('should skip effect hooks', () => {
+ const spy = sinon.spy();
+ function App() {
+ useEffect(spy, []);
+ useLayoutEffect(spy, []);
+ return null;
+ }
+
+ act(() => {
+ render(<App />, scratch);
+ });
+
+ expect(spy.callCount).to.equal(0);
+ });
+ });
+});
diff --git a/preact/hooks/test/browser/useCallback.test.js b/preact/hooks/test/browser/useCallback.test.js
new file mode 100644
index 0000000..151fed9
--- /dev/null
+++ b/preact/hooks/test/browser/useCallback.test.js
@@ -0,0 +1,41 @@
+import { createElement, render } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useCallback } from 'preact/hooks';
+
+/** @jsx createElement */
+
+describe('useCallback', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('only recomputes the callback when inputs change', () => {
+ const callbacks = [];
+
+ function Comp({ a, b }) {
+ const cb = useCallback(() => a + b, [a, b]);
+ callbacks.push(cb);
+ return null;
+ }
+
+ render(<Comp a={1} b={1} />, scratch);
+ render(<Comp a={1} b={1} />, scratch);
+
+ expect(callbacks[0]).to.equal(callbacks[1]);
+ expect(callbacks[0]()).to.equal(2);
+
+ render(<Comp a={1} b={2} />, scratch);
+ render(<Comp a={1} b={2} />, scratch);
+
+ expect(callbacks[1]).to.not.equal(callbacks[2]);
+ expect(callbacks[2]).to.equal(callbacks[3]);
+ expect(callbacks[2]()).to.equal(3);
+ });
+});
diff --git a/preact/hooks/test/browser/useContext.test.js b/preact/hooks/test/browser/useContext.test.js
new file mode 100644
index 0000000..67b7851
--- /dev/null
+++ b/preact/hooks/test/browser/useContext.test.js
@@ -0,0 +1,351 @@
+import { createElement, render, createContext, Component } from 'preact';
+import { act } from 'preact/test-utils';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useContext, useEffect, useState } from 'preact/hooks';
+
+/** @jsx createElement */
+
+describe('useContext', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('gets values from context', () => {
+ const values = [];
+ const Context = createContext(13);
+
+ function Comp() {
+ const value = useContext(Context);
+ values.push(value);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(
+ <Context.Provider value={42}>
+ <Comp />
+ </Context.Provider>,
+ scratch
+ );
+ render(
+ <Context.Provider value={69}>
+ <Comp />
+ </Context.Provider>,
+ scratch
+ );
+
+ expect(values).to.deep.equal([13, 42, 69]);
+ });
+
+ it('should use default value', () => {
+ const Foo = createContext(42);
+ const spy = sinon.spy();
+
+ function App() {
+ spy(useContext(Foo));
+ return <div />;
+ }
+
+ render(<App />, scratch);
+ expect(spy).to.be.calledWith(42);
+ });
+
+ it('should update when value changes with nonUpdating Component on top', done => {
+ const spy = sinon.spy();
+ const Ctx = createContext(0);
+
+ class NoUpdate extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render() {
+ return this.props.children;
+ }
+ }
+
+ function App(props) {
+ return (
+ <Ctx.Provider value={props.value}>
+ <NoUpdate>
+ <Comp />
+ </NoUpdate>
+ </Ctx.Provider>
+ );
+ }
+
+ function Comp() {
+ const value = useContext(Ctx);
+ spy(value);
+ return <h1>{value}</h1>;
+ }
+
+ render(<App value={0} />, scratch);
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWith(0);
+ render(<App value={1} />, scratch);
+
+ // Wait for enqueued hook update
+ setTimeout(() => {
+ // Should not be called a third time
+ expect(spy).to.be.calledTwice;
+ expect(spy).to.be.calledWith(1);
+ done();
+ }, 0);
+ });
+
+ it('should only update when value has changed', done => {
+ const spy = sinon.spy();
+ const Ctx = createContext(0);
+
+ function App(props) {
+ return (
+ <Ctx.Provider value={props.value}>
+ <Comp />
+ </Ctx.Provider>
+ );
+ }
+
+ function Comp() {
+ const value = useContext(Ctx);
+ spy(value);
+ return <h1>{value}</h1>;
+ }
+
+ render(<App value={0} />, scratch);
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWith(0);
+ render(<App value={1} />, scratch);
+
+ expect(spy).to.be.calledTwice;
+ expect(spy).to.be.calledWith(1);
+
+ // Wait for enqueued hook update
+ setTimeout(() => {
+ // Should not be called a third time
+ expect(spy).to.be.calledTwice;
+ done();
+ }, 0);
+ });
+
+ it('should allow multiple context hooks at the same time', () => {
+ const Foo = createContext(0);
+ const Bar = createContext(10);
+ const spy = sinon.spy();
+ const unmountspy = sinon.spy();
+
+ function Comp() {
+ const foo = useContext(Foo);
+ const bar = useContext(Bar);
+ spy(foo, bar);
+ useEffect(() => () => unmountspy());
+
+ return <div />;
+ }
+
+ render(
+ <Foo.Provider value={0}>
+ <Bar.Provider value={10}>
+ <Comp />
+ </Bar.Provider>
+ </Foo.Provider>,
+ scratch
+ );
+
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWith(0, 10);
+
+ render(
+ <Foo.Provider value={11}>
+ <Bar.Provider value={42}>
+ <Comp />
+ </Bar.Provider>
+ </Foo.Provider>,
+ scratch
+ );
+
+ expect(spy).to.be.calledTwice;
+ expect(unmountspy).not.to.be.called;
+ });
+
+ it('should only subscribe a component once', () => {
+ const values = [];
+ const Context = createContext(13);
+ let provider, subSpy;
+
+ function Comp() {
+ const value = useContext(Context);
+ values.push(value);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+
+ render(
+ <Context.Provider ref={p => (provider = p)} value={42}>
+ <Comp />
+ </Context.Provider>,
+ scratch
+ );
+ subSpy = sinon.spy(provider, 'sub');
+
+ render(
+ <Context.Provider value={69}>
+ <Comp />
+ </Context.Provider>,
+ scratch
+ );
+ expect(subSpy).to.not.have.been.called;
+
+ expect(values).to.deep.equal([13, 42, 69]);
+ });
+
+ it('should maintain context', done => {
+ const context = createContext(null);
+ const { Provider } = context;
+ const first = { name: 'first' };
+ const second = { name: 'second' };
+
+ const Input = () => {
+ const config = useContext(context);
+
+ // Avoid eslint complaining about unused first value
+ const state = useState('initial');
+ const set = state[1];
+
+ useEffect(() => {
+ // Schedule the update on the next frame
+ requestAnimationFrame(() => {
+ set('irrelevant');
+ });
+ }, [config]);
+
+ return <div>{config.name}</div>;
+ };
+
+ const App = props => {
+ const [config, setConfig] = useState({});
+
+ useEffect(() => {
+ setConfig(props.config);
+ }, [props.config]);
+
+ return (
+ <Provider value={config}>
+ <Input />
+ </Provider>
+ );
+ };
+
+ act(() => {
+ render(<App config={first} />, scratch);
+
+ // Create a new div to append the `second` case
+ const div = scratch.appendChild(document.createElement('div'));
+ render(<App config={second} />, div);
+ });
+
+ // Push the expect into the next frame
+ requestAnimationFrame(() => {
+ expect(scratch.innerHTML).equal(
+ '<div>first</div><div><div>second</div></div>'
+ );
+ done();
+ });
+ });
+
+ it('should not rerender consumers that have been unmounted', () => {
+ const context = createContext(0);
+ const Provider = context.Provider;
+
+ const Inner = sinon.spy(() => {
+ const value = useContext(context);
+ return <div>{value}</div>;
+ });
+
+ let toggleConsumer;
+ let changeValue;
+ class App extends Component {
+ constructor() {
+ super();
+
+ this.state = { value: 0, show: true };
+ changeValue = value => this.setState({ value });
+ toggleConsumer = () => this.setState(({ show }) => ({ show: !show }));
+ }
+ render(props, state) {
+ return (
+ <Provider value={state.value}>
+ <div>{state.show ? <Inner /> : null}</div>
+ </Provider>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal('<div><div>0</div></div>');
+ expect(Inner).to.have.been.calledOnce;
+
+ act(() => changeValue(1));
+ expect(scratch.innerHTML).to.equal('<div><div>1</div></div>');
+ expect(Inner).to.have.been.calledTwice;
+
+ act(() => toggleConsumer());
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ expect(Inner).to.have.been.calledTwice;
+
+ act(() => changeValue(2));
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ expect(Inner).to.have.been.calledTwice;
+ });
+
+ it('should rerender when reset to defaultValue', () => {
+ const defaultValue = { state: 'hi' };
+ const context = createContext(defaultValue);
+ let set;
+
+ const Consumer = () => {
+ const ctx = useContext(context);
+ return <p>{ctx.state}</p>;
+ };
+
+ class NoUpdate extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return <Consumer />;
+ }
+ }
+
+ const Provider = () => {
+ const [state, setState] = useState(defaultValue);
+ set = setState;
+ return (
+ <context.Provider value={state}>
+ <NoUpdate />
+ </context.Provider>
+ );
+ };
+
+ render(<Provider />, scratch);
+ expect(scratch.innerHTML).to.equal('<p>hi</p>');
+
+ act(() => {
+ set({ state: 'bye' });
+ });
+ expect(scratch.innerHTML).to.equal('<p>bye</p>');
+
+ act(() => {
+ set(defaultValue);
+ });
+ expect(scratch.innerHTML).to.equal('<p>hi</p>');
+ });
+});
diff --git a/preact/hooks/test/browser/useDebugValue.test.js b/preact/hooks/test/browser/useDebugValue.test.js
new file mode 100644
index 0000000..d19ff6b
--- /dev/null
+++ b/preact/hooks/test/browser/useDebugValue.test.js
@@ -0,0 +1,71 @@
+import { createElement, render, options } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useDebugValue, useState } from 'preact/hooks';
+
+/** @jsx createElement */
+
+describe('useDebugValue', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ delete options.useDebugValue;
+ });
+
+ it('should do nothing when no options hook is present', () => {
+ function useFoo() {
+ useDebugValue('foo');
+ return useState(0);
+ }
+
+ function App() {
+ let [v] = useFoo();
+ return <div>{v}</div>;
+ }
+
+ expect(() => render(<App />, scratch)).to.not.throw();
+ });
+
+ it('should call options hook with value', () => {
+ let spy = (options.useDebugValue = sinon.spy());
+
+ function useFoo() {
+ useDebugValue('foo');
+ return useState(0);
+ }
+
+ function App() {
+ let [v] = useFoo();
+ return <div>{v}</div>;
+ }
+
+ render(<App />, scratch);
+
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWith('foo');
+ });
+
+ it('should apply optional formatter', () => {
+ let spy = (options.useDebugValue = sinon.spy());
+
+ function useFoo() {
+ useDebugValue('foo', x => x + 'bar');
+ return useState(0);
+ }
+
+ function App() {
+ let [v] = useFoo();
+ return <div>{v}</div>;
+ }
+
+ render(<App />, scratch);
+
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWith('foobar');
+ });
+});
diff --git a/preact/hooks/test/browser/useEffect.test.js b/preact/hooks/test/browser/useEffect.test.js
new file mode 100644
index 0000000..a16d3fc
--- /dev/null
+++ b/preact/hooks/test/browser/useEffect.test.js
@@ -0,0 +1,373 @@
+import { act } from 'preact/test-utils';
+import { createElement, render, Fragment, Component } from 'preact';
+import { useEffect, useState, useRef } from 'preact/hooks';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useEffectAssertions } from './useEffectAssertions.test';
+import { scheduleEffectAssert } from '../_util/useEffectUtil';
+
+/** @jsx createElement */
+
+describe('useEffect', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ useEffectAssertions(useEffect, scheduleEffectAssert);
+
+ it('calls the effect immediately if another render is about to start', () => {
+ const cleanupFunction = sinon.spy();
+ const callback = sinon.spy(() => cleanupFunction);
+
+ function Comp() {
+ useEffect(callback);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(<Comp />, scratch);
+
+ expect(cleanupFunction).to.be.not.called;
+ expect(callback).to.be.calledOnce;
+
+ render(<Comp />, scratch);
+
+ expect(cleanupFunction).to.be.calledOnce;
+ expect(callback).to.be.calledTwice;
+ });
+
+ it('cancels the effect when the component get unmounted before it had the chance to run it', () => {
+ const cleanupFunction = sinon.spy();
+ const callback = sinon.spy(() => cleanupFunction);
+
+ function Comp() {
+ useEffect(callback);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(null, scratch);
+
+ return scheduleEffectAssert(() => {
+ expect(cleanupFunction).to.not.be.called;
+ expect(callback).to.not.be.called;
+ });
+ });
+
+ it('should execute multiple effects in same component in the right order', () => {
+ let executionOrder = [];
+ const App = ({ i }) => {
+ executionOrder = [];
+ useEffect(() => {
+ executionOrder.push('action1');
+ return () => executionOrder.push('cleanup1');
+ }, [i]);
+ useEffect(() => {
+ executionOrder.push('action2');
+ return () => executionOrder.push('cleanup2');
+ }, [i]);
+ return <p>Test</p>;
+ };
+ act(() => render(<App i={0} />, scratch));
+ act(() => render(<App i={2} />, scratch));
+ expect(executionOrder).to.deep.equal([
+ 'cleanup1',
+ 'cleanup2',
+ 'action1',
+ 'action2'
+ ]);
+ });
+
+ it('should execute effects in parent if child throws in effect', async () => {
+ let executionOrder = [];
+
+ const Child = () => {
+ useEffect(() => {
+ executionOrder.push('child');
+ throw new Error('test');
+ }, []);
+
+ useEffect(() => {
+ executionOrder.push('child after throw');
+ return () => executionOrder.push('child after throw cleanup');
+ }, []);
+
+ return <p>Test</p>;
+ };
+
+ const Parent = () => {
+ useEffect(() => {
+ executionOrder.push('parent');
+ return () => executionOrder.push('parent cleanup');
+ }, []);
+ return <Child />;
+ };
+
+ class ErrorBoundary extends Component {
+ componentDidCatch(error) {
+ this.setState({ error });
+ }
+
+ render({ children }, { error }) {
+ return error ? <div>error</div> : children;
+ }
+ }
+
+ act(() =>
+ render(
+ <ErrorBoundary>
+ <Parent />
+ </ErrorBoundary>,
+ scratch
+ )
+ );
+
+ expect(executionOrder).to.deep.equal(['child', 'parent', 'parent cleanup']);
+ expect(scratch.innerHTML).to.equal('<div>error</div>');
+ });
+
+ it('should throw an error upwards', () => {
+ const spy = sinon.spy();
+ let errored = false;
+
+ const Page1 = () => {
+ const [state, setState] = useState('loading');
+ useEffect(() => {
+ setState('loaded');
+ }, []);
+ return <p>{state}</p>;
+ };
+
+ const Page2 = () => {
+ useEffect(() => {
+ throw new Error('err');
+ }, []);
+ return <p>invisible</p>;
+ };
+
+ class App extends Component {
+ componentDidCatch(err) {
+ spy();
+ errored = err;
+ this.forceUpdate();
+ }
+
+ render(props, state) {
+ if (errored) {
+ return <p>Error</p>;
+ }
+
+ return <Fragment>{props.page === 1 ? <Page1 /> : <Page2 />}</Fragment>;
+ }
+ }
+
+ act(() => render(<App page={1} />, scratch));
+ expect(spy).to.not.be.called;
+ expect(scratch.innerHTML).to.equal('<p>loaded</p>');
+
+ act(() => render(<App page={2} />, scratch));
+ expect(spy).to.be.calledOnce;
+ expect(scratch.innerHTML).to.equal('<p>Error</p>');
+ errored = false;
+
+ act(() => render(<App page={1} />, scratch));
+ expect(spy).to.be.calledOnce;
+ expect(scratch.innerHTML).to.equal('<p>loaded</p>');
+ });
+
+ it('should throw an error upwards from return', () => {
+ const spy = sinon.spy();
+ let errored = false;
+
+ const Page1 = () => {
+ const [state, setState] = useState('loading');
+ useEffect(() => {
+ setState('loaded');
+ }, []);
+ return <p>{state}</p>;
+ };
+
+ const Page2 = () => {
+ useEffect(() => {
+ return () => {
+ throw new Error('err');
+ };
+ }, []);
+ return <p>Load</p>;
+ };
+
+ class App extends Component {
+ componentDidCatch(err) {
+ spy();
+ errored = err;
+ this.forceUpdate();
+ }
+
+ render(props, state) {
+ if (errored) {
+ return <p>Error</p>;
+ }
+
+ return <Fragment>{props.page === 1 ? <Page1 /> : <Page2 />}</Fragment>;
+ }
+ }
+
+ act(() => render(<App page={2} />, scratch));
+ expect(scratch.innerHTML).to.equal('<p>Load</p>');
+
+ act(() => render(<App page={1} />, scratch));
+ expect(spy).to.be.calledOnce;
+ expect(scratch.innerHTML).to.equal('<p>Error</p>');
+ });
+
+ it('catches errors when error is invoked during render', () => {
+ const spy = sinon.spy();
+ let errored;
+
+ function Comp() {
+ useEffect(() => {
+ throw new Error('hi');
+ });
+ return null;
+ }
+
+ class App extends Component {
+ componentDidCatch(err) {
+ spy();
+ errored = err;
+ this.forceUpdate();
+ }
+
+ render(props, state) {
+ if (errored) {
+ return <p>Error</p>;
+ }
+
+ return <Comp />;
+ }
+ }
+
+ render(<App />, scratch);
+ act(() => {
+ render(<App />, scratch);
+ });
+ expect(spy).to.be.calledOnce;
+ expect(errored)
+ .to.be.an('Error')
+ .with.property('message', 'hi');
+ expect(scratch.innerHTML).to.equal('<p>Error</p>');
+ });
+
+ it('should allow creating a new root', () => {
+ const root = document.createElement('div');
+ const global = document.createElement('div');
+ scratch.appendChild(root);
+ scratch.appendChild(global);
+
+ const Modal = props => {
+ let [, setCanProceed] = useState(true);
+ let ChildProp = props.content;
+
+ return (
+ <div>
+ <ChildProp setCanProceed={setCanProceed} />
+ </div>
+ );
+ };
+
+ const Inner = () => {
+ useEffect(() => {
+ render(<div>global</div>, global);
+ }, []);
+
+ return <div>Inner</div>;
+ };
+
+ act(() => {
+ render(
+ <Modal
+ content={props => {
+ props.setCanProceed(false);
+ return <Inner />;
+ }}
+ />,
+ root
+ );
+ });
+
+ expect(scratch.innerHTML).to.equal(
+ '<div><div><div>Inner</div></div></div><div><div>global</div></div>'
+ );
+ });
+
+ it('should not crash when effect returns truthy non-function value', () => {
+ const callback = sinon.spy(() => 'truthy');
+ function Comp() {
+ useEffect(callback);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(<Comp />, scratch);
+
+ expect(callback).to.have.been.calledOnce;
+
+ render(<div>Replacement</div>, scratch);
+ });
+
+ it('support render roots from an effect', async () => {
+ let promise, increment;
+
+ const Counter = () => {
+ const [count, setCount] = useState(0);
+ const renderRoot = useRef();
+ useEffect(() => {
+ if (count > 0) {
+ const div = renderRoot.current;
+ return () => render(<Dummy />, div);
+ }
+ return () => 'test';
+ }, [count]);
+
+ increment = () => {
+ setCount(x => x + 1);
+ promise = new Promise(res => {
+ setTimeout(() => {
+ setCount(x => x + 1);
+ res();
+ });
+ });
+ };
+
+ return (
+ <div>
+ <div>Count: {count}</div>
+ <div ref={renderRoot} />
+ </div>
+ );
+ };
+
+ const Dummy = () => <div>dummy</div>;
+
+ render(<Counter />, scratch);
+
+ expect(scratch.innerHTML).to.equal(
+ '<div><div>Count: 0</div><div></div></div>'
+ );
+
+ act(() => {
+ increment();
+ });
+ await promise;
+ act(() => {});
+ expect(scratch.innerHTML).to.equal(
+ '<div><div>Count: 2</div><div><div>dummy</div></div></div>'
+ );
+ });
+});
diff --git a/preact/hooks/test/browser/useEffectAssertions.test.js b/preact/hooks/test/browser/useEffectAssertions.test.js
new file mode 100644
index 0000000..74ba232
--- /dev/null
+++ b/preact/hooks/test/browser/useEffectAssertions.test.js
@@ -0,0 +1,142 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+/** @jsx createElement */
+
+// Common behaviors between all effect hooks
+export function useEffectAssertions(useEffect, scheduleEffectAssert) {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('performs the effect after every render by default', () => {
+ const callback = sinon.spy();
+
+ function Comp() {
+ useEffect(callback);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+
+ return scheduleEffectAssert(() => expect(callback).to.be.calledOnce)
+ .then(() => scheduleEffectAssert(() => expect(callback).to.be.calledOnce))
+ .then(() => render(<Comp />, scratch))
+ .then(() =>
+ scheduleEffectAssert(() => expect(callback).to.be.calledTwice)
+ );
+ });
+
+ it('performs the effect only if one of the inputs changed', () => {
+ const callback = sinon.spy();
+
+ function Comp(props) {
+ useEffect(callback, [props.a, props.b]);
+ return null;
+ }
+
+ render(<Comp a={1} b={2} />, scratch);
+
+ return scheduleEffectAssert(() => expect(callback).to.be.calledOnce)
+ .then(() => render(<Comp a={1} b={2} />, scratch))
+ .then(() => scheduleEffectAssert(() => expect(callback).to.be.calledOnce))
+ .then(() => render(<Comp a={2} b={2} />, scratch))
+ .then(() =>
+ scheduleEffectAssert(() => expect(callback).to.be.calledTwice)
+ )
+ .then(() => render(<Comp a={2} b={2} />, scratch))
+ .then(() =>
+ scheduleEffectAssert(() => expect(callback).to.be.calledTwice)
+ );
+ });
+
+ it('performs the effect at mount time and never again if an empty input Array is passed', () => {
+ const callback = sinon.spy();
+
+ function Comp() {
+ useEffect(callback, []);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(<Comp />, scratch);
+
+ expect(callback).to.be.calledOnce;
+
+ return scheduleEffectAssert(() => expect(callback).to.be.calledOnce)
+ .then(() => render(<Comp />, scratch))
+ .then(() =>
+ scheduleEffectAssert(() => expect(callback).to.be.calledOnce)
+ );
+ });
+
+ it('calls the cleanup function followed by the effect after each render', () => {
+ const cleanupFunction = sinon.spy();
+ const callback = sinon.spy(() => cleanupFunction);
+
+ function Comp() {
+ useEffect(callback);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+
+ return scheduleEffectAssert(() => {
+ expect(cleanupFunction).to.be.not.called;
+ expect(callback).to.be.calledOnce;
+ })
+ .then(() => scheduleEffectAssert(() => expect(callback).to.be.calledOnce))
+ .then(() => render(<Comp />, scratch))
+ .then(() =>
+ scheduleEffectAssert(() => {
+ expect(cleanupFunction).to.be.calledOnce;
+ expect(callback).to.be.calledTwice;
+ expect(callback.lastCall.calledAfter(cleanupFunction.lastCall));
+ })
+ );
+ });
+
+ it('cleanups the effect when the component get unmounted if the effect was called before', () => {
+ const cleanupFunction = sinon.spy();
+ const callback = sinon.spy(() => cleanupFunction);
+
+ function Comp() {
+ useEffect(callback);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+
+ return scheduleEffectAssert(() => {
+ render(null, scratch);
+ rerender();
+ expect(cleanupFunction).to.be.calledOnce;
+ });
+ });
+
+ it('works with closure effect callbacks capturing props', () => {
+ const values = [];
+
+ function Comp(props) {
+ useEffect(() => values.push(props.value));
+ return null;
+ }
+
+ render(<Comp value={1} />, scratch);
+ render(<Comp value={2} />, scratch);
+
+ return scheduleEffectAssert(() => expect(values).to.deep.equal([1, 2]));
+ });
+}
diff --git a/preact/hooks/test/browser/useImperativeHandle.test.js b/preact/hooks/test/browser/useImperativeHandle.test.js
new file mode 100644
index 0000000..52cc073
--- /dev/null
+++ b/preact/hooks/test/browser/useImperativeHandle.test.js
@@ -0,0 +1,182 @@
+import { createElement, render } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useImperativeHandle, useRef, useState } from 'preact/hooks';
+import { setupRerender } from 'preact/test-utils';
+
+/** @jsx createElement */
+
+describe('useImperativeHandle', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('Mutates given ref', () => {
+ let ref;
+
+ function Comp() {
+ ref = useRef({});
+ useImperativeHandle(ref, () => ({ test: () => 'test' }), []);
+ return <p>Test</p>;
+ }
+
+ render(<Comp />, scratch);
+ expect(ref.current).to.have.property('test');
+ expect(ref.current.test()).to.equal('test');
+ });
+
+ it('calls createHandle after every render by default', () => {
+ let ref,
+ createHandleSpy = sinon.spy();
+
+ function Comp() {
+ ref = useRef({});
+ useImperativeHandle(ref, createHandleSpy);
+ return <p>Test</p>;
+ }
+
+ render(<Comp />, scratch);
+ expect(createHandleSpy).to.have.been.calledOnce;
+
+ render(<Comp />, scratch);
+ expect(createHandleSpy).to.have.been.calledTwice;
+
+ render(<Comp />, scratch);
+ expect(createHandleSpy).to.have.been.calledThrice;
+ });
+
+ it('calls createHandle only on mount if an empty array is passed', () => {
+ let ref,
+ createHandleSpy = sinon.spy();
+
+ function Comp() {
+ ref = useRef({});
+ useImperativeHandle(ref, createHandleSpy, []);
+ return <p>Test</p>;
+ }
+
+ render(<Comp />, scratch);
+ expect(createHandleSpy).to.have.been.calledOnce;
+
+ render(<Comp />, scratch);
+ expect(createHandleSpy).to.have.been.calledOnce;
+ });
+
+ it('Updates given ref when args change', () => {
+ let ref,
+ createHandleSpy = sinon.spy();
+
+ function Comp({ a }) {
+ ref = useRef({});
+ useImperativeHandle(
+ ref,
+ () => {
+ createHandleSpy();
+ return { test: () => 'test' + a };
+ },
+ [a]
+ );
+ return <p>Test</p>;
+ }
+
+ render(<Comp a={0} />, scratch);
+ expect(createHandleSpy).to.have.been.calledOnce;
+ expect(ref.current).to.have.property('test');
+ expect(ref.current.test()).to.equal('test0');
+
+ render(<Comp a={1} />, scratch);
+ expect(createHandleSpy).to.have.been.calledTwice;
+ expect(ref.current).to.have.property('test');
+ expect(ref.current.test()).to.equal('test1');
+
+ render(<Comp a={0} />, scratch);
+ expect(createHandleSpy).to.have.been.calledThrice;
+ expect(ref.current).to.have.property('test');
+ expect(ref.current.test()).to.equal('test0');
+ });
+
+ it('Updates given ref when passed-in ref changes', () => {
+ let ref1, ref2;
+
+ /** @type {(arg: any) => void} */
+ let setRef;
+
+ /** @type {() => void} */
+ let updateState;
+
+ const createHandleSpy = sinon.spy(() => ({
+ test: () => 'test'
+ }));
+
+ function Comp() {
+ ref1 = useRef({});
+ ref2 = useRef({});
+
+ const [ref, setRefInternal] = useState(ref1);
+ setRef = setRefInternal;
+
+ let [value, setState] = useState(0);
+ updateState = () => setState((value + 1) % 2);
+
+ useImperativeHandle(ref, createHandleSpy, []);
+ return <p>Test</p>;
+ }
+
+ render(<Comp a={0} />, scratch);
+ expect(createHandleSpy).to.have.been.calledOnce;
+
+ updateState();
+ rerender();
+ expect(createHandleSpy).to.have.been.calledOnce;
+
+ setRef(ref2);
+ rerender();
+ expect(createHandleSpy).to.have.been.calledTwice;
+
+ updateState();
+ rerender();
+ expect(createHandleSpy).to.have.been.calledTwice;
+
+ setRef(ref1);
+ rerender();
+ expect(createHandleSpy).to.have.been.calledThrice;
+ });
+
+ it('should not update ref when args have not changed', () => {
+ let ref,
+ createHandleSpy = sinon.spy(() => ({ test: () => 'test' }));
+
+ function Comp() {
+ ref = useRef({});
+ useImperativeHandle(ref, createHandleSpy, [1]);
+ return <p>Test</p>;
+ }
+
+ render(<Comp />, scratch);
+ expect(createHandleSpy).to.have.been.calledOnce;
+ expect(ref.current.test()).to.equal('test');
+
+ render(<Comp />, scratch);
+ expect(createHandleSpy).to.have.been.calledOnce;
+ expect(ref.current.test()).to.equal('test');
+ });
+
+ it('should not throw with nullish ref', () => {
+ function Comp() {
+ useImperativeHandle(null, () => ({ test: () => 'test' }), [1]);
+ return <p>Test</p>;
+ }
+
+ expect(() => render(<Comp />, scratch)).to.not.throw();
+ });
+});
diff --git a/preact/hooks/test/browser/useLayoutEffect.test.js b/preact/hooks/test/browser/useLayoutEffect.test.js
new file mode 100644
index 0000000..72ab949
--- /dev/null
+++ b/preact/hooks/test/browser/useLayoutEffect.test.js
@@ -0,0 +1,326 @@
+import { act } from 'preact/test-utils';
+import { createElement, render, Fragment, Component } from 'preact';
+import {
+ setupScratch,
+ teardown,
+ serializeHtml
+} from '../../../test/_util/helpers';
+import { useEffectAssertions } from './useEffectAssertions.test';
+import { useLayoutEffect, useRef, useState } from 'preact/hooks';
+
+/** @jsx createElement */
+
+describe('useLayoutEffect', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ // Layout effects fire synchronously
+ const scheduleEffectAssert = assertFn =>
+ new Promise(resolve => {
+ assertFn();
+ resolve();
+ });
+
+ useEffectAssertions(useLayoutEffect, scheduleEffectAssert);
+
+ it('calls the effect immediately after render', () => {
+ const cleanupFunction = sinon.spy();
+ const callback = sinon.spy(() => cleanupFunction);
+
+ function Comp() {
+ useLayoutEffect(callback);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(<Comp />, scratch);
+
+ expect(cleanupFunction).to.be.calledOnce;
+ expect(callback).to.be.calledTwice;
+
+ render(<Comp />, scratch);
+
+ expect(cleanupFunction).to.be.calledTwice;
+ expect(callback).to.be.calledThrice;
+ });
+
+ it('works on a nested component', () => {
+ const callback = sinon.spy();
+
+ function Parent() {
+ return (
+ <div>
+ <Child />
+ </div>
+ );
+ }
+
+ function Child() {
+ useLayoutEffect(callback);
+ return null;
+ }
+
+ render(<Parent />, scratch);
+
+ expect(callback).to.be.calledOnce;
+ });
+
+ it('should execute multiple layout effects in same component in the right order', () => {
+ let executionOrder = [];
+ const App = ({ i }) => {
+ executionOrder = [];
+ useLayoutEffect(() => {
+ executionOrder.push('action1');
+ return () => executionOrder.push('cleanup1');
+ }, [i]);
+ useLayoutEffect(() => {
+ executionOrder.push('action2');
+ return () => executionOrder.push('cleanup2');
+ }, [i]);
+ return <p>Test</p>;
+ };
+ render(<App i={0} />, scratch);
+ render(<App i={2} />, scratch);
+ expect(executionOrder).to.deep.equal([
+ 'cleanup1',
+ 'cleanup2',
+ 'action1',
+ 'action2'
+ ]);
+ });
+
+ it('should correctly display DOM', () => {
+ function AutoResizeTextareaLayoutEffect(props) {
+ const ref = useRef(null);
+ useLayoutEffect(() => {
+ // IE & Edge put textarea's value as child of textarea when reading innerHTML so use
+ // cross browser serialize helper
+ const actualHtml = serializeHtml(scratch);
+ const expectedHTML = `<div class="${props.value}"><p>${props.value}</p><textarea></textarea></div>`;
+ expect(actualHtml).to.equal(expectedHTML);
+ expect(document.body.contains(ref.current)).to.equal(true);
+ });
+ return (
+ <Fragment>
+ <p>{props.value}</p>
+ <textarea ref={ref} value={props.value} onChange={props.onChange} />
+ </Fragment>
+ );
+ }
+
+ function App(props) {
+ return (
+ <div class={props.value}>
+ <AutoResizeTextareaLayoutEffect {...props} />
+ </div>
+ );
+ }
+
+ render(<App value="hi" />, scratch);
+ render(<App value="hii" />, scratch);
+ });
+
+ it('should invoke layout effects after subtree is fully connected', () => {
+ let ref;
+ let layoutEffect = sinon.spy(() => {
+ const isConnected = document.body.contains(ref.current);
+ expect(isConnected).to.equal(true, 'isConnected');
+ });
+
+ function Inner() {
+ ref = useRef(null);
+ useLayoutEffect(layoutEffect);
+ return (
+ <Fragment>
+ <textarea ref={ref} />
+ <span>hello</span>;
+ </Fragment>
+ );
+ }
+
+ function Outer() {
+ return (
+ <div>
+ <Inner />
+ </div>
+ );
+ }
+
+ render(<Outer />, scratch);
+ expect(layoutEffect).to.have.been.calledOnce;
+ });
+
+ // TODO: Make this test pass to resolve issue #1886
+ it.skip('should call effects correctly when unmounting', () => {
+ let onClick, calledFoo, calledBar, calledFooCleanup, calledBarCleanup;
+
+ const Foo = () => {
+ useLayoutEffect(() => {
+ if (!calledFoo) calledFoo = scratch.innerHTML;
+ return () => {
+ if (!calledFooCleanup) calledFooCleanup = scratch.innerHTML;
+ };
+ }, []);
+
+ return (
+ <div>
+ <p>Foo</p>
+ </div>
+ );
+ };
+
+ const Bar = () => {
+ useLayoutEffect(() => {
+ if (!calledBar) calledBar = scratch.innerHTML;
+ return () => {
+ if (!calledBarCleanup) calledBarCleanup = scratch.innerHTML;
+ };
+ }, []);
+
+ return (
+ <div>
+ <p>Bar</p>
+ </div>
+ );
+ };
+
+ function App() {
+ const [current, setCurrent] = useState('/foo');
+
+ onClick = () => setCurrent(current === '/foo' ? '/bar' : '/foo');
+
+ return (
+ <Fragment>
+ <button onClick={onClick}>next</button>
+
+ {current === '/foo' && <Foo />}
+ {current === '/bar' && <Bar />}
+ </Fragment>
+ );
+ }
+
+ render(<App />, scratch);
+ expect(calledFoo).to.equal(
+ '<button>next</button><div><p>Foo</p></div>',
+ 'calledFoo'
+ );
+
+ act(() => onClick());
+ expect(calledFooCleanup).to.equal(
+ '<button>next</button><div><p>Bar</p></div>',
+ 'calledFooCleanup'
+ );
+ expect(calledBar).to.equal(
+ '<button>next</button><div><p>Bar</p></div>',
+ 'calledBar'
+ );
+
+ act(() => onClick());
+ expect(calledBarCleanup).to.equal(
+ '<button>next</button><div><p>Foo</p></div>',
+ 'calledBarCleanup'
+ );
+ });
+
+ it('should throw an error upwards', () => {
+ const spy = sinon.spy();
+ let errored = false;
+
+ const Page1 = () => {
+ const [state, setState] = useState('loading');
+ useLayoutEffect(() => {
+ setState('loaded');
+ }, []);
+ return <p>{state}</p>;
+ };
+
+ const Page2 = () => {
+ useLayoutEffect(() => {
+ throw new Error('err');
+ }, []);
+ return <p>invisible</p>;
+ };
+
+ class App extends Component {
+ componentDidCatch(err) {
+ spy();
+ errored = err;
+ this.forceUpdate();
+ }
+
+ render(props, state) {
+ if (errored) {
+ return <p>Error</p>;
+ }
+
+ return <Fragment>{props.page === 1 ? <Page1 /> : <Page2 />}</Fragment>;
+ }
+ }
+
+ act(() => render(<App page={1} />, scratch));
+ expect(spy).to.not.be.called;
+ expect(scratch.innerHTML).to.equal('<p>loaded</p>');
+
+ act(() => render(<App page={2} />, scratch));
+ expect(spy).to.be.calledOnce;
+ expect(scratch.innerHTML).to.equal('<p>Error</p>');
+ errored = false;
+
+ act(() => render(<App page={1} />, scratch));
+ expect(spy).to.be.calledOnce;
+ expect(scratch.innerHTML).to.equal('<p>loaded</p>');
+ });
+
+ it('should throw an error upwards from return', () => {
+ const spy = sinon.spy();
+ let errored = false;
+
+ const Page1 = () => {
+ const [state, setState] = useState('loading');
+ useLayoutEffect(() => {
+ setState('loaded');
+ }, []);
+ return <p>{state}</p>;
+ };
+
+ const Page2 = () => {
+ useLayoutEffect(() => {
+ return () => {
+ throw new Error('err');
+ };
+ }, []);
+ return <p>Load</p>;
+ };
+
+ class App extends Component {
+ componentDidCatch(err) {
+ spy();
+ errored = err;
+ this.forceUpdate();
+ }
+
+ render(props, state) {
+ if (errored) {
+ return <p>Error</p>;
+ }
+
+ return <Fragment>{props.page === 1 ? <Page1 /> : <Page2 />}</Fragment>;
+ }
+ }
+
+ act(() => render(<App page={2} />, scratch));
+ expect(scratch.innerHTML).to.equal('<p>Load</p>');
+
+ act(() => render(<App page={1} />, scratch));
+ expect(spy).to.be.calledOnce;
+ expect(scratch.innerHTML).to.equal('<p>Error</p>');
+ });
+});
diff --git a/preact/hooks/test/browser/useMemo.test.js b/preact/hooks/test/browser/useMemo.test.js
new file mode 100644
index 0000000..68fb72e
--- /dev/null
+++ b/preact/hooks/test/browser/useMemo.test.js
@@ -0,0 +1,125 @@
+import { createElement, render } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useMemo } from 'preact/hooks';
+
+/** @jsx createElement */
+
+describe('useMemo', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('only recomputes the result when inputs change', () => {
+ let memoFunction = sinon.spy((a, b) => a + b);
+ const results = [];
+
+ function Comp({ a, b }) {
+ const result = useMemo(() => memoFunction(a, b), [a, b]);
+ results.push(result);
+ return null;
+ }
+
+ render(<Comp a={1} b={1} />, scratch);
+ render(<Comp a={1} b={1} />, scratch);
+
+ expect(results).to.deep.equal([2, 2]);
+ expect(memoFunction).to.have.been.calledOnce;
+
+ render(<Comp a={1} b={2} />, scratch);
+ render(<Comp a={1} b={2} />, scratch);
+
+ expect(results).to.deep.equal([2, 2, 3, 3]);
+ expect(memoFunction).to.have.been.calledTwice;
+ });
+
+ it('should rerun when deps length changes', () => {
+ let memoFunction = sinon.spy(() => 1 + 2);
+
+ function Comp({ all }) {
+ const deps = [1, all && 2].filter(Boolean);
+ const result = useMemo(() => memoFunction(), deps);
+ return result;
+ }
+
+ render(<Comp all />, scratch);
+ expect(memoFunction).to.have.been.calledOnce;
+ render(<Comp all={false} />, scratch);
+ expect(memoFunction).to.have.been.calledTwice;
+ });
+
+ it('should rerun when first run threw an error', () => {
+ let hasThrown = false;
+ let memoFunction = sinon.spy(() => {
+ if (!hasThrown) {
+ hasThrown = true;
+ throw new Error('test');
+ } else {
+ return 3;
+ }
+ });
+
+ function Comp() {
+ const result = useMemo(() => memoFunction(), []);
+ return result;
+ }
+
+ expect(() => render(<Comp />, scratch)).to.throw('test');
+ expect(memoFunction).to.have.been.calledOnce;
+ expect(() => render(<Comp />, scratch)).not.to.throw();
+ expect(memoFunction).to.have.been.calledTwice;
+ });
+
+ it('short circuits diffing for memoized components', () => {
+ let spy = sinon.spy();
+ let spy2 = sinon.spy();
+ const X = ({ count }) => {
+ spy();
+ return <span>{count}</span>;
+ };
+
+ const Y = ({ count }) => {
+ spy2();
+ return <p>{count}</p>;
+ };
+
+ const App = ({ x }) => {
+ const y = useMemo(() => <Y count={x} />, [x]);
+ return (
+ <div>
+ <X count={x} />
+ {y}
+ </div>
+ );
+ };
+
+ render(<App x={0} />, scratch);
+ expect(spy).to.be.calledOnce;
+ expect(spy2).to.be.calledOnce;
+ expect(scratch.innerHTML).to.equal('<div><span>0</span><p>0</p></div>');
+
+ render(<App x={0} />, scratch);
+ expect(spy).to.be.calledTwice;
+ expect(spy2).to.be.calledOnce;
+ expect(scratch.innerHTML).to.equal('<div><span>0</span><p>0</p></div>');
+
+ render(<App x={1} />, scratch);
+ expect(spy).to.be.calledThrice;
+ expect(spy2).to.be.calledTwice;
+ expect(scratch.innerHTML).to.equal('<div><span>1</span><p>1</p></div>');
+
+ render(<App x={1} />, scratch);
+ expect(spy2).to.be.calledTwice;
+ expect(scratch.innerHTML).to.equal('<div><span>1</span><p>1</p></div>');
+
+ render(<App x={2} />, scratch);
+ expect(spy2).to.be.calledThrice;
+ expect(scratch.innerHTML).to.equal('<div><span>2</span><p>2</p></div>');
+ });
+});
diff --git a/preact/hooks/test/browser/useReducer.test.js b/preact/hooks/test/browser/useReducer.test.js
new file mode 100644
index 0000000..4b9d393
--- /dev/null
+++ b/preact/hooks/test/browser/useReducer.test.js
@@ -0,0 +1,214 @@
+import { setupRerender, act } from 'preact/test-utils';
+import { createElement, render, createContext } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useReducer, useEffect, useContext } from 'preact/hooks';
+
+/** @jsx createElement */
+
+describe('useReducer', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('rerenders when dispatching an action', () => {
+ const states = [];
+ let _dispatch;
+
+ const initState = { count: 0 };
+
+ function reducer(state, action) {
+ switch (action.type) {
+ case 'increment':
+ return { count: state.count + action.by };
+ }
+ }
+
+ function Comp() {
+ const [state, dispatch] = useReducer(reducer, initState);
+ _dispatch = dispatch;
+ states.push(state);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+
+ _dispatch({ type: 'increment', by: 10 });
+ rerender();
+
+ expect(states).to.deep.equal([{ count: 0 }, { count: 10 }]);
+ });
+
+ it('can be dispatched by another component', () => {
+ const initState = { count: 0 };
+
+ function reducer(state, action) {
+ switch (action.type) {
+ case 'increment':
+ return { count: state.count + action.by };
+ }
+ }
+
+ function ReducerComponent() {
+ const [state, dispatch] = useReducer(reducer, initState);
+ return (
+ <div>
+ <p>Count: {state.count}</p>
+ <DispatchComponent dispatch={dispatch} />
+ </div>
+ );
+ }
+
+ function DispatchComponent(props) {
+ return (
+ <button onClick={() => props.dispatch({ type: 'increment', by: 10 })}>
+ Increment
+ </button>
+ );
+ }
+
+ render(<ReducerComponent />, scratch);
+ expect(scratch.textContent).to.include('Count: 0');
+
+ const button = scratch.querySelector('button');
+ button.click();
+
+ rerender();
+ expect(scratch.textContent).to.include('Count: 10');
+ });
+
+ it('can lazily initialize its state with an action', () => {
+ const states = [];
+ let _dispatch;
+
+ function init(initialCount) {
+ return { count: initialCount };
+ }
+
+ function reducer(state, action) {
+ switch (action.type) {
+ case 'increment':
+ return { count: state.count + action.by };
+ }
+ }
+
+ function Comp({ initCount }) {
+ const [state, dispatch] = useReducer(reducer, initCount, init);
+ _dispatch = dispatch;
+ states.push(state);
+ return null;
+ }
+
+ render(<Comp initCount={10} />, scratch);
+
+ _dispatch({ type: 'increment', by: 10 });
+ rerender();
+
+ expect(states).to.deep.equal([{ count: 10 }, { count: 20 }]);
+ });
+
+ it('provides a stable reference for dispatch', () => {
+ const dispatches = [];
+ let _dispatch;
+
+ const initState = { count: 0 };
+
+ function reducer(state, action) {
+ switch (action.type) {
+ case 'increment':
+ return { count: state.count + action.by };
+ }
+ }
+
+ function Comp() {
+ const [, dispatch] = useReducer(reducer, initState);
+ _dispatch = dispatch;
+ dispatches.push(dispatch);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+
+ _dispatch({ type: 'increment', by: 10 });
+ rerender();
+
+ expect(dispatches[0]).to.equal(dispatches[1]);
+ });
+
+ it('uses latest reducer', () => {
+ const states = [];
+ let _dispatch;
+
+ const initState = { count: 0 };
+
+ function Comp({ increment }) {
+ const [state, dispatch] = useReducer(function(state, action) {
+ switch (action.type) {
+ case 'increment':
+ return { count: state.count + increment };
+ }
+ }, initState);
+ _dispatch = dispatch;
+ states.push(state);
+ return null;
+ }
+
+ render(<Comp increment={10} />, scratch);
+
+ render(<Comp increment={20} />, scratch);
+
+ _dispatch({ type: 'increment' });
+ rerender();
+
+ expect(states).to.deep.equal([{ count: 0 }, { count: 0 }, { count: 20 }]);
+ });
+
+ // Relates to #2549
+ it('should not mutate the hookState', () => {
+ const reducer = (state, action) => ({
+ ...state,
+ innerMessage: action.payload
+ });
+
+ const ContextMessage = ({ context }) => {
+ const [{ innerMessage }, dispatch] = useContext(context);
+ useEffect(() => {
+ dispatch({ payload: 'message' });
+ }, []);
+
+ return innerMessage && <p>{innerMessage}</p>;
+ };
+
+ const Wrapper = ({ children }) => <div>{children}</div>;
+
+ const badContextDefault = {};
+ const BadContext = createContext({});
+
+ const Abstraction = ({ reducer, defaultState, children }) => (
+ <BadContext.Provider value={useReducer(reducer, defaultState)}>
+ <Wrapper>{children}</Wrapper>
+ </BadContext.Provider>
+ );
+
+ const App = () => (
+ <Abstraction reducer={reducer} defaultState={badContextDefault}>
+ <ContextMessage context={BadContext} />
+ </Abstraction>
+ );
+
+ act(() => {
+ render(<App />, scratch);
+ });
+ expect(scratch.innerHTML).to.equal('<div><p>message</p></div>');
+ });
+});
diff --git a/preact/hooks/test/browser/useRef.test.js b/preact/hooks/test/browser/useRef.test.js
new file mode 100644
index 0000000..7d7a657
--- /dev/null
+++ b/preact/hooks/test/browser/useRef.test.js
@@ -0,0 +1,50 @@
+import { createElement, render } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useRef } from 'preact/hooks';
+
+/** @jsx createElement */
+
+describe('useRef', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('provides a stable reference', () => {
+ const values = [];
+
+ function Comp() {
+ const ref = useRef(1);
+ values.push(ref.current);
+ ref.current = 2;
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(<Comp />, scratch);
+
+ expect(values).to.deep.equal([1, 2]);
+ });
+
+ it('defaults to undefined', () => {
+ const values = [];
+
+ function Comp() {
+ const ref = useRef();
+ values.push(ref.current);
+ ref.current = 2;
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(<Comp />, scratch);
+
+ expect(values).to.deep.equal([undefined, 2]);
+ });
+});
diff --git a/preact/hooks/test/browser/useState.test.js b/preact/hooks/test/browser/useState.test.js
new file mode 100644
index 0000000..c65a21b
--- /dev/null
+++ b/preact/hooks/test/browser/useState.test.js
@@ -0,0 +1,214 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render } from 'preact';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+import { useState } from 'preact/hooks';
+
+/** @jsx createElement */
+
+describe('useState', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('serves the same state across render calls', () => {
+ const stateHistory = [];
+
+ function Comp() {
+ const [state] = useState({ a: 1 });
+ stateHistory.push(state);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(<Comp />, scratch);
+
+ expect(stateHistory).to.deep.equal([{ a: 1 }, { a: 1 }]);
+ expect(stateHistory[0]).to.equal(stateHistory[1]);
+ });
+
+ it('can initialize the state via a function', () => {
+ const initState = sinon.spy(() => 1);
+
+ function Comp() {
+ useState(initState);
+ return null;
+ }
+
+ render(<Comp />, scratch);
+ render(<Comp />, scratch);
+
+ expect(initState).to.be.calledOnce;
+ });
+
+ it('does not rerender on equal state', () => {
+ let lastState;
+ let doSetState;
+
+ const Comp = sinon.spy(() => {
+ const [state, setState] = useState(0);
+ lastState = state;
+ doSetState = setState;
+ return null;
+ });
+
+ render(<Comp />, scratch);
+ expect(lastState).to.equal(0);
+ expect(Comp).to.be.calledOnce;
+
+ doSetState(0);
+ rerender();
+ expect(lastState).to.equal(0);
+ expect(Comp).to.be.calledOnce;
+
+ doSetState(() => 0);
+ rerender();
+ expect(lastState).to.equal(0);
+ expect(Comp).to.be.calledOnce;
+ });
+
+ it('rerenders when setting the state', () => {
+ let lastState;
+ let doSetState;
+
+ const Comp = sinon.spy(() => {
+ const [state, setState] = useState(0);
+ lastState = state;
+ doSetState = setState;
+ return null;
+ });
+
+ render(<Comp />, scratch);
+ expect(lastState).to.equal(0);
+ expect(Comp).to.be.calledOnce;
+
+ doSetState(1);
+ rerender();
+ expect(lastState).to.equal(1);
+ expect(Comp).to.be.calledTwice;
+
+ // Updater function style
+ doSetState(current => current * 10);
+ rerender();
+ expect(lastState).to.equal(10);
+ expect(Comp).to.be.calledThrice;
+ });
+
+ it('can be set by another component', () => {
+ function StateContainer() {
+ const [count, setCount] = useState(0);
+ return (
+ <div>
+ <p>Count: {count}</p>
+ <Increment increment={() => setCount(c => c + 10)} />
+ </div>
+ );
+ }
+
+ function Increment(props) {
+ return <button onClick={props.increment}>Increment</button>;
+ }
+
+ render(<StateContainer />, scratch);
+ expect(scratch.textContent).to.include('Count: 0');
+
+ const button = scratch.querySelector('button');
+ button.click();
+
+ rerender();
+ expect(scratch.textContent).to.include('Count: 10');
+ });
+
+ it('should correctly initialize', () => {
+ let scopedThing = 'hi';
+ let arg;
+
+ function useSomething() {
+ const args = useState(setup);
+ function setup(thing = scopedThing) {
+ arg = thing;
+ return thing;
+ }
+ return args;
+ }
+
+ const App = () => {
+ const [state] = useSomething();
+ return <p>{state}</p>;
+ };
+
+ render(<App />, scratch);
+
+ expect(arg).to.equal('hi');
+ expect(scratch.innerHTML).to.equal('<p>hi</p>');
+ });
+
+ it('should correctly re-initialize when first run threw an error', () => {
+ let hasThrown = false;
+ let setup = sinon.spy(() => {
+ if (!hasThrown) {
+ hasThrown = true;
+ throw new Error('test');
+ } else {
+ return 'hi';
+ }
+ });
+
+ const App = () => {
+ const state = useState(setup)[0];
+ return <p>{state}</p>;
+ };
+
+ expect(() => render(<App />, scratch)).to.throw('test');
+ expect(setup).to.have.been.calledOnce;
+ expect(() => render(<App />, scratch)).not.to.throw();
+ expect(setup).to.have.been.calledTwice;
+ expect(scratch.innerHTML).to.equal('<p>hi</p>');
+ });
+
+ it('should handle queued useState', () => {
+ function Message({ message, onClose }) {
+ const [isVisible, setVisible] = useState(Boolean(message));
+ const [prevMessage, setPrevMessage] = useState(message);
+
+ if (message !== prevMessage) {
+ setPrevMessage(message);
+ setVisible(Boolean(message));
+ }
+
+ if (!isVisible) {
+ return null;
+ }
+ return <p onClick={onClose}>{message}</p>;
+ }
+
+ function App() {
+ const [message, setMessage] = useState('Click Here!!');
+ return (
+ <Message
+ onClose={() => {
+ setMessage('');
+ }}
+ message={message}
+ />
+ );
+ }
+
+ render(<App />, scratch);
+ expect(scratch.textContent).to.equal('Click Here!!');
+ const text = scratch.querySelector('p');
+ text.click();
+ rerender();
+ expect(scratch.innerHTML).to.equal('');
+ });
+});
diff --git a/preact/jsconfig.json b/preact/jsconfig.json
new file mode 100644
index 0000000..cd6a2a5
--- /dev/null
+++ b/preact/jsconfig.json
@@ -0,0 +1,16 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "checkJs": true,
+ "jsx": "react",
+ "lib": ["dom", "es5"],
+ "moduleResolution": "node",
+ "paths": {
+ "preact": ["."],
+ "preact/*": ["./*"]
+ },
+ "reactNamespace": "createElement",
+ "target": "es5"
+ },
+ "exclude": ["node_modules", "dist", "demo"]
+}
diff --git a/preact/jsx-runtime/LICENSE b/preact/jsx-runtime/LICENSE
new file mode 100644
index 0000000..da5389a
--- /dev/null
+++ b/preact/jsx-runtime/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Jason Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/preact/jsx-runtime/mangle.json b/preact/jsx-runtime/mangle.json
new file mode 100644
index 0000000..506a6a4
--- /dev/null
+++ b/preact/jsx-runtime/mangle.json
@@ -0,0 +1,21 @@
+{
+ "help": {
+ "what is this file?": "It controls protected/private property mangling so that minified builds have consistent property names.",
+ "why are there duplicate minified properties?": "Most properties are only used on one type of objects, so they can have the same name since they will never collide. Doing this reduces size."
+ },
+ "minify": {
+ "mangle": {
+ "properties": {
+ "regex": "^_[^_]",
+ "reserved": [
+ "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED",
+ "__REACT_DEVTOOLS_GLOBAL_HOOK__",
+ "__PREACT_DEVTOOLS__",
+ "_renderers",
+ "__source",
+ "__self"
+ ]
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/preact/jsx-runtime/package.json b/preact/jsx-runtime/package.json
new file mode 100644
index 0000000..3cb548c
--- /dev/null
+++ b/preact/jsx-runtime/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "jsx-runtime",
+ "amdName": "jsxRuntime",
+ "version": "1.0.0",
+ "private": true,
+ "description": "Preact JSX runtime",
+ "main": "dist/jsxRuntime.js",
+ "module": "dist/jsxRuntime.module.js",
+ "umd:main": "dist/jsxRuntime.umd.js",
+ "source": "src/index.js",
+ "types": "src/index.d.ts",
+ "license": "MIT",
+ "peerDependencies": {
+ "preact": "^10.0.0"
+ },
+ "mangle": {
+ "regex": "^_"
+ }
+}
diff --git a/preact/jsx-runtime/src/index.d.ts b/preact/jsx-runtime/src/index.d.ts
new file mode 100644
index 0000000..64470a8
--- /dev/null
+++ b/preact/jsx-runtime/src/index.d.ts
@@ -0,0 +1,50 @@
+export { Fragment } from '../../';
+import {
+ ComponentType,
+ ComponentChild,
+ ComponentChildren,
+ VNode,
+ Attributes
+} from '../../';
+import { JSXInternal } from '../../src/jsx';
+
+export function jsx(
+ type: string,
+ props: JSXInternal.HTMLAttributes &
+ JSXInternal.SVGAttributes &
+ Record<string, any> & { children?: ComponentChild },
+ key?: string
+): VNode<any>;
+export function jsx<P>(
+ type: ComponentType<P>,
+ props: Attributes & P & { children?: ComponentChild },
+ key?: string
+): VNode<any>;
+
+export function jsxs(
+ type: string,
+ props: JSXInternal.HTMLAttributes &
+ JSXInternal.SVGAttributes &
+ Record<string, any> & { children?: ComponentChild[] },
+ key?: string
+): VNode<any>;
+export function jsxs<P>(
+ type: ComponentType<P>,
+ props: Attributes & P & { children?: ComponentChild[] },
+ key?: string
+): VNode<any>;
+
+export function jsxDEV(
+ type: string,
+ props: JSXInternal.HTMLAttributes &
+ JSXInternal.SVGAttributes &
+ Record<string, any> & { children?: ComponentChildren },
+ key?: string
+): VNode<any>;
+export function jsxDEV<P>(
+ type: ComponentType<P>,
+ props: Attributes & P & { children?: ComponentChildren },
+ key?: string
+): VNode<any>;
+
+export { JSXInternal as JSX };
diff --git a/preact/jsx-runtime/src/index.js b/preact/jsx-runtime/src/index.js
new file mode 100644
index 0000000..82c7b33
--- /dev/null
+++ b/preact/jsx-runtime/src/index.js
@@ -0,0 +1,77 @@
+import { options, Fragment } from 'preact';
+
+/** @typedef {import('preact').VNode} VNode */
+
+let vnodeId = 0;
+
+/**
+ * @fileoverview
+ * This file exports various methods that implement Babel's "automatic" JSX runtime API:
+ * - jsx(type, props, key)
+ * - jsxs(type, props, key)
+ * - jsxDEV(type, props, key, __source, __self)
+ *
+ * The implementation of createVNode here is optimized for performance.
+ * Benchmarks: https://esbench.com/bench/5f6b54a0b4632100a7dcd2b3
+ */
+
+/**
+ * JSX.Element factory used by Babel's {runtime:"automatic"} JSX transform
+ * @param {VNode['type']} type
+ * @param {VNode['props']} props
+ * @param {VNode['key']} [key]
+ * @param {string} [__source]
+ * @param {string} [__self]
+ */
+function createVNode(type, props, key, __source, __self) {
+ // We'll want to preserve `ref` in props to get rid of the need for
+ // forwardRef components in the future, but that should happen via
+ // a separate PR.
+ let normalizedProps = {},
+ ref,
+ i;
+ for (i in props) {
+ if (i == 'ref') {
+ ref = props[i];
+ } else {
+ normalizedProps[i] = props[i];
+ }
+ }
+
+ const vnode = {
+ type,
+ props: normalizedProps,
+ key,
+ ref,
+ _children: null,
+ _parent: null,
+ _depth: 0,
+ _dom: null,
+ _nextDom: undefined,
+ _component: null,
+ _hydrating: null,
+ constructor: undefined,
+ _original: --vnodeId,
+ __source,
+ __self
+ };
+
+ // If a Component VNode, check for and apply defaultProps.
+ // Note: `type` is often a String, and can be `undefined` in development.
+ if (typeof type === 'function' && (ref = type.defaultProps)) {
+ for (i in ref)
+ if (typeof normalizedProps[i] === 'undefined') {
+ normalizedProps[i] = ref[i];
+ }
+ }
+
+ if (options.vnode) options.vnode(vnode);
+ return vnode;
+}
+
+export {
+ createVNode as jsx,
+ createVNode as jsxs,
+ createVNode as jsxDEV,
+ Fragment
+};
diff --git a/preact/jsx-runtime/test/browser/jsx-runtime.test.js b/preact/jsx-runtime/test/browser/jsx-runtime.test.js
new file mode 100644
index 0000000..e293881
--- /dev/null
+++ b/preact/jsx-runtime/test/browser/jsx-runtime.test.js
@@ -0,0 +1,94 @@
+import { Component, createElement, createRef } from 'preact';
+import { jsx, jsxs, jsxDEV, Fragment } from 'preact/jsx-runtime';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+describe('Babel jsx/jsxDEV', () => {
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should have needed exports', () => {
+ expect(typeof jsx).to.equal('function');
+ expect(typeof jsxs).to.equal('function');
+ expect(typeof jsxDEV).to.equal('function');
+ expect(typeof Fragment).to.equal('function');
+ });
+
+ it('should keep ref in props', () => {
+ const ref = () => null;
+ const vnode = jsx('div', { ref });
+ expect(vnode.ref).to.equal(ref);
+ });
+
+ it('should add keys', () => {
+ const vnode = jsx('div', null, 'foo');
+ expect(vnode.key).to.equal('foo');
+ });
+
+ it('should apply defaultProps', () => {
+ class Foo extends Component {
+ render() {
+ return <div />;
+ }
+ }
+
+ Foo.defaultProps = {
+ foo: 'bar'
+ };
+
+ const vnode = jsx(Foo, {}, null);
+ expect(vnode.props).to.deep.equal({
+ foo: 'bar'
+ });
+ });
+
+ it('should keep props over defaultProps', () => {
+ class Foo extends Component {
+ render() {
+ return <div />;
+ }
+ }
+
+ Foo.defaultProps = {
+ foo: 'bar'
+ };
+
+ const vnode = jsx(Foo, { foo: 'baz' }, null);
+ expect(vnode.props).to.deep.equal({
+ foo: 'baz'
+ });
+ });
+
+ it('should set __source and __self', () => {
+ const vnode = jsx('div', { class: 'foo' }, 'key', 'source', 'self');
+ expect(vnode.__source).to.equal('source');
+ expect(vnode.__self).to.equal('self');
+ });
+
+ it('should return a vnode like createElement', () => {
+ const elementVNode = createElement('div', {
+ class: 'foo',
+ key: 'key'
+ });
+ const jsxVNode = jsx('div', { class: 'foo' }, 'key');
+ delete jsxVNode.__self;
+ delete jsxVNode.__source;
+ delete jsxVNode._original;
+ delete elementVNode._original;
+ expect(jsxVNode).to.deep.equal(elementVNode);
+ });
+
+ // #2839
+ it('should remove ref from props', () => {
+ const ref = createRef();
+ const vnode = jsx('div', { ref }, null);
+ expect(vnode.props).to.deep.equal({});
+ expect(vnode.ref).to.equal(ref);
+ });
+});
diff --git a/preact/karma.conf.js b/preact/karma.conf.js
new file mode 100644
index 0000000..187192a
--- /dev/null
+++ b/preact/karma.conf.js
@@ -0,0 +1,338 @@
+/*eslint no-var:0, object-shorthand:0 */
+
+var coverage = String(process.env.COVERAGE) === 'true',
+ minify = String(process.env.MINIFY) === 'true',
+ ci = String(process.env.CI).match(/^(1|true)$/gi),
+ sauceLabs = ci && String(process.env.RUN_SAUCE_LABS) === 'true',
+ performance = !coverage && String(process.env.PERFORMANCE) !== 'false',
+ path = require('path'),
+ errorstacks = require('errorstacks'),
+ kl = require('kolorist');
+
+const babel = require('@babel/core');
+const fs = require('fs').promises;
+
+// This strips Karma's annoying `LOG: '...'` string from logs
+const orgStdoutWrite = process.stdout.write;
+process.stdout.write = msg => {
+ let out = '';
+ const match = msg.match(
+ /(^|.*\s)(LOG|WARN|ERROR):\s'__LOG_CUSTOM:([\S\s]*)'/
+ );
+ if (match && match.length >= 4) {
+ // Sometimes the UA of the browser will be included in the message
+ if (match[1].length) {
+ out += kl.yellow(kl.italic(match[1]));
+ out += match[3]
+ .split('\n')
+ .map(line => ' ' + line)
+ .join('\n');
+ } else {
+ out += match[3];
+ }
+ out += '\n';
+ } else if (/(^|.*\s)(LOG|WARN|ERROR):\s([\S\s]*)/.test(msg)) {
+ // Nothing
+ } else {
+ out = msg;
+ }
+
+ return orgStdoutWrite.call(process.stdout, out);
+};
+
+var sauceLabsLaunchers = {
+ sl_chrome: {
+ base: 'SauceLabs',
+ browserName: 'chrome',
+ platform: 'Windows 10'
+ },
+ sl_firefox: {
+ base: 'SauceLabs',
+ browserName: 'firefox',
+ platform: 'Windows 10'
+ },
+ // TODO: Safari always fails and disconnects before any tests are executed.
+ // This seems to be an issue with Saucelabs and they're actively investigating
+ // that (see: https://mobile.twitter.com/bromann/status/1136323458328084482).
+ // We'll disable Safari for now until that's resolved.
+ // sl_safari: {
+ // base: 'SauceLabs',
+ // browserName: 'Safari',
+ // version: '11',
+ // platform: 'OS X 10.13'
+ // },
+ sl_edge: {
+ base: 'SauceLabs',
+ browserName: 'MicrosoftEdge',
+ platform: 'Windows 10'
+ },
+ sl_ie_11: {
+ base: 'SauceLabs',
+ browserName: 'internet explorer',
+ version: '11.0',
+ platform: 'Windows 7'
+ }
+};
+
+var localLaunchers = {
+ ChromeNoSandboxHeadless: {
+ base: 'Chrome',
+ flags: [
+ '--no-sandbox',
+ '--disable-setuid-sandbox',
+ // See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
+ '--headless',
+ '--disable-gpu',
+ '--no-gpu',
+ // Without a remote debugging port, Google Chrome exits immediately.
+ '--remote-debugging-port=9333'
+ ]
+ }
+};
+
+const subPkgPath = pkgName => {
+ if (!minify) {
+ return path.join(__dirname, pkgName, 'src', 'index.js');
+ }
+
+ // Resolve from package.exports field
+ const stripped = pkgName.replace(/[/\\./]/g, '');
+ const pkgJson = path.join(__dirname, 'package.json');
+ const pkgExports = require(pkgJson).exports;
+ const file = pkgExports[stripped ? `./${stripped}` : '.'].browser;
+ return path.join(__dirname, file);
+};
+
+// Esbuild plugin for aliasing + babel pass
+function createEsbuildPlugin() {
+ const pending = new Map();
+ const cache = new Map();
+
+ const rename = {};
+ const mangle = require('./mangle.json');
+ for (let prop in mangle.props.props) {
+ let name = prop;
+ if (name[0] === '$') {
+ name = name.slice(1);
+ }
+
+ rename[name] = mangle.props.props[prop];
+ }
+
+ const alias = {
+ 'preact/debug': subPkgPath('./debug/'),
+ 'preact/devtools': subPkgPath('./devtools/'),
+ 'preact/compat': subPkgPath('./compat/'),
+ 'preact/hooks': subPkgPath('./hooks/'),
+ 'preact/test-utils': subPkgPath('./test-utils/'),
+ 'preact/jsx-runtime': subPkgPath('./jsx-runtime/'),
+ 'preact/jsx-dev-runtime': subPkgPath('./jsx-runtime/'),
+ preact: subPkgPath('')
+ };
+ return {
+ name: 'custom',
+ setup(build) {
+ // Aliasing: If "MINIFY" is set to "true" we use the dist/
+ // files instead of those from src/
+ build.onResolve({ filter: /^preact.*/ }, args => {
+ const pkg = alias[args.path];
+ return {
+ path: pkg,
+ namespace: 'preact'
+ };
+ });
+
+ build.onResolve({ filter: /^(react|react-dom)$/ }, args => {
+ const pkg = alias['preact/compat'];
+ return {
+ path: pkg,
+ namespace: 'preact'
+ };
+ });
+
+ // Transpile node_modules that are es2015+ to es5 for IE11
+ build.onLoad({ filter: /kolorist/ }, async args => {
+ const contents = await fs.readFile(args.path, 'utf-8');
+
+ const tmp = await babel.transformAsync(contents, {
+ filename: args.path,
+ presets: [
+ [
+ '@babel/preset-env',
+ {
+ loose: true,
+ modules: false,
+ targets: {
+ browsers: ['last 2 versions', 'IE >= 9']
+ }
+ }
+ ]
+ ]
+ });
+
+ return {
+ contents: tmp.code,
+ resolveDir: path.dirname(args.path),
+ loader: 'js'
+ };
+ });
+
+ // Apply babel pass whenever we load a .js file
+ build.onLoad({ filter: /\.js$/ }, async args => {
+ const contents = await fs.readFile(args.path, 'utf-8');
+
+ // Using a cache is crucial as babel is 30x slower than esbuild
+ const cached = cache.get(args.path);
+ if (cached && cached.input === contents) {
+ return {
+ contents: cached.result,
+ resolveDir: path.dirname(args.path),
+ loader: 'js'
+ };
+ }
+
+ let result = contents;
+
+ // Check if somebody already requested the current file. If they
+ // did than we push a listener instead of doing a duplicate
+ // transform of the same file. This is crucial for build perf.
+ if (!pending.has(args.path)) {
+ pending.set(args.path, []);
+
+ const tmp = await babel.transformAsync(result, {
+ filename: args.path,
+ sourceMaps: 'inline',
+ plugins: [
+ coverage && [
+ 'istanbul',
+ {
+ include: minify ? '**/dist/**/*.js' : '**/src/**/*.js'
+ }
+ ]
+ ].filter(Boolean)
+ });
+ result = tmp.code || result;
+ cache.set(args.path, { input: contents, result });
+
+ // Fire all pending listeners that are waiting on the same
+ // file transformation
+ const waited = pending.get(args.path);
+ pending.delete(args.path);
+ waited.forEach(fn => fn());
+ } else {
+ // Subscribe to the existing transformation completion call
+ await new Promise(r => {
+ pending.get(args.path).push(r);
+ });
+ result = cache.get(args.path).result;
+ }
+
+ return {
+ contents: result,
+ resolveDir: path.dirname(args.path),
+ loader: 'js'
+ };
+ });
+ }
+ };
+}
+
+module.exports = function(config) {
+ config.set({
+ browsers: sauceLabs
+ ? Object.keys(sauceLabsLaunchers)
+ : Object.keys(localLaunchers),
+
+ frameworks: ['mocha', 'chai-sinon'],
+
+ reporters: ['mocha'].concat(
+ coverage ? 'coverage' : [],
+ sauceLabs ? 'saucelabs' : []
+ ),
+
+ formatError(msg) {
+ const frames = errorstacks.parseStackTrace(msg);
+ if (!frames.length || frames[0].column === -1) return '\n' + msg + '\n';
+
+ const frame = frames[0];
+ const filePath = kl.lightCyan(
+ frame.fileName.replace(__dirname + '/', '')
+ );
+
+ const indentMatch = msg.match(/^(\s*)/);
+ const indent = indentMatch ? indentMatch[1] : ' ';
+ const location = kl.yellow(`:${frame.line}:${frame.column}`);
+ return `${indent}at ${frame.name} (${filePath}${location})\n`;
+ },
+
+ coverageReporter: {
+ dir: path.join(__dirname, 'coverage'),
+ reporters: [
+ { type: 'text-summary' },
+ { type: 'html' },
+ { type: 'lcovonly', subdir: '.', file: 'lcov.info' }
+ ]
+ },
+
+ mochaReporter: {
+ showDiff: true
+ },
+
+ browserLogOptions: { terminal: true },
+ browserConsoleLogOptions: { terminal: true },
+
+ browserNoActivityTimeout: 5 * 60 * 1000,
+
+ // Use only two browsers concurrently, works better with open source Sauce Labs remote testing
+ concurrency: 2,
+
+ captureTimeout: 0,
+
+ sauceLabs: {
+ build: `CI #${process.env.GITHUB_RUN_NUMBER} (${process.env.GITHUB_RUN_ID})`,
+ tunnelIdentifier:
+ process.env.GITHUB_RUN_NUMBER ||
+ `local${require('./package.json').version}`,
+ connectLocationForSERelay: 'localhost',
+ connectPortForSERelay: 4445,
+ startConnect: !!sauceLabs
+ },
+
+ customLaunchers: sauceLabs ? sauceLabsLaunchers : localLaunchers,
+
+ files: [
+ { pattern: 'test/polyfills.js', watched: false },
+ {
+ pattern:
+ config.grep ||
+ '{debug,devtools,hooks,compat,test-utils,jsx-runtime,}/test/{browser,shared}/**/*.test.js',
+ watched: false,
+ type: 'js'
+ }
+ ],
+
+ mime: {
+ 'text/javascript': ['js', 'jsx']
+ },
+
+ preprocessors: {
+ '{debug,devtools,hooks,compat,test-utils,jsx-runtime,}/test/**/*': [
+ 'esbuild'
+ ]
+ },
+
+ esbuild: {
+ // karma-esbuild options
+ singleBundle: false,
+
+ // esbuild options
+ target: 'es5',
+ define: {
+ COVERAGE: coverage,
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || ''),
+ ENABLE_PERFORMANCE: performance
+ },
+ plugins: [createEsbuildPlugin()]
+ }
+ });
+};
diff --git a/preact/mangle.json b/preact/mangle.json
new file mode 100644
index 0000000..fc87f43
--- /dev/null
+++ b/preact/mangle.json
@@ -0,0 +1,80 @@
+{
+ "help": {
+ "what is this file?": "It controls protected/private property mangling so that minified builds have consistent property names.",
+ "why are there duplicate minified properties?": "Most properties are only used on one type of objects, so they can have the same name since they will never collide. Doing this reduces size."
+ },
+ "minify": {
+ "mangle": {
+ "properties": {
+ "regex": "^_[^_]",
+ "reserved": [
+ "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED",
+ "__REACT_DEVTOOLS_GLOBAL_HOOK__",
+ "__PREACT_DEVTOOLS__",
+ "_renderers",
+ "__source",
+ "__self"
+ ]
+ }
+ },
+ "compress": {
+ "hoist_vars": true,
+ "reduce_funcs": false
+ }
+ },
+ "props": {
+ "cname": 6,
+ "props": {
+ "$_cleanup": "__c",
+ "$_afterPaintQueued": "__a",
+ "$__hooks": "__H",
+ "$_list": "__",
+ "$_pendingEffects": "__h",
+ "$_value": "__",
+ "$_original": "__v",
+ "$_args": "__H",
+ "$_factory": "__h",
+ "$_depth": "__b",
+ "$_nextDom": "__d",
+ "$_dirty": "__d",
+ "$_detachOnNextRender": "__b",
+ "$_force": "__e",
+ "$_nextState": "__s",
+ "$_renderCallbacks": "__h",
+ "$_vnode": "__v",
+ "$_children": "__k",
+ "$_pendingSuspensionCount": "__u",
+ "$_childDidSuspend": "__c",
+ "$_onResolve": "__R",
+ "$_suspended": "__e",
+ "$_dom": "__e",
+ "$_hydrating": "__h",
+ "$_component": "__c",
+ "$__html": "__html",
+ "$_parent": "__",
+ "$_pendingError": "__E",
+ "$_processingException": "__",
+ "$_globalContext": "__n",
+ "$_context": "c",
+ "$_defaultValue": "__",
+ "$_id": "__c",
+ "$_contextRef": "__",
+ "$_parentDom": "__P",
+ "$_originalParentDom": "__O",
+ "$_prevState": "__u",
+ "$_root": "__",
+ "$_diff": "__b",
+ "$_commit": "__c",
+ "$_addHookName": "__a",
+ "$_render": "__r",
+ "$_hook": "__h",
+ "$_catchError": "__e",
+ "$_unmount": "__u",
+ "$_owner": "__o",
+ "$_skipEffects": "__s",
+ "$_rerenderCount": "__r",
+ "$_forwarded": "__f",
+ "$_isSuspended": "__i"
+ }
+ }
+}
diff --git a/preact/package-lock.json b/preact/package-lock.json
new file mode 100644
index 0000000..83f011f
--- /dev/null
+++ b/preact/package-lock.json
@@ -0,0 +1,32470 @@
+{
+ "name": "preact",
+ "version": "10.5.14",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "version": "10.5.14",
+ "license": "MIT",
+ "devDependencies": {
+ "@babel/core": "^7.7.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.6.2",
+ "@babel/plugin-transform-react-jsx": "^7.7.0",
+ "@babel/plugin-transform-react-jsx-source": "^7.7.4",
+ "@babel/preset-env": "^7.7.1",
+ "@babel/register": "^7.7.0",
+ "@types/chai": "^4.1.2",
+ "@types/mocha": "^5.0.0",
+ "@types/node": "^14.14.10",
+ "babel-plugin-istanbul": "^6.0.0",
+ "babel-plugin-transform-async-to-promises": "^0.8.15",
+ "babel-plugin-transform-rename-properties": "0.1.0",
+ "benchmark": "^2.1.4",
+ "chai": "^4.1.2",
+ "check-export-map": "^1.0.1",
+ "coveralls": "^3.0.0",
+ "cross-env": "^7.0.2",
+ "csstype": "^3.0.5",
+ "diff": "^5.0.0",
+ "errorstacks": "^2.3.0",
+ "esbuild": "^0.8.47",
+ "eslint": "5.15.1",
+ "eslint-config-developit": "^1.1.1",
+ "eslint-config-prettier": "^6.5.0",
+ "eslint-plugin-react": "7.12.4",
+ "husky": "^4.3.0",
+ "karma": "^5.2.3",
+ "karma-chai-sinon": "^0.1.5",
+ "karma-chrome-launcher": "^3.1.0",
+ "karma-coverage": "^2.0.3",
+ "karma-esbuild": "^2.2.0",
+ "karma-mocha": "^2.0.1",
+ "karma-mocha-reporter": "^2.2.5",
+ "karma-sauce-launcher": "^4.3.4",
+ "karma-sinon": "^1.0.5",
+ "karma-sourcemap-loader": "^0.3.7",
+ "kolorist": "^1.2.10",
+ "lint-staged": "^10.5.2",
+ "lodash": "^4.17.20",
+ "microbundle": "^0.11.0",
+ "mocha": "^8.2.1",
+ "npm-merge-driver-install": "^1.1.1",
+ "npm-run-all": "^4.0.0",
+ "prettier": "^1.18.2",
+ "prop-types": "^15.7.2",
+ "sinon": "^9.2.3",
+ "sinon-chai": "^3.5.0",
+ "typescript": "3.5.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.4.tgz",
+ "integrity": "sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.4",
+ "@babel/helpers": "^7.7.4",
+ "@babel/parser": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz",
+ "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.7.4",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz",
+ "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz",
+ "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-explode-assignable-expression": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-builder-react-jsx": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz",
+ "integrity": "sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.7.4",
+ "esutils": "^2.0.0"
+ }
+ },
+ "node_modules/@babel/helper-call-delegate": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz",
+ "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-hoist-variables": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz",
+ "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-member-expression-to-functions": "^7.12.1",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.12.1",
+ "@babel/helper-split-export-declaration": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/code-frame": {
+ "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,
+ "dependencies": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/generator": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
+ "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.12.5",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-function-name": {
+ "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,
+ "dependencies": {
+ "@babel/helper-get-function-arity": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-get-function-arity": {
+ "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,
+ "dependencies": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz",
+ "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.12.7"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz",
+ "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.12.7"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-replace-supers": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
+ "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-member-expression-to-functions": "^7.12.1",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/traverse": "^7.12.5",
+ "@babel/types": "^7.12.5"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-split-export-declaration": {
+ "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,
+ "dependencies": {
+ "@babel/types": "^7.11.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/highlight": {
+ "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,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/parser": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz",
+ "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/template": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz",
+ "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.12.7",
+ "@babel/types": "^7.12.7"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/traverse": {
+ "version": "7.12.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz",
+ "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.12.5",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.11.0",
+ "@babel/parser": "^7.12.7",
+ "@babel/types": "^7.12.7",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.19"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/types": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz",
+ "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz",
+ "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-regex": "^7.4.4",
+ "regexpu-core": "^4.6.0"
+ }
+ },
+ "node_modules/@babel/helper-define-map": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz",
+ "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "lodash": "^4.17.13"
+ }
+ },
+ "node_modules/@babel/helper-explode-assignable-expression": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz",
+ "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz",
+ "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-get-function-arity": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-get-function-arity": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz",
+ "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz",
+ "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz",
+ "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz",
+ "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.4.tgz",
+ "integrity": "sha512-ehGBu4mXrhs0FxAqN8tWkzF8GSIGAiEumu4ONZ/hD9M88uHcD+Yu2ttKfOCgwzoesJOJrtQh7trI5YPbRtMmnA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.7.4",
+ "@babel/helper-simple-access": "^7.7.4",
+ "@babel/helper-split-export-declaration": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "lodash": "^4.17.13"
+ }
+ },
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz",
+ "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "node_modules/@babel/helper-regex": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz",
+ "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.13"
+ }
+ },
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz",
+ "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.7.4",
+ "@babel/helper-wrap-function": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz",
+ "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-member-expression-to-functions": "^7.7.4",
+ "@babel/helper-optimise-call-expression": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz",
+ "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz",
+ "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "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
+ },
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz",
+ "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz",
+ "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+ "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.4.tgz",
+ "integrity": "sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz",
+ "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.7.4",
+ "@babel/plugin-syntax-async-generators": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-class-properties": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.1.tgz",
+ "integrity": "sha512-/4FKFChkQ2Jgb8lBDsvFX496YTi7UWTetVgS8oJUpX1e/DlaoeEK57At27ug8Hu2zI2g8bzkJ+8k9qrHZRPGPA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.2.1",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-dynamic-import": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz",
+ "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-json-strings": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz",
+ "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz",
+ "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz",
+ "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz",
+ "integrity": "sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz",
+ "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-dynamic-import": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz",
+ "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz",
+ "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz",
+ "integrity": "sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz",
+ "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz",
+ "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz",
+ "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz",
+ "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz",
+ "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz",
+ "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz",
+ "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz",
+ "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.7.4",
+ "@babel/helper-define-map": "^7.7.4",
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/helper-optimise-call-expression": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.7.4",
+ "@babel/helper-split-export-declaration": "^7.7.4",
+ "globals": "^11.1.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz",
+ "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz",
+ "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz",
+ "integrity": "sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz",
+ "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz",
+ "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz",
+ "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz",
+ "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz",
+ "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz",
+ "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.4.tgz",
+ "integrity": "sha512-/542/5LNA18YDtg1F+QHvvUSlxdvjZoD/aldQwkq+E3WCkbEjNSN9zdrOXaSlfg3IfGi22ijzecklF/A7kVZFQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.4.tgz",
+ "integrity": "sha512-k8iVS7Jhc367IcNF53KCwIXtKAH7czev866ThsTgy8CwlXjnKZna2VHwChglzLleYrcHz1eQEIJlGRQxB53nqA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.7.4",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz",
+ "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-hoist-variables": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz",
+ "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz",
+ "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz",
+ "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz",
+ "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz",
+ "integrity": "sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-call-delegate": "^7.7.4",
+ "@babel/helper-get-function-arity": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-property-literals": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz",
+ "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz",
+ "integrity": "sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-builder-react-jsx": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz",
+ "integrity": "sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.4.tgz",
+ "integrity": "sha512-e7MWl5UJvmPEwFJTwkBlPmqixCtr9yAASBqff4ggXTNicZiwbF8Eefzm6NVgfiBp7JdAGItecnctKTgH44q2Jw==",
+ "dev": true,
+ "dependencies": {
+ "regenerator-transform": "^0.14.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz",
+ "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz",
+ "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-spread": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz",
+ "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz",
+ "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-template-literals": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz",
+ "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typeof-symbol": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz",
+ "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz",
+ "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/polyfill": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
+ "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^2.6.5",
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "node_modules/@babel/polyfill/node_modules/regenerator-runtime": {
+ "version": "0.13.7",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+ "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
+ "dev": true
+ },
+ "node_modules/@babel/preset-env": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.4.tgz",
+ "integrity": "sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.7.4",
+ "@babel/plugin-proposal-dynamic-import": "^7.7.4",
+ "@babel/plugin-proposal-json-strings": "^7.7.4",
+ "@babel/plugin-proposal-object-rest-spread": "^7.7.4",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.7.4",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.7.4",
+ "@babel/plugin-syntax-async-generators": "^7.7.4",
+ "@babel/plugin-syntax-dynamic-import": "^7.7.4",
+ "@babel/plugin-syntax-json-strings": "^7.7.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.7.4",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.7.4",
+ "@babel/plugin-syntax-top-level-await": "^7.7.4",
+ "@babel/plugin-transform-arrow-functions": "^7.7.4",
+ "@babel/plugin-transform-async-to-generator": "^7.7.4",
+ "@babel/plugin-transform-block-scoped-functions": "^7.7.4",
+ "@babel/plugin-transform-block-scoping": "^7.7.4",
+ "@babel/plugin-transform-classes": "^7.7.4",
+ "@babel/plugin-transform-computed-properties": "^7.7.4",
+ "@babel/plugin-transform-destructuring": "^7.7.4",
+ "@babel/plugin-transform-dotall-regex": "^7.7.4",
+ "@babel/plugin-transform-duplicate-keys": "^7.7.4",
+ "@babel/plugin-transform-exponentiation-operator": "^7.7.4",
+ "@babel/plugin-transform-for-of": "^7.7.4",
+ "@babel/plugin-transform-function-name": "^7.7.4",
+ "@babel/plugin-transform-literals": "^7.7.4",
+ "@babel/plugin-transform-member-expression-literals": "^7.7.4",
+ "@babel/plugin-transform-modules-amd": "^7.7.4",
+ "@babel/plugin-transform-modules-commonjs": "^7.7.4",
+ "@babel/plugin-transform-modules-systemjs": "^7.7.4",
+ "@babel/plugin-transform-modules-umd": "^7.7.4",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4",
+ "@babel/plugin-transform-new-target": "^7.7.4",
+ "@babel/plugin-transform-object-super": "^7.7.4",
+ "@babel/plugin-transform-parameters": "^7.7.4",
+ "@babel/plugin-transform-property-literals": "^7.7.4",
+ "@babel/plugin-transform-regenerator": "^7.7.4",
+ "@babel/plugin-transform-reserved-words": "^7.7.4",
+ "@babel/plugin-transform-shorthand-properties": "^7.7.4",
+ "@babel/plugin-transform-spread": "^7.7.4",
+ "@babel/plugin-transform-sticky-regex": "^7.7.4",
+ "@babel/plugin-transform-template-literals": "^7.7.4",
+ "@babel/plugin-transform-typeof-symbol": "^7.7.4",
+ "@babel/plugin-transform-unicode-regex": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "browserslist": "^4.6.0",
+ "core-js-compat": "^3.1.1",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.5.0"
+ }
+ },
+ "node_modules/@babel/register": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.4.tgz",
+ "integrity": "sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA==",
+ "dev": true,
+ "dependencies": {
+ "find-cache-dir": "^2.0.0",
+ "lodash": "^4.17.13",
+ "make-dir": "^2.1.0",
+ "pirates": "^4.0.0",
+ "source-map-support": "^0.5.16"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.4.tgz",
+ "integrity": "sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw==",
+ "dev": true,
+ "dependencies": {
+ "regenerator-runtime": "^0.13.2"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz",
+ "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz",
+ "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.4",
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/helper-split-export-declaration": "^7.7.4",
+ "@babel/parser": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
+ "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz",
+ "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz",
+ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@sindresorhus/is": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
+ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz",
+ "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
+ "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "node_modules/@sinonjs/samsam": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.0.tgz",
+ "integrity": "sha512-hXpcfx3aq+ETVBwPlRFICld5EnrkexXuXDwqUNhDdr5L8VjvMeSRwyOa0qL7XFmR+jVWR4rUZtnxlG7RX72sBg==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.6.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
+ "dev": true
+ },
+ "node_modules/@szmarczak/http-timer": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
+ "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
+ "dev": true,
+ "dependencies": {
+ "defer-to-connect": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@types/archiver": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.0.tgz",
+ "integrity": "sha512-baFOhanb/hxmcOd1Uey2TfFg43kTSmM6py1Eo7Rjbv/ivcl7PXLhY0QgXGf50Hx/eskGCFqPfhs/7IZLb15C5g==",
+ "dev": true,
+ "dependencies": {
+ "@types/glob": "*"
+ }
+ },
+ "node_modules/@types/atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@types/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-8GAYQ1jDRUQkSpHzJUqXwAkYFOxuWAOGLhIR4aPd/Y/yL12Q/9m7LsKpHKlfKdNE/362Hc9wPI1Yh6opDfxVJg==",
+ "dev": true
+ },
+ "node_modules/@types/cacheable-request": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
+ "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "*",
+ "@types/node": "*",
+ "@types/responselike": "*"
+ }
+ },
+ "node_modules/@types/chai": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.5.tgz",
+ "integrity": "sha512-YvbLiIc0DbbhiANrfVObdkLEHJksQZVq0Uvfg550SRAKVYaEJy+V70j65BVe2WNp6E3HtKsUczeijHFCjba3og==",
+ "dev": true
+ },
+ "node_modules/@types/estree": {
+ "version": "0.0.39",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+ "dev": true
+ },
+ "node_modules/@types/fs-extra": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.4.tgz",
+ "integrity": "sha512-50GO5ez44lxK5MDH90DYHFFfqxH7+fTqEEnvguQRzJ/tY9qFrMSHLiYHite+F3SNmf7+LHC1eMXojuD+E3Qcyg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/http-cache-semantics": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
+ "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==",
+ "dev": true
+ },
+ "node_modules/@types/keyv": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
+ "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.14.165",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.165.tgz",
+ "integrity": "sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg==",
+ "dev": true
+ },
+ "node_modules/@types/lodash.clonedeep": {
+ "version": "4.5.6",
+ "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz",
+ "integrity": "sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==",
+ "dev": true,
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@types/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-8G41YFhmOl8Ck6NrwLK5hhnbz6ADfuDJP+zusDnX3PoYhfC60+H/rQE6zmdO4yFzPCPJPY4oGZK2spbXm6gYEA==",
+ "dev": true,
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/lodash.merge": {
+ "version": "4.6.6",
+ "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.6.tgz",
+ "integrity": "sha512-IB90krzMf7YpfgP3u/EvZEdXVvm4e3gJbUvh5ieuI+o+XqiNEt6fCzqNRaiLlPVScLI59RxIGZMQ3+Ko/DJ8vQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "node_modules/@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "14.14.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz",
+ "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==",
+ "dev": true
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
+ "dev": true
+ },
+ "node_modules/@types/puppeteer": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.0.tgz",
+ "integrity": "sha512-zTYDLjnHjgzokrwKt7N0rgn7oZPYo1J0m8Ghu+gXqzLCEn8RWbELa2uprE2UFJ0jU/Sk0x9jXXdOH/5QQLFHhQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/puppeteer-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/puppeteer-core/-/puppeteer-core-2.0.0.tgz",
+ "integrity": "sha512-JvoEb7KgEkUet009ZDrtpUER3hheXoHgQByuYpJZ5WWT7LWwMH+0NTqGQXGgoOKzs+G5NA1T4DZwXK79Bhnejw==",
+ "dev": true,
+ "dependencies": {
+ "@types/puppeteer": "*"
+ }
+ },
+ "node_modules/@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==",
+ "dev": true
+ },
+ "node_modules/@types/resolve": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz",
+ "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/responselike": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
+ "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/ua-parser-js": {
+ "version": "0.7.33",
+ "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.33.tgz",
+ "integrity": "sha512-ngUKcHnytUodUCL7C6EZ+lVXUjTMQb+9p/e1JjV5tN9TVzS98lHozWEFRPY1QcCdwFeMsmVWfZ3DPPT/udCyIw==",
+ "dev": true
+ },
+ "node_modules/@types/uuid": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz",
+ "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==",
+ "dev": true
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
+ "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
+ "dev": true
+ },
+ "node_modules/@wdio/config": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/@wdio/config/-/config-6.10.4.tgz",
+ "integrity": "sha512-M22EunI+n/mmYOQqb9+BTVRqrfmPw+7rR1AHeD36vOXCnZ55Nrl4ZU4d6QzPHp9cLdMZqV786iDmkonnb6jb8w==",
+ "dev": true,
+ "dependencies": {
+ "@wdio/logger": "6.10.4",
+ "deepmerge": "^4.0.0",
+ "glob": "^7.1.2"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@wdio/logger": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-6.10.4.tgz",
+ "integrity": "sha512-I+1I/5CtQigy59QJen56PHuwV0yiQdnZaOxmXIP6FzpWkeXLjcoUNaCRDuKwJx5GKrUSDqmGlMWSH53scwwzHg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "loglevel": "^1.6.0",
+ "loglevel-plugin-prefix": "^0.8.4",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@wdio/logger/node_modules/ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wdio/logger/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wdio/logger/node_modules/chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@wdio/logger/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@wdio/logger/node_modules/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
+ },
+ "node_modules/@wdio/logger/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wdio/logger/node_modules/strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wdio/logger/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wdio/protocols": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-6.10.0.tgz",
+ "integrity": "sha512-MaloMFtlZeeGoqHyy2g5QM8HHuQDZOAGjxotsQ6mVAzZpAFbwUGHPSRlwBbbsB3gHVALJVowViltJ95jgaFfZg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@wdio/repl": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-6.10.4.tgz",
+ "integrity": "sha512-VwucPyUqAxU6CWWoEVf14asjtLGTgyaJwp47kEFegr06ZBG43zVQ6JqKFiGDxUJ+fZVRhdd7nRVHd+6UllK18w==",
+ "dev": true,
+ "dependencies": {
+ "@wdio/utils": "6.10.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@wdio/utils": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-6.10.4.tgz",
+ "integrity": "sha512-DkFguYGKUcv9TmIYuuwS/pxpiGcgyv8gWUWRXffirt2OYpFXJNwB+S96CSQnjgb4B5MqSFgEti+gl8A2wsdDgQ==",
+ "dev": true,
+ "dependencies": {
+ "@wdio/logger": "6.10.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "dependencies": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-dynamic-import": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
+ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==",
+ "dev": true
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
+ "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
+ "dev": true
+ },
+ "node_modules/after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "node_modules/agent-base": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
+ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "node_modules/alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "node_modules/ansi-colors": {
+ "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,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true
+ },
+ "node_modules/archive-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
+ "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
+ "dev": true,
+ "dependencies": {
+ "file-type": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/archive-type/node_modules/file-type": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
+ "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/archiver": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.1.0.tgz",
+ "integrity": "sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA==",
+ "dev": true,
+ "dependencies": {
+ "archiver-utils": "^2.1.0",
+ "async": "^3.2.0",
+ "buffer-crc32": "^0.2.1",
+ "readable-stream": "^3.6.0",
+ "readdir-glob": "^1.0.0",
+ "tar-stream": "^2.1.4",
+ "zip-stream": "^4.0.4"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/archiver-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
+ "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.0",
+ "lazystream": "^1.0.0",
+ "lodash.defaults": "^4.2.0",
+ "lodash.difference": "^4.5.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.union": "^4.6.0",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "dev": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "dependencies": {
+ "arr-flatten": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "dev": true
+ },
+ "node_modules/asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
+ "dev": true
+ },
+ "node_modules/async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "node_modules/asyncro": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz",
+ "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==",
+ "dev": true
+ },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true,
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "9.8.6",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz",
+ "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.12.0",
+ "caniuse-lite": "^1.0.30001109",
+ "colorette": "^1.2.1",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^7.0.32",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ }
+ },
+ "node_modules/autoprefixer/node_modules/browserslist": {
+ "version": "4.14.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz",
+ "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==",
+ "dev": true,
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001157",
+ "colorette": "^1.2.1",
+ "electron-to-chromium": "^1.3.591",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.66"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/autoprefixer/node_modules/caniuse-lite": {
+ "version": "1.0.30001163",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001163.tgz",
+ "integrity": "sha512-QQbOGkHWnvhn3Dlf4scPlXTZVhGOK+2qCOP5gPxqzXHhtn3tZHwNdH9qNcQRWN0f3tDYrsyXFJCFiP/GLzI5Vg==",
+ "dev": true
+ },
+ "node_modules/autoprefixer/node_modules/electron-to-chromium": {
+ "version": "1.3.611",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.611.tgz",
+ "integrity": "sha512-YhqTzCXtEO2h0foGLGS60ortd6yY/yUQhqDEp1VWG3DIyHvckFFyaRwR41M0/M3m7Yb8Exqh+nzyb2TuxaoMTw==",
+ "dev": true
+ },
+ "node_modules/autoprefixer/node_modules/node-releases": {
+ "version": "1.1.67",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz",
+ "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==",
+ "dev": true
+ },
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz",
+ "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==",
+ "dev": true
+ },
+ "node_modules/babel-eslint": {
+ "version": "8.2.6",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz",
+ "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/traverse": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/@babel/code-frame": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
+ "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "7.0.0-beta.44"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/@babel/generator": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "7.0.0-beta.44",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.2.0",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/@babel/helper-function-name": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz",
+ "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-get-function-arity": "7.0.0-beta.44",
+ "@babel/template": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/@babel/helper-get-function-arity": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz",
+ "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz",
+ "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/@babel/highlight": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
+ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.0"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/@babel/template": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz",
+ "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "lodash": "^4.2.0"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/@babel/traverse": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz",
+ "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/generator": "7.0.0-beta.44",
+ "@babel/helper-function-name": "7.0.0-beta.44",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "debug": "^3.1.0",
+ "globals": "^11.1.0",
+ "invariant": "^2.2.0",
+ "lodash": "^4.2.0"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/@babel/types": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.2.0",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "node_modules/babel-plugin-dynamic-import-node": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
+ "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+ "dev": true,
+ "dependencies": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
+ "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^4.0.0",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-transform-async-to-promises": {
+ "version": "0.8.15",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.15.tgz",
+ "integrity": "sha512-fDXP68ZqcinZO2WCiimCL9zhGjGXOnn3D33zvbh+yheZ/qOrNVVDDIBtAaM3Faz8TRvQzHiRKsu3hfrBAhEncQ==",
+ "dev": true
+ },
+ "node_modules/babel-plugin-transform-rename-properties": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-rename-properties/-/babel-plugin-transform-rename-properties-0.1.0.tgz",
+ "integrity": "sha512-uBSvAC8qH81TsXsWYD20ME4qg9ICflMLjsNfeuSxrKkJkym4Riqne1BrCCW15lcM/t9lfEiz4FJbVeUoaOVGWA==",
+ "dev": true
+ },
+ "node_modules/babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true,
+ "bin": {
+ "babylon": "bin/babylon.js"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "node_modules/base64-arraybuffer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
+ "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+ "dev": true
+ },
+ "node_modules/base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+ "dev": true,
+ "engines": {
+ "node": "^4.5.0 || >= 5.9"
+ }
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/benchmark": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz",
+ "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.4",
+ "platform": "^1.3.3"
+ }
+ },
+ "node_modules/better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "dependencies": {
+ "callsite": "1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/bin-check": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
+ "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^0.7.0",
+ "executable": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz",
+ "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^1.0.0",
+ "find-versions": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-version-check": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz",
+ "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==",
+ "dev": true,
+ "dependencies": {
+ "bin-version": "^3.0.0",
+ "semver": "^5.6.0",
+ "semver-truncate": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-version/node_modules/execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-version/node_modules/get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-wrapper": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
+ "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
+ "dev": true,
+ "dependencies": {
+ "bin-check": "^4.1.0",
+ "bin-version-check": "^4.0.0",
+ "download": "^7.1.0",
+ "import-lazy": "^3.1.0",
+ "os-filter-obj": "^2.0.0",
+ "pify": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
+ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bl": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz",
+ "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==",
+ "dev": true,
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/bl/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/blob": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
+ "dev": true
+ },
+ "node_modules/body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "node_modules/boolean": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz",
+ "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brotli-size": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.0.3.tgz",
+ "integrity": "sha512-bBIdd8uUGxKGldAVykxOqPegl+HlIm4FpXJamwWw5x77WCE8jO7AhXFE1YXOhOB28gS+2pTQete0FqRE6U5hQQ==",
+ "dev": true,
+ "dependencies": {
+ "duplexer": "^0.1.1",
+ "iltorb": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "node_modules/browserslist": {
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.3.tgz",
+ "integrity": "sha512-jWvmhqYpx+9EZm/FxcZSbUZyDEvDTLDi3nSAKbzEkyWvtI0mNSmUosey+5awDW1RUlrgXbQb5A6qY1xQH9U6MQ==",
+ "dev": true,
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001010",
+ "electron-to-chromium": "^1.3.306",
+ "node-releases": "^1.1.40"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ }
+ },
+ "node_modules/buble": {
+ "version": "0.19.8",
+ "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.8.tgz",
+ "integrity": "sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^6.1.1",
+ "acorn-dynamic-import": "^4.0.0",
+ "acorn-jsx": "^5.0.1",
+ "chalk": "^2.4.2",
+ "magic-string": "^0.25.3",
+ "minimist": "^1.2.0",
+ "os-homedir": "^2.0.0",
+ "regexpu-core": "^4.5.4"
+ },
+ "bin": {
+ "buble": "bin/buble"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "dependencies": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "node_modules/buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+ "dev": true
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
+ "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/cacheable-lookup": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz",
+ "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacheable-request": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
+ "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
+ "dev": true,
+ "dependencies": {
+ "clone-response": "1.0.2",
+ "get-stream": "3.0.0",
+ "http-cache-semantics": "3.8.1",
+ "keyv": "3.0.0",
+ "lowercase-keys": "1.0.0",
+ "normalize-url": "2.0.1",
+ "responselike": "1.0.2"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/normalize-url": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
+ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
+ "dev": true,
+ "dependencies": {
+ "prepend-http": "^2.0.0",
+ "query-string": "^5.0.1",
+ "sort-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/query-string": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
+ "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
+ "dev": true,
+ "dependencies": {
+ "decode-uri-component": "^0.2.0",
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/sort-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+ "dev": true,
+ "dependencies": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
+ "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.0"
+ }
+ },
+ "node_modules/caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/caller-callsite/node_modules/callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "dependencies": {
+ "caller-callsite": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camel-case": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz",
+ "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==",
+ "dev": true,
+ "dependencies": {
+ "pascal-case": "^3.1.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "node_modules/caniuse-db": {
+ "version": "1.0.30001012",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001012.tgz",
+ "integrity": "sha512-fm4VZQo0F1WYTmJcaTsqGhRuqcbkUW1/1hx8n5xdkbJSyaJV3jZ1vPXHYNcn376cAcuhxUIcE9TpHlSAYtN6bA==",
+ "dev": true
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001012",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001012.tgz",
+ "integrity": "sha512-7RR4Uh04t9K1uYRWzOJmzplgEOAXbfK72oVNokCdMzA67trrhPzy93ahKk1AWHiA0c58tD2P+NHqxrA8FZ+Trg==",
+ "dev": true
+ },
+ "node_modules/capital-case": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.3.tgz",
+ "integrity": "sha512-OlUSJpUr7SY0uZFOxcwnDOU7/MpHlKTZx2mqnDYQFrDudXLFm0JJ9wr/l4csB+rh2Ug0OPuoSO53PqiZBqno9A==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0",
+ "upper-case-first": "^2.0.1"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "node_modules/caw": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
+ "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
+ "dev": true,
+ "dependencies": {
+ "get-proxy": "^2.0.0",
+ "isurl": "^1.0.0-alpha5",
+ "tunnel-agent": "^0.6.0",
+ "url-to-options": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chai": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
+ "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
+ "dev": true,
+ "dependencies": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "pathval": "^1.1.0",
+ "type-detect": "^4.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/change-case": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.1.tgz",
+ "integrity": "sha512-qRlUWn/hXnX1R1LBDF/RelJLiqNjKjUqlmuBVSEIyye8kq49CXqkZWKmi8XeUAdDXWFOcGLUMZ+aHn3Q5lzUXw==",
+ "dev": true,
+ "dependencies": {
+ "camel-case": "^4.1.1",
+ "capital-case": "^1.0.3",
+ "constant-case": "^3.0.3",
+ "dot-case": "^3.0.3",
+ "header-case": "^2.0.3",
+ "no-case": "^3.0.3",
+ "param-case": "^3.0.3",
+ "pascal-case": "^3.1.1",
+ "path-case": "^3.0.3",
+ "sentence-case": "^3.0.3",
+ "snake-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "node_modules/check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/check-export-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/check-export-map/-/check-export-map-1.0.1.tgz",
+ "integrity": "sha512-6nJK5v9fiUQjAACrLyVlIm8UlAak5zdvYxJhpl0zYa7IqUElInMU6lRL/+rTHjEmy+hbkn5Wphq4Rj9cRkEbqg==",
+ "dev": true,
+ "dependencies": {
+ "kolorist": "^1.2.3",
+ "mri": "^1.1.6"
+ },
+ "bin": {
+ "check-export-map": "src/cli.js"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
+ "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.1.2"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
+ "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
+ "dev": true
+ },
+ "node_modules/chrome-launcher": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz",
+ "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "escape-string-regexp": "^1.0.5",
+ "is-wsl": "^2.2.0",
+ "lighthouse-logger": "^1.0.0",
+ "mkdirp": "^0.5.3",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "node_modules/chrome-launcher/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "node_modules/clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clap/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clap/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clap/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clap/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clap/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "dependencies": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/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
+ },
+ "node_modules/cli-truncate/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "node_modules/cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dev": true,
+ "dependencies": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "node_modules/clone-response/node_modules/mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "dev": true,
+ "dependencies": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 4.0"
+ }
+ },
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
+ "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.4"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "node_modules/color-string": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz",
+ "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/colorette": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
+ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
+ "dev": true
+ },
+ "node_modules/colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "dev": true,
+ "dependencies": {
+ "color": "^0.11.0",
+ "css-color-names": "0.0.4",
+ "has": "^1.0.1"
+ }
+ },
+ "node_modules/colormin/node_modules/color": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "dev": true,
+ "dependencies": {
+ "clone": "^1.0.2",
+ "color-convert": "^1.3.0",
+ "color-string": "^0.3.0"
+ }
+ },
+ "node_modules/colormin/node_modules/color-string": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "dev": true,
+ "dependencies": {
+ "color-name": "^1.0.0"
+ }
+ },
+ "node_modules/colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "node_modules/compare-versions": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
+ "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
+ "dev": true
+ },
+ "node_modules/component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "node_modules/component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "node_modules/compress-commons": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz",
+ "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "^0.2.13",
+ "crc32-stream": "^4.0.1",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/compress-commons/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/concat-with-sourcemaps": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
+ "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/concat-with-sourcemaps/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/config-chain": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+ "dev": true,
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/connect": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.2",
+ "parseurl": "~1.3.3",
+ "utils-merge": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/connect/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/connect/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "node_modules/constant-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.3.tgz",
+ "integrity": "sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0",
+ "upper-case": "^2.0.1"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/core-js": {
+ "version": "2.6.10",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz",
+ "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==",
+ "dev": true
+ },
+ "node_modules/core-js-compat": {
+ "version": "3.4.5",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.5.tgz",
+ "integrity": "sha512-rYVvzvKJDKoefdAC+q6VP63vp5hMmeVONCi9pVUbU1qRrtVrmAk/nPhnRg+i+XFd775m1hpG2Yd5RY3X45ccuw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.7.3",
+ "semver": "^6.3.0"
+ }
+ },
+ "node_modules/core-js-compat/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "node_modules/cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "dev": true,
+ "dependencies": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cosmiconfig/node_modules/import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "dependencies": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cosmiconfig/node_modules/resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/coveralls": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz",
+ "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==",
+ "dev": true,
+ "dependencies": {
+ "js-yaml": "^3.13.1",
+ "lcov-parse": "^1.0.0",
+ "log-driver": "^1.2.7",
+ "minimist": "^1.2.0",
+ "request": "^2.88.0"
+ },
+ "bin": {
+ "coveralls": "bin/coveralls.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/crc-32": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
+ "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
+ "dev": true,
+ "dependencies": {
+ "exit-on-epipe": "~1.0.1",
+ "printj": "~1.1.0"
+ },
+ "bin": {
+ "crc32": "bin/crc32.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/crc32-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz",
+ "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==",
+ "dev": true,
+ "dependencies": {
+ "crc-32": "^1.2.0",
+ "readable-stream": "^3.4.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/crc32-stream/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cross-env": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz",
+ "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.1"
+ },
+ "bin": {
+ "cross-env": "src/bin/cross-env.js",
+ "cross-env-shell": "src/bin/cross-env-shell.js"
+ },
+ "engines": {
+ "node": ">=10.14",
+ "npm": ">=6",
+ "yarn": ">=1"
+ }
+ },
+ "node_modules/cross-env/node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cross-env/node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cross-env/node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cross-env/node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cross-env/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "engines": {
+ "node": ">=4.8"
+ }
+ },
+ "node_modules/css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/css-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ },
+ "engines": {
+ "node": ">4"
+ }
+ },
+ "node_modules/css-modules-loader-core": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz",
+ "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=",
+ "dev": true,
+ "dependencies": {
+ "icss-replace-symbols": "1.1.0",
+ "postcss": "6.0.1",
+ "postcss-modules-extract-imports": "1.1.0",
+ "postcss-modules-local-by-default": "1.2.0",
+ "postcss-modules-scope": "1.1.0",
+ "postcss-modules-values": "1.3.0"
+ }
+ },
+ "node_modules/css-modules-loader-core/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/css-modules-loader-core/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/css-modules-loader-core/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/css-modules-loader-core/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/css-modules-loader-core/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/css-modules-loader-core/node_modules/postcss": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
+ "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/css-modules-loader-core/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/css-modules-loader-core/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "node_modules/css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
+ "dev": true
+ },
+ "node_modules/css-selector-tokenizer": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz",
+ "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "fastparse": "^1.1.2"
+ }
+ },
+ "node_modules/css-shorthand-properties": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz",
+ "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==",
+ "dev": true
+ },
+ "node_modules/css-tree": {
+ "version": "1.0.0-alpha.37",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.4",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/css-tree/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/css-value": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz",
+ "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=",
+ "dev": true
+ },
+ "node_modules/css-what": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
+ "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cssnano": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
+ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+ "dev": true,
+ "dependencies": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.7",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/cssnano-preset-default": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
+ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+ "dev": true,
+ "dependencies": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.1",
+ "postcss-colormin": "^4.0.3",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.2",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.11",
+ "postcss-merge-rules": "^4.0.3",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.2",
+ "postcss-minify-params": "^4.0.2",
+ "postcss-minify-selectors": "^4.0.2",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.2",
+ "postcss-normalize-positions": "^4.0.2",
+ "postcss-normalize-repeat-style": "^4.0.2",
+ "postcss-normalize-string": "^4.0.2",
+ "postcss-normalize-timing-functions": "^4.0.2",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.2",
+ "postcss-ordered-values": "^4.1.2",
+ "postcss-reduce-initial": "^4.0.3",
+ "postcss-reduce-transforms": "^4.0.2",
+ "postcss-svgo": "^4.0.2",
+ "postcss-unique-selectors": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "dev": true,
+ "dependencies": {
+ "css-tree": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz",
+ "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+ "node_modules/csso/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz",
+ "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==",
+ "dev": true
+ },
+ "node_modules/custom-event": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+ "dev": true
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/date-format": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz",
+ "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/decompress": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+ "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
+ "dev": true,
+ "dependencies": {
+ "decompress-tar": "^4.0.0",
+ "decompress-tarbz2": "^4.0.0",
+ "decompress-targz": "^4.0.0",
+ "decompress-unzip": "^4.0.1",
+ "graceful-fs": "^4.1.10",
+ "make-dir": "^1.0.0",
+ "pify": "^2.3.0",
+ "strip-dirs": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+ "dev": true,
+ "dependencies": {
+ "mimic-response": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/decompress-tar": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+ "dev": true,
+ "dependencies": {
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0",
+ "tar-stream": "^1.5.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tar/node_modules/bl": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
+ "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/decompress-tar/node_modules/file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tar/node_modules/tar-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+ "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+ "dev": true,
+ "dependencies": {
+ "bl": "^1.0.0",
+ "buffer-alloc": "^1.2.0",
+ "end-of-stream": "^1.0.0",
+ "fs-constants": "^1.0.0",
+ "readable-stream": "^2.3.0",
+ "to-buffer": "^1.1.1",
+ "xtend": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/decompress-tarbz2": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+ "dev": true,
+ "dependencies": {
+ "decompress-tar": "^4.1.0",
+ "file-type": "^6.1.0",
+ "is-stream": "^1.1.0",
+ "seek-bzip": "^1.0.5",
+ "unbzip2-stream": "^1.0.9"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tarbz2/node_modules/file-type": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+ "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-targz": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+ "dev": true,
+ "dependencies": {
+ "decompress-tar": "^4.1.1",
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-targz/node_modules/file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-unzip": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+ "dev": true,
+ "dependencies": {
+ "file-type": "^3.8.0",
+ "get-stream": "^2.2.0",
+ "pify": "^2.3.0",
+ "yauzl": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-unzip/node_modules/file-type": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress-unzip/node_modules/get-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.0.1",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress-unzip/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress/node_modules/make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress/node_modules/make-dir/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+ "dev": true
+ },
+ "node_modules/deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/defer-to-connect": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz",
+ "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "dependencies": {
+ "object-keys": "^1.0.12"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "dev": true,
+ "bin": {
+ "detect-libc": "bin/detect-libc.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+ "dev": true
+ },
+ "node_modules/devtools": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/devtools/-/devtools-6.10.4.tgz",
+ "integrity": "sha512-53LoeU2S4q4cLJGKgo2Or7WU9Kc5RQscC0DbBAZcodkot1lKFbMg/z6/cQTq+XKl4kgYr5VA/s5kzNU7ScBctQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/puppeteer-core": "^2.0.0",
+ "@types/ua-parser-js": "^0.7.33",
+ "@types/uuid": "^8.3.0",
+ "@wdio/config": "6.10.4",
+ "@wdio/logger": "6.10.4",
+ "@wdio/protocols": "6.10.0",
+ "@wdio/utils": "6.10.4",
+ "chrome-launcher": "^0.13.1",
+ "edge-paths": "^2.1.0",
+ "puppeteer-core": "^5.1.0",
+ "ua-parser-js": "^0.7.21",
+ "uuid": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/devtools-protocol": {
+ "version": "0.0.818844",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz",
+ "integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==",
+ "dev": true
+ },
+ "node_modules/devtools/node_modules/uuid": {
+ "version": "8.3.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz",
+ "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==",
+ "dev": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/di": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+ "dev": true
+ },
+ "node_modules/diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-serialize": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+ "dev": true,
+ "dependencies": {
+ "custom-event": "~1.0.0",
+ "ent": "~2.2.0",
+ "extend": "^3.0.0",
+ "void-elements": "^2.0.0"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/domelementtype": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
+ "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==",
+ "dev": true
+ },
+ "node_modules/domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "node_modules/domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/dot-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz",
+ "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "dev": true,
+ "dependencies": {
+ "is-obj": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dot-prop/node_modules/is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/download": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
+ "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
+ "dev": true,
+ "dependencies": {
+ "archive-type": "^4.0.0",
+ "caw": "^2.0.1",
+ "content-disposition": "^0.5.2",
+ "decompress": "^4.2.0",
+ "ext-name": "^5.0.0",
+ "file-type": "^8.1.0",
+ "filenamify": "^2.0.0",
+ "get-stream": "^3.0.0",
+ "got": "^8.3.1",
+ "make-dir": "^1.2.0",
+ "p-event": "^2.1.0",
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/download/node_modules/decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dev": true,
+ "dependencies": {
+ "mimic-response": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/download/node_modules/got": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
+ "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
+ "dev": true,
+ "dependencies": {
+ "@sindresorhus/is": "^0.7.0",
+ "cacheable-request": "^2.1.1",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "into-stream": "^3.1.0",
+ "is-retry-allowed": "^1.1.0",
+ "isurl": "^1.0.0-alpha5",
+ "lowercase-keys": "^1.0.0",
+ "mimic-response": "^1.0.0",
+ "p-cancelable": "^0.4.0",
+ "p-timeout": "^2.0.1",
+ "pify": "^3.0.0",
+ "safe-buffer": "^5.1.1",
+ "timed-out": "^4.0.1",
+ "url-parse-lax": "^3.0.0",
+ "url-to-options": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/download/node_modules/make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/download/node_modules/mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/download/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
+ "dev": true
+ },
+ "node_modules/duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/edge-paths": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-2.1.0.tgz",
+ "integrity": "sha512-ZpIN1Vm5hlo9dkkST/1s8QqPNne2uwk3Plf6HcVUhnpfal0WnDRLdNj/wdQo3xRc+wnN3C25wPpPlV2E6aOunQ==",
+ "dev": true
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.3.314",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.314.tgz",
+ "integrity": "sha512-IKDR/xCxKFhPts7h+VaSXS02Z1mznP3fli1BbXWXeN89i2gCzKraU8qLpEid8YzKcmZdZD3Mly3cn5/lY9xsBQ==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "node_modules/emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/engine.io": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz",
+ "integrity": "sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg==",
+ "dev": true,
+ "dependencies": {
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "0.3.1",
+ "debug": "~4.1.0",
+ "engine.io-parser": "~2.2.0",
+ "ws": "^7.1.2"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/engine.io-client": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz",
+ "integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==",
+ "dev": true,
+ "dependencies": {
+ "component-emitter": "~1.3.0",
+ "component-inherit": "0.0.3",
+ "debug": "~3.1.0",
+ "engine.io-parser": "~2.2.0",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.6",
+ "parseuri": "0.0.6",
+ "ws": "~6.1.0",
+ "xmlhttprequest-ssl": "~1.5.4",
+ "yeast": "0.1.2"
+ }
+ },
+ "node_modules/engine.io-client/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/engine.io-client/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/engine.io-client/node_modules/parseqs": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
+ "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==",
+ "dev": true
+ },
+ "node_modules/engine.io-client/node_modules/parseuri": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
+ "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==",
+ "dev": true
+ },
+ "node_modules/engine.io-client/node_modules/ws": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
+ "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
+ "dev": true,
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "node_modules/engine.io-parser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
+ "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
+ "dev": true,
+ "dependencies": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "~0.0.7",
+ "base64-arraybuffer": "0.1.4",
+ "blob": "0.0.5",
+ "has-binary2": "~1.0.2"
+ }
+ },
+ "node_modules/enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/ent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+ "dev": true
+ },
+ "node_modules/entities": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+ "dev": true
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/errorstacks": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.3.0.tgz",
+ "integrity": "sha512-VjCIUbEyLymy2N1M/uTniewz+j69YC2R7Sp1UiJn04RHwyIniBib6hUZwgmphAAZTOk7LRg/wryGFEJhblEd7Q==",
+ "dev": true
+ },
+ "node_modules/es-abstract": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz",
+ "integrity": "sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA==",
+ "dev": true,
+ "dependencies": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "string.prototype.trimleft": "^2.1.0",
+ "string.prototype.trimright": "^2.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true
+ },
+ "node_modules/es6-promisify": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz",
+ "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==",
+ "dev": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.8.47",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.47.tgz",
+ "integrity": "sha512-4C9pInguP36c9CRDMSb6W1KrMfXrLIQVtI02Vglc43RBV0Dw49ODEnP6985mrz5iqCdQ2Cxmb9i670J/s3DBPA==",
+ "dev": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "5.15.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.1.tgz",
+ "integrity": "sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.9.1",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^4.0.2",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^5.0.1",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.2.2",
+ "js-yaml": "^3.12.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.11",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^6.14.0 || ^8.10.0 || >=9.10.0"
+ }
+ },
+ "node_modules/eslint-config-developit": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-developit/-/eslint-config-developit-1.1.1.tgz",
+ "integrity": "sha512-Wc2jbDhWixq9IDfFBVcFHYaOo2i3qwdVH236jQKsiNpJlfErxm0KDT5SWZiDSWU/h6ppHsru94W3DGbUg/MjzA==",
+ "dev": true,
+ "dependencies": {
+ "babel-eslint": "^8.0.3",
+ "eslint-plugin-compat": "^2.1.0",
+ "eslint-plugin-jest": "^21.4.2",
+ "eslint-plugin-mocha": "^4.0.0",
+ "eslint-plugin-react": "^7.0.0"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz",
+ "integrity": "sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==",
+ "dev": true,
+ "dependencies": {
+ "get-stdin": "^6.0.0"
+ },
+ "bin": {
+ "eslint-config-prettier-check": "bin/cli.js"
+ }
+ },
+ "node_modules/eslint-plugin-compat": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-2.7.0.tgz",
+ "integrity": "sha512-3J4Ic1WS+SgF1smUOc62fdf7Cnrdsg0GNwKmGVPziPtWdrc2vV5Oq2ut4kG6SM5DJcxOoz/sWJIN7rkcsWh60Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "browserslist": "^4.4.1",
+ "caniuse-db": "^1.0.30000935",
+ "mdn-browser-compat-data": "^0.0.65"
+ },
+ "engines": {
+ "node": ">=8.x",
+ "npm": ">=6.7.0"
+ }
+ },
+ "node_modules/eslint-plugin-jest": {
+ "version": "21.27.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-21.27.2.tgz",
+ "integrity": "sha512-0E4OIgBJVlAmf1KfYFtZ3gYxgUzC5Eb3Jzmrc9ikI1OY+/cM8Kh72Ti7KfpeHNeD3HJNf9SmEfmvQLIz44Hrhw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/eslint-plugin-mocha": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-4.12.1.tgz",
+ "integrity": "sha512-hxWtYHvLA0p/PKymRfDYh9Mxt5dYkg2Goy1vZDarTEEYfELP9ksga7kKG1NUKSQy27C8Qjc7YrSWTLUhOEOksA==",
+ "dev": true,
+ "dependencies": {
+ "ramda": "^0.25.0"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.12.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz",
+ "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.0.3",
+ "doctrine": "^2.1.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.0.1",
+ "object.fromentries": "^2.0.0",
+ "prop-types": "^15.6.2",
+ "resolve": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/espree": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^6.0.7",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
+ "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
+ "dev": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "dev": true
+ },
+ "node_modules/execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/execa/node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/executable/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/exit-on-epipe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
+ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "dependencies": {
+ "is-posix-bracket": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-range/node_modules/fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-range/node_modules/is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-range/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ext-list": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
+ "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "^1.28.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ext-name": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
+ "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
+ "dev": true,
+ "dependencies": {
+ "ext-list": "^2.0.0",
+ "sort-keys-length": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "dependencies": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/extract-zip/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "node_modules/fastparse": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
+ "dev": true
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "dev": true,
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/file-type": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
+ "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/filename-reserved-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
+ "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/filenamify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
+ "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
+ "dev": true,
+ "dependencies": {
+ "filename-reserved-regex": "^2.0.0",
+ "strip-outer": "^1.0.0",
+ "trim-repeated": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/finalhandler/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "dev": true
+ },
+ "node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/find-versions": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
+ "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
+ "dev": true,
+ "dependencies": {
+ "semver-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true,
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+ "dev": true
+ },
+ "node_modules/flatten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
+ "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==",
+ "dev": true
+ },
+ "node_modules/flow-remove-types": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-1.2.3.tgz",
+ "integrity": "sha512-ypq/U3V+t9atYiOuSJd40tekCra03EHKoRsiK/wXGrsZimuum0kdwVY7Yv0HTaoXgHW1WiayomYd+Q3kkvPl9Q==",
+ "dev": true,
+ "dependencies": {
+ "babylon": "^6.15.0",
+ "vlq": "^0.2.1"
+ },
+ "bin": {
+ "flow-node": "flow-node",
+ "flow-remove-types": "flow-remove-types"
+ }
+ },
+ "node_modules/flow-remove-types/node_modules/babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true,
+ "bin": {
+ "babylon": "bin/babylon.js"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz",
+ "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true
+ },
+ "node_modules/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "node_modules/gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "dependencies": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "node_modules/gauge/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gauge/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gauge/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gauge/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/generic-names": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz",
+ "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": "^1.1.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
+ "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "node_modules/get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
+ "dev": true
+ },
+ "node_modules/get-port": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
+ "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/get-proxy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
+ "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
+ "dev": true,
+ "dependencies": {
+ "npm-conf": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/get-stdin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/github-from-package": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
+ "dev": true
+ },
+ "node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "dependencies": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob-base/node_modules/glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "node_modules/glob-base/node_modules/is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob-base/node_modules/is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/global-agent": {
+ "version": "2.1.12",
+ "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz",
+ "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==",
+ "dev": true,
+ "dependencies": {
+ "boolean": "^3.0.1",
+ "core-js": "^3.6.5",
+ "es6-error": "^4.1.1",
+ "matcher": "^3.0.0",
+ "roarr": "^2.15.3",
+ "semver": "^7.3.2",
+ "serialize-error": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=10.0"
+ }
+ },
+ "node_modules/global-agent/node_modules/core-js": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.0.tgz",
+ "integrity": "sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==",
+ "dev": true
+ },
+ "node_modules/global-agent/node_modules/semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz",
+ "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
+ "dev": true
+ },
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "node_modules/got": {
+ "version": "11.8.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-11.8.0.tgz",
+ "integrity": "sha512-k9noyoIIY9EejuhaBNLyZ31D5328LeqnyPNXJQb2XlJZcKakLqN5m6O/ikhq/0lw56kUYS54fVm+D1x57YC9oQ==",
+ "dev": true,
+ "dependencies": {
+ "@sindresorhus/is": "^4.0.0",
+ "@szmarczak/http-timer": "^4.0.5",
+ "@types/cacheable-request": "^6.0.1",
+ "@types/responselike": "^1.0.0",
+ "cacheable-lookup": "^5.0.3",
+ "cacheable-request": "^7.0.1",
+ "decompress-response": "^6.0.0",
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ }
+ },
+ "node_modules/got/node_modules/@sindresorhus/is": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
+ "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/got/node_modules/cacheable-request": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz",
+ "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==",
+ "dev": true,
+ "dependencies": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^4.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^4.1.0",
+ "responselike": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/got/node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/got/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/got/node_modules/http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+ "dev": true
+ },
+ "node_modules/got/node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/got/node_modules/keyv": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
+ "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/got/node_modules/lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/got/node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/got/node_modules/normalize-url": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/got/node_modules/p-cancelable": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
+ "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/got/node_modules/responselike": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
+ "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
+ "dev": true,
+ "dependencies": {
+ "lowercase-keys": "^2.0.0"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
+ "dev": true
+ },
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "node_modules/growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.x"
+ }
+ },
+ "node_modules/gzip-size": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
+ "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
+ "dev": true,
+ "dependencies": {
+ "duplexer": "^0.1.1",
+ "pify": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/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==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-ansi/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-binary2": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+ "dev": true,
+ "dependencies": {
+ "isarray": "2.0.1"
+ }
+ },
+ "node_modules/has-binary2/node_modules/isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ },
+ "node_modules/has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "dev": true
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-symbol-support-x": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
+ "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/has-to-string-tag-x": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
+ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
+ "dev": true,
+ "dependencies": {
+ "has-symbol-support-x": "^1.4.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "node_modules/hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/header-case": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.3.tgz",
+ "integrity": "sha512-LChe/V32mnUQnTwTxd3aAlNMk8ia9tjCDb/LjYtoMrdAPApxLB+azejUk5ERZIZdIqvinwv6BAUuFXH/tQPdZA==",
+ "dev": true,
+ "dependencies": {
+ "capital-case": "^1.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
+ "dev": true
+ },
+ "node_modules/hosted-git-info": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
+ "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
+ "dev": true
+ },
+ "node_modules/hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+ "dev": true
+ },
+ "node_modules/hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+ "dev": true
+ },
+ "node_modules/html-comment-regex": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
+ "dev": true
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==",
+ "dev": true
+ },
+ "node_modules/http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/http-errors/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/http2-wrapper": {
+ "version": "1.0.0-beta.5.2",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz",
+ "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==",
+ "dev": true,
+ "dependencies": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
+ "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "5",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.12.0"
+ }
+ },
+ "node_modules/husky": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.0.tgz",
+ "integrity": "sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "ci-info": "^2.0.0",
+ "compare-versions": "^3.6.0",
+ "cosmiconfig": "^7.0.0",
+ "find-versions": "^3.2.0",
+ "opencollective-postinstall": "^2.0.2",
+ "pkg-dir": "^4.2.0",
+ "please-upgrade-node": "^3.2.0",
+ "slash": "^3.0.0",
+ "which-pm-runs": "^1.0.0"
+ },
+ "bin": {
+ "husky-run": "bin/run.js",
+ "husky-upgrade": "lib/upgrader/bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/husky/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/husky/node_modules/chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/husky/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/husky/node_modules/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
+ },
+ "node_modules/husky/node_modules/cosmiconfig": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+ "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+ "dev": true,
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/husky/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/husky/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/husky/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/husky/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/husky/node_modules/parse-json": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
+ "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/husky/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/husky/node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/husky/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/husky/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/icss-replace-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
+ "dev": true
+ },
+ "node_modules/ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+ "dev": true
+ },
+ "node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/iltorb": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.5.tgz",
+ "integrity": "sha512-EMCMl3LnnNSZJS5QrxyZmMTaAC4+TJkM5woD+xbpm9RB+mFYCr7C05GFE3TEGCsVQSVHmjX+3sf5AiwsylNInQ==",
+ "dev": true,
+ "dependencies": {
+ "detect-libc": "^1.0.3",
+ "nan": "^2.14.0",
+ "npmlog": "^4.1.2",
+ "prebuild-install": "^5.3.3",
+ "which-pm-runs": "^1.0.0"
+ }
+ },
+ "node_modules/import-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+ "dev": true,
+ "dependencies": {
+ "import-from": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/import-from": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/import-from/node_modules/resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/import-lazy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
+ "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "node_modules/indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/inquirer": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.12",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.4.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.1.0",
+ "through": "^2.3.6"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/inquirer/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/inquirer/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/into-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
+ "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
+ "dev": true,
+ "dependencies": {
+ "from2": "^2.1.1",
+ "p-is-promise": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "node_modules/is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "dev": true,
+ "dependencies": {
+ "ci-info": "^1.5.0"
+ },
+ "bin": {
+ "is-ci": "bin.js"
+ }
+ },
+ "node_modules/is-ci/node_modules/ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+ "dev": true
+ },
+ "node_modules/is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "dev": true,
+ "dependencies": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
+ "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
+ "dev": true,
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "dependencies": {
+ "is-primitive": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
+ "dev": true
+ },
+ "node_modules/is-natural-number": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
+ "dev": true
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
+ "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+ "dev": true
+ },
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "node_modules/is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "node_modules/is-retry-allowed": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
+ "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-svg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+ "dev": true,
+ "dependencies": {
+ "html-comment-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "node_modules/isbinaryfile": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz",
+ "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
+ "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz",
+ "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.7.5",
+ "@babel/parser": "^7.7.5",
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/core": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz",
+ "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.8.4",
+ "@babel/helpers": "^7.8.4",
+ "@babel/parser": "^7.8.4",
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.4",
+ "@babel/types": "^7.8.3",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/core/node_modules/@babel/template": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
+ "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/core/node_modules/@babel/traverse": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
+ "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.8.4",
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/parser": "^7.8.4",
+ "@babel/types": "^7.8.3",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/core/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/generator": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
+ "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.8.3",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-function-name/node_modules/@babel/template": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
+ "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/helpers": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz",
+ "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.4",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/helpers/node_modules/@babel/template": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
+ "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/helpers/node_modules/@babel/traverse": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
+ "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.8.4",
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/parser": "^7.8.4",
+ "@babel/types": "^7.8.3",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/parser": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz",
+ "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
+ "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
+ "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "dev": true,
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isurl": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
+ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+ "dev": true,
+ "dependencies": {
+ "has-to-string-tag-x": "^1.2.0",
+ "is-object": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz",
+ "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=",
+ "dev": true,
+ "dependencies": {
+ "merge-stream": "^1.0.1"
+ }
+ },
+ "node_modules/jest-worker/node_modules/merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "node_modules/js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
+ "node_modules/js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+ "dev": true
+ },
+ "node_modules/json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
+ "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz",
+ "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.0.3",
+ "object.assign": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/just-extend": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.1.tgz",
+ "integrity": "sha512-aWgeGFW67BP3e5181Ep1Fv2v8z//iBJfrvyTnq8wG86vEESwmonn1zPBJ0VfmT9CJq2FIT0VsETtrNFm2a+SHA==",
+ "dev": true
+ },
+ "node_modules/karma": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-5.2.3.tgz",
+ "integrity": "sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ==",
+ "dev": true,
+ "dependencies": {
+ "body-parser": "^1.19.0",
+ "braces": "^3.0.2",
+ "chokidar": "^3.4.2",
+ "colors": "^1.4.0",
+ "connect": "^3.7.0",
+ "di": "^0.0.1",
+ "dom-serialize": "^2.2.1",
+ "glob": "^7.1.6",
+ "graceful-fs": "^4.2.4",
+ "http-proxy": "^1.18.1",
+ "isbinaryfile": "^4.0.6",
+ "lodash": "^4.17.19",
+ "log4js": "^6.2.1",
+ "mime": "^2.4.5",
+ "minimatch": "^3.0.4",
+ "qjobs": "^1.2.0",
+ "range-parser": "^1.2.1",
+ "rimraf": "^3.0.2",
+ "socket.io": "^2.3.0",
+ "source-map": "^0.6.1",
+ "tmp": "0.2.1",
+ "ua-parser-js": "0.7.22",
+ "yargs": "^15.3.1"
+ },
+ "bin": {
+ "karma": "bin/karma"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/karma-chai-sinon": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/karma-chai-sinon/-/karma-chai-sinon-0.1.5.tgz",
+ "integrity": "sha1-XDksqVJHgYlR1rV5AvAsNugDdTo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/karma-chrome-launcher": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz",
+ "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==",
+ "dev": true,
+ "dependencies": {
+ "which": "^1.2.1"
+ }
+ },
+ "node_modules/karma-coverage": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz",
+ "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==",
+ "dev": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.1",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.0",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/karma-esbuild": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/karma-esbuild/-/karma-esbuild-2.2.0.tgz",
+ "integrity": "sha512-6dZSoKHod2YJzQSe5sbUhXFuuLR8TIJXGRRxf4ZOgBzk34WTtasBS7+eRDbVRjp/hryULvhD06Vx7bo/veg8Yw==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": "^3.5.1",
+ "source-map": "0.6.1"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.8.45"
+ }
+ },
+ "node_modules/karma-esbuild/node_modules/chokidar": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+ "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.1"
+ }
+ },
+ "node_modules/karma-esbuild/node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/karma-esbuild/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/karma-mocha": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz",
+ "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.3"
+ }
+ },
+ "node_modules/karma-mocha-reporter": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
+ "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.1.0",
+ "log-symbols": "^2.1.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "node_modules/karma-sauce-launcher": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-4.3.4.tgz",
+ "integrity": "sha512-sXka3l3Z9x+UhGMsg0fU+i+Jq82j7tfApMrAupM8JxO8ZskmSCozUM4cffLTwuzJPYjf0ffFNu3Up5Pzr26N/g==",
+ "dev": true,
+ "dependencies": {
+ "fs-extra": "^9.0.1",
+ "global-agent": "^2.1.12",
+ "saucelabs": "^4.5.1",
+ "webdriverio": "^6.7.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/karma-sauce-launcher/node_modules/fs-extra": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
+ "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
+ "dev": true,
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/karma-sauce-launcher/node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "node_modules/karma-sauce-launcher/node_modules/jsonfile/node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/karma-sauce-launcher/node_modules/universalify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
+ "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/karma-sinon": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz",
+ "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/karma-sourcemap-loader": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz",
+ "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "node_modules/karma/node_modules/graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+ "dev": true
+ },
+ "node_modules/karma/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/karma/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/karma/node_modules/tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
+ "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+ "dev": true,
+ "dependencies": {
+ "rimraf": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.17.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
+ "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/kolorist": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.2.10.tgz",
+ "integrity": "sha512-S3QtGjCHyINclP4LSClgHw4gi/NxTFcSorqD9SWfrREHKtMyGfi6pyDCTbpQaqyZrMAjB4Exde8eco6kejkqQg==",
+ "dev": true
+ },
+ "node_modules/lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
+ }
+ },
+ "node_modules/lcov-parse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
+ "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=",
+ "dev": true,
+ "bin": {
+ "lcov-parse": "bin/cli.js"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lighthouse-logger": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz",
+ "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^2.6.8",
+ "marky": "^1.2.0"
+ }
+ },
+ "node_modules/lighthouse-logger/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/lighthouse-logger/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+ "dev": true
+ },
+ "node_modules/lint-staged": {
+ "version": "10.5.2",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.2.tgz",
+ "integrity": "sha512-e8AYR1TDlzwB8VVd38Xu2lXDZf6BcshVqKVuBQThDJRaJLobqKnpbm4dkwJ2puypQNbLr9KF/9mfA649mAGvjA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "cli-truncate": "^2.1.0",
+ "commander": "^6.2.0",
+ "cosmiconfig": "^7.0.0",
+ "debug": "^4.2.0",
+ "dedent": "^0.7.0",
+ "enquirer": "^2.3.6",
+ "execa": "^4.1.0",
+ "listr2": "^3.2.2",
+ "log-symbols": "^4.0.0",
+ "micromatch": "^4.0.2",
+ "normalize-path": "^3.0.0",
+ "please-upgrade-node": "^3.2.0",
+ "string-argv": "0.3.1",
+ "stringify-object": "^3.3.0"
+ },
+ "bin": {
+ "lint-staged": "bin/lint-staged.js"
+ }
+ },
+ "node_modules/lint-staged/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lint-staged/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/lint-staged/node_modules/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
+ },
+ "node_modules/lint-staged/node_modules/commander": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz",
+ "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/lint-staged/node_modules/cosmiconfig": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+ "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+ "dev": true,
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lint-staged/node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/lint-staged/node_modules/execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lint-staged/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/log-symbols": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
+ "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lint-staged/node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lint-staged/node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lint-staged/node_modules/parse-json": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
+ "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lint-staged/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/listr2": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.2.3.tgz",
+ "integrity": "sha512-vUb80S2dSUi8YxXahO8/I/s29GqnOL8ozgHVLjfWQXa03BNEeS1TpBLjh2ruaqq5ufx46BRGvfymdBSuoXET5w==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "cli-truncate": "^2.1.0",
+ "figures": "^3.2.0",
+ "indent-string": "^4.0.0",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rxjs": "^6.6.3",
+ "through": "^2.3.8"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/listr2/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/listr2/node_modules/chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/listr2/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/listr2/node_modules/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
+ },
+ "node_modules/listr2/node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/listr2/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/listr2/node_modules/rxjs": {
+ "version": "6.6.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
+ "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
+ "node_modules/listr2/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/load-json-file/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/loader-utils/node_modules/json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+ "dev": true
+ },
+ "node_modules/lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "node_modules/lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "node_modules/lodash.difference": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
+ "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=",
+ "dev": true
+ },
+ "node_modules/lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+ "dev": true
+ },
+ "node_modules/lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
+ "dev": true
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "node_modules/lodash.isobject": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
+ "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=",
+ "dev": true
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+ "dev": true
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.sumby": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.sumby/-/lodash.sumby-4.6.0.tgz",
+ "integrity": "sha1-fYdzfdshbaL35efNLdnEA6eIc0Y=",
+ "dev": true
+ },
+ "node_modules/lodash.union": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
+ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=",
+ "dev": true
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "node_modules/lodash.zip": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz",
+ "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=",
+ "dev": true
+ },
+ "node_modules/log-driver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
+ "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.6"
+ }
+ },
+ "node_modules/log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-escapes": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
+ "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.11.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/log-update/node_modules/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
+ },
+ "node_modules/log-update/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/log-update/node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/log-update/node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/log-update/node_modules/type-fest": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
+ "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log4js": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz",
+ "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==",
+ "dev": true,
+ "dependencies": {
+ "date-format": "^3.0.0",
+ "debug": "^4.1.1",
+ "flatted": "^2.0.1",
+ "rfdc": "^1.1.4",
+ "streamroller": "^2.2.4"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/loglevel": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz",
+ "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/loglevel-plugin-prefix": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz",
+ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
+ "dev": true
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lower-case": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz",
+ "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.25.7",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
+ "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+ "dev": true,
+ "dependencies": {
+ "sourcemap-codec": "^1.4.4"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/marky": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz",
+ "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==",
+ "dev": true
+ },
+ "node_modules/matcher": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
+ "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/matcher/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/math-expression-evaluator": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.3.3.tgz",
+ "integrity": "sha512-geKTlqoxnjqHoWqB71h0kchWIC23a3yfwwbZu4E2amjvGLF+fTjCCwBQOHkE0/oHc6KdnSVmMt3QB82KaPmKEA==",
+ "dev": true
+ },
+ "node_modules/math-random": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+ "dev": true
+ },
+ "node_modules/maxmin": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz",
+ "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.0.0",
+ "figures": "^1.0.1",
+ "gzip-size": "^3.0.0",
+ "pretty-bytes": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/maxmin/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "dev": true,
+ "dependencies": {
+ "duplexer": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/pretty-bytes": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
+ "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
+ "dev": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/mdn-browser-compat-data": {
+ "version": "0.0.65",
+ "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-0.0.65.tgz",
+ "integrity": "sha512-OC27wWCLD2mw2aW6+8zZTwCv0+9WMTOFxuvTBfWoCx8f9gVFNUXHxGYA16mhKyso7hEa4tw1hY+ruCB/kg3EzQ==",
+ "dev": true,
+ "dependencies": {
+ "extend": "3.0.2"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
+ "dev": true
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/memorystream": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/microbundle": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/microbundle/-/microbundle-0.11.0.tgz",
+ "integrity": "sha512-Lt2f8OhC2y2uKyJ5zA8lEEiDsIAbk6yllBuoAWLIdYVIXYqOdN9mO3DI7VW7x/fw87gdnCLIJdVtpP6kaI99LA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.2.2",
+ "@babel/plugin-proposal-class-properties": "7.2.1",
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@babel/polyfill": "^7.0.0",
+ "asyncro": "^3.0.0",
+ "autoprefixer": "^9.0.0",
+ "babel-plugin-transform-async-to-promises": "^0.8.3",
+ "brotli-size": "^0.0.3",
+ "camelcase": "^5.0.0",
+ "chalk": "^2.4.0",
+ "cssnano": "^4.1.7",
+ "es6-promisify": "^6.0.1",
+ "gzip-size": "^5.0.0",
+ "pretty-bytes": "^5.1.0",
+ "rollup": "^0.67.3",
+ "rollup-plugin-alias": "^1.5.1",
+ "rollup-plugin-babel": "^4.1.0-0",
+ "rollup-plugin-buble": "^0.19.4",
+ "rollup-plugin-bundle-size": "^1.0.1",
+ "rollup-plugin-commonjs": "^9.0.0",
+ "rollup-plugin-es3": "^1.1.0",
+ "rollup-plugin-flow": "^1.1.1",
+ "rollup-plugin-json": "^3.1.0",
+ "rollup-plugin-node-resolve": "^4.0.0",
+ "rollup-plugin-postcss": "^1.6.1",
+ "rollup-plugin-preserve-shebang": "^0.1.6",
+ "rollup-plugin-sizes": "^0.4.2",
+ "rollup-plugin-terser": "^3.0.0",
+ "rollup-plugin-typescript2": "^0.19.0",
+ "sade": "^1.4.0",
+ "tiny-glob": "^0.2.6",
+ "tslib": "^1.9.0",
+ "typescript": ">=2.8.3"
+ },
+ "bin": {
+ "microbundle": "dist/cli.js"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mime": {
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+ "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.42.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz",
+ "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.25",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz",
+ "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "1.42.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true
+ },
+ "node_modules/mocha": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz",
+ "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==",
+ "dev": true,
+ "dependencies": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.4.3",
+ "debug": "4.2.0",
+ "diff": "4.0.2",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.1.6",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "3.14.0",
+ "log-symbols": "4.0.0",
+ "minimatch": "3.0.4",
+ "ms": "2.1.2",
+ "nanoid": "3.1.12",
+ "serialize-javascript": "5.0.1",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "7.2.0",
+ "which": "2.0.2",
+ "wide-align": "1.1.3",
+ "workerpool": "6.0.2",
+ "yargs": "13.3.2",
+ "yargs-parser": "13.1.2",
+ "yargs-unparser": "2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha"
+ },
+ "engines": {
+ "node": ">= 10.12.0"
+ }
+ },
+ "node_modules/mocha/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "node_modules/mocha/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/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
+ },
+ "node_modules/mocha/node_modules/debug": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
+ "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/mocha/node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/mocha/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/js-yaml": {
+ "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,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/mocha/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/log-symbols": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
+ "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/serialize-javascript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+ "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/mocha/node_modules/string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/strip-json-comments": {
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/mocha/node_modules/wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/wrap-ansi/node_modules/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,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mocha/node_modules/wrap-ansi/node_modules/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,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/mocha/node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/module-details-from-path": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
+ "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=",
+ "dev": true
+ },
+ "node_modules/mri": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz",
+ "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/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
+ },
+ "node_modules/mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "node_modules/nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.1.12",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz",
+ "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/napi-build-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+ "dev": true
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node_modules/nise": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-4.0.4.tgz",
+ "integrity": "sha512-bTTRUNlemx6deJa+ZyoCUTRvH3liK5+N6VQZ4NIw90AgDXY6iPnsqplNFf6STcj+ePk0H/xqxnP75Lr0J0Fq3A==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.7.0",
+ "@sinonjs/fake-timers": "^6.0.0",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
+ }
+ },
+ "node_modules/no-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz",
+ "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==",
+ "dev": true,
+ "dependencies": {
+ "lower-case": "^2.0.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/node-abi": {
+ "version": "2.19.3",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz",
+ "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^5.4.1"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
+ "dev": true,
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ }
+ },
+ "node_modules/node-modules-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
+ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "1.1.41",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.41.tgz",
+ "integrity": "sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.3.0"
+ }
+ },
+ "node_modules/node-releases/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/noop-logger": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
+ "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=",
+ "dev": true
+ },
+ "node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm-conf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+ "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+ "dev": true,
+ "dependencies": {
+ "config-chain": "^1.1.11",
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-conf/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/npm-merge-driver/-/npm-merge-driver-2.3.6.tgz",
+ "integrity": "sha512-uPjCEWZ93f379zw0AMEgFtZIlpSSnpXc8BEIcs8yYHEZs5Y3d85OZHisLjNhjbYnbdAznxTq+VbyBWAQZDEm9w==",
+ "dev": true,
+ "dependencies": {
+ "mkdirp": "^0.5.1",
+ "yargs": "^10.0.3"
+ },
+ "bin": {
+ "npm-merge-driver": "index.js"
+ }
+ },
+ "node_modules/npm-merge-driver-install": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/npm-merge-driver-install/-/npm-merge-driver-install-1.1.1.tgz",
+ "integrity": "sha512-QoEoJ1SAkkVPoZ9p84yel5xiMeXXqpkw1KwA8hP0iVO/NWZUYYgTUkXRL54YJ7HyLK3aTaiQrRVfpPpb9Cm/FA==",
+ "dev": true,
+ "dependencies": {
+ "find-root": "^1.1.0",
+ "is-ci": "^1.2.0",
+ "npm-merge-driver": "^2.3.5"
+ },
+ "bin": {
+ "npm-merge-driver-install": "index.js"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "dependencies": {
+ "invert-kv": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "dependencies": {
+ "minimist": "0.0.8"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "node_modules/npm-merge-driver/node_modules/yargs": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz",
+ "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^8.0.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/yargs-parser": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.0.0.tgz",
+ "integrity": "sha1-IdR2Mw5agieaS4gTRb8GYQLiGcY=",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^4.1.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/yargs-parser/node_modules/camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/yargs/node_modules/ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/yargs/node_modules/cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/yargs/node_modules/cliui/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/yargs/node_modules/string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/yargs/node_modules/string-width/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-merge-driver/node_modules/yargs/node_modules/string-width/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-all": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
+ "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "chalk": "^2.4.1",
+ "cross-spawn": "^6.0.5",
+ "memorystream": "^0.3.1",
+ "minimatch": "^3.0.4",
+ "pidtree": "^0.3.0",
+ "read-pkg": "^3.0.0",
+ "shell-quote": "^1.6.1",
+ "string.prototype.padend": "^3.0.0"
+ },
+ "bin": {
+ "npm-run-all": "bin/npm-run-all/index.js",
+ "run-p": "bin/run-p/index.js",
+ "run-s": "bin/run-s/index.js"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "dependencies": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "node_modules/num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "node_modules/object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz",
+ "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.15.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.getownpropertydescriptors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz",
+ "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/object.getownpropertydescriptors/node_modules/es-abstract": {
+ "version": "1.18.0-next.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+ "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+ "dev": true,
+ "dependencies": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-negative-zero": "^2.0.0",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.getownpropertydescriptors/node_modules/is-callable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
+ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.getownpropertydescriptors/node_modules/is-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+ "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.getownpropertydescriptors/node_modules/object-inspect": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+ "dev": true
+ },
+ "node_modules/object.getownpropertydescriptors/node_modules/object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "dependencies": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz",
+ "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1",
+ "has": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values/node_modules/es-abstract": {
+ "version": "1.18.0-next.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+ "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+ "dev": true,
+ "dependencies": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-negative-zero": "^2.0.0",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values/node_modules/is-callable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
+ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values/node_modules/is-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+ "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values/node_modules/object-inspect": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+ "dev": true
+ },
+ "node_modules/object.values/node_modules/object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/opencollective-postinstall": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+ "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
+ "dev": true,
+ "bin": {
+ "opencollective-postinstall": "index.js"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/os-filter-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
+ "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
+ "dev": true,
+ "dependencies": {
+ "arch": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/os-homedir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-2.0.0.tgz",
+ "integrity": "sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/p-cancelable": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
+ "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-event": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz",
+ "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
+ "dev": true,
+ "dependencies": {
+ "p-timeout": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-is-promise": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+ "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/p-queue": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.2.tgz",
+ "integrity": "sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+ "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+ "dev": true,
+ "dependencies": {
+ "p-finally": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/param-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz",
+ "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "dependencies": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-glob/node_modules/is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-glob/node_modules/is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "dependencies": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "node_modules/parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "dependencies": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pascal-case": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz",
+ "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/path-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.3.tgz",
+ "integrity": "sha512-UMFU6UETFpCNWbIWNczshPrnK/7JAXBP2NYw80ojElbQ2+JYxdqWDBkvvqM93u4u6oLmuJ/tPOf2tM8KtXv4eg==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/path-to-regexp/node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/path-type/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/pidtree": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz",
+ "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==",
+ "dev": true,
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
+ "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+ "dev": true,
+ "dependencies": {
+ "node-modules-regexp": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/platform": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz",
+ "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==",
+ "dev": true
+ },
+ "node_modules/please-upgrade-node": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+ "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+ "dev": true,
+ "dependencies": {
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "7.0.35",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+ "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/postcss-calc": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz",
+ "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.27",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "node_modules/postcss-colormin": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-colormin/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-convert-values/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-discard-comments": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.14",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "node_modules/postcss-discard-unused/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-discard-unused/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-discard-unused/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-discard-unused/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss-discard-unused/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-discard-unused/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-discard-unused/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-discard-unused/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss-filter-plugins": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
+ "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "node_modules/postcss-filter-plugins/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-filter-plugins/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-filter-plugins/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-filter-plugins/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss-filter-plugins/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-filter-plugins/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-filter-plugins/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-filter-plugins/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz",
+ "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
+ "dev": true,
+ "dependencies": {
+ "cosmiconfig": "^2.1.0",
+ "object-assign": "^4.1.0",
+ "postcss-load-options": "^1.2.0",
+ "postcss-load-plugins": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-load-config/node_modules/cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "dependencies": {
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.4.3",
+ "minimist": "^1.2.0",
+ "object-assign": "^4.1.0",
+ "os-homedir": "^1.0.1",
+ "parse-json": "^2.2.0",
+ "require-from-string": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-load-config/node_modules/os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-load-config/node_modules/parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-load-options": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz",
+ "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
+ "dev": true,
+ "dependencies": {
+ "cosmiconfig": "^2.1.0",
+ "object-assign": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-load-options/node_modules/cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "dependencies": {
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.4.3",
+ "minimist": "^1.2.0",
+ "object-assign": "^4.1.0",
+ "os-homedir": "^1.0.1",
+ "parse-json": "^2.2.0",
+ "require-from-string": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-load-options/node_modules/os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-load-options/node_modules/parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-load-plugins": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz",
+ "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
+ "dev": true,
+ "dependencies": {
+ "cosmiconfig": "^2.1.1",
+ "object-assign": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-load-plugins/node_modules/cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "dependencies": {
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.4.3",
+ "minimist": "^1.2.0",
+ "object-assign": "^4.1.0",
+ "os-homedir": "^1.0.1",
+ "parse-json": "^2.2.0",
+ "require-from-string": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-load-plugins/node_modules/os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-load-plugins/node_modules/parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.10",
+ "postcss-value-parser": "^3.1.1"
+ }
+ },
+ "node_modules/postcss-merge-idents/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-merge-idents/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-merge-idents/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-merge-idents/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss-merge-idents/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-merge-idents/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-merge-idents/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-merge-idents/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-merge-idents/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss-merge-longhand": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+ "dev": true,
+ "dependencies": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-merge-rules": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "dev": true,
+ "dependencies": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
+ "dev": true
+ },
+ "node_modules/postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-minify-gradients": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-minify-params": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-minify-params/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-minify-selectors": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "dev": true,
+ "dependencies": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/postcss-modules": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-1.5.0.tgz",
+ "integrity": "sha512-KiAihzcV0TxTTNA5OXreyIXctuHOfR50WIhqBpc8pe0Q5dcs/Uap9EVlifOI9am7zGGdGOJQ6B1MPYKo2UxgOg==",
+ "dev": true,
+ "dependencies": {
+ "css-modules-loader-core": "^1.1.0",
+ "generic-names": "^2.0.1",
+ "lodash.camelcase": "^4.3.0",
+ "postcss": "^7.0.1",
+ "string-hash": "^1.1.1"
+ }
+ },
+ "node_modules/postcss-modules-extract-imports": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
+ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^6.0.1"
+ }
+ },
+ "node_modules/postcss-modules-extract-imports/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/postcss-modules-extract-imports/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-modules-local-by-default": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
+ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+ "dev": true,
+ "dependencies": {
+ "css-selector-tokenizer": "^0.7.0",
+ "postcss": "^6.0.1"
+ }
+ },
+ "node_modules/postcss-modules-local-by-default/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/postcss-modules-local-by-default/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-modules-scope": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
+ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+ "dev": true,
+ "dependencies": {
+ "css-selector-tokenizer": "^0.7.0",
+ "postcss": "^6.0.1"
+ }
+ },
+ "node_modules/postcss-modules-scope/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/postcss-modules-scope/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-modules-values": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
+ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+ "dev": true,
+ "dependencies": {
+ "icss-replace-symbols": "^1.1.0",
+ "postcss": "^6.0.1"
+ }
+ },
+ "node_modules/postcss-modules-values/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/postcss-modules-values/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-normalize-display-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-normalize-positions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-normalize-repeat-style": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-normalize-string": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-normalize-timing-functions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "dev": true,
+ "dependencies": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-normalize-whitespace": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-ordered-values": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ }
+ },
+ "node_modules/postcss-reduce-idents/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-reduce-idents/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-reduce-idents/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-reduce-idents/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss-reduce-idents/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-reduce-idents/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-reduce-idents/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-reduce-idents/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-reduce-idents/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss-reduce-initial": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-reduce-transforms": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
+ "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-svgo": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
+ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+ "dev": true,
+ "dependencies": {
+ "is-svg": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-svgo/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "uniqs": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
+ "dev": true
+ },
+ "node_modules/postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "node_modules/postcss-zindex/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-zindex/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-zindex/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-zindex/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss-zindex/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-zindex/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/postcss-zindex/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-zindex/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/postcss/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss/node_modules/supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/prebuild-install": {
+ "version": "5.3.6",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz",
+ "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==",
+ "dev": true,
+ "dependencies": {
+ "detect-libc": "^1.0.3",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^2.7.0",
+ "noop-logger": "^0.1.1",
+ "npmlog": "^4.0.1",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^3.0.3",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0",
+ "which-pm-runs": "^1.0.0"
+ },
+ "bin": {
+ "prebuild-install": "bin.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+ "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pretty-bytes": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.4.1.tgz",
+ "integrity": "sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/printj": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
+ "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
+ "dev": true,
+ "bin": {
+ "printj": "bin/printj.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/promise.series": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz",
+ "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "dev": true
+ },
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "node_modules/psl": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
+ "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==",
+ "dev": true
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/puppeteer-core": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-5.5.0.tgz",
+ "integrity": "sha512-tlA+1n+ziW/Db03hVV+bAecDKse8ihFRXYiEypBe9IlLRvOCzYFG6qrCMBYK34HO/Q/Ecjc+tvkHRAfLVH+NgQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.0",
+ "devtools-protocol": "0.0.818844",
+ "extract-zip": "^2.0.0",
+ "https-proxy-agent": "^4.0.0",
+ "node-fetch": "^2.6.1",
+ "pkg-dir": "^4.2.0",
+ "progress": "^2.0.1",
+ "proxy-from-env": "^1.0.0",
+ "rimraf": "^3.0.2",
+ "tar-fs": "^2.0.0",
+ "unbzip2-stream": "^1.3.3",
+ "ws": "^7.2.3"
+ },
+ "engines": {
+ "node": ">=10.18.1"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.0",
+ "teleport": ">=0.2.0"
+ }
+ },
+ "node_modules/qjobs": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
+ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.9"
+ }
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ramda": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz",
+ "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==",
+ "dev": true
+ },
+ "node_modules/randomatic": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/randomatic/node_modules/is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.12.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz",
+ "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==",
+ "dev": true
+ },
+ "node_modules/read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "dependencies": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readdir-glob": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz",
+ "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==",
+ "dev": true,
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^0.4.2",
+ "math-expression-evaluator": "^1.2.14",
+ "reduce-function-call": "^1.0.1"
+ }
+ },
+ "node_modules/reduce-css-calc/node_modules/balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ },
+ "node_modules/reduce-function-call": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz",
+ "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "node_modules/regenerate-unicode-properties": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
+ "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
+ "dev": true,
+ "dependencies": {
+ "regenerate": "^1.4.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
+ "dev": true
+ },
+ "node_modules/regenerator-transform": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
+ "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
+ "dev": true,
+ "dependencies": {
+ "private": "^0.1.6"
+ }
+ },
+ "node_modules/regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "dependencies": {
+ "is-equal-shallow": "^0.1.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.5.0"
+ }
+ },
+ "node_modules/regexpu-core": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
+ "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
+ "dev": true,
+ "dependencies": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^8.1.0",
+ "regjsgen": "^0.5.0",
+ "regjsparser": "^0.6.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regjsgen": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
+ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
+ "dev": true
+ },
+ "node_modules/regjsparser": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+ "dev": true,
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "node_modules/repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
+ "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "node_modules/reserved-words": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz",
+ "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=",
+ "dev": true
+ },
+ "node_modules/resolve": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz",
+ "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==",
+ "dev": true,
+ "dependencies": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "node_modules/resolve-alpn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
+ "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==",
+ "dev": true
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dev": true,
+ "dependencies": {
+ "lowercase-keys": "^1.0.0"
+ }
+ },
+ "node_modules/resq": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.0.tgz",
+ "integrity": "sha512-hCUd0xMalqtPDz4jXIqs0M5Wnv/LZXN8h7unFOo4/nvExT9dDPbhwd3udRxLlp0HgBnHcV009UlduE9NZi7A6w==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^2.0.1"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz",
+ "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==",
+ "dev": true
+ },
+ "node_modules/rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+ "dev": true
+ },
+ "node_modules/rgb2hex": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.3.tgz",
+ "integrity": "sha512-clEe0m1xv+Tva1B/TOepuIcvLAxP0U+sCDfgt1SX1HmI2Ahr5/Cd/nzJM1e78NKVtWdoo0s33YehpFA8UfIShQ==",
+ "dev": true
+ },
+ "node_modules/rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+ "dev": true
+ },
+ "node_modules/rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/roarr": {
+ "version": "2.15.4",
+ "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
+ "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
+ "dev": true,
+ "dependencies": {
+ "boolean": "^3.0.1",
+ "detect-node": "^2.0.4",
+ "globalthis": "^1.0.1",
+ "json-stringify-safe": "^5.0.1",
+ "semver-compare": "^1.0.0",
+ "sprintf-js": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/roarr/node_modules/sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true
+ },
+ "node_modules/rollup": {
+ "version": "0.67.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.67.4.tgz",
+ "integrity": "sha512-AVuP73mkb4BBMUmksQ3Jw0jTrBTU1i7rLiUYjFxLZGb3xiFmtVEg40oByphkZAsiL0bJC3hRAJUQos/e5EBd+w==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "0.0.39",
+ "@types/node": "*"
+ },
+ "bin": {
+ "rollup": "bin/rollup"
+ }
+ },
+ "node_modules/rollup-plugin-alias": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-alias/-/rollup-plugin-alias-1.5.2.tgz",
+ "integrity": "sha512-ODeZXhTxpD48sfcYLAFc1BGrsXKDj7o1CSNH3uYbdK3o0NxyMmaQPTNgW+ko+am92DLC8QSTe4kyxTuEkI5S5w==",
+ "dev": true,
+ "dependencies": {
+ "slash": "^3.0.0"
+ }
+ },
+ "node_modules/rollup-plugin-babel": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz",
+ "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "rollup-pluginutils": "^2.8.1"
+ }
+ },
+ "node_modules/rollup-plugin-buble": {
+ "version": "0.19.8",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.19.8.tgz",
+ "integrity": "sha512-8J4zPk2DQdk3rxeZvxgzhHh/rm5nJkjwgcsUYisCQg1QbT5yagW+hehYEW7ZNns/NVbDCTv4JQ7h4fC8qKGOKw==",
+ "dev": true,
+ "dependencies": {
+ "buble": "^0.19.8",
+ "rollup-pluginutils": "^2.3.3"
+ }
+ },
+ "node_modules/rollup-plugin-bundle-size": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz",
+ "integrity": "sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "maxmin": "^2.1.0"
+ }
+ },
+ "node_modules/rollup-plugin-bundle-size/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-bundle-size/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-bundle-size/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-bundle-size/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-bundle-size/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-commonjs": {
+ "version": "9.3.4",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz",
+ "integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^0.6.0",
+ "magic-string": "^0.25.2",
+ "resolve": "^1.10.0",
+ "rollup-pluginutils": "^2.6.0"
+ }
+ },
+ "node_modules/rollup-plugin-es3": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-es3/-/rollup-plugin-es3-1.1.0.tgz",
+ "integrity": "sha512-jTMqQgMZ/tkjRW4scf4ln5c0OiTSi+Lx/IEyFd41ldgGoLvvg9AQxmVOl93+KaoyB7XRYToYjiHDvO40NPF/fA==",
+ "dev": true,
+ "dependencies": {
+ "magic-string": "^0.22.4"
+ }
+ },
+ "node_modules/rollup-plugin-es3/node_modules/magic-string": {
+ "version": "0.22.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "dev": true,
+ "dependencies": {
+ "vlq": "^0.2.2"
+ }
+ },
+ "node_modules/rollup-plugin-flow": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-flow/-/rollup-plugin-flow-1.1.1.tgz",
+ "integrity": "sha1-bOVo8d1Vlma3erdrS64lFAdSjbY=",
+ "dev": true,
+ "dependencies": {
+ "flow-remove-types": "^1.1.0",
+ "rollup-pluginutils": "^1.5.1"
+ }
+ },
+ "node_modules/rollup-plugin-flow/node_modules/estree-walker": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz",
+ "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=",
+ "dev": true
+ },
+ "node_modules/rollup-plugin-flow/node_modules/rollup-pluginutils": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
+ "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^0.2.1",
+ "minimatch": "^3.0.2"
+ }
+ },
+ "node_modules/rollup-plugin-json": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz",
+ "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==",
+ "dev": true,
+ "dependencies": {
+ "rollup-pluginutils": "^2.3.1"
+ }
+ },
+ "node_modules/rollup-plugin-node-resolve": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.4.tgz",
+ "integrity": "sha512-t/64I6l7fZ9BxqD3XlX4ZeO6+5RLKyfpwE2CiPNUKa+GocPlQhf/C208ou8y3AwtNsc6bjSk/8/6y/YAyxCIvw==",
+ "dev": true,
+ "dependencies": {
+ "@types/resolve": "0.0.8",
+ "builtin-modules": "^3.1.0",
+ "is-module": "^1.0.0",
+ "resolve": "^1.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-1.6.3.tgz",
+ "integrity": "sha512-se1qftVETua9ZGViud4A4gbgEQenjYnLPvjh3kTqbBZU+f0mQ9YvJptIuzPhEk5kZAHZhkwIkk2jk+byrn1XPA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.0.0",
+ "concat-with-sourcemaps": "^1.0.5",
+ "cssnano": "^3.10.0",
+ "fs-extra": "^5.0.0",
+ "import-cwd": "^2.1.0",
+ "p-queue": "^2.4.2",
+ "pify": "^3.0.0",
+ "postcss": "^6.0.21",
+ "postcss-load-config": "^1.2.0",
+ "postcss-modules": "^1.1.0",
+ "promise.series": "^0.2.0",
+ "reserved-words": "^0.1.2",
+ "resolve": "^1.5.0",
+ "rollup-pluginutils": "^2.0.1",
+ "style-inject": "^0.3.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^1.7.6",
+ "caniuse-db": "^1.0.30000634",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^5.2.16",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/autoprefixer/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/autoprefixer/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/autoprefixer/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "dev": true,
+ "dependencies": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "dev": true,
+ "dependencies": {
+ "q": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "dev": true,
+ "dependencies": {
+ "autoprefixer": "^6.3.1",
+ "decamelize": "^1.1.2",
+ "defined": "^1.0.0",
+ "has": "^1.0.1",
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.14",
+ "postcss-calc": "^5.2.0",
+ "postcss-colormin": "^2.1.8",
+ "postcss-convert-values": "^2.3.4",
+ "postcss-discard-comments": "^2.0.4",
+ "postcss-discard-duplicates": "^2.0.1",
+ "postcss-discard-empty": "^2.0.1",
+ "postcss-discard-overridden": "^0.1.1",
+ "postcss-discard-unused": "^2.2.1",
+ "postcss-filter-plugins": "^2.0.0",
+ "postcss-merge-idents": "^2.1.5",
+ "postcss-merge-longhand": "^2.0.1",
+ "postcss-merge-rules": "^2.0.3",
+ "postcss-minify-font-values": "^1.0.2",
+ "postcss-minify-gradients": "^1.0.1",
+ "postcss-minify-params": "^1.0.4",
+ "postcss-minify-selectors": "^2.0.4",
+ "postcss-normalize-charset": "^1.1.0",
+ "postcss-normalize-url": "^3.0.7",
+ "postcss-ordered-values": "^2.1.0",
+ "postcss-reduce-idents": "^2.2.2",
+ "postcss-reduce-initial": "^1.0.0",
+ "postcss-reduce-transforms": "^1.0.3",
+ "postcss-svgo": "^2.1.1",
+ "postcss-unique-selectors": "^2.0.2",
+ "postcss-value-parser": "^3.2.3",
+ "postcss-zindex": "^2.0.1"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/cssnano/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/cssnano/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/cssnano/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "dev": true,
+ "dependencies": {
+ "clap": "^1.0.9",
+ "source-map": "^0.5.3"
+ },
+ "bin": {
+ "csso": "bin/csso"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "dev": true,
+ "dependencies": {
+ "html-comment-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^2.6.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.2",
+ "postcss-message-helpers": "^2.0.0",
+ "reduce-css-calc": "^1.2.6"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-calc/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-calc/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-calc/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "dev": true,
+ "dependencies": {
+ "colormin": "^1.0.5",
+ "postcss": "^5.0.13",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-colormin/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-colormin/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-colormin/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.11",
+ "postcss-value-parser": "^3.1.2"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-convert-values/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-convert-values/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-convert-values/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-comments/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-comments/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-comments/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-duplicates/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-duplicates/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-duplicates/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-empty/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-empty/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-empty/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.16"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-overridden/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-overridden/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-overridden/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-longhand/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-longhand/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-longhand/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^1.5.2",
+ "caniuse-api": "^1.5.2",
+ "postcss": "^5.0.4",
+ "postcss-selector-parser": "^2.2.2",
+ "vendors": "^1.0.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-rules/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-rules/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-rules/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-font-values/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-font-values/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-font-values/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.12",
+ "postcss-value-parser": "^3.3.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-gradients/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-gradients/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-gradients/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.2",
+ "postcss-value-parser": "^3.0.2",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-params/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-params/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-params/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.2",
+ "has": "^1.0.1",
+ "postcss": "^5.0.14",
+ "postcss-selector-parser": "^2.0.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-selectors/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-selectors/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-selectors/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.5"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-charset/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-charset/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-charset/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "dev": true,
+ "dependencies": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^1.4.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-url/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-url/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-url/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-ordered-values/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-ordered-values/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-ordered-values/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-initial/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-initial/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-initial/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.8",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-transforms/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-transforms/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-transforms/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "dev": true,
+ "dependencies": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "dev": true,
+ "dependencies": {
+ "is-svg": "^2.0.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3",
+ "svgo": "^0.7.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-svgo/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-svgo/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-svgo/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-unique-selectors/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-unique-selectors/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-unique-selectors/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/postcss/node_modules/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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/rollup-plugin-postcss/node_modules/svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "dev": true,
+ "dependencies": {
+ "coa": "~1.0.1",
+ "colors": "~1.1.2",
+ "csso": "~2.3.1",
+ "js-yaml": "~3.7.0",
+ "mkdirp": "~0.5.1",
+ "sax": "~1.2.1",
+ "whet.extend": "~0.9.9"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-preserve-shebang": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-preserve-shebang/-/rollup-plugin-preserve-shebang-0.1.6.tgz",
+ "integrity": "sha512-b+psdlXZOjmlnKmL6/YAkR8PR15VPcUNXdT35urBRJ8jE6UxHyb4HXeeN3qRZJbMJJaX1eRP72XwH6IvGFh5Jw==",
+ "dev": true,
+ "dependencies": {
+ "magic-string": "^0.22.4"
+ }
+ },
+ "node_modules/rollup-plugin-preserve-shebang/node_modules/magic-string": {
+ "version": "0.22.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "dev": true,
+ "dependencies": {
+ "vlq": "^0.2.2"
+ }
+ },
+ "node_modules/rollup-plugin-sizes": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-sizes/-/rollup-plugin-sizes-0.4.2.tgz",
+ "integrity": "sha512-6VsnWb4aBPcW++3IBMNPo4NLSheoaXh+itXk1OcaolLhYemoQFb7A9hVNocwa0j2BctdmPNFcP7UJ3g///VVaA==",
+ "dev": true,
+ "dependencies": {
+ "filesize": "^3.5.11",
+ "lodash.foreach": "^4.5.0",
+ "lodash.sumby": "^4.6.0",
+ "module-details-from-path": "^1.0.3"
+ }
+ },
+ "node_modules/rollup-plugin-terser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-3.0.0.tgz",
+ "integrity": "sha512-Ed9zRD7OoCBnh0XGlEAJle5TCUsFXMLClwKzZWnS1zbNO4MelHjfCSdFZxCAdH70M40nhZ1nRrY2GZQJhSMcjA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "jest-worker": "^23.2.0",
+ "serialize-javascript": "^1.5.0",
+ "terser": "^3.8.2"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2": {
+ "version": "0.19.3",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.19.3.tgz",
+ "integrity": "sha512-lsRqfBCZhMl/tq9AT5YnQvzQWzXtnx3EQYFcHD72gul7nyyoOrzx5yCEH20smpw58v6UkHHZz03FbdLEPoHWjA==",
+ "dev": true,
+ "dependencies": {
+ "fs-extra": "7.0.1",
+ "resolve": "1.8.1",
+ "rollup-pluginutils": "2.3.3",
+ "tslib": "1.9.3"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "dependencies": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/estree-walker": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
+ "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==",
+ "dev": true
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "dependencies": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/resolve": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "dev": true,
+ "dependencies": {
+ "path-parse": "^1.0.5"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/rollup-pluginutils": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz",
+ "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^0.5.2",
+ "micromatch": "^2.3.11"
+ }
+ },
+ "node_modules/rollup-plugin-typescript2/node_modules/tslib": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+ "dev": true
+ },
+ "node_modules/rollup-pluginutils": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
+ "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^0.6.1"
+ }
+ },
+ "node_modules/run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "dependencies": {
+ "is-promise": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
+ "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
+ "node_modules/sade": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz",
+ "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==",
+ "dev": true,
+ "dependencies": {
+ "mri": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "node_modules/saucelabs": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-4.6.0.tgz",
+ "integrity": "sha512-GAytkfq2QTVzwMS4/A99YQ79wqZvq29hO1r7+JYvfExRD9UipuvzvqhzsAfS8fKg+OuRIbIDTk0Rd7aWXa06zw==",
+ "dev": true,
+ "dependencies": {
+ "bin-wrapper": "^4.1.0",
+ "change-case": "^4.1.1",
+ "form-data": "^3.0.0",
+ "got": "^11.7.0",
+ "hash.js": "^1.1.7",
+ "tunnel": "0.0.6",
+ "yargs": "^16.0.3"
+ },
+ "bin": {
+ "sl": "bin/sl"
+ }
+ },
+ "node_modules/saucelabs/node_modules/ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/saucelabs/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/saucelabs/node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/saucelabs/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/saucelabs/node_modules/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
+ },
+ "node_modules/saucelabs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/saucelabs/node_modules/form-data": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
+ "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/saucelabs/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/saucelabs/node_modules/string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/saucelabs/node_modules/strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/saucelabs/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/saucelabs/node_modules/y18n": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
+ "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/saucelabs/node_modules/yargs": {
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz",
+ "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/saucelabs/node_modules/yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "node_modules/seek-bzip": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
+ "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^2.8.1"
+ },
+ "bin": {
+ "seek-bunzip": "bin/seek-bunzip",
+ "seek-table": "bin/seek-bzip-table"
+ }
+ },
+ "node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true
+ },
+ "node_modules/semver-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
+ "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/semver-truncate": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
+ "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
+ "dev": true,
+ "dependencies": {
+ "semver": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sentence-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.3.tgz",
+ "integrity": "sha512-ZPr4dgTcNkEfcGOMFQyDdJrTU9uQO1nb1cjf+nuzb6FxgMDgKddZOM29qEsB7jvsZSMruLRcL2KfM4ypKpa0LA==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0",
+ "upper-case-first": "^2.0.1"
+ }
+ },
+ "node_modules/serialize-error": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
+ "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.13.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
+ "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
+ "dev": true
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
+ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
+ "dev": true
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "dev": true
+ },
+ "node_modules/simple-get": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz",
+ "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
+ "dev": true,
+ "dependencies": {
+ "decompress-response": "^4.2.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/simple-swizzle/node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "dev": true
+ },
+ "node_modules/sinon": {
+ "version": "9.2.3",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.3.tgz",
+ "integrity": "sha512-m+DyAWvqVHZtjnjX/nuShasykFeiZ+nPuEfD4G3gpvKGkXRhkF/6NSt2qN2FjZhfrcHXFzUzI+NLnk+42fnLEw==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.8.1",
+ "@sinonjs/fake-timers": "^6.0.1",
+ "@sinonjs/samsam": "^5.3.0",
+ "diff": "^4.0.2",
+ "nise": "^4.0.4",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "node_modules/sinon-chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.5.0.tgz",
+ "integrity": "sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg==",
+ "dev": true
+ },
+ "node_modules/sinon/node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/sinon/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sinon/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/snake-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.3.tgz",
+ "integrity": "sha512-WM1sIXEO+rsAHBKjGf/6R1HBBcgbncKS08d2Aqec/mrDSpU80SiOU41hO7ny6DToHSyrlwTYzQBIK1FPSx4Y3Q==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/socket.io": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz",
+ "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "~4.1.0",
+ "engine.io": "~3.4.0",
+ "has-binary2": "~1.0.2",
+ "socket.io-adapter": "~1.1.0",
+ "socket.io-client": "2.3.0",
+ "socket.io-parser": "~3.4.0"
+ }
+ },
+ "node_modules/socket.io-adapter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
+ "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==",
+ "dev": true
+ },
+ "node_modules/socket.io-client": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz",
+ "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==",
+ "dev": true,
+ "dependencies": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "~4.1.0",
+ "engine.io-client": "~3.4.0",
+ "has-binary2": "~1.0.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "~3.3.0",
+ "to-array": "0.1.4"
+ }
+ },
+ "node_modules/socket.io-client/node_modules/base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/socket.io-client/node_modules/component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "node_modules/socket.io-client/node_modules/isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ },
+ "node_modules/socket.io-client/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/socket.io-client/node_modules/socket.io-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz",
+ "integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==",
+ "dev": true,
+ "dependencies": {
+ "component-emitter": "~1.3.0",
+ "debug": "~3.1.0",
+ "isarray": "2.0.1"
+ }
+ },
+ "node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/socket.io-parser": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz",
+ "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
+ "dev": true,
+ "dependencies": {
+ "component-emitter": "1.2.1",
+ "debug": "~4.1.0",
+ "isarray": "2.0.1"
+ }
+ },
+ "node_modules/socket.io-parser/node_modules/component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "node_modules/socket.io-parser/node_modules/isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ },
+ "node_modules/sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "dependencies": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sort-keys-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
+ "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
+ "dev": true,
+ "dependencies": {
+ "sort-keys": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
+ "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "dev": true
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "dev": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+ "dev": true
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "node_modules/sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "dev": true,
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/streamroller": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz",
+ "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==",
+ "dev": true,
+ "dependencies": {
+ "date-format": "^2.1.0",
+ "debug": "^4.1.1",
+ "fs-extra": "^8.1.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/streamroller/node_modules/date-format": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz",
+ "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/streamroller/node_modules/fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-argv": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
+ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.19"
+ }
+ },
+ "node_modules/string-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
+ "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=",
+ "dev": true
+ },
+ "node_modules/string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/string.prototype.padend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
+ "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.4.3",
+ "function-bind": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
+ "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "node_modules/string.prototype.trimleft": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
+ "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.trimright": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
+ "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
+ "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "node_modules/stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "dev": true,
+ "dependencies": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-dirs": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+ "dev": true,
+ "dependencies": {
+ "is-natural-number": "^4.0.1"
+ }
+ },
+ "node_modules/strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-outer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+ "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/style-inject": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz",
+ "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==",
+ "dev": true
+ },
+ "node_modules/stylehacks": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
+ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/stylehacks/node_modules/postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "dev": true,
+ "dependencies": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/svgo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "coa": "^2.0.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "^0.1.1",
+ "css-tree": "1.0.0-alpha.37",
+ "csso": "^4.0.2",
+ "js-yaml": "^3.13.1",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.1.0",
+ "sax": "~1.2.4",
+ "stable": "^0.1.8",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/table/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/table/node_modules/string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/table/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dev": true,
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz",
+ "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==",
+ "dev": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tar-stream/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "3.17.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
+ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^2.19.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.10"
+ },
+ "bin": {
+ "terser": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/terser/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "node_modules/timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "node_modules/tiny-glob": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.8.tgz",
+ "integrity": "sha512-vkQP7qOslq63XRX9kMswlby99kyO5OvKptw7AMwBVMjXEI7Tb61eoI5DydyEMOseyGS5anDN1VPoVxEvH01q8w==",
+ "dev": true,
+ "dependencies": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "node_modules/tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "node_modules/to-buffer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+ "dev": true
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "dependencies": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tough-cookie/node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "node_modules/trim-repeated": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+ "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+ "dev": true
+ },
+ "node_modules/tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "node_modules/type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
+ "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/ua-parser-js": {
+ "version": "0.7.22",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz",
+ "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/unbzip2-stream": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+ "dev": true,
+ "dependencies": {
+ "buffer": "^5.2.1",
+ "through": "^2.3.8"
+ }
+ },
+ "node_modules/unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "dependencies": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-value-ecmascript": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
+ "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
+ "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "node_modules/uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+ "dev": true
+ },
+ "node_modules/upper-case": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.1.tgz",
+ "integrity": "sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/upper-case-first": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.1.tgz",
+ "integrity": "sha512-105J8XqQ+9RxW3l9gHZtgve5oaiR9TIwvmZAMAIZWRHe00T21cdvewKORTlOJf/zXW6VukuTshM+HXZNWz7N5w==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.10.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "dev": true,
+ "dependencies": {
+ "prepend-http": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/url-parse-lax/node_modules/prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/url-to-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
+ "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "node_modules/util.promisify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
+ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.2",
+ "has-symbols": "^1.0.1",
+ "object.getownpropertydescriptors": "^2.1.0"
+ }
+ },
+ "node_modules/util.promisify/node_modules/es-abstract": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
+ "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
+ "dev": true,
+ "dependencies": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/util.promisify/node_modules/is-callable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
+ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/util.promisify/node_modules/is-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+ "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/util.promisify/node_modules/object-inspect": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+ "dev": true
+ },
+ "node_modules/util.promisify/node_modules/object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
+ "dev": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
+ "dev": true
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/vlq": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
+ "dev": true
+ },
+ "node_modules/void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/webdriver": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.10.4.tgz",
+ "integrity": "sha512-N2FkEy22QWAJMeyz1219ik9wyt3/SOT/RtsY6JheEriZ1GptzZyK0OibkOnCoaIAt+nvSxnSmTTlmXQMGBE6Mw==",
+ "dev": true,
+ "dependencies": {
+ "@types/lodash.merge": "^4.6.6",
+ "@wdio/config": "6.10.4",
+ "@wdio/logger": "6.10.4",
+ "@wdio/protocols": "6.10.0",
+ "@wdio/utils": "6.10.4",
+ "got": "^11.0.2",
+ "lodash.merge": "^4.6.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/webdriverio": {
+ "version": "6.10.5",
+ "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-6.10.5.tgz",
+ "integrity": "sha512-TLIKVOOM0Oszn2mLxZcMQk0vq1bOWpsZNXMxMtpBXKLvcOCLedftxotwh0o1LqRiq8ODiubJ/vNOLgCN/oLFJQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/archiver": "^5.1.0",
+ "@types/atob": "^2.1.2",
+ "@types/fs-extra": "^9.0.2",
+ "@types/lodash.clonedeep": "^4.5.6",
+ "@types/lodash.isplainobject": "^4.0.6",
+ "@types/puppeteer-core": "^2.0.0",
+ "@wdio/config": "6.10.4",
+ "@wdio/logger": "6.10.4",
+ "@wdio/repl": "6.10.4",
+ "@wdio/utils": "6.10.4",
+ "archiver": "^5.0.0",
+ "atob": "^2.1.2",
+ "css-shorthand-properties": "^1.1.1",
+ "css-value": "^0.0.1",
+ "devtools": "6.10.4",
+ "fs-extra": "^9.0.1",
+ "get-port": "^5.1.1",
+ "grapheme-splitter": "^1.0.2",
+ "lodash.clonedeep": "^4.5.0",
+ "lodash.isobject": "^3.0.2",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.zip": "^4.2.0",
+ "minimatch": "^3.0.4",
+ "puppeteer-core": "^5.1.0",
+ "resq": "^1.9.1",
+ "rgb2hex": "^0.2.0",
+ "serialize-error": "^7.0.0",
+ "webdriver": "6.10.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/webdriverio/node_modules/fs-extra": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
+ "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
+ "dev": true,
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/webdriverio/node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "node_modules/webdriverio/node_modules/jsonfile/node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/webdriverio/node_modules/universalify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
+ "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "node_modules/which-pm-runs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
+ "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
+ "dev": true
+ },
+ "node_modules/wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/workerpool": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz",
+ "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/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
+ },
+ "node_modules/wrap-ansi/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "dev": true,
+ "dependencies": {
+ "mkdirp": "^0.5.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ws": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz",
+ "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
+ "node_modules/xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
+ "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yargs": {
+ "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,
+ "dependencies": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/camelcase": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
+ "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/yargs/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/zip-stream": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz",
+ "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==",
+ "dev": true,
+ "dependencies": {
+ "archiver-utils": "^2.1.0",
+ "compress-commons": "^4.0.2",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/zip-stream/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.4.tgz",
+ "integrity": "sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.4",
+ "@babel/helpers": "^7.7.4",
+ "@babel/parser": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz",
+ "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.4",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz",
+ "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz",
+ "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-builder-react-jsx": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz",
+ "integrity": "sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.4",
+ "esutils": "^2.0.0"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz",
+ "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz",
+ "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-member-expression-to-functions": "^7.12.1",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.12.1",
+ "@babel/helper-split-export-declaration": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "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.4"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
+ "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.5",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "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.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "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.4"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz",
+ "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.7"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz",
+ "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.7"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
+ "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.12.1",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/traverse": "^7.12.5",
+ "@babel/types": "^7.12.5"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "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.11.0"
+ }
+ },
+ "@babel/highlight": {
+ "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.4",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz",
+ "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz",
+ "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.12.7",
+ "@babel/types": "^7.12.7"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.12.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz",
+ "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.12.5",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.11.0",
+ "@babel/parser": "^7.12.7",
+ "@babel/types": "^7.12.7",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.19"
+ }
+ },
+ "@babel/types": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz",
+ "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz",
+ "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-regex": "^7.4.4",
+ "regexpu-core": "^4.6.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz",
+ "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz",
+ "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz",
+ "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz",
+ "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz",
+ "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz",
+ "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz",
+ "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.4.tgz",
+ "integrity": "sha512-ehGBu4mXrhs0FxAqN8tWkzF8GSIGAiEumu4ONZ/hD9M88uHcD+Yu2ttKfOCgwzoesJOJrtQh7trI5YPbRtMmnA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.7.4",
+ "@babel/helper-simple-access": "^7.7.4",
+ "@babel/helper-split-export-declaration": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz",
+ "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz",
+ "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz",
+ "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.7.4",
+ "@babel/helper-wrap-function": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz",
+ "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.7.4",
+ "@babel/helper-optimise-call-expression": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz",
+ "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz",
+ "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "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/helper-wrap-function": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz",
+ "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz",
+ "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+ "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.4.tgz",
+ "integrity": "sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g==",
+ "dev": true
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz",
+ "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.7.4",
+ "@babel/plugin-syntax-async-generators": "^7.7.4"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.1.tgz",
+ "integrity": "sha512-/4FKFChkQ2Jgb8lBDsvFX496YTi7UWTetVgS8oJUpX1e/DlaoeEK57At27ug8Hu2zI2g8bzkJ+8k9qrHZRPGPA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.2.1",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz",
+ "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.7.4"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz",
+ "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.7.4"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz",
+ "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.7.4"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz",
+ "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.7.4"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz",
+ "integrity": "sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz",
+ "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz",
+ "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz",
+ "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz",
+ "integrity": "sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz",
+ "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz",
+ "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz",
+ "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz",
+ "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz",
+ "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.7.4"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz",
+ "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz",
+ "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz",
+ "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.7.4",
+ "@babel/helper-define-map": "^7.7.4",
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/helper-optimise-call-expression": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.7.4",
+ "@babel/helper-split-export-declaration": "^7.7.4",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz",
+ "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz",
+ "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz",
+ "integrity": "sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz",
+ "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz",
+ "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz",
+ "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz",
+ "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz",
+ "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz",
+ "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.4.tgz",
+ "integrity": "sha512-/542/5LNA18YDtg1F+QHvvUSlxdvjZoD/aldQwkq+E3WCkbEjNSN9zdrOXaSlfg3IfGi22ijzecklF/A7kVZFQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.4.tgz",
+ "integrity": "sha512-k8iVS7Jhc367IcNF53KCwIXtKAH7czev866ThsTgy8CwlXjnKZna2VHwChglzLleYrcHz1eQEIJlGRQxB53nqA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.7.4",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz",
+ "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz",
+ "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz",
+ "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz",
+ "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz",
+ "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.7.4"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz",
+ "integrity": "sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "^7.7.4",
+ "@babel/helper-get-function-arity": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz",
+ "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz",
+ "integrity": "sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-react-jsx": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.7.4"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-source": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz",
+ "integrity": "sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.7.4"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.4.tgz",
+ "integrity": "sha512-e7MWl5UJvmPEwFJTwkBlPmqixCtr9yAASBqff4ggXTNicZiwbF8Eefzm6NVgfiBp7JdAGItecnctKTgH44q2Jw==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.14.0"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz",
+ "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz",
+ "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz",
+ "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz",
+ "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz",
+ "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz",
+ "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz",
+ "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/polyfill": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
+ "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.6.5",
+ "regenerator-runtime": "^0.13.4"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.13.7",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+ "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.4.tgz",
+ "integrity": "sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.7.4",
+ "@babel/plugin-proposal-dynamic-import": "^7.7.4",
+ "@babel/plugin-proposal-json-strings": "^7.7.4",
+ "@babel/plugin-proposal-object-rest-spread": "^7.7.4",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.7.4",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.7.4",
+ "@babel/plugin-syntax-async-generators": "^7.7.4",
+ "@babel/plugin-syntax-dynamic-import": "^7.7.4",
+ "@babel/plugin-syntax-json-strings": "^7.7.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.7.4",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.7.4",
+ "@babel/plugin-syntax-top-level-await": "^7.7.4",
+ "@babel/plugin-transform-arrow-functions": "^7.7.4",
+ "@babel/plugin-transform-async-to-generator": "^7.7.4",
+ "@babel/plugin-transform-block-scoped-functions": "^7.7.4",
+ "@babel/plugin-transform-block-scoping": "^7.7.4",
+ "@babel/plugin-transform-classes": "^7.7.4",
+ "@babel/plugin-transform-computed-properties": "^7.7.4",
+ "@babel/plugin-transform-destructuring": "^7.7.4",
+ "@babel/plugin-transform-dotall-regex": "^7.7.4",
+ "@babel/plugin-transform-duplicate-keys": "^7.7.4",
+ "@babel/plugin-transform-exponentiation-operator": "^7.7.4",
+ "@babel/plugin-transform-for-of": "^7.7.4",
+ "@babel/plugin-transform-function-name": "^7.7.4",
+ "@babel/plugin-transform-literals": "^7.7.4",
+ "@babel/plugin-transform-member-expression-literals": "^7.7.4",
+ "@babel/plugin-transform-modules-amd": "^7.7.4",
+ "@babel/plugin-transform-modules-commonjs": "^7.7.4",
+ "@babel/plugin-transform-modules-systemjs": "^7.7.4",
+ "@babel/plugin-transform-modules-umd": "^7.7.4",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4",
+ "@babel/plugin-transform-new-target": "^7.7.4",
+ "@babel/plugin-transform-object-super": "^7.7.4",
+ "@babel/plugin-transform-parameters": "^7.7.4",
+ "@babel/plugin-transform-property-literals": "^7.7.4",
+ "@babel/plugin-transform-regenerator": "^7.7.4",
+ "@babel/plugin-transform-reserved-words": "^7.7.4",
+ "@babel/plugin-transform-shorthand-properties": "^7.7.4",
+ "@babel/plugin-transform-spread": "^7.7.4",
+ "@babel/plugin-transform-sticky-regex": "^7.7.4",
+ "@babel/plugin-transform-template-literals": "^7.7.4",
+ "@babel/plugin-transform-typeof-symbol": "^7.7.4",
+ "@babel/plugin-transform-unicode-regex": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "browserslist": "^4.6.0",
+ "core-js-compat": "^3.1.1",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.5.0"
+ }
+ },
+ "@babel/register": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.4.tgz",
+ "integrity": "sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^2.0.0",
+ "lodash": "^4.17.13",
+ "make-dir": "^2.1.0",
+ "pirates": "^4.0.0",
+ "source-map-support": "^0.5.16"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.4.tgz",
+ "integrity": "sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw==",
+ "dev": true,
+ "requires": {
+ "regenerator-runtime": "^0.13.2"
+ }
+ },
+ "@babel/template": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz",
+ "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.4",
+ "@babel/types": "^7.7.4"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz",
+ "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.4",
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/helper-split-export-declaration": "^7.7.4",
+ "@babel/parser": "^7.7.4",
+ "@babel/types": "^7.7.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
+ "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz",
+ "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ }
+ }
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz",
+ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==",
+ "dev": true
+ },
+ "@sindresorhus/is": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
+ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==",
+ "dev": true
+ },
+ "@sinonjs/commons": {
+ "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"
+ }
+ },
+ "@sinonjs/fake-timers": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
+ "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.0.tgz",
+ "integrity": "sha512-hXpcfx3aq+ETVBwPlRFICld5EnrkexXuXDwqUNhDdr5L8VjvMeSRwyOa0qL7XFmR+jVWR4rUZtnxlG7RX72sBg==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.6.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
+ "dev": true
+ },
+ "@szmarczak/http-timer": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
+ "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
+ "dev": true,
+ "requires": {
+ "defer-to-connect": "^2.0.0"
+ }
+ },
+ "@types/archiver": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.0.tgz",
+ "integrity": "sha512-baFOhanb/hxmcOd1Uey2TfFg43kTSmM6py1Eo7Rjbv/ivcl7PXLhY0QgXGf50Hx/eskGCFqPfhs/7IZLb15C5g==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "*"
+ }
+ },
+ "@types/atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@types/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-8GAYQ1jDRUQkSpHzJUqXwAkYFOxuWAOGLhIR4aPd/Y/yL12Q/9m7LsKpHKlfKdNE/362Hc9wPI1Yh6opDfxVJg==",
+ "dev": true
+ },
+ "@types/cacheable-request": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
+ "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
+ "dev": true,
+ "requires": {
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "*",
+ "@types/node": "*",
+ "@types/responselike": "*"
+ }
+ },
+ "@types/chai": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.5.tgz",
+ "integrity": "sha512-YvbLiIc0DbbhiANrfVObdkLEHJksQZVq0Uvfg550SRAKVYaEJy+V70j65BVe2WNp6E3HtKsUczeijHFCjba3og==",
+ "dev": true
+ },
+ "@types/estree": {
+ "version": "0.0.39",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.4.tgz",
+ "integrity": "sha512-50GO5ez44lxK5MDH90DYHFFfqxH7+fTqEEnvguQRzJ/tY9qFrMSHLiYHite+F3SNmf7+LHC1eMXojuD+E3Qcyg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/http-cache-semantics": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
+ "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==",
+ "dev": true
+ },
+ "@types/keyv": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
+ "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/lodash": {
+ "version": "4.14.165",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.165.tgz",
+ "integrity": "sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg==",
+ "dev": true
+ },
+ "@types/lodash.clonedeep": {
+ "version": "4.5.6",
+ "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz",
+ "integrity": "sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==",
+ "dev": true,
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@types/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@types/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-8G41YFhmOl8Ck6NrwLK5hhnbz6ADfuDJP+zusDnX3PoYhfC60+H/rQE6zmdO4yFzPCPJPY4oGZK2spbXm6gYEA==",
+ "dev": true,
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@types/lodash.merge": {
+ "version": "4.6.6",
+ "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.6.tgz",
+ "integrity": "sha512-IB90krzMf7YpfgP3u/EvZEdXVvm4e3gJbUvh5ieuI+o+XqiNEt6fCzqNRaiLlPVScLI59RxIGZMQ3+Ko/DJ8vQ==",
+ "dev": true,
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "14.14.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz",
+ "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==",
+ "dev": true
+ },
+ "@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
+ "dev": true
+ },
+ "@types/puppeteer": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.0.tgz",
+ "integrity": "sha512-zTYDLjnHjgzokrwKt7N0rgn7oZPYo1J0m8Ghu+gXqzLCEn8RWbELa2uprE2UFJ0jU/Sk0x9jXXdOH/5QQLFHhQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/puppeteer-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/puppeteer-core/-/puppeteer-core-2.0.0.tgz",
+ "integrity": "sha512-JvoEb7KgEkUet009ZDrtpUER3hheXoHgQByuYpJZ5WWT7LWwMH+0NTqGQXGgoOKzs+G5NA1T4DZwXK79Bhnejw==",
+ "dev": true,
+ "requires": {
+ "@types/puppeteer": "*"
+ }
+ },
+ "@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==",
+ "dev": true
+ },
+ "@types/resolve": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz",
+ "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/responselike": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
+ "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/ua-parser-js": {
+ "version": "0.7.33",
+ "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.33.tgz",
+ "integrity": "sha512-ngUKcHnytUodUCL7C6EZ+lVXUjTMQb+9p/e1JjV5tN9TVzS98lHozWEFRPY1QcCdwFeMsmVWfZ3DPPT/udCyIw==",
+ "dev": true
+ },
+ "@types/uuid": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz",
+ "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==",
+ "dev": true
+ },
+ "@types/yauzl": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
+ "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
+ "dev": true
+ },
+ "@wdio/config": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/@wdio/config/-/config-6.10.4.tgz",
+ "integrity": "sha512-M22EunI+n/mmYOQqb9+BTVRqrfmPw+7rR1AHeD36vOXCnZ55Nrl4ZU4d6QzPHp9cLdMZqV786iDmkonnb6jb8w==",
+ "dev": true,
+ "requires": {
+ "@wdio/logger": "6.10.4",
+ "deepmerge": "^4.0.0",
+ "glob": "^7.1.2"
+ }
+ },
+ "@wdio/logger": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-6.10.4.tgz",
+ "integrity": "sha512-I+1I/5CtQigy59QJen56PHuwV0yiQdnZaOxmXIP6FzpWkeXLjcoUNaCRDuKwJx5GKrUSDqmGlMWSH53scwwzHg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "loglevel": "^1.6.0",
+ "loglevel-plugin-prefix": "^0.8.4",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "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
+ },
+ "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
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@wdio/protocols": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-6.10.0.tgz",
+ "integrity": "sha512-MaloMFtlZeeGoqHyy2g5QM8HHuQDZOAGjxotsQ6mVAzZpAFbwUGHPSRlwBbbsB3gHVALJVowViltJ95jgaFfZg==",
+ "dev": true
+ },
+ "@wdio/repl": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-6.10.4.tgz",
+ "integrity": "sha512-VwucPyUqAxU6CWWoEVf14asjtLGTgyaJwp47kEFegr06ZBG43zVQ6JqKFiGDxUJ+fZVRhdd7nRVHd+6UllK18w==",
+ "dev": true,
+ "requires": {
+ "@wdio/utils": "6.10.4"
+ }
+ },
+ "@wdio/utils": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-6.10.4.tgz",
+ "integrity": "sha512-DkFguYGKUcv9TmIYuuwS/pxpiGcgyv8gWUWRXffirt2OYpFXJNwB+S96CSQnjgb4B5MqSFgEti+gl8A2wsdDgQ==",
+ "dev": true,
+ "requires": {
+ "@wdio/logger": "6.10.4"
+ }
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
+ "dev": true
+ },
+ "acorn-dynamic-import": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
+ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
+ "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
+ "dev": true
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
+ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==",
+ "dev": true
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "ansi-colors": {
+ "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": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "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==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true
+ },
+ "archive-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
+ "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
+ "dev": true,
+ "requires": {
+ "file-type": "^4.2.0"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
+ "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
+ "dev": true
+ }
+ }
+ },
+ "archiver": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.1.0.tgz",
+ "integrity": "sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA==",
+ "dev": true,
+ "requires": {
+ "archiver-utils": "^2.1.0",
+ "async": "^3.2.0",
+ "buffer-crc32": "^0.2.1",
+ "readable-stream": "^3.6.0",
+ "readdir-glob": "^1.0.0",
+ "tar-stream": "^2.1.4",
+ "zip-stream": "^4.0.4"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "archiver-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
+ "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.0",
+ "lazystream": "^1.0.0",
+ "lodash.defaults": "^4.2.0",
+ "lodash.difference": "^4.5.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.union": "^4.6.0",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "async": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "asyncro": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz",
+ "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==",
+ "dev": true
+ },
+ "at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "9.8.6",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz",
+ "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.12.0",
+ "caniuse-lite": "^1.0.30001109",
+ "colorette": "^1.2.1",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^7.0.32",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "dependencies": {
+ "browserslist": {
+ "version": "4.14.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz",
+ "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001157",
+ "colorette": "^1.2.1",
+ "electron-to-chromium": "^1.3.591",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.66"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001163",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001163.tgz",
+ "integrity": "sha512-QQbOGkHWnvhn3Dlf4scPlXTZVhGOK+2qCOP5gPxqzXHhtn3tZHwNdH9qNcQRWN0f3tDYrsyXFJCFiP/GLzI5Vg==",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.611",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.611.tgz",
+ "integrity": "sha512-YhqTzCXtEO2h0foGLGS60ortd6yY/yUQhqDEp1VWG3DIyHvckFFyaRwR41M0/M3m7Yb8Exqh+nzyb2TuxaoMTw==",
+ "dev": true
+ },
+ "node-releases": {
+ "version": "1.1.67",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz",
+ "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==",
+ "dev": true
+ }
+ }
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz",
+ "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==",
+ "dev": true
+ },
+ "babel-eslint": {
+ "version": "8.2.6",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz",
+ "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/traverse": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "^1.0.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
+ "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "7.0.0-beta.44"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.44",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.2.0",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz",
+ "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "7.0.0-beta.44",
+ "@babel/template": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz",
+ "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz",
+ "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
+ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz",
+ "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "lodash": "^4.2.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz",
+ "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/generator": "7.0.0-beta.44",
+ "@babel/helper-function-name": "7.0.0-beta.44",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "debug": "^3.1.0",
+ "globals": "^11.1.0",
+ "invariant": "^2.2.0",
+ "lodash": "^4.2.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.2.0",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
+ "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+ "dev": true,
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
+ "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^4.0.0",
+ "test-exclude": "^6.0.0"
+ }
+ },
+ "babel-plugin-transform-async-to-promises": {
+ "version": "0.8.15",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.15.tgz",
+ "integrity": "sha512-fDXP68ZqcinZO2WCiimCL9zhGjGXOnn3D33zvbh+yheZ/qOrNVVDDIBtAaM3Faz8TRvQzHiRKsu3hfrBAhEncQ==",
+ "dev": true
+ },
+ "babel-plugin-transform-rename-properties": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-rename-properties/-/babel-plugin-transform-rename-properties-0.1.0.tgz",
+ "integrity": "sha512-uBSvAC8qH81TsXsWYD20ME4qg9ICflMLjsNfeuSxrKkJkym4Riqne1BrCCW15lcM/t9lfEiz4FJbVeUoaOVGWA==",
+ "dev": true
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
+ "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+ "dev": true
+ },
+ "base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "benchmark": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz",
+ "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.4",
+ "platform": "^1.3.3"
+ }
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "bin-check": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
+ "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "executable": "^4.1.0"
+ }
+ },
+ "bin-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz",
+ "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "find-versions": "^3.0.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
+ },
+ "bin-version-check": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz",
+ "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==",
+ "dev": true,
+ "requires": {
+ "bin-version": "^3.0.0",
+ "semver": "^5.6.0",
+ "semver-truncate": "^1.1.2"
+ }
+ },
+ "bin-wrapper": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
+ "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
+ "dev": true,
+ "requires": {
+ "bin-check": "^4.1.0",
+ "bin-version-check": "^4.0.0",
+ "download": "^7.1.0",
+ "import-lazy": "^3.1.0",
+ "os-filter-obj": "^2.0.0",
+ "pify": "^4.0.1"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
+ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
+ "dev": true
+ },
+ "bl": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz",
+ "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "blob": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "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
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ }
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boolean": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz",
+ "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "brotli-size": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.0.3.tgz",
+ "integrity": "sha512-bBIdd8uUGxKGldAVykxOqPegl+HlIm4FpXJamwWw5x77WCE8jO7AhXFE1YXOhOB28gS+2pTQete0FqRE6U5hQQ==",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1",
+ "iltorb": "^2.0.5"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "browserslist": {
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.3.tgz",
+ "integrity": "sha512-jWvmhqYpx+9EZm/FxcZSbUZyDEvDTLDi3nSAKbzEkyWvtI0mNSmUosey+5awDW1RUlrgXbQb5A6qY1xQH9U6MQ==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001010",
+ "electron-to-chromium": "^1.3.306",
+ "node-releases": "^1.1.40"
+ }
+ },
+ "buble": {
+ "version": "0.19.8",
+ "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.8.tgz",
+ "integrity": "sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.1.1",
+ "acorn-dynamic-import": "^4.0.0",
+ "acorn-jsx": "^5.0.1",
+ "chalk": "^2.4.2",
+ "magic-string": "^0.25.3",
+ "minimist": "^1.2.0",
+ "os-homedir": "^2.0.0",
+ "regexpu-core": "^4.5.4"
+ }
+ },
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "requires": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true
+ },
+ "buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
+ "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ },
+ "cacheable-lookup": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz",
+ "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==",
+ "dev": true
+ },
+ "cacheable-request": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
+ "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
+ "dev": true,
+ "requires": {
+ "clone-response": "1.0.2",
+ "get-stream": "3.0.0",
+ "http-cache-semantics": "3.8.1",
+ "keyv": "3.0.0",
+ "lowercase-keys": "1.0.0",
+ "normalize-url": "2.0.1",
+ "responselike": "1.0.2"
+ },
+ "dependencies": {
+ "lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
+ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^2.0.0",
+ "query-string": "^5.0.1",
+ "sort-keys": "^2.0.0"
+ }
+ },
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true
+ },
+ "query-string": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
+ "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
+ "dev": true,
+ "requires": {
+ "decode-uri-component": "^0.2.0",
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "sort-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ }
+ }
+ },
+ "call-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
+ "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.0"
+ }
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ }
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz",
+ "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==",
+ "dev": true,
+ "requires": {
+ "pascal-case": "^3.1.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30001012",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001012.tgz",
+ "integrity": "sha512-fm4VZQo0F1WYTmJcaTsqGhRuqcbkUW1/1hx8n5xdkbJSyaJV3jZ1vPXHYNcn376cAcuhxUIcE9TpHlSAYtN6bA==",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001012",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001012.tgz",
+ "integrity": "sha512-7RR4Uh04t9K1uYRWzOJmzplgEOAXbfK72oVNokCdMzA67trrhPzy93ahKk1AWHiA0c58tD2P+NHqxrA8FZ+Trg==",
+ "dev": true
+ },
+ "capital-case": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.3.tgz",
+ "integrity": "sha512-OlUSJpUr7SY0uZFOxcwnDOU7/MpHlKTZx2mqnDYQFrDudXLFm0JJ9wr/l4csB+rh2Ug0OPuoSO53PqiZBqno9A==",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0",
+ "upper-case-first": "^2.0.1"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "caw": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
+ "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
+ "dev": true,
+ "requires": {
+ "get-proxy": "^2.0.0",
+ "isurl": "^1.0.0-alpha5",
+ "tunnel-agent": "^0.6.0",
+ "url-to-options": "^1.0.1"
+ }
+ },
+ "chai": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
+ "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
+ "dev": true,
+ "requires": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "pathval": "^1.1.0",
+ "type-detect": "^4.0.5"
+ }
+ },
+ "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"
+ }
+ },
+ "change-case": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.1.tgz",
+ "integrity": "sha512-qRlUWn/hXnX1R1LBDF/RelJLiqNjKjUqlmuBVSEIyye8kq49CXqkZWKmi8XeUAdDXWFOcGLUMZ+aHn3Q5lzUXw==",
+ "dev": true,
+ "requires": {
+ "camel-case": "^4.1.1",
+ "capital-case": "^1.0.3",
+ "constant-case": "^3.0.3",
+ "dot-case": "^3.0.3",
+ "header-case": "^2.0.3",
+ "no-case": "^3.0.3",
+ "param-case": "^3.0.3",
+ "pascal-case": "^3.1.1",
+ "path-case": "^3.0.3",
+ "sentence-case": "^3.0.3",
+ "snake-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
+ "check-export-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/check-export-map/-/check-export-map-1.0.1.tgz",
+ "integrity": "sha512-6nJK5v9fiUQjAACrLyVlIm8UlAak5zdvYxJhpl0zYa7IqUElInMU6lRL/+rTHjEmy+hbkn5Wphq4Rj9cRkEbqg==",
+ "dev": true,
+ "requires": {
+ "kolorist": "^1.2.3",
+ "mri": "^1.1.6"
+ }
+ },
+ "chokidar": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
+ "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ }
+ },
+ "chownr": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
+ "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
+ "dev": true
+ },
+ "chrome-launcher": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz",
+ "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "escape-string-regexp": "^1.0.5",
+ "is-wsl": "^2.2.0",
+ "lighthouse-logger": "^1.0.0",
+ "mkdirp": "^0.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true
+ },
+ "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",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ }
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ },
+ "dependencies": {
+ "mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true
+ }
+ }
+ },
+ "coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "dev": true,
+ "requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
+ "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.4"
+ }
+ },
+ "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
+ },
+ "color-string": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz",
+ "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colorette": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
+ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
+ "dev": true
+ },
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "dev": true,
+ "requires": {
+ "color": "^0.11.0",
+ "css-color-names": "0.0.4",
+ "has": "^1.0.1"
+ },
+ "dependencies": {
+ "color": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2",
+ "color-convert": "^1.3.0",
+ "color-string": "^0.3.0"
+ }
+ },
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ }
+ }
+ },
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "compare-versions": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
+ "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
+ "dev": true
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "compress-commons": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz",
+ "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "^0.2.13",
+ "crc32-stream": "^4.0.1",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-with-sourcemaps": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
+ "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "connect": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "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
+ }
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "constant-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.3.tgz",
+ "integrity": "sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA==",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0",
+ "upper-case": "^2.0.1"
+ }
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.6.10",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz",
+ "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==",
+ "dev": true
+ },
+ "core-js-compat": {
+ "version": "3.4.5",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.5.tgz",
+ "integrity": "sha512-rYVvzvKJDKoefdAC+q6VP63vp5hMmeVONCi9pVUbU1qRrtVrmAk/nPhnRg+i+XFd775m1hpG2Yd5RY3X45ccuw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.7.3",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ },
+ "dependencies": {
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ }
+ }
+ },
+ "coveralls": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz",
+ "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==",
+ "dev": true,
+ "requires": {
+ "js-yaml": "^3.13.1",
+ "lcov-parse": "^1.0.0",
+ "log-driver": "^1.2.7",
+ "minimist": "^1.2.0",
+ "request": "^2.88.0"
+ }
+ },
+ "crc-32": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
+ "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
+ "dev": true,
+ "requires": {
+ "exit-on-epipe": "~1.0.1",
+ "printj": "~1.1.0"
+ }
+ },
+ "crc32-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz",
+ "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==",
+ "dev": true,
+ "requires": {
+ "crc-32": "^1.2.0",
+ "readable-stream": "^3.4.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "cross-env": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz",
+ "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.1"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true
+ },
+ "css-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-modules-loader-core": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz",
+ "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=",
+ "dev": true,
+ "requires": {
+ "icss-replace-symbols": "1.1.0",
+ "postcss": "6.0.1",
+ "postcss-modules-extract-imports": "1.1.0",
+ "postcss-modules-local-by-default": "1.2.0",
+ "postcss-modules-scope": "1.1.0",
+ "postcss-modules-values": "1.3.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
+ "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "css-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
+ "dev": true
+ },
+ "css-selector-tokenizer": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz",
+ "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "fastparse": "^1.1.2"
+ }
+ },
+ "css-shorthand-properties": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz",
+ "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==",
+ "dev": true
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.37",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.4",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "css-value": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz",
+ "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=",
+ "dev": true
+ },
+ "css-what": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
+ "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
+ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.7",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
+ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.1",
+ "postcss-colormin": "^4.0.3",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.2",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.11",
+ "postcss-merge-rules": "^4.0.3",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.2",
+ "postcss-minify-params": "^4.0.2",
+ "postcss-minify-selectors": "^4.0.2",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.2",
+ "postcss-normalize-positions": "^4.0.2",
+ "postcss-normalize-repeat-style": "^4.0.2",
+ "postcss-normalize-string": "^4.0.2",
+ "postcss-normalize-timing-functions": "^4.0.2",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.2",
+ "postcss-ordered-values": "^4.1.2",
+ "postcss-reduce-initial": "^4.0.3",
+ "postcss-reduce-transforms": "^4.0.2",
+ "postcss-svgo": "^4.0.2",
+ "postcss-unique-selectors": "^4.0.1"
+ }
+ },
+ "cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+ "dev": true
+ },
+ "cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+ "dev": true
+ },
+ "cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
+ "dev": true
+ },
+ "csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "dev": true,
+ "requires": {
+ "css-tree": "^1.1.2"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz",
+ "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "csstype": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz",
+ "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==",
+ "dev": true
+ },
+ "custom-event": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "date-format": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz",
+ "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==",
+ "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"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "decompress": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+ "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
+ "dev": true,
+ "requires": {
+ "decompress-tar": "^4.0.0",
+ "decompress-tarbz2": "^4.0.0",
+ "decompress-targz": "^4.0.0",
+ "decompress-unzip": "^4.0.1",
+ "graceful-fs": "^4.1.10",
+ "make-dir": "^1.0.0",
+ "pify": "^2.3.0",
+ "strip-dirs": "^2.0.0"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "decompress-response": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^2.0.0"
+ }
+ },
+ "decompress-tar": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+ "dev": true,
+ "requires": {
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0",
+ "tar-stream": "^1.5.2"
+ },
+ "dependencies": {
+ "bl": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
+ "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "dev": true
+ },
+ "tar-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+ "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+ "dev": true,
+ "requires": {
+ "bl": "^1.0.0",
+ "buffer-alloc": "^1.2.0",
+ "end-of-stream": "^1.0.0",
+ "fs-constants": "^1.0.0",
+ "readable-stream": "^2.3.0",
+ "to-buffer": "^1.1.1",
+ "xtend": "^4.0.0"
+ }
+ }
+ }
+ },
+ "decompress-tarbz2": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+ "dev": true,
+ "requires": {
+ "decompress-tar": "^4.1.0",
+ "file-type": "^6.1.0",
+ "is-stream": "^1.1.0",
+ "seek-bzip": "^1.0.5",
+ "unbzip2-stream": "^1.0.9"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+ "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
+ "dev": true
+ }
+ }
+ },
+ "decompress-targz": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+ "dev": true,
+ "requires": {
+ "decompress-tar": "^4.1.1",
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "dev": true
+ }
+ }
+ },
+ "decompress-unzip": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+ "dev": true,
+ "requires": {
+ "file-type": "^3.8.0",
+ "get-stream": "^2.2.0",
+ "pify": "^2.3.0",
+ "yauzl": "^2.4.2"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+ "dev": true
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "requires": {
+ "type-detect": "^4.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true
+ },
+ "defer-to-connect": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz",
+ "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+ "dev": true
+ },
+ "devtools": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/devtools/-/devtools-6.10.4.tgz",
+ "integrity": "sha512-53LoeU2S4q4cLJGKgo2Or7WU9Kc5RQscC0DbBAZcodkot1lKFbMg/z6/cQTq+XKl4kgYr5VA/s5kzNU7ScBctQ==",
+ "dev": true,
+ "requires": {
+ "@types/puppeteer-core": "^2.0.0",
+ "@types/ua-parser-js": "^0.7.33",
+ "@types/uuid": "^8.3.0",
+ "@wdio/config": "6.10.4",
+ "@wdio/logger": "6.10.4",
+ "@wdio/protocols": "6.10.0",
+ "@wdio/utils": "6.10.4",
+ "chrome-launcher": "^0.13.1",
+ "edge-paths": "^2.1.0",
+ "puppeteer-core": "^5.1.0",
+ "ua-parser-js": "^0.7.21",
+ "uuid": "^8.0.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "8.3.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz",
+ "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==",
+ "dev": true
+ }
+ }
+ },
+ "devtools-protocol": {
+ "version": "0.0.818844",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz",
+ "integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==",
+ "dev": true
+ },
+ "di": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+ "dev": true
+ },
+ "diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serialize": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+ "dev": true,
+ "requires": {
+ "custom-event": "~1.0.0",
+ "ent": "~2.2.0",
+ "extend": "^3.0.0",
+ "void-elements": "^2.0.0"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
+ "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==",
+ "dev": true
+ }
+ }
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz",
+ "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^2.0.0"
+ },
+ "dependencies": {
+ "is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "dev": true
+ }
+ }
+ },
+ "download": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
+ "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
+ "dev": true,
+ "requires": {
+ "archive-type": "^4.0.0",
+ "caw": "^2.0.1",
+ "content-disposition": "^0.5.2",
+ "decompress": "^4.2.0",
+ "ext-name": "^5.0.0",
+ "file-type": "^8.1.0",
+ "filenamify": "^2.0.0",
+ "get-stream": "^3.0.0",
+ "got": "^8.3.1",
+ "make-dir": "^1.2.0",
+ "p-event": "^2.1.0",
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "got": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
+ "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^0.7.0",
+ "cacheable-request": "^2.1.1",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "into-stream": "^3.1.0",
+ "is-retry-allowed": "^1.1.0",
+ "isurl": "^1.0.0-alpha5",
+ "lowercase-keys": "^1.0.0",
+ "mimic-response": "^1.0.0",
+ "p-cancelable": "^0.4.0",
+ "p-timeout": "^2.0.1",
+ "pify": "^3.0.0",
+ "safe-buffer": "^5.1.1",
+ "timed-out": "^4.0.1",
+ "url-parse-lax": "^3.0.0",
+ "url-to-options": "^1.0.1"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
+ "dev": true
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "edge-paths": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-2.1.0.tgz",
+ "integrity": "sha512-ZpIN1Vm5hlo9dkkST/1s8QqPNne2uwk3Plf6HcVUhnpfal0WnDRLdNj/wdQo3xRc+wnN3C25wPpPlV2E6aOunQ==",
+ "dev": true
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.314",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.314.tgz",
+ "integrity": "sha512-IKDR/xCxKFhPts7h+VaSXS02Z1mznP3fli1BbXWXeN89i2gCzKraU8qLpEid8YzKcmZdZD3Mly3cn5/lY9xsBQ==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "engine.io": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz",
+ "integrity": "sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "0.3.1",
+ "debug": "~4.1.0",
+ "engine.io-parser": "~2.2.0",
+ "ws": "^7.1.2"
+ }
+ },
+ "engine.io-client": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz",
+ "integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "~1.3.0",
+ "component-inherit": "0.0.3",
+ "debug": "~3.1.0",
+ "engine.io-parser": "~2.2.0",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.6",
+ "parseuri": "0.0.6",
+ "ws": "~6.1.0",
+ "xmlhttprequest-ssl": "~1.5.4",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "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
+ },
+ "parseqs": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
+ "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==",
+ "dev": true
+ },
+ "parseuri": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
+ "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==",
+ "dev": true
+ },
+ "ws": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
+ "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
+ "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "~0.0.7",
+ "base64-arraybuffer": "0.1.4",
+ "blob": "0.0.5",
+ "has-binary2": "~1.0.2"
+ }
+ },
+ "enquirer": {
+ "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": "^4.1.1"
+ }
+ },
+ "ent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+ "dev": true
+ },
+ "entities": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "errorstacks": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.3.0.tgz",
+ "integrity": "sha512-VjCIUbEyLymy2N1M/uTniewz+j69YC2R7Sp1UiJn04RHwyIniBib6hUZwgmphAAZTOk7LRg/wryGFEJhblEd7Q==",
+ "dev": true
+ },
+ "es-abstract": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz",
+ "integrity": "sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "string.prototype.trimleft": "^2.1.0",
+ "string.prototype.trimright": "^2.1.0"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true
+ },
+ "es6-promisify": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz",
+ "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==",
+ "dev": true
+ },
+ "esbuild": {
+ "version": "0.8.47",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.47.tgz",
+ "integrity": "sha512-4C9pInguP36c9CRDMSb6W1KrMfXrLIQVtI02Vglc43RBV0Dw49ODEnP6985mrz5iqCdQ2Cxmb9i670J/s3DBPA==",
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "eslint": {
+ "version": "5.15.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.1.tgz",
+ "integrity": "sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.9.1",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^4.0.2",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^5.0.1",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.2.2",
+ "js-yaml": "^3.12.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.11",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0"
+ }
+ },
+ "eslint-config-developit": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-developit/-/eslint-config-developit-1.1.1.tgz",
+ "integrity": "sha512-Wc2jbDhWixq9IDfFBVcFHYaOo2i3qwdVH236jQKsiNpJlfErxm0KDT5SWZiDSWU/h6ppHsru94W3DGbUg/MjzA==",
+ "dev": true,
+ "requires": {
+ "babel-eslint": "^8.0.3",
+ "eslint-plugin-compat": "^2.1.0",
+ "eslint-plugin-jest": "^21.4.2",
+ "eslint-plugin-mocha": "^4.0.0",
+ "eslint-plugin-react": "^7.0.0"
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz",
+ "integrity": "sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^6.0.0"
+ }
+ },
+ "eslint-plugin-compat": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-2.7.0.tgz",
+ "integrity": "sha512-3J4Ic1WS+SgF1smUOc62fdf7Cnrdsg0GNwKmGVPziPtWdrc2vV5Oq2ut4kG6SM5DJcxOoz/sWJIN7rkcsWh60Q==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "browserslist": "^4.4.1",
+ "caniuse-db": "^1.0.30000935",
+ "mdn-browser-compat-data": "^0.0.65"
+ }
+ },
+ "eslint-plugin-jest": {
+ "version": "21.27.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-21.27.2.tgz",
+ "integrity": "sha512-0E4OIgBJVlAmf1KfYFtZ3gYxgUzC5Eb3Jzmrc9ikI1OY+/cM8Kh72Ti7KfpeHNeD3HJNf9SmEfmvQLIz44Hrhw==",
+ "dev": true
+ },
+ "eslint-plugin-mocha": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-4.12.1.tgz",
+ "integrity": "sha512-hxWtYHvLA0p/PKymRfDYh9Mxt5dYkg2Goy1vZDarTEEYfELP9ksga7kKG1NUKSQy27C8Qjc7YrSWTLUhOEOksA==",
+ "dev": true,
+ "requires": {
+ "ramda": "^0.25.0"
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "7.12.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz",
+ "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3",
+ "doctrine": "^2.1.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.0.1",
+ "object.fromentries": "^2.0.0",
+ "prop-types": "^15.6.2",
+ "resolve": "^1.9.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "dev": true
+ },
+ "espree": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.7",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
+ "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "dev": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ }
+ }
+ },
+ "executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "requires": {
+ "pify": "^2.2.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "exit-on-epipe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
+ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^2.1.0"
+ },
+ "dependencies": {
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "dev": true
+ },
+ "ext-list": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
+ "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
+ "dev": true,
+ "requires": {
+ "mime-db": "^1.28.0"
+ }
+ },
+ "ext-name": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
+ "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
+ "dev": true,
+ "requires": {
+ "ext-list": "^2.0.0",
+ "sort-keys-length": "^1.0.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ }
+ }
+ },
+ "extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "requires": {
+ "@types/yauzl": "^2.9.1",
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastparse": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
+ "dev": true
+ },
+ "fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "file-type": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
+ "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
+ "dev": true
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "filename-reserved-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
+ "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
+ "dev": true
+ },
+ "filenamify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
+ "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
+ "dev": true,
+ "requires": {
+ "filename-reserved-regex": "^2.0.0",
+ "strip-outer": "^1.0.0",
+ "trim-repeated": "^1.0.0"
+ }
+ },
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "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-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "find-versions": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
+ "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
+ "dev": true,
+ "requires": {
+ "semver-regex": "^2.0.0"
+ }
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "dev": true,
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ }
+ },
+ "flatted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+ "dev": true
+ },
+ "flatten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
+ "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==",
+ "dev": true
+ },
+ "flow-remove-types": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-1.2.3.tgz",
+ "integrity": "sha512-ypq/U3V+t9atYiOuSJd40tekCra03EHKoRsiK/wXGrsZimuum0kdwVY7Yv0HTaoXgHW1WiayomYd+Q3kkvPl9Q==",
+ "dev": true,
+ "requires": {
+ "babylon": "^6.15.0",
+ "vlq": "^0.2.1"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ }
+ }
+ },
+ "follow-redirects": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz",
+ "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "generic-names": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz",
+ "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.1.0"
+ }
+ },
+ "gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
+ "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
+ "dev": true
+ },
+ "get-port": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
+ "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==",
+ "dev": true
+ },
+ "get-proxy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
+ "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
+ "dev": true,
+ "requires": {
+ "npm-conf": "^1.1.0"
+ }
+ },
+ "get-stdin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "github-from-package": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "global-agent": {
+ "version": "2.1.12",
+ "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz",
+ "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==",
+ "dev": true,
+ "requires": {
+ "boolean": "^3.0.1",
+ "core-js": "^3.6.5",
+ "es6-error": "^4.1.1",
+ "matcher": "^3.0.0",
+ "roarr": "^2.15.3",
+ "semver": "^7.3.2",
+ "serialize-error": "^7.0.1"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.0.tgz",
+ "integrity": "sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==",
+ "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
+ }
+ }
+ },
+ "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
+ },
+ "globalthis": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz",
+ "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
+ "globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
+ "dev": true
+ },
+ "globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "got": {
+ "version": "11.8.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-11.8.0.tgz",
+ "integrity": "sha512-k9noyoIIY9EejuhaBNLyZ31D5328LeqnyPNXJQb2XlJZcKakLqN5m6O/ikhq/0lw56kUYS54fVm+D1x57YC9oQ==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^4.0.0",
+ "@szmarczak/http-timer": "^4.0.5",
+ "@types/cacheable-request": "^6.0.1",
+ "@types/responselike": "^1.0.0",
+ "cacheable-lookup": "^5.0.3",
+ "cacheable-request": "^7.0.1",
+ "decompress-response": "^6.0.0",
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
+ },
+ "dependencies": {
+ "@sindresorhus/is": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
+ "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==",
+ "dev": true
+ },
+ "cacheable-request": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz",
+ "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==",
+ "dev": true,
+ "requires": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^4.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^4.1.0",
+ "responselike": "^2.0.0"
+ }
+ },
+ "decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^3.1.0"
+ }
+ },
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+ "dev": true
+ },
+ "json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "keyv": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
+ "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true
+ },
+ "mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
+ "dev": true
+ },
+ "p-cancelable": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
+ "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==",
+ "dev": true
+ },
+ "responselike": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
+ "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^2.0.0"
+ }
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
+ "dev": true
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true
+ },
+ "gzip-size": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
+ "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1",
+ "pify": "^4.0.1"
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "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==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-binary2": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+ "dev": true,
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "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
+ },
+ "has-symbol-support-x": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
+ "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "has-to-string-tag-x": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
+ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
+ "dev": true,
+ "requires": {
+ "has-symbol-support-x": "^1.4.1"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "header-case": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.3.tgz",
+ "integrity": "sha512-LChe/V32mnUQnTwTxd3aAlNMk8ia9tjCDb/LjYtoMrdAPApxLB+azejUk5ERZIZdIqvinwv6BAUuFXH/tQPdZA==",
+ "dev": true,
+ "requires": {
+ "capital-case": "^1.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
+ "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
+ "dev": true
+ },
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+ "dev": true
+ },
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+ "dev": true
+ },
+ "html-comment-regex": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
+ "dev": true
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "http2-wrapper": {
+ "version": "1.0.0-beta.5.2",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz",
+ "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==",
+ "dev": true,
+ "requires": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.0.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
+ "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
+ "dev": true,
+ "requires": {
+ "agent-base": "5",
+ "debug": "4"
+ }
+ },
+ "human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true
+ },
+ "husky": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.0.tgz",
+ "integrity": "sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "ci-info": "^2.0.0",
+ "compare-versions": "^3.6.0",
+ "cosmiconfig": "^7.0.0",
+ "find-versions": "^3.2.0",
+ "opencollective-postinstall": "^2.0.2",
+ "pkg-dir": "^4.2.0",
+ "please-upgrade-node": "^3.2.0",
+ "slash": "^3.0.0",
+ "which-pm-runs": "^1.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "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
+ },
+ "cosmiconfig": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+ "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+ "dev": true,
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "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
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
+ "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-replace-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "iltorb": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.5.tgz",
+ "integrity": "sha512-EMCMl3LnnNSZJS5QrxyZmMTaAC4+TJkM5woD+xbpm9RB+mFYCr7C05GFE3TEGCsVQSVHmjX+3sf5AiwsylNInQ==",
+ "dev": true,
+ "requires": {
+ "detect-libc": "^1.0.3",
+ "nan": "^2.14.0",
+ "npmlog": "^4.1.2",
+ "prebuild-install": "^5.3.3",
+ "which-pm-runs": "^1.0.0"
+ }
+ },
+ "import-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+ "dev": true,
+ "requires": {
+ "import-from": "^2.1.0"
+ }
+ },
+ "import-fresh": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "import-from": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ }
+ }
+ },
+ "import-lazy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
+ "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.12",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.4.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.1.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "into-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
+ "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
+ "dev": true,
+ "requires": {
+ "from2": "^2.1.1",
+ "p-is-promise": "^1.1.0"
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.5.0"
+ },
+ "dependencies": {
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+ "dev": true
+ }
+ }
+ },
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "dev": true,
+ "requires": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true
+ },
+ "is-docker": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
+ "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
+ "dev": true
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
+ "dev": true
+ },
+ "is-natural-number": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
+ "dev": true
+ },
+ "is-negative-zero": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
+ "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
+ "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-svg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isbinaryfile": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz",
+ "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
+ "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz",
+ "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.7.5",
+ "@babel/parser": "^7.7.5",
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/core": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz",
+ "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.8.4",
+ "@babel/helpers": "^7.8.4",
+ "@babel/parser": "^7.8.4",
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.4",
+ "@babel/types": "^7.8.3",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "@babel/template": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
+ "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
+ "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.8.4",
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/parser": "^7.8.4",
+ "@babel/types": "^7.8.3",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
+ "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/template": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
+ "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ }
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz",
+ "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.4",
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/template": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
+ "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
+ "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.8.4",
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/parser": "^7.8.4",
+ "@babel/types": "^7.8.3",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ }
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz",
+ "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==",
+ "dev": true
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.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
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
+ "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
+ "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "isurl": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
+ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+ "dev": true,
+ "requires": {
+ "has-to-string-tag-x": "^1.2.0",
+ "is-object": "^1.0.1"
+ }
+ },
+ "jest-worker": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz",
+ "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=",
+ "dev": true,
+ "requires": {
+ "merge-stream": "^1.0.1"
+ },
+ "dependencies": {
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ }
+ }
+ },
+ "js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
+ "js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
+ "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz",
+ "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3",
+ "object.assign": "^4.1.0"
+ }
+ },
+ "just-extend": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.1.tgz",
+ "integrity": "sha512-aWgeGFW67BP3e5181Ep1Fv2v8z//iBJfrvyTnq8wG86vEESwmonn1zPBJ0VfmT9CJq2FIT0VsETtrNFm2a+SHA==",
+ "dev": true
+ },
+ "karma": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-5.2.3.tgz",
+ "integrity": "sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ==",
+ "dev": true,
+ "requires": {
+ "body-parser": "^1.19.0",
+ "braces": "^3.0.2",
+ "chokidar": "^3.4.2",
+ "colors": "^1.4.0",
+ "connect": "^3.7.0",
+ "di": "^0.0.1",
+ "dom-serialize": "^2.2.1",
+ "glob": "^7.1.6",
+ "graceful-fs": "^4.2.4",
+ "http-proxy": "^1.18.1",
+ "isbinaryfile": "^4.0.6",
+ "lodash": "^4.17.19",
+ "log4js": "^6.2.1",
+ "mime": "^2.4.5",
+ "minimatch": "^3.0.4",
+ "qjobs": "^1.2.0",
+ "range-parser": "^1.2.1",
+ "rimraf": "^3.0.2",
+ "socket.io": "^2.3.0",
+ "source-map": "^0.6.1",
+ "tmp": "0.2.1",
+ "ua-parser-js": "0.7.22",
+ "yargs": "^15.3.1"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
+ "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+ "dev": true,
+ "requires": {
+ "rimraf": "^3.0.0"
+ }
+ }
+ }
+ },
+ "karma-chai-sinon": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/karma-chai-sinon/-/karma-chai-sinon-0.1.5.tgz",
+ "integrity": "sha1-XDksqVJHgYlR1rV5AvAsNugDdTo=",
+ "dev": true
+ },
+ "karma-chrome-launcher": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz",
+ "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==",
+ "dev": true,
+ "requires": {
+ "which": "^1.2.1"
+ }
+ },
+ "karma-coverage": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz",
+ "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.1",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.0",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "karma-esbuild": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/karma-esbuild/-/karma-esbuild-2.2.0.tgz",
+ "integrity": "sha512-6dZSoKHod2YJzQSe5sbUhXFuuLR8TIJXGRRxf4ZOgBzk34WTtasBS7+eRDbVRjp/hryULvhD06Vx7bo/veg8Yw==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^3.5.1",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "chokidar": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+ "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.1",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ }
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "karma-mocha": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz",
+ "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.3"
+ }
+ },
+ "karma-mocha-reporter": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
+ "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.1.0",
+ "log-symbols": "^2.1.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "karma-sauce-launcher": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-4.3.4.tgz",
+ "integrity": "sha512-sXka3l3Z9x+UhGMsg0fU+i+Jq82j7tfApMrAupM8JxO8ZskmSCozUM4cffLTwuzJPYjf0ffFNu3Up5Pzr26N/g==",
+ "dev": true,
+ "requires": {
+ "fs-extra": "^9.0.1",
+ "global-agent": "^2.1.12",
+ "saucelabs": "^4.5.1",
+ "webdriverio": "^6.7.0"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
+ "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^1.0.0"
+ }
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ },
+ "dependencies": {
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true
+ }
+ }
+ },
+ "universalify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
+ "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
+ "dev": true
+ }
+ }
+ },
+ "karma-sinon": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz",
+ "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=",
+ "dev": true
+ },
+ "karma-sourcemap-loader": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz",
+ "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "keyv": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
+ "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "kolorist": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.2.10.tgz",
+ "integrity": "sha512-S3QtGjCHyINclP4LSClgHw4gi/NxTFcSorqD9SWfrREHKtMyGfi6pyDCTbpQaqyZrMAjB4Exde8eco6kejkqQg==",
+ "dev": true
+ },
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.5"
+ }
+ },
+ "lcov-parse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
+ "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lighthouse-logger": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz",
+ "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.8",
+ "marky": "^1.2.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
+ }
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+ "dev": true
+ },
+ "lint-staged": {
+ "version": "10.5.2",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.2.tgz",
+ "integrity": "sha512-e8AYR1TDlzwB8VVd38Xu2lXDZf6BcshVqKVuBQThDJRaJLobqKnpbm4dkwJ2puypQNbLr9KF/9mfA649mAGvjA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "cli-truncate": "^2.1.0",
+ "commander": "^6.2.0",
+ "cosmiconfig": "^7.0.0",
+ "debug": "^4.2.0",
+ "dedent": "^0.7.0",
+ "enquirer": "^2.3.6",
+ "execa": "^4.1.0",
+ "listr2": "^3.2.2",
+ "log-symbols": "^4.0.0",
+ "micromatch": "^4.0.2",
+ "normalize-path": "^3.0.0",
+ "please-upgrade-node": "^3.2.0",
+ "string-argv": "0.3.1",
+ "stringify-object": "^3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "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
+ },
+ "commander": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz",
+ "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+ "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+ "dev": true,
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "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
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
+ "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
+ "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "listr2": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.2.3.tgz",
+ "integrity": "sha512-vUb80S2dSUi8YxXahO8/I/s29GqnOL8ozgHVLjfWQXa03BNEeS1TpBLjh2ruaqq5ufx46BRGvfymdBSuoXET5w==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "cli-truncate": "^2.1.0",
+ "figures": "^3.2.0",
+ "indent-string": "^4.0.0",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rxjs": "^6.6.3",
+ "through": "^2.3.8"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "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
+ },
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "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
+ },
+ "rxjs": {
+ "version": "6.6.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
+ "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.difference": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
+ "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=",
+ "dev": true
+ },
+ "lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+ "dev": true
+ },
+ "lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
+ "dev": true
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "lodash.isobject": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
+ "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lodash.sumby": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.sumby/-/lodash.sumby-4.6.0.tgz",
+ "integrity": "sha1-fYdzfdshbaL35efNLdnEA6eIc0Y=",
+ "dev": true
+ },
+ "lodash.union": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
+ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "lodash.zip": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz",
+ "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=",
+ "dev": true
+ },
+ "log-driver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
+ "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "ansi-escapes": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
+ "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.11.0"
+ }
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.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
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
+ "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
+ "dev": true
+ }
+ }
+ },
+ "log4js": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz",
+ "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==",
+ "dev": true,
+ "requires": {
+ "date-format": "^3.0.0",
+ "debug": "^4.1.1",
+ "flatted": "^2.0.1",
+ "rfdc": "^1.1.4",
+ "streamroller": "^2.2.4"
+ }
+ },
+ "loglevel": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz",
+ "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==",
+ "dev": true
+ },
+ "loglevel-plugin-prefix": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz",
+ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz",
+ "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.10.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "magic-string": {
+ "version": "0.25.7",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
+ "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+ "dev": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.4"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "marky": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz",
+ "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==",
+ "dev": true
+ },
+ "matcher": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
+ "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^4.0.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ }
+ }
+ },
+ "math-expression-evaluator": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.3.3.tgz",
+ "integrity": "sha512-geKTlqoxnjqHoWqB71h0kchWIC23a3yfwwbZu4E2amjvGLF+fTjCCwBQOHkE0/oHc6KdnSVmMt3QB82KaPmKEA==",
+ "dev": true
+ },
+ "math-random": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+ "dev": true
+ },
+ "maxmin": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz",
+ "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0",
+ "figures": "^1.0.1",
+ "gzip-size": "^3.0.0",
+ "pretty-bytes": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ }
+ },
+ "gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1"
+ }
+ },
+ "pretty-bytes": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
+ "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "mdn-browser-compat-data": {
+ "version": "0.0.65",
+ "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-0.0.65.tgz",
+ "integrity": "sha512-OC27wWCLD2mw2aW6+8zZTwCv0+9WMTOFxuvTBfWoCx8f9gVFNUXHxGYA16mhKyso7hEa4tw1hY+ruCB/kg3EzQ==",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.2"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
+ "dev": true
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "memorystream": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "microbundle": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/microbundle/-/microbundle-0.11.0.tgz",
+ "integrity": "sha512-Lt2f8OhC2y2uKyJ5zA8lEEiDsIAbk6yllBuoAWLIdYVIXYqOdN9mO3DI7VW7x/fw87gdnCLIJdVtpP6kaI99LA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.2.2",
+ "@babel/plugin-proposal-class-properties": "7.2.1",
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@babel/polyfill": "^7.0.0",
+ "asyncro": "^3.0.0",
+ "autoprefixer": "^9.0.0",
+ "babel-plugin-transform-async-to-promises": "^0.8.3",
+ "brotli-size": "^0.0.3",
+ "camelcase": "^5.0.0",
+ "chalk": "^2.4.0",
+ "cssnano": "^4.1.7",
+ "es6-promisify": "^6.0.1",
+ "gzip-size": "^5.0.0",
+ "pretty-bytes": "^5.1.0",
+ "rollup": "^0.67.3",
+ "rollup-plugin-alias": "^1.5.1",
+ "rollup-plugin-babel": "^4.1.0-0",
+ "rollup-plugin-buble": "^0.19.4",
+ "rollup-plugin-bundle-size": "^1.0.1",
+ "rollup-plugin-commonjs": "^9.0.0",
+ "rollup-plugin-es3": "^1.1.0",
+ "rollup-plugin-flow": "^1.1.1",
+ "rollup-plugin-json": "^3.1.0",
+ "rollup-plugin-node-resolve": "^4.0.0",
+ "rollup-plugin-postcss": "^1.6.1",
+ "rollup-plugin-preserve-shebang": "^0.1.6",
+ "rollup-plugin-sizes": "^0.4.2",
+ "rollup-plugin-terser": "^3.0.0",
+ "rollup-plugin-typescript2": "^0.19.0",
+ "sade": "^1.4.0",
+ "tiny-glob": "^0.2.6",
+ "tslib": "^1.9.0",
+ "typescript": ">=2.8.3"
+ }
+ },
+ "micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ }
+ },
+ "mime": {
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+ "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.42.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz",
+ "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.25",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz",
+ "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.42.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "mimic-response": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true
+ },
+ "mocha": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz",
+ "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==",
+ "dev": true,
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.4.3",
+ "debug": "4.2.0",
+ "diff": "4.0.2",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.1.6",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "3.14.0",
+ "log-symbols": "4.0.0",
+ "minimatch": "3.0.4",
+ "ms": "2.1.2",
+ "nanoid": "3.1.12",
+ "serialize-javascript": "5.0.1",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "7.2.0",
+ "which": "2.0.2",
+ "wide-align": "1.1.3",
+ "workerpool": "6.0.2",
+ "yargs": "13.3.2",
+ "yargs-parser": "13.1.2",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.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.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
+ "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "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
+ },
+ "js-yaml": {
+ "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",
+ "esprima": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "log-symbols": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
+ "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "serialize-javascript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+ "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "strip-json-comments": {
+ "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
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.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
+ }
+ }
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "module-details-from-path": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
+ "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=",
+ "dev": true
+ },
+ "mri": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz",
+ "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==",
+ "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
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.1.12",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz",
+ "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==",
+ "dev": true
+ },
+ "napi-build-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "nise": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-4.0.4.tgz",
+ "integrity": "sha512-bTTRUNlemx6deJa+ZyoCUTRvH3liK5+N6VQZ4NIw90AgDXY6iPnsqplNFf6STcj+ePk0H/xqxnP75Lr0J0Fq3A==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.7.0",
+ "@sinonjs/fake-timers": "^6.0.0",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
+ }
+ },
+ "no-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz",
+ "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==",
+ "dev": true,
+ "requires": {
+ "lower-case": "^2.0.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node-abi": {
+ "version": "2.19.3",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz",
+ "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==",
+ "dev": true,
+ "requires": {
+ "semver": "^5.4.1"
+ }
+ },
+ "node-fetch": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
+ "dev": true
+ },
+ "node-modules-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
+ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "dev": true
+ },
+ "node-releases": {
+ "version": "1.1.41",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.41.tgz",
+ "integrity": "sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "noop-logger": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
+ "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
+ "dev": true
+ },
+ "npm-conf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+ "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+ "dev": true,
+ "requires": {
+ "config-chain": "^1.1.11",
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "npm-merge-driver": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/npm-merge-driver/-/npm-merge-driver-2.3.6.tgz",
+ "integrity": "sha512-uPjCEWZ93f379zw0AMEgFtZIlpSSnpXc8BEIcs8yYHEZs5Y3d85OZHisLjNhjbYnbdAznxTq+VbyBWAQZDEm9w==",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1",
+ "yargs": "^10.0.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz",
+ "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^8.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.0.0.tgz",
+ "integrity": "sha1-IdR2Mw5agieaS4gTRb8GYQLiGcY=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-merge-driver-install": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/npm-merge-driver-install/-/npm-merge-driver-install-1.1.1.tgz",
+ "integrity": "sha512-QoEoJ1SAkkVPoZ9p84yel5xiMeXXqpkw1KwA8hP0iVO/NWZUYYgTUkXRL54YJ7HyLK3aTaiQrRVfpPpb9Cm/FA==",
+ "dev": true,
+ "requires": {
+ "find-root": "^1.1.0",
+ "is-ci": "^1.2.0",
+ "npm-merge-driver": "^2.3.5"
+ }
+ },
+ "npm-run-all": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
+ "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "chalk": "^2.4.1",
+ "cross-spawn": "^6.0.5",
+ "memorystream": "^0.3.1",
+ "minimatch": "^3.0.4",
+ "pidtree": "^0.3.0",
+ "read-pkg": "^3.0.0",
+ "shell-quote": "^1.6.1",
+ "string.prototype.padend": "^3.0.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz",
+ "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.15.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz",
+ "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.18.0-next.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+ "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-negative-zero": "^2.0.0",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
+ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+ "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "object-inspect": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz",
+ "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1",
+ "has": "^1.0.3"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.18.0-next.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+ "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-negative-zero": "^2.0.0",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
+ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+ "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "object-inspect": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "opencollective-postinstall": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+ "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
+ "dev": true
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "os-filter-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
+ "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
+ "dev": true,
+ "requires": {
+ "arch": "^2.1.0"
+ }
+ },
+ "os-homedir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-2.0.0.tgz",
+ "integrity": "sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-cancelable": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
+ "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
+ "dev": true
+ },
+ "p-event": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz",
+ "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
+ "dev": true,
+ "requires": {
+ "p-timeout": "^2.0.1"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-is-promise": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+ "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-queue": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.2.tgz",
+ "integrity": "sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng==",
+ "dev": true
+ },
+ "p-timeout": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+ "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+ "dev": true,
+ "requires": {
+ "p-finally": "^1.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "param-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz",
+ "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==",
+ "dev": true,
+ "requires": {
+ "dot-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ }
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "pascal-case": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz",
+ "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "path-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.3.tgz",
+ "integrity": "sha512-UMFU6UETFpCNWbIWNczshPrnK/7JAXBP2NYw80ojElbQ2+JYxdqWDBkvvqM93u4u6oLmuJ/tPOf2tM8KtXv4eg==",
+ "dev": true,
+ "requires": {
+ "dot-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "dev": true
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "dev": true
+ },
+ "pidtree": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz",
+ "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==",
+ "dev": true
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pirates": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
+ "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+ "dev": true,
+ "requires": {
+ "node-modules-regexp": "^1.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "platform": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz",
+ "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==",
+ "dev": true
+ },
+ "please-upgrade-node": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+ "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+ "dev": true,
+ "requires": {
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "postcss": {
+ "version": "7.0.35",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+ "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz",
+ "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.27",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "postcss-colormin": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-filter-plugins": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
+ "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-load-config": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz",
+ "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^2.1.0",
+ "object-assign": "^4.1.0",
+ "postcss-load-options": "^1.2.0",
+ "postcss-load-plugins": "^2.3.0"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "requires": {
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.4.3",
+ "minimist": "^1.2.0",
+ "object-assign": "^4.1.0",
+ "os-homedir": "^1.0.1",
+ "parse-json": "^2.2.0",
+ "require-from-string": "^1.1.0"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ }
+ }
+ },
+ "postcss-load-options": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz",
+ "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^2.1.0",
+ "object-assign": "^4.1.0"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "requires": {
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.4.3",
+ "minimist": "^1.2.0",
+ "object-assign": "^4.1.0",
+ "os-homedir": "^1.0.1",
+ "parse-json": "^2.2.0",
+ "require-from-string": "^1.1.0"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ }
+ }
+ },
+ "postcss-load-plugins": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz",
+ "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^2.1.1",
+ "object-assign": "^4.1.0"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "requires": {
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.4.3",
+ "minimist": "^1.2.0",
+ "object-assign": "^4.1.0",
+ "os-homedir": "^1.0.1",
+ "parse-json": "^2.2.0",
+ "require-from-string": "^1.1.0"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.10",
+ "postcss-value-parser": "^3.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+ "dev": true,
+ "requires": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
+ "dev": true
+ },
+ "postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-params": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-modules": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-1.5.0.tgz",
+ "integrity": "sha512-KiAihzcV0TxTTNA5OXreyIXctuHOfR50WIhqBpc8pe0Q5dcs/Uap9EVlifOI9am7zGGdGOJQ6B1MPYKo2UxgOg==",
+ "dev": true,
+ "requires": {
+ "css-modules-loader-core": "^1.1.0",
+ "generic-names": "^2.0.1",
+ "lodash.camelcase": "^4.3.0",
+ "postcss": "^7.0.1",
+ "string-hash": "^1.1.1"
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
+ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
+ "dev": true,
+ "requires": {
+ "postcss": "^6.0.1"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
+ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+ "dev": true,
+ "requires": {
+ "css-selector-tokenizer": "^0.7.0",
+ "postcss": "^6.0.1"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
+ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+ "dev": true,
+ "requires": {
+ "css-selector-tokenizer": "^0.7.0",
+ "postcss": "^6.0.1"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-modules-values": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
+ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+ "dev": true,
+ "requires": {
+ "icss-replace-symbols": "^1.1.0",
+ "postcss": "^6.0.1"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-normalize-display-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
+ "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-svgo": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
+ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+ "dev": true,
+ "requires": {
+ "is-svg": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
+ "dev": true
+ },
+ "postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "prebuild-install": {
+ "version": "5.3.6",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz",
+ "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==",
+ "dev": true,
+ "requires": {
+ "detect-libc": "^1.0.3",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^2.7.0",
+ "noop-logger": "^0.1.1",
+ "npmlog": "^4.0.1",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^3.0.3",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0",
+ "which-pm-runs": "^1.0.0"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "prettier": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+ "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.4.1.tgz",
+ "integrity": "sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA==",
+ "dev": true
+ },
+ "printj": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
+ "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "promise.series": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz",
+ "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=",
+ "dev": true
+ },
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true
+ },
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
+ "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "puppeteer-core": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-5.5.0.tgz",
+ "integrity": "sha512-tlA+1n+ziW/Db03hVV+bAecDKse8ihFRXYiEypBe9IlLRvOCzYFG6qrCMBYK34HO/Q/Ecjc+tvkHRAfLVH+NgQ==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "devtools-protocol": "0.0.818844",
+ "extract-zip": "^2.0.0",
+ "https-proxy-agent": "^4.0.0",
+ "node-fetch": "^2.6.1",
+ "pkg-dir": "^4.2.0",
+ "progress": "^2.0.1",
+ "proxy-from-env": "^1.0.0",
+ "rimraf": "^3.0.2",
+ "tar-fs": "^2.0.0",
+ "unbzip2-stream": "^1.3.3",
+ "ws": "^7.2.3"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qjobs": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
+ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==",
+ "dev": true
+ },
+ "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
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true
+ },
+ "ramda": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz",
+ "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "react-is": {
+ "version": "16.12.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz",
+ "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdir-glob": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz",
+ "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==",
+ "dev": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^0.4.2",
+ "math-expression-evaluator": "^1.2.14",
+ "reduce-function-call": "^1.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz",
+ "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
+ "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
+ "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
+ "dev": true,
+ "requires": {
+ "private": "^0.1.6"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
+ "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^8.1.0",
+ "regjsgen": "^0.5.0",
+ "regjsparser": "^0.6.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.1.0"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
+ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-from-string": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
+ "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "reserved-words": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz",
+ "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz",
+ "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-alpn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
+ "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^1.0.0"
+ }
+ },
+ "resq": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.0.tgz",
+ "integrity": "sha512-hCUd0xMalqtPDz4jXIqs0M5Wnv/LZXN8h7unFOo4/nvExT9dDPbhwd3udRxLlp0HgBnHcV009UlduE9NZi7A6w==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "rfdc": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz",
+ "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==",
+ "dev": true
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+ "dev": true
+ },
+ "rgb2hex": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.3.tgz",
+ "integrity": "sha512-clEe0m1xv+Tva1B/TOepuIcvLAxP0U+sCDfgt1SX1HmI2Ahr5/Cd/nzJM1e78NKVtWdoo0s33YehpFA8UfIShQ==",
+ "dev": true
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "roarr": {
+ "version": "2.15.4",
+ "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
+ "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
+ "dev": true,
+ "requires": {
+ "boolean": "^3.0.1",
+ "detect-node": "^2.0.4",
+ "globalthis": "^1.0.1",
+ "json-stringify-safe": "^5.0.1",
+ "semver-compare": "^1.0.0",
+ "sprintf-js": "^1.1.2"
+ },
+ "dependencies": {
+ "sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true
+ }
+ }
+ },
+ "rollup": {
+ "version": "0.67.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.67.4.tgz",
+ "integrity": "sha512-AVuP73mkb4BBMUmksQ3Jw0jTrBTU1i7rLiUYjFxLZGb3xiFmtVEg40oByphkZAsiL0bJC3hRAJUQos/e5EBd+w==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "0.0.39",
+ "@types/node": "*"
+ }
+ },
+ "rollup-plugin-alias": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-alias/-/rollup-plugin-alias-1.5.2.tgz",
+ "integrity": "sha512-ODeZXhTxpD48sfcYLAFc1BGrsXKDj7o1CSNH3uYbdK3o0NxyMmaQPTNgW+ko+am92DLC8QSTe4kyxTuEkI5S5w==",
+ "dev": true,
+ "requires": {
+ "slash": "^3.0.0"
+ }
+ },
+ "rollup-plugin-babel": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz",
+ "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "rollup-pluginutils": "^2.8.1"
+ }
+ },
+ "rollup-plugin-buble": {
+ "version": "0.19.8",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.19.8.tgz",
+ "integrity": "sha512-8J4zPk2DQdk3rxeZvxgzhHh/rm5nJkjwgcsUYisCQg1QbT5yagW+hehYEW7ZNns/NVbDCTv4JQ7h4fC8qKGOKw==",
+ "dev": true,
+ "requires": {
+ "buble": "^0.19.8",
+ "rollup-pluginutils": "^2.3.3"
+ }
+ },
+ "rollup-plugin-bundle-size": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz",
+ "integrity": "sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "maxmin": "^2.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "rollup-plugin-commonjs": {
+ "version": "9.3.4",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz",
+ "integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^0.6.0",
+ "magic-string": "^0.25.2",
+ "resolve": "^1.10.0",
+ "rollup-pluginutils": "^2.6.0"
+ }
+ },
+ "rollup-plugin-es3": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-es3/-/rollup-plugin-es3-1.1.0.tgz",
+ "integrity": "sha512-jTMqQgMZ/tkjRW4scf4ln5c0OiTSi+Lx/IEyFd41ldgGoLvvg9AQxmVOl93+KaoyB7XRYToYjiHDvO40NPF/fA==",
+ "dev": true,
+ "requires": {
+ "magic-string": "^0.22.4"
+ },
+ "dependencies": {
+ "magic-string": {
+ "version": "0.22.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "dev": true,
+ "requires": {
+ "vlq": "^0.2.2"
+ }
+ }
+ }
+ },
+ "rollup-plugin-flow": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-flow/-/rollup-plugin-flow-1.1.1.tgz",
+ "integrity": "sha1-bOVo8d1Vlma3erdrS64lFAdSjbY=",
+ "dev": true,
+ "requires": {
+ "flow-remove-types": "^1.1.0",
+ "rollup-pluginutils": "^1.5.1"
+ },
+ "dependencies": {
+ "estree-walker": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz",
+ "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=",
+ "dev": true
+ },
+ "rollup-pluginutils": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
+ "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^0.2.1",
+ "minimatch": "^3.0.2"
+ }
+ }
+ }
+ },
+ "rollup-plugin-json": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz",
+ "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==",
+ "dev": true,
+ "requires": {
+ "rollup-pluginutils": "^2.3.1"
+ }
+ },
+ "rollup-plugin-node-resolve": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.4.tgz",
+ "integrity": "sha512-t/64I6l7fZ9BxqD3XlX4ZeO6+5RLKyfpwE2CiPNUKa+GocPlQhf/C208ou8y3AwtNsc6bjSk/8/6y/YAyxCIvw==",
+ "dev": true,
+ "requires": {
+ "@types/resolve": "0.0.8",
+ "builtin-modules": "^3.1.0",
+ "is-module": "^1.0.0",
+ "resolve": "^1.10.0"
+ }
+ },
+ "rollup-plugin-postcss": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-1.6.3.tgz",
+ "integrity": "sha512-se1qftVETua9ZGViud4A4gbgEQenjYnLPvjh3kTqbBZU+f0mQ9YvJptIuzPhEk5kZAHZhkwIkk2jk+byrn1XPA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "concat-with-sourcemaps": "^1.0.5",
+ "cssnano": "^3.10.0",
+ "fs-extra": "^5.0.0",
+ "import-cwd": "^2.1.0",
+ "p-queue": "^2.4.2",
+ "pify": "^3.0.0",
+ "postcss": "^6.0.21",
+ "postcss-load-config": "^1.2.0",
+ "postcss-modules": "^1.1.0",
+ "promise.series": "^0.2.0",
+ "reserved-words": "^0.1.2",
+ "resolve": "^1.5.0",
+ "rollup-pluginutils": "^2.0.1",
+ "style-inject": "^0.3.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.7.6",
+ "caniuse-db": "^1.0.30000634",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^5.2.16",
+ "postcss-value-parser": "^3.2.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "dev": true,
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "dev": true,
+ "requires": {
+ "q": "^1.1.2"
+ }
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "dev": true,
+ "requires": {
+ "autoprefixer": "^6.3.1",
+ "decamelize": "^1.1.2",
+ "defined": "^1.0.0",
+ "has": "^1.0.1",
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.14",
+ "postcss-calc": "^5.2.0",
+ "postcss-colormin": "^2.1.8",
+ "postcss-convert-values": "^2.3.4",
+ "postcss-discard-comments": "^2.0.4",
+ "postcss-discard-duplicates": "^2.0.1",
+ "postcss-discard-empty": "^2.0.1",
+ "postcss-discard-overridden": "^0.1.1",
+ "postcss-discard-unused": "^2.2.1",
+ "postcss-filter-plugins": "^2.0.0",
+ "postcss-merge-idents": "^2.1.5",
+ "postcss-merge-longhand": "^2.0.1",
+ "postcss-merge-rules": "^2.0.3",
+ "postcss-minify-font-values": "^1.0.2",
+ "postcss-minify-gradients": "^1.0.1",
+ "postcss-minify-params": "^1.0.4",
+ "postcss-minify-selectors": "^2.0.4",
+ "postcss-normalize-charset": "^1.1.0",
+ "postcss-normalize-url": "^3.0.7",
+ "postcss-ordered-values": "^2.1.0",
+ "postcss-reduce-idents": "^2.2.2",
+ "postcss-reduce-initial": "^1.0.0",
+ "postcss-reduce-transforms": "^1.0.3",
+ "postcss-svgo": "^2.1.1",
+ "postcss-unique-selectors": "^2.0.2",
+ "postcss-value-parser": "^3.2.3",
+ "postcss-zindex": "^2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "dev": true,
+ "requires": {
+ "clap": "^1.0.9",
+ "source-map": "^0.5.3"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^2.6.0"
+ }
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "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"
+ }
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.2",
+ "postcss-message-helpers": "^2.0.0",
+ "reduce-css-calc": "^1.2.6"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "dev": true,
+ "requires": {
+ "colormin": "^1.0.5",
+ "postcss": "^5.0.13",
+ "postcss-value-parser": "^3.2.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.11",
+ "postcss-value-parser": "^3.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.16"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.5.2",
+ "caniuse-api": "^1.5.2",
+ "postcss": "^5.0.4",
+ "postcss-selector-parser": "^2.2.2",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.12",
+ "postcss-value-parser": "^3.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.2",
+ "postcss-value-parser": "^3.0.2",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "has": "^1.0.1",
+ "postcss": "^5.0.14",
+ "postcss-selector-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.5"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^1.4.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.8",
+ "postcss-value-parser": "^3.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "dev": true,
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "dev": true,
+ "requires": {
+ "is-svg": "^2.0.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3",
+ "svgo": "^0.7.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ }
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ },
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "dev": true,
+ "requires": {
+ "coa": "~1.0.1",
+ "colors": "~1.1.2",
+ "csso": "~2.3.1",
+ "js-yaml": "~3.7.0",
+ "mkdirp": "~0.5.1",
+ "sax": "~1.2.1",
+ "whet.extend": "~0.9.9"
+ }
+ }
+ }
+ },
+ "rollup-plugin-preserve-shebang": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-preserve-shebang/-/rollup-plugin-preserve-shebang-0.1.6.tgz",
+ "integrity": "sha512-b+psdlXZOjmlnKmL6/YAkR8PR15VPcUNXdT35urBRJ8jE6UxHyb4HXeeN3qRZJbMJJaX1eRP72XwH6IvGFh5Jw==",
+ "dev": true,
+ "requires": {
+ "magic-string": "^0.22.4"
+ },
+ "dependencies": {
+ "magic-string": {
+ "version": "0.22.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "dev": true,
+ "requires": {
+ "vlq": "^0.2.2"
+ }
+ }
+ }
+ },
+ "rollup-plugin-sizes": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-sizes/-/rollup-plugin-sizes-0.4.2.tgz",
+ "integrity": "sha512-6VsnWb4aBPcW++3IBMNPo4NLSheoaXh+itXk1OcaolLhYemoQFb7A9hVNocwa0j2BctdmPNFcP7UJ3g///VVaA==",
+ "dev": true,
+ "requires": {
+ "filesize": "^3.5.11",
+ "lodash.foreach": "^4.5.0",
+ "lodash.sumby": "^4.6.0",
+ "module-details-from-path": "^1.0.3"
+ }
+ },
+ "rollup-plugin-terser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-3.0.0.tgz",
+ "integrity": "sha512-Ed9zRD7OoCBnh0XGlEAJle5TCUsFXMLClwKzZWnS1zbNO4MelHjfCSdFZxCAdH70M40nhZ1nRrY2GZQJhSMcjA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "jest-worker": "^23.2.0",
+ "serialize-javascript": "^1.5.0",
+ "terser": "^3.8.2"
+ }
+ },
+ "rollup-plugin-typescript2": {
+ "version": "0.19.3",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.19.3.tgz",
+ "integrity": "sha512-lsRqfBCZhMl/tq9AT5YnQvzQWzXtnx3EQYFcHD72gul7nyyoOrzx5yCEH20smpw58v6UkHHZz03FbdLEPoHWjA==",
+ "dev": true,
+ "requires": {
+ "fs-extra": "7.0.1",
+ "resolve": "1.8.1",
+ "rollup-pluginutils": "2.3.3",
+ "tslib": "1.9.3"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ },
+ "estree-walker": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
+ "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "resolve": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz",
+ "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^0.5.2",
+ "micromatch": "^2.3.11"
+ }
+ },
+ "tslib": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+ "dev": true
+ }
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
+ "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^0.6.1"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rxjs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
+ "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "sade": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz",
+ "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==",
+ "dev": true,
+ "requires": {
+ "mri": "^1.1.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "saucelabs": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-4.6.0.tgz",
+ "integrity": "sha512-GAytkfq2QTVzwMS4/A99YQ79wqZvq29hO1r7+JYvfExRD9UipuvzvqhzsAfS8fKg+OuRIbIDTk0Rd7aWXa06zw==",
+ "dev": true,
+ "requires": {
+ "bin-wrapper": "^4.1.0",
+ "change-case": "^4.1.1",
+ "form-data": "^3.0.0",
+ "got": "^11.7.0",
+ "hash.js": "^1.1.7",
+ "tunnel": "0.0.6",
+ "yargs": "^16.0.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.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
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "form-data": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
+ "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
+ "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz",
+ "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "seek-bzip": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
+ "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.8.1"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true
+ },
+ "semver-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
+ "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
+ "dev": true
+ },
+ "semver-truncate": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
+ "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
+ "dev": true,
+ "requires": {
+ "semver": "^5.3.0"
+ }
+ },
+ "sentence-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.3.tgz",
+ "integrity": "sha512-ZPr4dgTcNkEfcGOMFQyDdJrTU9uQO1nb1cjf+nuzb6FxgMDgKddZOM29qEsB7jvsZSMruLRcL2KfM4ypKpa0LA==",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0",
+ "upper-case-first": "^2.0.1"
+ }
+ },
+ "serialize-error": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
+ "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.13.1"
+ }
+ },
+ "serialize-javascript": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
+ "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shell-quote": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
+ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "dev": true
+ },
+ "simple-get": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz",
+ "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
+ "dev": true,
+ "requires": {
+ "decompress-response": "^4.2.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "dev": true
+ }
+ }
+ },
+ "sinon": {
+ "version": "9.2.3",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.3.tgz",
+ "integrity": "sha512-m+DyAWvqVHZtjnjX/nuShasykFeiZ+nPuEfD4G3gpvKGkXRhkF/6NSt2qN2FjZhfrcHXFzUzI+NLnk+42fnLEw==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.8.1",
+ "@sinonjs/fake-timers": "^6.0.1",
+ "@sinonjs/samsam": "^5.3.0",
+ "diff": "^4.0.2",
+ "nise": "^4.0.4",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ },
+ "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-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "sinon-chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.5.0.tgz",
+ "integrity": "sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snake-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.3.tgz",
+ "integrity": "sha512-WM1sIXEO+rsAHBKjGf/6R1HBBcgbncKS08d2Aqec/mrDSpU80SiOU41hO7ny6DToHSyrlwTYzQBIK1FPSx4Y3Q==",
+ "dev": true,
+ "requires": {
+ "dot-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "socket.io": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz",
+ "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==",
+ "dev": true,
+ "requires": {
+ "debug": "~4.1.0",
+ "engine.io": "~3.4.0",
+ "has-binary2": "~1.0.2",
+ "socket.io-adapter": "~1.1.0",
+ "socket.io-client": "2.3.0",
+ "socket.io-parser": "~3.4.0"
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
+ "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==",
+ "dev": true
+ },
+ "socket.io-client": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz",
+ "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "~4.1.0",
+ "engine.io-client": "~3.4.0",
+ "has-binary2": "~1.0.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "~3.3.0",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "socket.io-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz",
+ "integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "~1.3.0",
+ "debug": "~3.1.0",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz",
+ "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "~4.1.0",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ },
+ "sort-keys-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
+ "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
+ "dev": true,
+ "requires": {
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
+ "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+ "dev": true
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "streamroller": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz",
+ "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==",
+ "dev": true,
+ "requires": {
+ "date-format": "^2.1.0",
+ "debug": "^4.1.1",
+ "fs-extra": "^8.1.0"
+ },
+ "dependencies": {
+ "date-format": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz",
+ "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "string-argv": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
+ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
+ "dev": true
+ },
+ "string-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
+ "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string.prototype.padend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
+ "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.4.3",
+ "function-bind": "^1.0.2"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
+ "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
+ "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
+ "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
+ "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "dev": true,
+ "requires": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-dirs": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+ "dev": true,
+ "requires": {
+ "is-natural-number": "^4.0.1"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "strip-outer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+ "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.2"
+ }
+ },
+ "style-inject": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz",
+ "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==",
+ "dev": true
+ },
+ "stylehacks": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
+ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "svgo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "coa": "^2.0.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "^0.1.1",
+ "css-tree": "1.0.0-alpha.37",
+ "csso": "^4.0.2",
+ "js-yaml": "^3.13.1",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.1.0",
+ "sax": "~1.2.4",
+ "stable": "^0.1.8",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ }
+ },
+ "table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dev": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "tar-stream": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz",
+ "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==",
+ "dev": true,
+ "requires": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "terser": {
+ "version": "3.17.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
+ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.19.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.10"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "tiny-glob": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.8.tgz",
+ "integrity": "sha512-vkQP7qOslq63XRX9kMswlby99kyO5OvKptw7AMwBVMjXEI7Tb61eoI5DydyEMOseyGS5anDN1VPoVxEvH01q8w==",
+ "dev": true,
+ "requires": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-buffer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "trim-repeated": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+ "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.2"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+ "dev": true
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typescript": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
+ "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.22",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz",
+ "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==",
+ "dev": true
+ },
+ "unbzip2-stream": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.2.1",
+ "through": "^2.3.8"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
+ "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
+ "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
+ "dev": true
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+ "dev": true
+ },
+ "upper-case": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.1.tgz",
+ "integrity": "sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.10.0"
+ }
+ },
+ "upper-case-first": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.1.tgz",
+ "integrity": "sha512-105J8XqQ+9RxW3l9gHZtgve5oaiR9TIwvmZAMAIZWRHe00T21cdvewKORTlOJf/zXW6VukuTshM+HXZNWz7N5w==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.10.0"
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^2.0.0"
+ },
+ "dependencies": {
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true
+ }
+ }
+ },
+ "url-to-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
+ "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util.promisify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
+ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.2",
+ "has-symbols": "^1.0.1",
+ "object.getownpropertydescriptors": "^2.1.0"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
+ "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.2",
+ "is-regex": "^1.1.1",
+ "object-inspect": "^1.8.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.1",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
+ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+ "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "object-inspect": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vlq": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
+ "dev": true
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+ "dev": true
+ },
+ "webdriver": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.10.4.tgz",
+ "integrity": "sha512-N2FkEy22QWAJMeyz1219ik9wyt3/SOT/RtsY6JheEriZ1GptzZyK0OibkOnCoaIAt+nvSxnSmTTlmXQMGBE6Mw==",
+ "dev": true,
+ "requires": {
+ "@types/lodash.merge": "^4.6.6",
+ "@wdio/config": "6.10.4",
+ "@wdio/logger": "6.10.4",
+ "@wdio/protocols": "6.10.0",
+ "@wdio/utils": "6.10.4",
+ "got": "^11.0.2",
+ "lodash.merge": "^4.6.1"
+ }
+ },
+ "webdriverio": {
+ "version": "6.10.5",
+ "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-6.10.5.tgz",
+ "integrity": "sha512-TLIKVOOM0Oszn2mLxZcMQk0vq1bOWpsZNXMxMtpBXKLvcOCLedftxotwh0o1LqRiq8ODiubJ/vNOLgCN/oLFJQ==",
+ "dev": true,
+ "requires": {
+ "@types/archiver": "^5.1.0",
+ "@types/atob": "^2.1.2",
+ "@types/fs-extra": "^9.0.2",
+ "@types/lodash.clonedeep": "^4.5.6",
+ "@types/lodash.isplainobject": "^4.0.6",
+ "@types/puppeteer-core": "^2.0.0",
+ "@wdio/config": "6.10.4",
+ "@wdio/logger": "6.10.4",
+ "@wdio/repl": "6.10.4",
+ "@wdio/utils": "6.10.4",
+ "archiver": "^5.0.0",
+ "atob": "^2.1.2",
+ "css-shorthand-properties": "^1.1.1",
+ "css-value": "^0.0.1",
+ "devtools": "6.10.4",
+ "fs-extra": "^9.0.1",
+ "get-port": "^5.1.1",
+ "grapheme-splitter": "^1.0.2",
+ "lodash.clonedeep": "^4.5.0",
+ "lodash.isobject": "^3.0.2",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.zip": "^4.2.0",
+ "minimatch": "^3.0.4",
+ "puppeteer-core": "^5.1.0",
+ "resq": "^1.9.1",
+ "rgb2hex": "^0.2.0",
+ "serialize-error": "^7.0.0",
+ "webdriver": "6.10.4"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
+ "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^1.0.0"
+ }
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ },
+ "dependencies": {
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true
+ }
+ }
+ },
+ "universalify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
+ "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
+ "dev": true
+ }
+ }
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "which-pm-runs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
+ "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
+ "dev": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "workerpool": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz",
+ "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "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",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "ws": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz",
+ "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==",
+ "dev": true
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
+ "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==",
+ "dev": true
+ },
+ "yargs": {
+ "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",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
+ "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true
+ }
+ }
+ },
+ "yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ },
+ "zip-stream": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz",
+ "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==",
+ "dev": true,
+ "requires": {
+ "archiver-utils": "^2.1.0",
+ "compress-commons": "^4.0.2",
+ "readable-stream": "^3.6.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/preact/package.json b/preact/package.json
new file mode 100644
index 0000000..bb50431
--- /dev/null
+++ b/preact/package.json
@@ -0,0 +1,270 @@
+{
+ "name": "preact",
+ "amdName": "preact",
+ "version": "10.5.14",
+ "private": false,
+ "description": "Fast 3kb React-compatible Virtual DOM library.",
+ "main": "dist/preact.js",
+ "module": "dist/preact.module.js",
+ "umd:main": "dist/preact.umd.js",
+ "unpkg": "dist/preact.min.js",
+ "source": "src/index.js",
+ "exports": {
+ ".": {
+ "browser": "./dist/preact.module.js",
+ "umd": "./dist/preact.umd.js",
+ "import": "./dist/preact.mjs",
+ "require": "./dist/preact.js"
+ },
+ "./compat": {
+ "browser": "./compat/dist/compat.module.js",
+ "umd": "./compat/dist/compat.umd.js",
+ "require": "./compat/dist/compat.js",
+ "import": "./compat/dist/compat.mjs"
+ },
+ "./debug": {
+ "browser": "./debug/dist/debug.module.js",
+ "umd": "./debug/dist/debug.umd.js",
+ "require": "./debug/dist/debug.js",
+ "import": "./debug/dist/debug.mjs"
+ },
+ "./devtools": {
+ "browser": "./devtools/dist/devtools.module.js",
+ "umd": "./devtools/dist/devtools.umd.js",
+ "require": "./devtools/dist/devtools.js",
+ "import": "./devtools/dist/devtools.mjs"
+ },
+ "./hooks": {
+ "browser": "./hooks/dist/hooks.module.js",
+ "umd": "./hooks/dist/hooks.umd.js",
+ "require": "./hooks/dist/hooks.js",
+ "import": "./hooks/dist/hooks.mjs"
+ },
+ "./test-utils": {
+ "browser": "./test-utils/dist/testUtils.module.js",
+ "umd": "./test-utils/dist/testUtils.umd.js",
+ "require": "./test-utils/dist/testUtils.js",
+ "import": "./test-utils/dist/testUtils.mjs"
+ },
+ "./jsx-runtime": {
+ "browser": "./jsx-runtime/dist/jsxRuntime.module.js",
+ "umd": "./jsx-runtime/dist/jsxRuntime.umd.js",
+ "require": "./jsx-runtime/dist/jsxRuntime.js",
+ "import": "./jsx-runtime/dist/jsxRuntime.mjs"
+ },
+ "./jsx-dev-runtime": {
+ "browser": "./jsx-runtime/dist/jsxRuntime.module.js",
+ "umd": "./jsx-runtime/dist/jsxRuntime.umd.js",
+ "require": "./jsx-runtime/dist/jsxRuntime.js",
+ "import": "./jsx-runtime/dist/jsxRuntime.mjs"
+ },
+ "./compat/server": {
+ "require": "./compat/server.js",
+ "import": "./compat/server.mjs"
+ },
+ "./compat/scheduler": {
+ "require": "./compat/scheduler.js",
+ "import": "./compat/scheduler.mjs"
+ },
+ "./package.json": "./package.json",
+ "./": "./"
+ },
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ },
+ "types": "src/index.d.ts",
+ "scripts": {
+ "prepare": "run-s build && check-export-map",
+ "build": "npm-run-all --parallel build:*",
+ "build:core": "microbundle build --raw",
+ "build:core-min": "microbundle build --raw -f iife src/cjs.js -o dist/preact.min.js",
+ "build:debug": "microbundle build --raw --cwd debug",
+ "build:devtools": "microbundle build --raw --cwd devtools",
+ "build:hooks": "microbundle build --raw --cwd hooks",
+ "build:test-utils": "microbundle build --raw --cwd test-utils",
+ "build:compat": "microbundle build src/index.js src/scheduler.js --raw --cwd compat --globals 'preact/hooks=preactHooks'",
+ "build:jsx": "microbundle build --raw --cwd jsx-runtime",
+ "postbuild": "node ./config/node-13-exports.js && node ./config/compat-entries.js",
+ "dev": "microbundle watch --raw --format cjs",
+ "dev:hooks": "microbundle watch --raw --format cjs --cwd hooks",
+ "dev:compat": "microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'",
+ "test": "npm-run-all build lint test:unit",
+ "test:unit": "run-p test:mocha test:karma:minify test:ts",
+ "test:ts": "run-p test:ts:*",
+ "test:ts:core": "tsc -p test/ts/ && mocha --require \"@babel/register\" test/ts/**/*-test.js",
+ "test:ts:compat": "tsc -p compat/test/ts/",
+ "test:mocha": "mocha --recursive --require \"@babel/register\" test/shared test/node",
+ "test:mocha:watch": "npm run test:mocha -- --watch",
+ "test:karma": "cross-env COVERAGE=true BABEL_NO_MODULES=true karma start karma.conf.js --single-run",
+ "test:karma:minify": "cross-env COVERAGE=true MINIFY=true BABEL_NO_MODULES=true karma start karma.conf.js --single-run",
+ "test:karma:watch": "cross-env BABEL_NO_MODULES=true karma start karma.conf.js --no-single-run",
+ "test:karma:hooks": "cross-env COVERAGE=false BABEL_NO_MODULES=true karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run",
+ "test:karma:test-utils": "cross-env PERFORMANCE=false COVERAGE=false BABEL_NO_MODULES=true karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run",
+ "test:karma:bench": "cross-env PERFORMANCE=true COVERAGE=false BABEL_NO_MODULES=true karma start karma.conf.js --grep=test/benchmarks/**.js --single-run",
+ "benchmark": "npm run test:karma:bench -- no-single-run",
+ "lint": "eslint src test debug compat hooks test-utils"
+ },
+ "eslintConfig": {
+ "extends": [
+ "developit",
+ "prettier"
+ ],
+ "settings": {
+ "react": {
+ "pragma": "createElement"
+ }
+ },
+ "rules": {
+ "camelcase": [
+ 1,
+ {
+ "allow": [
+ "__test__*",
+ "unstable_*",
+ "UNSAFE_*"
+ ]
+ }
+ ],
+ "no-unused-vars": [
+ 2,
+ {
+ "args": "none",
+ "varsIgnorePattern": "^h|React$"
+ }
+ ],
+ "prefer-rest-params": 0,
+ "prefer-spread": 0,
+ "no-cond-assign": 0,
+ "react/jsx-no-bind": 0,
+ "react/no-danger": "off",
+ "react/prefer-stateless-function": 0,
+ "react/sort-comp": 0,
+ "jest/valid-expect": 0,
+ "jest/no-disabled-tests": 0,
+ "react/no-find-dom-node": 0
+ }
+ },
+ "eslintIgnore": [
+ "test/fixtures",
+ "test/ts/",
+ "*.ts",
+ "dist"
+ ],
+ "prettier": {
+ "singleQuote": true,
+ "trailingComma": "none",
+ "useTabs": true,
+ "tabWidth": 2
+ },
+ "lint-staged": {
+ "**/*.{js,jsx,ts,tsx,yml}": [
+ "prettier --write"
+ ]
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "files": [
+ "src",
+ "dist",
+ "compat/dist",
+ "compat/src",
+ "compat/server.js",
+ "compat/server.mjs",
+ "compat/scheduler.js",
+ "compat/scheduler.mjs",
+ "compat/test-utils.js",
+ "compat/jsx-runtime.js",
+ "compat/jsx-runtime.mjs",
+ "compat/jsx-dev-runtime.js",
+ "compat/jsx-dev-runtime.mjs",
+ "compat/package.json",
+ "debug/dist",
+ "debug/src",
+ "debug/package.json",
+ "devtools/dist",
+ "devtools/src",
+ "devtools/package.json",
+ "hooks/dist",
+ "hooks/src",
+ "hooks/package.json",
+ "jsx-runtime/dist",
+ "jsx-runtime/src",
+ "jsx-runtime/package.json",
+ "test-utils/src",
+ "test-utils/package.json",
+ "test-utils/dist"
+ ],
+ "keywords": [
+ "preact",
+ "react",
+ "ui",
+ "user interface",
+ "virtual dom",
+ "vdom",
+ "components",
+ "dom diff",
+ "front-end",
+ "framework"
+ ],
+ "authors": [
+ "The Preact Authors (https://github.com/preactjs/preact/contributors)"
+ ],
+ "repository": "preactjs/preact",
+ "bugs": "https://github.com/preactjs/preact/issues",
+ "homepage": "https://preactjs.com",
+ "devDependencies": {
+ "@babel/core": "^7.7.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.6.2",
+ "@babel/plugin-transform-react-jsx": "^7.7.0",
+ "@babel/plugin-transform-react-jsx-source": "^7.7.4",
+ "@babel/preset-env": "^7.7.1",
+ "@babel/register": "^7.7.0",
+ "@types/chai": "^4.1.2",
+ "@types/mocha": "^5.0.0",
+ "@types/node": "^14.14.10",
+ "babel-plugin-istanbul": "^6.0.0",
+ "babel-plugin-transform-async-to-promises": "^0.8.15",
+ "babel-plugin-transform-rename-properties": "0.1.0",
+ "benchmark": "^2.1.4",
+ "chai": "^4.1.2",
+ "check-export-map": "^1.0.1",
+ "coveralls": "^3.0.0",
+ "cross-env": "^7.0.2",
+ "csstype": "^3.0.5",
+ "diff": "^5.0.0",
+ "errorstacks": "^2.3.0",
+ "esbuild": "^0.8.47",
+ "eslint": "5.15.1",
+ "eslint-config-developit": "^1.1.1",
+ "eslint-config-prettier": "^6.5.0",
+ "eslint-plugin-react": "7.12.4",
+ "husky": "^4.3.0",
+ "karma": "^5.2.3",
+ "karma-chai-sinon": "^0.1.5",
+ "karma-chrome-launcher": "^3.1.0",
+ "karma-coverage": "^2.0.3",
+ "karma-esbuild": "^2.2.0",
+ "karma-mocha": "^2.0.1",
+ "karma-mocha-reporter": "^2.2.5",
+ "karma-sauce-launcher": "^4.3.4",
+ "karma-sinon": "^1.0.5",
+ "karma-sourcemap-loader": "^0.3.7",
+ "kolorist": "^1.2.10",
+ "lint-staged": "^10.5.2",
+ "lodash": "^4.17.20",
+ "microbundle": "^0.11.0",
+ "mocha": "^8.2.1",
+ "npm-merge-driver-install": "^1.1.1",
+ "npm-run-all": "^4.0.0",
+ "prettier": "^1.18.2",
+ "prop-types": "^15.7.2",
+ "sinon": "^9.2.3",
+ "sinon-chai": "^3.5.0",
+ "typescript": "3.5.3"
+ }
+}
diff --git a/preact/sizereport.config.js b/preact/sizereport.config.js
new file mode 100644
index 0000000..36c9d2d
--- /dev/null
+++ b/preact/sizereport.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ repo: 'preactjs/preact',
+ path: ['./{compat,debug,hooks,}/dist/**/!(*.map)'],
+ branch: 'master'
+};
diff --git a/preact/src/cjs.js b/preact/src/cjs.js
new file mode 100644
index 0000000..b4721b1
--- /dev/null
+++ b/preact/src/cjs.js
@@ -0,0 +1,3 @@
+import * as preact from './index.js';
+if (typeof module < 'u') module.exports = preact;
+else self.preact = preact;
diff --git a/preact/src/clone-element.js b/preact/src/clone-element.js
new file mode 100644
index 0000000..4cff226
--- /dev/null
+++ b/preact/src/clone-element.js
@@ -0,0 +1,34 @@
+import { assign, slice } from './util';
+import { createVNode } from './create-element';
+
+/**
+ * Clones the given VNode, optionally adding attributes/props and replacing its children.
+ * @param {import('./internal').VNode} vnode The virtual DOM element to clone
+ * @param {object} props Attributes/props to add when cloning
+ * @param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used as replacement children.
+ * @returns {import('./internal').VNode}
+ */
+export function cloneElement(vnode, props, children) {
+ let normalizedProps = assign({}, vnode.props),
+ key,
+ ref,
+ i;
+ for (i in props) {
+ if (i == 'key') key = props[i];
+ else if (i == 'ref') ref = props[i];
+ else normalizedProps[i] = props[i];
+ }
+
+ if (arguments.length > 2) {
+ normalizedProps.children =
+ arguments.length > 3 ? slice.call(arguments, 2) : children;
+ }
+
+ return createVNode(
+ vnode.type,
+ normalizedProps,
+ key || vnode.key,
+ ref || vnode.ref,
+ null
+ );
+}
diff --git a/preact/src/component.js b/preact/src/component.js
new file mode 100644
index 0000000..c2043af
--- /dev/null
+++ b/preact/src/component.js
@@ -0,0 +1,225 @@
+import { assign } from './util';
+import { diff, commitRoot } from './diff/index';
+import options from './options';
+import { Fragment } from './create-element';
+
+/**
+ * Base Component class. Provides `setState()` and `forceUpdate()`, which
+ * trigger rendering
+ * @param {object} props The initial component props
+ * @param {object} context The initial context from parent components'
+ * getChildContext
+ */
+export function Component(props, context) {
+ this.props = props;
+ this.context = context;
+}
+
+/**
+ * Update component state and schedule a re-render.
+ * @this {import('./internal').Component}
+ * @param {object | ((s: object, p: object) => object)} update A hash of state
+ * properties to update with new values or a function that given the current
+ * state and props returns a new partial state
+ * @param {() => void} [callback] A function to be called once component state is
+ * updated
+ */
+Component.prototype.setState = function(update, callback) {
+ // only clone state when copying to nextState the first time.
+ let s;
+ if (this._nextState != null && this._nextState !== this.state) {
+ s = this._nextState;
+ } else {
+ s = this._nextState = assign({}, this.state);
+ }
+
+ if (typeof update == 'function') {
+ // Some libraries like `immer` mark the current state as readonly,
+ // preventing us from mutating it, so we need to clone it. See #2716
+ update = update(assign({}, s), this.props);
+ }
+
+ if (update) {
+ assign(s, update);
+ }
+
+ // Skip update if updater function returned null
+ if (update == null) return;
+
+ if (this._vnode) {
+ if (callback) this._renderCallbacks.push(callback);
+ enqueueRender(this);
+ }
+};
+
+/**
+ * Immediately perform a synchronous re-render of the component
+ * @this {import('./internal').Component}
+ * @param {() => void} [callback] A function to be called after component is
+ * re-rendered
+ */
+Component.prototype.forceUpdate = function(callback) {
+ if (this._vnode) {
+ // Set render mode so that we can differentiate where the render request
+ // is coming from. We need this because forceUpdate should never call
+ // shouldComponentUpdate
+ this._force = true;
+ if (callback) this._renderCallbacks.push(callback);
+ enqueueRender(this);
+ }
+};
+
+/**
+ * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.
+ * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).
+ * @param {object} props Props (eg: JSX attributes) received from parent
+ * element/component
+ * @param {object} state The component's current state
+ * @param {object} context Context object, as returned by the nearest
+ * ancestor's `getChildContext()`
+ * @returns {import('./index').ComponentChildren | void}
+ */
+Component.prototype.render = Fragment;
+
+/**
+ * @param {import('./internal').VNode} vnode
+ * @param {number | null} [childIndex]
+ */
+export function getDomSibling(vnode, childIndex) {
+ if (childIndex == null) {
+ // Use childIndex==null as a signal to resume the search from the vnode's sibling
+ return vnode._parent
+ ? getDomSibling(vnode._parent, vnode._parent._children.indexOf(vnode) + 1)
+ : null;
+ }
+
+ let sibling;
+ for (; childIndex < vnode._children.length; childIndex++) {
+ sibling = vnode._children[childIndex];
+
+ if (sibling != null && sibling._dom != null) {
+ // Since updateParentDomPointers keeps _dom pointer correct,
+ // we can rely on _dom to tell us if this subtree contains a
+ // rendered DOM node, and what the first rendered DOM node is
+ return sibling._dom;
+ }
+ }
+
+ // If we get here, we have not found a DOM node in this vnode's children.
+ // We must resume from this vnode's sibling (in it's parent _children array)
+ // Only climb up and search the parent if we aren't searching through a DOM
+ // VNode (meaning we reached the DOM parent of the original vnode that began
+ // the search)
+ return typeof vnode.type == 'function' ? getDomSibling(vnode) : null;
+}
+
+/**
+ * Trigger in-place re-rendering of a component.
+ * @param {import('./internal').Component} component The component to rerender
+ */
+function renderComponent(component) {
+ let vnode = component._vnode,
+ oldDom = vnode._dom,
+ parentDom = component._parentDom;
+
+ if (parentDom) {
+ let commitQueue = [];
+ const oldVNode = assign({}, vnode);
+ oldVNode._original = vnode._original + 1;
+
+ diff(
+ parentDom,
+ vnode,
+ oldVNode,
+ component._globalContext,
+ parentDom.ownerSVGElement !== undefined,
+ vnode._hydrating != null ? [oldDom] : null,
+ commitQueue,
+ oldDom == null ? getDomSibling(vnode) : oldDom,
+ vnode._hydrating
+ );
+ commitRoot(commitQueue, vnode);
+
+ if (vnode._dom != oldDom) {
+ updateParentDomPointers(vnode);
+ }
+ }
+}
+
+/**
+ * @param {import('./internal').VNode} vnode
+ */
+function updateParentDomPointers(vnode) {
+ if ((vnode = vnode._parent) != null && vnode._component != null) {
+ vnode._dom = vnode._component.base = null;
+ for (let i = 0; i < vnode._children.length; i++) {
+ let child = vnode._children[i];
+ if (child != null && child._dom != null) {
+ vnode._dom = vnode._component.base = child._dom;
+ break;
+ }
+ }
+
+ return updateParentDomPointers(vnode);
+ }
+}
+
+/**
+ * The render queue
+ * @type {Array<import('./internal').Component>}
+ */
+let rerenderQueue = [];
+
+/**
+ * Asynchronously schedule a callback
+ * @type {(cb: () => void) => void}
+ */
+/* istanbul ignore next */
+// Note the following line isn't tree-shaken by rollup cuz of rollup/rollup#2566
+const defer =
+ typeof Promise == 'function'
+ ? Promise.prototype.then.bind(Promise.resolve())
+ : setTimeout;
+
+/*
+ * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is
+ * important that contributors to Preact can consistently reason about what calls to `setState`, etc.
+ * do, and when their effects will be applied. See the links below for some further reading on designing
+ * asynchronous APIs.
+ * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)
+ * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)
+ */
+
+let prevDebounce;
+
+/**
+ * Enqueue a rerender of a component
+ * @param {import('./internal').Component} c The component to rerender
+ */
+export function enqueueRender(c) {
+ if (
+ (!c._dirty &&
+ (c._dirty = true) &&
+ rerenderQueue.push(c) &&
+ !process._rerenderCount++) ||
+ prevDebounce !== options.debounceRendering
+ ) {
+ prevDebounce = options.debounceRendering;
+ (prevDebounce || defer)(process);
+ }
+}
+
+/** Flush the render queue by rerendering all queued components */
+function process() {
+ let queue;
+ while ((process._rerenderCount = rerenderQueue.length)) {
+ queue = rerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);
+ rerenderQueue = [];
+ // Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary
+ // process() calls from getting scheduled while `queue` is still being consumed.
+ queue.some(c => {
+ if (c._dirty) renderComponent(c);
+ });
+ }
+}
+process._rerenderCount = 0;
diff --git a/preact/src/constants.js b/preact/src/constants.js
new file mode 100644
index 0000000..dddc9a3
--- /dev/null
+++ b/preact/src/constants.js
@@ -0,0 +1,3 @@
+export const EMPTY_OBJ = {};
+export const EMPTY_ARR = [];
+export const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;
diff --git a/preact/src/create-context.js b/preact/src/create-context.js
new file mode 100644
index 0000000..750517d
--- /dev/null
+++ b/preact/src/create-context.js
@@ -0,0 +1,68 @@
+import { enqueueRender } from './component';
+
+export let i = 0;
+
+export function createContext(defaultValue, contextId) {
+ contextId = '__cC' + i++;
+
+ const context = {
+ _id: contextId,
+ _defaultValue: defaultValue,
+ /** @type {import('./internal').FunctionComponent} */
+ Consumer(props, contextValue) {
+ // return props.children(
+ // context[contextId] ? context[contextId].props.value : defaultValue
+ // );
+ return props.children(contextValue);
+ },
+ /** @type {import('./internal').FunctionComponent} */
+ Provider(props) {
+ if (!this.getChildContext) {
+ let subs = [];
+ let ctx = {};
+ ctx[contextId] = this;
+
+ this.getChildContext = () => ctx;
+
+ this.shouldComponentUpdate = function(_props) {
+ if (this.props.value !== _props.value) {
+ // I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:
+ // https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358
+ // In those cases though, even with the value corrected, we're double-rendering all nodes.
+ // It might be better to just tell folks not to use force-sync mode.
+ // Currently, using `useContext()` in a class component will overwrite its `this.context` value.
+ // subs.some(c => {
+ // c.context = _props.value;
+ // enqueueRender(c);
+ // });
+
+ // subs.some(c => {
+ // c.context[contextId] = _props.value;
+ // enqueueRender(c);
+ // });
+ subs.some(enqueueRender);
+ }
+ };
+
+ this.sub = c => {
+ subs.push(c);
+ let old = c.componentWillUnmount;
+ c.componentWillUnmount = () => {
+ subs.splice(subs.indexOf(c), 1);
+ if (old) old.call(c);
+ };
+ };
+ }
+
+ return props.children;
+ }
+ };
+
+ // Devtools needs access to the context object when it
+ // encounters a Provider. This is necessary to support
+ // setting `displayName` on the context object instead
+ // of on the component itself. See:
+ // https://reactjs.org/docs/context.html#contextdisplayname
+
+ return (context.Provider._contextRef = context.Consumer.contextType = context);
+}
diff --git a/preact/src/create-element.js b/preact/src/create-element.js
new file mode 100644
index 0000000..90ee753
--- /dev/null
+++ b/preact/src/create-element.js
@@ -0,0 +1,97 @@
+import { slice } from './util';
+import options from './options';
+
+let vnodeId = 0;
+
+/**
+ * Create an virtual node (used for JSX)
+ * @param {import('./internal').VNode["type"]} type The node name or Component
+ * constructor for this virtual node
+ * @param {object | null | undefined} [props] The properties of the virtual node
+ * @param {Array<import('.').ComponentChildren>} [children] The children of the virtual node
+ * @returns {import('./internal').VNode}
+ */
+export function createElement(type, props, children) {
+ let normalizedProps = {},
+ key,
+ ref,
+ i;
+ for (i in props) {
+ if (i == 'key') key = props[i];
+ else if (i == 'ref') ref = props[i];
+ else normalizedProps[i] = props[i];
+ }
+
+ if (arguments.length > 2) {
+ normalizedProps.children =
+ arguments.length > 3 ? slice.call(arguments, 2) : children;
+ }
+
+ // If a Component VNode, check for and apply defaultProps
+ // Note: type may be undefined in development, must never error here.
+ if (typeof type == 'function' && type.defaultProps != null) {
+ for (i in type.defaultProps) {
+ if (normalizedProps[i] === undefined) {
+ normalizedProps[i] = type.defaultProps[i];
+ }
+ }
+ }
+
+ return createVNode(type, normalizedProps, key, ref, null);
+}
+
+/**
+ * Create a VNode (used internally by Preact)
+ * @param {import('./internal').VNode["type"]} type The node name or Component
+ * Constructor for this virtual node
+ * @param {object | string | number | null} props The properties of this virtual node.
+ * If this virtual node represents a text node, this is the text of the node (string or number).
+ * @param {string | number | null} key The key for this virtual node, used when
+ * diffing it against its children
+ * @param {import('./internal').VNode["ref"]} ref The ref property that will
+ * receive a reference to its created child
+ * @returns {import('./internal').VNode}
+ */
+export function createVNode(type, props, key, ref, original) {
+ // V8 seems to be better at detecting type shapes if the object is allocated from the same call site
+ // Do not inline into createElement and coerceToVNode!
+ const vnode = {
+ type,
+ props,
+ key,
+ ref,
+ _children: null,
+ _parent: null,
+ _depth: 0,
+ _dom: null,
+ // _nextDom must be initialized to undefined b/c it will eventually
+ // be set to dom.nextSibling which can return `null` and it is important
+ // to be able to distinguish between an uninitialized _nextDom and
+ // a _nextDom that has been set to `null`
+ _nextDom: undefined,
+ _component: null,
+ _hydrating: null,
+ constructor: undefined,
+ _original: original == null ? ++vnodeId : original
+ };
+
+ if (options.vnode != null) options.vnode(vnode);
+
+ return vnode;
+}
+
+export function createRef() {
+ return { current: null };
+}
+
+export function Fragment(props) {
+ return props.children;
+}
+
+/**
+ * Check if a the argument is a valid Preact VNode.
+ * @param {*} vnode
+ * @returns {vnode is import('./internal').VNode}
+ */
+export const isValidElement = vnode =>
+ vnode != null && vnode.constructor === undefined;
diff --git a/preact/src/diff/catch-error.js b/preact/src/diff/catch-error.js
new file mode 100644
index 0000000..893a076
--- /dev/null
+++ b/preact/src/diff/catch-error.js
@@ -0,0 +1,38 @@
+/**
+ * Find the closest error boundary to a thrown error and call it
+ * @param {object} error The thrown value
+ * @param {import('../internal').VNode} vnode The vnode that threw
+ * the error that was caught (except for unmounting when this parameter
+ * is the highest parent that was being unmounted)
+ */
+export function _catchError(error, vnode) {
+ /** @type {import('../internal').Component} */
+ let component, ctor, handled;
+
+ for (; (vnode = vnode._parent); ) {
+ if ((component = vnode._component) && !component._processingException) {
+ try {
+ ctor = component.constructor;
+
+ if (ctor && ctor.getDerivedStateFromError != null) {
+ component.setState(ctor.getDerivedStateFromError(error));
+ handled = component._dirty;
+ }
+
+ if (component.componentDidCatch != null) {
+ component.componentDidCatch(error);
+ handled = component._dirty;
+ }
+
+ // This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.
+ if (handled) {
+ return (component._pendingError = component);
+ }
+ } catch (e) {
+ error = e;
+ }
+ }
+ }
+
+ throw error;
+}
diff --git a/preact/src/diff/children.js b/preact/src/diff/children.js
new file mode 100644
index 0000000..204e3e4
--- /dev/null
+++ b/preact/src/diff/children.js
@@ -0,0 +1,347 @@
+import { diff, unmount, applyRef } from './index';
+import { createVNode, Fragment } from '../create-element';
+import { EMPTY_OBJ, EMPTY_ARR } from '../constants';
+import { getDomSibling } from '../component';
+
+/**
+ * Diff the children of a virtual node
+ * @param {import('../internal').PreactElement} parentDom The DOM element whose
+ * children are being diffed
+ * @param {import('../internal').ComponentChildren[]} renderResult
+ * @param {import('../internal').VNode} newParentVNode The new virtual
+ * node whose children should be diff'ed against oldParentVNode
+ * @param {import('../internal').VNode} oldParentVNode The old virtual
+ * node whose children should be diff'ed against newParentVNode
+ * @param {object} globalContext The current context object - modified by getChildContext
+ * @param {boolean} isSvg Whether or not this DOM node is an SVG node
+ * @param {Array<import('../internal').PreactElement>} excessDomChildren
+ * @param {Array<import('../internal').Component>} commitQueue List of components
+ * which have callbacks to invoke in commitRoot
+ * @param {import('../internal').PreactElement} oldDom The current attached DOM
+ * element any new dom elements should be placed around. Likely `null` on first
+ * render (except when hydrating). Can be a sibling DOM element when diffing
+ * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.
+ * @param {boolean} isHydrating Whether or not we are in hydration
+ */
+export function diffChildren(
+ parentDom,
+ renderResult,
+ newParentVNode,
+ oldParentVNode,
+ globalContext,
+ isSvg,
+ excessDomChildren,
+ commitQueue,
+ oldDom,
+ isHydrating
+) {
+ let i, j, oldVNode, childVNode, newDom, firstChildDom, refs;
+
+ // This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR
+ // as EMPTY_OBJ._children should be `undefined`.
+ let oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;
+
+ let oldChildrenLength = oldChildren.length;
+
+ newParentVNode._children = [];
+ for (i = 0; i < renderResult.length; i++) {
+ childVNode = renderResult[i];
+
+ if (childVNode == null || typeof childVNode == 'boolean') {
+ childVNode = newParentVNode._children[i] = null;
+ }
+ // If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,
+ // or we are rendering a component (e.g. setState) copy the oldVNodes so it can have
+ // it's own DOM & etc. pointers
+ else if (
+ typeof childVNode == 'string' ||
+ typeof childVNode == 'number' ||
+ // eslint-disable-next-line valid-typeof
+ typeof childVNode == 'bigint'
+ ) {
+ childVNode = newParentVNode._children[i] = createVNode(
+ null,
+ childVNode,
+ null,
+ null,
+ childVNode
+ );
+ } else if (Array.isArray(childVNode)) {
+ childVNode = newParentVNode._children[i] = createVNode(
+ Fragment,
+ { children: childVNode },
+ null,
+ null,
+ null
+ );
+ } else if (childVNode._depth > 0) {
+ // VNode is already in use, clone it. This can happen in the following
+ // scenario:
+ // const reuse = <div />
+ // <div>{reuse}<span />{reuse}</div>
+ childVNode = newParentVNode._children[i] = createVNode(
+ childVNode.type,
+ childVNode.props,
+ childVNode.key,
+ null,
+ childVNode._original
+ );
+ } else {
+ childVNode = newParentVNode._children[i] = childVNode;
+ }
+
+ // Terser removes the `continue` here and wraps the loop body
+ // in a `if (childVNode) { ... } condition
+ if (childVNode == null) {
+ continue;
+ }
+
+ childVNode._parent = newParentVNode;
+ childVNode._depth = newParentVNode._depth + 1;
+
+ // Check if we find a corresponding element in oldChildren.
+ // If found, delete the array item by setting to `undefined`.
+ // We use `undefined`, as `null` is reserved for empty placeholders
+ // (holes).
+ oldVNode = oldChildren[i];
+
+ if (
+ oldVNode === null ||
+ (oldVNode &&
+ childVNode.key == oldVNode.key &&
+ childVNode.type === oldVNode.type)
+ ) {
+ oldChildren[i] = undefined;
+ } else {
+ // Either oldVNode === undefined or oldChildrenLength > 0,
+ // so after this loop oldVNode == null or oldVNode is a valid value.
+ for (j = 0; j < oldChildrenLength; j++) {
+ oldVNode = oldChildren[j];
+ // If childVNode is unkeyed, we only match similarly unkeyed nodes, otherwise we match by key.
+ // We always match by type (in either case).
+ if (
+ oldVNode &&
+ childVNode.key == oldVNode.key &&
+ childVNode.type === oldVNode.type
+ ) {
+ oldChildren[j] = undefined;
+ break;
+ }
+ oldVNode = null;
+ }
+ }
+
+ oldVNode = oldVNode || EMPTY_OBJ;
+
+ // Morph the old element into the new one, but don't append it to the dom yet
+ diff(
+ parentDom,
+ childVNode,
+ oldVNode,
+ globalContext,
+ isSvg,
+ excessDomChildren,
+ commitQueue,
+ oldDom,
+ isHydrating
+ );
+
+ newDom = childVNode._dom;
+
+ if ((j = childVNode.ref) && oldVNode.ref != j) {
+ if (!refs) refs = [];
+ if (oldVNode.ref) refs.push(oldVNode.ref, null, childVNode);
+ refs.push(j, childVNode._component || newDom, childVNode);
+ }
+
+ if (newDom != null) {
+ if (firstChildDom == null) {
+ firstChildDom = newDom;
+ }
+
+ if (
+ typeof childVNode.type == 'function' &&
+ childVNode._children != null && // Can be null if childVNode suspended
+ childVNode._children === oldVNode._children
+ ) {
+ childVNode._nextDom = oldDom = reorderChildren(
+ childVNode,
+ oldDom,
+ parentDom
+ );
+ } else {
+ oldDom = placeChild(
+ parentDom,
+ childVNode,
+ oldVNode,
+ oldChildren,
+ newDom,
+ oldDom
+ );
+ }
+
+ // Browsers will infer an option's `value` from `textContent` when
+ // no value is present. This essentially bypasses our code to set it
+ // later in `diff()`. It works fine in all browsers except for IE11
+ // where it breaks setting `select.value`. There it will be always set
+ // to an empty string. Re-applying an options value will fix that, so
+ // there are probably some internal data structures that aren't
+ // updated properly.
+ //
+ // To fix it we make sure to reset the inferred value, so that our own
+ // value check in `diff()` won't be skipped.
+ if (!isHydrating && newParentVNode.type === 'option') {
+ // @ts-ignore We have validated that the type of parentDOM is 'option'
+ // in the above check
+ parentDom.value = '';
+ } else if (typeof newParentVNode.type == 'function') {
+ // Because the newParentVNode is Fragment-like, we need to set it's
+ // _nextDom property to the nextSibling of its last child DOM node.
+ //
+ // `oldDom` contains the correct value here because if the last child
+ // is a Fragment-like, then oldDom has already been set to that child's _nextDom.
+ // If the last child is a DOM VNode, then oldDom will be set to that DOM
+ // node's nextSibling.
+ newParentVNode._nextDom = oldDom;
+ }
+ } else if (
+ oldDom &&
+ oldVNode._dom == oldDom &&
+ oldDom.parentNode != parentDom
+ ) {
+ // The above condition is to handle null placeholders. See test in placeholder.test.js:
+ // `efficiently replace null placeholders in parent rerenders`
+ oldDom = getDomSibling(oldVNode);
+ }
+ }
+
+ newParentVNode._dom = firstChildDom;
+
+ // Remove remaining oldChildren if there are any.
+ for (i = oldChildrenLength; i--; ) {
+ if (oldChildren[i] != null) {
+ if (
+ typeof newParentVNode.type == 'function' &&
+ oldChildren[i]._dom != null &&
+ oldChildren[i]._dom == newParentVNode._nextDom
+ ) {
+ // If the newParentVNode.__nextDom points to a dom node that is about to
+ // be unmounted, then get the next sibling of that vnode and set
+ // _nextDom to it
+ newParentVNode._nextDom = getDomSibling(oldParentVNode, i + 1);
+ }
+
+ unmount(oldChildren[i], oldChildren[i]);
+ }
+ }
+
+ // Set refs only after unmount
+ if (refs) {
+ for (i = 0; i < refs.length; i++) {
+ applyRef(refs[i], refs[++i], refs[++i]);
+ }
+ }
+}
+
+function reorderChildren(childVNode, oldDom, parentDom) {
+ for (let tmp = 0; tmp < childVNode._children.length; tmp++) {
+ let vnode = childVNode._children[tmp];
+ if (vnode) {
+ // We typically enter this code path on sCU bailout, where we copy
+ // oldVNode._children to newVNode._children. If that is the case, we need
+ // to update the old children's _parent pointer to point to the newVNode
+ // (childVNode here).
+ vnode._parent = childVNode;
+
+ if (typeof vnode.type == 'function') {
+ oldDom = reorderChildren(vnode, oldDom, parentDom);
+ } else {
+ oldDom = placeChild(
+ parentDom,
+ vnode,
+ vnode,
+ childVNode._children,
+ vnode._dom,
+ oldDom
+ );
+ }
+ }
+ }
+
+ return oldDom;
+}
+
+/**
+ * Flatten and loop through the children of a virtual node
+ * @param {import('../index').ComponentChildren} children The unflattened
+ * children of a virtual node
+ * @returns {import('../internal').VNode[]}
+ */
+export function toChildArray(children, out) {
+ out = out || [];
+ if (children == null || typeof children == 'boolean') {
+ } else if (Array.isArray(children)) {
+ children.some(child => {
+ toChildArray(child, out);
+ });
+ } else {
+ out.push(children);
+ }
+ return out;
+}
+
+function placeChild(
+ parentDom,
+ childVNode,
+ oldVNode,
+ oldChildren,
+ newDom,
+ oldDom
+) {
+ let nextDom;
+ if (childVNode._nextDom !== undefined) {
+ // Only Fragments or components that return Fragment like VNodes will
+ // have a non-undefined _nextDom. Continue the diff from the sibling
+ // of last DOM child of this child VNode
+ nextDom = childVNode._nextDom;
+
+ // Eagerly cleanup _nextDom. We don't need to persist the value because
+ // it is only used by `diffChildren` to determine where to resume the diff after
+ // diffing Components and Fragments. Once we store it the nextDOM local var, we
+ // can clean up the property
+ childVNode._nextDom = undefined;
+ } else if (
+ oldVNode == null ||
+ newDom != oldDom ||
+ newDom.parentNode == null
+ ) {
+ outer: if (oldDom == null || oldDom.parentNode !== parentDom) {
+ parentDom.appendChild(newDom);
+ nextDom = null;
+ } else {
+ // `j<oldChildrenLength; j+=2` is an alternative to `j++<oldChildrenLength/2`
+ for (
+ let sibDom = oldDom, j = 0;
+ (sibDom = sibDom.nextSibling) && j < oldChildren.length;
+ j += 2
+ ) {
+ if (sibDom == newDom) {
+ break outer;
+ }
+ }
+ parentDom.insertBefore(newDom, oldDom);
+ nextDom = oldDom;
+ }
+ }
+
+ // If we have pre-calculated the nextDOM node, use it. Else calculate it now
+ // Strictly check for `undefined` here cuz `null` is a valid value of `nextDom`.
+ // See more detail in create-element.js:createVNode
+ if (nextDom !== undefined) {
+ oldDom = nextDom;
+ } else {
+ oldDom = newDom.nextSibling;
+ }
+
+ return oldDom;
+}
diff --git a/preact/src/diff/index.js b/preact/src/diff/index.js
new file mode 100644
index 0000000..de63843
--- /dev/null
+++ b/preact/src/diff/index.js
@@ -0,0 +1,514 @@
+import { EMPTY_OBJ } from '../constants';
+import { Component, getDomSibling } from '../component';
+import { Fragment } from '../create-element';
+import { diffChildren } from './children';
+import { diffProps, setProperty } from './props';
+import { assign, removeNode, slice } from '../util';
+import options from '../options';
+
+/**
+ * Diff two virtual nodes and apply proper changes to the DOM
+ * @param {import('../internal').PreactElement} parentDom The parent of the DOM element
+ * @param {import('../internal').VNode} newVNode The new virtual node
+ * @param {import('../internal').VNode} oldVNode The old virtual node
+ * @param {object} globalContext The current context object. Modified by getChildContext
+ * @param {boolean} isSvg Whether or not this element is an SVG node
+ * @param {Array<import('../internal').PreactElement>} excessDomChildren
+ * @param {Array<import('../internal').Component>} commitQueue List of components
+ * which have callbacks to invoke in commitRoot
+ * @param {import('../internal').PreactElement} oldDom The current attached DOM
+ * element any new dom elements should be placed around. Likely `null` on first
+ * render (except when hydrating). Can be a sibling DOM element when diffing
+ * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.
+ * @param {boolean} [isHydrating] Whether or not we are in hydration
+ */
+export function diff(
+ parentDom,
+ newVNode,
+ oldVNode,
+ globalContext,
+ isSvg,
+ excessDomChildren,
+ commitQueue,
+ oldDom,
+ isHydrating
+) {
+ let tmp,
+ newType = newVNode.type;
+
+ // When passing through createElement it assigns the object
+ // constructor as undefined. This to prevent JSON-injection.
+ if (newVNode.constructor !== undefined) return null;
+
+ // If the previous diff bailed out, resume creating/hydrating.
+ if (oldVNode._hydrating != null) {
+ isHydrating = oldVNode._hydrating;
+ oldDom = newVNode._dom = oldVNode._dom;
+ // if we resume, we want the tree to be "unlocked"
+ newVNode._hydrating = null;
+ excessDomChildren = [oldDom];
+ }
+
+ if ((tmp = options._diff)) tmp(newVNode);
+
+ try {
+ outer: if (typeof newType == 'function') {
+ let c, isNew, oldProps, oldState, snapshot, clearProcessingException;
+ let newProps = newVNode.props;
+
+ // Necessary for createContext api. Setting this property will pass
+ // the context value as `this.context` just for this component.
+ tmp = newType.contextType;
+ let provider = tmp && globalContext[tmp._id];
+ let componentContext = tmp
+ ? provider
+ ? provider.props.value
+ : tmp._defaultValue
+ : globalContext;
+
+ // Get component and set it to `c`
+ if (oldVNode._component) {
+ c = newVNode._component = oldVNode._component;
+ clearProcessingException = c._processingException = c._pendingError;
+ } else {
+ // Instantiate the new component
+ if ('prototype' in newType && newType.prototype.render) {
+ // @ts-ignore The check above verifies that newType is suppose to be constructed
+ newVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap
+ } else {
+ // @ts-ignore Trust me, Component implements the interface we want
+ newVNode._component = c = new Component(newProps, componentContext);
+ c.constructor = newType;
+ c.render = doRender;
+ }
+ if (provider) provider.sub(c);
+
+ c.props = newProps;
+ if (!c.state) c.state = {};
+ c.context = componentContext;
+ c._globalContext = globalContext;
+ isNew = c._dirty = true;
+ c._renderCallbacks = [];
+ }
+
+ // Invoke getDerivedStateFromProps
+ if (c._nextState == null) {
+ c._nextState = c.state;
+ }
+ if (newType.getDerivedStateFromProps != null) {
+ if (c._nextState == c.state) {
+ c._nextState = assign({}, c._nextState);
+ }
+
+ assign(
+ c._nextState,
+ newType.getDerivedStateFromProps(newProps, c._nextState)
+ );
+ }
+
+ oldProps = c.props;
+ oldState = c.state;
+
+ // Invoke pre-render lifecycle methods
+ if (isNew) {
+ if (
+ newType.getDerivedStateFromProps == null &&
+ c.componentWillMount != null
+ ) {
+ c.componentWillMount();
+ }
+
+ if (c.componentDidMount != null) {
+ c._renderCallbacks.push(c.componentDidMount);
+ }
+ } else {
+ if (
+ newType.getDerivedStateFromProps == null &&
+ newProps !== oldProps &&
+ c.componentWillReceiveProps != null
+ ) {
+ c.componentWillReceiveProps(newProps, componentContext);
+ }
+
+ if (
+ (!c._force &&
+ c.shouldComponentUpdate != null &&
+ c.shouldComponentUpdate(
+ newProps,
+ c._nextState,
+ componentContext
+ ) === false) ||
+ newVNode._original === oldVNode._original
+ ) {
+ c.props = newProps;
+ c.state = c._nextState;
+ // More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8
+ if (newVNode._original !== oldVNode._original) c._dirty = false;
+ c._vnode = newVNode;
+ newVNode._dom = oldVNode._dom;
+ newVNode._children = oldVNode._children;
+ newVNode._children.forEach(vnode => {
+ if (vnode) vnode._parent = newVNode;
+ });
+ if (c._renderCallbacks.length) {
+ commitQueue.push(c);
+ }
+
+ break outer;
+ }
+
+ if (c.componentWillUpdate != null) {
+ c.componentWillUpdate(newProps, c._nextState, componentContext);
+ }
+
+ if (c.componentDidUpdate != null) {
+ c._renderCallbacks.push(() => {
+ c.componentDidUpdate(oldProps, oldState, snapshot);
+ });
+ }
+ }
+
+ c.context = componentContext;
+ c.props = newProps;
+ c.state = c._nextState;
+
+ if ((tmp = options._render)) tmp(newVNode);
+
+ c._dirty = false;
+ c._vnode = newVNode;
+ c._parentDom = parentDom;
+
+ tmp = c.render(c.props, c.state, c.context);
+
+ // Handle setState called in render, see #2553
+ c.state = c._nextState;
+
+ if (c.getChildContext != null) {
+ globalContext = assign(assign({}, globalContext), c.getChildContext());
+ }
+
+ if (!isNew && c.getSnapshotBeforeUpdate != null) {
+ snapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);
+ }
+
+ let isTopLevelFragment =
+ tmp != null && tmp.type === Fragment && tmp.key == null;
+ let renderResult = isTopLevelFragment ? tmp.props.children : tmp;
+
+ diffChildren(
+ parentDom,
+ Array.isArray(renderResult) ? renderResult : [renderResult],
+ newVNode,
+ oldVNode,
+ globalContext,
+ isSvg,
+ excessDomChildren,
+ commitQueue,
+ oldDom,
+ isHydrating
+ );
+
+ c.base = newVNode._dom;
+
+ // We successfully rendered this VNode, unset any stored hydration/bailout state:
+ newVNode._hydrating = null;
+
+ if (c._renderCallbacks.length) {
+ commitQueue.push(c);
+ }
+
+ if (clearProcessingException) {
+ c._pendingError = c._processingException = null;
+ }
+
+ c._force = false;
+ } else if (
+ excessDomChildren == null &&
+ newVNode._original === oldVNode._original
+ ) {
+ newVNode._children = oldVNode._children;
+ newVNode._dom = oldVNode._dom;
+ } else {
+ newVNode._dom = diffElementNodes(
+ oldVNode._dom,
+ newVNode,
+ oldVNode,
+ globalContext,
+ isSvg,
+ excessDomChildren,
+ commitQueue,
+ isHydrating
+ );
+ }
+
+ if ((tmp = options.diffed)) tmp(newVNode);
+ } catch (e) {
+ newVNode._original = null;
+ // if hydrating or creating initial tree, bailout preserves DOM:
+ if (isHydrating || excessDomChildren != null) {
+ newVNode._dom = oldDom;
+ newVNode._hydrating = !!isHydrating;
+ excessDomChildren[excessDomChildren.indexOf(oldDom)] = null;
+ // ^ could possibly be simplified to:
+ // excessDomChildren.length = 0;
+ }
+ options._catchError(e, newVNode, oldVNode);
+ }
+}
+
+/**
+ * @param {Array<import('../internal').Component>} commitQueue List of components
+ * which have callbacks to invoke in commitRoot
+ * @param {import('../internal').VNode} root
+ */
+export function commitRoot(commitQueue, root) {
+ if (options._commit) options._commit(root, commitQueue);
+
+ commitQueue.some(c => {
+ try {
+ // @ts-ignore Reuse the commitQueue variable here so the type changes
+ commitQueue = c._renderCallbacks;
+ c._renderCallbacks = [];
+ commitQueue.some(cb => {
+ // @ts-ignore See above ts-ignore on commitQueue
+ cb.call(c);
+ });
+ } catch (e) {
+ options._catchError(e, c._vnode);
+ }
+ });
+}
+
+/**
+ * Diff two virtual nodes representing DOM element
+ * @param {import('../internal').PreactElement} dom The DOM element representing
+ * the virtual nodes being diffed
+ * @param {import('../internal').VNode} newVNode The new virtual node
+ * @param {import('../internal').VNode} oldVNode The old virtual node
+ * @param {object} globalContext The current context object
+ * @param {boolean} isSvg Whether or not this DOM node is an SVG node
+ * @param {*} excessDomChildren
+ * @param {Array<import('../internal').Component>} commitQueue List of components
+ * which have callbacks to invoke in commitRoot
+ * @param {boolean} isHydrating Whether or not we are in hydration
+ * @returns {import('../internal').PreactElement}
+ */
+function diffElementNodes(
+ dom,
+ newVNode,
+ oldVNode,
+ globalContext,
+ isSvg,
+ excessDomChildren,
+ commitQueue,
+ isHydrating
+) {
+ let oldProps = oldVNode.props;
+ let newProps = newVNode.props;
+ let nodeType = newVNode.type;
+ let i = 0;
+
+ // Tracks entering and exiting SVG namespace when descending through the tree.
+ if (nodeType === 'svg') isSvg = true;
+
+ if (excessDomChildren != null) {
+ for (; i < excessDomChildren.length; i++) {
+ const child = excessDomChildren[i];
+
+ // if newVNode matches an element in excessDomChildren or the `dom`
+ // argument matches an element in excessDomChildren, remove it from
+ // excessDomChildren so it isn't later removed in diffChildren
+ if (
+ child &&
+ (child === dom ||
+ (nodeType ? child.localName == nodeType : child.nodeType == 3))
+ ) {
+ dom = child;
+ excessDomChildren[i] = null;
+ break;
+ }
+ }
+ }
+
+ if (dom == null) {
+ if (nodeType === null) {
+ // @ts-ignore createTextNode returns Text, we expect PreactElement
+ return document.createTextNode(newProps);
+ }
+
+ if (isSvg) {
+ dom = document.createElementNS(
+ 'http://www.w3.org/2000/svg',
+ // @ts-ignore We know `newVNode.type` is a string
+ nodeType
+ );
+ } else {
+ dom = document.createElement(
+ // @ts-ignore We know `newVNode.type` is a string
+ nodeType,
+ newProps.is && newProps
+ );
+ }
+
+ // we created a new parent, so none of the previously attached children can be reused:
+ excessDomChildren = null;
+ // we are creating a new node, so we can assume this is a new subtree (in case we are hydrating), this deopts the hydrate
+ isHydrating = false;
+ }
+
+ if (nodeType === null) {
+ // During hydration, we still have to split merged text from SSR'd HTML.
+ if (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {
+ dom.data = newProps;
+ }
+ } else {
+ // If excessDomChildren was not null, repopulate it with the current element's children:
+ excessDomChildren = excessDomChildren && slice.call(dom.childNodes);
+
+ oldProps = oldVNode.props || EMPTY_OBJ;
+
+ let oldHtml = oldProps.dangerouslySetInnerHTML;
+ let newHtml = newProps.dangerouslySetInnerHTML;
+
+ // During hydration, props are not diffed at all (including dangerouslySetInnerHTML)
+ // @TODO we should warn in debug mode when props don't match here.
+ if (!isHydrating) {
+ // But, if we are in a situation where we are using existing DOM (e.g. replaceNode)
+ // we should read the existing DOM attributes to diff them
+ if (excessDomChildren != null) {
+ oldProps = {};
+ for (i = 0; i < dom.attributes.length; i++) {
+ oldProps[dom.attributes[i].name] = dom.attributes[i].value;
+ }
+ }
+
+ if (newHtml || oldHtml) {
+ // Avoid re-applying the same '__html' if it did not changed between re-render
+ if (
+ !newHtml ||
+ ((!oldHtml || newHtml.__html != oldHtml.__html) &&
+ newHtml.__html !== dom.innerHTML)
+ ) {
+ dom.innerHTML = (newHtml && newHtml.__html) || '';
+ }
+ }
+ }
+
+ diffProps(dom, newProps, oldProps, isSvg, isHydrating);
+
+ // If the new vnode didn't have dangerouslySetInnerHTML, diff its children
+ if (newHtml) {
+ newVNode._children = [];
+ } else {
+ i = newVNode.props.children;
+ diffChildren(
+ dom,
+ Array.isArray(i) ? i : [i],
+ newVNode,
+ oldVNode,
+ globalContext,
+ isSvg && nodeType !== 'foreignObject',
+ excessDomChildren,
+ commitQueue,
+ excessDomChildren
+ ? excessDomChildren[0]
+ : oldVNode._children && getDomSibling(oldVNode, 0),
+ isHydrating
+ );
+
+ // Remove children that are not part of any vnode.
+ if (excessDomChildren != null) {
+ for (i = excessDomChildren.length; i--; ) {
+ if (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);
+ }
+ }
+ }
+
+ // (as above, don't diff props during hydration)
+ if (!isHydrating) {
+ if (
+ 'value' in newProps &&
+ (i = newProps.value) !== undefined &&
+ // #2756 For the <progress>-element the initial value is 0,
+ // despite the attribute not being present. When the attribute
+ // is missing the progress bar is treated as indeterminate.
+ // To fix that we'll always update it when it is 0 for progress elements
+ (i !== dom.value || (nodeType === 'progress' && !i))
+ ) {
+ setProperty(dom, 'value', i, oldProps.value, false);
+ }
+ if (
+ 'checked' in newProps &&
+ (i = newProps.checked) !== undefined &&
+ i !== dom.checked
+ ) {
+ setProperty(dom, 'checked', i, oldProps.checked, false);
+ }
+ }
+ }
+
+ return dom;
+}
+
+/**
+ * Invoke or update a ref, depending on whether it is a function or object ref.
+ * @param {object|function} ref
+ * @param {any} value
+ * @param {import('../internal').VNode} vnode
+ */
+export function applyRef(ref, value, vnode) {
+ try {
+ if (typeof ref == 'function') ref(value);
+ else ref.current = value;
+ } catch (e) {
+ options._catchError(e, vnode);
+ }
+}
+
+/**
+ * Unmount a virtual node from the tree and apply DOM changes
+ * @param {import('../internal').VNode} vnode The virtual node to unmount
+ * @param {import('../internal').VNode} parentVNode The parent of the VNode that
+ * initiated the unmount
+ * @param {boolean} [skipRemove] Flag that indicates that a parent node of the
+ * current element is already detached from the DOM.
+ */
+export function unmount(vnode, parentVNode, skipRemove) {
+ let r;
+ if (options.unmount) options.unmount(vnode);
+
+ if ((r = vnode.ref)) {
+ if (!r.current || r.current === vnode._dom) applyRef(r, null, parentVNode);
+ }
+
+ if ((r = vnode._component) != null) {
+ if (r.componentWillUnmount) {
+ try {
+ r.componentWillUnmount();
+ } catch (e) {
+ options._catchError(e, parentVNode);
+ }
+ }
+
+ r.base = r._parentDom = null;
+ }
+
+ if ((r = vnode._children)) {
+ for (let i = 0; i < r.length; i++) {
+ if (r[i]) {
+ unmount(r[i], parentVNode, typeof vnode.type != 'function');
+ }
+ }
+ }
+
+ if (!skipRemove && vnode._dom != null) removeNode(vnode._dom);
+
+ // Must be set to `undefined` to properly clean up `_nextDom`
+ // for which `null` is a valid value. See comment in `create-element.js`
+ vnode._dom = vnode._nextDom = undefined;
+}
+
+/** The `.render()` method for a PFC backing instance. */
+function doRender(props, state, context) {
+ return this.constructor(props, context);
+}
diff --git a/preact/src/diff/props.js b/preact/src/diff/props.js
new file mode 100644
index 0000000..472d997
--- /dev/null
+++ b/preact/src/diff/props.js
@@ -0,0 +1,158 @@
+import { IS_NON_DIMENSIONAL } from '../constants';
+import options from '../options';
+
+/**
+ * Diff the old and new properties of a VNode and apply changes to the DOM node
+ * @param {import('../internal').PreactElement} dom The DOM node to apply
+ * changes to
+ * @param {object} newProps The new props
+ * @param {object} oldProps The old props
+ * @param {boolean} isSvg Whether or not this node is an SVG node
+ * @param {boolean} hydrate Whether or not we are in hydration mode
+ */
+export function diffProps(dom, newProps, oldProps, isSvg, hydrate) {
+ let i;
+
+ for (i in oldProps) {
+ if (i !== 'children' && i !== 'key' && !(i in newProps)) {
+ setProperty(dom, i, null, oldProps[i], isSvg);
+ }
+ }
+
+ for (i in newProps) {
+ if (
+ (!hydrate || typeof newProps[i] == 'function') &&
+ i !== 'children' &&
+ i !== 'key' &&
+ i !== 'value' &&
+ i !== 'checked' &&
+ oldProps[i] !== newProps[i]
+ ) {
+ setProperty(dom, i, newProps[i], oldProps[i], isSvg);
+ }
+ }
+}
+
+function setStyle(style, key, value) {
+ if (key[0] === '-') {
+ style.setProperty(key, value);
+ } else if (value == null) {
+ style[key] = '';
+ } else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {
+ style[key] = value;
+ } else {
+ style[key] = value + 'px';
+ }
+}
+
+/**
+ * Set a property value on a DOM node
+ * @param {import('../internal').PreactElement} dom The DOM node to modify
+ * @param {string} name The name of the property to set
+ * @param {*} value The value to set the property to
+ * @param {*} oldValue The old value the property had
+ * @param {boolean} isSvg Whether or not this DOM node is an SVG node or not
+ */
+export function setProperty(dom, name, value, oldValue, isSvg) {
+ let useCapture;
+
+ o: if (name === 'style') {
+ if (typeof value == 'string') {
+ dom.style.cssText = value;
+ } else {
+ if (typeof oldValue == 'string') {
+ dom.style.cssText = oldValue = '';
+ }
+
+ if (oldValue) {
+ for (name in oldValue) {
+ if (!(value && name in value)) {
+ setStyle(dom.style, name, '');
+ }
+ }
+ }
+
+ if (value) {
+ for (name in value) {
+ if (!oldValue || value[name] !== oldValue[name]) {
+ setStyle(dom.style, name, value[name]);
+ }
+ }
+ }
+ }
+ }
+ // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6
+ else if (name[0] === 'o' && name[1] === 'n') {
+ useCapture = name !== (name = name.replace(/Capture$/, ''));
+
+ // Infer correct casing for DOM built-in events:
+ if (name.toLowerCase() in dom) name = name.toLowerCase().slice(2);
+ else name = name.slice(2);
+
+ if (!dom._listeners) dom._listeners = {};
+ dom._listeners[name + useCapture] = value;
+
+ if (value) {
+ if (!oldValue) {
+ const handler = useCapture ? eventProxyCapture : eventProxy;
+ dom.addEventListener(name, handler, useCapture);
+ }
+ } else {
+ const handler = useCapture ? eventProxyCapture : eventProxy;
+ dom.removeEventListener(name, handler, useCapture);
+ }
+ } else if (name !== 'dangerouslySetInnerHTML') {
+ if (isSvg) {
+ // Normalize incorrect prop usage for SVG:
+ // - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)
+ // - className --> class
+ name = name.replace(/xlink[H:h]/, 'h').replace(/sName$/, 's');
+ } else if (
+ name !== 'href' &&
+ name !== 'list' &&
+ name !== 'form' &&
+ // Default value in browsers is `-1` and an empty string is
+ // cast to `0` instead
+ name !== 'tabIndex' &&
+ name !== 'download' &&
+ name in dom
+ ) {
+ try {
+ dom[name] = value == null ? '' : value;
+ // labelled break is 1b smaller here than a return statement (sorry)
+ break o;
+ } catch (e) {}
+ }
+
+ // ARIA-attributes have a different notion of boolean values.
+ // The value `false` is different from the attribute not
+ // existing on the DOM, so we can't remove it. For non-boolean
+ // ARIA-attributes we could treat false as a removal, but the
+ // amount of exceptions would cost us too many bytes. On top of
+ // that other VDOM frameworks also always stringify `false`.
+
+ if (typeof value === 'function') {
+ // never serialize functions as attribute values
+ } else if (
+ value != null &&
+ (value !== false || (name[0] === 'a' && name[1] === 'r'))
+ ) {
+ dom.setAttribute(name, value);
+ } else {
+ dom.removeAttribute(name);
+ }
+ }
+}
+
+/**
+ * Proxy an event to hooked event handlers
+ * @param {Event} e The event object from the browser
+ * @private
+ */
+function eventProxy(e) {
+ this._listeners[e.type + false](options.event ? options.event(e) : e);
+}
+
+function eventProxyCapture(e) {
+ this._listeners[e.type + true](options.event ? options.event(e) : e);
+}
diff --git a/preact/src/index.d.ts b/preact/src/index.d.ts
new file mode 100644
index 0000000..e55f978
--- /dev/null
+++ b/preact/src/index.d.ts
@@ -0,0 +1,310 @@
+export as namespace preact;
+
+import { JSXInternal } from './jsx';
+
+export import JSX = JSXInternal;
+
+//
+// Preact Virtual DOM
+// -----------------------------------
+
+export interface VNode<P = {}> {
+ type: ComponentType<P> | string;
+ props: P & { children: ComponentChildren };
+ key: Key;
+ /**
+ * ref is not guaranteed by React.ReactElement, for compatibility reasons
+ * with popular react libs we define it as optional too
+ */
+ ref?: Ref<any> | null;
+ /**
+ * The time this `vnode` started rendering. Will only be set when
+ * the devtools are attached.
+ * Default value: `0`
+ */
+ startTime?: number;
+ /**
+ * The time that the rendering of this `vnode` was completed. Will only be
+ * set when the devtools are attached.
+ * Default value: `-1`
+ */
+ endTime?: number;
+}
+
+//
+// Preact Component interface
+// -----------------------------------
+
+export type Key = string | number | any;
+
+export type RefObject<T> = { current: T | null };
+export type RefCallback<T> = (instance: T | null) => void;
+export type Ref<T> = RefObject<T> | RefCallback<T>;
+
+export type ComponentChild =
+ | VNode<any>
+ | object
+ | string
+ | number
+ | bigint
+ | boolean
+ | null
+ | undefined;
+export type ComponentChildren = ComponentChild[] | ComponentChild;
+
+export interface Attributes {
+ key?: Key;
+ jsx?: boolean;
+}
+
+export interface ClassAttributes<T> extends Attributes {
+ ref?: Ref<T>;
+}
+
+export interface PreactDOMAttributes {
+ children?: ComponentChildren;
+ dangerouslySetInnerHTML?: {
+ __html: string;
+ };
+}
+
+export type RenderableProps<P, RefType = any> = P &
+ Readonly<Attributes & { children?: ComponentChildren; ref?: Ref<RefType> }>;
+
+export type ComponentType<P = {}> = ComponentClass<P> | FunctionComponent<P>;
+export type ComponentFactory<P = {}> = ComponentType<P>;
+
+export type ComponentProps<
+ C extends ComponentType<any> | keyof JSXInternal.IntrinsicElements
+> = C extends ComponentType<infer P>
+ ? P
+ : C extends keyof JSXInternal.IntrinsicElements
+ ? JSXInternal.IntrinsicElements[C]
+ : never;
+
+export interface FunctionComponent<P = {}> {
+ (props: RenderableProps<P>, context?: any): VNode<any> | null;
+ displayName?: string;
+ defaultProps?: Partial<P>;
+}
+export interface FunctionalComponent<P = {}> extends FunctionComponent<P> {}
+
+export interface ComponentClass<P = {}, S = {}> {
+ new (props: P, context?: any): Component<P, S>;
+ displayName?: string;
+ defaultProps?: Partial<P>;
+ contextType?: Context<any>;
+ getDerivedStateFromProps?(
+ props: Readonly<P>,
+ state: Readonly<S>
+ ): Partial<S> | null;
+ getDerivedStateFromError?(error: any): Partial<S> | null;
+}
+export interface ComponentConstructor<P = {}, S = {}>
+ extends ComponentClass<P, S> {}
+
+// Type alias for a component instance considered generally, whether stateless or stateful.
+export type AnyComponent<P = {}, S = {}> =
+ | FunctionComponent<P>
+ | Component<P, S>;
+
+export interface Component<P = {}, S = {}> {
+ componentWillMount?(): void;
+ componentDidMount?(): void;
+ componentWillUnmount?(): void;
+ getChildContext?(): object;
+ componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
+ shouldComponentUpdate?(
+ nextProps: Readonly<P>,
+ nextState: Readonly<S>,
+ nextContext: any
+ ): boolean;
+ componentWillUpdate?(
+ nextProps: Readonly<P>,
+ nextState: Readonly<S>,
+ nextContext: any
+ ): void;
+ getSnapshotBeforeUpdate?(oldProps: Readonly<P>, oldState: Readonly<S>): any;
+ componentDidUpdate?(
+ previousProps: Readonly<P>,
+ previousState: Readonly<S>,
+ snapshot: any
+ ): void;
+ componentDidCatch?(error: any, errorInfo: any): void;
+}
+
+export abstract class Component<P, S> {
+ constructor(props?: P, context?: any);
+
+ static displayName?: string;
+ static defaultProps?: any;
+ static contextType?: Context<any>;
+
+ // Static members cannot reference class type parameters. This is not
+ // supported in TypeScript. Reusing the same type arguments from `Component`
+ // will lead to an impossible state where one cannot satisfy the type
+ // constraint under no circumstances, see #1356.In general type arguments
+ // seem to be a bit buggy and not supported well at the time of this
+ // writing with TS 3.3.3333.
+ static getDerivedStateFromProps?(
+ props: Readonly<object>,
+ state: Readonly<object>
+ ): object | null;
+ static getDerivedStateFromError?(error: any): object | null;
+
+ state: Readonly<S>;
+ props: RenderableProps<P>;
+ context: any;
+ base?: Element | Text;
+
+ // From https://github.com/DefinitelyTyped/DefinitelyTyped/blob/e836acc75a78cf0655b5dfdbe81d69fdd4d8a252/types/react/index.d.ts#L402
+ // // We MUST keep setState() as a unified signature because it allows proper checking of the method return type.
+ // // See: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18365#issuecomment-351013257
+ setState<K extends keyof S>(
+ state:
+ | ((
+ prevState: Readonly<S>,
+ props: Readonly<P>
+ ) => Pick<S, K> | Partial<S> | null)
+ | (Pick<S, K> | Partial<S> | null),
+ callback?: () => void
+ ): void;
+
+ forceUpdate(callback?: () => void): void;
+
+ abstract render(
+ props?: RenderableProps<P>,
+ state?: Readonly<S>,
+ context?: any
+ ): ComponentChild;
+}
+
+//
+// Preact createElement
+// -----------------------------------
+
+export function createElement(
+ type: string,
+ props:
+ | (JSXInternal.HTMLAttributes &
+ JSXInternal.SVGAttributes &
+ Record<string, any>)
+ | null,
+ ...children: ComponentChildren[]
+): VNode<any>;
+export function createElement<P>(
+ type: ComponentType<P>,
+ props: (Attributes & P) | null,
+ ...children: ComponentChildren[]
+): VNode<any>;
+export namespace createElement {
+ export import JSX = JSXInternal;
+}
+
+export function h(
+ type: string,
+ props:
+ | (JSXInternal.HTMLAttributes &
+ JSXInternal.SVGAttributes &
+ Record<string, any>)
+ | null,
+ ...children: ComponentChildren[]
+): VNode<any>;
+export function h<P>(
+ type: ComponentType<P>,
+ props: (Attributes & P) | null,
+ ...children: ComponentChildren[]
+): VNode<any>;
+export namespace h {
+ export import JSX = JSXInternal;
+}
+
+//
+// Preact render
+// -----------------------------------
+
+export function render(
+ vnode: ComponentChild,
+ parent: Element | Document | ShadowRoot | DocumentFragment,
+ replaceNode?: Element | Text
+): void;
+export function hydrate(
+ vnode: ComponentChild,
+ parent: Element | Document | ShadowRoot | DocumentFragment
+): void;
+export function cloneElement(
+ vnode: VNode<any>,
+ props?: any,
+ ...children: ComponentChildren[]
+): VNode<any>;
+export function cloneElement<P>(
+ vnode: VNode<P>,
+ props?: any,
+ ...children: ComponentChildren[]
+): VNode<P>;
+
+//
+// Preact Built-in Components
+// -----------------------------------
+
+// TODO: Revisit what the public type of this is...
+export const Fragment: ComponentClass<{}, {}>;
+
+//
+// Preact options
+// -----------------------------------
+
+/**
+ * Global options for preact
+ */
+export interface Options {
+ /** Attach a hook that is invoked whenever a VNode is created. */
+ vnode?(vnode: VNode): void;
+ /** Attach a hook that is invoked immediately before a vnode is unmounted. */
+ unmount?(vnode: VNode): void;
+ /** Attach a hook that is invoked after a vnode has rendered. */
+ diffed?(vnode: VNode): void;
+ event?(e: Event): any;
+ requestAnimationFrame?: typeof requestAnimationFrame;
+ debounceRendering?(cb: () => void): void;
+ useDebugValue?(value: string | number): void;
+ _addHookName?(name: string | number): void;
+ __suspenseDidResolve?(vnode: VNode, cb: () => void): void;
+ // __canSuspenseResolve?(vnode: VNode, cb: () => void): void;
+}
+
+export const options: Options;
+
+//
+// Preact helpers
+// -----------------------------------
+export function createRef<T = any>(): RefObject<T>;
+export function toChildArray(
+ children: ComponentChildren
+): Array<VNode | string | number>;
+export function isValidElement(vnode: any): vnode is VNode;
+
+//
+// Context
+// -----------------------------------
+export interface Consumer<T>
+ extends FunctionComponent<{
+ children: (value: T) => ComponentChildren;
+ }> {}
+export interface PreactConsumer<T> extends Consumer<T> {}
+
+export interface Provider<T>
+ extends FunctionComponent<{
+ value: T;
+ children: ComponentChildren;
+ }> {}
+export interface PreactProvider<T> extends Provider<T> {}
+
+export interface Context<T> {
+ Consumer: Consumer<T>;
+ Provider: Provider<T>;
+ displayName?: string;
+}
+export interface PreactContext<T> extends Context<T> {}
+
+export function createContext<T>(defaultValue: T): Context<T>;
diff --git a/preact/src/index.js b/preact/src/index.js
new file mode 100644
index 0000000..ae76ccb
--- /dev/null
+++ b/preact/src/index.js
@@ -0,0 +1,13 @@
+export { render, hydrate } from './render';
+export {
+ createElement,
+ createElement as h,
+ Fragment,
+ createRef,
+ isValidElement
+} from './create-element';
+export { Component } from './component';
+export { cloneElement } from './clone-element';
+export { createContext } from './create-context';
+export { toChildArray } from './diff/children';
+export { default as options } from './options';
diff --git a/preact/src/internal.d.ts b/preact/src/internal.d.ts
new file mode 100644
index 0000000..4592143
--- /dev/null
+++ b/preact/src/internal.d.ts
@@ -0,0 +1,146 @@
+import * as preact from './index';
+
+export enum HookType {
+ useState = 1,
+ useReducer = 2,
+ useEffect = 3,
+ useLayoutEffect = 4,
+ useRef = 5,
+ useImperativeHandle = 6,
+ useMemo = 7,
+ useCallback = 8,
+ useContext = 9,
+ useErrorBoundary = 10,
+ // Not a real hook, but the devtools treat is as such
+ useDebugvalue = 11
+}
+
+export interface DevSource {
+ fileName: string;
+ lineNumber: number;
+}
+
+export interface Options extends preact.Options {
+ /** Attach a hook that is invoked before render, mainly to check the arguments. */
+ _root?(
+ vnode: ComponentChild,
+ parent: Element | Document | ShadowRoot | DocumentFragment
+ ): void;
+ /** Attach a hook that is invoked before a vnode is diffed. */
+ _diff?(vnode: VNode): void;
+ /** Attach a hook that is invoked after a tree was mounted or was updated. */
+ _commit?(vnode: VNode, commitQueue: Component[]): void;
+ /** Attach a hook that is invoked before a vnode has rendered. */
+ _render?(vnode: VNode): void;
+ /** Attach a hook that is invoked before a hook's state is queried. */
+ _hook?(component: Component, index: number, type: HookType): void;
+ /** Bypass effect execution. Currenty only used in devtools for hooks inspection */
+ _skipEffects?: boolean;
+ /** Attach a hook that is invoked after an error is caught in a component but before calling lifecycle hooks */
+ _catchError(error: any, vnode: VNode, oldVNode?: VNode | undefined): void;
+}
+
+export type ComponentChild =
+ | VNode<any>
+ | string
+ | number
+ | boolean
+ | null
+ | undefined;
+export type ComponentChildren = ComponentChild[] | ComponentChild;
+
+export interface FunctionComponent<P = {}> extends preact.FunctionComponent<P> {
+ // Internally, createContext uses `contextType` on a Function component to
+ // implement the Consumer component
+ contextType?: PreactContext;
+
+ // Internally, createContext stores a ref to the context object on the Provider
+ // Function component to help devtools
+ _contextRef?: PreactContext;
+
+ // Define these properties as undefined on FunctionComponent to get rid of
+ // some errors in `diff()`
+ getDerivedStateFromProps?: undefined;
+ getDerivedStateFromError?: undefined;
+}
+
+export interface ComponentClass<P = {}> extends preact.ComponentClass<P> {
+ _contextRef?: any;
+
+ // Override public contextType with internal PreactContext type
+ contextType?: PreactContext;
+}
+
+// Redefine ComponentType using our new internal FunctionComponent interface above
+export type ComponentType<P = {}> = ComponentClass<P> | FunctionComponent<P>;
+
+export interface PreactElement extends HTMLElement {
+ _children?: VNode<any> | null;
+ /** Event listeners to support event delegation */
+ _listeners?: Record<string, (e: Event) => void>;
+
+ // Preact uses this attribute to detect SVG nodes
+ ownerSVGElement?: SVGElement | null;
+
+ // style: HTMLElement["style"]; // From HTMLElement
+
+ data?: string | number; // From Text node
+}
+
+// We use the `current` property to differentiate between the two kinds of Refs so
+// internally we'll define `current` on both to make TypeScript happy
+type RefObject<T> = { current: T | null };
+type RefCallback<T> = { (instance: T | null): void; current: undefined };
+type Ref<T> = RefObject<T> | RefCallback<T>;
+
+export interface VNode<P = {}> extends preact.VNode<P> {
+ // Redefine type here using our internal ComponentType type
+ type: string | ComponentType<P>;
+ props: P & { children: ComponentChildren };
+ ref?: Ref<any> | null;
+ _children: Array<VNode<any>> | null;
+ _parent: VNode | null;
+ _depth: number | null;
+ /**
+ * The [first (for Fragments)] DOM child of a VNode
+ */
+ _dom: PreactElement | null;
+ /**
+ * The last dom child of a Fragment, or components that return a Fragment
+ */
+ _nextDom: PreactElement | null;
+ _component: Component | null;
+ _hydrating: boolean | null;
+ constructor: undefined;
+ _original: number;
+}
+
+export interface Component<P = {}, S = {}> extends preact.Component<P, S> {
+ // When component is functional component, this is reset to functional component
+ constructor: ComponentType<P>;
+ state: S; // Override Component["state"] to not be readonly for internal use, specifically Hooks
+ base?: PreactElement;
+
+ _dirty: boolean;
+ _force?: boolean;
+ _renderCallbacks: Array<() => void>; // Only class components
+ _globalContext?: any;
+ _vnode?: VNode<P> | null;
+ _nextState?: S | null; // Only class components
+ /** Only used in the devtools to later dirty check if state has changed */
+ _prevState?: S | null;
+ /**
+ * Pointer to the parent dom node. This is only needed for top-level Fragment
+ * components or array returns.
+ */
+ _parentDom?: PreactElement | null;
+ // Always read, set only when handling error
+ _processingException?: Component<any, any> | null;
+ // Always read, set only when handling error. This is used to indicate at diffTime to set _processingException
+ _pendingError?: Component<any, any> | null;
+}
+
+export interface PreactContext extends preact.Context<any> {
+ _id: string;
+ _defaultValue: any;
+}
diff --git a/preact/src/jsx.d.ts b/preact/src/jsx.d.ts
new file mode 100644
index 0000000..7533435
--- /dev/null
+++ b/preact/src/jsx.d.ts
@@ -0,0 +1,974 @@
+// Users who only use Preact for SSR might not specify "dom" in their lib in tsconfig.json
+/// <reference lib="dom" />
+
+import {
+ ClassAttributes,
+ Component,
+ PreactDOMAttributes,
+ VNode
+} from './index';
+
+type Defaultize<Props, Defaults> =
+ // Distribute over unions
+ Props extends any // Make any properties included in Default optional
+ ? Partial<Pick<Props, Extract<keyof Props, keyof Defaults>>> & // Include the remaining properties from Props
+ Pick<Props, Exclude<keyof Props, keyof Defaults>>
+ : never;
+
+export namespace JSXInternal {
+ export type LibraryManagedAttributes<Component, Props> = Component extends {
+ defaultProps: infer Defaults;
+ }
+ ? Defaultize<Props, Defaults>
+ : Props;
+
+ export interface IntrinsicAttributes {
+ key?: any;
+ }
+
+ export interface Element extends VNode<any> {}
+
+ export interface ElementClass extends Component<any, any> {}
+
+ export interface ElementAttributesProperty {
+ props: any;
+ }
+
+ export interface ElementChildrenAttribute {
+ children: any;
+ }
+
+ export type DOMCSSProperties = {
+ [key in keyof Omit<
+ CSSStyleDeclaration,
+ | 'item'
+ | 'setProperty'
+ | 'removeProperty'
+ | 'getPropertyValue'
+ | 'getPropertyPriority'
+ >]?: string | number | null | undefined;
+ };
+ export type AllCSSProperties = {
+ [key: string]: string | number | null | undefined;
+ };
+ export interface CSSProperties extends AllCSSProperties, DOMCSSProperties {
+ cssText?: string | null;
+ }
+
+ export interface SVGAttributes<Target extends EventTarget = SVGElement>
+ extends HTMLAttributes<Target> {
+ accentHeight?: number | string;
+ accumulate?: 'none' | 'sum';
+ additive?: 'replace' | 'sum';
+ alignmentBaseline?:
+ | 'auto'
+ | 'baseline'
+ | 'before-edge'
+ | 'text-before-edge'
+ | 'middle'
+ | 'central'
+ | 'after-edge'
+ | 'text-after-edge'
+ | 'ideographic'
+ | 'alphabetic'
+ | 'hanging'
+ | 'mathematical'
+ | 'inherit';
+ allowReorder?: 'no' | 'yes';
+ alphabetic?: number | string;
+ amplitude?: number | string;
+ arabicForm?: 'initial' | 'medial' | 'terminal' | 'isolated';
+ ascent?: number | string;
+ attributeName?: string;
+ attributeType?: string;
+ autoReverse?: number | string;
+ azimuth?: number | string;
+ baseFrequency?: number | string;
+ baselineShift?: number | string;
+ baseProfile?: number | string;
+ bbox?: number | string;
+ begin?: number | string;
+ bias?: number | string;
+ by?: number | string;
+ calcMode?: number | string;
+ capHeight?: number | string;
+ clip?: number | string;
+ clipPath?: string;
+ clipPathUnits?: number | string;
+ clipRule?: number | string;
+ colorInterpolation?: number | string;
+ colorInterpolationFilters?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';
+ colorProfile?: number | string;
+ colorRendering?: number | string;
+ contentScriptType?: number | string;
+ contentStyleType?: number | string;
+ cursor?: number | string;
+ cx?: number | string;
+ cy?: number | string;
+ d?: string;
+ decelerate?: number | string;
+ descent?: number | string;
+ diffuseConstant?: number | string;
+ direction?: number | string;
+ display?: number | string;
+ divisor?: number | string;
+ dominantBaseline?: number | string;
+ dur?: number | string;
+ dx?: number | string;
+ dy?: number | string;
+ edgeMode?: number | string;
+ elevation?: number | string;
+ enableBackground?: number | string;
+ end?: number | string;
+ exponent?: number | string;
+ externalResourcesRequired?: number | string;
+ fill?: string;
+ fillOpacity?: number | string;
+ fillRule?: 'nonzero' | 'evenodd' | 'inherit';
+ filter?: string;
+ filterRes?: number | string;
+ filterUnits?: number | string;
+ floodColor?: number | string;
+ floodOpacity?: number | string;
+ focusable?: number | string;
+ fontFamily?: string;
+ fontSize?: number | string;
+ fontSizeAdjust?: number | string;
+ fontStretch?: number | string;
+ fontStyle?: number | string;
+ fontVariant?: number | string;
+ fontWeight?: number | string;
+ format?: number | string;
+ from?: number | string;
+ fx?: number | string;
+ fy?: number | string;
+ g1?: number | string;
+ g2?: number | string;
+ glyphName?: number | string;
+ glyphOrientationHorizontal?: number | string;
+ glyphOrientationVertical?: number | string;
+ glyphRef?: number | string;
+ gradientTransform?: string;
+ gradientUnits?: string;
+ hanging?: number | string;
+ horizAdvX?: number | string;
+ horizOriginX?: number | string;
+ ideographic?: number | string;
+ imageRendering?: number | string;
+ in2?: number | string;
+ in?: string;
+ intercept?: number | string;
+ k1?: number | string;
+ k2?: number | string;
+ k3?: number | string;
+ k4?: number | string;
+ k?: number | string;
+ kernelMatrix?: number | string;
+ kernelUnitLength?: number | string;
+ kerning?: number | string;
+ keyPoints?: number | string;
+ keySplines?: number | string;
+ keyTimes?: number | string;
+ lengthAdjust?: number | string;
+ letterSpacing?: number | string;
+ lightingColor?: number | string;
+ limitingConeAngle?: number | string;
+ local?: number | string;
+ markerEnd?: string;
+ markerHeight?: number | string;
+ markerMid?: string;
+ markerStart?: string;
+ markerUnits?: number | string;
+ markerWidth?: number | string;
+ mask?: string;
+ maskContentUnits?: number | string;
+ maskUnits?: number | string;
+ mathematical?: number | string;
+ mode?: number | string;
+ numOctaves?: number | string;
+ offset?: number | string;
+ opacity?: number | string;
+ operator?: number | string;
+ order?: number | string;
+ orient?: number | string;
+ orientation?: number | string;
+ origin?: number | string;
+ overflow?: number | string;
+ overlinePosition?: number | string;
+ overlineThickness?: number | string;
+ paintOrder?: number | string;
+ panose1?: number | string;
+ pathLength?: number | string;
+ patternContentUnits?: string;
+ patternTransform?: number | string;
+ patternUnits?: string;
+ pointerEvents?: number | string;
+ points?: string;
+ pointsAtX?: number | string;
+ pointsAtY?: number | string;
+ pointsAtZ?: number | string;
+ preserveAlpha?: number | string;
+ preserveAspectRatio?: string;
+ primitiveUnits?: number | string;
+ r?: number | string;
+ radius?: number | string;
+ refX?: number | string;
+ refY?: number | string;
+ renderingIntent?: number | string;
+ repeatCount?: number | string;
+ repeatDur?: number | string;
+ requiredExtensions?: number | string;
+ requiredFeatures?: number | string;
+ restart?: number | string;
+ result?: string;
+ rotate?: number | string;
+ rx?: number | string;
+ ry?: number | string;
+ scale?: number | string;
+ seed?: number | string;
+ shapeRendering?: number | string;
+ slope?: number | string;
+ spacing?: number | string;
+ specularConstant?: number | string;
+ specularExponent?: number | string;
+ speed?: number | string;
+ spreadMethod?: string;
+ startOffset?: number | string;
+ stdDeviation?: number | string;
+ stemh?: number | string;
+ stemv?: number | string;
+ stitchTiles?: number | string;
+ stopColor?: string;
+ stopOpacity?: number | string;
+ strikethroughPosition?: number | string;
+ strikethroughThickness?: number | string;
+ string?: number | string;
+ stroke?: string;
+ strokeDasharray?: string | number;
+ strokeDashoffset?: string | number;
+ strokeLinecap?: 'butt' | 'round' | 'square' | 'inherit';
+ strokeLinejoin?: 'miter' | 'round' | 'bevel' | 'inherit';
+ strokeMiterlimit?: string | number;
+ strokeOpacity?: number | string;
+ strokeWidth?: number | string;
+ surfaceScale?: number | string;
+ systemLanguage?: number | string;
+ tableValues?: number | string;
+ targetX?: number | string;
+ targetY?: number | string;
+ textAnchor?: string;
+ textDecoration?: number | string;
+ textLength?: number | string;
+ textRendering?: number | string;
+ to?: number | string;
+ transform?: string;
+ u1?: number | string;
+ u2?: number | string;
+ underlinePosition?: number | string;
+ underlineThickness?: number | string;
+ unicode?: number | string;
+ unicodeBidi?: number | string;
+ unicodeRange?: number | string;
+ unitsPerEm?: number | string;
+ vAlphabetic?: number | string;
+ values?: string;
+ vectorEffect?: number | string;
+ version?: string;
+ vertAdvY?: number | string;
+ vertOriginX?: number | string;
+ vertOriginY?: number | string;
+ vHanging?: number | string;
+ vIdeographic?: number | string;
+ viewBox?: string;
+ viewTarget?: number | string;
+ visibility?: number | string;
+ vMathematical?: number | string;
+ widths?: number | string;
+ wordSpacing?: number | string;
+ writingMode?: number | string;
+ x1?: number | string;
+ x2?: number | string;
+ x?: number | string;
+ xChannelSelector?: string;
+ xHeight?: number | string;
+ xlinkActuate?: string;
+ xlinkArcrole?: string;
+ xlinkHref?: string;
+ xlinkRole?: string;
+ xlinkShow?: string;
+ xlinkTitle?: string;
+ xlinkType?: string;
+ xmlBase?: string;
+ xmlLang?: string;
+ xmlns?: string;
+ xmlnsXlink?: string;
+ xmlSpace?: string;
+ y1?: number | string;
+ y2?: number | string;
+ y?: number | string;
+ yChannelSelector?: string;
+ z?: number | string;
+ zoomAndPan?: string;
+ }
+
+ export interface PathAttributes {
+ d: string;
+ }
+
+ export type TargetedEvent<
+ Target extends EventTarget = EventTarget,
+ TypedEvent extends Event = Event
+ > = Omit<TypedEvent, 'currentTarget'> & {
+ readonly currentTarget: Target;
+ };
+
+ export type TargetedAnimationEvent<
+ Target extends EventTarget
+ > = TargetedEvent<Target, AnimationEvent>;
+ export type TargetedClipboardEvent<
+ Target extends EventTarget
+ > = TargetedEvent<Target, ClipboardEvent>;
+ export type TargetedCompositionEvent<
+ Target extends EventTarget
+ > = TargetedEvent<Target, CompositionEvent>;
+ export type TargetedDragEvent<Target extends EventTarget> = TargetedEvent<
+ Target,
+ DragEvent
+ >;
+ export type TargetedFocusEvent<Target extends EventTarget> = TargetedEvent<
+ Target,
+ FocusEvent
+ >;
+ export type TargetedKeyboardEvent<Target extends EventTarget> = TargetedEvent<
+ Target,
+ KeyboardEvent
+ >;
+ export type TargetedMouseEvent<Target extends EventTarget> = TargetedEvent<
+ Target,
+ MouseEvent
+ >;
+ export type TargetedPointerEvent<Target extends EventTarget> = TargetedEvent<
+ Target,
+ PointerEvent
+ >;
+ export type TargetedTouchEvent<Target extends EventTarget> = TargetedEvent<
+ Target,
+ TouchEvent
+ >;
+ export type TargetedTransitionEvent<
+ Target extends EventTarget
+ > = TargetedEvent<Target, TransitionEvent>;
+ export type TargetedUIEvent<Target extends EventTarget> = TargetedEvent<
+ Target,
+ UIEvent
+ >;
+ export type TargetedWheelEvent<Target extends EventTarget> = TargetedEvent<
+ Target,
+ WheelEvent
+ >;
+
+ export interface EventHandler<E extends TargetedEvent> {
+ /**
+ * The `this` keyword always points to the DOM element the event handler
+ * was invoked on. See: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Event_handlers#Event_handlers_parameters_this_binding_and_the_return_value
+ */
+ (this: never, event: E): void;
+ }
+
+ export type AnimationEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedAnimationEvent<Target>
+ >;
+ export type ClipboardEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedClipboardEvent<Target>
+ >;
+ export type CompositionEventHandler<
+ Target extends EventTarget
+ > = EventHandler<TargetedCompositionEvent<Target>>;
+ export type DragEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedDragEvent<Target>
+ >;
+ export type FocusEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedFocusEvent<Target>
+ >;
+ export type GenericEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedEvent<Target>
+ >;
+ export type KeyboardEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedKeyboardEvent<Target>
+ >;
+ export type MouseEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedMouseEvent<Target>
+ >;
+ export type PointerEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedPointerEvent<Target>
+ >;
+ export type TouchEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedTouchEvent<Target>
+ >;
+ export type TransitionEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedTransitionEvent<Target>
+ >;
+ export type UIEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedUIEvent<Target>
+ >;
+ export type WheelEventHandler<Target extends EventTarget> = EventHandler<
+ TargetedWheelEvent<Target>
+ >;
+
+ export interface DOMAttributes<Target extends EventTarget>
+ extends PreactDOMAttributes {
+ // Image Events
+ onLoad?: GenericEventHandler<Target>;
+ onLoadCapture?: GenericEventHandler<Target>;
+ onError?: GenericEventHandler<Target>;
+ onErrorCapture?: GenericEventHandler<Target>;
+
+ // Clipboard Events
+ onCopy?: ClipboardEventHandler<Target>;
+ onCopyCapture?: ClipboardEventHandler<Target>;
+ onCut?: ClipboardEventHandler<Target>;
+ onCutCapture?: ClipboardEventHandler<Target>;
+ onPaste?: ClipboardEventHandler<Target>;
+ onPasteCapture?: ClipboardEventHandler<Target>;
+
+ // Composition Events
+ onCompositionEnd?: CompositionEventHandler<Target>;
+ onCompositionEndCapture?: CompositionEventHandler<Target>;
+ onCompositionStart?: CompositionEventHandler<Target>;
+ onCompositionStartCapture?: CompositionEventHandler<Target>;
+ onCompositionUpdate?: CompositionEventHandler<Target>;
+ onCompositionUpdateCapture?: CompositionEventHandler<Target>;
+
+ // Details Events
+ onToggle?: GenericEventHandler<Target>;
+
+ // Focus Events
+ onFocus?: FocusEventHandler<Target>;
+ onFocusCapture?: FocusEventHandler<Target>;
+ onBlur?: FocusEventHandler<Target>;
+ onBlurCapture?: FocusEventHandler<Target>;
+
+ // Form Events
+ onChange?: GenericEventHandler<Target>;
+ onChangeCapture?: GenericEventHandler<Target>;
+ onInput?: GenericEventHandler<Target>;
+ onInputCapture?: GenericEventHandler<Target>;
+ onSearch?: GenericEventHandler<Target>;
+ onSearchCapture?: GenericEventHandler<Target>;
+ onSubmit?: GenericEventHandler<Target>;
+ onSubmitCapture?: GenericEventHandler<Target>;
+ onInvalid?: GenericEventHandler<Target>;
+ onInvalidCapture?: GenericEventHandler<Target>;
+ onReset?: GenericEventHandler<Target>;
+ onResetCapture?: GenericEventHandler<Target>;
+ onFormData?: GenericEventHandler<Target>;
+ onFormDataCapture?: GenericEventHandler<Target>;
+
+ // Keyboard Events
+ onKeyDown?: KeyboardEventHandler<Target>;
+ onKeyDownCapture?: KeyboardEventHandler<Target>;
+ onKeyPress?: KeyboardEventHandler<Target>;
+ onKeyPressCapture?: KeyboardEventHandler<Target>;
+ onKeyUp?: KeyboardEventHandler<Target>;
+ onKeyUpCapture?: KeyboardEventHandler<Target>;
+
+ // Media Events
+ onAbort?: GenericEventHandler<Target>;
+ onAbortCapture?: GenericEventHandler<Target>;
+ onCanPlay?: GenericEventHandler<Target>;
+ onCanPlayCapture?: GenericEventHandler<Target>;
+ onCanPlayThrough?: GenericEventHandler<Target>;
+ onCanPlayThroughCapture?: GenericEventHandler<Target>;
+ onDurationChange?: GenericEventHandler<Target>;
+ onDurationChangeCapture?: GenericEventHandler<Target>;
+ onEmptied?: GenericEventHandler<Target>;
+ onEmptiedCapture?: GenericEventHandler<Target>;
+ onEncrypted?: GenericEventHandler<Target>;
+ onEncryptedCapture?: GenericEventHandler<Target>;
+ onEnded?: GenericEventHandler<Target>;
+ onEndedCapture?: GenericEventHandler<Target>;
+ onLoadedData?: GenericEventHandler<Target>;
+ onLoadedDataCapture?: GenericEventHandler<Target>;
+ onLoadedMetadata?: GenericEventHandler<Target>;
+ onLoadedMetadataCapture?: GenericEventHandler<Target>;
+ onLoadStart?: GenericEventHandler<Target>;
+ onLoadStartCapture?: GenericEventHandler<Target>;
+ onPause?: GenericEventHandler<Target>;
+ onPauseCapture?: GenericEventHandler<Target>;
+ onPlay?: GenericEventHandler<Target>;
+ onPlayCapture?: GenericEventHandler<Target>;
+ onPlaying?: GenericEventHandler<Target>;
+ onPlayingCapture?: GenericEventHandler<Target>;
+ onProgress?: GenericEventHandler<Target>;
+ onProgressCapture?: GenericEventHandler<Target>;
+ onRateChange?: GenericEventHandler<Target>;
+ onRateChangeCapture?: GenericEventHandler<Target>;
+ onSeeked?: GenericEventHandler<Target>;
+ onSeekedCapture?: GenericEventHandler<Target>;
+ onSeeking?: GenericEventHandler<Target>;
+ onSeekingCapture?: GenericEventHandler<Target>;
+ onStalled?: GenericEventHandler<Target>;
+ onStalledCapture?: GenericEventHandler<Target>;
+ onSuspend?: GenericEventHandler<Target>;
+ onSuspendCapture?: GenericEventHandler<Target>;
+ onTimeUpdate?: GenericEventHandler<Target>;
+ onTimeUpdateCapture?: GenericEventHandler<Target>;
+ onVolumeChange?: GenericEventHandler<Target>;
+ onVolumeChangeCapture?: GenericEventHandler<Target>;
+ onWaiting?: GenericEventHandler<Target>;
+ onWaitingCapture?: GenericEventHandler<Target>;
+
+ // MouseEvents
+ onClick?: MouseEventHandler<Target>;
+ onClickCapture?: MouseEventHandler<Target>;
+ onContextMenu?: MouseEventHandler<Target>;
+ onContextMenuCapture?: MouseEventHandler<Target>;
+ onDblClick?: MouseEventHandler<Target>;
+ onDblClickCapture?: MouseEventHandler<Target>;
+ onDrag?: DragEventHandler<Target>;
+ onDragCapture?: DragEventHandler<Target>;
+ onDragEnd?: DragEventHandler<Target>;
+ onDragEndCapture?: DragEventHandler<Target>;
+ onDragEnter?: DragEventHandler<Target>;
+ onDragEnterCapture?: DragEventHandler<Target>;
+ onDragExit?: DragEventHandler<Target>;
+ onDragExitCapture?: DragEventHandler<Target>;
+ onDragLeave?: DragEventHandler<Target>;
+ onDragLeaveCapture?: DragEventHandler<Target>;
+ onDragOver?: DragEventHandler<Target>;
+ onDragOverCapture?: DragEventHandler<Target>;
+ onDragStart?: DragEventHandler<Target>;
+ onDragStartCapture?: DragEventHandler<Target>;
+ onDrop?: DragEventHandler<Target>;
+ onDropCapture?: DragEventHandler<Target>;
+ onMouseDown?: MouseEventHandler<Target>;
+ onMouseDownCapture?: MouseEventHandler<Target>;
+ onMouseEnter?: MouseEventHandler<Target>;
+ onMouseEnterCapture?: MouseEventHandler<Target>;
+ onMouseLeave?: MouseEventHandler<Target>;
+ onMouseLeaveCapture?: MouseEventHandler<Target>;
+ onMouseMove?: MouseEventHandler<Target>;
+ onMouseMoveCapture?: MouseEventHandler<Target>;
+ onMouseOut?: MouseEventHandler<Target>;
+ onMouseOutCapture?: MouseEventHandler<Target>;
+ onMouseOver?: MouseEventHandler<Target>;
+ onMouseOverCapture?: MouseEventHandler<Target>;
+ onMouseUp?: MouseEventHandler<Target>;
+ onMouseUpCapture?: MouseEventHandler<Target>;
+
+ // Selection Events
+ onSelect?: GenericEventHandler<Target>;
+ onSelectCapture?: GenericEventHandler<Target>;
+
+ // Touch Events
+ onTouchCancel?: TouchEventHandler<Target>;
+ onTouchCancelCapture?: TouchEventHandler<Target>;
+ onTouchEnd?: TouchEventHandler<Target>;
+ onTouchEndCapture?: TouchEventHandler<Target>;
+ onTouchMove?: TouchEventHandler<Target>;
+ onTouchMoveCapture?: TouchEventHandler<Target>;
+ onTouchStart?: TouchEventHandler<Target>;
+ onTouchStartCapture?: TouchEventHandler<Target>;
+
+ // Pointer Events
+ onPointerOver?: PointerEventHandler<Target>;
+ onPointerOverCapture?: PointerEventHandler<Target>;
+ onPointerEnter?: PointerEventHandler<Target>;
+ onPointerEnterCapture?: PointerEventHandler<Target>;
+ onPointerDown?: PointerEventHandler<Target>;
+ onPointerDownCapture?: PointerEventHandler<Target>;
+ onPointerMove?: PointerEventHandler<Target>;
+ onPointerMoveCapture?: PointerEventHandler<Target>;
+ onPointerUp?: PointerEventHandler<Target>;
+ onPointerUpCapture?: PointerEventHandler<Target>;
+ onPointerCancel?: PointerEventHandler<Target>;
+ onPointerCancelCapture?: PointerEventHandler<Target>;
+ onPointerOut?: PointerEventHandler<Target>;
+ onPointerOutCapture?: PointerEventHandler<Target>;
+ onPointerLeave?: PointerEventHandler<Target>;
+ onPointerLeaveCapture?: PointerEventHandler<Target>;
+ onGotPointerCapture?: PointerEventHandler<Target>;
+ onGotPointerCaptureCapture?: PointerEventHandler<Target>;
+ onLostPointerCapture?: PointerEventHandler<Target>;
+ onLostPointerCaptureCapture?: PointerEventHandler<Target>;
+
+ // UI Events
+ onScroll?: UIEventHandler<Target>;
+ onScrollCapture?: UIEventHandler<Target>;
+
+ // Wheel Events
+ onWheel?: WheelEventHandler<Target>;
+ onWheelCapture?: WheelEventHandler<Target>;
+
+ // Animation Events
+ onAnimationStart?: AnimationEventHandler<Target>;
+ onAnimationStartCapture?: AnimationEventHandler<Target>;
+ onAnimationEnd?: AnimationEventHandler<Target>;
+ onAnimationEndCapture?: AnimationEventHandler<Target>;
+ onAnimationIteration?: AnimationEventHandler<Target>;
+ onAnimationIterationCapture?: AnimationEventHandler<Target>;
+
+ // Transition Events
+ onTransitionEnd?: TransitionEventHandler<Target>;
+ onTransitionEndCapture?: TransitionEventHandler<Target>;
+ }
+
+ export interface HTMLAttributes<RefType extends EventTarget = EventTarget>
+ extends ClassAttributes<RefType>,
+ DOMAttributes<RefType> {
+ // Standard HTML Attributes
+ accept?: string;
+ acceptCharset?: string;
+ accessKey?: string;
+ action?: string;
+ allowFullScreen?: boolean;
+ allowTransparency?: boolean;
+ alt?: string;
+ as?: string;
+ async?: boolean;
+ autocomplete?: string;
+ autoComplete?: string;
+ autocorrect?: string;
+ autoCorrect?: string;
+ autofocus?: boolean;
+ autoFocus?: boolean;
+ autoPlay?: boolean;
+ capture?: boolean | string;
+ cellPadding?: number | string;
+ cellSpacing?: number | string;
+ charSet?: string;
+ challenge?: string;
+ checked?: boolean;
+ class?: string;
+ className?: string;
+ cols?: number;
+ colSpan?: number;
+ content?: string;
+ contentEditable?: boolean;
+ contextMenu?: string;
+ controls?: boolean;
+ controlsList?: string;
+ coords?: string;
+ crossOrigin?: string;
+ data?: string;
+ dateTime?: string;
+ default?: boolean;
+ defer?: boolean;
+ dir?: 'auto' | 'rtl' | 'ltr';
+ disabled?: boolean;
+ disableRemotePlayback?: boolean;
+ download?: any;
+ decoding?: 'sync' | 'async' | 'auto';
+ draggable?: boolean;
+ encType?: string;
+ form?: string;
+ formAction?: string;
+ formEncType?: string;
+ formMethod?: string;
+ formNoValidate?: boolean;
+ formTarget?: string;
+ frameBorder?: number | string;
+ headers?: string;
+ height?: number | string;
+ hidden?: boolean;
+ high?: number;
+ href?: string;
+ hrefLang?: string;
+ for?: string;
+ htmlFor?: string;
+ httpEquiv?: string;
+ icon?: string;
+ id?: string;
+ inputMode?: string;
+ integrity?: string;
+ is?: string;
+ keyParams?: string;
+ keyType?: string;
+ kind?: string;
+ label?: string;
+ lang?: string;
+ list?: string;
+ loading?: 'eager' | 'lazy';
+ loop?: boolean;
+ low?: number;
+ manifest?: string;
+ marginHeight?: number;
+ marginWidth?: number;
+ max?: number | string;
+ maxLength?: number;
+ media?: string;
+ mediaGroup?: string;
+ method?: string;
+ min?: number | string;
+ minLength?: number;
+ multiple?: boolean;
+ muted?: boolean;
+ name?: string;
+ nonce?: string;
+ noValidate?: boolean;
+ open?: boolean;
+ optimum?: number;
+ pattern?: string;
+ placeholder?: string;
+ playsInline?: boolean;
+ poster?: string;
+ preload?: string;
+ radioGroup?: string;
+ readonly?: boolean;
+ readOnly?: boolean;
+ rel?: string;
+ required?: boolean;
+ role?: string;
+ rows?: number;
+ rowSpan?: number;
+ sandbox?: string;
+ scope?: string;
+ scoped?: boolean;
+ scrolling?: string;
+ seamless?: boolean;
+ selected?: boolean;
+ shape?: string;
+ size?: number;
+ sizes?: string;
+ slot?: string;
+ span?: number;
+ spellcheck?: boolean;
+ spellCheck?: boolean;
+ src?: string;
+ srcset?: string;
+ srcDoc?: string;
+ srcLang?: string;
+ srcSet?: string;
+ start?: number;
+ step?: number | string;
+ style?: string | CSSProperties;
+ summary?: string;
+ tabIndex?: number;
+ target?: string;
+ title?: string;
+ type?: string;
+ useMap?: string;
+ value?: string | string[] | number;
+ volume?: string | number;
+ width?: number | string;
+ wmode?: string;
+ wrap?: string;
+
+ // Non-standard Attributes
+ autocapitalize?:
+ | 'off'
+ | 'none'
+ | 'on'
+ | 'sentences'
+ | 'words'
+ | 'characters';
+ autoCapitalize?:
+ | 'off'
+ | 'none'
+ | 'on'
+ | 'sentences'
+ | 'words'
+ | 'characters';
+
+ // RDFa Attributes
+ about?: string;
+ datatype?: string;
+ inlist?: any;
+ prefix?: string;
+ property?: string;
+ resource?: string;
+ typeof?: string;
+ vocab?: string;
+
+ // Microdata Attributes
+ itemProp?: string;
+ itemScope?: boolean;
+ itemType?: string;
+ itemID?: string;
+ itemRef?: string;
+ }
+
+ export interface HTMLMarqueeElement extends HTMLElement {
+ behavior?: 'scroll' | 'slide' | 'alternate';
+ bgColor?: string;
+ direction?: 'left' | 'right' | 'up' | 'down';
+ height?: number | string;
+ hspace?: number | string;
+ loop?: number | string;
+ scrollAmount?: number | string;
+ scrollDelay?: number | string;
+ trueSpeed?: boolean;
+ vspace?: number | string;
+ width?: number | string;
+ }
+
+ export interface IntrinsicElements {
+ // HTML
+ a: HTMLAttributes<HTMLAnchorElement>;
+ abbr: HTMLAttributes<HTMLElement>;
+ address: HTMLAttributes<HTMLElement>;
+ area: HTMLAttributes<HTMLAreaElement>;
+ article: HTMLAttributes<HTMLElement>;
+ aside: HTMLAttributes<HTMLElement>;
+ audio: HTMLAttributes<HTMLAudioElement>;
+ b: HTMLAttributes<HTMLElement>;
+ base: HTMLAttributes<HTMLBaseElement>;
+ bdi: HTMLAttributes<HTMLElement>;
+ bdo: HTMLAttributes<HTMLElement>;
+ big: HTMLAttributes<HTMLElement>;
+ blockquote: HTMLAttributes<HTMLQuoteElement>;
+ body: HTMLAttributes<HTMLBodyElement>;
+ br: HTMLAttributes<HTMLBRElement>;
+ button: HTMLAttributes<HTMLButtonElement>;
+ canvas: HTMLAttributes<HTMLCanvasElement>;
+ caption: HTMLAttributes<HTMLTableCaptionElement>;
+ cite: HTMLAttributes<HTMLElement>;
+ code: HTMLAttributes<HTMLElement>;
+ col: HTMLAttributes<HTMLTableColElement>;
+ colgroup: HTMLAttributes<HTMLTableColElement>;
+ data: HTMLAttributes<HTMLDataElement>;
+ datalist: HTMLAttributes<HTMLDataListElement>;
+ dd: HTMLAttributes<HTMLElement>;
+ del: HTMLAttributes<HTMLModElement>;
+ details: HTMLAttributes<HTMLDetailsElement>;
+ dfn: HTMLAttributes<HTMLElement>;
+ dialog: HTMLAttributes<HTMLDialogElement>;
+ div: HTMLAttributes<HTMLDivElement>;
+ dl: HTMLAttributes<HTMLDListElement>;
+ dt: HTMLAttributes<HTMLElement>;
+ em: HTMLAttributes<HTMLElement>;
+ embed: HTMLAttributes<HTMLEmbedElement>;
+ fieldset: HTMLAttributes<HTMLFieldSetElement>;
+ figcaption: HTMLAttributes<HTMLElement>;
+ figure: HTMLAttributes<HTMLElement>;
+ footer: HTMLAttributes<HTMLElement>;
+ form: HTMLAttributes<HTMLFormElement>;
+ h1: HTMLAttributes<HTMLHeadingElement>;
+ h2: HTMLAttributes<HTMLHeadingElement>;
+ h3: HTMLAttributes<HTMLHeadingElement>;
+ h4: HTMLAttributes<HTMLHeadingElement>;
+ h5: HTMLAttributes<HTMLHeadingElement>;
+ h6: HTMLAttributes<HTMLHeadingElement>;
+ head: HTMLAttributes<HTMLHeadElement>;
+ header: HTMLAttributes<HTMLElement>;
+ hgroup: HTMLAttributes<HTMLElement>;
+ hr: HTMLAttributes<HTMLHRElement>;
+ html: HTMLAttributes<HTMLHtmlElement>;
+ i: HTMLAttributes<HTMLElement>;
+ iframe: HTMLAttributes<HTMLIFrameElement>;
+ img: HTMLAttributes<HTMLImageElement>;
+ input: HTMLAttributes<HTMLInputElement>;
+ ins: HTMLAttributes<HTMLModElement>;
+ kbd: HTMLAttributes<HTMLElement>;
+ keygen: HTMLAttributes<HTMLUnknownElement>;
+ label: HTMLAttributes<HTMLLabelElement>;
+ legend: HTMLAttributes<HTMLLegendElement>;
+ li: HTMLAttributes<HTMLLIElement>;
+ link: HTMLAttributes<HTMLLinkElement>;
+ main: HTMLAttributes<HTMLElement>;
+ map: HTMLAttributes<HTMLMapElement>;
+ mark: HTMLAttributes<HTMLElement>;
+ marquee: HTMLAttributes<HTMLMarqueeElement>;
+ menu: HTMLAttributes<HTMLMenuElement>;
+ menuitem: HTMLAttributes<HTMLUnknownElement>;
+ meta: HTMLAttributes<HTMLMetaElement>;
+ meter: HTMLAttributes<HTMLMeterElement>;
+ nav: HTMLAttributes<HTMLElement>;
+ noscript: HTMLAttributes<HTMLElement>;
+ object: HTMLAttributes<HTMLObjectElement>;
+ ol: HTMLAttributes<HTMLOListElement>;
+ optgroup: HTMLAttributes<HTMLOptGroupElement>;
+ option: HTMLAttributes<HTMLOptionElement>;
+ output: HTMLAttributes<HTMLOutputElement>;
+ p: HTMLAttributes<HTMLParagraphElement>;
+ param: HTMLAttributes<HTMLParamElement>;
+ picture: HTMLAttributes<HTMLPictureElement>;
+ pre: HTMLAttributes<HTMLPreElement>;
+ progress: HTMLAttributes<HTMLProgressElement>;
+ q: HTMLAttributes<HTMLQuoteElement>;
+ rp: HTMLAttributes<HTMLElement>;
+ rt: HTMLAttributes<HTMLElement>;
+ ruby: HTMLAttributes<HTMLElement>;
+ s: HTMLAttributes<HTMLElement>;
+ samp: HTMLAttributes<HTMLElement>;
+ script: HTMLAttributes<HTMLScriptElement>;
+ section: HTMLAttributes<HTMLElement>;
+ select: HTMLAttributes<HTMLSelectElement>;
+ slot: HTMLAttributes<HTMLSlotElement>;
+ small: HTMLAttributes<HTMLElement>;
+ source: HTMLAttributes<HTMLSourceElement>;
+ span: HTMLAttributes<HTMLSpanElement>;
+ strong: HTMLAttributes<HTMLElement>;
+ style: HTMLAttributes<HTMLStyleElement>;
+ sub: HTMLAttributes<HTMLElement>;
+ summary: HTMLAttributes<HTMLElement>;
+ sup: HTMLAttributes<HTMLElement>;
+ table: HTMLAttributes<HTMLTableElement>;
+ tbody: HTMLAttributes<HTMLTableSectionElement>;
+ td: HTMLAttributes<HTMLTableCellElement>;
+ textarea: HTMLAttributes<HTMLTextAreaElement>;
+ tfoot: HTMLAttributes<HTMLTableSectionElement>;
+ th: HTMLAttributes<HTMLTableCellElement>;
+ thead: HTMLAttributes<HTMLTableSectionElement>;
+ time: HTMLAttributes<HTMLTimeElement>;
+ title: HTMLAttributes<HTMLTitleElement>;
+ tr: HTMLAttributes<HTMLTableRowElement>;
+ track: HTMLAttributes<HTMLTrackElement>;
+ u: HTMLAttributes<HTMLElement>;
+ ul: HTMLAttributes<HTMLUListElement>;
+ var: HTMLAttributes<HTMLElement>;
+ video: HTMLAttributes<HTMLVideoElement>;
+ wbr: HTMLAttributes<HTMLElement>;
+
+ //SVG
+ svg: SVGAttributes<SVGSVGElement>;
+ animate: SVGAttributes<SVGAnimateElement>;
+ circle: SVGAttributes<SVGCircleElement>;
+ animateTransform: SVGAttributes<SVGAnimateElement>;
+ clipPath: SVGAttributes<SVGClipPathElement>;
+ defs: SVGAttributes<SVGDefsElement>;
+ desc: SVGAttributes<SVGDescElement>;
+ ellipse: SVGAttributes<SVGEllipseElement>;
+ feBlend: SVGAttributes<SVGFEBlendElement>;
+ feColorMatrix: SVGAttributes<SVGFEColorMatrixElement>;
+ feComponentTransfer: SVGAttributes<SVGFEComponentTransferElement>;
+ feComposite: SVGAttributes<SVGFECompositeElement>;
+ feConvolveMatrix: SVGAttributes<SVGFEConvolveMatrixElement>;
+ feDiffuseLighting: SVGAttributes<SVGFEDiffuseLightingElement>;
+ feDisplacementMap: SVGAttributes<SVGFEDisplacementMapElement>;
+ feDropShadow: SVGAttributes<SVGFEDropShadowElement>;
+ feFlood: SVGAttributes<SVGFEFloodElement>;
+ feFuncA: SVGAttributes<SVGFEFuncAElement>;
+ feFuncB: SVGAttributes<SVGFEFuncBElement>;
+ feFuncG: SVGAttributes<SVGFEFuncGElement>;
+ feFuncR: SVGAttributes<SVGFEFuncRElement>;
+ feGaussianBlur: SVGAttributes<SVGFEGaussianBlurElement>;
+ feImage: SVGAttributes<SVGFEImageElement>;
+ feMerge: SVGAttributes<SVGFEMergeElement>;
+ feMergeNode: SVGAttributes<SVGFEMergeNodeElement>;
+ feMorphology: SVGAttributes<SVGFEMorphologyElement>;
+ feOffset: SVGAttributes<SVGFEOffsetElement>;
+ feSpecularLighting: SVGAttributes<SVGFESpecularLightingElement>;
+ feTile: SVGAttributes<SVGFETileElement>;
+ feTurbulence: SVGAttributes<SVGFETurbulenceElement>;
+ filter: SVGAttributes<SVGFilterElement>;
+ foreignObject: SVGAttributes<SVGForeignObjectElement>;
+ g: SVGAttributes<SVGGElement>;
+ image: SVGAttributes<SVGImageElement>;
+ line: SVGAttributes<SVGLineElement>;
+ linearGradient: SVGAttributes<SVGLinearGradientElement>;
+ marker: SVGAttributes<SVGMarkerElement>;
+ mask: SVGAttributes<SVGMaskElement>;
+ path: SVGAttributes<SVGPathElement>;
+ pattern: SVGAttributes<SVGPatternElement>;
+ polygon: SVGAttributes<SVGPolygonElement>;
+ polyline: SVGAttributes<SVGPolylineElement>;
+ radialGradient: SVGAttributes<SVGRadialGradientElement>;
+ rect: SVGAttributes<SVGRectElement>;
+ stop: SVGAttributes<SVGStopElement>;
+ symbol: SVGAttributes<SVGSymbolElement>;
+ text: SVGAttributes<SVGTextElement>;
+ tspan: SVGAttributes<SVGTSpanElement>;
+ use: SVGAttributes<SVGUseElement>;
+ }
+}
diff --git a/preact/src/options.js b/preact/src/options.js
new file mode 100644
index 0000000..174f322
--- /dev/null
+++ b/preact/src/options.js
@@ -0,0 +1,16 @@
+import { _catchError } from './diff/catch-error';
+
+/**
+ * The `option` object can potentially contain callback functions
+ * that are called during various stages of our renderer. This is the
+ * foundation on which all our addons like `preact/debug`, `preact/compat`,
+ * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`
+ * for a full list of available option hooks (most editors/IDEs allow you to
+ * ctrl+click or cmd+click on mac the type definition below).
+ * @type {import('./internal').Options}
+ */
+const options = {
+ _catchError
+};
+
+export default options;
diff --git a/preact/src/render.js b/preact/src/render.js
new file mode 100644
index 0000000..c8ef828
--- /dev/null
+++ b/preact/src/render.js
@@ -0,0 +1,75 @@
+import { EMPTY_OBJ } from './constants';
+import { commitRoot, diff } from './diff/index';
+import { createElement, Fragment } from './create-element';
+import options from './options';
+import { slice } from './util';
+
+/**
+ * Render a Preact virtual node into a DOM element
+ * @param {import('./internal').ComponentChild} vnode The virtual node to render
+ * @param {import('./internal').PreactElement} parentDom The DOM element to
+ * render into
+ * @param {import('./internal').PreactElement | object} [replaceNode] Optional: Attempt to re-use an
+ * existing DOM tree rooted at `replaceNode`
+ */
+export function render(vnode, parentDom, replaceNode) {
+ if (options._root) options._root(vnode, parentDom);
+
+ // We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in
+ // hydration mode or not by passing the `hydrate` function instead of a DOM
+ // element..
+ let isHydrating = typeof replaceNode === 'function';
+
+ // To be able to support calling `render()` multiple times on the same
+ // DOM node, we need to obtain a reference to the previous tree. We do
+ // this by assigning a new `_children` property to DOM nodes which points
+ // to the last rendered tree. By default this property is not present, which
+ // means that we are mounting a new tree for the first time.
+ let oldVNode = isHydrating
+ ? null
+ : (replaceNode && replaceNode._children) || parentDom._children;
+
+ vnode = (
+ (!isHydrating && replaceNode) ||
+ parentDom
+ )._children = createElement(Fragment, null, [vnode]);
+
+ // List of effects that need to be called after diffing.
+ let commitQueue = [];
+ diff(
+ parentDom,
+ // Determine the new vnode tree and store it on the DOM element on
+ // our custom `_children` property.
+ vnode,
+ oldVNode || EMPTY_OBJ,
+ EMPTY_OBJ,
+ parentDom.ownerSVGElement !== undefined,
+ !isHydrating && replaceNode
+ ? [replaceNode]
+ : oldVNode
+ ? null
+ : parentDom.firstChild
+ ? slice.call(parentDom.childNodes)
+ : null,
+ commitQueue,
+ !isHydrating && replaceNode
+ ? replaceNode
+ : oldVNode
+ ? oldVNode._dom
+ : parentDom.firstChild,
+ isHydrating
+ );
+
+ // Flush all queued effects
+ commitRoot(commitQueue, vnode);
+}
+
+/**
+ * Update an existing DOM element with data from a Preact virtual node
+ * @param {import('./internal').ComponentChild} vnode The virtual node to render
+ * @param {import('./internal').PreactElement} parentDom The DOM element to
+ * update
+ */
+export function hydrate(vnode, parentDom) {
+ render(vnode, parentDom, hydrate);
+}
diff --git a/preact/src/util.js b/preact/src/util.js
new file mode 100644
index 0000000..0e9b3b1
--- /dev/null
+++ b/preact/src/util.js
@@ -0,0 +1,27 @@
+import { EMPTY_ARR } from './constants';
+
+/**
+ * Assign properties from `props` to `obj`
+ * @template O, P The obj and props types
+ * @param {O} obj The object to copy properties to
+ * @param {P} props The object to copy properties from
+ * @returns {O & P}
+ */
+export function assign(obj, props) {
+ // @ts-ignore We change the type of `obj` to be `O & P`
+ for (let i in props) obj[i] = props[i];
+ return /** @type {O & P} */ (obj);
+}
+
+/**
+ * Remove a child node from its parent if attached. This is a workaround for
+ * IE11 which doesn't support `Element.prototype.remove()`. Using this function
+ * is smaller than including a dedicated polyfill.
+ * @param {Node} node The node to remove
+ */
+export function removeNode(node) {
+ let parentNode = node.parentNode;
+ if (parentNode) parentNode.removeChild(node);
+}
+
+export const slice = EMPTY_ARR.slice;
diff --git a/preact/test-utils/package.json b/preact/test-utils/package.json
new file mode 100644
index 0000000..b7da0b7
--- /dev/null
+++ b/preact/test-utils/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "test-utils",
+ "amdName": "preactTestUtils",
+ "version": "0.1.0",
+ "private": true,
+ "description": "Test-utils for Preact",
+ "main": "dist/testUtils.js",
+ "module": "dist/testUtils.module.js",
+ "umd:main": "dist/testUtils.umd.js",
+ "source": "src/index.js",
+ "license": "MIT",
+ "types": "src/index.d.ts",
+ "peerDependencies": {
+ "preact": "^10.0.0"
+ },
+ "mangle": {
+ "regex": "^_"
+ }
+}
diff --git a/preact/test-utils/src/index.d.ts b/preact/test-utils/src/index.d.ts
new file mode 100644
index 0000000..d786e73
--- /dev/null
+++ b/preact/test-utils/src/index.d.ts
@@ -0,0 +1,3 @@
+export function setupRerender(): () => void;
+export function act(callback: () => void | Promise<void>): Promise<void>;
+export function teardown(): void;
diff --git a/preact/test-utils/src/index.js b/preact/test-utils/src/index.js
new file mode 100644
index 0000000..0883d7e
--- /dev/null
+++ b/preact/test-utils/src/index.js
@@ -0,0 +1,117 @@
+import { options } from 'preact';
+
+/**
+ * Setup a rerender function that will drain the queue of pending renders
+ * @returns {() => void}
+ */
+export function setupRerender() {
+ options.__test__previousDebounce = options.debounceRendering;
+ options.debounceRendering = cb => (options.__test__drainQueue = cb);
+ return () => options.__test__drainQueue && options.__test__drainQueue();
+}
+
+const isThenable = value => value != null && typeof value.then == 'function';
+
+/** Depth of nested calls to `act`. */
+let actDepth = 0;
+
+/**
+ * Run a test function, and flush all effects and rerenders after invoking it.
+ *
+ * Returns a Promise which resolves "immediately" if the callback is
+ * synchronous or when the callback's result resolves if it is asynchronous.
+ *
+ * @param {() => void|Promise<void>} cb The function under test. This may be sync or async.
+ * @return {Promise<void>}
+ */
+export function act(cb) {
+ if (++actDepth > 1) {
+ // If calls to `act` are nested, a flush happens only when the
+ // outermost call returns. In the inner call, we just execute the
+ // callback and return since the infrastructure for flushing has already
+ // been set up.
+ //
+ // If an exception occurs, the outermost `act` will handle cleanup.
+ const result = cb();
+ if (isThenable(result)) {
+ return result.then(() => {
+ --actDepth;
+ });
+ }
+ --actDepth;
+ return Promise.resolve();
+ }
+
+ const previousRequestAnimationFrame = options.requestAnimationFrame;
+ const rerender = setupRerender();
+
+ /** @type {() => void} */
+ let flush, toFlush;
+
+ // Override requestAnimationFrame so we can flush pending hooks.
+ options.requestAnimationFrame = fc => (flush = fc);
+
+ const finish = () => {
+ try {
+ rerender();
+ while (flush) {
+ toFlush = flush;
+ flush = null;
+
+ toFlush();
+ rerender();
+ }
+ teardown();
+ } catch (e) {
+ if (!err) {
+ err = e;
+ }
+ }
+
+ options.requestAnimationFrame = previousRequestAnimationFrame;
+ --actDepth;
+ };
+
+ let err;
+ let result;
+
+ try {
+ result = cb();
+ } catch (e) {
+ err = e;
+ }
+
+ if (isThenable(result)) {
+ return result.then(finish, err => {
+ finish();
+ throw err;
+ });
+ }
+
+ // nb. If the callback is synchronous, effects must be flushed before
+ // `act` returns, so that the caller does not have to await the result,
+ // even though React recommends this.
+ finish();
+ if (err) {
+ throw err;
+ }
+ return Promise.resolve();
+}
+
+/**
+ * Teardown test environment and reset preact's internal state
+ */
+export function teardown() {
+ if (options.__test__drainQueue) {
+ // Flush any pending updates leftover by test
+ options.__test__drainQueue();
+ delete options.__test__drainQueue;
+ }
+
+ if (typeof options.__test__previousDebounce != 'undefined') {
+ options.debounceRendering = options.__test__previousDebounce;
+ delete options.__test__previousDebounce;
+ } else {
+ options.debounceRendering = undefined;
+ }
+}
diff --git a/preact/test-utils/test/shared/act.test.js b/preact/test-utils/test/shared/act.test.js
new file mode 100644
index 0000000..7769b5b
--- /dev/null
+++ b/preact/test-utils/test/shared/act.test.js
@@ -0,0 +1,479 @@
+import { options, createElement, render } from 'preact';
+import { useEffect, useReducer, useState } from 'preact/hooks';
+import { act } from 'preact/test-utils';
+import { setupScratch, teardown } from '../../../test/_util/helpers';
+
+/** @jsx createElement */
+
+// IE11 doesn't support `new Event()`
+function createEvent(name) {
+ if (typeof Event == 'function') return new Event(name);
+
+ const event = document.createEvent('Event');
+ event.initEvent(name, true, true);
+ return event;
+}
+
+describe('act', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ options.debounceRendering = undefined;
+ });
+
+ it('should reset options after act finishes', () => {
+ expect(options.requestAnimationFrame).to.equal(undefined);
+ act(() => null);
+ expect(options.requestAnimationFrame).to.equal(undefined);
+ });
+
+ it('should flush pending effects', () => {
+ let spy = sinon.spy();
+ function StateContainer() {
+ useEffect(spy);
+ return <div />;
+ }
+ act(() => render(<StateContainer />, scratch));
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should flush pending and initial effects', () => {
+ const spy = sinon.spy();
+ function StateContainer() {
+ const [count, setCount] = useState(0);
+ useEffect(() => spy(), [count]);
+ return (
+ <div>
+ <p>Count: {count}</p>
+ <button onClick={() => setCount(c => c + 11)} />
+ </div>
+ );
+ }
+
+ act(() => render(<StateContainer />, scratch));
+ expect(spy).to.be.calledOnce;
+ expect(scratch.textContent).to.include('Count: 0');
+ act(() => {
+ const button = scratch.querySelector('button');
+ button.click();
+ expect(spy).to.be.calledOnce;
+ expect(scratch.textContent).to.include('Count: 0');
+ });
+ expect(spy).to.be.calledTwice;
+ expect(scratch.textContent).to.include('Count: 1');
+ });
+
+ it('should flush series of hooks', () => {
+ const spy = sinon.spy();
+ const spy2 = sinon.spy();
+ function StateContainer() {
+ const [count, setCount] = useState(0);
+ useEffect(() => {
+ spy();
+ if (count === 1) {
+ setCount(() => 2);
+ }
+ }, [count]);
+ useEffect(() => {
+ if (count === 2) {
+ spy2();
+ setCount(() => 4);
+ return () => setCount(() => 3);
+ }
+ }, [count]);
+ return (
+ <div>
+ <p>Count: {count}</p>
+ <button onClick={() => setCount(c => c + 1)} />
+ </div>
+ );
+ }
+ act(() => render(<StateContainer />, scratch));
+ expect(spy).to.be.calledOnce;
+ expect(scratch.textContent).to.include('Count: 0');
+ act(() => {
+ const button = scratch.querySelector('button');
+ button.click();
+ });
+ expect(spy.callCount).to.equal(5);
+ expect(spy2).to.be.calledOnce;
+ expect(scratch.textContent).to.include('Count: 3');
+ });
+
+ it('should drain the queue of hooks', () => {
+ const spy = sinon.spy();
+ function StateContainer() {
+ const [count, setCount] = useState(0);
+ useEffect(() => spy());
+ return (
+ <div>
+ <p>Count: {count}</p>
+ <button onClick={() => setCount(c => c + 11)} />
+ </div>
+ );
+ }
+
+ render(<StateContainer />, scratch);
+ expect(scratch.textContent).to.include('Count: 0');
+ act(() => {
+ const button = scratch.querySelector('button');
+ button.click();
+ expect(scratch.textContent).to.include('Count: 0');
+ });
+ expect(scratch.textContent).to.include('Count: 1');
+ });
+
+ it('should restore options.requestAnimationFrame', () => {
+ const spy = sinon.spy();
+
+ options.requestAnimationFrame = spy;
+ act(() => null);
+
+ expect(options.requestAnimationFrame).to.equal(spy);
+ expect(spy).to.not.be.called;
+ });
+
+ it('should restore options.debounceRendering', () => {
+ const spy = sinon.spy();
+
+ options.debounceRendering = spy;
+ act(() => null);
+
+ expect(options.debounceRendering).to.equal(spy);
+ expect(spy).to.not.be.called;
+ });
+
+ it('should restore options.debounceRendering when it was undefined before', () => {
+ act(() => null);
+ expect(options.debounceRendering).to.equal(undefined);
+ });
+
+ it('should flush state updates if there are pending state updates before `act` call', () => {
+ function CounterButton() {
+ const [count, setCount] = useState(0);
+ const increment = () => setCount(count => count + 1);
+ return <button onClick={increment}>{count}</button>;
+ }
+
+ render(<CounterButton />, scratch);
+ const button = scratch.querySelector('button');
+
+ // Click button. This will schedule an update which is deferred, as is
+ // normal for Preact, since it happens outside an `act` call.
+ button.dispatchEvent(createEvent('click'));
+
+ expect(button.textContent).to.equal('0');
+
+ act(() => {
+ // Click button a second time. This will schedule a second update.
+ button.dispatchEvent(createEvent('click'));
+ });
+ // All state updates should be applied synchronously after the `act`
+ // callback has run but before `act` returns.
+ expect(button.textContent).to.equal('2');
+ });
+
+ it('should flush effects if there are pending effects before `act` call', () => {
+ function Counter() {
+ const [count, setCount] = useState(0);
+ useEffect(() => {
+ setCount(count => count + 1);
+ }, []);
+ return <div>{count}</div>;
+ }
+
+ // Render a component which schedules an effect outside of an `act`
+ // call. This will be scheduled to execute after the next paint as usual.
+ render(<Counter />, scratch);
+ expect(scratch.firstChild.textContent).to.equal('0');
+
+ // Render a component inside an `act` call, this effect should be
+ // executed synchronously before `act` returns.
+ act(() => {
+ render(<div />, scratch);
+ render(<Counter />, scratch);
+ });
+ expect(scratch.firstChild.textContent).to.equal('1');
+ });
+
+ it('returns a Promise if invoked with a sync callback', () => {
+ const result = act(() => {});
+ expect(result.then).to.be.a('function');
+ return result;
+ });
+
+ it('returns a Promise if invoked with an async callback', () => {
+ const result = act(async () => {});
+ expect(result.then).to.be.a('function');
+ return result;
+ });
+
+ it('should await "thenable" result of callback before flushing', async () => {
+ const events = [];
+
+ function TestComponent() {
+ useEffect(() => {
+ events.push('flushed effect');
+ }, []);
+ events.push('scheduled effect');
+ return <div>Test</div>;
+ }
+
+ const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
+
+ events.push('began test');
+ const acted = act(async () => {
+ events.push('began act callback');
+ await delay(1);
+ render(<TestComponent />, scratch);
+ events.push('end act callback');
+ });
+ events.push('act returned');
+ await acted;
+ events.push('act result resolved');
+
+ expect(events).to.deep.equal([
+ 'began test',
+ 'began act callback',
+ 'act returned',
+ 'scheduled effect',
+ 'end act callback',
+ 'flushed effect',
+ 'act result resolved'
+ ]);
+ });
+
+ context('when `act` calls are nested', () => {
+ it('should invoke nested sync callback and return a Promise', () => {
+ let innerResult;
+ const spy = sinon.stub();
+
+ act(() => {
+ innerResult = act(spy);
+ });
+
+ expect(spy).to.be.calledOnce;
+ expect(innerResult.then).to.be.a('function');
+ });
+
+ it('should invoke nested async callback and return a Promise', async () => {
+ const events = [];
+
+ await act(async () => {
+ events.push('began outer act callback');
+ await act(async () => {
+ events.push('began inner act callback');
+ await Promise.resolve();
+ events.push('end inner act callback');
+ });
+ events.push('end outer act callback');
+ });
+ events.push('act finished');
+
+ expect(events).to.deep.equal([
+ 'began outer act callback',
+ 'began inner act callback',
+ 'end inner act callback',
+ 'end outer act callback',
+ 'act finished'
+ ]);
+ });
+
+ it('should only flush effects when outer `act` call returns', () => {
+ let counter = 0;
+
+ function Widget() {
+ useEffect(() => {
+ ++counter;
+ });
+ const [, forceUpdate] = useReducer(x => x + 1, 0);
+ return <button onClick={forceUpdate}>test</button>;
+ }
+
+ act(() => {
+ render(<Widget />, scratch);
+ const button = scratch.querySelector('button');
+ expect(counter).to.equal(0);
+
+ act(() => {
+ button.dispatchEvent(createEvent('click'));
+ });
+
+ // Effect triggered by inner `act` call should not have been
+ // flushed yet.
+ expect(counter).to.equal(0);
+ });
+
+ // Effects triggered by inner `act` call should now have been
+ // flushed.
+ expect(counter).to.equal(2);
+ });
+
+ it('should only flush updates when outer `act` call returns', () => {
+ function Button() {
+ const [count, setCount] = useState(0);
+ const increment = () => setCount(count => count + 1);
+ return <button onClick={increment}>{count}</button>;
+ }
+
+ render(<Button />, scratch);
+ const button = scratch.querySelector('button');
+ expect(button.textContent).to.equal('0');
+
+ act(() => {
+ act(() => {
+ button.dispatchEvent(createEvent('click'));
+ });
+
+ // Update triggered by inner `act` call should not have been
+ // flushed yet.
+ expect(button.textContent).to.equal('0');
+ });
+
+ // Updates from outer and inner `act` calls should now have been
+ // flushed.
+ expect(button.textContent).to.equal('1');
+ });
+ });
+
+ describe('when `act` callback throws an exception', () => {
+ function BrokenWidget() {
+ throw new Error('BrokenWidget is broken');
+ }
+
+ let effectCount;
+
+ function WorkingWidget() {
+ const [count, setCount] = useState(0);
+
+ useEffect(() => {
+ ++effectCount;
+ }, []);
+
+ if (count === 0) {
+ setCount(1);
+ }
+
+ return <div>{count}</div>;
+ }
+
+ beforeEach(() => {
+ effectCount = 0;
+ });
+
+ const renderBroken = () => {
+ act(() => {
+ render(<BrokenWidget />, scratch);
+ });
+ };
+
+ const renderWorking = () => {
+ act(() => {
+ render(<WorkingWidget />, scratch);
+ });
+ };
+
+ const tryRenderBroken = () => {
+ try {
+ renderBroken();
+ } catch (e) {}
+ };
+
+ describe('synchronously', () => {
+ it('should rethrow the exception', () => {
+ expect(renderBroken).to.throw('BrokenWidget is broken');
+ });
+
+ it('should not affect state updates in future renders', () => {
+ tryRenderBroken();
+ renderWorking();
+ expect(scratch.textContent).to.equal('1');
+ });
+
+ it('should not affect effects in future renders', () => {
+ tryRenderBroken();
+ renderWorking();
+ expect(effectCount).to.equal(1);
+ });
+ });
+
+ describe('asynchronously', () => {
+ const renderBrokenAsync = async () => {
+ await act(async () => {
+ render(<BrokenWidget />, scratch);
+ });
+ };
+
+ it('should rethrow the exception', async () => {
+ let err;
+ try {
+ await renderBrokenAsync();
+ } catch (e) {
+ err = e;
+ }
+ expect(err.message).to.equal('BrokenWidget is broken');
+ });
+
+ it('should not affect state updates in future renders', async () => {
+ try {
+ await renderBrokenAsync();
+ } catch (e) {}
+
+ renderWorking();
+ expect(scratch.textContent).to.equal('1');
+ });
+
+ it('should not affect effects in future renders', async () => {
+ try {
+ await renderBrokenAsync();
+ } catch (e) {}
+
+ renderWorking();
+ expect(effectCount).to.equal(1);
+ });
+ });
+
+ describe('in an effect', () => {
+ function BrokenEffect() {
+ useEffect(() => {
+ throw new Error('BrokenEffect effect');
+ }, []);
+ return null;
+ }
+
+ const renderBrokenEffect = () => {
+ act(() => {
+ render(<BrokenEffect />, scratch);
+ });
+ };
+
+ it('should rethrow the exception', () => {
+ expect(renderBrokenEffect).to.throw('BrokenEffect effect');
+ });
+
+ it('should not affect state updates in future renders', () => {
+ try {
+ renderBrokenEffect();
+ } catch (e) {}
+
+ renderWorking();
+ expect(scratch.textContent).to.equal('1');
+ });
+
+ it('should not affect effects in future renders', () => {
+ try {
+ renderBrokenEffect();
+ } catch (e) {}
+
+ renderWorking();
+ expect(effectCount).to.equal(1);
+ });
+ });
+ });
+});
diff --git a/preact/test-utils/test/shared/rerender.test.js b/preact/test-utils/test/shared/rerender.test.js
new file mode 100644
index 0000000..a2e4335
--- /dev/null
+++ b/preact/test-utils/test/shared/rerender.test.js
@@ -0,0 +1,59 @@
+import { options, createElement, render, Component } from 'preact';
+import { teardown, setupRerender } from 'preact/test-utils';
+
+/** @jsx createElement */
+
+describe('setupRerender & teardown', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = document.createElement('div');
+ });
+
+ it('should restore previous debounce', () => {
+ let spy = (options.debounceRendering = sinon.spy());
+
+ setupRerender();
+ teardown();
+
+ expect(options.debounceRendering).to.equal(spy);
+ });
+
+ it('teardown should flush the queue', () => {
+ /** @type {() => void} */
+ let increment;
+ class Counter extends Component {
+ constructor(props) {
+ super(props);
+
+ this.state = { count: 0 };
+ increment = () => this.setState({ count: this.state.count + 1 });
+ }
+
+ render() {
+ return <div>{this.state.count}</div>;
+ }
+ }
+
+ sinon.spy(Counter.prototype, 'render');
+
+ // Setup rerender
+ setupRerender();
+
+ // Initial render
+ render(<Counter />, scratch);
+ expect(Counter.prototype.render).to.have.been.calledOnce;
+ expect(scratch.innerHTML).to.equal('<div>0</div>');
+
+ // queue rerender
+ increment();
+ expect(Counter.prototype.render).to.have.been.calledOnce;
+ expect(scratch.innerHTML).to.equal('<div>0</div>');
+
+ // Pretend test forgot to call rerender. Teardown should do that
+ teardown();
+ expect(Counter.prototype.render).to.have.been.calledTwice;
+ expect(scratch.innerHTML).to.equal('<div>1</div>');
+ });
+});
diff --git a/preact/test/TODO.md b/preact/test/TODO.md
new file mode 100644
index 0000000..b7b1aab
--- /dev/null
+++ b/preact/test/TODO.md
@@ -0,0 +1,13 @@
+# Tests skipped to get CI to pass
+
+- Fragment
+ - ✖ should not preserve state between array nested in fragment and double nested array
+ - ✖ should preserve state between double nested fragment and double nested array
+- hydrate
+ - ✖ should override incorrect pre-existing DOM with VNodes passed into render
+
+Also:
+
+- Extend Fragment preserving state tests to track unmounting lifecycle callbacks to verify
+ components are properly unmounted. I think all 'should not preserve' tests are the ones
+ that will have unmount operations.
diff --git a/preact/test/_util/bench.js b/preact/test/_util/bench.js
new file mode 100644
index 0000000..5085daa
--- /dev/null
+++ b/preact/test/_util/bench.js
@@ -0,0 +1,46 @@
+global._ = require('lodash');
+const Benchmark = (global.Benchmark = require('benchmark'));
+
+export default function bench(benches, callback) {
+ return new Promise(resolve => {
+ const suite = new Benchmark.Suite();
+
+ let i = 0;
+ Object.keys(benches).forEach(name => {
+ let run = benches[name];
+ suite.add(name, () => {
+ run(++i);
+ });
+ });
+
+ suite.on('complete', () => {
+ const result = {
+ fastest: suite.filter('fastest')[0],
+ results: [],
+ text: ''
+ };
+ const useKilo = suite.filter(b => b.hz < 10000).length === 0;
+ suite.forEach((bench, index) => {
+ let r = {
+ name: bench.name,
+ slowdown:
+ bench.name === result.fastest.name
+ ? 0
+ : (((result.fastest.hz - bench.hz) / result.fastest.hz) * 100) |
+ 0,
+ hz: bench.hz.toFixed(bench.hz < 100 ? 2 : 0),
+ rme: bench.stats.rme.toFixed(2),
+ size: bench.stats.sample.length,
+ error: bench.error ? String(bench.error) : undefined
+ };
+ result.text += `\n ${r.name}: ${
+ useKilo ? `${(r.hz / 1000) | 0} kHz` : `${r.hz} Hz`
+ }${r.slowdown ? ` (-${r.slowdown}%)` : ''}`;
+ result.results[index] = result.results[r.name] = r;
+ });
+ resolve(result);
+ if (callback) callback(result);
+ });
+ suite.run({ async: true });
+ });
+}
diff --git a/preact/test/_util/dom.js b/preact/test/_util/dom.js
new file mode 100644
index 0000000..b24bd3e
--- /dev/null
+++ b/preact/test/_util/dom.js
@@ -0,0 +1,66 @@
+/**
+ * Serialize contents
+ * @typedef {string | number | Array<string | number>} Contents
+ * @param {Contents} contents
+ */
+const serialize = contents =>
+ Array.isArray(contents) ? contents.join('') : contents.toString();
+
+/**
+ * A helper to generate innerHTML validation strings containing spans
+ * @param {Contents} contents The contents of the span, as a string
+ */
+export const span = contents => `<span>${serialize(contents)}</span>`;
+
+/**
+ * A helper to generate innerHTML validation strings containing divs
+ * @param {Contents} contents The contents of the div, as a string
+ */
+export const div = contents => `<div>${serialize(contents)}</div>`;
+
+/**
+ * A helper to generate innerHTML validation strings containing p
+ * @param {Contents} contents The contents of the p, as a string
+ */
+export const p = contents => `<p>${serialize(contents)}</p>`;
+
+/**
+ * A helper to generate innerHTML validation strings containing sections
+ * @param {Contents} contents The contents of the section, as a string
+ */
+export const section = contents => `<section>${serialize(contents)}</section>`;
+
+/**
+ * A helper to generate innerHTML validation strings containing uls
+ * @param {Contents} contents The contents of the ul, as a string
+ */
+export const ul = contents => `<ul>${serialize(contents)}</ul>`;
+
+/**
+ * A helper to generate innerHTML validation strings containing ols
+ * @param {Contents} contents The contents of the ol, as a string
+ */
+export const ol = contents => `<ol>${serialize(contents)}</ol>`;
+
+/**
+ * A helper to generate innerHTML validation strings containing lis
+ * @param {Contents} contents The contents of the li, as a string
+ */
+export const li = contents => `<li>${serialize(contents)}</li>`;
+
+/**
+ * A helper to generate innerHTML validation strings containing inputs
+ */
+export const input = () => `<input type="text">`;
+
+/**
+ * A helper to generate innerHTML validation strings containing h1
+ * @param {Contents} contents The contents of the h1
+ */
+export const h1 = contents => `<h1>${serialize(contents)}</h1>`;
+
+/**
+ * A helper to generate innerHTML validation strings containing h2
+ * @param {Contents} contents The contents of the h2
+ */
+export const h2 = contents => `<h2>${serialize(contents)}</h2>`;
diff --git a/preact/test/_util/helpers.js b/preact/test/_util/helpers.js
new file mode 100644
index 0000000..8f0cf02
--- /dev/null
+++ b/preact/test/_util/helpers.js
@@ -0,0 +1,292 @@
+import { createElement, options } from 'preact';
+import { clearLog, getLog } from './logCall';
+import { teardown as testUtilTeardown } from 'preact/test-utils';
+
+/** @jsx createElement */
+
+/**
+ * Assign properties from `props` to `obj`
+ * @template O, P The obj and props types
+ * @param {O} obj The object to copy properties to
+ * @param {P} props The object to copy properties from
+ * @returns {O & P}
+ */
+function assign(obj, props) {
+ for (let i in props) obj[i] = props[i];
+ return /** @type {O & P} */ (obj);
+}
+
+export function supportsPassiveEvents() {
+ let supported = false;
+ try {
+ let options = {
+ get passive() {
+ supported = true;
+ return undefined;
+ }
+ };
+
+ window.addEventListener('test', options, options);
+ window.removeEventListener('test', options, options);
+ } catch (err) {
+ supported = false;
+ }
+ return supported;
+}
+
+export function supportsDataList() {
+ return (
+ 'list' in document.createElement('input') &&
+ Boolean(
+ document.createElement('datalist') && 'HTMLDataListElement' in window
+ )
+ );
+}
+
+const VOID_ELEMENTS = /^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/;
+
+function encodeEntities(str) {
+ return str.replace(/&/g, '&amp;');
+}
+
+/**
+ * Normalize svg paths spacing. Some browsers insert spaces around letters,
+ * others do not.
+ * @param {string} str
+ * @returns {string}
+ */
+function normalizePath(str) {
+ let len = str.length;
+ let out = '';
+ for (let i = 0; i < len; i++) {
+ const char = str[i];
+ if (/[A-Za-z]/.test(char)) {
+ if (i == 0) out += char + ' ';
+ else
+ out += (str[i - 1] == ' ' ? '' : ' ') + char + (i < len - 1 ? ' ' : '');
+ } else if (char == '-' && str[i - 1] !== ' ') out += ' ' + char;
+ else out += char;
+ }
+
+ return out.replace(/\s\s+/g, ' ').replace(/z/g, 'Z');
+}
+
+export function serializeHtml(node) {
+ let str = '';
+ let child = node.firstChild;
+ while (child) {
+ str += serializeDomTree(child);
+ child = child.nextSibling;
+ }
+ return str;
+}
+
+/**
+ * Serialize a DOM tree.
+ * Uses deterministic sorting where necessary to ensure consistent tests.
+ * @param {Element|Node} node The root node to serialize
+ * @returns {string} html
+ */
+function serializeDomTree(node) {
+ if (node.nodeType === 3) {
+ return encodeEntities(node.data);
+ } else if (node.nodeType === 8) {
+ return '<!--' + encodeEntities(node.data) + '-->';
+ } else if (node.nodeType === 1 || node.nodeType === 9) {
+ let str = '<' + node.localName;
+ const attrs = [];
+ for (let i = 0; i < node.attributes.length; i++) {
+ attrs.push(node.attributes[i].name);
+ }
+ attrs.sort();
+ for (let i = 0; i < attrs.length; i++) {
+ const name = attrs[i];
+ let value = node.getAttribute(name);
+
+ // don't render attributes with null or undefined values
+ if (value == null) continue;
+
+ // normalize empty class attribute
+ if (!value && name === 'class') continue;
+
+ str += ' ' + name;
+ value = encodeEntities(value);
+
+ // normalize svg <path d="value">
+ if (node.localName === 'path' && name === 'd') {
+ value = normalizePath(value);
+ }
+ str += '="' + value + '"';
+ }
+ str += '>';
+
+ // For elements that don't have children (e.g. <wbr />) don't descend.
+ if (!VOID_ELEMENTS.test(node.localName)) {
+ // IE puts the value of a textarea as its children while other browsers don't.
+ // Normalize those differences by forcing textarea to not have children.
+ if (node.localName != 'textarea') {
+ let child = node.firstChild;
+ while (child) {
+ str += serializeDomTree(child);
+ child = child.nextSibling;
+ }
+ }
+
+ str += '</' + node.localName + '>';
+ }
+ return str;
+ }
+}
+
+/**
+ * Normalize event creation in browsers
+ * @param {string} name
+ * @returns {Event}
+ */
+export function createEvent(name) {
+ // Modern browsers
+ if (typeof Event == 'function') {
+ return new Event(name);
+ }
+
+ // IE 11...
+ let event = document.createEvent('Event');
+ event.initEvent(name, true, true);
+ return event;
+}
+
+/**
+ * Sort a cssText alphabetically.
+ * @param {string} cssText
+ */
+export function sortCss(cssText) {
+ return (
+ cssText
+ .split(';')
+ .filter(Boolean)
+ .map(s => s.replace(/^\s+|\s+$/g, '').replace(/(\s*:\s*)/g, ': '))
+ .sort((a, b) => {
+ // CSS Variables are typically positioned at the start
+ if (a[0] === '-') {
+ // If both are a variable we just compare them
+ if (b[0] === '-') return a.localeCompare(b);
+ return -1;
+ }
+ // b is a css var
+ if (b[0] === '-') return 1;
+
+ return a.localeCompare(b);
+ })
+ .join('; ') + ';'
+ );
+}
+
+/**
+ * Setup the test environment
+ * @returns {HTMLDivElement}
+ */
+export function setupScratch() {
+ const scratch = document.createElement('div');
+ scratch.id = 'scratch';
+ (document.body || document.documentElement).appendChild(scratch);
+ return scratch;
+}
+
+let oldOptions = null;
+export function clearOptions() {
+ oldOptions = assign({}, options);
+ delete options.vnode;
+ delete options.diffed;
+ delete options.unmount;
+ delete options._diff;
+}
+
+/**
+ * Teardown test environment and reset preact's internal state
+ * @param {HTMLDivElement} scratch
+ */
+export function teardown(scratch) {
+ if (scratch) {
+ scratch.parentNode.removeChild(scratch);
+ }
+
+ if (oldOptions != null) {
+ assign(options, oldOptions);
+ oldOptions = null;
+ }
+
+ testUtilTeardown();
+
+ if (getLog().length > 0) {
+ clearLog();
+ }
+
+ restoreElementAttributes();
+}
+
+const Foo = () => 'd';
+export const getMixedArray = () =>
+ // Make it a function so each test gets a new copy of the array
+ [0, 'a', 'b', <span>c</span>, <Foo />, null, undefined, false, ['e', 'f'], 1];
+export const mixedArrayHTML = '0ab<span>c</span>def1';
+
+/**
+ * Reset obj to empty to keep reference
+ * @param {object} obj
+ */
+export function clear(obj) {
+ Object.keys(obj).forEach(key => delete obj[key]);
+}
+
+/**
+ * Hacky normalization of attribute order across browsers.
+ * @param {string} html
+ */
+export function sortAttributes(html) {
+ return html.replace(
+ /<([a-z0-9-]+)((?:\s[a-z0-9:_.-]+=".*?")+)((?:\s*\/)?>)/gi,
+ (s, pre, attrs, after) => {
+ let list = attrs
+ .match(/\s[a-z0-9:_.-]+=".*?"/gi)
+ .sort((a, b) => (a > b ? 1 : -1));
+ if (~after.indexOf('/')) after = '></' + pre + '>';
+ return '<' + pre + list.join('') + after;
+ }
+ );
+}
+
+let attributesSpy, originalAttributesPropDescriptor;
+
+export function spyOnElementAttributes() {
+ const test = Object.getOwnPropertyDescriptor(Element.prototype, 'attributes');
+
+ // IE11 doesn't correctly restore the prototype methods so we have to check
+ // whether this prototype method is already a sinon spy.
+ if (!attributesSpy && !(test && test.get && test.get.isSinonProxy)) {
+ if (!originalAttributesPropDescriptor) {
+ originalAttributesPropDescriptor = Object.getOwnPropertyDescriptor(
+ Element.prototype,
+ 'attributes'
+ );
+ }
+
+ attributesSpy = sinon.spy(Element.prototype, 'attributes', ['get']);
+ } else if (test && test.get && test.get.isSinonProxy) {
+ // Due to IE11 not resetting we will do this manually when it is a proxy.
+ test.get.resetHistory();
+ }
+
+ return attributesSpy || test;
+}
+
+function restoreElementAttributes() {
+ if (originalAttributesPropDescriptor) {
+ // Workaround bug in Sinon where getter/setter spies don't get auto-restored
+ Object.defineProperty(
+ Element.prototype,
+ 'attributes',
+ originalAttributesPropDescriptor
+ );
+ attributesSpy = null;
+ }
+}
diff --git a/preact/test/_util/logCall.js b/preact/test/_util/logCall.js
new file mode 100644
index 0000000..0eff282
--- /dev/null
+++ b/preact/test/_util/logCall.js
@@ -0,0 +1,66 @@
+/**
+ * Serialize an object
+ * @param {Object} obj
+ * @return {string}
+ */
+function serialize(obj) {
+ if (obj instanceof Text) return '#text';
+ if (obj instanceof Element) return `<${obj.localName}>${obj.textContent}`;
+ if (obj === document) return 'document';
+ if (typeof obj == 'string') return obj;
+ return Object.prototype.toString.call(obj).replace(/(^\[object |\]$)/g, '');
+}
+
+/** @type {string[]} */
+let log = [];
+
+/**
+ * Modify obj's original method to log calls and arguments on logger object
+ * @template T
+ * @param {T} obj
+ * @param {keyof T} method
+ */
+export function logCall(obj, method) {
+ let old = obj[method];
+ obj[method] = function(...args) {
+ let c = '';
+ for (let i = 0; i < args.length; i++) {
+ if (c) c += ', ';
+ c += serialize(args[i]);
+ }
+
+ // Normalize removeChild -> remove to keep output clean and readable
+ const operation =
+ method != 'removeChild'
+ ? `${serialize(this)}.${method}(${c})`
+ : `${serialize(c)}.remove()`;
+ log.push(operation);
+ return old.apply(this, args);
+ };
+
+ return () => (obj[method] = old);
+}
+
+/**
+ * Return log object
+ * @return {string[]} log
+ */
+export function getLog() {
+ return log;
+}
+
+/** Clear log object */
+export function clearLog() {
+ log = [];
+}
+
+export function getLogSummary() {
+ /** @type {{ [key: string]: number }} */
+ const summary = {};
+
+ for (let entry of log) {
+ summary[entry] = (summary[entry] || 0) + 1;
+ }
+
+ return summary;
+}
diff --git a/preact/test/_util/optionSpies.js b/preact/test/_util/optionSpies.js
new file mode 100644
index 0000000..de32c52
--- /dev/null
+++ b/preact/test/_util/optionSpies.js
@@ -0,0 +1,39 @@
+import { options as rawOptions } from 'preact';
+
+/** @type {import('preact/src/internal').Options} */
+let options = rawOptions;
+
+let oldVNode = options.vnode;
+let oldEvent = options.event || (e => e);
+let oldAfterDiff = options.diffed;
+let oldUnmount = options.unmount;
+
+let oldRoot = options._root;
+let oldBeforeDiff = options._diff;
+let oldBeforeRender = options._render;
+let oldBeforeCommit = options._commit;
+let oldHook = options._hook;
+let oldCatchError = options._catchError;
+
+export const vnodeSpy = sinon.spy(oldVNode);
+export const eventSpy = sinon.spy(oldEvent);
+export const afterDiffSpy = sinon.spy(oldAfterDiff);
+export const unmountSpy = sinon.spy(oldUnmount);
+
+export const rootSpy = sinon.spy(oldRoot);
+export const beforeDiffSpy = sinon.spy(oldBeforeDiff);
+export const beforeRenderSpy = sinon.spy(oldBeforeRender);
+export const beforeCommitSpy = sinon.spy(oldBeforeCommit);
+export const hookSpy = sinon.spy(oldHook);
+export const catchErrorSpy = sinon.spy(oldCatchError);
+
+options.vnode = vnodeSpy;
+options.event = eventSpy;
+options.diffed = afterDiffSpy;
+options.unmount = unmountSpy;
+options._root = rootSpy;
+options._diff = beforeDiffSpy;
+options._render = beforeRenderSpy;
+options._commit = beforeCommitSpy;
+options._hook = hookSpy;
+options._catchError = catchErrorSpy;
diff --git a/preact/test/benchmarks/performance.test.js b/preact/test/benchmarks/performance.test.js
new file mode 100644
index 0000000..8729878
--- /dev/null
+++ b/preact/test/benchmarks/performance.test.js
@@ -0,0 +1,470 @@
+/*global COVERAGE, ENABLE_PERFORMANCE*/
+/*eslint no-console:0*/
+/** @jsx createElement */
+import { setupScratch, teardown } from '../_util/helpers';
+import {
+ createElement,
+ Component,
+ render,
+ hydrate
+} from 'preact/dist/preact.module';
+
+const MULTIPLIER = ENABLE_PERFORMANCE ? (COVERAGE ? 5 : 1) : 999999;
+
+// let now = typeof performance!=='undefined' && performance.now ? () => performance.now() : () => +new Date();
+if (typeof performance == 'undefined') {
+ window.performance = { now: () => +new Date() };
+}
+
+function loop(iter, time) {
+ let start = performance.now(),
+ count = 0;
+ while (performance.now() - start < time) {
+ count++;
+ iter();
+ }
+ return count;
+}
+
+function benchmark(iter, callback) {
+ let a = 0; // eslint-disable-line no-unused-vars
+ function noop() {
+ try {
+ a++;
+ } finally {
+ a += Math.random();
+ }
+ }
+
+ // warm
+ for (let i = 100; i--; ) noop(), iter();
+
+ let count = 4,
+ time = 500,
+ passes = 0,
+ noops = loop(noop, time),
+ iterations = 0;
+
+ function next() {
+ iterations += loop(iter, time);
+ setTimeout(++passes === count ? done : next, 10);
+ }
+
+ function done() {
+ let ticks = Math.round((noops / iterations) * count),
+ hz = (iterations / count / time) * 1000,
+ message = `${hz | 0}/s (${ticks} ticks)`;
+ callback({ iterations, noops, count, time, ticks, hz, message });
+ }
+
+ next();
+}
+
+describe('performance', function() {
+ let scratch;
+
+ this.timeout(10000);
+
+ before(function() {
+ if (!ENABLE_PERFORMANCE) this.skip();
+ if (COVERAGE) {
+ console.warn(
+ 'WARNING: Code coverage is enabled, which dramatically reduces performance. Do not pay attention to these numbers.'
+ );
+ }
+ });
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should rerender without changes fast', done => {
+ let jsx = (
+ <div class="foo bar" data-foo="bar" p={2}>
+ <header>
+ <h1 class="asdf">
+ a {'b'} c {0} d
+ </h1>
+ <nav>
+ <a href="/foo">Foo</a>
+ <a href="/bar">Bar</a>
+ </nav>
+ </header>
+ <main>
+ <form onSubmit={() => {}}>
+ <input type="checkbox" checked />
+ <input type="checkbox" checked={false} />
+ <fieldset>
+ <label>
+ <input type="radio" checked />
+ </label>
+ <label>
+ <input type="radio" />
+ </label>
+ </fieldset>
+ <button-bar>
+ <button style="width:10px; height:10px; border:1px solid #FFF;">
+ Normal CSS
+ </button>
+ <button style="top:0 ; right: 20">Poor CSS</button>
+ <button
+ style="invalid-prop:1;padding:1px;font:12px/1.1 arial,sans-serif;"
+ icon
+ >
+ Poorer CSS
+ </button>
+ <button
+ style={{ margin: 0, padding: '10px', overflow: 'visible' }}
+ >
+ Object CSS
+ </button>
+ </button-bar>
+ </form>
+ </main>
+ </div>
+ );
+
+ benchmark(
+ () => {
+ render(jsx, scratch);
+ },
+ ({ ticks, message }) => {
+ console.log(`PERF: empty diff: ${message}`);
+ expect(ticks).to.be.below(150 * MULTIPLIER);
+ done();
+ }
+ );
+ });
+
+ it('should rerender repeated trees fast', done => {
+ class Header extends Component {
+ render() {
+ return (
+ <header>
+ <h1 class="asdf">
+ a {'b'} c {0} d
+ </h1>
+ <nav>
+ <a href="/foo">Foo</a>
+ <a href="/bar">Bar</a>
+ </nav>
+ </header>
+ );
+ }
+ }
+ class Form extends Component {
+ render() {
+ return (
+ <form onSubmit={() => {}}>
+ <input type="checkbox" checked />
+ <input type="checkbox" checked={false} />
+ <fieldset>
+ <label>
+ <input type="radio" checked />
+ </label>
+ <label>
+ <input type="radio" />
+ </label>
+ </fieldset>
+ <ButtonBar />
+ </form>
+ );
+ }
+ }
+ class ButtonBar extends Component {
+ render() {
+ return (
+ <button-bar>
+ <Button style="width:10px; height:10px; border:1px solid #FFF;">
+ Normal CSS
+ </Button>
+ <Button style="top:0 ; right: 20">Poor CSS</Button>
+ <Button
+ style="invalid-prop:1;padding:1px;font:12px/1.1 arial,sans-serif;"
+ icon
+ >
+ Poorer CSS
+ </Button>
+ <Button style={{ margin: 0, padding: '10px', overflow: 'visible' }}>
+ Object CSS
+ </Button>
+ </button-bar>
+ );
+ }
+ }
+ class Button extends Component {
+ render(props) {
+ return <button {...props} />;
+ }
+ }
+ class Main extends Component {
+ render() {
+ return <Form />;
+ }
+ }
+ class Root extends Component {
+ render() {
+ return (
+ <div class="foo bar" data-foo="bar" p={2}>
+ <Header />
+ <Main />
+ </div>
+ );
+ }
+ }
+ class Empty extends Component {
+ render() {
+ return <div />;
+ }
+ }
+ class Parent extends Component {
+ render({ child: C }) {
+ return <C />;
+ }
+ }
+
+ benchmark(
+ () => {
+ render(<Parent child={Root} />, scratch);
+ render(<Parent child={Empty} />, scratch);
+ },
+ ({ ticks, message }) => {
+ console.log(`PERF: repeat diff: ${message}`);
+ expect(ticks).to.be.below(3000 * MULTIPLIER);
+ done();
+ }
+ );
+ });
+
+ it('should construct large VDOM trees fast', done => {
+ const FIELDS = [];
+ for (let i = 100; i--; ) FIELDS.push((i * 999).toString(36));
+
+ let out = [];
+ function digest(vnode) {
+ out.push(vnode);
+ out.length = 0;
+ }
+ benchmark(
+ () => {
+ digest(
+ <div class="foo bar" data-foo="bar" p={2}>
+ <header>
+ <h1 class="asdf">
+ a {'b'} c {0} d
+ </h1>
+ <nav>
+ <a href="/foo">Foo</a>
+ <a href="/bar">Bar</a>
+ </nav>
+ </header>
+ <main>
+ <form onSubmit={() => {}}>
+ <input type="checkbox" checked />
+ <input type="checkbox" />
+ <fieldset>
+ {FIELDS.map(field => (
+ <label>
+ {field}:
+ <input placeholder={field} />
+ </label>
+ ))}
+ </fieldset>
+ <button-bar>
+ <button style="width:10px; height:10px; border:1px solid #FFF;">
+ Normal CSS
+ </button>
+ <button style="top:0 ; right: 20">Poor CSS</button>
+ <button
+ style="invalid-prop:1;padding:1px;font:12px/1.1 arial,sans-serif;"
+ icon
+ >
+ Poorer CSS
+ </button>
+ <button
+ style={{ margin: 0, padding: '10px', overflow: 'visible' }}
+ >
+ Object CSS
+ </button>
+ </button-bar>
+ </form>
+ </main>
+ </div>
+ );
+ },
+ ({ ticks, message }) => {
+ console.log(`PERF: large VTree: ${message}`);
+ expect(ticks).to.be.below(200 * MULTIPLIER);
+ done();
+ }
+ );
+ });
+
+ it('should mutate styles/properties quickly', done => {
+ let counter = 0;
+ const keyLooper = n => c => (c % n ? `${c}px` : c);
+ const get = (obj, i) => obj[i % obj.length];
+ const CLASSES = ['foo', 'foo bar', '', 'baz-bat', null];
+ const STYLES = [];
+ const MULTIVALUE = [
+ '0 1px',
+ '0 0 1px 0',
+ '0',
+ '1px',
+ '20px 10px',
+ '7em 5px',
+ '1px 0 5em 2px'
+ ];
+ const STYLEKEYS = [
+ ['left', keyLooper(3)],
+ ['top', keyLooper(2)],
+ ['margin', c => get(MULTIVALUE, c).replace('1px', c + 'px')],
+ ['padding', c => get(MULTIVALUE, c)],
+ ['position', c => (c % 5 ? (c % 2 ? 'absolute' : 'relative') : null)],
+ ['display', c => (c % 10 ? (c % 2 ? 'block' : 'inline') : 'none')],
+ [
+ 'color',
+ c =>
+ `rgba(${c % 255}, ${255 - (c % 255)}, ${50 + (c % 150)}, ${(c % 50) /
+ 50})`
+ ],
+ [
+ 'border',
+ c =>
+ c % 5
+ ? `${c % 10}px ${c % 2 ? 'solid' : 'dotted'} ${STYLEKEYS[6][1](c)}`
+ : ''
+ ]
+ ];
+ for (let i = 0; i < 1000; i++) {
+ let style = {};
+ for (let j = 0; j < i % 10; j++) {
+ let conf = get(STYLEKEYS, ++counter);
+ style[conf[0]] = conf[1](counter);
+ }
+ STYLES[i] = style;
+ }
+
+ const app = index => (
+ <div
+ class={get(CLASSES, index)}
+ data-index={index}
+ title={index.toString(36)}
+ >
+ <input type="checkbox" checked={index % 3 == 0} />
+ <input
+ value={`test ${(index / 4) | 0}`}
+ disabled={index % 10 ? null : true}
+ />
+ <div class={get(CLASSES, index * 10)}>
+ <p style={get(STYLES, index)}>p1</p>
+ <p style={get(STYLES, index + 1)}>p2</p>
+ <p style={get(STYLES, index * 2)}>p3</p>
+ <p style={get(STYLES, index * 3 + 1)}>p4</p>
+ </div>
+ </div>
+ );
+
+ let count = 0;
+ benchmark(
+ () => {
+ render(app(++count), scratch);
+ },
+ ({ ticks, message }) => {
+ console.log(`PERF: style/prop mutation: ${message}`);
+ expect(ticks).to.be.below(350 * MULTIPLIER);
+ done();
+ }
+ );
+ });
+
+ it('should hydrate from SSR quickly', done => {
+ class Header extends Component {
+ render() {
+ return (
+ <header>
+ <h1 class="asdf">
+ a {'b'} c {0} d
+ </h1>
+ <nav>
+ <a href="/foo">Foo</a>
+ <a href="/bar">Bar</a>
+ </nav>
+ </header>
+ );
+ }
+ }
+ class Form extends Component {
+ render() {
+ return (
+ <form onSubmit={() => {}}>
+ <input type="checkbox" checked />
+ <input type="checkbox" checked={false} />
+ <fieldset>
+ <label>
+ <input type="radio" checked />
+ </label>
+ <label>
+ <input type="radio" />
+ </label>
+ </fieldset>
+ <ButtonBar />
+ </form>
+ );
+ }
+ }
+ const ButtonBar = () => (
+ <button-bar>
+ <Button style="width:10px; height:10px; border:1px solid #FFF;">
+ Normal CSS
+ </Button>
+ <Button style="top:0 ; right: 20">Poor CSS</Button>
+ <Button
+ style="invalid-prop:1;padding:1px;font:12px/1.1 arial,sans-serif;"
+ icon
+ >
+ Poorer CSS
+ </Button>
+ <Button style={{ margin: 0, padding: '10px', overflow: 'visible' }}>
+ Object CSS
+ </Button>
+ </button-bar>
+ );
+ class Button extends Component {
+ handleClick() {}
+ render(props) {
+ return <button onClick={this.handleClick} {...props} />;
+ }
+ }
+ const Main = () => <Form />;
+ class App extends Component {
+ render() {
+ return (
+ <div class="foo bar" data-foo="bar" p={2}>
+ <Header />
+ <Main />
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ let html = scratch.innerHTML;
+
+ benchmark(
+ () => {
+ scratch.innerHTML = html;
+ hydrate(<App />, scratch);
+ },
+ ({ ticks, message }) => {
+ console.log(`PERF: SSR Hydrate: ${message}`);
+ expect(ticks).to.be.below(3000 * MULTIPLIER);
+ done();
+ }
+ );
+ });
+});
diff --git a/preact/test/benchmarks/text.test.js b/preact/test/benchmarks/text.test.js
new file mode 100644
index 0000000..9106e52
--- /dev/null
+++ b/preact/test/benchmarks/text.test.js
@@ -0,0 +1,101 @@
+/*global COVERAGE, ENABLE_PERFORMANCE */
+/*eslint no-console:0*/
+/** @jsx createElement */
+
+import { setupScratch, teardown } from '../_util/helpers';
+import bench from '../_util/bench';
+import preact8 from '../fixtures/preact';
+import * as preactX from '../../dist/preact.module';
+const MULTIPLIER = ENABLE_PERFORMANCE ? (COVERAGE ? 5 : 1) : 999999;
+
+describe('benchmarks', function() {
+ let scratch;
+
+ this.timeout(100000);
+
+ before(function() {
+ if (!ENABLE_PERFORMANCE) this.skip();
+ if (COVERAGE) {
+ console.warn(
+ 'WARNING: Code coverage is enabled, which dramatically reduces performance. Do not pay attention to these numbers.'
+ );
+ }
+ });
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('in-place text update', done => {
+ function createTest({ createElement, render }) {
+ const parent = document.createElement('div');
+ scratch.appendChild(parent);
+
+ function component(randomValue) {
+ return (
+ <div>
+ <h2>Test {randomValue}</h2>
+ <h1>==={randomValue}===</h1>
+ </div>
+ );
+ }
+
+ return value => {
+ const t = value % 100;
+ render(component(t), parent);
+ };
+ }
+
+ function createVanillaTest() {
+ const parent = document.createElement('div');
+ let div, h1, h2, text1, text2;
+ parent.appendChild((div = document.createElement('div')));
+ div.appendChild((h2 = document.createElement('h2')));
+ h2.appendChild(document.createTextNode('Vanilla '));
+ h2.appendChild((text1 = document.createTextNode('0')));
+ div.appendChild((h1 = document.createElement('h1')));
+ h1.appendChild(document.createTextNode('==='));
+ h1.appendChild((text2 = document.createTextNode('0')));
+ h1.appendChild(document.createTextNode('==='));
+ scratch.appendChild(parent);
+
+ return value => {
+ const t = value % 100;
+ text1.data = '' + t;
+ text2.data = '' + t;
+ };
+ }
+
+ const preact8Test = createTest(preact8);
+ const preactXTest = createTest(preactX);
+ const vanillaTest = createVanillaTest();
+
+ for (let i = 100; i--; ) {
+ preact8Test(i);
+ preactXTest(i);
+ vanillaTest(i);
+ }
+
+ bench(
+ {
+ vanilla: vanillaTest,
+ preact8: preact8Test,
+ preactX: preactXTest
+ },
+ ({ text, results }) => {
+ const THRESHOLD = 10 * MULTIPLIER;
+ // const slowdown = Math.sqrt(results.preactX.hz * results.vanilla.hz);
+ const slowdown = results.vanilla.hz / results.preactX.hz;
+ console.log(
+ `in-place text update is ${slowdown.toFixed(2)}x slower:` + text
+ );
+ expect(slowdown).to.be.below(THRESHOLD);
+ done();
+ }
+ );
+ });
+});
diff --git a/preact/test/browser/cloneElement.test.js b/preact/test/browser/cloneElement.test.js
new file mode 100644
index 0000000..80c44c8
--- /dev/null
+++ b/preact/test/browser/cloneElement.test.js
@@ -0,0 +1,87 @@
+import { createElement, cloneElement, createRef } from 'preact';
+
+/** @jsx createElement */
+
+describe('cloneElement', () => {
+ it('should clone components', () => {
+ function Comp() {}
+ const instance = <Comp prop1={1}>hello</Comp>;
+ const clone = cloneElement(instance);
+
+ expect(clone.prototype).to.equal(instance.prototype);
+ expect(clone.type).to.equal(instance.type);
+ expect(clone.props).not.to.equal(instance.props); // Should be a different object...
+ expect(clone.props).to.deep.equal(instance.props); // with the same properties
+ });
+
+ it('should merge new props', () => {
+ function Foo() {}
+ const instance = <Foo prop1={1} prop2={2} />;
+ const clone = cloneElement(instance, { prop1: -1, newProp: -2 });
+
+ expect(clone.prototype).to.equal(instance.prototype);
+ expect(clone.type).to.equal(instance.type);
+ expect(clone.props).not.to.equal(instance.props);
+ expect(clone.props.prop1).to.equal(-1);
+ expect(clone.props.prop2).to.equal(2);
+ expect(clone.props.newProp).to.equal(-2);
+ });
+
+ it('should override children if specified', () => {
+ function Foo() {}
+ const instance = <Foo>hello</Foo>;
+ const clone = cloneElement(instance, null, 'world', '!');
+
+ expect(clone.prototype).to.equal(instance.prototype);
+ expect(clone.type).to.equal(instance.type);
+ expect(clone.props).not.to.equal(instance.props);
+ expect(clone.props.children).to.deep.equal(['world', '!']);
+ });
+
+ it('should override children if null is provided as an argument', () => {
+ function Foo() {}
+ const instance = <Foo>foo</Foo>;
+ const clone = cloneElement(instance, { children: 'bar' }, null);
+
+ expect(clone.prototype).to.equal(instance.prototype);
+ expect(clone.type).to.equal(instance.type);
+ expect(clone.props).not.to.equal(instance.props);
+ expect(clone.props.children).to.be.null;
+ });
+
+ it('should override key if specified', () => {
+ function Foo() {}
+ const instance = <Foo key="1">hello</Foo>;
+
+ let clone = cloneElement(instance);
+ expect(clone.key).to.equal('1');
+
+ clone = cloneElement(instance, { key: '2' });
+ expect(clone.key).to.equal('2');
+ });
+
+ it('should override ref if specified', () => {
+ function a() {}
+ function b() {}
+ function Foo() {}
+ const instance = <Foo ref={a}>hello</Foo>;
+
+ let clone = cloneElement(instance);
+ expect(clone.ref).to.equal(a);
+
+ clone = cloneElement(instance, { ref: b });
+ expect(clone.ref).to.equal(b);
+ });
+
+ it('should normalize props (ref)', () => {
+ const div = <div>hello</div>;
+ const clone = cloneElement(div, { ref: createRef() });
+ expect(clone.props.ref).to.equal(undefined);
+ });
+
+ it('should normalize props (key)', () => {
+ const div = <div>hello</div>;
+ const clone = cloneElement(div, { key: 'myKey' });
+ expect(clone.props.key).to.equal(undefined);
+ });
+});
diff --git a/preact/test/browser/components.test.js b/preact/test/browser/components.test.js
new file mode 100644
index 0000000..405d608
--- /dev/null
+++ b/preact/test/browser/components.test.js
@@ -0,0 +1,2664 @@
+import { createElement, render, Component, Fragment } from 'preact';
+import { setupRerender } from 'preact/test-utils';
+import {
+ setupScratch,
+ teardown,
+ getMixedArray,
+ mixedArrayHTML,
+ serializeHtml,
+ sortAttributes
+} from '../_util/helpers';
+import { div, span, p } from '../_util/dom';
+
+/** @jsx createElement */
+const h = createElement;
+
+function getAttributes(node) {
+ let attrs = {};
+ if (node.attributes) {
+ for (let i = node.attributes.length; i--; ) {
+ attrs[node.attributes[i].name] = node.attributes[i].value;
+ }
+ }
+ return attrs;
+}
+
+describe('Components', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('Component construction', () => {
+ /** @type {object} */
+ let instance;
+ let PROPS;
+ let STATE;
+
+ beforeEach(() => {
+ instance = null;
+ PROPS = { foo: 'bar', onBaz: () => {} };
+ STATE = { text: 'Hello' };
+ });
+
+ it('should render components', () => {
+ class C1 extends Component {
+ render() {
+ return <div>C1</div>;
+ }
+ }
+ sinon.spy(C1.prototype, 'render');
+ render(<C1 />, scratch);
+
+ expect(C1.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch({}, {})
+ .and.to.have.returned(sinon.match({ type: 'div' }));
+
+ expect(scratch.innerHTML).to.equal('<div>C1</div>');
+ });
+
+ it('should render functional components', () => {
+ const C3 = sinon.spy(props => <div {...props} />);
+
+ render(<C3 {...PROPS} />, scratch);
+
+ expect(C3)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(PROPS)
+ .and.to.have.returned(
+ sinon.match({
+ type: 'div',
+ props: PROPS
+ })
+ );
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar"></div>');
+ });
+
+ it('should render components with props', () => {
+ let constructorProps;
+
+ class C2 extends Component {
+ constructor(props) {
+ super(props);
+ constructorProps = props;
+ }
+ render(props) {
+ return <div {...props} />;
+ }
+ }
+ sinon.spy(C2.prototype, 'render');
+
+ render(<C2 {...PROPS} />, scratch);
+
+ expect(constructorProps).to.deep.equal(PROPS);
+
+ expect(C2.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(PROPS, {})
+ .and.to.have.returned(
+ sinon.match({
+ type: 'div',
+ props: PROPS
+ })
+ );
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar"></div>');
+ });
+
+ it('should not crash when setting state in constructor', () => {
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ // the following line made `this._nextState !== this.state` be truthy prior to the fix for preactjs/preact#2638
+ this.state = {};
+ this.setState({ preact: 'awesome' });
+ }
+ }
+
+ expect(() => render(<Foo foo="bar" />, scratch)).not.to.throw();
+ rerender();
+ });
+
+ it('should not crash when setting state with cb in constructor', () => {
+ let spy = sinon.spy();
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.setState({ preact: 'awesome' }, spy);
+ }
+ }
+
+ expect(() => render(<Foo foo="bar" />, scratch)).not.to.throw();
+ rerender();
+ expect(spy).to.not.be.called;
+ });
+
+ it('should not crash when calling forceUpdate with cb in constructor', () => {
+ let spy = sinon.spy();
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.forceUpdate(spy);
+ }
+ }
+
+ expect(() => render(<Foo foo="bar" />, scratch)).not.to.throw();
+ rerender();
+ expect(spy).to.not.be.called;
+ });
+
+ it('should accurately call nested setState callbacks', () => {
+ let states = [];
+ let finalState;
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { a: 'b' };
+ }
+
+ componentDidMount() {
+ states.push(this.state);
+ expect(scratch.innerHTML).to.equal('<p>b</p>');
+
+ // eslint-disable-next-line
+ this.setState({ a: 'a' }, () => {
+ states.push(this.state);
+ expect(scratch.innerHTML).to.equal('<p>a</p>');
+
+ this.setState({ a: 'c' }, () => {
+ expect(scratch.innerHTML).to.equal('<p>c</p>');
+ states.push(this.state);
+ });
+ });
+ }
+
+ render() {
+ finalState = this.state;
+ return <p>{this.state.a}</p>;
+ }
+ }
+
+ render(<Foo />, scratch);
+ rerender(); // First setState
+ rerender(); // Second setState
+
+ let [firstState, secondState, thirdState] = states;
+ expect(finalState).to.deep.equal({ a: 'c' });
+ expect(firstState).to.deep.equal({ a: 'b' });
+ expect(secondState).to.deep.equal({ a: 'a' });
+ expect(thirdState).to.deep.equal({ a: 'c' });
+ });
+
+ it('should initialize props & context but not state in Component constructor', () => {
+ // Not initializing state matches React behavior: https://codesandbox.io/s/rml19v8o2q
+ class Foo extends Component {
+ constructor(props, context) {
+ super(props, context);
+ expect(this.props).to.equal(props);
+ expect(this.state).to.deep.equal(undefined);
+ expect(this.context).to.equal(context);
+
+ instance = this;
+ }
+ render(props) {
+ return <div {...props}>Hello</div>;
+ }
+ }
+
+ sinon.spy(Foo.prototype, 'render');
+
+ render(<Foo {...PROPS} />, scratch);
+
+ expect(Foo.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(PROPS, {}, {})
+ .and.to.have.returned(sinon.match({ type: 'div', props: PROPS }));
+ expect(instance.props).to.deep.equal(PROPS);
+ expect(instance.state).to.deep.equal({});
+ expect(instance.context).to.deep.equal({});
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar">Hello</div>');
+ });
+
+ it("should render Component classes that don't pass args into the Component constructor", () => {
+ function Foo() {
+ Component.call(this);
+ instance = this;
+ this.state = STATE;
+ }
+ Foo.prototype.render = sinon.spy((props, state) => (
+ <div {...props}>{state.text}</div>
+ ));
+
+ render(<Foo {...PROPS} />, scratch);
+
+ expect(Foo.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(
+ PROPS,
+ STATE,
+ {}
+ )
+ .and.to.have.returned(sinon.match({ type: 'div', props: PROPS }));
+ expect(instance.props).to.deep.equal(PROPS);
+ expect(instance.state).to.deep.equal(STATE);
+ expect(instance.context).to.deep.equal({});
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar">Hello</div>');
+ });
+
+ it('should also update the current dom', () => {
+ let trigger;
+
+ class A extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: false };
+ trigger = this.set = this.set.bind(this);
+ }
+
+ set() {
+ this.setState({ show: true });
+ }
+
+ render() {
+ return this.state.show ? <div>A</div> : null;
+ }
+ }
+
+ const B = () => <p>B</p>;
+
+ render(
+ <div>
+ <A />
+ <B />
+ </div>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal('<div><p>B</p></div>');
+
+ trigger();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><div>A</div><p>B</p></div>');
+ });
+
+ it('should not orphan children', () => {
+ let triggerC, triggerA;
+ const B = () => <p>B</p>;
+
+ // Component with state which swaps its returned element type
+ class C extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: false };
+ triggerC = this.set = this.set.bind(this);
+ }
+
+ set() {
+ this.setState({ show: true });
+ }
+
+ render() {
+ return this.state.show ? <div>data</div> : <p>Loading</p>;
+ }
+ }
+
+ const WrapC = () => <C />;
+
+ class A extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: false };
+ triggerA = this.set = this.set.bind(this);
+ }
+
+ set() {
+ this.setState({ show: true });
+ }
+
+ render() {
+ return this.state.show ? <B /> : <WrapC />;
+ }
+ }
+
+ render(<A />, scratch);
+ expect(scratch.innerHTML).to.equal('<p>Loading</p>');
+
+ triggerC();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>data</div>');
+
+ triggerA();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<p>B</p>');
+ });
+
+ it("should render components that don't pass args into the Component constructor (unistore pattern)", () => {
+ // Pattern unistore uses for connect: https://git.io/fxRqu
+ function Wrapper() {
+ instance = this;
+ this.state = STATE;
+ this.render = sinon.spy((props, state) => (
+ <div {...props}>{state.text}</div>
+ ));
+ }
+ (Wrapper.prototype = new Component()).constructor = Wrapper;
+
+ render(<Wrapper {...PROPS} />, scratch);
+
+ expect(instance.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(
+ PROPS,
+ STATE,
+ {}
+ )
+ .and.to.have.returned(sinon.match({ type: 'div', props: PROPS }));
+ expect(instance.props).to.deep.equal(PROPS);
+ expect(instance.state).to.deep.equal(STATE);
+ expect(instance.context).to.deep.equal({});
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar">Hello</div>');
+ });
+
+ it("should render components that don't call Component constructor", () => {
+ function Foo() {
+ instance = this;
+ this.state = STATE;
+ }
+ Foo.prototype = Object.create(Component);
+ Foo.prototype.render = sinon.spy((props, state) => (
+ <div {...props}>{state.text}</div>
+ ));
+
+ render(<Foo {...PROPS} />, scratch);
+
+ expect(Foo.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(
+ PROPS,
+ STATE,
+ {}
+ )
+ .and.to.have.returned(sinon.match({ type: 'div', props: PROPS }));
+ expect(instance.props).to.deep.equal(PROPS);
+ expect(instance.state).to.deep.equal(STATE);
+ expect(instance.context).to.deep.equal({});
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar">Hello</div>');
+ });
+
+ it("should render components that don't call Component constructor and don't initialize state", () => {
+ function Foo() {
+ instance = this;
+ }
+ Foo.prototype.render = sinon.spy(props => <div {...props}>Hello</div>);
+
+ render(<Foo {...PROPS} />, scratch);
+
+ expect(Foo.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(PROPS, {}, {})
+ .and.to.have.returned(sinon.match({ type: 'div', props: PROPS }));
+ expect(instance.props).to.deep.equal(PROPS);
+ expect(instance.state).to.deep.equal({});
+ expect(instance.context).to.deep.equal({});
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar">Hello</div>');
+ });
+
+ it("should render components that don't inherit from Component", () => {
+ class Foo {
+ constructor() {
+ instance = this;
+ this.state = STATE;
+ }
+ render(props, state) {
+ return <div {...props}>{state.text}</div>;
+ }
+ }
+ sinon.spy(Foo.prototype, 'render');
+
+ render(<Foo {...PROPS} />, scratch);
+
+ expect(Foo.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(
+ PROPS,
+ STATE,
+ {}
+ )
+ .and.to.have.returned(sinon.match({ type: 'div', props: PROPS }));
+ expect(instance.props).to.deep.equal(PROPS);
+ expect(instance.state).to.deep.equal(STATE);
+ expect(instance.context).to.deep.equal({});
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar">Hello</div>');
+ });
+
+ it("should render components that don't inherit from Component (unistore pattern)", () => {
+ // Pattern unistore uses for Provider: https://git.io/fxRqR
+ function Provider() {
+ instance = this;
+ this.state = STATE;
+ }
+ Provider.prototype.render = sinon.spy((props, state) => (
+ <div {...PROPS}>{state.text}</div>
+ ));
+
+ render(<Provider {...PROPS} />, scratch);
+
+ expect(Provider.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(
+ PROPS,
+ STATE,
+ {}
+ )
+ .and.to.have.returned(sinon.match({ type: 'div', props: PROPS }));
+ expect(instance.props).to.deep.equal(PROPS);
+ expect(instance.state).to.deep.equal(STATE);
+ expect(instance.context).to.deep.equal({});
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar">Hello</div>');
+ });
+
+ it("should render components that don't inherit from Component and don't initialize state", () => {
+ class Foo {
+ constructor() {
+ instance = this;
+ }
+ render(props, state) {
+ return <div {...props}>Hello</div>;
+ }
+ }
+ sinon.spy(Foo.prototype, 'render');
+
+ render(<Foo {...PROPS} />, scratch);
+
+ expect(Foo.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(PROPS, {}, {})
+ .and.to.have.returned(sinon.match({ type: 'div', props: PROPS }));
+ expect(instance.props).to.deep.equal(PROPS);
+ expect(instance.state).to.deep.equal({});
+ expect(instance.context).to.deep.equal({});
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar">Hello</div>');
+ });
+
+ it('should render class components that inherit from Component without a render method', () => {
+ class Foo extends Component {
+ constructor(props, context) {
+ super(props, context);
+ instance = this;
+ }
+ }
+
+ sinon.spy(Foo.prototype, 'render');
+
+ render(<Foo {...PROPS} />, scratch);
+
+ expect(Foo.prototype.render)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(PROPS, {}, {})
+ .and.to.have.returned(undefined);
+ expect(instance.props).to.deep.equal(PROPS);
+ expect(instance.state).to.deep.equal({});
+ expect(instance.context).to.deep.equal({});
+
+ expect(scratch.innerHTML).to.equal('');
+ });
+ });
+
+ it('should render string', () => {
+ class StringComponent extends Component {
+ render() {
+ return 'Hi there';
+ }
+ }
+
+ render(<StringComponent />, scratch);
+ expect(scratch.innerHTML).to.equal('Hi there');
+ });
+
+ it('should render number as string', () => {
+ class NumberComponent extends Component {
+ render() {
+ return 42;
+ }
+ }
+
+ render(<NumberComponent />, scratch);
+ expect(scratch.innerHTML).to.equal('42');
+ });
+
+ it('should render null as empty string', () => {
+ class NullComponent extends Component {
+ render() {
+ return null;
+ }
+ }
+
+ render(<NullComponent />, scratch);
+ expect(scratch.innerHTML).to.equal('');
+ });
+
+ // Test for Issue #73
+ it('should remove orphaned elements replaced by Components', () => {
+ class Comp extends Component {
+ render() {
+ return <span>span in a component</span>;
+ }
+ }
+
+ let root;
+ function test(content) {
+ root = render(content, scratch, root);
+ }
+
+ test(<Comp />);
+ test(<div>just a div</div>);
+ test(<Comp />);
+
+ expect(scratch.innerHTML).to.equal('<span>span in a component</span>');
+ });
+
+ // Test for Issue preactjs/preact#176
+ it('should remove children when root changes to text node', () => {
+ /** @type {import('preact').Component} */
+ let comp;
+
+ class Comp extends Component {
+ constructor() {
+ super();
+ comp = this;
+ }
+ render(_, { alt }) {
+ return alt ? 'asdf' : <div>test</div>;
+ }
+ }
+
+ render(<Comp />, scratch);
+
+ comp.setState({ alt: true });
+ comp.forceUpdate();
+ rerender();
+ expect(scratch.innerHTML, 'switching to textnode').to.equal('asdf');
+
+ comp.setState({ alt: false });
+ comp.forceUpdate();
+ rerender();
+ expect(scratch.innerHTML, 'switching to element').to.equal(
+ '<div>test</div>'
+ );
+
+ comp.setState({ alt: true });
+ comp.forceUpdate();
+ rerender();
+ expect(scratch.innerHTML, 'switching to textnode 2').to.equal('asdf');
+ });
+
+ // Test for Issue preactjs/preact#1616
+ it('should maintain order when setting state (that inserts dom-elements)', () => {
+ let add, addTwice, reset;
+ const Entry = props => <div>{props.children}</div>;
+
+ class App extends Component {
+ constructor(props) {
+ super(props);
+
+ this.state = { values: ['abc'] };
+
+ add = this.add = this.add.bind(this);
+ addTwice = this.addTwice = this.addTwice.bind(this);
+ reset = this.reset = this.reset.bind(this);
+ }
+
+ add() {
+ this.setState({ values: [...this.state.values, 'def'] });
+ }
+
+ addTwice() {
+ this.setState({ values: [...this.state.values, 'def', 'ghi'] });
+ }
+
+ reset() {
+ this.setState({ values: ['abc'] });
+ }
+
+ render() {
+ return (
+ <div>
+ {this.state.values.map(v => (
+ <Entry>{v}</Entry>
+ ))}
+ <button>First Button</button>
+ <button>Second Button</button>
+ <button>Third Button</button>
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.firstChild.innerHTML).to.equal(
+ '<div>abc</div>' +
+ '<button>First Button</button><button>Second Button</button><button>Third Button</button>'
+ );
+
+ add();
+ rerender();
+ expect(scratch.firstChild.innerHTML).to.equal(
+ '<div>abc</div><div>def' +
+ '</div><button>First Button</button><button>Second Button</button><button>Third Button</button>'
+ );
+
+ add();
+ rerender();
+ expect(scratch.firstChild.innerHTML).to.equal(
+ '<div>abc</div><div>def</div><div>def' +
+ '</div><button>First Button</button><button>Second Button</button><button>Third Button</button>'
+ );
+
+ reset();
+ rerender();
+ expect(scratch.firstChild.innerHTML).to.equal(
+ '<div>abc</div>' +
+ '<button>First Button</button><button>Second Button</button><button>Third Button</button>'
+ );
+
+ addTwice();
+ rerender();
+ expect(scratch.firstChild.innerHTML).to.equal(
+ '<div>abc</div><div>def</div><div>ghi' +
+ '</div><button>First Button</button><button>Second Button</button><button>Third Button</button>'
+ );
+ });
+
+ // Test for Issue preactjs/preact#254
+ it('should not recycle common class children with different keys', () => {
+ let idx = 0;
+ let msgs = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];
+ let sideEffect = sinon.spy();
+
+ class Comp extends Component {
+ componentWillMount() {
+ this.innerMsg = msgs[idx++ % 8];
+ sideEffect();
+ }
+ render() {
+ return <div>{this.innerMsg}</div>;
+ }
+ }
+ sinon.spy(Comp.prototype, 'componentWillMount');
+
+ let good, bad;
+ class GoodContainer extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { alt: false };
+ good = this;
+ }
+
+ render(_, { alt }) {
+ return (
+ <div>
+ {alt ? null : <Comp key={1} alt={alt} />}
+ {alt ? null : <Comp key={2} alt={alt} />}
+ {alt ? <Comp key={3} alt={alt} /> : null}
+ </div>
+ );
+ }
+ }
+
+ class BadContainer extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { alt: false };
+ bad = this;
+ }
+
+ render(_, { alt }) {
+ return (
+ <div>
+ {alt ? null : <Comp alt={alt} />}
+ {alt ? null : <Comp alt={alt} />}
+ {alt ? <Comp alt={alt} /> : null}
+ </div>
+ );
+ }
+ }
+
+ render(<GoodContainer />, scratch);
+ expect(scratch.textContent, 'new component with key present').to.equal(
+ 'AB'
+ );
+ expect(Comp.prototype.componentWillMount).to.have.been.calledTwice;
+ expect(sideEffect).to.have.been.calledTwice;
+
+ sideEffect.resetHistory();
+ Comp.prototype.componentWillMount.resetHistory();
+ good.setState({ alt: true });
+ rerender();
+ expect(
+ scratch.textContent,
+ 'new component with key present re-rendered'
+ ).to.equal('C');
+ //we are recycling the first 2 components already rendered, just need a new one
+ expect(Comp.prototype.componentWillMount).to.have.been.calledOnce;
+ expect(sideEffect).to.have.been.calledOnce;
+
+ sideEffect.resetHistory();
+ Comp.prototype.componentWillMount.resetHistory();
+ render(<BadContainer />, scratch);
+ expect(scratch.textContent, 'new component without key').to.equal('DE');
+ expect(Comp.prototype.componentWillMount).to.have.been.calledTwice;
+ expect(sideEffect).to.have.been.calledTwice;
+
+ sideEffect.resetHistory();
+ Comp.prototype.componentWillMount.resetHistory();
+ bad.setState({ alt: true });
+ rerender();
+
+ expect(
+ scratch.textContent,
+ 'use null placeholders to detect new component is appended'
+ ).to.equal('F');
+ expect(Comp.prototype.componentWillMount).to.be.calledOnce;
+ expect(sideEffect).to.be.calledOnce;
+ });
+
+ describe('array children', () => {
+ it("should render DOM element's array children", () => {
+ render(<div>{getMixedArray()}</div>, scratch);
+ expect(scratch.firstChild.innerHTML).to.equal(mixedArrayHTML);
+ });
+
+ it("should render Component's array children", () => {
+ const Foo = () => getMixedArray();
+
+ render(<Foo />, scratch);
+
+ expect(scratch.innerHTML).to.equal(mixedArrayHTML);
+ });
+
+ it("should render Fragment's array children", () => {
+ const Foo = () => <Fragment>{getMixedArray()}</Fragment>;
+
+ render(<Foo />, scratch);
+
+ expect(scratch.innerHTML).to.equal(mixedArrayHTML);
+ });
+
+ it('should render sibling array children', () => {
+ const Todo = () => (
+ <ul>
+ <li>A header</li>
+ {['a', 'b'].map(value => (
+ <li>{value}</li>
+ ))}
+ <li>A divider</li>
+ {['c', 'd'].map(value => (
+ <li>{value}</li>
+ ))}
+ <li>A footer</li>
+ </ul>
+ );
+
+ render(<Todo />, scratch);
+
+ let ul = scratch.firstChild;
+ expect(ul.childNodes.length).to.equal(7);
+ expect(ul.childNodes[0].textContent).to.equal('A header');
+ expect(ul.childNodes[1].textContent).to.equal('a');
+ expect(ul.childNodes[2].textContent).to.equal('b');
+ expect(ul.childNodes[3].textContent).to.equal('A divider');
+ expect(ul.childNodes[4].textContent).to.equal('c');
+ expect(ul.childNodes[5].textContent).to.equal('d');
+ expect(ul.childNodes[6].textContent).to.equal('A footer');
+ });
+ });
+
+ describe('props.children', () => {
+ let children;
+
+ let Foo = props => {
+ children = props.children;
+ return <div>{props.children}</div>;
+ };
+
+ let FunctionFoo = props => {
+ children = props.children;
+ return <div>{props.children(2)}</div>;
+ };
+
+ let Bar = () => <span>Bar</span>;
+
+ beforeEach(() => {
+ children = undefined;
+ });
+
+ it('should support passing children as a prop', () => {
+ const Foo = props => <div {...props} />;
+
+ render(
+ <Foo a="b" children={[<span class="bar">bar</span>, '123', 456]} />,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(
+ '<div a="b"><span class="bar">bar</span>123456</div>'
+ );
+ });
+
+ it('should be ignored when explicit children exist', () => {
+ const Foo = props => <div {...props}>a</div>;
+
+ render(<Foo children={'b'} />, scratch);
+
+ expect(scratch.innerHTML).to.equal('<div>a</div>');
+ });
+
+ it('should be undefined with no child', () => {
+ render(<Foo />, scratch);
+
+ expect(children).to.be.undefined;
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('should be null with null as a child', () => {
+ render(<Foo>{null}</Foo>, scratch);
+
+ expect(children).to.be.null;
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('should be false with false as a child', () => {
+ render(<Foo>{false}</Foo>, scratch);
+
+ expect(children).to.be.false;
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('should be true with true as a child', () => {
+ render(<Foo>{true}</Foo>, scratch);
+
+ expect(children).to.be.true;
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('should be a string with a text child', () => {
+ render(<Foo>text</Foo>, scratch);
+
+ expect(children).to.be.a('string');
+ expect(children).to.equal('text');
+ expect(scratch.innerHTML).to.equal('<div>text</div>');
+ });
+
+ it('should be a string with a number child', () => {
+ render(<Foo>1</Foo>, scratch);
+
+ expect(children).to.be.a('string');
+ expect(children).to.equal('1');
+ expect(scratch.innerHTML).to.equal('<div>1</div>');
+ });
+
+ it('should be a VNode with a DOM node child', () => {
+ render(
+ <Foo>
+ <span />
+ </Foo>,
+ scratch
+ );
+
+ expect(children).to.be.an('object');
+ expect(children.type).to.equal('span');
+ expect(scratch.innerHTML).to.equal('<div><span></span></div>');
+ });
+
+ it('should be a VNode with a Component child', () => {
+ render(
+ <Foo>
+ <Bar />
+ </Foo>,
+ scratch
+ );
+
+ expect(children).to.be.an('object');
+ expect(children.type).to.equal(Bar);
+ expect(scratch.innerHTML).to.equal('<div><span>Bar</span></div>');
+ });
+
+ it('should be a function with a function child', () => {
+ const child = num => num.toFixed(2);
+ render(<FunctionFoo>{child}</FunctionFoo>, scratch);
+
+ expect(children).to.be.an('function');
+ expect(children).to.equal(child);
+ expect(scratch.innerHTML).to.equal('<div>2.00</div>');
+ });
+
+ it('should be an array with multiple children', () => {
+ render(
+ <Foo>
+ 0<span />
+ <input />
+ <div />1
+ </Foo>,
+ scratch
+ );
+
+ expect(children).to.be.an('array');
+ expect(children[0]).to.equal('0');
+ expect(children[1].type).to.equal('span');
+ expect(children[2].type).to.equal('input');
+ expect(children[3].type).to.equal('div');
+ expect(children[4]).to.equal('1');
+ expect(scratch.innerHTML).to.equal(
+ `<div>0<span></span><input><div></div>1</div>`
+ );
+ });
+
+ it('should be an array with an array as children', () => {
+ const mixedArray = getMixedArray();
+ render(<Foo>{mixedArray}</Foo>, scratch);
+
+ expect(children).to.be.an('array');
+ expect(children).to.deep.equal(mixedArray);
+ expect(scratch.innerHTML).to.equal(`<div>${mixedArrayHTML}</div>`);
+ });
+
+ it('should not flatten sibling and nested arrays', () => {
+ const list1 = [0, 1];
+ const list2 = [2, 3];
+ const list3 = [4, 5];
+ const list4 = [6, 7];
+ const list5 = [8, 9];
+
+ render(
+ <Foo>
+ {[list1, list2]}
+ {[list3, list4]}
+ {list5}
+ </Foo>,
+ scratch
+ );
+
+ expect(children).to.be.an('array');
+ expect(children).to.deep.equal([[list1, list2], [list3, list4], list5]);
+ expect(scratch.innerHTML).to.equal('<div>0123456789</div>');
+ });
+ });
+
+ describe('High-Order Components', () => {
+ it('should render wrapper HOCs', () => {
+ const text = "We'll throw some happy little limbs on this tree.";
+
+ function withBobRoss(ChildComponent) {
+ return class BobRossIpsum extends Component {
+ getChildContext() {
+ return { text };
+ }
+
+ render(props) {
+ return <ChildComponent {...props} />;
+ }
+ };
+ }
+
+ const PaintSomething = (props, context) => <div>{context.text}</div>;
+ const Paint = withBobRoss(PaintSomething);
+
+ render(<Paint />, scratch);
+ expect(scratch.innerHTML).to.equal(`<div>${text}</div>`);
+ });
+
+ it('should render HOCs with generic children', () => {
+ const text =
+ "Let your imagination just wonder around when you're doing these things.";
+
+ class BobRossProvider extends Component {
+ getChildContext() {
+ return { text };
+ }
+
+ render(props) {
+ return props.children;
+ }
+ }
+
+ function BobRossConsumer(props, context) {
+ return props.children(context.text);
+ }
+
+ const Say = props => <div>{props.text}</div>;
+
+ const Speak = () => (
+ <BobRossProvider>
+ <span>A span</span>
+ <BobRossConsumer>{text => <Say text={text} />}</BobRossConsumer>
+ <span>A final span</span>
+ </BobRossProvider>
+ );
+
+ render(<Speak />, scratch);
+
+ expect(scratch.innerHTML).to.equal(
+ `<span>A span</span><div>${text}</div><span>A final span</span>`
+ );
+ });
+
+ it('should render nested functional components', () => {
+ const PROPS = { foo: 'bar', onBaz: () => {} };
+
+ const Outer = sinon.spy(props => <Inner {...props} />);
+
+ const Inner = sinon.spy(props => <div {...props}>inner</div>);
+
+ render(<Outer {...PROPS} />, scratch);
+
+ expect(Outer)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(PROPS)
+ .and.to.have.returned(
+ sinon.match({
+ type: Inner,
+ props: PROPS
+ })
+ );
+
+ expect(Inner)
+ .to.have.been.calledOnce.and.to.have.been.calledWithMatch(PROPS)
+ .and.to.have.returned(
+ sinon.match({
+ type: 'div',
+ props: { ...PROPS, children: 'inner' }
+ })
+ );
+
+ expect(scratch.innerHTML).to.equal('<div foo="bar">inner</div>');
+ });
+
+ it('should re-render nested functional components', () => {
+ let doRender = null;
+ class Outer extends Component {
+ componentDidMount() {
+ let i = 1;
+ doRender = () => this.setState({ i: ++i });
+ }
+ componentWillUnmount() {}
+ render(props, { i }) {
+ return <Inner i={i} {...props} />;
+ }
+ }
+ sinon.spy(Outer.prototype, 'render');
+ sinon.spy(Outer.prototype, 'componentWillUnmount');
+
+ let j = 0;
+ const Inner = sinon.spy(props => (
+ <div j={++j} {...props}>
+ inner
+ </div>
+ ));
+
+ render(<Outer foo="bar" />, scratch);
+
+ // update & flush
+ doRender();
+ rerender();
+
+ expect(Outer.prototype.componentWillUnmount).not.to.have.been.called;
+
+ expect(Inner).to.have.been.calledTwice;
+
+ expect(Inner.secondCall)
+ .to.have.been.calledWithMatch({ foo: 'bar', i: 2 })
+ .and.to.have.returned(
+ sinon.match({
+ props: {
+ j: 2,
+ i: 2,
+ foo: 'bar'
+ }
+ })
+ );
+
+ expect(getAttributes(scratch.firstElementChild)).to.eql({
+ j: '2',
+ i: '2',
+ foo: 'bar'
+ });
+
+ // update & flush
+ doRender();
+ rerender();
+
+ expect(Inner).to.have.been.calledThrice;
+
+ expect(Inner.thirdCall)
+ .to.have.been.calledWithMatch({ foo: 'bar', i: 3 })
+ .and.to.have.returned(
+ sinon.match({
+ props: {
+ j: 3,
+ i: 3,
+ foo: 'bar'
+ }
+ })
+ );
+
+ expect(getAttributes(scratch.firstElementChild)).to.eql({
+ j: '3',
+ i: '3',
+ foo: 'bar'
+ });
+ });
+
+ it('should re-render nested components', () => {
+ let doRender = null,
+ alt = false;
+
+ class Outer extends Component {
+ componentDidMount() {
+ let i = 1;
+ doRender = () => this.setState({ i: ++i });
+ }
+ componentWillUnmount() {}
+ render(props, { i }) {
+ if (alt) return <div is-alt />;
+ return <Inner i={i} {...props} />;
+ }
+ }
+ sinon.spy(Outer.prototype, 'render');
+ sinon.spy(Outer.prototype, 'componentDidMount');
+ sinon.spy(Outer.prototype, 'componentWillUnmount');
+
+ let j = 0;
+ class Inner extends Component {
+ constructor(...args) {
+ super();
+ }
+ componentWillMount() {}
+ componentDidMount() {}
+ componentWillUnmount() {}
+ render(props) {
+ return (
+ <div j={++j} {...props}>
+ inner
+ </div>
+ );
+ }
+ }
+ sinon.spy(Inner.prototype, 'render');
+ sinon.spy(Inner.prototype, 'componentWillMount');
+ sinon.spy(Inner.prototype, 'componentDidMount');
+ sinon.spy(Inner.prototype, 'componentWillUnmount');
+
+ render(<Outer foo="bar" />, scratch);
+
+ expect(Outer.prototype.componentDidMount).to.have.been.calledOnce;
+
+ // update & flush
+ doRender();
+ rerender();
+
+ expect(Outer.prototype.componentWillUnmount).not.to.have.been.called;
+
+ expect(Inner.prototype.componentWillUnmount).not.to.have.been.called;
+ expect(Inner.prototype.componentWillMount).to.have.been.calledOnce;
+ expect(Inner.prototype.componentDidMount).to.have.been.calledOnce;
+ expect(Inner.prototype.render).to.have.been.calledTwice;
+
+ expect(Inner.prototype.render.secondCall)
+ .to.have.been.calledWithMatch({ foo: 'bar', i: 2 })
+ .and.to.have.returned(
+ sinon.match({
+ props: {
+ j: 2,
+ i: 2,
+ foo: 'bar'
+ }
+ })
+ );
+
+ expect(getAttributes(scratch.firstElementChild)).to.eql({
+ j: '2',
+ i: '2',
+ foo: 'bar'
+ });
+
+ expect(serializeHtml(scratch)).to.equal(
+ sortAttributes('<div foo="bar" j="2" i="2">inner</div>')
+ );
+
+ // update & flush
+ doRender();
+ rerender();
+
+ expect(Inner.prototype.componentWillUnmount).not.to.have.been.called;
+ expect(Inner.prototype.componentWillMount).to.have.been.calledOnce;
+ expect(Inner.prototype.componentDidMount).to.have.been.calledOnce;
+ expect(Inner.prototype.render).to.have.been.calledThrice;
+
+ expect(Inner.prototype.render.thirdCall)
+ .to.have.been.calledWithMatch({ foo: 'bar', i: 3 })
+ .and.to.have.returned(
+ sinon.match({
+ props: {
+ j: 3,
+ i: 3,
+ foo: 'bar'
+ }
+ })
+ );
+
+ expect(getAttributes(scratch.firstElementChild)).to.eql({
+ j: '3',
+ i: '3',
+ foo: 'bar'
+ });
+
+ // update & flush
+ alt = true;
+ doRender();
+ rerender();
+
+ expect(Inner.prototype.componentWillUnmount).to.have.been.calledOnce;
+
+ expect(scratch.innerHTML).to.equal('<div is-alt="true"></div>');
+
+ // update & flush
+ alt = false;
+ doRender();
+ rerender();
+
+ expect(serializeHtml(scratch)).to.equal(
+ sortAttributes('<div foo="bar" j="4" i="5">inner</div>')
+ );
+ });
+
+ it('should resolve intermediary functional component', () => {
+ let ctx = {};
+ class Root extends Component {
+ getChildContext() {
+ return { ctx };
+ }
+ render() {
+ return <Func />;
+ }
+ }
+ const Func = () => <Inner />;
+ class Inner extends Component {
+ componentWillMount() {}
+ componentDidMount() {}
+ componentWillUnmount() {}
+ render() {
+ return <div>inner</div>;
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'componentWillUnmount');
+ sinon.spy(Inner.prototype, 'componentWillMount');
+ sinon.spy(Inner.prototype, 'componentDidMount');
+ sinon.spy(Inner.prototype, 'render');
+
+ render(<Root />, scratch);
+
+ expect(Inner.prototype.componentWillMount).to.have.been.calledOnce;
+ expect(Inner.prototype.componentDidMount).to.have.been.calledOnce;
+ expect(Inner.prototype.componentWillMount).to.have.been.calledBefore(
+ Inner.prototype.componentDidMount
+ );
+
+ render(<asdf />, scratch);
+
+ expect(Inner.prototype.componentWillUnmount).to.have.been.calledOnce;
+ });
+
+ it('should unmount children of high-order components without unmounting parent', () => {
+ let outer,
+ inner2,
+ counter = 0;
+
+ class Outer extends Component {
+ constructor(props, context) {
+ super(props, context);
+ outer = this;
+ this.state = {
+ child: this.props.child
+ };
+ }
+ componentWillUnmount() {}
+ componentWillMount() {}
+ componentDidMount() {}
+ render(_, { child: C }) {
+ return <C />;
+ }
+ }
+ sinon.spy(Outer.prototype, 'componentWillUnmount');
+ sinon.spy(Outer.prototype, 'componentWillMount');
+ sinon.spy(Outer.prototype, 'componentDidMount');
+ sinon.spy(Outer.prototype, 'render');
+
+ class Inner extends Component {
+ componentWillUnmount() {}
+ componentWillMount() {}
+ componentDidMount() {}
+ render() {
+ return h('element' + ++counter);
+ }
+ }
+ sinon.spy(Inner.prototype, 'componentWillUnmount');
+ sinon.spy(Inner.prototype, 'componentWillMount');
+ sinon.spy(Inner.prototype, 'componentDidMount');
+ sinon.spy(Inner.prototype, 'render');
+
+ class Inner2 extends Component {
+ constructor(props, context) {
+ super(props, context);
+ inner2 = this;
+ }
+ componentWillUnmount() {}
+ componentWillMount() {}
+ componentDidMount() {}
+ render() {
+ return h('element' + ++counter);
+ }
+ }
+ sinon.spy(Inner2.prototype, 'componentWillUnmount');
+ sinon.spy(Inner2.prototype, 'componentWillMount');
+ sinon.spy(Inner2.prototype, 'componentDidMount');
+ sinon.spy(Inner2.prototype, 'render');
+
+ render(<Outer child={Inner} />, scratch);
+
+ // outer should only have been mounted once
+ expect(Outer.prototype.componentWillMount, 'outer initial').to.have.been
+ .calledOnce;
+ expect(Outer.prototype.componentDidMount, 'outer initial').to.have.been
+ .calledOnce;
+ expect(Outer.prototype.componentWillUnmount, 'outer initial').not.to.have
+ .been.called;
+
+ // inner should only have been mounted once
+ expect(Inner.prototype.componentWillMount, 'inner initial').to.have.been
+ .calledOnce;
+ expect(Inner.prototype.componentDidMount, 'inner initial').to.have.been
+ .calledOnce;
+ expect(Inner.prototype.componentWillUnmount, 'inner initial').not.to.have
+ .been.called;
+
+ outer.setState({ child: Inner2 });
+ outer.forceUpdate();
+ rerender();
+
+ expect(Inner2.prototype.render).to.have.been.calledOnce;
+
+ // outer should still only have been mounted once
+ expect(Outer.prototype.componentWillMount, 'outer swap').to.have.been
+ .calledOnce;
+ expect(Outer.prototype.componentDidMount, 'outer swap').to.have.been
+ .calledOnce;
+ expect(Outer.prototype.componentWillUnmount, 'outer swap').not.to.have
+ .been.called;
+
+ // inner should only have been mounted once
+ expect(Inner2.prototype.componentWillMount, 'inner2 swap').to.have.been
+ .calledOnce;
+ expect(Inner2.prototype.componentDidMount, 'inner2 swap').to.have.been
+ .calledOnce;
+ expect(Inner2.prototype.componentWillUnmount, 'inner2 swap').not.to.have
+ .been.called;
+
+ inner2.forceUpdate();
+ rerender();
+
+ expect(Inner2.prototype.render, 'inner2 update').to.have.been.calledTwice;
+ expect(Inner2.prototype.componentWillMount, 'inner2 update').to.have.been
+ .calledOnce;
+ expect(Inner2.prototype.componentDidMount, 'inner2 update').to.have.been
+ .calledOnce;
+ expect(Inner2.prototype.componentWillUnmount, 'inner2 update').not.to.have
+ .been.called;
+ });
+
+ it('should remount when swapping between HOC child types', () => {
+ class Outer extends Component {
+ render({ child: Child }) {
+ return <Child />;
+ }
+ }
+
+ class Inner extends Component {
+ componentWillMount() {}
+ componentWillUnmount() {}
+ render() {
+ return <div class="inner">foo</div>;
+ }
+ }
+ sinon.spy(Inner.prototype, 'componentWillMount');
+ sinon.spy(Inner.prototype, 'componentWillUnmount');
+ sinon.spy(Inner.prototype, 'render');
+
+ const InnerFunc = () => <div class="inner-func">bar</div>;
+
+ render(<Outer child={Inner} />, scratch);
+
+ expect(Inner.prototype.componentWillMount, 'initial mount').to.have.been
+ .calledOnce;
+ expect(Inner.prototype.componentWillUnmount, 'initial mount').not.to.have
+ .been.called;
+
+ Inner.prototype.componentWillMount.resetHistory();
+ render(<Outer child={InnerFunc} />, scratch);
+
+ expect(Inner.prototype.componentWillMount, 'unmount').not.to.have.been
+ .called;
+ expect(Inner.prototype.componentWillUnmount, 'unmount').to.have.been
+ .calledOnce;
+
+ Inner.prototype.componentWillUnmount.resetHistory();
+ render(<Outer child={Inner} />, scratch);
+
+ expect(Inner.prototype.componentWillMount, 'remount').to.have.been
+ .calledOnce;
+ expect(Inner.prototype.componentWillUnmount, 'remount').not.to.have.been
+ .called;
+ });
+ });
+
+ describe('Component Nesting', () => {
+ let useIntermediary = false;
+
+ let createComponent = Intermediary => {
+ class C extends Component {
+ componentWillMount() {}
+ render({ children }) {
+ if (!useIntermediary) return children;
+ let I = useIntermediary === true ? Intermediary : useIntermediary;
+ return <I>{children}</I>;
+ }
+ }
+ sinon.spy(C.prototype, 'componentWillMount');
+ sinon.spy(C.prototype, 'render');
+ return C;
+ };
+
+ let createFunction = () => sinon.spy(({ children }) => children);
+
+ let F1 = createFunction();
+ let F2 = createFunction();
+ let F3 = createFunction();
+
+ let C1 = createComponent(F1);
+ let C2 = createComponent(F2);
+ let C3 = createComponent(F3);
+
+ let reset = () =>
+ [C1, C2, C3]
+ .reduce(
+ (acc, c) =>
+ acc.concat(c.prototype.render, c.prototype.componentWillMount),
+ [F1, F2, F3]
+ )
+ .forEach(c => c.resetHistory());
+
+ it('should handle lifecycle for no intermediary in component tree', () => {
+ reset();
+ render(
+ <C1>
+ <C2>
+ <C3>Some Text</C3>
+ </C2>
+ </C1>,
+ scratch
+ );
+
+ expect(C1.prototype.componentWillMount, 'initial mount').to.have.been
+ .calledOnce;
+ expect(C2.prototype.componentWillMount, 'initial mount').to.have.been
+ .calledOnce;
+ expect(C3.prototype.componentWillMount, 'initial mount').to.have.been
+ .calledOnce;
+
+ reset();
+ render(
+ <C1>
+ <C2>Some Text</C2>
+ </C1>,
+ scratch
+ );
+
+ expect(C1.prototype.componentWillMount, 'unmount innermost, C1').not.to
+ .have.been.called;
+ expect(C2.prototype.componentWillMount, 'unmount innermost, C2').not.to
+ .have.been.called;
+
+ reset();
+ render(
+ <C1>
+ <C3>Some Text</C3>
+ </C1>,
+ scratch
+ );
+
+ expect(C1.prototype.componentWillMount, 'swap innermost').not.to.have.been
+ .called;
+ expect(C3.prototype.componentWillMount, 'swap innermost').to.have.been
+ .calledOnce;
+
+ reset();
+ render(
+ <C1>
+ <C2>
+ <C3>Some Text</C3>
+ </C2>
+ </C1>,
+ scratch
+ );
+
+ expect(C1.prototype.componentWillMount, 'inject between, C1').not.to.have
+ .been.called;
+ expect(C2.prototype.componentWillMount, 'inject between, C2').to.have.been
+ .calledOnce;
+ expect(C3.prototype.componentWillMount, 'inject between, C3').to.have.been
+ .calledOnce;
+ });
+
+ it('should handle lifecycle for nested intermediary functional components', () => {
+ useIntermediary = true;
+
+ render(<div />, scratch);
+ reset();
+ render(
+ <C1>
+ <C2>
+ <C3>Some Text</C3>
+ </C2>
+ </C1>,
+ scratch
+ );
+
+ expect(
+ C1.prototype.componentWillMount,
+ 'initial mount w/ intermediary fn, C1'
+ ).to.have.been.calledOnce;
+ expect(
+ C2.prototype.componentWillMount,
+ 'initial mount w/ intermediary fn, C2'
+ ).to.have.been.calledOnce;
+ expect(
+ C3.prototype.componentWillMount,
+ 'initial mount w/ intermediary fn, C3'
+ ).to.have.been.calledOnce;
+
+ reset();
+ render(
+ <C1>
+ <C2>Some Text</C2>
+ </C1>,
+ scratch
+ );
+
+ expect(
+ C1.prototype.componentWillMount,
+ 'unmount innermost w/ intermediary fn, C1'
+ ).not.to.have.been.called;
+ expect(
+ C2.prototype.componentWillMount,
+ 'unmount innermost w/ intermediary fn, C2'
+ ).not.to.have.been.called;
+
+ reset();
+ render(
+ <C1>
+ <C3>Some Text</C3>
+ </C1>,
+ scratch
+ );
+
+ expect(
+ C1.prototype.componentWillMount,
+ 'swap innermost w/ intermediary fn'
+ ).not.to.have.been.called;
+ expect(
+ C3.prototype.componentWillMount,
+ 'swap innermost w/ intermediary fn'
+ ).to.have.been.calledOnce;
+
+ reset();
+ render(
+ <C1>
+ <C2>
+ <C3>Some Text</C3>
+ </C2>
+ </C1>,
+ scratch
+ );
+
+ expect(
+ C1.prototype.componentWillMount,
+ 'inject between, C1 w/ intermediary fn'
+ ).not.to.have.been.called;
+ expect(
+ C2.prototype.componentWillMount,
+ 'inject between, C2 w/ intermediary fn'
+ ).to.have.been.calledOnce;
+ expect(
+ C3.prototype.componentWillMount,
+ 'inject between, C3 w/ intermediary fn'
+ ).to.have.been.calledOnce;
+ });
+
+ it('should render components by depth', () => {
+ let spy = sinon.spy();
+ let update;
+ class Child extends Component {
+ constructor(props) {
+ super(props);
+ update = () => {
+ this.props.update();
+ this.setState({});
+ };
+ }
+
+ render() {
+ spy();
+ let items = [];
+ for (let i = 0; i < this.props.items; i++) items.push(i);
+ return <div>{items.join(',')}</div>;
+ }
+ }
+
+ let i = 0;
+ class Parent extends Component {
+ render() {
+ return <Child items={++i} update={() => this.setState({})} />;
+ }
+ }
+
+ render(<Parent />, scratch);
+ expect(spy).to.be.calledOnce;
+
+ update();
+ rerender();
+ expect(spy).to.be.calledTwice;
+ });
+
+ it('should handle lifecycle for nested intermediary elements', () => {
+ useIntermediary = 'div';
+
+ render(<div />, scratch);
+ reset();
+ render(
+ <C1>
+ <C2>
+ <C3>Some Text</C3>
+ </C2>
+ </C1>,
+ scratch
+ );
+
+ expect(
+ C1.prototype.componentWillMount,
+ 'initial mount w/ intermediary div, C1'
+ ).to.have.been.calledOnce;
+ expect(
+ C2.prototype.componentWillMount,
+ 'initial mount w/ intermediary div, C2'
+ ).to.have.been.calledOnce;
+ expect(
+ C3.prototype.componentWillMount,
+ 'initial mount w/ intermediary div, C3'
+ ).to.have.been.calledOnce;
+
+ reset();
+ render(
+ <C1>
+ <C2>Some Text</C2>
+ </C1>,
+ scratch
+ );
+
+ expect(
+ C1.prototype.componentWillMount,
+ 'unmount innermost w/ intermediary div, C1'
+ ).not.to.have.been.called;
+ expect(
+ C2.prototype.componentWillMount,
+ 'unmount innermost w/ intermediary div, C2'
+ ).not.to.have.been.called;
+
+ reset();
+ render(
+ <C1>
+ <C3>Some Text</C3>
+ </C1>,
+ scratch
+ );
+
+ expect(
+ C1.prototype.componentWillMount,
+ 'swap innermost w/ intermediary div'
+ ).not.to.have.been.called;
+ expect(
+ C3.prototype.componentWillMount,
+ 'swap innermost w/ intermediary div'
+ ).to.have.been.calledOnce;
+
+ reset();
+ render(
+ <C1>
+ <C2>
+ <C3>Some Text</C3>
+ </C2>
+ </C1>,
+ scratch
+ );
+
+ expect(
+ C1.prototype.componentWillMount,
+ 'inject between, C1 w/ intermediary div'
+ ).not.to.have.been.called;
+ expect(
+ C2.prototype.componentWillMount,
+ 'inject between, C2 w/ intermediary div'
+ ).to.have.been.calledOnce;
+ expect(
+ C3.prototype.componentWillMount,
+ 'inject between, C3 w/ intermediary div'
+ ).to.have.been.calledOnce;
+ });
+ });
+
+ it('should set component._vnode._dom when sCU returns false', () => {
+ let parent;
+ class Parent extends Component {
+ render() {
+ parent = this;
+ return <Child />;
+ }
+ }
+
+ let renderChildDiv = false;
+
+ let child;
+ class Child extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render() {
+ child = this;
+ if (!renderChildDiv) return null;
+ return <div class="child" />;
+ }
+ }
+
+ let app;
+ class App extends Component {
+ render() {
+ app = this;
+ return <Parent />;
+ }
+ }
+
+ // TODO: Consider rewriting test to not rely on internal properties
+ // and instead capture user-facing bug that would occur if this
+ // behavior were broken
+ const getDom = c => ('__v' in c ? c.__v.__e : c._vnode._dom);
+
+ render(<App />, scratch);
+ expect(getDom(child)).to.equalNode(child.base);
+
+ app.forceUpdate();
+ expect(getDom(child)).to.equalNode(child.base);
+
+ parent.setState({});
+ renderChildDiv = true;
+ child.forceUpdate();
+ expect(getDom(child)).to.equalNode(child.base);
+ rerender();
+
+ expect(getDom(child)).to.equalNode(child.base);
+
+ renderChildDiv = false;
+ app.setState({});
+ child.forceUpdate();
+ rerender();
+ expect(getDom(child)).to.equalNode(child.base);
+ });
+
+ // preact/#1323
+ it('should handle hoisted component vnodes without DOM', () => {
+ let x = 0;
+ let mounted = '';
+ let unmounted = '';
+ let updateAppState;
+
+ class X extends Component {
+ constructor(props) {
+ super(props);
+ this.name = `${x++}`;
+ }
+
+ componentDidMount() {
+ mounted += `,${this.name}`;
+ }
+
+ componentWillUnmount() {
+ unmounted += `,${this.name}`;
+ }
+
+ render() {
+ return null;
+ }
+ }
+
+ // Statically create X element
+ const A = <X />;
+
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { i: 0 };
+ updateAppState = () => this.setState({ i: this.state.i + 1 });
+ }
+
+ render() {
+ return (
+ <div key={this.state.i}>
+ {A}
+ {A}
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+
+ updateAppState();
+ rerender();
+ updateAppState();
+ rerender();
+
+ expect(mounted).to.equal(',0,1,2,3,4,5');
+ expect(unmounted).to.equal(',0,1,2,3');
+ });
+
+ describe('c.base', () => {
+ /* eslint-disable lines-around-comment */
+ /** @type {import('../../src').Component} */
+ let parentDom1;
+ /** @type {import('../../src').Component} */
+ let parent1;
+ /** @type {import('../../src').Component} */
+ let parent2;
+ /** @type {import('../../src').Component} */
+ let maybe;
+ /** @type {import('../../src').Component} */
+ let child;
+ /** @type {import('../../src').Component} */
+ let sibling;
+ /** @type {import('../../src').Component} */
+ let nullInst;
+
+ /** @type {() => void} */
+ let toggleMaybeNull;
+ /** @type {() => void} */
+ let swapChildTag;
+
+ function ParentWithDom(props) {
+ parentDom1 = this;
+ return <div>{props.children}</div>;
+ }
+
+ class Parent1 extends Component {
+ render() {
+ parent1 = this;
+ return this.props.children;
+ }
+ }
+
+ function Parent2(props) {
+ parent2 = this;
+ return props.children;
+ }
+
+ class MaybeNull extends Component {
+ constructor(props) {
+ super(props);
+ maybe = this;
+ this.state = { active: props.active || false };
+ toggleMaybeNull = () =>
+ this.setState(prev => ({
+ active: !prev.active
+ }));
+ }
+ render() {
+ return this.state.active ? <div>maybe</div> : null;
+ }
+ }
+
+ class Child extends Component {
+ constructor(props) {
+ super(props);
+ child = this;
+ this.state = { tagName: 'p' };
+ swapChildTag = () =>
+ this.setState(prev => ({
+ tagName: prev.tagName == 'p' ? 'span' : 'p'
+ }));
+ }
+ render() {
+ return h(this.state.tagName, null, 'child');
+ }
+ }
+
+ function Sibling(props) {
+ sibling = this;
+ return <p />;
+ }
+
+ function Null() {
+ nullInst = this;
+ return null;
+ }
+
+ afterEach(() => {
+ parentDom1 = null;
+ parent1 = null;
+ parent2 = null;
+ child = null;
+ sibling = null;
+ });
+
+ it('should keep c.base up to date if a nested child component changes DOM nodes', () => {
+ render(
+ <ParentWithDom>
+ <Parent1>
+ <Parent2>
+ <Child />
+ </Parent2>
+ </Parent1>
+ </ParentWithDom>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal('<div><p>child</p></div>');
+ expect(child.base).to.equalNode(scratch.firstChild.firstChild);
+ expect(parent2.base).to.equalNode(child.base);
+ expect(parent1.base).to.equalNode(child.base);
+ expect(parentDom1.base).to.equalNode(scratch.firstChild);
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('<div><span>child</span></div>');
+ expect(child.base).to.equalNode(scratch.firstChild.firstChild);
+ expect(parent2.base).to.equalNode(child.base);
+ expect(parent1.base).to.equalNode(child.base);
+ expect(parentDom1.base).to.equalNode(scratch.firstChild);
+ });
+
+ it('should not update sibling c.base if child component changes DOM nodes', () => {
+ let s1 = {},
+ s2 = {},
+ s3 = {},
+ s4 = {};
+
+ render(
+ <Fragment>
+ <ParentWithDom>
+ <Parent1>
+ <Parent2>
+ <Child />
+ <Sibling ref={s1} />
+ </Parent2>
+ <Sibling ref={s2} />
+ </Parent1>
+ <Sibling ref={s3} />
+ </ParentWithDom>
+ <Sibling ref={s4} />
+ </Fragment>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(
+ '<div><p>child</p><p></p><p></p><p></p></div><p></p>'
+ );
+ expect(child.base).to.equalNode(scratch.firstChild.firstChild);
+ expect(parent2.base).to.equalNode(child.base);
+ expect(parent1.base).to.equalNode(child.base);
+ expect(parentDom1.base).to.equalNode(scratch.firstChild);
+ expect(s1.current.base).to.equalNode(scratch.firstChild.childNodes[1]);
+ expect(s2.current.base).to.equalNode(scratch.firstChild.childNodes[2]);
+ expect(s3.current.base).to.equalNode(scratch.firstChild.childNodes[3]);
+ expect(s4.current.base).to.equalNode(scratch.lastChild);
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ '<div><span>child</span><p></p><p></p><p></p></div><p></p>'
+ );
+ expect(child.base).to.equalNode(scratch.firstChild.firstChild);
+ expect(parent2.base).to.equalNode(child.base);
+ expect(parent1.base).to.equalNode(child.base);
+ expect(parentDom1.base).to.equalNode(scratch.firstChild);
+ expect(s1.current.base).to.equalNode(scratch.firstChild.childNodes[1]);
+ expect(s2.current.base).to.equalNode(scratch.firstChild.childNodes[2]);
+ expect(s3.current.base).to.equalNode(scratch.firstChild.childNodes[3]);
+ expect(s4.current.base).to.equalNode(scratch.lastChild);
+ });
+
+ it('should not update parent c.base if child component changes DOM nodes and it is not first child component', () => {
+ render(
+ <Parent1>
+ <Sibling />
+ <Child />
+ </Parent1>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal('<p></p><p>child</p>');
+ expect(child.base).to.equalNode(scratch.lastChild);
+ expect(sibling.base).to.equalNode(scratch.firstChild);
+ expect(parent1.base).to.equalNode(sibling.base);
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('<p></p><span>child</span>');
+ expect(child.base).to.equalNode(scratch.lastChild);
+ expect(sibling.base).to.equalNode(scratch.firstChild);
+ expect(parent1.base).to.equalNode(sibling.base);
+ });
+
+ it('should update parent c.base if child component changes DOM nodes and it is first non-null child component', () => {
+ render(
+ <Parent1>
+ <Null />
+ <Child />
+ <Sibling />
+ </Parent1>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal('<p>child</p><p></p>');
+ expect(nullInst.base).to.equalNode(null);
+ expect(child.base).to.equalNode(scratch.firstChild);
+ expect(sibling.base).to.equalNode(scratch.lastChild);
+ expect(parent1.base).to.equalNode(child.base);
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('<span>child</span><p></p>');
+ expect(nullInst.base).to.equalNode(null);
+ expect(child.base).to.equalNode(scratch.firstChild);
+ expect(sibling.base).to.equalNode(scratch.lastChild);
+ expect(parent1.base).to.equalNode(child.base);
+ });
+
+ it('should not update parent c.base if child component changes DOM nodes and a parent is not first child component', () => {
+ render(
+ <ParentWithDom>
+ <Parent1>
+ <Sibling />
+ <Parent2>
+ <Child />
+ </Parent2>
+ </Parent1>
+ </ParentWithDom>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal('<div><p></p><p>child</p></div>');
+ expect(child.base).to.equalNode(scratch.firstChild.lastChild);
+ expect(parent2.base).to.equalNode(child.base);
+ expect(sibling.base).to.equalNode(scratch.firstChild.firstChild);
+ expect(parent1.base).to.equalNode(sibling.base);
+ expect(parentDom1.base).to.equalNode(scratch.firstChild);
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ '<div><p></p><span>child</span></div>'
+ );
+ expect(child.base).to.equalNode(scratch.firstChild.lastChild);
+ expect(parent2.base).to.equalNode(child.base);
+ expect(sibling.base).to.equalNode(scratch.firstChild.firstChild);
+ expect(parent1.base).to.equalNode(sibling.base);
+ expect(parentDom1.base).to.equalNode(scratch.firstChild);
+ });
+
+ it('should update parent c.base if first child becomes null', () => {
+ render(
+ <Parent1>
+ <MaybeNull active />
+ <Parent2>
+ <Child />
+ </Parent2>
+ </Parent1>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal([div('maybe'), p('child')].join(''));
+ expect(maybe.base).to.equalNode(
+ scratch.firstChild,
+ 'initial - maybe.base'
+ );
+ expect(child.base).to.equalNode(
+ scratch.lastChild,
+ 'initial - child.base'
+ );
+ expect(parent2.base).to.equalNode(child.base, 'initial - parent2.base');
+ expect(parent1.base).to.equalNode(maybe.base, 'initial - parent1.base');
+
+ toggleMaybeNull();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(p('child'));
+ expect(maybe.base).to.equalNode(null, 'toggleMaybe - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'toggleMaybe - child.base'
+ );
+ expect(parent2.base).to.equalNode(
+ child.base,
+ 'toggleMaybe - parent2.base'
+ );
+ expect(parent1.base).to.equalNode(
+ child.base,
+ 'toggleMaybe - parent1.base'
+ );
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(span('child'));
+ expect(maybe.base).to.equalNode(null, 'swapChildTag - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'swapChildTag - child.base'
+ );
+ expect(parent2.base).to.equalNode(
+ child.base,
+ 'swapChildTag - parent2.base'
+ );
+ expect(parent1.base).to.equalNode(
+ child.base,
+ 'swapChildTag - parent1.base'
+ );
+ });
+
+ it('should update parent c.base if first child becomes non-null', () => {
+ render(
+ <Parent1>
+ <MaybeNull />
+ <Parent2>
+ <Child />
+ </Parent2>
+ </Parent1>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(p('child'));
+ expect(maybe.base).to.equalNode(null, 'initial - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'initial - child.base'
+ );
+ expect(parent2.base).to.equalNode(child.base, 'initial - parent2.base');
+ expect(parent1.base).to.equalNode(child.base, 'initial - parent1.base');
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(span('child'));
+ expect(maybe.base).to.equalNode(null, 'swapChildTag - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'swapChildTag - child.base'
+ );
+ expect(parent2.base).to.equalNode(
+ child.base,
+ 'swapChildTag - parent2.base'
+ );
+ expect(parent1.base).to.equalNode(
+ child.base,
+ 'swapChildTag - parent1.base'
+ );
+
+ toggleMaybeNull();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ [div('maybe'), span('child')].join('')
+ );
+ expect(maybe.base).to.equalNode(
+ scratch.firstChild,
+ 'toggleMaybe - maybe.base'
+ );
+ expect(child.base).to.equalNode(
+ scratch.lastChild,
+ 'toggleMaybe - child.base'
+ );
+ expect(parent2.base).to.equalNode(
+ child.base,
+ 'toggleMaybe - parent2.base'
+ );
+ expect(parent1.base).to.equalNode(
+ maybe.base,
+ 'toggleMaybe - parent1.base'
+ );
+ });
+
+ it('should update parent c.base if first non-null child becomes null with multiple null siblings', () => {
+ render(
+ <Parent1>
+ <Null />
+ <Null />
+ <Parent2>
+ <MaybeNull active />
+ <Child />
+ </Parent2>
+ </Parent1>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal([div('maybe'), p('child')].join(''));
+ expect(maybe.base).to.equalNode(
+ scratch.firstChild,
+ 'initial - maybe.base'
+ );
+ expect(child.base).to.equalNode(
+ scratch.lastChild,
+ 'initial - child.base'
+ );
+ expect(parent2.base).to.equalNode(maybe.base, 'initial - parent2.base');
+ expect(parent1.base).to.equalNode(maybe.base, 'initial - parent1.base');
+
+ toggleMaybeNull();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(p('child'));
+ expect(maybe.base).to.equalNode(null, 'toggleMaybe - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'toggleMaybe - child.base'
+ );
+ expect(parent2.base).to.equalNode(
+ child.base,
+ 'toggleMaybe - parent2.base'
+ );
+ expect(parent1.base).to.equalNode(
+ child.base,
+ 'toggleMaybe - parent1.base'
+ );
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(span('child'));
+ expect(maybe.base).to.equalNode(null, 'swapChildTag - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'swapChildTag - child.base'
+ );
+ expect(parent2.base).to.equalNode(
+ child.base,
+ 'swapChildTag - parent2.base'
+ );
+ expect(parent1.base).to.equalNode(
+ child.base,
+ 'swapChildTag - parent1.base'
+ );
+ });
+
+ it('should update parent c.base if a null child returns DOM with multiple null siblings', () => {
+ render(
+ <Parent1>
+ <Null />
+ <Null />
+ <Parent2>
+ <MaybeNull />
+ <Child />
+ </Parent2>
+ </Parent1>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(p('child'));
+ expect(maybe.base).to.equalNode(null, 'initial - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'initial - child.base'
+ );
+ expect(parent2.base).to.equalNode(child.base, 'initial - parent2.base');
+ expect(parent1.base).to.equalNode(child.base, 'initial - parent1.base');
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(span('child'));
+ expect(maybe.base).to.equalNode(null, 'swapChildTag - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'swapChildTag - child.base'
+ );
+ expect(parent2.base).to.equalNode(
+ child.base,
+ 'swapChildTag - parent2.base'
+ );
+ expect(parent1.base).to.equalNode(
+ child.base,
+ 'swapChildTag - parent1.base'
+ );
+
+ toggleMaybeNull();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ [div('maybe'), span('child')].join('')
+ );
+ expect(maybe.base).to.equalNode(
+ scratch.firstChild,
+ 'toggleMaybe - maybe.base'
+ );
+ expect(child.base).to.equalNode(
+ scratch.lastChild,
+ 'toggleMaybe - child.base'
+ );
+ expect(parent2.base).to.equalNode(
+ maybe.base,
+ 'toggleMaybe - parent2.base'
+ );
+ expect(parent1.base).to.equalNode(
+ maybe.base,
+ 'toggleMaybe - parent1.base'
+ );
+ });
+
+ it('should update parent c.base to null if last child becomes null', () => {
+ let fragRef = {};
+ render(
+ <Fragment ref={fragRef}>
+ <Parent1>
+ <Null />
+ <Null />
+ <Parent2>
+ <MaybeNull active />
+ </Parent2>
+ <Null />
+ </Parent1>
+ <Child />
+ </Fragment>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal([div('maybe'), p('child')].join(''));
+ expect(maybe.base).to.equalNode(
+ scratch.firstChild,
+ 'initial - maybe.base'
+ );
+ expect(child.base).to.equalNode(
+ scratch.lastChild,
+ 'initial - child.base'
+ );
+ expect(parent2.base).to.equalNode(maybe.base, 'initial - parent2.base');
+ expect(parent1.base).to.equalNode(maybe.base, 'initial - parent1.base');
+ expect(fragRef.current.base).to.equalNode(
+ maybe.base,
+ 'initial - fragRef.current.base'
+ );
+
+ toggleMaybeNull();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(p('child'));
+ expect(maybe.base).to.equalNode(null, 'toggleMaybe - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'toggleMaybe - child.base'
+ );
+ expect(parent2.base).to.equalNode(
+ maybe.base,
+ 'toggleMaybe - parent2.base'
+ );
+ expect(parent1.base).to.equalNode(
+ maybe.base,
+ 'toggleMaybe - parent1.base'
+ );
+ expect(fragRef.current.base).to.equalNode(
+ child.base,
+ 'toggleMaybe - fragRef.current.base'
+ );
+ });
+
+ it('should update parent c.base if last child returns dom', () => {
+ let fragRef = {};
+ render(
+ <Fragment ref={fragRef}>
+ <Parent1>
+ <Null />
+ <Null />
+ <Parent2>
+ <MaybeNull />
+ </Parent2>
+ <Null />
+ </Parent1>
+ <Child />
+ </Fragment>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(p('child'));
+ expect(maybe.base).to.equalNode(null, 'initial - maybe.base');
+ expect(child.base).to.equalNode(
+ scratch.firstChild,
+ 'initial - child.base'
+ );
+ expect(parent2.base).to.equalNode(maybe.base, 'initial - parent2.base');
+ expect(parent1.base).to.equalNode(maybe.base, 'initial - parent1.base');
+ expect(fragRef.current.base).to.equalNode(
+ child.base,
+ 'initial - fragRef.current.base'
+ );
+
+ toggleMaybeNull();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal([div('maybe'), p('child')].join(''));
+ expect(maybe.base).to.equalNode(
+ scratch.firstChild,
+ 'toggleMaybe - maybe.base'
+ );
+ expect(child.base).to.equalNode(
+ scratch.lastChild,
+ 'toggleMaybe - child.base'
+ );
+ expect(parent2.base).to.equalNode(maybe.base, 'initial - parent2.base');
+ expect(parent1.base).to.equalNode(
+ maybe.base,
+ 'toggleMaybe - parent1.base'
+ );
+ expect(fragRef.current.base).to.equalNode(
+ maybe.base,
+ 'toggleMaybe - fragRef.current.base'
+ );
+ });
+
+ it('should not update parent if it is a DOM node', () => {
+ let divVNode = (
+ <div>
+ <Child />
+ </div>
+ );
+ render(divVNode, scratch);
+
+ // TODO: Consider rewriting test to not rely on internal properties
+ // and instead capture user-facing bug that would occur if this
+ // behavior were broken
+ const domProp = '__e' in divVNode ? '__e' : '_dom';
+
+ expect(scratch.innerHTML).to.equal('<div><p>child</p></div>');
+ expect(divVNode[domProp]).to.equalNode(
+ scratch.firstChild,
+ 'initial - divVNode._dom'
+ );
+ expect(child.base).to.equalNode(
+ scratch.firstChild.firstChild,
+ 'initial - child.base'
+ );
+
+ swapChildTag();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('<div><span>child</span></div>');
+ expect(divVNode[domProp]).to.equalNode(
+ scratch.firstChild,
+ 'swapChildTag - divVNode._dom'
+ );
+ expect(child.base).to.equalNode(
+ scratch.firstChild.firstChild,
+ 'swapChildTag - child.base'
+ );
+ });
+ });
+
+ describe('setState', () => {
+ it('should not error if called on an unmounted component', () => {
+ /** @type {() => void} */
+ let increment;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { count: 0 };
+ increment = () => this.setState({ count: this.state.count + 1 });
+ }
+ render(props, state) {
+ return <div>{state.count}</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>0</div>');
+
+ increment();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>1</div>');
+
+ render(null, scratch);
+ expect(scratch.innerHTML).to.equal('');
+
+ expect(() => increment()).to.not.throw();
+ expect(() => rerender()).to.not.throw();
+ expect(scratch.innerHTML).to.equal('');
+ });
+
+ it('setState callbacks should have latest state, even when called in render', () => {
+ let callbackState;
+ let i = 0;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { foo: 'bar' };
+ }
+ render() {
+ // So we don't get infinite loop
+ if (i++ === 0) {
+ this.setState({ foo: 'baz' }, () => {
+ callbackState = this.state;
+ });
+ }
+ return String(this.state.foo);
+ }
+ }
+
+ render(<Foo />, scratch);
+ expect(scratch.innerHTML).to.equal('bar');
+
+ rerender();
+ expect(scratch.innerHTML).to.equal('baz');
+ expect(callbackState).to.deep.equal({ foo: 'baz' });
+ });
+
+ // #2716
+ it('should work with readonly state', () => {
+ let update;
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { foo: 'bar' };
+ update = () =>
+ this.setState(prev => {
+ Object.defineProperty(prev, 'foo', {
+ writable: false
+ });
+
+ return prev;
+ });
+ }
+
+ render() {
+ return <div />;
+ }
+ }
+
+ render(<Foo />, scratch);
+ expect(() => {
+ update();
+ rerender();
+ }).to.not.throw();
+ });
+ });
+
+ describe('forceUpdate', () => {
+ it('should not error if called on an unmounted component', () => {
+ /** @type {() => void} */
+ let forceUpdate;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ forceUpdate = () => this.forceUpdate();
+ }
+ render(props, state) {
+ return <div>Hello</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+
+ render(null, scratch);
+ expect(scratch.innerHTML).to.equal('');
+
+ expect(() => forceUpdate()).to.not.throw();
+ expect(() => rerender()).to.not.throw();
+ expect(scratch.innerHTML).to.equal('');
+ });
+
+ it('should update old dom on forceUpdate in a lifecycle', () => {
+ let i = 0;
+ class App extends Component {
+ componentWillReceiveProps() {
+ this.forceUpdate();
+ }
+ render() {
+ if (i++ == 0) return <div>foo</div>;
+ return <div>bar</div>;
+ }
+ }
+
+ render(<App />, scratch);
+ render(<App />, scratch);
+
+ expect(scratch.innerHTML).to.equal('<div>bar</div>');
+ });
+ });
+});
diff --git a/preact/test/browser/context.test.js b/preact/test/browser/context.test.js
new file mode 100644
index 0000000..ce3a57a
--- /dev/null
+++ b/preact/test/browser/context.test.js
@@ -0,0 +1,237 @@
+import { createElement, render, Component, Fragment } from 'preact';
+import { setupScratch, teardown } from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('context', () => {
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should pass context to grandchildren', () => {
+ const CONTEXT = { a: 'a' };
+ const PROPS = { b: 'b' };
+ // let inner;
+
+ class Outer extends Component {
+ getChildContext() {
+ return CONTEXT;
+ }
+ render(props) {
+ return (
+ <div>
+ <Inner {...props} />
+ </div>
+ );
+ }
+ }
+ sinon.spy(Outer.prototype, 'getChildContext');
+
+ class Inner extends Component {
+ // constructor() {
+ // super();
+ // inner = this;
+ // }
+ shouldComponentUpdate() {
+ return true;
+ }
+ componentWillReceiveProps() {}
+ componentWillUpdate() {}
+ componentDidUpdate() {}
+ render(props, state, context) {
+ return <div>{context && context.a}</div>;
+ }
+ }
+ sinon.spy(Inner.prototype, 'shouldComponentUpdate');
+ sinon.spy(Inner.prototype, 'componentWillReceiveProps');
+ sinon.spy(Inner.prototype, 'componentWillUpdate');
+ sinon.spy(Inner.prototype, 'componentDidUpdate');
+ sinon.spy(Inner.prototype, 'render');
+
+ render(<Outer />, scratch);
+
+ expect(Outer.prototype.getChildContext).to.have.been.calledOnce;
+
+ // initial render does not invoke anything but render():
+ expect(Inner.prototype.render).to.have.been.calledWith({}, {}, CONTEXT);
+
+ CONTEXT.foo = 'bar';
+ render(<Outer {...PROPS} />, scratch);
+
+ expect(Outer.prototype.getChildContext).to.have.been.calledTwice;
+
+ expect(
+ Inner.prototype.shouldComponentUpdate
+ ).to.have.been.calledOnce.and.calledWith(PROPS, {}, CONTEXT);
+ expect(Inner.prototype.componentWillReceiveProps).to.have.been.calledWith(
+ PROPS,
+ CONTEXT
+ );
+ expect(Inner.prototype.componentWillUpdate).to.have.been.calledWith(
+ PROPS,
+ {},
+ CONTEXT
+ );
+ expect(Inner.prototype.componentDidUpdate).to.have.been.calledWith(
+ {},
+ {},
+ undefined
+ );
+ expect(Inner.prototype.render).to.have.been.calledWith(PROPS, {}, CONTEXT);
+
+ /* Future:
+ * Newly created context objects are *not* currently cloned.
+ * This test checks that they *are* cloned.
+ */
+ // Inner.prototype.render.resetHistory();
+ // CONTEXT.foo = 'baz';
+ // inner.forceUpdate();
+ // expect(Inner.prototype.render).to.have.been.calledWith(PROPS, {}, { a:'a', foo:'bar' });
+ });
+
+ it('should pass context to direct children', () => {
+ const CONTEXT = { a: 'a' };
+ const PROPS = { b: 'b' };
+
+ class Outer extends Component {
+ getChildContext() {
+ return CONTEXT;
+ }
+ render(props) {
+ return <Inner {...props} />;
+ }
+ }
+ sinon.spy(Outer.prototype, 'getChildContext');
+
+ class Inner extends Component {
+ shouldComponentUpdate() {
+ return true;
+ }
+ componentWillReceiveProps() {}
+ componentWillUpdate() {}
+ componentDidUpdate() {}
+ render(props, state, context) {
+ return <div>{context && context.a}</div>;
+ }
+ }
+ sinon.spy(Inner.prototype, 'shouldComponentUpdate');
+ sinon.spy(Inner.prototype, 'componentWillReceiveProps');
+ sinon.spy(Inner.prototype, 'componentWillUpdate');
+ sinon.spy(Inner.prototype, 'componentDidUpdate');
+ sinon.spy(Inner.prototype, 'render');
+
+ render(<Outer />, scratch);
+
+ expect(Outer.prototype.getChildContext).to.have.been.calledOnce;
+
+ // initial render does not invoke anything but render():
+ expect(Inner.prototype.render).to.have.been.calledWith({}, {}, CONTEXT);
+
+ CONTEXT.foo = 'bar';
+ render(<Outer {...PROPS} />, scratch);
+
+ expect(Outer.prototype.getChildContext).to.have.been.calledTwice;
+
+ expect(
+ Inner.prototype.shouldComponentUpdate
+ ).to.have.been.calledOnce.and.calledWith(PROPS, {}, CONTEXT);
+ expect(Inner.prototype.componentWillReceiveProps).to.have.been.calledWith(
+ PROPS,
+ CONTEXT
+ );
+ expect(Inner.prototype.componentWillUpdate).to.have.been.calledWith(
+ PROPS,
+ {},
+ CONTEXT
+ );
+ expect(Inner.prototype.componentDidUpdate).to.have.been.calledWith(
+ {},
+ {},
+ undefined
+ );
+ expect(Inner.prototype.render).to.have.been.calledWith(PROPS, {}, CONTEXT);
+
+ // make sure render() could make use of context.a
+ expect(Inner.prototype.render).to.have.returned(
+ sinon.match({ props: { children: 'a' } })
+ );
+ });
+
+ it('should preserve existing context properties when creating child contexts', () => {
+ let outerContext = { outer: true },
+ innerContext = { inner: true };
+ class Outer extends Component {
+ getChildContext() {
+ return { outerContext };
+ }
+ render() {
+ return (
+ <div>
+ <Inner />
+ </div>
+ );
+ }
+ }
+
+ class Inner extends Component {
+ getChildContext() {
+ return { innerContext };
+ }
+ render() {
+ return <InnerMost />;
+ }
+ }
+
+ class InnerMost extends Component {
+ render() {
+ return <strong>test</strong>;
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'render');
+ sinon.spy(InnerMost.prototype, 'render');
+
+ render(<Outer />, scratch);
+
+ expect(Inner.prototype.render).to.have.been.calledWith(
+ {},
+ {},
+ { outerContext }
+ );
+ expect(InnerMost.prototype.render).to.have.been.calledWith(
+ {},
+ {},
+ { outerContext, innerContext }
+ );
+ });
+
+ it('should pass context through Fragments', () => {
+ const context = { foo: 'bar' };
+
+ const Foo = sinon.spy(() => <div />);
+
+ class Wrapper extends Component {
+ getChildContext() {
+ return context;
+ }
+
+ render() {
+ return (
+ <Fragment>
+ <Foo />
+ <Foo />
+ </Fragment>
+ );
+ }
+ }
+
+ render(<Wrapper />, scratch);
+ expect(Foo.args[0][1]).to.deep.equal(context);
+ });
+});
diff --git a/preact/test/browser/createContext.test.js b/preact/test/browser/createContext.test.js
new file mode 100644
index 0000000..092a2ba
--- /dev/null
+++ b/preact/test/browser/createContext.test.js
@@ -0,0 +1,931 @@
+import { setupRerender, act } from 'preact/test-utils';
+import {
+ createElement,
+ render,
+ Component,
+ createContext,
+ Fragment
+} from 'preact';
+import { setupScratch, teardown } from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('createContext', () => {
+ let scratch;
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should pass context to a consumer', () => {
+ const { Provider, Consumer } = createContext();
+ const CONTEXT = { a: 'a' };
+
+ let receivedContext;
+
+ class Inner extends Component {
+ render(props) {
+ return <div>{props.a}</div>;
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'render');
+
+ render(
+ <Provider value={CONTEXT}>
+ <div>
+ <Consumer>
+ {data => {
+ receivedContext = data;
+ return <Inner {...data} />;
+ }}
+ </Consumer>
+ </div>
+ </Provider>,
+ scratch
+ );
+
+ // initial render does not invoke anything but render():
+ expect(Inner.prototype.render).to.have.been.calledWithMatch(CONTEXT);
+ expect(receivedContext).to.equal(CONTEXT);
+ expect(scratch.innerHTML).to.equal('<div><div>a</div></div>');
+ });
+
+ // This optimization helps
+ // to prevent a Provider from rerendering the children, this means
+ // we only propagate to children.
+ // Strict equal vnode optimization
+ it('skips referentially equal children to Provider', () => {
+ const { Provider, Consumer } = createContext();
+ let set,
+ renders = 0;
+ const Layout = ({ children }) => {
+ renders++;
+ return children;
+ };
+ class State extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { i: 0 };
+ set = this.setState.bind(this);
+ }
+ render() {
+ const { children } = this.props;
+ return <Provider value={this.state}>{children}</Provider>;
+ }
+ }
+ const App = () => (
+ <State>
+ <Layout>
+ <Consumer>{({ i }) => <p>{i}</p>}</Consumer>
+ </Layout>
+ </State>
+ );
+ render(<App />, scratch);
+ expect(renders).to.equal(1);
+ set({ i: 2 });
+ rerender();
+ expect(renders).to.equal(1);
+ });
+
+ it('should preserve provider context through nesting providers', done => {
+ const { Provider, Consumer } = createContext();
+ const CONTEXT = { a: 'a' };
+ const CHILD_CONTEXT = { b: 'b' };
+
+ let parentContext, childContext;
+
+ class Inner extends Component {
+ render(props) {
+ return (
+ <div>
+ {props.a} - {props.b}
+ </div>
+ );
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'render');
+
+ render(
+ <Provider value={CONTEXT}>
+ <Consumer>
+ {data => {
+ parentContext = data;
+ return (
+ <Provider value={CHILD_CONTEXT}>
+ <Consumer>
+ {childData => {
+ childContext = childData;
+ return <Inner {...data} {...childData} />;
+ }}
+ </Consumer>
+ </Provider>
+ );
+ }}
+ </Consumer>
+ </Provider>,
+ scratch
+ );
+
+ // initial render does not invoke anything but render():
+ expect(Inner.prototype.render).to.have.been.calledWithMatch({
+ ...CONTEXT,
+ ...CHILD_CONTEXT
+ });
+ expect(Inner.prototype.render).to.be.calledOnce;
+ expect(parentContext).to.equal(CONTEXT);
+ expect(childContext).to.equal(CHILD_CONTEXT);
+ expect(scratch.innerHTML).to.equal('<div>a - b</div>');
+ setTimeout(() => {
+ expect(Inner.prototype.render).to.be.calledOnce;
+ done();
+ }, 0);
+ });
+
+ it('should preserve provider context between different providers', () => {
+ const {
+ Provider: ThemeProvider,
+ Consumer: ThemeConsumer
+ } = createContext();
+ const { Provider: DataProvider, Consumer: DataConsumer } = createContext();
+ const THEME_CONTEXT = { theme: 'black' };
+ const DATA_CONTEXT = { global: 'a' };
+
+ let receivedTheme;
+ let receivedData;
+
+ class Inner extends Component {
+ render(props) {
+ return (
+ <div>
+ {props.theme} - {props.global}
+ </div>
+ );
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'render');
+
+ render(
+ <ThemeProvider value={THEME_CONTEXT.theme}>
+ <DataProvider value={DATA_CONTEXT}>
+ <ThemeConsumer>
+ {theme => {
+ receivedTheme = theme;
+ return (
+ <DataConsumer>
+ {data => {
+ receivedData = data;
+ return <Inner theme={theme} {...data} />;
+ }}
+ </DataConsumer>
+ );
+ }}
+ </ThemeConsumer>
+ </DataProvider>
+ </ThemeProvider>,
+ scratch
+ );
+
+ // initial render does not invoke anything but render():
+ expect(Inner.prototype.render).to.have.been.calledWithMatch({
+ ...THEME_CONTEXT,
+ ...DATA_CONTEXT
+ });
+ expect(receivedTheme).to.equal(THEME_CONTEXT.theme);
+ expect(receivedData).to.equal(DATA_CONTEXT);
+ expect(scratch.innerHTML).to.equal('<div>black - a</div>');
+ });
+
+ it('should preserve provider context through nesting consumers', () => {
+ const { Provider, Consumer } = createContext();
+ const CONTEXT = { a: 'a' };
+
+ let receivedData;
+ let receivedChildData;
+
+ class Inner extends Component {
+ render(props) {
+ return <div>{props.a}</div>;
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'render');
+
+ render(
+ <Provider value={CONTEXT}>
+ <Consumer>
+ {data => {
+ receivedData = data;
+ return (
+ <Consumer>
+ {childData => {
+ receivedChildData = childData;
+ return <Inner {...data} {...childData} />;
+ }}
+ </Consumer>
+ );
+ }}
+ </Consumer>
+ </Provider>,
+ scratch
+ );
+
+ // initial render does not invoke anything but render():
+ expect(Inner.prototype.render).to.have.been.calledWithMatch({ ...CONTEXT });
+ expect(receivedData).to.equal(CONTEXT);
+ expect(receivedChildData).to.equal(CONTEXT);
+ expect(scratch.innerHTML).to.equal('<div>a</div>');
+ });
+
+ it('should not emit when value does not update', () => {
+ const { Provider, Consumer } = createContext();
+ const CONTEXT = { a: 'a' };
+
+ class NoUpdate extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return this.props.children;
+ }
+ }
+
+ class Inner extends Component {
+ render(props) {
+ return <div>{props.a}</div>;
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'render');
+
+ render(
+ <div>
+ <Provider value={CONTEXT}>
+ <NoUpdate>
+ <Consumer>{data => <Inner {...data} />}</Consumer>
+ </NoUpdate>
+ </Provider>
+ </div>,
+ scratch
+ );
+
+ expect(Inner.prototype.render).to.have.been.calledOnce;
+
+ render(
+ <div>
+ <Provider value={CONTEXT}>
+ <NoUpdate>
+ <Consumer>{data => <Inner {...data} />}</Consumer>
+ </NoUpdate>
+ </Provider>
+ </div>,
+ scratch
+ );
+
+ expect(Inner.prototype.render).to.have.been.calledOnce;
+ });
+
+ it('should preserve provider context through nested components', () => {
+ const { Provider, Consumer } = createContext();
+ const CONTEXT = { a: 'a' };
+
+ let receivedContext;
+
+ class Consumed extends Component {
+ render(props) {
+ return <strong>{props.a}</strong>;
+ }
+ }
+
+ sinon.spy(Consumed.prototype, 'render');
+
+ class Outer extends Component {
+ render() {
+ return (
+ <div>
+ <Inner />
+ </div>
+ );
+ }
+ }
+
+ class Inner extends Component {
+ render() {
+ return (
+ <Fragment>
+ <InnerMost />
+ </Fragment>
+ );
+ }
+ }
+
+ class InnerMost extends Component {
+ render() {
+ return (
+ <div>
+ <Consumer>
+ {data => {
+ receivedContext = data;
+ return <Consumed {...data} />;
+ }}
+ </Consumer>
+ </div>
+ );
+ }
+ }
+
+ render(
+ <Provider value={CONTEXT}>
+ <Outer />
+ </Provider>,
+ scratch
+ );
+
+ // initial render does not invoke anything but render():
+ expect(Consumed.prototype.render).to.have.been.calledWithMatch({
+ ...CONTEXT
+ });
+ expect(receivedContext).to.equal(CONTEXT);
+ expect(scratch.innerHTML).to.equal(
+ '<div><div><strong>a</strong></div></div>'
+ );
+ });
+
+ it('should propagates through shouldComponentUpdate false', done => {
+ const { Provider, Consumer } = createContext();
+ const CONTEXT = { a: 'a' };
+ const UPDATED_CONTEXT = { a: 'b' };
+
+ class Consumed extends Component {
+ render(props) {
+ return <strong>{props.a}</strong>;
+ }
+ }
+
+ sinon.spy(Consumed.prototype, 'render');
+
+ class Outer extends Component {
+ render() {
+ return (
+ <div>
+ <Inner />
+ </div>
+ );
+ }
+ }
+
+ class Inner extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return (
+ <Fragment>
+ <InnerMost />
+ </Fragment>
+ );
+ }
+ }
+
+ class InnerMost extends Component {
+ render() {
+ return (
+ <div>
+ <Consumer>{data => <Consumed {...data} />}</Consumer>
+ </div>
+ );
+ }
+ }
+
+ class App extends Component {
+ render() {
+ return (
+ <Provider value={this.props.value}>
+ <Outer />
+ </Provider>
+ );
+ }
+ }
+
+ render(<App value={CONTEXT} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ '<div><div><strong>a</strong></div></div>'
+ );
+ expect(Consumed.prototype.render).to.have.been.calledOnce;
+
+ render(<App value={UPDATED_CONTEXT} />, scratch);
+
+ rerender();
+
+ // initial render does not invoke anything but render():
+ expect(Consumed.prototype.render).to.have.been.calledTwice;
+ // expect(Consumed.prototype.render).to.have.been.calledWithMatch({ ...UPDATED_CONTEXT }, {}, { ['__cC' + (ctxId - 1)]: {} });
+ expect(scratch.innerHTML).to.equal(
+ '<div><div><strong>b</strong></div></div>'
+ );
+ setTimeout(() => {
+ expect(Consumed.prototype.render).to.have.been.calledTwice;
+ done();
+ });
+ });
+
+ it('should keep the right context at the right "depth"', () => {
+ const { Provider, Consumer } = createContext();
+ const CONTEXT = { theme: 'a', global: 1 };
+ const NESTED_CONTEXT = { theme: 'b', global: 1 };
+
+ let receivedData;
+ let receivedNestedData;
+
+ class Inner extends Component {
+ render(props) {
+ return (
+ <div>
+ {props.theme} - {props.global}
+ </div>
+ );
+ }
+ }
+ class Nested extends Component {
+ render(props) {
+ return (
+ <div>
+ {props.theme} - {props.global}
+ </div>
+ );
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'render');
+ sinon.spy(Nested.prototype, 'render');
+
+ render(
+ <Provider value={CONTEXT}>
+ <Provider value={NESTED_CONTEXT}>
+ <Consumer>
+ {data => {
+ receivedNestedData = data;
+ return <Nested {...data} />;
+ }}
+ </Consumer>
+ </Provider>
+ <Consumer>
+ {data => {
+ receivedData = data;
+ return <Inner {...data} />;
+ }}
+ </Consumer>
+ </Provider>,
+ scratch
+ );
+
+ // initial render does not invoke anything but render():
+ expect(Nested.prototype.render).to.have.been.calledWithMatch({
+ ...NESTED_CONTEXT
+ });
+ expect(Inner.prototype.render).to.have.been.calledWithMatch({ ...CONTEXT });
+ expect(receivedData).to.equal(CONTEXT);
+ expect(receivedNestedData).to.equal(NESTED_CONTEXT);
+
+ expect(scratch.innerHTML).to.equal('<div>b - 1</div><div>a - 1</div>');
+ });
+
+ it("should not re-render the consumer if the context doesn't change", () => {
+ const { Provider, Consumer } = createContext();
+ const CONTEXT = { i: 1 };
+
+ class NoUpdate extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return this.props.children;
+ }
+ }
+
+ class Inner extends Component {
+ render(props) {
+ return <div>{props.i}</div>;
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'render');
+
+ render(
+ <Provider value={CONTEXT}>
+ <NoUpdate>
+ <Consumer>{data => <Inner {...data} />}</Consumer>
+ </NoUpdate>
+ </Provider>,
+ scratch
+ );
+
+ render(
+ <Provider value={CONTEXT}>
+ <NoUpdate>
+ <Consumer>{data => <Inner {...data} />}</Consumer>
+ </NoUpdate>
+ </Provider>,
+ scratch
+ );
+
+ // Rendered twice, should called just one 'Consumer' render
+ expect(Inner.prototype.render).to.have.been.calledOnce.and.calledWithMatch(
+ CONTEXT
+ );
+ expect(scratch.innerHTML).to.equal('<div>1</div>');
+
+ act(() => {
+ render(
+ <Provider value={{ i: 2 }}>
+ <NoUpdate>
+ <Consumer>{data => <Inner {...data} />}</Consumer>
+ </NoUpdate>
+ </Provider>,
+ scratch
+ );
+ });
+
+ // Rendered three times, should call 'Consumer' render two times
+ expect(
+ Inner.prototype.render
+ ).to.have.been.calledTwice.and.calledWithMatch({ i: 2 });
+ expect(scratch.innerHTML).to.equal('<div>2</div>');
+ });
+
+ it('should allow for updates of props', () => {
+ let app;
+ const { Provider, Consumer } = createContext();
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ status: 'initial'
+ };
+
+ this.renderInner = this.renderInner.bind(this);
+
+ app = this;
+ }
+
+ renderInner(value) {
+ return (
+ <p>
+ {value}: {this.state.status}
+ </p>
+ );
+ }
+
+ render() {
+ return (
+ <Provider value="value">
+ <Consumer>{this.renderInner}</Consumer>
+ </Provider>
+ );
+ }
+ }
+
+ act(() => {
+ render(<App />, scratch);
+ });
+
+ expect(scratch.innerHTML).to.equal('<p>value: initial</p>');
+
+ act(() => {
+ app.setState({ status: 'updated' });
+ rerender();
+ });
+
+ expect(scratch.innerHTML).to.equal('<p>value: updated</p>');
+ });
+
+ it('should re-render the consumer if the children change', () => {
+ const { Provider, Consumer } = createContext();
+ const CONTEXT = { i: 1 };
+
+ class Inner extends Component {
+ render(props) {
+ return <div>{props.i}</div>;
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'render');
+
+ act(() => {
+ render(
+ <Provider value={CONTEXT}>
+ <Consumer>{data => <Inner {...data} />}</Consumer>
+ </Provider>,
+ scratch
+ );
+
+ // Not calling re-render since it's gonna get called with the same Consumer function
+ render(
+ <Provider value={CONTEXT}>
+ <Consumer>{data => <Inner {...data} />}</Consumer>
+ </Provider>,
+ scratch
+ );
+ });
+
+ // Rendered twice, with two different children for consumer, should render twice
+ expect(Inner.prototype.render).to.have.been.calledTwice;
+ expect(scratch.innerHTML).to.equal('<div>1</div>');
+ });
+
+ it('should not rerender consumers that have been unmounted', () => {
+ const { Provider, Consumer } = createContext(0);
+
+ const Inner = sinon.spy(props => <div>{props.value}</div>);
+
+ let toggleConsumer;
+ let changeValue;
+ class App extends Component {
+ constructor() {
+ super();
+
+ this.state = { value: 0, show: true };
+ changeValue = value => this.setState({ value });
+ toggleConsumer = () => this.setState(({ show }) => ({ show: !show }));
+ }
+ render(props, state) {
+ return (
+ <Provider value={state.value}>
+ <div>
+ {state.show ? (
+ <Consumer>{data => <Inner value={data} />}</Consumer>
+ ) : null}
+ </div>
+ </Provider>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal('<div><div>0</div></div>');
+ expect(Inner).to.have.been.calledOnce;
+
+ changeValue(1);
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div><div>1</div></div>');
+ expect(Inner).to.have.been.calledTwice;
+
+ toggleConsumer();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ expect(Inner).to.have.been.calledTwice;
+
+ changeValue(2);
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ expect(Inner).to.have.been.calledTwice;
+ });
+
+ describe('class.contextType', () => {
+ it('should use default value', () => {
+ const ctx = createContext('foo');
+
+ let actual;
+ class App extends Component {
+ render() {
+ actual = this.context;
+ return <div>bar</div>;
+ }
+ }
+
+ App.contextType = ctx;
+
+ render(<App />, scratch);
+ expect(actual).to.deep.equal('foo');
+ });
+
+ it('should use the value of the nearest Provider', () => {
+ const ctx = createContext('foo');
+
+ let actual;
+ class App extends Component {
+ render() {
+ actual = this.context;
+ return <div>bar</div>;
+ }
+ }
+
+ App.contextType = ctx;
+ const Provider = ctx.Provider;
+
+ render(
+ <Provider value="bar">
+ <Provider value="bob">
+ <App />
+ </Provider>
+ </Provider>,
+ scratch
+ );
+ expect(actual).to.deep.equal('bob');
+ });
+
+ it('should restore legacy context for children', () => {
+ const Foo = createContext('foo');
+ const spy = sinon.spy();
+
+ class NewContext extends Component {
+ render() {
+ return <div>{this.props.children}</div>;
+ }
+ }
+
+ class OldContext extends Component {
+ getChildContext() {
+ return { foo: 'foo' };
+ }
+
+ render() {
+ return <div>{this.props.children}</div>;
+ }
+ }
+
+ class Inner extends Component {
+ render() {
+ spy(this.context);
+ return <div>Inner</div>;
+ }
+ }
+
+ NewContext.contextType = Foo;
+
+ render(
+ <Foo.Provider value="bar">
+ <OldContext>
+ <NewContext>
+ <Inner />
+ </NewContext>
+ </OldContext>
+ </Foo.Provider>,
+ scratch
+ );
+
+ expect(spy).to.be.calledWithMatch({ foo: 'foo' });
+ });
+
+ it('should call componentWillUnmount', () => {
+ let Foo = createContext('foo');
+ let spy = sinon.spy();
+
+ let instance;
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ instance = this;
+ }
+
+ componentWillUnmount() {
+ spy(this);
+ }
+
+ render() {
+ return <div />;
+ }
+ }
+
+ App.contextType = Foo;
+
+ render(
+ <Foo.Provider value="foo">
+ <App />
+ </Foo.Provider>,
+ scratch
+ );
+
+ render(null, scratch);
+
+ expect(spy).to.be.calledOnce;
+ expect(spy.getCall(0).args[0]).to.equal(instance);
+ });
+
+ it('should order updates correctly', () => {
+ const events = [];
+ let update;
+ const Store = createContext();
+
+ class Root extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { id: 0 };
+ update = this.updateStore = this.updateStore.bind(this);
+ }
+
+ updateStore() {
+ this.setState(state => ({ id: state.id + 1 }));
+ }
+
+ render() {
+ return (
+ <Store.Provider value={this.state.id}>
+ <App />
+ </Store.Provider>
+ );
+ }
+ }
+
+ class App extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return <Store.Consumer>{id => <Parent key={id} />}</Store.Consumer>;
+ }
+ }
+
+ function Parent(props) {
+ return <Store.Consumer>{id => <Child id={id} />}</Store.Consumer>;
+ }
+
+ class Child extends Component {
+ componentDidMount() {
+ events.push('mount ' + this.props.id);
+ }
+
+ componentDidUpdate(prevProps) {
+ events.push('update ' + prevProps.id + ' to ' + this.props.id);
+ }
+
+ componentWillUnmount() {
+ events.push('unmount ' + this.props.id);
+ }
+
+ render() {
+ events.push('render ' + this.props.id);
+ return this.props.id;
+ }
+ }
+
+ render(<Root />, scratch);
+ expect(events).to.deep.equal(['render 0', 'mount 0']);
+
+ update();
+ rerender();
+ expect(events).to.deep.equal([
+ 'render 0',
+ 'mount 0',
+ 'render 1',
+ 'unmount 0',
+ 'mount 1'
+ ]);
+ });
+ });
+
+ it('should rerender when reset to defaultValue', () => {
+ const defaultValue = { state: 'hi' };
+ const context = createContext(defaultValue);
+ let set;
+
+ class NoUpdate extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return <context.Consumer>{v => <p>{v.state}</p>}</context.Consumer>;
+ }
+ }
+
+ class Provider extends Component {
+ constructor(props) {
+ super(props);
+ this.state = defaultValue;
+ set = this.setState.bind(this);
+ }
+
+ render() {
+ return (
+ <context.Provider value={this.state}>
+ <NoUpdate />
+ </context.Provider>
+ );
+ }
+ }
+
+ render(<Provider />, scratch);
+ expect(scratch.innerHTML).to.equal('<p>hi</p>');
+
+ set({ state: 'bye' });
+ rerender();
+ expect(scratch.innerHTML).to.equal('<p>bye</p>');
+
+ set(defaultValue);
+ rerender();
+ expect(scratch.innerHTML).to.equal('<p>hi</p>');
+ });
+});
diff --git a/preact/test/browser/customBuiltInElements.test.js b/preact/test/browser/customBuiltInElements.test.js
new file mode 100644
index 0000000..eb8ce17
--- /dev/null
+++ b/preact/test/browser/customBuiltInElements.test.js
@@ -0,0 +1,40 @@
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../_util/helpers';
+
+/** @jsx createElement */
+
+const runSuite = typeof customElements == 'undefined' ? xdescribe : describe;
+
+runSuite('customised built-in elements', () => {
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should create built in elements correctly', () => {
+ class Foo extends Component {
+ render() {
+ return <div is="built-in" />;
+ }
+ }
+
+ const spy = sinon.spy();
+
+ class BuiltIn extends HTMLDivElement {
+ connectedCallback() {
+ spy();
+ }
+ }
+
+ customElements.define('built-in', BuiltIn, { extends: 'div' });
+
+ render(<Foo />, scratch);
+
+ expect(spy).to.have.been.calledOnce;
+ });
+});
diff --git a/preact/test/browser/events.test.js b/preact/test/browser/events.test.js
new file mode 100644
index 0000000..2e43cba
--- /dev/null
+++ b/preact/test/browser/events.test.js
@@ -0,0 +1,202 @@
+import { createElement, render } from 'preact';
+import {
+ setupScratch,
+ teardown,
+ supportsPassiveEvents
+} from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('event handling', () => {
+ let scratch, proto;
+
+ function fireEvent(on, type) {
+ let e = document.createEvent('Event');
+ e.initEvent(type, true, true);
+ on.dispatchEvent(e);
+ }
+
+ beforeEach(() => {
+ scratch = setupScratch();
+
+ proto = document.createElement('div').constructor.prototype;
+
+ sinon.spy(proto, 'addEventListener');
+ sinon.spy(proto, 'removeEventListener');
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+
+ proto.addEventListener.restore();
+ proto.removeEventListener.restore();
+ });
+
+ it('should only register on* functions as handlers', () => {
+ let click = () => {},
+ onclick = () => {};
+
+ render(<div click={click} onClick={onclick} />, scratch);
+
+ expect(scratch.childNodes[0].attributes.length).to.equal(0);
+
+ expect(
+ proto.addEventListener
+ ).to.have.been.calledOnce.and.to.have.been.calledWithExactly(
+ 'click',
+ sinon.match.func,
+ false
+ );
+ });
+
+ it('should only register truthy values as handlers', () => {
+ function fooHandler() {}
+ const falsyHandler = false;
+
+ render(<div onClick={falsyHandler} onOtherClick={fooHandler} />, scratch);
+
+ expect(
+ proto.addEventListener
+ ).to.have.been.calledOnce.and.to.have.been.calledWithExactly(
+ 'OtherClick',
+ sinon.match.func,
+ false
+ );
+
+ expect(proto.addEventListener).not.to.have.been.calledWith('Click');
+ expect(proto.addEventListener).not.to.have.been.calledWith('click');
+ });
+
+ it('should support native event names', () => {
+ let click = sinon.spy(),
+ mousedown = sinon.spy();
+
+ render(<div onclick={() => click(1)} onmousedown={mousedown} />, scratch);
+
+ expect(proto.addEventListener)
+ .to.have.been.calledTwice.and.to.have.been.calledWith('click')
+ .and.calledWith('mousedown');
+
+ fireEvent(scratch.childNodes[0], 'click');
+ expect(click).to.have.been.calledOnce.and.calledWith(1);
+ });
+
+ it('should support camel-case event names', () => {
+ let click = sinon.spy(),
+ mousedown = sinon.spy();
+
+ render(<div onClick={() => click(1)} onMouseDown={mousedown} />, scratch);
+
+ expect(proto.addEventListener)
+ .to.have.been.calledTwice.and.to.have.been.calledWith('click')
+ .and.calledWith('mousedown');
+
+ fireEvent(scratch.childNodes[0], 'click');
+ expect(click).to.have.been.calledOnce.and.calledWith(1);
+ });
+
+ it('should update event handlers', () => {
+ let click1 = sinon.spy();
+ let click2 = sinon.spy();
+
+ render(<div onClick={click1} />, scratch);
+
+ fireEvent(scratch.childNodes[0], 'click');
+ expect(click1).to.have.been.calledOnce;
+ expect(click2).to.not.have.been.called;
+
+ click1.resetHistory();
+ click2.resetHistory();
+
+ render(<div onClick={click2} />, scratch);
+
+ fireEvent(scratch.childNodes[0], 'click');
+ expect(click1).to.not.have.been.called;
+ expect(click2).to.have.been.called;
+ });
+
+ it('should remove event handlers', () => {
+ let click = sinon.spy(),
+ mousedown = sinon.spy();
+
+ render(<div onClick={() => click(1)} onMouseDown={mousedown} />, scratch);
+ render(<div onClick={() => click(2)} />, scratch);
+
+ expect(proto.removeEventListener).to.have.been.calledWith('mousedown');
+
+ fireEvent(scratch.childNodes[0], 'mousedown');
+ expect(mousedown).not.to.have.been.called;
+
+ proto.removeEventListener.resetHistory();
+ click.resetHistory();
+ mousedown.resetHistory();
+
+ render(<div />, scratch);
+
+ expect(proto.removeEventListener).to.have.been.calledWith('click');
+
+ fireEvent(scratch.childNodes[0], 'click');
+ expect(click).not.to.have.been.called;
+ });
+
+ it('should register events not appearing on dom nodes', () => {
+ let onAnimationEnd = () => {};
+
+ render(<div onanimationend={onAnimationEnd} />, scratch);
+ expect(
+ proto.addEventListener
+ ).to.have.been.calledOnce.and.to.have.been.calledWithExactly(
+ 'animationend',
+ sinon.match.func,
+ false
+ );
+ });
+
+ // Skip test if browser doesn't support passive events
+ if (supportsPassiveEvents()) {
+ it('should use capturing for event props ending with *Capture', () => {
+ let click = sinon.spy(),
+ focus = sinon.spy();
+
+ render(
+ <div onClickCapture={click} onFocusCapture={focus}>
+ <button />
+ </div>,
+ scratch
+ );
+
+ let root = scratch.firstChild;
+ root.firstElementChild.click();
+ root.firstElementChild.focus();
+
+ expect(click, 'click').to.have.been.calledOnce;
+
+ // Focus delegation requires a 50b hack I'm not sure we want to incur
+ expect(focus, 'focus').to.have.been.calledOnce;
+
+ // IE doesn't set it
+ if (!/Edge/.test(navigator.userAgent)) {
+ expect(click).to.have.been.calledWithMatch({ eventPhase: 0 }); // capturing
+ expect(focus).to.have.been.calledWithMatch({ eventPhase: 0 }); // capturing
+ }
+ });
+
+ it('should support both capturing and non-capturing events on the same element', () => {
+ let click = sinon.spy(),
+ clickCapture = sinon.spy();
+
+ render(
+ <div onClick={click} onClickCapture={clickCapture}>
+ <button />
+ </div>,
+ scratch
+ );
+
+ let root = scratch.firstChild;
+ root.firstElementChild.click();
+
+ expect(clickCapture, 'click').to.have.been.calledOnce;
+ expect(click, 'click').to.have.been.calledOnce;
+ });
+ }
+});
diff --git a/preact/test/browser/focus.test.js b/preact/test/browser/focus.test.js
new file mode 100644
index 0000000..004a87a
--- /dev/null
+++ b/preact/test/browser/focus.test.js
@@ -0,0 +1,548 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component, Fragment, hydrate } from 'preact';
+import { setupScratch, teardown } from '../_util/helpers';
+import { div, span, input as inputStr, h1, h2 } from '../_util/dom';
+
+/** @jsx createElement */
+/* eslint-disable react/jsx-boolean-value */
+
+describe('focus', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ /** @type {() => void} */
+ let prepend, append, shift, pop;
+
+ /** @type {() => void} */
+ let getDynamicListHtml;
+
+ class DynamicList extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ before: props.initialBefore || [],
+ after: props.initialAfter || []
+ };
+
+ prepend = () => {
+ const before = this.state.before;
+ const newValue = before[0] ? before[0] - 1 : 1;
+ this.setState({
+ before: [newValue, ...before]
+ });
+ };
+
+ append = () => {
+ const after = this.state.after;
+ const lastValue = after[after.length - 1];
+ const newValue = lastValue ? lastValue + 1 : 2;
+ this.setState({
+ after: [...after, newValue]
+ });
+ };
+
+ shift = () => {
+ this.setState({
+ before: this.state.before.slice(1)
+ });
+ };
+
+ pop = () => {
+ this.setState({
+ after: this.state.after.slice(0, -1)
+ });
+ };
+
+ const liHtml = this.props.as == Input ? inputStr : span;
+ getDynamicListHtml = () =>
+ div([
+ ...this.state.before.map(liHtml),
+ '<input id="input-0" type="text">',
+ ...this.state.after.map(liHtml)
+ ]);
+ }
+
+ render(props, state) {
+ const ListComponent = props.as || ListItem;
+ return (
+ <div>
+ {state.before.map(value => (
+ <ListComponent key={props.unkeyed ? undefined : value}>
+ {value}
+ </ListComponent>
+ ))}
+ <InputWithId id="0" />
+ {state.after.map(value => (
+ <ListComponent key={props.unkeyed ? undefined : value}>
+ {value}
+ </ListComponent>
+ ))}
+ </div>
+ );
+ }
+ }
+
+ const List = ({ children }) => <div>{children}</div>;
+ const ListItem = ({ children }) => <span>{children}</span>;
+ const InputWithId = ({ id }) => <input id={`input-${id}`} type="text" />;
+ const Input = () => <input type="text" />;
+
+ function focusInput() {
+ if (!scratch) return;
+
+ const input = scratch.querySelector('input');
+ input.value = 'a word';
+ input.focus();
+ input.setSelectionRange(2, 5);
+
+ expect(document.activeElement).to.equalNode(input);
+
+ return input;
+ }
+
+ function focusInputById() {
+ if (!scratch) return;
+
+ /** @type {HTMLInputElement} */
+ const input = scratch.querySelector('#input-0');
+ input.value = 'a word';
+ input.focus();
+ input.setSelectionRange(2, 5);
+
+ expect(document.activeElement).to.equalNode(input);
+
+ return input;
+ }
+
+ /**
+ * Validate an input tag has maintained focus
+ * @param {HTMLInputElement} input The input to validate
+ * @param {string} [message] Message to show if the activeElement is not
+ * equal to the `input` parameter
+ */
+ function validateFocus(input, message) {
+ expect(document.activeElement).to.equalNode(input, message);
+ expect(input.selectionStart).to.equal(2);
+ expect(input.selectionEnd).to.equal(5);
+ }
+
+ /**
+ * @param {Array<number | string>} before
+ * @param {Array<number | string>} after
+ */
+ function getListHtml(before, after) {
+ return div([
+ ...before.map(i => span(i)),
+ inputStr(),
+ ...after.map(i => span(i))
+ ]);
+ }
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it.skip('should maintain focus when swapping elements', () => {
+ render(
+ <List>
+ <Input />
+ <ListItem>fooo</ListItem>
+ </List>,
+ scratch
+ );
+
+ const input = focusInput();
+ expect(scratch.innerHTML).to.equal(getListHtml([], ['fooo']));
+
+ render(
+ <List>
+ <ListItem>fooo</ListItem>
+ <Input />
+ </List>,
+ scratch
+ );
+ validateFocus(input);
+ expect(scratch.innerHTML).to.equal(getListHtml(['fooo'], []));
+ });
+
+ it('should maintain focus when moving the input around', () => {
+ function App({ showFirst, showLast }) {
+ return (
+ <List>
+ {showFirst ? <ListItem>1</ListItem> : null}
+ <Input />
+ {showLast ? <ListItem>2</ListItem> : null}
+ </List>
+ );
+ }
+
+ render(<App showFirst={true} showLast={true} />, scratch);
+
+ let input = focusInput();
+ render(<App showFirst={false} showLast={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(getListHtml([], [2]));
+ validateFocus(input, 'move from middle to beginning');
+
+ input = focusInput();
+ render(<App showFirst={true} showLast={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(getListHtml([1], [2]));
+ validateFocus(input, 'move from beginning to middle');
+
+ input = focusInput();
+ render(<App showFirst={true} showLast={false} />, scratch);
+ expect(scratch.innerHTML).to.equal(getListHtml([1], []));
+ validateFocus(input, 'move from middle to end');
+
+ input = focusInput();
+ render(<App showFirst={true} showLast={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(getListHtml([1], [2]));
+ validateFocus(input, 'move from end to middle');
+ });
+
+ it('should maintain focus when adding children around input', () => {
+ render(<DynamicList />, scratch);
+
+ let input = focusInput();
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+
+ prepend();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'insert sibling before');
+
+ append();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'insert sibling after');
+
+ append();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'insert sibling after again');
+
+ prepend();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'insert sibling before again');
+ });
+
+ it('should maintain focus when adding children around input (unkeyed)', () => {
+ // Related preactjs/preact#2446
+
+ render(<DynamicList unkeyed />, scratch);
+
+ let input = focusInput();
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+
+ prepend();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'insert sibling before');
+
+ append();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'insert sibling after');
+
+ append();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'insert sibling after again');
+
+ prepend();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'insert sibling before again');
+ });
+
+ it('should maintain focus when conditional elements around input', () => {
+ render(
+ <List>
+ <ListItem>0</ListItem>
+ <ListItem>1</ListItem>
+ <Input />
+ <ListItem>2</ListItem>
+ <ListItem>3</ListItem>
+ </List>,
+ scratch
+ );
+
+ let input = focusInput();
+ expect(scratch.innerHTML).to.equal(getListHtml([0, 1], [2, 3]));
+
+ render(
+ <List>
+ {false && <ListItem>0</ListItem>}
+ <ListItem>1</ListItem>
+ <Input />
+ <ListItem>2</ListItem>
+ <ListItem>3</ListItem>
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(getListHtml([1], [2, 3]));
+ validateFocus(input, 'remove sibling before');
+
+ render(
+ <List>
+ {false && <ListItem>0</ListItem>}
+ <ListItem>1</ListItem>
+ <Input />
+ <ListItem>2</ListItem>
+ {false && <ListItem>3</ListItem>}
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(getListHtml([1], [2]));
+ validateFocus(input, 'remove sibling after');
+
+ render(
+ <List>
+ {false && <ListItem>0</ListItem>}
+ <ListItem>1</ListItem>
+ <Input />
+ {false && <ListItem>2</ListItem>}
+ {false && <ListItem>3</ListItem>}
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(getListHtml([1], []));
+ validateFocus(input, 'remove sibling after 2');
+
+ render(
+ <List>
+ {false && <ListItem>0</ListItem>}
+ {false && <ListItem>1</ListItem>}
+ <Input />
+ {false && <ListItem>2</ListItem>}
+ {false && <ListItem>3</ListItem>}
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(getListHtml([], []));
+ validateFocus(input, 'remove sibling before 2');
+ });
+
+ it('should maintain focus when removing elements around input', () => {
+ render(
+ <DynamicList initialBefore={[0, 1]} initialAfter={[2, 3]} />,
+ scratch
+ );
+
+ let input = focusInput();
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+
+ shift();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'remove sibling before');
+
+ pop();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'remove sibling after');
+
+ pop();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'remove sibling after 2');
+
+ shift();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'remove sibling before 2');
+ });
+
+ it('should maintain focus when adding input next to the current input', () => {
+ render(<DynamicList as={Input} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+
+ let input = focusInputById();
+ prepend();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'add input before');
+
+ input = focusInputById();
+ append();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'add input after');
+
+ input = focusInputById();
+ prepend();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'add input first place');
+
+ input = focusInputById();
+ prepend();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(getDynamicListHtml());
+ validateFocus(input, 'add input before');
+ });
+
+ it('should maintain focus when hydrating', () => {
+ const html = div([span('1'), span('2'), span('3'), inputStr()]);
+
+ scratch.innerHTML = html;
+ const input = focusInput();
+
+ hydrate(
+ <List>
+ <ListItem>1</ListItem>
+ <ListItem>2</ListItem>
+ <ListItem>3</ListItem>
+ <Input />
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(html);
+ validateFocus(input);
+ });
+
+ it('should keep focus in Fragments', () => {
+ /** @type {HTMLInputElement} */
+ let input;
+
+ /** @type {() => void} */
+ let updateState;
+
+ class App extends Component {
+ constructor() {
+ super();
+ this.state = { active: false };
+ updateState = () => this.setState(prev => ({ active: !prev.active }));
+ }
+
+ render() {
+ return (
+ <div>
+ <h1>Heading</h1>
+ {!this.state.active ? (
+ <Fragment>
+ foobar
+ <Fragment>
+ Hello World
+ <h2>yo</h2>
+ </Fragment>
+ <input type="text" ref={i => (input = i)} />
+ </Fragment>
+ ) : (
+ <Fragment>
+ <Fragment>
+ Hello World
+ <h2>yo</h2>
+ </Fragment>
+ foobar
+ <input type="text" ref={i => (input = i)} />
+ </Fragment>
+ )}
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+
+ input.focus();
+ updateState();
+
+ expect(document.activeElement).to.equalNode(input, 'Before rerender');
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ div([h1('Heading'), 'Hello World', h2('yo'), 'foobar', inputStr()])
+ );
+ expect(document.activeElement).to.equalNode(input, 'After rerender');
+ });
+
+ it('should keep text selection', () => {
+ /** @type {HTMLInputElement} */
+ let input;
+
+ /** @type {() => void} */
+ let updateState;
+
+ class App extends Component {
+ constructor() {
+ super();
+ this.state = { active: false };
+ updateState = () => this.setState(prev => ({ active: !prev.active }));
+ }
+
+ render() {
+ return (
+ <div>
+ <h1>Heading</h1>
+ {!this.state.active ? (
+ <Fragment>
+ foobar
+ <Fragment>
+ Hello World
+ <h2>yo</h2>
+ </Fragment>
+ <input type="text" ref={i => (input = i)} value="foobar" />
+ </Fragment>
+ ) : (
+ <Fragment>
+ <Fragment>
+ Hello World
+ <h2>yo</h2>
+ </Fragment>
+ foobar
+ <input type="text" ref={i => (input = i)} value="foobar" />
+ </Fragment>
+ )}
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+
+ input.focus();
+ input.setSelectionRange(2, 5);
+ updateState();
+
+ expect(document.activeElement).to.equalNode(input, 'Before rerender');
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ div([h1('Heading'), 'Hello World', h2('yo'), 'foobar', inputStr()])
+ );
+ expect(input.selectionStart).to.equal(2);
+ expect(input.selectionEnd).to.equal(5);
+ expect(document.activeElement).to.equalNode(input, 'After rerender');
+ });
+});
diff --git a/preact/test/browser/fragments.test.js b/preact/test/browser/fragments.test.js
new file mode 100644
index 0000000..882aeed
--- /dev/null
+++ b/preact/test/browser/fragments.test.js
@@ -0,0 +1,2805 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component, Fragment } from 'preact';
+import { setupScratch, teardown } from '../_util/helpers';
+import { span, div, ul, ol, li, section } from '../_util/dom';
+import { logCall, clearLog, getLog } from '../_util/logCall';
+
+/** @jsx createElement */
+/* eslint-disable react/jsx-boolean-value */
+
+describe('Fragment', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ let ops = [];
+
+ function expectDomLogToBe(expectedOperations, message) {
+ expect(getLog()).to.deep.equal(expectedOperations, message);
+ }
+
+ class Stateful extends Component {
+ componentDidUpdate() {
+ ops.push('Update Stateful');
+ }
+ render() {
+ return <div>Hello</div>;
+ }
+ }
+
+ let resetInsertBefore;
+ let resetAppendChild;
+ let resetRemoveChild;
+
+ before(() => {
+ resetInsertBefore = logCall(Element.prototype, 'insertBefore');
+ resetAppendChild = logCall(Element.prototype, 'appendChild');
+ resetRemoveChild = logCall(Element.prototype, 'removeChild');
+ // logCall(CharacterData.prototype, 'remove');
+ // TODO: Consider logging setting set data
+ // ```
+ // var orgData = Object.getOwnPropertyDescriptor(CharacterData.prototype, 'data')
+ // Object.defineProperty(CharacterData.prototype, 'data', {
+ // ...orgData,
+ // get() { return orgData.get.call(this) },
+ // set(value) { console.log('setData', value); orgData.set.call(this, value); }
+ // });
+ // ```
+ });
+
+ after(() => {
+ resetInsertBefore();
+ resetAppendChild();
+ resetRemoveChild();
+ });
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ ops = [];
+
+ clearLog();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should not render empty Fragment', () => {
+ render(<Fragment />, scratch);
+ expect(scratch.innerHTML).to.equal('');
+ });
+
+ it('should render a single child', () => {
+ clearLog();
+ render(
+ <Fragment>
+ <span>foo</span>
+ </Fragment>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal('<span>foo</span>');
+ expectDomLogToBe([
+ '<span>.appendChild(#text)',
+ '<div>.appendChild(<span>foo)'
+ ]);
+ });
+
+ it('should render multiple children via noop renderer', () => {
+ render(
+ <Fragment>
+ hello <span>world</span>
+ </Fragment>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal('hello <span>world</span>');
+ });
+
+ it('should not crash with null as last child', () => {
+ let fn = () => {
+ render(
+ <Fragment>
+ <span>world</span>
+ {null}
+ </Fragment>,
+ scratch
+ );
+ };
+ expect(fn).not.to.throw();
+ expect(scratch.innerHTML).to.equal('<span>world</span>');
+
+ render(
+ <Fragment>
+ <span>world</span>
+ <p>Hello</p>
+ </Fragment>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal('<span>world</span><p>Hello</p>');
+
+ expect(fn).not.to.throw();
+ expect(scratch.innerHTML).to.equal('<span>world</span>');
+
+ render(
+ <Fragment>
+ <span>world</span>
+ {null}
+ <span>world</span>
+ </Fragment>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal('<span>world</span><span>world</span>');
+
+ render(
+ <Fragment>
+ <span>world</span>
+ Hello
+ <span>world</span>
+ </Fragment>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal(
+ '<span>world</span>Hello<span>world</span>'
+ );
+ });
+
+ it('should handle reordering components that return Fragments #1325', () => {
+ class X extends Component {
+ render() {
+ return <Fragment>{this.props.children}</Fragment>;
+ }
+ }
+
+ class App extends Component {
+ render(props) {
+ if (this.props.i === 0) {
+ return (
+ <div>
+ <X key={1}>1</X>
+ <X key={2}>2</X>
+ </div>
+ );
+ }
+ return (
+ <div>
+ <X key={2}>2</X>
+ <X key={1}>1</X>
+ </div>
+ );
+ }
+ }
+
+ render(<App i={0} />, scratch);
+ expect(scratch.textContent).to.equal('12');
+ render(<App i={1} />, scratch);
+ expect(scratch.textContent).to.equal('21');
+ });
+
+ it('should handle changing node type within a Component that returns a Fragment #1326', () => {
+ class X extends Component {
+ render() {
+ return this.props.children;
+ }
+ }
+
+ /** @type {(newState: any) => void} */
+ let setState;
+ class App extends Component {
+ constructor(props, context) {
+ super(props, context);
+
+ this.state = { i: 0 };
+ setState = this.setState.bind(this);
+ }
+
+ render() {
+ if (this.state.i === 0) {
+ return (
+ <div>
+ <X>
+ <span>1</span>
+ </X>
+ <X>
+ <span>2</span>
+ <span>2</span>
+ </X>
+ </div>
+ );
+ }
+
+ return (
+ <div>
+ <X>
+ <div>1</div>
+ </X>
+ <X>
+ <span>2</span>
+ <span>2</span>
+ </X>
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal(div([span(1), span(2), span(2)]));
+
+ setState({ i: 1 });
+
+ clearLog();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(div([div(1), span(2), span(2)]));
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>122.insertBefore(<div>1, <span>1)',
+ '<span>1.remove()'
+ ]);
+ });
+
+ it('should preserve state of children with 1 level nesting', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Stateful key="a" />
+ ) : (
+ <Fragment>
+ <Stateful key="a" />
+ <div key="b">World</div>
+ </Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.deep.equal('<div>Hello</div><div>World</div>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.deep.equal('<div>Hello</div>');
+ });
+
+ it('should preserve state between top-level fragments', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Fragment>
+ <Stateful />
+ </Fragment>
+ ) : (
+ <Fragment>
+ <Stateful />
+ </Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ expectDomLogToBe([]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ expectDomLogToBe([]);
+ });
+
+ it('should preserve state of children nested at same level', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Fragment>
+ <Fragment>
+ <Fragment>
+ <Stateful key="a" />
+ </Fragment>
+ </Fragment>
+ </Fragment>
+ ) : (
+ <Fragment>
+ <Fragment>
+ <Fragment>
+ <div />
+ <Stateful key="a" />
+ </Fragment>
+ </Fragment>
+ </Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div></div><div>Hello</div>');
+ expectDomLogToBe(['<div>Hello.insertBefore(<div>, <div>Hello)']);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ expectDomLogToBe(['<div>.remove()']);
+ });
+
+ it('should not preserve state in non-top-level fragment nesting', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Fragment>
+ <Fragment>
+ <Stateful key="a" />
+ </Fragment>
+ </Fragment>
+ ) : (
+ <Fragment>
+ <Stateful key="a" />
+ </Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>Hello.insertBefore(<div>Hello, <div>Hello)',
+ '<div>Hello.remove()'
+ ]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ // Re-append the Stateful DOM since it has been re-parented
+ '<div>Hello.insertBefore(<div>Hello, <div>Hello)',
+ '<div>Hello.remove()'
+ ]);
+ });
+
+ it('should not preserve state of children if nested 2 levels without siblings', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Stateful key="a" />
+ ) : (
+ <Fragment>
+ <Fragment>
+ <Stateful key="a" />
+ </Fragment>
+ </Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>Hello.insertBefore(<div>Hello, <div>Hello)',
+ '<div>Hello.remove()'
+ ]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>Hello.insertBefore(<div>Hello, <div>Hello)',
+ '<div>Hello.remove()'
+ ]);
+ });
+
+ it('should just render children for fragments', () => {
+ class Comp extends Component {
+ render() {
+ return (
+ <Fragment>
+ <div>Child1</div>
+ <div>Child2</div>
+ </Fragment>
+ );
+ }
+ }
+
+ render(<Comp />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Child1</div><div>Child2</div>');
+ });
+
+ it('should not preserve state of children if nested 2 levels with siblings', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Stateful key="a" />
+ ) : (
+ <Fragment>
+ <Fragment>
+ <Stateful key="a" />
+ </Fragment>
+ <div />
+ </Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div><div></div>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ });
+
+ it('should preserve state between array nested in fragment and fragment', () => {
+ // In this test case, the children of the Fragment in Foo end up being the same when flattened.
+ //
+ // When condition == true, the children of the Fragment are a Stateful VNode.
+ // When condition == false, the children of the Fragment are an Array containing a single
+ // Stateful VNode.
+ //
+ // However, when each of these are flattened (in flattenChildren), they both become
+ // an Array containing a single Stateful VNode. So when diff'ed they are compared together
+ // and the state of Stateful is preserved
+
+ function Foo({ condition }) {
+ return condition ? (
+ <Fragment>
+ <Stateful key="a" />
+ </Fragment>
+ ) : (
+ <Fragment>{[<Stateful key="a" />]}</Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ });
+
+ it('should preserve state between top level fragment and array', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ [<Stateful key="a" />]
+ ) : (
+ <Fragment>
+ <Stateful key="a" />
+ </Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ });
+
+ it('should not preserve state between array nested in fragment and double nested fragment', () => {
+ // In this test case, the children of the Fragment in Foo end up being the different when flattened.
+ //
+ // When condition == true, the children of the Fragment are an Array of Stateful VNode.
+ // When condition == false, the children of the Fragment are another Fragment whose children are
+ // a single Stateful VNode.
+ //
+ // When each of these are flattened (in flattenChildren), the first Fragment stays the same
+ // (Fragment -> [Stateful]). The second Fragment also doesn't change (flattening doesn't erase
+ // Fragments) so it remains Fragment -> Fragment -> Stateful. Therefore when diff'ed these Fragments
+ // separate the two Stateful VNodes into different trees and state is not preserved between them.
+
+ function Foo({ condition }) {
+ return condition ? (
+ <Fragment>{[<Stateful key="a" />]}</Fragment>
+ ) : (
+ <Fragment>
+ <Fragment>
+ <Stateful key="a" />
+ </Fragment>
+ </Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ });
+
+ it('should not preserve state between array nested in fragment and double nested array', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Fragment>{[<Stateful key="a" />]}</Fragment>
+ ) : (
+ [[<Stateful key="a" />]]
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ });
+
+ it('should preserve state between double nested fragment and double nested array', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Fragment>
+ <Fragment>
+ <Stateful key="a" />
+ </Fragment>
+ </Fragment>
+ ) : (
+ [[<Stateful key="a" />]]
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ });
+
+ it('should not preserve state of children when the keys are different', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Fragment key="a">
+ <Stateful />
+ </Fragment>
+ ) : (
+ <Fragment key="b">
+ <Stateful />
+ <span>World</span>
+ </Fragment>
+ );
+ }
+
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div><span>World</span>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ });
+
+ it('should not preserve state between unkeyed and keyed fragment', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <Fragment key="a">
+ <Stateful />
+ </Fragment>
+ ) : (
+ <Fragment>
+ <Stateful />
+ </Fragment>
+ );
+ }
+
+ // React & Preact: has the same behavior for components
+ // https://codesandbox.io/s/57prmy5mx
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal([]);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ });
+
+ it('should preserve state with reordering in multiple levels', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <div>
+ <Fragment key="c">
+ <div>foo</div>
+ <div key="b">
+ <Stateful key="a" />
+ </div>
+ </Fragment>
+ <div>boop</div>
+ </div>
+ ) : (
+ <div>
+ <div>beep</div>
+ <Fragment key="c">
+ <div key="b">
+ <Stateful key="a" />
+ </div>
+ <div>bar</div>
+ </Fragment>
+ </div>
+ );
+ }
+
+ const htmlForTrue = div([div('foo'), div(div('Hello')), div('boop')]);
+
+ const htmlForFalse = div([div('beep'), div(div('Hello')), div('bar')]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(htmlForTrue);
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.equal(htmlForFalse);
+ expectDomLogToBe(
+ [
+ '<div>fooHellobeep.insertBefore(<div>beep, <div>foo)',
+ '<div>beepbarHello.appendChild(<div>bar)'
+ ],
+ 'rendering true to false'
+ );
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.equal(htmlForTrue);
+ expectDomLogToBe(
+ [
+ '<div>beepHellofoo.insertBefore(<div>foo, <div>beep)',
+ '<div>fooboopHello.appendChild(<div>boop)'
+ ],
+ 'rendering false to true'
+ );
+ });
+
+ it('should not preserve state when switching between a keyed fragment and an array', () => {
+ function Foo({ condition }) {
+ return condition ? (
+ <div>
+ {
+ <Fragment key="foo">
+ <span>1</span>
+ <Stateful />
+ </Fragment>
+ }
+ <span>2</span>
+ </div>
+ ) : (
+ <div>
+ {[<span>1</span>, <Stateful />]}
+ <span>2</span>
+ </div>
+ );
+ }
+
+ const html = div([span('1'), div('Hello'), span('2')]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal([]); // Component should not have updated (empty op log)
+ expect(scratch.innerHTML).to.equal(html);
+ expectDomLogToBe([
+ '<span>.appendChild(#text)',
+ '<div>1Hello2.insertBefore(<span>1, <span>1)',
+ '<div>.appendChild(#text)',
+ '<div>11Hello2.insertBefore(<div>Hello, <span>1)',
+ '<div>1Hello1Hello2.insertBefore(<span>2, <span>1)',
+ '<span>1.remove()',
+ '<div>Hello.remove()'
+ ]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal([]); // Component should not have updated (empty op log)
+ expect(scratch.innerHTML).to.equal(html);
+ expectDomLogToBe([
+ '<span>.appendChild(#text)',
+ '<div>1Hello2.insertBefore(<span>1, <span>1)',
+ '<div>.appendChild(#text)',
+ '<div>11Hello2.insertBefore(<div>Hello, <span>1)',
+ '<div>1Hello1Hello2.insertBefore(<span>2, <span>1)',
+ '<span>1.remove()',
+ '<div>Hello.remove()'
+ ]);
+ });
+
+ it('should preserve state when it does not change positions', () => {
+ function Foo({ condition }) {
+ return condition
+ ? [
+ <span />,
+ <Fragment>
+ <Stateful />
+ </Fragment>
+ ]
+ : [
+ <span />,
+ <Fragment>
+ <Stateful />
+ </Fragment>
+ ];
+ }
+
+ render(<Foo condition={true} />, scratch);
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<span></span><div>Hello</div>');
+
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.equal('<span></span><div>Hello</div>');
+ });
+
+ it('should render nested Fragments', () => {
+ clearLog();
+ render(
+ <Fragment>
+ spam
+ <Fragment>foo</Fragment>
+ <Fragment />
+ bar
+ </Fragment>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal('spamfoobar');
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>spam.appendChild(#text)',
+ '<div>spamfoo.appendChild(#text)'
+ ]);
+
+ clearLog();
+ render(
+ <Fragment>
+ <Fragment>foo</Fragment>
+ <Fragment>bar</Fragment>
+ </Fragment>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal('foobar');
+ expectDomLogToBe([
+ '<div>spamfoobar.insertBefore(#text, #text)',
+ '#text.remove()',
+ '#text.remove()'
+ ]);
+ });
+
+ it('should render nested Fragments with siblings', () => {
+ clearLog();
+ render(
+ <div>
+ <div>0</div>
+ <div>1</div>
+ <Fragment>
+ <Fragment>
+ <div>2</div>
+ <div>3</div>
+ </Fragment>
+ </Fragment>
+ <div>4</div>
+ <div>5</div>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(
+ div([div(0), div(1), div(2), div(3), div(4), div(5)])
+ );
+ });
+
+ it('should respect keyed Fragments', () => {
+ /** @type {() => void} */
+ let update;
+
+ class Comp extends Component {
+ constructor() {
+ super();
+ this.state = { key: 'foo' };
+ update = () => this.setState({ key: 'bar' });
+ }
+
+ render() {
+ return <Fragment key={this.state.key}>foo</Fragment>;
+ }
+ }
+ render(<Comp />, scratch);
+ expect(scratch.innerHTML).to.equal('foo');
+
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('foo');
+ });
+
+ it('should support conditionally rendered children', () => {
+ /** @type {() => void} */
+ let update;
+
+ class Comp extends Component {
+ constructor() {
+ super();
+ this.state = { value: true };
+ update = () => this.setState({ value: !this.state.value });
+ }
+
+ render() {
+ return (
+ <Fragment>
+ <span>0</span>
+ {this.state.value && 'foo'}
+ <span>1</span>
+ </Fragment>
+ );
+ }
+ }
+
+ const html = contents => span('0') + contents + span('1');
+
+ render(<Comp />, scratch);
+ expect(scratch.innerHTML).to.equal(html('foo'));
+
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(html(''));
+
+ update();
+ rerender();
+ expect(scratch.innerHTML).to.equal(html('foo'));
+ });
+
+ it('can modify the children of a Fragment', () => {
+ /** @type {() => void} */
+ let push;
+
+ class List extends Component {
+ constructor() {
+ super();
+ this.state = { values: [0, 1, 2] };
+ push = () =>
+ this.setState({
+ values: [...this.state.values, this.state.values.length]
+ });
+ }
+
+ render() {
+ return (
+ <Fragment>
+ {this.state.values.map(value => (
+ <div>{value}</div>
+ ))}
+ </Fragment>
+ );
+ }
+ }
+
+ render(<List />, scratch);
+ expect(scratch.textContent).to.equal('012');
+
+ push();
+ rerender();
+
+ expect(scratch.textContent).to.equal('0123');
+
+ push();
+ rerender();
+
+ expect(scratch.textContent).to.equal('01234');
+ });
+
+ it('should render sibling array children', () => {
+ const Group = ({ title, values }) => (
+ <Fragment>
+ <li>{title}</li>
+ {values.map(value => (
+ <li>{value}</li>
+ ))}
+ </Fragment>
+ );
+
+ const Todo = () => (
+ <ul>
+ <Group title={'A header'} values={['a', 'b']} />
+ <Group title={'A divider'} values={['c', 'd']} />
+ <li>A footer</li>
+ </ul>
+ );
+
+ render(<Todo />, scratch);
+
+ expect(scratch.innerHTML).to.equal(
+ ul([
+ li('A header'),
+ li('a'),
+ li('b'),
+ li('A divider'),
+ li('c'),
+ li('d'),
+ li('A footer')
+ ])
+ );
+ });
+
+ it('should reorder Fragment children', () => {
+ let updateState;
+
+ class App extends Component {
+ constructor() {
+ super();
+ this.state = { active: false };
+ updateState = () => this.setState(prev => ({ active: !prev.active }));
+ }
+
+ render() {
+ return (
+ <div>
+ <h1>Heading</h1>
+ {!this.state.active ? (
+ <Fragment>
+ foobar
+ <Fragment>
+ Hello World
+ <h2>yo</h2>
+ </Fragment>
+ <input type="text" />
+ </Fragment>
+ ) : (
+ <Fragment>
+ <Fragment>
+ Hello World
+ <h2>yo</h2>
+ </Fragment>
+ foobar
+ <input type="text" />
+ </Fragment>
+ )}
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+
+ expect(scratch.innerHTML).to.equal(
+ '<div><h1>Heading</h1>foobarHello World<h2>yo</h2><input type="text"></div>'
+ );
+
+ updateState();
+
+ // See "should preserve state between top level fragment and array"
+ // Perhaps rename test to "should reorder **keyed** Fragment children"
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><h1>Heading</h1>Hello World<h2>yo</h2>foobar<input type="text"></div>'
+ );
+ });
+
+ it('should render sibling fragments with multiple children in the correct order', () => {
+ render(
+ <ol>
+ <li>0</li>
+ <Fragment>
+ <li>1</li>
+ <li>2</li>
+ </Fragment>
+ <li>3</li>
+ <li>4</li>
+ <Fragment>
+ <li>5</li>
+ <li>6</li>
+ </Fragment>
+ <li>7</li>
+ </ol>,
+ scratch
+ );
+
+ expect(scratch.textContent).to.equal('01234567');
+ });
+
+ it('should support HOCs that return children', () => {
+ const text =
+ "Don't forget to tell these special people in your life just how special they are to you.";
+
+ class BobRossProvider extends Component {
+ getChildContext() {
+ return { text };
+ }
+
+ render(props) {
+ return props.children;
+ }
+ }
+
+ function BobRossConsumer(props, context) {
+ return props.children(context.text);
+ }
+
+ const Say = props => <div>{props.text}</div>;
+
+ const Speak = () => (
+ <Fragment>
+ <span>the top</span>
+ <BobRossProvider>
+ <span>a span</span>
+ <BobRossConsumer>
+ {text => [<Say text={text} />, <Say text={text} />]}
+ </BobRossConsumer>
+ <span>another span</span>
+ </BobRossProvider>
+ <span>a final span</span>
+ </Fragment>
+ );
+
+ render(<Speak />, scratch);
+
+ expect(scratch.innerHTML).to.equal(
+ [
+ span('the top'),
+ span('a span'),
+ div(text),
+ div(text),
+ span('another span'),
+ span('a final span')
+ ].join('')
+ );
+ });
+
+ it('should support conditionally rendered Fragment', () => {
+ const Foo = ({ condition }) => (
+ <ol>
+ <li>0</li>
+ {condition ? (
+ <Fragment>
+ <li>1</li>
+ <li>2</li>
+ </Fragment>
+ ) : (
+ [<li>1</li>, <li>2</li>]
+ )}
+ <li>3</li>
+ </ol>
+ );
+
+ const html = ol([li('0'), li('1'), li('2'), li('3')]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(html, 'initial render of true');
+ expectDomLogToBe(
+ [
+ '<li>.appendChild(#text)',
+ '<ol>.appendChild(<li>0)',
+ '<li>.appendChild(#text)',
+ '<ol>0.appendChild(<li>1)',
+ '<li>.appendChild(#text)',
+ '<ol>01.appendChild(<li>2)',
+ '<li>.appendChild(#text)',
+ '<ol>012.appendChild(<li>3)',
+ '<div>.appendChild(<ol>0123)'
+ ],
+ 'initial render of true'
+ );
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+ expect(scratch.innerHTML).to.equal(html, 'rendering from true to false');
+ expectDomLogToBe([], 'rendering from true to false');
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(html, 'rendering from false to true');
+ expectDomLogToBe([], 'rendering from false to true');
+ });
+
+ it('should support conditionally rendered Fragment or null', () => {
+ const Foo = ({ condition }) => (
+ <ol>
+ <li>0</li>
+ {condition ? (
+ <Fragment>
+ <li>1</li>
+ <li>2</li>
+ </Fragment>
+ ) : null}
+ <li>3</li>
+ <li>4</li>
+ </ol>
+ );
+
+ const htmlForTrue = ol([li('0'), li('1'), li('2'), li('3'), li('4')]);
+
+ const htmlForFalse = ol([li('0'), li('3'), li('4')]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(htmlForTrue, 'initial render of true');
+ expectDomLogToBe(
+ [
+ '<li>.appendChild(#text)',
+ '<ol>.appendChild(<li>0)',
+ '<li>.appendChild(#text)',
+ '<ol>0.appendChild(<li>1)',
+ '<li>.appendChild(#text)',
+ '<ol>01.appendChild(<li>2)',
+ '<li>.appendChild(#text)',
+ '<ol>012.appendChild(<li>3)',
+ '<li>.appendChild(#text)',
+ '<ol>0123.appendChild(<li>4)',
+ '<div>.appendChild(<ol>01234)'
+ ],
+ 'initial render of true'
+ );
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForFalse,
+ 'rendering from true to false'
+ );
+ expectDomLogToBe(
+ ['<li>1.remove()', '<li>2.remove()'],
+ 'rendering from true to false'
+ );
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForTrue,
+ 'rendering from false to true'
+ );
+ expectDomLogToBe(
+ [
+ '<li>.appendChild(#text)',
+ '<ol>034.insertBefore(<li>1, <li>3)',
+ '<li>.appendChild(#text)',
+ '<ol>0134.insertBefore(<li>2, <li>3)'
+ ],
+ 'rendering from false to true'
+ );
+ });
+
+ it('should support moving Fragments between beginning and end', () => {
+ const Foo = ({ condition }) => (
+ <ol>
+ {condition
+ ? [
+ <li>0</li>,
+ <li>1</li>,
+ <li>2</li>,
+ <li>3</li>,
+ <Fragment>
+ <li>4</li>
+ <li>5</li>
+ </Fragment>
+ ]
+ : [
+ <Fragment>
+ <li>4</li>
+ <li>5</li>
+ </Fragment>,
+ <li>0</li>,
+ <li>1</li>,
+ <li>2</li>,
+ <li>3</li>
+ ]}
+ </ol>
+ );
+
+ const htmlForTrue = ol([
+ li('0'),
+ li('1'),
+ li('2'),
+ li('3'),
+ li('4'),
+ li('5')
+ ]);
+
+ const htmlForFalse = ol([
+ li('4'),
+ li('5'),
+ li('0'),
+ li('1'),
+ li('2'),
+ li('3')
+ ]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(htmlForTrue, 'initial render of true');
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForFalse,
+ 'rendering from true to false'
+ );
+ expectDomLogToBe([
+ '<ol>012345.insertBefore(<li>4, <li>0)',
+ '<ol>401235.insertBefore(<li>5, <li>0)',
+ // TODO: Hmmm why does this extra append happen?
+ '<ol>453012.appendChild(<li>3)'
+ ]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForTrue,
+ 'rendering from false to true'
+ );
+ expectDomLogToBe([
+ '<ol>450123.appendChild(<li>4)',
+ '<ol>501234.appendChild(<li>5)'
+ ]);
+ });
+
+ it('should support conditional beginning and end Fragments', () => {
+ const Foo = ({ condition }) => (
+ <ol>
+ {condition ? (
+ <Fragment>
+ <li>0</li>
+ <li>1</li>
+ </Fragment>
+ ) : null}
+ <li>2</li>
+ <li>2</li>
+ {condition ? null : (
+ <Fragment>
+ <li>3</li>
+ <li>4</li>
+ </Fragment>
+ )}
+ </ol>
+ );
+
+ const htmlForTrue = ol([li(0), li(1), li(2), li(2)]);
+
+ const htmlForFalse = ol([li(2), li(2), li(3), li(4)]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(htmlForTrue, 'initial render of true');
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForFalse,
+ 'rendering from true to false'
+ );
+ expectDomLogToBe([
+ // Mount 3 & 4
+ '<li>.appendChild(#text)',
+ '<ol>0122.appendChild(<li>3)',
+ '<li>.appendChild(#text)',
+ '<ol>01223.appendChild(<li>4)',
+ // Remove 1 & 2 (replaced with null)
+ '<li>0.remove()',
+ '<li>1.remove()'
+ ]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForTrue,
+ 'rendering from false to true'
+ );
+ expectDomLogToBe([
+ // Insert 0 and 1
+ '<li>.appendChild(#text)',
+ '<ol>2234.insertBefore(<li>0, <li>2)',
+ '<li>.appendChild(#text)',
+ '<ol>02234.insertBefore(<li>1, <li>2)',
+ // Remove 3 & 4 (replaced by null)
+ '<li>3.remove()',
+ '<li>4.remove()'
+ ]);
+ });
+
+ it('should support nested conditional beginning and end Fragments', () => {
+ const Foo = ({ condition }) => (
+ <ol>
+ {condition ? (
+ <Fragment>
+ <Fragment>
+ <Fragment>
+ <li>0</li>
+ <li>1</li>
+ </Fragment>
+ </Fragment>
+ </Fragment>
+ ) : null}
+ <li>2</li>
+ <li>3</li>
+ {condition ? null : (
+ <Fragment>
+ <Fragment>
+ <Fragment>
+ <li>4</li>
+ <li>5</li>
+ </Fragment>
+ </Fragment>
+ </Fragment>
+ )}
+ </ol>
+ );
+
+ const htmlForTrue = ol([li(0), li(1), li(2), li(3)]);
+
+ const htmlForFalse = ol([li(2), li(3), li(4), li(5)]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(htmlForTrue, 'initial render of true');
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForFalse,
+ 'rendering from true to false'
+ );
+ expectDomLogToBe([
+ // Mount 4 & 5
+ '<li>.appendChild(#text)',
+ '<ol>0123.appendChild(<li>4)',
+ '<li>.appendChild(#text)',
+ '<ol>01234.appendChild(<li>5)',
+ // Remove 1 & 2 (replaced with null)
+ '<li>0.remove()',
+ '<li>1.remove()'
+ ]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForTrue,
+ 'rendering from false to true'
+ );
+ expectDomLogToBe([
+ // Insert 0 and 1 back into the DOM
+ '<li>.appendChild(#text)',
+ '<ol>2345.insertBefore(<li>0, <li>2)',
+ '<li>.appendChild(#text)',
+ '<ol>02345.insertBefore(<li>1, <li>2)',
+ // Remove 4 & 5 (replaced by null)
+ '<li>4.remove()',
+ '<li>5.remove()'
+ ]);
+ });
+
+ it('should preserve state with reordering in multiple levels with mixed # of Fragment siblings', () => {
+ // Also fails if the # of divs outside the Fragment equals or exceeds
+ // the # inside the Fragment for both conditions
+ function Foo({ condition }) {
+ return condition ? (
+ <div>
+ <Fragment key="c">
+ <div>foo</div>
+ <div key="b">
+ <Stateful key="a" />
+ </div>
+ </Fragment>
+ <div>boop</div>
+ <div>boop</div>
+ </div>
+ ) : (
+ <div>
+ <div>beep</div>
+ <Fragment key="c">
+ <div key="b">
+ <Stateful key="a" />
+ </div>
+ <div>bar</div>
+ </Fragment>
+ </div>
+ );
+ }
+
+ const htmlForTrue = div([
+ div('foo'),
+ div(div('Hello')),
+ div('boop'),
+ div('boop')
+ ]);
+
+ const htmlForFalse = div([div('beep'), div(div('Hello')), div('bar')]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.equal(
+ htmlForFalse,
+ 'rendering from true to false'
+ );
+ expectDomLogToBe(
+ [
+ '<div>fooHellobeepboop.insertBefore(<div>Hello, <div>boop)',
+ '<div>barbeepHelloboop.insertBefore(<div>bar, <div>boop)',
+ '<div>boop.remove()'
+ ],
+ 'rendering from true to false'
+ );
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.equal(
+ htmlForTrue,
+ 'rendering from false to true'
+ );
+ expectDomLogToBe(
+ [
+ '<div>beepHellofoo.insertBefore(<div>foo, <div>beep)',
+ '<div>fooboopHello.appendChild(<div>boop)',
+ '<div>.appendChild(#text)',
+ '<div>fooHelloboop.appendChild(<div>boop)'
+ ],
+ 'rendering from false to true'
+ );
+ });
+
+ it('should preserve state with reordering in multiple levels with lots of Fragment siblings', () => {
+ // Also fails if the # of divs outside the Fragment equals or exceeds
+ // the # inside the Fragment for both conditions
+ function Foo({ condition }) {
+ return condition ? (
+ <div>
+ <Fragment key="c">
+ <div>foo</div>
+ <div key="b">
+ <Stateful key="a" />
+ </div>
+ </Fragment>
+ <div>boop</div>
+ <div>boop</div>
+ <div>boop</div>
+ </div>
+ ) : (
+ <div>
+ <div>beep</div>
+ <div>beep</div>
+ <div>beep</div>
+ <Fragment key="c">
+ <div key="b">
+ <Stateful key="a" />
+ </div>
+ <div>bar</div>
+ </Fragment>
+ </div>
+ );
+ }
+
+ const htmlForTrue = div([
+ div('foo'),
+ div(div('Hello')),
+ div('boop'),
+ div('boop'),
+ div('boop')
+ ]);
+
+ const htmlForFalse = div([
+ div('beep'),
+ div('beep'),
+ div('beep'),
+ div(div('Hello')),
+ div('bar')
+ ]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful']);
+ expect(scratch.innerHTML).to.equal(
+ htmlForFalse,
+ 'rendering from true to false'
+ );
+ expectDomLogToBe(
+ [
+ '<div>fooHellobeepbeepbeep.appendChild(<div>Hello)',
+ '<div>barbeepbeepbeepHello.appendChild(<div>bar)'
+ ],
+ 'rendering from true to false'
+ );
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(ops).to.deep.equal(['Update Stateful', 'Update Stateful']);
+ expect(scratch.innerHTML).to.equal(
+ htmlForTrue,
+ 'rendering from false to true'
+ );
+ expectDomLogToBe(
+ [
+ '<div>beepbeepbeepHellofoo.insertBefore(<div>foo, <div>beep)',
+ '<div>foobeepbeepbeepHello.insertBefore(<div>Hello, <div>beep)',
+ '<div>fooHelloboopboopboop.appendChild(<div>boop)'
+ ],
+ 'rendering from false to true'
+ );
+ });
+
+ it('should correctly append children with siblings', () => {
+ /**
+ * @type {(props: { values: Array<string | number>}) => JSX.Element}
+ */
+ const Foo = ({ values }) => (
+ <ol>
+ <li>a</li>
+ <Fragment>
+ {values.map(value => (
+ <li>{value}</li>
+ ))}
+ </Fragment>
+ <li>b</li>
+ </ol>
+ );
+
+ const getHtml = values =>
+ ol([li('a'), ...values.map(value => li(value)), li('b')]);
+
+ let values = [0, 1, 2];
+ clearLog();
+ render(<Foo values={values} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ getHtml(values),
+ `original list: [${values.join(',')}]`
+ );
+
+ values.push(3);
+
+ clearLog();
+ render(<Foo values={values} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ getHtml(values),
+ `push 3: [${values.join(',')}]`
+ );
+ expectDomLogToBe([
+ '<li>.appendChild(#text)',
+ '<ol>a012b.insertBefore(<li>3, <li>b)'
+ ]);
+
+ values.push(4);
+
+ clearLog();
+ render(<Foo values={values} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ getHtml(values),
+ `push 4: [${values.join(',')}]`
+ );
+ expectDomLogToBe([
+ '<li>.appendChild(#text)',
+ '<ol>a0123b.insertBefore(<li>4, <li>b)'
+ ]);
+ });
+
+ it('should render components that conditionally return Fragments', () => {
+ const Foo = ({ condition }) =>
+ condition ? (
+ <Fragment>
+ <div>1</div>
+ <div>2</div>
+ </Fragment>
+ ) : (
+ <div>
+ <div>3</div>
+ <div>4</div>
+ </div>
+ );
+
+ const htmlForTrue = [div(1), div(2)].join('');
+
+ const htmlForFalse = div([div(3), div(4)]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(htmlForTrue);
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(htmlForFalse);
+ expectDomLogToBe(
+ [
+ '<div>.appendChild(#text)',
+ '<div>1.insertBefore(<div>3, #text)',
+ '<div>.appendChild(#text)',
+ '<div>31.insertBefore(<div>4, #text)',
+ '#text.remove()',
+ '<div>2.remove()'
+ ],
+ 'rendering from true to false'
+ );
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(htmlForTrue);
+ expectDomLogToBe(
+ [
+ '<div>34.insertBefore(#text, <div>3)',
+ '<div>4.remove()',
+ '<div>3.remove()',
+ '<div>.appendChild(#text)',
+ '<div>1.appendChild(<div>2)'
+ ],
+ 'rendering from false to true'
+ );
+ });
+
+ it('should clear empty Fragments', () => {
+ function Foo(props) {
+ if (props.condition) {
+ return <Fragment>foo</Fragment>;
+ }
+ return <Fragment />;
+ }
+
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.textContent).to.equal('foo');
+
+ render(<Foo condition={false} />, scratch);
+ expect(scratch.textContent).to.equal('');
+ });
+
+ it('should support conditionally rendered nested Fragments or null with siblings', () => {
+ const Foo = ({ condition }) => (
+ <ol>
+ <li>0</li>
+ <Fragment>
+ <li>1</li>
+ {condition ? (
+ <Fragment>
+ <li>2</li>
+ <li>3</li>
+ </Fragment>
+ ) : null}
+ <li>4</li>
+ </Fragment>
+ <li>5</li>
+ </ol>
+ );
+
+ const htmlForTrue = ol([
+ li('0'),
+ li('1'),
+ li('2'),
+ li('3'),
+ li('4'),
+ li('5')
+ ]);
+
+ const htmlForFalse = ol([li('0'), li('1'), li('4'), li('5')]);
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(htmlForTrue, 'initial render of true');
+ expectDomLogToBe(
+ [
+ '<li>.appendChild(#text)',
+ '<ol>.appendChild(<li>0)',
+ '<li>.appendChild(#text)',
+ '<ol>0.appendChild(<li>1)',
+ '<li>.appendChild(#text)',
+ '<ol>01.appendChild(<li>2)',
+ '<li>.appendChild(#text)',
+ '<ol>012.appendChild(<li>3)',
+ '<li>.appendChild(#text)',
+ '<ol>0123.appendChild(<li>4)',
+ '<li>.appendChild(#text)',
+ '<ol>01234.appendChild(<li>5)',
+ '<div>.appendChild(<ol>012345)'
+ ],
+ 'initial render of true'
+ );
+
+ clearLog();
+ render(<Foo condition={false} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForFalse,
+ 'rendering from true to false'
+ );
+ expectDomLogToBe(
+ ['<li>2.remove()', '<li>3.remove()'],
+ 'rendering from true to false'
+ );
+
+ clearLog();
+ render(<Foo condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ htmlForTrue,
+ 'rendering from false to true'
+ );
+ expectDomLogToBe(
+ [
+ '<li>.appendChild(#text)',
+ '<ol>0145.insertBefore(<li>2, <li>4)',
+ '<li>.appendChild(#text)',
+ '<ol>01245.insertBefore(<li>3, <li>4)'
+ ],
+ 'rendering from false to true'
+ );
+ });
+
+ it('should render first child Fragment that wrap null components', () => {
+ const Empty = () => null;
+ const Foo = () => (
+ <ol>
+ <Fragment>
+ <Empty />
+ </Fragment>
+ <li>1</li>
+ </ol>
+ );
+
+ render(<Foo />, scratch);
+ expect(scratch.innerHTML).to.equal(ol(li(1)));
+ });
+
+ it('should properly render Components that return Fragments and use shouldComponentUpdate #1415', () => {
+ class SubList extends Component {
+ shouldComponentUpdate(nextProps) {
+ return nextProps.prop1 !== this.props.prop1;
+ }
+ render() {
+ return (
+ <Fragment>
+ <div>2</div>
+ <div>3</div>
+ </Fragment>
+ );
+ }
+ }
+
+ /** @type {(update: any) => void} */
+ let setState;
+ class App extends Component {
+ constructor() {
+ super();
+ setState = update => this.setState(update);
+
+ this.state = { error: false };
+ }
+
+ render() {
+ return (
+ <div>
+ {this.state.error ? (
+ <div>Error!</div>
+ ) : (
+ <div>
+ <div>1</div>
+ <SubList prop1={this.state.error} />
+ </div>
+ )}
+ </div>
+ );
+ }
+ }
+
+ const successHtml = div(div([div(1), div(2), div(3)]));
+
+ const errorHtml = div(div('Error!'));
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal(successHtml);
+
+ setState({}); // Trigger sCU
+ rerender();
+ expect(scratch.innerHTML).to.equal(successHtml);
+
+ setState({ error: true });
+ rerender();
+ expect(scratch.innerHTML).to.equal(errorHtml);
+
+ setState({ error: false });
+ rerender();
+ expect(scratch.innerHTML).to.equal(successHtml);
+
+ setState({}); // Trigger sCU again
+ rerender();
+ expect(scratch.innerHTML).to.equal(successHtml);
+ });
+
+ it('should properly render Fragments whose last child is a component returning null', () => {
+ let Noop = () => null;
+ let update;
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ update = () => this.setState({ items: ['A', 'B', 'C'] });
+ this.state = {
+ items: null
+ };
+ }
+
+ render() {
+ return (
+ <div>
+ {this.state.items && (
+ <Fragment>
+ {this.state.items.map(v => (
+ <div>{v}</div>
+ ))}
+ <Noop />
+ </Fragment>
+ )}
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.textContent).to.equal('');
+
+ clearLog();
+ update();
+ rerender();
+
+ expect(scratch.textContent).to.equal('ABC');
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>.appendChild(<div>A)',
+ '<div>.appendChild(#text)',
+ '<div>A.appendChild(<div>B)',
+ '<div>.appendChild(#text)',
+ '<div>AB.appendChild(<div>C)'
+ ]);
+ });
+
+ it('should replace node in-between children', () => {
+ let update;
+ class SetState extends Component {
+ constructor(props) {
+ super(props);
+ update = () => this.setState({ active: true });
+ }
+
+ render() {
+ return this.state.active ? <section>B2</section> : <div>B1</div>;
+ }
+ }
+
+ render(
+ <div>
+ <div>A</div>
+ <SetState />
+ <div>C</div>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A</div><div>B1</div><div>C</div></div>`
+ );
+
+ clearLog();
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A</div><section>B2</section><div>C</div></div>`
+ );
+ expectDomLogToBe([
+ '<section>.appendChild(#text)',
+ '<div>AB1C.insertBefore(<section>B2, <div>B1)',
+ '<div>B1.remove()'
+ ]);
+ });
+
+ it('should replace Fragment in-between children', () => {
+ let update;
+ class SetState extends Component {
+ constructor(props) {
+ super(props);
+ update = () => this.setState({ active: true });
+ }
+
+ render() {
+ return this.state.active ? (
+ <Fragment>
+ <section>B3</section>
+ <section>B4</section>
+ </Fragment>
+ ) : (
+ <Fragment>
+ <div>B1</div>
+ <div>B2</div>
+ </Fragment>
+ );
+ }
+ }
+
+ render(
+ <div>
+ <div>A</div>
+ <SetState />
+ <div>C</div>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(
+ div([div('A'), div('B1'), div('B2'), div('C')])
+ );
+
+ clearLog();
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ div([div('A'), section('B3'), section('B4'), div('C')])
+ );
+ expectDomLogToBe([
+ '<section>.appendChild(#text)',
+ '<div>AB1B2C.insertBefore(<section>B3, <div>B1)',
+ '<section>.appendChild(#text)',
+ '<div>AB3B1B2C.insertBefore(<section>B4, <div>B1)',
+ '<div>B2.remove()',
+ '<div>B1.remove()'
+ ]);
+ });
+
+ it('should insert in-between children', () => {
+ let update;
+ class SetState extends Component {
+ constructor(props) {
+ super(props);
+ update = () => this.setState({ active: true });
+ }
+
+ render() {
+ return this.state.active ? <div>B</div> : null;
+ }
+ }
+
+ render(
+ <div>
+ <div>A</div>
+ <SetState />
+ <div>C</div>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div><div>A</div><div>C</div></div>`);
+
+ clearLog();
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A</div><div>B</div><div>C</div></div>`
+ );
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>AC.insertBefore(<div>B, <div>C)'
+ ]);
+ });
+
+ it('should insert in-between Fragments', () => {
+ let update;
+ class SetState extends Component {
+ constructor(props) {
+ super(props);
+ update = () => this.setState({ active: true });
+ }
+
+ render() {
+ return this.state.active ? [<div>B1</div>, <div>B2</div>] : null;
+ }
+ }
+
+ render(
+ <div>
+ <div>A</div>
+ <SetState />
+ <div>C</div>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div><div>A</div><div>C</div></div>`);
+
+ clearLog();
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A</div><div>B1</div><div>B2</div><div>C</div></div>`
+ );
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>AC.insertBefore(<div>B1, <div>C)',
+ '<div>.appendChild(#text)',
+ '<div>AB1C.insertBefore(<div>B2, <div>C)'
+ ]);
+ });
+
+ it('should insert in-between null children', () => {
+ let update;
+ class SetState extends Component {
+ constructor(props) {
+ super(props);
+ update = () => this.setState({ active: true });
+ }
+
+ render() {
+ return this.state.active ? <div>B</div> : null;
+ }
+ }
+
+ render(
+ <div>
+ <div>A</div>
+ {null}
+ <SetState />
+ {null}
+ <div>C</div>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div><div>A</div><div>C</div></div>`);
+
+ clearLog();
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A</div><div>B</div><div>C</div></div>`
+ );
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>AC.insertBefore(<div>B, <div>C)'
+ ]);
+ });
+
+ it('should insert Fragment in-between null children', () => {
+ let update;
+ class SetState extends Component {
+ constructor(props) {
+ super(props);
+ update = () => this.setState({ active: true });
+ }
+
+ render() {
+ return this.state.active ? (
+ <Fragment>
+ <div>B1</div>
+ <div>B2</div>
+ </Fragment>
+ ) : null;
+ }
+ }
+
+ render(
+ <div>
+ <div>A</div>
+ {null}
+ <SetState />
+ {null}
+ <div>C</div>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div><div>A</div><div>C</div></div>`);
+
+ clearLog();
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A</div><div>B1</div><div>B2</div><div>C</div></div>`
+ );
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>AC.insertBefore(<div>B1, <div>C)',
+ '<div>.appendChild(#text)',
+ '<div>AB1C.insertBefore(<div>B2, <div>C)'
+ ]);
+ });
+
+ it('should insert in-between nested null children', () => {
+ let update;
+ class SetState extends Component {
+ constructor(props) {
+ super(props);
+ update = () => this.setState({ active: true });
+ }
+
+ render() {
+ return this.state.active ? <div>B</div> : null;
+ }
+ }
+
+ function Outer() {
+ return <SetState />;
+ }
+
+ render(
+ <div>
+ <div>A</div>
+ {null}
+ <Outer />
+ {null}
+ <div>C</div>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div><div>A</div><div>C</div></div>`);
+
+ clearLog();
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A</div><div>B</div><div>C</div></div>`
+ );
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>AC.insertBefore(<div>B, <div>C)'
+ ]);
+ });
+
+ it('should insert Fragment in-between nested null children', () => {
+ let update;
+ class SetState extends Component {
+ constructor(props) {
+ super(props);
+ update = () => this.setState({ active: true });
+ }
+
+ render() {
+ return this.state.active ? (
+ <Fragment>
+ <div>B1</div>
+ <div>B2</div>
+ </Fragment>
+ ) : null;
+ }
+ }
+
+ function Outer() {
+ return <SetState />;
+ }
+
+ render(
+ <div>
+ <div>A</div>
+ {null}
+ <Outer />
+ {null}
+ <div>C</div>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.eql(`<div><div>A</div><div>C</div></div>`);
+
+ clearLog();
+ update();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A</div><div>B1</div><div>B2</div><div>C</div></div>`
+ );
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>AC.insertBefore(<div>B1, <div>C)',
+ '<div>.appendChild(#text)',
+ '<div>AB1C.insertBefore(<div>B2, <div>C)'
+ ]);
+ });
+
+ it('should update at correct place', () => {
+ let updateA;
+ class A extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { active: true };
+ updateA = () => this.setState(prev => ({ active: !prev.active }));
+ }
+
+ render() {
+ return this.state.active ? <div>A</div> : <span>A2</span>;
+ }
+ }
+
+ function B() {
+ return <div>B</div>;
+ }
+
+ function X(props) {
+ return props.children;
+ }
+
+ function App(props) {
+ let b = props.condition ? <B /> : null;
+ return (
+ <div>
+ <X>
+ <A />
+ </X>
+ <X>
+ {b}
+ <div>C</div>
+ </X>
+ </div>
+ );
+ }
+
+ render(<App condition={true} />, scratch);
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A</div><div>B</div><div>C</div></div>`
+ );
+
+ clearLog();
+ render(<App condition={false} />, scratch);
+
+ expect(scratch.innerHTML).to.eql(`<div><div>A</div><div>C</div></div>`);
+ expectDomLogToBe(['<div>B.remove()']);
+
+ clearLog();
+ updateA();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(`<div><span>A2</span><div>C</div></div>`);
+ expectDomLogToBe([
+ '<span>.appendChild(#text)',
+ '<div>AC.insertBefore(<span>A2, <div>A)',
+ '<div>A.remove()'
+ ]);
+ });
+
+ it('should update Fragment at correct place', () => {
+ let updateA;
+ class A extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { active: true };
+ updateA = () => this.setState(prev => ({ active: !prev.active }));
+ }
+
+ render() {
+ return this.state.active
+ ? [<div>A1</div>, <div>A2</div>]
+ : [<span>A3</span>, <span>A4</span>];
+ }
+ }
+
+ function B() {
+ return <div>B</div>;
+ }
+
+ function X(props) {
+ return props.children;
+ }
+
+ function App(props) {
+ let b = props.condition ? <B /> : null;
+ return (
+ <div>
+ <X>
+ <A />
+ </X>
+ <X>
+ {b}
+ <div>C</div>
+ </X>
+ </div>
+ );
+ }
+
+ render(<App condition={true} />, scratch);
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A1</div><div>A2</div><div>B</div><div>C</div></div>`
+ );
+
+ clearLog();
+ render(<App condition={false} />, scratch);
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><div>A1</div><div>A2</div><div>C</div></div>`
+ );
+ expectDomLogToBe(['<div>B.remove()']);
+
+ clearLog();
+ updateA();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ `<div><span>A3</span><span>A4</span><div>C</div></div>`
+ );
+ expectDomLogToBe([
+ '<span>.appendChild(#text)',
+ '<div>A1A2C.insertBefore(<span>A3, <div>A1)',
+ '<span>.appendChild(#text)',
+ '<div>A3A1A2C.insertBefore(<span>A4, <div>A1)',
+ '<div>A2.remove()',
+ '<div>A1.remove()'
+ ]);
+ });
+
+ it('should insert children correctly if sibling component DOM changes', () => {
+ /** @type {() => void} */
+ let updateA;
+ class A extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { active: true };
+ updateA = () => this.setState(prev => ({ active: !prev.active }));
+ }
+
+ render() {
+ return this.state.active ? <div>A</div> : <span>A2</span>;
+ }
+ }
+
+ /** @type {() => void} */
+ let updateB;
+ class B extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { active: false };
+ updateB = () => this.setState(prev => ({ active: !prev.active }));
+ }
+ render() {
+ return this.state.active ? <div>B</div> : null;
+ }
+ }
+
+ function X(props) {
+ return props.children;
+ }
+
+ function App() {
+ return (
+ <div>
+ <X>
+ <A />
+ </X>
+ <X>
+ <B />
+ <div>C</div>
+ </X>
+ </div>
+ );
+ }
+
+ render(<App />, scratch);
+
+ expect(scratch.innerHTML).to.eql(div([div('A'), div('C')]), 'initial');
+
+ clearLog();
+ updateB();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ div([div('A'), div('B'), div('C')]),
+ 'updateB'
+ );
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>AC.insertBefore(<div>B, <div>C)'
+ ]);
+
+ clearLog();
+ updateA();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ div([span('A2'), div('B'), div('C')]),
+ 'updateA'
+ );
+ expectDomLogToBe([
+ '<span>.appendChild(#text)',
+ '<div>ABC.insertBefore(<span>A2, <div>A)',
+ '<div>A.remove()'
+ ]);
+ });
+
+ it('should correctly append children if last child changes DOM', () => {
+ /** @type {() => void} */
+ let updateA;
+ class A extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { active: true };
+ updateA = () => this.setState(prev => ({ active: !prev.active }));
+ }
+
+ render() {
+ return this.state.active
+ ? [<div>A1</div>, <div>A2</div>]
+ : [<span>A3</span>, <span>A4</span>];
+ }
+ }
+
+ /** @type {() => void} */
+ let updateB;
+ class B extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { active: false };
+ updateB = () => this.setState(prev => ({ active: !prev.active }));
+ }
+ render() {
+ return (
+ <Fragment>
+ <A />
+ {this.state.active ? <div>B</div> : null}
+ </Fragment>
+ );
+ }
+ }
+
+ render(<B />, scratch);
+
+ expect(scratch.innerHTML).to.eql(
+ [div('A1'), div('A2')].join(''),
+ 'initial'
+ );
+
+ clearLog();
+ updateA();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ [span('A3'), span('A4')].join(''),
+ 'updateA'
+ );
+ expectDomLogToBe([
+ '<span>.appendChild(#text)',
+ '<div>A1A2.insertBefore(<span>A3, <div>A1)',
+ '<span>.appendChild(#text)',
+ '<div>A3A1A2.insertBefore(<span>A4, <div>A1)',
+ '<div>A2.remove()',
+ '<div>A1.remove()'
+ ]);
+
+ clearLog();
+ updateB();
+ rerender();
+
+ expect(scratch.innerHTML).to.eql(
+ [span('A3'), span('A4'), div('B')].join(''),
+ 'updateB'
+ );
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>A3A4.appendChild(<div>B)'
+ ]);
+ });
+
+ it('should properly place conditional elements around strictly equal vnodes', () => {
+ let set;
+
+ const Children = () => (
+ <Fragment>
+ <div>Navigation</div>
+ <div>Content</div>
+ </Fragment>
+ );
+
+ class Parent extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { panelPosition: 'bottom' };
+ set = this.tooglePanelPosition = this.tooglePanelPosition.bind(this);
+ }
+
+ tooglePanelPosition() {
+ this.setState({
+ panelPosition: this.state.panelPosition === 'top' ? 'bottom' : 'top'
+ });
+ }
+
+ render() {
+ return (
+ <div>
+ {this.state.panelPosition === 'top' && <div>top panel</div>}
+ {this.props.children}
+ {this.state.panelPosition === 'bottom' && <div>bottom panel</div>}
+ </div>
+ );
+ }
+ }
+
+ const App = () => (
+ <Parent>
+ <Children />
+ </Parent>
+ );
+
+ const content = `<div>Navigation</div><div>Content</div>`;
+ const top = `<div><div>top panel</div>${content}</div>`;
+ const bottom = `<div>${content}<div>bottom panel</div></div>`;
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal(bottom);
+
+ clearLog();
+ set();
+ rerender();
+ expect(scratch.innerHTML).to.equal(top);
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>NavigationContentbottom panel.insertBefore(<div>top panel, <div>Navigation)',
+ '<div>bottom panel.remove()'
+ ]);
+
+ clearLog();
+ set();
+ rerender();
+ expect(scratch.innerHTML).to.equal(bottom);
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>top panelNavigationContent.appendChild(<div>bottom panel)',
+ '<div>top panel.remove()'
+ ]);
+
+ clearLog();
+ set();
+ rerender();
+ expect(scratch.innerHTML).to.equal(top);
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>NavigationContentbottom panel.insertBefore(<div>top panel, <div>Navigation)',
+ '<div>bottom panel.remove()'
+ ]);
+ });
+
+ it('should efficiently unmount Fragment children', () => {
+ // <div>1 => <span>1 and Fragment sibling unmounts. Does <span>1 get correct _nextDom pointer?
+ function App({ condition }) {
+ return condition ? (
+ <div>
+ <Fragment>
+ <div>1</div>
+ <div>2</div>
+ </Fragment>
+ <Fragment>
+ <div>A</div>
+ </Fragment>
+ </div>
+ ) : (
+ <div>
+ <Fragment>
+ <div>1</div>
+ </Fragment>
+ <Fragment>
+ <div>A</div>
+ </Fragment>
+ </div>
+ );
+ }
+
+ render(<App condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(div([div(1), div(2), div('A')]));
+
+ clearLog();
+ render(<App condition={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(div([div(1), div('A')]));
+ expectDomLogToBe(['<div>2.remove()']);
+ });
+
+ it('should efficiently unmount nested Fragment children', () => {
+ // Fragment wrapping <div>2 and <div>3 unmounts. Does <div>1 get correct
+ // _nextDom pointer to efficiently update DOM? _nextDom should be <div>A
+ function App({ condition }) {
+ return condition ? (
+ <div>
+ <Fragment>
+ <div>1</div>
+ <Fragment>
+ <div>2</div>
+ <div>3</div>
+ </Fragment>
+ </Fragment>
+ <Fragment>
+ <div>A</div>
+ <div>B</div>
+ </Fragment>
+ </div>
+ ) : (
+ <div>
+ <Fragment>
+ <div>1</div>
+ </Fragment>
+ <Fragment>
+ <div>A</div>
+ <div>B</div>
+ </Fragment>
+ </div>
+ );
+ }
+
+ clearLog();
+ render(<App condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ div([div(1), div(2), div(3), div('A'), div('B')])
+ );
+
+ clearLog();
+ render(<App condition={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(div([div(1), div('A'), div('B')]));
+ expectDomLogToBe(['<div>2.remove()', '<div>3.remove()']);
+ });
+
+ it('should efficiently place new children and unmount nested Fragment children', () => {
+ // <div>4 is added and Fragment sibling unmounts. Does <div>4 get correct _nextDom pointer?
+ function App({ condition }) {
+ return condition ? (
+ <div>
+ <Fragment>
+ <div>1</div>
+ <Fragment>
+ <div>2</div>
+ <div>3</div>
+ </Fragment>
+ </Fragment>
+ <Fragment>
+ <div>A</div>
+ <div>B</div>
+ </Fragment>
+ </div>
+ ) : (
+ <div>
+ <Fragment>
+ <div>1</div>
+ <div>4</div>
+ </Fragment>
+ <Fragment>
+ <div>A</div>
+ <div>B</div>
+ </Fragment>
+ </div>
+ );
+ }
+
+ render(<App condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ div([div(1), div(2), div(3), div('A'), div('B')])
+ );
+
+ clearLog();
+ render(<App condition={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(
+ div([div(1), div(4), div('A'), div('B')])
+ );
+ expectDomLogToBe([
+ '<div>.appendChild(#text)',
+ '<div>123AB.insertBefore(<div>4, <div>2)',
+ '<div>2.remove()',
+ '<div>3.remove()'
+ ]);
+ });
+
+ it('should efficiently unmount nested Fragment children when changing node type', () => {
+ // <div>1 => <span>1 and Fragment sibling unmounts. Does <span>1 get correct _nextDom pointer?
+ function App({ condition }) {
+ return condition ? (
+ <div>
+ <Fragment>
+ <div>1</div>
+ <Fragment>
+ <div>2</div>
+ <div>3</div>
+ </Fragment>
+ </Fragment>
+ <Fragment>
+ <div>A</div>
+ <div>B</div>
+ </Fragment>
+ </div>
+ ) : (
+ <div>
+ <Fragment>
+ <span>1</span>
+ </Fragment>
+ <Fragment>
+ <div>A</div>
+ <div>B</div>
+ </Fragment>
+ </div>
+ );
+ }
+
+ render(<App condition={true} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ div([div(1), div(2), div(3), div('A'), div('B')])
+ );
+
+ clearLog();
+ render(<App condition={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(div([span(1), div('A'), div('B')]));
+ expectDomLogToBe([
+ '<span>.appendChild(#text)',
+ '<div>123AB.insertBefore(<span>1, <div>1)',
+ '<div>2.remove()',
+ '<div>3.remove()',
+ '<div>1.remove()'
+ ]);
+ });
+});
diff --git a/preact/test/browser/getDomSibling.test.js b/preact/test/browser/getDomSibling.test.js
new file mode 100644
index 0000000..8dc9b75
--- /dev/null
+++ b/preact/test/browser/getDomSibling.test.js
@@ -0,0 +1,362 @@
+import { createElement, render, Fragment } from '../../src/';
+import { getDomSibling } from '../../src/component';
+import { setupScratch, teardown } from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('getDomSibling', () => {
+ /** @type {import('../../src/internal').PreactElement} */
+ let scratch;
+
+ const getRoot = dom => dom._children;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should find direct sibling', () => {
+ render(
+ <div>
+ <div>A</div>
+ <div>B</div>
+ </div>,
+ scratch
+ );
+ let vnode = getRoot(scratch)._children[0]._children[0];
+ expect(getDomSibling(vnode)).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should find direct text node sibling', () => {
+ render(
+ <div>
+ <div>A</div>B
+ </div>,
+ scratch
+ );
+ let vnode = getRoot(scratch)._children[0]._children[0];
+ expect(getDomSibling(vnode)).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should find nested text node sibling', () => {
+ render(
+ <div>
+ <Fragment>
+ <div>A</div>
+ </Fragment>
+ <Fragment>B</Fragment>
+ </div>,
+ scratch
+ );
+ let vnode = getRoot(scratch)._children[0]._children[0];
+ expect(getDomSibling(vnode)).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should find text node sibling with placeholder', () => {
+ render(<div>A{null}B</div>, scratch);
+ let vnode = getRoot(scratch)._children[0]._children[0];
+ expect(getDomSibling(vnode)).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should find sibling with placeholder', () => {
+ render(
+ <div key="parent">
+ <div key="A">A</div>
+ {null}
+ <div key="B">B</div>
+ </div>,
+ scratch
+ );
+ let vnode = getRoot(scratch)._children[0]._children[0];
+ expect(getDomSibling(vnode)).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should find sibling with nested placeholder', () => {
+ render(
+ <div key="0">
+ <Fragment key="0.0">
+ <div key="A">A</div>
+ </Fragment>
+ <Fragment key="0.1">{null}</Fragment>
+ <Fragment key="0.2">
+ <div key="B">B</div>
+ </Fragment>
+ </div>,
+ scratch
+ );
+ let vnode = getRoot(scratch)._children[0]._children[0]._children[0];
+ expect(getDomSibling(vnode)).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should find sibling in parent', () => {
+ render(
+ <div>
+ <Fragment>
+ <div>A</div>
+ </Fragment>
+ <div>B</div>
+ </div>,
+ scratch
+ );
+ let vnode = getRoot(scratch)._children[0]._children[0]._children[0];
+ expect(getDomSibling(vnode)).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should find unrelated sibling from a DOM VNode', () => {
+ render(
+ <div key="0">
+ <Fragment key="0.0">
+ <Fragment key="0.0.0">
+ <Fragment key="0.0.0.0">
+ <div key="A">A</div>
+ </Fragment>
+ </Fragment>
+ </Fragment>
+ <Fragment key="0.1">
+ <Fragment key="0.1.0" />
+ <Fragment key="0.1.1" />
+ <Fragment key="0.1.2" />
+ </Fragment>
+ <Fragment key="0.2">
+ <Fragment key="0.2.0" />
+ <Fragment key="0.2.1" />
+ <Fragment key="0.2.2">
+ <div key="B">B</div>
+ </Fragment>
+ </Fragment>
+ </div>,
+ scratch
+ );
+
+ let divAVNode = getRoot(scratch)._children[0]._children[0]._children[0]
+ ._children[0]._children[0];
+ expect(divAVNode.type).to.equal('div');
+ expect(getDomSibling(divAVNode)).to.equalNode(
+ scratch.firstChild.childNodes[1]
+ );
+ });
+
+ it('should find unrelated sibling from a Fragment VNode', () => {
+ render(
+ <div key="0">
+ <Fragment key="0.0">
+ <Fragment key="0.0.0">
+ <Fragment key="0.0.0.0">
+ <div key="A">A</div>
+ </Fragment>
+ </Fragment>
+ </Fragment>
+ <Fragment key="0.1">
+ <Fragment key="0.1.0">
+ <div key="B">B</div>
+ </Fragment>
+ </Fragment>
+ </div>,
+ scratch
+ );
+
+ let fragment = getRoot(scratch)._children[0]._children[0]._children[0]
+ ._children[0];
+ expect(fragment.type).to.equal(Fragment);
+ expect(getDomSibling(fragment)).to.equalNode(
+ scratch.firstChild.childNodes[1]
+ );
+ });
+
+ it('should find unrelated sibling from a Component VNode', () => {
+ const Foo = props => props.children;
+ render(
+ <div key="0">
+ <Fragment key="0.0">
+ <Fragment key="0.0.0">
+ <Foo key="0.0.0.0">
+ <div key="A">A</div>
+ </Foo>
+ </Fragment>
+ </Fragment>
+ <Fragment key="0.1">
+ <Fragment key="0.1.0">
+ <div key="B">B</div>
+ </Fragment>
+ </Fragment>
+ </div>,
+ scratch
+ );
+
+ let foo = getRoot(scratch)._children[0]._children[0]._children[0]
+ ._children[0];
+ expect(foo.type).to.equal(Foo);
+ expect(getDomSibling(foo)).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should find sibling through components', () => {
+ const Foo = props => props.children;
+ render(
+ <div key="0">
+ <Foo key="0.0">
+ <div key="A">A</div>
+ </Foo>
+ <Foo key="0.1" />
+ <Foo key="0.2">
+ <Foo key="0.2.0">
+ <div key="B">B</div>
+ </Foo>
+ </Foo>
+ </div>,
+ scratch
+ );
+
+ let divAVNode = getRoot(scratch)._children[0]._children[0]._children[0];
+ expect(divAVNode.type).to.equal('div');
+ expect(getDomSibling(divAVNode)).to.equalNode(
+ scratch.firstChild.childNodes[1]
+ );
+ });
+
+ it('should find sibling rendered in Components that wrap JSX children', () => {
+ const Foo = props => <p key="p">{props.children}</p>;
+ render(
+ <div key="0">
+ <div key="A">A</div>
+ <Foo key="Foo">
+ <span key="span">a span</span>
+ </Foo>
+ </div>,
+ scratch
+ );
+
+ let divAVNode = getRoot(scratch)._children[0]._children[0];
+ expect(divAVNode.type).to.equal('div');
+
+ let sibling = getDomSibling(divAVNode);
+ expect(sibling).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should find sibling rendered in Components without JSX children', () => {
+ const Foo = props => <p key="p">A paragraph</p>;
+ render(
+ <div key="0">
+ <div key="A">A</div>
+ <Foo key="Foo" />
+ </div>,
+ scratch
+ );
+
+ let divAVNode = getRoot(scratch)._children[0]._children[0];
+ expect(divAVNode.type).to.equal('div');
+
+ let sibling = getDomSibling(divAVNode);
+ expect(sibling).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should climb through Components without JSX children', () => {
+ const divAVNode = <div key="A">A</div>;
+ const Foo = () => divAVNode;
+
+ render(
+ <div key="0">
+ <Foo key="Foo" />
+ <div key="B">B</div>
+ </div>,
+ scratch
+ );
+
+ let sibling = getDomSibling(divAVNode);
+ expect(sibling).to.equalNode(scratch.firstChild.childNodes[1]);
+ });
+
+ it('should return null if last sibling', () => {
+ render(
+ <div key="0">
+ <Fragment key="0.0">
+ <div key="A">A</div>
+ </Fragment>
+ <Fragment key="0.1">
+ <div key="B">B</div>
+ </Fragment>
+ <Fragment key="0.2">
+ <div key="C">C</div>
+ </Fragment>
+ </div>,
+ scratch
+ );
+
+ const divCVNode = getRoot(scratch)._children[0]._children[2]._children[0];
+ expect(getDomSibling(divCVNode)).to.equal(null);
+ });
+
+ it('should return null if no sibling', () => {
+ render(
+ <div key="0">
+ <Fragment key="0.0">
+ <Fragment key="0.0.0">
+ <Fragment key="0.0.0.0">
+ <div key="A">A</div>
+ </Fragment>
+ </Fragment>
+ </Fragment>
+ <Fragment key="0.1">
+ <Fragment key="0.1.0">{null}</Fragment>
+ </Fragment>
+ </div>,
+ scratch
+ );
+
+ let divAVNode = getRoot(scratch)._children[0]._children[0]._children[0]
+ ._children[0]._children[0];
+ expect(getDomSibling(divAVNode)).to.equal(null);
+ });
+
+ it('should return null if no sibling with lots of empty trees', () => {
+ render(
+ <div key="0">
+ <Fragment key="0.0">
+ <Fragment key="0.0.0">
+ <Fragment key="0.0.0.0">
+ <div key="A">A</div>
+ </Fragment>
+ </Fragment>
+ </Fragment>
+ <Fragment key="0.1">
+ <Fragment key="0.1.0" />
+ <Fragment key="0.1.1" />
+ <Fragment key="0.1.2" />
+ </Fragment>
+ <Fragment key="0.2">
+ <Fragment key="0.2.0" />
+ <Fragment key="0.2.1" />
+ <Fragment key="0.2.2">{null}</Fragment>
+ </Fragment>
+ </div>,
+ scratch
+ );
+
+ let divAVNode = getRoot(scratch)._children[0]._children[0]._children[0]
+ ._children[0]._children[0];
+ expect(getDomSibling(divAVNode)).to.equal(null);
+ });
+
+ it('should return null if current parent has no siblings (even if parent has siblings at same level)', () => {
+ let divAVNode = <div key="A">A</div>;
+
+ render(
+ <div key="0">
+ <div key="0.0">
+ <div key="0.0.0" />
+ {divAVNode}
+ <Fragment key="0.1.2" />
+ </div>
+ <div key="0.1">
+ <Fragment key="0.1.0" />
+ <div key="B">B</div>
+ </div>
+ </div>,
+ scratch
+ );
+
+ expect(getDomSibling(divAVNode)).to.equal(null);
+ });
+});
diff --git a/preact/test/browser/hydrate.test.js b/preact/test/browser/hydrate.test.js
new file mode 100644
index 0000000..5f6e537
--- /dev/null
+++ b/preact/test/browser/hydrate.test.js
@@ -0,0 +1,454 @@
+import { createElement, hydrate, Fragment } from 'preact';
+import {
+ setupScratch,
+ teardown,
+ sortAttributes,
+ serializeHtml,
+ spyOnElementAttributes,
+ createEvent
+} from '../_util/helpers';
+import { ul, li, div } from '../_util/dom';
+import { logCall, clearLog, getLog } from '../_util/logCall';
+
+/** @jsx createElement */
+
+describe('hydrate()', () => {
+ /** @type {HTMLElement} */
+ let scratch;
+ let attributesSpy;
+
+ const List = ({ children }) => <ul>{children}</ul>;
+ const ListItem = ({ children, onClick = null }) => (
+ <li onClick={onClick}>{children}</li>
+ );
+
+ let resetAppendChild;
+ let resetInsertBefore;
+ let resetRemoveChild;
+ let resetRemove;
+ let resetSetAttribute;
+ let resetRemoveAttribute;
+
+ before(() => {
+ resetAppendChild = logCall(Element.prototype, 'appendChild');
+ resetInsertBefore = logCall(Element.prototype, 'insertBefore');
+ resetRemoveChild = logCall(Element.prototype, 'removeChild');
+ resetRemove = logCall(Element.prototype, 'remove');
+ resetSetAttribute = logCall(Element.prototype, 'setAttribute');
+ resetRemoveAttribute = logCall(Element.prototype, 'removeAttribute');
+ });
+
+ after(() => {
+ resetAppendChild();
+ resetInsertBefore();
+ resetRemoveChild();
+ resetRemove();
+ resetSetAttribute();
+ resetRemoveAttribute();
+ });
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ attributesSpy = spyOnElementAttributes();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ clearLog();
+ });
+
+ it('should reuse existing DOM', () => {
+ const onClickSpy = sinon.spy();
+ const html = ul([li('1'), li('2'), li('3')]);
+
+ scratch.innerHTML = html;
+ clearLog();
+
+ hydrate(
+ <ul>
+ <li>1</li>
+ <li>2</li>
+ <li onClick={onClickSpy}>3</li>
+ </ul>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ expect(onClickSpy).not.to.have.been.called;
+
+ scratch.querySelector('li:last-child').dispatchEvent(createEvent('click'));
+
+ expect(onClickSpy).to.have.been.called.calledOnce;
+ });
+
+ it('should reuse existing DOM when given components', () => {
+ const onClickSpy = sinon.spy();
+ const html = ul([li('1'), li('2'), li('3')]);
+
+ scratch.innerHTML = html;
+ clearLog();
+
+ hydrate(
+ <List>
+ <ListItem>1</ListItem>
+ <ListItem>2</ListItem>
+ <ListItem onClick={onClickSpy}>3</ListItem>
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ expect(onClickSpy).not.to.have.been.called;
+
+ scratch.querySelector('li:last-child').dispatchEvent(createEvent('click'));
+
+ expect(onClickSpy).to.have.been.called.calledOnce;
+ });
+
+ it('should properly set event handlers to existing DOM when given components', () => {
+ const proto = Element.prototype;
+ sinon.spy(proto, 'addEventListener');
+
+ const clickHandlers = [sinon.spy(), sinon.spy(), sinon.spy()];
+
+ const html = ul([li('1'), li('2'), li('3')]);
+
+ scratch.innerHTML = html;
+ clearLog();
+
+ hydrate(
+ <List>
+ <ListItem onClick={clickHandlers[0]}>1</ListItem>
+ <ListItem onClick={clickHandlers[1]}>2</ListItem>
+ <ListItem onClick={clickHandlers[2]}>3</ListItem>
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ expect(proto.addEventListener).to.have.been.calledThrice;
+ expect(clickHandlers[2]).not.to.have.been.called;
+
+ scratch.querySelector('li:last-child').dispatchEvent(createEvent('click'));
+ expect(clickHandlers[2]).to.have.been.calledOnce;
+ });
+
+ it('should add missing nodes to existing DOM when hydrating', () => {
+ const html = ul([li('1')]);
+
+ scratch.innerHTML = html;
+ clearLog();
+
+ hydrate(
+ <List>
+ <ListItem>1</ListItem>
+ <ListItem>2</ListItem>
+ <ListItem>3</ListItem>
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(ul([li('1'), li('2'), li('3')]));
+ expect(getLog()).to.deep.equal([
+ '<li>.appendChild(#text)',
+ '<ul>1.appendChild(<li>2)',
+ '<li>.appendChild(#text)',
+ '<ul>12.appendChild(<li>3)'
+ ]);
+ });
+
+ it('should remove extra nodes from existing DOM when hydrating', () => {
+ const html = ul([li('1'), li('2'), li('3'), li('4')]);
+
+ scratch.innerHTML = html;
+ clearLog();
+
+ hydrate(
+ <List>
+ <ListItem>1</ListItem>
+ <ListItem>2</ListItem>
+ <ListItem>3</ListItem>
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(ul([li('1'), li('2'), li('3')]));
+ expect(getLog()).to.deep.equal(['<li>4.remove()']);
+ });
+
+ it('should not update attributes on existing DOM', () => {
+ scratch.innerHTML =
+ '<div><span before-hydrate="test" same-value="foo" different-value="a">Test</span></div>';
+ let vnode = (
+ <div>
+ <span same-value="foo" different-value="b" new-value="c">
+ Test
+ </span>
+ </div>
+ );
+
+ clearLog();
+ hydrate(vnode, scratch);
+
+ // IE11 doesn't support spying on Element.prototype
+ if (!/Trident/.test(navigator.userAgent)) {
+ expect(attributesSpy.get).to.not.have.been.called;
+ }
+
+ expect(serializeHtml(scratch)).to.equal(
+ sortAttributes(
+ '<div><span before-hydrate="test" different-value="a" same-value="foo">Test</span></div>'
+ )
+ );
+ expect(getLog()).to.deep.equal([]);
+ });
+
+ it('should update class attribute via className prop', () => {
+ scratch.innerHTML = '<div class="foo">bar</div>';
+ hydrate(<div className="foo">bar</div>, scratch);
+ expect(scratch.innerHTML).to.equal('<div class="foo">bar</div>');
+ });
+
+ it('should correctly hydrate with Fragments', () => {
+ const html = ul([li('1'), li('2'), li('3'), li('4')]);
+
+ scratch.innerHTML = html;
+ clearLog();
+
+ const clickHandlers = [sinon.spy(), sinon.spy(), sinon.spy(), sinon.spy()];
+
+ hydrate(
+ <List>
+ <ListItem onClick={clickHandlers[0]}>1</ListItem>
+ <Fragment>
+ <ListItem onClick={clickHandlers[1]}>2</ListItem>
+ <ListItem onClick={clickHandlers[2]}>3</ListItem>
+ </Fragment>
+ <ListItem onClick={clickHandlers[3]}>4</ListItem>
+ </List>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ expect(clickHandlers[2]).not.to.have.been.called;
+
+ scratch
+ .querySelector('li:nth-child(3)')
+ .dispatchEvent(createEvent('click'));
+
+ expect(clickHandlers[2]).to.have.been.called.calledOnce;
+ });
+
+ it('should correctly hydrate root Fragments', () => {
+ const html = [
+ ul([li('1'), li('2'), li('3'), li('4')]),
+ div('sibling')
+ ].join('');
+
+ scratch.innerHTML = html;
+ clearLog();
+
+ const clickHandlers = [
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy(),
+ sinon.spy()
+ ];
+
+ hydrate(
+ <Fragment>
+ <List>
+ <Fragment>
+ <ListItem onClick={clickHandlers[0]}>1</ListItem>
+ <ListItem onClick={clickHandlers[1]}>2</ListItem>
+ </Fragment>
+ <ListItem onClick={clickHandlers[2]}>3</ListItem>
+ <ListItem onClick={clickHandlers[3]}>4</ListItem>
+ </List>
+ <div onClick={clickHandlers[4]}>sibling</div>
+ </Fragment>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(html);
+ expect(getLog()).to.deep.equal([]);
+ expect(clickHandlers[2]).not.to.have.been.called;
+
+ scratch
+ .querySelector('li:nth-child(3)')
+ .dispatchEvent(createEvent('click'));
+
+ expect(clickHandlers[2]).to.have.been.calledOnce;
+ expect(clickHandlers[4]).not.to.have.been.called;
+
+ scratch.querySelector('div').dispatchEvent(createEvent('click'));
+
+ expect(clickHandlers[2]).to.have.been.calledOnce;
+ expect(clickHandlers[4]).to.have.been.calledOnce;
+ });
+
+ // Failing because the following condition in diffElementNodes doesn't evaluate to true
+ // when hydrating a dom node which is not correct
+ // dom===d && newVNode.text!==oldVNode.text
+ // We don't set `d` when hydrating. If we did, then newVNode.text would never equal
+ // oldVNode.text since oldVNode is always EMPTY_OBJ when hydrating
+ it.skip('should override incorrect pre-existing DOM with VNodes passed into render', () => {
+ const initialHtml = [
+ div('sibling'),
+ ul([li('1'), li('4'), li('3'), li('2')])
+ ].join('');
+
+ scratch.innerHTML = initialHtml;
+ clearLog();
+
+ hydrate(
+ <Fragment>
+ <List>
+ <Fragment>
+ <ListItem>1</ListItem>
+ <ListItem>2</ListItem>
+ </Fragment>
+ <ListItem>3</ListItem>
+ <ListItem>4</ListItem>
+ </List>
+ <div>sibling</div>
+ </Fragment>,
+ scratch
+ );
+
+ const finalHtml = [
+ ul([li('1'), li('2'), li('3'), li('4')]),
+ div('sibling')
+ ].join('');
+
+ expect(scratch.innerHTML).to.equal(finalHtml);
+ // TODO: Fill in with proper log once this test is passing
+ expect(getLog()).to.deep.equal([]);
+ });
+
+ it('should not merge attributes with node created by the DOM', () => {
+ const html = htmlString => {
+ const div = document.createElement('div');
+ div.innerHTML = htmlString;
+ return div.firstChild;
+ };
+
+ // prettier-ignore
+ const DOMElement = html`<div><a foo="bar"></a></div>`;
+ scratch.appendChild(DOMElement);
+
+ const preactElement = (
+ <div>
+ <a />
+ </div>
+ );
+
+ hydrate(preactElement, scratch);
+ // IE11 doesn't support spies on built-in prototypes
+ if (!/Trident/.test(navigator.userAgent)) {
+ expect(attributesSpy.get).to.not.have.been.called;
+ }
+ expect(scratch).to.have.property(
+ 'innerHTML',
+ '<div><a foo="bar"></a></div>'
+ );
+ });
+
+ it('should attach event handlers', () => {
+ let spy = sinon.spy();
+ scratch.innerHTML = '<span>Test</span>';
+ let vnode = <span onClick={spy}>Test</span>;
+
+ hydrate(vnode, scratch);
+
+ scratch.firstChild.click();
+ expect(spy).to.be.calledOnce;
+ });
+
+ // #2237
+ it('should not redundantly add text nodes', () => {
+ scratch.innerHTML = '<div id="test"><p>hello bar</p></div>';
+ const element = document.getElementById('test');
+ const Component = props => <p>hello {props.foo}</p>;
+
+ hydrate(<Component foo="bar" />, element);
+ expect(element.innerHTML).to.equal('<p>hello bar</p>');
+ });
+
+ it('should not remove values', () => {
+ scratch.innerHTML =
+ '<select><option value="0">Zero</option><option selected value="2">Two</option></select>';
+ const App = () => {
+ const options = [
+ {
+ value: '0',
+ label: 'Zero'
+ },
+ {
+ value: '2',
+ label: 'Two'
+ }
+ ];
+
+ return (
+ <select value="2">
+ {options.map(({ disabled, label, value }) => (
+ <option key={label} disabled={disabled} value={value}>
+ {label}
+ </option>
+ ))}
+ </select>
+ );
+ };
+
+ hydrate(<App />, scratch);
+ expect(sortAttributes(scratch.innerHTML)).to.equal(
+ sortAttributes(
+ '<select><option value="0">Zero</option><option selected="" value="2">Two</option></select>'
+ )
+ );
+ });
+
+ it('should deopt for trees introduced in hydrate (append)', () => {
+ scratch.innerHTML = '<div id="test"><p class="hi">hello bar</p></div>';
+ const Component = props => <p class="hi">hello {props.foo}</p>;
+ const element = document.getElementById('test');
+ hydrate(
+ <Fragment>
+ <Component foo="bar" />
+ <Component foo="baz" />
+ </Fragment>,
+ element
+ );
+ expect(element.innerHTML).to.equal(
+ '<p class="hi">hello bar</p><p class="hi">hello baz</p>'
+ );
+ });
+
+ it('should deopt for trees introduced in hydrate (insert before)', () => {
+ scratch.innerHTML = '<div id="test"><p class="hi">hello bar</p></div>';
+ const Component = props => <p class="hi">hello {props.foo}</p>;
+ const element = document.getElementById('test');
+ hydrate(
+ <Fragment>
+ <Component foo="baz" />
+ <Component foo="bar" />
+ </Fragment>,
+ element
+ );
+ expect(element.innerHTML).to.equal(
+ '<p class="hi">hello baz</p><p class="hi">hello bar</p>'
+ );
+ });
+
+ it('should skip comment nodes', () => {
+ scratch.innerHTML = '<p>hello <!-- c -->foo</p>';
+ hydrate(<p>hello {'foo'}</p>, scratch);
+ expect(scratch.innerHTML).to.equal('<p>hello foo</p>');
+ });
+});
diff --git a/preact/test/browser/isValidElement.test.js b/preact/test/browser/isValidElement.test.js
new file mode 100644
index 0000000..fe2e6a0
--- /dev/null
+++ b/preact/test/browser/isValidElement.test.js
@@ -0,0 +1,4 @@
+import { createElement, isValidElement, Component } from 'preact';
+import { isValidElementTests } from '../shared/isValidElementTests';
+
+isValidElementTests(expect, isValidElement, createElement, Component);
diff --git a/preact/test/browser/keys.test.js b/preact/test/browser/keys.test.js
new file mode 100644
index 0000000..7f6c0e8
--- /dev/null
+++ b/preact/test/browser/keys.test.js
@@ -0,0 +1,627 @@
+import { createElement, Component, render } from 'preact';
+import { setupScratch, teardown } from '../_util/helpers';
+import { logCall, clearLog, getLog } from '../_util/logCall';
+import { div } from '../_util/dom';
+
+/** @jsx createElement */
+
+describe('keys', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {string[]} */
+ let ops;
+
+ function createStateful(name) {
+ return class Stateful extends Component {
+ componentDidUpdate() {
+ ops.push(`Update ${name}`);
+ }
+ componentDidMount() {
+ ops.push(`Mount ${name}`);
+ }
+ componentWillUnmount() {
+ ops.push(`Unmount ${name}`);
+ }
+ render() {
+ return <div>{name}</div>;
+ }
+ };
+ }
+
+ /** @type {(props: {values: any[]}) => any} */
+ const List = props => (
+ <ol>
+ {props.values.map(value => (
+ <li key={value}>{value}</li>
+ ))}
+ </ol>
+ );
+
+ /**
+ * Move an element in an array from one index to another
+ * @param {any[]} values The array of values
+ * @param {number} from The index to move from
+ * @param {number} to The index to move to
+ */
+ function move(values, from, to) {
+ const value = values[from];
+ values.splice(from, 1);
+ values.splice(to, 0, value);
+ }
+
+ let resetAppendChild;
+ let resetInsertBefore;
+ let resetRemoveChild;
+ let resetRemove;
+
+ before(() => {
+ resetAppendChild = logCall(Element.prototype, 'appendChild');
+ resetInsertBefore = logCall(Element.prototype, 'insertBefore');
+ resetRemoveChild = logCall(Element.prototype, 'removeChild');
+ resetRemove = logCall(Element.prototype, 'remove');
+ });
+
+ after(() => {
+ resetAppendChild();
+ resetInsertBefore();
+ resetRemoveChild();
+ resetRemove();
+ });
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ ops = [];
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ clearLog();
+ });
+
+ // https://fb.me/react-special-props
+ it('should not pass key in props', () => {
+ const Foo = sinon.spy(() => null);
+ render(<Foo key="foo" />, scratch);
+ expect(Foo.args[0][0]).to.deep.equal({});
+ });
+
+ // See preactjs/preact-compat#21
+ it('should remove orphaned keyed nodes', () => {
+ render(
+ <div>
+ <div>1</div>
+ <li key="a">a</li>
+ <li key="b">b</li>
+ </div>,
+ scratch
+ );
+
+ render(
+ <div>
+ <div>2</div>
+ <li key="b">b</li>
+ <li key="c">c</li>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.innerHTML).to.equal(
+ '<div><div>2</div><li>b</li><li>c</li></div>'
+ );
+ });
+
+ it('should remove keyed nodes (#232)', () => {
+ class App extends Component {
+ componentDidMount() {
+ setTimeout(() => this.setState({ opened: true, loading: true }), 10);
+ setTimeout(() => this.setState({ opened: true, loading: false }), 20);
+ }
+
+ render({ opened, loading }) {
+ return (
+ <BusyIndicator id="app" busy={loading}>
+ <div>This div needs to be here for this to break</div>
+ {opened && !loading && <div>{[]}</div>}
+ </BusyIndicator>
+ );
+ }
+ }
+
+ class BusyIndicator extends Component {
+ render({ children, busy }) {
+ return (
+ <div class={busy ? 'busy' : ''}>
+ {children && children.length ? (
+ children
+ ) : (
+ <div class="busy-placeholder" />
+ )}
+ <div class="indicator">
+ <div>indicator</div>
+ <div>indicator</div>
+ <div>indicator</div>
+ </div>
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ render(<App opened loading />, scratch);
+ render(<App opened />, scratch);
+
+ const html = String(scratch.firstChild.innerHTML).replace(/ class=""/g, '');
+ expect(html).to.equal(
+ '<div>This div needs to be here for this to break</div><div></div><div class="indicator"><div>indicator</div><div>indicator</div><div>indicator</div></div>'
+ );
+ });
+
+ it('should append new keyed elements', () => {
+ const values = ['a', 'b'];
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('ab');
+
+ values.push('c');
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abc');
+ expect(getLog()).to.deep.equal([
+ '<li>.appendChild(#text)',
+ '<ol>ab.appendChild(<li>c)'
+ ]);
+ });
+
+ it('should remove keyed elements from the end', () => {
+ const values = ['a', 'b', 'c', 'd'];
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abcd');
+
+ values.pop();
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abc');
+ expect(getLog()).to.deep.equal(['<li>d.remove()']);
+ });
+
+ it('should prepend keyed elements to the beginning', () => {
+ const values = ['b', 'c'];
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('bc');
+
+ values.unshift('a');
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abc');
+ expect(getLog()).to.deep.equal([
+ '<li>.appendChild(#text)',
+ '<ol>bc.insertBefore(<li>a, <li>b)'
+ ]);
+ });
+
+ it('should remove keyed elements from the beginning', () => {
+ const values = ['z', 'a', 'b', 'c'];
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('zabc');
+
+ values.shift();
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abc');
+ expect(getLog()).to.deep.equal(['<li>z.remove()']);
+ });
+
+ it('should insert new keyed children in the middle', () => {
+ const values = ['a', 'c'];
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('ac');
+
+ values.splice(1, 0, 'b');
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abc');
+ expect(getLog()).to.deep.equal([
+ '<li>.appendChild(#text)',
+ '<ol>ac.insertBefore(<li>b, <li>c)'
+ ]);
+ });
+
+ it('should remove keyed children from the middle', () => {
+ const values = ['a', 'b', 'x', 'y', 'z', 'c', 'd'];
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abxyzcd');
+
+ values.splice(2, 3);
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abcd');
+ expect(getLog()).to.deep.equal([
+ '<li>z.remove()',
+ '<li>y.remove()',
+ '<li>x.remove()'
+ ]);
+ });
+
+ it('should swap keyed children efficiently', () => {
+ render(<List values={['a', 'b']} />, scratch);
+ expect(scratch.textContent).to.equal('ab');
+
+ clearLog();
+
+ render(<List values={['b', 'a']} />, scratch);
+ expect(scratch.textContent).to.equal('ba');
+
+ expect(getLog()).to.deep.equal(['<ol>ab.appendChild(<li>a)']);
+ });
+
+ it('should swap existing keyed children in the middle of a list efficiently', () => {
+ const values = ['a', 'b', 'c', 'd'];
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abcd');
+
+ // swap
+ move(values, 1, 2);
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('acbd', 'initial swap');
+ expect(getLog()).to.deep.equal(
+ ['<ol>abcd.insertBefore(<li>b, <li>d)'],
+ 'initial swap'
+ );
+
+ // swap back
+ move(values, 2, 1);
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abcd', 'swap back');
+ expect(getLog()).to.deep.equal(
+ ['<ol>acbd.insertBefore(<li>c, <li>d)'],
+ 'swap back'
+ );
+ });
+
+ it('should move keyed children to the end of the list', () => {
+ const values = ['a', 'b', 'c', 'd'];
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abcd');
+
+ // move to end
+ move(values, 0, values.length - 1);
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('bcda', 'move to end');
+ expect(getLog()).to.deep.equal(
+ ['<ol>abcd.appendChild(<li>a)'],
+ 'move to end'
+ );
+
+ // move to beginning
+ move(values, values.length - 1, 0);
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal('abcd', 'move to beginning');
+ expect(getLog()).to.deep.equal(
+ ['<ol>bcda.insertBefore(<li>a, <li>b)'],
+ 'move to beginning'
+ );
+ });
+
+ it('should reverse keyed children effectively', () => {
+ const values = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal(values.join(''));
+
+ // reverse list
+ values.reverse();
+ clearLog();
+
+ render(<List values={values} />, scratch);
+ expect(scratch.textContent).to.equal(values.join(''));
+ expect(getLog()).to.deep.equal([
+ '<ol>abcdefghij.insertBefore(<li>j, <li>a)',
+ '<ol>jabcdefghi.insertBefore(<li>i, <li>a)',
+ '<ol>jiabcdefgh.insertBefore(<li>h, <li>a)',
+ '<ol>jihabcdefg.insertBefore(<li>g, <li>a)',
+ '<ol>jihgabcdef.appendChild(<li>e)',
+ '<ol>jihgabcdfe.appendChild(<li>d)',
+ '<ol>jihgabcfed.appendChild(<li>c)',
+ '<ol>jihgabfedc.appendChild(<li>b)',
+ '<ol>jihgafedcb.appendChild(<li>a)'
+ ]);
+ });
+
+ it("should not preserve state when a component's keys are different", () => {
+ const Stateful = createStateful('Stateful');
+
+ function Foo({ condition }) {
+ return condition ? <Stateful key="a" /> : <Stateful key="b" />;
+ }
+
+ ops = [];
+ render(<Foo condition />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Stateful</div>');
+ expect(ops).to.deep.equal(['Mount Stateful'], 'initial mount');
+
+ ops = [];
+ render(<Foo condition={false} />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Stateful</div>');
+ expect(ops).to.deep.equal(
+ ['Unmount Stateful', 'Mount Stateful'],
+ 'switching keys 1'
+ );
+
+ ops = [];
+ render(<Foo condition />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Stateful</div>');
+ expect(ops).to.deep.equal(
+ ['Unmount Stateful', 'Mount Stateful'],
+ 'switching keys 2'
+ );
+ });
+
+ it('should not preserve state between an unkeyed and keyed component', () => {
+ // React and Preact v8 behavior: https://codesandbox.io/s/57prmy5mx
+
+ const Stateful = createStateful('Stateful');
+
+ function Foo({ keyed }) {
+ return keyed ? <Stateful key="a" /> : <Stateful />;
+ }
+
+ ops = [];
+ render(<Foo keyed />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Stateful</div>');
+ expect(ops).to.deep.equal(['Mount Stateful'], 'initial mount with key');
+
+ ops = [];
+ render(<Foo keyed={false} />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Stateful</div>');
+ expect(ops).to.deep.equal(
+ ['Unmount Stateful', 'Mount Stateful'],
+ 'switching from keyed to unkeyed'
+ );
+
+ ops = [];
+ render(<Foo keyed />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Stateful</div>');
+ expect(ops).to.deep.equal(
+ ['Unmount Stateful', 'Mount Stateful'],
+ 'switching from unkeyed to keyed'
+ );
+ });
+
+ it('should not preserve state when keys change with multiple children', () => {
+ // React & Preact v8 behavior: https://codesandbox.io/s/8l3p6lz9kj
+
+ const Stateful1 = createStateful('Stateful1');
+ const Stateful2 = createStateful('Stateful2');
+
+ let Stateful1Ref;
+ let Stateful2Ref;
+ let Stateful1MovedRef;
+ let Stateful2MovedRef;
+
+ function Foo({ moved }) {
+ return moved ? (
+ <div>
+ <div>1</div>
+ <Stateful1 key="c" ref={c => (Stateful1MovedRef = c)} />
+ <div>2</div>
+ <Stateful2 key="d" ref={c => (Stateful2MovedRef = c)} />
+ </div>
+ ) : (
+ <div>
+ <div>1</div>
+ <Stateful1 key="a" ref={c => (Stateful1Ref = c)} />
+ <div>2</div>
+ <Stateful2 key="b" ref={c => (Stateful2Ref = c)} />
+ </div>
+ );
+ }
+
+ const expectedHtml = div([
+ div(1),
+ div('Stateful1'),
+ div(2),
+ div('Stateful2')
+ ]);
+
+ ops = [];
+ render(<Foo moved={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(expectedHtml);
+ expect(ops).to.deep.equal(['Mount Stateful1', 'Mount Stateful2']);
+ expect(Stateful1Ref).to.exist;
+ expect(Stateful2Ref).to.exist;
+
+ ops = [];
+ render(<Foo moved />, scratch);
+
+ expect(scratch.innerHTML).to.equal(expectedHtml);
+ expect(ops).to.deep.equal([
+ 'Unmount Stateful2',
+ 'Unmount Stateful1',
+ 'Mount Stateful1',
+ 'Mount Stateful2'
+ ]);
+ expect(Stateful1MovedRef).to.not.equal(Stateful1Ref);
+ expect(Stateful2MovedRef).to.not.equal(Stateful2Ref);
+
+ ops = [];
+ render(<Foo moved={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(expectedHtml);
+ expect(ops).to.deep.equal([
+ 'Unmount Stateful2',
+ 'Unmount Stateful1',
+ 'Mount Stateful1',
+ 'Mount Stateful2'
+ ]);
+ expect(Stateful1Ref).to.not.equal(Stateful1MovedRef);
+ expect(Stateful2Ref).to.not.equal(Stateful2MovedRef);
+ });
+
+ it('should preserve state when moving keyed children components', () => {
+ // React & Preact v8 behavior: https://codesandbox.io/s/8l3p6lz9kj
+
+ const Stateful1 = createStateful('Stateful1');
+ const Stateful2 = createStateful('Stateful2');
+
+ let Stateful1Ref;
+ let Stateful2Ref;
+ let Stateful1MovedRef;
+ let Stateful2MovedRef;
+
+ function Foo({ moved }) {
+ return moved ? (
+ <div>
+ <div>1</div>
+ <Stateful2
+ key="b"
+ ref={c => (c ? (Stateful2MovedRef = c) : undefined)}
+ />
+ <div>2</div>
+ <Stateful1
+ key="a"
+ ref={c => (c ? (Stateful1MovedRef = c) : undefined)}
+ />
+ </div>
+ ) : (
+ <div>
+ <div>1</div>
+ <Stateful1 key="a" ref={c => (c ? (Stateful1Ref = c) : undefined)} />
+ <div>2</div>
+ <Stateful2 key="b" ref={c => (c ? (Stateful2Ref = c) : undefined)} />
+ </div>
+ );
+ }
+
+ const htmlForFalse = div([
+ div(1),
+ div('Stateful1'),
+ div(2),
+ div('Stateful2')
+ ]);
+
+ const htmlForTrue = div([
+ div(1),
+ div('Stateful2'),
+ div(2),
+ div('Stateful1')
+ ]);
+
+ ops = [];
+ render(<Foo moved={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(htmlForFalse);
+ expect(ops).to.deep.equal(['Mount Stateful1', 'Mount Stateful2']);
+ expect(Stateful1Ref).to.exist;
+ expect(Stateful2Ref).to.exist;
+
+ ops = [];
+ render(<Foo moved />, scratch);
+
+ expect(scratch.innerHTML).to.equal(htmlForTrue);
+ expect(ops).to.deep.equal(['Update Stateful2', 'Update Stateful1']);
+ expect(Stateful1MovedRef).to.equal(Stateful1Ref);
+ expect(Stateful2MovedRef).to.equal(Stateful2Ref);
+
+ ops = [];
+ render(<Foo moved={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(htmlForFalse);
+ expect(ops).to.deep.equal(['Update Stateful1', 'Update Stateful2']);
+ expect(Stateful1Ref).to.equal(Stateful1MovedRef);
+ expect(Stateful2Ref).to.equal(Stateful2MovedRef);
+ });
+
+ it('should not preserve state when switching between keyed and unkeyed components as children', () => {
+ // React & Preact v8 behavior: https://codesandbox.io/s/8l3p6lz9kj
+
+ const Stateful1 = createStateful('Stateful1');
+ const Stateful2 = createStateful('Stateful2');
+
+ let Stateful1Ref;
+ let Stateful2Ref;
+ let Stateful1MovedRef;
+ let Stateful2MovedRef;
+
+ function Foo({ unkeyed }) {
+ return unkeyed ? (
+ <div>
+ <div>1</div>
+ <Stateful1 ref={c => (Stateful2MovedRef = c)} />
+ <div>2</div>
+ <Stateful2 ref={c => (Stateful1MovedRef = c)} />
+ </div>
+ ) : (
+ <div>
+ <div>1</div>
+ <Stateful1 key="a" ref={c => (Stateful1Ref = c)} />
+ <div>2</div>
+ <Stateful2 key="b" ref={c => (Stateful2Ref = c)} />
+ </div>
+ );
+ }
+
+ const expectedHtml = div([
+ div(1),
+ div('Stateful1'),
+ div(2),
+ div('Stateful2')
+ ]);
+
+ ops = [];
+ render(<Foo unkeyed={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(expectedHtml);
+ expect(ops).to.deep.equal(['Mount Stateful1', 'Mount Stateful2']);
+ expect(Stateful1Ref).to.exist;
+ expect(Stateful2Ref).to.exist;
+
+ ops = [];
+ render(<Foo unkeyed />, scratch);
+
+ expect(scratch.innerHTML).to.equal(expectedHtml);
+ expect(ops).to.deep.equal([
+ 'Unmount Stateful2',
+ 'Unmount Stateful1',
+ 'Mount Stateful1',
+ 'Mount Stateful2'
+ ]);
+ expect(Stateful1MovedRef).to.not.equal(Stateful1Ref);
+ expect(Stateful2MovedRef).to.not.equal(Stateful2Ref);
+
+ ops = [];
+ render(<Foo unkeyed={false} />, scratch);
+
+ expect(scratch.innerHTML).to.equal(expectedHtml);
+ expect(ops).to.deep.equal([
+ 'Unmount Stateful2',
+ 'Unmount Stateful1',
+ 'Mount Stateful1',
+ 'Mount Stateful2'
+ ]);
+ expect(Stateful1Ref).to.not.equal(Stateful1MovedRef);
+ expect(Stateful2Ref).to.not.equal(Stateful2MovedRef);
+ });
+});
diff --git a/preact/test/browser/lifecycles/componentDidCatch.test.js b/preact/test/browser/lifecycles/componentDidCatch.test.js
new file mode 100644
index 0000000..6587dd6
--- /dev/null
+++ b/preact/test/browser/lifecycles/componentDidCatch.test.js
@@ -0,0 +1,672 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component, Fragment } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /* eslint-disable react/display-name */
+
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('#componentDidCatch', () => {
+ /** @type {Error} */
+ let expectedError;
+
+ /** @type {typeof import('../../../').Component} */
+ let ThrowErr;
+ class Receiver extends Component {
+ componentDidCatch(error) {
+ this.setState({ error });
+ }
+
+ render() {
+ return this.state.error
+ ? String(this.state.error)
+ : this.props.children;
+ }
+ }
+
+ let thrower;
+
+ sinon.spy(Receiver.prototype, 'componentDidCatch');
+ sinon.spy(Receiver.prototype, 'render');
+
+ function throwExpectedError() {
+ throw (expectedError = new Error('Error!'));
+ }
+
+ beforeEach(() => {
+ ThrowErr = class ThrowErr extends Component {
+ constructor(props) {
+ super(props);
+ thrower = this;
+ }
+
+ componentDidCatch() {
+ expect.fail("Throwing component should not catch it's own error.");
+ }
+ render() {
+ return <div>ThrowErr: componentDidCatch</div>;
+ }
+ };
+ sinon.spy(ThrowErr.prototype, 'componentDidCatch');
+
+ expectedError = undefined;
+
+ Receiver.prototype.componentDidCatch.resetHistory();
+ Receiver.prototype.render.resetHistory();
+ });
+
+ afterEach(() => {
+ expect(
+ ThrowErr.prototype.componentDidCatch,
+ "Throwing component should not catch it's own error."
+ ).to.not.be.called;
+ thrower = undefined;
+ });
+
+ it('should be called when child fails in constructor', () => {
+ class ThrowErr extends Component {
+ constructor(props, context) {
+ super(props, context);
+ throwExpectedError();
+ }
+ componentDidCatch() {
+ expect.fail("Throwing component should not catch it's own error");
+ }
+ render() {
+ return <div />;
+ }
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ rerender();
+
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ // https://github.com/preactjs/preact/issues/1570
+ it('should handle double child throws', () => {
+ const Child = ({ i }) => {
+ throw new Error(`error! ${i}`);
+ };
+
+ const fn = () =>
+ render(
+ <Receiver>
+ {[1, 2].map(i => (
+ <Child key={i} i={i} />
+ ))}
+ </Receiver>,
+ scratch
+ );
+ expect(fn).to.not.throw();
+
+ rerender();
+ expect(scratch.innerHTML).to.equal('Error: error! 2');
+ });
+
+ it('should be called when child fails in componentWillMount', () => {
+ ThrowErr.prototype.componentWillMount = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in render', () => {
+ ThrowErr.prototype.render = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentDidMount', () => {
+ ThrowErr.prototype.componentDidMount = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in getDerivedStateFromProps', () => {
+ ThrowErr.getDerivedStateFromProps = throwExpectedError;
+
+ sinon.spy(ThrowErr.prototype, 'render');
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ expect(ThrowErr.prototype.render).not.to.have.been.called;
+ });
+
+ it('should be called when child fails in getSnapshotBeforeUpdate', () => {
+ ThrowErr.prototype.getSnapshotBeforeUpdate = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ thrower.forceUpdate();
+ rerender();
+
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentDidUpdate', () => {
+ ThrowErr.prototype.componentDidUpdate = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+
+ thrower.forceUpdate();
+ rerender();
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentWillUpdate', () => {
+ ThrowErr.prototype.componentWillUpdate = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+
+ thrower.forceUpdate();
+ rerender();
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentWillReceiveProps', () => {
+ ThrowErr.prototype.componentWillReceiveProps = throwExpectedError;
+
+ let receiver;
+ class Receiver extends Component {
+ constructor() {
+ super();
+ this.state = { foo: 'bar' };
+ receiver = this;
+ }
+ componentDidCatch(error) {
+ this.setState({ error });
+ }
+ render() {
+ return this.state.error ? (
+ String(this.state.error)
+ ) : (
+ <ThrowErr foo={this.state.foo} />
+ );
+ }
+ }
+
+ sinon.spy(Receiver.prototype, 'componentDidCatch');
+ render(<Receiver />, scratch);
+
+ receiver.setState({ foo: 'baz' });
+ rerender();
+
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in shouldComponentUpdate', () => {
+ ThrowErr.prototype.shouldComponentUpdate = throwExpectedError;
+
+ let receiver;
+ class Receiver extends Component {
+ constructor() {
+ super();
+ this.state = { foo: 'bar' };
+ receiver = this;
+ }
+ componentDidCatch(error) {
+ this.setState({ error });
+ }
+ render() {
+ return this.state.error ? (
+ String(this.state.error)
+ ) : (
+ <ThrowErr foo={this.state.foo} />
+ );
+ }
+ }
+
+ sinon.spy(Receiver.prototype, 'componentDidCatch');
+ render(<Receiver />, scratch);
+
+ receiver.setState({ foo: 'baz' });
+ rerender();
+
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentWillUnmount', () => {
+ ThrowErr.prototype.componentWillUnmount = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ render(
+ <Receiver>
+ <div />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when applying a Component ref', () => {
+ const Foo = () => <div />;
+
+ const ref = value => {
+ if (value) {
+ throwExpectedError();
+ }
+ };
+
+ // In React, an error boundary handles it's own refs:
+ // https://codesandbox.io/s/react-throwing-refs-lk958
+ class Receiver extends Component {
+ componentDidCatch(error) {
+ this.setState({ error });
+ }
+ render() {
+ return this.state.error ? (
+ String(this.state.error)
+ ) : (
+ <Foo ref={ref} />
+ );
+ }
+ }
+
+ sinon.spy(Receiver.prototype, 'componentDidCatch');
+ render(<Receiver />, scratch);
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when applying a DOM ref', () => {
+ const ref = value => {
+ if (value) {
+ throwExpectedError();
+ }
+ };
+
+ // In React, an error boundary handles it's own refs:
+ // https://codesandbox.io/s/react-throwing-refs-lk958
+ class Receiver extends Component {
+ componentDidCatch(error) {
+ this.setState({ error });
+ }
+ render() {
+ return this.state.error ? (
+ String(this.state.error)
+ ) : (
+ <div ref={ref} />
+ );
+ }
+ }
+
+ sinon.spy(Receiver.prototype, 'componentDidCatch');
+ render(<Receiver />, scratch);
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when unmounting a ref', () => {
+ const ref = value => {
+ if (value == null) {
+ throwExpectedError();
+ }
+ };
+
+ ThrowErr.prototype.render = () => <div ref={ref} />;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ render(
+ <Receiver>
+ <div />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledOnceWith(
+ expectedError
+ );
+ });
+
+ it('should be called when functional child fails', () => {
+ function ThrowErr() {
+ throwExpectedError();
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child inside a Fragment fails', () => {
+ function ThrowErr() {
+ throwExpectedError();
+ }
+
+ render(
+ <Receiver>
+ <Fragment>
+ <ThrowErr />
+ </Fragment>
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should re-render with new content', () => {
+ class ThrowErr extends Component {
+ componentWillMount() {
+ throw new Error('Error contents');
+ }
+ render() {
+ return 'No error!?!?';
+ }
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ rerender();
+ expect(scratch).to.have.property('textContent', 'Error: Error contents');
+ });
+
+ it('should be able to adapt and rethrow errors', () => {
+ let adaptedError;
+ class Adapter extends Component {
+ componentDidCatch(error) {
+ throw (adaptedError = new Error(
+ 'Adapted ' +
+ String(error && 'message' in error ? error.message : error)
+ ));
+ }
+ render() {
+ return <div>{this.props.children}</div>;
+ }
+ }
+
+ function ThrowErr() {
+ throwExpectedError();
+ }
+
+ sinon.spy(Adapter.prototype, 'componentDidCatch');
+ render(
+ <Receiver>
+ <Adapter>
+ <ThrowErr />
+ </Adapter>
+ </Receiver>,
+ scratch
+ );
+
+ expect(Adapter.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ adaptedError
+ );
+
+ rerender();
+ expect(scratch).to.have.property('textContent', 'Error: Adapted Error!');
+ });
+
+ it('should bubble on repeated errors', () => {
+ class Adapter extends Component {
+ componentDidCatch(error) {
+ // Try to handle the error
+ this.setState({ error });
+ }
+ render() {
+ // But fail at doing so
+ if (this.state.error) {
+ throw this.state.error;
+ }
+ return <div>{this.props.children}</div>;
+ }
+ }
+
+ function ThrowErr() {
+ throwExpectedError();
+ }
+
+ sinon.spy(Adapter.prototype, 'componentDidCatch');
+
+ render(
+ <Receiver>
+ <Adapter>
+ <ThrowErr />
+ </Adapter>
+ </Receiver>,
+ scratch
+ );
+ rerender();
+
+ expect(Adapter.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ expect(scratch).to.have.property('textContent', 'Error: Error!');
+ });
+
+ it('should bubble on ignored errors', () => {
+ class Adapter extends Component {
+ componentDidCatch() {
+ // Ignore the error
+ }
+ render() {
+ return <div>{this.props.children}</div>;
+ }
+ }
+
+ function ThrowErr() {
+ throw new Error('Error!');
+ }
+
+ sinon.spy(Adapter.prototype, 'componentDidCatch');
+
+ render(
+ <Receiver>
+ <Adapter>
+ <ThrowErr />
+ </Adapter>
+ </Receiver>,
+ scratch
+ );
+ rerender();
+
+ expect(Adapter.prototype.componentDidCatch, 'Adapter').to.have.been
+ .called;
+ expect(Receiver.prototype.componentDidCatch, 'Receiver').to.have.been
+ .called;
+ expect(scratch).to.have.property('textContent', 'Error: Error!');
+ });
+
+ it('should not bubble on caught errors', () => {
+ class TopReceiver extends Component {
+ componentDidCatch(error) {
+ this.setState({ error });
+ }
+ render() {
+ return (
+ <div>
+ {this.state.error
+ ? String(this.state.error)
+ : this.props.children}
+ </div>
+ );
+ }
+ }
+
+ function ThrowErr() {
+ throwExpectedError();
+ }
+
+ sinon.spy(TopReceiver.prototype, 'componentDidCatch');
+
+ render(
+ <TopReceiver>
+ <Receiver>
+ <ThrowErr />
+ </Receiver>
+ </TopReceiver>,
+ scratch
+ );
+ rerender();
+
+ expect(TopReceiver.prototype.componentDidCatch).not.to.have.been.called;
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ expect(scratch).to.have.property('textContent', 'Error: Error!');
+ });
+
+ it('should be called through non-component parent elements', () => {
+ ThrowErr.prototype.render = throwExpectedError;
+ render(
+ <Receiver>
+ <div>
+ <ThrowErr />
+ </div>
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should bubble up when ref throws on component that is not an error boundary', () => {
+ const ref = value => {
+ if (value) {
+ throwExpectedError();
+ }
+ };
+
+ function ThrowErr() {
+ return <div ref={ref} />;
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.prototype.componentDidCatch).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it.skip('should successfully unmount constantly throwing ref', () => {
+ const buggyRef = throwExpectedError;
+
+ function ThrowErr() {
+ return <div ref={buggyRef}>ThrowErr</div>;
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('<div>Error: Error!</div>');
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/componentDidMount.test.js b/preact/test/browser/lifecycles/componentDidMount.test.js
new file mode 100644
index 0000000..086702b
--- /dev/null
+++ b/preact/test/browser/lifecycles/componentDidMount.test.js
@@ -0,0 +1,36 @@
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('#componentDidMount', () => {
+ it('is invoked after refs are set', () => {
+ const spy = sinon.spy();
+
+ class App extends Component {
+ componentDidMount() {
+ expect(spy).to.have.been.calledOnceWith(scratch.firstChild);
+ }
+
+ render() {
+ return <div ref={spy} />;
+ }
+ }
+
+ render(<App />, scratch);
+ expect(spy).to.have.been.calledOnceWith(scratch.firstChild);
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/componentDidUpdate.test.js b/preact/test/browser/lifecycles/componentDidUpdate.test.js
new file mode 100644
index 0000000..647adb8
--- /dev/null
+++ b/preact/test/browser/lifecycles/componentDidUpdate.test.js
@@ -0,0 +1,385 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('#componentDidUpdate', () => {
+ it('should be passed previous props and state', () => {
+ /** @type {() => void} */
+ let updateState;
+
+ let prevPropsArg;
+ let prevStateArg;
+ let snapshotArg;
+ let curProps;
+ let curState;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ value: 0
+ };
+ updateState = () =>
+ this.setState({
+ value: this.state.value + 1
+ });
+ }
+ static getDerivedStateFromProps(props, state) {
+ // NOTE: Don't do this in real production code!
+ // https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
+ return {
+ value: state.value + 1
+ };
+ }
+ componentDidUpdate(prevProps, prevState, snapshot) {
+ // These object references might be updated later so copy
+ // object so we can assert their values at this snapshot in time
+ prevPropsArg = { ...prevProps };
+ prevStateArg = { ...prevState };
+ snapshotArg = snapshot;
+
+ curProps = { ...this.props };
+ curState = { ...this.state };
+ }
+ render() {
+ return <div>{this.state.value}</div>;
+ }
+ }
+
+ // Expectation:
+ // `prevState` in componentDidUpdate should be
+ // the state before setState and getDerivedStateFromProps was called.
+ // `this.state` in componentDidUpdate should be
+ // the updated state after getDerivedStateFromProps was called.
+
+ // Initial render
+ // state.value: initialized to 0 in constructor, 0 -> 1 in gDSFP
+ render(<Foo foo="foo" />, scratch);
+ expect(scratch.firstChild.textContent).to.be.equal('1');
+ expect(prevPropsArg).to.be.undefined;
+ expect(prevStateArg).to.be.undefined;
+ expect(snapshotArg).to.be.undefined;
+ expect(curProps).to.be.undefined;
+ expect(curState).to.be.undefined;
+
+ // New props
+ // state.value: 1 -> 2 in gDSFP
+ render(<Foo foo="bar" />, scratch);
+ expect(scratch.firstChild.textContent).to.be.equal('2');
+ expect(prevPropsArg).to.deep.equal({ foo: 'foo' });
+ expect(prevStateArg).to.deep.equal({ value: 1 });
+ expect(snapshotArg).to.be.undefined;
+ expect(curProps).to.deep.equal({ foo: 'bar' });
+ expect(curState).to.deep.equal({ value: 2 });
+
+ // New state
+ // state.value: 2 -> 3 in updateState, 3 -> 4 in gDSFP
+ updateState();
+ rerender();
+ expect(scratch.firstChild.textContent).to.be.equal('4');
+ expect(prevPropsArg).to.deep.equal({ foo: 'bar' });
+ expect(prevStateArg).to.deep.equal({ value: 2 });
+ expect(snapshotArg).to.be.undefined;
+ expect(curProps).to.deep.equal({ foo: 'bar' });
+ expect(curState).to.deep.equal({ value: 4 });
+ });
+
+ it('cDU should not be called when sDU returned false', () => {
+ let spy = sinon.spy();
+ let c;
+
+ class App extends Component {
+ constructor() {
+ super();
+ c = this;
+ }
+
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ componentDidUpdate(prevProps) {
+ spy(prevProps);
+ }
+ }
+
+ render(<App />, scratch);
+ c.setState({});
+ rerender();
+
+ expect(spy).to.not.be.called;
+ });
+
+ it("prevState argument should be the same object if state doesn't change", () => {
+ let changeProps, cduPrevState, cduCurrentState;
+
+ class PropsProvider extends Component {
+ constructor() {
+ super();
+ this.state = { value: 0 };
+ changeProps = this.changeReceiverProps.bind(this);
+ }
+ changeReceiverProps() {
+ let value = (this.state.value + 1) % 2;
+ this.setState({
+ value
+ });
+ }
+ render() {
+ return <PropsReceiver value={this.state.value} />;
+ }
+ }
+
+ class PropsReceiver extends Component {
+ componentDidUpdate(prevProps, prevState) {
+ cduPrevState = prevState;
+ cduCurrentState = this.state;
+ }
+ render({ value }) {
+ return <div>{value}</div>;
+ }
+ }
+
+ render(<PropsProvider />, scratch);
+
+ changeProps();
+ rerender();
+
+ expect(cduPrevState).to.equal(cduCurrentState);
+ });
+
+ it('prevState argument should be a different object if state does change', () => {
+ let updateState, cduPrevState, cduCurrentState;
+
+ class Foo extends Component {
+ constructor() {
+ super();
+ this.state = { value: 0 };
+ updateState = this.updateState.bind(this);
+ }
+ updateState() {
+ let value = (this.state.value + 1) % 2;
+ this.setState({
+ value
+ });
+ }
+ componentDidUpdate(prevProps, prevState) {
+ cduPrevState = prevState;
+ cduCurrentState = this.state;
+ }
+ render() {
+ return <div>{this.state.value}</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+
+ updateState();
+ rerender();
+
+ expect(cduPrevState).to.not.equal(cduCurrentState);
+ });
+
+ it("prevProps argument should be the same object if props don't change", () => {
+ let updateState, cduPrevProps, cduCurrentProps;
+
+ class Foo extends Component {
+ constructor() {
+ super();
+ this.state = { value: 0 };
+ updateState = this.updateState.bind(this);
+ }
+ updateState() {
+ let value = (this.state.value + 1) % 2;
+ this.setState({
+ value
+ });
+ }
+ componentDidUpdate(prevProps) {
+ cduPrevProps = prevProps;
+ cduCurrentProps = this.props;
+ }
+ render() {
+ return <div>{this.state.value}</div>;
+ }
+ }
+
+ render(<Foo />, scratch);
+
+ updateState();
+ rerender();
+
+ expect(cduPrevProps).to.equal(cduCurrentProps);
+ });
+
+ it('prevProps argument should be a different object if props do change', () => {
+ let changeProps, cduPrevProps, cduCurrentProps;
+
+ class PropsProvider extends Component {
+ constructor() {
+ super();
+ this.state = { value: 0 };
+ changeProps = this.changeReceiverProps.bind(this);
+ }
+ changeReceiverProps() {
+ let value = (this.state.value + 1) % 2;
+ this.setState({
+ value
+ });
+ }
+ render() {
+ return <PropsReceiver value={this.state.value} />;
+ }
+ }
+
+ class PropsReceiver extends Component {
+ componentDidUpdate(prevProps) {
+ cduPrevProps = prevProps;
+ cduCurrentProps = this.props;
+ }
+ render({ value }) {
+ return <div>{value}</div>;
+ }
+ }
+
+ render(<PropsProvider />, scratch);
+
+ changeProps();
+ rerender();
+
+ expect(cduPrevProps).to.not.equal(cduCurrentProps);
+ });
+
+ it('is invoked after refs are set', () => {
+ const spy = sinon.spy();
+ let inst;
+ let i = 0;
+
+ class App extends Component {
+ componentDidUpdate() {
+ expect(spy).to.have.been.calledOnceWith(scratch.firstChild);
+ }
+
+ render() {
+ let ref = null;
+
+ if (i > 0) {
+ // Add ref after mount (i > 0)
+ ref = spy;
+ }
+
+ i++;
+ inst = this;
+ return <div ref={ref} />;
+ }
+ }
+
+ render(<App />, scratch);
+ expect(spy).not.to.have.been.called;
+
+ inst.setState({});
+ rerender();
+
+ expect(spy).to.have.been.calledOnceWith(scratch.firstChild);
+ });
+
+ it('should be called after children are mounted', () => {
+ let log = [];
+
+ class Inner extends Component {
+ componentDidMount() {
+ log.push('Inner mounted');
+
+ // Verify that the component is actually mounted when this
+ // callback is invoked.
+ expect(scratch.querySelector('#inner')).to.equalNode(this.base);
+ }
+
+ render() {
+ return <div id="inner" />;
+ }
+ }
+
+ class Outer extends Component {
+ componentDidUpdate() {
+ log.push('Outer updated');
+ }
+
+ render(props) {
+ return props.renderInner ? <Inner /> : <div />;
+ }
+ }
+
+ render(<Outer renderInner={false} />, scratch);
+ render(<Outer renderInner />, scratch);
+
+ expect(log).to.deep.equal(['Inner mounted', 'Outer updated']);
+ });
+
+ it('should be called after parent DOM elements are updated', () => {
+ let setValue;
+ let outerChildText;
+
+ class Outer extends Component {
+ constructor(p, c) {
+ super(p, c);
+
+ this.state = { i: 0 };
+ setValue = i => this.setState({ i });
+ }
+
+ render(props, { i }) {
+ return (
+ <div>
+ <Inner i={i} {...props} />
+ <p id="parent-child">Outer: {i}</p>
+ </div>
+ );
+ }
+ }
+
+ class Inner extends Component {
+ componentDidUpdate() {
+ // At this point, the parent's <p> tag should've been updated with the latest value
+ outerChildText = scratch.querySelector('#parent-child').textContent;
+ }
+
+ render(props, { i }) {
+ return <div>Inner: {i}</div>;
+ }
+ }
+
+ sinon.spy(Inner.prototype, 'componentDidUpdate');
+
+ // Initial render
+ render(<Outer />, scratch);
+ expect(Inner.prototype.componentDidUpdate).to.not.have.been.called;
+
+ // Set state with a new i
+ const newValue = 5;
+ setValue(newValue);
+ rerender();
+
+ expect(Inner.prototype.componentDidUpdate).to.have.been.called;
+ expect(outerChildText).to.equal(`Outer: ${newValue.toString()}`);
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/componentWillMount.test.js b/preact/test/browser/lifecycles/componentWillMount.test.js
new file mode 100644
index 0000000..880803e
--- /dev/null
+++ b/preact/test/browser/lifecycles/componentWillMount.test.js
@@ -0,0 +1,43 @@
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('#componentWillMount', () => {
+ it('should update state when called setState in componentWillMount', () => {
+ let componentState;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ value: 0
+ };
+ }
+ componentWillMount() {
+ this.setState({ value: 1 });
+ }
+ render() {
+ componentState = this.state;
+ return <div />;
+ }
+ }
+
+ render(<Foo />, scratch);
+
+ expect(componentState).to.deep.equal({ value: 1 });
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/componentWillReceiveProps.test.js b/preact/test/browser/lifecycles/componentWillReceiveProps.test.js
new file mode 100644
index 0000000..0e10b9b
--- /dev/null
+++ b/preact/test/browser/lifecycles/componentWillReceiveProps.test.js
@@ -0,0 +1,296 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('#componentWillReceiveProps', () => {
+ it('should update state when called setState in componentWillReceiveProps', () => {
+ let componentState;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ dummy: 0
+ };
+ }
+ componentDidMount() {
+ // eslint-disable-next-line react/no-did-mount-set-state
+ this.setState({ dummy: 1 });
+ }
+ render() {
+ return <Bar dummy={this.state.dummy} />;
+ }
+ }
+ class Bar extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ value: 0
+ };
+ }
+ componentWillReceiveProps() {
+ this.setState({ value: 1 });
+ }
+ render() {
+ componentState = this.state;
+ return <div />;
+ }
+ }
+
+ render(<Foo />, scratch);
+ rerender();
+
+ expect(componentState).to.deep.equal({ value: 1 });
+
+ const cWRP = Foo.prototype.componentWillReceiveProps;
+ delete Foo.prototype.componentWillReceiveProps;
+
+ Foo.prototype.shouldComponentUpdate = cWRP;
+
+ render(null, scratch);
+ render(<Foo />, scratch);
+ rerender();
+
+ expect(componentState, 'via shouldComponentUpdate').to.deep.equal({
+ value: 1
+ });
+
+ delete Foo.prototype.shouldComponentUpdate;
+ Foo.prototype.componentWillUpdate = cWRP;
+
+ render(null, scratch);
+ render(<Foo />, scratch);
+ rerender();
+
+ expect(componentState, 'via componentWillUpdate').to.deep.equal({
+ value: 1
+ });
+ });
+
+ it('should NOT be called on initial render', () => {
+ class ReceivePropsComponent extends Component {
+ componentWillReceiveProps() {}
+ render() {
+ return <div />;
+ }
+ }
+ sinon.spy(ReceivePropsComponent.prototype, 'componentWillReceiveProps');
+ render(<ReceivePropsComponent />, scratch);
+ expect(ReceivePropsComponent.prototype.componentWillReceiveProps).not.to
+ .have.been.called;
+ });
+
+ // See last paragraph of cWRP section https://reactjs.org/docs/react-component.html#unsafe_componentwillreceiveprops
+ it('should not be called on setState or forceUpdate', () => {
+ let spy = sinon.spy();
+ let spyInner = sinon.spy();
+ let c;
+
+ class Inner extends Component {
+ componentWillReceiveProps() {
+ spyInner();
+ }
+
+ render() {
+ return <div>foo</div>;
+ }
+ }
+
+ class Outer extends Component {
+ constructor() {
+ super();
+ c = this;
+ }
+
+ componentWillReceiveProps() {
+ spy();
+ }
+
+ render() {
+ return <Inner />;
+ }
+ }
+
+ render(<Outer />, scratch);
+ expect(spy).to.not.be.called;
+
+ c.setState({});
+ rerender();
+ expect(spy).to.not.be.called;
+ expect(spyInner).to.be.calledOnce;
+ spy.resetHistory();
+ spyInner.resetHistory();
+
+ c.forceUpdate();
+ rerender();
+ expect(spy).to.not.be.called;
+ expect(spyInner).to.be.calledOnce;
+ });
+
+ it('should be called when rerender with new props from parent', () => {
+ let doRender;
+ class Outer extends Component {
+ constructor(p, c) {
+ super(p, c);
+ this.state = { i: 0 };
+ }
+ componentDidMount() {
+ doRender = () => this.setState({ i: this.state.i + 1 });
+ }
+ render(props, { i }) {
+ return <Inner i={i} {...props} />;
+ }
+ }
+ class Inner extends Component {
+ componentWillMount() {
+ expect(this.props.i).to.be.equal(0);
+ }
+ componentWillReceiveProps(nextProps) {
+ expect(nextProps.i).to.be.equal(1);
+ }
+ render() {
+ return <div />;
+ }
+ }
+ sinon.spy(Inner.prototype, 'componentWillReceiveProps');
+ sinon.spy(Outer.prototype, 'componentDidMount');
+
+ // Initial render
+ render(<Outer />, scratch);
+ expect(Inner.prototype.componentWillReceiveProps).not.to.have.been.called;
+
+ // Rerender inner with new props
+ doRender();
+ rerender();
+ expect(Inner.prototype.componentWillReceiveProps).to.have.been.called;
+ });
+
+ it('should be called when rerender with new props from parent even with setState/forceUpdate in child', () => {
+ let setStateAndUpdateProps;
+ let forceUpdateAndUpdateProps;
+ let cWRPSpy = sinon.spy();
+
+ class Outer extends Component {
+ constructor(p, c) {
+ super(p, c);
+ this.state = { i: 0 };
+ this.update = this.update.bind(this);
+ }
+ update() {
+ this.setState({ i: this.state.i + 1 });
+ }
+ render(props, { i }) {
+ return <Inner i={i} update={this.update} />;
+ }
+ }
+ class Inner extends Component {
+ componentDidMount() {
+ expect(this.props.i).to.be.equal(0);
+
+ setStateAndUpdateProps = () => {
+ this.setState({});
+ this.props.update();
+ };
+ forceUpdateAndUpdateProps = () => {
+ this.forceUpdate();
+ this.props.update();
+ };
+ }
+ componentWillReceiveProps(nextProps) {
+ cWRPSpy(nextProps.i);
+ }
+ render() {
+ return <div />;
+ }
+ }
+ // Initial render
+ render(<Outer />, scratch);
+ expect(cWRPSpy).not.to.have.been.called;
+
+ // setState in inner component and update with new props
+ setStateAndUpdateProps();
+ rerender();
+ expect(cWRPSpy).to.have.been.calledWith(1);
+
+ // forceUpdate in inner component and update with new props
+ forceUpdateAndUpdateProps();
+ rerender();
+ expect(cWRPSpy).to.have.been.calledWith(2);
+ });
+
+ it('should be called in right execution order', () => {
+ let doRender;
+ class Outer extends Component {
+ constructor(p, c) {
+ super(p, c);
+ this.state = { i: 0 };
+ }
+ componentDidMount() {
+ doRender = () => this.setState({ i: this.state.i + 1 });
+ }
+ render(props, { i }) {
+ return <Inner i={i} {...props} />;
+ }
+ }
+ class Inner extends Component {
+ componentDidUpdate() {
+ expect(Inner.prototype.componentWillReceiveProps).to.have.been.called;
+ expect(Inner.prototype.componentWillUpdate).to.have.been.called;
+ }
+ componentWillReceiveProps() {
+ expect(Inner.prototype.componentWillUpdate).not.to.have.been.called;
+ expect(Inner.prototype.componentDidUpdate).not.to.have.been.called;
+ }
+ componentWillUpdate() {
+ expect(Inner.prototype.componentWillReceiveProps).to.have.been.called;
+ expect(Inner.prototype.componentDidUpdate).not.to.have.been.called;
+ }
+ shouldComponentUpdate() {
+ expect(Inner.prototype.componentWillReceiveProps).to.have.been.called;
+ expect(Inner.prototype.componentWillUpdate).not.to.have.been.called;
+ return true;
+ }
+ render() {
+ return <div />;
+ }
+ }
+ sinon.spy(Inner.prototype, 'componentWillReceiveProps');
+ sinon.spy(Inner.prototype, 'componentDidUpdate');
+ sinon.spy(Inner.prototype, 'componentWillUpdate');
+ sinon.spy(Inner.prototype, 'shouldComponentUpdate');
+ sinon.spy(Outer.prototype, 'componentDidMount');
+
+ render(<Outer />, scratch);
+ doRender();
+ rerender();
+
+ expect(
+ Inner.prototype.componentWillReceiveProps
+ ).to.have.been.calledBefore(Inner.prototype.componentWillUpdate);
+ expect(
+ Inner.prototype.componentWillReceiveProps
+ ).to.have.been.calledBefore(Inner.prototype.shouldComponentUpdate);
+ expect(Inner.prototype.componentWillUpdate).to.have.been.calledBefore(
+ Inner.prototype.componentDidUpdate
+ );
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/componentWillUnmount.test.js b/preact/test/browser/lifecycles/componentWillUnmount.test.js
new file mode 100644
index 0000000..5aa0a84
--- /dev/null
+++ b/preact/test/browser/lifecycles/componentWillUnmount.test.js
@@ -0,0 +1,72 @@
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('top-level componentWillUnmount', () => {
+ it('should invoke componentWillUnmount for top-level components', () => {
+ class Foo extends Component {
+ componentDidMount() {}
+ componentWillUnmount() {}
+ render() {
+ return 'foo';
+ }
+ }
+ class Bar extends Component {
+ componentDidMount() {}
+ componentWillUnmount() {}
+ render() {
+ return 'bar';
+ }
+ }
+ sinon.spy(Foo.prototype, 'componentDidMount');
+ sinon.spy(Foo.prototype, 'componentWillUnmount');
+ sinon.spy(Foo.prototype, 'render');
+
+ sinon.spy(Bar.prototype, 'componentDidMount');
+ sinon.spy(Bar.prototype, 'componentWillUnmount');
+ sinon.spy(Bar.prototype, 'render');
+
+ render(<Foo />, scratch);
+ expect(Foo.prototype.componentDidMount, 'initial render').to.have.been
+ .calledOnce;
+
+ render(<Bar />, scratch);
+ expect(Foo.prototype.componentWillUnmount, 'when replaced').to.have.been
+ .calledOnce;
+ expect(Bar.prototype.componentDidMount, 'when replaced').to.have.been
+ .calledOnce;
+
+ render(<div />, scratch);
+ expect(Bar.prototype.componentWillUnmount, 'when removed').to.have.been
+ .calledOnce;
+ });
+
+ it('should only remove dom after componentWillUnmount was called', () => {
+ class Foo extends Component {
+ componentWillUnmount() {
+ expect(document.getElementById('foo')).to.not.equal(null);
+ }
+
+ render() {
+ return <div id="foo" />;
+ }
+ }
+
+ render(<Foo />, scratch);
+ render(null, scratch);
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/componentWillUpdate.test.js b/preact/test/browser/lifecycles/componentWillUpdate.test.js
new file mode 100644
index 0000000..73d8f1f
--- /dev/null
+++ b/preact/test/browser/lifecycles/componentWillUpdate.test.js
@@ -0,0 +1,95 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('#componentWillUpdate', () => {
+ it('should NOT be called on initial render', () => {
+ class ReceivePropsComponent extends Component {
+ componentWillUpdate() {}
+ render() {
+ return <div />;
+ }
+ }
+ sinon.spy(ReceivePropsComponent.prototype, 'componentWillUpdate');
+ render(<ReceivePropsComponent />, scratch);
+ expect(ReceivePropsComponent.prototype.componentWillUpdate).not.to.have
+ .been.called;
+ });
+
+ it('should be called when rerender with new props from parent', () => {
+ let doRender;
+ class Outer extends Component {
+ constructor(p, c) {
+ super(p, c);
+ this.state = { i: 0 };
+ }
+ componentDidMount() {
+ doRender = () => this.setState({ i: this.state.i + 1 });
+ }
+ render(props, { i }) {
+ return <Inner i={i} {...props} />;
+ }
+ }
+ class Inner extends Component {
+ componentWillUpdate(nextProps, nextState) {
+ expect(nextProps).to.be.deep.equal({ i: 1 });
+ expect(nextState).to.be.deep.equal({});
+ }
+ render() {
+ return <div />;
+ }
+ }
+ sinon.spy(Inner.prototype, 'componentWillUpdate');
+ sinon.spy(Outer.prototype, 'componentDidMount');
+
+ // Initial render
+ render(<Outer />, scratch);
+ expect(Inner.prototype.componentWillUpdate).not.to.have.been.called;
+
+ // Rerender inner with new props
+ doRender();
+ rerender();
+ expect(Inner.prototype.componentWillUpdate).to.have.been.called;
+ });
+
+ it('should be called on new state', () => {
+ let doRender;
+ class ReceivePropsComponent extends Component {
+ componentWillUpdate() {}
+ componentDidMount() {
+ doRender = () => this.setState({ i: this.state.i + 1 });
+ }
+ render() {
+ return <div />;
+ }
+ }
+ sinon.spy(ReceivePropsComponent.prototype, 'componentWillUpdate');
+ render(<ReceivePropsComponent />, scratch);
+ expect(ReceivePropsComponent.prototype.componentWillUpdate).not.to.have
+ .been.called;
+
+ doRender();
+ rerender();
+ expect(ReceivePropsComponent.prototype.componentWillUpdate).to.have.been
+ .called;
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/getDerivedStateFromError.test.js b/preact/test/browser/lifecycles/getDerivedStateFromError.test.js
new file mode 100644
index 0000000..4c279a8
--- /dev/null
+++ b/preact/test/browser/lifecycles/getDerivedStateFromError.test.js
@@ -0,0 +1,659 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /* eslint-disable react/display-name */
+
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('#getDerivedStateFromError', () => {
+ /** @type {Error} */
+ let expectedError;
+
+ /** @type {typeof import('../../../').Component} */
+ let ThrowErr;
+
+ let thrower;
+
+ class Receiver extends Component {
+ static getDerivedStateFromError(error) {
+ return { error };
+ }
+ render() {
+ return this.state.error
+ ? String(this.state.error)
+ : this.props.children;
+ }
+ }
+
+ sinon.spy(Receiver, 'getDerivedStateFromError');
+ sinon.spy(Receiver.prototype, 'render');
+
+ function throwExpectedError() {
+ throw (expectedError = new Error('Error!'));
+ }
+
+ beforeEach(() => {
+ ThrowErr = class ThrowErr extends Component {
+ constructor(props) {
+ super(props);
+ thrower = this;
+ }
+
+ static getDerivedStateFromError() {
+ expect.fail("Throwing component should not catch it's own error.");
+ return {};
+ }
+ render() {
+ return <div>ThrowErr: getDerivedStateFromError</div>;
+ }
+ };
+ sinon.spy(ThrowErr, 'getDerivedStateFromError');
+
+ expectedError = undefined;
+
+ Receiver.getDerivedStateFromError.resetHistory();
+ Receiver.prototype.render.resetHistory();
+ });
+
+ afterEach(() => {
+ expect(
+ ThrowErr.getDerivedStateFromError,
+ "Throwing component should not catch it's own error."
+ ).to.not.be.called;
+ thrower = undefined;
+ });
+
+ it('should be called when child fails in constructor', () => {
+ class ThrowErr extends Component {
+ constructor(props, context) {
+ super(props, context);
+ throwExpectedError();
+ }
+ static getDerivedStateFromError() {
+ expect.fail("Throwing component should not catch it's own error");
+ return {};
+ }
+ render() {
+ return <div />;
+ }
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ rerender();
+
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ // https://github.com/preactjs/preact/issues/1570
+ it('should handle double child throws', () => {
+ const Child = ({ i }) => {
+ throw new Error(`error! ${i}`);
+ };
+
+ const fn = () =>
+ render(
+ <Receiver>
+ {[1, 2].map(i => (
+ <Child key={i} i={i} />
+ ))}
+ </Receiver>,
+ scratch
+ );
+ expect(fn).to.not.throw();
+
+ rerender();
+ expect(scratch.innerHTML).to.equal('Error: error! 2');
+ });
+
+ it('should be called when child fails in componentWillMount', () => {
+ ThrowErr.prototype.componentWillMount = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in render', () => {
+ ThrowErr.prototype.render = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentDidMount', () => {
+ ThrowErr.prototype.componentDidMount = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in getDerivedStateFromProps', () => {
+ ThrowErr.getDerivedStateFromProps = throwExpectedError;
+
+ sinon.spy(ThrowErr.prototype, 'render');
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ expect(ThrowErr.prototype.render).not.to.have.been.called;
+ });
+
+ it('should be called when child fails in getSnapshotBeforeUpdate', () => {
+ ThrowErr.prototype.getSnapshotBeforeUpdate = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ thrower.forceUpdate();
+ rerender();
+
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentDidUpdate', () => {
+ ThrowErr.prototype.componentDidUpdate = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+
+ thrower.forceUpdate();
+ rerender();
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentWillUpdate', () => {
+ ThrowErr.prototype.componentWillUpdate = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+
+ thrower.forceUpdate();
+ rerender();
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentWillReceiveProps', () => {
+ ThrowErr.prototype.componentWillReceiveProps = throwExpectedError;
+
+ let receiver;
+ class Receiver extends Component {
+ constructor() {
+ super();
+ this.state = { foo: 'bar' };
+ receiver = this;
+ }
+ static getDerivedStateFromError(error) {
+ return { error };
+ }
+ render() {
+ return this.state.error ? (
+ String(this.state.error)
+ ) : (
+ <ThrowErr foo={this.state.foo} />
+ );
+ }
+ }
+
+ sinon.spy(Receiver, 'getDerivedStateFromError');
+ render(<Receiver />, scratch);
+
+ receiver.setState({ foo: 'baz' });
+ rerender();
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in shouldComponentUpdate', () => {
+ ThrowErr.prototype.shouldComponentUpdate = throwExpectedError;
+
+ let receiver;
+ class Receiver extends Component {
+ constructor() {
+ super();
+ this.state = { foo: 'bar' };
+ receiver = this;
+ }
+ static getDerivedStateFromError(error) {
+ return { error };
+ }
+ render() {
+ return this.state.error ? (
+ String(this.state.error)
+ ) : (
+ <ThrowErr foo={this.state.foo} />
+ );
+ }
+ }
+
+ sinon.spy(Receiver, 'getDerivedStateFromError');
+ render(<Receiver />, scratch);
+
+ receiver.setState({ foo: 'baz' });
+ rerender();
+
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when child fails in componentWillUnmount', () => {
+ ThrowErr.prototype.componentWillUnmount = throwExpectedError;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ render(
+ <Receiver>
+ <div />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when applying a Component ref', () => {
+ const Foo = () => <div />;
+
+ const ref = value => {
+ if (value) {
+ throwExpectedError();
+ }
+ };
+
+ // In React, an error boundary handles it's own refs:
+ // https://codesandbox.io/s/react-throwing-refs-lk958
+ class Receiver extends Component {
+ static getDerivedStateFromError(error) {
+ return { error };
+ }
+ render() {
+ return this.state.error ? (
+ String(this.state.error)
+ ) : (
+ <Foo ref={ref} />
+ );
+ }
+ }
+
+ sinon.spy(Receiver, 'getDerivedStateFromError');
+ render(<Receiver />, scratch);
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when applying a DOM ref', () => {
+ const ref = value => {
+ if (value) {
+ throwExpectedError();
+ }
+ };
+
+ // In React, an error boundary handles it's own refs:
+ // https://codesandbox.io/s/react-throwing-refs-lk958
+ class Receiver extends Component {
+ static getDerivedStateFromError(error) {
+ return { error };
+ }
+ render() {
+ return this.state.error ? (
+ String(this.state.error)
+ ) : (
+ <div ref={ref} />
+ );
+ }
+ }
+
+ sinon.spy(Receiver, 'getDerivedStateFromError');
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should be called when unmounting a ref', () => {
+ const ref = value => {
+ if (value == null) {
+ throwExpectedError();
+ }
+ };
+
+ ThrowErr.prototype.render = () => <div ref={ref} />;
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ render(
+ <Receiver>
+ <div />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledOnceWith(
+ expectedError
+ );
+ });
+
+ it('should be called when functional child fails', () => {
+ function ThrowErr() {
+ throwExpectedError();
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should re-render with new content', () => {
+ class ThrowErr extends Component {
+ componentWillMount() {
+ throw new Error('Error contents');
+ }
+ render() {
+ return 'No error!?!?';
+ }
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ rerender();
+ expect(scratch).to.have.property('textContent', 'Error: Error contents');
+ });
+
+ it('should be able to adapt and rethrow errors', () => {
+ let adaptedError;
+ class Adapter extends Component {
+ static getDerivedStateFromError(error) {
+ throw (adaptedError = new Error(
+ 'Adapted ' +
+ String(error && 'message' in error ? error.message : error)
+ ));
+ }
+ render() {
+ return <div>{this.props.children}</div>;
+ }
+ }
+
+ function ThrowErr() {
+ throwExpectedError();
+ }
+
+ sinon.spy(Adapter, 'getDerivedStateFromError');
+ render(
+ <Receiver>
+ <Adapter>
+ <ThrowErr />
+ </Adapter>
+ </Receiver>,
+ scratch
+ );
+
+ expect(Adapter.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ adaptedError
+ );
+
+ rerender();
+ expect(scratch).to.have.property('textContent', 'Error: Adapted Error!');
+ });
+
+ it('should bubble on repeated errors', () => {
+ class Adapter extends Component {
+ static getDerivedStateFromError(error) {
+ return { error };
+ }
+ render() {
+ // But fail at doing so
+ if (this.state.error) {
+ throw this.state.error;
+ }
+ return <div>{this.props.children}</div>;
+ }
+ }
+
+ function ThrowErr() {
+ throwExpectedError();
+ }
+
+ sinon.spy(Adapter, 'getDerivedStateFromError');
+
+ render(
+ <Receiver>
+ <Adapter>
+ <ThrowErr />
+ </Adapter>
+ </Receiver>,
+ scratch
+ );
+ rerender();
+
+ expect(Adapter.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ expect(scratch).to.have.property('textContent', 'Error: Error!');
+ });
+
+ it('should bubble on ignored errors', () => {
+ class Adapter extends Component {
+ static getDerivedStateFromError(error) {
+ // Ignore the error
+ return null;
+ }
+ render() {
+ return <div>{this.props.children}</div>;
+ }
+ }
+
+ function ThrowErr() {
+ throw new Error('Error!');
+ }
+
+ sinon.spy(Adapter, 'getDerivedStateFromError');
+
+ render(
+ <Receiver>
+ <Adapter>
+ <ThrowErr />
+ </Adapter>
+ </Receiver>,
+ scratch
+ );
+ rerender();
+
+ expect(Adapter.getDerivedStateFromError).to.have.been.called;
+ expect(Receiver.getDerivedStateFromError).to.have.been.called;
+ expect(scratch).to.have.property('textContent', 'Error: Error!');
+ });
+
+ it('should not bubble on caught errors', () => {
+ class TopReceiver extends Component {
+ static getDerivedStateFromError(error) {
+ return { error };
+ }
+ render() {
+ return (
+ <div>
+ {this.state.error
+ ? String(this.state.error)
+ : this.props.children}
+ </div>
+ );
+ }
+ }
+
+ function ThrowErr() {
+ throwExpectedError();
+ }
+
+ sinon.spy(TopReceiver, 'getDerivedStateFromError');
+
+ render(
+ <TopReceiver>
+ <Receiver>
+ <ThrowErr />
+ </Receiver>
+ </TopReceiver>,
+ scratch
+ );
+ rerender();
+
+ expect(TopReceiver.getDerivedStateFromError).not.to.have.been.called;
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ expect(scratch).to.have.property('textContent', 'Error: Error!');
+ });
+
+ it('should be called through non-component parent elements', () => {
+ ThrowErr.prototype.render = throwExpectedError;
+
+ render(
+ <Receiver>
+ <div>
+ <ThrowErr />
+ </div>
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it('should bubble up when ref throws on component that is not an error boundary', () => {
+ const ref = value => {
+ if (value) {
+ throwExpectedError();
+ }
+ };
+
+ function ThrowErr() {
+ return <div ref={ref} />;
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ expect(Receiver.getDerivedStateFromError).to.have.been.calledWith(
+ expectedError
+ );
+ });
+
+ it.skip('should successfully unmount constantly throwing ref', () => {
+ const buggyRef = throwExpectedError;
+
+ function ThrowErr() {
+ return <div ref={buggyRef}>ThrowErr</div>;
+ }
+
+ render(
+ <Receiver>
+ <ThrowErr />
+ </Receiver>,
+ scratch
+ );
+ rerender();
+
+ expect(scratch.innerHTML).to.equal('<div>Error: Error!</div>');
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/getDerivedStateFromProps.test.js b/preact/test/browser/lifecycles/getDerivedStateFromProps.test.js
new file mode 100644
index 0000000..0fa1394
--- /dev/null
+++ b/preact/test/browser/lifecycles/getDerivedStateFromProps.test.js
@@ -0,0 +1,419 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('static getDerivedStateFromProps', () => {
+ it('should set initial state with value returned from getDerivedStateFromProps', () => {
+ class Foo extends Component {
+ static getDerivedStateFromProps(props) {
+ return {
+ foo: props.foo,
+ bar: 'bar'
+ };
+ }
+ render() {
+ return <div className={`${this.state.foo} ${this.state.bar}`} />;
+ }
+ }
+
+ render(<Foo foo="foo" />, scratch);
+ expect(scratch.firstChild.className).to.be.equal('foo bar');
+ });
+
+ it('should update initial state with value returned from getDerivedStateFromProps', () => {
+ class Foo extends Component {
+ constructor(props, context) {
+ super(props, context);
+ this.state = {
+ foo: 'foo',
+ bar: 'bar'
+ };
+ }
+ static getDerivedStateFromProps(props, state) {
+ return {
+ foo: `not-${state.foo}`
+ };
+ }
+ render() {
+ return <div className={`${this.state.foo} ${this.state.bar}`} />;
+ }
+ }
+
+ render(<Foo />, scratch);
+ expect(scratch.firstChild.className).to.equal('not-foo bar');
+ });
+
+ it("should update the instance's state with the value returned from getDerivedStateFromProps when props change", () => {
+ class Foo extends Component {
+ constructor(props, context) {
+ super(props, context);
+ this.state = {
+ value: 'initial'
+ };
+ }
+ static getDerivedStateFromProps(props) {
+ if (props.update) {
+ return {
+ value: 'updated'
+ };
+ }
+
+ return null;
+ }
+ componentDidMount() {}
+ componentDidUpdate() {}
+ render() {
+ return <div className={this.state.value} />;
+ }
+ }
+
+ sinon.spy(Foo, 'getDerivedStateFromProps');
+ sinon.spy(Foo.prototype, 'componentDidMount');
+ sinon.spy(Foo.prototype, 'componentDidUpdate');
+
+ render(<Foo update={false} />, scratch);
+ expect(scratch.firstChild.className).to.equal('initial');
+ expect(Foo.getDerivedStateFromProps).to.have.callCount(1);
+ expect(Foo.prototype.componentDidMount).to.have.callCount(1); // verify mount occurred
+ expect(Foo.prototype.componentDidUpdate).to.have.callCount(0);
+
+ render(<Foo update />, scratch);
+ expect(scratch.firstChild.className).to.equal('updated');
+ expect(Foo.getDerivedStateFromProps).to.have.callCount(2);
+ expect(Foo.prototype.componentDidMount).to.have.callCount(1);
+ expect(Foo.prototype.componentDidUpdate).to.have.callCount(1); // verify update occurred
+ });
+
+ it("should update the instance's state with the value returned from getDerivedStateFromProps when state changes", () => {
+ class Foo extends Component {
+ constructor(props, context) {
+ super(props, context);
+ this.state = {
+ value: 'initial'
+ };
+ }
+ static getDerivedStateFromProps(props, state) {
+ // Don't change state for call that happens after the constructor
+ if (state.value === 'initial') {
+ return null;
+ }
+
+ return {
+ value: state.value + ' derived'
+ };
+ }
+ componentDidMount() {
+ // eslint-disable-next-line react/no-did-mount-set-state
+ this.setState({ value: 'updated' });
+ }
+ render() {
+ return <div className={this.state.value} />;
+ }
+ }
+
+ sinon.spy(Foo, 'getDerivedStateFromProps');
+
+ render(<Foo />, scratch);
+ expect(scratch.firstChild.className).to.equal('initial');
+ expect(Foo.getDerivedStateFromProps).to.have.been.calledOnce;
+
+ rerender(); // call rerender to handle cDM setState call
+ expect(scratch.firstChild.className).to.equal('updated derived');
+ expect(Foo.getDerivedStateFromProps).to.have.been.calledTwice;
+ });
+
+ it('should NOT modify state if null is returned', () => {
+ class Foo extends Component {
+ constructor(props, context) {
+ super(props, context);
+ this.state = {
+ foo: 'foo',
+ bar: 'bar'
+ };
+ }
+ static getDerivedStateFromProps() {
+ return null;
+ }
+ render() {
+ return <div className={`${this.state.foo} ${this.state.bar}`} />;
+ }
+ }
+
+ sinon.spy(Foo, 'getDerivedStateFromProps');
+
+ render(<Foo />, scratch);
+ expect(scratch.firstChild.className).to.equal('foo bar');
+ expect(Foo.getDerivedStateFromProps).to.have.been.called;
+ });
+
+ // NOTE: Difference from React
+ // React v16.3.2 warns if undefined if returned from getDerivedStateFromProps
+ it('should NOT modify state if undefined is returned', () => {
+ class Foo extends Component {
+ constructor(props, context) {
+ super(props, context);
+ this.state = {
+ foo: 'foo',
+ bar: 'bar'
+ };
+ }
+ static getDerivedStateFromProps() {}
+ render() {
+ return <div className={`${this.state.foo} ${this.state.bar}`} />;
+ }
+ }
+
+ sinon.spy(Foo, 'getDerivedStateFromProps');
+
+ render(<Foo />, scratch);
+ expect(scratch.firstChild.className).to.equal('foo bar');
+ expect(Foo.getDerivedStateFromProps).to.have.been.called;
+ });
+
+ it('should NOT invoke deprecated lifecycles (cWM/cWRP) if new static gDSFP is present', () => {
+ class Foo extends Component {
+ static getDerivedStateFromProps() {}
+ componentWillMount() {}
+ componentWillReceiveProps() {}
+ render() {
+ return <div />;
+ }
+ }
+
+ sinon.spy(Foo, 'getDerivedStateFromProps');
+ sinon.spy(Foo.prototype, 'componentWillMount');
+ sinon.spy(Foo.prototype, 'componentWillReceiveProps');
+
+ render(<Foo />, scratch);
+ expect(Foo.getDerivedStateFromProps).to.have.been.called;
+ expect(Foo.prototype.componentWillMount).to.not.have.been.called;
+ expect(Foo.prototype.componentWillReceiveProps).to.not.have.been.called;
+ });
+
+ it('is not called if neither state nor props have changed', () => {
+ let logs = [];
+ let childRef;
+
+ class Parent extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { parentRenders: 0 };
+ }
+
+ static getDerivedStateFromProps(props, state) {
+ logs.push('parent getDerivedStateFromProps');
+ return state.parentRenders + 1;
+ }
+
+ render() {
+ logs.push('parent render');
+ return <Child parentRenders={this.state.parentRenders} />;
+ }
+ }
+
+ class Child extends Component {
+ constructor(props) {
+ super(props);
+ childRef = this;
+ }
+ render() {
+ logs.push('child render');
+ return this.props.parentRenders;
+ }
+ }
+
+ render(<Parent />, scratch);
+ expect(logs).to.deep.equal([
+ 'parent getDerivedStateFromProps',
+ 'parent render',
+ 'child render'
+ ]);
+
+ logs = [];
+ childRef.setState({});
+ rerender();
+ expect(logs).to.deep.equal(['child render']);
+ });
+
+ // TODO: Investigate this test:
+ // [should not override state with stale values if prevState is spread within getDerivedStateFromProps](https://github.com/facebook/react/blob/25dda90c1ecb0c662ab06e2c80c1ee31e0ae9d36/packages/react-dom/src/__tests__/ReactComponentLifeCycle-test.js#L1035)
+
+ it('should be passed next props and state', () => {
+ /** @type {() => void} */
+ let updateState;
+
+ let propsArg;
+ let stateArg;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ value: 0
+ };
+ updateState = () =>
+ this.setState({
+ value: this.state.value + 1
+ });
+ }
+ static getDerivedStateFromProps(props, state) {
+ // These object references might be updated later so copy
+ // object so we can assert their values at this snapshot in time
+ propsArg = { ...props };
+ stateArg = { ...state };
+
+ // NOTE: Don't do this in real production code!
+ // https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
+ return {
+ value: state.value + 1
+ };
+ }
+ render() {
+ return <div>{this.state.value}</div>;
+ }
+ }
+
+ // Initial render
+ // state.value: initialized to 0 in constructor, 0 -> 1 in gDSFP
+ render(<Foo foo="foo" />, scratch);
+
+ let element = scratch.firstChild;
+ expect(element.textContent).to.be.equal('1');
+ expect(propsArg).to.deep.equal({
+ foo: 'foo'
+ });
+ expect(stateArg).to.deep.equal({
+ value: 0
+ });
+
+ // New Props
+ // state.value: 1 -> 2 in gDSFP
+ render(<Foo foo="bar" />, scratch);
+ expect(element.textContent).to.be.equal('2');
+ expect(propsArg).to.deep.equal({
+ foo: 'bar'
+ });
+ expect(stateArg).to.deep.equal({
+ value: 1
+ });
+
+ // New state
+ // state.value: 2 -> 3 in updateState, 3 -> 4 in gDSFP
+ updateState();
+ rerender();
+ expect(element.textContent).to.be.equal('4');
+ expect(propsArg).to.deep.equal({
+ foo: 'bar'
+ });
+ expect(stateArg).to.deep.equal({
+ value: 3
+ });
+
+ // New Props (see #1446)
+ // 4 -> 5 in gDSFP
+ render(<Foo foo="baz" />, scratch);
+ expect(element.textContent).to.be.equal('5');
+ expect(stateArg).to.deep.equal({
+ value: 4
+ });
+
+ // New Props (see #1446)
+ // 5 -> 6 in gDSFP
+ render(<Foo foo="qux" />, scratch);
+ expect(element.textContent).to.be.equal('6');
+ expect(stateArg).to.deep.equal({
+ value: 5
+ });
+ });
+
+ // From preactjs/preact#1170
+ it('should NOT mutate state on mount, only create new versions', () => {
+ const stateConstant = {};
+ let componentState;
+
+ class Stateful extends Component {
+ static getDerivedStateFromProps() {
+ return { key: 'value' };
+ }
+
+ constructor() {
+ super(...arguments);
+ this.state = stateConstant;
+ }
+
+ componentDidMount() {
+ componentState = this.state;
+ }
+
+ render() {
+ return <div />;
+ }
+ }
+
+ render(<Stateful />, scratch);
+
+ // Verify captured object references didn't get mutated
+ expect(componentState).to.deep.equal({ key: 'value' });
+ expect(stateConstant).to.deep.equal({});
+ });
+
+ it('should NOT mutate state on update, only create new versions', () => {
+ const initialState = {};
+ const capturedStates = [];
+
+ let setState;
+
+ class Stateful extends Component {
+ static getDerivedStateFromProps(props, state) {
+ return { value: (state.value || 0) + 1 };
+ }
+
+ constructor() {
+ super(...arguments);
+ this.state = initialState;
+ capturedStates.push(this.state);
+
+ setState = this.setState.bind(this);
+ }
+
+ componentDidMount() {
+ capturedStates.push(this.state);
+ }
+
+ componentDidUpdate() {
+ capturedStates.push(this.state);
+ }
+
+ render() {
+ return <div />;
+ }
+ }
+
+ render(<Stateful />, scratch);
+
+ setState({ value: 10 });
+ rerender();
+
+ // Verify captured object references didn't get mutated
+ expect(capturedStates).to.deep.equal([{}, { value: 1 }, { value: 11 }]);
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/getSnapshotBeforeUpdate.test.js b/preact/test/browser/lifecycles/getSnapshotBeforeUpdate.test.js
new file mode 100644
index 0000000..645424b
--- /dev/null
+++ b/preact/test/browser/lifecycles/getSnapshotBeforeUpdate.test.js
@@ -0,0 +1,211 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('#getSnapshotBeforeUpdate', () => {
+ it('should pass the return value from getSnapshotBeforeUpdate to componentDidUpdate', () => {
+ let log = [];
+
+ class MyComponent extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ value: 0
+ };
+ }
+ static getDerivedStateFromProps(nextProps, prevState) {
+ return {
+ value: prevState.value + 1
+ };
+ }
+ getSnapshotBeforeUpdate(prevProps, prevState) {
+ log.push(
+ `getSnapshotBeforeUpdate() prevProps:${prevProps.value} prevState:${prevState.value}`
+ );
+ return 'abc';
+ }
+ componentDidUpdate(prevProps, prevState, snapshot) {
+ log.push(
+ `componentDidUpdate() prevProps:${prevProps.value} prevState:${prevState.value} snapshot:${snapshot}`
+ );
+ }
+ render() {
+ log.push('render');
+ return null;
+ }
+ }
+
+ render(<MyComponent value="foo" />, scratch);
+ expect(log).to.deep.equal(['render']);
+ log = [];
+
+ render(<MyComponent value="bar" />, scratch);
+ expect(log).to.deep.equal([
+ 'render',
+ 'getSnapshotBeforeUpdate() prevProps:foo prevState:1',
+ 'componentDidUpdate() prevProps:foo prevState:1 snapshot:abc'
+ ]);
+ log = [];
+
+ render(<MyComponent value="baz" />, scratch);
+ expect(log).to.deep.equal([
+ 'render',
+ 'getSnapshotBeforeUpdate() prevProps:bar prevState:2',
+ 'componentDidUpdate() prevProps:bar prevState:2 snapshot:abc'
+ ]);
+ log = [];
+
+ render(<div />, scratch, scratch.firstChild);
+ expect(log).to.deep.equal([]);
+ });
+
+ it('should call getSnapshotBeforeUpdate before mutations are committed', () => {
+ let log = [];
+
+ class MyComponent extends Component {
+ getSnapshotBeforeUpdate(prevProps) {
+ log.push('getSnapshotBeforeUpdate');
+ expect(this.divRef.textContent).to.equal(`value:${prevProps.value}`);
+ return 'foobar';
+ }
+ componentDidUpdate(prevProps, prevState, snapshot) {
+ log.push('componentDidUpdate');
+ expect(this.divRef.textContent).to.equal(`value:${this.props.value}`);
+ expect(snapshot).to.equal('foobar');
+ }
+ render() {
+ log.push('render');
+ return (
+ <div
+ ref={ref => (this.divRef = ref)}
+ >{`value:${this.props.value}`}</div>
+ );
+ }
+ }
+
+ render(<MyComponent value="foo" />, scratch);
+ expect(log).to.deep.equal(['render']);
+ log = [];
+
+ render(<MyComponent value="bar" />, scratch);
+ expect(log).to.deep.equal([
+ 'render',
+ 'getSnapshotBeforeUpdate',
+ 'componentDidUpdate'
+ ]);
+ });
+
+ it('should be passed the previous props and state', () => {
+ /** @type {() => void} */
+ let updateState;
+
+ let prevPropsArg;
+ let prevStateArg;
+ let curProps;
+ let curState;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ value: 0
+ };
+ updateState = () =>
+ this.setState({
+ value: this.state.value + 1
+ });
+ }
+ static getDerivedStateFromProps(props, state) {
+ // NOTE: Don't do this in real production code!
+ // https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
+ return {
+ value: state.value + 1
+ };
+ }
+ getSnapshotBeforeUpdate(prevProps, prevState) {
+ // These object references might be updated later so copy
+ // object so we can assert their values at this snapshot in time
+ prevPropsArg = { ...prevProps };
+ prevStateArg = { ...prevState };
+
+ curProps = { ...this.props };
+ curState = { ...this.state };
+ }
+ render() {
+ return <div>{this.state.value}</div>;
+ }
+ }
+
+ // Expectation:
+ // `prevState` in getSnapshotBeforeUpdate should be
+ // the state before setState or getDerivedStateFromProps was called.
+ // `this.state` in getSnapshotBeforeUpdate should be
+ // the updated state after getDerivedStateFromProps was called.
+
+ // Initial render
+ // state.value: initialized to 0 in constructor, 0 -> 1 in gDSFP
+ render(<Foo foo="foo" />, scratch);
+ const element = scratch.firstChild;
+
+ expect(element.textContent).to.be.equal('1');
+ expect(prevPropsArg).to.be.undefined;
+ expect(prevStateArg).to.be.undefined;
+ expect(curProps).to.be.undefined;
+ expect(curState).to.be.undefined;
+
+ // New props
+ // state.value: 1 -> 2 in gDSFP
+ render(<Foo foo="bar" />, scratch);
+
+ expect(element.textContent).to.be.equal('2');
+ expect(prevPropsArg).to.deep.equal({
+ foo: 'foo'
+ });
+ expect(prevStateArg).to.deep.equal({
+ value: 1
+ });
+ expect(curProps).to.deep.equal({
+ foo: 'bar'
+ });
+ expect(curState).to.deep.equal({
+ value: 2
+ });
+
+ // New state
+ // state.value: 2 -> 3 in updateState, 3 -> 4 in gDSFP
+ updateState();
+ rerender();
+ expect(element.textContent).to.be.equal('4');
+ expect(prevPropsArg).to.deep.equal({
+ foo: 'bar'
+ });
+ expect(prevStateArg).to.deep.equal({
+ value: 2
+ });
+ expect(curProps).to.deep.equal({
+ foo: 'bar'
+ });
+ expect(curState).to.deep.equal({
+ value: 4
+ });
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/lifecycle.test.js b/preact/test/browser/lifecycles/lifecycle.test.js
new file mode 100644
index 0000000..56cced6
--- /dev/null
+++ b/preact/test/browser/lifecycles/lifecycle.test.js
@@ -0,0 +1,672 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should call nested new lifecycle methods in the right order', () => {
+ let updateOuterState;
+ let updateInnerState;
+ let forceUpdateOuter;
+ let forceUpdateInner;
+
+ let log;
+ function logger(msg) {
+ return function() {
+ // return true for shouldComponentUpdate
+ log.push(msg);
+ return true;
+ };
+ }
+
+ class Outer extends Component {
+ static getDerivedStateFromProps() {
+ log.push('outer getDerivedStateFromProps');
+ return null;
+ }
+ constructor() {
+ super();
+ log.push('outer constructor');
+
+ this.state = { value: 0 };
+ forceUpdateOuter = () =>
+ this.forceUpdate(() => log.push('outer forceUpdate callback'));
+ updateOuterState = () =>
+ this.setState(
+ prevState => ({ value: prevState.value % 2 }),
+ () => log.push('outer setState callback')
+ );
+ }
+ render() {
+ log.push('outer render');
+ return (
+ <div>
+ <Inner x={this.props.x} outerValue={this.state.value} />
+ </div>
+ );
+ }
+ }
+ Object.assign(Outer.prototype, {
+ componentDidMount: logger('outer componentDidMount'),
+ shouldComponentUpdate: logger('outer shouldComponentUpdate'),
+ getSnapshotBeforeUpdate: logger('outer getSnapshotBeforeUpdate'),
+ componentDidUpdate: logger('outer componentDidUpdate'),
+ componentWillUnmount: logger('outer componentWillUnmount')
+ });
+
+ class Inner extends Component {
+ static getDerivedStateFromProps() {
+ log.push('inner getDerivedStateFromProps');
+ return null;
+ }
+ constructor() {
+ super();
+ log.push('inner constructor');
+
+ this.state = { value: 0 };
+ forceUpdateInner = () =>
+ this.forceUpdate(() => log.push('inner forceUpdate callback'));
+ updateInnerState = () =>
+ this.setState(
+ prevState => ({ value: prevState.value % 2 }),
+ () => log.push('inner setState callback')
+ );
+ }
+ render() {
+ log.push('inner render');
+ return (
+ <span>
+ {this.props.x} {this.props.outerValue} {this.state.value}
+ </span>
+ );
+ }
+ }
+ Object.assign(Inner.prototype, {
+ componentDidMount: logger('inner componentDidMount'),
+ shouldComponentUpdate: logger('inner shouldComponentUpdate'),
+ getSnapshotBeforeUpdate: logger('inner getSnapshotBeforeUpdate'),
+ componentDidUpdate: logger('inner componentDidUpdate'),
+ componentWillUnmount: logger('inner componentWillUnmount')
+ });
+
+ // Constructor & mounting
+ log = [];
+ render(<Outer x={1} />, scratch);
+ expect(log).to.deep.equal([
+ 'outer constructor',
+ 'outer getDerivedStateFromProps',
+ 'outer render',
+ 'inner constructor',
+ 'inner getDerivedStateFromProps',
+ 'inner render',
+ 'inner componentDidMount',
+ 'outer componentDidMount'
+ ]);
+
+ // Outer & Inner props update
+ log = [];
+ render(<Outer x={2} />, scratch);
+ // Note: we differ from react here in that we apply changes to the dom
+ // as we find them while diffing. React on the other hand separates this
+ // into specific phases, meaning changes to the dom are only flushed
+ // once the whole diff-phase is complete. This is why
+ // "outer getSnapshotBeforeUpdate" is called just before the "inner" hooks.
+ // For react this call would be right before "outer componentDidUpdate"
+ expect(log).to.deep.equal([
+ 'outer getDerivedStateFromProps',
+ 'outer shouldComponentUpdate',
+ 'outer render',
+ 'outer getSnapshotBeforeUpdate',
+ 'inner getDerivedStateFromProps',
+ 'inner shouldComponentUpdate',
+ 'inner render',
+ 'inner getSnapshotBeforeUpdate',
+ 'inner componentDidUpdate',
+ 'outer componentDidUpdate'
+ ]);
+
+ // Outer state update & Inner props update
+ log = [];
+ updateOuterState();
+ rerender();
+ expect(log).to.deep.equal([
+ 'outer getDerivedStateFromProps',
+ 'outer shouldComponentUpdate',
+ 'outer render',
+ 'outer getSnapshotBeforeUpdate',
+ 'inner getDerivedStateFromProps',
+ 'inner shouldComponentUpdate',
+ 'inner render',
+ 'inner getSnapshotBeforeUpdate',
+ 'inner componentDidUpdate',
+ 'outer setState callback',
+ 'outer componentDidUpdate'
+ ]);
+
+ // Inner state update
+ log = [];
+ updateInnerState();
+ rerender();
+ expect(log).to.deep.equal([
+ 'inner getDerivedStateFromProps',
+ 'inner shouldComponentUpdate',
+ 'inner render',
+ 'inner getSnapshotBeforeUpdate',
+ 'inner setState callback',
+ 'inner componentDidUpdate'
+ ]);
+
+ // Force update Outer
+ log = [];
+ forceUpdateOuter();
+ rerender();
+ expect(log).to.deep.equal([
+ 'outer getDerivedStateFromProps',
+ 'outer render',
+ 'outer getSnapshotBeforeUpdate',
+ 'inner getDerivedStateFromProps',
+ 'inner shouldComponentUpdate',
+ 'inner render',
+ 'inner getSnapshotBeforeUpdate',
+ 'inner componentDidUpdate',
+ 'outer forceUpdate callback',
+ 'outer componentDidUpdate'
+ ]);
+
+ // Force update Inner
+ log = [];
+ forceUpdateInner();
+ rerender();
+ expect(log).to.deep.equal([
+ 'inner getDerivedStateFromProps',
+ 'inner render',
+ 'inner getSnapshotBeforeUpdate',
+ 'inner forceUpdate callback',
+ 'inner componentDidUpdate'
+ ]);
+
+ // Unmounting Outer & Inner
+ log = [];
+ render(<table />, scratch);
+ expect(log).to.deep.equal([
+ 'outer componentWillUnmount',
+ 'inner componentWillUnmount'
+ ]);
+ });
+
+ describe('#constructor and component(Did|Will)(Mount|Unmount)', () => {
+ let setState;
+ class Outer extends Component {
+ constructor(p, c) {
+ super(p, c);
+ this.state = { show: true };
+ setState = s => this.setState(s);
+ }
+ render(props, { show }) {
+ return <div>{show && <Inner {...props} />}</div>;
+ }
+ }
+
+ class LifecycleTestComponent extends Component {
+ componentWillMount() {}
+ componentDidMount() {}
+ componentWillUnmount() {}
+ render() {
+ return <div />;
+ }
+ }
+
+ class Inner extends LifecycleTestComponent {
+ render() {
+ return (
+ <div>
+ <InnerMost />
+ </div>
+ );
+ }
+ }
+
+ class InnerMost extends LifecycleTestComponent {
+ render() {
+ return <div />;
+ }
+ }
+
+ let spies = [
+ 'componentWillMount',
+ 'componentDidMount',
+ 'componentWillUnmount'
+ ];
+
+ let verifyLifecycleMethods = TestComponent => {
+ let proto = TestComponent.prototype;
+ spies.forEach(s => sinon.spy(proto, s));
+ let reset = () => spies.forEach(s => proto[s].resetHistory());
+
+ it('should be invoked for components on initial render', () => {
+ reset();
+ render(<Outer />, scratch);
+ expect(proto.componentDidMount).to.have.been.called;
+ expect(proto.componentWillMount).to.have.been.calledBefore(
+ proto.componentDidMount
+ );
+ expect(proto.componentDidMount).to.have.been.called;
+ });
+
+ it('should be invoked for components on unmount', () => {
+ reset();
+ setState({ show: false });
+ rerender();
+
+ expect(proto.componentWillUnmount).to.have.been.called;
+ });
+
+ it('should be invoked for components on re-render', () => {
+ reset();
+ setState({ show: true });
+ rerender();
+
+ expect(proto.componentDidMount).to.have.been.called;
+ expect(proto.componentWillMount).to.have.been.calledBefore(
+ proto.componentDidMount
+ );
+ expect(proto.componentDidMount).to.have.been.called;
+ });
+ };
+
+ describe('inner components', () => {
+ verifyLifecycleMethods(Inner);
+ });
+
+ describe('innermost components', () => {
+ verifyLifecycleMethods(InnerMost);
+ });
+
+ describe('when shouldComponentUpdate() returns false', () => {
+ let setState;
+
+ class Outer extends Component {
+ constructor() {
+ super();
+ this.state = { show: true };
+ setState = s => this.setState(s);
+ }
+ render(props, { show }) {
+ return (
+ <div>
+ {show && (
+ <div>
+ <Inner {...props} />
+ </div>
+ )}
+ </div>
+ );
+ }
+ }
+
+ class Inner extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ componentWillMount() {}
+ componentDidMount() {}
+ componentWillUnmount() {}
+ render() {
+ return <div />;
+ }
+ }
+
+ let proto = Inner.prototype;
+ let spies = [
+ 'componentWillMount',
+ 'componentDidMount',
+ 'componentWillUnmount'
+ ];
+ spies.forEach(s => sinon.spy(proto, s));
+
+ let reset = () => spies.forEach(s => proto[s].resetHistory());
+
+ beforeEach(() => reset());
+
+ it('should be invoke normally on initial mount', () => {
+ render(<Outer />, scratch);
+ expect(proto.componentWillMount).to.have.been.called;
+ expect(proto.componentWillMount).to.have.been.calledBefore(
+ proto.componentDidMount
+ );
+ expect(proto.componentDidMount).to.have.been.called;
+ });
+
+ it('should be invoked normally on unmount', () => {
+ setState({ show: false });
+ rerender();
+
+ expect(proto.componentWillUnmount).to.have.been.called;
+ });
+
+ it('should still invoke mount for shouldComponentUpdate():false', () => {
+ setState({ show: true });
+ rerender();
+
+ expect(proto.componentWillMount).to.have.been.called;
+ expect(proto.componentWillMount).to.have.been.calledBefore(
+ proto.componentDidMount
+ );
+ expect(proto.componentDidMount).to.have.been.called;
+ });
+
+ it('should still invoke unmount for shouldComponentUpdate():false', () => {
+ setState({ show: false });
+ rerender();
+
+ expect(proto.componentWillUnmount).to.have.been.called;
+ });
+ });
+ });
+
+ describe('#setState', () => {
+ // From preactjs/preact#1170
+ it('should NOT mutate state, only create new versions', () => {
+ const stateConstant = {};
+ let didMount = false;
+ let componentState;
+
+ class Stateful extends Component {
+ constructor() {
+ super(...arguments);
+ this.state = stateConstant;
+ }
+
+ componentDidMount() {
+ didMount = true;
+
+ // eslint-disable-next-line react/no-did-mount-set-state
+ this.setState({ key: 'value' }, () => {
+ componentState = this.state;
+ });
+ }
+
+ render() {
+ return <div />;
+ }
+ }
+
+ render(<Stateful />, scratch);
+ rerender();
+
+ expect(didMount).to.equal(true);
+ expect(componentState).to.deep.equal({ key: 'value' });
+ expect(stateConstant).to.deep.equal({});
+ });
+
+ // This feature is not mentioned in the docs, but is part of the release
+ // notes for react v16.0.0: https://reactjs.org/blog/2017/09/26/react-v16.0.html#breaking-changes
+ it('should abort if updater function returns null', () => {
+ let updateState;
+ class Foo extends Component {
+ constructor() {
+ super();
+ this.state = { value: 0 };
+ updateState = () =>
+ this.setState(prev => {
+ prev.value++;
+ return null;
+ });
+ }
+
+ render() {
+ return 'value: ' + this.state.value;
+ }
+ }
+
+ let renderSpy = sinon.spy(Foo.prototype, 'render');
+ render(<Foo />, scratch);
+ renderSpy.resetHistory();
+
+ updateState();
+ rerender();
+ expect(renderSpy).to.not.be.called;
+ });
+
+ it('should call callback with correct this binding', () => {
+ let inst;
+ let updateState;
+ class Foo extends Component {
+ constructor() {
+ super();
+ updateState = () => this.setState({}, this.onUpdate);
+ }
+
+ onUpdate() {
+ inst = this;
+ }
+ }
+
+ render(<Foo />, scratch);
+ updateState();
+ rerender();
+
+ expect(inst).to.be.instanceOf(Foo);
+ });
+ });
+
+ describe('Lifecycle DOM Timing', () => {
+ it('should be invoked when dom does (DidMount, WillUnmount) or does not (WillMount, DidUnmount) exist', () => {
+ let setState;
+ class Outer extends Component {
+ constructor() {
+ super();
+ this.state = { show: true };
+ setState = s => {
+ this.setState(s);
+ this.forceUpdate();
+ };
+ }
+ componentWillMount() {
+ expect(
+ document.getElementById('OuterDiv'),
+ 'Outer componentWillMount'
+ ).to.not.exist;
+ }
+ componentDidMount() {
+ expect(document.getElementById('OuterDiv'), 'Outer componentDidMount')
+ .to.exist;
+ }
+ componentWillUnmount() {
+ expect(
+ document.getElementById('OuterDiv'),
+ 'Outer componentWillUnmount'
+ ).to.exist;
+ setTimeout(() => {
+ expect(
+ document.getElementById('OuterDiv'),
+ 'Outer after componentWillUnmount'
+ ).to.not.exist;
+ }, 0);
+ }
+ render(props, { show }) {
+ return (
+ <div id="OuterDiv">
+ {show && (
+ <div>
+ <Inner {...props} />
+ </div>
+ )}
+ </div>
+ );
+ }
+ }
+
+ class Inner extends Component {
+ componentWillMount() {
+ expect(
+ document.getElementById('InnerDiv'),
+ 'Inner componentWillMount'
+ ).to.not.exist;
+ }
+ componentDidMount() {
+ expect(document.getElementById('InnerDiv'), 'Inner componentDidMount')
+ .to.exist;
+ }
+ componentWillUnmount() {
+ // @TODO Component mounted into elements (non-components)
+ // are currently unmounted after those elements, so their
+ // DOM is unmounted prior to the method being called.
+ //expect(document.getElementById('InnerDiv'), 'Inner componentWillUnmount').to.exist;
+ setTimeout(() => {
+ expect(
+ document.getElementById('InnerDiv'),
+ 'Inner after componentWillUnmount'
+ ).to.not.exist;
+ }, 0);
+ }
+
+ render() {
+ return <div id="InnerDiv" />;
+ }
+ }
+
+ let proto = Inner.prototype;
+ let spies = [
+ 'componentWillMount',
+ 'componentDidMount',
+ 'componentWillUnmount'
+ ];
+ spies.forEach(s => sinon.spy(proto, s));
+
+ let reset = () => spies.forEach(s => proto[s].resetHistory());
+
+ render(<Outer />, scratch);
+ expect(proto.componentWillMount).to.have.been.called;
+ expect(proto.componentWillMount).to.have.been.calledBefore(
+ proto.componentDidMount
+ );
+ expect(proto.componentDidMount).to.have.been.called;
+
+ reset();
+ setState({ show: false });
+ rerender();
+
+ expect(proto.componentWillUnmount).to.have.been.called;
+
+ reset();
+ setState({ show: true });
+ rerender();
+
+ expect(proto.componentWillMount).to.have.been.called;
+ expect(proto.componentWillMount).to.have.been.calledBefore(
+ proto.componentDidMount
+ );
+ expect(proto.componentDidMount).to.have.been.called;
+ });
+
+ it('should be able to use getDerivedStateFromError and componentDidCatch together', () => {
+ let didCatch = sinon.spy(),
+ getDerived = sinon.spy();
+ const error = new Error('hi');
+
+ class Boundary extends Component {
+ static getDerivedStateFromError(err) {
+ getDerived(err);
+ return { err };
+ }
+
+ componentDidCatch(err) {
+ didCatch(err);
+ }
+
+ render() {
+ return this.state.err ? <div /> : this.props.children;
+ }
+ }
+
+ const ThrowErr = () => {
+ throw error;
+ };
+
+ render(
+ <Boundary>
+ <ThrowErr />
+ </Boundary>,
+ scratch
+ );
+ rerender();
+
+ expect(didCatch).to.have.been.calledWith(error);
+
+ expect(getDerived).to.have.been.calledWith(error);
+ });
+
+ it('should remove this.base for HOC', () => {
+ let createComponent = (name, fn) => {
+ class C extends Component {
+ componentWillUnmount() {
+ expect(this.base, `${name}.componentWillUnmount`).to.exist;
+ setTimeout(() => {
+ expect(this.base, `after ${name}.componentWillUnmount`).not.to
+ .exist;
+ }, 0);
+ }
+ render(props) {
+ return fn(props);
+ }
+ }
+ sinon.spy(C.prototype, 'componentWillUnmount');
+ sinon.spy(C.prototype, 'render');
+ return C;
+ };
+
+ class Wrapper extends Component {
+ render({ children }) {
+ return <div class="wrapper">{children}</div>;
+ }
+ }
+
+ let One = createComponent('One', () => <Wrapper>one</Wrapper>);
+ let Two = createComponent('Two', () => <Wrapper>two</Wrapper>);
+ let Three = createComponent('Three', () => <Wrapper>three</Wrapper>);
+
+ let components = [One, Two, Three];
+
+ let Selector = createComponent('Selector', ({ page }) => {
+ let Child = components[page];
+ return Child && <Child />;
+ });
+
+ let app;
+ class App extends Component {
+ constructor() {
+ super();
+ app = this;
+ }
+
+ render(_, { page }) {
+ return <Selector page={page} />;
+ }
+ }
+
+ render(<App />, scratch);
+
+ for (let i = 0; i < 20; i++) {
+ app.setState({ page: i % components.length });
+ app.forceUpdate();
+ }
+ });
+ });
+});
diff --git a/preact/test/browser/lifecycles/shouldComponentUpdate.test.js b/preact/test/browser/lifecycles/shouldComponentUpdate.test.js
new file mode 100644
index 0000000..6b5f187
--- /dev/null
+++ b/preact/test/browser/lifecycles/shouldComponentUpdate.test.js
@@ -0,0 +1,916 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component, Fragment } from 'preact';
+import { setupScratch, teardown } from '../../_util/helpers';
+import { logCall, clearLog } from '../../_util/logCall';
+
+/** @jsx createElement */
+
+describe('Lifecycle methods', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ // function expectDomLogToBe(expectedOperations, message) {
+ // expect(getLog()).to.deep.equal(expectedOperations, message);
+ // }
+ let resetInsertBefore;
+ let resetRemoveChild;
+ let resetRemove;
+
+ before(() => {
+ resetInsertBefore = logCall(Element.prototype, 'insertBefore');
+ resetRemoveChild = logCall(Element.prototype, 'appendChild');
+ resetRemove = logCall(Element.prototype, 'removeChild');
+ });
+
+ after(() => {
+ resetInsertBefore();
+ resetRemoveChild();
+ resetRemove();
+ });
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+
+ clearLog();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('#shouldComponentUpdate', () => {
+ let setState;
+
+ class Should extends Component {
+ constructor() {
+ super();
+ this.state = { show: true };
+ setState = s => this.setState(s);
+ }
+ render(props, { show }) {
+ return show ? <div /> : null;
+ }
+ }
+
+ class ShouldNot extends Should {
+ shouldComponentUpdate() {
+ return false;
+ }
+ }
+
+ sinon.spy(Should.prototype, 'render');
+ sinon.spy(ShouldNot.prototype, 'shouldComponentUpdate');
+
+ beforeEach(() => Should.prototype.render.resetHistory());
+
+ it('should rerender component on change by default', () => {
+ render(<Should />, scratch);
+ setState({ show: false });
+ rerender();
+
+ expect(Should.prototype.render).to.have.been.calledTwice;
+ });
+
+ it('should not rerender component if shouldComponentUpdate returns false', () => {
+ render(<ShouldNot />, scratch);
+ setState({ show: false });
+ rerender();
+
+ expect(ShouldNot.prototype.shouldComponentUpdate).to.have.been.calledOnce;
+ expect(ShouldNot.prototype.render).to.have.been.calledOnce;
+ });
+
+ it('should reorder non-updating text children', () => {
+ const rows = [
+ { id: '1', a: 5, b: 100 },
+ { id: '2', a: 50, b: 10 },
+ { id: '3', a: 25, b: 1000 }
+ ];
+
+ class Row extends Component {
+ shouldComponentUpdate(nextProps) {
+ return nextProps.id !== this.props.id;
+ }
+
+ render() {
+ return this.props.id;
+ }
+ }
+
+ const App = ({ sortBy }) => (
+ <div>
+ <table>
+ {rows
+ .sort((a, b) => (a[sortBy] > b[sortBy] ? -1 : 1))
+ .map(row => (
+ <Row id={row.id} key={row.id} />
+ ))}
+ </table>
+ </div>
+ );
+
+ render(<App sortBy="a" />, scratch);
+ expect(scratch.innerHTML).to.equal('<div><table>231</table></div>');
+
+ render(<App sortBy="b" />, scratch);
+ expect(scratch.innerHTML).to.equal('<div><table>312</table></div>');
+ });
+
+ it('should rerender when sCU returned false before', () => {
+ let c;
+ let spy = sinon.spy();
+
+ class App extends Component {
+ constructor() {
+ super();
+ c = this;
+ }
+
+ shouldComponentUpdate(_, nextState) {
+ return !!nextState.update;
+ }
+
+ render() {
+ spy();
+ return <div>foo</div>;
+ }
+ }
+
+ render(<App />, scratch);
+
+ c.setState({});
+ rerender();
+ spy.resetHistory();
+
+ c.setState({ update: true });
+ rerender();
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should be called with nextState', () => {
+ let c;
+ let spy = sinon.spy();
+
+ class App extends Component {
+ constructor() {
+ super();
+ c = this;
+ this.state = { a: false };
+ }
+
+ shouldComponentUpdate(_, nextState) {
+ return this.state !== nextState;
+ }
+
+ render() {
+ spy();
+ return <div>foo</div>;
+ }
+ }
+
+ render(<App />, scratch);
+
+ c.setState({});
+ rerender();
+ spy.resetHistory();
+
+ c.setState({ a: true });
+ rerender();
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should clear renderCallbacks', () => {
+ const spy = sinon.spy();
+ let c,
+ renders = 0;
+
+ class App extends Component {
+ constructor() {
+ super();
+ c = this;
+ this.state = { a: false };
+ }
+
+ shouldComponentUpdate(_, nextState) {
+ return false;
+ }
+
+ render() {
+ renders += 1;
+ return <div>foo</div>;
+ }
+ }
+
+ render(<App />, scratch);
+ expect(renders).to.equal(1);
+
+ c.setState({}, spy);
+ rerender();
+ expect(renders).to.equal(1);
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should not be called on forceUpdate', () => {
+ let Comp;
+ class Foo extends Component {
+ constructor() {
+ super();
+ Comp = this;
+ }
+
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return <ShouldNot />;
+ }
+ }
+
+ sinon.spy(Foo.prototype, 'shouldComponentUpdate');
+ sinon.spy(Foo.prototype, 'render');
+
+ render(<Foo />, scratch);
+ Comp.forceUpdate();
+ rerender();
+
+ expect(Foo.prototype.shouldComponentUpdate).to.not.have.been.called;
+ expect(Foo.prototype.render).to.have.been.calledTwice;
+ });
+
+ it('should not be called on forceUpdate followed by setState', () => {
+ let Comp;
+ class Foo extends Component {
+ constructor() {
+ super();
+ Comp = this;
+ }
+
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return <ShouldNot />;
+ }
+ }
+
+ sinon.spy(Foo.prototype, 'shouldComponentUpdate');
+ sinon.spy(Foo.prototype, 'render');
+
+ render(<Foo />, scratch);
+ Comp.forceUpdate();
+ Comp.setState({});
+ rerender();
+
+ expect(Foo.prototype.render).to.have.been.calledTwice;
+ expect(Foo.prototype.shouldComponentUpdate).to.not.have.been.called;
+ });
+
+ it('should not block queued child forceUpdate', () => {
+ let i = 0;
+ let updateInner;
+ class Inner extends Component {
+ shouldComponentUpdate() {
+ return i === 0;
+ }
+ render() {
+ updateInner = () => this.forceUpdate();
+ return <div>{++i}</div>;
+ }
+ }
+
+ let updateOuter;
+ class Outer extends Component {
+ shouldComponentUpdate() {
+ return i === 0;
+ }
+ render() {
+ updateOuter = () => this.forceUpdate();
+ return <Inner />;
+ }
+ }
+
+ class App extends Component {
+ render() {
+ return <Outer />;
+ }
+ }
+
+ render(<App />, scratch);
+
+ updateOuter();
+ updateInner();
+ rerender();
+
+ expect(scratch.textContent).to.equal('2');
+
+ // The inner sCU should return false on second render because
+ // it was not enqueued via forceUpdate
+ updateOuter();
+ rerender();
+ expect(scratch.textContent).to.equal('2');
+ });
+
+ it('should be passed next props and state', () => {
+ /** @type {() => void} */
+ let updateState;
+
+ let curProps;
+ let curState;
+ let nextPropsArg;
+ let nextStateArg;
+
+ class Foo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ value: 0
+ };
+ updateState = () =>
+ this.setState({
+ value: this.state.value + 1
+ });
+ }
+ static getDerivedStateFromProps(props, state) {
+ // NOTE: Don't do this in real production code!
+ // https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
+ return {
+ value: state.value + 1
+ };
+ }
+ shouldComponentUpdate(nextProps, nextState) {
+ nextPropsArg = { ...nextProps };
+ nextStateArg = { ...nextState };
+
+ curProps = { ...this.props };
+ curState = { ...this.state };
+
+ return true;
+ }
+ render() {
+ return <div>{this.state.value}</div>;
+ }
+ }
+
+ // Expectation:
+ // `this.state` in shouldComponentUpdate should be
+ // the state before setState or getDerivedStateFromProps was called
+ // `nextState` in shouldComponentUpdate should be
+ // the updated state after getDerivedStateFromProps was called
+
+ // Initial render
+ // state.value: initialized to 0 in constructor, 0 -> 1 in gDSFP
+ render(<Foo foo="foo" />, scratch);
+ expect(scratch.firstChild.textContent).to.be.equal('1');
+ expect(curProps).to.be.undefined;
+ expect(curState).to.be.undefined;
+ expect(nextPropsArg).to.be.undefined;
+ expect(nextStateArg).to.be.undefined;
+
+ // New props
+ // state.value: 1 -> 2 in gDSFP
+ render(<Foo foo="bar" />, scratch);
+ expect(scratch.firstChild.textContent).to.be.equal('2');
+ expect(curProps).to.deep.equal({ foo: 'foo' });
+ expect(curState).to.deep.equal({ value: 1 });
+ expect(nextPropsArg).to.deep.equal({ foo: 'bar' });
+ expect(nextStateArg).to.deep.equal({ value: 2 });
+
+ // New state
+ // state.value: 2 -> 3 in updateState, 3 -> 4 in gDSFP
+ updateState();
+ rerender();
+
+ expect(scratch.firstChild.textContent).to.be.equal('4');
+ expect(curProps).to.deep.equal({ foo: 'bar' });
+ expect(curState).to.deep.equal({ value: 2 });
+ expect(nextPropsArg).to.deep.equal({ foo: 'bar' });
+ expect(nextStateArg).to.deep.equal({ value: 4 });
+ });
+
+ it('should update props reference when sCU returns false', () => {
+ let spy = sinon.spy();
+
+ let updateState;
+ class Foo extends Component {
+ constructor() {
+ super();
+ updateState = () => this.setState({});
+ }
+
+ shouldComponentUpdate(nextProps) {
+ if (nextProps !== this.props) {
+ spy();
+ return false;
+ }
+ return true;
+ }
+ }
+
+ render(<Foo foo="foo" />, scratch);
+ render(<Foo foo="bar" />, scratch);
+ expect(spy).to.be.calledOnce;
+
+ updateState();
+ rerender();
+
+ expect(spy).to.be.calledOnce;
+ });
+
+ it('should update state reference when sCU returns false', () => {
+ let spy = sinon.spy();
+
+ let updateState;
+ class Foo extends Component {
+ constructor() {
+ super();
+ this.state = { foo: 1 };
+ updateState = () => this.setState({ foo: 2 });
+ }
+
+ shouldComponentUpdate(_, nextState) {
+ if (nextState !== this.state) {
+ spy(this.state, nextState);
+ return false;
+ }
+ return true;
+ }
+ }
+
+ render(<Foo />, scratch);
+ updateState();
+ rerender();
+
+ expect(spy).to.be.calledOnce;
+ expect(spy).to.be.calledWithMatch({ foo: 1 }, { foo: 2 });
+
+ updateState();
+ rerender();
+
+ expect(spy).to.be.calledWithMatch({ foo: 2 }, { foo: 2 });
+ expect(spy).to.be.calledTwice;
+ });
+
+ // issue #1864
+ it('should update dom pointers correctly when returning an empty string', () => {
+ function Child({ showMe, counter }) {
+ return showMe ? <div>Counter: {counter}</div> : '';
+ }
+
+ class Parent extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render() {
+ return <Inner />;
+ }
+ }
+
+ let updateChild = () => null;
+ class Inner extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { showMe: false };
+ updateChild = () => {
+ this.setState({ showMe: (display = !display) });
+ };
+ }
+ render() {
+ return <Child showMe={this.state.showMe} counter={0} />;
+ }
+ }
+
+ let display = false;
+ let updateApp = () => null;
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ updateApp = () => this.setState({});
+ }
+ render() {
+ return (
+ <div>
+ <div />
+ <div />
+ <Parent />
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.textContent).to.equal('');
+
+ updateChild();
+ rerender();
+
+ expect(scratch.textContent).to.equal('Counter: 0');
+
+ updateApp();
+ rerender();
+
+ expect(scratch.textContent).to.equal('Counter: 0');
+
+ updateChild();
+ rerender();
+
+ expect(scratch.textContent).to.equal('');
+
+ updateApp();
+ rerender();
+ expect(scratch.textContent).to.equal('');
+ });
+
+ // issue #1864 second case
+ it('should update dom pointers correctly when returning a string', () => {
+ function Child({ showMe, counter }) {
+ return showMe ? <div>Counter: {counter}</div> : 'foo';
+ }
+
+ class Parent extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render() {
+ return <Inner />;
+ }
+ }
+
+ let updateChild = () => null;
+ class Inner extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { showMe: false };
+ updateChild = () => {
+ this.setState({ showMe: (display = !display) });
+ };
+ }
+ render() {
+ return <Child showMe={this.state.showMe} counter={0} />;
+ }
+ }
+
+ let display = false;
+ let updateApp = () => null;
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ updateApp = () => this.setState({});
+ }
+ render() {
+ return (
+ <div>
+ <div />
+ <div />
+ <Parent />
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.textContent).to.equal('foo');
+
+ updateChild();
+ rerender();
+
+ expect(scratch.textContent).to.equal('Counter: 0');
+
+ updateApp();
+ rerender();
+
+ expect(scratch.textContent).to.equal('Counter: 0');
+
+ updateChild();
+ rerender();
+
+ expect(scratch.textContent).to.equal('foo');
+
+ updateApp();
+ rerender();
+ expect(scratch.textContent).to.equal('foo');
+ });
+
+ it('should correctly update nested children', () => {
+ let hideThree, incrementThree;
+
+ class One extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render(p) {
+ return p.children;
+ }
+ }
+
+ class Two extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { hideMe: false };
+ hideThree = () => this.setState(s => ({ hideMe: !s.hideMe }));
+ }
+
+ shouldComponentUpdate(nextProps, nextState) {
+ return this.state.hideMe !== nextState.hideMe;
+ }
+
+ render(p, { hideMe }) {
+ return hideMe ? <Fragment /> : p.children;
+ }
+ }
+
+ class Three extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { counter: 1 };
+ incrementThree = () =>
+ this.setState(s => ({ counter: s.counter + 1 }));
+ }
+
+ render(p, { counter }) {
+ return <span>{counter}</span>;
+ }
+ }
+
+ render(
+ <One>
+ <Two>
+ <Three />
+ </Two>
+ </One>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal('<span>1</span>');
+
+ hideThree();
+ rerender();
+ expect(scratch.innerHTML).to.equal('');
+
+ hideThree();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<span>1</span>');
+
+ incrementThree();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<span>2</span>');
+ });
+
+ // issue #1864 third case
+ it('should update dom pointers correctly without siblings', () => {
+ function Child({ showMe, counter }) {
+ return showMe ? <div>Counter: {counter}</div> : 'foo';
+ }
+
+ class Parent extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render() {
+ return <Inner />;
+ }
+ }
+
+ let updateChild = () => null;
+ class Inner extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { showMe: false };
+ updateChild = () => {
+ this.setState({ showMe: (display = !display) });
+ };
+ }
+ render() {
+ return <Child showMe={this.state.showMe} counter={0} />;
+ }
+ }
+
+ let display = false;
+ let updateApp = () => null;
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ updateApp = () => this.setState({});
+ }
+ render() {
+ return (
+ <div>
+ <Parent />
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.textContent).to.equal('foo');
+
+ updateChild();
+ rerender();
+
+ expect(scratch.textContent).to.equal('Counter: 0');
+
+ updateApp();
+ rerender();
+
+ expect(scratch.textContent).to.equal('Counter: 0');
+
+ updateChild();
+ rerender();
+
+ expect(scratch.textContent).to.equal('foo');
+
+ updateApp();
+ rerender();
+
+ expect(scratch.textContent).to.equal('foo');
+ });
+ });
+
+ it('should correctly render when sCU component has null children', () => {
+ class App extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render() {
+ return [null, <div>Hello World!</div>, null];
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Hello World!</div>');
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Hello World!</div>');
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>Hello World!</div>');
+ });
+
+ it('should support nested update with strict-equal vnodes', () => {
+ let wrapperSetState, childSetState;
+
+ class Child extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { foo: 'baz' };
+ }
+
+ render() {
+ childSetState = this.setState.bind(this);
+ return <p>{this.state.foo}</p>;
+ }
+ }
+
+ class Wrapper extends Component {
+ render() {
+ wrapperSetState = this.setState.bind(this);
+ return this.props.children;
+ }
+ }
+
+ const App = () => (
+ <Wrapper>
+ <Child />
+ </Wrapper>
+ );
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal('<p>baz</p>');
+
+ wrapperSetState({ hi: 'world' });
+ childSetState({ foo: 'bar' });
+ rerender();
+ expect(scratch.innerHTML).to.equal('<p>bar</p>');
+ });
+
+ it('should reorder non-updating nested Fragment children', () => {
+ const rows = [
+ { id: '1', a: 5, b: 100 },
+ { id: '2', a: 50, b: 10 },
+ { id: '3', a: 25, b: 1000 }
+ ];
+
+ function Cell({ id, a, b }) {
+ // Return an array to really test out the reordering algorithm :)
+ return (
+ <Fragment>
+ <div>id: {id}</div>
+ <Fragment>
+ <div>a: {a}</div>
+ <div>b: {b}</div>
+ </Fragment>
+ </Fragment>
+ );
+ }
+
+ class Row extends Component {
+ shouldComponentUpdate(nextProps) {
+ return nextProps.id !== this.props.id;
+ }
+
+ render(props) {
+ return <Cell id={props.id} a={props.a} b={props.b} />;
+ }
+ }
+
+ const App = ({ sortBy }) => (
+ <div>
+ <table>
+ {rows
+ .sort((a, b) => (a[sortBy] > b[sortBy] ? -1 : 1))
+ .map(row => (
+ <Row key={row.id} id={row.id} a={row.a} b={row.b} />
+ ))}
+ </table>
+ </div>
+ );
+
+ render(<App sortBy="a" />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ `<div><table>${[
+ '<div>id: 2</div><div>a: 50</div><div>b: 10</div>',
+ '<div>id: 3</div><div>a: 25</div><div>b: 1000</div>',
+ '<div>id: 1</div><div>a: 5</div><div>b: 100</div>'
+ ].join('')}</table></div>`
+ );
+
+ clearLog();
+ render(<App sortBy="b" />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ `<div><table>${[
+ '<div>id: 3</div><div>a: 25</div><div>b: 1000</div>',
+ '<div>id: 1</div><div>a: 5</div><div>b: 100</div>',
+ '<div>id: 2</div><div>a: 50</div><div>b: 10</div>'
+ ].join('')}</table></div>`
+ );
+ // TODO: these tests pass in isolation but not when all tests are running, figure out why logCall stops appending to log.
+ // expectDomLogToBe([
+ // '<table>id: 2a: 50b: 10id: 3a: 25b: 1000id: 1a: 5b: 100.insertBefore(<div>id: 3, <div>id: 2)',
+ // '<table>id: 3id: 2a: 50b: 10a: 25b: 1000id: 1a: 5b: 100.insertBefore(<div>a: 25, <div>id: 2)',
+ // '<table>id: 3a: 25id: 2a: 50b: 10b: 1000id: 1a: 5b: 100.insertBefore(<div>b: 1000, <div>id: 2)',
+ // '<table>id: 3a: 25b: 1000id: 2a: 50b: 10id: 1a: 5b: 100.insertBefore(<div>id: 1, <div>id: 2)',
+ // '<table>id: 3a: 25b: 1000id: 1id: 2a: 50b: 10a: 5b: 100.insertBefore(<div>a: 5, <div>id: 2)',
+ // '<table>id: 3a: 25b: 1000id: 1a: 5id: 2a: 50b: 10b: 100.insertBefore(<div>b: 100, <div>id: 2)'
+ // ]);
+ });
+
+ it('should maintain the order if memoised component initially rendered empty content', () => {
+ let showText, updateParent;
+ class Child extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ show: false
+ };
+ showText = () => this.setState({ show: true });
+ }
+ render(props, { show }) {
+ if (!show) return null;
+
+ return <div>Component</div>;
+ }
+ }
+
+ class Memoized extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+ render() {
+ return <Child />;
+ }
+ }
+ class Parent extends Component {
+ constructor(props) {
+ super(props);
+ updateParent = () => this.setState({});
+ }
+ render() {
+ return (
+ <Fragment>
+ <div>Before</div>
+ <Memoized />
+ <div>After</div>
+ </Fragment>
+ );
+ }
+ }
+
+ render(<Parent />, scratch);
+ expect(scratch.innerHTML).to.equal(`<div>Before</div><div>After</div>`);
+
+ updateParent();
+ rerender();
+ expect(scratch.innerHTML).to.equal(`<div>Before</div><div>After</div>`);
+
+ showText();
+ rerender();
+
+ expect(scratch.innerHTML).to.equal(
+ `<div>Before</div><div>Component</div><div>After</div>`
+ );
+ });
+});
diff --git a/preact/test/browser/placeholders.test.js b/preact/test/browser/placeholders.test.js
new file mode 100644
index 0000000..5b52ee6
--- /dev/null
+++ b/preact/test/browser/placeholders.test.js
@@ -0,0 +1,308 @@
+import { createElement, Component, render, createRef } from 'preact';
+import { setupRerender } from 'preact/test-utils';
+import { setupScratch, teardown } from '../_util/helpers';
+import { logCall, clearLog, getLog } from '../_util/logCall';
+import { div } from '../_util/dom';
+
+/** @jsx createElement */
+
+describe('null placeholders', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ /** @type {() => void} */
+ let rerender;
+
+ /** @type {string[]} */
+ let ops;
+
+ function createNullable(name) {
+ return function Nullable(props) {
+ return props.show ? name : null;
+ };
+ }
+
+ /**
+ * @param {string} name
+ * @returns {[import('preact').ComponentClass, import('preact').RefObject<{ toggle(): void }>]}
+ */
+ function createStatefulNullable(name) {
+ let ref = createRef();
+ class Nullable extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: props.initialShow || true };
+ ref.current = this;
+ }
+ toggle() {
+ this.setState({ show: !this.state.show });
+ }
+ componentDidUpdate() {
+ ops.push(`Update ${name}`);
+ }
+ componentDidMount() {
+ ops.push(`Mount ${name}`);
+ }
+ componentWillUnmount() {
+ ops.push(`Unmount ${name}`);
+ }
+ render() {
+ return this.state.show ? <div>{name}</div> : null;
+ }
+ }
+
+ return [Nullable, ref];
+ }
+
+ let resetAppendChild;
+ let resetInsertBefore;
+ let resetRemoveChild;
+ let resetRemove;
+
+ before(() => {
+ resetAppendChild = logCall(Element.prototype, 'appendChild');
+ resetInsertBefore = logCall(Element.prototype, 'insertBefore');
+ resetRemoveChild = logCall(Element.prototype, 'removeChild');
+ resetRemove = logCall(Element.prototype, 'remove');
+ });
+
+ after(() => {
+ resetAppendChild();
+ resetInsertBefore();
+ resetRemoveChild();
+ resetRemove();
+ });
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ ops = [];
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ clearLog();
+ });
+
+ it('should treat undefined as a hole', () => {
+ let Bar = () => <div>bar</div>;
+
+ function Foo(props) {
+ let sibling;
+ if (props.condition) {
+ sibling = <Bar />;
+ }
+
+ return (
+ <div>
+ <div>Hello</div>
+ {sibling}
+ </div>
+ );
+ }
+
+ render(<Foo condition />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ '<div><div>Hello</div><div>bar</div></div>'
+ );
+ clearLog();
+
+ render(<Foo />, scratch);
+ expect(scratch.innerHTML).to.equal('<div><div>Hello</div></div>');
+ expect(getLog()).to.deep.equal(['<div>bar.remove()']);
+ });
+
+ it('should preserve state of Components when using null or booleans as placeholders', () => {
+ // Must be the same class for all children in <App /> for this test to be valid
+ class Stateful extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { count: 0 };
+ }
+ increment() {
+ this.setState({ count: this.state.count + 1 });
+ }
+ componentDidUpdate() {
+ ops.push(`Update ${this.props.name}`);
+ }
+ componentDidMount() {
+ ops.push(`Mount ${this.props.name}`);
+ }
+ componentWillUnmount() {
+ ops.push(`Unmount ${this.props.name}`);
+ }
+ render() {
+ return (
+ <div>
+ {this.props.name}: {this.state.count}
+ </div>
+ );
+ }
+ }
+
+ const s1ref = createRef();
+ const s2ref = createRef();
+ const s3ref = createRef();
+
+ function App({ first = null, second = false }) {
+ return [first, second, <Stateful name="third" ref={s3ref} />];
+ }
+
+ // Mount third stateful - Initial render
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>third: 0</div>');
+ expect(ops).to.deep.equal(['Mount third'], 'mount third');
+
+ // Update third stateful
+ ops = [];
+ s3ref.current.increment();
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>third: 1</div>');
+ expect(ops).to.deep.equal(['Update third'], 'update third');
+
+ // Mount first stateful
+ ops = [];
+ render(<App first={<Stateful name="first" ref={s1ref} />} />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ '<div>first: 0</div><div>third: 1</div>'
+ );
+ expect(ops).to.deep.equal(['Mount first', 'Update third'], 'mount first');
+
+ // Update first stateful
+ ops = [];
+ s1ref.current.increment();
+ s3ref.current.increment();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div>first: 1</div><div>third: 2</div>'
+ );
+ expect(ops).to.deep.equal(['Update first', 'Update third'], 'update first');
+
+ // Mount second stateful
+ ops = [];
+ render(
+ <App
+ first={<Stateful name="first" ref={s1ref} />}
+ second={<Stateful name="second" ref={s2ref} />}
+ />,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal(
+ '<div>first: 1</div><div>second: 0</div><div>third: 2</div>'
+ );
+ expect(ops).to.deep.equal(
+ ['Update first', 'Mount second', 'Update third'],
+ 'mount second'
+ );
+
+ // Update second stateful
+ ops = [];
+ s1ref.current.increment();
+ s2ref.current.increment();
+ s3ref.current.increment();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div>first: 2</div><div>second: 1</div><div>third: 3</div>'
+ );
+ expect(ops).to.deep.equal(
+ ['Update first', 'Update second', 'Update third'],
+ 'update second'
+ );
+ });
+
+ it('should efficiently replace self-updating null placeholders', () => {
+ // These Nullable components replace themselves with null without the parent re-rendering
+ const [Nullable, ref] = createStatefulNullable('Nullable');
+ const [Nullable2, ref2] = createStatefulNullable('Nullable2');
+ function App() {
+ return (
+ <div>
+ <div>1</div>
+ <Nullable />
+ <div>3</div>
+ <Nullable2 />
+ </div>
+ );
+ }
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ div([div(1), div('Nullable'), div(3), div('Nullable2')])
+ );
+
+ clearLog();
+ ref2.current.toggle();
+ ref.current.toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(div([div(1), div(3)]));
+ expect(getLog()).to.deep.equal([
+ '<div>Nullable2.remove()',
+ '<div>Nullable.remove()'
+ ]);
+
+ clearLog();
+ ref2.current.toggle();
+ ref.current.toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ div([div(1), div('Nullable'), div(3), div('Nullable2')])
+ );
+ expect(getLog()).to.deep.equal([
+ '<div>.appendChild(#text)',
+ '<div>13.appendChild(<div>Nullable2)',
+ '<div>.appendChild(#text)',
+ '<div>13Nullable2.insertBefore(<div>Nullable, <div>3)'
+ ]);
+ });
+
+ // See preactjs/preact#2350
+ it('should efficiently replace null placeholders in parent rerenders (#2350)', () => {
+ // This Nullable only changes when it's parent rerenders
+ const Nullable1 = createNullable('Nullable 1');
+ const Nullable2 = createNullable('Nullable 2');
+
+ /** @type {() => void} */
+ let toggle;
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { show: false };
+ toggle = () => this.setState({ show: !this.state.show });
+ }
+ render() {
+ return (
+ <div>
+ <div>{this.state.show.toString()}</div>
+ <Nullable1 show={this.state.show} />
+ <div>the middle</div>
+ <Nullable2 show={this.state.show} />
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal(div([div('false'), div('the middle')]));
+
+ clearLog();
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ div([div('true'), 'Nullable 1', div('the middle'), 'Nullable 2'])
+ );
+ expect(getLog()).to.deep.equal([
+ '<div>truethe middle.insertBefore(#text, <div>the middle)',
+ '<div>trueNullable 1the middle.appendChild(#text)'
+ ]);
+
+ clearLog();
+ toggle();
+ rerender();
+ expect(scratch.innerHTML).to.equal(div([div('false'), div('the middle')]));
+ expect(getLog()).to.deep.equal([
+ '#text.remove()',
+ // '<div>falsethe middleNullable 2.appendChild(<div>the middle)',
+ '#text.remove()'
+ ]);
+ });
+});
diff --git a/preact/test/browser/refs.test.js b/preact/test/browser/refs.test.js
new file mode 100644
index 0000000..b697a4f
--- /dev/null
+++ b/preact/test/browser/refs.test.js
@@ -0,0 +1,481 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component, createRef } from 'preact';
+import { setupScratch, teardown } from '../_util/helpers';
+
+/** @jsx createElement */
+
+// gives call count and argument errors names (otherwise sinon just uses "spy"):
+let spy = (name, ...args) => {
+ let spy = sinon.spy(...args);
+ spy.displayName = `spy('${name}')`;
+ return spy;
+};
+
+describe('refs', () => {
+ let scratch;
+ let rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should invoke refs in render()', () => {
+ let ref = spy('ref');
+ render(<div ref={ref} />, scratch);
+ expect(ref).to.have.been.calledOnce.and.calledWith(scratch.firstChild);
+ });
+
+ it('should not call stale refs', () => {
+ let ref = spy('ref');
+ let ref2 = spy('ref2');
+ let bool = true;
+ const App = () => <div ref={bool ? ref : ref2} />;
+
+ render(<App />, scratch);
+ expect(ref).to.have.been.calledOnce.and.calledWith(scratch.firstChild);
+
+ bool = false;
+ render(<App />, scratch);
+ expect(ref).to.have.been.calledTwice.and.calledWith(null);
+ expect(ref2).to.have.been.calledOnce.and.calledWith(scratch.firstChild);
+ });
+
+ it('should support createRef', () => {
+ const r = createRef();
+ expect(r.current).to.equal(null);
+
+ render(<div ref={r} />, scratch);
+ expect(r.current).to.equalNode(scratch.firstChild);
+ });
+
+ it('should invoke refs in Component.render()', () => {
+ let outer = spy('outer'),
+ inner = spy('inner');
+ class Foo extends Component {
+ render() {
+ return (
+ <div ref={outer}>
+ <span ref={inner} />
+ </div>
+ );
+ }
+ }
+ render(<Foo />, scratch);
+
+ expect(outer).to.have.been.calledWith(scratch.firstChild);
+ expect(inner).to.have.been.calledWith(scratch.firstChild.firstChild);
+ });
+
+ it('should pass components to ref functions', () => {
+ let ref = spy('ref'),
+ instance;
+ class Foo extends Component {
+ constructor() {
+ super();
+ instance = this;
+ }
+ render() {
+ return <div />;
+ }
+ }
+ render(<Foo ref={ref} />, scratch);
+
+ expect(ref).to.have.been.calledOnce.and.calledWith(instance);
+ });
+
+ it('should have a consistent order', () => {
+ const events = [];
+ const App = () => (
+ <div ref={r => events.push('called with ' + (r && r.tagName))}>
+ <h1 ref={r => events.push('called with ' + (r && r.tagName))}>hi</h1>
+ </div>
+ );
+
+ render(<App />, scratch);
+ render(<App />, scratch);
+ expect(events.length).to.equal(6);
+ expect(events).to.deep.equal([
+ 'called with H1',
+ 'called with DIV',
+ 'called with null',
+ 'called with H1',
+ 'called with null',
+ 'called with DIV'
+ ]);
+ });
+
+ it('should pass rendered DOM from functional components to ref functions', () => {
+ let ref = spy('ref');
+
+ const Foo = () => <div />;
+
+ render(<Foo ref={ref} />, scratch);
+ expect(ref).to.have.been.calledOnce;
+
+ ref.resetHistory();
+ render(<Foo ref={ref} />, scratch);
+ expect(ref).not.to.have.been.called;
+
+ ref.resetHistory();
+ render(<span />, scratch);
+ expect(ref).to.have.been.calledOnce.and.calledWith(null);
+ });
+
+ it('should pass children to ref functions', () => {
+ let outer = spy('outer'),
+ inner = spy('inner'),
+ InnermostComponent = 'span',
+ update,
+ inst;
+ class Outer extends Component {
+ constructor() {
+ super();
+ update = () => this.forceUpdate();
+ }
+ render() {
+ return (
+ <div>
+ <Inner ref={outer} />
+ </div>
+ );
+ }
+ }
+ class Inner extends Component {
+ constructor() {
+ super();
+ inst = this;
+ }
+ render() {
+ return <InnermostComponent ref={inner} />;
+ }
+ }
+
+ render(<Outer />, scratch);
+
+ expect(outer).to.have.been.calledOnce.and.calledWith(inst);
+ expect(inner).to.have.been.calledOnce.and.calledWith(inst.base);
+
+ outer.resetHistory();
+ inner.resetHistory();
+ update();
+ rerender();
+
+ expect(outer, 're-render').not.to.have.been.called;
+ expect(inner, 're-render').not.to.have.been.called;
+
+ inner.resetHistory();
+ InnermostComponent = 'x-span';
+ update();
+ rerender();
+
+ expect(inner, 're-render swap');
+ expect(inner.firstCall, 're-render swap').to.have.been.calledWith(null);
+ expect(inner.secondCall, 're-render swap').to.have.been.calledWith(
+ inst.base
+ );
+
+ InnermostComponent = 'span';
+ outer.resetHistory();
+ inner.resetHistory();
+ render(<div />, scratch);
+
+ expect(outer, 'unrender').to.have.been.calledOnce.and.calledWith(null);
+ expect(inner, 'unrender').to.have.been.calledOnce.and.calledWith(null);
+ });
+
+ it('should pass high-order children to ref functions', () => {
+ let outer = spy('outer'),
+ inner = spy('inner'),
+ innermost = spy('innermost'),
+ InnermostComponent = 'span',
+ outerInst,
+ innerInst;
+ class Outer extends Component {
+ constructor() {
+ super();
+ outerInst = this;
+ }
+ render() {
+ return <Inner ref={inner} />;
+ }
+ }
+ class Inner extends Component {
+ constructor() {
+ super();
+ innerInst = this;
+ }
+ render() {
+ return <InnermostComponent ref={innermost} />;
+ }
+ }
+
+ render(<Outer ref={outer} />, scratch);
+
+ expect(outer, 'outer initial').to.have.been.calledOnce.and.calledWith(
+ outerInst
+ );
+ expect(inner, 'inner initial').to.have.been.calledOnce.and.calledWith(
+ innerInst
+ );
+ expect(
+ innermost,
+ 'innerMost initial'
+ ).to.have.been.calledOnce.and.calledWith(innerInst.base);
+
+ outer.resetHistory();
+ inner.resetHistory();
+ innermost.resetHistory();
+ render(<Outer ref={outer} />, scratch);
+
+ expect(outer, 'outer update').not.to.have.been.called;
+ expect(inner, 'inner update').not.to.have.been.called;
+ expect(innermost, 'innerMost update').not.to.have.been.called;
+
+ innermost.resetHistory();
+ InnermostComponent = 'x-span';
+ render(<Outer ref={outer} />, scratch);
+
+ expect(innermost, 'innerMost swap');
+ expect(innermost.firstCall, 'innerMost swap').to.have.been.calledWith(null);
+ expect(innermost.secondCall, 'innerMost swap').to.have.been.calledWith(
+ innerInst.base
+ );
+ InnermostComponent = 'span';
+
+ outer.resetHistory();
+ inner.resetHistory();
+ innermost.resetHistory();
+ render(<div />, scratch);
+
+ expect(outer, 'outer unmount').to.have.been.calledOnce.and.calledWith(null);
+ expect(inner, 'inner unmount').to.have.been.calledOnce.and.calledWith(null);
+ expect(
+ innermost,
+ 'innerMost unmount'
+ ).to.have.been.calledOnce.and.calledWith(null);
+ });
+
+ // Test for #1143
+ it('should not pass ref into component as a prop', () => {
+ let foo = spy('foo'),
+ bar = spy('bar');
+
+ class Foo extends Component {
+ render() {
+ return <div />;
+ }
+ }
+ const Bar = spy('Bar', () => <div />);
+
+ sinon.spy(Foo.prototype, 'render');
+
+ render(
+ <div>
+ <Foo ref={foo} a="a" />
+ <Bar ref={bar} b="b" />
+ </div>,
+ scratch
+ );
+
+ expect(Foo.prototype.render).to.have.been.calledWithMatch(
+ { ref: sinon.match.falsy, a: 'a' },
+ {},
+ {}
+ );
+ expect(Bar).to.have.been.calledWithMatch(
+ { b: 'b', ref: sinon.match.falsy },
+ {}
+ );
+ });
+
+ // Test for #232
+ it('should only null refs after unmount', () => {
+ let outer, inner;
+
+ class TestUnmount extends Component {
+ componentWillUnmount() {
+ expect(this).to.have.property('outer', outer);
+ expect(this).to.have.property('inner', inner);
+
+ setTimeout(() => {
+ expect(this).to.have.property('outer', null);
+ expect(this).to.have.property('inner', null);
+ });
+ }
+
+ render() {
+ return (
+ <div id="outer" ref={c => (this.outer = c)}>
+ <div id="inner" ref={c => (this.inner = c)} />
+ </div>
+ );
+ }
+ }
+
+ sinon.spy(TestUnmount.prototype, 'componentWillUnmount');
+
+ render(
+ <div>
+ <TestUnmount />
+ </div>,
+ scratch
+ );
+ outer = scratch.querySelector('#outer');
+ inner = scratch.querySelector('#inner');
+
+ expect(TestUnmount.prototype.componentWillUnmount).not.to.have.been.called;
+
+ render(<div />, scratch);
+ expect(TestUnmount.prototype.componentWillUnmount).to.have.been.calledOnce;
+ });
+
+ it('should null and re-invoke refs when swapping component root element type', () => {
+ let inst;
+
+ class App extends Component {
+ render() {
+ return (
+ <div>
+ <Child />
+ </div>
+ );
+ }
+ }
+
+ class Child extends Component {
+ constructor(props, context) {
+ super(props, context);
+ this.state = { show: false };
+ inst = this;
+ }
+ handleMount() {}
+ render(_, { show }) {
+ if (!show) return <div id="div" ref={this.handleMount} />;
+ return (
+ <span id="span" ref={this.handleMount}>
+ some test content
+ </span>
+ );
+ }
+ }
+ sinon.spy(Child.prototype, 'handleMount');
+
+ render(<App />, scratch);
+ expect(inst.handleMount).to.have.been.calledOnce.and.calledWith(
+ scratch.querySelector('#div')
+ );
+ inst.handleMount.resetHistory();
+
+ inst.setState({ show: true });
+ rerender();
+ expect(inst.handleMount).to.have.been.calledTwice;
+ expect(inst.handleMount.firstCall).to.have.been.calledWith(null);
+ expect(inst.handleMount.secondCall).to.have.been.calledWith(
+ scratch.querySelector('#span')
+ );
+ inst.handleMount.resetHistory();
+
+ inst.setState({ show: false });
+ rerender();
+ expect(inst.handleMount).to.have.been.calledTwice;
+ expect(inst.handleMount.firstCall).to.have.been.calledWith(null);
+ expect(inst.handleMount.secondCall).to.have.been.calledWith(
+ scratch.querySelector('#div')
+ );
+ });
+
+ it('should add refs to components representing DOM nodes with no attributes if they have been pre-rendered', () => {
+ // Simulate pre-render
+ let parent = document.createElement('div');
+ let child = document.createElement('div');
+ parent.appendChild(child);
+ scratch.appendChild(parent); // scratch contains: <div><div></div></div>
+
+ let ref = spy('ref');
+
+ class Wrapper extends Component {
+ render() {
+ return <div />;
+ }
+ }
+
+ render(
+ <div>
+ <Wrapper ref={c => ref(c.base)} />
+ </div>,
+ scratch
+ );
+ expect(ref).to.have.been.calledOnce.and.calledWith(
+ scratch.firstChild.firstChild
+ );
+ });
+
+ // Test for #1177
+ it('should call ref after children are rendered', done => {
+ let input;
+ function autoFocus(el) {
+ if (el) {
+ input = el;
+
+ // Chrome bug: It will somehow drop the focus event if it fires too soon.
+ // See https://stackoverflow.com/questions/17384464/
+ setTimeout(() => {
+ el.focus();
+ done();
+ }, 1);
+ }
+ }
+
+ render(<input type="text" ref={autoFocus} value="foo" />, scratch);
+ expect(input.value).to.equal('foo');
+ });
+
+ it('should correctly set nested child refs', () => {
+ const ref = createRef();
+ const App = ({ open }) =>
+ open ? (
+ <div class="open" key="open">
+ <div ref={ref} />
+ </div>
+ ) : (
+ <div class="closes" key="closed">
+ <div ref={ref} />
+ </div>
+ );
+
+ render(<App />, scratch);
+ expect(ref.current).to.not.be.null;
+
+ render(<App open />, scratch);
+ expect(ref.current).to.not.be.null;
+ });
+
+ it('should correctly call child refs for un-keyed children on re-render', () => {
+ let el = null;
+ let ref = e => {
+ el = e;
+ };
+
+ class App extends Component {
+ render({ headerVisible }) {
+ return (
+ <div>
+ {headerVisible && <div>foo</div>}
+ <div ref={ref}>bar</div>
+ </div>
+ );
+ }
+ }
+
+ render(<App headerVisible />, scratch);
+ expect(el).to.not.be.equal(null);
+
+ render(<App />, scratch);
+ expect(el).to.not.be.equal(null);
+ });
+});
diff --git a/preact/test/browser/render.test.js b/preact/test/browser/render.test.js
new file mode 100644
index 0000000..63fb0c4
--- /dev/null
+++ b/preact/test/browser/render.test.js
@@ -0,0 +1,1164 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component, options } from 'preact';
+import {
+ setupScratch,
+ teardown,
+ getMixedArray,
+ mixedArrayHTML,
+ serializeHtml,
+ supportsDataList,
+ sortAttributes,
+ spyOnElementAttributes,
+ createEvent
+} from '../_util/helpers';
+import { clearLog, getLog, logCall } from '../_util/logCall';
+import { useState } from 'preact/hooks';
+
+/** @jsx createElement */
+
+function getAttributes(node) {
+ let attrs = {};
+ for (let i = node.attributes.length; i--; ) {
+ attrs[node.attributes[i].name] = node.attributes[i].value;
+ }
+ return attrs;
+}
+
+const isIE11 = /Trident\//.test(navigator.userAgent);
+
+describe('render()', () => {
+ let scratch, rerender;
+
+ let resetAppendChild;
+ let resetInsertBefore;
+ let resetRemoveChild;
+ let resetRemove;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ before(() => {
+ resetAppendChild = logCall(Element.prototype, 'appendChild');
+ resetInsertBefore = logCall(Element.prototype, 'insertBefore');
+ resetRemoveChild = logCall(Element.prototype, 'removeChild');
+ resetRemove = logCall(Element.prototype, 'remove');
+ });
+
+ after(() => {
+ resetAppendChild();
+ resetInsertBefore();
+ resetRemoveChild();
+ resetRemove();
+ });
+
+ it('should rerender when value from "" to 0', () => {
+ render('', scratch);
+ expect(scratch.innerHTML).to.equal('');
+
+ render(0, scratch);
+ expect(scratch.innerHTML).to.equal('0');
+ });
+
+ it('should render an empty text node given an empty string', () => {
+ render('', scratch);
+ let c = scratch.childNodes;
+ expect(c).to.have.length(1);
+ expect(c[0].data).to.equal('');
+ expect(c[0].nodeName).to.equal('#text');
+ });
+
+ it('should allow node type change with content', () => {
+ render(<span>Bad</span>, scratch);
+ render(<div>Good</div>, scratch);
+ expect(scratch.innerHTML).to.eql(`<div>Good</div>`);
+ });
+
+ it('should not render when detecting JSON-injection', () => {
+ const vnode = JSON.parse('{"type":"span","children":"Malicious"}');
+ render(vnode, scratch);
+ expect(scratch.firstChild).to.be.null;
+ });
+
+ it('should create empty nodes (<* />)', () => {
+ render(<div />, scratch);
+ expect(scratch.childNodes).to.have.length(1);
+ expect(scratch.childNodes[0].nodeName).to.equal('DIV');
+
+ scratch.parentNode.removeChild(scratch);
+ scratch = document.createElement('div');
+ (document.body || document.documentElement).appendChild(scratch);
+
+ render(<span />, scratch);
+ expect(scratch.childNodes).to.have.length(1);
+ expect(scratch.childNodes[0].nodeName).to.equal('SPAN');
+ });
+
+ it('should not throw error in IE11 with type date', () => {
+ expect(() => render(<input type="date" />, scratch)).to.not.throw();
+ });
+
+ it('should support custom tag names', () => {
+ render(<foo />, scratch);
+ expect(scratch.childNodes).to.have.length(1);
+ expect(scratch.firstChild).to.have.property('nodeName', 'FOO');
+
+ scratch.parentNode.removeChild(scratch);
+ scratch = document.createElement('div');
+ (document.body || document.documentElement).appendChild(scratch);
+
+ render(<x-bar />, scratch);
+ expect(scratch.childNodes).to.have.length(1);
+ expect(scratch.firstChild).to.have.property('nodeName', 'X-BAR');
+ });
+
+ it('should support the form attribute', () => {
+ render(
+ <div>
+ <form id="myform" />
+ <button form="myform">test</button>
+ <input form="myform" />
+ </div>,
+ scratch
+ );
+ const div = scratch.childNodes[0];
+ const form = div.childNodes[0];
+ const button = div.childNodes[1];
+ const input = div.childNodes[2];
+
+ // IE11 doesn't support the form attribute
+ if (!isIE11) {
+ expect(button).to.have.property('form', form);
+ expect(input).to.have.property('form', form);
+ }
+ });
+
+ it('should allow VNode reuse', () => {
+ let reused = <div class="reuse">Hello World!</div>;
+ render(
+ <div>
+ {reused}
+ <hr />
+ {reused}
+ </div>,
+ scratch
+ );
+ expect(serializeHtml(scratch)).to.eql(
+ `<div><div class="reuse">Hello World!</div><hr><div class="reuse">Hello World!</div></div>`
+ );
+
+ render(
+ <div>
+ <hr />
+ {reused}
+ </div>,
+ scratch
+ );
+ expect(serializeHtml(scratch)).to.eql(
+ `<div><hr><div class="reuse">Hello World!</div></div>`
+ );
+ });
+
+ it('should merge new elements when called multiple times', () => {
+ render(<div />, scratch);
+ expect(scratch.childNodes).to.have.length(1);
+ expect(scratch.firstChild).to.have.property('nodeName', 'DIV');
+ expect(scratch.innerHTML).to.equal('<div></div>');
+
+ render(<span />, scratch);
+ expect(scratch.childNodes).to.have.length(1);
+ expect(scratch.firstChild).to.have.property('nodeName', 'SPAN');
+ expect(scratch.innerHTML).to.equal('<span></span>');
+
+ render(<span class="hello">Hello!</span>, scratch);
+ expect(scratch.childNodes).to.have.length(1);
+ expect(scratch.firstChild).to.have.property('nodeName', 'SPAN');
+ expect(scratch.innerHTML).to.equal('<span class="hello">Hello!</span>');
+ });
+
+ it('should nest empty nodes', () => {
+ render(
+ <div>
+ <span />
+ <foo />
+ <x-bar />
+ </div>,
+ scratch
+ );
+
+ expect(scratch.childNodes).to.have.length(1);
+ expect(scratch.childNodes[0].nodeName).to.equal('DIV');
+
+ let c = scratch.childNodes[0].childNodes;
+ expect(c).to.have.length(3);
+ expect(c[0].nodeName).to.equal('SPAN');
+ expect(c[1].nodeName).to.equal('FOO');
+ expect(c[2].nodeName).to.equal('X-BAR');
+ });
+
+ it('should not render falsy values', () => {
+ render(
+ <div>
+ {null},{undefined},{false},{0},{NaN}
+ </div>,
+ scratch
+ );
+
+ expect(scratch.firstChild).to.have.property('innerHTML', ',,,0,NaN');
+ });
+
+ it('should not render null', () => {
+ render(null, scratch);
+ expect(scratch.innerHTML).to.equal('');
+ expect(scratch.childNodes).to.have.length(0);
+ });
+
+ it('should not render undefined', () => {
+ render(undefined, scratch);
+ expect(scratch.innerHTML).to.equal('');
+ expect(scratch.childNodes).to.have.length(0);
+ });
+
+ it('should not render boolean true', () => {
+ render(true, scratch);
+ expect(scratch.innerHTML).to.equal('');
+ expect(scratch.childNodes).to.have.length(0);
+ });
+
+ it('should not render boolean false', () => {
+ render(false, scratch);
+ expect(scratch.innerHTML).to.equal('');
+ expect(scratch.childNodes).to.have.length(0);
+ });
+
+ it('should not render children when using function children', () => {
+ render(<div>{() => {}}</div>, scratch);
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('should render NaN as text content', () => {
+ render(NaN, scratch);
+ expect(scratch.innerHTML).to.equal('NaN');
+ });
+
+ it('should render numbers (0) as text content', () => {
+ render(0, scratch);
+ expect(scratch.innerHTML).to.equal('0');
+ });
+
+ it('should render numbers (42) as text content', () => {
+ render(42, scratch);
+ expect(scratch.innerHTML).to.equal('42');
+ });
+
+ it('should render bigint as text content', () => {
+ // Skip in browsers not supporting big integers
+ if (typeof BigInt === 'undefined') {
+ return;
+ }
+
+ // eslint-disable-next-line no-undef, new-cap
+ render(BigInt(4), scratch);
+ expect(scratch.innerHTML).to.equal('4');
+ });
+
+ it('should render strings as text content', () => {
+ render('Testing, huh! How is it going?', scratch);
+ expect(scratch.innerHTML).to.equal('Testing, huh! How is it going?');
+ });
+
+ it('should render arrays of mixed elements', () => {
+ render(getMixedArray(), scratch);
+ expect(scratch.innerHTML).to.equal(mixedArrayHTML);
+ });
+
+ it('should clear falsy attributes', () => {
+ render(
+ <div
+ anull="anull"
+ aundefined="aundefined"
+ afalse="afalse"
+ anan="aNaN"
+ a0="a0"
+ />,
+ scratch
+ );
+
+ render(
+ <div
+ anull={null}
+ aundefined={undefined}
+ afalse={false}
+ anan={NaN}
+ a0={0}
+ />,
+ scratch
+ );
+
+ expect(
+ getAttributes(scratch.firstChild),
+ 'from previous truthy values'
+ ).to.eql({
+ a0: '0',
+ anan: 'NaN'
+ });
+ });
+
+ it('should not render falsy attributes on hydrate', () => {
+ render(
+ <div
+ anull={null}
+ aundefined={undefined}
+ afalse={false}
+ anan={NaN}
+ a0={0}
+ />,
+ scratch
+ );
+
+ expect(getAttributes(scratch.firstChild), 'initial render').to.eql({
+ a0: '0',
+ anan: 'NaN'
+ });
+ });
+
+ it('should clear falsy input values', () => {
+ // Note: this test just demonstrates the default browser behavior
+ render(
+ <div>
+ <input value={0} />
+ <input value={false} />
+ <input value={null} />
+ <input value={undefined} />
+ </div>,
+ scratch
+ );
+
+ let root = scratch.firstChild;
+ expect(root.children[0]).to.have.property('value', '0');
+ expect(root.children[1]).to.have.property('value', 'false');
+ expect(root.children[2]).to.have.property('value', '');
+ expect(root.children[3]).to.have.property('value', '');
+ });
+
+ it('should set value inside the specified range', () => {
+ render(
+ <input type="range" value={0.5} min="0" max="1" step="0.05" />,
+ scratch
+ );
+ expect(scratch.firstChild.value).to.equal('0.5');
+ });
+
+ // IE or IE Edge will throw when attribute values don't conform to the
+ // spec. That's the correct behaviour, but bad for this test...
+ if (!/(Edge|MSIE|Trident)/.test(navigator.userAgent)) {
+ it('should not clear falsy DOM properties', () => {
+ function test(val) {
+ render(
+ <div>
+ <input value={val} />
+ <table border={val} />
+ </div>,
+ scratch
+ );
+ }
+
+ test('2');
+ test(false);
+ expect(scratch.innerHTML).to.equal(
+ '<div><input><table border="false"></table></div>',
+ 'for false'
+ );
+
+ test('3');
+ test(null);
+ expect(scratch.innerHTML).to.equal(
+ '<div><input><table border=""></table></div>',
+ 'for null'
+ );
+
+ test('4');
+ test(undefined);
+ expect(scratch.innerHTML).to.equal(
+ '<div><input><table border=""></table></div>',
+ 'for undefined'
+ );
+ });
+ }
+
+ // Test for preactjs/preact#651
+ it('should set enumerable boolean attribute', () => {
+ render(<input spellcheck={false} />, scratch);
+ expect(scratch.firstChild.spellcheck).to.equal(false);
+ });
+
+ it('should render download attribute', () => {
+ render(<a download="" />, scratch);
+ expect(scratch.firstChild.getAttribute('download')).to.equal('');
+
+ render(<a download={null} />, scratch);
+ expect(scratch.firstChild.getAttribute('download')).to.equal(null);
+ });
+
+ it('should not set tagName', () => {
+ expect(() => render(<input tagName="div" />, scratch)).not.to.throw();
+ });
+
+ it('should apply string attributes', () => {
+ render(<div foo="bar" data-foo="databar" />, scratch);
+ expect(serializeHtml(scratch)).to.equal(
+ '<div data-foo="databar" foo="bar"></div>'
+ );
+ });
+
+ it('should not serialize function props as attributes', () => {
+ render(<div click={function a() {}} ONCLICK={function b() {}} />, scratch);
+
+ let div = scratch.childNodes[0];
+ expect(div.attributes.length).to.equal(0);
+ });
+
+ it('should serialize object props as attributes', () => {
+ render(
+ <div
+ foo={{ a: 'b' }}
+ bar={{
+ toString() {
+ return 'abc';
+ }
+ }}
+ />,
+ scratch
+ );
+
+ let div = scratch.childNodes[0];
+ expect(div.attributes.length).to.equal(2);
+
+ // Normalize attribute order because it's different in various browsers
+ let normalized = {};
+ for (let i = 0; i < div.attributes.length; i++) {
+ let attr = div.attributes[i];
+ normalized[attr.name] = attr.value;
+ }
+
+ expect(normalized).to.deep.equal({
+ bar: 'abc',
+ foo: '[object Object]'
+ });
+ });
+
+ it('should apply class as String', () => {
+ render(<div class="foo" />, scratch);
+ expect(scratch.childNodes[0]).to.have.property('className', 'foo');
+ });
+
+ it('should alias className to class', () => {
+ render(<div className="bar" />, scratch);
+ expect(scratch.childNodes[0]).to.have.property('className', 'bar');
+ });
+
+ it('should support false aria-* attributes', () => {
+ render(<div aria-checked="false" />, scratch);
+ expect(scratch.firstChild.getAttribute('aria-checked')).to.equal('false');
+ });
+
+ it('should set checked attribute on custom elements without checked property', () => {
+ render(<o-checkbox checked />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ '<o-checkbox checked="true"></o-checkbox>'
+ );
+ });
+
+ it('should set value attribute on custom elements without value property', () => {
+ render(<o-input value="test" />, scratch);
+ expect(scratch.innerHTML).to.equal('<o-input value="test"></o-input>');
+ });
+
+ it('should mask value on password input elements', () => {
+ render(<input value="xyz" type="password" />, scratch);
+ expect(scratch.innerHTML).to.equal('<input type="password">');
+ });
+
+ it('should unset href if null || undefined', () => {
+ render(
+ <pre>
+ <a href="#">href="#"</a>
+ <a href={undefined}>href="undefined"</a>
+ <a href={null}>href="null"</a>
+ <a href={''}>href="''"</a>
+ </pre>,
+ scratch
+ );
+
+ const links = scratch.querySelectorAll('a');
+ expect(links[0].hasAttribute('href')).to.equal(true);
+ expect(links[1].hasAttribute('href')).to.equal(false);
+ expect(links[2].hasAttribute('href')).to.equal(false);
+ expect(links[3].hasAttribute('href')).to.equal(true);
+ });
+
+ describe('dangerouslySetInnerHTML', () => {
+ it('should support dangerouslySetInnerHTML', () => {
+ let html = '<b>foo &amp; bar</b>';
+ // eslint-disable-next-line react/no-danger
+ render(<div dangerouslySetInnerHTML={{ __html: html }} />, scratch);
+
+ expect(scratch.firstChild, 'set').to.have.property('innerHTML', html);
+ expect(scratch.innerHTML).to.equal('<div>' + html + '</div>');
+
+ render(
+ <div>
+ a<strong>b</strong>
+ </div>,
+ scratch
+ );
+
+ expect(scratch, 'unset').to.have.property(
+ 'innerHTML',
+ `<div>a<strong>b</strong></div>`
+ );
+
+ // eslint-disable-next-line react/no-danger
+ render(<div dangerouslySetInnerHTML={{ __html: html }} />, scratch);
+ expect(scratch.innerHTML, 're-set').to.equal('<div>' + html + '</div>');
+ });
+
+ it('should apply proper mutation for VNodes with dangerouslySetInnerHTML attr', () => {
+ let thing;
+ class Thing extends Component {
+ constructor(props, context) {
+ super(props, context);
+ this.state = { html: this.props.html };
+ thing = this;
+ }
+ render(props, { html }) {
+ // eslint-disable-next-line react/no-danger
+ return html ? (
+ <div dangerouslySetInnerHTML={{ __html: html }} />
+ ) : (
+ <div />
+ );
+ }
+ }
+
+ render(<Thing html="<b><i>test</i></b>" />, scratch);
+ expect(scratch.innerHTML).to.equal('<div><b><i>test</i></b></div>');
+
+ thing.setState({ html: false });
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div></div>');
+
+ thing.setState({ html: '<foo><bar>test</bar></foo>' });
+ rerender();
+ expect(scratch.innerHTML).to.equal(
+ '<div><foo><bar>test</bar></foo></div>'
+ );
+ });
+
+ it('should not hydrate with dangerouslySetInnerHTML', () => {
+ let html = '<b>foo &amp; bar</b>';
+ scratch.innerHTML = `<div>${html}</div>`;
+ // eslint-disable-next-line react/no-danger
+ render(<div dangerouslySetInnerHTML={{ __html: html }} />, scratch);
+
+ expect(scratch.firstChild).to.have.property('innerHTML', html);
+ expect(scratch.innerHTML).to.equal(`<div>${html}</div>`);
+ });
+
+ it('should avoid reapplying innerHTML when __html property of dangerouslySetInnerHTML attr remains unchanged', () => {
+ class Thing extends Component {
+ render() {
+ // eslint-disable-next-line react/no-danger
+ return (
+ <div dangerouslySetInnerHTML={{ __html: '<span>same</span>' }} />
+ );
+ }
+ }
+
+ let thing;
+ render(<Thing ref={r => (thing = r)} />, scratch);
+
+ let firstInnerHTMLChild = scratch.firstChild.firstChild;
+
+ // Re-render
+ thing.forceUpdate();
+
+ expect(firstInnerHTMLChild).to.equalNode(scratch.firstChild.firstChild);
+ });
+
+ it('should unmount dangerouslySetInnerHTML', () => {
+ let set;
+
+ const TextDiv = () => (
+ <div dangerouslySetInnerHTML={{ __html: '' }}>some text</div>
+ );
+
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ set = this.setState.bind(this);
+ this.state = { show: true };
+ }
+
+ render() {
+ return this.state.show && <TextDiv />;
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.innerHTML).to.equal('<div></div>');
+
+ set({ show: false });
+ rerender();
+ expect(scratch.innerHTML).to.equal('');
+ });
+ });
+
+ it('should reconcile mutated DOM attributes', () => {
+ let check = p => render(<input type="checkbox" checked={p} />, scratch),
+ value = () => scratch.lastChild.checked,
+ setValue = p => (scratch.lastChild.checked = p);
+ check(true);
+ expect(value()).to.equal(true);
+ check(false);
+ expect(value()).to.equal(false);
+ check(true);
+ expect(value()).to.equal(true);
+ setValue(true);
+ check(false);
+ expect(value()).to.equal(false);
+ setValue(false);
+ check(true);
+ expect(value()).to.equal(true);
+ });
+
+ it('should reorder child pairs', () => {
+ render(
+ <div>
+ <a>a</a>
+ <b>b</b>
+ </div>,
+ scratch
+ );
+
+ let a = scratch.firstChild.firstChild;
+ let b = scratch.firstChild.lastChild;
+
+ expect(a).to.have.property('nodeName', 'A');
+ expect(b).to.have.property('nodeName', 'B');
+
+ render(
+ <div>
+ <b>b</b>
+ <a>a</a>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.firstChild.firstChild).to.equalNode(b);
+ expect(scratch.firstChild.lastChild).to.equalNode(a);
+ });
+
+ // Discussion: https://github.com/preactjs/preact/issues/287
+ // <datalist> is not supported in Safari, even though the element
+ // constructor is present
+ if (supportsDataList()) {
+ it('should allow <input list /> to pass through as an attribute', () => {
+ render(
+ <div>
+ <input type="range" min="0" max="100" list="steplist" />
+ <datalist id="steplist">
+ <option>0</option>
+ <option>50</option>
+ <option>100</option>
+ </datalist>
+ </div>,
+ scratch
+ );
+
+ let html = scratch.firstElementChild.firstElementChild.outerHTML;
+ expect(sortAttributes(html)).to.equal(
+ sortAttributes('<input type="range" min="0" max="100" list="steplist">')
+ );
+ });
+ }
+
+ // Issue #2284
+ it('should not throw when setting size to an invalid value', () => {
+ // These values are usually used to reset the `size` attribute to its
+ // initial state.
+ expect(() => render(<input size={undefined} />, scratch)).to.not.throw();
+ expect(() => render(<input size={null} />, scratch)).to.not.throw();
+ expect(() => render(<input size={0} />, scratch)).to.not.throw();
+ });
+
+ it('should not execute append operation when child is at last', () => {
+ // See preactjs/preact#717 for discussion about the issue this addresses
+
+ let todoText = 'new todo that I should complete';
+ let input;
+ let setText;
+ let addTodo;
+
+ const ENTER = 13;
+
+ class TodoList extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { todos: [], text: '' };
+ setText = this.setText = this.setText.bind(this);
+ addTodo = this.addTodo = this.addTodo.bind(this);
+ }
+ setText(e) {
+ this.setState({ text: e.target.value });
+ }
+ addTodo(e) {
+ if (e.keyCode === ENTER) {
+ let { todos, text } = this.state;
+ todos = todos.concat({ text });
+ this.setState({ todos, text: '' });
+ }
+ }
+ render() {
+ const { todos, text } = this.state;
+ return (
+ <div onKeyDown={this.addTodo}>
+ {todos.map(todo => [
+ <span>{todo.text}</span>,
+ <span>
+ {' '}
+ [ <a href="javascript:;">Delete</a> ]
+ </span>,
+ <br />
+ ])}
+ <input value={text} onInput={this.setText} ref={i => (input = i)} />
+ </div>
+ );
+ }
+ }
+
+ render(<TodoList />, scratch);
+
+ // Simulate user typing
+ input.focus();
+ input.value = todoText;
+ setText({
+ target: input
+ });
+
+ // Commit the user typing setState call
+ rerender();
+
+ // Simulate user pressing enter
+ addTodo({
+ keyCode: ENTER
+ });
+
+ // Before Preact rerenders, focus should be on the input
+ expect(document.activeElement).to.equalNode(input);
+
+ rerender();
+
+ // After Preact rerenders, focus should remain on the input
+ expect(document.activeElement).to.equalNode(input);
+ expect(scratch.innerHTML).to.contain(`<span>${todoText}</span>`);
+ });
+
+ it('should keep value of uncontrolled inputs', () => {
+ render(<input value={undefined} />, scratch);
+ scratch.firstChild.value = 'foo';
+ render(<input value={undefined} />, scratch);
+ expect(scratch.firstChild.value).to.equal('foo');
+ });
+
+ it('should keep value of uncontrolled checkboxes', () => {
+ render(<input type="checkbox" checked={undefined} />, scratch);
+ scratch.firstChild.checked = true;
+ render(<input type="checkbox" checked={undefined} />, scratch);
+ expect(scratch.firstChild.checked).to.equal(true);
+ });
+
+ // #2756
+ it('should set progress value to 0', () => {
+ render(<progress value={0} max="100" />, scratch);
+ expect(scratch.firstChild.value).to.equal(0);
+ expect(scratch.firstChild.getAttribute('value')).to.equal('0');
+ });
+
+ it('should always diff `checked` and `value` properties against the DOM', () => {
+ // See https://github.com/preactjs/preact/issues/1324
+
+ let inputs;
+ let text;
+ let checkbox;
+
+ class Inputs extends Component {
+ render() {
+ return (
+ <div>
+ <input value={'Hello'} ref={el => (text = el)} />
+ <input type="checkbox" checked ref={el => (checkbox = el)} />
+ </div>
+ );
+ }
+ }
+
+ render(<Inputs ref={x => (inputs = x)} />, scratch);
+
+ expect(text.value).to.equal('Hello');
+ expect(checkbox.checked).to.equal(true);
+
+ text.value = 'World';
+ checkbox.checked = false;
+
+ inputs.forceUpdate();
+ rerender();
+
+ expect(text.value).to.equal('Hello');
+ expect(checkbox.checked).to.equal(true);
+ });
+
+ it('should always diff `contenteditable` `innerHTML` against the DOM', () => {
+ // This tests that we do not cause any cursor jumps in contenteditable fields
+ // See https://github.com/preactjs/preact/issues/2691
+
+ function Editable() {
+ const [value, setValue] = useState('Hello');
+
+ return (
+ <div
+ contentEditable
+ dangerouslySetInnerHTML={{ __html: value }}
+ onInput={e => setValue(e.currentTarget.innerHTML)}
+ />
+ );
+ }
+
+ render(<Editable />, scratch);
+
+ let editable = scratch.querySelector('[contenteditable]');
+
+ // modify the innerHTML and set the caret to character 2 to simulate a user typing
+ editable.innerHTML = 'World';
+
+ const range = document.createRange();
+ range.selectNodeContents(editable);
+ range.setStart(editable.childNodes[0], 2);
+ range.collapse(true);
+ const sel = window.getSelection();
+ sel.removeAllRanges();
+ sel.addRange(range);
+
+ // ensure we didn't mess up setting the cursor to position 2
+ expect(window.getSelection().getRangeAt(0).startOffset).to.equal(2);
+
+ // dispatch the input event to tell preact to re-render
+ editable.dispatchEvent(createEvent('input'));
+ rerender();
+
+ // ensure innerHTML is still correct (was not an issue before) and
+ // more importantly the caret is still at character 2
+ editable = scratch.querySelector('[contenteditable]');
+ expect(editable.innerHTML).to.equal('World');
+ expect(window.getSelection().getRangeAt(0).startOffset).to.equal(2);
+ });
+
+ it('should not re-render when a component returns undefined', () => {
+ let Dialog = () => undefined;
+ let updateState;
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { name: '' };
+ updateState = () => this.setState({ name: ', friend' });
+ }
+
+ render(props, { name }) {
+ return (
+ <div>
+ <Dialog />
+ <h1 class="fade-down">Hi{name}</h1>
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ clearLog();
+
+ updateState();
+ rerender();
+
+ // We don't log text updates
+ expect(getLog()).to.deep.equal([]);
+ });
+
+ it('should not lead to stale DOM nodes', () => {
+ let i = 0;
+ let updateApp;
+ class App extends Component {
+ render() {
+ updateApp = () => this.forceUpdate();
+ return <Parent />;
+ }
+ }
+
+ let updateParent;
+ function Parent() {
+ updateParent = () => this.forceUpdate();
+ i++;
+ return <Child i={i} />;
+ }
+
+ function Child({ i }) {
+ return i < 3 ? null : <div>foo</div>;
+ }
+
+ render(<App />, scratch);
+
+ updateApp();
+ rerender();
+ updateParent();
+ rerender();
+ updateApp();
+ rerender();
+
+ // Without a fix it would render: `<div>foo</div><div></div>`
+ expect(scratch.innerHTML).to.equal('<div>foo</div>');
+ });
+
+ // see preact/#1327
+ it('should not reuse unkeyed components', () => {
+ class X extends Component {
+ constructor() {
+ super();
+ this.state = { i: 0 };
+ }
+
+ update() {
+ this.setState(prev => ({ i: prev.i + 1 }));
+ }
+
+ componentWillUnmount() {
+ clearTimeout(this.id);
+ }
+
+ render() {
+ return <div>{this.state.i}</div>;
+ }
+ }
+
+ let ref;
+ let updateApp;
+ class App extends Component {
+ constructor() {
+ super();
+ this.state = { i: 0 };
+ updateApp = () => this.setState(prev => ({ i: prev.i ^ 1 }));
+ }
+
+ render() {
+ return (
+ <div>
+ {this.state.i === 0 && <X />}
+ <X ref={node => (ref = node)} />
+ </div>
+ );
+ }
+ }
+
+ render(<App />, scratch);
+ expect(scratch.textContent).to.equal('00');
+
+ ref.update();
+ updateApp();
+ rerender();
+ expect(scratch.textContent).to.equal('1');
+
+ updateApp();
+ rerender();
+
+ expect(scratch.textContent).to.equal('01');
+ });
+
+ it('should not cause infinite loop with referentially equal props', () => {
+ let i = 0;
+ let prevDiff = options._diff;
+ options._diff = () => {
+ if (++i > 10) {
+ options._diff = prevDiff;
+ throw new Error('Infinite loop');
+ }
+ };
+
+ function App({ children, ...rest }) {
+ return (
+ <div {...rest}>
+ <div {...rest}>{children}</div>
+ </div>
+ );
+ }
+
+ render(<App>10</App>, scratch);
+ expect(scratch.textContent).to.equal('10');
+ options._diff = prevDiff;
+ });
+
+ it('should not call options.debounceRendering unnecessarily', () => {
+ let comp;
+
+ class A extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { updates: 0 };
+ comp = this;
+ }
+
+ render() {
+ return <div>{this.state.updates}</div>;
+ }
+ }
+
+ render(<A />, scratch);
+ expect(scratch.innerHTML).to.equal('<div>0</div>');
+
+ const sandbox = sinon.createSandbox();
+ try {
+ sandbox.spy(options, 'debounceRendering');
+
+ comp.setState({ updates: 1 }, () => {
+ comp.setState({ updates: 2 });
+ });
+ rerender();
+ expect(scratch.innerHTML).to.equal('<div>2</div>');
+
+ expect(options.debounceRendering).to.have.been.calledOnce;
+ } finally {
+ sandbox.restore();
+ }
+ });
+
+ it('should remove attributes on pre-existing DOM', () => {
+ const div = document.createElement('div');
+ div.setAttribute('class', 'red');
+ const span = document.createElement('span');
+ const text = document.createTextNode('Hi');
+
+ span.appendChild(text);
+ div.appendChild(span);
+ scratch.appendChild(div);
+
+ const App = () => (
+ <div>
+ <span>Bye</span>
+ </div>
+ );
+
+ render(<App />, scratch);
+ expect(serializeHtml(scratch)).to.equal('<div><span>Bye</span></div>');
+ });
+
+ it('should remove class attributes', () => {
+ const App = props => (
+ <div className={props.class}>
+ <span>Bye</span>
+ </div>
+ );
+
+ render(<App class="hi" />, scratch);
+ expect(scratch.innerHTML).to.equal(
+ '<div class="hi"><span>Bye</span></div>'
+ );
+
+ render(<App />, scratch);
+ expect(serializeHtml(scratch)).to.equal('<div><span>Bye</span></div>');
+ });
+
+ it('should not read DOM attributes on render without existing DOM', () => {
+ const attributesSpy = spyOnElementAttributes();
+ render(
+ <div id="wrapper">
+ <div id="page1">Page 1</div>
+ </div>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal(
+ '<div id="wrapper"><div id="page1">Page 1</div></div>'
+ );
+
+ // IE11 doesn't allow modifying Element.prototype functions properly.
+ // Custom spies will never be called.
+ if (!isIE11) {
+ expect(attributesSpy.get).to.not.have.been.called;
+ }
+
+ render(
+ <div id="wrapper">
+ <div id="page2">Page 2</div>
+ </div>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal(
+ '<div id="wrapper"><div id="page2">Page 2</div></div>'
+ );
+
+ // IE11 doesn't allow modifying Element.prototype functions properly.
+ // Custom spies will never be called.
+ if (!isIE11) {
+ expect(attributesSpy.get).to.not.have.been.called;
+ }
+ });
+
+ // #2926
+ it('should not throw when changing contentEditable to undefined or null', () => {
+ render(<p contentEditable>foo</p>, scratch);
+
+ expect(() =>
+ render(<p contentEditable={undefined}>foo</p>, scratch)
+ ).to.not.throw();
+ expect(scratch.firstChild.contentEditable).to.equal('inherit');
+
+ expect(() =>
+ render(<p contentEditable={null}>foo</p>, scratch)
+ ).to.not.throw();
+ expect(scratch.firstChild.contentEditable).to.equal('inherit');
+ });
+
+ // #2926 Part 2
+ it('should allow setting contentEditable to false', () => {
+ render(
+ <div contentEditable>
+ <span>editable</span>
+ <p contentEditable={false}>not editable</p>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.firstChild.contentEditable).to.equal('true');
+ expect(scratch.querySelector('p').contentEditable).to.equal('false');
+ });
+
+ // #3060
+ it('should reset tabindex on undefined/null', () => {
+ const defaultValue = isIE11 ? 0 : -1;
+
+ render(<div tabIndex={0} />, scratch);
+ expect(scratch.firstChild.tabIndex).to.equal(0);
+ render(<div tabIndex={undefined} />, scratch);
+ expect(scratch.firstChild.tabIndex).to.equal(defaultValue);
+ render(<div tabIndex={null} />, scratch);
+ expect(scratch.firstChild.tabIndex).to.equal(defaultValue);
+
+ render(<div tabindex={0} />, scratch);
+ expect(scratch.firstChild.tabIndex).to.equal(0);
+ render(<div tabindex={undefined} />, scratch);
+ expect(scratch.firstChild.tabIndex).to.equal(defaultValue);
+ render(<div tabindex={null} />, scratch);
+ expect(scratch.firstChild.tabIndex).to.equal(defaultValue);
+ });
+});
diff --git a/preact/test/browser/replaceNode.test.js b/preact/test/browser/replaceNode.test.js
new file mode 100644
index 0000000..63cdd2d
--- /dev/null
+++ b/preact/test/browser/replaceNode.test.js
@@ -0,0 +1,239 @@
+import { createElement, render, Component } from 'preact';
+import {
+ setupScratch,
+ teardown,
+ serializeHtml,
+ sortAttributes
+} from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('replaceNode parameter in render()', () => {
+ let scratch;
+
+ /**
+ * @param {HTMLDivElement} container
+ * @returns {HTMLDivElement[]}
+ */
+ function setupABCDom(container) {
+ return ['a', 'b', 'c'].map(id => {
+ const child = document.createElement('div');
+ child.id = id;
+ container.appendChild(child);
+
+ return child;
+ });
+ }
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should use replaceNode as render root and not inject into it', () => {
+ setupABCDom(scratch);
+ const childA = scratch.querySelector('#a');
+
+ render(<div id="a">contents</div>, scratch, childA);
+ expect(scratch.querySelector('#a')).to.equalNode(childA);
+ expect(childA.innerHTML).to.equal('contents');
+ });
+
+ it('should not remove siblings of replaceNode', () => {
+ setupABCDom(scratch);
+ const childA = scratch.querySelector('#a');
+
+ render(<div id="a" />, scratch, childA);
+ expect(scratch.innerHTML).to.equal(
+ '<div id="a"></div><div id="b"></div><div id="c"></div>'
+ );
+ });
+
+ it('should notice prop changes on replaceNode', () => {
+ setupABCDom(scratch);
+ const childA = scratch.querySelector('#a');
+
+ render(<div id="a" className="b" />, scratch, childA);
+ expect(sortAttributes(String(scratch.innerHTML))).to.equal(
+ sortAttributes(
+ '<div id="a" class="b"></div><div id="b"></div><div id="c"></div>'
+ )
+ );
+ });
+
+ it('should unmount existing components', () => {
+ const unmount = sinon.spy();
+ const mount = sinon.spy();
+ class App extends Component {
+ componentDidMount() {
+ mount();
+ }
+
+ componentWillUnmount() {
+ unmount();
+ }
+
+ render() {
+ return <div>App</div>;
+ }
+ }
+
+ render(
+ <div id="a">
+ <App />
+ </div>,
+ scratch
+ );
+ expect(scratch.innerHTML).to.equal('<div id="a"><div>App</div></div>');
+ expect(mount).to.be.calledOnce;
+
+ render(<div id="a">new</div>, scratch, scratch.querySelector('#a'));
+ expect(scratch.innerHTML).to.equal('<div id="a">new</div>');
+ expect(unmount).to.be.calledOnce;
+ });
+
+ it('should unmount existing components in prerendered HTML', () => {
+ const unmount = sinon.spy();
+ const mount = sinon.spy();
+ class App extends Component {
+ componentDidMount() {
+ mount();
+ }
+
+ componentWillUnmount() {
+ unmount();
+ }
+
+ render() {
+ return <span>App</span>;
+ }
+ }
+
+ scratch.innerHTML = `<div id="child"></div>`;
+
+ const childContainer = scratch.querySelector('#child');
+
+ render(<App />, childContainer);
+ expect(serializeHtml(childContainer)).to.equal('<span>App</span>');
+ expect(mount).to.be.calledOnce;
+
+ render(<div />, scratch, scratch.firstElementChild);
+ expect(serializeHtml(scratch)).to.equal('<div id=""></div>');
+ expect(unmount).to.be.calledOnce;
+ });
+
+ it('should render multiple render roots in one parentDom', () => {
+ setupABCDom(scratch);
+ const childA = scratch.querySelector('#a');
+ const childB = scratch.querySelector('#b');
+ const childC = scratch.querySelector('#c');
+
+ const expectedA = '<div id="a">childA</div>';
+ const expectedB = '<div id="b">childB</div>';
+ const expectedC = '<div id="c">childC</div>';
+
+ render(<div id="a">childA</div>, scratch, childA);
+ render(<div id="b">childB</div>, scratch, childB);
+ render(<div id="c">childC</div>, scratch, childC);
+
+ expect(scratch.innerHTML).to.equal(`${expectedA}${expectedB}${expectedC}`);
+ });
+
+ it('should call unmount when working with replaceNode', () => {
+ const mountSpy = sinon.spy();
+ const unmountSpy = sinon.spy();
+ class MyComponent extends Component {
+ componentDidMount() {
+ mountSpy();
+ }
+ componentWillUnmount() {
+ unmountSpy();
+ }
+ render() {
+ return <div>My Component</div>;
+ }
+ }
+
+ const container = document.createElement('div');
+ scratch.appendChild(container);
+
+ render(<MyComponent />, scratch, container);
+ expect(mountSpy).to.be.calledOnce;
+
+ render(<div>Not my component</div>, document.body, container);
+ expect(unmountSpy).to.be.calledOnce;
+ });
+
+ it('should double replace', () => {
+ const container = document.createElement('div');
+ scratch.appendChild(container);
+
+ render(<div>Hello</div>, scratch, scratch.firstElementChild);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+
+ render(<div>Hello</div>, scratch, scratch.firstElementChild);
+ expect(scratch.innerHTML).to.equal('<div>Hello</div>');
+ });
+
+ it('should replaceNode after rendering', () => {
+ function App({ i }) {
+ return <p>{i}</p>;
+ }
+
+ render(<App i={2} />, scratch);
+ expect(scratch.innerHTML).to.equal('<p>2</p>');
+
+ render(<App i={3} />, scratch, scratch.firstChild);
+ expect(scratch.innerHTML).to.equal('<p>3</p>');
+ });
+
+ it("shouldn't remove elements on subsequent renders with replaceNode", () => {
+ const placeholder = document.createElement('div');
+ scratch.appendChild(placeholder);
+ const App = () => (
+ <div>
+ New content
+ <button>Update</button>
+ </div>
+ );
+
+ render(<App />, scratch, placeholder);
+ expect(scratch.innerHTML).to.equal(
+ '<div>New content<button>Update</button></div>'
+ );
+
+ render(<App />, scratch, placeholder);
+ expect(scratch.innerHTML).to.equal(
+ '<div>New content<button>Update</button></div>'
+ );
+ });
+
+ it('should remove redundant elements on subsequent renders with replaceNode', () => {
+ const placeholder = document.createElement('div');
+ scratch.appendChild(placeholder);
+ const App = () => (
+ <div>
+ New content
+ <button>Update</button>
+ </div>
+ );
+
+ render(<App />, scratch, placeholder);
+ expect(scratch.innerHTML).to.equal(
+ '<div>New content<button>Update</button></div>'
+ );
+
+ placeholder.appendChild(document.createElement('span'));
+ expect(scratch.innerHTML).to.equal(
+ '<div>New content<button>Update</button><span></span></div>'
+ );
+
+ render(<App />, scratch, placeholder);
+ expect(scratch.innerHTML).to.equal(
+ '<div>New content<button>Update</button></div>'
+ );
+ });
+});
diff --git a/preact/test/browser/select.test.js b/preact/test/browser/select.test.js
new file mode 100644
index 0000000..74b08ce
--- /dev/null
+++ b/preact/test/browser/select.test.js
@@ -0,0 +1,72 @@
+import { createElement, render } from 'preact';
+import { setupScratch, teardown } from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Select', () => {
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should set <select> value', () => {
+ function App() {
+ return (
+ <select value="B">
+ <option value="A">A</option>
+ <option value="B">B</option>
+ <option value="C">C</option>
+ </select>
+ );
+ }
+
+ render(<App />, scratch);
+ expect(scratch.firstChild.value).to.equal('B');
+ });
+
+ it('should set value with selected', () => {
+ function App() {
+ return (
+ <select>
+ <option value="A">A</option>
+ <option selected value="B">
+ B
+ </option>
+ <option value="C">C</option>
+ </select>
+ );
+ }
+
+ render(<App />, scratch);
+ expect(scratch.firstChild.value).to.equal('B');
+ });
+
+ it('should work with multiple selected', () => {
+ function App() {
+ return (
+ <select multiple>
+ <option value="A">A</option>
+ <option selected value="B">
+ B
+ </option>
+ <option selected value="C">
+ C
+ </option>
+ </select>
+ );
+ }
+
+ render(<App />, scratch);
+ Array.prototype.slice.call(scratch.firstChild.childNodes).forEach(node => {
+ if (node.value === 'B' || node.value === 'C') {
+ expect(node.selected).to.equal(true);
+ }
+ });
+ expect(scratch.firstChild.value).to.equal('B');
+ });
+});
diff --git a/preact/test/browser/spec.test.js b/preact/test/browser/spec.test.js
new file mode 100644
index 0000000..ee5f388
--- /dev/null
+++ b/preact/test/browser/spec.test.js
@@ -0,0 +1,151 @@
+import { setupRerender } from 'preact/test-utils';
+import { createElement, render, Component } from 'preact';
+import { setupScratch, teardown } from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('Component spec', () => {
+ let scratch, rerender;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ rerender = setupRerender();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ describe('defaultProps', () => {
+ it('should apply default props on initial render', () => {
+ class WithDefaultProps extends Component {
+ constructor(props, context) {
+ super(props, context);
+ expect(props).to.be.deep.equal({
+ fieldA: 1,
+ fieldB: 2,
+ fieldC: 1,
+ fieldD: 2
+ });
+ }
+ render() {
+ return <div />;
+ }
+ }
+ WithDefaultProps.defaultProps = { fieldC: 1, fieldD: 1 };
+ render(<WithDefaultProps fieldA={1} fieldB={2} fieldD={2} />, scratch);
+ });
+
+ it('should apply default props on rerender', () => {
+ let doRender;
+ class Outer extends Component {
+ constructor() {
+ super();
+ this.state = { i: 1 };
+ }
+ componentDidMount() {
+ doRender = () => this.setState({ i: 2 });
+ }
+ render(props, { i }) {
+ return <WithDefaultProps fieldA={1} fieldB={i} fieldD={i} />;
+ }
+ }
+ class WithDefaultProps extends Component {
+ constructor(props, context) {
+ super(props, context);
+ this.ctor(props, context);
+ }
+ ctor() {}
+ componentWillReceiveProps() {}
+ render() {
+ return <div />;
+ }
+ }
+ WithDefaultProps.defaultProps = { fieldC: 1, fieldD: 1 };
+
+ let proto = WithDefaultProps.prototype;
+ sinon.spy(proto, 'ctor');
+ sinon.spy(proto, 'componentWillReceiveProps');
+ sinon.spy(proto, 'render');
+
+ render(<Outer />, scratch);
+ doRender();
+
+ const PROPS1 = {
+ fieldA: 1,
+ fieldB: 1,
+ fieldC: 1,
+ fieldD: 1
+ };
+
+ const PROPS2 = {
+ fieldA: 1,
+ fieldB: 2,
+ fieldC: 1,
+ fieldD: 2
+ };
+
+ expect(proto.ctor).to.have.been.calledWithMatch(PROPS1);
+ expect(proto.render).to.have.been.calledWithMatch(PROPS1);
+
+ rerender();
+
+ // expect(proto.ctor).to.have.been.calledWith(PROPS2);
+ expect(proto.componentWillReceiveProps).to.have.been.calledWithMatch(
+ PROPS2
+ );
+ expect(proto.render).to.have.been.calledWithMatch(PROPS2);
+ });
+ });
+
+ describe('forceUpdate', () => {
+ it('should force a rerender', () => {
+ let forceUpdate;
+ class ForceUpdateComponent extends Component {
+ componentWillUpdate() {}
+ componentDidMount() {
+ forceUpdate = () => this.forceUpdate();
+ }
+ render() {
+ return <div />;
+ }
+ }
+ sinon.spy(ForceUpdateComponent.prototype, 'componentWillUpdate');
+ sinon.spy(ForceUpdateComponent.prototype, 'forceUpdate');
+ render(<ForceUpdateComponent />, scratch);
+ expect(ForceUpdateComponent.prototype.componentWillUpdate).not.to.have
+ .been.called;
+
+ forceUpdate();
+ rerender();
+
+ expect(ForceUpdateComponent.prototype.componentWillUpdate).to.have.been
+ .called;
+ expect(ForceUpdateComponent.prototype.forceUpdate).to.have.been.called;
+ });
+
+ it('should add callback to renderCallbacks', () => {
+ let forceUpdate;
+ let callback = sinon.spy();
+ class ForceUpdateComponent extends Component {
+ componentDidMount() {
+ forceUpdate = () => this.forceUpdate(callback);
+ }
+ render() {
+ return <div />;
+ }
+ }
+ sinon.spy(ForceUpdateComponent.prototype, 'forceUpdate');
+ render(<ForceUpdateComponent />, scratch);
+
+ forceUpdate();
+ rerender();
+
+ expect(ForceUpdateComponent.prototype.forceUpdate).to.have.been.called;
+ expect(
+ ForceUpdateComponent.prototype.forceUpdate
+ ).to.have.been.calledWith(callback);
+ expect(callback).to.have.been.called;
+ });
+ });
+});
diff --git a/preact/test/browser/style.test.js b/preact/test/browser/style.test.js
new file mode 100644
index 0000000..a2b6afc
--- /dev/null
+++ b/preact/test/browser/style.test.js
@@ -0,0 +1,225 @@
+import { createElement, render } from 'preact';
+import { setupScratch, teardown, sortCss } from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('style attribute', () => {
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should apply style as String', () => {
+ render(<div style="top: 5px; position: relative;" />, scratch);
+ expect(scratch.childNodes[0].style.cssText).to.equal(
+ 'top: 5px; position: relative;'
+ );
+ });
+
+ it('should not call CSSStyleDeclaration.setProperty for style strings', () => {
+ render(<div style="top: 5px; position: relative;" />, scratch);
+ sinon.stub(scratch.firstChild.style, 'setProperty');
+ render(<div style="top: 10px; position: absolute;" />, scratch);
+ expect(scratch.firstChild.style.setProperty).to.not.be.called;
+ });
+
+ it('should properly switch from string styles to object styles and back', () => {
+ render(<div style="display: inline;">test</div>, scratch);
+
+ let style = scratch.firstChild.style;
+ expect(style.cssText).to.equal('display: inline;');
+
+ render(<div style={{ color: 'red' }} />, scratch);
+ expect(style.cssText).to.equal('color: red;');
+
+ render(<div style="color: blue" />, scratch);
+ expect(style.cssText).to.equal('color: blue;');
+
+ render(<div style={{ color: 'yellow' }} />, scratch);
+ expect(style.cssText).to.equal('color: yellow;');
+
+ render(<div style="display: block" />, scratch);
+ expect(style.cssText).to.equal('display: block;');
+ });
+
+ it('should serialize style objects', () => {
+ const styleObj = {
+ color: 'rgb(255, 255, 255)',
+ background: 'rgb(255, 100, 0)',
+ backgroundPosition: '10px 10px',
+ 'background-size': 'cover',
+ gridRowStart: 1,
+ padding: 5,
+ top: 100,
+ left: '100%'
+ };
+
+ render(<div style={styleObj}>test</div>, scratch);
+
+ let style = scratch.firstChild.style;
+ expect(style.color).to.equal('rgb(255, 255, 255)');
+ expect(style.background).to.contain('rgb(255, 100, 0)');
+ expect(style.backgroundPosition).to.equal('10px 10px');
+ expect(style.backgroundSize).to.equal('cover');
+ expect(style.padding).to.equal('5px');
+ expect(style.top).to.equal('100px');
+ expect(style.left).to.equal('100%');
+
+ // Only check for this in browsers that support css grids
+ if (typeof scratch.style.grid == 'string') {
+ expect(style.gridRowStart).to.equal('1');
+ }
+ });
+
+ it('should support opacity 0', () => {
+ render(<div style={{ opacity: 1 }}>Test</div>, scratch);
+ let style = scratch.firstChild.style;
+ expect(style)
+ .to.have.property('opacity')
+ .that.equals('1');
+
+ render(<div style={{ opacity: 0 }}>Test</div>, scratch);
+ style = scratch.firstChild.style;
+ expect(style)
+ .to.have.property('opacity')
+ .that.equals('0');
+ });
+
+ it('should support animation-iteration-count as number', () => {
+ render(<div style={{ animationIterationCount: 1 }}>Test</div>, scratch);
+ let style = scratch.firstChild.style;
+ expect(style)
+ .to.have.property('animationIterationCount')
+ .that.equals('1');
+
+ render(<div style={{ animationIterationCount: 2.5 }}>Test</div>, scratch);
+ style = scratch.firstChild.style;
+ expect(style)
+ .to.have.property('animationIterationCount')
+ .that.equals('2.5');
+ });
+
+ it('should replace previous style objects', () => {
+ render(<div style={{ display: 'inline' }}>test</div>, scratch);
+
+ let style = scratch.firstChild.style;
+ expect(style.cssText).to.equal('display: inline;');
+ expect(style)
+ .to.have.property('display')
+ .that.equals('inline');
+ expect(style)
+ .to.have.property('color')
+ .that.equals('');
+ expect(style.zIndex.toString()).to.equal('');
+
+ render(
+ <div style={{ color: 'rgb(0, 255, 255)', zIndex: '3' }}>test</div>,
+ scratch
+ );
+
+ style = scratch.firstChild.style;
+ expect(style.cssText).to.equal('color: rgb(0, 255, 255); z-index: 3;');
+ expect(style)
+ .to.have.property('display')
+ .that.equals('');
+ expect(style)
+ .to.have.property('color')
+ .that.equals('rgb(0, 255, 255)');
+
+ // IE stores numeric z-index values as a number
+ expect(style.zIndex.toString()).to.equal('3');
+
+ render(
+ <div style={{ color: 'rgb(0, 255, 255)', display: 'inline' }}>test</div>,
+ scratch
+ );
+
+ style = scratch.firstChild.style;
+ expect(style.cssText).to.equal('color: rgb(0, 255, 255); display: inline;');
+ expect(style)
+ .to.have.property('display')
+ .that.equals('inline');
+ expect(style)
+ .to.have.property('color')
+ .that.equals('rgb(0, 255, 255)');
+ expect(style.zIndex.toString()).to.equal('');
+ });
+
+ it('should remove old styles', () => {
+ render(<div style={{ color: 'red' }} />, scratch);
+ render(<div style={{ backgroundColor: 'blue' }} />, scratch);
+ expect(scratch.firstChild.style.color).to.equal('');
+ expect(scratch.firstChild.style.backgroundColor).to.equal('blue');
+ });
+
+ // Issue #1850
+ it('should remove empty styles', () => {
+ render(<div style={{ visibility: 'hidden' }} />, scratch);
+ expect(scratch.firstChild.style.visibility).to.equal('hidden');
+ render(<div style={{ visibility: undefined }} />, scratch);
+ expect(scratch.firstChild.style.visibility).to.equal('');
+ });
+
+ // Skip test if the currently running browser doesn't support CSS Custom Properties
+ if (window.CSS && CSS.supports('color', 'var(--fake-var)')) {
+ it('should support css custom properties', () => {
+ render(
+ <div style={{ '--foo': 'red', color: 'var(--foo)' }}>test</div>,
+ scratch
+ );
+ expect(sortCss(scratch.firstChild.style.cssText)).to.equal(
+ '--foo: red; color: var(--foo);'
+ );
+ expect(window.getComputedStyle(scratch.firstChild).color).to.equal(
+ 'rgb(255, 0, 0)'
+ );
+ });
+
+ it('should not add "px" suffix for custom properties', () => {
+ render(
+ <div style={{ '--foo': '100px', width: 'var(--foo)' }}>test</div>,
+ scratch
+ );
+ expect(sortCss(scratch.firstChild.style.cssText)).to.equal(
+ '--foo: 100px; width: var(--foo);'
+ );
+ });
+
+ it('css vars should not be transformed into dash-separated', () => {
+ render(
+ <div
+ style={{
+ '--fooBar': 1,
+ '--foo-baz': 2,
+ opacity: 'var(--fooBar)',
+ zIndex: 'var(--foo-baz)'
+ }}
+ >
+ test
+ </div>,
+ scratch
+ );
+ expect(sortCss(scratch.firstChild.style.cssText)).to.equal(
+ '--foo-baz: 2; --fooBar: 1; opacity: var(--fooBar); z-index: var(--foo-baz);'
+ );
+ });
+
+ it('should call CSSStyleDeclaration.setProperty for css vars', () => {
+ render(<div style={{ padding: '10px' }} />, scratch);
+ sinon.stub(scratch.firstChild.style, 'setProperty');
+ render(
+ <div style={{ '--foo': '10px', padding: 'var(--foo)' }} />,
+ scratch
+ );
+ expect(scratch.firstChild.style.setProperty).to.be.calledWith(
+ '--foo',
+ '10px'
+ );
+ });
+ }
+});
diff --git a/preact/test/browser/svg.test.js b/preact/test/browser/svg.test.js
new file mode 100644
index 0000000..ef2e796
--- /dev/null
+++ b/preact/test/browser/svg.test.js
@@ -0,0 +1,226 @@
+import { createElement, render } from 'preact';
+import { setupScratch, teardown, sortAttributes } from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('svg', () => {
+ let scratch;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('should render SVG to string', () => {
+ render(
+ <svg viewBox="0 0 360 360">
+ <path
+ stroke="white"
+ fill="black"
+ d="M 347.1 357.9 L 183.3 256.5 L 13 357.9 V 1.7 h 334.1 v 356.2 Z M 58.5 47.2 v 231.4 l 124.8 -74.1 l 118.3 72.8 V 47.2 H 58.5 Z"
+ />
+ </svg>,
+ scratch
+ );
+
+ let html = sortAttributes(
+ String(scratch.innerHTML).replace(
+ ' xmlns="http://www.w3.org/2000/svg"',
+ ''
+ )
+ );
+ expect(html).to.equal(
+ sortAttributes(
+ `
+ <svg viewBox="0 0 360 360">
+ <path d="M 347.1 357.9 L 183.3 256.5 L 13 357.9 V 1.7 h 334.1 v 356.2 Z M 58.5 47.2 v 231.4 l 124.8 -74.1 l 118.3 72.8 V 47.2 H 58.5 Z" fill="black" stroke="white"></path>
+ </svg>
+ `.replace(/[\n\t]+/g, '')
+ )
+ );
+ });
+
+ it('should support svg attributes', () => {
+ const Demo = ({ url }) => (
+ <svg viewBox="0 0 360 360" xlinkHref={url}>
+ <path
+ d="M 347.1 357.9 L 183.3 256.5 L 13 357.9 V 1.7 h 334.1 v 356.2 Z M 58.5 47.2 v 231.4 l 124.8 -74.1 l 118.3 72.8 V 47.2 H 58.5 Z"
+ fill="black"
+ stroke="white"
+ />
+ </svg>
+ );
+ render(<Demo url="www.preact.com" />, scratch);
+
+ let html = String(scratch.innerHTML).replace(
+ ' xmlns="http://www.w3.org/2000/svg"',
+ ''
+ );
+ html = sortAttributes(
+ html.replace(' xmlns:xlink="http://www.w3.org/1999/xlink"', '')
+ );
+ expect(html).to.equal(
+ sortAttributes(
+ `
+ <svg viewBox="0 0 360 360" href="www.preact.com">
+ <path d="M 347.1 357.9 L 183.3 256.5 L 13 357.9 V 1.7 h 334.1 v 356.2 Z M 58.5 47.2 v 231.4 l 124.8 -74.1 l 118.3 72.8 V 47.2 H 58.5 Z" fill="black" stroke="white"></path>
+ </svg>
+ `.replace(/[\n\t]+/g, '')
+ )
+ );
+ render(<Demo />, scratch);
+
+ html = String(scratch.innerHTML).replace(
+ ' xmlns="http://www.w3.org/2000/svg"',
+ ''
+ );
+ html = sortAttributes(
+ html.replace(' xmlns:xlink="http://www.w3.org/1999/xlink"', '')
+ );
+ expect(html).to.equal(
+ sortAttributes(
+ `
+ <svg viewBox="0 0 360 360">
+ <path d="M 347.1 357.9 L 183.3 256.5 L 13 357.9 V 1.7 h 334.1 v 356.2 Z M 58.5 47.2 v 231.4 l 124.8 -74.1 l 118.3 72.8 V 47.2 H 58.5 Z" fill="black" stroke="white"></path>
+ </svg>
+ `.replace(/[\n\t]+/g, '')
+ )
+ );
+ });
+
+ it('should render SVG to DOM', () => {
+ const Demo = () => (
+ <svg viewBox="0 0 360 360">
+ <path
+ d="M 347.1 357.9 L 183.3 256.5 L 13 357.9 V 1.7 h 334.1 v 356.2 Z M 58.5 47.2 v 231.4 l 124.8 -74.1 l 118.3 72.8 V 47.2 H 58.5 Z"
+ fill="black"
+ stroke="white"
+ />
+ </svg>
+ );
+ render(<Demo />, scratch);
+
+ let html = sortAttributes(
+ String(scratch.innerHTML).replace(
+ ' xmlns="http://www.w3.org/2000/svg"',
+ ''
+ )
+ );
+ expect(html).to.equal(
+ sortAttributes(
+ '<svg viewBox="0 0 360 360"><path stroke="white" fill="black" d="M 347.1 357.9 L 183.3 256.5 L 13 357.9 V 1.7 h 334.1 v 356.2 Z M 58.5 47.2 v 231.4 l 124.8 -74.1 l 118.3 72.8 V 47.2 H 58.5 Z"></path></svg>'
+ )
+ );
+ });
+
+ it('should render with the correct namespace URI', () => {
+ render(<svg />, scratch);
+
+ let namespace = scratch.querySelector('svg').namespaceURI;
+
+ expect(namespace).to.equal('http://www.w3.org/2000/svg');
+ });
+
+ it('should use attributes for className', () => {
+ const Demo = ({ c }) => (
+ <svg viewBox="0 0 360 360" {...(c ? { class: 'foo_' + c } : {})}>
+ <path
+ class={c && 'bar_' + c}
+ stroke="white"
+ fill="black"
+ d="M347.1 357.9L183.3 256.5 13 357.9V1.7h334.1v356.2zM58.5 47.2v231.4l124.8-74.1 118.3 72.8V47.2H58.5z"
+ />
+ </svg>
+ );
+ render(<Demo c="1" />, scratch);
+ let root = scratch.firstChild;
+ sinon.spy(root, 'removeAttribute');
+ render(<Demo />, scratch);
+ expect(root.removeAttribute).to.have.been.calledOnce.and.calledWith(
+ 'class'
+ );
+
+ root.removeAttribute.restore();
+
+ render(<div />, scratch);
+ render(<Demo />, scratch);
+ root = scratch.firstChild;
+ sinon.spy(root, 'setAttribute');
+ render(<Demo c="2" />, scratch);
+ expect(root.setAttribute).to.have.been.calledOnce.and.calledWith(
+ 'class',
+ 'foo_2'
+ );
+
+ root.setAttribute.restore();
+ });
+
+ it('should still support class attribute', () => {
+ render(<svg viewBox="0 0 1 1" class="foo bar" />, scratch);
+
+ expect(scratch.innerHTML).to.contain(` class="foo bar"`);
+ });
+
+ it('should still support className attribute', () => {
+ render(<svg viewBox="0 0 1 1" className="foo bar" />, scratch);
+
+ expect(scratch.innerHTML).to.contain(` class="foo bar"`);
+ });
+
+ it('should switch back to HTML for <foreignObject>', () => {
+ render(
+ <svg>
+ <g>
+ <foreignObject>
+ <a href="#foo">test</a>
+ </foreignObject>
+ </g>
+ </svg>,
+ scratch
+ );
+
+ expect(scratch.getElementsByTagName('a'))
+ .to.have.property('0')
+ .that.is.a('HTMLAnchorElement');
+ });
+
+ it('should render foreignObject as an svg element', () => {
+ render(
+ <svg>
+ <g>
+ <foreignObject>
+ <a href="#foo">test</a>
+ </foreignObject>
+ </g>
+ </svg>,
+ scratch
+ );
+
+ expect(scratch.querySelector('foreignObject').localName).to.equal(
+ 'foreignObject'
+ );
+ });
+
+ it('should transition from DOM to SVG and back', () => {
+ render(
+ <div>
+ <svg
+ id="svg1923"
+ width="700"
+ xmlns="http://www.w3.org/2000/svg"
+ height="700"
+ >
+ <circle cy="333" cx="333" r="333" />
+ <circle cy="333" cx="333" r="333" fill="#fede58" />
+ </svg>
+ </div>,
+ scratch
+ );
+
+ expect(scratch.firstChild).to.be.an('HTMLDivElement');
+ expect(scratch.firstChild.firstChild).to.be.an('SVGSVGElement');
+ });
+});
diff --git a/preact/test/browser/toChildArray.test.js b/preact/test/browser/toChildArray.test.js
new file mode 100644
index 0000000..d1cb950
--- /dev/null
+++ b/preact/test/browser/toChildArray.test.js
@@ -0,0 +1,207 @@
+import { createElement, render, toChildArray } from 'preact';
+import {
+ setupScratch,
+ teardown,
+ getMixedArray,
+ mixedArrayHTML
+} from '../_util/helpers';
+
+/** @jsx createElement */
+
+describe('toChildArray', () => {
+ /** @type {HTMLDivElement} */
+ let scratch;
+
+ let children;
+
+ let Foo = props => {
+ children = toChildArray(props.children);
+ return <div>{children}</div>;
+ };
+
+ let Bar = () => <span>Bar</span>;
+
+ beforeEach(() => {
+ scratch = setupScratch();
+ children = undefined;
+ });
+
+ afterEach(() => {
+ teardown(scratch);
+ });
+
+ it('returns an empty array with no child', () => {
+ render(<Foo />, scratch);
+
+ expect(children).to.be.an('array');
+ expect(children).to.have.lengthOf(0);
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('returns an empty array with null as a child', () => {
+ render(<Foo>{null}</Foo>, scratch);
+
+ expect(children).to.be.an('array');
+ expect(children).to.have.lengthOf(0);
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('returns an empty array with false as a child', () => {
+ render(<Foo>{false}</Foo>, scratch);
+
+ expect(children).to.be.an('array');
+ expect(children).to.have.lengthOf(0);
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('returns an empty array with true as a child', () => {
+ render(<Foo>{true}</Foo>, scratch);
+
+ expect(children).to.be.an('array');
+ expect(children).to.have.lengthOf(0);
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('should skip a function child', () => {
+ const child = num => num.toFixed(2);
+ render(<Foo>{child}</Foo>, scratch);
+ expect(children).to.be.an('array');
+ expect(scratch.innerHTML).to.equal('<div></div>');
+ });
+
+ it('returns an array containing a VNode with a text child', () => {
+ render(<Foo>text</Foo>, scratch);
+
+ expect(children).to.be.an('array');
+ expect(children).to.have.lengthOf(1);
+ expect(children[0]).to.equal('text');
+ expect(scratch.innerHTML).to.equal('<div>text</div>');
+ });
+
+ it('returns an array containing a VNode with a number child', () => {
+ render(<Foo>{1}</Foo>, scratch);
+
+ expect(children).to.be.an('array');
+ expect(children).to.have.lengthOf(1);
+ expect(children[0]).to.equal(1);
+ expect(scratch.innerHTML).to.equal('<div>1</div>');
+ });
+
+ it('returns an array containing a VNode with a DOM node child', () => {
+ render(
+ <Foo>
+ <span />
+ </Foo>,
+ scratch
+ );
+
+ expect(children).to.be.an('array');
+ expect(children).to.have.lengthOf(1);
+ expect(children[0].type).to.equal('span');
+ expect(scratch.innerHTML).to.equal('<div><span></span></div>');
+ });
+
+ it('returns an array containing a VNode with a Component child', () => {
+ render(
+ <Foo>
+ <Bar />
+ </Foo>,
+ scratch
+ );
+
+ expect(children).to.be.an('array');
+ expect(children).to.have.lengthOf(1);
+ expect(children[0].type).to.equal(Bar);
+ expect(scratch.innerHTML).to.equal('<div><span>Bar</span></div>');
+ });
+
+ it('returns an array with multiple children', () => {
+ render(
+ <Foo>
+ 0<span />
+ <input />
+ <div />1
+ </Foo>,
+ scratch
+ );
+
+ expect(children).to.be.an('array');
+ expect(children[0]).to.equal('0');
+ expect(children[1].type).to.equal('span');
+ expect(children[2].type).to.equal('input');
+ expect(children[3].type).to.equal('div');
+ expect(children[4]).to.equal('1');
+ expect(scratch.innerHTML).to.equal(
+ `<div>0<span></span><input><div></div>1</div>`
+ );
+ });
+
+ it('returns an array with non-renderables removed with a mixed array as children', () => {
+ const mixedArray = getMixedArray();
+ render(<Foo>{mixedArray}</Foo>, scratch);
+
+ expect(children).to.be.an('array');
+ expect(children).to.have.lengthOf(8); // Length of flattened mixedArray with non-renderables removed
+ expect(scratch.innerHTML).to.equal(`<div>${mixedArrayHTML}</div>`);
+
+ function filterAndReduceChildren(acc, child) {
+ if (Array.isArray(child)) {
+ return child.reduce(filterAndReduceChildren, acc);
+ }
+
+ if (
+ child != null &&
+ typeof child != 'boolean' &&
+ typeof child != 'function'
+ ) {
+ acc.push(child);
+ }
+
+ return acc;
+ }
+
+ let renderableArray = filterAndReduceChildren([], mixedArray);
+
+ expect(children).to.have.lengthOf(renderableArray.length);
+
+ for (let i = 0; i < renderableArray.length; i++) {
+ let originalChild = renderableArray[i];
+ let actualChild = children[i];
+
+ if (
+ typeof originalChild == 'string' ||
+ typeof originalChild == 'number'
+ ) {
+ expect(actualChild).to.equal(originalChild);
+ } else {
+ expect(actualChild.type).to.equal(originalChild.type);
+ }
+ }
+ });
+
+ it('flattens sibling and nested arrays', () => {
+ const list1 = [0, 1];
+ const list2 = [2, 3];
+ const list3 = [4, 5];
+ const list4 = [6, 7];
+ const list5 = [8, 9];
+
+ const flatList = [...list1, ...list2, ...list3, ...list4, ...list5];
+
+ render(
+ <Foo>
+ {[list1, list2]}
+ {[list3, list4]}
+ {list5}
+ </Foo>,
+ scratch
+ );
+
+ expect(children).to.be.an('array');
+ expect(scratch.innerHTML).to.equal('<div>0123456789</div>');
+
+ for (let i = 0; i < flatList.length; i++) {
+ expect(children[i]).to.equal(flatList[i]);
+ }
+ });
+});
diff --git a/preact/test/extensions.d.ts b/preact/test/extensions.d.ts
new file mode 100644
index 0000000..c810c3b
--- /dev/null
+++ b/preact/test/extensions.d.ts
@@ -0,0 +1,5 @@
+declare module Chai {
+ export interface Assertion {
+ equalNode(node: Node | null, message?: string): void;
+ }
+}
diff --git a/preact/test/fixtures/preact.js b/preact/test/fixtures/preact.js
new file mode 100644
index 0000000..c76e635
--- /dev/null
+++ b/preact/test/fixtures/preact.js
@@ -0,0 +1,626 @@
+!(function() {
+ 'use strict';
+ function h(nodeName, attributes) {
+ var lastSimple,
+ child,
+ simple,
+ i,
+ children = EMPTY_CHILDREN;
+ for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]);
+ if (attributes && null != attributes.children) {
+ if (!stack.length) stack.push(attributes.children);
+ delete attributes.children;
+ }
+ while (stack.length)
+ if ((child = stack.pop()) && void 0 !== child.pop)
+ for (i = child.length; i--; ) stack.push(child[i]);
+ else {
+ if ('boolean' == typeof child) child = null;
+ if ((simple = 'function' != typeof nodeName))
+ if (null == child) child = '';
+ else if ('number' == typeof child) child = String(child);
+ else if ('string' != typeof child) simple = !1;
+ if (simple && lastSimple) children[children.length - 1] += child;
+ else if (children === EMPTY_CHILDREN) children = [child];
+ else children.push(child);
+ lastSimple = simple;
+ }
+ var p = new VNode();
+ p.nodeName = nodeName;
+ p.children = children;
+ p.attributes = null == attributes ? void 0 : attributes;
+ p.key = null == attributes ? void 0 : attributes.key;
+ if (void 0 !== options.vnode) options.vnode(p);
+ return p;
+ }
+ function extend(obj, props) {
+ for (var i in props) obj[i] = props[i];
+ return obj;
+ }
+ function applyRef(ref, value) {
+ if ('function' == typeof ref) ref(value);
+ else if (null != ref) ref.current = value;
+ }
+ function cloneElement(vnode, props) {
+ return h(
+ vnode.nodeName,
+ extend(extend({}, vnode.attributes), props),
+ arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children
+ );
+ }
+ function enqueueRender(component) {
+ if (!component.__d && (component.__d = !0) && 1 == items.push(component))
+ (options.debounceRendering || defer)(rerender);
+ }
+ function rerender() {
+ var p;
+ while ((p = items.pop())) if (p.__d) renderComponent(p);
+ }
+ function isSameNodeType(node, vnode, hydrating) {
+ if ('string' == typeof vnode || 'number' == typeof vnode)
+ return void 0 !== node.splitText;
+ if ('string' == typeof vnode.nodeName)
+ return !node._componentConstructor && isNamedNode(node, vnode.nodeName);
+ else return hydrating || node._componentConstructor === vnode.nodeName;
+ }
+ function isNamedNode(node, nodeName) {
+ return (
+ node.__n === nodeName ||
+ node.nodeName.toLowerCase() === nodeName.toLowerCase()
+ );
+ }
+ function getNodeProps(vnode) {
+ var props = extend({}, vnode.attributes);
+ props.children = vnode.children;
+ var defaultProps = vnode.nodeName.defaultProps;
+ if (void 0 !== defaultProps)
+ for (var i in defaultProps)
+ if (void 0 === props[i]) props[i] = defaultProps[i];
+ return props;
+ }
+ function createNode(nodeName, isSvg) {
+ var node = isSvg
+ ? document.createElementNS('http://www.w3.org/2000/svg', nodeName)
+ : document.createElement(nodeName);
+ node.__n = nodeName;
+ return node;
+ }
+ function removeNode(node) {
+ var parentNode = node.parentNode;
+ if (parentNode) parentNode.removeChild(node);
+ }
+ function setAccessor(node, name, old, value, isSvg) {
+ if ('className' === name) name = 'class';
+ if ('key' === name);
+ else if ('ref' === name) {
+ applyRef(old, null);
+ applyRef(value, node);
+ } else if ('class' === name && !isSvg) node.className = value || '';
+ else if ('style' === name) {
+ if (!value || 'string' == typeof value || 'string' == typeof old)
+ node.style.cssText = value || '';
+ if (value && 'object' == typeof value) {
+ if ('string' != typeof old)
+ for (var i in old) if (!(i in value)) node.style[i] = '';
+ for (var i in value)
+ node.style[i] =
+ 'number' == typeof value[i] && !1 === IS_NON_DIMENSIONAL.test(i)
+ ? value[i] + 'px'
+ : value[i];
+ }
+ } else if ('dangerouslySetInnerHTML' === name) {
+ if (value) node.innerHTML = value.__html || '';
+ } else if ('o' == name[0] && 'n' == name[1]) {
+ var useCapture = name !== (name = name.replace(/Capture$/, ''));
+ name = name.toLowerCase().substring(2);
+ if (value) {
+ if (!old) node.addEventListener(name, eventProxy, useCapture);
+ } else node.removeEventListener(name, eventProxy, useCapture);
+ (node.__l || (node.__l = {}))[name] = value;
+ } else if ('list' !== name && 'type' !== name && !isSvg && name in node) {
+ try {
+ node[name] = null == value ? '' : value;
+ } catch (e) {}
+ if ((null == value || !1 === value) && 'spellcheck' != name)
+ node.removeAttribute(name);
+ } else {
+ var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));
+ if (null == value || !1 === value)
+ if (ns)
+ node.removeAttributeNS(
+ 'http://www.w3.org/1999/xlink',
+ name.toLowerCase()
+ );
+ else node.removeAttribute(name);
+ else if ('function' != typeof value)
+ if (ns)
+ node.setAttributeNS(
+ 'http://www.w3.org/1999/xlink',
+ name.toLowerCase(),
+ value
+ );
+ else node.setAttribute(name, value);
+ }
+ }
+ function eventProxy(e) {
+ return this.__l[e.type]((options.event && options.event(e)) || e);
+ }
+ function flushMounts() {
+ var c;
+ while ((c = mounts.pop())) {
+ if (options.afterMount) options.afterMount(c);
+ if (c.componentDidMount) c.componentDidMount();
+ }
+ }
+ function diff(dom, vnode, context, mountAll, parent, componentRoot) {
+ if (!diffLevel++) {
+ isSvgMode = null != parent && void 0 !== parent.ownerSVGElement;
+ hydrating = null != dom && !('__preactattr_' in dom);
+ }
+ var ret = idiff(dom, vnode, context, mountAll, componentRoot);
+ if (parent && ret.parentNode !== parent) parent.appendChild(ret);
+ if (!--diffLevel) {
+ hydrating = !1;
+ if (!componentRoot) flushMounts();
+ }
+ return ret;
+ }
+ function idiff(dom, vnode, context, mountAll, componentRoot) {
+ var out = dom,
+ prevSvgMode = isSvgMode;
+ if (null == vnode || 'boolean' == typeof vnode) vnode = '';
+ if ('string' == typeof vnode || 'number' == typeof vnode) {
+ if (
+ dom &&
+ void 0 !== dom.splitText &&
+ dom.parentNode &&
+ (!dom._component || componentRoot)
+ ) {
+ if (dom.nodeValue != vnode) dom.nodeValue = vnode;
+ } else {
+ out = document.createTextNode(vnode);
+ if (dom) {
+ if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
+ recollectNodeTree(dom, !0);
+ }
+ }
+ out.__preactattr_ = !0;
+ return out;
+ }
+ var vnodeName = vnode.nodeName;
+ if ('function' == typeof vnodeName)
+ return buildComponentFromVNode(dom, vnode, context, mountAll);
+ isSvgMode =
+ 'svg' === vnodeName ? !0 : 'foreignObject' === vnodeName ? !1 : isSvgMode;
+ vnodeName = String(vnodeName);
+ if (!dom || !isNamedNode(dom, vnodeName)) {
+ out = createNode(vnodeName, isSvgMode);
+ if (dom) {
+ while (dom.firstChild) out.appendChild(dom.firstChild);
+ if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
+ recollectNodeTree(dom, !0);
+ }
+ }
+ var fc = out.firstChild,
+ props = out.__preactattr_,
+ vchildren = vnode.children;
+ if (null == props) {
+ props = out.__preactattr_ = {};
+ for (var a = out.attributes, i = a.length; i--; )
+ props[a[i].name] = a[i].value;
+ }
+ if (
+ !hydrating &&
+ vchildren &&
+ 1 === vchildren.length &&
+ 'string' == typeof vchildren[0] &&
+ null != fc &&
+ void 0 !== fc.splitText &&
+ null == fc.nextSibling
+ ) {
+ if (fc.nodeValue != vchildren[0]) fc.nodeValue = vchildren[0];
+ } else if ((vchildren && vchildren.length) || null != fc)
+ innerDiffNode(
+ out,
+ vchildren,
+ context,
+ mountAll,
+ hydrating || null != props.dangerouslySetInnerHTML
+ );
+ diffAttributes(out, vnode.attributes, props);
+ isSvgMode = prevSvgMode;
+ return out;
+ }
+ function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {
+ var j,
+ c,
+ f,
+ vchild,
+ child,
+ originalChildren = dom.childNodes,
+ children = [],
+ keyed = {},
+ keyedLen = 0,
+ min = 0,
+ len = originalChildren.length,
+ childrenLen = 0,
+ vlen = vchildren ? vchildren.length : 0;
+ if (0 !== len)
+ for (var i = 0; i < len; i++) {
+ var _child = originalChildren[i],
+ props = _child.__preactattr_,
+ key =
+ vlen && props
+ ? _child._component
+ ? _child._component.__k
+ : props.key
+ : null;
+ if (null != key) {
+ keyedLen++;
+ keyed[key] = _child;
+ } else if (
+ props ||
+ (void 0 !== _child.splitText
+ ? isHydrating
+ ? _child.nodeValue.trim()
+ : !0
+ : isHydrating)
+ )
+ children[childrenLen++] = _child;
+ }
+ if (0 !== vlen)
+ for (var i = 0; i < vlen; i++) {
+ vchild = vchildren[i];
+ child = null;
+ var key = vchild.key;
+ if (null != key) {
+ if (keyedLen && void 0 !== keyed[key]) {
+ child = keyed[key];
+ keyed[key] = void 0;
+ keyedLen--;
+ }
+ } else if (min < childrenLen)
+ for (j = min; j < childrenLen; j++)
+ if (
+ void 0 !== children[j] &&
+ isSameNodeType((c = children[j]), vchild, isHydrating)
+ ) {
+ child = c;
+ children[j] = void 0;
+ if (j === childrenLen - 1) childrenLen--;
+ if (j === min) min++;
+ break;
+ }
+ child = idiff(child, vchild, context, mountAll);
+ f = originalChildren[i];
+ if (child && child !== dom && child !== f)
+ if (null == f) dom.appendChild(child);
+ else if (child === f.nextSibling) removeNode(f);
+ else dom.insertBefore(child, f);
+ }
+ if (keyedLen)
+ for (var i in keyed)
+ if (void 0 !== keyed[i]) recollectNodeTree(keyed[i], !1);
+ while (min <= childrenLen)
+ if (void 0 !== (child = children[childrenLen--]))
+ recollectNodeTree(child, !1);
+ }
+ function recollectNodeTree(node, unmountOnly) {
+ var component = node._component;
+ if (component) unmountComponent(component);
+ else {
+ if (null != node.__preactattr_) applyRef(node.__preactattr_.ref, null);
+ if (!1 === unmountOnly || null == node.__preactattr_) removeNode(node);
+ removeChildren(node);
+ }
+ }
+ function removeChildren(node) {
+ node = node.lastChild;
+ while (node) {
+ var next = node.previousSibling;
+ recollectNodeTree(node, !0);
+ node = next;
+ }
+ }
+ function diffAttributes(dom, attrs, old) {
+ var name;
+ for (name in old)
+ if ((!attrs || null == attrs[name]) && null != old[name])
+ setAccessor(dom, name, old[name], (old[name] = void 0), isSvgMode);
+ for (name in attrs)
+ if (
+ !(
+ 'children' === name ||
+ 'innerHTML' === name ||
+ (name in old &&
+ attrs[name] ===
+ ('value' === name || 'checked' === name ? dom[name] : old[name]))
+ )
+ )
+ setAccessor(dom, name, old[name], (old[name] = attrs[name]), isSvgMode);
+ }
+ function createComponent(Ctor, props, context) {
+ var inst,
+ i = recyclerComponents.length;
+ if (Ctor.prototype && Ctor.prototype.render) {
+ inst = new Ctor(props, context);
+ Component.call(inst, props, context);
+ } else {
+ inst = new Component(props, context);
+ inst.constructor = Ctor;
+ inst.render = doRender;
+ }
+ while (i--)
+ if (recyclerComponents[i].constructor === Ctor) {
+ inst.__b = recyclerComponents[i].__b;
+ recyclerComponents.splice(i, 1);
+ return inst;
+ }
+ return inst;
+ }
+ function doRender(props, state, context) {
+ return this.constructor(props, context);
+ }
+ function setComponentProps(component, props, renderMode, context, mountAll) {
+ if (!component.__x) {
+ component.__x = !0;
+ component.__r = props.ref;
+ component.__k = props.key;
+ delete props.ref;
+ delete props.key;
+ if (void 0 === component.constructor.getDerivedStateFromProps)
+ if (!component.base || mountAll) {
+ if (component.componentWillMount) component.componentWillMount();
+ } else if (component.componentWillReceiveProps)
+ component.componentWillReceiveProps(props, context);
+ if (context && context !== component.context) {
+ if (!component.__c) component.__c = component.context;
+ component.context = context;
+ }
+ if (!component.__p) component.__p = component.props;
+ component.props = props;
+ component.__x = !1;
+ if (0 !== renderMode)
+ if (
+ 1 === renderMode ||
+ !1 !== options.syncComponentUpdates ||
+ !component.base
+ )
+ renderComponent(component, 1, mountAll);
+ else enqueueRender(component);
+ applyRef(component.__r, component);
+ }
+ }
+ function renderComponent(component, renderMode, mountAll, isChild) {
+ if (!component.__x) {
+ var rendered,
+ inst,
+ cbase,
+ props = component.props,
+ state = component.state,
+ context = component.context,
+ previousProps = component.__p || props,
+ previousState = component.__s || state,
+ previousContext = component.__c || context,
+ isUpdate = component.base,
+ nextBase = component.__b,
+ initialBase = isUpdate || nextBase,
+ initialChildComponent = component._component,
+ skip = !1,
+ snapshot = previousContext;
+ if (component.constructor.getDerivedStateFromProps) {
+ state = extend(
+ extend({}, state),
+ component.constructor.getDerivedStateFromProps(props, state)
+ );
+ component.state = state;
+ }
+ if (isUpdate) {
+ component.props = previousProps;
+ component.state = previousState;
+ component.context = previousContext;
+ if (
+ 2 !== renderMode &&
+ component.shouldComponentUpdate &&
+ !1 === component.shouldComponentUpdate(props, state, context)
+ )
+ skip = !0;
+ else if (component.componentWillUpdate)
+ component.componentWillUpdate(props, state, context);
+ component.props = props;
+ component.state = state;
+ component.context = context;
+ }
+ component.__p = component.__s = component.__c = component.__b = null;
+ component.__d = !1;
+ if (!skip) {
+ rendered = component.render(props, state, context);
+ if (component.getChildContext)
+ context = extend(extend({}, context), component.getChildContext());
+ if (isUpdate && component.getSnapshotBeforeUpdate)
+ snapshot = component.getSnapshotBeforeUpdate(
+ previousProps,
+ previousState
+ );
+ var toUnmount,
+ base,
+ childComponent = rendered && rendered.nodeName;
+ if ('function' == typeof childComponent) {
+ var childProps = getNodeProps(rendered);
+ inst = initialChildComponent;
+ if (
+ inst &&
+ inst.constructor === childComponent &&
+ childProps.key == inst.__k
+ )
+ setComponentProps(inst, childProps, 1, context, !1);
+ else {
+ toUnmount = inst;
+ component._component = inst = createComponent(
+ childComponent,
+ childProps,
+ context
+ );
+ inst.__b = inst.__b || nextBase;
+ inst.__u = component;
+ setComponentProps(inst, childProps, 0, context, !1);
+ renderComponent(inst, 1, mountAll, !0);
+ }
+ base = inst.base;
+ } else {
+ cbase = initialBase;
+ toUnmount = initialChildComponent;
+ if (toUnmount) cbase = component._component = null;
+ if (initialBase || 1 === renderMode) {
+ if (cbase) cbase._component = null;
+ base = diff(
+ cbase,
+ rendered,
+ context,
+ mountAll || !isUpdate,
+ initialBase && initialBase.parentNode,
+ !0
+ );
+ }
+ }
+ if (
+ initialBase &&
+ base !== initialBase &&
+ inst !== initialChildComponent
+ ) {
+ var baseParent = initialBase.parentNode;
+ if (baseParent && base !== baseParent) {
+ baseParent.replaceChild(base, initialBase);
+ if (!toUnmount) {
+ initialBase._component = null;
+ recollectNodeTree(initialBase, !1);
+ }
+ }
+ }
+ if (toUnmount) unmountComponent(toUnmount);
+ component.base = base;
+ if (base && !isChild) {
+ var componentRef = component,
+ t = component;
+ while ((t = t.__u)) (componentRef = t).base = base;
+ base._component = componentRef;
+ base._componentConstructor = componentRef.constructor;
+ }
+ }
+ if (!isUpdate || mountAll) mounts.unshift(component);
+ else if (!skip) {
+ if (component.componentDidUpdate)
+ component.componentDidUpdate(previousProps, previousState, snapshot);
+ if (options.afterUpdate) options.afterUpdate(component);
+ }
+ while (component.__h.length) component.__h.pop().call(component);
+ if (!diffLevel && !isChild) flushMounts();
+ }
+ }
+ function buildComponentFromVNode(dom, vnode, context, mountAll) {
+ var c = dom && dom._component,
+ originalComponent = c,
+ oldDom = dom,
+ isDirectOwner = c && dom._componentConstructor === vnode.nodeName,
+ isOwner = isDirectOwner,
+ props = getNodeProps(vnode);
+ while (c && !isOwner && (c = c.__u))
+ isOwner = c.constructor === vnode.nodeName;
+ if (c && isOwner && (!mountAll || c._component)) {
+ setComponentProps(c, props, 3, context, mountAll);
+ dom = c.base;
+ } else {
+ if (originalComponent && !isDirectOwner) {
+ unmountComponent(originalComponent);
+ dom = oldDom = null;
+ }
+ c = createComponent(vnode.nodeName, props, context);
+ if (dom && !c.__b) {
+ c.__b = dom;
+ oldDom = null;
+ }
+ setComponentProps(c, props, 1, context, mountAll);
+ dom = c.base;
+ if (oldDom && dom !== oldDom) {
+ oldDom._component = null;
+ recollectNodeTree(oldDom, !1);
+ }
+ }
+ return dom;
+ }
+ function unmountComponent(component) {
+ if (options.beforeUnmount) options.beforeUnmount(component);
+ var base = component.base;
+ component.__x = !0;
+ if (component.componentWillUnmount) component.componentWillUnmount();
+ component.base = null;
+ var inner = component._component;
+ if (inner) unmountComponent(inner);
+ else if (base) {
+ if (base.__preactattr_ && base.__preactattr_.ref)
+ base.__preactattr_.ref(null);
+ component.__b = base;
+ removeNode(base);
+ recyclerComponents.push(component);
+ removeChildren(base);
+ }
+ applyRef(component.__r, null);
+ }
+ function Component(props, context) {
+ this.__d = !0;
+ this.context = context;
+ this.props = props;
+ this.state = this.state || {};
+ this.__h = [];
+ }
+ function render(vnode, parent, merge) {
+ return diff(merge, vnode, {}, !1, parent, !1);
+ }
+ function createRef() {
+ return {};
+ }
+ var VNode = function() {};
+ var options = {};
+ var stack = [];
+ var EMPTY_CHILDREN = [];
+ var defer =
+ 'function' == typeof Promise
+ ? Promise.resolve().then.bind(Promise.resolve())
+ : setTimeout;
+ var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
+ var items = [];
+ var mounts = [];
+ var diffLevel = 0;
+ var isSvgMode = !1;
+ var hydrating = !1;
+ var recyclerComponents = [];
+ extend(Component.prototype, {
+ setState: function(state, callback) {
+ if (!this.__s) this.__s = this.state;
+ this.state = extend(
+ extend({}, this.state),
+ 'function' == typeof state ? state(this.state, this.props) : state
+ );
+ if (callback) this.__h.push(callback);
+ enqueueRender(this);
+ },
+ forceUpdate: function(callback) {
+ if (callback) this.__h.push(callback);
+ renderComponent(this, 2);
+ },
+ render: function() {}
+ });
+ var preact = {
+ h: h,
+ createElement: h,
+ cloneElement: cloneElement,
+ createRef: createRef,
+ Component: Component,
+ render: render,
+ rerender: rerender,
+ options: options
+ };
+ if ('undefined' != typeof module) module.exports = preact;
+ else self.preact = preact;
+})();
+//# sourceMappingURL=preact.js.map
diff --git a/preact/test/node/index.test.js b/preact/test/node/index.test.js
new file mode 100644
index 0000000..fef7547
--- /dev/null
+++ b/preact/test/node/index.test.js
@@ -0,0 +1,15 @@
+import { expect } from 'chai';
+import * as preact from '../../';
+
+describe('build artifact', () => {
+ // #1075 Check that the build artifact has the correct exports
+ it('should have exported properties', () => {
+ expect(preact).to.be.an('object');
+ expect(preact).to.have.property('createElement');
+ expect(preact).to.have.property('h');
+ expect(preact).to.have.property('Component');
+ expect(preact).to.have.property('render');
+ expect(preact).to.have.property('hydrate');
+ // expect(preact).to.have.property('options');
+ });
+});
diff --git a/preact/test/polyfills.js b/preact/test/polyfills.js
new file mode 100644
index 0000000..e2f542b
--- /dev/null
+++ b/preact/test/polyfills.js
@@ -0,0 +1,260 @@
+// ES2015 APIs used by developer tools integration
+import 'core-js/es6/map';
+import 'core-js/es6/promise';
+import 'core-js/fn/array/fill';
+import 'core-js/fn/array/from';
+import 'core-js/fn/array/find';
+import 'core-js/fn/array/includes';
+import 'core-js/fn/string/includes';
+import 'core-js/fn/object/assign';
+import 'core-js/fn/string/starts-with';
+import 'core-js/fn/string/code-point-at';
+import 'core-js/fn/string/from-code-point';
+import 'core-js/fn/string/repeat';
+import * as kl from 'kolorist';
+
+// Something that's loaded before this file polyfills Symbol object.
+// We need to verify that it works in IE without that.
+if (/Trident/.test(window.navigator.userAgent)) {
+ window.Symbol = undefined;
+}
+
+// Fix Function#name on browsers that do not support it (IE).
+// Taken from: https://stackoverflow.com/a/17056530/755391
+if (!function f() {}.name) {
+ Object.defineProperty(Function.prototype, 'name', {
+ get() {
+ let name = (this.toString().match(/^function\s*([^\s(]+)/) || [])[1];
+ // For better performance only parse once, and then cache the
+ // result through a new accessor for repeated access.
+ Object.defineProperty(this, 'name', { value: name });
+ return name;
+ }
+ });
+}
+
+/* global chai */
+chai.use((chai, util) => {
+ const Assertion = chai.Assertion;
+
+ Assertion.addMethod('equalNode', function(expectedNode, message) {
+ const obj = this._obj;
+ message = message || 'equalNode';
+
+ if (expectedNode == null) {
+ this.assert(
+ obj == null,
+ `${message}: expected node to "== null" but got #{act} instead.`,
+ `${message}: expected node to not "!= null".`,
+ expectedNode,
+ obj
+ );
+ } else {
+ new Assertion(obj).to.be.instanceof(Node, message);
+ this.assert(
+ obj.tagName === expectedNode.tagName,
+ `${message}: expected node to have tagName #{exp} but got #{act} instead.`,
+ `${message}: expected node to not have tagName #{act}.`,
+ expectedNode.tagName,
+ obj.tagName
+ );
+ this.assert(
+ obj === expectedNode,
+ `${message}: expected #{this} to be #{exp} but got #{act}`,
+ `${message}: expected # {this} not to be #{exp}`,
+ expectedNode,
+ obj
+ );
+ }
+ });
+});
+
+//
+// The following code overwrites karma's internal logging feature to
+// support a much prettier and humand readable represantation of
+// console logs in our terminal. This includes indentation, coloring
+// and support for Map and Set objects.
+//
+function patchConsole(method) {
+ const original = window.console[method];
+ window.console[method] = (...args) => {
+ // @ts-ignore
+ // eslint-disable-next-line no-undef
+ __karma__.log(method, ['__LOG_CUSTOM:' + serializeConsoleArgs(args)]);
+ original.apply(window.console, args);
+ };
+}
+
+patchConsole('log');
+patchConsole('warn');
+patchConsole('error');
+patchConsole('info');
+
+/**
+ * @param {any[]} args
+ * @returns {[string]}
+ */
+function serializeConsoleArgs(args) {
+ const flat = args.map(arg => serialize(arg, 'flat', 0, new Set()));
+ // We don't have access to the users terminal width, so we'll try to
+ // format everything into one line if possible and assume a terminal
+ // width of 80 chars
+ if (kl.stripColors(flat.join(', ')).length <= 80) {
+ return [flat.join(', ')];
+ }
+
+ const serialized = args.map(arg => serialize(arg, 'default', 0, new Set()));
+ return ['\n' + serialized.join(',\n') + '\n'];
+}
+
+/**
+ * @param {number} n
+ * @returns {string}
+ */
+function applyIndent(n) {
+ if (n <= 0) return '';
+ return ' '.repeat(n);
+}
+
+/**
+ * @param {any} value
+ * @param {"flat" | "default"} mode
+ * @param {number} indent
+ * @param {Set<any>} seen
+ * @returns {string}
+ */
+function serialize(value, mode, indent, seen) {
+ if (seen.has(value)) {
+ return kl.cyan('[Circular]');
+ }
+
+ if (value === null) {
+ return kl.bold('null');
+ } else if (Array.isArray(value)) {
+ seen.add(value);
+ const values = value.map(v => serialize(v, mode, indent + 1, seen));
+ if (mode === 'flat') {
+ return `[ ${values.join(', ')} ]`;
+ }
+
+ const space = applyIndent(indent);
+ const pretty = values.map(v => applyIndent(indent + 1) + v).join(',\n');
+ return `[\n${pretty}\n${space}]`;
+ } else if (value instanceof Set) {
+ const values = [];
+ value.forEach(v => {
+ values.push(serialize(v, mode, indent, seen));
+ });
+
+ if (mode === 'flat') {
+ return `Set(${value.size}) { ${values.join(', ')} }`;
+ }
+
+ const pretty = values.map(v => applyIndent(indent + 1) + v).join(',\n');
+ return `Set(${value.size}) {\n${pretty}\n${applyIndent(indent)}}`;
+ } else if (value instanceof Map) {
+ const values = [];
+ value.forEach((v, k) => {
+ values.push([
+ serialize(v, 'flat', indent, seen),
+ serialize(k, 'flat', indent, seen)
+ ]);
+ });
+
+ if (mode === 'flat') {
+ const pretty = values.map(v => `${v[0]} => ${v[1]}`).join(', ');
+ return `Map(${value.size}) { ${pretty} }`;
+ }
+
+ const pretty = values
+ .map(v => {
+ return applyIndent(indent + 1) + `${v[0]} => ${v[1]}`;
+ })
+ .join(', ');
+ return `Map(${value.size}) {\n${pretty}\n${applyIndent(indent)}}`;
+ }
+
+ switch (typeof value) {
+ case 'undefined':
+ return kl.dim('undefined');
+
+ case 'bigint':
+ case 'number':
+ case 'boolean':
+ return kl.yellow(String(value));
+ case 'string': {
+ // By default node's built in logging doesn't wrap top level
+ // strings with quotes
+ if (indent === 0) {
+ return String(value);
+ }
+ const quote = /[^\\]"/.test(value) ? '"' : "'";
+ return kl.green(String(quote + value + quote));
+ }
+ case 'symbol':
+ return kl.green(value.toString());
+ case 'function':
+ return kl.cyan(`[Function: ${value.name || 'anonymous'}]`);
+ }
+
+ if (value instanceof Element) {
+ return value.outerHTML;
+ }
+
+ seen.add(value);
+
+ const props = Object.keys(value).map(key => {
+ const v = serialize(value[key], mode, indent + 1, seen);
+ return `${key}: ${v}`;
+ });
+
+ if (props.length === 0) {
+ return '{}';
+ } else if (mode === 'flat') {
+ const pretty = props.join(', ');
+ return `{ ${pretty} }`;
+ }
+
+ const pretty = props.map(p => applyIndent(indent + 1) + p).join(',\n');
+ return `{\n${pretty}\n${applyIndent(indent)}}`;
+}
+
+// Use these lines to test pretty formatting:
+//
+// const obj = { foo: 123 };
+// obj.obj = obj;
+// console.log(obj);
+// console.log([1, 2]);
+// console.log(new Set([1, 2]));
+// console.log(new Map([[1, 2]]));
+// console.log({
+// foo: { bar: 123, bob: { a: 1 } }
+// });
+// console.log(
+// 'hey',
+// null,
+// undefined,
+// [1, 2, ['a']],
+// () => {},
+// {
+// type: 'div',
+// props: {},
+// key: undefined,
+// ref: undefined,
+// __k: null,
+// __: null,
+// __b: 0,
+// __e: null,
+// __d: undefined,
+// __c: null,
+// __h: null,
+// constructor: undefined,
+// __v: 1
+// },
+// {
+// foo: { bar: 123, bob: { a: 1, b: new Set([1, 2]), c: new Map([[1, 2]]) } }
+// },
+// new Set([1, 2]),
+// new Map([[1, 2]])
+// );
+// console.log(document.createElement('div'));
diff --git a/preact/test/shared/createContext.test.js b/preact/test/shared/createContext.test.js
new file mode 100644
index 0000000..1c64c3c
--- /dev/null
+++ b/preact/test/shared/createContext.test.js
@@ -0,0 +1,24 @@
+import { createElement, createContext } from '../../';
+import { expect } from 'chai';
+
+/** @jsx createElement */
+/* eslint-env browser, mocha */
+
+describe('createContext', () => {
+ it('should return a Provider and a Consumer', () => {
+ const context = createContext();
+ expect(context).to.have.property('Provider');
+ expect(context).to.have.property('Consumer');
+ });
+
+ it('should return a valid Provider Component', () => {
+ const { Provider } = createContext();
+ const contextValue = { value: 'test' };
+ const children = [<div>child1</div>, <div>child2</div>];
+
+ const providerComponent = <Provider {...contextValue}>{children}</Provider>;
+ //expect(providerComponent).to.have.property('tag', 'Provider');
+ expect(providerComponent.props.value).to.equal(contextValue.value);
+ expect(providerComponent.props.children).to.equal(children);
+ });
+});
diff --git a/preact/test/shared/createElement.test.js b/preact/test/shared/createElement.test.js
new file mode 100644
index 0000000..a7231b6
--- /dev/null
+++ b/preact/test/shared/createElement.test.js
@@ -0,0 +1,299 @@
+import { createElement } from '../../';
+import { expect } from 'chai';
+
+const h = createElement;
+/** @jsx createElement */
+/*eslint-env browser, mocha */
+
+// const buildVNode = (nodeName, attributes, children=[]) => ({
+// nodeName,
+// children,
+// attributes,
+// key: attributes && attributes.key
+// });
+
+describe('createElement(jsx)', () => {
+ it('should return a VNode', () => {
+ let r;
+ expect(() => (r = h('foo'))).not.to.throw();
+ expect(r).to.be.an('object');
+ // expect(r).to.be.an.instanceof(VNode);
+ expect(r).to.have.property('type', 'foo');
+ expect(r)
+ .to.have.property('props')
+ .that.eql({});
+ // expect(r).to.have.deep.property('props.children').that.eql(null);
+ });
+
+ it('should set VNode#type property', () => {
+ expect(<div />).to.have.property('type', 'div');
+ function Test() {
+ return <div />;
+ }
+ expect(<Test />).to.have.property('type', Test);
+ });
+
+ it('should set VNode.constructor property to prevent json injection', () => {
+ const vnode = <span />;
+ expect(vnode.constructor).to.equal(undefined);
+ });
+
+ it('should set VNode#props property', () => {
+ const props = {};
+ expect(h('div', props).props).to.deep.equal(props);
+ });
+
+ it('should set VNode#key property', () => {
+ expect(<div />).to.have.property('key').that.does.not.exist;
+ expect(<div a="a" />).to.have.property('key').that.does.not.exist;
+ expect(<div key="1" />).to.have.property('key', '1');
+ });
+
+ it('should not set VNode#props.key property', () => {
+ expect(<div />).to.not.have.nested.property('props.key');
+ expect(<div key="1" />).to.not.have.nested.property('props.key');
+ expect(<div key={0} />).to.not.have.nested.property('props.key');
+ expect(<div key={''} />).to.not.have.nested.property('props.key');
+ });
+
+ it('should set VNode#ref property', () => {
+ expect(<div />).to.have.property('ref').that.does.not.exist;
+ expect(<div a="a" />).to.have.property('ref').that.does.not.exist;
+ const emptyFunction = () => {};
+ expect(<div ref={emptyFunction} />).to.have.property('ref', emptyFunction);
+ });
+
+ it('should not set VNode#props.ref property', () => {
+ expect(<div />).to.not.have.nested.property('props.ref');
+ expect(<div ref={() => {}} />).to.not.have.nested.property('props.ref');
+ });
+
+ it('should have ordered VNode properties', () => {
+ expect(Object.keys(<div />).filter(key => !/^_/.test(key))).to.deep.equal([
+ 'type',
+ 'props',
+ 'key',
+ 'ref',
+ 'constructor'
+ ]);
+ });
+
+ it('should preserve raw props', () => {
+ let props = { foo: 'bar', baz: 10, func: () => {} },
+ r = h('foo', props);
+ expect(r)
+ .to.be.an('object')
+ .with.property('props')
+ .that.deep.equals(props);
+ });
+
+ it('should support element children', () => {
+ let kid1 = h('bar');
+ let kid2 = h('baz');
+ let r = h('foo', null, kid1, kid2);
+
+ expect(r)
+ .to.be.an('object')
+ .with.nested.deep.property('props.children', [kid1, kid2]);
+ });
+
+ it('should support multiple element children, given as arg list', () => {
+ let kid1 = h('bar');
+ let kid3 = h('test');
+ let kid2 = h('baz', null, kid3);
+
+ let r = h('foo', null, kid1, kid2);
+
+ expect(r)
+ .to.be.an('object')
+ .with.nested.deep.property('props.children', [kid1, kid2]);
+ });
+
+ it('should handle multiple element children, given as an array', () => {
+ let kid1 = h('bar');
+ let kid3 = h('test');
+ let kid2 = h('baz', null, kid3);
+
+ let r = h('foo', null, [kid1, kid2]);
+
+ expect(r)
+ .to.be.an('object')
+ .with.nested.deep.property('props.children', [kid1, kid2]);
+ });
+
+ it('should support nested children', () => {
+ const m = x => {
+ const result = h(x);
+ delete result._original;
+ return result;
+ };
+ expect(h('foo', null, m('a'), [m('b'), m('c')], m('d')))
+ .to.have.nested.property('props.children')
+ .that.eql([m('a'), [m('b'), m('c')], m('d')]);
+
+ expect(h('foo', null, [m('a'), [m('b'), m('c')], m('d')]))
+ .to.have.nested.property('props.children')
+ .that.eql([m('a'), [m('b'), m('c')], m('d')]);
+
+ expect(h('foo', { children: [m('a'), [m('b'), m('c')], m('d')] }))
+ .to.have.nested.property('props.children')
+ .that.eql([m('a'), [m('b'), m('c')], m('d')]);
+
+ expect(h('foo', { children: [[m('a'), [m('b'), m('c')], m('d')]] }))
+ .to.have.nested.property('props.children')
+ .that.eql([[m('a'), [m('b'), m('c')], m('d')]]);
+
+ expect(h('foo', { children: m('a') }))
+ .to.have.nested.property('props.children')
+ .that.eql(m('a'));
+
+ expect(h('foo', { children: 'a' }))
+ .to.have.nested.property('props.children')
+ .that.eql('a');
+ });
+
+ it('should support text children', () => {
+ let r = h('foo', null, 'textstuff');
+
+ expect(r)
+ .to.be.an('object')
+ .with.nested.property('props.children')
+ .that.equals('textstuff');
+ });
+
+ it('should override children if null is provided as an argument', () => {
+ let r = h('foo', { foo: 'bar', children: 'baz' }, null);
+
+ expect(r)
+ .to.be.an('object')
+ .to.deep.nested.include({
+ 'props.foo': 'bar',
+ 'props.children': null
+ });
+ });
+
+ it('should NOT set children prop when unspecified', () => {
+ let r = h('foo', { foo: 'bar' });
+
+ expect(r)
+ .to.be.an('object')
+ .to.have.nested.property('props.foo')
+ .not.to.have.nested.property('props.children');
+ });
+
+ it('should NOT merge adjacent text children', () => {
+ const bar = h('bar');
+ const barClone = h('bar');
+ const baz = h('baz');
+ const bazClone = h('baz');
+ const baz2 = h('baz');
+ const baz2Clone = h('baz');
+
+ delete bar._original;
+ delete barClone._original;
+ delete baz._original;
+ delete bazClone._original;
+ delete baz2._original;
+ delete baz2Clone._original;
+
+ let r = h(
+ 'foo',
+ null,
+ 'one',
+ 'two',
+ bar,
+ 'three',
+ baz,
+ baz2,
+ 'four',
+ null,
+ 'five',
+ 'six'
+ );
+
+ expect(r)
+ .to.be.an('object')
+ .with.nested.property('props.children')
+ .that.deep.equals([
+ 'one',
+ 'two',
+ barClone,
+ 'three',
+ bazClone,
+ baz2Clone,
+ 'four',
+ null,
+ 'five',
+ 'six'
+ ]);
+ });
+
+ it('should not merge nested adjacent text children', () => {
+ let r = h(
+ 'foo',
+ null,
+ 'one',
+ ['two', null, 'three'],
+ null,
+ ['four', null, 'five', null],
+ 'six',
+ null
+ );
+
+ expect(r)
+ .to.be.an('object')
+ .with.nested.property('props.children')
+ .that.deep.equals([
+ 'one',
+ ['two', null, 'three'],
+ null,
+ ['four', null, 'five', null],
+ 'six',
+ null
+ ]);
+ });
+
+ it('should not merge children that are boolean values', () => {
+ let r = h('foo', null, 'one', true, 'two', false, 'three');
+
+ expect(r)
+ .to.be.an('object')
+ .with.nested.property('props.children')
+ .that.deep.equals(['one', true, 'two', false, 'three']);
+ });
+
+ it('should not merge children of components', () => {
+ let Component = ({ children }) => children;
+ let r = h(Component, null, 'x', 'y');
+
+ expect(r)
+ .to.be.an('object')
+ .with.nested.property('props.children')
+ .that.deep.equals(['x', 'y']);
+ });
+
+ it('should respect defaultProps', () => {
+ const Component = ({ children }) => children;
+ Component.defaultProps = { foo: 'bar' };
+ expect(h(Component).props).to.deep.equal({ foo: 'bar' });
+ });
+
+ it('should override defaultProps', () => {
+ const Component = ({ children }) => children;
+ Component.defaultProps = { foo: 'default' };
+ expect(h(Component, { foo: 'bar' }).props).to.deep.equal({ foo: 'bar' });
+ });
+
+ it('should ignore props.children if children are manually specified', () => {
+ const element = (
+ <div a children={['a', 'b']}>
+ c
+ </div>
+ );
+ const childrenless = <div a>c</div>;
+ delete element._original;
+ delete childrenless._original;
+
+ expect(element).to.eql(childrenless);
+ });
+});
diff --git a/preact/test/shared/exports.test.js b/preact/test/shared/exports.test.js
new file mode 100644
index 0000000..b075af5
--- /dev/null
+++ b/preact/test/shared/exports.test.js
@@ -0,0 +1,32 @@
+import {
+ createElement,
+ h,
+ createContext,
+ Component,
+ Fragment,
+ render,
+ hydrate,
+ cloneElement,
+ options,
+ createRef,
+ toChildArray,
+ isValidElement
+} from '../../';
+import { expect } from 'chai';
+
+describe('preact', () => {
+ it('should be available as named exports', () => {
+ expect(h).to.be.a('function');
+ expect(createElement).to.be.a('function');
+ expect(Component).to.be.a('function');
+ expect(Fragment).to.exist;
+ expect(render).to.be.a('function');
+ expect(hydrate).to.be.a('function');
+ expect(cloneElement).to.be.a('function');
+ expect(createContext).to.be.a('function');
+ expect(options).to.exist.and.be.an('object');
+ expect(createRef).to.be.a('function');
+ expect(isValidElement).to.be.a('function');
+ expect(toChildArray).to.be.a('function');
+ });
+});
diff --git a/preact/test/shared/isValidElement.test.js b/preact/test/shared/isValidElement.test.js
new file mode 100644
index 0000000..66c49b6
--- /dev/null
+++ b/preact/test/shared/isValidElement.test.js
@@ -0,0 +1,5 @@
+import { createElement, isValidElement, Component } from '../../';
+import { expect } from 'chai';
+import { isValidElementTests } from './isValidElementTests';
+
+isValidElementTests(expect, isValidElement, createElement, Component);
diff --git a/preact/test/shared/isValidElementTests.js b/preact/test/shared/isValidElementTests.js
new file mode 100644
index 0000000..d0e86b5
--- /dev/null
+++ b/preact/test/shared/isValidElementTests.js
@@ -0,0 +1,37 @@
+/** @jsx createElement */
+
+export function isValidElementTests(
+ expect,
+ isValidElement,
+ createElement,
+ Component
+) {
+ describe('isValidElement', () => {
+ it('should check if the argument is a valid vnode', () => {
+ // Failure cases
+ expect(isValidElement(123)).to.equal(false);
+ expect(isValidElement(0)).to.equal(false);
+ expect(isValidElement('')).to.equal(false);
+ expect(isValidElement('abc')).to.equal(false);
+ expect(isValidElement(null)).to.equal(false);
+ expect(isValidElement(undefined)).to.equal(false);
+ expect(isValidElement(true)).to.equal(false);
+ expect(isValidElement(false)).to.equal(false);
+ expect(isValidElement([])).to.equal(false);
+ expect(isValidElement([123])).to.equal(false);
+ expect(isValidElement([null])).to.equal(false);
+
+ // Success cases
+ expect(isValidElement(<div />)).to.equal(true);
+
+ const Foo = () => 123;
+ expect(isValidElement(<Foo />)).to.equal(true);
+ class Bar extends Component {
+ render() {
+ return <div />;
+ }
+ }
+ expect(isValidElement(<Bar />)).to.equal(true);
+ });
+ });
+}
diff --git a/preact/test/ts/Component-test.tsx b/preact/test/ts/Component-test.tsx
new file mode 100644
index 0000000..b037219
--- /dev/null
+++ b/preact/test/ts/Component-test.tsx
@@ -0,0 +1,183 @@
+import 'mocha';
+import { expect } from 'chai';
+import { createElement, Component, RenderableProps, Fragment } from '../../';
+
+// Test `this` binding on event handlers
+function onHandler(this: HTMLInputElement, event: any) {
+ return this.value;
+}
+const foo = <input onChange={onHandler} />;
+
+export class ContextComponent extends Component<{ foo: string }> {
+ getChildContext() {
+ return { something: 2 };
+ }
+
+ render() {
+ return null;
+ }
+}
+
+export interface SimpleComponentProps {
+ initialName: string | null;
+}
+
+export interface SimpleState {
+ name: string | null;
+}
+
+export class SimpleComponent extends Component<
+ SimpleComponentProps,
+ SimpleState
+> {
+ constructor(props: SimpleComponentProps) {
+ super(props);
+ this.state = {
+ name: props.initialName
+ };
+ }
+
+ render() {
+ if (!this.state.name) {
+ return null;
+ }
+ const { initialName, children } = this.props;
+ return (
+ <div>
+ <span>
+ {initialName} / {this.state.name}
+ </span>
+ {children}
+ </div>
+ );
+ }
+}
+
+class DestructuringRenderPropsComponent extends Component<
+ SimpleComponentProps,
+ SimpleState
+> {
+ constructor(props: SimpleComponentProps) {
+ super(props);
+ this.state = {
+ name: props.initialName
+ };
+ }
+
+ render({ initialName, children }: RenderableProps<SimpleComponentProps>) {
+ if (!this.state.name) {
+ return null;
+ }
+ return (
+ <span>
+ {this.props.initialName} / {this.state.name}
+ </span>
+ );
+ }
+}
+
+interface RandomChildrenComponentProps {
+ num?: number;
+ val?: string;
+ span?: boolean;
+}
+
+class RandomChildrenComponent extends Component<RandomChildrenComponentProps> {
+ render() {
+ const { num, val, span } = this.props;
+ if (num) {
+ return num;
+ }
+ if (val) {
+ return val;
+ }
+ if (span) {
+ return <span>hi</span>;
+ }
+ return null;
+ }
+}
+
+class StaticComponent extends Component<SimpleComponentProps, SimpleState> {
+ static getDerivedStateFromProps(
+ props: SimpleComponentProps,
+ state: SimpleState
+ ): Partial<SimpleState> {
+ return {
+ ...props,
+ ...state
+ };
+ }
+
+ static getDerivedStateFromError(err: Error) {
+ return {
+ name: err.message
+ };
+ }
+
+ render() {
+ return null;
+ }
+}
+
+function MapperItem(props: { foo: number }) {
+ return <div />;
+}
+
+function Mapper() {
+ return [1, 2, 3].map(x => <MapperItem foo={x} key={x} />);
+}
+
+describe('Component', () => {
+ const component = new SimpleComponent({ initialName: 'da name' });
+
+ it('has state', () => {
+ expect(component.state.name).to.eq('da name');
+ });
+
+ it('has props', () => {
+ expect(component.props.initialName).to.eq('da name');
+ });
+
+ it('has no base when not mounted', () => {
+ expect(component.base).to.not.exist;
+ });
+
+ describe('setState', () => {
+ // No need to execute these tests. because we only need to check if
+ // the types are working. Executing them would require the DOM.
+ // TODO: Run TS tests in our standard karma setup
+ it.skip('can be used with an object', () => {
+ component.setState({ name: 'another name' });
+ });
+
+ it.skip('can be used with a function', () => {
+ const updater = (state: any, props: any) => ({
+ name: `${state.name} - ${props.initialName}`
+ });
+ component.setState(updater);
+ });
+ });
+
+ describe('render', () => {
+ it('can return null', () => {
+ const comp = new SimpleComponent({ initialName: null });
+ const actual = comp.render();
+
+ expect(actual).to.eq(null);
+ });
+ });
+
+ describe('Fragment', () => {
+ it('should render nested Fragments', () => {
+ var vnode = (
+ <Fragment>
+ <Fragment>foo</Fragment>
+ bar
+ </Fragment>
+ );
+
+ expect(vnode.type).to.be.equal(Fragment);
+ });
+ });
+});
diff --git a/preact/test/ts/VNode-test.tsx b/preact/test/ts/VNode-test.tsx
new file mode 100644
index 0000000..7225901
--- /dev/null
+++ b/preact/test/ts/VNode-test.tsx
@@ -0,0 +1,197 @@
+import 'mocha';
+import { expect } from 'chai';
+import {
+ createElement,
+ Component,
+ toChildArray,
+ FunctionalComponent,
+ ComponentConstructor,
+ ComponentFactory,
+ VNode,
+ ComponentChildren,
+ cloneElement
+} from '../../';
+
+function getDisplayType(vnode: VNode | string | number) {
+ if (typeof vnode === 'string' || typeof vnode == 'number') {
+ return vnode.toString();
+ } else if (typeof vnode.type == 'string') {
+ return vnode.type;
+ } else {
+ return vnode.type.displayName;
+ }
+}
+
+class SimpleComponent extends Component<{}, {}> {
+ render() {
+ return <div>{this.props.children}</div>;
+ }
+}
+
+const SimpleFunctionalComponent = () => <div />;
+
+const a: ComponentFactory = SimpleComponent;
+const b: ComponentFactory = SimpleFunctionalComponent;
+
+describe('VNode TS types', () => {
+ it('is returned by h', () => {
+ const actual = <div className="wow" />;
+ expect(actual).to.include.all.keys('type', 'props', 'key');
+ });
+
+ it('has a nodeName of string when html element', () => {
+ const div = <div>Hi!</div>;
+ expect(div.type).to.equal('div');
+ });
+
+ it('has a nodeName equal to the construction function when SFC', () => {
+ const sfc = <SimpleFunctionalComponent />;
+ expect(sfc.type).to.be.instanceOf(Function);
+ const constructor = sfc.type as FunctionalComponent<any>;
+ expect(constructor.name).to.eq('SimpleFunctionalComponent');
+ });
+
+ it('has a nodeName equal to the constructor of a component', () => {
+ const sfc = <SimpleComponent />;
+ expect(sfc.type).to.be.instanceOf(Function);
+ const constructor = sfc.type as ComponentConstructor<any>;
+ expect(constructor.name).to.eq('SimpleComponent');
+ });
+
+ it('has children which is an array of string or other vnodes', () => {
+ const comp = (
+ <SimpleComponent>
+ <SimpleComponent>child1</SimpleComponent>
+ child2
+ </SimpleComponent>
+ );
+
+ expect(comp.props.children).to.be.instanceOf(Array);
+ expect(comp.props.children[1]).to.be.a('string');
+ });
+
+ it('children type should work with toChildArray', () => {
+ const comp: VNode = <SimpleComponent>child1 {1}</SimpleComponent>;
+
+ const children = toChildArray(comp.props.children);
+ expect(children).to.have.lengthOf(2);
+ });
+
+ it('toChildArray should filter out some types', () => {
+ const compChild = <SimpleComponent />;
+ const comp: VNode = (
+ <SimpleComponent>
+ a{null}
+ {true}
+ {false}
+ {2}
+ {undefined}
+ {['b', 'c']}
+ {compChild}
+ </SimpleComponent>
+ );
+
+ const children = toChildArray(comp.props.children);
+ expect(children).to.deep.equal(['a', 2, 'b', 'c', compChild]);
+ });
+
+ it('functions like getDisplayType should work', () => {
+ function TestComp(props: { children?: ComponentChildren }) {
+ return <div>{props.children}</div>;
+ }
+ TestComp.displayName = 'TestComp';
+
+ const compChild = <TestComp />;
+ const comp: VNode = (
+ <SimpleComponent>
+ a{null}
+ {true}
+ {false}
+ {2}
+ {undefined}
+ {['b', 'c']}
+ {compChild}
+ </SimpleComponent>
+ );
+
+ const types = toChildArray(comp.props.children).map(getDisplayType);
+ expect(types).to.deep.equal(['a', '2', 'b', 'c', 'TestComp']);
+ });
+
+ it('component should work with cloneElement', () => {
+ const comp: VNode = (
+ <SimpleComponent>
+ <div>child 1</div>
+ </SimpleComponent>
+ );
+ const clone: VNode = cloneElement(comp);
+
+ expect(comp.type).to.equal(clone.type);
+ expect(comp.props).not.to.equal(clone.props);
+ expect(comp.props).to.deep.equal(clone.props);
+ });
+
+ it('component should work with cloneElement using generics', () => {
+ const comp: VNode<string> = <SimpleComponent></SimpleComponent>;
+ const clone: VNode<string> = cloneElement<string>(comp);
+
+ expect(comp.type).to.equal(clone.type);
+ expect(comp.props).not.to.equal(clone.props);
+ expect(comp.props).to.deep.equal(clone.props);
+ });
+});
+
+class ComponentWithFunctionChild extends Component<{
+ children: (num: number) => string;
+}> {
+ render() {
+ return null;
+ }
+}
+
+<ComponentWithFunctionChild>
+ {num => num.toFixed(2)}
+</ComponentWithFunctionChild>;
+
+class ComponentWithStringChild extends Component<{ children: string }> {
+ render() {
+ return null;
+ }
+}
+
+<ComponentWithStringChild>child</ComponentWithStringChild>;
+
+class ComponentWithNumberChild extends Component<{ children: number }> {
+ render() {
+ return null;
+ }
+}
+
+<ComponentWithNumberChild>{1}</ComponentWithNumberChild>;
+
+class ComponentWithBooleanChild extends Component<{ children: boolean }> {
+ render() {
+ return null;
+ }
+}
+
+<ComponentWithBooleanChild>{false}</ComponentWithBooleanChild>;
+
+class ComponentWithNullChild extends Component<{ children: null }> {
+ render() {
+ return null;
+ }
+}
+
+<ComponentWithNullChild>{null}</ComponentWithNullChild>;
+
+class ComponentWithNumberChildren extends Component<{ children: number[] }> {
+ render() {
+ return null;
+ }
+}
+
+<ComponentWithNumberChildren>
+ {1}
+ {2}
+</ComponentWithNumberChildren>;
diff --git a/preact/test/ts/custom-elements.tsx b/preact/test/ts/custom-elements.tsx
new file mode 100644
index 0000000..0f8d29e
--- /dev/null
+++ b/preact/test/ts/custom-elements.tsx
@@ -0,0 +1,85 @@
+import { createElement, Component, createContext } from '../../';
+
+declare module '../../' {
+ namespace createElement.JSX {
+ interface IntrinsicElements {
+ // Custom element can use JSX EventHandler definitions
+ 'clickable-ce': {
+ optionalAttr?: string;
+ onClick?: MouseEventHandler<HTMLElement>;
+ };
+
+ // Custom Element that extends HTML attributes
+ 'color-picker': HTMLAttributes & {
+ // Required attribute
+ space: 'rgb' | 'hsl' | 'hsv';
+ // Optional attribute
+ alpha?: boolean;
+ };
+
+ // Custom Element with custom interface definition
+ 'custom-whatever': WhateveElAttributes;
+ }
+ }
+}
+
+// Whatever Element definition
+
+interface WhateverElement {
+ instanceProp: string;
+}
+
+interface WhateverElementEvent {
+ eventProp: number;
+}
+
+// preact.JSX.HTMLAttributes also appears to work here but for consistency,
+// let's use createElement.JSX
+interface WhateveElAttributes extends createElement.JSX.HTMLAttributes {
+ someattribute?: string;
+ onsomeevent?: (this: WhateverElement, ev: WhateverElementEvent) => void;
+}
+
+// Ensure context still works
+const { Provider, Consumer } = createContext({ contextValue: '' });
+
+// Sample component that uses custom elements
+
+class SimpleComponent extends Component {
+ componentProp = 'componentProp';
+ render() {
+ // Render inside div to ensure standard JSX elements still work
+ return (
+ <Provider value={{ contextValue: 'value' }}>
+ <div>
+ <clickable-ce
+ onClick={e => {
+ // `this` should be instance of SimpleComponent since this is an
+ // arrow function
+ console.log(this.componentProp);
+
+ // Validate `currentTarget` is HTMLElement
+ console.log('clicked ', e.currentTarget.style.display);
+ }}
+ ></clickable-ce>
+ <color-picker space="rgb" dir="rtl"></color-picker>
+ <custom-whatever
+ dir="auto" // Inherited prop from HTMLAttributes
+ someattribute="string"
+ onsomeevent={function(e) {
+ // Validate `this` and `e` are the right type
+ console.log('clicked', this.instanceProp, e.eventProp);
+ }}
+ ></custom-whatever>
+
+ {/* Ensure context still works */}
+ <Consumer>
+ {({ contextValue }) => contextValue.toLowerCase()}
+ </Consumer>
+ </div>
+ </Provider>
+ );
+ }
+}
+
+const component = <SimpleComponent />;
diff --git a/preact/test/ts/hoc-test.tsx b/preact/test/ts/hoc-test.tsx
new file mode 100644
index 0000000..455d9e0
--- /dev/null
+++ b/preact/test/ts/hoc-test.tsx
@@ -0,0 +1,50 @@
+import { expect } from 'chai';
+import {
+ createElement,
+ ComponentFactory,
+ ComponentConstructor,
+ Component
+} from '../../';
+import { SimpleComponent, SimpleComponentProps } from './Component-test';
+
+export interface highlightedProps {
+ isHighlighted: boolean;
+}
+
+export function highlighted<T>(
+ Wrappable: ComponentFactory<T>
+): ComponentConstructor<T & highlightedProps> {
+ return class extends Component<T & highlightedProps> {
+ constructor(props: T & highlightedProps) {
+ super(props);
+ }
+
+ render() {
+ let className = this.props.isHighlighted ? 'highlighted' : '';
+ return (
+ <div className={className}>
+ <Wrappable {...this.props} />
+ </div>
+ );
+ }
+
+ toString() {
+ return `Highlighted ${Wrappable.name}`;
+ }
+ };
+}
+
+const HighlightedSimpleComponent = highlighted<SimpleComponentProps>(
+ SimpleComponent
+);
+
+describe('hoc', () => {
+ it('wraps the given component', () => {
+ const highlight = new HighlightedSimpleComponent({
+ initialName: 'initial name',
+ isHighlighted: true
+ });
+
+ expect(highlight.toString()).to.eq('Highlighted SimpleComponent');
+ });
+});
diff --git a/preact/test/ts/jsx-namespacce-test.tsx b/preact/test/ts/jsx-namespacce-test.tsx
new file mode 100644
index 0000000..d6e10bd
--- /dev/null
+++ b/preact/test/ts/jsx-namespacce-test.tsx
@@ -0,0 +1,16 @@
+import { createElement, Component } from '../../';
+
+// declare global JSX types that should not be mixed with preact's internal types
+declare global {
+ namespace JSX {
+ interface Element {
+ unknownProperty: string;
+ }
+ }
+}
+
+class SimpleComponent extends Component {
+ render() {
+ return <div>It works</div>;
+ }
+}
diff --git a/preact/test/ts/preact-global-test.tsx b/preact/test/ts/preact-global-test.tsx
new file mode 100644
index 0000000..e6c3286
--- /dev/null
+++ b/preact/test/ts/preact-global-test.tsx
@@ -0,0 +1,6 @@
+import { createElement } from '../../src';
+
+// Test that preact types are available via the global `preact` namespace.
+
+let component: preact.ComponentChild;
+component = <div>Hello World</div>;
diff --git a/preact/test/ts/preact.tsx b/preact/test/ts/preact.tsx
new file mode 100644
index 0000000..9779d41
--- /dev/null
+++ b/preact/test/ts/preact.tsx
@@ -0,0 +1,297 @@
+import {
+ createElement,
+ render,
+ Component,
+ ComponentProps,
+ FunctionalComponent,
+ AnyComponent,
+ h
+} from '../../';
+
+interface DummyProps {
+ initialInput: string;
+}
+
+interface DummyState {
+ input: string;
+}
+
+class DummyComponent extends Component<DummyProps, DummyState> {
+ constructor(props: DummyProps) {
+ super(props);
+ this.state = {
+ input: `x${this.props}x`
+ };
+ }
+
+ private setRef = (el: AnyComponent<any>) => {
+ console.log(el);
+ };
+
+ render({ initialInput }: DummyProps, { input }: DummyState) {
+ return (
+ <div>
+ <DummerComponent initialInput={initialInput} input={input} />
+ {/* Can specify all Preact attributes on a typed FunctionalComponent */}
+ <ComponentWithChildren
+ initialInput={initialInput}
+ input={input}
+ key="1"
+ ref={this.setRef}
+ />
+ </div>
+ );
+ }
+}
+
+interface DummerComponentProps extends DummyProps, DummyState {}
+
+function DummerComponent({ input, initialInput }: DummerComponentProps) {
+ return (
+ <div>
+ Input: {input}, initial: {initialInput}
+ </div>
+ );
+}
+
+render(createElement('div', { title: 'test', key: '1' }), document);
+render(
+ createElement(DummyComponent, { initialInput: 'The input', key: '1' }),
+ document
+);
+render(
+ createElement(DummerComponent, {
+ initialInput: 'The input',
+ input: 'New input',
+ key: '1'
+ }),
+ document
+);
+render(h('div', { title: 'test', key: '1' }), document);
+render(h(DummyComponent, { initialInput: 'The input', key: '1' }), document);
+render(
+ h(DummerComponent, {
+ initialInput: 'The input',
+ input: 'New input',
+ key: '1'
+ }),
+ document
+);
+
+// Accessing children
+const ComponentWithChildren: FunctionalComponent<DummerComponentProps> = ({
+ input,
+ initialInput,
+ children
+}) => {
+ return (
+ <div>
+ <span>{initialInput}</span>
+ <span>{input}</span>
+ <span>{children}</span>
+ </div>
+ );
+};
+
+const UseOfComponentWithChildren = () => {
+ return (
+ <ComponentWithChildren initialInput="initial" input="input">
+ <span>child 1</span>
+ <span>child 2</span>
+ </ComponentWithChildren>
+ );
+};
+
+// using ref and or jsx
+class ComponentUsingRef extends Component<any, any> {
+ private array: string[];
+ private refs: (Element | null)[] = [];
+
+ constructor() {
+ super();
+ this.array = ['1', '2'];
+ }
+
+ render() {
+ this.refs = [];
+ return (
+ <div jsx>
+ {this.array.map(el => (
+ <span ref={this.setRef}>{el}</span>
+ ))}
+
+ {/* Can specify Preact attributes on a component */}
+ <DummyComponent initialInput="1" key="1" ref={this.setRef} />
+ </div>
+ );
+ }
+
+ private setRef = (el: Element | null) => {
+ this.refs.push(el);
+ };
+}
+
+// using lifecycles
+class ComponentWithLifecycle extends Component<DummyProps, DummyState> {
+ render() {
+ return <div>Hi</div>;
+ }
+
+ componentWillMount() {
+ console.log('componentWillMount');
+ }
+
+ componentDidMount() {
+ console.log('componentDidMount');
+ }
+
+ componentWillUnmount() {
+ console.log('componentWillUnmount');
+ }
+
+ componentWillReceiveProps(nextProps: DummyProps, nextCtx: any) {
+ const { initialInput } = nextProps;
+ console.log('componentWillReceiveProps', initialInput, nextCtx);
+ }
+
+ shouldComponentUpdate(
+ nextProps: DummyProps,
+ nextState: DummyState,
+ nextContext: any
+ ) {
+ return false;
+ }
+
+ componentWillUpdate(
+ nextProps: DummyProps,
+ nextState: DummyState,
+ nextContext: any
+ ) {
+ console.log('componentWillUpdate', nextProps, nextState, nextContext);
+ }
+
+ componentDidUpdate(
+ previousProps: DummyProps,
+ previousState: DummyState,
+ previousContext: any
+ ) {
+ console.log(
+ 'componentDidUpdate',
+ previousProps,
+ previousState,
+ previousContext
+ );
+ }
+}
+
+// Default props: JSX.LibraryManagedAttributes
+
+class DefaultProps extends Component<{ text: string; bool: boolean }> {
+ static defaultProps = {
+ text: 'hello'
+ };
+
+ render() {
+ return <div>{this.props.text}</div>;
+ }
+}
+
+const d1 = <DefaultProps bool={false} text="foo" />;
+const d2 = <DefaultProps bool={false} />;
+
+class DefaultPropsWithUnion extends Component<
+ { default: boolean } & (
+ | {
+ type: 'string';
+ str: string;
+ }
+ | {
+ type: 'number';
+ num: number;
+ }
+ )
+> {
+ static defaultProps = {
+ default: true
+ };
+
+ render() {
+ return <div />;
+ }
+}
+
+const d3 = <DefaultPropsWithUnion type="string" str={'foo'} />;
+const d4 = <DefaultPropsWithUnion type="number" num={0xf00} />;
+const d5 = <DefaultPropsWithUnion type="string" str={'foo'} default={false} />;
+const d6 = <DefaultPropsWithUnion type="number" num={0xf00} default={false} />;
+
+class DefaultUnion extends Component<
+ | {
+ type: 'number';
+ num: number;
+ }
+ | {
+ type: 'string';
+ str: string;
+ }
+> {
+ static defaultProps = {
+ type: 'number',
+ num: 1
+ };
+
+ render() {
+ return <div />;
+ }
+}
+
+const d7 = <DefaultUnion />;
+const d8 = <DefaultUnion num={1} />;
+const d9 = <DefaultUnion type="number" />;
+const d10 = <DefaultUnion type="string" str="foo" />;
+
+class ComponentWithDefaultProps extends Component<{ value: string }> {
+ static defaultProps = { value: '' };
+ render() {
+ return <div>{this.props.value}</div>;
+ }
+}
+
+const withDefaultProps = <ComponentWithDefaultProps />;
+
+interface PartialState {
+ foo: string;
+ bar: number;
+}
+
+class ComponentWithPartialSetState extends Component<{}, PartialState> {
+ render({}, { foo, bar }: PartialState) {
+ return (
+ <button onClick={() => this.handleClick('foo')}>
+ {foo}-{bar}
+ </button>
+ );
+ }
+ handleClick = (value: keyof PartialState) => {
+ this.setState({ [value]: 'updated' });
+ };
+}
+
+const withPartialSetState = <ComponentWithPartialSetState />;
+
+let functionalProps: ComponentProps<typeof DummerComponent> = {
+ initialInput: '',
+ input: ''
+};
+
+let classProps: ComponentProps<typeof DummyComponent> = {
+ initialInput: ''
+};
+
+let elementProps: ComponentProps<'button'> = {
+ type: 'button'
+};
+
+// Typing of style property
+const acceptsNumberAsLength = <div style={{ marginTop: 20 }} />;
+const acceptsStringAsLength = <div style={{ marginTop: '20px' }} />;
diff --git a/preact/test/ts/refs.tsx b/preact/test/ts/refs.tsx
new file mode 100644
index 0000000..9edb730
--- /dev/null
+++ b/preact/test/ts/refs.tsx
@@ -0,0 +1,76 @@
+import {
+ createElement,
+ Component,
+ createRef,
+ FunctionalComponent,
+ Fragment,
+ RefObject,
+ RefCallback
+} from '../../';
+
+// Test Fixtures
+const Foo: FunctionalComponent = () => <span>Foo</span>;
+class Bar extends Component {
+ render() {
+ return <span>Bar</span>;
+ }
+}
+
+// Using Refs
+class CallbackRef extends Component {
+ divRef: RefCallback<HTMLDivElement> = div => {
+ if (div !== null) {
+ console.log(div.tagName);
+ }
+ };
+ fooRef: RefCallback<Component> = foo => {
+ if (foo !== null) {
+ console.log(foo.base);
+ }
+ };
+ barRef: RefCallback<Bar> = bar => {
+ if (bar !== null) {
+ console.log(bar.base);
+ }
+ };
+
+ render() {
+ return (
+ <Fragment>
+ <div ref={this.divRef} />
+ <Foo ref={this.fooRef} />
+ <Bar ref={this.barRef} />
+ </Fragment>
+ );
+ }
+}
+
+class CreateRefComponent extends Component {
+ private divRef: RefObject<HTMLDivElement> = createRef();
+ private fooRef: RefObject<Component> = createRef();
+ private barRef: RefObject<Bar> = createRef();
+
+ componentDidMount() {
+ if (this.divRef.current != null) {
+ console.log(this.divRef.current.tagName);
+ }
+
+ if (this.fooRef.current != null) {
+ console.log(this.fooRef.current.base);
+ }
+
+ if (this.barRef.current != null) {
+ console.log(this.barRef.current.base);
+ }
+ }
+
+ render() {
+ return (
+ <Fragment>
+ <div ref={this.divRef} />
+ <Foo ref={this.fooRef} />
+ <Bar ref={this.barRef} />
+ </Fragment>
+ );
+ }
+}
diff --git a/preact/test/ts/tsconfig.json b/preact/test/ts/tsconfig.json
new file mode 100644
index 0000000..36621f3
--- /dev/null
+++ b/preact/test/ts/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "target": "es6",
+ "module": "es6",
+ "moduleResolution": "node",
+ "lib": ["es6", "dom"],
+ "strict": true,
+ "typeRoots": ["../../"],
+ "types": [],
+ "forceConsistentCasingInFileNames": true,
+ "jsx": "react",
+ "jsxFactory": "createElement"
+ },
+ "include": ["./**/*.ts", "./**/*.tsx"]
+}
diff --git a/resolve-pathname/.eslintrc b/resolve-pathname/.eslintrc
new file mode 100644
index 0000000..66b819c
--- /dev/null
+++ b/resolve-pathname/.eslintrc
@@ -0,0 +1,7 @@
+{
+ "env": {
+ "shared-node-browser": true
+ },
+ "extends": ["eslint:recommended"],
+ "parser": "babel-eslint"
+}
diff --git a/resolve-pathname/.gitignore b/resolve-pathname/.gitignore
new file mode 100644
index 0000000..f52c030
--- /dev/null
+++ b/resolve-pathname/.gitignore
@@ -0,0 +1,5 @@
+/node_modules/
+
+/cjs/
+/esm/
+/umd/
diff --git a/resolve-pathname/.prettierignore b/resolve-pathname/.prettierignore
new file mode 100644
index 0000000..ec6d3cd
--- /dev/null
+++ b/resolve-pathname/.prettierignore
@@ -0,0 +1 @@
+package.json
diff --git a/resolve-pathname/.size-snapshot.json b/resolve-pathname/.size-snapshot.json
new file mode 100644
index 0000000..d7c8ade
--- /dev/null
+++ b/resolve-pathname/.size-snapshot.json
@@ -0,0 +1,26 @@
+{
+ "esm/resolve-pathname.js": {
+ "bundled": 1764,
+ "minified": 722,
+ "gzipped": 404,
+ "treeshaked": {
+ "rollup": {
+ "code": 0,
+ "import_statements": 0
+ },
+ "webpack": {
+ "code": 951
+ }
+ }
+ },
+ "umd/resolve-pathname.js": {
+ "bundled": 2148,
+ "minified": 795,
+ "gzipped": 465
+ },
+ "umd/resolve-pathname.min.js": {
+ "bundled": 2148,
+ "minified": 795,
+ "gzipped": 465
+ }
+}
diff --git a/resolve-pathname/.travis.yml b/resolve-pathname/.travis.yml
new file mode 100644
index 0000000..afc599e
--- /dev/null
+++ b/resolve-pathname/.travis.yml
@@ -0,0 +1,27 @@
+language: node_js
+node_js: node
+cache: npm
+env:
+- TEST_ENV=cjs BUILD_ENV=cjs
+- TEST_ENV=umd BUILD_ENV=umd
+- TEST_ENV=source
+before_script:
+- ([[ -z "$BUILD_ENV" ]] || npm run build)
+script:
+- npm run lint
+- npm test
+jobs:
+ include:
+ - stage: Release
+ if: tag =~ ^v[0-9]
+ env: NPM_TAG=$([[ "$TRAVIS_TAG" == *-* ]] && echo "next" || echo "latest")
+ script: echo "Releasing $TRAVIS_TAG to npm with tag \"$NPM_TAG\" ..."
+ deploy:
+ provider: npm
+ skip_cleanup: true
+ tag: "$NPM_TAG"
+ email: npm@mjackson.me
+ api_key:
+ secure: FFo4kATFfuGW7IhODQr6PaqxrwCzAyQd3o3EU3irJkfA/PAMVg8Ccd8LeCFOZQZ0Lf1xMwGnQaaw9a3MQBukIXTyX7gzuXfq0PFH3w4gxQbLiiG6DKX+vIvC9dm0yuELfIzfq2znqEtK0mmGKT6y1ZYUqYe+BeQkaksD3cBfVaK5UVCg6ktratfnPtlvPoErRmn6yR8BydQPw75p10ofAkRf/EPfJ1q6fEpSODDs88/I5WO1s3XldIycSw+x2xc49p+7CFx1whU4vZ8MHp9ccFIv16WPCaSQ77Gnkk2FSUXH2+swGH8+5b8PD2WunDvrTM6dq1FOrqhliu9UUgNUrWW2Zi2CymbYtG/S7AxJB4S7+zTCkdThjIkgKVIknMglG/d7Fa0Q+tAvU7/KkyMAYCCXl+ntbVuBl36SpxgqnWo8N5BJfWR0J2SwKqaKXk1Bj9IKrB+zwVnZW982V3BmaUvMqfkA/lHaw0urRy/fdtepWE4ax8nLAMkWjP9rOOPn6GUjcaiBz8DrdZ1Bz1ytvlkLS6xrbyxW3iLfkAvWB26RB/nD2y/L896ciNLx6rG/ZPM7Iy8aQtxKs6RrNcvHCdjD/77nDqh+kBzsCYApF2p/Mmyd+GPqM9N3NlI+jznYvNrpCOxN79zz12lj+w3NqBA0/TFed1TrLHPHzAMx38Q=
+ on:
+ tags: true
diff --git a/resolve-pathname/LICENSE b/resolve-pathname/LICENSE
new file mode 100644
index 0000000..54ff40f
--- /dev/null
+++ b/resolve-pathname/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Michael Jackson 2016-2018
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/resolve-pathname/README.md b/resolve-pathname/README.md
new file mode 100644
index 0000000..72d57f3
--- /dev/null
+++ b/resolve-pathname/README.md
@@ -0,0 +1,64 @@
+# resolve-pathname [![Travis][build-badge]][build] [![npm package][npm-badge]][npm]
+
+[build-badge]: https://img.shields.io/travis/mjackson/resolve-pathname/master.svg?style=flat-square
+[build]: https://travis-ci.org/mjackson/resolve-pathname
+[npm-badge]: https://img.shields.io/npm/v/resolve-pathname.svg?style=flat-square
+[npm]: https://www.npmjs.org/package/resolve-pathname
+
+[resolve-pathname](https://www.npmjs.com/package/resolve-pathname) resolves URL pathnames identical to the way browsers resolve the pathname of an `<a href>` value. The goals are:
+
+- 100% compatibility with browser pathname resolution
+- Pure JavaScript implementation (no DOM dependency)
+
+## Installation
+
+Using [npm](https://www.npmjs.com/):
+
+ $ npm install --save resolve-pathname
+
+Then, use as you would anything else:
+
+```js
+// using ES6 modules
+import resolvePathname from 'resolve-pathname';
+
+// using CommonJS modules
+var resolvePathname = require('resolve-pathname');
+```
+
+The UMD build is also available on [unpkg](https://unpkg.com):
+
+```html
+<script src="https://unpkg.com/resolve-pathname"></script>
+```
+
+You can find the library on `window.resolvePathname`.
+
+## Usage
+
+```js
+import resolvePathname from 'resolve-pathname';
+
+// Simply pass the pathname you'd like to resolve. Second
+// argument is the path we're coming from, or the current
+// pathname. It defaults to "/".
+resolvePathname('about', '/company/jobs'); // /company/about
+resolvePathname('../jobs', '/company/team/ceo'); // /company/jobs
+resolvePathname('about'); // /about
+resolvePathname('/about'); // /about
+
+// Index paths (with a trailing slash) are also supported and
+// work the same way as browsers.
+resolvePathname('about', '/company/info/'); // /company/info/about
+
+// In browsers, it's easy to resolve a URL pathname relative to
+// the current page. Just use window.location! e.g. if
+// window.location.pathname == '/company/team/ceo' then
+resolvePathname('cto', window.location.pathname); // /company/team/cto
+resolvePathname('../jobs', window.location.pathname); // /company/jobs
+```
+
+## Prior Work
+
+- [url.resolve](https://nodejs.org/api/url.html#url_url_resolve_from_to) - node's `url.resolve` implementation for full URLs
+- [resolve-url](https://www.npmjs.com/package/resolve-url) - A DOM-dependent implementation of the same algorithm
diff --git a/resolve-pathname/index.js b/resolve-pathname/index.js
new file mode 100644
index 0000000..0c7b6b1
--- /dev/null
+++ b/resolve-pathname/index.js
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./cjs/resolve-pathname.min.js');
+} else {
+ module.exports = require('./cjs/resolve-pathname.js');
+}
diff --git a/resolve-pathname/jest.config.js b/resolve-pathname/jest.config.js
new file mode 100644
index 0000000..54ea5c1
--- /dev/null
+++ b/resolve-pathname/jest.config.js
@@ -0,0 +1,19 @@
+let mappedModule;
+switch (process.env.TEST_ENV) {
+ case 'cjs':
+ mappedModule = '<rootDir>/cjs/resolve-pathname.js';
+ break;
+ case 'umd':
+ mappedModule = '<rootDir>/umd/resolve-pathname.js';
+ break;
+ default:
+ mappedModule = '<rootDir>/modules/index.js';
+}
+
+module.exports = {
+ moduleNameMapper: {
+ '^resolve-pathname$': mappedModule
+ },
+ testMatch: ['**/__tests__/**/*-test.js'],
+ testURL: 'http://localhost/'
+};
diff --git a/resolve-pathname/modules/.babelrc b/resolve-pathname/modules/.babelrc
new file mode 100644
index 0000000..0ef5ffc
--- /dev/null
+++ b/resolve-pathname/modules/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["@babel/env"]
+}
diff --git a/resolve-pathname/modules/__tests__/.eslintrc b/resolve-pathname/modules/__tests__/.eslintrc
new file mode 100644
index 0000000..55f121d
--- /dev/null
+++ b/resolve-pathname/modules/__tests__/.eslintrc
@@ -0,0 +1,5 @@
+{
+ "env": {
+ "jest": true
+ }
+}
diff --git a/resolve-pathname/modules/__tests__/resolvePathname-test.js b/resolve-pathname/modules/__tests__/resolvePathname-test.js
new file mode 100644
index 0000000..1cb272c
--- /dev/null
+++ b/resolve-pathname/modules/__tests__/resolvePathname-test.js
@@ -0,0 +1,89 @@
+import resolvePathname from 'resolve-pathname';
+
+describe('resolvePathname', () => {
+ it('works when from is not given', () => {
+ expect(resolvePathname('c')).toEqual('c');
+ });
+
+ it('works when from is relative', () => {
+ expect(resolvePathname('c', 'a/b')).toEqual('a/c');
+ });
+
+ it('works when to is absolute', () => {
+ expect(resolvePathname('/c', '/a/b')).toEqual('/c');
+ });
+
+ it('works when to is empty', () => {
+ expect(resolvePathname('', '/a/b')).toEqual('/a/b');
+ });
+
+ it('works when to is a sibling of the parent', () => {
+ expect(resolvePathname('../c', '/a/b')).toEqual('/c');
+ });
+
+ it('works when to is a sibling path', () => {
+ expect(resolvePathname('c', '/a/b')).toEqual('/a/c');
+ });
+
+ it('works when from is an index path', () => {
+ expect(resolvePathname('c', '/a/')).toEqual('/a/c');
+ });
+
+ it('works when to points to the parent directory', () => {
+ expect(resolvePathname('..', '/a/b')).toEqual('/');
+ });
+
+ // Copied from node's test/parallel/test-url.js
+ const nodeURLResolveTestCases = [
+ ['/foo/bar/baz', 'quux', '/foo/bar/quux'],
+ ['/foo/bar/baz', 'quux/asdf', '/foo/bar/quux/asdf'],
+ ['/foo/bar/baz', 'quux/baz', '/foo/bar/quux/baz'],
+ ['/foo/bar/baz', '../quux/baz', '/foo/quux/baz'],
+ ['/foo/bar/baz', '/bar', '/bar'],
+ ['/foo/bar/baz/', 'quux', '/foo/bar/baz/quux'],
+ ['/foo/bar/baz/', 'quux/baz', '/foo/bar/baz/quux/baz'],
+ ['/foo/bar/baz', '../../../../../../../../quux/baz', '/quux/baz'],
+ ['/foo/bar/baz', '../../../../../../../quux/baz', '/quux/baz'],
+ ['/foo', '.', '/'],
+ ['/foo', '..', '/'],
+ ['/foo/', '.', '/foo/'],
+ ['/foo/', '..', '/'],
+ ['/foo/bar', '.', '/foo/'],
+ ['/foo/bar', '..', '/'],
+ ['/foo/bar/', '.', '/foo/bar/'],
+ ['/foo/bar/', '..', '/foo/'],
+ ['foo/bar', '../../../baz', '../../baz'],
+ ['foo/bar/', '../../../baz', '../baz'],
+ //['http://example.com/b//c//d;p?q#blarg', 'https:#hash2', 'https:///#hash2'],
+ //['http://example.com/b//c//d;p?q#blarg',
+ //'https:/p/a/t/h?s#hash2',
+ //'https://p/a/t/h?s#hash2'],
+ //['http://example.com/b//c//d;p?q#blarg',
+ //'https://u:p@h.com/p/a/t/h?s#hash2',
+ //'https://u:p@h.com/p/a/t/h?s#hash2'],
+ //['http://example.com/b//c//d;p?q#blarg',
+ //'https:/a/b/c/d',
+ //'https://a/b/c/d'],
+ //['http://example.com/b//c//d;p?q#blarg',
+ //'http:#hash2',
+ //'http://example.com/b//c//d;p?q#hash2'],
+ //['http://example.com/b//c//d;p?q#blarg',
+ //'http:/p/a/t/h?s#hash2',
+ //'http://example.com/p/a/t/h?s#hash2'],
+ //['http://example.com/b//c//d;p?q#blarg',
+ //'http://u:p@h.com/p/a/t/h?s#hash2',
+ //'http://u:p@h.com/p/a/t/h?s#hash2'],
+ //['http://example.com/b//c//d;p?q#blarg',
+ //'http:/a/b/c/d',
+ //'http://example.com/a/b/c/d'],
+ ['/foo/bar/baz', '/../etc/passwd', '/etc/passwd']
+ //['http://localhost', 'file:///Users/foo', 'file:///Users/foo'],
+ //['http://localhost', 'file://foo/Users', 'file://foo/Users']
+ ];
+
+ nodeURLResolveTestCases.forEach(([from, to, expected]) => {
+ it(`resolvePathname('${to}', '${from}') == '${expected}'`, () => {
+ expect(resolvePathname(to, from)).toEqual(expected);
+ });
+ });
+});
diff --git a/resolve-pathname/modules/index.js b/resolve-pathname/modules/index.js
new file mode 100644
index 0000000..77afb3e
--- /dev/null
+++ b/resolve-pathname/modules/index.js
@@ -0,0 +1,75 @@
+function isAbsolute(pathname) {
+ return pathname.charAt(0) === '/';
+}
+
+// About 1.5x faster than the two-arg version of Array#splice()
+function spliceOne(list, index) {
+ for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {
+ list[i] = list[k];
+ }
+
+ list.pop();
+}
+
+// This implementation is based heavily on node's url.parse
+function resolvePathname(to, from) {
+ if (from === undefined) from = '';
+
+ var toParts = (to && to.split('/')) || [];
+ var fromParts = (from && from.split('/')) || [];
+
+ var isToAbs = to && isAbsolute(to);
+ var isFromAbs = from && isAbsolute(from);
+ var mustEndAbs = isToAbs || isFromAbs;
+
+ if (to && isAbsolute(to)) {
+ // to is absolute
+ fromParts = toParts;
+ } else if (toParts.length) {
+ // to is relative, drop the filename
+ fromParts.pop();
+ fromParts = fromParts.concat(toParts);
+ }
+
+ if (!fromParts.length) return '/';
+
+ var hasTrailingSlash;
+ if (fromParts.length) {
+ var last = fromParts[fromParts.length - 1];
+ hasTrailingSlash = last === '.' || last === '..' || last === '';
+ } else {
+ hasTrailingSlash = false;
+ }
+
+ var up = 0;
+ for (var i = fromParts.length; i >= 0; i--) {
+ var part = fromParts[i];
+
+ if (part === '.') {
+ spliceOne(fromParts, i);
+ } else if (part === '..') {
+ spliceOne(fromParts, i);
+ up++;
+ } else if (up) {
+ spliceOne(fromParts, i);
+ up--;
+ }
+ }
+
+ if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');
+
+ if (
+ mustEndAbs &&
+ fromParts[0] !== '' &&
+ (!fromParts[0] || !isAbsolute(fromParts[0]))
+ )
+ fromParts.unshift('');
+
+ var result = fromParts.join('/');
+
+ if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';
+
+ return result;
+}
+
+export default resolvePathname;
diff --git a/resolve-pathname/package-lock.json b/resolve-pathname/package-lock.json
new file mode 100644
index 0000000..9563857
--- /dev/null
+++ b/resolve-pathname/package-lock.json
@@ -0,0 +1,9342 @@
+{
+ "name": "resolve-pathname",
+ "version": "3.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.6.tgz",
+ "integrity": "sha512-Hz6PJT6e44iUNpAn8AoyAs6B3bl60g7MJQaI0rZEar6ECzh6+srYO1xlIdssio34mPaUtAb1y+XlkkSJzok3yw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.1.6",
+ "@babel/helpers": "^7.1.5",
+ "@babel/parser": "^7.1.6",
+ "@babel/template": "^7.1.2",
+ "@babel/traverse": "^7.1.6",
+ "@babel/types": "^7.1.6",
+ "convert-source-map": "^1.1.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.10",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
+ "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "json5": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.6.tgz",
+ "integrity": "sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.1.6",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.10",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+ "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
+ "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
+ "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+ "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
+ "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
+ "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz",
+ "integrity": "sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
+ "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-wrap-function": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz",
+ "integrity": "sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+ "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
+ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz",
+ "integrity": "sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.1.5.tgz",
+ "integrity": "sha512-2jkcdL02ywNBry1YNFAH/fViq4fXG0vdckHqeJk+75fpQ2OH+Az6076tX/M0835zA45E0Cqa6pV5Kiv9YOqjEg==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.2",
+ "@babel/traverse": "^7.1.5",
+ "@babel/types": "^7.1.5"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.6.tgz",
+ "integrity": "sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ==",
+ "dev": true
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz",
+ "integrity": "sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0",
+ "@babel/plugin-syntax-async-generators": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz",
+ "integrity": "sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz",
+ "integrity": "sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz",
+ "integrity": "sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz",
+ "integrity": "sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.2.0"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz",
+ "integrity": "sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz",
+ "integrity": "sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz",
+ "integrity": "sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz",
+ "integrity": "sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz",
+ "integrity": "sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz",
+ "integrity": "sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz",
+ "integrity": "sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.1.5.tgz",
+ "integrity": "sha512-jlYcDrz+5ayWC7mxgpn1Wj8zj0mmjCT2w0mPIMSwO926eXBRxpEgoN/uQVRBfjtr8ayjcmS+xk2G1jaP8JjMJQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz",
+ "integrity": "sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-define-map": "^7.1.0",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz",
+ "integrity": "sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz",
+ "integrity": "sha512-Mb9M4DGIOspH1ExHOUnn2UUXFOyVTiX84fXCd+6B5iWrQg/QMeeRmSwpZ9lnjYLSXtZwiw80ytVMr3zue0ucYw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz",
+ "integrity": "sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz",
+ "integrity": "sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz",
+ "integrity": "sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz",
+ "integrity": "sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz",
+ "integrity": "sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz",
+ "integrity": "sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz",
+ "integrity": "sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz",
+ "integrity": "sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.1.3.tgz",
+ "integrity": "sha512-PvTxgjxQAq4pvVUZF3mD5gEtVDuId8NtWkJsZLEJZMZAW3TvgQl1pmydLLN1bM8huHFVVU43lf0uvjQj9FRkKw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz",
+ "integrity": "sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
+ "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz",
+ "integrity": "sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz",
+ "integrity": "sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "^7.1.0",
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz",
+ "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.13.3"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz",
+ "integrity": "sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz",
+ "integrity": "sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz",
+ "integrity": "sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz",
+ "integrity": "sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz",
+ "integrity": "sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz",
+ "integrity": "sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.6.tgz",
+ "integrity": "sha512-YIBfpJNQMBkb6MCkjz/A9J76SNCSuGVamOVBgoUkLzpJD/z8ghHi9I42LQ4pulVX68N/MmImz6ZTixt7Azgexw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.1.0",
+ "@babel/plugin-proposal-json-strings": "^7.0.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.0.0",
+ "@babel/plugin-syntax-async-generators": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.0.0",
+ "@babel/plugin-transform-arrow-functions": "^7.0.0",
+ "@babel/plugin-transform-async-to-generator": "^7.1.0",
+ "@babel/plugin-transform-block-scoped-functions": "^7.0.0",
+ "@babel/plugin-transform-block-scoping": "^7.1.5",
+ "@babel/plugin-transform-classes": "^7.1.0",
+ "@babel/plugin-transform-computed-properties": "^7.0.0",
+ "@babel/plugin-transform-destructuring": "^7.0.0",
+ "@babel/plugin-transform-dotall-regex": "^7.0.0",
+ "@babel/plugin-transform-duplicate-keys": "^7.0.0",
+ "@babel/plugin-transform-exponentiation-operator": "^7.1.0",
+ "@babel/plugin-transform-for-of": "^7.0.0",
+ "@babel/plugin-transform-function-name": "^7.1.0",
+ "@babel/plugin-transform-literals": "^7.0.0",
+ "@babel/plugin-transform-modules-amd": "^7.1.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.1.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.0.0",
+ "@babel/plugin-transform-modules-umd": "^7.1.0",
+ "@babel/plugin-transform-new-target": "^7.0.0",
+ "@babel/plugin-transform-object-super": "^7.1.0",
+ "@babel/plugin-transform-parameters": "^7.1.0",
+ "@babel/plugin-transform-regenerator": "^7.0.0",
+ "@babel/plugin-transform-shorthand-properties": "^7.0.0",
+ "@babel/plugin-transform-spread": "^7.0.0",
+ "@babel/plugin-transform-sticky-regex": "^7.0.0",
+ "@babel/plugin-transform-template-literals": "^7.0.0",
+ "@babel/plugin-transform-typeof-symbol": "^7.0.0",
+ "@babel/plugin-transform-unicode-regex": "^7.0.0",
+ "browserslist": "^4.1.0",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.3.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz",
+ "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.1.2",
+ "@babel/types": "^7.1.2"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.6.tgz",
+ "integrity": "sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.1.6",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/parser": "^7.1.6",
+ "@babel/types": "^7.1.6",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.10"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
+ "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.6.tgz",
+ "integrity": "sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.10",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.39",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "10.12.11",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.11.tgz",
+ "integrity": "sha512-3iIOhNiPGTdcUNVCv9e5G7GotfvJJe2pc9w2UgDXlUwnxSZ3RgcUocIU+xYm+rTU54jIKih998QE4dMOyMN1NQ==",
+ "dev": true
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
+ "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/wast-parser": "1.7.11"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
+ "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
+ "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
+ "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
+ "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.7.11"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
+ "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
+ "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
+ "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
+ "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-buffer": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/wasm-gen": "1.7.11"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
+ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
+ "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
+ "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
+ "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-buffer": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/helper-wasm-section": "1.7.11",
+ "@webassemblyjs/wasm-gen": "1.7.11",
+ "@webassemblyjs/wasm-opt": "1.7.11",
+ "@webassemblyjs/wasm-parser": "1.7.11",
+ "@webassemblyjs/wast-printer": "1.7.11"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
+ "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/ieee754": "1.7.11",
+ "@webassemblyjs/leb128": "1.7.11",
+ "@webassemblyjs/utf8": "1.7.11"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
+ "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-buffer": "1.7.11",
+ "@webassemblyjs/wasm-gen": "1.7.11",
+ "@webassemblyjs/wasm-parser": "1.7.11"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
+ "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-api-error": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/ieee754": "1.7.11",
+ "@webassemblyjs/leb128": "1.7.11",
+ "@webassemblyjs/utf8": "1.7.11"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
+ "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/floating-point-hex-parser": "1.7.11",
+ "@webassemblyjs/helper-api-error": "1.7.11",
+ "@webassemblyjs/helper-code-frame": "1.7.11",
+ "@webassemblyjs/helper-fsm": "1.7.11",
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
+ "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/wast-parser": "1.7.11",
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "@xtuc/long": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
+ "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
+ "dev": true
+ },
+ "abab": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
+ "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
+ "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==",
+ "dev": true
+ },
+ "acorn-dynamic-import": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
+ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-globals": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
+ "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.1",
+ "acorn-walk": "^6.0.1"
+ }
+ },
+ "acorn-jsx": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+ "dev": true
+ },
+ "acorn-walk": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
+ "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz",
+ "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
+ "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
+ "dev": true
+ },
+ "ajv-keywords": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "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==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "append-transform": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+ "dev": true,
+ "requires": {
+ "default-require-extensions": "^1.0.0"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-equal": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "babel-core": {
+ "version": "7.0.0-bridge.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+ "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
+ "dev": true
+ },
+ "babel-eslint": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz",
+ "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.0.0",
+ "@babel/traverse": "^7.0.0",
+ "@babel/types": "^7.0.0",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "^1.0.0"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-jest": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz",
+ "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-istanbul": "^4.1.6",
+ "babel-preset-jest": "^23.2.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "4.1.6",
+ "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
+ "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0",
+ "find-up": "^2.1.0",
+ "istanbul-lib-instrument": "^1.10.1",
+ "test-exclude": "^4.2.1"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz",
+ "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=",
+ "dev": true
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+ "dev": true
+ },
+ "babel-preset-jest": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz",
+ "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-jest-hoist": "^23.2.0",
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ },
+ "dependencies": {
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+ "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-process-hrtime": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
+ "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==",
+ "dev": true
+ },
+ "browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "browserslist": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.5.tgz",
+ "integrity": "sha512-z9ZhGc3d9e/sJ9dIx5NFXkKoaiQTnrvrMsN3R1fGb1tkWWNSz12UewJn9TNxGo1l7J23h0MRaPmk7jfeTZYs1w==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30000912",
+ "electron-to-chromium": "^1.3.86",
+ "node-releases": "^1.0.5"
+ }
+ },
+ "bser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz",
+ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=",
+ "dev": true,
+ "requires": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "11.3.1",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz",
+ "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.1",
+ "chownr": "^1.0.1",
+ "figgy-pudding": "^3.1.0",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.1.11",
+ "lru-cache": "^4.1.3",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.2",
+ "ssri": "^6.0.0",
+ "unique-filename": "^1.1.0",
+ "y18n": "^4.0.0"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "^0.2.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ }
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000912",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000912.tgz",
+ "integrity": "sha512-M3zAtV36U+xw5mMROlTXpAHClmPAor6GPKAMD5Yi7glCB5sbMPFtnQ3rGpk4XqPdUrrTIaVYSJZxREZWNy8QJg==",
+ "dev": true
+ },
+ "capture-exit": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz",
+ "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=",
+ "dev": true,
+ "requires": {
+ "rsvp": "^3.3.3"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.0",
+ "braces": "^2.3.0",
+ "fsevents": "^1.2.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "lodash.debounce": "^4.0.8",
+ "normalize-path": "^2.1.1",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0",
+ "upath": "^1.0.5"
+ },
+ "dependencies": {
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
+ "dev": true
+ },
+ "chrome-trace-event": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
+ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.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
+ },
+ "combined-stream": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "cssom": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
+ "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz",
+ "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
+ "dev": true,
+ "requires": {
+ "cssom": "0.3.x"
+ }
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "data-urls": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
+ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "whatwg-mimetype": "^2.2.0",
+ "whatwg-url": "^7.0.0"
+ },
+ "dependencies": {
+ "whatwg-url": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
+ "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ }
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "default-require-extensions": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+ "dev": true,
+ "requires": {
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "dev": true
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "domexception": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+ "dev": true,
+ "requires": {
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
+ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.86",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.86.tgz",
+ "integrity": "sha512-BcmXOu37FCPxrrh0wyKgKi5dAjIu2ohxN5ptapkLPKRC3IBK2NeIwh9n1x/8HzSRQiEKamJkDce1ZgOGgEX9iw==",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "tapable": "^1.0.0"
+ }
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
+ "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
+ "dev": true,
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ }
+ }
+ },
+ "eslint": {
+ "version": "5.9.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz",
+ "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.5.3",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^4.0.0",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^4.0.0",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.1.0",
+ "is-resolvable": "^1.1.0",
+ "js-yaml": "^3.12.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.5",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^5.0.2",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
+ "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
+ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
+ "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
+ "dev": true
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
+ "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.2",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
+ "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "exec-sh": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
+ "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==",
+ "dev": true,
+ "requires": {
+ "merge": "^1.2.0"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "expect": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz",
+ "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "jest-diff": "^23.6.0",
+ "jest-get-type": "^22.1.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fb-watchman": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
+ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
+ "dev": true,
+ "requires": {
+ "bser": "^2.0.0"
+ }
+ },
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+ "dev": true
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fileset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
+ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.3",
+ "minimatch": "^3.0.3"
+ }
+ },
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
+ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^1.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
+ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.4"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": 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"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "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"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "globals": {
+ "version": "11.9.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz",
+ "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "dev": true
+ },
+ "gzip-size": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz",
+ "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1",
+ "pify": "^3.0.0"
+ }
+ },
+ "handlebars": {
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
+ "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.5.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "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==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "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
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "html-encoding-sniffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+ "dev": true,
+ "requires": {
+ "whatwg-encoding": "^1.0.1"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+ "dev": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "import-local": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
+ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^2.0.0",
+ "resolve-cwd": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ }
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz",
+ "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.0",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.10",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.1.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+ "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+ "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.0.0"
+ }
+ }
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.5.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-generator-fn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz",
+ "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istanbul-api": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz",
+ "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.1.4",
+ "fileset": "^2.0.2",
+ "istanbul-lib-coverage": "^1.2.1",
+ "istanbul-lib-hook": "^1.2.2",
+ "istanbul-lib-instrument": "^1.10.2",
+ "istanbul-lib-report": "^1.1.5",
+ "istanbul-lib-source-maps": "^1.2.6",
+ "istanbul-reports": "^1.5.1",
+ "js-yaml": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "once": "^1.4.0"
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
+ "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==",
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz",
+ "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==",
+ "dev": true,
+ "requires": {
+ "append-transform": "^0.4.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
+ "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==",
+ "dev": true,
+ "requires": {
+ "babel-generator": "^6.18.0",
+ "babel-template": "^6.16.0",
+ "babel-traverse": "^6.18.0",
+ "babel-types": "^6.18.0",
+ "babylon": "^6.18.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "semver": "^5.3.0"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz",
+ "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "path-parse": "^1.0.5",
+ "supports-color": "^3.1.2"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz",
+ "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.6.1",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz",
+ "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==",
+ "dev": true,
+ "requires": {
+ "handlebars": "^4.0.3"
+ }
+ },
+ "jest": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz",
+ "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==",
+ "dev": true,
+ "requires": {
+ "import-local": "^1.0.0",
+ "jest-cli": "^23.6.0"
+ },
+ "dependencies": {
+ "jest-cli": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz",
+ "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.1.11",
+ "import-local": "^1.0.0",
+ "is-ci": "^1.0.10",
+ "istanbul-api": "^1.3.1",
+ "istanbul-lib-coverage": "^1.2.0",
+ "istanbul-lib-instrument": "^1.10.1",
+ "istanbul-lib-source-maps": "^1.2.4",
+ "jest-changed-files": "^23.4.2",
+ "jest-config": "^23.6.0",
+ "jest-environment-jsdom": "^23.4.0",
+ "jest-get-type": "^22.1.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve-dependencies": "^23.6.0",
+ "jest-runner": "^23.6.0",
+ "jest-runtime": "^23.6.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "jest-watcher": "^23.4.0",
+ "jest-worker": "^23.2.0",
+ "micromatch": "^2.3.11",
+ "node-notifier": "^5.2.1",
+ "prompts": "^0.1.9",
+ "realpath-native": "^1.0.0",
+ "rimraf": "^2.5.4",
+ "slash": "^1.0.0",
+ "string-length": "^2.0.0",
+ "strip-ansi": "^4.0.0",
+ "which": "^1.2.12",
+ "yargs": "^11.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-changed-files": {
+ "version": "23.4.2",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz",
+ "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==",
+ "dev": true,
+ "requires": {
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-config": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz",
+ "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.0.0",
+ "babel-jest": "^23.6.0",
+ "chalk": "^2.0.1",
+ "glob": "^7.1.1",
+ "jest-environment-jsdom": "^23.4.0",
+ "jest-environment-node": "^23.4.0",
+ "jest-get-type": "^22.1.0",
+ "jest-jasmine2": "^23.6.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "micromatch": "^2.3.11",
+ "pretty-format": "^23.6.0"
+ },
+ "dependencies": {
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "jest-diff": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz",
+ "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "diff": "^3.2.0",
+ "jest-get-type": "^22.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-docblock": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz",
+ "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=",
+ "dev": true,
+ "requires": {
+ "detect-newline": "^2.1.0"
+ }
+ },
+ "jest-each": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz",
+ "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-environment-jsdom": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz",
+ "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=",
+ "dev": true,
+ "requires": {
+ "jest-mock": "^23.2.0",
+ "jest-util": "^23.4.0",
+ "jsdom": "^11.5.1"
+ }
+ },
+ "jest-environment-node": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz",
+ "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=",
+ "dev": true,
+ "requires": {
+ "jest-mock": "^23.2.0",
+ "jest-util": "^23.4.0"
+ }
+ },
+ "jest-get-type": {
+ "version": "22.4.3",
+ "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+ "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
+ "dev": true
+ },
+ "jest-haste-map": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz",
+ "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==",
+ "dev": true,
+ "requires": {
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "invariant": "^2.2.4",
+ "jest-docblock": "^23.2.0",
+ "jest-serializer": "^23.0.1",
+ "jest-worker": "^23.2.0",
+ "micromatch": "^2.3.11",
+ "sane": "^2.0.0"
+ }
+ },
+ "jest-jasmine2": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz",
+ "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==",
+ "dev": true,
+ "requires": {
+ "babel-traverse": "^6.0.0",
+ "chalk": "^2.0.1",
+ "co": "^4.6.0",
+ "expect": "^23.6.0",
+ "is-generator-fn": "^1.0.0",
+ "jest-diff": "^23.6.0",
+ "jest-each": "^23.6.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-leak-detector": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz",
+ "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==",
+ "dev": true,
+ "requires": {
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz",
+ "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-message-util": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz",
+ "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0-beta.35",
+ "chalk": "^2.0.1",
+ "micromatch": "^2.3.11",
+ "slash": "^1.0.0",
+ "stack-utils": "^1.0.1"
+ }
+ },
+ "jest-mock": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz",
+ "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=",
+ "dev": true
+ },
+ "jest-regex-util": {
+ "version": "23.3.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz",
+ "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=",
+ "dev": true
+ },
+ "jest-resolve": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz",
+ "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==",
+ "dev": true,
+ "requires": {
+ "browser-resolve": "^1.11.3",
+ "chalk": "^2.0.1",
+ "realpath-native": "^1.0.0"
+ }
+ },
+ "jest-resolve-dependencies": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz",
+ "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==",
+ "dev": true,
+ "requires": {
+ "jest-regex-util": "^23.3.0",
+ "jest-snapshot": "^23.6.0"
+ }
+ },
+ "jest-runner": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz",
+ "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==",
+ "dev": true,
+ "requires": {
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.1.11",
+ "jest-config": "^23.6.0",
+ "jest-docblock": "^23.2.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-jasmine2": "^23.6.0",
+ "jest-leak-detector": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-runtime": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-worker": "^23.2.0",
+ "source-map-support": "^0.5.6",
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-runtime": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz",
+ "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.0.0",
+ "babel-plugin-istanbul": "^4.1.6",
+ "chalk": "^2.0.1",
+ "convert-source-map": "^1.4.0",
+ "exit": "^0.1.2",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "jest-config": "^23.6.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve": "^23.6.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "micromatch": "^2.3.11",
+ "realpath-native": "^1.0.0",
+ "slash": "^1.0.0",
+ "strip-bom": "3.0.0",
+ "write-file-atomic": "^2.1.0",
+ "yargs": "^11.0.0"
+ },
+ "dependencies": {
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "jest-serializer": {
+ "version": "23.0.1",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz",
+ "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=",
+ "dev": true
+ },
+ "jest-snapshot": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz",
+ "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==",
+ "dev": true,
+ "requires": {
+ "babel-types": "^6.0.0",
+ "chalk": "^2.0.1",
+ "jest-diff": "^23.6.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-resolve": "^23.6.0",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^23.6.0",
+ "semver": "^5.5.0"
+ }
+ },
+ "jest-util": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz",
+ "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.11",
+ "is-ci": "^1.0.10",
+ "jest-message-util": "^23.4.0",
+ "mkdirp": "^0.5.1",
+ "slash": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "jest-validate": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz",
+ "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "leven": "^2.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-watcher": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz",
+ "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "string-length": "^2.0.0"
+ }
+ },
+ "jest-worker": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz",
+ "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=",
+ "dev": true,
+ "requires": {
+ "merge-stream": "^1.0.1"
+ }
+ },
+ "js-levenshtein": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz",
+ "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsdom": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
+ "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "acorn": "^5.5.3",
+ "acorn-globals": "^4.1.0",
+ "array-equal": "^1.0.0",
+ "cssom": ">= 0.3.2 < 0.4.0",
+ "cssstyle": "^1.0.0",
+ "data-urls": "^1.0.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.9.1",
+ "html-encoding-sniffer": "^1.0.2",
+ "left-pad": "^1.3.0",
+ "nwsapi": "^2.0.7",
+ "parse5": "4.0.0",
+ "pn": "^1.1.0",
+ "request": "^2.87.0",
+ "request-promise-native": "^1.0.5",
+ "sax": "^1.2.4",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.3.4",
+ "w3c-hr-time": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.3",
+ "whatwg-mimetype": "^2.1.0",
+ "whatwg-url": "^6.4.1",
+ "ws": "^5.2.0",
+ "xml-name-validator": "^3.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ }
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "kleur": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz",
+ "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "left-pad": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
+ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
+ "dev": true
+ },
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
+ "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "dev": true,
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "magic-string": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz",
+ "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==",
+ "dev": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.1"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "dev": true,
+ "requires": {
+ "tmpl": "1.0.x"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "math-random": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+ "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "merge": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
+ "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.37.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+ "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.21",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.37.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.11.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
+ "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
+ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+ "dev": true
+ },
+ "node-libs-browser": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
+ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+ "dev": true,
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^1.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.0",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.10.3",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "node-notifier": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz",
+ "integrity": "sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==",
+ "dev": true,
+ "requires": {
+ "growly": "^1.3.0",
+ "semver": "^5.5.0",
+ "shellwords": "^0.1.1",
+ "which": "^1.3.0"
+ }
+ },
+ "node-releases": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.5.tgz",
+ "integrity": "sha512-Ky7q0BO1BBkG/rQz6PkEZ59rwo+aSfhczHP1wwq8IowoVdN/FpiP7qp0XW0P2+BVCWe5fQUBozdbVd54q1RbCQ==",
+ "dev": true,
+ "requires": {
+ "semver": "^5.3.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nwsapi": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
+ "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
+ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz",
+ "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==",
+ "dev": true
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "dev": true,
+ "requires": {
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.1",
+ "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "pn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz",
+ "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0",
+ "ansi-styles": "^3.2.0"
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz",
+ "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==",
+ "dev": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "prompts": {
+ "version": "0.1.14",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz",
+ "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==",
+ "dev": true,
+ "requires": {
+ "kleur": "^2.0.1",
+ "sisteransi": "^0.1.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "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
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "realpath-native": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz",
+ "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==",
+ "dev": true,
+ "requires": {
+ "util.promisify": "^1.0.0"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz",
+ "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz",
+ "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==",
+ "dev": true,
+ "requires": {
+ "private": "^0.1.6"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.2.0.tgz",
+ "integrity": "sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^7.0.0",
+ "regjsgen": "^0.4.0",
+ "regjsparser": "^0.3.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.0.2"
+ }
+ },
+ "regjsgen": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.4.0.tgz",
+ "integrity": "sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.3.0.tgz",
+ "integrity": "sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ }
+ }
+ },
+ "request-promise-core": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
+ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.13.1"
+ }
+ },
+ "request-promise-native": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
+ "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
+ "dev": true,
+ "requires": {
+ "request-promise-core": "1.1.1",
+ "stealthy-require": "^1.1.0",
+ "tough-cookie": ">=2.3.3"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "rollup": {
+ "version": "0.67.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.67.3.tgz",
+ "integrity": "sha512-TyNQCz97rKuVVbsKUTXfwIjV7UljWyTVd7cTMuE+aqlQ7WJslkYF5QaYGjMLR2BlQtUOO5CAxSVnpQ55iYp5jg==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "0.0.39",
+ "@types/node": "*"
+ }
+ },
+ "rollup-plugin-replace": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.1.0.tgz",
+ "integrity": "sha512-SxrAIgpH/B5/W4SeULgreOemxcpEgKs2gcD42zXw50bhqGWmcnlXneVInQpAqzA/cIly4bJrOpeelmB9p4YXSQ==",
+ "dev": true,
+ "requires": {
+ "magic-string": "^0.25.1",
+ "minimatch": "^3.0.2",
+ "rollup-pluginutils": "^2.0.1"
+ }
+ },
+ "rollup-plugin-size-snapshot": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-size-snapshot/-/rollup-plugin-size-snapshot-0.7.0.tgz",
+ "integrity": "sha512-wlFRHInOfJZbXHWA4rftymqHuVDCeKUhJF3vuBZuU5y+O0LAj6RQM7vGn2/UoLImENFci31ff3pnKjW36DDP2A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.1",
+ "bytes": "^3.0.0",
+ "chalk": "^2.4.1",
+ "gzip-size": "^5.0.0",
+ "jest-diff": "^23.6.0",
+ "memory-fs": "^0.4.1",
+ "rollup-plugin-replace": "^2.0.0",
+ "terser": "^3.8.2",
+ "webpack": "^4.19.0"
+ }
+ },
+ "rollup-plugin-uglify": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.0.tgz",
+ "integrity": "sha512-XtzZd159QuOaXNvcxyBcbUCSoBsv5YYWK+7ZwUyujSmISst8avRfjWlp7cGu8T2O52OJnpEBvl+D4WLV1k1iQQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "jest-worker": "^23.2.0",
+ "serialize-javascript": "^1.5.0",
+ "uglify-js": "^3.4.9"
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz",
+ "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^0.5.2",
+ "micromatch": "^2.3.11"
+ }
+ },
+ "rsvp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
+ "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
+ "dev": true
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "rxjs": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+ "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "sane": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz",
+ "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "capture-exit": "^1.2.0",
+ "exec-sh": "^0.2.0",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^1.2.3",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5",
+ "watch": "~0.18.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ },
+ "serialize-javascript": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
+ "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "sisteransi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz",
+ "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz",
+ "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
+ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "sourcemap-codec": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz",
+ "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
+ "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz",
+ "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
+ "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "dev": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "stack-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
+ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "string-length": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
+ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
+ "dev": true,
+ "requires": {
+ "astral-regex": "^1.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "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"
+ }
+ },
+ "symbol-tree": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
+ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+ "dev": true
+ },
+ "table": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.1.1.tgz",
+ "integrity": "sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.6.1",
+ "lodash": "^4.17.11",
+ "slice-ansi": "2.0.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "tapable": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
+ "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
+ "dev": true
+ },
+ "terser": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.11.0.tgz",
+ "integrity": "sha512-5iLMdhEPIq3zFWskpmbzmKwMQixKmTYwY3Ox9pjtSklBLnHiuQ0GKJLhL1HSYtyffHM3/lDIFBnb82m9D7ewwQ==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.6"
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz",
+ "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==",
+ "dev": true,
+ "requires": {
+ "cacache": "^11.0.2",
+ "find-cache-dir": "^2.0.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^1.4.0",
+ "source-map": "^0.6.1",
+ "terser": "^3.8.1",
+ "webpack-sources": "^1.1.0",
+ "worker-farm": "^1.5.2"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz",
+ "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "micromatch": "^2.3.11",
+ "object-assign": "^4.1.0",
+ "read-pkg-up": "^1.0.1",
+ "require-main-filename": "^1.0.1"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "throat": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
+ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "timers-browserify": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
+ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+ "dev": true,
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
+ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
+ "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dev": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
+ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "w3c-hr-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
+ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
+ "dev": true,
+ "requires": {
+ "browser-process-hrtime": "^0.1.2"
+ }
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.x"
+ }
+ },
+ "watch": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz",
+ "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=",
+ "dev": true,
+ "requires": {
+ "exec-sh": "^0.2.0",
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "watchpack": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webpack": {
+ "version": "4.26.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.26.1.tgz",
+ "integrity": "sha512-i2oOvEvuvLLSuSCkdVrknaxAhtUZ9g+nLSoHCWV0gDzqGX2DXaCrMmMUpbRsTSSLrUqAI56PoEiyMUZIZ1msug==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-module-context": "1.7.11",
+ "@webassemblyjs/wasm-edit": "1.7.11",
+ "@webassemblyjs/wasm-parser": "1.7.11",
+ "acorn": "^5.6.2",
+ "acorn-dynamic-import": "^3.0.0",
+ "ajv": "^6.1.0",
+ "ajv-keywords": "^3.1.0",
+ "chrome-trace-event": "^1.0.0",
+ "enhanced-resolve": "^4.1.0",
+ "eslint-scope": "^4.0.0",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.3.0",
+ "loader-utils": "^1.1.0",
+ "memory-fs": "~0.4.1",
+ "micromatch": "^3.1.8",
+ "mkdirp": "~0.5.0",
+ "neo-async": "^2.5.0",
+ "node-libs-browser": "^2.0.0",
+ "schema-utils": "^0.4.4",
+ "tapable": "^1.1.0",
+ "terser-webpack-plugin": "^1.1.0",
+ "watchpack": "^1.5.0",
+ "webpack-sources": "^1.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "webpack-sources": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
+ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "whatwg-encoding": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.4.24"
+ }
+ },
+ "whatwg-mimetype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
+ "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ },
+ "worker-farm": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
+ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
+ "dev": true,
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xml-name-validator": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "11.1.0",
+ "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
+ "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^9.0.2"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
+ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/resolve-pathname/package.json b/resolve-pathname/package.json
new file mode 100644
index 0000000..99760af
--- /dev/null
+++ b/resolve-pathname/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "resolve-pathname",
+ "version": "3.0.0",
+ "description": "Resolve URL pathnames using JavaScript",
+ "repository": "mjackson/resolve-pathname",
+ "license": "MIT",
+ "author": "Michael Jackson",
+ "files": [
+ "cjs",
+ "esm",
+ "index.js",
+ "umd"
+ ],
+ "main": "index.js",
+ "module": "esm/resolve-pathname.js",
+ "unpkg": "umd/resolve-pathname.js",
+ "scripts": {
+ "build": "rollup -c",
+ "clean": "git clean -fdX .",
+ "lint": "eslint modules",
+ "prepublishOnly": "npm run build",
+ "test": "jest"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.1.6",
+ "@babel/preset-env": "^7.1.6",
+ "babel-core": "^7.0.0-bridge.0",
+ "babel-eslint": "^10.0.1",
+ "babel-jest": "^23.6.0",
+ "eslint": "^5.9.0",
+ "jest": "^23.6.0",
+ "rollup": "^0.67.3",
+ "rollup-plugin-replace": "^2.1.0",
+ "rollup-plugin-size-snapshot": "^0.7.0",
+ "rollup-plugin-uglify": "^6.0.0"
+ }
+}
diff --git a/resolve-pathname/rollup.config.js b/resolve-pathname/rollup.config.js
new file mode 100644
index 0000000..b699d12
--- /dev/null
+++ b/resolve-pathname/rollup.config.js
@@ -0,0 +1,71 @@
+import replace from 'rollup-plugin-replace';
+import { sizeSnapshot } from 'rollup-plugin-size-snapshot';
+import { uglify } from 'rollup-plugin-uglify';
+
+import pkg from './package.json';
+
+const input = './modules/index.js';
+const globalName = 'resolvePathname';
+
+const cjs = [
+ {
+ input,
+ output: { file: `cjs/${pkg.name}.js`, format: 'cjs' },
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify('development') })
+ ]
+ },
+ {
+ input,
+ output: { file: `cjs/${pkg.name}.min.js`, format: 'cjs' },
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify('production') }),
+ uglify()
+ ]
+ }
+];
+
+const esm = [
+ {
+ input,
+ output: { file: `esm/${pkg.name}.js`, format: 'esm' },
+ plugins: [sizeSnapshot()]
+ }
+];
+
+const umd = [
+ {
+ input,
+ output: { file: `umd/${pkg.name}.js`, format: 'umd', name: globalName },
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify('development') }),
+ sizeSnapshot()
+ ]
+ },
+ {
+ input,
+ output: { file: `umd/${pkg.name}.min.js`, format: 'umd', name: globalName },
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify('production') }),
+ sizeSnapshot(),
+ uglify()
+ ]
+ }
+];
+
+let config;
+switch (process.env.BUILD_ENV) {
+ case 'cjs':
+ config = cjs;
+ break;
+ case 'esm':
+ config = esm;
+ break;
+ case 'umd':
+ config = umd;
+ break;
+ default:
+ config = cjs.concat(esm).concat(umd);
+}
+
+export default config;
diff --git a/stylis.js/.github/workflows/main.yaml b/stylis.js/.github/workflows/main.yaml
new file mode 100644
index 0000000..5960524
--- /dev/null
+++ b/stylis.js/.github/workflows/main.yaml
@@ -0,0 +1,24 @@
+name: main
+on: [push, pull_request]
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ node-version: [11.4.0]
+ steps:
+ - name: checkout
+ uses: actions/checkout@v1
+ - name: setup ${{ matrix.node-version }}
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: test
+ run: |
+ npm install
+ npm test
+ - name: report
+ uses: coverallsapp/github-action@v1.0.1
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ path-to-lcov: ./coverage/lcov.info
diff --git a/stylis.js/.gitignore b/stylis.js/.gitignore
new file mode 100644
index 0000000..315b335
--- /dev/null
+++ b/stylis.js/.gitignore
@@ -0,0 +1,18 @@
+.DS_Store
+Thumbs.db
+Desktop.ini
+node_modules
+npm-debug.log
+*~
+*.pyc
+*.sublime-project
+*.sublime-workspace
+.idea
+*.iml
+.vscode
+*.swp
+*.swo
+coverage
+.nyc_output
+dist/
+package-lock.json
diff --git a/stylis.js/LICENSE b/stylis.js/LICENSE
new file mode 100644
index 0000000..f0b1a9a
--- /dev/null
+++ b/stylis.js/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016-present Sultan Tarimo
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/stylis.js/README.md b/stylis.js/README.md
new file mode 100644
index 0000000..f3d48fa
--- /dev/null
+++ b/stylis.js/README.md
@@ -0,0 +1,138 @@
+# STYLIS
+
+[![stylis](https://stylis.js.org/assets/logo.svg)](https://github.com/thysultan/stylis.js)
+
+A Light–weight CSS Preprocessor.
+
+[![Coverage](https://coveralls.io/repos/github/thysultan/stylis.js/badge.svg?branch=master)](https://coveralls.io/github/thysultan/stylis.js)
+[![Size](https://badgen.net/bundlephobia/minzip/stylis)](https://bundlephobia.com/result?p=stylis)
+[![Licence](https://badgen.net/badge/license/MIT/blue)](https://github.com/thysultan/stylis.js/blob/master/LICENSE)
+[![NPM](https://badgen.net/npm/v/dyo)](https://www.npmjs.com/package/stylis)
+
+## Installation
+
+* Use a Direct Download: `<script src=stylis.js></script>`
+* Use a CDN: `<script src=unpkg.com/stylis></script>`
+* Use NPM: `npm install stylis --save`
+
+## Features
+
+- nesting `a { &:hover {} }`
+- selector namespacing
+- vendor prefixing (flex-box, etc...)
+- minification
+- esm module compatible
+- tree-shaking-able
+
+## Abstract Syntax Structure
+
+```js
+const declaration = {
+ value: 'color:red;',
+ type: 'decl',
+ props: 'color',
+ children: 'red',
+ line: 1, column: 1
+}
+
+const comment = {
+ value: '/*@noflip*/',
+ type: 'comm',
+ props: '/',
+ children: '@noflip',
+ line: 1, column: 1
+}
+
+const ruleset = {
+ value: 'h1,h2',
+ type: 'rule',
+ props: ['h1', 'h2'],
+ children: [/* ... */],
+ line: 1, column: 1
+}
+
+const atruleset = {
+ value: '@media (max-width:100), (min-width:100)',
+ type: '@media',
+ props: ['(max-width:100)', '(min-width:100)'],
+ children: [/* ... */],
+ line: 1, column: 1
+}
+```
+
+## Example:
+
+```js
+import {compile, serialize, stringify} from 'stylis'
+
+serialize(compile(`h1{all:unset}`), stringify)
+```
+
+### Compile
+
+```js
+compile('h1{all:unset}') === [{value: 'h1', type: 'rule', props: ['h1'], children: [/* ... */]}]
+compile('--foo:unset;') === [{value: '--foo:unset;', type: 'decl', props: '--foo', children: 'unset'}]
+```
+
+### Tokenize
+
+```js
+tokenize('h1 h2 h3 [h4 h5] fn(args) "a b c"') === ['h1', 'h2', 'h3', '[h4 h5]', 'fn', '(args)', '"a b c"']
+```
+
+### Serialize
+
+```js
+serialize(compile('h1{all:unset}'), stringify)
+```
+
+## Middleware
+
+The middleware helper is a convenient helper utility, that for all intents and purposes you can do without if you intend to implement your own traversal logic. The `stringify` middleware is one such middleware that can be used in conjunction with it.
+
+Elements passed to middlewares have a `root` property that is the immediate root/parent of the current element **in the compiled output**, so it references the parent in the already expanded CSS-like structure. Elements have also `parent` property that is the immediate parent of the current element **from the input structure** (structure representing the input string).
+
+### Traversal
+
+```js
+serialize(compile('h1{all:unset}'), middleware([(element, index, children) => {
+ assert(children === element.root.children && children[index] === element.children)
+}, stringify])) === 'h1{all:unset;}'
+```
+
+The abstract syntax tree also includes an additional `return` property for more niche uses.
+
+### Prefixing
+
+```js
+serialize(compile('h1{all:unset}'), middleware([(element, index, children, callback) => {
+ if (element.type === 'decl' && element.props === 'all' && element.children === 'unset')
+ element.return = 'color:red;' + element.value
+}, stringify])) === 'h1{color:red;all:unset;}'
+```
+
+```js
+serialize(compile('h1{all:unset}'), middleware([(element, index, children, callback) => {
+ if (element.type === 'rule' && element.props.indexOf('h1') > -1)
+ return serialize([{...element, props: ['h2', 'h3']}], callback)
+}, stringify])) === 'h2,h3{all:unset;}h1{all:unset;}'
+```
+
+### Reading
+
+```js
+serialize(compile('h1{all:unset}'), middleware([stringify, (element, index, children) => {
+ assert(element.return === 'h1{all:unset;}')
+}])) === 'h1{all:unset;color:red;}'
+```
+
+The middlewares in [src/Middleware.js](src/Middleware.js) dive into tangible examples of how you might implement a middleware, alternatively you could also create your own middleware system as `compile` returns all the nessessary structure to fork from.
+
+## Benchmark
+
+Stylis is at-least 2X faster than its predecesor.
+
+### License
+
+Stylis is [MIT licensed](./LICENSE).
diff --git a/stylis.js/docs/CNAME b/stylis.js/docs/CNAME
new file mode 100644
index 0000000..26c12af
--- /dev/null
+++ b/stylis.js/docs/CNAME
@@ -0,0 +1 @@
+stylis.js.org
diff --git a/stylis.js/docs/assets/logo.svg b/stylis.js/docs/assets/logo.svg
new file mode 100644
index 0000000..089c03d
--- /dev/null
+++ b/stylis.js/docs/assets/logo.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 194 76" version="1.1" xml:space="preserve" x="0px" y="0px" width="194px" height="76px" background-color="#ffffff00"><defs><linearGradient id="gradient1" x1="47.1649%" y1="1.3158%" x2="47.1649%" y2="81.5789%"><stop stop-color="#745dc0" stop-opacity="1" offset="0%"/><stop stop-color="#5497d8" stop-opacity="1" offset="100%"/></linearGradient></defs><path d="M142 62L173.5 62C175.7092 62 179.0539 58.9963 180 57L186.4386 43.1381C188.6816 38.0912 185.5229 34 180 34L170 34C168.8954 34 168 33.3284 168 32.5 168 31.6716 168.8954 31 170 31L187 31 194 16 165 16 154 38C151.7269 43.0334 153.4771 46.9688 159 46.9688L168 46.9688 168 47C169.1046 47 170 47.6716 170 48.5 170 49.3284 169.1046 50 168 50L148 50 142 62ZM65.5 65C62.4624 65 60 67.4624 60 70.5 60 73.5376 62.4624 76 65.5 76L91 76 96 65 65.5 65ZM85 16L70.6721 47.0177C70.2089 48.0205 70.3053 49.5943 70.8876 50.533L76.9458 60.3004C77.528 61.2391 78.8954 62 80 62L98 62 120 16 108 16 93 48 82 48 97 16 85 16ZM140 29L124 62 136 62 152 29 140 29ZM146 16L141 26 149.005 26C151.2142 26 153.8052 24.3979 154.7924 22.4216L156.2126 19.5784C157.1998 17.6021 156.2092 16 154.0001 16L146 16ZM0 62L29.5 62C31.7092 62 35.0539 58.9963 36 57L42.4386 43.1381C44.6816 38.0912 41.5229 34 36 34L26 34C24.8954 34 24 33.3284 24 32.5 24 31.6716 24.8954 31 26 31L43 31 50 16 21 16 10 38C7.7269 43.0334 9.4771 46.9688 15 46.9688L24 46.9688 24 47C25.1046 47 26 47.6716 26 48.5 26 49.3284 25.1046 50 24 50L6 50 0 62ZM134 0L105 62 118 62 147 0 134 0ZM62 0L46.635 34.775C48.3667 36.4388 48.7809 40.118 47.4386 43.1381L38 62 60 62 64 52C64.9879 50.0241 64.7092 48 62.5 48L54 48 62 31 71 31C72.1046 31 72.533 30.001 73 29L79 16 68 16 75 0 62 0Z" stroke="#ffffff00" stroke-width="1" fill="url(#gradient1)"/></svg> \ No newline at end of file
diff --git a/stylis.js/docs/assets/stylesheet.css b/stylis.js/docs/assets/stylesheet.css
new file mode 100644
index 0000000..6909849
--- /dev/null
+++ b/stylis.js/docs/assets/stylesheet.css
@@ -0,0 +1,22 @@
+* { box-sizing: border-box; margin: 0; padding: 0; }
+
+body { background: #F1F1F1; font-family: 'Helvetica Neue', sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;}
+p { color: #535353; line-height: 38px; font-size: 17px; text-align: center; }
+a { color: #332E22; font-size: 19px; text-decoration: none; }
+a[title=github] { font-weight: bold; }
+
+.container > .welcome > *:not(pre):not(div), .wrap { max-width: 600px; width: 100%; margin: 0 auto; padding:0 20px; }
+.header { padding-top: 40px; padding-bottom: 14px; min-height: 160px; text-align: center; }
+.logo { margin-bottom: 20px; display: block; }
+.logo a { display: inline-block; width: 194px; height: 76px; cursor: pointer; }
+
+.nav {display: inline-block; font-weight: bold; }
+.nav li { display: inline-block; }
+.nav li:not(:last-child) a { margin-right: 16px; }
+
+.code { position: relative; display: block; margin: 40px auto 0; }
+.code > div { display: flex; flex-direction: row; overflow: auto; tab-size: 4; height: 100%; }
+.code pre { font: 15px/1.8em menlo,monospace; flex: auto; width: 50%; padding: 26px 30px; outline: none; }
+span.selector { color: #AA0C91; }
+span.value { color: #C41913; }
+span.string { color: #007400; }
diff --git a/stylis.js/docs/index.html b/stylis.js/docs/index.html
new file mode 100644
index 0000000..a6faa1b
--- /dev/null
+++ b/stylis.js/docs/index.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <meta name=viewport content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no'>
+ <meta name=description content='light – weight css preprocessor'>
+ <title>stylis</title>
+ <link rel='stylesheet' href='assets/stylesheet.css'>
+ </head>
+ <body>
+ <div class='header'>
+ <div class='wrap'>
+ <div class='logo'><a class=./><img src='assets/logo.svg'></a></div>
+ <div class='nav'>
+ <ul>
+ <li><a href='https://github.com/thysultan/stylis.js'>Github</a></li>
+ <li><a href='https://npmjs.com/package/stylis'>NPM</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class='container'>
+ <div class='welcome'>
+ <p>light – weight css preprocessor</p>
+ <div class='code'>
+ <div spellcheck='false'>
+<pre contenteditable id='editor'>
+div {
+ display: flex;
+
+ @media screen {
+ color: red;
+ }
+}
+
+div {
+ transform: translateZ(0);
+
+ h1, h2 {
+ color: red;
+ }
+}
+</pre>
+<pre id='output'></pre>
+ </div>
+ </div>
+ </div>
+ </div>
+ <script type=module>
+ import {compile, serialize, middleware, prefixer, stringify} from 'https://unpkg.com/stylis?module'
+
+ function tabbed (select, ranged, content) {
+ ranged.deleteContents()
+ ranged.insertNode(content)
+ ranged.setStartAfter(content)
+ select.removeAllRanges()
+ select.addRange(ranged)
+ }
+
+ // update output preview
+ function update (value) {
+ switch (value.keyCode) {
+ // tab indent
+ case 9: tabbed(value = window.getSelection(value.preventDefault()), value.getRangeAt(0), document.createTextNode('\t'))
+ break
+ // formatting
+ default:
+ value = serialize(compile(`[namespace]{${value.target.textContent}}`), middleware([prefixer, stringify]))
+ value = value.replace(/(;|\})/g, (match, group) => group + (group === '}' ? '\n\n' : '\n'))
+ value = value.replace(/(.*?)\{/g, (match, group) => '<span class=selector>' + group.trim() + '</span> {\n')
+ value = value.replace(/:(.*);/g, (match, group) => ': <span class=value>' + group.trim() + '</span>;')
+ value = value.replace(/^[^@].*;$/gm, (match) => '\t' + match)
+ value = value.replace(/\}\n\n\}/g, '}\n}')
+ value = value.replace(/(.*@.*\{)([^}]+\})(\n\})/g, (match, group1, group2, group3) => group1 + group2.split('\n').join('\n\t') + group3)
+ value = value.replace(/['"`].*?['"`]/g, (match) => '<span class=string>'+ match.trim() +'</span>')
+
+ output.innerHTML = value
+ }
+ }
+
+ const target = document.getElementById('editor')
+ const output = document.getElementById('output')
+
+ target.addEventListener('keydown', update)
+ target.addEventListener('input', update)
+
+ update({target})
+ </script>
+ </body>
+</html>
diff --git a/stylis.js/index.js b/stylis.js/index.js
new file mode 100644
index 0000000..3c12a38
--- /dev/null
+++ b/stylis.js/index.js
@@ -0,0 +1,7 @@
+export * from './src/Enum.js'
+export * from './src/Utility.js'
+export * from './src/Parser.js'
+export * from './src/Prefixer.js'
+export * from './src/Tokenizer.js'
+export * from './src/Serializer.js'
+export * from './src/Middleware.js'
diff --git a/stylis.js/package.json b/stylis.js/package.json
new file mode 100644
index 0000000..989c4b7
--- /dev/null
+++ b/stylis.js/package.json
@@ -0,0 +1,161 @@
+{
+ "name": "stylis",
+ "version": "4.0.3",
+ "license": "MIT",
+ "description": "A Light–weight CSS Preprocessor",
+ "homepage": "https://github.com/thysultan/stylis.js",
+ "author": "Sultan Tarimo <sultantarimo@me.com>",
+ "repository": "https://github.com/thysultan/stylis.js",
+ "bugs": "https://github.com/thysultan/stylis.js/issues",
+ "sideEffects": false,
+ "type": "module",
+ "main": "dist/stylis.cjs",
+ "module": "dist/stylis.mjs",
+ "react-native": "./index.js",
+ "exports": {
+ "import": "./index.js",
+ "require": "./dist/stylis.cjs"
+ },
+ "files": [
+ "index.js",
+ "dist/",
+ "src/"
+ ],
+ "scripts": {
+ "lint": "eslint ./",
+ "pretest": "npm run lint && npm run build",
+ "test": "nyc npm run spec",
+ "spec": "mocha --harmony --require esm script/setup.js --recursive test",
+ "prebuild": "rimraf dist",
+ "build": "rollup --config script/build.js --configSrc ./",
+ "start": "npm run build -- --watch",
+ "prepare": "npm run build",
+ "postversion": "git push --follow-tags && npm publish",
+ "release-major": "npm version major -m '%s'",
+ "release-minor": "npm version minor -m '%s'",
+ "release-patch": "npm version patch -m '%s'"
+ },
+ "devDependencies": {
+ "chai": "4.2.0",
+ "eslint": "6.8.0",
+ "esm": "3.2.25",
+ "mocha": "7.0.0",
+ "nyc": "15.0.0",
+ "rimraf": "3.0.2",
+ "rollup": "1.28.0",
+ "rollup-plugin-size": "0.2.1",
+ "rollup-plugin-terser": "5.1.3",
+ "stylis": "./"
+ },
+ "nyc": {
+ "temp-dir": "./coverage/.nyc_output",
+ "exclude": [
+ "**/dist/",
+ "**/test/",
+ "**/script/"
+ ],
+ "reporter": [
+ "lcov",
+ "text"
+ ]
+ },
+ "esm": {
+ "cjs": true,
+ "cache": false
+ },
+ "eslintIgnore": [
+ "script/",
+ "test/",
+ "dist/",
+ "docs/"
+ ],
+ "eslintConfig": {
+ "env": {
+ "commonjs": true,
+ "browser": true,
+ "node": true,
+ "es6": true
+ },
+ "extends": "eslint:recommended",
+ "parserOptions": {
+ "ecmaVersion": 7,
+ "sourceType": "module",
+ "ecmaFeatures": {
+ "impliedStrict": true
+ }
+ },
+ "rules": {
+ "indent": [
+ "error",
+ "tab",
+ {
+ "SwitchCase": 1
+ }
+ ],
+ "linebreak-style": [
+ "error",
+ "unix"
+ ],
+ "quotes": [
+ "error",
+ "single"
+ ],
+ "semi": [
+ "error",
+ "never"
+ ],
+ "no-cond-assign": [
+ "off"
+ ],
+ "no-redeclare": [
+ "off"
+ ],
+ "no-fallthrough": [
+ "off"
+ ],
+ "no-console": [
+ "off"
+ ],
+ "no-unsafe-finally": [
+ "off"
+ ],
+ "no-shadow-restricted-names": [
+ "error"
+ ],
+ "no-whitespace-before-property": [
+ "error"
+ ],
+ "eol-last": [
+ "error"
+ ],
+ "func-call-spacing": [
+ "error",
+ "never"
+ ],
+ "brace-style": [
+ "error",
+ "1tbs",
+ {
+ "allowSingleLine": true
+ }
+ ],
+ "require-jsdoc": [
+ "error",
+ {
+ "require": {
+ "FunctionDeclaration": true
+ }
+ }
+ ],
+ "no-trailing-spaces": [
+ "error",
+ {
+ "skipBlankLines": true
+ }
+ ],
+ "no-constant-condition": [
+ "off"
+ ]
+ }
+ }
+}
diff --git a/stylis.js/script/build.js b/stylis.js/script/build.js
new file mode 100644
index 0000000..cfd5a7f
--- /dev/null
+++ b/stylis.js/script/build.js
@@ -0,0 +1,34 @@
+import {join} from 'path'
+import {terser} from 'rollup-plugin-terser'
+import size from 'rollup-plugin-size'
+
+const options = {mangle: true, compress: false, toplevel: true}
+const defaults = {
+ onwarn(warning, warn) {
+ switch (warning.code) {
+ case 'CIRCULAR_DEPENDENCY':
+ return
+ default:
+ warn(warning)
+ }
+ },
+ treeshake: {propertyReadSideEffects: false},
+ context: 'this'
+}
+
+export default ({configSrc = './', configInput = join(configSrc, 'index.js')}) => {
+ return [
+ {
+ ...defaults,
+ input: configInput,
+ output: [{file: join(configSrc, 'dist', 'stylis.cjs'), format: 'umd', name: 'stylis', freeze: false, sourcemap: true}],
+ plugins: [terser(options), size()]
+ },
+ {
+ ...defaults,
+ input: configInput,
+ output: [{file: join(configSrc, 'dist', 'stylis.mjs'), format: 'esm', name: 'stylis', freeze: false, sourcemap: true}],
+ plugins: [terser(options), size()]
+ }
+ ]
+}
diff --git a/stylis.js/script/setup.js b/stylis.js/script/setup.js
new file mode 100644
index 0000000..f56729c
--- /dev/null
+++ b/stylis.js/script/setup.js
@@ -0,0 +1,10 @@
+import {expect} from 'chai'
+import {describe, test} from 'mocha'
+
+const {assign} = Object
+const that = () => typeof globalThis == 'object' ? globalThis :
+ typeof global == 'object' ? global :
+ typeof window == 'object' ? window :
+ typeof self == 'object' ? self : Function('return this')()
+
+assign(that(), {expect, describe, test, globalThis: that()})
diff --git a/stylis.js/src/Enum.js b/stylis.js/src/Enum.js
new file mode 100644
index 0000000..0d611ab
--- /dev/null
+++ b/stylis.js/src/Enum.js
@@ -0,0 +1,20 @@
+export var MS = '-ms-'
+export var MOZ = '-moz-'
+export var WEBKIT = '-webkit-'
+
+export var COMMENT = 'comm'
+export var RULESET = 'rule'
+export var DECLARATION = 'decl'
+
+export var PAGE = '@page'
+export var MEDIA = '@media'
+export var IMPORT = '@import'
+export var CHARSET = '@charset'
+export var VIEWPORT = '@viewport'
+export var SUPPORTS = '@supports'
+export var DOCUMENT = '@document'
+export var NAMESPACE = '@namespace'
+export var KEYFRAMES = '@keyframes'
+export var FONT_FACE = '@font-face'
+export var COUNTER_STYLE = '@counter-style'
+export var FONT_FEATURE_VALUES = '@font-feature-values'
diff --git a/stylis.js/src/Middleware.js b/stylis.js/src/Middleware.js
new file mode 100644
index 0000000..cec5f62
--- /dev/null
+++ b/stylis.js/src/Middleware.js
@@ -0,0 +1,107 @@
+import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'
+import {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'
+import {copy, tokenize} from './Tokenizer.js'
+import {serialize} from './Serializer.js'
+import {prefix} from './Prefixer.js'
+
+/**
+ * @param {function[]} collection
+ * @return {function}
+ */
+export function middleware (collection) {
+ var length = sizeof(collection)
+
+ return function (element, index, children, callback) {
+ var output = ''
+
+ for (var i = 0; i < length; i++)
+ output += collection[i](element, index, children, callback) || ''
+
+ return output
+ }
+}
+
+/**
+ * @param {function} callback
+ * @return {function}
+ */
+export function rulesheet (callback) {
+ return function (element) {
+ if (!element.root)
+ if (element = element.return)
+ callback(element)
+ }
+}
+
+/**
+ * @param {object} element
+ * @param {number} index
+ * @param {object[]} children
+ * @param {function} callback
+ */
+export function prefixer (element, index, children, callback) {
+ if (!element.return)
+ switch (element.type) {
+ case DECLARATION: element.return = prefix(element.value, element.length)
+ break
+ case KEYFRAMES:
+ return serialize([copy(replace(element.value, '@', '@' + WEBKIT), element, '')], callback)
+ case RULESET:
+ if (element.length)
+ return combine(element.props, function (value) {
+ switch (match(value, /(::plac\w+|:read-\w+)/)) {
+ // :read-(only|write)
+ case ':read-only': case ':read-write':
+ return serialize([copy(replace(value, /:(read-\w+)/, ':' + MOZ + '$1'), element, '')], callback)
+ // :placeholder
+ case '::placeholder':
+ return serialize([
+ copy(replace(value, /:(plac\w+)/, ':' + WEBKIT + 'input-$1'), element, ''),
+ copy(replace(value, /:(plac\w+)/, ':' + MOZ + '$1'), element, ''),
+ copy(replace(value, /:(plac\w+)/, MS + 'input-$1'), element, '')
+ ], callback)
+ }
+
+ return ''
+ })
+ }
+}
+
+/**
+ * @param {object} element
+ * @param {number} index
+ * @param {object[]} children
+ */
+export function namespace (element) {
+ switch (element.type) {
+ case RULESET:
+ element.props = element.props.map(function (value) {
+ return combine(tokenize(value), function (value, index, children) {
+ switch (charat(value, 0)) {
+ // \f
+ case 12:
+ return substr(value, 1, strlen(value))
+ // \0 ( + > ~
+ case 0: case 40: case 43: case 62: case 126:
+ return value
+ // :
+ case 58:
+ if (children[index + 1] === 'global')
+ children[index + 1] = '', children[index + 2] = '\f' + substr(children[index + 2], index = 1, -1)
+ // \s
+ case 32:
+ return index === 1 ? '' : value
+ default:
+ switch (index) {
+ case 0: element = value
+ return sizeof(children) > 1 ? '' : value
+ case index = sizeof(children) - 1: case 2:
+ return index === 2 ? value + element + element : value + element
+ default:
+ return value
+ }
+ }
+ })
+ })
+ }
+}
diff --git a/stylis.js/src/Parser.js b/stylis.js/src/Parser.js
new file mode 100644
index 0000000..4089514
--- /dev/null
+++ b/stylis.js/src/Parser.js
@@ -0,0 +1,174 @@
+import {COMMENT, RULESET, DECLARATION} from './Enum.js'
+import {abs, trim, from, sizeof, strlen, substr, append, replace} from './Utility.js'
+import {node, char, next, peek, caret, alloc, dealloc, delimit, whitespace, identifier, commenter} from './Tokenizer.js'
+
+/**
+ * @param {string} value
+ * @return {object[]}
+ */
+export function compile (value) {
+ return dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))
+}
+
+/**
+ * @param {string} value
+ * @param {object} root
+ * @param {object?} parent
+ * @param {string[]} rule
+ * @param {string[]} rules
+ * @param {string[]} rulesets
+ * @param {number[]} pseudo
+ * @param {number[]} points
+ * @param {string[]} declarations
+ * @return {object}
+ */
+export function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {
+ var index = 0
+ var offset = 0
+ var length = pseudo
+ var atrule = 0
+ var property = 0
+ var previous = 0
+ var variable = 1
+ var scanning = 1
+ var ampersand = 1
+ var character = 0
+ var type = ''
+ var props = rules
+ var children = rulesets
+ var reference = rule
+ var characters = type
+
+ while (scanning)
+ switch (previous = character, character = next()) {
+ // " ' [ (
+ case 34: case 39: case 91: case 40:
+ characters += delimit(character)
+ break
+ // \t \n \r \s
+ case 9: case 10: case 13: case 32:
+ characters += whitespace(previous)
+ break
+ // /
+ case 47:
+ switch (peek()) {
+ case 42: case 47:
+ append(comment(commenter(next(), caret()), root, parent), declarations)
+ break
+ default:
+ characters += '/'
+ }
+ break
+ // {
+ case 123 * variable:
+ points[index++] = strlen(characters) * ampersand
+ // } ; \0
+ case 125 * variable: case 59: case 0:
+ switch (character) {
+ // \0 }
+ case 0: case 125: scanning = 0
+ // ;
+ case 59 + offset:
+ if (property > 0)
+ append(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)
+ break
+ // @ ;
+ case 59: characters += ';'
+ // { rule/at-rule
+ default:
+ append(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)
+
+ if (character === 123)
+ if (offset === 0)
+ parse(characters, root, reference, reference, props, rulesets, length, points, children)
+ else
+ switch (atrule) {
+ // d m s
+ case 100: case 109: case 115:
+ parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)
+ break
+ default:
+ parse(characters, reference, reference, reference, [''], children, length, points, children)
+ }
+ }
+
+ index = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo
+ break
+ // :
+ case 58:
+ length = 1 + strlen(characters), property = previous
+ default:
+ switch (characters += from(character), character * variable) {
+ // &
+ case 38:
+ ampersand = offset > 0 ? 1 : (characters += '\f', -1)
+ break
+ // ,
+ case 44:
+ points[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1
+ break
+ // @
+ case 64:
+ // -
+ if (peek() === 45)
+ characters += delimit(next())
+
+ atrule = peek(), offset = strlen(type = characters += identifier(caret())), character++
+ break
+ // -
+ case 45:
+ if (previous === 45 && strlen(characters) == 2)
+ variable = 0
+ }
+ }
+
+ return rulesets
+}
+
+/**
+ * @param {string} value
+ * @param {object} root
+ * @param {object?} parent
+ * @param {number} index
+ * @param {number} offset
+ * @param {string[]} rules
+ * @param {number[]} points
+ * @param {string} type
+ * @param {string[]} props
+ * @param {string[]} children
+ * @param {number} length
+ * @return {object}
+ */
+export function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {
+ var post = offset - 1
+ var rule = offset === 0 ? rules : ['']
+ var size = sizeof(rule)
+
+ for (var i = 0, j = 0, k = 0; i < index; ++i)
+ for (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)
+ if (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\f/g, rule[x])))
+ props[k++] = z
+
+ return node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)
+}
+
+/**
+ * @param {number} value
+ * @param {object} root
+ * @param {object?} parent
+ * @return {object}
+ */
+export function comment (value, root, parent) {
+ return node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)
+}
+
+/**
+ * @param {string} value
+ * @param {object} root
+ * @param {object?} parent
+ * @param {number} length
+ * @return {object}
+ */
+export function declaration (value, root, parent, length) {
+ return node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)
+}
diff --git a/stylis.js/src/Prefixer.js b/stylis.js/src/Prefixer.js
new file mode 100644
index 0000000..e156c21
--- /dev/null
+++ b/stylis.js/src/Prefixer.js
@@ -0,0 +1,114 @@
+import {MS, MOZ, WEBKIT} from './Enum.js'
+import {hash, charat, strlen, indexof, replace} from './Utility.js'
+
+/**
+ * @param {string} value
+ * @param {number} length
+ * @return {string}
+ */
+export function prefix (value, length) {
+ switch (hash(value, length)) {
+ // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)
+ case 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:
+ // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break
+ case 5572: case 6356: case 5844: case 3191: case 6645: case 3005:
+ // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,
+ case 6391: case 5879: case 5623: case 6135: case 4599: case 4855:
+ // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)
+ case 4215: case 6389: case 5109: case 5365: case 5621: case 3829:
+ return WEBKIT + value + value
+ // appearance, user-select, transform, hyphens, text-size-adjust
+ case 5349: case 4246: case 4810: case 6968: case 2756:
+ return WEBKIT + value + MOZ + value + MS + value + value
+ // flex, flex-direction
+ case 6828: case 4268:
+ return WEBKIT + value + MS + value + value
+ // order
+ case 6165:
+ return WEBKIT + value + MS + 'flex-' + value + value
+ // align-items
+ case 5187:
+ return WEBKIT + value + replace(value, /(\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value
+ // align-self
+ case 5443:
+ return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value
+ // align-content
+ case 4675:
+ return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value
+ // flex-shrink
+ case 5548:
+ return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value
+ // flex-basis
+ case 5292:
+ return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value
+ // flex-grow
+ case 6060:
+ return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value
+ // transition
+ case 4554:
+ return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value
+ // cursor
+ case 6187:
+ return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value
+ // background, background-image
+ case 5495: case 3959:
+ return replace(value, /(image-set\([^]*)/, WEBKIT + '$1' + '$`$1')
+ // justify-content
+ case 4968:
+ return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value
+ // (margin|padding)-inline-(start|end)
+ case 4095: case 3583: case 4068: case 2532:
+ return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value
+ // (min|max)?(width|height|inline-size|block-size)
+ case 8116: case 7059: case 5753: case 5535:
+ case 5445: case 5701: case 4933: case 4677:
+ case 5533: case 5789: case 5021: case 4765:
+ // stretch, max-content, min-content, fill-available
+ if (strlen(value) - 1 - length > 6)
+ switch (charat(value, length + 1)) {
+ // (m)ax-content, (m)in-content
+ case 109:
+ return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + '$2-$3') + value
+ // (f)ill-available
+ case 102:
+ return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + '$3') + value
+ // (s)tretch
+ case 115:
+ return prefix(replace(value, 'stretch', 'fill-available'), length) + value
+ }
+ break
+ // position: sticky
+ case 4949:
+ // (s)ticky?
+ if (charat(value, length + 1) !== 115)
+ break
+ // display: (flex|inline-flex|inline-box)
+ case 6444:
+ switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {
+ // stic(k)y, inline-b(o)x
+ case 107: case 111:
+ return replace(value, value, WEBKIT + value) + value
+ // (inline-)?fl(e)x
+ case 101:
+ return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value
+ }
+ break
+ // writing-mode
+ case 5936:
+ switch (charat(value, length + 11)) {
+ // vertical-l(r)
+ case 114:
+ return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, 'tb') + value
+ // vertical-r(l)
+ case 108:
+ return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, 'tb-rl') + value
+ // horizontal(-)tb
+ case 45:
+ return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, 'lr') + value
+ }
+
+ return WEBKIT + value + MS + value + value
+ }
+
+ return value
+}
diff --git a/stylis.js/src/Serializer.js b/stylis.js/src/Serializer.js
new file mode 100644
index 0000000..c82f0b4
--- /dev/null
+++ b/stylis.js/src/Serializer.js
@@ -0,0 +1,34 @@
+import {IMPORT, COMMENT, RULESET, DECLARATION} from './Enum.js'
+import {strlen, sizeof} from './Utility.js'
+
+/**
+ * @param {object[]} children
+ * @param {function} callback
+ * @return {string}
+ */
+export function serialize (children, callback) {
+ var output = ''
+ var length = sizeof(children)
+
+ for (var i = 0; i < length; i++)
+ output += callback(children[i], i, children, callback) || ''
+
+ return output
+}
+
+/**
+ * @param {object} element
+ * @param {number} index
+ * @param {object[]} children
+ * @param {function} callback
+ * @return {string}
+ */
+export function stringify (element, index, children, callback) {
+ switch (element.type) {
+ case IMPORT: case DECLARATION: return element.return = element.return || element.value
+ case COMMENT: return ''
+ case RULESET: element.value = element.props.join(',')
+ }
+
+ return strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''
+}
diff --git a/stylis.js/src/Tokenizer.js b/stylis.js/src/Tokenizer.js
new file mode 100644
index 0000000..d14c136
--- /dev/null
+++ b/stylis.js/src/Tokenizer.js
@@ -0,0 +1,218 @@
+import {from, trim, charat, strlen, substr, append} from './Utility.js'
+
+export var line = 1
+export var column = 1
+export var length = 0
+export var position = 0
+export var character = 0
+export var characters = ''
+
+/**
+ * @param {string} value
+ * @param {object} root
+ * @param {object?} parent
+ * @param {string} type
+ * @param {string[]} props
+ * @param {object[]} children
+ * @param {number} length
+ */
+export function node (value, root, parent, type, props, children, length) {
+ return {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}
+}
+
+/**
+ * @param {string} value
+ * @param {object} root
+ * @param {string} type
+ */
+export function copy (value, root, type) {
+ return node(value, root.root, root.parent, type, root.props, root.children, 0)
+}
+
+/**
+ * @return {number}
+ */
+export function char () {
+ return character
+}
+
+/**
+ * @return {number}
+ */
+export function next () {
+ character = position < length ? charat(characters, position++) : 0
+
+ if (column++, character === 10)
+ column = 1, line++
+
+ return character
+}
+
+/**
+ * @return {number}
+ */
+export function peek () {
+ return charat(characters, position)
+}
+
+/**
+ * @return {number}
+ */
+export function caret () {
+ return position
+}
+
+/**
+ * @param {number} begin
+ * @param {number} end
+ * @return {string}
+ */
+export function slice (begin, end) {
+ return substr(characters, begin, end)
+}
+
+/**
+ * @param {number} type
+ * @return {number}
+ */
+export function token (type) {
+ switch (type) {
+ // \0 \t \n \r \s whitespace token
+ case 0: case 9: case 10: case 13: case 32:
+ return 5
+ // ! + , / > @ ~ isolate token
+ case 33: case 43: case 44: case 47: case 62: case 64: case 126:
+ // ; { } / breakpoint token
+ case 59: case 123: case 125:
+ return 4
+ // : accompanied token
+ case 58:
+ return 3
+ // " ' ( [ opening delimit token
+ case 34: case 39: case 40: case 91:
+ return 2
+ // ) ] closing delimit token
+ case 41: case 93:
+ return 1
+ }
+
+ return 0
+}
+
+/**
+ * @param {string} value
+ * @return {any[]}
+ */
+export function alloc (value) {
+ return line = column = 1, length = strlen(characters = value), position = 0, []
+}
+
+/**
+ * @param {any} value
+ * @return {any}
+ */
+export function dealloc (value) {
+ return characters = '', value
+}
+
+/**
+ * @param {number} type
+ * @return {string}
+ */
+export function delimit (type) {
+ return trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))
+}
+
+/**
+ * @param {string} value
+ * @return {string[]}
+ */
+export function tokenize (value) {
+ return dealloc(tokenizer(alloc(value)))
+}
+
+/**
+ * @param {number} type
+ * @return {string}
+ */
+export function whitespace (type) {
+ while (character = peek())
+ if (character < 33)
+ next()
+ else
+ break
+
+ return token(type) > 2 || token(character) > 3 ? '' : ' '
+}
+
+/**
+ * @param {string[]} children
+ * @return {string[]}
+ */
+export function tokenizer (children) {
+ while (next())
+ switch (token(character)) {
+ case 0: append(identifier(position - 1), children)
+ break
+ case 2: append(delimit(character), children)
+ break
+ default: append(from(character), children)
+ }
+
+ return children
+}
+
+/**
+ * @param {number} type
+ * @return {number}
+ */
+export function delimiter (type) {
+ while (next())
+ switch (character) {
+ // ] ) " '
+ case type:
+ return position
+ // " '
+ case 34: case 39:
+ return delimiter(type === 34 || type === 39 ? type : character)
+ // (
+ case 40:
+ if (type === 41)
+ delimiter(type)
+ break
+ // \
+ case 92:
+ next()
+ break
+ }
+
+ return position
+}
+
+/**
+ * @param {number} type
+ * @param {number} index
+ * @return {number}
+ */
+export function commenter (type, index) {
+ while (next())
+ // //
+ if (type + character === 47 + 10)
+ break
+ // /*
+ else if (type + character === 42 + 42 && peek() === 47)
+ break
+
+ return '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())
+}
+
+/**
+ * @param {number} index
+ * @return {string}
+ */
+export function identifier (index) {
+ while (!token(peek()))
+ next()
+
+ return slice(index, position)
+}
diff --git a/stylis.js/src/Utility.js b/stylis.js/src/Utility.js
new file mode 100644
index 0000000..f29590e
--- /dev/null
+++ b/stylis.js/src/Utility.js
@@ -0,0 +1,109 @@
+/**
+ * @param {number}
+ * @return {number}
+ */
+export var abs = Math.abs
+
+/**
+ * @param {number}
+ * @return {string}
+ */
+export var from = String.fromCharCode
+
+/**
+ * @param {string} value
+ * @param {number} length
+ * @return {number}
+ */
+export function hash (value, length) {
+ return (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3)
+}
+
+/**
+ * @param {string} value
+ * @return {string}
+ */
+export function trim (value) {
+ return value.trim()
+}
+
+/**
+ * @param {string} value
+ * @param {RegExp} pattern
+ * @return {string?}
+ */
+export function match (value, pattern) {
+ return (value = pattern.exec(value)) ? value[0] : value
+}
+
+/**
+ * @param {string} value
+ * @param {(string|RegExp)} pattern
+ * @param {string} replacement
+ * @return {string}
+ */
+export function replace (value, pattern, replacement) {
+ return value.replace(pattern, replacement)
+}
+
+/**
+ * @param {string} value
+ * @param {string} value
+ * @return {number}
+ */
+export function indexof (value, search) {
+ return value.indexOf(search)
+}
+
+/**
+ * @param {string} value
+ * @param {number} index
+ * @return {number}
+ */
+export function charat (value, index) {
+ return value.charCodeAt(index) | 0
+}
+
+/**
+ * @param {string} value
+ * @param {number} begin
+ * @param {number} end
+ * @return {string}
+ */
+export function substr (value, begin, end) {
+ return value.slice(begin, end)
+}
+
+/**
+ * @param {string} value
+ * @return {number}
+ */
+export function strlen (value) {
+ return value.length
+}
+
+/**
+ * @param {any[]} value
+ * @return {number}
+ */
+export function sizeof (value) {
+ return value.length
+}
+
+/**
+ * @param {any} value
+ * @param {any[]} array
+ * @return {any}
+ */
+export function append (value, array) {
+ return array.push(value), value
+}
+
+/**
+ * @param {string[]} array
+ * @param {function} callback
+ * @return {string}
+ */
+export function combine (array, callback) {
+ return array.map(callback).join('')
+}
diff --git a/stylis.js/test/Middleware.js b/stylis.js/test/Middleware.js
new file mode 100644
index 0000000..4d867ad
--- /dev/null
+++ b/stylis.js/test/Middleware.js
@@ -0,0 +1,82 @@
+import {compile, serialize, stringify, middleware, rulesheet, prefixer, namespace} from "../index.js"
+
+const stack = []
+
+describe('Middleware', () => {
+ test('rulesheet', () => {
+ serialize(compile(`@import url('something.com/file.css');.user{ h1 {width:0;} @media{width:1;}@keyframes name{from{width:0;}to{width:1;}}}`), middleware([prefixer, stringify, rulesheet(value => stack.push(value))]))
+ expect(stack).to.deep.equal([
+ `@import url('something.com/file.css');`,
+ `.user h1{width:0;}`,
+ `@media{.user{width:1;}}`,
+ `@-webkit-keyframes name{from{width:0;}to{width:1;}}`,
+ `@keyframes name{from{width:0;}to{width:1;}}`,
+ ])
+ })
+
+ test('namespace', () => {
+ expect(serialize(compile(`.user{width:0; :global(p,a){width:1;} h1 {width:1; h2:last-child {width:2} h2 h3 {width:3}}}`), middleware([namespace, stringify]))).to.equal([
+ `.user{width:0;}`, `p,a{width:1;}`, `h1.user.user{width:1;}`, `h1.user h2:last-child.user{width:2;}`, `h1.user h2 h3.user{width:3;}`
+ ].join(''))
+ })
+
+ test('comments', () => {
+ expect(serialize(compile(`/*@noflip*/ .user{//noflip\n\n}`), middleware([value => value.type === 'comm' ? 'color:red;' : '', stringify]))).to.deep.equal([
+ `color:red;.user{color:red;}`
+ ].join())
+ })
+
+ test('prefixer', () => {
+ expect(serialize(compile(`.user{h1:last-child{clip-path:none;}`), middleware([prefixer, stringify]))).to.equal([
+ `.user h1:last-child{-webkit-clip-path:none;clip-path:none;}`,
+ ].join(''))
+
+ expect(serialize(compile(`@keyframes name{from{transform: rotate(0deg);}to{transform: rotate(360deg);}}`), middleware([prefixer, stringify]))).to.equal([
+ `@-webkit-keyframes name{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}`,
+ `@keyframes name{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}`
+ ].join(''))
+
+ expect(serialize(compile(`a:read-only{color:red;}`), middleware([prefixer, stringify]))).to.equal([
+ `a:-moz-read-only{color:red;}`, `a:read-only{color:red;}`
+ ].join(''))
+
+ expect(serialize(compile(`a:read-write{color:red;}`), middleware([prefixer, stringify]))).to.equal([
+ `a:-moz-read-write{color:red;}`, `a:read-write{color:red;}`
+ ].join(''))
+
+ expect(serialize(compile(`a::placeholder{color:red;}`), middleware([prefixer, stringify]))).to.equal([
+ `a::-webkit-input-placeholder{color:red;}`, `a::-moz-placeholder{color:red;}`, `a:-ms-input-placeholder{color:red;}`, `a::placeholder{color:red;}`
+ ].join(''))
+
+ expect(serialize(compile(`textarea::placeholder{font-size:14px;@media{font-size:16px;}}`), middleware([prefixer, stringify]))).to.equal([
+ `textarea::-webkit-input-placeholder{font-size:14px;}textarea::-moz-placeholder{font-size:14px;}textarea:-ms-input-placeholder{font-size:14px;}textarea::placeholder{font-size:14px;}`,
+ `@media{textarea::-webkit-input-placeholder{font-size:16px;}textarea::-moz-placeholder{font-size:16px;}textarea:-ms-input-placeholder{font-size:16px;}textarea::placeholder{font-size:16px;}}`
+ ].join(''))
+
+ expect(serialize(compile(`div:read-write{background-color:red;span{background-color:green;}}`), middleware([prefixer, stringify]))).to.equal([
+ `div:-moz-read-write{background-color:red;}`,
+ `div:read-write{background-color:red;}`,
+ `div:-moz-read-write span{background-color:green;}`,
+ `div:read-write span{background-color:green;}`
+ ].join(''))
+
+ expect(serialize(compile(`div:read-write span{background-color:hotpink;}`), middleware([prefixer, stringify]))).to.equal([
+ `div:-moz-read-write span{background-color:hotpink;}`,
+ `div:read-write span{background-color:hotpink;}`
+ ].join(''))
+
+ expect(serialize(compile(`.read-write:read-write,.read-only:read-only,.placeholder::placeholder{background-color:hotpink;}`), middleware([prefixer, stringify]))).to.equal([
+ `.read-write:-moz-read-write{background-color:hotpink;}`,
+ `.read-only:-moz-read-only{background-color:hotpink;}`,
+ `.placeholder::-webkit-input-placeholder{background-color:hotpink;}`,
+ `.placeholder::-moz-placeholder{background-color:hotpink;}`,
+ `.placeholder:-ms-input-placeholder{background-color:hotpink;}`,
+ `.read-write:read-write,.read-only:read-only,.placeholder::placeholder{background-color:hotpink;}`,
+ ].join(''))
+
+ expect(serialize(compile(`:read-write{background-color:hotpink;}`), middleware([prefixer, stringify]))).to.equal([
+ `:-moz-read-write{background-color:hotpink;}`,
+ `:read-write{background-color:hotpink;}`
+ ].join(''))
+ })
+})
diff --git a/stylis.js/test/Parser.js b/stylis.js/test/Parser.js
new file mode 100644
index 0000000..3bed9a9
--- /dev/null
+++ b/stylis.js/test/Parser.js
@@ -0,0 +1,930 @@
+import {compile, serialize, stringify} from "../index.js"
+
+const stylis = string => serialize(compile(`.user{${string}}`), stringify)
+
+describe('Parser', () => {
+ test('unnested', () => {
+ expect(serialize(compile(`--foo:none;@supports{--bar:none;}`), stringify)).to.equal(`--foo:none;@supports{--bar:none;}`)
+ })
+
+ test('escape', () => {
+ expect(
+ stylis(`
+ height:calc(\\))\t!important;
+ `)
+ ).to.equal(`.user{height:calc(\\))!important;}`)
+ })
+
+ test('calc', () => {
+ expect(
+ stylis(`
+ height:calc( 100vh - 1px );
+ height:calc(
+ 100vh -
+ 1px
+ );
+ `)
+ ).to.equal(`.user{height:calc( 100vh - 1px );height:calc(\n 100vh -\n 1px\n );}`)
+ })
+
+ test('at-rules', () => {
+ expect(
+ stylis(`
+ @-ms-viewport {
+ width:device-width;
+ }
+ @viewport {
+ width:device-width;
+ }
+ @page & {
+ invalid:true;
+ }
+ @page {
+ size:A4 landscape;
+ }
+ @document url(://www.w3.org/),url-prefix(//www.w3.org/),domain(mozilla.org),regexp("https:.*") {
+ body {
+ color: red;
+ }
+ }
+ @viewport {
+ min-width:640px;
+ max-width:800px;
+ }
+ @counter-style list {
+ system:fixed;
+ symbols:url();
+ suffix:" ";
+ }
+ @-moz-document url-prefix() {
+ .selector {
+ color:lime;
+ }
+ }
+ @page {
+ color:red;
+ @bottom-right {
+ content: counter(pages);
+ margin-right: 1cm;
+ }
+ width: none;
+ }
+ `)
+ ).to.equal([
+ `@-ms-viewport{width:device-width;}`,
+ `@viewport{width:device-width;}`,
+ `@page &{invalid:true;}`,
+ `@page{size:A4 landscape;}`,
+ `@document url(://www.w3.org/),url-prefix(//www.w3.org/),domain(mozilla.org),regexp("https:.*"){.user body{color:red;}}`,
+ `@viewport{min-width:640px;max-width:800px;}`,
+ `@counter-style list{system:fixed;symbols:url();suffix:" ";}`,
+ `@-moz-document url-prefix(){.user .selector{color:lime;}}`,
+ `@page{color:red;@bottom-right{content:counter(pages);margin-right:1cm;}width:none;}`
+ ].join(''))
+ })
+
+ test('universal selector', () => {
+ expect(
+ stylis(`
+ * {
+ color:red;
+ }
+ svg {
+ &, & * {
+ fill: currentColor;
+ }
+ }
+ * * {color:hotpink;}
+ `)
+ ).to.equal([
+ `.user *{color:red;}`,
+ `.user svg,.user svg *{fill:currentColor;}`,
+ `.user * *{color:hotpink;}`
+ ].join(''))
+ })
+
+ test('flat', () => {
+ expect(
+ stylis(`
+ color:20px;
+ font-size:20px
+ `)
+ ).to.equal(`.user{color:20px;font-size:20px;}`)
+ })
+
+ test('namespace', () => {
+ expect(
+ stylis(`
+ & {
+ color:red;
+ }
+ `)
+ ).to.equal(`.user{color:red;}`)
+ })
+
+ test('& in a string', () => {
+ expect(
+ stylis(`
+ & [href="https://css-tricks.com?a=1&b=2"] {
+ color:red;
+ }
+ `)
+ ).to.equal(`.user [href="https://css-tricks.com?a=1&b=2"]{color:red;}`)
+ })
+
+ test('comments', () => {
+ expect(
+ stylis(`
+ // line comment
+ // color: red;
+ /**
+ * removes block comments and line comments,
+ * there's a fire in the house // there is
+ */
+ button /*
+ // what's
+ xxx
+ */
+ {color: blue;}
+ // hello
+ button /* 1 */
+ {
+ color: red; /* 2 */
+ }
+ /*! 1 */
+ color: red;
+ /*! 2 */
+ h1 {
+ /*! 1 */
+ color: red;
+ /*! 2 */
+ color: red;
+ /*! 3 */
+ }
+ `)
+ ).to.equal([
+ `.user{color:red;}`,
+ `.user button{color:blue;}.user button{color:red;}`,
+ `.user h1{color:red;color:red;}`
+ ].join(''))
+ })
+
+ test('&', () => {
+ expect(
+ stylis(`
+ & {
+ color:blue;
+ }
+ &&& {
+ color:red;
+ }
+ & + & {
+ color:red;
+ }
+ .wrapper button& {
+ color:red;
+ }
+ &:hover & {
+ color: green;
+ }
+ div:hover & {
+ color: green;
+ }
+ div:hover & {
+ h1 & {
+ color:red;
+ }
+ }
+ `)
+ ).to.equal([
+ `.user{color:blue;}`,
+ `.user.user.user{color:red;}`,
+ `.user+.user{color:red;}`,
+ `.wrapper button.user{color:red;}`,
+ `.user:hover .user{color:green;}`,
+ `div:hover .user{color:green;}`,
+ `h1 div:hover .user{color:red;}`
+ ].join(''))
+ })
+
+ test('&:before', () => {
+ expect(
+ stylis(`
+ &:before{
+ color:blue;
+ }
+ `)
+ ).to.equal(`.user:before{color:blue;}`)
+ })
+
+ test('& :hover', () => {
+ expect(
+ stylis(`
+ & :hover{
+ color:blue;
+ }
+ `)
+ ).to.equal(`.user :hover{color:blue;}`)
+ })
+
+ test('div :hover', () => {
+ expect(
+ stylis(`
+ div :hover {
+ color:blue;
+ }
+ `)
+ ).to.equal(`.user div :hover{color:blue;}`)
+ })
+
+ test('@import', () => {
+ expect(stylis(`@import url('http://example.com');`)).to.equal(`@import url('http://example.com');`)
+ })
+
+ test('@supports', () => {
+ expect(
+ stylis(`
+ @supports (display:block) {
+ color:red;
+ h1 {
+ color:red;
+ h2 {
+ color:blue;
+ }
+ }
+ display:none;
+ }
+ @supports (appearance: none) {
+ color:red;
+ }
+ @supports (backdrop-filter: blur(10px)) {
+ backdrop-filter: blur(10px);
+ }
+ `)
+ ).to.equal([
+ '@supports (display:block){.user{color:red;display:none;}.user h1{color:red;}.user h1 h2{color:blue;}}',
+ '@supports (appearance: none){.user{color:red;}}',
+ '@supports (backdrop-filter: blur(10px)){.user{backdrop-filter:blur(10px);}}'
+ ].join(''))
+ })
+
+ test('@media', () => {
+ expect(
+ stylis(`
+ @media (max-width:600px) {
+ color:red;
+ h1 {
+ color:red;
+ h2 {
+ color:blue;
+ }
+ }
+ display:none;
+ }
+ @media (min-width:576px) {
+ &.card-deck {
+ .card {
+ &:not(:first-child) {
+ margin-left:15px;
+ }
+ &:not(:last-child) {
+ margin-right:15px;
+ }
+ }
+ }
+ }
+ @supports (display:block) {
+ @media (min-width:10px) {
+ background-color:seagreen;
+ }
+ }
+ @media (max-width:600px) {
+ & { color:red }
+ }
+ &:hover {
+ color:orange
+ }
+ `)
+ ).to.equal([
+ '@media (max-width:600px){.user{color:red;display:none;}.user h1{color:red;}.user h1 h2{color:blue;}}',
+ '@media (min-width:576px){.user.card-deck .card:not(:first-child){margin-left:15px;}.user.card-deck .card:not(:last-child){margin-right:15px;}}',
+ '@supports (display:block){@media (min-width:10px){.user{background-color:seagreen;}}}',
+ '@media (max-width:600px){.user{color:red;}}.user:hover{color:orange;}'
+ ].join(''))
+ })
+
+ test('@media specifity', () => {
+ expect(
+ stylis(`
+ > #box-not-working {
+ background:red;
+ padding-left:8px;
+ width:10px;
+ @media only screen and (min-width:10px) {
+ width: calc(10px + 90px * (100vw - 10px) / 90);
+ }
+ @media only screen and (min-width:90px) {
+ width: 90px;
+ }
+ height: 10px;
+ @media only screen and (min-width:10px) {
+ height: calc(10px + 90px * (100vw - 10px) / 90);
+ }
+ @media only screen and (min-width:90px) {
+ height: 90px;
+ }
+ }
+ `)
+ ).to.equal([
+ '.user >#box-not-working{background:red;padding-left:8px;width:10px;height:10px;}',
+ '@media only screen and (min-width:10px){.user >#box-not-working{width:calc(10px + 90px * (100vw - 10px) / 90);}}',
+ '@media only screen and (min-width:90px){.user >#box-not-working{width:90px;}}',
+ '@media only screen and (min-width:10px){.user >#box-not-working{height:calc(10px + 90px * (100vw - 10px) / 90);}}',
+ '@media only screen and (min-width:90px){.user >#box-not-working{height:90px;}}'
+ ].join(''))
+ })
+
+ test('@font-face', () => {
+ expect(
+ stylis(`
+ @font-face {
+ font-family:Pangolin;
+ src:url('Pangolin-Regular.ttf') format('truetype');
+ }
+ `)
+ ).to.equal(
+ `@font-face{font-family:Pangolin;src:url('Pangolin-Regular.ttf') format('truetype');}`
+ )
+ })
+
+ test('multiple selectors', () => {
+ expect(
+ stylis(`
+ span, h1 {
+ color:red;
+ }
+ h1, &:after, &:before {
+ color:red;
+ }
+ `)
+ ).to.equal([
+ `.user span,.user h1{color:red;}`,
+ `.user h1,.user:after,.user:before{color:red;}`
+ ].join(''))
+ })
+
+ test('[title="a,b"] and :matches(a,b)', () => {
+ expect(
+ stylis(`
+ .test:matches(a,b,c), .test {
+ color:blue;
+ }
+ .test[title=","] {
+ color:red;
+ }
+ [title="a,b,c, something"], h1, [title="a,b,c"] {
+ color:red
+ }
+ [title="a"],
+ [title="b"] {
+ color:red;
+ }
+ `)
+ ).to.equal([
+ `.user .test:matches(a,b,c),.user .test{color:blue;}`,
+ `.user .test[title=","]{color:red;}`,
+ `.user [title="a,b,c, something"],.user h1,.user [title="a,b,c"]{color:red;}`,
+ `.user [title="a"],.user [title="b"]{color:red;}`
+ ].join(''))
+ })
+
+ test('quotes', () => {
+ expect(
+ stylis(`
+ .foo:before {
+ content:".hello {world}";
+ content:".hello {world} ' ";
+ content:'.hello {world} " ';
+ }
+ `)
+ ).to.equal(`.user .foo:before{content:".hello {world}";content:".hello {world} ' ";content:'.hello {world} " ';}`)
+ })
+
+ test('quotes - escaping', () => {
+ expect(
+ stylis(`
+ .foo:before {
+ content:"\\"";
+ content:"\\\\\\"";
+
+ content:'\\'';
+ content:'\\\\\\'';
+ }
+ `)
+ ).to.equal(`.user .foo:before{content:"\\"";content:"\\\\\\"";content:'\\'';content:'\\\\\\'';}`)
+ })
+
+ test('remove empty css', () => {
+ expect(
+ stylis(`& { }`)
+ ).to.equal(``)
+ })
+
+ test('urls', () => {
+ expect(
+ stylis(`
+ background:url(http://url.com/});
+ background:url(http://url.com//1234) '('; // sdsd
+ background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAABCAIAAADsEU8HAAAACXBIW` +
+ `XMAAAsTAAALEwEAmpwYAAAAIklEQVQI12P8//8/Aw4wbdq0rKysAZG1trbGJXv06FH8sgDIJBbBfp+hFAAAAABJRU5ErkJggg==");`
+ )
+ ).to.equal([
+ `.user{background:url(http://url.com/});`,
+ `background:url(http://url.com//1234) '(';`,
+ `background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAABCAIAAADsEU8HAAAACXBIW`,
+ `XMAAAsTAAALEwEAmpwYAAAAIklEQVQI12P8//8/Aw4wbdq0rKysAZG1trbGJXv06FH8sgDIJBbBfp+hFAAAAABJRU5ErkJggg==");}`
+ ].join(''))
+ })
+
+ test('last semicolon omission', () => {
+ expect(
+ stylis(`
+ .content {
+ color:red
+ }
+ .content {
+ color:blue
+ }
+ `)
+ ).to.equal(
+ [`.user .content{color:red;}`, `.user .content{color:blue;}`].join('')
+ )
+ })
+
+ test(':matches(:not())', () => {
+ expect(
+ stylis(`
+ h1:matches(.a,.b,:not(.c)) {
+ display: none
+ }
+ `)
+ ).to.equal(`.user h1:matches(.a,.b,:not(.c)){display:none;}`)
+ })
+
+ test('@keyframes', () => {
+ expect(serialize(compile(`
+ @-webkit-keyframes slidein {
+ to { transform:translate(20px); }
+ }
+ @keyframes slidein {
+ to { transform:translate(20px); }
+ }
+ @keyframes hahaha {
+ 0%,
+ 1%{t:0}
+ }
+ @keyframes infinite-spinning {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+ }
+ `), stringify)).to.equal([
+ `@-webkit-keyframes slidein{to{transform:translate(20px);}}`,
+ `@keyframes slidein{to{transform:translate(20px);}}`,
+ `@keyframes hahaha{0%,1%{t:0;}}`,
+ `@keyframes infinite-spinning{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}`
+ ].join(''))
+ })
+
+ test('edge cases', () => {
+ expect(
+ stylis(`
+ @media (min-width:537px) {
+ border-bottom:4px solid red;
+ }
+ &::placeholder {
+ color:pink;
+ }
+ .a {color:'red'}
+ .b {color:"red"}
+ .a {color:red;}[role=button]{color:red;}
+ .b {padding:30 3}
+ .c {v-text-anchor: middle;}
+ `)
+ ).to.equal([
+ `@media (min-width:537px){.user{border-bottom:4px solid red;}}`,
+ `.user::placeholder{color:pink;}`,
+ `.user .a{color:'red';}`,
+ `.user .b{color:"red";}`,
+ `.user .a{color:red;}`,
+ `.user [role=button]{color:red;}`,
+ `.user .b{padding:30 3;}`,
+ `.user .c{v-text-anchor:middle;}`
+ ].join(''))
+ })
+
+ test('whitespace', () => {
+ expect(
+ stylis(`
+ @import\r\n "./a.css";
+
+ div {
+ ${'width:0; '}
+ }
+ .foo {
+ color : hotpink;
+ }
+ `)
+ ).to.equal([
+ `@import "./a.css";`,
+ `.user div{width:0;}`,
+ `.user .foo{color:hotpink;}`
+ ].join(''))
+ })
+
+ test('no trailing semi-colons', () => {
+ expect(stylis(`
+ h2 {
+ display:none
+ }
+ div:hover
+ {
+ color:red
+ }
+ `)).to.equal([
+ '.user h2{display:none;}',
+ '.user div:hover{color:red;}'
+ ].join(''))
+ })
+
+ test('multiline declaration', () => {
+ expect(stylis(`
+ html {
+ background:
+ linear-gradient(0deg, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)),
+ url(/static/background.svg);
+ }
+ `)).to.equal(`.user html{background:linear-gradient(0deg, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)),url(/static/background.svg);}`)
+ })
+
+ test('nesting selector multiple levels', () => {
+ expect(
+ stylis(`
+ a {
+ a {
+ a {
+ a {
+ a {
+ a {
+ a {
+ a {
+ a {
+ a {
+ a {
+ a {
+ color:red;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ `)
+ ).to.equal(`.user a a a a a a a a a a a a{color:red;}`)
+ })
+
+ test('nesting @media multiple levels', () => {
+ expect(
+ stylis(`
+ div {
+ @media {
+ a {
+ color:red;
+
+ @media {
+ h1 {
+ color:hotpink;
+ }
+ }
+ }
+ }
+ }
+ `)
+ ).to.equal([`@media{.user div a{color:red;}`, `@media{.user div a h1{color:hotpink;}}}`].join(''))
+ })
+
+ test('noop tail I', () => {
+ expect(stylis(`color:red/**/`)).to.equal(`.user{color:red;}`)
+ })
+
+ test('noop tail II', () => {
+ expect(stylis(`color:red//`,)).to.equal('.user{color:red;}')
+ })
+
+ test('noop tail III', () => {
+ expect(stylis(`color:red[]`)).to.equal(`.user{color:red[];}`)
+ })
+
+ test('noop tail IV', () => {
+ expect(stylis(`color:red()`)).to.equal(`.user{color:red();}`)
+ })
+
+ test('noop tail V', () => {
+ expect(stylis(`color:red''`)).to.equal(`.user{color:red'';}`)
+ })
+
+ test('noop tail VI', () => {
+ expect(stylis(`color:red""`)).to.equal(`.user{color:red"";}`)
+ })
+
+ test('noop tail VII', () => {
+ expect(stylis(`h1{color:red/**}`)).to.equal(`.user h1{color:red;}`)
+ })
+
+ test('context character I', () => {
+ expect(stylis(`.a{color:red;/* } */}`)).to.equal(`.user .a{color:red;}`)
+ })
+
+ test('context character II', () => {
+ expect(stylis(`.a{color:red;/*}*/}`)).to.equal(`.user .a{color:red;}`)
+ })
+
+ test('context character III', () => {
+ expect(stylis(`.a{color:red;/*{*/}`)).to.equal(`.user .a{color:red;}`)
+ })
+
+ test('context character IV', () => {
+ expect(stylis(`.a{/**/color:red}`)).to.equal(`.user .a{color:red;}`)
+ })
+
+ test('context character V', () => {
+ expect(stylis(`.a{color:red;/*//color:blue;*/}`)).to.equal(`.user .a{color:red;}`)
+ })
+
+ test('context character VI', () => {
+ expect(
+ stylis(
+ `background: url("img}.png");.a {background: url("img}.png");}`
+ )
+ ).to.equal([
+ `.user{background:url("img}.png");}`,
+ `.user .a{background:url("img}.png");}`
+ ].join(''))
+ })
+
+ test('context character VII', () => {
+ expect(
+ stylis(`background: url(img}.png);.a {background: url(img}.png);}`)
+ ).to.equal([
+ `.user{background:url(img}.png);}`,
+ `.user .a{background:url(img}.png);}`
+ ].join(''))
+ })
+
+ test('context character VIII', () => {
+ expect(
+ stylis(`background: url[img}.png];.a {background: url[img}.png];}`)
+ ).to.equal([
+ `.user{background:url[img}.png];}`,
+ `.user .a{background:url[img}.png];}`
+ ].join(''))
+ })
+
+ test('`--` in an identifier (#220)', () => {
+ expect(
+ stylis(`
+ .block--modifier {
+ color: hotpink;
+ }
+ .card {
+ color: black;
+ }
+ `)
+ ).to.equal([
+ `.user .block--modifier{color:hotpink;}`,
+ `.user .card{color:black;}`
+ ].join(''))
+ })
+
+ test('comments in rules not increasing depth of consecutive rules (#154)', () => {
+ expect(
+ stylis(`
+ font-size:2rem;
+ .one{color:black;/* foo */}
+ .two{color:black;/* bar */}
+ .three{color:black;/* baz */}
+ `)
+ ).to.equal([
+ '.user{font-size:2rem;}',
+ '.user .one{color:black;}',
+ '.user .two{color:black;}',
+ '.user .three{color:black;}'
+ ].join(''))
+ })
+
+ test('comment in a group of selectors inside a media query (#152)', () => {
+ expect(
+ stylis(`
+ @media (min-width: 400px) {
+ div /* comment */ {
+ border-left:1px solid hotpink;
+ }
+ span {
+ border-top:none;
+ }
+ }
+ `)
+ ).to.equal(`@media (min-width: 400px){.user div{border-left:1px solid hotpink;}.user span{border-top:none;}}`)
+ })
+
+ test('comment - bang at the start (#114)', () => {
+ expect(serialize(compile(`/*! test */body{color:red;}`), stringify)).to.equal('body{color:red;}')
+ })
+
+ test('parenthesis in string literal I (#151)', () => {
+ expect(
+ stylis(`
+ @media only screen and (max-width: 320px){
+ background: url("${'image_(1).jpg'}");
+ }
+
+ @media only screen and (min-width:321px) {
+ background: url("${'image_(1).jpg'}");
+ }
+ `)
+ ).to.equal([
+ `@media only screen and (max-width: 320px){.user{background:url("${'image_(1).jpg'}");}}`,
+ `@media only screen and (min-width:321px){.user{background:url("${'image_(1).jpg'}");}}`
+ ].join(''))
+ })
+
+ test('parenthesis in string literal II (#123)', () => {
+ expect(
+ stylis(`
+ .a {
+ background: url("${'image_(1).jpg'})");
+ }
+
+ .b {
+ background: url("abc");
+ }
+ `)
+ ).to.equal([
+ `.user .a{background:url("image_(1).jpg)");}`,
+ `.user .b{background:url("abc");}`
+ ].join(''))
+ })
+
+ test('parenthesis in string literal III (#128)', () => {
+ expect(
+ stylis(`
+ .icon {
+ background:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.117.323L8.044 6.398 2.595.323a1.105 1.105 0 0 0-1.562 1.562L6.482 7.96.323 14.119a1.105 1.105 0 0 0 1.562 1.562L7.96 9.608l5.449 6.073a1.103 1.103 0 1 0 1.56-1.562L9.517 8.046l6.159-6.161a1.103 1.103 0 1 0-1.56-1.562z' fill='rgba(85, 85, 85, 0.5)'/%3E%3C/svg%3E");
+ }
+
+ div {
+ background: cyan;
+ }
+ `)
+ ).to.equal([
+ `.user .icon{background:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.117.323L8.044 6.398 2.595.323a1.105 1.105 0 0 0-1.562 1.562L6.482 7.96.323 14.119a1.105 1.105 0 0 0 1.562 1.562L7.96 9.608l5.449 6.073a1.103 1.103 0 1 0 1.56-1.562L9.517 8.046l6.159-6.161a1.103 1.103 0 1 0-1.56-1.562z' fill='rgba(85, 85, 85, 0.5)'/%3E%3C/svg%3E");}`,
+ `.user div{background:cyan;}`
+ ].join(''))
+ })
+
+ test('parenthesis in string literal IV (#116)', () => {
+ expect(
+ stylis(`
+ .a .b .c {
+ width: calc(100% / "func()");
+ }
+
+ .d {
+ background: yellow;
+ }
+ `)
+ ).to.equal([
+ `.user .a .b .c{width:calc(100% / "func()");}`,
+ `.user .d{background:yellow;}`
+ ].join(''))
+ })
+
+ test('nested parenthesis', () => {
+ expect(stylis(`width: calc(calc(1) + 10);`)).to.equal(`.user{width:calc(calc(1) + 10);}`)
+ })
+
+ test('css variables edge cases (#144, #173)', () => {
+ expect(
+ stylis(`
+ --braces: { };
+ --at-keyword-unknown-block: @foobar {};
+ --at-keyword-known-block: @media {};
+ --cdo-at-top-level: <!--;
+ --cdc-at-top-level: -->;
+ --semicolon-not-top-level: (;);
+ --cdo-not-top-level: (<!--);
+ --cdc-not-top-level: (-->);
+ --ampersand-preserved: foo & bar;
+ `)
+ ).to.equal(`.user{` + [
+ `--braces:{};`,
+ `--at-keyword-unknown-block:@foobar{};`,
+ `--at-keyword-known-block:@media{};`,
+ `--cdo-at-top-level:<!--;`,
+ `--cdc-at-top-level:-->;`,
+ `--semicolon-not-top-level:(;);`,
+ `--cdo-not-top-level:(<!--);`,
+ `--cdc-not-top-level:(-->);`,
+ `--ampersand-preserved:foo & bar;`
+ ].join('') +'}')
+ })
+
+ test('does not hang on unterminated block comment (#129)', () => {
+ expect(stylis(`/*`)).to.equal(``)
+ })
+
+ test('does not hang on unterminated function', () => {
+ expect(stylis(`(`)).to.equal(``)
+ })
+
+ test('handles single `/` in a value', () => {
+ expect(stylis(`font: 12px/14px serif;`)).to.equal(`.user{font:12px/14px serif;}`)
+ })
+
+ test('nested', () => {
+ expect(stylis(`
+ div {
+ h2 {
+ color:red;
+ h3 {
+ color:blue;
+ }
+ }
+ }
+
+ .foo & {
+ width:1px;
+ &:hover {
+ color:black;
+ }
+ li {
+ color:white;
+ }
+ }
+
+ h1, div {
+ color:red;
+ h2,
+ &:before {
+ color:red;
+ }
+ color:blue;
+ header {
+ font-size:12px;
+ }
+ @media {
+ color:red;
+ }
+ @media {
+ color:blue;
+ }
+ }
+
+ &.foo {
+ &.bar {
+ color:orange
+ }
+ }
+
+ &.foo {
+ &.bar {
+ &.barbar {
+ color:orange
+ }
+ }
+ }
+ `)).to.equal([
+ `.user div h2{color:red;}`+
+ `.user div h2 h3{color:blue;}`+
+ `.foo .user{width:1px;}`+
+ `.foo .user:hover{color:black;}`+
+ `.foo .user li{color:white;}`+
+ `.user h1,.user div{color:red;color:blue;}`+
+ `.user h1 h2,.user div h2,.user h1:before,.user div:before{color:red;}`+
+ `.user h1 header,.user div header{font-size:12px;}`+
+ `@media{.user h1,.user div{color:red;}}`+
+ `@media{.user h1,.user div{color:blue;}}`+
+ `.user.foo.bar{color:orange;}`+
+ `.user.foo.bar.barbar{color:orange;}`
+ ].join(''))
+ })
+})
diff --git a/stylis.js/test/Prefixer.js b/stylis.js/test/Prefixer.js
new file mode 100644
index 0000000..c744804
--- /dev/null
+++ b/stylis.js/test/Prefixer.js
@@ -0,0 +1,178 @@
+import {prefix} from "../index.js"
+
+describe('Prefixer', () => {
+ test('flex-box', () => {
+ expect(prefix(`display:block;`, 7)).to.equal(['display:block;'].join())
+ expect(prefix(`display:flex!important;`, 7)).to.equal([`display:-webkit-box!important;`, `display:-webkit-flex!important;`, `display:-ms-flexbox!important;`, `display:flex!important;`].join(''))
+ expect(prefix(`display:inline-flex;`, 7)).to.equal([`display:-webkit-inline-box;`, `display:-webkit-inline-flex;`, `display:-ms-inline-flexbox;`, `display:inline-flex;`].join(''))
+ expect(prefix(`display:inline-box;`, 7)).to.equal([`-webkit-display:inline-box;`, `display:inline-box;`].join(''))
+ expect(prefix(`flex:inherit;`, 4)).to.equal([`-webkit-flex:inherit;`, `-ms-flex:inherit;`, `flex:inherit;`].join(''))
+ expect(prefix(`flex-grow:none;`, 9)).to.equal([`-webkit-box-flex:none;`, `-webkit-flex-grow:none;`, `-ms-flex-positive:none;`, `flex-grow:none;`].join(''))
+ expect(prefix(`flex-shrink:none;`, 11)).to.equal([`-webkit-flex-shrink:none;`, `-ms-flex-negative:none;`, `flex-shrink:none;`].join(''))
+ expect(prefix(`flex-basis:none;`, 10)).to.equal([`-webkit-flex-basis:none;`, `-ms-flex-preferred-size:none;`, `flex-basis:none;`].join(''))
+ expect(prefix(`align-self:value;`, 10)).to.equal([`-webkit-align-self:value;`, `-ms-flex-item-align:value;`, `align-self:value;`].join(''))
+ expect(prefix(`align-self:flex-start;`, 10)).to.equal([`-webkit-align-self:flex-start;`, `-ms-flex-item-align:flex-start;`, `align-self:flex-start;`].join(''))
+ expect(prefix(`align-self:flex-end;`, 10)).to.equal([`-webkit-align-self:flex-end;`, `-ms-flex-item-align:flex-end;`, `align-self:flex-end;`].join(''))
+ expect(prefix(`align-content:value;`, 13)).to.equal([`-webkit-align-content:value;`, `-ms-flex-line-pack:value;`, `align-content:value;`].join(''))
+ expect(prefix(`align-content:flex-start;`, 13)).to.equal([`-webkit-align-content:flex-start;`, `-ms-flex-line-pack:flex-start;`, `align-content:flex-start;`].join(''))
+ expect(prefix(`align-content:flex-end;`, 13)).to.equal([`-webkit-align-content:flex-end;`, `-ms-flex-line-pack:flex-end;`, `align-content:flex-end;`].join(''))
+ expect(prefix(`align-items:value;`, 11)).to.equal([`-webkit-align-items:value;`, `-webkit-box-align:value;`, `-ms-flex-align:value;`, `align-items:value;`].join(''))
+ expect(prefix(`justify-content:flex-end;`, 15)).to.equal([`-webkit-box-pack:end;`, `-ms-flex-pack:end;`, `-webkit-justify-content:flex-end;`, `justify-content:flex-end;`].join(''))
+ expect(prefix(`justify-content:flex-start;`, 15)).to.equal([`-webkit-box-pack:start;`, `-ms-flex-pack:start;`, `-webkit-justify-content:flex-start;`, `justify-content:flex-start;`].join(''))
+ expect(prefix(`justify-content:justify;`, 15)).to.equal([`-webkit-box-pack:justify;`, `-ms-flex-pack:justify;`, `-webkit-justify-content:justify;`, `justify-content:justify;`].join(''))
+ expect(prefix(`justify-content:space-between;`, 15)).to.equal([`-webkit-box-pack:justify;`, `-webkit-justify-content:space-between;`, `justify-content:space-between;`].join(''))
+ expect(prefix(`justify-items:center;`, 13)).to.equal([`justify-items:center;`].join(''))
+ expect(prefix(`order:flex;`, 5)).to.equal([`-webkit-order:flex;`, `-ms-flex-order:flex;`, `order:flex;`].join(''))
+ expect(prefix(`flex-direction:column;`, 14)).to.equal([`-webkit-flex-direction:column;`, `-ms-flex-direction:column;`, `flex-direction:column;`].join(''))
+ })
+
+ test('transform', () => {
+ expect(prefix(`transform:rotate(30deg);`, 9)).to.equal([`-webkit-transform:rotate(30deg);`, `-moz-transform:rotate(30deg);`, `-ms-transform:rotate(30deg);`, `transform:rotate(30deg);`].join(''))
+ })
+
+ test('cursor', () => {
+ expect(prefix(`cursor:none;`, 6)).to.equal([`cursor:none;`].join(''))
+ expect(prefix(`cursor:grab;`, 6)).to.equal([`cursor:-webkit-grab;`, `cursor:grab;`].join(''))
+ expect(prefix(`cursor:image-set(url(foo.jpg) 2x), pointer;`, 6)).to.equal([
+ `cursor:-webkit-image-set(url(foo.jpg) 2x), pointer;`,
+ `cursor:image-set(url(foo.jpg) 2x), pointer;`
+ ].join(''))
+ expect(prefix(`cursor:image-set(url(foo.jpg) 2x), grab;`, 6)).to.equal([
+ `cursor:-webkit-image-set(url(foo.jpg) 2x), -webkit-grab;`,
+ `cursor:image-set(url(foo.jpg) 2x), grab;`
+ ].join(''))
+ })
+
+ test('backface-visibility', () => {
+ expect(prefix(`backface-visibility:hidden;`, 19)).to.equal([`-webkit-backface-visibility:hidden;`, `backface-visibility:hidden;`].join(''))
+ })
+
+ test('transition', () => {
+ expect(prefix(`transition:transform 1s,transform all 400ms,text-transform;`, 10)).to.equal([
+ `-webkit-transition:-webkit-transform 1s,-webkit-transform all 400ms,text-transform;`,
+ `transition:transform 1s,transform all 400ms,text-transform;`
+ ].join(''))
+ })
+
+ test('writing-mode', () => {
+ expect(prefix(`writing-mode:none;`, 12)).to.equal([`-webkit-writing-mode:none;`, `-ms-writing-mode:none;`, `writing-mode:none;`].join(''))
+ expect(prefix(`writing-mode:vertical-lr;`, 12)).to.equal([`-webkit-writing-mode:vertical-lr;`, `-ms-writing-mode:tb;`, `writing-mode:vertical-lr;`].join(''))
+ expect(prefix(`writing-mode:vertical-rl;`, 12)).to.equal([`-webkit-writing-mode:vertical-rl;`, `-ms-writing-mode:tb-rl;`, `writing-mode:vertical-rl;`].join(''))
+ expect(prefix(`writing-mode:horizontal-tb;`, 12)).to.equal([`-webkit-writing-mode:horizontal-tb;`, `-ms-writing-mode:lr;`, `writing-mode:horizontal-tb;`].join(''))
+ expect(prefix(`writing-mode:sideways-rl;`, 12)).to.equal([`-webkit-writing-mode:sideways-rl;`, `-ms-writing-mode:tb-rl;`, `writing-mode:sideways-rl;`].join(''))
+ expect(prefix(`writing-mode:sideways-lr;`, 12)).to.equal([`-webkit-writing-mode:sideways-lr;`, `-ms-writing-mode:tb;`, `writing-mode:sideways-lr;`].join(''))
+ })
+
+ test('columns', () => {
+ expect(prefix(`columns:auto;`, 7)).to.equal([`-webkit-columns:auto;`, `columns:auto;`].join(''))
+ expect(prefix(`column-count:auto;`, 12)).to.equal([`-webkit-column-count:auto;`, `column-count:auto;`].join(''))
+ expect(prefix(`column-fill:auto;`, 11)).to.equal([`-webkit-column-fill:auto;`, `column-fill:auto;`].join(''))
+ expect(prefix(`column-gap:auto;`, 10)).to.equal([`-webkit-column-gap:auto;`, `column-gap:auto;`].join(''))
+ expect(prefix(`column-rule:auto;`, 11)).to.equal([`-webkit-column-rule:auto;`, `column-rule:auto;`].join(''))
+ expect(prefix(`column-rule-color:auto;`, 17)).to.equal([`-webkit-column-rule-color:auto;`, `column-rule-color:auto;`].join(''))
+ expect(prefix(`column-rule-style:auto;`, 17)).to.equal([`-webkit-column-rule-style:auto;`, `column-rule-style:auto;`].join(''))
+ expect(prefix(`column-rule-width:auto;`, 17)).to.equal([`-webkit-column-rule-width:auto;`, `column-rule-width:auto;`].join(''))
+ expect(prefix(`column-span:auto;`, 11)).to.equal([`-webkit-column-span:auto;`, `column-span:auto;`].join(''))
+ expect(prefix(`column-width:auto;`, 12)).to.equal([`-webkit-column-width:auto;`, `column-width:auto;`].join(''))
+ })
+
+ test('text', () => {
+ expect(prefix(`text-align:left;`, 10)).to.equal([`text-align:left;`].join(''))
+ expect(prefix(`text-transform:none;`, 14)).to.equal([`text-transform:none;`].join(''))
+ expect(prefix(`text-shadow:none;`, 11)).to.equal([`text-shadow:none;`].join(''))
+ expect(prefix(`text-size-adjust:none;`, 16)).to.equal([`-webkit-text-size-adjust:none;`, `-moz-text-size-adjust:none;`, `-ms-text-size-adjust:none;`, `text-size-adjust:none;`].join(''))
+ expect(prefix(`text-decoration:none;`, 15)).to.equal([`-webkit-text-decoration:none;`, `text-decoration:none;`].join(''))
+ })
+
+ test('mask', () => {
+ expect(prefix(`mask:none;`, 10)).to.equal([`-webkit-mask:none;`, `mask:none;`].join(''))
+ expect(prefix(`mask-image:none;`, 10)).to.equal([`-webkit-mask-image:none;`, `mask-image:none;`].join(''))
+ expect(prefix(`mask-image:linear-gradient(#fff);`, 10)).to.equal([`-webkit-mask-image:linear-gradient(#fff);`, `mask-image:linear-gradient(#fff);`].join(''))
+ expect(prefix(`mask-mode:none;`, 10)).to.equal([`-webkit-mask-mode:none;`, `mask-mode:none;`].join(''))
+ expect(prefix(`mask-clip:none;`, 10)).to.equal([`-webkit-mask-clip:none;`, `mask-clip:none;`].join(''))
+ expect(prefix(`mask-size:none;`, 10)).to.equal([`-webkit-mask-size:none;`, `mask-size:none;`].join(''))
+ expect(prefix(`mask-repeat:none;`, 10)).to.equal([`-webkit-mask-repeat:none;`, `mask-repeat:none;`].join(''))
+ expect(prefix(`mask-origin:none;`, 10)).to.equal([`-webkit-mask-origin:none;`, `mask-origin:none;`].join(''))
+ expect(prefix(`mask-position:none;`, 10)).to.equal([`-webkit-mask-position:none;`, `mask-position:none;`].join(''))
+ expect(prefix(`mask-composite:none;`, 10)).to.equal([`-webkit-mask-composite:none;`, `mask-composite:none;`].join(''))
+ })
+
+ test('filter', () => {
+ expect(prefix(`filter:grayscale(100%);`, 6)).to.equal([`-webkit-filter:grayscale(100%);`, `filter:grayscale(100%);`].join(''))
+ expect(prefix(`fill:red;`, 4)).to.equal([`fill:red;`].join(''))
+ })
+
+ test('position', () => {
+ expect(prefix(`position:relative;`, 8)).to.equal([`position:relative;`].join(''))
+ expect(prefix(`position:sticky;`, 8)).to.equal([`-webkit-position:sticky;`, `position:sticky;`].join(''))
+ })
+
+ test('box', () => {
+ expect(prefix(`box-decoration-break:slice;`, 20)).to.equal([`-webkit-box-decoration-break:slice;`, `box-decoration-break:slice;`].join(''))
+ expect(prefix(`box-sizing:border-box;`, 10)).to.equal([`box-sizing:border-box;`].join(''))
+ })
+
+ test('clip', () => {
+ expect(prefix(`clip-path:none;`, 9)).to.equal([`-webkit-clip-path:none;`, `clip-path:none;`].join(''))
+ })
+
+ test('size', () => {
+ expect(prefix(`width:auto;`, 5)).to.equal([`width:auto;`].join(''))
+ expect(prefix(`width:unset;`, 5)).to.equal([`width:unset;`].join(''))
+ expect(prefix(`width:initial;`, 5)).to.equal([`width:initial;`].join(''))
+ expect(prefix(`width:inherit;`, 5)).to.equal([`width:inherit;`].join(''))
+ expect(prefix(`width:10;`, 5)).to.equal([`width:10;`].join(''))
+ expect(prefix(`width:min();`, 5)).to.equal([`width:min();`].join(''))
+ expect(prefix(`width:var(--foo-content);`, 5)).to.equal([`width:var(--foo-content);`].join(''))
+ expect(prefix(`width:var(-content);`, 5)).to.equal([`width:var(-content);`].join(''))
+ expect(prefix(`width:var(--max-content);`, 5)).to.equal([`width:var(--max-content);`].join(''))
+ expect(prefix(`width:--max-content;`, 5)).to.equal([`width:--max-content;`].join(''))
+ expect(prefix(`width:fit-content;`, 5)).to.equal([`width:-webkit-fit-content;`, `width:-moz-content;`, `width:fit-content;`].join(''))
+ expect(prefix(`min-width:max-content;`, 9)).to.equal([`min-width:-webkit-max-content;`, `min-width:-moz-max-content;`, `min-width:max-content;`].join(''))
+ expect(prefix(`max-width:min-content;`, 9)).to.equal([`max-width:-webkit-min-content;`, `max-width:-moz-min-content;`, `max-width:min-content;`].join(''))
+ expect(prefix(`height:fill-available;`, 6)).to.equal([`height:-webkit-fill-available;`, `height:-moz-available;`, `height:fill-available;`].join(''))
+ expect(prefix(`max-height:fit-content;`, 10)).to.equal([`max-height:-webkit-fit-content;`, `max-height:-moz-content;`, `max-height:fit-content;`].join(''))
+ expect(prefix(`width:stretch;`, 5)).to.equal([`width:-webkit-fill-available;`, `width:-moz-available;`, `width:fill-available;`, `width:stretch;`].join(''))
+ expect(prefix(`width:stretch !important;`, 5)).to.equal([`width:-webkit-fill-available !important;`, `width:-moz-available !important;`, `width:fill-available !important;`, `width:stretch !important;`].join(''))
+ expect(prefix(`min-block-size:max-content;`, 14)).to.equal([`min-block-size:-webkit-max-content;`, `min-block-size:-moz-max-content;`, `min-block-size:max-content;`].join(''))
+ expect(prefix(`min-inline-size:max-content;`, 15)).to.equal([`min-inline-size:-webkit-max-content;`, `min-inline-size:-moz-max-content;`, `min-inline-size:max-content;`].join(''))
+ })
+
+ test('zoom', () => {
+ expect(prefix(`min-zoom:0;`, 8)).to.equal([`min-zoom:0;`].join(''))
+ })
+
+ test('background', () => {
+ expect(prefix(`background:none;`, 10)).to.equal([`background:none;`].join(''))
+ expect(prefix(`background:image-set(url(foo.jpg) 2x);`, 10)).to.equal([`background:-webkit-image-set(url(foo.jpg) 2x);`, `background:image-set(url(foo.jpg) 2x);`].join(''))
+ expect(prefix(`background-image:image-set(url(foo.jpg) 2x);`, 16)).to.equal([`background-image:-webkit-image-set(url(foo.jpg) 2x);`, `background-image:image-set(url(foo.jpg) 2x);`].join(''))
+ })
+
+ test('background-clip', () => {
+ expect(prefix(`background-clip:text;`, 15)).to.equal([`-webkit-background-clip:text;`, `background-clip:text;`].join(''))
+ })
+
+ test('margin-inline', () => {
+ expect(prefix(`margin-inline-start:20px;`, 19)).to.equal([`-webkit-margin-start:20px;`, `margin-inline-start:20px;`].join(''))
+ expect(prefix(`margin-inline-end:20px;`, 17)).to.equal([`-webkit-margin-end:20px;`, `margin-inline-end:20px;`].join(''))
+ })
+
+ test('user-select', () => {
+ expect(prefix(`user-select:none;`, 11)).to.equal([`-webkit-user-select:none;`, `-moz-user-select:none;`, `-ms-user-select:none;`, `user-select:none;`].join(''))
+ })
+
+ test('appearance', () => {
+ expect(prefix(`appearance:none;`, 10)).to.equal([`-webkit-appearance:none;`, `-moz-appearance:none;`, `-ms-appearance:none;`, `appearance:none;`].join(''))
+ })
+
+ test('animation', () => {
+ expect(prefix(`animation:inherit;`, 9)).to.equal([`-webkit-animation:inherit;`, `animation:inherit;`].join(''))
+ expect(prefix(`animation-duration:0.6s;`, 18)).to.equal([`-webkit-animation-duration:0.6s;`, `animation-duration:0.6s;`].join(''))
+ expect(prefix(`animation-name:slidein;`, 14)).to.equal([`-webkit-animation-name:slidein;`, `animation-name:slidein;`].join(''))
+ expect(prefix(`animation-iteration-count:infinite;`, 25)).to.equal([`-webkit-animation-iteration-count:infinite;`, `animation-iteration-count:infinite;`].join(''))
+ expect(prefix(`animation-timing-function:cubic-bezier(0.1,0.7,1.0,0.1);`, 25)).to.equal([
+ `-webkit-animation-timing-function:cubic-bezier(0.1,0.7,1.0,0.1);`,
+ `animation-timing-function:cubic-bezier(0.1,0.7,1.0,0.1);`
+ ].join(''))
+ })
+})
diff --git a/stylis.js/test/Tokenizer.js b/stylis.js/test/Tokenizer.js
new file mode 100644
index 0000000..2be5bb3
--- /dev/null
+++ b/stylis.js/test/Tokenizer.js
@@ -0,0 +1,9 @@
+import {tokenize} from "../index.js"
+
+describe('Tokenizer', () => {
+ test('tokenize', () => {
+ expect(tokenize('h1 h2 (h1 h2) 1 / 3 * 2 + 1 [1 2] "1 2" a')).to.deep.equal([
+ 'h1', ' ', 'h2', ' ', '(h1 h2)', ' ', '1', ' ', '/', ' ', '3', ' ', '*', ' ', '2', ' ', '+', ' ', '1', ' ', '[1 2]', ' ', '"1 2"', ' ', 'a'
+ ])
+ })
+})
diff --git a/tiny-invariant/.babelrc b/tiny-invariant/.babelrc
new file mode 100644
index 0000000..68547f3
--- /dev/null
+++ b/tiny-invariant/.babelrc
@@ -0,0 +1,12 @@
+{
+ "presets": [
+ "@babel/flow",
+ [
+ "@babel/env",
+ {
+ "loose": true
+ }
+ ]
+ ],
+ "comments": false
+}
diff --git a/tiny-invariant/.flowconfig b/tiny-invariant/.flowconfig
new file mode 100644
index 0000000..1fed445
--- /dev/null
+++ b/tiny-invariant/.flowconfig
@@ -0,0 +1,11 @@
+[ignore]
+
+[include]
+
+[libs]
+
+[lints]
+
+[options]
+
+[strict]
diff --git a/tiny-invariant/.gitignore b/tiny-invariant/.gitignore
new file mode 100644
index 0000000..05bf324
--- /dev/null
+++ b/tiny-invariant/.gitignore
@@ -0,0 +1,17 @@
+# editors
+.idea
+.vscode
+
+# library
+node_modules/
+
+# MacOS
+.DS_Store
+
+# generated files
+dist/
+
+# logs
+yarn-error.log
+npm-debug.log
+npm-debug.log.*
diff --git a/tiny-invariant/.prettierrc b/tiny-invariant/.prettierrc
new file mode 100644
index 0000000..d579fef
--- /dev/null
+++ b/tiny-invariant/.prettierrc
@@ -0,0 +1,7 @@
+{
+ "trailingComma": "all",
+ "semi": true,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true
+}
diff --git a/tiny-invariant/.travis.yml b/tiny-invariant/.travis.yml
new file mode 100644
index 0000000..0fbb6e4
--- /dev/null
+++ b/tiny-invariant/.travis.yml
@@ -0,0 +1,13 @@
+language: node_js
+cache: yarn
+node_js:
+- '8.4'
+script:
+- yarn run validate
+- yarn run test
+# Required for lock file generation
+# https://github.com/greenkeeperio/greenkeeper-lockfile
+before_install: yarn global add greenkeeper-lockfile@1
+before_script:
+ - greenkeeper-lockfile-update
+after_script: greenkeeper-lockfile-upload
diff --git a/tiny-invariant/README.md b/tiny-invariant/README.md
new file mode 100644
index 0000000..b8d9f8d
--- /dev/null
+++ b/tiny-invariant/README.md
@@ -0,0 +1,88 @@
+# `tiny-invariant` 🔬💥
+
+[![Build Status](https://travis-ci.org/alexreardon/tiny-invariant.svg?branch=master)](https://travis-ci.org/alexreardon/tiny-invariant)
+[![npm](https://img.shields.io/npm/v/tiny-invariant.svg)](https://www.npmjs.com/package/tiny-invariant) [![dependencies](https://david-dm.org/alexreardon/tiny-invariant.svg)](https://david-dm.org/alexreardon/tiny-invariant)
+[![min](https://img.shields.io/bundlephobia/min/tiny-invariant.svg)](https://www.npmjs.com/package/tiny-invariant)
+[![minzip](https://img.shields.io/bundlephobia/minzip/tiny-invariant.svg)](https://www.npmjs.com/package/tiny-invariant)
+
+A tiny [`invariant`](https://www.npmjs.com/package/invariant) alternative.
+
+## What is `invariant`?
+
+An `invariant` function tasks a value, and if the value is [falsy](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy) then the `invariant` function will throw. If the value is [truthy](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy), then the function will not throw.
+
+```js
+import invariant from 'tiny-invariant';
+
+invariant(truthyValue, 'This should not throw!');
+
+invariant(falsyValue, 'This will throw!');
+// Error('Invariant violation: This will throw!');
+```
+
+## Why `tiny-invariant`?
+
+The [`library: invariant`](https://www.npmjs.com/package/invariant) supports passing in arguments to the `invariant` function in a sprintf style `(condition, format, a, b, c, d, e, f)`. It has internal logic to execute the sprintf substitutions. The sprintf logic is not removed in production builds. `tiny-invariant` has dropped all of the sprintf logic. `tiny-invariant` allows you to pass a single string message. With [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) there is really no need for a custom message formatter to be built into the library. If you need a multi part message you can just do this: `invariant(condition, 'Hello, ${name} - how are you today?')`
+
+## API: `(condition: mixed, message?: string) => void`
+
+- `condition` is required and can be anything
+- `message` is an optional string
+
+## Installation
+
+```bash
+# yarn
+yarn add tiny-invariant
+
+# bash
+npm add tiny-invariant --save
+```
+
+## Dropping your `message` for kb savings!
+
+We recommend using [`babel-plugin-dev-expression`](https://www.npmjs.com/package/babel-plugin-dev-expression) to remove the `message` argument from your `invariant` calls in production builds to save kbs!
+
+What it does it turn your code that looks like this:
+
+```js
+invariant(condition, 'My cool message that takes up a lot of kbs');
+```
+
+Into this
+
+```js
+if (!condition) {
+ if ('production' !== process.env.NODE_ENV) {
+ invariant(false, 'My cool message that takes up a lot of kbs');
+ } else {
+ invariant(false);
+ }
+}
+```
+
+Your bundler can then drop the code in the `"production" !== process.env.NODE_ENV` block for your production builds
+
+Final result:
+
+```js
+if (!condition) {
+ invariant(false);
+}
+```
+
+> For `rollup` use [rollup-plugin-replace](https://github.com/rollup/rollup-plugin-replace) and set `NODE_ENV` to `production` and then `rollup` will treeshake out the unused code
+>
+> [`Webpack` instructions](https://webpack.js.org/guides/production/#specify-the-mode)
+
+## Builds
+
+- We have a `es` (EcmaScript module) build (because you _know_ you want to deduplicate this super heavy library)
+- We have a `cjs` (CommonJS) build
+- We have a `umd` (Universal module definition) build in case you needed it
+
+We expect `process.env.NODE_ENV` to be available at module compilation. We cache this value
+
+## That's it!
+
+🤘
diff --git a/tiny-invariant/flow-typed/npm/@babel/core_vx.x.x.js b/tiny-invariant/flow-typed/npm/@babel/core_vx.x.x.js
new file mode 100644
index 0000000..9572db5
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/@babel/core_vx.x.x.js
@@ -0,0 +1,305 @@
+// flow-typed signature: afb3994794f3c2f840f54e3cb3826ce7
+// flow-typed version: <<STUB>>/@babel/core_v^7.1.2/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * '@babel/core'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module '@babel/core' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module '@babel/core/lib/config/caching' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/config-chain' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/config-descriptors' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/configuration' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/index-browser' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/package' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/plugins' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/types' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/utils' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/full' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/helpers/config-api' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/helpers/environment' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/item' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/partial' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/pattern-to-regex' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/plugin' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/util' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/validation/option-assertions' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/validation/options' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/validation/plugins' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/validation/removed' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/parse' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/tools/build-external-helpers' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform-ast' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform-file-browser' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform-file-sync-browser' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform-file' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/block-hoist-plugin' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/file/file' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/file/generate' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/file/merge-map' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/normalize-file' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/normalize-opts' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/plugin-pass' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/util/missing-plugin-helper' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module '@babel/core/lib/config/caching.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/caching'>;
+}
+declare module '@babel/core/lib/config/config-chain.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/config-chain'>;
+}
+declare module '@babel/core/lib/config/config-descriptors.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/config-descriptors'>;
+}
+declare module '@babel/core/lib/config/files/configuration.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/configuration'>;
+}
+declare module '@babel/core/lib/config/files/index-browser.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/index-browser'>;
+}
+declare module '@babel/core/lib/config/files/index.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/index'>;
+}
+declare module '@babel/core/lib/config/files/package.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/package'>;
+}
+declare module '@babel/core/lib/config/files/plugins.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/plugins'>;
+}
+declare module '@babel/core/lib/config/files/types.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/types'>;
+}
+declare module '@babel/core/lib/config/files/utils.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/utils'>;
+}
+declare module '@babel/core/lib/config/full.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/full'>;
+}
+declare module '@babel/core/lib/config/helpers/config-api.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/helpers/config-api'>;
+}
+declare module '@babel/core/lib/config/helpers/environment.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/helpers/environment'>;
+}
+declare module '@babel/core/lib/config/index.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/index'>;
+}
+declare module '@babel/core/lib/config/item.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/item'>;
+}
+declare module '@babel/core/lib/config/partial.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/partial'>;
+}
+declare module '@babel/core/lib/config/pattern-to-regex.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/pattern-to-regex'>;
+}
+declare module '@babel/core/lib/config/plugin.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/plugin'>;
+}
+declare module '@babel/core/lib/config/util.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/util'>;
+}
+declare module '@babel/core/lib/config/validation/option-assertions.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/validation/option-assertions'>;
+}
+declare module '@babel/core/lib/config/validation/options.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/validation/options'>;
+}
+declare module '@babel/core/lib/config/validation/plugins.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/validation/plugins'>;
+}
+declare module '@babel/core/lib/config/validation/removed.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/validation/removed'>;
+}
+declare module '@babel/core/lib/index.js' {
+ declare module.exports: $Exports<'@babel/core/lib/index'>;
+}
+declare module '@babel/core/lib/parse.js' {
+ declare module.exports: $Exports<'@babel/core/lib/parse'>;
+}
+declare module '@babel/core/lib/tools/build-external-helpers.js' {
+ declare module.exports: $Exports<'@babel/core/lib/tools/build-external-helpers'>;
+}
+declare module '@babel/core/lib/transform-ast.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform-ast'>;
+}
+declare module '@babel/core/lib/transform-file-browser.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform-file-browser'>;
+}
+declare module '@babel/core/lib/transform-file-sync-browser.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform-file-sync-browser'>;
+}
+declare module '@babel/core/lib/transform-file.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform-file'>;
+}
+declare module '@babel/core/lib/transform.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform'>;
+}
+declare module '@babel/core/lib/transformation/block-hoist-plugin.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/block-hoist-plugin'>;
+}
+declare module '@babel/core/lib/transformation/file/file.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/file/file'>;
+}
+declare module '@babel/core/lib/transformation/file/generate.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/file/generate'>;
+}
+declare module '@babel/core/lib/transformation/file/merge-map.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/file/merge-map'>;
+}
+declare module '@babel/core/lib/transformation/index.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/index'>;
+}
+declare module '@babel/core/lib/transformation/normalize-file.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/normalize-file'>;
+}
+declare module '@babel/core/lib/transformation/normalize-opts.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/normalize-opts'>;
+}
+declare module '@babel/core/lib/transformation/plugin-pass.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/plugin-pass'>;
+}
+declare module '@babel/core/lib/transformation/util/missing-plugin-helper.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/util/missing-plugin-helper'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/@babel/preset-env_vx.x.x.js b/tiny-invariant/flow-typed/npm/@babel/preset-env_vx.x.x.js
new file mode 100644
index 0000000..6842b1e
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/@babel/preset-env_vx.x.x.js
@@ -0,0 +1,144 @@
+// flow-typed signature: 343a2e6303af4218fd9eaaabea788b8b
+// flow-typed version: <<STUB>>/@babel/preset-env_v^7.1.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * '@babel/preset-env'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module '@babel/preset-env' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module '@babel/preset-env/data/built-in-features' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/data/plugin-features' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/data/shipped-proposals' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/data/unreleased-labels' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/available-plugins' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/built-in-definitions' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/debug' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/default-includes' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/defaults' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/module-transformations' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/normalize-options' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/options' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/targets-parser' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/use-built-ins-entry-plugin' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/use-built-ins-plugin' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/utils' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module '@babel/preset-env/data/built-in-features.js' {
+ declare module.exports: $Exports<'@babel/preset-env/data/built-in-features'>;
+}
+declare module '@babel/preset-env/data/plugin-features.js' {
+ declare module.exports: $Exports<'@babel/preset-env/data/plugin-features'>;
+}
+declare module '@babel/preset-env/data/shipped-proposals.js' {
+ declare module.exports: $Exports<'@babel/preset-env/data/shipped-proposals'>;
+}
+declare module '@babel/preset-env/data/unreleased-labels.js' {
+ declare module.exports: $Exports<'@babel/preset-env/data/unreleased-labels'>;
+}
+declare module '@babel/preset-env/lib/available-plugins.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/available-plugins'>;
+}
+declare module '@babel/preset-env/lib/built-in-definitions.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/built-in-definitions'>;
+}
+declare module '@babel/preset-env/lib/debug.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/debug'>;
+}
+declare module '@babel/preset-env/lib/default-includes.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/default-includes'>;
+}
+declare module '@babel/preset-env/lib/defaults.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/defaults'>;
+}
+declare module '@babel/preset-env/lib/index.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/index'>;
+}
+declare module '@babel/preset-env/lib/module-transformations.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/module-transformations'>;
+}
+declare module '@babel/preset-env/lib/normalize-options.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/normalize-options'>;
+}
+declare module '@babel/preset-env/lib/options.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/options'>;
+}
+declare module '@babel/preset-env/lib/targets-parser.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/targets-parser'>;
+}
+declare module '@babel/preset-env/lib/use-built-ins-entry-plugin.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/use-built-ins-entry-plugin'>;
+}
+declare module '@babel/preset-env/lib/use-built-ins-plugin.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/use-built-ins-plugin'>;
+}
+declare module '@babel/preset-env/lib/utils.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/utils'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/@babel/preset-flow_vx.x.x.js b/tiny-invariant/flow-typed/npm/@babel/preset-flow_vx.x.x.js
new file mode 100644
index 0000000..c3fcd98
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/@babel/preset-flow_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: 11744c4d4bc0cb7b5a5c5272f94dc84b
+// flow-typed version: <<STUB>>/@babel/preset-flow_v^7.0.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * '@babel/preset-flow'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module '@babel/preset-flow' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module '@babel/preset-flow/lib/index' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module '@babel/preset-flow/lib/index.js' {
+ declare module.exports: $Exports<'@babel/preset-flow/lib/index'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/babel-cli_vx.x.x.js b/tiny-invariant/flow-typed/npm/babel-cli_vx.x.x.js
new file mode 100644
index 0000000..6a5785b
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/babel-cli_vx.x.x.js
@@ -0,0 +1,108 @@
+// flow-typed signature: 128c4a691e1f78786a01e9aec17e241d
+// flow-typed version: <<STUB>>/babel-cli_v^6.26.0/flow_v0.70.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'babel-cli'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-cli' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-cli/bin/babel-doctor' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/bin/babel-external-helpers' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/bin/babel-node' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/bin/babel' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/lib/_babel-node' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/lib/babel-external-helpers' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/lib/babel-node' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/lib/babel/dir' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/lib/babel/file' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/lib/babel/index' {
+ declare module.exports: any;
+}
+
+declare module 'babel-cli/lib/babel/util' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-cli/bin/babel-doctor.js' {
+ declare module.exports: $Exports<'babel-cli/bin/babel-doctor'>;
+}
+declare module 'babel-cli/bin/babel-external-helpers.js' {
+ declare module.exports: $Exports<'babel-cli/bin/babel-external-helpers'>;
+}
+declare module 'babel-cli/bin/babel-node.js' {
+ declare module.exports: $Exports<'babel-cli/bin/babel-node'>;
+}
+declare module 'babel-cli/bin/babel.js' {
+ declare module.exports: $Exports<'babel-cli/bin/babel'>;
+}
+declare module 'babel-cli/index' {
+ declare module.exports: $Exports<'babel-cli'>;
+}
+declare module 'babel-cli/index.js' {
+ declare module.exports: $Exports<'babel-cli'>;
+}
+declare module 'babel-cli/lib/_babel-node.js' {
+ declare module.exports: $Exports<'babel-cli/lib/_babel-node'>;
+}
+declare module 'babel-cli/lib/babel-external-helpers.js' {
+ declare module.exports: $Exports<'babel-cli/lib/babel-external-helpers'>;
+}
+declare module 'babel-cli/lib/babel-node.js' {
+ declare module.exports: $Exports<'babel-cli/lib/babel-node'>;
+}
+declare module 'babel-cli/lib/babel/dir.js' {
+ declare module.exports: $Exports<'babel-cli/lib/babel/dir'>;
+}
+declare module 'babel-cli/lib/babel/file.js' {
+ declare module.exports: $Exports<'babel-cli/lib/babel/file'>;
+}
+declare module 'babel-cli/lib/babel/index.js' {
+ declare module.exports: $Exports<'babel-cli/lib/babel/index'>;
+}
+declare module 'babel-cli/lib/babel/util.js' {
+ declare module.exports: $Exports<'babel-cli/lib/babel/util'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/babel-core_vx.x.x.js b/tiny-invariant/flow-typed/npm/babel-core_vx.x.x.js
new file mode 100644
index 0000000..d7d9970
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/babel-core_vx.x.x.js
@@ -0,0 +1,33 @@
+// flow-typed signature: 1693ce4f4756cde42e9c429f90acb0e7
+// flow-typed version: <<STUB>>/babel-core_v7.0.0-bridge.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'babel-core'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-core' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+
+
+// Filename aliases
+declare module 'babel-core/index' {
+ declare module.exports: $Exports<'babel-core'>;
+}
+declare module 'babel-core/index.js' {
+ declare module.exports: $Exports<'babel-core'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/babel-jest_vx.x.x.js b/tiny-invariant/flow-typed/npm/babel-jest_vx.x.x.js
new file mode 100644
index 0000000..d343dc4
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/babel-jest_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: 09d067c0cdb09defa76ef79dd3f8bdff
+// flow-typed version: <<STUB>>/babel-jest_v^23.6.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'babel-jest'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-jest' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-jest/build/index' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-jest/build/index.js' {
+ declare module.exports: $Exports<'babel-jest/build/index'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/babel-plugin-transform-es2015-modules-commonjs_vx.x.x.js b/tiny-invariant/flow-typed/npm/babel-plugin-transform-es2015-modules-commonjs_vx.x.x.js
new file mode 100644
index 0000000..4cd2827
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/babel-plugin-transform-es2015-modules-commonjs_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: ea8186a0566190757d64defb4dd6132f
+// flow-typed version: <<STUB>>/babel-plugin-transform-es2015-modules-commonjs_v^6.26.0/flow_v0.70.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'babel-plugin-transform-es2015-modules-commonjs'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-plugin-transform-es2015-modules-commonjs' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-plugin-transform-es2015-modules-commonjs/lib/index' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-plugin-transform-es2015-modules-commonjs/lib/index.js' {
+ declare module.exports: $Exports<'babel-plugin-transform-es2015-modules-commonjs/lib/index'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/babel-preset-env_vx.x.x.js b/tiny-invariant/flow-typed/npm/babel-preset-env_vx.x.x.js
new file mode 100644
index 0000000..1e6a6b8
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/babel-preset-env_vx.x.x.js
@@ -0,0 +1,88 @@
+// flow-typed signature: 5ec42decc1912f793de07fd20636ee66
+// flow-typed version: <<STUB>>/babel-preset-env_v^1.6.1/flow_v0.70.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'babel-preset-env'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-preset-env' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-preset-env/data/built-in-features' {
+ declare module.exports: any;
+}
+
+declare module 'babel-preset-env/data/plugin-features' {
+ declare module.exports: any;
+}
+
+declare module 'babel-preset-env/lib/default-includes' {
+ declare module.exports: any;
+}
+
+declare module 'babel-preset-env/lib/index' {
+ declare module.exports: any;
+}
+
+declare module 'babel-preset-env/lib/module-transformations' {
+ declare module.exports: any;
+}
+
+declare module 'babel-preset-env/lib/normalize-options' {
+ declare module.exports: any;
+}
+
+declare module 'babel-preset-env/lib/targets-parser' {
+ declare module.exports: any;
+}
+
+declare module 'babel-preset-env/lib/transform-polyfill-require-plugin' {
+ declare module.exports: any;
+}
+
+declare module 'babel-preset-env/lib/utils' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-preset-env/data/built-in-features.js' {
+ declare module.exports: $Exports<'babel-preset-env/data/built-in-features'>;
+}
+declare module 'babel-preset-env/data/plugin-features.js' {
+ declare module.exports: $Exports<'babel-preset-env/data/plugin-features'>;
+}
+declare module 'babel-preset-env/lib/default-includes.js' {
+ declare module.exports: $Exports<'babel-preset-env/lib/default-includes'>;
+}
+declare module 'babel-preset-env/lib/index.js' {
+ declare module.exports: $Exports<'babel-preset-env/lib/index'>;
+}
+declare module 'babel-preset-env/lib/module-transformations.js' {
+ declare module.exports: $Exports<'babel-preset-env/lib/module-transformations'>;
+}
+declare module 'babel-preset-env/lib/normalize-options.js' {
+ declare module.exports: $Exports<'babel-preset-env/lib/normalize-options'>;
+}
+declare module 'babel-preset-env/lib/targets-parser.js' {
+ declare module.exports: $Exports<'babel-preset-env/lib/targets-parser'>;
+}
+declare module 'babel-preset-env/lib/transform-polyfill-require-plugin.js' {
+ declare module.exports: $Exports<'babel-preset-env/lib/transform-polyfill-require-plugin'>;
+}
+declare module 'babel-preset-env/lib/utils.js' {
+ declare module.exports: $Exports<'babel-preset-env/lib/utils'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/babel-preset-flow_vx.x.x.js b/tiny-invariant/flow-typed/npm/babel-preset-flow_vx.x.x.js
new file mode 100644
index 0000000..241b872
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/babel-preset-flow_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: 4057ee6a8745b18d331a7f1e239ca1b2
+// flow-typed version: <<STUB>>/babel-preset-flow_v^6.23.0/flow_v0.70.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'babel-preset-flow'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-preset-flow' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-preset-flow/lib/index' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-preset-flow/lib/index.js' {
+ declare module.exports: $Exports<'babel-preset-flow/lib/index'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/flow-bin_v0.x.x.js b/tiny-invariant/flow-typed/npm/flow-bin_v0.x.x.js
new file mode 100644
index 0000000..c538e20
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/flow-bin_v0.x.x.js
@@ -0,0 +1,6 @@
+// flow-typed signature: 6a5610678d4b01e13bbfbbc62bdaf583
+// flow-typed version: 3817bc6980/flow-bin_v0.x.x/flow_>=v0.25.x
+
+declare module "flow-bin" {
+ declare module.exports: string;
+}
diff --git a/tiny-invariant/flow-typed/npm/jest_v23.x.x.js b/tiny-invariant/flow-typed/npm/jest_v23.x.x.js
new file mode 100644
index 0000000..dbfc9b6
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/jest_v23.x.x.js
@@ -0,0 +1,1146 @@
+// flow-typed signature: 691597c4a5aab83a3b2e6d9ccd01a97d
+// flow-typed version: 71534a866d/jest_v23.x.x/flow_>=v0.39.x
+
+type JestMockFn<TArguments: $ReadOnlyArray<*>, TReturn> = {
+ (...args: TArguments): TReturn,
+ /**
+ * An object for introspecting mock calls
+ */
+ mock: {
+ /**
+ * An array that represents all calls that have been made into this mock
+ * function. Each call is represented by an array of arguments that were
+ * passed during the call.
+ */
+ calls: Array<TArguments>,
+ /**
+ * An array that contains all the object instances that have been
+ * instantiated from this mock function.
+ */
+ instances: Array<TReturn>,
+ /**
+ * An array that contains all the object results that have been
+ * returned by this mock function call
+ */
+ results: Array<{ isThrow: boolean, value: TReturn }>
+ },
+ /**
+ * Resets all information stored in the mockFn.mock.calls and
+ * mockFn.mock.instances arrays. Often this is useful when you want to clean
+ * up a mock's usage data between two assertions.
+ */
+ mockClear(): void,
+ /**
+ * Resets all information stored in the mock. This is useful when you want to
+ * completely restore a mock back to its initial state.
+ */
+ mockReset(): void,
+ /**
+ * Removes the mock and restores the initial implementation. This is useful
+ * when you want to mock functions in certain test cases and restore the
+ * original implementation in others. Beware that mockFn.mockRestore only
+ * works when mock was created with jest.spyOn. Thus you have to take care of
+ * restoration yourself when manually assigning jest.fn().
+ */
+ mockRestore(): void,
+ /**
+ * Accepts a function that should be used as the implementation of the mock.
+ * The mock itself will still record all calls that go into and instances
+ * that come from itself -- the only difference is that the implementation
+ * will also be executed when the mock is called.
+ */
+ mockImplementation(
+ fn: (...args: TArguments) => TReturn
+ ): JestMockFn<TArguments, TReturn>,
+ /**
+ * Accepts a function that will be used as an implementation of the mock for
+ * one call to the mocked function. Can be chained so that multiple function
+ * calls produce different results.
+ */
+ mockImplementationOnce(
+ fn: (...args: TArguments) => TReturn
+ ): JestMockFn<TArguments, TReturn>,
+ /**
+ * Accepts a string to use in test result output in place of "jest.fn()" to
+ * indicate which mock function is being referenced.
+ */
+ mockName(name: string): JestMockFn<TArguments, TReturn>,
+ /**
+ * Just a simple sugar function for returning `this`
+ */
+ mockReturnThis(): void,
+ /**
+ * Accepts a value that will be returned whenever the mock function is called.
+ */
+ mockReturnValue(value: TReturn): JestMockFn<TArguments, TReturn>,
+ /**
+ * Sugar for only returning a value once inside your mock
+ */
+ mockReturnValueOnce(value: TReturn): JestMockFn<TArguments, TReturn>,
+ /**
+ * Sugar for jest.fn().mockImplementation(() => Promise.resolve(value))
+ */
+ mockResolvedValue(value: TReturn): JestMockFn<TArguments, Promise<TReturn>>,
+ /**
+ * Sugar for jest.fn().mockImplementationOnce(() => Promise.resolve(value))
+ */
+ mockResolvedValueOnce(value: TReturn): JestMockFn<TArguments, Promise<TReturn>>,
+ /**
+ * Sugar for jest.fn().mockImplementation(() => Promise.reject(value))
+ */
+ mockRejectedValue(value: TReturn): JestMockFn<TArguments, Promise<any>>,
+ /**
+ * Sugar for jest.fn().mockImplementationOnce(() => Promise.reject(value))
+ */
+ mockRejectedValueOnce(value: TReturn): JestMockFn<TArguments, Promise<any>>
+};
+
+type JestAsymmetricEqualityType = {
+ /**
+ * A custom Jasmine equality tester
+ */
+ asymmetricMatch(value: mixed): boolean
+};
+
+type JestCallsType = {
+ allArgs(): mixed,
+ all(): mixed,
+ any(): boolean,
+ count(): number,
+ first(): mixed,
+ mostRecent(): mixed,
+ reset(): void
+};
+
+type JestClockType = {
+ install(): void,
+ mockDate(date: Date): void,
+ tick(milliseconds?: number): void,
+ uninstall(): void
+};
+
+type JestMatcherResult = {
+ message?: string | (() => string),
+ pass: boolean
+};
+
+type JestMatcher = (actual: any, expected: any) =>
+ | JestMatcherResult
+ | Promise<JestMatcherResult>;
+
+type JestPromiseType = {
+ /**
+ * Use rejects to unwrap the reason of a rejected promise so any other
+ * matcher can be chained. If the promise is fulfilled the assertion fails.
+ */
+ rejects: JestExpectType,
+ /**
+ * Use resolves to unwrap the value of a fulfilled promise so any other
+ * matcher can be chained. If the promise is rejected the assertion fails.
+ */
+ resolves: JestExpectType
+};
+
+/**
+ * Jest allows functions and classes to be used as test names in test() and
+ * describe()
+ */
+type JestTestName = string | Function;
+
+/**
+ * Plugin: jest-styled-components
+ */
+
+type JestStyledComponentsMatcherValue =
+ | string
+ | JestAsymmetricEqualityType
+ | RegExp
+ | typeof undefined;
+
+type JestStyledComponentsMatcherOptions = {
+ media?: string;
+ modifier?: string;
+ supports?: string;
+}
+
+type JestStyledComponentsMatchersType = {
+ toHaveStyleRule(
+ property: string,
+ value: JestStyledComponentsMatcherValue,
+ options?: JestStyledComponentsMatcherOptions
+ ): void,
+};
+
+/**
+ * Plugin: jest-enzyme
+ */
+type EnzymeMatchersType = {
+ // 5.x
+ toBeEmpty(): void,
+ toBePresent(): void,
+ // 6.x
+ toBeChecked(): void,
+ toBeDisabled(): void,
+ toBeEmptyRender(): void,
+ toContainMatchingElement(selector: string): void;
+ toContainMatchingElements(n: number, selector: string): void;
+ toContainExactlyOneMatchingElement(selector: string): void;
+ toContainReact(element: React$Element<any>): void,
+ toExist(): void,
+ toHaveClassName(className: string): void,
+ toHaveHTML(html: string): void,
+ toHaveProp: ((propKey: string, propValue?: any) => void) & ((props: Object) => void),
+ toHaveRef(refName: string): void,
+ toHaveState: ((stateKey: string, stateValue?: any) => void) & ((state: Object) => void),
+ toHaveStyle: ((styleKey: string, styleValue?: any) => void) & ((style: Object) => void),
+ toHaveTagName(tagName: string): void,
+ toHaveText(text: string): void,
+ toHaveValue(value: any): void,
+ toIncludeText(text: string): void,
+ toMatchElement(
+ element: React$Element<any>,
+ options?: {| ignoreProps?: boolean |},
+ ): void,
+ toMatchSelector(selector: string): void
+};
+
+// DOM testing library extensions https://github.com/kentcdodds/dom-testing-library#custom-jest-matchers
+type DomTestingLibraryType = {
+ toBeInTheDOM(): void,
+ toHaveTextContent(content: string): void,
+ toHaveAttribute(name: string, expectedValue?: string): void
+};
+
+// Jest JQuery Matchers: https://github.com/unindented/custom-jquery-matchers
+type JestJQueryMatchersType = {
+ toExist(): void,
+ toHaveLength(len: number): void,
+ toHaveId(id: string): void,
+ toHaveClass(className: string): void,
+ toHaveTag(tag: string): void,
+ toHaveAttr(key: string, val?: any): void,
+ toHaveProp(key: string, val?: any): void,
+ toHaveText(text: string | RegExp): void,
+ toHaveData(key: string, val?: any): void,
+ toHaveValue(val: any): void,
+ toHaveCss(css: {[key: string]: any}): void,
+ toBeChecked(): void,
+ toBeDisabled(): void,
+ toBeEmpty(): void,
+ toBeHidden(): void,
+ toBeSelected(): void,
+ toBeVisible(): void,
+ toBeFocused(): void,
+ toBeInDom(): void,
+ toBeMatchedBy(sel: string): void,
+ toHaveDescendant(sel: string): void,
+ toHaveDescendantWithText(sel: string, text: string | RegExp): void
+};
+
+
+// Jest Extended Matchers: https://github.com/jest-community/jest-extended
+type JestExtendedMatchersType = {
+ /**
+ * Note: Currently unimplemented
+ * Passing assertion
+ *
+ * @param {String} message
+ */
+ // pass(message: string): void;
+
+ /**
+ * Note: Currently unimplemented
+ * Failing assertion
+ *
+ * @param {String} message
+ */
+ // fail(message: string): void;
+
+ /**
+ * Use .toBeEmpty when checking if a String '', Array [] or Object {} is empty.
+ */
+ toBeEmpty(): void;
+
+ /**
+ * Use .toBeOneOf when checking if a value is a member of a given Array.
+ * @param {Array.<*>} members
+ */
+ toBeOneOf(members: any[]): void;
+
+ /**
+ * Use `.toBeNil` when checking a value is `null` or `undefined`.
+ */
+ toBeNil(): void;
+
+ /**
+ * Use `.toSatisfy` when you want to use a custom matcher by supplying a predicate function that returns a `Boolean`.
+ * @param {Function} predicate
+ */
+ toSatisfy(predicate: (n: any) => boolean): void;
+
+ /**
+ * Use `.toBeArray` when checking if a value is an `Array`.
+ */
+ toBeArray(): void;
+
+ /**
+ * Use `.toBeArrayOfSize` when checking if a value is an `Array` of size x.
+ * @param {Number} x
+ */
+ toBeArrayOfSize(x: number): void;
+
+ /**
+ * Use `.toIncludeAllMembers` when checking if an `Array` contains all of the same members of a given set.
+ * @param {Array.<*>} members
+ */
+ toIncludeAllMembers(members: any[]): void;
+
+ /**
+ * Use `.toIncludeAnyMembers` when checking if an `Array` contains any of the members of a given set.
+ * @param {Array.<*>} members
+ */
+ toIncludeAnyMembers(members: any[]): void;
+
+ /**
+ * Use `.toSatisfyAll` when you want to use a custom matcher by supplying a predicate function that returns a `Boolean` for all values in an array.
+ * @param {Function} predicate
+ */
+ toSatisfyAll(predicate: (n: any) => boolean): void;
+
+ /**
+ * Use `.toBeBoolean` when checking if a value is a `Boolean`.
+ */
+ toBeBoolean(): void;
+
+ /**
+ * Use `.toBeTrue` when checking a value is equal (===) to `true`.
+ */
+ toBeTrue(): void;
+
+ /**
+ * Use `.toBeFalse` when checking a value is equal (===) to `false`.
+ */
+ toBeFalse(): void;
+
+ /**
+ * Use .toBeDate when checking if a value is a Date.
+ */
+ toBeDate(): void;
+
+ /**
+ * Use `.toBeFunction` when checking if a value is a `Function`.
+ */
+ toBeFunction(): void;
+
+ /**
+ * Use `.toHaveBeenCalledBefore` when checking if a `Mock` was called before another `Mock`.
+ *
+ * Note: Required Jest version >22
+ * Note: Your mock functions will have to be asynchronous to cause the timestamps inside of Jest to occur in a differentJS event loop, otherwise the mock timestamps will all be the same
+ *
+ * @param {Mock} mock
+ */
+ toHaveBeenCalledBefore(mock: JestMockFn<any, any>): void;
+
+ /**
+ * Use `.toBeNumber` when checking if a value is a `Number`.
+ */
+ toBeNumber(): void;
+
+ /**
+ * Use `.toBeNaN` when checking a value is `NaN`.
+ */
+ toBeNaN(): void;
+
+ /**
+ * Use `.toBeFinite` when checking if a value is a `Number`, not `NaN` or `Infinity`.
+ */
+ toBeFinite(): void;
+
+ /**
+ * Use `.toBePositive` when checking if a value is a positive `Number`.
+ */
+ toBePositive(): void;
+
+ /**
+ * Use `.toBeNegative` when checking if a value is a negative `Number`.
+ */
+ toBeNegative(): void;
+
+ /**
+ * Use `.toBeEven` when checking if a value is an even `Number`.
+ */
+ toBeEven(): void;
+
+ /**
+ * Use `.toBeOdd` when checking if a value is an odd `Number`.
+ */
+ toBeOdd(): void;
+
+ /**
+ * Use `.toBeWithin` when checking if a number is in between the given bounds of: start (inclusive) and end (exclusive).
+ *
+ * @param {Number} start
+ * @param {Number} end
+ */
+ toBeWithin(start: number, end: number): void;
+
+ /**
+ * Use `.toBeObject` when checking if a value is an `Object`.
+ */
+ toBeObject(): void;
+
+ /**
+ * Use `.toContainKey` when checking if an object contains the provided key.
+ *
+ * @param {String} key
+ */
+ toContainKey(key: string): void;
+
+ /**
+ * Use `.toContainKeys` when checking if an object has all of the provided keys.
+ *
+ * @param {Array.<String>} keys
+ */
+ toContainKeys(keys: string[]): void;
+
+ /**
+ * Use `.toContainAllKeys` when checking if an object only contains all of the provided keys.
+ *
+ * @param {Array.<String>} keys
+ */
+ toContainAllKeys(keys: string[]): void;
+
+ /**
+ * Use `.toContainAnyKeys` when checking if an object contains at least one of the provided keys.
+ *
+ * @param {Array.<String>} keys
+ */
+ toContainAnyKeys(keys: string[]): void;
+
+ /**
+ * Use `.toContainValue` when checking if an object contains the provided value.
+ *
+ * @param {*} value
+ */
+ toContainValue(value: any): void;
+
+ /**
+ * Use `.toContainValues` when checking if an object contains all of the provided values.
+ *
+ * @param {Array.<*>} values
+ */
+ toContainValues(values: any[]): void;
+
+ /**
+ * Use `.toContainAllValues` when checking if an object only contains all of the provided values.
+ *
+ * @param {Array.<*>} values
+ */
+ toContainAllValues(values: any[]): void;
+
+ /**
+ * Use `.toContainAnyValues` when checking if an object contains at least one of the provided values.
+ *
+ * @param {Array.<*>} values
+ */
+ toContainAnyValues(values: any[]): void;
+
+ /**
+ * Use `.toContainEntry` when checking if an object contains the provided entry.
+ *
+ * @param {Array.<String, String>} entry
+ */
+ toContainEntry(entry: [string, string]): void;
+
+ /**
+ * Use `.toContainEntries` when checking if an object contains all of the provided entries.
+ *
+ * @param {Array.<Array.<String, String>>} entries
+ */
+ toContainEntries(entries: [string, string][]): void;
+
+ /**
+ * Use `.toContainAllEntries` when checking if an object only contains all of the provided entries.
+ *
+ * @param {Array.<Array.<String, String>>} entries
+ */
+ toContainAllEntries(entries: [string, string][]): void;
+
+ /**
+ * Use `.toContainAnyEntries` when checking if an object contains at least one of the provided entries.
+ *
+ * @param {Array.<Array.<String, String>>} entries
+ */
+ toContainAnyEntries(entries: [string, string][]): void;
+
+ /**
+ * Use `.toBeExtensible` when checking if an object is extensible.
+ */
+ toBeExtensible(): void;
+
+ /**
+ * Use `.toBeFrozen` when checking if an object is frozen.
+ */
+ toBeFrozen(): void;
+
+ /**
+ * Use `.toBeSealed` when checking if an object is sealed.
+ */
+ toBeSealed(): void;
+
+ /**
+ * Use `.toBeString` when checking if a value is a `String`.
+ */
+ toBeString(): void;
+
+ /**
+ * Use `.toEqualCaseInsensitive` when checking if a string is equal (===) to another ignoring the casing of both strings.
+ *
+ * @param {String} string
+ */
+ toEqualCaseInsensitive(string: string): void;
+
+ /**
+ * Use `.toStartWith` when checking if a `String` starts with a given `String` prefix.
+ *
+ * @param {String} prefix
+ */
+ toStartWith(prefix: string): void;
+
+ /**
+ * Use `.toEndWith` when checking if a `String` ends with a given `String` suffix.
+ *
+ * @param {String} suffix
+ */
+ toEndWith(suffix: string): void;
+
+ /**
+ * Use `.toInclude` when checking if a `String` includes the given `String` substring.
+ *
+ * @param {String} substring
+ */
+ toInclude(substring: string): void;
+
+ /**
+ * Use `.toIncludeRepeated` when checking if a `String` includes the given `String` substring the correct number of times.
+ *
+ * @param {String} substring
+ * @param {Number} times
+ */
+ toIncludeRepeated(substring: string, times: number): void;
+
+ /**
+ * Use `.toIncludeMultiple` when checking if a `String` includes all of the given substrings.
+ *
+ * @param {Array.<String>} substring
+ */
+ toIncludeMultiple(substring: string[]): void;
+};
+
+interface JestExpectType {
+ not:
+ & JestExpectType
+ & EnzymeMatchersType
+ & DomTestingLibraryType
+ & JestJQueryMatchersType
+ & JestStyledComponentsMatchersType
+ & JestExtendedMatchersType,
+ /**
+ * If you have a mock function, you can use .lastCalledWith to test what
+ * arguments it was last called with.
+ */
+ lastCalledWith(...args: Array<any>): void,
+ /**
+ * toBe just checks that a value is what you expect. It uses === to check
+ * strict equality.
+ */
+ toBe(value: any): void,
+ /**
+ * Use .toBeCalledWith to ensure that a mock function was called with
+ * specific arguments.
+ */
+ toBeCalledWith(...args: Array<any>): void,
+ /**
+ * Using exact equality with floating point numbers is a bad idea. Rounding
+ * means that intuitive things fail.
+ */
+ toBeCloseTo(num: number, delta: any): void,
+ /**
+ * Use .toBeDefined to check that a variable is not undefined.
+ */
+ toBeDefined(): void,
+ /**
+ * Use .toBeFalsy when you don't care what a value is, you just want to
+ * ensure a value is false in a boolean context.
+ */
+ toBeFalsy(): void,
+ /**
+ * To compare floating point numbers, you can use toBeGreaterThan.
+ */
+ toBeGreaterThan(number: number): void,
+ /**
+ * To compare floating point numbers, you can use toBeGreaterThanOrEqual.
+ */
+ toBeGreaterThanOrEqual(number: number): void,
+ /**
+ * To compare floating point numbers, you can use toBeLessThan.
+ */
+ toBeLessThan(number: number): void,
+ /**
+ * To compare floating point numbers, you can use toBeLessThanOrEqual.
+ */
+ toBeLessThanOrEqual(number: number): void,
+ /**
+ * Use .toBeInstanceOf(Class) to check that an object is an instance of a
+ * class.
+ */
+ toBeInstanceOf(cls: Class<*>): void,
+ /**
+ * .toBeNull() is the same as .toBe(null) but the error messages are a bit
+ * nicer.
+ */
+ toBeNull(): void,
+ /**
+ * Use .toBeTruthy when you don't care what a value is, you just want to
+ * ensure a value is true in a boolean context.
+ */
+ toBeTruthy(): void,
+ /**
+ * Use .toBeUndefined to check that a variable is undefined.
+ */
+ toBeUndefined(): void,
+ /**
+ * Use .toContain when you want to check that an item is in a list. For
+ * testing the items in the list, this uses ===, a strict equality check.
+ */
+ toContain(item: any): void,
+ /**
+ * Use .toContainEqual when you want to check that an item is in a list. For
+ * testing the items in the list, this matcher recursively checks the
+ * equality of all fields, rather than checking for object identity.
+ */
+ toContainEqual(item: any): void,
+ /**
+ * Use .toEqual when you want to check that two objects have the same value.
+ * This matcher recursively checks the equality of all fields, rather than
+ * checking for object identity.
+ */
+ toEqual(value: any): void,
+ /**
+ * Use .toHaveBeenCalled to ensure that a mock function got called.
+ */
+ toHaveBeenCalled(): void,
+ toBeCalled(): void;
+ /**
+ * Use .toHaveBeenCalledTimes to ensure that a mock function got called exact
+ * number of times.
+ */
+ toHaveBeenCalledTimes(number: number): void,
+ toBeCalledTimes(number: number): void;
+ /**
+ *
+ */
+ toHaveBeenNthCalledWith(nthCall: number, ...args: Array<any>): void;
+ nthCalledWith(nthCall: number, ...args: Array<any>): void;
+ /**
+ *
+ */
+ toHaveReturned(): void;
+ toReturn(): void;
+ /**
+ *
+ */
+ toHaveReturnedTimes(number: number): void;
+ toReturnTimes(number: number): void;
+ /**
+ *
+ */
+ toHaveReturnedWith(value: any): void;
+ toReturnWith(value: any): void;
+ /**
+ *
+ */
+ toHaveLastReturnedWith(value: any): void;
+ lastReturnedWith(value: any): void;
+ /**
+ *
+ */
+ toHaveNthReturnedWith(nthCall: number, value: any): void;
+ nthReturnedWith(nthCall: number, value: any): void;
+ /**
+ * Use .toHaveBeenCalledWith to ensure that a mock function was called with
+ * specific arguments.
+ */
+ toHaveBeenCalledWith(...args: Array<any>): void,
+ toBeCalledWith(...args: Array<any>): void,
+ /**
+ * Use .toHaveBeenLastCalledWith to ensure that a mock function was last called
+ * with specific arguments.
+ */
+ toHaveBeenLastCalledWith(...args: Array<any>): void,
+ lastCalledWith(...args: Array<any>): void,
+ /**
+ * Check that an object has a .length property and it is set to a certain
+ * numeric value.
+ */
+ toHaveLength(number: number): void,
+ /**
+ *
+ */
+ toHaveProperty(propPath: string, value?: any): void,
+ /**
+ * Use .toMatch to check that a string matches a regular expression or string.
+ */
+ toMatch(regexpOrString: RegExp | string): void,
+ /**
+ * Use .toMatchObject to check that a javascript object matches a subset of the properties of an object.
+ */
+ toMatchObject(object: Object | Array<Object>): void,
+ /**
+ * Use .toStrictEqual to check that a javascript object matches a subset of the properties of an object.
+ */
+ toStrictEqual(value: any): void,
+ /**
+ * This ensures that an Object matches the most recent snapshot.
+ */
+ toMatchSnapshot(propertyMatchers?: any, name?: string): void,
+ /**
+ * This ensures that an Object matches the most recent snapshot.
+ */
+ toMatchSnapshot(name: string): void,
+
+ toMatchInlineSnapshot(snapshot?: string): void,
+ toMatchInlineSnapshot(propertyMatchers?: any, snapshot?: string): void,
+ /**
+ * Use .toThrow to test that a function throws when it is called.
+ * If you want to test that a specific error gets thrown, you can provide an
+ * argument to toThrow. The argument can be a string for the error message,
+ * a class for the error, or a regex that should match the error.
+ *
+ * Alias: .toThrowError
+ */
+ toThrow(message?: string | Error | Class<Error> | RegExp): void,
+ toThrowError(message?: string | Error | Class<Error> | RegExp): void,
+ /**
+ * Use .toThrowErrorMatchingSnapshot to test that a function throws a error
+ * matching the most recent snapshot when it is called.
+ */
+ toThrowErrorMatchingSnapshot(): void,
+ toThrowErrorMatchingInlineSnapshot(snapshot?: string): void,
+}
+
+type JestObjectType = {
+ /**
+ * Disables automatic mocking in the module loader.
+ *
+ * After this method is called, all `require()`s will return the real
+ * versions of each module (rather than a mocked version).
+ */
+ disableAutomock(): JestObjectType,
+ /**
+ * An un-hoisted version of disableAutomock
+ */
+ autoMockOff(): JestObjectType,
+ /**
+ * Enables automatic mocking in the module loader.
+ */
+ enableAutomock(): JestObjectType,
+ /**
+ * An un-hoisted version of enableAutomock
+ */
+ autoMockOn(): JestObjectType,
+ /**
+ * Clears the mock.calls and mock.instances properties of all mocks.
+ * Equivalent to calling .mockClear() on every mocked function.
+ */
+ clearAllMocks(): JestObjectType,
+ /**
+ * Resets the state of all mocks. Equivalent to calling .mockReset() on every
+ * mocked function.
+ */
+ resetAllMocks(): JestObjectType,
+ /**
+ * Restores all mocks back to their original value.
+ */
+ restoreAllMocks(): JestObjectType,
+ /**
+ * Removes any pending timers from the timer system.
+ */
+ clearAllTimers(): void,
+ /**
+ * The same as `mock` but not moved to the top of the expectation by
+ * babel-jest.
+ */
+ doMock(moduleName: string, moduleFactory?: any): JestObjectType,
+ /**
+ * The same as `unmock` but not moved to the top of the expectation by
+ * babel-jest.
+ */
+ dontMock(moduleName: string): JestObjectType,
+ /**
+ * Returns a new, unused mock function. Optionally takes a mock
+ * implementation.
+ */
+ fn<TArguments: $ReadOnlyArray<*>, TReturn>(
+ implementation?: (...args: TArguments) => TReturn
+ ): JestMockFn<TArguments, TReturn>,
+ /**
+ * Determines if the given function is a mocked function.
+ */
+ isMockFunction(fn: Function): boolean,
+ /**
+ * Given the name of a module, use the automatic mocking system to generate a
+ * mocked version of the module for you.
+ */
+ genMockFromModule(moduleName: string): any,
+ /**
+ * Mocks a module with an auto-mocked version when it is being required.
+ *
+ * The second argument can be used to specify an explicit module factory that
+ * is being run instead of using Jest's automocking feature.
+ *
+ * The third argument can be used to create virtual mocks -- mocks of modules
+ * that don't exist anywhere in the system.
+ */
+ mock(
+ moduleName: string,
+ moduleFactory?: any,
+ options?: Object
+ ): JestObjectType,
+ /**
+ * Returns the actual module instead of a mock, bypassing all checks on
+ * whether the module should receive a mock implementation or not.
+ */
+ requireActual(moduleName: string): any,
+ /**
+ * Returns a mock module instead of the actual module, bypassing all checks
+ * on whether the module should be required normally or not.
+ */
+ requireMock(moduleName: string): any,
+ /**
+ * Resets the module registry - the cache of all required modules. This is
+ * useful to isolate modules where local state might conflict between tests.
+ */
+ resetModules(): JestObjectType,
+ /**
+ * Exhausts the micro-task queue (usually interfaced in node via
+ * process.nextTick).
+ */
+ runAllTicks(): void,
+ /**
+ * Exhausts the macro-task queue (i.e., all tasks queued by setTimeout(),
+ * setInterval(), and setImmediate()).
+ */
+ runAllTimers(): void,
+ /**
+ * Exhausts all tasks queued by setImmediate().
+ */
+ runAllImmediates(): void,
+ /**
+ * Executes only the macro task queue (i.e. all tasks queued by setTimeout()
+ * or setInterval() and setImmediate()).
+ */
+ advanceTimersByTime(msToRun: number): void,
+ /**
+ * Executes only the macro task queue (i.e. all tasks queued by setTimeout()
+ * or setInterval() and setImmediate()).
+ *
+ * Renamed to `advanceTimersByTime`.
+ */
+ runTimersToTime(msToRun: number): void,
+ /**
+ * Executes only the macro-tasks that are currently pending (i.e., only the
+ * tasks that have been queued by setTimeout() or setInterval() up to this
+ * point)
+ */
+ runOnlyPendingTimers(): void,
+ /**
+ * Explicitly supplies the mock object that the module system should return
+ * for the specified module. Note: It is recommended to use jest.mock()
+ * instead.
+ */
+ setMock(moduleName: string, moduleExports: any): JestObjectType,
+ /**
+ * Indicates that the module system should never return a mocked version of
+ * the specified module from require() (e.g. that it should always return the
+ * real module).
+ */
+ unmock(moduleName: string): JestObjectType,
+ /**
+ * Instructs Jest to use fake versions of the standard timer functions
+ * (setTimeout, setInterval, clearTimeout, clearInterval, nextTick,
+ * setImmediate and clearImmediate).
+ */
+ useFakeTimers(): JestObjectType,
+ /**
+ * Instructs Jest to use the real versions of the standard timer functions.
+ */
+ useRealTimers(): JestObjectType,
+ /**
+ * Creates a mock function similar to jest.fn but also tracks calls to
+ * object[methodName].
+ */
+ spyOn(object: Object, methodName: string, accessType?: "get" | "set"): JestMockFn<any, any>,
+ /**
+ * Set the default timeout interval for tests and before/after hooks in milliseconds.
+ * Note: The default timeout interval is 5 seconds if this method is not called.
+ */
+ setTimeout(timeout: number): JestObjectType
+};
+
+type JestSpyType = {
+ calls: JestCallsType
+};
+
+/** Runs this function after every test inside this context */
+declare function afterEach(
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+/** Runs this function before every test inside this context */
+declare function beforeEach(
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+/** Runs this function after all tests have finished inside this context */
+declare function afterAll(
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+/** Runs this function before any tests have started inside this context */
+declare function beforeAll(
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+
+/** A context for grouping tests together */
+declare var describe: {
+ /**
+ * Creates a block that groups together several related tests in one "test suite"
+ */
+ (name: JestTestName, fn: () => void): void,
+
+ /**
+ * Only run this describe block
+ */
+ only(name: JestTestName, fn: () => void): void,
+
+ /**
+ * Skip running this describe block
+ */
+ skip(name: JestTestName, fn: () => void): void,
+
+ /**
+ * each runs this test against array of argument arrays per each run
+ *
+ * @param {table} table of Test
+ */
+ each(
+ table: Array<Array<mixed> | mixed>
+ ): (
+ name: JestTestName,
+ fn?: (...args: Array<any>) => ?Promise<mixed>
+ ) => void,
+};
+
+/** An individual test unit */
+declare var it: {
+ /**
+ * An individual test unit
+ *
+ * @param {JestTestName} Name of Test
+ * @param {Function} Test
+ * @param {number} Timeout for the test, in milliseconds.
+ */
+ (
+ name: JestTestName,
+ fn?: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+ ): void,
+ /**
+ * each runs this test against array of argument arrays per each run
+ *
+ * @param {table} table of Test
+ */
+ each(
+ table: Array<Array<mixed> | mixed>
+ ): (
+ name: JestTestName,
+ fn?: (...args: Array<any>) => ?Promise<mixed>
+ ) => void,
+ /**
+ * Only run this test
+ *
+ * @param {JestTestName} Name of Test
+ * @param {Function} Test
+ * @param {number} Timeout for the test, in milliseconds.
+ */
+ only(
+ name: JestTestName,
+ fn?: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+ ): {
+ each(
+ table: Array<Array<mixed> | mixed>
+ ): (
+ name: JestTestName,
+ fn?: (...args: Array<any>) => ?Promise<mixed>
+ ) => void,
+ },
+ /**
+ * Skip running this test
+ *
+ * @param {JestTestName} Name of Test
+ * @param {Function} Test
+ * @param {number} Timeout for the test, in milliseconds.
+ */
+ skip(
+ name: JestTestName,
+ fn?: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+ ): void,
+ /**
+ * Run the test concurrently
+ *
+ * @param {JestTestName} Name of Test
+ * @param {Function} Test
+ * @param {number} Timeout for the test, in milliseconds.
+ */
+ concurrent(
+ name: JestTestName,
+ fn?: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+ ): void,
+ /**
+ * each runs this test against array of argument arrays per each run
+ *
+ * @param {table} table of Test
+ */
+ each(
+ table: Array<Array<mixed> | mixed>
+ ): (
+ name: JestTestName,
+ fn?: (...args: Array<any>) => ?Promise<mixed>
+ ) => void,
+};
+declare function fit(
+ name: JestTestName,
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+/** An individual test unit */
+declare var test: typeof it;
+/** A disabled group of tests */
+declare var xdescribe: typeof describe;
+/** A focused group of tests */
+declare var fdescribe: typeof describe;
+/** A disabled individual test */
+declare var xit: typeof it;
+/** A disabled individual test */
+declare var xtest: typeof it;
+
+type JestPrettyFormatColors = {
+ comment: { close: string, open: string },
+ content: { close: string, open: string },
+ prop: { close: string, open: string },
+ tag: { close: string, open: string },
+ value: { close: string, open: string },
+};
+
+type JestPrettyFormatIndent = string => string;
+type JestPrettyFormatRefs = Array<any>;
+type JestPrettyFormatPrint = any => string;
+type JestPrettyFormatStringOrNull = string | null;
+
+type JestPrettyFormatOptions = {|
+ callToJSON: boolean,
+ edgeSpacing: string,
+ escapeRegex: boolean,
+ highlight: boolean,
+ indent: number,
+ maxDepth: number,
+ min: boolean,
+ plugins: JestPrettyFormatPlugins,
+ printFunctionName: boolean,
+ spacing: string,
+ theme: {|
+ comment: string,
+ content: string,
+ prop: string,
+ tag: string,
+ value: string,
+ |},
+|};
+
+type JestPrettyFormatPlugin = {
+ print: (
+ val: any,
+ serialize: JestPrettyFormatPrint,
+ indent: JestPrettyFormatIndent,
+ opts: JestPrettyFormatOptions,
+ colors: JestPrettyFormatColors,
+ ) => string,
+ test: any => boolean,
+};
+
+type JestPrettyFormatPlugins = Array<JestPrettyFormatPlugin>;
+
+/** The expect function is used every time you want to test a value */
+declare var expect: {
+ /** The object that you want to make assertions against */
+ (value: any):
+ & JestExpectType
+ & JestPromiseType
+ & EnzymeMatchersType
+ & DomTestingLibraryType
+ & JestJQueryMatchersType
+ & JestStyledComponentsMatchersType
+ & JestExtendedMatchersType,
+
+ /** Add additional Jasmine matchers to Jest's roster */
+ extend(matchers: { [name: string]: JestMatcher }): void,
+ /** Add a module that formats application-specific data structures. */
+ addSnapshotSerializer(pluginModule: JestPrettyFormatPlugin): void,
+ assertions(expectedAssertions: number): void,
+ hasAssertions(): void,
+ any(value: mixed): JestAsymmetricEqualityType,
+ anything(): any,
+ arrayContaining(value: Array<mixed>): Array<mixed>,
+ objectContaining(value: Object): Object,
+ /** Matches any received string that contains the exact expected string. */
+ stringContaining(value: string): string,
+ stringMatching(value: string | RegExp): string,
+ not: {
+ arrayContaining: (value: $ReadOnlyArray<mixed>) => Array<mixed>,
+ objectContaining: (value: {}) => Object,
+ stringContaining: (value: string) => string,
+ stringMatching: (value: string | RegExp) => string,
+ },
+};
+
+// TODO handle return type
+// http://jasmine.github.io/2.4/introduction.html#section-Spies
+declare function spyOn(value: mixed, method: string): Object;
+
+/** Holds all functions related to manipulating test runner */
+declare var jest: JestObjectType;
+
+/**
+ * The global Jasmine object, this is generally not exposed as the public API,
+ * using features inside here could break in later versions of Jest.
+ */
+declare var jasmine: {
+ DEFAULT_TIMEOUT_INTERVAL: number,
+ any(value: mixed): JestAsymmetricEqualityType,
+ anything(): any,
+ arrayContaining(value: Array<mixed>): Array<mixed>,
+ clock(): JestClockType,
+ createSpy(name: string): JestSpyType,
+ createSpyObj(
+ baseName: string,
+ methodNames: Array<string>
+ ): { [methodName: string]: JestSpyType },
+ objectContaining(value: Object): Object,
+ stringMatching(value: string): string
+};
diff --git a/tiny-invariant/flow-typed/npm/prettier_v1.x.x.js b/tiny-invariant/flow-typed/npm/prettier_v1.x.x.js
new file mode 100644
index 0000000..0c24491
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/prettier_v1.x.x.js
@@ -0,0 +1,178 @@
+// flow-typed signature: 4eed8da2dc730dc33e7710b465eaa44b
+// flow-typed version: cc7a557b34/prettier_v1.x.x/flow_>=v0.56.x
+
+declare module "prettier" {
+ declare type AST = Object;
+ declare type Doc = Object;
+ declare type FastPath = Object;
+
+ declare type PrettierParserName =
+ | "babylon"
+ | "flow"
+ | "typescript"
+ | "postcss"
+ | "css"
+ | "less"
+ | "scss"
+ | "json"
+ | "graphql"
+ | "markdown"
+ | "vue";
+
+ declare type PrettierParser = {
+ [name: PrettierParserName]: (text: string, options?: Object) => AST
+ };
+
+ declare type CustomParser = (
+ text: string,
+ parsers: PrettierParser,
+ options: Options
+ ) => AST;
+
+ declare type Options = {|
+ printWidth?: number,
+ tabWidth?: number,
+ useTabs?: boolean,
+ semi?: boolean,
+ singleQuote?: boolean,
+ trailingComma?: "none" | "es5" | "all",
+ bracketSpacing?: boolean,
+ jsxBracketSameLine?: boolean,
+ arrowParens?: "avoid" | "always",
+ rangeStart?: number,
+ rangeEnd?: number,
+ parser?: PrettierParserName | CustomParser,
+ filepath?: string,
+ requirePragma?: boolean,
+ insertPragma?: boolean,
+ proseWrap?: "always" | "never" | "preserve",
+ plugins?: Array<string | Plugin>
+ |};
+
+ declare type Plugin = {
+ languages: SupportLanguage,
+ parsers: { [parserName: string]: Parser },
+ printers: { [astFormat: string]: Printer }
+ };
+
+ declare type Parser = {
+ parse: (
+ text: string,
+ parsers: { [parserName: string]: Parser },
+ options: Object
+ ) => AST,
+ astFormat: string
+ };
+
+ declare type Printer = {
+ print: (
+ path: FastPath,
+ options: Object,
+ print: (path: FastPath) => Doc
+ ) => Doc,
+ embed: (
+ path: FastPath,
+ print: (path: FastPath) => Doc,
+ textToDoc: (text: string, options: Object) => Doc,
+ options: Object
+ ) => ?Doc
+ };
+
+ declare type CursorOptions = {|
+ cursorOffset: number,
+ printWidth?: $PropertyType<Options, "printWidth">,
+ tabWidth?: $PropertyType<Options, "tabWidth">,
+ useTabs?: $PropertyType<Options, "useTabs">,
+ semi?: $PropertyType<Options, "semi">,
+ singleQuote?: $PropertyType<Options, "singleQuote">,
+ trailingComma?: $PropertyType<Options, "trailingComma">,
+ bracketSpacing?: $PropertyType<Options, "bracketSpacing">,
+ jsxBracketSameLine?: $PropertyType<Options, "jsxBracketSameLine">,
+ arrowParens?: $PropertyType<Options, "arrowParens">,
+ parser?: $PropertyType<Options, "parser">,
+ filepath?: $PropertyType<Options, "filepath">,
+ requirePragma?: $PropertyType<Options, "requirePragma">,
+ insertPragma?: $PropertyType<Options, "insertPragma">,
+ proseWrap?: $PropertyType<Options, "proseWrap">,
+ plugins?: $PropertyType<Options, "plugins">
+ |};
+
+ declare type CursorResult = {|
+ formatted: string,
+ cursorOffset: number
+ |};
+
+ declare type ResolveConfigOptions = {|
+ useCache?: boolean,
+ config?: string,
+ editorconfig?: boolean
+ |};
+
+ declare type SupportLanguage = {
+ name: string,
+ since: string,
+ parsers: Array<string>,
+ group?: string,
+ tmScope: string,
+ aceMode: string,
+ codemirrorMode: string,
+ codemirrorMimeType: string,
+ aliases?: Array<string>,
+ extensions: Array<string>,
+ filenames?: Array<string>,
+ linguistLanguageId: number,
+ vscodeLanguageIds: Array<string>
+ };
+
+ declare type SupportOption = {|
+ since: string,
+ type: "int" | "boolean" | "choice" | "path",
+ deprecated?: string,
+ redirect?: SupportOptionRedirect,
+ description: string,
+ oppositeDescription?: string,
+ default: SupportOptionValue,
+ range?: SupportOptionRange,
+ choices?: SupportOptionChoice
+ |};
+
+ declare type SupportOptionRedirect = {|
+ options: string,
+ value: SupportOptionValue
+ |};
+
+ declare type SupportOptionRange = {|
+ start: number,
+ end: number,
+ step: number
+ |};
+
+ declare type SupportOptionChoice = {|
+ value: boolean | string,
+ description?: string,
+ since?: string,
+ deprecated?: string,
+ redirect?: SupportOptionValue
+ |};
+
+ declare type SupportOptionValue = number | boolean | string;
+
+ declare type SupportInfo = {|
+ languages: Array<SupportLanguage>,
+ options: Array<SupportOption>
+ |};
+
+ declare type Prettier = {|
+ format: (source: string, options?: Options) => string,
+ check: (source: string, options?: Options) => boolean,
+ formatWithCursor: (source: string, options: CursorOptions) => CursorResult,
+ resolveConfig: {
+ (filePath: string, options?: ResolveConfigOptions): Promise<?Options>,
+ sync(filePath: string, options?: ResolveConfigOptions): Promise<?Options>
+ },
+ clearConfigCache: () => void,
+ getSupportInfo: (version?: string) => SupportInfo
+ |};
+
+ declare export default Prettier;
+}
diff --git a/tiny-invariant/flow-typed/npm/rimraf_v2.x.x.js b/tiny-invariant/flow-typed/npm/rimraf_v2.x.x.js
new file mode 100644
index 0000000..13b8524
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/rimraf_v2.x.x.js
@@ -0,0 +1,18 @@
+// flow-typed signature: 1dff23447d5e18f5ac2b05aaec7cfb74
+// flow-typed version: a453e98ea2/rimraf_v2.x.x/flow_>=v0.25.0
+
+declare module 'rimraf' {
+ declare type Options = {
+ maxBusyTries?: number,
+ emfileWait?: number,
+ glob?: boolean,
+ disableGlob?: boolean
+ };
+
+ declare type Callback = (err: ?Error, path: ?string) => void;
+
+ declare module.exports: {
+ (f: string, opts?: Options | Callback, callback?: Callback): void;
+ sync(path: string, opts?: Options): void;
+ };
+}
diff --git a/tiny-invariant/flow-typed/npm/rollup-plugin-babel_vx.x.x.js b/tiny-invariant/flow-typed/npm/rollup-plugin-babel_vx.x.x.js
new file mode 100644
index 0000000..652788c
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/rollup-plugin-babel_vx.x.x.js
@@ -0,0 +1,74 @@
+// flow-typed signature: 973c9500e4cab50d99a36b48129481e3
+// flow-typed version: <<STUB>>/rollup-plugin-babel_v^4.0.3/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'rollup-plugin-babel'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-babel' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-babel/dist/rollup-plugin-babel.cjs' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/dist/rollup-plugin-babel.esm' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/constants' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/helperPlugin' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/index' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/preflightCheck' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/utils' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-babel/dist/rollup-plugin-babel.cjs.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/dist/rollup-plugin-babel.cjs'>;
+}
+declare module 'rollup-plugin-babel/dist/rollup-plugin-babel.esm.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/dist/rollup-plugin-babel.esm'>;
+}
+declare module 'rollup-plugin-babel/src/constants.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/constants'>;
+}
+declare module 'rollup-plugin-babel/src/helperPlugin.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/helperPlugin'>;
+}
+declare module 'rollup-plugin-babel/src/index.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/index'>;
+}
+declare module 'rollup-plugin-babel/src/preflightCheck.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/preflightCheck'>;
+}
+declare module 'rollup-plugin-babel/src/utils.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/utils'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/rollup-plugin-replace_vx.x.x.js b/tiny-invariant/flow-typed/npm/rollup-plugin-replace_vx.x.x.js
new file mode 100644
index 0000000..bbe769d
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/rollup-plugin-replace_vx.x.x.js
@@ -0,0 +1,46 @@
+// flow-typed signature: db087c0f8735aace9843e6ebf0fc6db2
+// flow-typed version: <<STUB>>/rollup-plugin-replace_v^2.0.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'rollup-plugin-replace'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-replace' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.cjs' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.es' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-replace/src/index' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.cjs.js' {
+ declare module.exports: $Exports<'rollup-plugin-replace/dist/rollup-plugin-replace.cjs'>;
+}
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.es.js' {
+ declare module.exports: $Exports<'rollup-plugin-replace/dist/rollup-plugin-replace.es'>;
+}
+declare module 'rollup-plugin-replace/src/index.js' {
+ declare module.exports: $Exports<'rollup-plugin-replace/src/index'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js b/tiny-invariant/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js
new file mode 100644
index 0000000..f1a482c
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js
@@ -0,0 +1,38 @@
+// flow-typed signature: 7d8521b06a61516b9b178233496d21bd
+// flow-typed version: <<STUB>>/rollup-plugin-uglify_v^6.0.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'rollup-plugin-uglify'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-uglify' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-uglify/transform' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-uglify/index' {
+ declare module.exports: $Exports<'rollup-plugin-uglify'>;
+}
+declare module 'rollup-plugin-uglify/index.js' {
+ declare module.exports: $Exports<'rollup-plugin-uglify'>;
+}
+declare module 'rollup-plugin-uglify/transform.js' {
+ declare module.exports: $Exports<'rollup-plugin-uglify/transform'>;
+}
diff --git a/tiny-invariant/flow-typed/npm/rollup_vx.x.x.js b/tiny-invariant/flow-typed/npm/rollup_vx.x.x.js
new file mode 100644
index 0000000..2d85e02
--- /dev/null
+++ b/tiny-invariant/flow-typed/npm/rollup_vx.x.x.js
@@ -0,0 +1,46 @@
+// flow-typed signature: 74b987f228ae8ecd554f7ca28416e775
+// flow-typed version: <<STUB>>/rollup_v^0.66.2/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'rollup'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup/dist/rollup.browser' {
+ declare module.exports: any;
+}
+
+declare module 'rollup/dist/rollup.es' {
+ declare module.exports: any;
+}
+
+declare module 'rollup/dist/rollup' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup/dist/rollup.browser.js' {
+ declare module.exports: $Exports<'rollup/dist/rollup.browser'>;
+}
+declare module 'rollup/dist/rollup.es.js' {
+ declare module.exports: $Exports<'rollup/dist/rollup.es'>;
+}
+declare module 'rollup/dist/rollup.js' {
+ declare module.exports: $Exports<'rollup/dist/rollup'>;
+}
diff --git a/tiny-invariant/package.json b/tiny-invariant/package.json
new file mode 100644
index 0000000..67be0a3
--- /dev/null
+++ b/tiny-invariant/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "tiny-invariant",
+ "version": "1.0.2",
+ "keywords": [
+ "invariant",
+ "error"
+ ],
+ "description": "A tiny invariant function",
+ "main": "dist/tiny-invariant.cjs.js",
+ "module": "dist/tiny-invariant.esm.js",
+ "sideEffects": false,
+ "files": [
+ "/dist",
+ "/src"
+ ],
+ "author": "Alex Reardon <alexreardon@gmail.com>",
+ "license": "MIT",
+ "scripts": {
+ "test": "yarn jest",
+ "lint": "yarn prettier --debug-check src/** test/**",
+ "typecheck": "yarn flow",
+ "validate": "yarn lint && yarn flow",
+ "build:clean": "rimraf dist",
+ "build:flow": "echo \"// @flow\n\nexport * from '../src';\" > dist/tiny-invariant.cjs.js.flow",
+ "build:dist": "yarn rollup --config rollup.config.js",
+ "build": "yarn build:clean && yarn build:dist && yarn build:flow",
+ "prepublishOnly": "yarn build"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.1.2",
+ "@babel/preset-env": "^7.1.0",
+ "@babel/preset-flow": "^7.0.0",
+ "babel-core": "7.0.0-bridge.0",
+ "babel-jest": "^23.6.0",
+ "flow-bin": "^0.82.0",
+ "jest": "^23.6.0",
+ "prettier": "^1.14.3",
+ "rimraf": "^2.6.2",
+ "rollup": "^0.66.2",
+ "rollup-plugin-babel": "^4.0.3",
+ "rollup-plugin-replace": "^2.0.0",
+ "rollup-plugin-uglify": "^6.0.0"
+ }
+}
diff --git a/tiny-invariant/rollup.config.js b/tiny-invariant/rollup.config.js
new file mode 100644
index 0000000..f1beb6d
--- /dev/null
+++ b/tiny-invariant/rollup.config.js
@@ -0,0 +1,55 @@
+import babel from 'rollup-plugin-babel';
+import replace from 'rollup-plugin-replace';
+import { uglify } from 'rollup-plugin-uglify';
+import pkg from './package.json';
+
+const input = 'src/index.js';
+
+export default [
+ // ESM build
+ {
+ input,
+ output: {
+ file: pkg.module,
+ format: 'esm',
+ },
+ plugins: [babel()],
+ },
+ // CommonJS build
+ {
+ input,
+ output: {
+ file: pkg.main,
+ format: 'cjs',
+ },
+ plugins: [babel()],
+ },
+ // UMD: Production build
+ {
+ input,
+ output: {
+ file: 'dist/tiny-invariant.js',
+ format: 'umd',
+ name: 'invariant',
+ },
+ plugins: [
+ // Setting development env before running babel etc
+ replace({ 'process.env.NODE_ENV': JSON.stringify('development') }),
+ babel(),
+ ],
+ },
+ {
+ input,
+ output: {
+ file: 'dist/tiny-invariant.min.js',
+ format: 'umd',
+ name: 'invariant',
+ },
+ plugins: [
+ // Setting development env before running babel etc
+ replace({ 'process.env.NODE_ENV': JSON.stringify('production') }),
+ babel(),
+ uglify(),
+ ],
+ },
+];
diff --git a/tiny-invariant/src/index.js b/tiny-invariant/src/index.js
new file mode 100644
index 0000000..51144a8
--- /dev/null
+++ b/tiny-invariant/src/index.js
@@ -0,0 +1,22 @@
+// @flow
+const isProduction: boolean = process.env.NODE_ENV === 'production';
+const prefix: string = 'Invariant failed';
+
+// Throw an error if the condition fails
+// Strip out error messages for production
+// > Not providing an inline default argument for message as the result is smaller
+export default function invariant(condition: mixed, message?: string) {
+ if (condition) {
+ return;
+ }
+ // Condition not passed
+
+ if (isProduction) {
+ // In production we strip the message but still throw
+ throw new Error(prefix);
+ } else {
+ // When not in production we allow the message to pass through
+ // *This block will be removed in non-production builds*
+ throw new Error(`${prefix}: ${message || ''}`);
+ }
+}
diff --git a/tiny-invariant/test/bundle-size.spec.js b/tiny-invariant/test/bundle-size.spec.js
new file mode 100644
index 0000000..314e41a
--- /dev/null
+++ b/tiny-invariant/test/bundle-size.spec.js
@@ -0,0 +1,49 @@
+// @flow
+import { rollup } from 'rollup';
+import babel from 'rollup-plugin-babel';
+import replace from 'rollup-plugin-replace';
+
+const DEV_SIZE = 201;
+const PROD_SIZE = 176;
+
+const getCode = async ({ mode }): Promise<string> => {
+ const bundle = await rollup({
+ input: './src/index.js',
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify(mode) }),
+ babel(),
+ ],
+ });
+ const { code } = await bundle.generate({ format: 'esm' });
+ return code;
+};
+
+it(`development mode size should be ${DEV_SIZE}`, async () => {
+ const code: string = await getCode({ mode: 'development' });
+ expect(code.length).toBe(DEV_SIZE);
+});
+
+it(`production mode size should be ${PROD_SIZE}`, async () => {
+ const code: string = await getCode({ mode: 'production' });
+ expect(code.length).toBe(PROD_SIZE);
+});
+
+const containsDevCode = (code: string) => {
+ return code.includes(`throw new Error(prefix + ": " + (message || ''))`);
+};
+
+const containsProdCode = (code: string) => {
+ return code.includes(`throw new Error(prefix)`);
+};
+
+it('should include the message in dev builds', async () => {
+ const code: string = await getCode({ mode: 'development' });
+ expect(containsDevCode(code)).toBe(true);
+ expect(containsProdCode(code)).toBe(false);
+});
+
+it('not should include the message in prod builds', async () => {
+ const code: string = await getCode({ mode: 'production' });
+ expect(containsDevCode(code)).toBe(false);
+ expect(containsProdCode(code)).toBe(true);
+});
diff --git a/tiny-invariant/test/index.spec.js b/tiny-invariant/test/index.spec.js
new file mode 100644
index 0000000..ecb9e32
--- /dev/null
+++ b/tiny-invariant/test/index.spec.js
@@ -0,0 +1,15 @@
+// @flow
+import invariant from '../src';
+
+it('should not throw if condition is truthy', () => {
+ const truthy: mixed[] = [1, -1, true, {}, [], Symbol(), 'hi'];
+ truthy.forEach((value: mixed) =>
+ expect(() => invariant(value)).not.toThrow(),
+ );
+});
+
+it('should throw if the condition is falsy', () => {
+ // https://github.com/getify/You-Dont-Know-JS/blob/master/types%20%26%20grammar/ch4.md#falsy-values
+ const falsy: mixed[] = [undefined, null, false, +0, -0, NaN, ''];
+ falsy.forEach((value: mixed) => expect(() => invariant(value)).toThrow());
+});
diff --git a/tiny-invariant/yarn.lock b/tiny-invariant/yarn.lock
new file mode 100644
index 0000000..4c27132
--- /dev/null
+++ b/tiny-invariant/yarn.lock
@@ -0,0 +1,4662 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
+ integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/code-frame@^7.0.0-beta.35":
+ version "7.0.0-beta.44"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9"
+ integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==
+ dependencies:
+ "@babel/highlight" "7.0.0-beta.44"
+
+"@babel/core@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e"
+ integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/generator" "^7.1.2"
+ "@babel/helpers" "^7.1.2"
+ "@babel/parser" "^7.1.2"
+ "@babel/template" "^7.1.2"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.1.2"
+ convert-source-map "^1.1.0"
+ debug "^3.1.0"
+ json5 "^0.5.0"
+ lodash "^4.17.10"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.0.0", "@babel/generator@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.2.tgz#fde75c072575ce7abbd97322e8fef5bae67e4630"
+ integrity sha512-70A9HWLS/1RHk3Ck8tNHKxOoKQuSKocYgwDN85Pyl/RBduss6AKxUR7RIZ/lzduQMSYfWEM4DDBu6A+XGbkFig==
+ dependencies:
+ "@babel/types" "^7.1.2"
+ jsesc "^2.5.1"
+ lodash "^4.17.10"
+ source-map "^0.5.0"
+ trim-right "^1.0.1"
+
+"@babel/helper-annotate-as-pure@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
+ integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
+ integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-call-delegate@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a"
+ integrity sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.0.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-define-map@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c"
+ integrity sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ lodash "^4.17.10"
+
+"@babel/helper-explode-assignable-expression@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
+ integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-function-name@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
+ integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-get-function-arity@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
+ integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-hoist-variables@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88"
+ integrity sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-member-expression-to-functions@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f"
+ integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-module-imports@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
+ integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-module-transforms@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787"
+ integrity sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.0.0"
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ lodash "^4.17.10"
+
+"@babel/helper-optimise-call-expression@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
+ integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-plugin-utils@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
+ integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+
+"@babel/helper-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27"
+ integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==
+ dependencies:
+ lodash "^4.17.10"
+
+"@babel/helper-remap-async-to-generator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
+ integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-wrap-function" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-replace-supers@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362"
+ integrity sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.0.0"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-simple-access@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
+ integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+ dependencies:
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-split-export-declaration@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813"
+ integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-wrap-function@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66"
+ integrity sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helpers@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5"
+ integrity sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA==
+ dependencies:
+ "@babel/template" "^7.1.2"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.1.2"
+
+"@babel/highlight@7.0.0-beta.44":
+ version "7.0.0-beta.44"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5"
+ integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+"@babel/highlight@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
+ integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.2.tgz#85c5c47af6d244fab77bce6b9bd830e38c978409"
+ integrity sha512-x5HFsW+E/nQalGMw7hu+fvPqnBeBaIr0lWJ2SG0PPL2j+Pm9lYvCrsZJGIgauPIENx0v10INIyFjmSNUD/gSqQ==
+
+"@babel/plugin-proposal-async-generator-functions@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce"
+ integrity sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+ "@babel/plugin-syntax-async-generators" "^7.0.0"
+
+"@babel/plugin-proposal-json-strings@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e"
+ integrity sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-json-strings" "^7.0.0"
+
+"@babel/plugin-proposal-object-rest-spread@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e"
+ integrity sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425"
+ integrity sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.0.0"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33"
+ integrity sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+ regexpu-core "^4.2.0"
+
+"@babel/plugin-syntax-async-generators@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c"
+ integrity sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-flow@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz#70638aeaad9ee426bc532e51523cff8ff02f6f17"
+ integrity sha512-zGcuZWiWWDa5qTZ6iAnpG0fnX/GOu49pGR5PFvkQ9GmKNaSphXQnlNXh/LG20sqWtNrx/eB6krzfEzcwvUyeFA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-json-strings@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd"
+ integrity sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-object-rest-spread@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b"
+ integrity sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475"
+ integrity sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-arrow-functions@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749"
+ integrity sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-async-to-generator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811"
+ integrity sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+
+"@babel/plugin-transform-block-scoped-functions@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07"
+ integrity sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-block-scoping@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc"
+ integrity sha512-GWEMCrmHQcYWISilUrk9GDqH4enf3UmhOEbNbNrlNAX1ssH3MsS1xLOS6rdjRVPgA7XXVPn87tRkdTEoA/dxEg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ lodash "^4.17.10"
+
+"@babel/plugin-transform-classes@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249"
+ integrity sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-define-map" "^7.1.0"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.0.0"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31"
+ integrity sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-destructuring@^7.0.0":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.2.tgz#5fa77d473f5a0a3f5266ad7ce2e8c995a164d60a"
+ integrity sha512-cvToXvp/OsYxtEn57XJu9BvsGSEYjAh9UeUuXpoi7x6QHB7YdWyQ4lRU/q0Fu1IJNT0o0u4FQ1DMQBzJ8/8vZg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-dotall-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58"
+ integrity sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+ regexpu-core "^4.1.3"
+
+"@babel/plugin-transform-duplicate-keys@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86"
+ integrity sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-exponentiation-operator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73"
+ integrity sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-flow-strip-types@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz#c40ced34c2783985d90d9f9ac77a13e6fb396a01"
+ integrity sha512-WhXUNb4It5a19RsgKKbQPrjmy4yWOY1KynpEbNw7bnd1QTcrT/EIl3MJvnGgpgvrKyKbqX7nUNOJfkpLOnoDKA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-flow" "^7.0.0"
+
+"@babel/plugin-transform-for-of@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39"
+ integrity sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-function-name@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb"
+ integrity sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-literals@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86"
+ integrity sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-amd@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz#f9e0a7072c12e296079b5a59f408ff5b97bf86a8"
+ integrity sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-commonjs@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c"
+ integrity sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+
+"@babel/plugin-transform-modules-systemjs@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0.tgz#8873d876d4fee23209decc4d1feab8f198cf2df4"
+ integrity sha512-8EDKMAsitLkiF/D4Zhe9CHEE2XLh4bfLbb9/Zf3FgXYQOZyZYyg7EAel/aT2A7bHv62jwHf09q2KU/oEexr83g==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-umd@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz#a29a7d85d6f28c3561c33964442257cc6a21f2a8"
+ integrity sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-new-target@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a"
+ integrity sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-object-super@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz#b1ae194a054b826d8d4ba7ca91486d4ada0f91bb"
+ integrity sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.1.0"
+
+"@babel/plugin-transform-parameters@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed"
+ integrity sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw==
+ dependencies:
+ "@babel/helper-call-delegate" "^7.1.0"
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-regenerator@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1"
+ integrity sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==
+ dependencies:
+ regenerator-transform "^0.13.3"
+
+"@babel/plugin-transform-shorthand-properties@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15"
+ integrity sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-spread@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b"
+ integrity sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-sticky-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366"
+ integrity sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+
+"@babel/plugin-transform-template-literals@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65"
+ integrity sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-typeof-symbol@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9"
+ integrity sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-unicode-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc"
+ integrity sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+ regexpu-core "^4.1.3"
+
+"@babel/preset-env@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.0.tgz#e67ea5b0441cfeab1d6f41e9b5c79798800e8d11"
+ integrity sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-async-generator-functions" "^7.1.0"
+ "@babel/plugin-proposal-json-strings" "^7.0.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.0.0"
+ "@babel/plugin-syntax-async-generators" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.0.0"
+ "@babel/plugin-transform-arrow-functions" "^7.0.0"
+ "@babel/plugin-transform-async-to-generator" "^7.1.0"
+ "@babel/plugin-transform-block-scoped-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoping" "^7.0.0"
+ "@babel/plugin-transform-classes" "^7.1.0"
+ "@babel/plugin-transform-computed-properties" "^7.0.0"
+ "@babel/plugin-transform-destructuring" "^7.0.0"
+ "@babel/plugin-transform-dotall-regex" "^7.0.0"
+ "@babel/plugin-transform-duplicate-keys" "^7.0.0"
+ "@babel/plugin-transform-exponentiation-operator" "^7.1.0"
+ "@babel/plugin-transform-for-of" "^7.0.0"
+ "@babel/plugin-transform-function-name" "^7.1.0"
+ "@babel/plugin-transform-literals" "^7.0.0"
+ "@babel/plugin-transform-modules-amd" "^7.1.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.1.0"
+ "@babel/plugin-transform-modules-systemjs" "^7.0.0"
+ "@babel/plugin-transform-modules-umd" "^7.1.0"
+ "@babel/plugin-transform-new-target" "^7.0.0"
+ "@babel/plugin-transform-object-super" "^7.1.0"
+ "@babel/plugin-transform-parameters" "^7.1.0"
+ "@babel/plugin-transform-regenerator" "^7.0.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0"
+ "@babel/plugin-transform-spread" "^7.0.0"
+ "@babel/plugin-transform-sticky-regex" "^7.0.0"
+ "@babel/plugin-transform-template-literals" "^7.0.0"
+ "@babel/plugin-transform-typeof-symbol" "^7.0.0"
+ "@babel/plugin-transform-unicode-regex" "^7.0.0"
+ browserslist "^4.1.0"
+ invariant "^2.2.2"
+ js-levenshtein "^1.1.3"
+ semver "^5.3.0"
+
+"@babel/preset-flow@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.0.0.tgz#afd764835d9535ec63d8c7d4caf1c06457263da2"
+ integrity sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-transform-flow-strip-types" "^7.0.0"
+
+"@babel/template@^7.1.0", "@babel/template@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644"
+ integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.1.2"
+ "@babel/types" "^7.1.2"
+
+"@babel/traverse@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.0.tgz#503ec6669387efd182c3888c4eec07bcc45d91b2"
+ integrity sha512-bwgln0FsMoxm3pLOgrrnGaXk18sSM9JNf1/nHC/FksmNGFbYnPWY4GYCfLxyP1KRmfsxqkRpfoa6xr6VuuSxdw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/generator" "^7.0.0"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.0.0"
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ debug "^3.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.10"
+
+"@babel/types@^7.0.0", "@babel/types@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.2.tgz#183e7952cf6691628afdc2e2b90d03240bac80c0"
+ integrity sha512-pb1I05sZEKiSlMUV9UReaqsCPUpgbHHHu2n1piRm7JkuBkm6QxcaIzKu6FMnMtCbih/cEYTR+RGYYC96Yk9HAg==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.10"
+ to-fast-properties "^2.0.0"
+
+"@types/estree@0.0.39":
+ version "0.0.39"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+
+"@types/node@*":
+ version "9.6.5"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.5.tgz#ee700810fdf49ac1c399fc5980b7559b3e5a381d"
+ integrity sha512-NOLEgsT6UiDTjnWG5Hd2Mg25LRyz/oe8ql3wbjzgSFeRzRROhPmtlsvIrei4B46UjERF0td9SZ1ZXPLOdcrBHg==
+
+abab@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
+ integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+acorn-globals@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538"
+ integrity sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==
+ dependencies:
+ acorn "^5.0.0"
+
+acorn@^5.0.0, acorn@^5.3.0:
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
+ integrity sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==
+
+ajv@^4.9.1:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+ajv@^5.1.0:
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+ integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
+ dependencies:
+ co "^4.6.0"
+ fast-deep-equal "^1.0.0"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.3.0"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+ansi-escapes@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
+ integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+append-transform@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
+ integrity sha1-126/jKlNJ24keja61EpLdKthGZE=
+ dependencies:
+ default-require-extensions "^1.0.0"
+
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
+ integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-limiter@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
+ integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
+
+async@^1.4.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+
+async@^2.1.4:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
+ integrity sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==
+ dependencies:
+ lodash "^4.14.0"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc"
+ integrity sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.2.1, aws4@^1.6.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
+ integrity sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==
+
+babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+babel-core@7.0.0-bridge.0:
+ version "7.0.0-bridge.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
+ integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
+
+babel-core@^6.0.0, babel-core@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
+ integrity sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-generator "^6.26.0"
+ babel-helpers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-register "^6.26.0"
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ convert-source-map "^1.5.0"
+ debug "^2.6.8"
+ json5 "^0.5.1"
+ lodash "^4.17.4"
+ minimatch "^3.0.4"
+ path-is-absolute "^1.0.1"
+ private "^0.1.7"
+ slash "^1.0.0"
+ source-map "^0.5.6"
+
+babel-generator@^6.18.0, babel-generator@^6.26.0:
+ version "6.26.1"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
+ integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
+ dependencies:
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.17.4"
+ source-map "^0.5.7"
+ trim-right "^1.0.1"
+
+babel-helpers@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+ integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-jest@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1"
+ integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==
+ dependencies:
+ babel-plugin-istanbul "^4.1.6"
+ babel-preset-jest "^23.2.0"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-istanbul@^4.1.6:
+ version "4.1.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
+ integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==
+ dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.13.0"
+ find-up "^2.1.0"
+ istanbul-lib-instrument "^1.10.1"
+ test-exclude "^4.2.1"
+
+babel-plugin-jest-hoist@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167"
+ integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=
+
+babel-plugin-syntax-object-rest-spread@^6.13.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+ integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
+
+babel-preset-jest@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46"
+ integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY=
+ dependencies:
+ babel-plugin-jest-hoist "^23.2.0"
+ babel-plugin-syntax-object-rest-spread "^6.13.0"
+
+babel-register@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+ integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
+ dependencies:
+ babel-core "^6.26.0"
+ babel-runtime "^6.26.0"
+ core-js "^2.5.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.17.4"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.15"
+
+babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+ integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ lodash "^4.17.4"
+
+babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+ integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ debug "^2.6.8"
+ globals "^9.18.0"
+ invariant "^2.2.2"
+ lodash "^4.17.4"
+
+babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
+ dependencies:
+ babel-runtime "^6.26.0"
+ esutils "^2.0.2"
+ lodash "^4.17.4"
+ to-fast-properties "^1.0.3"
+
+babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+ integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
+ dependencies:
+ hoek "2.x.x"
+
+boom@4.x.x:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
+ integrity sha1-T4owBctKfjiJ90kDD9JbluAdLjE=
+ dependencies:
+ hoek "4.x.x"
+
+boom@5.x.x:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
+ integrity sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==
+ dependencies:
+ hoek "4.x.x"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+browser-process-hrtime@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e"
+ integrity sha1-Ql1opY00R/AqBKqJQYf86K+Le44=
+
+browser-resolve@^1.11.3:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+ dependencies:
+ resolve "1.1.7"
+
+browserslist@^4.1.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.2.tgz#632feb46d1cbdd6bb1a6eb660eff68f2345ae7e7"
+ integrity sha512-docXmVcYth9AiW5183dEe2IxnbmpXF4jiM6efGBVRAli/iDSS894Svvjenrv5NPqAJ4dEJULmT4MSvmLG9qoYg==
+ dependencies:
+ caniuse-lite "^1.0.30000888"
+ electron-to-chromium "^1.3.73"
+ node-releases "^1.0.0-alpha.12"
+
+bser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
+ integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+caniuse-lite@^1.0.30000888:
+ version "1.0.30000888"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000888.tgz#22edb50d91dd70612b5898e3b36f460600c6492f"
+ integrity sha512-vftg+5p/lPsQGpnhSo/yBuYL36ai/cyjLvU3dOPJY1kkKrekLWIy8SLm+wzjX0hpCUdFTasC4/ZT7uqw4rKOnQ==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
+ integrity sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+ci-info@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2"
+ integrity sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+cliui@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc"
+ integrity sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
+ integrity sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==
+ dependencies:
+ color-name "^1.1.1"
+
+color-name@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
+ integrity sha1-cj599ugBrFYTETp+RFqbactjKBg=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@~2.17.1:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+ integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
+
+compare-versions@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5"
+ integrity sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==
+
+component-emitter@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+convert-source-map@^1.1.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+ integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+convert-source-map@^1.4.0, convert-source-map@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
+ integrity sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js@^2.4.0, core-js@^2.5.0:
+ version "2.5.5"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b"
+ integrity sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
+ dependencies:
+ boom "2.x.x"
+
+cryptiles@3.x.x:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
+ integrity sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=
+ dependencies:
+ boom "5.x.x"
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
+ integrity sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=
+
+"cssstyle@>= 0.2.37 < 0.3.0":
+ version "0.2.37"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
+ integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=
+ dependencies:
+ cssom "0.3.x"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+data-urls@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f"
+ integrity sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==
+ dependencies:
+ abab "^1.0.4"
+ whatwg-mimetype "^2.0.0"
+ whatwg-url "^6.4.0"
+
+debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+decamelize@^1.0.0, decamelize@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-extend@~0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+ integrity sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+default-require-extensions@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
+ integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=
+ dependencies:
+ strip-bom "^2.0.0"
+
+define-properties@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+ integrity sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=
+ dependencies:
+ foreach "^2.0.5"
+ object-keys "^1.0.8"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+detect-newline@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
+ integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+
+diff@^3.2.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+ integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+
+domexception@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+ integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
+ dependencies:
+ webidl-conversions "^4.0.2"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
+ dependencies:
+ jsbn "~0.1.0"
+
+electron-to-chromium@^1.3.73:
+ version "1.3.73"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.73.tgz#aa67787067d58cc3920089368b3b8d6fe0fc12f6"
+ integrity sha512-6PIg7v9zRoVGh6EheRF8h6Plti+3Yo/qtHobS4/Htyt53DNHmKKGFqSae1AIk0k1S4gCQvt7I2WgpbuZNcDY+g==
+
+error-ex@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ integrity sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.5.1:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681"
+ integrity sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.1"
+ has "^1.0.1"
+ is-callable "^1.1.3"
+ is-regex "^1.0.4"
+
+es-to-primitive@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+ integrity sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=
+ dependencies:
+ is-callable "^1.1.1"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.1"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escodegen@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2"
+ integrity sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==
+ dependencies:
+ esprima "^3.1.3"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+esprima@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+ integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
+
+esprima@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+ integrity sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==
+
+estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+ integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+
+estree-walker@^0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39"
+ integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+exec-sh@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38"
+ integrity sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==
+ dependencies:
+ merge "^1.1.3"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+expect@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98"
+ integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==
+ dependencies:
+ ansi-styles "^3.2.0"
+ jest-diff "^23.6.0"
+ jest-get-type "^22.1.0"
+ jest-matcher-utils "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-regex-util "^23.3.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.0, extend@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+ integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+ integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+ integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fb-watchman@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
+ integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=
+ dependencies:
+ bser "^2.0.0"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+ integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
+
+fileset@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
+ integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=
+ dependencies:
+ glob "^7.0.3"
+ minimatch "^3.0.3"
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+flow-bin@^0.82.0:
+ version "0.82.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.82.0.tgz#fbec84c0d6cab7877565eca8214d655f3aefb8db"
+ integrity sha512-D7ViTCVJSVv19CB6dFWS9k2iKQlavtkRXn9el0ofVTTpGuybe+EPE8DZwdyohzEt6wRhHV8gwkteWvxdcVuOzg==
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
+ dependencies:
+ for-in "^1.0.1"
+
+foreach@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+ integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.1.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+ integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+form-data@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
+ integrity sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "1.0.6"
+ mime-types "^2.1.12"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
+ integrity sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.39"
+
+fstream-ignore@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+ integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.0.2, function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+ integrity sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
+ dependencies:
+ 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"
+
+globals@^11.1.0:
+ version "11.8.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d"
+ integrity sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==
+
+globals@^9.18.0:
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+ integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
+handlebars@^4.0.3:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
+ integrity sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=
+ dependencies:
+ async "^1.4.0"
+ optimist "^0.6.1"
+ source-map "^0.4.4"
+ optionalDependencies:
+ uglify-js "^2.6"
+
+har-schema@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+ integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+ integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio=
+ dependencies:
+ ajv "^4.9.1"
+ har-schema "^1.0.5"
+
+har-validator@~5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+ integrity sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=
+ dependencies:
+ ajv "^5.1.0"
+ har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+ integrity sha1-hGFzP1OLCDfJNh45qauelwTcLyg=
+ dependencies:
+ function-bind "^1.0.2"
+
+hawk@3.1.3, hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hawk@~6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
+ integrity sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==
+ dependencies:
+ boom "4.x.x"
+ cryptiles "3.x.x"
+ hoek "4.x.x"
+ sntp "2.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+hoek@4.x.x:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
+ integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222"
+ integrity sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==
+
+html-encoding-sniffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+iconv-lite@0.4.19:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+ integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==
+
+import-local@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
+ integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==
+ dependencies:
+ pkg-dir "^2.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@~2.0.0, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+invariant@^2.2.2, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-callable@^1.1.1, is-callable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+ integrity sha1-hut1OSgF3cM69xySoO7fdO52BLI=
+
+is-ci@^1.0.10:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5"
+ integrity sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==
+ dependencies:
+ ci-info "^1.0.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+ integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-generator-fn@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
+ integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+ integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
+is-odd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24"
+ integrity sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==
+ dependencies:
+ is-number "^4.0.0"
+
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-regex@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+ dependencies:
+ has "^1.0.1"
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-symbol@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
+ integrity sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+isarray@1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+istanbul-api@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954"
+ integrity sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==
+ dependencies:
+ async "^2.1.4"
+ compare-versions "^3.1.0"
+ fileset "^2.0.2"
+ istanbul-lib-coverage "^1.2.0"
+ istanbul-lib-hook "^1.2.0"
+ istanbul-lib-instrument "^1.10.1"
+ istanbul-lib-report "^1.1.4"
+ istanbul-lib-source-maps "^1.2.4"
+ istanbul-reports "^1.3.0"
+ js-yaml "^3.7.0"
+ mkdirp "^0.5.1"
+ once "^1.4.0"
+
+istanbul-lib-coverage@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341"
+ integrity sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==
+
+istanbul-lib-hook@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c"
+ integrity sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==
+ dependencies:
+ append-transform "^0.4.0"
+
+istanbul-lib-instrument@^1.10.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b"
+ integrity sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==
+ dependencies:
+ babel-generator "^6.18.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+ babylon "^6.18.0"
+ istanbul-lib-coverage "^1.2.0"
+ semver "^5.3.0"
+
+istanbul-lib-report@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5"
+ integrity sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==
+ dependencies:
+ istanbul-lib-coverage "^1.2.0"
+ mkdirp "^0.5.1"
+ path-parse "^1.0.5"
+ supports-color "^3.1.2"
+
+istanbul-lib-source-maps@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7"
+ integrity sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==
+ dependencies:
+ debug "^3.1.0"
+ istanbul-lib-coverage "^1.2.0"
+ mkdirp "^0.5.1"
+ rimraf "^2.6.1"
+ source-map "^0.5.3"
+
+istanbul-reports@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554"
+ integrity sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==
+ dependencies:
+ handlebars "^4.0.3"
+
+jest-changed-files@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83"
+ integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==
+ dependencies:
+ throat "^4.0.0"
+
+jest-cli@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4"
+ integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ graceful-fs "^4.1.11"
+ import-local "^1.0.0"
+ is-ci "^1.0.10"
+ istanbul-api "^1.3.1"
+ istanbul-lib-coverage "^1.2.0"
+ istanbul-lib-instrument "^1.10.1"
+ istanbul-lib-source-maps "^1.2.4"
+ jest-changed-files "^23.4.2"
+ jest-config "^23.6.0"
+ jest-environment-jsdom "^23.4.0"
+ jest-get-type "^22.1.0"
+ jest-haste-map "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-regex-util "^23.3.0"
+ jest-resolve-dependencies "^23.6.0"
+ jest-runner "^23.6.0"
+ jest-runtime "^23.6.0"
+ jest-snapshot "^23.6.0"
+ jest-util "^23.4.0"
+ jest-validate "^23.6.0"
+ jest-watcher "^23.4.0"
+ jest-worker "^23.2.0"
+ micromatch "^2.3.11"
+ node-notifier "^5.2.1"
+ prompts "^0.1.9"
+ realpath-native "^1.0.0"
+ rimraf "^2.5.4"
+ slash "^1.0.0"
+ string-length "^2.0.0"
+ strip-ansi "^4.0.0"
+ which "^1.2.12"
+ yargs "^11.0.0"
+
+jest-config@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d"
+ integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==
+ dependencies:
+ babel-core "^6.0.0"
+ babel-jest "^23.6.0"
+ chalk "^2.0.1"
+ glob "^7.1.1"
+ jest-environment-jsdom "^23.4.0"
+ jest-environment-node "^23.4.0"
+ jest-get-type "^22.1.0"
+ jest-jasmine2 "^23.6.0"
+ jest-regex-util "^23.3.0"
+ jest-resolve "^23.6.0"
+ jest-util "^23.4.0"
+ jest-validate "^23.6.0"
+ micromatch "^2.3.11"
+ pretty-format "^23.6.0"
+
+jest-diff@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d"
+ integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==
+ dependencies:
+ chalk "^2.0.1"
+ diff "^3.2.0"
+ jest-get-type "^22.1.0"
+ pretty-format "^23.6.0"
+
+jest-docblock@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7"
+ integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=
+ dependencies:
+ detect-newline "^2.1.0"
+
+jest-each@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575"
+ integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==
+ dependencies:
+ chalk "^2.0.1"
+ pretty-format "^23.6.0"
+
+jest-environment-jsdom@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023"
+ integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM=
+ dependencies:
+ jest-mock "^23.2.0"
+ jest-util "^23.4.0"
+ jsdom "^11.5.1"
+
+jest-environment-node@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10"
+ integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=
+ dependencies:
+ jest-mock "^23.2.0"
+ jest-util "^23.4.0"
+
+jest-get-type@^22.1.0:
+ version "22.4.3"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
+ integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==
+
+jest-haste-map@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16"
+ integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==
+ dependencies:
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.11"
+ invariant "^2.2.4"
+ jest-docblock "^23.2.0"
+ jest-serializer "^23.0.1"
+ jest-worker "^23.2.0"
+ micromatch "^2.3.11"
+ sane "^2.0.0"
+
+jest-jasmine2@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0"
+ integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==
+ dependencies:
+ babel-traverse "^6.0.0"
+ chalk "^2.0.1"
+ co "^4.6.0"
+ expect "^23.6.0"
+ is-generator-fn "^1.0.0"
+ jest-diff "^23.6.0"
+ jest-each "^23.6.0"
+ jest-matcher-utils "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-snapshot "^23.6.0"
+ jest-util "^23.4.0"
+ pretty-format "^23.6.0"
+
+jest-leak-detector@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de"
+ integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==
+ dependencies:
+ pretty-format "^23.6.0"
+
+jest-matcher-utils@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80"
+ integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==
+ dependencies:
+ chalk "^2.0.1"
+ jest-get-type "^22.1.0"
+ pretty-format "^23.6.0"
+
+jest-message-util@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f"
+ integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=
+ dependencies:
+ "@babel/code-frame" "^7.0.0-beta.35"
+ chalk "^2.0.1"
+ micromatch "^2.3.11"
+ slash "^1.0.0"
+ stack-utils "^1.0.1"
+
+jest-mock@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134"
+ integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=
+
+jest-regex-util@^23.3.0:
+ version "23.3.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5"
+ integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=
+
+jest-resolve-dependencies@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d"
+ integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==
+ dependencies:
+ jest-regex-util "^23.3.0"
+ jest-snapshot "^23.6.0"
+
+jest-resolve@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae"
+ integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==
+ dependencies:
+ browser-resolve "^1.11.3"
+ chalk "^2.0.1"
+ realpath-native "^1.0.0"
+
+jest-runner@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38"
+ integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==
+ dependencies:
+ exit "^0.1.2"
+ graceful-fs "^4.1.11"
+ jest-config "^23.6.0"
+ jest-docblock "^23.2.0"
+ jest-haste-map "^23.6.0"
+ jest-jasmine2 "^23.6.0"
+ jest-leak-detector "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-runtime "^23.6.0"
+ jest-util "^23.4.0"
+ jest-worker "^23.2.0"
+ source-map-support "^0.5.6"
+ throat "^4.0.0"
+
+jest-runtime@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082"
+ integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==
+ dependencies:
+ babel-core "^6.0.0"
+ babel-plugin-istanbul "^4.1.6"
+ chalk "^2.0.1"
+ convert-source-map "^1.4.0"
+ exit "^0.1.2"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.1.11"
+ jest-config "^23.6.0"
+ jest-haste-map "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-regex-util "^23.3.0"
+ jest-resolve "^23.6.0"
+ jest-snapshot "^23.6.0"
+ jest-util "^23.4.0"
+ jest-validate "^23.6.0"
+ micromatch "^2.3.11"
+ realpath-native "^1.0.0"
+ slash "^1.0.0"
+ strip-bom "3.0.0"
+ write-file-atomic "^2.1.0"
+ yargs "^11.0.0"
+
+jest-serializer@^23.0.1:
+ version "23.0.1"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165"
+ integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=
+
+jest-snapshot@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a"
+ integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==
+ dependencies:
+ babel-types "^6.0.0"
+ chalk "^2.0.1"
+ jest-diff "^23.6.0"
+ jest-matcher-utils "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-resolve "^23.6.0"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^23.6.0"
+ semver "^5.5.0"
+
+jest-util@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561"
+ integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=
+ dependencies:
+ callsites "^2.0.0"
+ chalk "^2.0.1"
+ graceful-fs "^4.1.11"
+ is-ci "^1.0.10"
+ jest-message-util "^23.4.0"
+ mkdirp "^0.5.1"
+ slash "^1.0.0"
+ source-map "^0.6.0"
+
+jest-validate@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474"
+ integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==
+ dependencies:
+ chalk "^2.0.1"
+ jest-get-type "^22.1.0"
+ leven "^2.1.0"
+ pretty-format "^23.6.0"
+
+jest-watcher@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c"
+ integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ string-length "^2.0.0"
+
+jest-worker@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9"
+ integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=
+ dependencies:
+ merge-stream "^1.0.1"
+
+jest@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d"
+ integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==
+ dependencies:
+ import-local "^1.0.0"
+ jest-cli "^23.6.0"
+
+js-levenshtein@^1.1.3:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e"
+ integrity sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==
+
+js-tokens@^3.0.0, js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.7.0:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef"
+ integrity sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsdom@^11.5.1:
+ version "11.8.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.8.0.tgz#a52e9a7d2b931284f62c80dad5f17d7390499d8b"
+ integrity sha512-fZZSH6P8tVqYIQl0WKpZuQljPu2cW41Uj/c9omtyGwjwZCB8c82UAi7BSQs/F1FgWovmZsoU02z3k28eHp0Cdw==
+ dependencies:
+ abab "^1.0.4"
+ acorn "^5.3.0"
+ acorn-globals "^4.1.0"
+ array-equal "^1.0.0"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle ">= 0.2.37 < 0.3.0"
+ data-urls "^1.0.0"
+ domexception "^1.0.0"
+ escodegen "^1.9.0"
+ html-encoding-sniffer "^1.0.2"
+ left-pad "^1.2.0"
+ nwmatcher "^1.4.3"
+ parse5 "4.0.0"
+ pn "^1.1.0"
+ request "^2.83.0"
+ request-promise-native "^1.0.5"
+ sax "^1.2.4"
+ symbol-tree "^3.2.2"
+ tough-cookie "^2.3.3"
+ w3c-hr-time "^1.0.1"
+ webidl-conversions "^4.0.2"
+ whatwg-encoding "^1.0.3"
+ whatwg-mimetype "^2.1.0"
+ whatwg-url "^6.4.0"
+ ws "^4.0.0"
+ xml-name-validator "^3.0.0"
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+jsesc@^2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe"
+ integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+ integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.0, json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+kleur@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.1.tgz#7cc64b0d188d0dcbc98bdcdfdda2cc10619ddce8"
+ integrity sha512-Zq/jyANIJ2uX8UZjWlqLwbyhcxSXJtT/Y89lClyeZd3l++3ztL1I5SSCYrbcbwSunTjC88N3WuMk0kRDQD6gzA==
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
+ dependencies:
+ invert-kv "^1.0.0"
+
+left-pad@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
+ integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
+
+leven@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+ integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
+lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4:
+ version "4.17.5"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
+ integrity sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==
+
+lodash@^4.17.10:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+ integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ integrity sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=
+ dependencies:
+ js-tokens "^3.0.0"
+
+lru-cache@^4.0.1:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f"
+ integrity sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+magic-string@^0.22.4:
+ version "0.22.5"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e"
+ integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==
+ dependencies:
+ vlq "^0.2.2"
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ dependencies:
+ tmpl "1.0.x"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+mem@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+ integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+merge-stream@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+ integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=
+ dependencies:
+ readable-stream "^2.0.1"
+
+merge@^1.1.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
+ integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=
+
+micromatch@^2.3.11:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+micromatch@^3.1.4, micromatch@^3.1.8:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+mime-db@~1.33.0:
+ version "1.33.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+ integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==
+
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7:
+ version "2.1.18"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+ integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==
+ dependencies:
+ mime-db "~1.33.0"
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.1, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+nan@^2.3.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
+ integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==
+
+nanomatch@^1.2.9:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2"
+ integrity sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-odd "^2.0.0"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-notifier@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea"
+ integrity sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==
+ dependencies:
+ growly "^1.3.0"
+ semver "^5.4.1"
+ shellwords "^0.1.1"
+ which "^1.3.0"
+
+node-pre-gyp@^0.6.39:
+ version "0.6.39"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
+ integrity sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==
+ dependencies:
+ detect-libc "^1.0.2"
+ hawk "3.1.3"
+ mkdirp "^0.5.1"
+ nopt "^4.0.1"
+ npmlog "^4.0.2"
+ rc "^1.1.7"
+ request "2.81.0"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^2.2.1"
+ tar-pack "^3.4.0"
+
+node-releases@^1.0.0-alpha.12:
+ version "1.0.0-alpha.12"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.12.tgz#32e461b879ea76ac674e511d9832cf29da345268"
+ integrity sha512-VPB4rTPqpVyWKBHbSa4YPFme3+8WHsOSpvbp0Mfj0bWsC8TEjt4HQrLl1hsBDELlp1nB4lflSgSuGTYiuyaP7Q==
+ dependencies:
+ semver "^5.3.0"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+ integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1, normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+nwmatcher@^1.4.3:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e"
+ integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==
+
+oauth-sign@~0.8.1, oauth-sign@~0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-keys@^1.0.8:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+ integrity sha1-xUYBd4rVYPEULODgG8yotW0TQm0=
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.getownpropertydescriptors@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
+ integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.5.1"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+once@^1.3.0, once@^1.3.3, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optionator@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-locale@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+ integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
+ dependencies:
+ execa "^0.7.0"
+ lcid "^1.0.0"
+ mem "^1.1.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-limit@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
+ integrity sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==
+ dependencies:
+ p-try "^1.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse5@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
+ integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+ integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+performance-now@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+ integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pn@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+prettier@^1.14.3:
+ version "1.14.3"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895"
+ integrity sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==
+
+pretty-format@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
+ integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==
+ dependencies:
+ ansi-regex "^3.0.0"
+ ansi-styles "^3.2.0"
+
+private@^0.1.6, private@^0.1.7:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+ integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+ integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+
+prompts@^0.1.9:
+ version "0.1.14"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2"
+ integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==
+ dependencies:
+ kleur "^2.0.1"
+ sisteransi "^0.1.1"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"
+ integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=
+
+qs@~6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+ integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=
+
+qs@~6.5.1:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
+ integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==
+
+randomatic@^1.1.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
+ integrity sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+rc@^1.1.7:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092"
+ integrity sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.4:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+realpath-native@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0"
+ integrity sha512-XJtlRJ9jf0E1H1SLeJyQ9PGzQD7S65h1pRXEcAeK48doKOnKxcgPeNohJvD5u/2sI9J1oke6E8bZHS/fmW1UiQ==
+ dependencies:
+ util.promisify "^1.0.0"
+
+regenerate-unicode-properties@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c"
+ integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+ integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-transform@^0.13.3:
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb"
+ integrity sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==
+ dependencies:
+ private "^0.1.6"
+
+regex-cache@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
+ dependencies:
+ is-equal-shallow "^0.1.3"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexpu-core@^4.1.3, regexpu-core@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d"
+ integrity sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^7.0.0"
+ regjsgen "^0.4.0"
+ regjsparser "^0.3.0"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.0.2"
+
+regjsgen@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561"
+ integrity sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA==
+
+regjsparser@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96"
+ integrity sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA==
+ dependencies:
+ jsesc "~0.5.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+repeat-string@^1.5.2, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request-promise-core@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6"
+ integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=
+ dependencies:
+ lodash "^4.13.1"
+
+request-promise-native@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5"
+ integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=
+ dependencies:
+ request-promise-core "1.1.1"
+ stealthy-require "^1.1.0"
+ tough-cookie ">=2.3.3"
+
+request@2.81.0:
+ version "2.81.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
+ integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~4.2.1"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ performance-now "^0.2.0"
+ qs "~6.4.0"
+ safe-buffer "^5.0.1"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.0.0"
+
+request@^2.83.0:
+ version "2.85.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa"
+ integrity sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.6.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.1"
+ forever-agent "~0.6.1"
+ form-data "~2.3.1"
+ har-validator "~5.0.3"
+ hawk "~6.0.2"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.17"
+ oauth-sign "~0.8.2"
+ performance-now "^2.1.0"
+ qs "~6.5.1"
+ safe-buffer "^5.1.1"
+ stringstream "~0.0.5"
+ tough-cookie "~2.3.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.1.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^1.3.2:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
+ integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==
+ dependencies:
+ path-parse "^1.0.5"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
+ dependencies:
+ glob "^7.0.5"
+
+rollup-plugin-babel@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.0.3.tgz#8282b0e22233160d679e9c7631342e848422fb02"
+ integrity sha512-/PP0MgbPQyRywI4zRIJim6ySjTcOLo4kQbEbROqp9kOR3kHC3FeU++QpBDZhS2BcHtJTVZMVbBV46flbBN5zxQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ rollup-pluginutils "^2.3.0"
+
+rollup-plugin-replace@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.0.0.tgz#19074089c8ed57184b8cc64e967a03d095119277"
+ integrity sha512-pK9mTd/FNrhtBxcTBXoh0YOwRIShV0gGhv9qvUtNcXHxIMRZMXqfiZKVBmCRGp8/2DJRy62z2JUE7/5tP6WxOQ==
+ dependencies:
+ magic-string "^0.22.4"
+ minimatch "^3.0.2"
+ rollup-pluginutils "^2.0.1"
+
+rollup-plugin-uglify@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.0.tgz#15aa8919e5cdc63b7cfc9319c781788b40084ce4"
+ integrity sha512-XtzZd159QuOaXNvcxyBcbUCSoBsv5YYWK+7ZwUyujSmISst8avRfjWlp7cGu8T2O52OJnpEBvl+D4WLV1k1iQQ==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ jest-worker "^23.2.0"
+ serialize-javascript "^1.5.0"
+ uglify-js "^3.4.9"
+
+rollup-pluginutils@^2.0.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.1.tgz#760d185ccc237dedc12d7ae48c6bcd127b4892d0"
+ integrity sha512-JZS8aJMHEHhqmY2QVPMXwKP6lsD1ShkrcGYjhAIvqKKdXQyPHw/9NF0tl3On/xOJ4ACkxfeG7AF+chfCN1NpBg==
+ dependencies:
+ estree-walker "^0.5.2"
+ micromatch "^2.3.11"
+
+rollup-pluginutils@^2.3.0:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794"
+ integrity sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==
+ dependencies:
+ estree-walker "^0.5.2"
+ micromatch "^2.3.11"
+
+rollup@^0.66.2:
+ version "0.66.2"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.66.2.tgz#77acdb9f4093f5f035ce75480577c40a81ea7999"
+ integrity sha512-+rOLjWO170M3Y2jyyGU4ZJuTu1T1KuKNyH+RszHRzQdsuI5TulRbkSM4vlaMnwcxHm4XdgBNZ1mmNzhQIImbiQ==
+ dependencies:
+ "@types/estree" "0.0.39"
+ "@types/node" "*"
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+ integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+sane@^2.0.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.0.tgz#6359cd676f5efd9988b264d8ce3b827dd6b27bec"
+ integrity sha512-glfKd7YH4UCrh/7dD+UESsr8ylKWRE7UQPoXuz28FgmcF0ViJQhCTCCZHICRKxf8G8O1KdLEn20dcICK54c7ew==
+ dependencies:
+ anymatch "^2.0.0"
+ exec-sh "^0.2.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+ watch "~0.18.0"
+ optionalDependencies:
+ fsevents "^1.1.1"
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+ integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
+
+serialize-javascript@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe"
+ integrity sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+sisteransi@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce"
+ integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
+ dependencies:
+ hoek "2.x.x"
+
+sntp@2.x.x:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
+ integrity sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==
+ dependencies:
+ hoek "4.x.x"
+
+source-map-resolve@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a"
+ integrity sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==
+ dependencies:
+ atob "^2.0.0"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.4.15:
+ version "0.4.18"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+ integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
+ dependencies:
+ source-map "^0.5.6"
+
+source-map-support@^0.5.6:
+ version "0.5.8"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.8.tgz#04f5581713a8a65612d0175fbf3a01f80a162613"
+ integrity sha512-WqAEWPdb78u25RfKzOF0swBpY0dKrNdjc4GvLwm7ScX/o9bj8Eh/YL8mcMhBHYDGl87UkkSXDOFnW4G7GhWhGg==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+spdx-correct@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
+ integrity sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
+ integrity sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
+ integrity sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb"
+ integrity sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stack-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620"
+ integrity sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+stealthy-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
+string-length@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
+ integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringstream@~0.0.4, stringstream@~0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+ integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-bom@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^3.1.2:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^5.3.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
+ integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
+ dependencies:
+ has-flag "^3.0.0"
+
+symbol-tree@^3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
+ integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
+
+tar-pack@^3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
+ integrity sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==
+ dependencies:
+ debug "^2.2.0"
+ fstream "^1.0.10"
+ fstream-ignore "^1.0.5"
+ once "^1.3.3"
+ readable-stream "^2.1.4"
+ rimraf "^2.5.1"
+ tar "^2.2.1"
+ uid-number "^0.0.6"
+
+tar@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+test-exclude@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa"
+ integrity sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==
+ dependencies:
+ arrify "^1.0.1"
+ micromatch "^3.1.8"
+ object-assign "^4.1.0"
+ read-pkg-up "^1.0.1"
+ require-main-filename "^1.0.1"
+
+throat@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
+ integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
+to-fast-properties@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+ integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
+ integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==
+ dependencies:
+ punycode "^1.4.1"
+
+tr46@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
+ dependencies:
+ punycode "^2.1.0"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+ integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+uglify-js@^2.6:
+ version "2.8.29"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+ integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
+ dependencies:
+ source-map "~0.5.1"
+ yargs "~3.10.0"
+ optionalDependencies:
+ uglify-to-browserify "~1.0.0"
+
+uglify-js@^3.4.9:
+ version "3.4.9"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
+ integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==
+ dependencies:
+ commander "~2.17.1"
+ source-map "~0.6.1"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+uid-number@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4"
+ integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0"
+ integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==
+
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+use@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544"
+ integrity sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==
+ dependencies:
+ kind-of "^6.0.2"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+ integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+ dependencies:
+ define-properties "^1.1.2"
+ object.getownpropertydescriptors "^2.0.3"
+
+uuid@^3.0.0, uuid@^3.1.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
+ integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
+ integrity sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vlq@^0.2.2:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
+ integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==
+
+w3c-hr-time@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
+ integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=
+ dependencies:
+ browser-process-hrtime "^0.1.2"
+
+walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ dependencies:
+ makeerror "1.0.x"
+
+watch@~0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
+ integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY=
+ dependencies:
+ exec-sh "^0.2.0"
+ minimist "^1.2.0"
+
+webidl-conversions@^4.0.1, webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3"
+ integrity sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==
+ dependencies:
+ iconv-lite "0.4.19"
+
+whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4"
+ integrity sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==
+
+whatwg-url@^6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08"
+ integrity sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.0"
+ webidl-conversions "^4.0.1"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.12, which@^1.2.9, which@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
+ integrity sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+ integrity sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==
+ dependencies:
+ string-width "^1.0.2"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
+ integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+ws@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289"
+ integrity sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==
+ dependencies:
+ async-limiter "~1.0.0"
+ safe-buffer "~5.1.0"
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+ integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yargs-parser@^9.0.2:
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
+ integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^11.0.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77"
+ integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^1.1.1"
+ find-up "^2.1.0"
+ get-caller-file "^1.0.1"
+ os-locale "^2.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^9.0.2"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
diff --git a/tiny-warning/.babelrc b/tiny-warning/.babelrc
new file mode 100644
index 0000000..68547f3
--- /dev/null
+++ b/tiny-warning/.babelrc
@@ -0,0 +1,12 @@
+{
+ "presets": [
+ "@babel/flow",
+ [
+ "@babel/env",
+ {
+ "loose": true
+ }
+ ]
+ ],
+ "comments": false
+}
diff --git a/tiny-warning/.flowconfig b/tiny-warning/.flowconfig
new file mode 100644
index 0000000..1fed445
--- /dev/null
+++ b/tiny-warning/.flowconfig
@@ -0,0 +1,11 @@
+[ignore]
+
+[include]
+
+[libs]
+
+[lints]
+
+[options]
+
+[strict]
diff --git a/tiny-warning/.gitignore b/tiny-warning/.gitignore
new file mode 100644
index 0000000..05bf324
--- /dev/null
+++ b/tiny-warning/.gitignore
@@ -0,0 +1,17 @@
+# editors
+.idea
+.vscode
+
+# library
+node_modules/
+
+# MacOS
+.DS_Store
+
+# generated files
+dist/
+
+# logs
+yarn-error.log
+npm-debug.log
+npm-debug.log.*
diff --git a/tiny-warning/.prettierrc b/tiny-warning/.prettierrc
new file mode 100644
index 0000000..d579fef
--- /dev/null
+++ b/tiny-warning/.prettierrc
@@ -0,0 +1,7 @@
+{
+ "trailingComma": "all",
+ "semi": true,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true
+}
diff --git a/tiny-warning/.travis.yml b/tiny-warning/.travis.yml
new file mode 100644
index 0000000..0fbb6e4
--- /dev/null
+++ b/tiny-warning/.travis.yml
@@ -0,0 +1,13 @@
+language: node_js
+cache: yarn
+node_js:
+- '8.4'
+script:
+- yarn run validate
+- yarn run test
+# Required for lock file generation
+# https://github.com/greenkeeperio/greenkeeper-lockfile
+before_install: yarn global add greenkeeper-lockfile@1
+before_script:
+ - greenkeeper-lockfile-update
+after_script: greenkeeper-lockfile-upload
diff --git a/tiny-warning/README.md b/tiny-warning/README.md
new file mode 100644
index 0000000..f502ab5
--- /dev/null
+++ b/tiny-warning/README.md
@@ -0,0 +1,68 @@
+# `tiny-warning` 🔬⚠️
+
+[![Build Status](https://travis-ci.org/alexreardon/tiny-warning.svg?branch=master)](https://travis-ci.org/alexreardon/tiny-warning)
+[![npm](https://img.shields.io/npm/v/tiny-warning.svg)](https://www.npmjs.com/package/tiny-warning) [![dependencies](https://david-dm.org/alexreardon/tiny-warning.svg)](https://david-dm.org/alexreardon/tiny-warning)
+[![min](https://img.shields.io/bundlephobia/min/tiny-warning.svg)](https://www.npmjs.com/package/tiny-warning)
+[![minzip](https://img.shields.io/bundlephobia/minzip/tiny-warning.svg)](https://www.npmjs.com/package/tiny-warning)
+
+A tiny [`warning`](https://www.npmjs.com/package/warning) alternative.
+
+```js
+import warning from 'tiny-warning';
+
+warning(truthyValue, 'This should not log a warning');
+
+warning(falsyValue, 'This should log a warning');
+// console.warn('This should log a warning');
+```
+
+## API: `(condition: mixed, message: string) => void`
+
+- `condition` is required and can be anything
+- `message` is an required string that will be passed onto `console.warn`
+
+## Why `tiny-warning`?
+
+The [`library: warning`](https://www.npmjs.com/package/warning) supports passing in arguments to the `warning` function in a sprintf style `(condition, format, a, b, c, d, e, f)`. It has internal logic to execute the sprintf substitutions. `tiny-warning` has dropped all of the sprintf logic. `tiny-warning` allows you to pass a single string message. With [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) there is really no need for a custom message formatter to be built into the library. If you need a multi part message you can just do this: `warning(condition, 'Hello, ${name} - how are you today?')`
+
+## Dropping your `warning` for kb savings!
+
+We recommend using [`babel-plugin-dev-expression`](https://www.npmjs.com/package/babel-plugin-dev-expression) to remove `warning` calls from your production build. This saves you kb's as well as avoids logging warnings to the console for production.
+
+What it does it turn your code that looks like this:
+
+```js
+warning(condition, 'My cool message that takes up a lot of kbs');
+```
+
+Into this
+
+```js
+if ('production' !== process.env.NODE_ENV) {
+ warning(condition, 'My cool message that takes up a lot of kbs');
+}
+```
+
+Your bundler can then drop the code in the `"production" !== process.env.NODE_ENV` block for your production builds
+
+Final result:
+
+```js
+// nothing to see here! 👍
+```
+
+> For `rollup` use [rollup-plugin-replace](https://github.com/rollup/rollup-plugin-replace) and set `NODE_ENV` to `production` and then `rollup` will treeshake out the unused code
+>
+> [`Webpack` instructions](https://webpack.js.org/guides/production/#specify-the-mode)
+
+## Builds
+
+- We have a `es` (EcmaScript module) build (because you _know_ you want to deduplicate this super heavy library)
+- We have a `cjs` (CommonJS) build
+- We have a `umd` (Universal module definition) build in case you needed it
+
+We expect `process.env.NODE_ENV` to be available at module compilation. We cache this value
+
+## That's it!
+
+🤘
diff --git a/tiny-warning/flow-typed/npm/@babel/core_vx.x.x.js b/tiny-warning/flow-typed/npm/@babel/core_vx.x.x.js
new file mode 100644
index 0000000..9572db5
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/@babel/core_vx.x.x.js
@@ -0,0 +1,305 @@
+// flow-typed signature: afb3994794f3c2f840f54e3cb3826ce7
+// flow-typed version: <<STUB>>/@babel/core_v^7.1.2/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * '@babel/core'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module '@babel/core' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module '@babel/core/lib/config/caching' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/config-chain' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/config-descriptors' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/configuration' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/index-browser' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/package' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/plugins' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/types' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/files/utils' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/full' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/helpers/config-api' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/helpers/environment' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/item' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/partial' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/pattern-to-regex' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/plugin' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/util' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/validation/option-assertions' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/validation/options' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/validation/plugins' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/config/validation/removed' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/parse' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/tools/build-external-helpers' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform-ast' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform-file-browser' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform-file-sync-browser' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform-file' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transform' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/block-hoist-plugin' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/file/file' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/file/generate' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/file/merge-map' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/normalize-file' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/normalize-opts' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/plugin-pass' {
+ declare module.exports: any;
+}
+
+declare module '@babel/core/lib/transformation/util/missing-plugin-helper' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module '@babel/core/lib/config/caching.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/caching'>;
+}
+declare module '@babel/core/lib/config/config-chain.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/config-chain'>;
+}
+declare module '@babel/core/lib/config/config-descriptors.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/config-descriptors'>;
+}
+declare module '@babel/core/lib/config/files/configuration.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/configuration'>;
+}
+declare module '@babel/core/lib/config/files/index-browser.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/index-browser'>;
+}
+declare module '@babel/core/lib/config/files/index.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/index'>;
+}
+declare module '@babel/core/lib/config/files/package.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/package'>;
+}
+declare module '@babel/core/lib/config/files/plugins.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/plugins'>;
+}
+declare module '@babel/core/lib/config/files/types.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/types'>;
+}
+declare module '@babel/core/lib/config/files/utils.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/files/utils'>;
+}
+declare module '@babel/core/lib/config/full.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/full'>;
+}
+declare module '@babel/core/lib/config/helpers/config-api.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/helpers/config-api'>;
+}
+declare module '@babel/core/lib/config/helpers/environment.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/helpers/environment'>;
+}
+declare module '@babel/core/lib/config/index.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/index'>;
+}
+declare module '@babel/core/lib/config/item.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/item'>;
+}
+declare module '@babel/core/lib/config/partial.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/partial'>;
+}
+declare module '@babel/core/lib/config/pattern-to-regex.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/pattern-to-regex'>;
+}
+declare module '@babel/core/lib/config/plugin.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/plugin'>;
+}
+declare module '@babel/core/lib/config/util.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/util'>;
+}
+declare module '@babel/core/lib/config/validation/option-assertions.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/validation/option-assertions'>;
+}
+declare module '@babel/core/lib/config/validation/options.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/validation/options'>;
+}
+declare module '@babel/core/lib/config/validation/plugins.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/validation/plugins'>;
+}
+declare module '@babel/core/lib/config/validation/removed.js' {
+ declare module.exports: $Exports<'@babel/core/lib/config/validation/removed'>;
+}
+declare module '@babel/core/lib/index.js' {
+ declare module.exports: $Exports<'@babel/core/lib/index'>;
+}
+declare module '@babel/core/lib/parse.js' {
+ declare module.exports: $Exports<'@babel/core/lib/parse'>;
+}
+declare module '@babel/core/lib/tools/build-external-helpers.js' {
+ declare module.exports: $Exports<'@babel/core/lib/tools/build-external-helpers'>;
+}
+declare module '@babel/core/lib/transform-ast.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform-ast'>;
+}
+declare module '@babel/core/lib/transform-file-browser.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform-file-browser'>;
+}
+declare module '@babel/core/lib/transform-file-sync-browser.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform-file-sync-browser'>;
+}
+declare module '@babel/core/lib/transform-file.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform-file'>;
+}
+declare module '@babel/core/lib/transform.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transform'>;
+}
+declare module '@babel/core/lib/transformation/block-hoist-plugin.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/block-hoist-plugin'>;
+}
+declare module '@babel/core/lib/transformation/file/file.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/file/file'>;
+}
+declare module '@babel/core/lib/transformation/file/generate.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/file/generate'>;
+}
+declare module '@babel/core/lib/transformation/file/merge-map.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/file/merge-map'>;
+}
+declare module '@babel/core/lib/transformation/index.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/index'>;
+}
+declare module '@babel/core/lib/transformation/normalize-file.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/normalize-file'>;
+}
+declare module '@babel/core/lib/transformation/normalize-opts.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/normalize-opts'>;
+}
+declare module '@babel/core/lib/transformation/plugin-pass.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/plugin-pass'>;
+}
+declare module '@babel/core/lib/transformation/util/missing-plugin-helper.js' {
+ declare module.exports: $Exports<'@babel/core/lib/transformation/util/missing-plugin-helper'>;
+}
diff --git a/tiny-warning/flow-typed/npm/@babel/preset-env_vx.x.x.js b/tiny-warning/flow-typed/npm/@babel/preset-env_vx.x.x.js
new file mode 100644
index 0000000..6842b1e
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/@babel/preset-env_vx.x.x.js
@@ -0,0 +1,144 @@
+// flow-typed signature: 343a2e6303af4218fd9eaaabea788b8b
+// flow-typed version: <<STUB>>/@babel/preset-env_v^7.1.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * '@babel/preset-env'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module '@babel/preset-env' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module '@babel/preset-env/data/built-in-features' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/data/plugin-features' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/data/shipped-proposals' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/data/unreleased-labels' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/available-plugins' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/built-in-definitions' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/debug' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/default-includes' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/defaults' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/index' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/module-transformations' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/normalize-options' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/options' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/targets-parser' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/use-built-ins-entry-plugin' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/use-built-ins-plugin' {
+ declare module.exports: any;
+}
+
+declare module '@babel/preset-env/lib/utils' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module '@babel/preset-env/data/built-in-features.js' {
+ declare module.exports: $Exports<'@babel/preset-env/data/built-in-features'>;
+}
+declare module '@babel/preset-env/data/plugin-features.js' {
+ declare module.exports: $Exports<'@babel/preset-env/data/plugin-features'>;
+}
+declare module '@babel/preset-env/data/shipped-proposals.js' {
+ declare module.exports: $Exports<'@babel/preset-env/data/shipped-proposals'>;
+}
+declare module '@babel/preset-env/data/unreleased-labels.js' {
+ declare module.exports: $Exports<'@babel/preset-env/data/unreleased-labels'>;
+}
+declare module '@babel/preset-env/lib/available-plugins.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/available-plugins'>;
+}
+declare module '@babel/preset-env/lib/built-in-definitions.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/built-in-definitions'>;
+}
+declare module '@babel/preset-env/lib/debug.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/debug'>;
+}
+declare module '@babel/preset-env/lib/default-includes.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/default-includes'>;
+}
+declare module '@babel/preset-env/lib/defaults.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/defaults'>;
+}
+declare module '@babel/preset-env/lib/index.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/index'>;
+}
+declare module '@babel/preset-env/lib/module-transformations.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/module-transformations'>;
+}
+declare module '@babel/preset-env/lib/normalize-options.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/normalize-options'>;
+}
+declare module '@babel/preset-env/lib/options.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/options'>;
+}
+declare module '@babel/preset-env/lib/targets-parser.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/targets-parser'>;
+}
+declare module '@babel/preset-env/lib/use-built-ins-entry-plugin.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/use-built-ins-entry-plugin'>;
+}
+declare module '@babel/preset-env/lib/use-built-ins-plugin.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/use-built-ins-plugin'>;
+}
+declare module '@babel/preset-env/lib/utils.js' {
+ declare module.exports: $Exports<'@babel/preset-env/lib/utils'>;
+}
diff --git a/tiny-warning/flow-typed/npm/@babel/preset-flow_vx.x.x.js b/tiny-warning/flow-typed/npm/@babel/preset-flow_vx.x.x.js
new file mode 100644
index 0000000..c3fcd98
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/@babel/preset-flow_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: 11744c4d4bc0cb7b5a5c5272f94dc84b
+// flow-typed version: <<STUB>>/@babel/preset-flow_v^7.0.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * '@babel/preset-flow'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module '@babel/preset-flow' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module '@babel/preset-flow/lib/index' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module '@babel/preset-flow/lib/index.js' {
+ declare module.exports: $Exports<'@babel/preset-flow/lib/index'>;
+}
diff --git a/tiny-warning/flow-typed/npm/flow-bin_v0.x.x.js b/tiny-warning/flow-typed/npm/flow-bin_v0.x.x.js
new file mode 100644
index 0000000..c538e20
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/flow-bin_v0.x.x.js
@@ -0,0 +1,6 @@
+// flow-typed signature: 6a5610678d4b01e13bbfbbc62bdaf583
+// flow-typed version: 3817bc6980/flow-bin_v0.x.x/flow_>=v0.25.x
+
+declare module "flow-bin" {
+ declare module.exports: string;
+}
diff --git a/tiny-warning/flow-typed/npm/jest_v23.x.x.js b/tiny-warning/flow-typed/npm/jest_v23.x.x.js
new file mode 100644
index 0000000..dbfc9b6
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/jest_v23.x.x.js
@@ -0,0 +1,1146 @@
+// flow-typed signature: 691597c4a5aab83a3b2e6d9ccd01a97d
+// flow-typed version: 71534a866d/jest_v23.x.x/flow_>=v0.39.x
+
+type JestMockFn<TArguments: $ReadOnlyArray<*>, TReturn> = {
+ (...args: TArguments): TReturn,
+ /**
+ * An object for introspecting mock calls
+ */
+ mock: {
+ /**
+ * An array that represents all calls that have been made into this mock
+ * function. Each call is represented by an array of arguments that were
+ * passed during the call.
+ */
+ calls: Array<TArguments>,
+ /**
+ * An array that contains all the object instances that have been
+ * instantiated from this mock function.
+ */
+ instances: Array<TReturn>,
+ /**
+ * An array that contains all the object results that have been
+ * returned by this mock function call
+ */
+ results: Array<{ isThrow: boolean, value: TReturn }>
+ },
+ /**
+ * Resets all information stored in the mockFn.mock.calls and
+ * mockFn.mock.instances arrays. Often this is useful when you want to clean
+ * up a mock's usage data between two assertions.
+ */
+ mockClear(): void,
+ /**
+ * Resets all information stored in the mock. This is useful when you want to
+ * completely restore a mock back to its initial state.
+ */
+ mockReset(): void,
+ /**
+ * Removes the mock and restores the initial implementation. This is useful
+ * when you want to mock functions in certain test cases and restore the
+ * original implementation in others. Beware that mockFn.mockRestore only
+ * works when mock was created with jest.spyOn. Thus you have to take care of
+ * restoration yourself when manually assigning jest.fn().
+ */
+ mockRestore(): void,
+ /**
+ * Accepts a function that should be used as the implementation of the mock.
+ * The mock itself will still record all calls that go into and instances
+ * that come from itself -- the only difference is that the implementation
+ * will also be executed when the mock is called.
+ */
+ mockImplementation(
+ fn: (...args: TArguments) => TReturn
+ ): JestMockFn<TArguments, TReturn>,
+ /**
+ * Accepts a function that will be used as an implementation of the mock for
+ * one call to the mocked function. Can be chained so that multiple function
+ * calls produce different results.
+ */
+ mockImplementationOnce(
+ fn: (...args: TArguments) => TReturn
+ ): JestMockFn<TArguments, TReturn>,
+ /**
+ * Accepts a string to use in test result output in place of "jest.fn()" to
+ * indicate which mock function is being referenced.
+ */
+ mockName(name: string): JestMockFn<TArguments, TReturn>,
+ /**
+ * Just a simple sugar function for returning `this`
+ */
+ mockReturnThis(): void,
+ /**
+ * Accepts a value that will be returned whenever the mock function is called.
+ */
+ mockReturnValue(value: TReturn): JestMockFn<TArguments, TReturn>,
+ /**
+ * Sugar for only returning a value once inside your mock
+ */
+ mockReturnValueOnce(value: TReturn): JestMockFn<TArguments, TReturn>,
+ /**
+ * Sugar for jest.fn().mockImplementation(() => Promise.resolve(value))
+ */
+ mockResolvedValue(value: TReturn): JestMockFn<TArguments, Promise<TReturn>>,
+ /**
+ * Sugar for jest.fn().mockImplementationOnce(() => Promise.resolve(value))
+ */
+ mockResolvedValueOnce(value: TReturn): JestMockFn<TArguments, Promise<TReturn>>,
+ /**
+ * Sugar for jest.fn().mockImplementation(() => Promise.reject(value))
+ */
+ mockRejectedValue(value: TReturn): JestMockFn<TArguments, Promise<any>>,
+ /**
+ * Sugar for jest.fn().mockImplementationOnce(() => Promise.reject(value))
+ */
+ mockRejectedValueOnce(value: TReturn): JestMockFn<TArguments, Promise<any>>
+};
+
+type JestAsymmetricEqualityType = {
+ /**
+ * A custom Jasmine equality tester
+ */
+ asymmetricMatch(value: mixed): boolean
+};
+
+type JestCallsType = {
+ allArgs(): mixed,
+ all(): mixed,
+ any(): boolean,
+ count(): number,
+ first(): mixed,
+ mostRecent(): mixed,
+ reset(): void
+};
+
+type JestClockType = {
+ install(): void,
+ mockDate(date: Date): void,
+ tick(milliseconds?: number): void,
+ uninstall(): void
+};
+
+type JestMatcherResult = {
+ message?: string | (() => string),
+ pass: boolean
+};
+
+type JestMatcher = (actual: any, expected: any) =>
+ | JestMatcherResult
+ | Promise<JestMatcherResult>;
+
+type JestPromiseType = {
+ /**
+ * Use rejects to unwrap the reason of a rejected promise so any other
+ * matcher can be chained. If the promise is fulfilled the assertion fails.
+ */
+ rejects: JestExpectType,
+ /**
+ * Use resolves to unwrap the value of a fulfilled promise so any other
+ * matcher can be chained. If the promise is rejected the assertion fails.
+ */
+ resolves: JestExpectType
+};
+
+/**
+ * Jest allows functions and classes to be used as test names in test() and
+ * describe()
+ */
+type JestTestName = string | Function;
+
+/**
+ * Plugin: jest-styled-components
+ */
+
+type JestStyledComponentsMatcherValue =
+ | string
+ | JestAsymmetricEqualityType
+ | RegExp
+ | typeof undefined;
+
+type JestStyledComponentsMatcherOptions = {
+ media?: string;
+ modifier?: string;
+ supports?: string;
+}
+
+type JestStyledComponentsMatchersType = {
+ toHaveStyleRule(
+ property: string,
+ value: JestStyledComponentsMatcherValue,
+ options?: JestStyledComponentsMatcherOptions
+ ): void,
+};
+
+/**
+ * Plugin: jest-enzyme
+ */
+type EnzymeMatchersType = {
+ // 5.x
+ toBeEmpty(): void,
+ toBePresent(): void,
+ // 6.x
+ toBeChecked(): void,
+ toBeDisabled(): void,
+ toBeEmptyRender(): void,
+ toContainMatchingElement(selector: string): void;
+ toContainMatchingElements(n: number, selector: string): void;
+ toContainExactlyOneMatchingElement(selector: string): void;
+ toContainReact(element: React$Element<any>): void,
+ toExist(): void,
+ toHaveClassName(className: string): void,
+ toHaveHTML(html: string): void,
+ toHaveProp: ((propKey: string, propValue?: any) => void) & ((props: Object) => void),
+ toHaveRef(refName: string): void,
+ toHaveState: ((stateKey: string, stateValue?: any) => void) & ((state: Object) => void),
+ toHaveStyle: ((styleKey: string, styleValue?: any) => void) & ((style: Object) => void),
+ toHaveTagName(tagName: string): void,
+ toHaveText(text: string): void,
+ toHaveValue(value: any): void,
+ toIncludeText(text: string): void,
+ toMatchElement(
+ element: React$Element<any>,
+ options?: {| ignoreProps?: boolean |},
+ ): void,
+ toMatchSelector(selector: string): void
+};
+
+// DOM testing library extensions https://github.com/kentcdodds/dom-testing-library#custom-jest-matchers
+type DomTestingLibraryType = {
+ toBeInTheDOM(): void,
+ toHaveTextContent(content: string): void,
+ toHaveAttribute(name: string, expectedValue?: string): void
+};
+
+// Jest JQuery Matchers: https://github.com/unindented/custom-jquery-matchers
+type JestJQueryMatchersType = {
+ toExist(): void,
+ toHaveLength(len: number): void,
+ toHaveId(id: string): void,
+ toHaveClass(className: string): void,
+ toHaveTag(tag: string): void,
+ toHaveAttr(key: string, val?: any): void,
+ toHaveProp(key: string, val?: any): void,
+ toHaveText(text: string | RegExp): void,
+ toHaveData(key: string, val?: any): void,
+ toHaveValue(val: any): void,
+ toHaveCss(css: {[key: string]: any}): void,
+ toBeChecked(): void,
+ toBeDisabled(): void,
+ toBeEmpty(): void,
+ toBeHidden(): void,
+ toBeSelected(): void,
+ toBeVisible(): void,
+ toBeFocused(): void,
+ toBeInDom(): void,
+ toBeMatchedBy(sel: string): void,
+ toHaveDescendant(sel: string): void,
+ toHaveDescendantWithText(sel: string, text: string | RegExp): void
+};
+
+
+// Jest Extended Matchers: https://github.com/jest-community/jest-extended
+type JestExtendedMatchersType = {
+ /**
+ * Note: Currently unimplemented
+ * Passing assertion
+ *
+ * @param {String} message
+ */
+ // pass(message: string): void;
+
+ /**
+ * Note: Currently unimplemented
+ * Failing assertion
+ *
+ * @param {String} message
+ */
+ // fail(message: string): void;
+
+ /**
+ * Use .toBeEmpty when checking if a String '', Array [] or Object {} is empty.
+ */
+ toBeEmpty(): void;
+
+ /**
+ * Use .toBeOneOf when checking if a value is a member of a given Array.
+ * @param {Array.<*>} members
+ */
+ toBeOneOf(members: any[]): void;
+
+ /**
+ * Use `.toBeNil` when checking a value is `null` or `undefined`.
+ */
+ toBeNil(): void;
+
+ /**
+ * Use `.toSatisfy` when you want to use a custom matcher by supplying a predicate function that returns a `Boolean`.
+ * @param {Function} predicate
+ */
+ toSatisfy(predicate: (n: any) => boolean): void;
+
+ /**
+ * Use `.toBeArray` when checking if a value is an `Array`.
+ */
+ toBeArray(): void;
+
+ /**
+ * Use `.toBeArrayOfSize` when checking if a value is an `Array` of size x.
+ * @param {Number} x
+ */
+ toBeArrayOfSize(x: number): void;
+
+ /**
+ * Use `.toIncludeAllMembers` when checking if an `Array` contains all of the same members of a given set.
+ * @param {Array.<*>} members
+ */
+ toIncludeAllMembers(members: any[]): void;
+
+ /**
+ * Use `.toIncludeAnyMembers` when checking if an `Array` contains any of the members of a given set.
+ * @param {Array.<*>} members
+ */
+ toIncludeAnyMembers(members: any[]): void;
+
+ /**
+ * Use `.toSatisfyAll` when you want to use a custom matcher by supplying a predicate function that returns a `Boolean` for all values in an array.
+ * @param {Function} predicate
+ */
+ toSatisfyAll(predicate: (n: any) => boolean): void;
+
+ /**
+ * Use `.toBeBoolean` when checking if a value is a `Boolean`.
+ */
+ toBeBoolean(): void;
+
+ /**
+ * Use `.toBeTrue` when checking a value is equal (===) to `true`.
+ */
+ toBeTrue(): void;
+
+ /**
+ * Use `.toBeFalse` when checking a value is equal (===) to `false`.
+ */
+ toBeFalse(): void;
+
+ /**
+ * Use .toBeDate when checking if a value is a Date.
+ */
+ toBeDate(): void;
+
+ /**
+ * Use `.toBeFunction` when checking if a value is a `Function`.
+ */
+ toBeFunction(): void;
+
+ /**
+ * Use `.toHaveBeenCalledBefore` when checking if a `Mock` was called before another `Mock`.
+ *
+ * Note: Required Jest version >22
+ * Note: Your mock functions will have to be asynchronous to cause the timestamps inside of Jest to occur in a differentJS event loop, otherwise the mock timestamps will all be the same
+ *
+ * @param {Mock} mock
+ */
+ toHaveBeenCalledBefore(mock: JestMockFn<any, any>): void;
+
+ /**
+ * Use `.toBeNumber` when checking if a value is a `Number`.
+ */
+ toBeNumber(): void;
+
+ /**
+ * Use `.toBeNaN` when checking a value is `NaN`.
+ */
+ toBeNaN(): void;
+
+ /**
+ * Use `.toBeFinite` when checking if a value is a `Number`, not `NaN` or `Infinity`.
+ */
+ toBeFinite(): void;
+
+ /**
+ * Use `.toBePositive` when checking if a value is a positive `Number`.
+ */
+ toBePositive(): void;
+
+ /**
+ * Use `.toBeNegative` when checking if a value is a negative `Number`.
+ */
+ toBeNegative(): void;
+
+ /**
+ * Use `.toBeEven` when checking if a value is an even `Number`.
+ */
+ toBeEven(): void;
+
+ /**
+ * Use `.toBeOdd` when checking if a value is an odd `Number`.
+ */
+ toBeOdd(): void;
+
+ /**
+ * Use `.toBeWithin` when checking if a number is in between the given bounds of: start (inclusive) and end (exclusive).
+ *
+ * @param {Number} start
+ * @param {Number} end
+ */
+ toBeWithin(start: number, end: number): void;
+
+ /**
+ * Use `.toBeObject` when checking if a value is an `Object`.
+ */
+ toBeObject(): void;
+
+ /**
+ * Use `.toContainKey` when checking if an object contains the provided key.
+ *
+ * @param {String} key
+ */
+ toContainKey(key: string): void;
+
+ /**
+ * Use `.toContainKeys` when checking if an object has all of the provided keys.
+ *
+ * @param {Array.<String>} keys
+ */
+ toContainKeys(keys: string[]): void;
+
+ /**
+ * Use `.toContainAllKeys` when checking if an object only contains all of the provided keys.
+ *
+ * @param {Array.<String>} keys
+ */
+ toContainAllKeys(keys: string[]): void;
+
+ /**
+ * Use `.toContainAnyKeys` when checking if an object contains at least one of the provided keys.
+ *
+ * @param {Array.<String>} keys
+ */
+ toContainAnyKeys(keys: string[]): void;
+
+ /**
+ * Use `.toContainValue` when checking if an object contains the provided value.
+ *
+ * @param {*} value
+ */
+ toContainValue(value: any): void;
+
+ /**
+ * Use `.toContainValues` when checking if an object contains all of the provided values.
+ *
+ * @param {Array.<*>} values
+ */
+ toContainValues(values: any[]): void;
+
+ /**
+ * Use `.toContainAllValues` when checking if an object only contains all of the provided values.
+ *
+ * @param {Array.<*>} values
+ */
+ toContainAllValues(values: any[]): void;
+
+ /**
+ * Use `.toContainAnyValues` when checking if an object contains at least one of the provided values.
+ *
+ * @param {Array.<*>} values
+ */
+ toContainAnyValues(values: any[]): void;
+
+ /**
+ * Use `.toContainEntry` when checking if an object contains the provided entry.
+ *
+ * @param {Array.<String, String>} entry
+ */
+ toContainEntry(entry: [string, string]): void;
+
+ /**
+ * Use `.toContainEntries` when checking if an object contains all of the provided entries.
+ *
+ * @param {Array.<Array.<String, String>>} entries
+ */
+ toContainEntries(entries: [string, string][]): void;
+
+ /**
+ * Use `.toContainAllEntries` when checking if an object only contains all of the provided entries.
+ *
+ * @param {Array.<Array.<String, String>>} entries
+ */
+ toContainAllEntries(entries: [string, string][]): void;
+
+ /**
+ * Use `.toContainAnyEntries` when checking if an object contains at least one of the provided entries.
+ *
+ * @param {Array.<Array.<String, String>>} entries
+ */
+ toContainAnyEntries(entries: [string, string][]): void;
+
+ /**
+ * Use `.toBeExtensible` when checking if an object is extensible.
+ */
+ toBeExtensible(): void;
+
+ /**
+ * Use `.toBeFrozen` when checking if an object is frozen.
+ */
+ toBeFrozen(): void;
+
+ /**
+ * Use `.toBeSealed` when checking if an object is sealed.
+ */
+ toBeSealed(): void;
+
+ /**
+ * Use `.toBeString` when checking if a value is a `String`.
+ */
+ toBeString(): void;
+
+ /**
+ * Use `.toEqualCaseInsensitive` when checking if a string is equal (===) to another ignoring the casing of both strings.
+ *
+ * @param {String} string
+ */
+ toEqualCaseInsensitive(string: string): void;
+
+ /**
+ * Use `.toStartWith` when checking if a `String` starts with a given `String` prefix.
+ *
+ * @param {String} prefix
+ */
+ toStartWith(prefix: string): void;
+
+ /**
+ * Use `.toEndWith` when checking if a `String` ends with a given `String` suffix.
+ *
+ * @param {String} suffix
+ */
+ toEndWith(suffix: string): void;
+
+ /**
+ * Use `.toInclude` when checking if a `String` includes the given `String` substring.
+ *
+ * @param {String} substring
+ */
+ toInclude(substring: string): void;
+
+ /**
+ * Use `.toIncludeRepeated` when checking if a `String` includes the given `String` substring the correct number of times.
+ *
+ * @param {String} substring
+ * @param {Number} times
+ */
+ toIncludeRepeated(substring: string, times: number): void;
+
+ /**
+ * Use `.toIncludeMultiple` when checking if a `String` includes all of the given substrings.
+ *
+ * @param {Array.<String>} substring
+ */
+ toIncludeMultiple(substring: string[]): void;
+};
+
+interface JestExpectType {
+ not:
+ & JestExpectType
+ & EnzymeMatchersType
+ & DomTestingLibraryType
+ & JestJQueryMatchersType
+ & JestStyledComponentsMatchersType
+ & JestExtendedMatchersType,
+ /**
+ * If you have a mock function, you can use .lastCalledWith to test what
+ * arguments it was last called with.
+ */
+ lastCalledWith(...args: Array<any>): void,
+ /**
+ * toBe just checks that a value is what you expect. It uses === to check
+ * strict equality.
+ */
+ toBe(value: any): void,
+ /**
+ * Use .toBeCalledWith to ensure that a mock function was called with
+ * specific arguments.
+ */
+ toBeCalledWith(...args: Array<any>): void,
+ /**
+ * Using exact equality with floating point numbers is a bad idea. Rounding
+ * means that intuitive things fail.
+ */
+ toBeCloseTo(num: number, delta: any): void,
+ /**
+ * Use .toBeDefined to check that a variable is not undefined.
+ */
+ toBeDefined(): void,
+ /**
+ * Use .toBeFalsy when you don't care what a value is, you just want to
+ * ensure a value is false in a boolean context.
+ */
+ toBeFalsy(): void,
+ /**
+ * To compare floating point numbers, you can use toBeGreaterThan.
+ */
+ toBeGreaterThan(number: number): void,
+ /**
+ * To compare floating point numbers, you can use toBeGreaterThanOrEqual.
+ */
+ toBeGreaterThanOrEqual(number: number): void,
+ /**
+ * To compare floating point numbers, you can use toBeLessThan.
+ */
+ toBeLessThan(number: number): void,
+ /**
+ * To compare floating point numbers, you can use toBeLessThanOrEqual.
+ */
+ toBeLessThanOrEqual(number: number): void,
+ /**
+ * Use .toBeInstanceOf(Class) to check that an object is an instance of a
+ * class.
+ */
+ toBeInstanceOf(cls: Class<*>): void,
+ /**
+ * .toBeNull() is the same as .toBe(null) but the error messages are a bit
+ * nicer.
+ */
+ toBeNull(): void,
+ /**
+ * Use .toBeTruthy when you don't care what a value is, you just want to
+ * ensure a value is true in a boolean context.
+ */
+ toBeTruthy(): void,
+ /**
+ * Use .toBeUndefined to check that a variable is undefined.
+ */
+ toBeUndefined(): void,
+ /**
+ * Use .toContain when you want to check that an item is in a list. For
+ * testing the items in the list, this uses ===, a strict equality check.
+ */
+ toContain(item: any): void,
+ /**
+ * Use .toContainEqual when you want to check that an item is in a list. For
+ * testing the items in the list, this matcher recursively checks the
+ * equality of all fields, rather than checking for object identity.
+ */
+ toContainEqual(item: any): void,
+ /**
+ * Use .toEqual when you want to check that two objects have the same value.
+ * This matcher recursively checks the equality of all fields, rather than
+ * checking for object identity.
+ */
+ toEqual(value: any): void,
+ /**
+ * Use .toHaveBeenCalled to ensure that a mock function got called.
+ */
+ toHaveBeenCalled(): void,
+ toBeCalled(): void;
+ /**
+ * Use .toHaveBeenCalledTimes to ensure that a mock function got called exact
+ * number of times.
+ */
+ toHaveBeenCalledTimes(number: number): void,
+ toBeCalledTimes(number: number): void;
+ /**
+ *
+ */
+ toHaveBeenNthCalledWith(nthCall: number, ...args: Array<any>): void;
+ nthCalledWith(nthCall: number, ...args: Array<any>): void;
+ /**
+ *
+ */
+ toHaveReturned(): void;
+ toReturn(): void;
+ /**
+ *
+ */
+ toHaveReturnedTimes(number: number): void;
+ toReturnTimes(number: number): void;
+ /**
+ *
+ */
+ toHaveReturnedWith(value: any): void;
+ toReturnWith(value: any): void;
+ /**
+ *
+ */
+ toHaveLastReturnedWith(value: any): void;
+ lastReturnedWith(value: any): void;
+ /**
+ *
+ */
+ toHaveNthReturnedWith(nthCall: number, value: any): void;
+ nthReturnedWith(nthCall: number, value: any): void;
+ /**
+ * Use .toHaveBeenCalledWith to ensure that a mock function was called with
+ * specific arguments.
+ */
+ toHaveBeenCalledWith(...args: Array<any>): void,
+ toBeCalledWith(...args: Array<any>): void,
+ /**
+ * Use .toHaveBeenLastCalledWith to ensure that a mock function was last called
+ * with specific arguments.
+ */
+ toHaveBeenLastCalledWith(...args: Array<any>): void,
+ lastCalledWith(...args: Array<any>): void,
+ /**
+ * Check that an object has a .length property and it is set to a certain
+ * numeric value.
+ */
+ toHaveLength(number: number): void,
+ /**
+ *
+ */
+ toHaveProperty(propPath: string, value?: any): void,
+ /**
+ * Use .toMatch to check that a string matches a regular expression or string.
+ */
+ toMatch(regexpOrString: RegExp | string): void,
+ /**
+ * Use .toMatchObject to check that a javascript object matches a subset of the properties of an object.
+ */
+ toMatchObject(object: Object | Array<Object>): void,
+ /**
+ * Use .toStrictEqual to check that a javascript object matches a subset of the properties of an object.
+ */
+ toStrictEqual(value: any): void,
+ /**
+ * This ensures that an Object matches the most recent snapshot.
+ */
+ toMatchSnapshot(propertyMatchers?: any, name?: string): void,
+ /**
+ * This ensures that an Object matches the most recent snapshot.
+ */
+ toMatchSnapshot(name: string): void,
+
+ toMatchInlineSnapshot(snapshot?: string): void,
+ toMatchInlineSnapshot(propertyMatchers?: any, snapshot?: string): void,
+ /**
+ * Use .toThrow to test that a function throws when it is called.
+ * If you want to test that a specific error gets thrown, you can provide an
+ * argument to toThrow. The argument can be a string for the error message,
+ * a class for the error, or a regex that should match the error.
+ *
+ * Alias: .toThrowError
+ */
+ toThrow(message?: string | Error | Class<Error> | RegExp): void,
+ toThrowError(message?: string | Error | Class<Error> | RegExp): void,
+ /**
+ * Use .toThrowErrorMatchingSnapshot to test that a function throws a error
+ * matching the most recent snapshot when it is called.
+ */
+ toThrowErrorMatchingSnapshot(): void,
+ toThrowErrorMatchingInlineSnapshot(snapshot?: string): void,
+}
+
+type JestObjectType = {
+ /**
+ * Disables automatic mocking in the module loader.
+ *
+ * After this method is called, all `require()`s will return the real
+ * versions of each module (rather than a mocked version).
+ */
+ disableAutomock(): JestObjectType,
+ /**
+ * An un-hoisted version of disableAutomock
+ */
+ autoMockOff(): JestObjectType,
+ /**
+ * Enables automatic mocking in the module loader.
+ */
+ enableAutomock(): JestObjectType,
+ /**
+ * An un-hoisted version of enableAutomock
+ */
+ autoMockOn(): JestObjectType,
+ /**
+ * Clears the mock.calls and mock.instances properties of all mocks.
+ * Equivalent to calling .mockClear() on every mocked function.
+ */
+ clearAllMocks(): JestObjectType,
+ /**
+ * Resets the state of all mocks. Equivalent to calling .mockReset() on every
+ * mocked function.
+ */
+ resetAllMocks(): JestObjectType,
+ /**
+ * Restores all mocks back to their original value.
+ */
+ restoreAllMocks(): JestObjectType,
+ /**
+ * Removes any pending timers from the timer system.
+ */
+ clearAllTimers(): void,
+ /**
+ * The same as `mock` but not moved to the top of the expectation by
+ * babel-jest.
+ */
+ doMock(moduleName: string, moduleFactory?: any): JestObjectType,
+ /**
+ * The same as `unmock` but not moved to the top of the expectation by
+ * babel-jest.
+ */
+ dontMock(moduleName: string): JestObjectType,
+ /**
+ * Returns a new, unused mock function. Optionally takes a mock
+ * implementation.
+ */
+ fn<TArguments: $ReadOnlyArray<*>, TReturn>(
+ implementation?: (...args: TArguments) => TReturn
+ ): JestMockFn<TArguments, TReturn>,
+ /**
+ * Determines if the given function is a mocked function.
+ */
+ isMockFunction(fn: Function): boolean,
+ /**
+ * Given the name of a module, use the automatic mocking system to generate a
+ * mocked version of the module for you.
+ */
+ genMockFromModule(moduleName: string): any,
+ /**
+ * Mocks a module with an auto-mocked version when it is being required.
+ *
+ * The second argument can be used to specify an explicit module factory that
+ * is being run instead of using Jest's automocking feature.
+ *
+ * The third argument can be used to create virtual mocks -- mocks of modules
+ * that don't exist anywhere in the system.
+ */
+ mock(
+ moduleName: string,
+ moduleFactory?: any,
+ options?: Object
+ ): JestObjectType,
+ /**
+ * Returns the actual module instead of a mock, bypassing all checks on
+ * whether the module should receive a mock implementation or not.
+ */
+ requireActual(moduleName: string): any,
+ /**
+ * Returns a mock module instead of the actual module, bypassing all checks
+ * on whether the module should be required normally or not.
+ */
+ requireMock(moduleName: string): any,
+ /**
+ * Resets the module registry - the cache of all required modules. This is
+ * useful to isolate modules where local state might conflict between tests.
+ */
+ resetModules(): JestObjectType,
+ /**
+ * Exhausts the micro-task queue (usually interfaced in node via
+ * process.nextTick).
+ */
+ runAllTicks(): void,
+ /**
+ * Exhausts the macro-task queue (i.e., all tasks queued by setTimeout(),
+ * setInterval(), and setImmediate()).
+ */
+ runAllTimers(): void,
+ /**
+ * Exhausts all tasks queued by setImmediate().
+ */
+ runAllImmediates(): void,
+ /**
+ * Executes only the macro task queue (i.e. all tasks queued by setTimeout()
+ * or setInterval() and setImmediate()).
+ */
+ advanceTimersByTime(msToRun: number): void,
+ /**
+ * Executes only the macro task queue (i.e. all tasks queued by setTimeout()
+ * or setInterval() and setImmediate()).
+ *
+ * Renamed to `advanceTimersByTime`.
+ */
+ runTimersToTime(msToRun: number): void,
+ /**
+ * Executes only the macro-tasks that are currently pending (i.e., only the
+ * tasks that have been queued by setTimeout() or setInterval() up to this
+ * point)
+ */
+ runOnlyPendingTimers(): void,
+ /**
+ * Explicitly supplies the mock object that the module system should return
+ * for the specified module. Note: It is recommended to use jest.mock()
+ * instead.
+ */
+ setMock(moduleName: string, moduleExports: any): JestObjectType,
+ /**
+ * Indicates that the module system should never return a mocked version of
+ * the specified module from require() (e.g. that it should always return the
+ * real module).
+ */
+ unmock(moduleName: string): JestObjectType,
+ /**
+ * Instructs Jest to use fake versions of the standard timer functions
+ * (setTimeout, setInterval, clearTimeout, clearInterval, nextTick,
+ * setImmediate and clearImmediate).
+ */
+ useFakeTimers(): JestObjectType,
+ /**
+ * Instructs Jest to use the real versions of the standard timer functions.
+ */
+ useRealTimers(): JestObjectType,
+ /**
+ * Creates a mock function similar to jest.fn but also tracks calls to
+ * object[methodName].
+ */
+ spyOn(object: Object, methodName: string, accessType?: "get" | "set"): JestMockFn<any, any>,
+ /**
+ * Set the default timeout interval for tests and before/after hooks in milliseconds.
+ * Note: The default timeout interval is 5 seconds if this method is not called.
+ */
+ setTimeout(timeout: number): JestObjectType
+};
+
+type JestSpyType = {
+ calls: JestCallsType
+};
+
+/** Runs this function after every test inside this context */
+declare function afterEach(
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+/** Runs this function before every test inside this context */
+declare function beforeEach(
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+/** Runs this function after all tests have finished inside this context */
+declare function afterAll(
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+/** Runs this function before any tests have started inside this context */
+declare function beforeAll(
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+
+/** A context for grouping tests together */
+declare var describe: {
+ /**
+ * Creates a block that groups together several related tests in one "test suite"
+ */
+ (name: JestTestName, fn: () => void): void,
+
+ /**
+ * Only run this describe block
+ */
+ only(name: JestTestName, fn: () => void): void,
+
+ /**
+ * Skip running this describe block
+ */
+ skip(name: JestTestName, fn: () => void): void,
+
+ /**
+ * each runs this test against array of argument arrays per each run
+ *
+ * @param {table} table of Test
+ */
+ each(
+ table: Array<Array<mixed> | mixed>
+ ): (
+ name: JestTestName,
+ fn?: (...args: Array<any>) => ?Promise<mixed>
+ ) => void,
+};
+
+/** An individual test unit */
+declare var it: {
+ /**
+ * An individual test unit
+ *
+ * @param {JestTestName} Name of Test
+ * @param {Function} Test
+ * @param {number} Timeout for the test, in milliseconds.
+ */
+ (
+ name: JestTestName,
+ fn?: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+ ): void,
+ /**
+ * each runs this test against array of argument arrays per each run
+ *
+ * @param {table} table of Test
+ */
+ each(
+ table: Array<Array<mixed> | mixed>
+ ): (
+ name: JestTestName,
+ fn?: (...args: Array<any>) => ?Promise<mixed>
+ ) => void,
+ /**
+ * Only run this test
+ *
+ * @param {JestTestName} Name of Test
+ * @param {Function} Test
+ * @param {number} Timeout for the test, in milliseconds.
+ */
+ only(
+ name: JestTestName,
+ fn?: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+ ): {
+ each(
+ table: Array<Array<mixed> | mixed>
+ ): (
+ name: JestTestName,
+ fn?: (...args: Array<any>) => ?Promise<mixed>
+ ) => void,
+ },
+ /**
+ * Skip running this test
+ *
+ * @param {JestTestName} Name of Test
+ * @param {Function} Test
+ * @param {number} Timeout for the test, in milliseconds.
+ */
+ skip(
+ name: JestTestName,
+ fn?: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+ ): void,
+ /**
+ * Run the test concurrently
+ *
+ * @param {JestTestName} Name of Test
+ * @param {Function} Test
+ * @param {number} Timeout for the test, in milliseconds.
+ */
+ concurrent(
+ name: JestTestName,
+ fn?: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+ ): void,
+ /**
+ * each runs this test against array of argument arrays per each run
+ *
+ * @param {table} table of Test
+ */
+ each(
+ table: Array<Array<mixed> | mixed>
+ ): (
+ name: JestTestName,
+ fn?: (...args: Array<any>) => ?Promise<mixed>
+ ) => void,
+};
+declare function fit(
+ name: JestTestName,
+ fn: (done: () => void) => ?Promise<mixed>,
+ timeout?: number
+): void;
+/** An individual test unit */
+declare var test: typeof it;
+/** A disabled group of tests */
+declare var xdescribe: typeof describe;
+/** A focused group of tests */
+declare var fdescribe: typeof describe;
+/** A disabled individual test */
+declare var xit: typeof it;
+/** A disabled individual test */
+declare var xtest: typeof it;
+
+type JestPrettyFormatColors = {
+ comment: { close: string, open: string },
+ content: { close: string, open: string },
+ prop: { close: string, open: string },
+ tag: { close: string, open: string },
+ value: { close: string, open: string },
+};
+
+type JestPrettyFormatIndent = string => string;
+type JestPrettyFormatRefs = Array<any>;
+type JestPrettyFormatPrint = any => string;
+type JestPrettyFormatStringOrNull = string | null;
+
+type JestPrettyFormatOptions = {|
+ callToJSON: boolean,
+ edgeSpacing: string,
+ escapeRegex: boolean,
+ highlight: boolean,
+ indent: number,
+ maxDepth: number,
+ min: boolean,
+ plugins: JestPrettyFormatPlugins,
+ printFunctionName: boolean,
+ spacing: string,
+ theme: {|
+ comment: string,
+ content: string,
+ prop: string,
+ tag: string,
+ value: string,
+ |},
+|};
+
+type JestPrettyFormatPlugin = {
+ print: (
+ val: any,
+ serialize: JestPrettyFormatPrint,
+ indent: JestPrettyFormatIndent,
+ opts: JestPrettyFormatOptions,
+ colors: JestPrettyFormatColors,
+ ) => string,
+ test: any => boolean,
+};
+
+type JestPrettyFormatPlugins = Array<JestPrettyFormatPlugin>;
+
+/** The expect function is used every time you want to test a value */
+declare var expect: {
+ /** The object that you want to make assertions against */
+ (value: any):
+ & JestExpectType
+ & JestPromiseType
+ & EnzymeMatchersType
+ & DomTestingLibraryType
+ & JestJQueryMatchersType
+ & JestStyledComponentsMatchersType
+ & JestExtendedMatchersType,
+
+ /** Add additional Jasmine matchers to Jest's roster */
+ extend(matchers: { [name: string]: JestMatcher }): void,
+ /** Add a module that formats application-specific data structures. */
+ addSnapshotSerializer(pluginModule: JestPrettyFormatPlugin): void,
+ assertions(expectedAssertions: number): void,
+ hasAssertions(): void,
+ any(value: mixed): JestAsymmetricEqualityType,
+ anything(): any,
+ arrayContaining(value: Array<mixed>): Array<mixed>,
+ objectContaining(value: Object): Object,
+ /** Matches any received string that contains the exact expected string. */
+ stringContaining(value: string): string,
+ stringMatching(value: string | RegExp): string,
+ not: {
+ arrayContaining: (value: $ReadOnlyArray<mixed>) => Array<mixed>,
+ objectContaining: (value: {}) => Object,
+ stringContaining: (value: string) => string,
+ stringMatching: (value: string | RegExp) => string,
+ },
+};
+
+// TODO handle return type
+// http://jasmine.github.io/2.4/introduction.html#section-Spies
+declare function spyOn(value: mixed, method: string): Object;
+
+/** Holds all functions related to manipulating test runner */
+declare var jest: JestObjectType;
+
+/**
+ * The global Jasmine object, this is generally not exposed as the public API,
+ * using features inside here could break in later versions of Jest.
+ */
+declare var jasmine: {
+ DEFAULT_TIMEOUT_INTERVAL: number,
+ any(value: mixed): JestAsymmetricEqualityType,
+ anything(): any,
+ arrayContaining(value: Array<mixed>): Array<mixed>,
+ clock(): JestClockType,
+ createSpy(name: string): JestSpyType,
+ createSpyObj(
+ baseName: string,
+ methodNames: Array<string>
+ ): { [methodName: string]: JestSpyType },
+ objectContaining(value: Object): Object,
+ stringMatching(value: string): string
+};
diff --git a/tiny-warning/flow-typed/npm/prettier_v1.x.x.js b/tiny-warning/flow-typed/npm/prettier_v1.x.x.js
new file mode 100644
index 0000000..0c24491
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/prettier_v1.x.x.js
@@ -0,0 +1,178 @@
+// flow-typed signature: 4eed8da2dc730dc33e7710b465eaa44b
+// flow-typed version: cc7a557b34/prettier_v1.x.x/flow_>=v0.56.x
+
+declare module "prettier" {
+ declare type AST = Object;
+ declare type Doc = Object;
+ declare type FastPath = Object;
+
+ declare type PrettierParserName =
+ | "babylon"
+ | "flow"
+ | "typescript"
+ | "postcss"
+ | "css"
+ | "less"
+ | "scss"
+ | "json"
+ | "graphql"
+ | "markdown"
+ | "vue";
+
+ declare type PrettierParser = {
+ [name: PrettierParserName]: (text: string, options?: Object) => AST
+ };
+
+ declare type CustomParser = (
+ text: string,
+ parsers: PrettierParser,
+ options: Options
+ ) => AST;
+
+ declare type Options = {|
+ printWidth?: number,
+ tabWidth?: number,
+ useTabs?: boolean,
+ semi?: boolean,
+ singleQuote?: boolean,
+ trailingComma?: "none" | "es5" | "all",
+ bracketSpacing?: boolean,
+ jsxBracketSameLine?: boolean,
+ arrowParens?: "avoid" | "always",
+ rangeStart?: number,
+ rangeEnd?: number,
+ parser?: PrettierParserName | CustomParser,
+ filepath?: string,
+ requirePragma?: boolean,
+ insertPragma?: boolean,
+ proseWrap?: "always" | "never" | "preserve",
+ plugins?: Array<string | Plugin>
+ |};
+
+ declare type Plugin = {
+ languages: SupportLanguage,
+ parsers: { [parserName: string]: Parser },
+ printers: { [astFormat: string]: Printer }
+ };
+
+ declare type Parser = {
+ parse: (
+ text: string,
+ parsers: { [parserName: string]: Parser },
+ options: Object
+ ) => AST,
+ astFormat: string
+ };
+
+ declare type Printer = {
+ print: (
+ path: FastPath,
+ options: Object,
+ print: (path: FastPath) => Doc
+ ) => Doc,
+ embed: (
+ path: FastPath,
+ print: (path: FastPath) => Doc,
+ textToDoc: (text: string, options: Object) => Doc,
+ options: Object
+ ) => ?Doc
+ };
+
+ declare type CursorOptions = {|
+ cursorOffset: number,
+ printWidth?: $PropertyType<Options, "printWidth">,
+ tabWidth?: $PropertyType<Options, "tabWidth">,
+ useTabs?: $PropertyType<Options, "useTabs">,
+ semi?: $PropertyType<Options, "semi">,
+ singleQuote?: $PropertyType<Options, "singleQuote">,
+ trailingComma?: $PropertyType<Options, "trailingComma">,
+ bracketSpacing?: $PropertyType<Options, "bracketSpacing">,
+ jsxBracketSameLine?: $PropertyType<Options, "jsxBracketSameLine">,
+ arrowParens?: $PropertyType<Options, "arrowParens">,
+ parser?: $PropertyType<Options, "parser">,
+ filepath?: $PropertyType<Options, "filepath">,
+ requirePragma?: $PropertyType<Options, "requirePragma">,
+ insertPragma?: $PropertyType<Options, "insertPragma">,
+ proseWrap?: $PropertyType<Options, "proseWrap">,
+ plugins?: $PropertyType<Options, "plugins">
+ |};
+
+ declare type CursorResult = {|
+ formatted: string,
+ cursorOffset: number
+ |};
+
+ declare type ResolveConfigOptions = {|
+ useCache?: boolean,
+ config?: string,
+ editorconfig?: boolean
+ |};
+
+ declare type SupportLanguage = {
+ name: string,
+ since: string,
+ parsers: Array<string>,
+ group?: string,
+ tmScope: string,
+ aceMode: string,
+ codemirrorMode: string,
+ codemirrorMimeType: string,
+ aliases?: Array<string>,
+ extensions: Array<string>,
+ filenames?: Array<string>,
+ linguistLanguageId: number,
+ vscodeLanguageIds: Array<string>
+ };
+
+ declare type SupportOption = {|
+ since: string,
+ type: "int" | "boolean" | "choice" | "path",
+ deprecated?: string,
+ redirect?: SupportOptionRedirect,
+ description: string,
+ oppositeDescription?: string,
+ default: SupportOptionValue,
+ range?: SupportOptionRange,
+ choices?: SupportOptionChoice
+ |};
+
+ declare type SupportOptionRedirect = {|
+ options: string,
+ value: SupportOptionValue
+ |};
+
+ declare type SupportOptionRange = {|
+ start: number,
+ end: number,
+ step: number
+ |};
+
+ declare type SupportOptionChoice = {|
+ value: boolean | string,
+ description?: string,
+ since?: string,
+ deprecated?: string,
+ redirect?: SupportOptionValue
+ |};
+
+ declare type SupportOptionValue = number | boolean | string;
+
+ declare type SupportInfo = {|
+ languages: Array<SupportLanguage>,
+ options: Array<SupportOption>
+ |};
+
+ declare type Prettier = {|
+ format: (source: string, options?: Options) => string,
+ check: (source: string, options?: Options) => boolean,
+ formatWithCursor: (source: string, options: CursorOptions) => CursorResult,
+ resolveConfig: {
+ (filePath: string, options?: ResolveConfigOptions): Promise<?Options>,
+ sync(filePath: string, options?: ResolveConfigOptions): Promise<?Options>
+ },
+ clearConfigCache: () => void,
+ getSupportInfo: (version?: string) => SupportInfo
+ |};
+
+ declare export default Prettier;
+}
diff --git a/tiny-warning/flow-typed/npm/rimraf_v2.x.x.js b/tiny-warning/flow-typed/npm/rimraf_v2.x.x.js
new file mode 100644
index 0000000..13b8524
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/rimraf_v2.x.x.js
@@ -0,0 +1,18 @@
+// flow-typed signature: 1dff23447d5e18f5ac2b05aaec7cfb74
+// flow-typed version: a453e98ea2/rimraf_v2.x.x/flow_>=v0.25.0
+
+declare module 'rimraf' {
+ declare type Options = {
+ maxBusyTries?: number,
+ emfileWait?: number,
+ glob?: boolean,
+ disableGlob?: boolean
+ };
+
+ declare type Callback = (err: ?Error, path: ?string) => void;
+
+ declare module.exports: {
+ (f: string, opts?: Options | Callback, callback?: Callback): void;
+ sync(path: string, opts?: Options): void;
+ };
+}
diff --git a/tiny-warning/flow-typed/npm/rollup-plugin-babel_vx.x.x.js b/tiny-warning/flow-typed/npm/rollup-plugin-babel_vx.x.x.js
new file mode 100644
index 0000000..652788c
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/rollup-plugin-babel_vx.x.x.js
@@ -0,0 +1,74 @@
+// flow-typed signature: 973c9500e4cab50d99a36b48129481e3
+// flow-typed version: <<STUB>>/rollup-plugin-babel_v^4.0.3/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'rollup-plugin-babel'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-babel' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-babel/dist/rollup-plugin-babel.cjs' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/dist/rollup-plugin-babel.esm' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/constants' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/helperPlugin' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/index' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/preflightCheck' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-babel/src/utils' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-babel/dist/rollup-plugin-babel.cjs.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/dist/rollup-plugin-babel.cjs'>;
+}
+declare module 'rollup-plugin-babel/dist/rollup-plugin-babel.esm.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/dist/rollup-plugin-babel.esm'>;
+}
+declare module 'rollup-plugin-babel/src/constants.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/constants'>;
+}
+declare module 'rollup-plugin-babel/src/helperPlugin.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/helperPlugin'>;
+}
+declare module 'rollup-plugin-babel/src/index.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/index'>;
+}
+declare module 'rollup-plugin-babel/src/preflightCheck.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/preflightCheck'>;
+}
+declare module 'rollup-plugin-babel/src/utils.js' {
+ declare module.exports: $Exports<'rollup-plugin-babel/src/utils'>;
+}
diff --git a/tiny-warning/flow-typed/npm/rollup-plugin-replace_vx.x.x.js b/tiny-warning/flow-typed/npm/rollup-plugin-replace_vx.x.x.js
new file mode 100644
index 0000000..bbe769d
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/rollup-plugin-replace_vx.x.x.js
@@ -0,0 +1,46 @@
+// flow-typed signature: db087c0f8735aace9843e6ebf0fc6db2
+// flow-typed version: <<STUB>>/rollup-plugin-replace_v^2.0.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'rollup-plugin-replace'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-replace' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.cjs' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.es' {
+ declare module.exports: any;
+}
+
+declare module 'rollup-plugin-replace/src/index' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.cjs.js' {
+ declare module.exports: $Exports<'rollup-plugin-replace/dist/rollup-plugin-replace.cjs'>;
+}
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.es.js' {
+ declare module.exports: $Exports<'rollup-plugin-replace/dist/rollup-plugin-replace.es'>;
+}
+declare module 'rollup-plugin-replace/src/index.js' {
+ declare module.exports: $Exports<'rollup-plugin-replace/src/index'>;
+}
diff --git a/tiny-warning/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js b/tiny-warning/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js
new file mode 100644
index 0000000..f1a482c
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js
@@ -0,0 +1,38 @@
+// flow-typed signature: 7d8521b06a61516b9b178233496d21bd
+// flow-typed version: <<STUB>>/rollup-plugin-uglify_v^6.0.0/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'rollup-plugin-uglify'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-uglify' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-uglify/transform' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-uglify/index' {
+ declare module.exports: $Exports<'rollup-plugin-uglify'>;
+}
+declare module 'rollup-plugin-uglify/index.js' {
+ declare module.exports: $Exports<'rollup-plugin-uglify'>;
+}
+declare module 'rollup-plugin-uglify/transform.js' {
+ declare module.exports: $Exports<'rollup-plugin-uglify/transform'>;
+}
diff --git a/tiny-warning/flow-typed/npm/rollup_vx.x.x.js b/tiny-warning/flow-typed/npm/rollup_vx.x.x.js
new file mode 100644
index 0000000..2d85e02
--- /dev/null
+++ b/tiny-warning/flow-typed/npm/rollup_vx.x.x.js
@@ -0,0 +1,46 @@
+// flow-typed signature: 74b987f228ae8ecd554f7ca28416e775
+// flow-typed version: <<STUB>>/rollup_v^0.66.2/flow_v0.82.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ * 'rollup'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the
+ * community by sending a pull request to:
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup' {
+ declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup/dist/rollup.browser' {
+ declare module.exports: any;
+}
+
+declare module 'rollup/dist/rollup.es' {
+ declare module.exports: any;
+}
+
+declare module 'rollup/dist/rollup' {
+ declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup/dist/rollup.browser.js' {
+ declare module.exports: $Exports<'rollup/dist/rollup.browser'>;
+}
+declare module 'rollup/dist/rollup.es.js' {
+ declare module.exports: $Exports<'rollup/dist/rollup.es'>;
+}
+declare module 'rollup/dist/rollup.js' {
+ declare module.exports: $Exports<'rollup/dist/rollup'>;
+}
diff --git a/tiny-warning/package.json b/tiny-warning/package.json
new file mode 100644
index 0000000..acc78d4
--- /dev/null
+++ b/tiny-warning/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "tiny-warning",
+ "version": "1.0.0",
+ "keywords": [
+ "warning",
+ "warn"
+ ],
+ "description": "A tiny warning function",
+ "main": "dist/tiny-warning.cjs.js",
+ "module": "dist/tiny-warning.esm.js",
+ "sideEffects": false,
+ "files": [
+ "/dist",
+ "/src"
+ ],
+ "author": "Alex Reardon <alexreardon@gmail.com>",
+ "license": "MIT",
+ "scripts": {
+ "test": "yarn jest",
+ "lint": "yarn prettier --debug-check src/** test/**",
+ "typecheck": "yarn flow",
+ "validate": "yarn lint && yarn flow",
+ "build:clean": "rimraf dist",
+ "build:flow": "echo \"// @flow\n\nexport * from '../src';\" > dist/tiny-warning.cjs.js.flow",
+ "build:dist": "yarn rollup --config rollup.config.js",
+ "build": "yarn build:clean && yarn build:dist && yarn build:flow",
+ "prepublishOnly": "yarn build"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.1.2",
+ "@babel/preset-env": "^7.1.0",
+ "@babel/preset-flow": "^7.0.0",
+ "babel-core": "7.0.0-bridge.0",
+ "babel-jest": "^23.6.0",
+ "flow-bin": "^0.82.0",
+ "jest": "^23.6.0",
+ "prettier": "^1.14.3",
+ "rimraf": "^2.6.2",
+ "rollup": "^0.66.2",
+ "rollup-plugin-babel": "^4.0.3",
+ "rollup-plugin-replace": "^2.0.0",
+ "rollup-plugin-uglify": "^6.0.0"
+ }
+}
diff --git a/tiny-warning/rollup.config.js b/tiny-warning/rollup.config.js
new file mode 100644
index 0000000..93ba586
--- /dev/null
+++ b/tiny-warning/rollup.config.js
@@ -0,0 +1,55 @@
+import babel from 'rollup-plugin-babel';
+import replace from 'rollup-plugin-replace';
+import { uglify } from 'rollup-plugin-uglify';
+import pkg from './package.json';
+
+const input = 'src/index.js';
+
+export default [
+ // ESM build
+ {
+ input,
+ output: {
+ file: pkg.module,
+ format: 'esm',
+ },
+ plugins: [babel()],
+ },
+ // CommonJS build
+ {
+ input,
+ output: {
+ file: pkg.main,
+ format: 'cjs',
+ },
+ plugins: [babel()],
+ },
+ // UMD: Production build
+ {
+ input,
+ output: {
+ file: 'dist/tiny-warning.js',
+ format: 'umd',
+ name: 'warning',
+ },
+ plugins: [
+ // Setting development env before running babel etc
+ replace({ 'process.env.NODE_ENV': JSON.stringify('development') }),
+ babel(),
+ ],
+ },
+ {
+ input,
+ output: {
+ file: 'dist/tiny-warning.min.js',
+ format: 'umd',
+ name: 'warning',
+ },
+ plugins: [
+ // Setting development env before running babel etc
+ replace({ 'process.env.NODE_ENV': JSON.stringify('production') }),
+ babel(),
+ uglify(),
+ ],
+ },
+];
diff --git a/tiny-warning/src/index.js b/tiny-warning/src/index.js
new file mode 100644
index 0000000..3143d38
--- /dev/null
+++ b/tiny-warning/src/index.js
@@ -0,0 +1,15 @@
+// @flow
+const isProduction: boolean = process.env.NODE_ENV === 'production';
+
+export default function warning(condition: mixed, message: string) {
+ // don't do anything in production
+ // wrapping in production check for better dead code elimination
+ if (!isProduction) {
+ // condition passed: do not log
+ if (condition) {
+ return;
+ }
+ // Condition not passed
+ console.warn(message);
+ }
+}
diff --git a/tiny-warning/test/bundle-size.spec.js b/tiny-warning/test/bundle-size.spec.js
new file mode 100644
index 0000000..ba06c9f
--- /dev/null
+++ b/tiny-warning/test/bundle-size.spec.js
@@ -0,0 +1,45 @@
+// @flow
+import { rollup } from 'rollup';
+import babel from 'rollup-plugin-babel';
+import replace from 'rollup-plugin-replace';
+
+const DEV_SIZE = 143;
+const PROD_SIZE = 66;
+
+type GetCodeArgs = {|
+ mode: string,
+|};
+const getCode = async ({ mode }: GetCodeArgs): Promise<string> => {
+ const bundle = await rollup({
+ input: 'src/index.js',
+ output: {
+ format: 'esm',
+ },
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify(mode) }),
+ babel(),
+ ],
+ });
+ const { code } = await bundle.generate({ format: 'esm' });
+ return code;
+};
+
+it(`development mode size should be ${DEV_SIZE}`, async () => {
+ const code: string = await getCode({ mode: 'development' });
+ expect(code.length).toBe(DEV_SIZE);
+});
+
+it(`production mode size should be ${PROD_SIZE}`, async () => {
+ const code: string = await getCode({ mode: 'production' });
+ expect(code.length).toBe(PROD_SIZE);
+});
+
+it('should not strip console.warn from dev builds', async () => {
+ const code: string = await getCode({ mode: 'development' });
+ expect(code.includes('console.warn')).toBe(true);
+});
+
+it('should strip console.warn from production builds', async () => {
+ const code: string = await getCode({ mode: 'production' });
+ expect(code.includes('console.warn')).toBe(false);
+});
diff --git a/tiny-warning/test/index.spec.js b/tiny-warning/test/index.spec.js
new file mode 100644
index 0000000..24dfdcd
--- /dev/null
+++ b/tiny-warning/test/index.spec.js
@@ -0,0 +1,30 @@
+// @flow
+import warning from '../src';
+
+beforeEach(() => {
+ jest.spyOn(console, 'warn').mockImplementation(() => {});
+});
+
+afterEach(() => {
+ console.warn.mockRestore();
+});
+
+it('should not log a warning if the condition is truthy', () => {
+ const truthy: mixed[] = [1, -1, true, {}, [], Symbol(), 'hi'];
+ truthy.forEach((value: mixed) => {
+ warning(value, 'message');
+ expect(console.warn).not.toHaveBeenCalled();
+ });
+});
+
+it('should log a warning if the condition is falsy', () => {
+ // https://github.com/getify/You-Dont-Know-JS/blob/master/types%20%26%20grammar/ch4.md#falsy-values
+ const falsy: mixed[] = [undefined, null, false, +0, -0, NaN, ''];
+ falsy.forEach((value: mixed) => {
+ const message: string = `hey ${String(value)}`;
+ warning(value, message);
+
+ expect(console.warn).toHaveBeenCalledWith(message);
+ console.warn.mockClear();
+ });
+});
diff --git a/tiny-warning/yarn.lock b/tiny-warning/yarn.lock
new file mode 100644
index 0000000..4cef492
--- /dev/null
+++ b/tiny-warning/yarn.lock
@@ -0,0 +1,4414 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
+ integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/core@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e"
+ integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/generator" "^7.1.2"
+ "@babel/helpers" "^7.1.2"
+ "@babel/parser" "^7.1.2"
+ "@babel/template" "^7.1.2"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.1.2"
+ convert-source-map "^1.1.0"
+ debug "^3.1.0"
+ json5 "^0.5.0"
+ lodash "^4.17.10"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.0.0", "@babel/generator@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.2.tgz#fde75c072575ce7abbd97322e8fef5bae67e4630"
+ integrity sha512-70A9HWLS/1RHk3Ck8tNHKxOoKQuSKocYgwDN85Pyl/RBduss6AKxUR7RIZ/lzduQMSYfWEM4DDBu6A+XGbkFig==
+ dependencies:
+ "@babel/types" "^7.1.2"
+ jsesc "^2.5.1"
+ lodash "^4.17.10"
+ source-map "^0.5.0"
+ trim-right "^1.0.1"
+
+"@babel/helper-annotate-as-pure@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
+ integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
+ integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-call-delegate@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a"
+ integrity sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.0.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-define-map@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c"
+ integrity sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ lodash "^4.17.10"
+
+"@babel/helper-explode-assignable-expression@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
+ integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-function-name@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
+ integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-get-function-arity@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
+ integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-hoist-variables@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88"
+ integrity sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-member-expression-to-functions@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f"
+ integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-module-imports@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
+ integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-module-transforms@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787"
+ integrity sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.0.0"
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ lodash "^4.17.10"
+
+"@babel/helper-optimise-call-expression@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
+ integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-plugin-utils@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
+ integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+
+"@babel/helper-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27"
+ integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==
+ dependencies:
+ lodash "^4.17.10"
+
+"@babel/helper-remap-async-to-generator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
+ integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-wrap-function" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-replace-supers@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362"
+ integrity sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.0.0"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-simple-access@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
+ integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+ dependencies:
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-split-export-declaration@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813"
+ integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-wrap-function@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66"
+ integrity sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helpers@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5"
+ integrity sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA==
+ dependencies:
+ "@babel/template" "^7.1.2"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.1.2"
+
+"@babel/highlight@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
+ integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.2.tgz#85c5c47af6d244fab77bce6b9bd830e38c978409"
+ integrity sha512-x5HFsW+E/nQalGMw7hu+fvPqnBeBaIr0lWJ2SG0PPL2j+Pm9lYvCrsZJGIgauPIENx0v10INIyFjmSNUD/gSqQ==
+
+"@babel/plugin-proposal-async-generator-functions@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce"
+ integrity sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+ "@babel/plugin-syntax-async-generators" "^7.0.0"
+
+"@babel/plugin-proposal-json-strings@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e"
+ integrity sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-json-strings" "^7.0.0"
+
+"@babel/plugin-proposal-object-rest-spread@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e"
+ integrity sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425"
+ integrity sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.0.0"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33"
+ integrity sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+ regexpu-core "^4.2.0"
+
+"@babel/plugin-syntax-async-generators@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c"
+ integrity sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-flow@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz#70638aeaad9ee426bc532e51523cff8ff02f6f17"
+ integrity sha512-zGcuZWiWWDa5qTZ6iAnpG0fnX/GOu49pGR5PFvkQ9GmKNaSphXQnlNXh/LG20sqWtNrx/eB6krzfEzcwvUyeFA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-json-strings@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd"
+ integrity sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-object-rest-spread@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b"
+ integrity sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475"
+ integrity sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-arrow-functions@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749"
+ integrity sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-async-to-generator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811"
+ integrity sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+
+"@babel/plugin-transform-block-scoped-functions@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07"
+ integrity sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-block-scoping@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc"
+ integrity sha512-GWEMCrmHQcYWISilUrk9GDqH4enf3UmhOEbNbNrlNAX1ssH3MsS1xLOS6rdjRVPgA7XXVPn87tRkdTEoA/dxEg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ lodash "^4.17.10"
+
+"@babel/plugin-transform-classes@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249"
+ integrity sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-define-map" "^7.1.0"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.0.0"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31"
+ integrity sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-destructuring@^7.0.0":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.2.tgz#5fa77d473f5a0a3f5266ad7ce2e8c995a164d60a"
+ integrity sha512-cvToXvp/OsYxtEn57XJu9BvsGSEYjAh9UeUuXpoi7x6QHB7YdWyQ4lRU/q0Fu1IJNT0o0u4FQ1DMQBzJ8/8vZg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-dotall-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58"
+ integrity sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+ regexpu-core "^4.1.3"
+
+"@babel/plugin-transform-duplicate-keys@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86"
+ integrity sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-exponentiation-operator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73"
+ integrity sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-flow-strip-types@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz#c40ced34c2783985d90d9f9ac77a13e6fb396a01"
+ integrity sha512-WhXUNb4It5a19RsgKKbQPrjmy4yWOY1KynpEbNw7bnd1QTcrT/EIl3MJvnGgpgvrKyKbqX7nUNOJfkpLOnoDKA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-flow" "^7.0.0"
+
+"@babel/plugin-transform-for-of@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39"
+ integrity sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-function-name@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb"
+ integrity sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-literals@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86"
+ integrity sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-amd@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz#f9e0a7072c12e296079b5a59f408ff5b97bf86a8"
+ integrity sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-commonjs@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c"
+ integrity sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+
+"@babel/plugin-transform-modules-systemjs@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0.tgz#8873d876d4fee23209decc4d1feab8f198cf2df4"
+ integrity sha512-8EDKMAsitLkiF/D4Zhe9CHEE2XLh4bfLbb9/Zf3FgXYQOZyZYyg7EAel/aT2A7bHv62jwHf09q2KU/oEexr83g==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-umd@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz#a29a7d85d6f28c3561c33964442257cc6a21f2a8"
+ integrity sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-new-target@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a"
+ integrity sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-object-super@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz#b1ae194a054b826d8d4ba7ca91486d4ada0f91bb"
+ integrity sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.1.0"
+
+"@babel/plugin-transform-parameters@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed"
+ integrity sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw==
+ dependencies:
+ "@babel/helper-call-delegate" "^7.1.0"
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-regenerator@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1"
+ integrity sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==
+ dependencies:
+ regenerator-transform "^0.13.3"
+
+"@babel/plugin-transform-shorthand-properties@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15"
+ integrity sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-spread@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b"
+ integrity sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-sticky-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366"
+ integrity sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+
+"@babel/plugin-transform-template-literals@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65"
+ integrity sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-typeof-symbol@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9"
+ integrity sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-unicode-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc"
+ integrity sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+ regexpu-core "^4.1.3"
+
+"@babel/preset-env@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.0.tgz#e67ea5b0441cfeab1d6f41e9b5c79798800e8d11"
+ integrity sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-async-generator-functions" "^7.1.0"
+ "@babel/plugin-proposal-json-strings" "^7.0.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.0.0"
+ "@babel/plugin-syntax-async-generators" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.0.0"
+ "@babel/plugin-transform-arrow-functions" "^7.0.0"
+ "@babel/plugin-transform-async-to-generator" "^7.1.0"
+ "@babel/plugin-transform-block-scoped-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoping" "^7.0.0"
+ "@babel/plugin-transform-classes" "^7.1.0"
+ "@babel/plugin-transform-computed-properties" "^7.0.0"
+ "@babel/plugin-transform-destructuring" "^7.0.0"
+ "@babel/plugin-transform-dotall-regex" "^7.0.0"
+ "@babel/plugin-transform-duplicate-keys" "^7.0.0"
+ "@babel/plugin-transform-exponentiation-operator" "^7.1.0"
+ "@babel/plugin-transform-for-of" "^7.0.0"
+ "@babel/plugin-transform-function-name" "^7.1.0"
+ "@babel/plugin-transform-literals" "^7.0.0"
+ "@babel/plugin-transform-modules-amd" "^7.1.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.1.0"
+ "@babel/plugin-transform-modules-systemjs" "^7.0.0"
+ "@babel/plugin-transform-modules-umd" "^7.1.0"
+ "@babel/plugin-transform-new-target" "^7.0.0"
+ "@babel/plugin-transform-object-super" "^7.1.0"
+ "@babel/plugin-transform-parameters" "^7.1.0"
+ "@babel/plugin-transform-regenerator" "^7.0.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0"
+ "@babel/plugin-transform-spread" "^7.0.0"
+ "@babel/plugin-transform-sticky-regex" "^7.0.0"
+ "@babel/plugin-transform-template-literals" "^7.0.0"
+ "@babel/plugin-transform-typeof-symbol" "^7.0.0"
+ "@babel/plugin-transform-unicode-regex" "^7.0.0"
+ browserslist "^4.1.0"
+ invariant "^2.2.2"
+ js-levenshtein "^1.1.3"
+ semver "^5.3.0"
+
+"@babel/preset-flow@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.0.0.tgz#afd764835d9535ec63d8c7d4caf1c06457263da2"
+ integrity sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-transform-flow-strip-types" "^7.0.0"
+
+"@babel/template@^7.1.0", "@babel/template@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644"
+ integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.1.2"
+ "@babel/types" "^7.1.2"
+
+"@babel/traverse@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.0.tgz#503ec6669387efd182c3888c4eec07bcc45d91b2"
+ integrity sha512-bwgln0FsMoxm3pLOgrrnGaXk18sSM9JNf1/nHC/FksmNGFbYnPWY4GYCfLxyP1KRmfsxqkRpfoa6xr6VuuSxdw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/generator" "^7.0.0"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.0.0"
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ debug "^3.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.10"
+
+"@babel/types@^7.0.0", "@babel/types@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.2.tgz#183e7952cf6691628afdc2e2b90d03240bac80c0"
+ integrity sha512-pb1I05sZEKiSlMUV9UReaqsCPUpgbHHHu2n1piRm7JkuBkm6QxcaIzKu6FMnMtCbih/cEYTR+RGYYC96Yk9HAg==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.10"
+ to-fast-properties "^2.0.0"
+
+"@types/estree@0.0.39":
+ version "0.0.39"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+
+"@types/node@*":
+ version "10.11.3"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.11.3.tgz#c055536ac8a5e871701aa01914be5731539d01ee"
+ integrity sha512-3AvcEJAh9EMatxs+OxAlvAEs7OTy6AG94mcH1iqyVDwVVndekLxzwkWQ/Z4SDbY6GO2oyUXyWW8tQ4rENSSQVQ==
+
+abab@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"
+ integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+acorn-globals@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103"
+ integrity sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==
+ dependencies:
+ acorn "^6.0.1"
+ acorn-walk "^6.0.1"
+
+acorn-walk@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.0.tgz#c957f4a1460da46af4a0388ce28b4c99355b0cbc"
+ integrity sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==
+
+acorn@^5.5.3:
+ version "5.7.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+ integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+
+acorn@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4"
+ integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg==
+
+ajv@^5.3.0:
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+ integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
+ dependencies:
+ co "^4.6.0"
+ fast-deep-equal "^1.0.0"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.3.0"
+
+ansi-escapes@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
+ integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+append-transform@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
+ integrity sha1-126/jKlNJ24keja61EpLdKthGZE=
+ dependencies:
+ default-require-extensions "^1.0.0"
+
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-limiter@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
+ integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
+
+async@^2.1.4, async@^2.5.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
+ integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==
+ dependencies:
+ lodash "^4.17.10"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+ integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
+
+babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+babel-core@7.0.0-bridge.0:
+ version "7.0.0-bridge.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
+ integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
+
+babel-core@^6.0.0, babel-core@^6.26.0:
+ version "6.26.3"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
+ integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-generator "^6.26.0"
+ babel-helpers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-register "^6.26.0"
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ convert-source-map "^1.5.1"
+ debug "^2.6.9"
+ json5 "^0.5.1"
+ lodash "^4.17.4"
+ minimatch "^3.0.4"
+ path-is-absolute "^1.0.1"
+ private "^0.1.8"
+ slash "^1.0.0"
+ source-map "^0.5.7"
+
+babel-generator@^6.18.0, babel-generator@^6.26.0:
+ version "6.26.1"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
+ integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
+ dependencies:
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.17.4"
+ source-map "^0.5.7"
+ trim-right "^1.0.1"
+
+babel-helpers@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+ integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-jest@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1"
+ integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==
+ dependencies:
+ babel-plugin-istanbul "^4.1.6"
+ babel-preset-jest "^23.2.0"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-istanbul@^4.1.6:
+ version "4.1.6"
+ resolved "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
+ integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==
+ dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.13.0"
+ find-up "^2.1.0"
+ istanbul-lib-instrument "^1.10.1"
+ test-exclude "^4.2.1"
+
+babel-plugin-jest-hoist@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167"
+ integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=
+
+babel-plugin-syntax-object-rest-spread@^6.13.0:
+ version "6.13.0"
+ resolved "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+ integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
+
+babel-preset-jest@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46"
+ integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY=
+ dependencies:
+ babel-plugin-jest-hoist "^23.2.0"
+ babel-plugin-syntax-object-rest-spread "^6.13.0"
+
+babel-register@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+ integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
+ dependencies:
+ babel-core "^6.26.0"
+ babel-runtime "^6.26.0"
+ core-js "^2.5.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.17.4"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.15"
+
+babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+ integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ lodash "^4.17.4"
+
+babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+ integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ debug "^2.6.8"
+ globals "^9.18.0"
+ invariant "^2.2.2"
+ lodash "^4.17.4"
+
+babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
+ dependencies:
+ babel-runtime "^6.26.0"
+ esutils "^2.0.2"
+ lodash "^4.17.4"
+ to-fast-properties "^1.0.3"
+
+babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+ integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+browser-process-hrtime@^0.1.2:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"
+ integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==
+
+browser-resolve@^1.11.3:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+ dependencies:
+ resolve "1.1.7"
+
+browserslist@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6"
+ integrity sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==
+ dependencies:
+ caniuse-lite "^1.0.30000884"
+ electron-to-chromium "^1.3.62"
+ node-releases "^1.0.0-alpha.11"
+
+bser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
+ integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+caniuse-lite@^1.0.30000884:
+ version "1.0.30000888"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000888.tgz#22edb50d91dd70612b5898e3b36f460600c6492f"
+ integrity sha512-vftg+5p/lPsQGpnhSo/yBuYL36ai/cyjLvU3dOPJY1kkKrekLWIy8SLm+wzjX0hpCUdFTasC4/ZT7uqw4rKOnQ==
+
+capture-exit@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f"
+ integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=
+ dependencies:
+ rsvp "^3.3.3"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+chalk@^1.1.3:
+ version "1.1.3"
+ resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
+ integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chownr@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
+ integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+
+ci-info@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
+ integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cliui@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
+ integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+combined-stream@1.0.6:
+ version "1.0.6"
+ resolved "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
+ integrity sha1-cj599ugBrFYTETp+RFqbactjKBg=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+combined-stream@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
+ integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@~2.17.1:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+ integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
+
+component-emitter@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+ integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js@^2.4.0, core-js@^2.5.0:
+ version "2.5.7"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
+ integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797"
+ integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==
+
+cssstyle@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb"
+ integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==
+ dependencies:
+ cssom "0.3.x"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+data-urls@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.1.tgz#d416ac3896918f29ca84d81085bc3705834da579"
+ integrity sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==
+ dependencies:
+ abab "^2.0.0"
+ whatwg-mimetype "^2.1.0"
+ whatwg-url "^7.0.0"
+
+debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407"
+ integrity sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+default-require-extensions@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
+ integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=
+ dependencies:
+ strip-bom "^2.0.0"
+
+define-properties@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+ dependencies:
+ repeating "^2.0.0"
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+detect-newline@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
+ integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+
+diff@^3.2.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+ integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+
+domexception@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+ integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
+ dependencies:
+ webidl-conversions "^4.0.2"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+electron-to-chromium@^1.3.62:
+ version "1.3.73"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.73.tgz#aa67787067d58cc3920089368b3b8d6fe0fc12f6"
+ integrity sha512-6PIg7v9zRoVGh6EheRF8h6Plti+3Yo/qtHobS4/Htyt53DNHmKKGFqSae1AIk0k1S4gCQvt7I2WgpbuZNcDY+g==
+
+error-ex@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.5.1:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
+ integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.1"
+ has "^1.0.1"
+ is-callable "^1.1.3"
+ is-regex "^1.0.4"
+
+es-to-primitive@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+ integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escodegen@^1.9.1:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589"
+ integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==
+ dependencies:
+ esprima "^3.1.3"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+esprima@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+ integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+ integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+
+estree-walker@^0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39"
+ integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+exec-sh@^0.2.0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36"
+ integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==
+ dependencies:
+ merge "^1.2.0"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+expect@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98"
+ integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==
+ dependencies:
+ ansi-styles "^3.2.0"
+ jest-diff "^23.6.0"
+ jest-get-type "^22.1.0"
+ jest-matcher-utils "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-regex-util "^23.3.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+ integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+ integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fb-watchman@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
+ integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=
+ dependencies:
+ bser "^2.0.0"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+ integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
+
+fileset@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
+ integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=
+ dependencies:
+ glob "^7.0.3"
+ minimatch "^3.0.3"
+
+fill-range@^2.1.0:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
+ integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^3.0.0"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+flow-bin@^0.82.0:
+ version "0.82.0"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.82.0.tgz#fbec84c0d6cab7877565eca8214d655f3aefb8db"
+ integrity sha512-D7ViTCVJSVv19CB6dFWS9k2iKQlavtkRXn9el0ofVTTpGuybe+EPE8DZwdyohzEt6wRhHV8gwkteWvxdcVuOzg==
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
+ dependencies:
+ for-in "^1.0.1"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
+ integrity sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "1.0.6"
+ mime-types "^2.1.12"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fs-minipass@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
+ integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
+ dependencies:
+ minipass "^2.2.1"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
+ integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==
+ dependencies:
+ nan "^2.9.2"
+ node-pre-gyp "^0.10.0"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+ integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+ dependencies:
+ 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"
+
+globals@^11.1.0:
+ version "11.8.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d"
+ integrity sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==
+
+globals@^9.18.0:
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+ integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
+handlebars@^4.0.3:
+ version "4.0.12"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5"
+ integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==
+ dependencies:
+ async "^2.5.0"
+ optimist "^0.6.1"
+ source-map "^0.6.1"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29"
+ integrity sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==
+ dependencies:
+ ajv "^5.3.0"
+ har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+ integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
+ integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
+
+html-encoding-sniffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+iconv-lite@0.4.24, iconv-lite@^0.4.4:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
+ dependencies:
+ minimatch "^3.0.4"
+
+import-local@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
+ integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==
+ dependencies:
+ pkg-dir "^2.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+invariant@^2.2.2, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-callable@^1.1.3, is-callable@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+ integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+
+is-ci@^1.0.10:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
+ integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
+ dependencies:
+ ci-info "^1.5.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+ integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-generator-fn@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
+ integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+ integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-regex@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+ dependencies:
+ has "^1.0.1"
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-symbol@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+ integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+ dependencies:
+ has-symbols "^1.0.0"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+isarray@1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+istanbul-api@^1.3.1:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa"
+ integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==
+ dependencies:
+ async "^2.1.4"
+ fileset "^2.0.2"
+ istanbul-lib-coverage "^1.2.1"
+ istanbul-lib-hook "^1.2.2"
+ istanbul-lib-instrument "^1.10.2"
+ istanbul-lib-report "^1.1.5"
+ istanbul-lib-source-maps "^1.2.6"
+ istanbul-reports "^1.5.1"
+ js-yaml "^3.7.0"
+ mkdirp "^0.5.1"
+ once "^1.4.0"
+
+istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"
+ integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==
+
+istanbul-lib-hook@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86"
+ integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==
+ dependencies:
+ append-transform "^0.4.0"
+
+istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca"
+ integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==
+ dependencies:
+ babel-generator "^6.18.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+ babylon "^6.18.0"
+ istanbul-lib-coverage "^1.2.1"
+ semver "^5.3.0"
+
+istanbul-lib-report@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c"
+ integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==
+ dependencies:
+ istanbul-lib-coverage "^1.2.1"
+ mkdirp "^0.5.1"
+ path-parse "^1.0.5"
+ supports-color "^3.1.2"
+
+istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f"
+ integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==
+ dependencies:
+ debug "^3.1.0"
+ istanbul-lib-coverage "^1.2.1"
+ mkdirp "^0.5.1"
+ rimraf "^2.6.1"
+ source-map "^0.5.3"
+
+istanbul-reports@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a"
+ integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==
+ dependencies:
+ handlebars "^4.0.3"
+
+jest-changed-files@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83"
+ integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==
+ dependencies:
+ throat "^4.0.0"
+
+jest-cli@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4"
+ integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ graceful-fs "^4.1.11"
+ import-local "^1.0.0"
+ is-ci "^1.0.10"
+ istanbul-api "^1.3.1"
+ istanbul-lib-coverage "^1.2.0"
+ istanbul-lib-instrument "^1.10.1"
+ istanbul-lib-source-maps "^1.2.4"
+ jest-changed-files "^23.4.2"
+ jest-config "^23.6.0"
+ jest-environment-jsdom "^23.4.0"
+ jest-get-type "^22.1.0"
+ jest-haste-map "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-regex-util "^23.3.0"
+ jest-resolve-dependencies "^23.6.0"
+ jest-runner "^23.6.0"
+ jest-runtime "^23.6.0"
+ jest-snapshot "^23.6.0"
+ jest-util "^23.4.0"
+ jest-validate "^23.6.0"
+ jest-watcher "^23.4.0"
+ jest-worker "^23.2.0"
+ micromatch "^2.3.11"
+ node-notifier "^5.2.1"
+ prompts "^0.1.9"
+ realpath-native "^1.0.0"
+ rimraf "^2.5.4"
+ slash "^1.0.0"
+ string-length "^2.0.0"
+ strip-ansi "^4.0.0"
+ which "^1.2.12"
+ yargs "^11.0.0"
+
+jest-config@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d"
+ integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==
+ dependencies:
+ babel-core "^6.0.0"
+ babel-jest "^23.6.0"
+ chalk "^2.0.1"
+ glob "^7.1.1"
+ jest-environment-jsdom "^23.4.0"
+ jest-environment-node "^23.4.0"
+ jest-get-type "^22.1.0"
+ jest-jasmine2 "^23.6.0"
+ jest-regex-util "^23.3.0"
+ jest-resolve "^23.6.0"
+ jest-util "^23.4.0"
+ jest-validate "^23.6.0"
+ micromatch "^2.3.11"
+ pretty-format "^23.6.0"
+
+jest-diff@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d"
+ integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==
+ dependencies:
+ chalk "^2.0.1"
+ diff "^3.2.0"
+ jest-get-type "^22.1.0"
+ pretty-format "^23.6.0"
+
+jest-docblock@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7"
+ integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=
+ dependencies:
+ detect-newline "^2.1.0"
+
+jest-each@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575"
+ integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==
+ dependencies:
+ chalk "^2.0.1"
+ pretty-format "^23.6.0"
+
+jest-environment-jsdom@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023"
+ integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM=
+ dependencies:
+ jest-mock "^23.2.0"
+ jest-util "^23.4.0"
+ jsdom "^11.5.1"
+
+jest-environment-node@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10"
+ integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=
+ dependencies:
+ jest-mock "^23.2.0"
+ jest-util "^23.4.0"
+
+jest-get-type@^22.1.0:
+ version "22.4.3"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
+ integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==
+
+jest-haste-map@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16"
+ integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==
+ dependencies:
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.11"
+ invariant "^2.2.4"
+ jest-docblock "^23.2.0"
+ jest-serializer "^23.0.1"
+ jest-worker "^23.2.0"
+ micromatch "^2.3.11"
+ sane "^2.0.0"
+
+jest-jasmine2@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0"
+ integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==
+ dependencies:
+ babel-traverse "^6.0.0"
+ chalk "^2.0.1"
+ co "^4.6.0"
+ expect "^23.6.0"
+ is-generator-fn "^1.0.0"
+ jest-diff "^23.6.0"
+ jest-each "^23.6.0"
+ jest-matcher-utils "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-snapshot "^23.6.0"
+ jest-util "^23.4.0"
+ pretty-format "^23.6.0"
+
+jest-leak-detector@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de"
+ integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==
+ dependencies:
+ pretty-format "^23.6.0"
+
+jest-matcher-utils@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80"
+ integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==
+ dependencies:
+ chalk "^2.0.1"
+ jest-get-type "^22.1.0"
+ pretty-format "^23.6.0"
+
+jest-message-util@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f"
+ integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=
+ dependencies:
+ "@babel/code-frame" "^7.0.0-beta.35"
+ chalk "^2.0.1"
+ micromatch "^2.3.11"
+ slash "^1.0.0"
+ stack-utils "^1.0.1"
+
+jest-mock@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134"
+ integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=
+
+jest-regex-util@^23.3.0:
+ version "23.3.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5"
+ integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=
+
+jest-resolve-dependencies@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d"
+ integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==
+ dependencies:
+ jest-regex-util "^23.3.0"
+ jest-snapshot "^23.6.0"
+
+jest-resolve@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae"
+ integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==
+ dependencies:
+ browser-resolve "^1.11.3"
+ chalk "^2.0.1"
+ realpath-native "^1.0.0"
+
+jest-runner@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38"
+ integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==
+ dependencies:
+ exit "^0.1.2"
+ graceful-fs "^4.1.11"
+ jest-config "^23.6.0"
+ jest-docblock "^23.2.0"
+ jest-haste-map "^23.6.0"
+ jest-jasmine2 "^23.6.0"
+ jest-leak-detector "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-runtime "^23.6.0"
+ jest-util "^23.4.0"
+ jest-worker "^23.2.0"
+ source-map-support "^0.5.6"
+ throat "^4.0.0"
+
+jest-runtime@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082"
+ integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==
+ dependencies:
+ babel-core "^6.0.0"
+ babel-plugin-istanbul "^4.1.6"
+ chalk "^2.0.1"
+ convert-source-map "^1.4.0"
+ exit "^0.1.2"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.1.11"
+ jest-config "^23.6.0"
+ jest-haste-map "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-regex-util "^23.3.0"
+ jest-resolve "^23.6.0"
+ jest-snapshot "^23.6.0"
+ jest-util "^23.4.0"
+ jest-validate "^23.6.0"
+ micromatch "^2.3.11"
+ realpath-native "^1.0.0"
+ slash "^1.0.0"
+ strip-bom "3.0.0"
+ write-file-atomic "^2.1.0"
+ yargs "^11.0.0"
+
+jest-serializer@^23.0.1:
+ version "23.0.1"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165"
+ integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=
+
+jest-snapshot@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a"
+ integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==
+ dependencies:
+ babel-types "^6.0.0"
+ chalk "^2.0.1"
+ jest-diff "^23.6.0"
+ jest-matcher-utils "^23.6.0"
+ jest-message-util "^23.4.0"
+ jest-resolve "^23.6.0"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^23.6.0"
+ semver "^5.5.0"
+
+jest-util@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561"
+ integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=
+ dependencies:
+ callsites "^2.0.0"
+ chalk "^2.0.1"
+ graceful-fs "^4.1.11"
+ is-ci "^1.0.10"
+ jest-message-util "^23.4.0"
+ mkdirp "^0.5.1"
+ slash "^1.0.0"
+ source-map "^0.6.0"
+
+jest-validate@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474"
+ integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==
+ dependencies:
+ chalk "^2.0.1"
+ jest-get-type "^22.1.0"
+ leven "^2.1.0"
+ pretty-format "^23.6.0"
+
+jest-watcher@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c"
+ integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ string-length "^2.0.0"
+
+jest-worker@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9"
+ integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=
+ dependencies:
+ merge-stream "^1.0.1"
+
+jest@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d"
+ integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==
+ dependencies:
+ import-local "^1.0.0"
+ jest-cli "^23.6.0"
+
+js-levenshtein@^1.1.3:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e"
+ integrity sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.7.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
+ integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsdom@^11.5.1:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
+ integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
+ dependencies:
+ abab "^2.0.0"
+ acorn "^5.5.3"
+ acorn-globals "^4.1.0"
+ array-equal "^1.0.0"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle "^1.0.0"
+ data-urls "^1.0.0"
+ domexception "^1.0.1"
+ escodegen "^1.9.1"
+ html-encoding-sniffer "^1.0.2"
+ left-pad "^1.3.0"
+ nwsapi "^2.0.7"
+ parse5 "4.0.0"
+ pn "^1.1.0"
+ request "^2.87.0"
+ request-promise-native "^1.0.5"
+ sax "^1.2.4"
+ symbol-tree "^3.2.2"
+ tough-cookie "^2.3.4"
+ w3c-hr-time "^1.0.1"
+ webidl-conversions "^4.0.2"
+ whatwg-encoding "^1.0.3"
+ whatwg-mimetype "^2.1.0"
+ whatwg-url "^6.4.1"
+ ws "^5.2.0"
+ xml-name-validator "^3.0.0"
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+jsesc@^2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe"
+ integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+ integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^0.5.0, json5@^0.5.1:
+ version "0.5.1"
+ resolved "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+kleur@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300"
+ integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
+ dependencies:
+ invert-kv "^1.0.0"
+
+left-pad@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
+ integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
+
+leven@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+ integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
+lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+ integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+
+loose-envify@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^4.0.1:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
+ integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+magic-string@^0.22.4:
+ version "0.22.5"
+ resolved "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e"
+ integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==
+ dependencies:
+ vlq "^0.2.2"
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ dependencies:
+ tmpl "1.0.x"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+math-random@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
+ integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w=
+
+mem@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+ integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+merge-stream@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+ integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=
+ dependencies:
+ readable-stream "^2.0.1"
+
+merge@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
+ integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=
+
+micromatch@^2.3.11:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+mime-db@~1.36.0:
+ version "1.36.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397"
+ integrity sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==
+
+mime-types@^2.1.12, mime-types@~2.1.19:
+ version "2.1.20"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19"
+ integrity sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==
+ dependencies:
+ mime-db "~1.36.0"
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.1, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
+minipass@^2.2.1, minipass@^2.3.3:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957"
+ integrity sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb"
+ integrity sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==
+ dependencies:
+ minipass "^2.2.1"
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@^0.5.0, mkdirp@^0.5.1:
+ version "0.5.1"
+ resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+nan@^2.9.2:
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766"
+ integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+needle@^2.2.1:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
+ integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==
+ dependencies:
+ debug "^2.1.2"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-notifier@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea"
+ integrity sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==
+ dependencies:
+ growly "^1.3.0"
+ semver "^5.4.1"
+ shellwords "^0.1.1"
+ which "^1.3.0"
+
+node-pre-gyp@^0.10.0:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
+ integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+node-releases@^1.0.0-alpha.11:
+ version "1.0.0-alpha.12"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.12.tgz#32e461b879ea76ac674e511d9832cf29da345268"
+ integrity sha512-VPB4rTPqpVyWKBHbSa4YPFme3+8WHsOSpvbp0Mfj0bWsC8TEjt4HQrLl1hsBDELlp1nB4lflSgSuGTYiuyaP7Q==
+ dependencies:
+ semver "^5.3.0"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+ integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1, normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+npm-bundled@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
+ integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==
+
+npm-packlist@^1.1.6:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de"
+ integrity sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+nwsapi@^2.0.7:
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016"
+ integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-keys@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2"
+ integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.getownpropertydescriptors@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
+ integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.5.1"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+once@^1.3.0, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optionator@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-locale@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+ integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
+ dependencies:
+ execa "^0.7.0"
+ lcid "^1.0.0"
+ mem "^1.1.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse5@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
+ integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pn@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+prettier@^1.14.3:
+ version "1.14.3"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895"
+ integrity sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==
+
+pretty-format@^23.6.0:
+ version "23.6.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
+ integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==
+ dependencies:
+ ansi-regex "^3.0.0"
+ ansi-styles "^3.2.0"
+
+private@^0.1.6, private@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+ integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+ integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+
+prompts@^0.1.9:
+ version "0.1.14"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2"
+ integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==
+ dependencies:
+ kleur "^2.0.1"
+ sisteransi "^0.1.1"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.24:
+ version "1.1.29"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
+ integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+randomatic@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116"
+ integrity sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==
+ dependencies:
+ is-number "^4.0.0"
+ kind-of "^6.0.0"
+ math-random "^1.0.1"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+readable-stream@^2.0.1, readable-stream@^2.0.6:
+ version "2.3.6"
+ resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+realpath-native@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560"
+ integrity sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==
+ dependencies:
+ util.promisify "^1.0.0"
+
+regenerate-unicode-properties@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c"
+ integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+ integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-transform@^0.13.3:
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb"
+ integrity sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==
+ dependencies:
+ private "^0.1.6"
+
+regex-cache@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
+ dependencies:
+ is-equal-shallow "^0.1.3"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexpu-core@^4.1.3, regexpu-core@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d"
+ integrity sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^7.0.0"
+ regjsgen "^0.4.0"
+ regjsparser "^0.3.0"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.0.2"
+
+regjsgen@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561"
+ integrity sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA==
+
+regjsparser@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96"
+ integrity sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA==
+ dependencies:
+ jsesc "~0.5.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.5.2, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request-promise-core@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6"
+ integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=
+ dependencies:
+ lodash "^4.13.1"
+
+request-promise-native@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5"
+ integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=
+ dependencies:
+ request-promise-core "1.1.1"
+ stealthy-require "^1.1.0"
+ tough-cookie ">=2.3.3"
+
+request@^2.87.0:
+ version "2.88.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^1.3.2:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
+ integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==
+ dependencies:
+ path-parse "^1.0.5"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
+ dependencies:
+ glob "^7.0.5"
+
+rollup-plugin-babel@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.0.3.tgz#8282b0e22233160d679e9c7631342e848422fb02"
+ integrity sha512-/PP0MgbPQyRywI4zRIJim6ySjTcOLo4kQbEbROqp9kOR3kHC3FeU++QpBDZhS2BcHtJTVZMVbBV46flbBN5zxQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ rollup-pluginutils "^2.3.0"
+
+rollup-plugin-replace@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.0.0.tgz#19074089c8ed57184b8cc64e967a03d095119277"
+ integrity sha512-pK9mTd/FNrhtBxcTBXoh0YOwRIShV0gGhv9qvUtNcXHxIMRZMXqfiZKVBmCRGp8/2DJRy62z2JUE7/5tP6WxOQ==
+ dependencies:
+ magic-string "^0.22.4"
+ minimatch "^3.0.2"
+ rollup-pluginutils "^2.0.1"
+
+rollup-plugin-uglify@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.0.tgz#15aa8919e5cdc63b7cfc9319c781788b40084ce4"
+ integrity sha512-XtzZd159QuOaXNvcxyBcbUCSoBsv5YYWK+7ZwUyujSmISst8avRfjWlp7cGu8T2O52OJnpEBvl+D4WLV1k1iQQ==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ jest-worker "^23.2.0"
+ serialize-javascript "^1.5.0"
+ uglify-js "^3.4.9"
+
+rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794"
+ integrity sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==
+ dependencies:
+ estree-walker "^0.5.2"
+ micromatch "^2.3.11"
+
+rollup@^0.66.2:
+ version "0.66.2"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.66.2.tgz#77acdb9f4093f5f035ce75480577c40a81ea7999"
+ integrity sha512-+rOLjWO170M3Y2jyyGU4ZJuTu1T1KuKNyH+RszHRzQdsuI5TulRbkSM4vlaMnwcxHm4XdgBNZ1mmNzhQIImbiQ==
+ dependencies:
+ "@types/estree" "0.0.39"
+ "@types/node" "*"
+
+rsvp@^3.3.3:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
+ integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sane@^2.0.0:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa"
+ integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o=
+ dependencies:
+ anymatch "^2.0.0"
+ capture-exit "^1.2.0"
+ exec-sh "^0.2.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+ watch "~0.18.0"
+ optionalDependencies:
+ fsevents "^1.2.3"
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
+ version "5.5.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
+ integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==
+
+serialize-javascript@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe"
+ integrity sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+sisteransi@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce"
+ integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.4.15:
+ version "0.4.18"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+ integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
+ dependencies:
+ source-map "^0.5.6"
+
+source-map-support@^0.5.6:
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
+ integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+spdx-correct@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.1.tgz#434434ff9d1726b4d9f4219d1004813d80639e30"
+ integrity sha512-hxSPZbRZvSDuOvADntOElzJpenIR7wXJkuoUcUtS0erbgt2fgeaoPIYretfKpslMhfFDY4k0MZ2F5CUzhBsSvQ==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+ integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f"
+ integrity sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.14.2"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"
+ integrity sha1-xvxhZIo9nE52T9P8306hBeSSupg=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ safer-buffer "^2.0.2"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stack-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620"
+ integrity sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+stealthy-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
+string-length@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
+ integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-bom@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^3.1.2:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+symbol-tree@^3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
+ integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
+
+tar@^4:
+ version "4.4.6"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b"
+ integrity sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==
+ dependencies:
+ chownr "^1.0.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.3"
+ minizlib "^1.1.0"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.2"
+
+test-exclude@^4.2.1:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20"
+ integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==
+ dependencies:
+ arrify "^1.0.1"
+ micromatch "^2.3.11"
+ object-assign "^4.1.0"
+ read-pkg-up "^1.0.1"
+ require-main-filename "^1.0.1"
+
+throat@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
+ integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
+to-fast-properties@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+ integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
+ dependencies:
+ punycode "^2.1.0"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+ integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+uglify-js@^3.1.4, uglify-js@^3.4.9:
+ version "3.4.9"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
+ integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==
+ dependencies:
+ commander "~2.17.1"
+ source-map "~0.6.1"
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4"
+ integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0"
+ integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==
+
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+ integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+ dependencies:
+ define-properties "^1.1.2"
+ object.getownpropertydescriptors "^2.0.3"
+
+uuid@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
+ integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vlq@^0.2.2:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
+ integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==
+
+w3c-hr-time@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
+ integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=
+ dependencies:
+ browser-process-hrtime "^0.1.2"
+
+walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ dependencies:
+ makeerror "1.0.x"
+
+watch@~0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
+ integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY=
+ dependencies:
+ exec-sh "^0.2.0"
+ minimist "^1.2.0"
+
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-mimetype@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz#a3d58ef10b76009b042d03e25591ece89b88d171"
+ integrity sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw==
+
+whatwg-url@^6.4.1:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
+ integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+whatwg-url@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd"
+ integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.12, which@^1.2.9, which@^1.3.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
+ integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+ws@^5.2.0:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
+ integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+ integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.0, yallist@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
+ integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=
+
+yargs-parser@^9.0.2:
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
+ integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^11.0.0:
+ version "11.1.0"
+ resolved "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77"
+ integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^1.1.1"
+ find-up "^2.1.0"
+ get-caller-file "^1.0.1"
+ os-locale "^2.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^9.0.2"
diff --git a/value-equal/.eslintrc b/value-equal/.eslintrc
new file mode 100644
index 0000000..66b819c
--- /dev/null
+++ b/value-equal/.eslintrc
@@ -0,0 +1,7 @@
+{
+ "env": {
+ "shared-node-browser": true
+ },
+ "extends": ["eslint:recommended"],
+ "parser": "babel-eslint"
+}
diff --git a/value-equal/.gitignore b/value-equal/.gitignore
new file mode 100644
index 0000000..f52c030
--- /dev/null
+++ b/value-equal/.gitignore
@@ -0,0 +1,5 @@
+/node_modules/
+
+/cjs/
+/esm/
+/umd/
diff --git a/value-equal/.prettierignore b/value-equal/.prettierignore
new file mode 100644
index 0000000..ec6d3cd
--- /dev/null
+++ b/value-equal/.prettierignore
@@ -0,0 +1 @@
+package.json
diff --git a/value-equal/.size-snapshot.json b/value-equal/.size-snapshot.json
new file mode 100644
index 0000000..4174bf2
--- /dev/null
+++ b/value-equal/.size-snapshot.json
@@ -0,0 +1,26 @@
+{
+ "esm/value-equal.js": {
+ "bundled": 859,
+ "minified": 498,
+ "gzipped": 261,
+ "treeshaked": {
+ "rollup": {
+ "code": 0,
+ "import_statements": 0
+ },
+ "webpack": {
+ "code": 951
+ }
+ }
+ },
+ "umd/value-equal.js": {
+ "bundled": 1176,
+ "minified": 610,
+ "gzipped": 327
+ },
+ "umd/value-equal.min.js": {
+ "bundled": 1176,
+ "minified": 610,
+ "gzipped": 327
+ }
+}
diff --git a/value-equal/.travis.yml b/value-equal/.travis.yml
new file mode 100644
index 0000000..3788af7
--- /dev/null
+++ b/value-equal/.travis.yml
@@ -0,0 +1,27 @@
+language: node_js
+node_js: node
+cache: npm
+env:
+- TEST_ENV=cjs BUILD_ENV=cjs
+- TEST_ENV=umd BUILD_ENV=umd
+- TEST_ENV=source
+before_script:
+- ([[ -z "$BUILD_ENV" ]] || npm run build)
+script:
+- npm run lint
+- npm test
+jobs:
+ include:
+ - stage: Release
+ if: tag =~ ^v[0-9]
+ env: NPM_TAG=$([[ "$TRAVIS_TAG" == *-* ]] && echo "next" || echo "latest")
+ script: echo "Releasing $TRAVIS_TAG to npm with tag \"$NPM_TAG\" ..."
+ deploy:
+ provider: npm
+ skip_cleanup: true
+ tag: "$NPM_TAG"
+ email: npm@mjackson.me
+ api_key:
+ secure: MFaqOpSZdobIVroJ7Y7BG2/ET9T+0Mf92fST/6Wguw2kbyHXs120Jjw/GsAIMdz0kXF9yx+kg7NNkAyqoUtvWMF542cCoMMwHYLC/MGiPwOZVF/EQjSQmj4ypYm+78Bb+4AaIiGoLfF7IW8r9Faq8OLdtiS5CoHLuXC8UcfmpKZJzqZ3AGXzNMjUZVJZ5t2v/ATQGBVt7FyWkASn7kaso1e3k+BlMVgXcGfC4xVaf4wof3UJsQEO0vjRCPUhyA1anhwo+AGD7fEL8SjjirogGCzPKpZyOfjFK/cDMIMKOlc4X7fy+OY1wZhX7v6T6VSVtNP66orQF/WfTNUdwVWWonsvYV/3wL395ND37lh4xA4cNl7WuFvHeyOLL+3kWwg1nsAu+O+9acXlMnfoIQmUDTL3U0s/E1/964e1FFRWaNXtmj2PBwtHj8/C1UG9kqlFWk24jRNhFRqVqrzOjEjSjt4dghFba/8j6Az99km8Vrl1jXekk+JU8AtQjVRclKQbDAhSvo4C+HCQ8ioNc5JhnttKJty+ll+QOTB0BgEbUBO4WME+zIeG66oGH1Y+4eBiD8SZK2/OqHIhNk3ICFyHV/56SkuaRTi3ou01q2N+8Wmo5QsN/N2+lSpZ4Et/Y3GFrPQycokSzLVHY7pOiBiTYD71xYQFa7SnQvduPUtSDIY=
+ on:
+ tags: true
diff --git a/value-equal/LICENSE b/value-equal/LICENSE
new file mode 100644
index 0000000..54ff40f
--- /dev/null
+++ b/value-equal/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Michael Jackson 2016-2018
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/value-equal/README.md b/value-equal/README.md
new file mode 100644
index 0000000..240d090
--- /dev/null
+++ b/value-equal/README.md
@@ -0,0 +1,54 @@
+# value-equal [![Travis][build-badge]][build] [![npm package][npm-badge]][npm]
+
+[build-badge]: https://img.shields.io/travis/mjackson/value-equal/master.svg?style=flat-square
+[build]: https://travis-ci.org/mjackson/value-equal
+[npm-badge]: https://img.shields.io/npm/v/value-equal.svg?style=flat-square
+[npm]: https://www.npmjs.org/package/value-equal
+
+[`value-equal`](https://www.npmjs.com/package/value-equal) determines if two JavaScript values are equal using [`Object.prototype.valueOf`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf).
+
+In many instances when I'm checking for object equality, what I really want to know is if their **values** are equal. This is good for:
+
+- Stuff you keep in `localStorage`
+- `window.history.state` values
+- Query strings
+
+## Installation
+
+Using [npm](https://www.npmjs.com/):
+
+ $ npm install --save value-equal
+
+Then with a module bundler like [webpack](https://webpack.github.io/), use as you would anything else:
+
+```js
+// using ES6 modules
+import valueEqual from 'value-equal';
+
+// using CommonJS modules
+var valueEqual = require('value-equal');
+```
+
+The UMD build is also available on [unpkg](https://unpkg.com):
+
+```html
+<script src="https://unpkg.com/value-equal"></script>
+```
+
+You can find the library on `window.valueEqual`.
+
+## Usage
+
+```js
+valueEqual(1, 1); // true
+valueEqual('asdf', 'asdf'); // true
+valueEqual('asdf', new String('asdf')); // true
+valueEqual(true, true); // true
+valueEqual(true, false); // false
+valueEqual({ a: 'a' }, { a: 'a' }); // true
+valueEqual({ a: 'a' }, { a: 'b' }); // false
+valueEqual([1, 2, 3], [1, 2, 3]); // true
+valueEqual([1, 2, 3], [2, 3, 4]); // false
+```
+
+That's it. Enjoy!
diff --git a/value-equal/index.js b/value-equal/index.js
new file mode 100644
index 0000000..3a5353e
--- /dev/null
+++ b/value-equal/index.js
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./cjs/value-equal.min.js');
+} else {
+ module.exports = require('./cjs/value-equal.js');
+}
diff --git a/value-equal/jest.config.js b/value-equal/jest.config.js
new file mode 100644
index 0000000..1b1fc01
--- /dev/null
+++ b/value-equal/jest.config.js
@@ -0,0 +1,19 @@
+let mappedModule;
+switch (process.env.TEST_ENV) {
+ case 'cjs':
+ mappedModule = '<rootDir>/cjs/value-equal.js';
+ break;
+ case 'umd':
+ mappedModule = '<rootDir>/umd/value-equal.js';
+ break;
+ default:
+ mappedModule = '<rootDir>/modules/index.js';
+}
+
+module.exports = {
+ moduleNameMapper: {
+ '^value-equal$': mappedModule
+ },
+ testMatch: ['**/__tests__/**/*-test.js'],
+ testURL: 'http://localhost/'
+};
diff --git a/value-equal/modules/.babelrc b/value-equal/modules/.babelrc
new file mode 100644
index 0000000..0ef5ffc
--- /dev/null
+++ b/value-equal/modules/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["@babel/env"]
+}
diff --git a/value-equal/modules/__tests__/.eslintrc b/value-equal/modules/__tests__/.eslintrc
new file mode 100644
index 0000000..55f121d
--- /dev/null
+++ b/value-equal/modules/__tests__/.eslintrc
@@ -0,0 +1,5 @@
+{
+ "env": {
+ "jest": true
+ }
+}
diff --git a/value-equal/modules/__tests__/array-test.js b/value-equal/modules/__tests__/array-test.js
new file mode 100644
index 0000000..13950b7
--- /dev/null
+++ b/value-equal/modules/__tests__/array-test.js
@@ -0,0 +1,15 @@
+import valueEqual from 'value-equal';
+
+describe('arrays', () => {
+ describe('that are equal', () => {
+ it('returns true', () => {
+ expect(valueEqual([1, 2, 3], [1, 2, 3])).toBe(true);
+ });
+ });
+
+ describe('that are not equal', () => {
+ it('returns false', () => {
+ expect(valueEqual([1, 2, 3], [2, 3, 4])).toBe(false);
+ });
+ });
+});
diff --git a/value-equal/modules/__tests__/boolean-test.js b/value-equal/modules/__tests__/boolean-test.js
new file mode 100644
index 0000000..0fd1b84
--- /dev/null
+++ b/value-equal/modules/__tests__/boolean-test.js
@@ -0,0 +1,29 @@
+import valueEqual from 'value-equal';
+
+describe('boolean primitives', () => {
+ describe('that are equal', () => {
+ it('returns true', () => {
+ expect(valueEqual(true, true)).toBe(true);
+ });
+ });
+
+ describe('that are not equal', () => {
+ it('returns false', () => {
+ expect(valueEqual(true, false)).toBe(false);
+ });
+ });
+});
+
+describe('boolean objects', () => {
+ describe('that are equal', () => {
+ it('returns true', () => {
+ expect(valueEqual(new Boolean(true), new Boolean(true))).toBe(true);
+ });
+ });
+
+ describe('that are not equal', () => {
+ it('returns false', () => {
+ expect(valueEqual(new Boolean(true), new Boolean(false))).toBe(false);
+ });
+ });
+});
diff --git a/value-equal/modules/__tests__/date-test.js b/value-equal/modules/__tests__/date-test.js
new file mode 100644
index 0000000..c239bfe
--- /dev/null
+++ b/value-equal/modules/__tests__/date-test.js
@@ -0,0 +1,17 @@
+import valueEqual from 'value-equal';
+
+describe('date objects', () => {
+ const now = Date.now();
+
+ describe('that are equal', () => {
+ it('returns true', () => {
+ expect(valueEqual(new Date(now), new Date(now))).toBe(true);
+ });
+ });
+
+ describe('that are not equal', () => {
+ it('returns false', () => {
+ expect(valueEqual(new Date(now), new Date(now + 1))).toBe(false);
+ });
+ });
+});
diff --git a/value-equal/modules/__tests__/number-test.js b/value-equal/modules/__tests__/number-test.js
new file mode 100644
index 0000000..67ec647
--- /dev/null
+++ b/value-equal/modules/__tests__/number-test.js
@@ -0,0 +1,29 @@
+import valueEqual from 'value-equal';
+
+describe('number primitives', () => {
+ describe('that are equal', () => {
+ it('returns true', () => {
+ expect(valueEqual(123.456, 123.456)).toBe(true);
+ });
+ });
+
+ describe('that are not equal', () => {
+ it('returns false', () => {
+ expect(valueEqual(123.456, 123.567)).toBe(false);
+ });
+ });
+});
+
+describe('number objects', () => {
+ describe('that are equal', () => {
+ it('returns true', () => {
+ expect(valueEqual(new Number(123.456), new Number(123.456))).toBe(true);
+ });
+ });
+
+ describe('that are not equal', () => {
+ it('returns false', () => {
+ expect(valueEqual(new Number(123.456), new Number(123.567))).toBe(false);
+ });
+ });
+});
diff --git a/value-equal/modules/__tests__/object-test.js b/value-equal/modules/__tests__/object-test.js
new file mode 100644
index 0000000..aa81831
--- /dev/null
+++ b/value-equal/modules/__tests__/object-test.js
@@ -0,0 +1,31 @@
+import valueEqual from 'value-equal';
+
+describe('empty objects', () => {
+ it('returns true', () => {
+ expect(valueEqual({}, Object.create(null))).toBe(true);
+ });
+});
+
+describe('objects with undefined values', () => {
+ it('returns false', () => {
+ expect(valueEqual({ a: undefined }, { b: 1 })).toBe(false); // #5
+ });
+});
+
+describe('objects with different constructors but the same properties', () => {
+ function A(a, b, c) {
+ this.a = a;
+ this.b = b;
+ this.c = c;
+ }
+
+ function B(a, b, c) {
+ this.a = a;
+ this.b = b;
+ this.c = c;
+ }
+
+ it('returns true', () => {
+ expect(valueEqual(new A(1, 2, 3), new B(1, 2, 3))).toBe(true);
+ });
+});
diff --git a/value-equal/modules/__tests__/string-test.js b/value-equal/modules/__tests__/string-test.js
new file mode 100644
index 0000000..e643e44
--- /dev/null
+++ b/value-equal/modules/__tests__/string-test.js
@@ -0,0 +1,31 @@
+import valueEqual from 'value-equal';
+
+describe('string primitives', () => {
+ describe('that are equal', () => {
+ it('returns true', () => {
+ expect(valueEqual('asdf', 'asdf')).toBe(true);
+ expect(valueEqual('asdf', new String('asdf'))).toBe(true);
+ });
+ });
+
+ describe('that are not equal', () => {
+ it('returns false', () => {
+ expect(valueEqual('asdf', 'sdfg')).toBe(false);
+ expect(valueEqual('asdf', new String('sdfg'))).toBe(false);
+ });
+ });
+});
+
+describe('string objects', () => {
+ describe('that are equal', () => {
+ it('returns true', () => {
+ expect(valueEqual(new String('asdf'), new String('asdf'))).toBe(true);
+ });
+ });
+
+ describe('that are not equal', () => {
+ it('returns false', () => {
+ expect(valueEqual(new String('asdf'), new String('sdfg'))).toBe(false);
+ });
+ });
+});
diff --git a/value-equal/modules/__tests__/undefined-and-null-test.js b/value-equal/modules/__tests__/undefined-and-null-test.js
new file mode 100644
index 0000000..8efc7c1
--- /dev/null
+++ b/value-equal/modules/__tests__/undefined-and-null-test.js
@@ -0,0 +1,28 @@
+import valueEqual from 'value-equal';
+
+describe('undefined and null', () => {
+ describe('when both are undefined', () => {
+ it('returns true', () => {
+ expect(valueEqual(undefined, undefined)).toBe(true);
+ });
+ });
+
+ describe('when both are null', () => {
+ it('returns true', () => {
+ expect(valueEqual(null, null)).toBe(true);
+ });
+ });
+
+ describe('when one is null', () => {
+ it('returns false', () => {
+ expect(valueEqual(undefined, null)).toBe(false);
+ });
+ });
+
+ describe('when one is null and the other is an object', () => {
+ it('returns false', () => {
+ expect(valueEqual({}, null)).toBe(false);
+ expect(valueEqual(null, {})).toBe(false);
+ });
+ });
+});
diff --git a/value-equal/modules/index.js b/value-equal/modules/index.js
new file mode 100644
index 0000000..94d02c1
--- /dev/null
+++ b/value-equal/modules/index.js
@@ -0,0 +1,36 @@
+function valueOf(obj) {
+ return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);
+}
+
+function valueEqual(a, b) {
+ // Test for strict equality first.
+ if (a === b) return true;
+
+ // Otherwise, if either of them == null they are not equal.
+ if (a == null || b == null) return false;
+
+ if (Array.isArray(a)) {
+ return (
+ Array.isArray(b) &&
+ a.length === b.length &&
+ a.every(function(item, index) {
+ return valueEqual(item, b[index]);
+ })
+ );
+ }
+
+ if (typeof a === 'object' || typeof b === 'object') {
+ var aValue = valueOf(a);
+ var bValue = valueOf(b);
+
+ if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);
+
+ return Object.keys(Object.assign({}, a, b)).every(function(key) {
+ return valueEqual(a[key], b[key]);
+ });
+ }
+
+ return false;
+}
+
+export default valueEqual;
diff --git a/value-equal/package-lock.json b/value-equal/package-lock.json
new file mode 100644
index 0000000..907ecff
--- /dev/null
+++ b/value-equal/package-lock.json
@@ -0,0 +1,9322 @@
+{
+ "name": "value-equal",
+ "version": "1.0.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.6.tgz",
+ "integrity": "sha512-Hz6PJT6e44iUNpAn8AoyAs6B3bl60g7MJQaI0rZEar6ECzh6+srYO1xlIdssio34mPaUtAb1y+XlkkSJzok3yw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.1.6",
+ "@babel/helpers": "^7.1.5",
+ "@babel/parser": "^7.1.6",
+ "@babel/template": "^7.1.2",
+ "@babel/traverse": "^7.1.6",
+ "@babel/types": "^7.1.6",
+ "convert-source-map": "^1.1.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.10",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
+ "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "json5": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.6.tgz",
+ "integrity": "sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.1.6",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.10",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+ "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
+ "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
+ "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+ "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
+ "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
+ "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz",
+ "integrity": "sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
+ "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-wrap-function": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz",
+ "integrity": "sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+ "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
+ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz",
+ "integrity": "sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.1.5.tgz",
+ "integrity": "sha512-2jkcdL02ywNBry1YNFAH/fViq4fXG0vdckHqeJk+75fpQ2OH+Az6076tX/M0835zA45E0Cqa6pV5Kiv9YOqjEg==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.2",
+ "@babel/traverse": "^7.1.5",
+ "@babel/types": "^7.1.5"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.6.tgz",
+ "integrity": "sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ==",
+ "dev": true
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz",
+ "integrity": "sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0",
+ "@babel/plugin-syntax-async-generators": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz",
+ "integrity": "sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz",
+ "integrity": "sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz",
+ "integrity": "sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz",
+ "integrity": "sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.2.0"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz",
+ "integrity": "sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz",
+ "integrity": "sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz",
+ "integrity": "sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz",
+ "integrity": "sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz",
+ "integrity": "sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz",
+ "integrity": "sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz",
+ "integrity": "sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.1.5.tgz",
+ "integrity": "sha512-jlYcDrz+5ayWC7mxgpn1Wj8zj0mmjCT2w0mPIMSwO926eXBRxpEgoN/uQVRBfjtr8ayjcmS+xk2G1jaP8JjMJQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz",
+ "integrity": "sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-define-map": "^7.1.0",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "11.9.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz",
+ "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz",
+ "integrity": "sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz",
+ "integrity": "sha512-Mb9M4DGIOspH1ExHOUnn2UUXFOyVTiX84fXCd+6B5iWrQg/QMeeRmSwpZ9lnjYLSXtZwiw80ytVMr3zue0ucYw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz",
+ "integrity": "sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz",
+ "integrity": "sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz",
+ "integrity": "sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz",
+ "integrity": "sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz",
+ "integrity": "sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz",
+ "integrity": "sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz",
+ "integrity": "sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz",
+ "integrity": "sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.1.3.tgz",
+ "integrity": "sha512-PvTxgjxQAq4pvVUZF3mD5gEtVDuId8NtWkJsZLEJZMZAW3TvgQl1pmydLLN1bM8huHFVVU43lf0uvjQj9FRkKw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz",
+ "integrity": "sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
+ "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz",
+ "integrity": "sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz",
+ "integrity": "sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "^7.1.0",
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz",
+ "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.13.3"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz",
+ "integrity": "sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz",
+ "integrity": "sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz",
+ "integrity": "sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz",
+ "integrity": "sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz",
+ "integrity": "sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz",
+ "integrity": "sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.6.tgz",
+ "integrity": "sha512-YIBfpJNQMBkb6MCkjz/A9J76SNCSuGVamOVBgoUkLzpJD/z8ghHi9I42LQ4pulVX68N/MmImz6ZTixt7Azgexw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.1.0",
+ "@babel/plugin-proposal-json-strings": "^7.0.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.0.0",
+ "@babel/plugin-syntax-async-generators": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.0.0",
+ "@babel/plugin-transform-arrow-functions": "^7.0.0",
+ "@babel/plugin-transform-async-to-generator": "^7.1.0",
+ "@babel/plugin-transform-block-scoped-functions": "^7.0.0",
+ "@babel/plugin-transform-block-scoping": "^7.1.5",
+ "@babel/plugin-transform-classes": "^7.1.0",
+ "@babel/plugin-transform-computed-properties": "^7.0.0",
+ "@babel/plugin-transform-destructuring": "^7.0.0",
+ "@babel/plugin-transform-dotall-regex": "^7.0.0",
+ "@babel/plugin-transform-duplicate-keys": "^7.0.0",
+ "@babel/plugin-transform-exponentiation-operator": "^7.1.0",
+ "@babel/plugin-transform-for-of": "^7.0.0",
+ "@babel/plugin-transform-function-name": "^7.1.0",
+ "@babel/plugin-transform-literals": "^7.0.0",
+ "@babel/plugin-transform-modules-amd": "^7.1.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.1.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.0.0",
+ "@babel/plugin-transform-modules-umd": "^7.1.0",
+ "@babel/plugin-transform-new-target": "^7.0.0",
+ "@babel/plugin-transform-object-super": "^7.1.0",
+ "@babel/plugin-transform-parameters": "^7.1.0",
+ "@babel/plugin-transform-regenerator": "^7.0.0",
+ "@babel/plugin-transform-shorthand-properties": "^7.0.0",
+ "@babel/plugin-transform-spread": "^7.0.0",
+ "@babel/plugin-transform-sticky-regex": "^7.0.0",
+ "@babel/plugin-transform-template-literals": "^7.0.0",
+ "@babel/plugin-transform-typeof-symbol": "^7.0.0",
+ "@babel/plugin-transform-unicode-regex": "^7.0.0",
+ "browserslist": "^4.1.0",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.3.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz",
+ "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.1.2",
+ "@babel/types": "^7.1.2"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.6.tgz",
+ "integrity": "sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.1.6",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/parser": "^7.1.6",
+ "@babel/types": "^7.1.6",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.10"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
+ "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "globals": {
+ "version": "11.9.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz",
+ "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.6.tgz",
+ "integrity": "sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.10",
+ "to-fast-properties": "^2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.39",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "10.12.11",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.11.tgz",
+ "integrity": "sha512-3iIOhNiPGTdcUNVCv9e5G7GotfvJJe2pc9w2UgDXlUwnxSZ3RgcUocIU+xYm+rTU54jIKih998QE4dMOyMN1NQ==",
+ "dev": true
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
+ "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/wast-parser": "1.7.11"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
+ "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
+ "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
+ "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
+ "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.7.11"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
+ "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
+ "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
+ "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
+ "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-buffer": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/wasm-gen": "1.7.11"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
+ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
+ "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
+ "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
+ "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-buffer": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/helper-wasm-section": "1.7.11",
+ "@webassemblyjs/wasm-gen": "1.7.11",
+ "@webassemblyjs/wasm-opt": "1.7.11",
+ "@webassemblyjs/wasm-parser": "1.7.11",
+ "@webassemblyjs/wast-printer": "1.7.11"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
+ "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/ieee754": "1.7.11",
+ "@webassemblyjs/leb128": "1.7.11",
+ "@webassemblyjs/utf8": "1.7.11"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
+ "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-buffer": "1.7.11",
+ "@webassemblyjs/wasm-gen": "1.7.11",
+ "@webassemblyjs/wasm-parser": "1.7.11"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
+ "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-api-error": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/ieee754": "1.7.11",
+ "@webassemblyjs/leb128": "1.7.11",
+ "@webassemblyjs/utf8": "1.7.11"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
+ "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/floating-point-hex-parser": "1.7.11",
+ "@webassemblyjs/helper-api-error": "1.7.11",
+ "@webassemblyjs/helper-code-frame": "1.7.11",
+ "@webassemblyjs/helper-fsm": "1.7.11",
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
+ "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/wast-parser": "1.7.11",
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "@xtuc/long": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
+ "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
+ "dev": true
+ },
+ "abab": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
+ "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "acorn-dynamic-import": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
+ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0"
+ }
+ },
+ "acorn-globals": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
+ "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.1",
+ "acorn-walk": "^6.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
+ "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+ "dev": true
+ },
+ "acorn-walk": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
+ "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz",
+ "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
+ "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
+ "dev": true
+ },
+ "ajv-keywords": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "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==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "append-transform": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+ "dev": true,
+ "requires": {
+ "default-require-extensions": "^1.0.0"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-equal": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "babel-core": {
+ "version": "7.0.0-bridge.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+ "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
+ "dev": true
+ },
+ "babel-eslint": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz",
+ "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.0.0",
+ "@babel/traverse": "^7.0.0",
+ "@babel/types": "^7.0.0",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "^1.0.0"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-jest": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz",
+ "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-istanbul": "^4.1.6",
+ "babel-preset-jest": "^23.2.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "4.1.6",
+ "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
+ "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0",
+ "find-up": "^2.1.0",
+ "istanbul-lib-instrument": "^1.10.1",
+ "test-exclude": "^4.2.1"
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz",
+ "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=",
+ "dev": true
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+ "dev": true
+ },
+ "babel-preset-jest": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz",
+ "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-jest-hoist": "^23.2.0",
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ },
+ "dependencies": {
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+ "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-process-hrtime": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
+ "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==",
+ "dev": true
+ },
+ "browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ }
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "browserslist": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.5.tgz",
+ "integrity": "sha512-z9ZhGc3d9e/sJ9dIx5NFXkKoaiQTnrvrMsN3R1fGb1tkWWNSz12UewJn9TNxGo1l7J23h0MRaPmk7jfeTZYs1w==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30000912",
+ "electron-to-chromium": "^1.3.86",
+ "node-releases": "^1.0.5"
+ }
+ },
+ "bser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz",
+ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=",
+ "dev": true,
+ "requires": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "11.3.1",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz",
+ "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.1",
+ "chownr": "^1.0.1",
+ "figgy-pudding": "^3.1.0",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.1.11",
+ "lru-cache": "^4.1.3",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.2",
+ "ssri": "^6.0.0",
+ "unique-filename": "^1.1.0",
+ "y18n": "^4.0.0"
+ },
+ "dependencies": {
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "^0.2.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ }
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000912",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000912.tgz",
+ "integrity": "sha512-M3zAtV36U+xw5mMROlTXpAHClmPAor6GPKAMD5Yi7glCB5sbMPFtnQ3rGpk4XqPdUrrTIaVYSJZxREZWNy8QJg==",
+ "dev": true
+ },
+ "capture-exit": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz",
+ "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=",
+ "dev": true,
+ "requires": {
+ "rsvp": "^3.3.3"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.0",
+ "braces": "^2.3.0",
+ "fsevents": "^1.2.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "lodash.debounce": "^4.0.8",
+ "normalize-path": "^2.1.1",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0",
+ "upath": "^1.0.5"
+ },
+ "dependencies": {
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
+ "dev": true
+ },
+ "chrome-trace-event": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
+ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.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
+ },
+ "combined-stream": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "cssom": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
+ "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz",
+ "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
+ "dev": true,
+ "requires": {
+ "cssom": "0.3.x"
+ }
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "data-urls": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
+ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "whatwg-mimetype": "^2.2.0",
+ "whatwg-url": "^7.0.0"
+ },
+ "dependencies": {
+ "whatwg-url": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
+ "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ }
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "default-require-extensions": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+ "dev": true,
+ "requires": {
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "dev": true
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "domexception": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+ "dev": true,
+ "requires": {
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
+ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.86",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.86.tgz",
+ "integrity": "sha512-BcmXOu37FCPxrrh0wyKgKi5dAjIu2ohxN5ptapkLPKRC3IBK2NeIwh9n1x/8HzSRQiEKamJkDce1ZgOGgEX9iw==",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "tapable": "^1.0.0"
+ }
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
+ "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
+ "dev": true,
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "eslint": {
+ "version": "5.9.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz",
+ "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.5.3",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^4.0.0",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^4.0.0",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.1.0",
+ "is-resolvable": "^1.1.0",
+ "js-yaml": "^3.12.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.5",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^5.0.2",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
+ "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "globals": {
+ "version": "11.9.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz",
+ "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
+ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
+ "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
+ "dev": true
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
+ "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.2",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
+ "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
+ "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "exec-sh": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
+ "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==",
+ "dev": true,
+ "requires": {
+ "merge": "^1.2.0"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "expect": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz",
+ "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "jest-diff": "^23.6.0",
+ "jest-get-type": "^22.1.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fb-watchman": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
+ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
+ "dev": true,
+ "requires": {
+ "bser": "^2.0.0"
+ }
+ },
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+ "dev": true
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fileset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
+ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.3",
+ "minimatch": "^3.0.3"
+ }
+ },
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
+ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^1.0.0",
+ "pkg-dir": "^3.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
+ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ }
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
+ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.4"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
+ "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "optional": 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"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz",
+ "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz",
+ "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
+ "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz",
+ "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz",
+ "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz",
+ "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==",
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz",
+ "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz",
+ "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz",
+ "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
+ "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=",
+ "dev": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "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"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "dev": true
+ },
+ "gzip-size": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz",
+ "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1",
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "handlebars": {
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
+ "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.5.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "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==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^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=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "html-encoding-sniffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+ "dev": true,
+ "requires": {
+ "whatwg-encoding": "^1.0.1"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+ "dev": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "import-local": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
+ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^2.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz",
+ "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.0",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.10",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.1.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+ "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+ "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.0.0"
+ }
+ }
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.5.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-generator-fn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz",
+ "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istanbul-api": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz",
+ "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.1.4",
+ "fileset": "^2.0.2",
+ "istanbul-lib-coverage": "^1.2.1",
+ "istanbul-lib-hook": "^1.2.2",
+ "istanbul-lib-instrument": "^1.10.2",
+ "istanbul-lib-report": "^1.1.5",
+ "istanbul-lib-source-maps": "^1.2.6",
+ "istanbul-reports": "^1.5.1",
+ "js-yaml": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "once": "^1.4.0"
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
+ "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==",
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz",
+ "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==",
+ "dev": true,
+ "requires": {
+ "append-transform": "^0.4.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
+ "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==",
+ "dev": true,
+ "requires": {
+ "babel-generator": "^6.18.0",
+ "babel-template": "^6.16.0",
+ "babel-traverse": "^6.18.0",
+ "babel-types": "^6.18.0",
+ "babylon": "^6.18.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "semver": "^5.3.0"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz",
+ "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "path-parse": "^1.0.5",
+ "supports-color": "^3.1.2"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz",
+ "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.6.1",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz",
+ "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==",
+ "dev": true,
+ "requires": {
+ "handlebars": "^4.0.3"
+ }
+ },
+ "jest": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz",
+ "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==",
+ "dev": true,
+ "requires": {
+ "import-local": "^1.0.0",
+ "jest-cli": "^23.6.0"
+ },
+ "dependencies": {
+ "jest-cli": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz",
+ "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.1.11",
+ "import-local": "^1.0.0",
+ "is-ci": "^1.0.10",
+ "istanbul-api": "^1.3.1",
+ "istanbul-lib-coverage": "^1.2.0",
+ "istanbul-lib-instrument": "^1.10.1",
+ "istanbul-lib-source-maps": "^1.2.4",
+ "jest-changed-files": "^23.4.2",
+ "jest-config": "^23.6.0",
+ "jest-environment-jsdom": "^23.4.0",
+ "jest-get-type": "^22.1.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve-dependencies": "^23.6.0",
+ "jest-runner": "^23.6.0",
+ "jest-runtime": "^23.6.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "jest-watcher": "^23.4.0",
+ "jest-worker": "^23.2.0",
+ "micromatch": "^2.3.11",
+ "node-notifier": "^5.2.1",
+ "prompts": "^0.1.9",
+ "realpath-native": "^1.0.0",
+ "rimraf": "^2.5.4",
+ "slash": "^1.0.0",
+ "string-length": "^2.0.0",
+ "strip-ansi": "^4.0.0",
+ "which": "^1.2.12",
+ "yargs": "^11.0.0"
+ }
+ }
+ }
+ },
+ "jest-changed-files": {
+ "version": "23.4.2",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz",
+ "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==",
+ "dev": true,
+ "requires": {
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-config": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz",
+ "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.0.0",
+ "babel-jest": "^23.6.0",
+ "chalk": "^2.0.1",
+ "glob": "^7.1.1",
+ "jest-environment-jsdom": "^23.4.0",
+ "jest-environment-node": "^23.4.0",
+ "jest-get-type": "^22.1.0",
+ "jest-jasmine2": "^23.6.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "micromatch": "^2.3.11",
+ "pretty-format": "^23.6.0"
+ },
+ "dependencies": {
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ }
+ }
+ },
+ "jest-diff": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz",
+ "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "diff": "^3.2.0",
+ "jest-get-type": "^22.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-docblock": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz",
+ "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=",
+ "dev": true,
+ "requires": {
+ "detect-newline": "^2.1.0"
+ }
+ },
+ "jest-each": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz",
+ "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-environment-jsdom": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz",
+ "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=",
+ "dev": true,
+ "requires": {
+ "jest-mock": "^23.2.0",
+ "jest-util": "^23.4.0",
+ "jsdom": "^11.5.1"
+ }
+ },
+ "jest-environment-node": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz",
+ "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=",
+ "dev": true,
+ "requires": {
+ "jest-mock": "^23.2.0",
+ "jest-util": "^23.4.0"
+ }
+ },
+ "jest-get-type": {
+ "version": "22.4.3",
+ "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+ "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
+ "dev": true
+ },
+ "jest-haste-map": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz",
+ "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==",
+ "dev": true,
+ "requires": {
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "invariant": "^2.2.4",
+ "jest-docblock": "^23.2.0",
+ "jest-serializer": "^23.0.1",
+ "jest-worker": "^23.2.0",
+ "micromatch": "^2.3.11",
+ "sane": "^2.0.0"
+ }
+ },
+ "jest-jasmine2": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz",
+ "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==",
+ "dev": true,
+ "requires": {
+ "babel-traverse": "^6.0.0",
+ "chalk": "^2.0.1",
+ "co": "^4.6.0",
+ "expect": "^23.6.0",
+ "is-generator-fn": "^1.0.0",
+ "jest-diff": "^23.6.0",
+ "jest-each": "^23.6.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-leak-detector": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz",
+ "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==",
+ "dev": true,
+ "requires": {
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz",
+ "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-message-util": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz",
+ "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0-beta.35",
+ "chalk": "^2.0.1",
+ "micromatch": "^2.3.11",
+ "slash": "^1.0.0",
+ "stack-utils": "^1.0.1"
+ }
+ },
+ "jest-mock": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz",
+ "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=",
+ "dev": true
+ },
+ "jest-regex-util": {
+ "version": "23.3.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz",
+ "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=",
+ "dev": true
+ },
+ "jest-resolve": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz",
+ "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==",
+ "dev": true,
+ "requires": {
+ "browser-resolve": "^1.11.3",
+ "chalk": "^2.0.1",
+ "realpath-native": "^1.0.0"
+ }
+ },
+ "jest-resolve-dependencies": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz",
+ "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==",
+ "dev": true,
+ "requires": {
+ "jest-regex-util": "^23.3.0",
+ "jest-snapshot": "^23.6.0"
+ }
+ },
+ "jest-runner": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz",
+ "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==",
+ "dev": true,
+ "requires": {
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.1.11",
+ "jest-config": "^23.6.0",
+ "jest-docblock": "^23.2.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-jasmine2": "^23.6.0",
+ "jest-leak-detector": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-runtime": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-worker": "^23.2.0",
+ "source-map-support": "^0.5.6",
+ "throat": "^4.0.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
+ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ }
+ }
+ },
+ "jest-runtime": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz",
+ "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.0.0",
+ "babel-plugin-istanbul": "^4.1.6",
+ "chalk": "^2.0.1",
+ "convert-source-map": "^1.4.0",
+ "exit": "^0.1.2",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "jest-config": "^23.6.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve": "^23.6.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "micromatch": "^2.3.11",
+ "realpath-native": "^1.0.0",
+ "slash": "^1.0.0",
+ "strip-bom": "3.0.0",
+ "write-file-atomic": "^2.1.0",
+ "yargs": "^11.0.0"
+ },
+ "dependencies": {
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "jest-serializer": {
+ "version": "23.0.1",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz",
+ "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=",
+ "dev": true
+ },
+ "jest-snapshot": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz",
+ "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==",
+ "dev": true,
+ "requires": {
+ "babel-types": "^6.0.0",
+ "chalk": "^2.0.1",
+ "jest-diff": "^23.6.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-resolve": "^23.6.0",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^23.6.0",
+ "semver": "^5.5.0"
+ }
+ },
+ "jest-util": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz",
+ "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.11",
+ "is-ci": "^1.0.10",
+ "jest-message-util": "^23.4.0",
+ "mkdirp": "^0.5.1",
+ "slash": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "jest-validate": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz",
+ "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "leven": "^2.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-watcher": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz",
+ "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "string-length": "^2.0.0"
+ }
+ },
+ "jest-worker": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz",
+ "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=",
+ "dev": true,
+ "requires": {
+ "merge-stream": "^1.0.1"
+ }
+ },
+ "js-levenshtein": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz",
+ "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsdom": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
+ "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "acorn": "^5.5.3",
+ "acorn-globals": "^4.1.0",
+ "array-equal": "^1.0.0",
+ "cssom": ">= 0.3.2 < 0.4.0",
+ "cssstyle": "^1.0.0",
+ "data-urls": "^1.0.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.9.1",
+ "html-encoding-sniffer": "^1.0.2",
+ "left-pad": "^1.3.0",
+ "nwsapi": "^2.0.7",
+ "parse5": "4.0.0",
+ "pn": "^1.1.0",
+ "request": "^2.87.0",
+ "request-promise-native": "^1.0.5",
+ "sax": "^1.2.4",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.3.4",
+ "w3c-hr-time": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.3",
+ "whatwg-mimetype": "^2.1.0",
+ "whatwg-url": "^6.4.1",
+ "ws": "^5.2.0",
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "kleur": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz",
+ "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "left-pad": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
+ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
+ "dev": true
+ },
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
+ "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "dev": true,
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "magic-string": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz",
+ "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==",
+ "dev": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.1"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "dev": true,
+ "requires": {
+ "tmpl": "1.0.x"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "math-random": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+ "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "merge": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
+ "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.37.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+ "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.21",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.37.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.11.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
+ "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
+ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+ "dev": true
+ },
+ "node-libs-browser": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
+ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+ "dev": true,
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^1.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.0",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.10.3",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "node-notifier": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz",
+ "integrity": "sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==",
+ "dev": true,
+ "requires": {
+ "growly": "^1.3.0",
+ "semver": "^5.5.0",
+ "shellwords": "^0.1.1",
+ "which": "^1.3.0"
+ }
+ },
+ "node-releases": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.5.tgz",
+ "integrity": "sha512-Ky7q0BO1BBkG/rQz6PkEZ59rwo+aSfhczHP1wwq8IowoVdN/FpiP7qp0XW0P2+BVCWe5fQUBozdbVd54q1RbCQ==",
+ "dev": true,
+ "requires": {
+ "semver": "^5.3.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nwsapi": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
+ "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz",
+ "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==",
+ "dev": true
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "dev": true,
+ "requires": {
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.1",
+ "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "pn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz",
+ "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0",
+ "ansi-styles": "^3.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ }
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz",
+ "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==",
+ "dev": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "prompts": {
+ "version": "0.1.14",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz",
+ "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==",
+ "dev": true,
+ "requires": {
+ "kleur": "^2.0.1",
+ "sisteransi": "^0.1.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "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
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "realpath-native": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz",
+ "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==",
+ "dev": true,
+ "requires": {
+ "util.promisify": "^1.0.0"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz",
+ "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz",
+ "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==",
+ "dev": true,
+ "requires": {
+ "private": "^0.1.6"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.2.0.tgz",
+ "integrity": "sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^7.0.0",
+ "regjsgen": "^0.4.0",
+ "regjsparser": "^0.3.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.0.2"
+ }
+ },
+ "regjsgen": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.4.0.tgz",
+ "integrity": "sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.3.0.tgz",
+ "integrity": "sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ }
+ }
+ },
+ "request-promise-core": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
+ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.13.1"
+ }
+ },
+ "request-promise-native": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
+ "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
+ "dev": true,
+ "requires": {
+ "request-promise-core": "1.1.1",
+ "stealthy-require": "^1.1.0",
+ "tough-cookie": ">=2.3.3"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "rollup": {
+ "version": "0.67.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.67.3.tgz",
+ "integrity": "sha512-TyNQCz97rKuVVbsKUTXfwIjV7UljWyTVd7cTMuE+aqlQ7WJslkYF5QaYGjMLR2BlQtUOO5CAxSVnpQ55iYp5jg==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "0.0.39",
+ "@types/node": "*"
+ }
+ },
+ "rollup-plugin-replace": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.1.0.tgz",
+ "integrity": "sha512-SxrAIgpH/B5/W4SeULgreOemxcpEgKs2gcD42zXw50bhqGWmcnlXneVInQpAqzA/cIly4bJrOpeelmB9p4YXSQ==",
+ "dev": true,
+ "requires": {
+ "magic-string": "^0.25.1",
+ "minimatch": "^3.0.2",
+ "rollup-pluginutils": "^2.0.1"
+ }
+ },
+ "rollup-plugin-size-snapshot": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-size-snapshot/-/rollup-plugin-size-snapshot-0.7.0.tgz",
+ "integrity": "sha512-wlFRHInOfJZbXHWA4rftymqHuVDCeKUhJF3vuBZuU5y+O0LAj6RQM7vGn2/UoLImENFci31ff3pnKjW36DDP2A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.1",
+ "bytes": "^3.0.0",
+ "chalk": "^2.4.1",
+ "gzip-size": "^5.0.0",
+ "jest-diff": "^23.6.0",
+ "memory-fs": "^0.4.1",
+ "rollup-plugin-replace": "^2.0.0",
+ "terser": "^3.8.2",
+ "webpack": "^4.19.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
+ "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==",
+ "dev": true
+ }
+ }
+ },
+ "rollup-plugin-uglify": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.0.tgz",
+ "integrity": "sha512-XtzZd159QuOaXNvcxyBcbUCSoBsv5YYWK+7ZwUyujSmISst8avRfjWlp7cGu8T2O52OJnpEBvl+D4WLV1k1iQQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "jest-worker": "^23.2.0",
+ "serialize-javascript": "^1.5.0",
+ "uglify-js": "^3.4.9"
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz",
+ "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^0.5.2",
+ "micromatch": "^2.3.11"
+ }
+ },
+ "rsvp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
+ "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
+ "dev": true
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "rxjs": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+ "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "sane": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz",
+ "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "capture-exit": "^1.2.0",
+ "exec-sh": "^0.2.0",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^1.2.3",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5",
+ "watch": "~0.18.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ },
+ "serialize-javascript": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
+ "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "sisteransi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz",
+ "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz",
+ "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "sourcemap-codec": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz",
+ "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
+ "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz",
+ "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
+ "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "dev": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "stack-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
+ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "string-length": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
+ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
+ "dev": true,
+ "requires": {
+ "astral-regex": "^1.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "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"
+ }
+ },
+ "symbol-tree": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
+ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+ "dev": true
+ },
+ "table": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.1.1.tgz",
+ "integrity": "sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.6.1",
+ "lodash": "^4.17.11",
+ "slice-ansi": "2.0.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "tapable": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
+ "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
+ "dev": true
+ },
+ "terser": {
+ "version": "3.10.13",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.13.tgz",
+ "integrity": "sha512-AgdHqw2leuADuHiP4Kkk1i40m10RMGguPaiCw6MVD6jtDR7N94zohGqAS2lkDXIS7eIkGit3ief3eQGh/Md+GQ==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.6"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
+ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ }
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz",
+ "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==",
+ "dev": true,
+ "requires": {
+ "cacache": "^11.0.2",
+ "find-cache-dir": "^2.0.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^1.4.0",
+ "source-map": "^0.6.1",
+ "terser": "^3.8.1",
+ "webpack-sources": "^1.1.0",
+ "worker-farm": "^1.5.2"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz",
+ "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "micromatch": "^2.3.11",
+ "object-assign": "^4.1.0",
+ "read-pkg-up": "^1.0.1",
+ "require-main-filename": "^1.0.1"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "throat": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
+ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "timers-browserify": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
+ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+ "dev": true,
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
+ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
+ "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dev": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
+ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "w3c-hr-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
+ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
+ "dev": true,
+ "requires": {
+ "browser-process-hrtime": "^0.1.2"
+ }
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.x"
+ }
+ },
+ "watch": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz",
+ "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=",
+ "dev": true,
+ "requires": {
+ "exec-sh": "^0.2.0",
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "watchpack": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webpack": {
+ "version": "4.26.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.26.1.tgz",
+ "integrity": "sha512-i2oOvEvuvLLSuSCkdVrknaxAhtUZ9g+nLSoHCWV0gDzqGX2DXaCrMmMUpbRsTSSLrUqAI56PoEiyMUZIZ1msug==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-module-context": "1.7.11",
+ "@webassemblyjs/wasm-edit": "1.7.11",
+ "@webassemblyjs/wasm-parser": "1.7.11",
+ "acorn": "^5.6.2",
+ "acorn-dynamic-import": "^3.0.0",
+ "ajv": "^6.1.0",
+ "ajv-keywords": "^3.1.0",
+ "chrome-trace-event": "^1.0.0",
+ "enhanced-resolve": "^4.1.0",
+ "eslint-scope": "^4.0.0",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.3.0",
+ "loader-utils": "^1.1.0",
+ "memory-fs": "~0.4.1",
+ "micromatch": "^3.1.8",
+ "mkdirp": "~0.5.0",
+ "neo-async": "^2.5.0",
+ "node-libs-browser": "^2.0.0",
+ "schema-utils": "^0.4.4",
+ "tapable": "^1.1.0",
+ "terser-webpack-plugin": "^1.1.0",
+ "watchpack": "^1.5.0",
+ "webpack-sources": "^1.3.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "webpack-sources": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
+ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "whatwg-encoding": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.4.24"
+ }
+ },
+ "whatwg-mimetype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
+ "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ },
+ "worker-farm": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
+ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
+ "dev": true,
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xml-name-validator": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "11.1.0",
+ "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
+ "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^9.0.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
+ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/value-equal/package.json b/value-equal/package.json
new file mode 100644
index 0000000..cc9cc7f
--- /dev/null
+++ b/value-equal/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "value-equal",
+ "version": "1.0.1",
+ "description": "Are these two JavaScript values equal?",
+ "repository": "mjackson/value-equal",
+ "license": "MIT",
+ "author": "Michael Jackson",
+ "files": [
+ "cjs",
+ "esm",
+ "index.js",
+ "umd"
+ ],
+ "main": "index.js",
+ "module": "esm/value-equal.js",
+ "unpkg": "umd/value-equal.js",
+ "scripts": {
+ "build": "rollup -c",
+ "clean": "git clean -fdX .",
+ "lint": "eslint modules",
+ "prepublishOnly": "npm run build",
+ "test": "jest"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.1.6",
+ "@babel/preset-env": "^7.1.6",
+ "babel-core": "^7.0.0-bridge.0",
+ "babel-eslint": "^10.0.1",
+ "babel-jest": "^23.6.0",
+ "eslint": "^5.9.0",
+ "jest": "^23.6.0",
+ "rollup": "^0.67.3",
+ "rollup-plugin-replace": "^2.1.0",
+ "rollup-plugin-size-snapshot": "^0.7.0",
+ "rollup-plugin-uglify": "^6.0.0"
+ }
+}
diff --git a/value-equal/rollup.config.js b/value-equal/rollup.config.js
new file mode 100644
index 0000000..82881a6
--- /dev/null
+++ b/value-equal/rollup.config.js
@@ -0,0 +1,71 @@
+import replace from 'rollup-plugin-replace';
+import { sizeSnapshot } from 'rollup-plugin-size-snapshot';
+import { uglify } from 'rollup-plugin-uglify';
+
+import pkg from './package.json';
+
+const input = './modules/index.js';
+const globalName = 'valueEqual';
+
+const cjs = [
+ {
+ input,
+ output: { file: `cjs/${pkg.name}.js`, format: 'cjs' },
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify('development') })
+ ]
+ },
+ {
+ input,
+ output: { file: `cjs/${pkg.name}.min.js`, format: 'cjs' },
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify('production') }),
+ uglify()
+ ]
+ }
+];
+
+const esm = [
+ {
+ input,
+ output: { file: `esm/${pkg.name}.js`, format: 'esm' },
+ plugins: [sizeSnapshot()]
+ }
+];
+
+const umd = [
+ {
+ input,
+ output: { file: `umd/${pkg.name}.js`, format: 'umd', name: globalName },
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify('development') }),
+ sizeSnapshot()
+ ]
+ },
+ {
+ input,
+ output: { file: `umd/${pkg.name}.min.js`, format: 'umd', name: globalName },
+ plugins: [
+ replace({ 'process.env.NODE_ENV': JSON.stringify('production') }),
+ sizeSnapshot(),
+ uglify()
+ ]
+ }
+];
+
+let config;
+switch (process.env.BUILD_ENV) {
+ case 'cjs':
+ config = cjs;
+ break;
+ case 'esm':
+ config = esm;
+ break;
+ case 'umd':
+ config = umd;
+ break;
+ default:
+ config = cjs.concat(esm).concat(umd);
+}
+
+export default config;